qd-2.3.11/0000755000175000017500000000000011431215437012453 5ustar prudhommprudhommqd-2.3.11/qd-config.in0000644000175000017500000000512111202062041014634 0ustar prudhommprudhomm#!/bin/sh # @configure_input@ prefix="@prefix@" exec_prefix="@exec_prefix@" includedir="@includedir@" libdir="@libdir@" bindir="@bindir@" datadir="@datarootdir@" mandir="@mandir@" sysconfdir="@sysconfdir@" sharedstatedir="@sharedstatedir@" srcdir="@abs_top_srcdir@" builddir="@abs_top_builddir@" build_CXXFLAGS="@CXXFLAGS@" build_LDFLAGS="@LDFLAGS@" CXX="@CXX@" CXXFLAGS="-I$includedir @REQ_CXXFLAGS@" FC="@FC@" LDFLAGS="-L$libdir -lqd @LIBS@" STATICLDFLAGS="$libdir/libqd.a @LIBS@" LALDFLAGS="$libdir/libqd.la @LIBS@" SRC_LDFLAGS="$builddir/src/.libs/libqd.so @LIBS@" SRC_LALDFLAGS="$builddir/src/libqd.la @LIBS@" SRC_STATICLDFLAGS="$builddir/src/.libs/libqd.a @LIBS@" CFLAGS="@CPPFLAGS@ -I$includedir" SRC_CFLAGS="-I$srcdir/src -I$builddir/src @CPPFLAGS@" FCLIBS="-L$libdir -lqdmod -lqd @LIBS@ @FCLIBS@" FMAINLIB="-L$libdir -lqd_f_main" FCFLAGS="@REQ_FCFLAGS@" MODFLAG="@ax_f90_modflag@$libdir/qd" build="@BUILDER@-@BUILDDATE@" configure_args="@CONFIGURE_ARGS@" from_source=0 usage() { cat <&2 ;; esac shift done qd-2.3.11/fortran/0000755000175000017500000000000011431215437014126 5ustar prudhommprudhommqd-2.3.11/fortran/qdmod.f0000644000175000017500000014613411202062041015375 0ustar prudhommprudhomm! qdmod.f ! ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC03-76SF00098. ! ! Copyright (c) 2000-2008 ! ! Fortran-90 module file to use with quad-double numbers. ! ! Yozo Hida ! David H Bailey 2008-02-20 module qdmodule use ddmodule use qdext implicit none type qd_real sequence real*8 :: re(4) end type qd_real type qd_complex sequence real*8 :: cmp(8) end type qd_complex real*8 d_qd_eps parameter (d_qd_eps = 1.21543267145725d-63) type (qd_real) qd_one, qd_zero, qd_eps, qd_huge, qd_tiny parameter (qd_one = qd_real((/1.0d0, 0.0d0, 0.0d0, 0.0d0/))) parameter (qd_zero = qd_real((/0.0d0, 0.0d0, 0.0d0, 0.0d0/))) parameter (qd_eps = qd_real((/d_qd_eps, 0.0d0, 0.0d0, 0.0d0/))) parameter (qd_huge = qd_real((/ & 1.79769313486231570815d+308, 9.97920154767359795037d+291, & 5.53956966280111259858d+275, 3.07507889307840487279d+259/))) parameter (qd_tiny = qd_real((/3.25194908739046463067d-260, & 0.0d0, 0.0d0, 0.0d0/))) interface assignment (=) module procedure assign_qd_str module procedure assign_qd module procedure assign_qd_d module procedure assign_d_qd module procedure assign_dd_qd module procedure assign_qd_dd module procedure assign_qd_i module procedure assign_i_qd module procedure assign_qdc module procedure assign_qdc_qd module procedure assign_qd_qdc module procedure assign_qdc_d module procedure assign_qdc_i module procedure assign_d_qdc module procedure assign_qdc_dc module procedure assign_dc_qdc end interface interface operator (+) module procedure add_qd module procedure add_qd_d module procedure add_d_qd module procedure add_qd_i module procedure add_i_qd module procedure add_qdc module procedure add_qdc_qd module procedure add_qd_qdc module procedure add_qdc_d module procedure add_d_qdc end interface interface operator (-) module procedure sub_qd module procedure sub_qd_d module procedure sub_d_qd module procedure neg_qd module procedure sub_qdc module procedure sub_qdc_qd module procedure sub_qd_qdc module procedure sub_qdc_d module procedure sub_d_qdc module procedure neg_qdc end interface interface operator (*) module procedure mul_qd module procedure mul_qd_d module procedure mul_d_qd module procedure mul_qd_i module procedure mul_i_qd module procedure mul_qdc module procedure mul_qdc_qd module procedure mul_qd_qdc module procedure mul_qdc_d module procedure mul_d_qdc module procedure mul_i_qdc module procedure mul_qdc_i end interface interface operator (/) module procedure div_qd module procedure div_qd_d module procedure div_d_qd module procedure div_qd_i module procedure div_i_qd module procedure div_qdc module procedure div_qdc_qd module procedure div_qd_qdc module procedure div_qdc_d end interface interface operator (**) module procedure pwr_qd module procedure pwr_qd_i module procedure pwr_d_qd module procedure pwr_qdc_i end interface interface qdreal module procedure to_qd_i module procedure to_qd_d module procedure to_qd_dd module procedure to_qd_qd module procedure to_qd_str module procedure to_qd_qdc end interface interface ddreal module procedure to_dd_qd end interface interface real module procedure to_d_qd module procedure to_qd_qdc end interface interface qdcomplex module procedure to_qdc_qd module procedure to_qdc_qd2 module procedure to_qdc_d module procedure to_qdc_dc end interface interface int module procedure to_int_qd end interface interface sin module procedure qdsin end interface interface cos module procedure qdcos end interface interface tan module procedure qdtan end interface interface sincos module procedure qdsincos end interface interface asin module procedure qdasin end interface interface acos module procedure qdacos end interface interface atan module procedure qdatan end interface interface atan2 module procedure qdatan2 end interface interface exp module procedure qdexp module procedure qdcexp end interface interface log module procedure qdlog module procedure qdclog end interface interface log10 module procedure qdlog10 end interface interface sqrt module procedure qdsqrt end interface interface sqr module procedure qdsqr end interface interface nroot module procedure qdnroot end interface interface sinh module procedure qdsinh end interface interface cosh module procedure qdcosh end interface interface tanh module procedure qdtanh end interface interface sincosh module procedure qdsincosh end interface interface asinh module procedure qdasinh end interface interface acosh module procedure qdacosh end interface interface atanh module procedure qdatanh end interface interface aint module procedure qdaint end interface interface nint module procedure qdnint end interface interface anint module procedure qdanint end interface interface abs module procedure qdabs module procedure qdcabs end interface interface sign module procedure qdsign module procedure qdsign_dd_d end interface interface random_number module procedure qdrand end interface interface aimag module procedure qd_aimag end interface interface operator (==) module procedure eq_qd module procedure eq_qd_d module procedure eq_d_qd module procedure eq_qd_i module procedure eq_i_qd module procedure eq_qdc module procedure eq_qdc_qd module procedure eq_qd_qdc end interface interface operator (/=) module procedure ne_qd module procedure ne_qd_d module procedure ne_d_qd module procedure ne_qd_i module procedure ne_i_qd module procedure ne_qdc module procedure ne_qdc_qd module procedure ne_qd_qdc end interface interface operator (>) module procedure gt_qd module procedure gt_qd_d module procedure gt_d_qd module procedure gt_qd_i module procedure gt_i_qd end interface interface operator (<) module procedure lt_qd module procedure lt_qd_d module procedure lt_d_qd module procedure lt_qd_i module procedure lt_i_qd end interface interface operator (>=) module procedure ge_qd module procedure ge_qd_d module procedure ge_d_qd module procedure ge_qd_i module procedure ge_i_qd end interface interface operator (<=) module procedure le_qd module procedure le_qd_d module procedure le_d_qd module procedure le_qd_i module procedure le_i_qd end interface interface read_scalar module procedure qdinpq module procedure qdcinpq end interface interface write_scalar module procedure qdoutq module procedure qdcoutq end interface interface qdread module procedure qdinpq end interface interface qdwrite module procedure qdoutq end interface interface qdcread module procedure qdcinpq end interface interface qdcwrite module procedure qdcoutq end interface interface dble module procedure to_d_qd module procedure to_d_qdc end interface interface cmplx module procedure to_dc_qdc end interface interface conjg module procedure qdcconjg end interface interface min module procedure qdmin module procedure qdmin2 end interface interface max module procedure qdmax module procedure qdmax2 end interface interface mod module procedure qdmod end interface interface qdpi module procedure qd_pi end interface interface huge module procedure qdhuge end interface interface safe_huge module procedure qd_safe_huge end interface interface tiny module procedure qdtiny end interface interface epsilon module procedure qdepsilon end interface interface radix module procedure qd_radix end interface interface digits module procedure qd_digits end interface interface maxexponent module procedure qd_max_expn end interface interface minexponent module procedure qd_min_expn end interface interface precision module procedure qd_precision end interface interface range module procedure qd_range end interface interface nan module procedure qd_nan end interface contains ! Assignments subroutine assign_qd_str(a, s) type (qd_real), intent(inout) :: a character (len=*), intent(in) :: s character*80 t t = s call qdinpc (t, a%re) end subroutine assign_qd_str elemental subroutine assign_qd (a, b) type (qd_real), intent(inout) :: a type (qd_real), intent(in) :: b a%re = b%re end subroutine assign_qd elemental subroutine assign_qd_d(a, d) type (qd_real), intent(inout) :: a real*8, intent(in) :: d a%re(1) = d a%re(2:4) = 0.0d0 end subroutine assign_qd_d elemental subroutine assign_d_qd(d, a) real*8, intent(inout) :: d type (qd_real), intent(in) :: a d = a%re(1) end subroutine assign_d_qd elemental subroutine assign_qd_i(a, i) type (qd_real), intent(inout) :: a integer, intent(in) :: i a%re(1) = i a%re(2:4) = 0.0d0 end subroutine assign_qd_i elemental subroutine assign_i_qd(i, a) integer, intent(inout) :: i type (qd_real), intent(in) :: a i = a%re(1) end subroutine assign_i_qd elemental subroutine assign_dd_qd(dd, qd) type (dd_real), intent(inout) :: dd type (qd_real), intent(in) :: qd dd%re(1:2) = qd%re(1:2) end subroutine assign_dd_qd elemental subroutine assign_qd_dd(qd, dd) type (qd_real), intent(inout) :: qd type (dd_real), intent(in) :: dd qd%re(1:2) = dd%re qd%re(3:4) = 0.d0 end subroutine assign_qd_dd elemental subroutine assign_qdc (a, b) type (qd_complex), intent(inout) :: a type (qd_complex), intent(in) :: b a%cmp = b%cmp end subroutine assign_qdc elemental subroutine assign_qdc_qd (qdc, qd) type (qd_complex), intent (inout) :: qdc type (qd_real), intent(in) :: qd qdc%cmp(1:4) = qd%re qdc%cmp(5:8) = 0.d0 end subroutine assign_qdc_qd elemental subroutine assign_qd_qdc (qd, qdc) type (qd_real), intent (inout) :: qd type (qd_complex), intent(in) :: qdc qd%re = qdc%cmp(1:4) end subroutine assign_qd_qdc elemental subroutine assign_qdc_d (qdc, d) type (qd_complex), intent (inout) :: qdc real*8, intent(in) :: d qdc%cmp(1) = d qdc%cmp(2:8) = 0.d0 end subroutine assign_qdc_d elemental subroutine assign_qdc_i (qdc, i) type (qd_complex), intent (inout) :: qdc integer, intent(in) :: i qdc%cmp(1) = i qdc%cmp(2:8) = 0.d0 end subroutine assign_qdc_i elemental subroutine assign_d_qdc (d, qdc) real*8, intent(inout) :: d type (qd_complex), intent (in) :: qdc d = qdc%cmp(1) end subroutine assign_d_qdc elemental subroutine assign_qdc_dc (qdc, dc) type (qd_complex), intent (inout) :: qdc complex (kind (0.d0)), intent (in) :: dc qdc%cmp(1) = dble (dc) qdc%cmp(2:4) = 0.d0 qdc%cmp(5) = aimag (dc) qdc%cmp(6:8) = 0.d0 end subroutine assign_qdc_dc elemental subroutine assign_dc_qdc (dc, qdc) complex (kind (0.D0)), intent (inout) :: dc type (qd_complex), intent (in) :: qdc dc = cmplx (qdc%cmp(1), qdc%cmp(5), kind (0.d0)) end subroutine assign_dc_qdc ! Conversions elemental type (qd_real) function to_qd_i(ia) integer, intent(in) :: ia to_qd_i%re(1) = ia to_qd_i%re(2:4) = 0.d0 end function to_qd_i elemental type (qd_real) function to_qd_d(d) real*8, intent(in) :: d to_qd_d%re(1) = d to_qd_d%re(2:4) = 0.0d0 end function to_qd_d elemental real*8 function to_d_qd(qd) type (qd_real), intent(in) :: qd to_d_qd = qd%re(1) end function to_d_qd elemental integer function to_int_qd(a) type (qd_real), intent(in) :: a to_int_qd = a%re(1) end function to_int_qd elemental type (qd_real) function to_qd_dd (dd) type (dd_real), intent(in) :: dd to_qd_dd%re(1:2) = dd%re to_qd_dd%re(3:4) = 0.d0 end function to_qd_dd elemental type (qd_real) function to_qd_qd (qd) type (qd_real), intent(in) :: qd to_qd_qd%re = qd%re end function to_qd_qd elemental type (dd_real) function to_dd_qd (qd) type (qd_real), intent(in) :: qd to_dd_qd%re = qd%re(1:2) end function to_dd_qd type (qd_real) function to_qd_str(s) character (len=*), intent(in) :: s character*80 t t = s call qdinpc (t, to_qd_str%re) end function to_qd_str elemental type (qd_real) function to_qd_qdc(qdc) type (qd_complex), intent(in) :: qdc to_qd_qdc%re = qdc%cmp(1:4) end function to_qd_qdc elemental type (qd_complex) function to_qdc_qd(qd) type (qd_real), intent(in) :: qd to_qdc_qd%cmp(1:4) = qd%re to_qdc_qd%cmp(5:8) = 0.d0 end function to_qdc_qd elemental type (qd_complex) function to_qdc_qd2(x, y) type (qd_real), intent(in) :: x, y to_qdc_qd2%cmp(1:4) = x%re to_qdc_qd2%cmp(5:8) = y%re end function to_qdc_qd2 elemental type (qd_complex) function to_qdc_d(d) real*8, intent(in) :: d to_qdc_d%cmp(1) = d to_qdc_d%cmp(2:8) = 0.d0 end function to_qdc_d elemental complex (kind (0.D0)) function to_dc_qdc (qdc) type (qd_complex), intent (in) :: qdc to_dc_qdc = cmplx (qdc%cmp(1), qdc%cmp(5), kind (0.d0)) end function to_dc_qdc elemental type (qd_complex) function to_qdc_dc (dc) complex (kind (0.d0)), intent(in) :: dc to_qdc_dc%cmp(1) = dble (dc) to_qdc_dc%cmp(2:4) = 0.d0 to_qdc_dc%cmp(5) = aimag (dc) to_qdc_dc%cmp(6:8) = 0.d0 end function to_qdc_dc elemental real*8 function to_d_qdc(qdc) type (qd_complex), intent(in) :: qdc to_d_qdc = qdc%cmp(1) end function to_d_qdc ! Complex conjugation elemental type (qd_complex) function qdcconjg (qdc) type (qd_complex), intent(in) :: qdc qdcconjg%cmp(1:4) = qdc%cmp(1:4) qdcconjg%cmp(5:8) = -qdc%cmp(5:8) end function qdcconjg ! Additions elemental type (qd_real) function add_qd(a, b) type (qd_real), intent(in) :: a, b call f_qd_add(a%re, b%re, add_qd%re) end function add_qd elemental type (qd_real) function add_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b call f_qd_add_qd_d(a%re, b, add_qd_d%re) end function add_qd_d elemental type (qd_real) function add_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b add_d_qd = add_qd_d(b, a) end function add_d_qd elemental type (qd_real) function add_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b call f_qd_add_qd_d(a%re, dble(b), add_qd_i%re) end function add_qd_i elemental type (qd_real) function add_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b add_i_qd = add_qd_i(b, a) end function add_i_qd elemental type (qd_complex) function add_qdc(a, b) type (qd_complex), intent(in) :: a, b call f_qd_add (a%cmp(1:4), b%cmp(1:4), add_qdc%cmp(1:4)) call f_qd_add (a%cmp(5:8), b%cmp(5:8), add_qdc%cmp(5:8)) end function add_qdc elemental type (qd_complex) function add_qdc_qd(a, b) type (qd_complex), intent(in) :: a type (qd_real), intent(in) :: b call f_qd_add (a%cmp(1:4), b%re, add_qdc_qd%cmp(1:4)) add_qdc_qd%cmp(5:8) = a%cmp(5:8) end function add_qdc_qd elemental type (qd_complex) function add_qd_qdc(a, b) type (qd_real), intent(in) :: a type (qd_complex), intent(in) :: b add_qd_qdc = add_qdc_qd(b, a) end function add_qd_qdc elemental type (qd_complex) function add_qdc_d(a, b) type (qd_complex), intent(in) :: a real*8, intent(in) :: b type (qd_real) :: qdb qdb%re(1) = b qdb%re(2:4) = 0.d0 call f_qd_add (a%cmp(1:4), qdb%re, add_qdc_d%cmp(1:4)) add_qdc_d%cmp(5:8) = a%cmp(5:8) end function add_qdc_d elemental type (qd_complex) function add_d_qdc(a, b) real*8, intent(in) :: a type (qd_complex), intent(in) :: b add_d_qdc = add_qdc_d(b, a) end function add_d_qdc ! Subtractions elemental type (qd_real) function sub_qd(a, b) type (qd_real), intent(in) :: a, b call f_qd_sub(a%re, b%re, sub_qd%re) end function sub_qd elemental type (qd_real) function sub_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b call f_qd_sub_qd_d(a%re, b, sub_qd_d%re) end function sub_qd_d elemental type (qd_real) function sub_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b call f_qd_sub_d_qd(a, b%re, sub_d_qd%re) end function sub_d_qd elemental type (qd_complex) function sub_qdc(a, b) type (qd_complex), intent(in) :: a, b call f_qd_sub (a%cmp(1:4), b%cmp(1:4), sub_qdc%cmp(1:4)) call f_qd_sub (a%cmp(5:8), b%cmp(5:8), sub_qdc%cmp(5:8)) end function sub_qdc elemental type (qd_complex) function sub_qdc_qd(a, b) type (qd_complex), intent(in) :: a type (qd_real), intent(in) :: b call f_qd_sub (a%cmp(1:4), b%re(1:4), sub_qdc_qd%cmp(1:4)) sub_qdc_qd%cmp(5:8) = a%cmp(5:8) end function sub_qdc_qd elemental type (qd_complex) function sub_qd_qdc(a, b) type (qd_real), intent(in) :: a type (qd_complex), intent(in) :: b call f_qd_sub (a%re(1:4), b%cmp(1:4), sub_qd_qdc%cmp(1:4)) sub_qd_qdc%cmp(5:8) = - b%cmp(5:8) end function sub_qd_qdc elemental type (qd_complex) function sub_qdc_d(a, b) type (qd_complex), intent(in) :: a real*8, intent(in) :: b type (qd_real) qdb qdb%re(1) = b qdb%re(2:4) = 0.d0 call f_qd_sub (a%cmp(1:4), qdb%re, sub_qdc_d%cmp(1:4)) sub_qdc_d%cmp(5:8) = a%cmp(5:8) end function sub_qdc_d elemental type (qd_complex) function sub_d_qdc(a, b) real*8, intent(in) :: a type (qd_complex), intent(in) :: b type (qd_real) qda qda%re(1) = a qda%re(2:4) = 0.d0 call f_qd_sub (qda%re, b%cmp(1:4), sub_d_qdc%cmp(1:4)) sub_d_qdc%cmp(5:8) = - b%cmp(5:8) end function sub_d_qdc ! Unary Minus elemental type (qd_real) function neg_qd(a) type (qd_real), intent(in) :: a neg_qd%re = -a%re end function neg_qd elemental type (qd_complex) function neg_qdc(a) type (qd_complex), intent(in) :: a neg_qdc%cmp = -a%cmp end function neg_qdc ! Multiplications elemental type (qd_real) function mul_qd(a, b) type (qd_real), intent(in) :: a, b call f_qd_mul(a%re, b%re, mul_qd%re) end function mul_qd elemental type (qd_real) function mul_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b call f_qd_mul_qd_d(a%re, b, mul_qd_d%re) end function mul_qd_d elemental type (qd_real) function mul_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b call f_qd_mul_qd_d(b%re, a, mul_d_qd%re) end function mul_d_qd elemental type (qd_real) function mul_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b call f_qd_mul_qd_d(a%re, dble(b), mul_qd_i%re) end function mul_qd_i elemental type (qd_real) function mul_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b call f_qd_mul_qd_d(b%re, dble(a), mul_i_qd%re) end function mul_i_qd elemental type (qd_complex) function mul_qdc(a, b) type (qd_complex), intent(in) :: a, b type (qd_real) t1, t2 call f_qd_mul (a%cmp(1:4), b%cmp(1:4), t1%re) call f_qd_mul (a%cmp(5:8), b%cmp(5:8), t2%re) call f_qd_sub (t1%re, t2%re, mul_qdc%cmp(1:4)) call f_qd_mul (a%cmp(1:4), b%cmp(5:8), t1%re) call f_qd_mul (a%cmp(5:8), b%cmp(1:4), t2%re) call f_qd_add (t1%re, t2%re, mul_qdc%cmp(5:8)) end function mul_qdc elemental type (qd_complex) function mul_qdc_qd(a, b) type (qd_complex), intent(in) :: a type (qd_real), intent(in) :: b call f_qd_mul (a%cmp(1:4), b%re, mul_qdc_qd%cmp(1:4)) call f_qd_mul (a%cmp(5:8), b%re, mul_qdc_qd%cmp(5:8)) end function mul_qdc_qd elemental type (qd_complex) function mul_qd_qdc(a, b) type (qd_real), intent(in) :: a type (qd_complex), intent(in) :: b call f_qd_mul (a%re, b%cmp(1:4), mul_qd_qdc%cmp(1:4)) call f_qd_mul (a%re, b%cmp(5:8), mul_qd_qdc%cmp(5:8)) end function mul_qd_qdc elemental type (qd_complex) function mul_qdc_d(a, b) type (qd_complex), intent(in) :: a real*8, intent(in) :: b call f_qd_mul_qd_d (a%cmp(1:4), b, mul_qdc_d%cmp(1:4)) call f_qd_mul_qd_d (a%cmp(5:8), b, mul_qdc_d%cmp(5:8)) end function mul_qdc_d elemental type (qd_complex) function mul_d_qdc(a, b) real*8, intent(in) :: a type (qd_complex), intent(in) :: b call f_qd_mul_qd_d (b%cmp(1:4), a, mul_d_qdc%cmp(1:4)) call f_qd_mul_qd_d (b%cmp(5:8), a, mul_d_qdc%cmp(5:8)) end function mul_d_qdc elemental type (qd_complex) function mul_qdc_i(a, b) type (qd_complex), intent(in) :: a integer, intent(in) :: b call f_qd_mul_qd_d (a%cmp(1:4), dble(b), mul_qdc_i%cmp(1:4)) call f_qd_mul_qd_d (a%cmp(5:8), dble(b), mul_qdc_i%cmp(5:8)) end function mul_qdc_i elemental type (qd_complex) function mul_i_qdc(a, b) integer, intent(in) :: a type (qd_complex), intent(in) :: b call f_qd_mul_qd_d (b%cmp(1:4), dble(a), mul_i_qdc%cmp(1:4)) call f_qd_mul_qd_d (b%cmp(5:8), dble(a), mul_i_qdc%cmp(5:8)) end function mul_i_qdc ! Divisions elemental type (qd_real) function div_qd(a, b) type (qd_real), intent(in) :: a, b call f_qd_div(a%re, b%re, div_qd%re) end function div_qd elemental type (qd_real) function div_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b call f_qd_div_qd_d(a%re, b, div_qd_d%re) end function div_qd_d elemental type (qd_real) function div_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b call f_qd_div_d_qd(a, b%re, div_d_qd%re) end function div_d_qd elemental type (qd_real) function div_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b call f_qd_div_qd_d(a%re, dble(b), div_qd_i%re) end function div_qd_i elemental type (qd_real) function div_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b call f_qd_div_d_qd(dble(a), b%re, div_i_qd%re) end function div_i_qd elemental type (qd_complex) function div_qdc(a, b) type (qd_complex), intent(in) :: a, b type (qd_real) t1, t2, t3, t4, t5 call f_qd_mul (a%cmp(1:4), b%cmp(1:4), t1%re) call f_qd_mul (a%cmp(5:8), b%cmp(5:8), t2%re) call f_qd_add (t1%re, t2%re, t3%re) call f_qd_mul (a%cmp(1:4), b%cmp(5:8), t1%re) call f_qd_mul (a%cmp(5:8), b%cmp(1:4), t2%re) call f_qd_sub (t2%re, t1%re, t4%re) call f_qd_mul (b%cmp(1:4), b%cmp(1:4), t1%re) call f_qd_mul (b%cmp(5:8), b%cmp(5:8), t2%re) call f_qd_add (t1%re, t2%re, t5%re) call f_qd_div (t3%re, t5%re, div_qdc%cmp(1:4)) call f_qd_div (t4%re, t5%re, div_qdc%cmp(5:8)) end function div_qdc elemental type (qd_complex) function div_qdc_qd(a, b) type (qd_complex), intent(in) :: a type (qd_real), intent(in) :: b call f_qd_div (a%cmp(1:4), b%re, div_qdc_qd%cmp(1:4)) call f_qd_div (a%cmp(5:8), b%re, div_qdc_qd%cmp(5:8)) end function div_qdc_qd elemental type (qd_complex) function div_qd_qdc(a, b) type (qd_real), intent(in) :: a type (qd_complex), intent(in) :: b type (qd_real) t1, t2, t3, t4, t5 call f_qd_mul (a%re, b%cmp(1:4), t1%re) call f_qd_mul (a%re, b%cmp(5:8), t2%re) t2%re = - t2%re call f_qd_mul (b%cmp(1:4), b%cmp(1:4), t3%re) call f_qd_mul (b%cmp(5:8), b%cmp(5:8), t4%re) call f_qd_add (t3%re, t4%re, t5%re) call f_qd_div (t1%re, t5%re, div_qd_qdc%cmp(1:4)) call f_qd_div (t2%re, t5%re, div_qd_qdc%cmp(5:8)) end function div_qd_qdc elemental type (qd_complex) function div_qdc_d(a,b) type (qd_complex), intent(in) :: a real*8, intent(in) :: b call f_qd_div_qd_d(a%cmp(1:4), b, div_qdc_d%cmp(1:4)) call f_qd_div_qd_d(a%cmp(5:8), b, div_qdc_d%cmp(5:8)) end function div_qdc_d ! Power elemental type (qd_real) function pwr_qd (a, b) type (qd_real), intent(in) :: a, b type (qd_real) q1, q2 call f_qd_log(a%re, q1%re) call f_qd_mul(q1%re, b%re, q2%re) call f_qd_exp(q2%re, pwr_qd%re) end function pwr_qd elemental type (qd_real) function pwr_qd_i(a, n) type (qd_real), intent(in) :: a integer, intent(in) :: n call f_qd_npwr(a%re, n, pwr_qd_i%re) end function pwr_qd_i elemental type (qd_real) function pwr_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b type (qd_real) q1, q2, q3 q1%re(1) = a q1%re(2:4) = 0.d0 call f_qd_log(q1%re, q2%re) call f_qd_mul(q2%re, b%re, q3%re) call f_qd_exp(q3%re, pwr_d_qd%re) end function pwr_d_qd elemental type (qd_complex) function pwr_qdc_i(a, n) type (qd_complex), intent(in) :: a integer, intent(in) :: n integer i2, j, n1 type (qd_real) t1, t2, t3 type (qd_complex) c1, c2 intrinsic :: iabs, ishft if (n == 0) then if (all(a%cmp == 0.d0)) then !write (6, *) 'pwr_qdc_i: a = 0 and n = 0' call f_qd_nan(pwr_qdc_i%cmp(1:4)) call f_qd_nan(pwr_qdc_i%cmp(5)) return endif pwr_qdc_i%cmp(1) = 1.d0 pwr_qdc_i%cmp(2:8) = 0.d0 return endif n1 = iabs (n) i2 = ishft(1, n1-1) c1%cmp(1) = 1.d0 c1%cmp(2:8) = 0.d0 110 continue if (n1 >= i2) then call f_qd_mul (a%cmp(1:4), c1%cmp(1:4), t1%re) call f_qd_mul (a%cmp(5:8), c1%cmp(5:8), t2%re) call f_qd_sub (t1%re, t2%re, c2%cmp(1:4)) call f_qd_mul (a%cmp(1:4), c1%cmp(5:8), t1%re) call f_qd_mul (a%cmp(5:8), c1%cmp(1:4), t2%re) call f_qd_add (t1%re, t2%re, c2%cmp(5:8)) c1%cmp = c2%cmp n1 = n1 - i2 endif i2 = i2 / 2 if (i2 >= 1) then call f_qd_mul (c1%cmp(1:4), c1%cmp(1:4), t1%re) call f_qd_mul (c1%cmp(5:8), c1%cmp(5:8), t2%re) call f_qd_sub (t1%re, t2%re, c2%cmp(1:4)) call f_qd_mul (c1%cmp(1:4), c1%cmp(5:8), t1%re) c2%cmp(5:8) = 2.d0 * t1%re c1%cmp = c2%cmp goto 110 endif if (n > 0) then pwr_qdc_i%cmp = c1%cmp else c1%cmp(5:8) = - c1%cmp(5:8) call f_qd_mul (c1%cmp(1:4), c1%cmp(1:4), t1%re) call f_qd_mul (c1%cmp(5:8), c1%cmp(5:8), t2%re) call f_qd_add (t1%re, t2%re, t3%re) call f_qd_div (c1%cmp(1:4), t3%re, pwr_qdc_i%cmp(1:4)) call f_qd_div (c1%cmp(5:8), t3%re, pwr_qdc_i%cmp(5:8)) endif return end function pwr_qdc_i ! Trigonometric Functions elemental type (qd_real) function qdsin(a) type (qd_real), intent(in) :: a call f_qd_sin(a%re, qdsin%re) end function qdsin elemental type (qd_real) function qdcos(a) type (qd_real), intent(in) :: a call f_qd_cos(a%re, qdcos%re) end function qdcos elemental type (qd_real) function qdtan(a) type (qd_real), intent(in) :: a call f_qd_tan(a%re, qdtan%re) end function qdtan elemental subroutine qdsincos(a, s, c) type (qd_real), intent(in) :: a type (qd_real), intent(out) :: s, c call f_qd_sincos(a%re, s%re, c%re) end subroutine qdsincos ! Inverse Trigonometric Functions elemental type (qd_real) function qdasin(a) type (qd_real), intent(in) :: a call f_qd_asin(a%re, qdasin%re) end function qdasin elemental type (qd_real) function qdacos(a) type (qd_real), intent(in) :: a call f_qd_acos(a%re, qdacos%re) end function qdacos elemental type (qd_real) function qdatan(a) type (qd_real), intent(in) :: a call f_qd_atan(a%re, qdatan%re) end function qdatan elemental type (qd_real) function qdatan2(a, b) type (qd_real), intent(in) :: a, b call f_qd_atan2(a%re, b%re, qdatan2%re) end function qdatan2 ! Exponential and Logarithms elemental type (qd_real) function qdexp(a) type (qd_real), intent(in) :: a call f_qd_exp(a%re, qdexp%re) end function qdexp elemental type (qd_complex) function qdcexp (a) type (qd_complex), intent(in) :: a type (qd_real) t1, t2, t3 call f_qd_exp (a%cmp(1:4), t1%re) call f_qd_sincos (a%cmp(5:8), t3%re, t2%re) call f_qd_mul (t1%re, t2%re, qdcexp%cmp(1:4)) call f_qd_mul (t1%re, t3%re, qdcexp%cmp(5:8)) end function qdcexp elemental type (qd_real) function qdlog(a) type (qd_real), intent(in) :: a call f_qd_log(a%re, qdlog%re) end function qdlog elemental type (qd_complex) function qdclog (a) type (qd_complex), intent(in) :: a type (qd_real) t1, t2, t3 call f_qd_mul (a%cmp(1:4), a%cmp(1:4), t1%re) call f_qd_mul (a%cmp(5:8), a%cmp(5:8), t2%re) call f_qd_add (t1%re, t2%re, t3%re) call f_qd_log (t3%re, t1%re) qdclog%cmp(1:4) = 0.5d0 * t1%re call f_qd_atan2 (a%cmp(5:8), a%cmp(1:4), qdclog%cmp(5:8)) end function qdclog elemental type (qd_real) function qdlog10(a) type (qd_real), intent(in) :: a call f_qd_log10(a%re, qdlog10%re) end function qdlog10 ! SQRT, etc. elemental type (qd_real) function qdsqrt(a) type (qd_real), intent(in) :: a call f_qd_sqrt(a%re, qdsqrt%re) end function qdsqrt elemental type (qd_real) function qdsqr(a) type (qd_real), intent(in) :: a call f_qd_sqr(a%re, qdsqr%re) end function qdsqr elemental type (qd_real) function qdnroot(a, n) type (qd_real), intent(in) :: a integer, intent(in) :: n call f_qd_nroot(a%re, n, qdnroot%re) end function qdnroot ! Hyperbolic Functions elemental type (qd_real) function qdsinh(a) type (qd_real), intent(in) :: a call f_qd_sinh(a%re, qdsinh%re) end function qdsinh elemental type (qd_real) function qdcosh(a) type (qd_real), intent(in) :: a call f_qd_cosh(a%re, qdcosh%re) end function qdcosh elemental type (qd_real) function qdtanh(a) type (qd_real), intent(in) :: a call f_qd_tanh(a%re, qdtanh%re) end function qdtanh elemental subroutine qdsincosh(a, s, c) type (qd_real), intent(in) :: a type (qd_real), intent(out) :: s, c call f_qd_sincosh(a%re, s%re, c%re) end subroutine qdsincosh ! Inverse Hyperbolic Functions elemental type (qd_real) function qdasinh(a) type (qd_real), intent(in) :: a call f_qd_asinh(a%re, qdasinh%re) end function qdasinh elemental type (qd_real) function qdacosh(a) type (qd_real), intent(in) :: a call f_qd_acosh(a%re, qdacosh%re) end function qdacosh elemental type (qd_real) function qdatanh(a) type (qd_real), intent(in) :: a call f_qd_atanh(a%re, qdatanh%re) end function qdatanh ! Rounding elemental type (qd_real) function qdaint(a) type (qd_real), intent(in) :: a call f_qd_aint(a%re, qdaint%re) end function qdaint elemental type (qd_real) function qdanint(a) type (qd_real), intent(in) :: a call f_qd_nint(a%re, qdanint%re) end function qdanint elemental integer function qdnint(a) type (qd_real), intent(in) :: a qdnint = to_int_qd(qdaint(a)); end function qdnint ! Random Number Generator subroutine qdrand(harvest) type (qd_real), intent(out) :: harvest call f_qd_rand(harvest%re) end subroutine qdrand ! Equality elemental logical function eq_qd(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r == 0) then eq_qd = .true. else eq_qd = .false. end if end function eq_qd elemental logical function eq_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_qd_comp_qd_d(a%re, b, r) if (r == 0) then eq_qd_d = .true. else eq_qd_d = .false. end if end function eq_qd_d elemental logical function eq_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b integer :: r call f_qd_comp_qd_d(b%re, a, r) if (r == 0) then eq_d_qd = .true. else eq_d_qd = .false. end if end function eq_d_qd elemental logical function eq_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b eq_qd_i = eq_qd_d(a, dble(b)) end function eq_qd_i elemental logical function eq_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b eq_i_qd = eq_d_qd(dble(a), b) end function eq_i_qd elemental logical function eq_qdc (a, b) type (qd_complex), intent(in) :: a, b integer :: i1, i2 call f_qd_comp (a%cmp(1:4), b%cmp(1:4), i1) call f_qd_comp (a%cmp(5:8), b%cmp(5:8), i2) if (i1 == 0 .and. i2 == 0) then eq_qdc = .true. else eq_qdc = .false. endif end function eq_qdc elemental logical function eq_qdc_qd (a, b) type (qd_complex), intent(in) :: a type (qd_real), intent(in) :: b integer :: i1 call f_qd_comp (a%cmp(1:4), b%re, i1) if (i1 == 0 .and. all(a%cmp(5:8) == 0.d0)) then eq_qdc_qd = .true. else eq_qdc_qd = .false. endif end function eq_qdc_qd elemental logical function eq_qd_qdc (a, b) type (qd_real), intent(in) :: a type (qd_complex), intent(in) :: b integer :: i1 call f_qd_comp (a%re, b%cmp(1:4), i1) if (i1 == 0 .and. all(b%cmp(5:8) == 0.d0)) then eq_qd_qdc = .true. else eq_qd_qdc = .false. endif end function eq_qd_qdc ! Non-Equality elemental logical function ne_qd(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r == 0) then ne_qd = .false. else ne_qd = .true. end if end function ne_qd elemental logical function ne_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_qd_comp_qd_d(a%re, b, r) if (r == 0) then ne_qd_d = .false. else ne_qd_d = .true. end if end function ne_qd_d elemental logical function ne_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b integer :: r call f_qd_comp_qd_d(b%re, a, r) if (r == 0) then ne_d_qd = .false. else ne_d_qd = .true. end if end function ne_d_qd elemental logical function ne_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b ne_qd_i = ne_qd_d(a, dble(b)) end function ne_qd_i elemental logical function ne_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b ne_i_qd = ne_d_qd(dble(a), b) end function ne_i_qd elemental logical function ne_qdc (a, b) type (qd_complex), intent(in) :: a, b integer :: i1, i2 call f_qd_comp (a%cmp(1:4), b%cmp(1:4), i1) call f_qd_comp (a%cmp(5:8), b%cmp(5:8), i2) if (i1 /= 0 .or. i2 /= 0) then ne_qdc = .true. else ne_qdc = .false. endif end function ne_qdc elemental logical function ne_qdc_qd (a, b) type (qd_complex), intent(in) :: a type (qd_real), intent(in) :: b integer :: i1 call f_qd_comp (a%cmp(1:4), b%re, i1) if (i1 /= 0 .or. any(a%cmp(5:8) /= 0.d0)) then ne_qdc_qd = .true. else ne_qdc_qd = .false. endif end function ne_qdc_qd elemental logical function ne_qd_qdc (a, b) type (qd_real), intent(in) :: a type (qd_complex), intent(in) :: b integer :: i1 call f_qd_comp (a%re, b%cmp(1:4), i1) if (i1 /= 0 .or. any(b%cmp(5:8) /= 0.d0)) then ne_qd_qdc = .true. else ne_qd_qdc = .false. endif end function ne_qd_qdc ! Greater-Than elemental logical function gt_qd(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r == 1) then gt_qd = .true. else gt_qd = .false. end if end function gt_qd elemental logical function gt_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_qd_comp_qd_d(a%re, b, r) if (r == 1) then gt_qd_d = .true. else gt_qd_d = .false. end if end function gt_qd_d elemental logical function gt_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b integer :: r call f_qd_comp_qd_d(b%re, a, r) if (r == -1) then gt_d_qd = .true. else gt_d_qd = .false. end if end function gt_d_qd elemental logical function gt_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b gt_qd_i = gt_qd_d(a, dble(b)) end function gt_qd_i elemental logical function gt_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b gt_i_qd = gt_d_qd(dble(a), b) end function gt_i_qd ! Less-Than elemental logical function lt_qd(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r == -1) then lt_qd = .true. else lt_qd = .false. end if end function lt_qd elemental logical function lt_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_qd_comp_qd_d(a%re, b, r) if (r == -1) then lt_qd_d = .true. else lt_qd_d = .false. end if end function lt_qd_d elemental logical function lt_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b integer :: r call f_qd_comp_qd_d(b%re, a, r) if (r == 1) then lt_d_qd = .true. else lt_d_qd = .false. end if end function lt_d_qd elemental logical function lt_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b lt_qd_i = lt_qd_d(a, dble(b)) end function lt_qd_i elemental logical function lt_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b lt_i_qd = lt_d_qd(dble(a), b) end function lt_i_qd ! Greater-Than-Or-Equal-To elemental logical function ge_qd(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r >= 0) then ge_qd = .true. else ge_qd = .false. end if end function ge_qd elemental logical function ge_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_qd_comp_qd_d(a%re, b, r) if (r >= 0) then ge_qd_d = .true. else ge_qd_d = .false. end if end function ge_qd_d elemental logical function ge_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b integer :: r call f_qd_comp_qd_d(b%re, a, r) if (r <= 0) then ge_d_qd = .true. else ge_d_qd = .false. end if end function ge_d_qd elemental logical function ge_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b ge_qd_i = ge_qd_d(a, dble(b)) end function ge_qd_i elemental logical function ge_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b ge_i_qd = ge_d_qd(dble(a), b) end function ge_i_qd ! Less-Than-Or-Equal-To elemental logical function le_qd(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r <= 0) then le_qd = .true. else le_qd = .false. end if end function le_qd elemental logical function le_qd_d(a, b) type (qd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_qd_comp_qd_d(a%re, b, r) if (r <= 0) then le_qd_d = .true. else le_qd_d = .false. end if end function le_qd_d elemental logical function le_d_qd(a, b) real*8, intent(in) :: a type (qd_real), intent(in) :: b integer :: r call f_qd_comp_qd_d(b%re, a, r) if (r >= 0) then le_d_qd = .true. else le_d_qd = .false. end if end function le_d_qd elemental logical function le_qd_i(a, b) type (qd_real), intent(in) :: a integer, intent(in) :: b le_qd_i = le_qd_d(a, dble(b)) end function le_qd_i elemental logical function le_i_qd(a, b) integer, intent(in) :: a type (qd_real), intent(in) :: b le_i_qd = le_d_qd(dble(a), b) end function le_i_qd ! Absolute Value elemental type (qd_real) function qdabs(a) type (qd_real), intent(in) :: a call f_qd_abs(a%re, qdabs%re) end function qdabs elemental type (qd_real) function qdcabs (qdc) type (qd_complex), intent(in) :: qdc type (qd_real) t1, t2, t3 call f_qd_mul (qdc%cmp(1:4), qdc%cmp(1:4), t1%re) call f_qd_mul (qdc%cmp(5:8), qdc%cmp(5:8), t2%re) call f_qd_add (t1%re, t2%re, t3%re) call f_qd_sqrt (t3%re, qdcabs%re) end function qdcabs ! Sign transfer elemental type (qd_real) function qdsign(a, b) result (c) type (qd_real), intent(in) :: a, b if (b%re(1) .gt. 0.0d0) then if (a%re(1) .gt. 0.0d0) then c%re = a%re else c%re = -a%re end if else if (a%re(1) .gt. 0.0d0) then c%re = -a%re else c%re = a%re end if endif end function qdsign elemental type (qd_real) function qdsign_dd_d(a, b) result (c) type (qd_real), intent(in) :: a real*8, intent(in) :: b if (b .gt. 0.0d0) then if (a%re(1) .gt. 0.0d0) then c%re = a%re else c%re = -a%re end if else if (a%re(1) .gt. 0.0d0) then c%re = -a%re else c%re = a%re end if endif end function qdsign_dd_d ! Input subroutine qdinpq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (qd_real), intent(in) :: q1 type (qd_real), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 call qdinp (u, q1%re) if (present(q2)) then call qdinp (u, q2%re) end if if (present(q3)) then call qdinp (u, q3%re) end if if (present(q4)) then call qdinp (u, q4%re) end if if (present(q5)) then call qdinp (u, q5%re) end if if (present(q6)) then call qdinp (u, q6%re) end if if (present(q7)) then call qdinp (u, q7%re) end if if (present(q8)) then call qdinp (u, q8%re) end if if (present(q9)) then call qdinp (u, q9%re) end if end subroutine qdinpq subroutine qdcinpq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (qd_complex), intent(in) :: q1 type (qd_complex), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 call qdinp (u, q1%cmp(1:4)) call qdinp (u, q1%cmp(5:8)) if (present(q2)) then call qdinp (u, q2%cmp(1:4)) call qdinp (u, q2%cmp(5:8)) end if if (present(q3)) then call qdinp (u, q3%cmp(1:4)) call qdinp (u, q3%cmp(5:8)) end if if (present(q4)) then call qdinp (u, q4%cmp(1:4)) call qdinp (u, q4%cmp(5:8)) end if if (present(q5)) then call qdinp (u, q5%cmp(1:4)) call qdinp (u, q5%cmp(5:8)) end if if (present(q6)) then call qdinp (u, q6%cmp(1:4)) call qdinp (u, q6%cmp(5:8)) end if if (present(q7)) then call qdinp (u, q7%cmp(1:4)) call qdinp (u, q7%cmp(5:8)) end if if (present(q8)) then call qdinp (u, q8%cmp(1:4)) call qdinp (u, q8%cmp(5:8)) end if if (present(q9)) then call qdinp (u, q9%cmp(1:4)) call qdinp (u, q9%cmp(5:8)) end if end subroutine qdcinpq ! Output subroutine qdoutq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (qd_real), intent(in) :: q1 type (qd_real), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 call qdout (u, q1%re) if (present(q2)) then call qdout (u, q2%re) end if if (present(q3)) then call qdout (u, q3%re) end if if (present(q4)) then call qdout (u, q4%re) end if if (present(q5)) then call qdout (u, q5%re) end if if (present(q6)) then call qdout (u, q6%re) end if if (present(q7)) then call qdout (u, q7%re) end if if (present(q8)) then call qdout (u, q8%re) end if if (present(q9)) then call qdout (u, q9%re) end if end subroutine qdoutq subroutine qdcoutq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (qd_complex), intent(in) :: q1 type (qd_complex), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 call qdout (u, q1%cmp(1:4)) call qdout (u, q1%cmp(5:8)) if (present(q2)) then call qdout (u, q2%cmp(1:4)) call qdout (u, q2%cmp(5:8)) end if if (present(q3)) then call qdout (u, q3%cmp(1:4)) call qdout (u, q3%cmp(5:8)) end if if (present(q4)) then call qdout (u, q4%cmp(1:4)) call qdout (u, q4%cmp(5:8)) end if if (present(q5)) then call qdout (u, q5%cmp(1:4)) call qdout (u, q5%cmp(5:8)) end if if (present(q6)) then call qdout (u, q6%cmp(1:4)) call qdout (u, q6%cmp(5:8)) end if if (present(q7)) then call qdout (u, q7%cmp(1:4)) call qdout (u, q7%cmp(5:8)) end if if (present(q8)) then call qdout (u, q8%cmp(1:4)) call qdout (u, q8%cmp(5:8)) end if if (present(q9)) then call qdout (u, q9%cmp(1:4)) call qdout (u, q9%cmp(5:8)) end if end subroutine qdcoutq elemental real*8 function qd_to_d(a) type (qd_real), intent(in) :: a qd_to_d = a%re(1) end function qd_to_d elemental type (qd_real) function qdmin2(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r == 1) then qdmin2 = b else qdmin2 = a end if end function qdmin2 elemental type (qd_real) function qdmin(a1, a2, a3, a4, a5, a6, a7, a8, a9) type (qd_real), intent(in) :: a1, a2, a3 type (qd_real), intent(in), optional :: a4, a5, a6, a7, a8, a9 qdmin = qdmin2(qdmin2(a1, a2), a3) if (present(a4)) qdmin = qdmin2(qdmin, a4) if (present(a5)) qdmin = qdmin2(qdmin, a5) if (present(a6)) qdmin = qdmin2(qdmin, a6) if (present(a7)) qdmin = qdmin2(qdmin, a7) if (present(a8)) qdmin = qdmin2(qdmin, a8) if (present(a9)) qdmin = qdmin2(qdmin, a9) end function qdmin elemental type (qd_real) function qdmax2(a, b) type (qd_real), intent(in) :: a, b integer :: r call f_qd_comp(a%re, b%re, r) if (r == -1) then qdmax2 = b else qdmax2 = a end if end function qdmax2 elemental type (qd_real) function qdmax(a1, a2, a3, a4, a5, a6, a7, a8, a9) type (qd_real), intent(in) :: a1, a2, a3 type (qd_real), intent(in), optional :: a4, a5, a6, a7, a8, a9 qdmax = qdmax2(qdmax2(a1, a2), a3) if (present(a4)) qdmax = qdmax2(qdmax, a4) if (present(a5)) qdmax = qdmax2(qdmax, a5) if (present(a6)) qdmax = qdmax2(qdmax, a6) if (present(a7)) qdmax = qdmax2(qdmax, a7) if (present(a8)) qdmax = qdmax2(qdmax, a8) if (present(a9)) qdmax = qdmax2(qdmax, a9) end function qdmax elemental type (qd_real) function qdmod (a, b) type (qd_real), intent(in) :: a, b type (qd_real) :: s1, s2 call f_qd_div (a%re, b%re, s1%re) call f_qd_aint(s1%re, s2%re) call f_qd_mul (s2%re, b%re, s1%re) call f_qd_sub (a%re, s1%re, qdmod%re) end function qdmod pure type (qd_real) function qd_pi() call f_qd_pi(qd_pi%re) end function qd_pi subroutine qdinp (iu, a) ! This routine reads the DD number A from logical unit IU. The input ! value must be placed on a single line of not more than 80 characters. implicit none integer iu, ln parameter (ln = 80) character*80 cs real*8 a(4) read (iu, '(a)', end = 100) cs call qdinpc (cs, a) goto 110 100 write (6, 1) 1 format ('*** qdinp: End-of-file encountered.') ! call qdabrt stop 110 return end subroutine subroutine qdinpc (a, b) ! Converts the CHARACTER*80 array A into the DD number B. implicit none integer i, id, ie, inz, ip, is, k, ln, lnn, beg parameter (ln = 80) real*8 bi character*80 a character*1 ai character*10 dig character*16 ca parameter (dig = '0123456789') real*8 b(4), f(4), s0(4), s1(4), s2(4) id = 0 ip = -1 is = 0 inz = 0 s1(1) = 0.d0 s1(2) = 0.d0 s1(3) = 0.d0 s1(4) = 0.d0 beg = 0 do i = 1, 80 if (a(i:i) /= ' ') then beg = i goto 80 end if end do goto 210 80 continue do i = beg, 80 if (a(i:i) == ' ') then lnn = i-1 goto 90 end if enddo lnn = 80 90 continue ! Scan for digits, looking for the period also. do i = beg, lnn ai = a(i:i) if (ai .eq. '.') then if (ip >= 0) goto 210 ip = id inz = 1 elseif (ai .eq. '+') then if (id .ne. 0 .or. ip >= 0 .or. is .ne. 0) goto 210 is = 1 elseif (ai .eq. '-') then if (id .ne. 0 .or. ip >= 0 .or. is .ne. 0) goto 210 is = -1 elseif (ai .eq. 'e' .or. ai .eq. 'E' .or. ai .eq. 'd' .or. ai .eq. 'D') then goto 100 elseif (index (dig, ai) .eq. 0) then goto 210 else ! read (ai, '(f1.0)') bi bi = index (dig, ai) - 1 if (inz > 0 .or. bi > 0.d0) then inz = 1 id = id + 1 ! call qdmuld (s1, 10.d0, s0) call f_qd_mul_qd_d (s1, 10.d0, s0) f(1) = bi f(2) = 0.d0 f(3) = 0.d0 f(4) = 0.d0 ! call qddqc (bi, f) ! call qdadd (s0, f, s1) call f_qd_add (s0, f, s1) endif endif enddo 100 continue if (is .eq. -1) then s1(1) = - s1(1) s1(2) = - s1(2) s1(3) = - s1(3) s1(4) = - s1(4) endif k = i if (ip == -1) ip = id ie = 0 is = 0 ca = ' ' do i = k + 1, lnn ai = a(i:i) if (ai .eq. ' ') then elseif (ai .eq. '+') then if (ie .ne. 0 .or. is .ne. 0) goto 210 is = 1 elseif (ai .eq. '-') then if (ie .ne. 0 .or. is .ne. 0) goto 210 is = -1 elseif (index (dig, ai) .eq. 0) then goto 210 else ie = ie + 1 if (ie .gt. 3) goto 210 ca(ie:ie) = ai endif enddo ! read (ca, '(i4)') ie ie = dddigin (ca, 4) if (is .eq. -1) ie = - ie ie = ie + ip - id s0(1) = 10.d0 s0(2) = 0.d0 s0(3) = 0.d0 s0(4) = 0.d0 ! call qdnpwr (s0, ie, s2) call f_qd_npwr (s0, ie, s2) ! call qdmul (s1, s2, b) call f_qd_mul (s1, s2, b) goto 220 210 write (6, 1) a 1 format ('*** qdinpc: Syntax error in literal string: ', a) ! call qdabrt stop 220 return end subroutine subroutine qdout (iu, a) ! This routine writes the QD number A on logical unit iu using a standard ! E format, with lines 72 characters long. implicit none integer iu, ln parameter (ln = 72) character cs(72) real*8 a(4) call qdoutc (a, cs) write (iu, ' (72a)') cs return end subroutine subroutine qdoutc (a, b) implicit none real*8 a(4) character b(72) b(1) = ' ' b(2) = ' ' call f_qd_swrite(a, 62, b(3), 70) end subroutine elemental type (qd_real) function qdhuge(a) type (qd_real), intent(in) :: a qdhuge = qd_huge end function qdhuge elemental type (qd_real) function qd_safe_huge(a) type (qd_real), intent(in) :: a qd_safe_huge = qd_real((/ & 1.7976931080746007281d+308, 9.97920154767359795037d+291, & 5.53956966280111259858d+275, 3.07507889307840487279d+259/)) end function qd_safe_huge elemental type (qd_real) function qdtiny(a) type (qd_real), intent(in) :: a qdtiny = qd_tiny end function qdtiny elemental type (qd_real) function qdepsilon(a) type (qd_real), intent(in) :: a qdepsilon = qd_eps end function qdepsilon elemental integer function qd_radix(a) type (qd_real), intent(in) :: a qd_radix = 2 end function qd_radix elemental integer function qd_digits(a) type (qd_real), intent(in) :: a qd_digits = 209 end function qd_digits elemental integer function qd_max_expn(a) type (qd_real), intent(in) :: a qd_max_expn = 1023 end function qd_max_expn elemental integer function qd_min_expn(a) type (qd_real), intent(in) :: a qd_min_expn = -863 end function qd_min_expn elemental integer function qd_precision(a) type (qd_real), intent(in) :: a qd_precision = 62 end function qd_precision elemental integer function qd_range(a) type (qd_real), intent(in) :: a qd_range = 259 end function qd_range elemental type (qd_real) function qd_nan(a) type (qd_real), intent(in) :: a call f_qd_nan(qd_nan%re) end function qd_nan elemental type (qd_real) function qd_aimag(a) type (qd_complex), intent(in) :: a qd_aimag%re = a%cmp(5:8) end function end module qdmodule qd-2.3.11/fortran/second.f.in0000644000175000017500000000020311202062041016133 0ustar prudhommprudhomm function second () double precision second real*4 t(2) second = @ETIME@(t) return end qd-2.3.11/fortran/tquadgsq2d.f0000644000175000017500000002300111202062041016333 0ustar prudhommprudhommmodule quadglobal ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC02-05CH11231. ! This program demonstrates the 2D quadrature routine 'quadgsq2d'. ! David H. Bailey 2007-03-23 ! The function quadgsq2d is suitable to integrate any function that is ! continuous, infinitely differentiable and integrable on a 2D finite open ! interval. Singularities or vertical derivatives are permitted on the ! boundaries. This can also be used for certain integrals on infinite ! intervals, by making a suitable change of variable. ! The function(s) to be integrated is(are) defined in external function ! subprogram(s) -- see the sample function subprograms below. The name(s) of ! the function subprogram(s) must be included in appropriate type and external ! statements in the main program. ! Inputs set in parameter statement below: ! ndebug Debug level setting. Default = 2. ! ndigits1 Primary working precision. With QD precision, set to 64. ! nepsilson1 Log10 of the desired tolerance. Normally set to - ndigits1. ! nquadl Max number of phases in quadrature routine; adding 1 increases ! (possibly doubles) the number of accurate digits in the result, ! but also roughly *quadruples* the run time. ! nq2 Space parameter for wk and xk arrays in the calling program. By ! default it is set to 8 * 2^nq1. Increase nq2 if directed by a ! message in subroutine initqts. use qdmodule implicit none integer ndebug, nquadl, ndigits1, nepsilon1, nwords1, nq1, nq2, nqmx parameter (ndebug = 2, nquadl = 6, ndigits1 = 64, nepsilon1 = -64, & nwords1 = 2, nq1 = nquadl, nq2 = 8 * 2**nq1) type (qd_real) xk(-nq2:nq2), wk(-nq2:nq2) end module ! program tquadgsq2d subroutine f_main use qdmodule use quadglobal implicit none integer i, n, n1 double precision dplog10q, d1, d2, second, tm0, tm1 type (qd_real) cat, catalan, err, quadgsq2d, fun01, fun02, fun03, fun04, & t1, t2, t3, t4, x1, x2, y1, y2 external quadgsq2d, catalan, fun01, fun02, fun03, fun04, second integer*4 old_cw ! This line must be present in DD and QD main programs. call f_fpu_fix_start (old_cw) write (6, 1) ndigits1, nepsilon1, nquadl 1 format ('Quadgsq2d test'/'Digits =',i6,' Epsilon =',i6,' Quadlevel =',i6) ! Initialize quadrature tables wk and xk (weights and abscissas). tm0 = second () call initqgs tm1 = second () write (6, 2) tm1 - tm0 2 format ('Quadrature initialization completed: cpu time =',f12.6) cat = catalan () ! Begin quadrature tests. write (6, 11) 11 format (/ & 'Problem 1: Int_-1^1 Int_-1^1 1/(1+x^2+y^2) dx dy = 4*log(2+sqrt(3))-2*pi/3') x1 = -1.d0 x2 = 1.d0 y1 = -1.d0 y2 = 1.d0 tm0 = second () t1 = quadgsq2d (fun01, x1, x2, y1, y2) tm1 = second () write (6, 3) tm1 - tm0 3 format ('Quadrature completed: CPU time =',f12.6/'Result =') call qdwrite (6, t1) t2 = 4.d0 * log (2.d0 + sqrt (qdreal (3.d0))) - 2.d0 * qdpi () / 3.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 4 format ('Actual error =',f10.6,'x10^',i5) write (6, 12) 12 format (/& 'Problem 2: Int_0^pi Int_0^pi log (2-cos(s)-cos(t)) = 4*pi*cat- pi^2*log(2)') x1 = 0.d0 x2 = qdpi() y1 = 0.d0 y2 = qdpi() tm0 = second () t1 = quadgsq2d (fun02, x1, x2, y1, y2) tm1 = second () t2 = 4.d0 * qdpi() * cat - qdpi()**2 * log (qdreal (2.d0)) write (6, 3) tm1 - tm0 call qdwrite (6, t1) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 13) 13 format (/& 'Problem 3: Int_0^inf Int_0^inf sqrt(x^2+xy+y^2) * exp(-x-y) = 1 + 3/4*log(3)') x1 = 0.d0 x2 = 1.d0 y1 = 0.d0 y2 = 1.d0 tm0 = second () t1 = quadgsq2d (fun03, x1, x2, y1, y2) tm1 = second () t2 = 1.d0 + 0.75d0 * log (qdreal (3.d0)) write (6, 3) tm1 - tm0 call qdwrite (6, t1) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 14) 14 format (/& 'Problem 4: Int_0^1 Int_0^1 1/(sqrt((1-x)*(1-y))*(x+y)) dx dy = 4*cat') x1 = 0.d0 x2 = 1.d0 y1 = 0.d0 y2 = 1.d0 tm0 = second () t1 = quadgsq2d (fun04, x1, x2, y1, y2) tm1 = second () t2 = 4.d0 * cat write (6, 3) tm1 - tm0 call qdwrite (6, t1) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 call f_fpu_fix_end (old_cw) stop end function fun01 (s, t) ! fun01 (s,t) = 1/sqrt[1+s^2+t^2] use qdmodule implicit none type (qd_real) fun01, s, t fun01 = 1.d0 / sqrt (1.d0 + s**2 + t**2) return end function fun02 (s, t) ! fun02 (s,t) = log (2 - cos(s) - cos(t)) use qdmodule implicit none type (qd_real) fun02, s, t, t1 t1 = 2.d0 - cos (s) - cos (t) if (t1 > 0.d0) then fun02 = log (2.d0 - cos (s) - cos (t)) else fun02 = 0.d0 endif return end function fun03 (s, t) ! fun03 (s,t) = ((1/s-1)^2 + (1/s-1)*(1/t-1) + (1/t-1)^2) ! / (s^2 * t^2 * exp(1/s + 1/t - 2) use qdmodule implicit none type (qd_real) fun03, s, t, s1, t1, sq external dplog10q if (s > 3.d-3 .and. t > 3.d-3) then s1 = 1.d0 / s - 1.d0 t1 = 1.d0 / t - 1.d0 sq = sqrt (s1**2 + s1 * t1 + t1**2) fun03 = sq / (s**2 * t**2) * exp (-s1 - t1) else fun03 = 0.d0 endif return end function fun04 (s, t) ! fun04 (s,t) = 1/(sqrt((1-s)*(1-t)) * (s+t)) use qdmodule implicit none type (qd_real) fun04, s, t fun04 = 1.d0 / (sqrt ((1.d0 - s) * (1.d0 - t)) * (s + t)) return end subroutine initqgs ! This subroutine initializes the quadrature arays xk and wk for Gaussian ! quadrature. It employs a Newton iteration scheme with a dynamic precision ! level. The argument nq2, which is the space allocated for wk and xk in ! the calling program, should be at least 8 * 2^nq1 + 100, although a higher ! value may be required, depending on precision level. Monitor the space ! figure given in the message below during initialization to be certain. ! David H Bailey 2002-11-04 use qdmodule use quadglobal implicit none integer i, ierror, is, j, j1, k, n, nwp, nws double precision pi parameter (pi = 3.141592653589793238d0) type (qd_real) eps, r, t1, t2, t3, t4, t5 if (ndebug >= 1) then write (6, 1) 1 format ('initqgs: Gaussian quadrature initialization') endif eps = 10.d0 ** nepsilon1 wk(0) = 0.d0 xk(0) = 0.d0 n = 3 * 2 ** (nq1 + 1) write (6, *) 'n, nq2 =', n, nq2 do j = 1, n / 2 ! Compute a double precision estimate of the root. is = 0 r = cos ((pi * (j - 0.25d0)) / (n + 0.5d0)) ! Compute the j-th root of the n-degree Legendre polynomial using Newton's ! iteration. 100 continue t1 = 1.d0 t2 = 0.d0 do j1 = 1, n t3 = t2 t2 = t1 t1 = (dble (2 * j1 - 1) * r * t2 - dble (j1 - 1) * t3) / dble (j1) enddo t4 = dble (n) * (r * t1 - t2) / (r ** 2 - 1.d0) t5 = r r = r - t1 / t4 ! Once convergence is achieved at nwp = 3, then start doubling (almost) the ! working precision level at each iteration until full precision is reached. if (abs (r - t5) > eps) goto 100 i = i + 1 if (i > nq2) goto 110 xk(i) = r xk(-i) = -xk(i) t4 = dble (n) * (r * t1 - t2) / (r ** 2 - 1.d0) wk(i) = 2.d0 / ((1.d0 - r ** 2) * t4 ** 2) wk(-i) = wk(i) enddo nqmx = i if (ndebug >= 2) then write (6, 2) i 2 format ('initqgs: Table spaced used =',i8) endif goto 130 110 continue write (6, 3) nq2 3 format ('initqgsq: Table space parameter is too small; value =',i8) stop 130 continue return end function quadgsq2d (fun, x1, x2, y1, y2) ! This performs 2-D tanh-sinh quadrature. No attempt is made in this code ! to estimate errors. ! David H. Bailey 2007-03-23 use qdmodule use quadglobal implicit none integer i, j, k, n double precision h type (qd_real) ax, bx, ay, by, quadgsq2d, fun, s1, t1, t2, & x1, x2, xx1, y1, y2, yy1 external fun ax = 0.5d0 * (x2 - x1) bx = 0.5d0 * (x2 + x1) ay = 0.5d0 * (y2 - y1) by = 0.5d0 * (y2 + y1) if (nqmx == 0) then write (6, 1) 1 format ('quadgsq2d: quadrature arrays have not been initialized') stop endif h = 0.5d0 ** nq1 s1 = 0.d0 do k = -nqmx, nqmx ! write (6, *) k, nqmx yy1 = ay * xk(k) + by do j = -nqmx, nqmx xx1 = ax * xk(j) + bx t1 = fun (xx1, yy1) s1 = s1 + wk(j) * wk(k) * t1 enddo enddo quadgsq2d = ax * ay * s1 return end function catalan () use qdmodule implicit none integer k real*8 dk, eps type (qd_real) catalan, c1, c2, c4, c8, r16, t1, t2, t3 type (qd_real) x1, x2, x3, x4, x5, x6 c1 = 1.d0 c2 = 2.d0 c4 = 4.d0 c8 = 8.d0 r16 = 1.d0 / 16.d0 t1 = 0.d0 t2 = 1.d0 eps = 1.d-64 do k = 0, 10000000 dk = k t3 = t2 * (c8 / (8.d0 * dk + 1.d0) ** 2 + c8 / (8.d0 * dk + 2.d0) ** 2 & + c4 / (8.d0 * dk + 3.d0) ** 2 - c2 / (8.d0 * dk + 5.d0) ** 2 & - c2 / (8.d0 * dk + 6.d0) ** 2 - c1 / (8.d0 * dk + 7.d0) ** 2) t1 = t1 + t3 t2 = r16 * t2 if (t3 < 1.d-5 * eps) goto 100 enddo write (6, *) 'catalan: error - contact author' 100 continue catalan = 1.d0 / 8.d0 * qdpi() * log (c2) + 1.d0 / 16.d0 * t1 return end function dplog10q (a) ! For input MP value a, this routine returns a DP approximation to log10 (a). use qdmodule implicit none integer ia double precision da, dplog10q, t1 type (qd_real) a ! call mpmdc (a%mpr, da, ia) da = a ia = 0 if (da .eq. 0.d0) then dplog10q = -9999.d0 else dplog10q = log10 (abs (da)) + ia * log10 (2.d0) endif 100 continue return end subroutine decmdq (a, b, ib) ! For input MP value a, this routine returns DP b and integer ib such that ! a = b * 10^ib, with 1 <= abs (b) < 10 for nonzero a. use qdmodule implicit none integer ia, ib double precision da, b, t1, xlt parameter (xlt = 0.3010299956639812d0) type (qd_real) a ! call mpmdc (a%mpr, da, ia) da = a ia = 0 if (da .ne. 0.d0) then t1 = xlt * ia + log10 (abs (da)) ib = t1 if (t1 .lt. 0.d0) ib = ib - 1 b = sign (10.d0 ** (t1 - ib), da) else b = 0.d0 ib = 0 endif return end qd-2.3.11/fortran/tquadtsq2d.f0000644000175000017500000002221611202062041016357 0ustar prudhommprudhommmodule quadglobal ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC02-05CH11231. ! This program demonstrates the 2D quadrature routine 'quadtsq2d'. ! David H. Bailey 2007-03-23 ! The function quadtsq2d is suitable to integrate any function that is ! continuous, infinitely differentiable and integrable on a 2D finite open ! interval. Singularities or vertical derivatives are permitted on the ! boundaries. This can also be used for certain integrals on infinite ! intervals, by making a suitable change of variable. ! The function(s) to be integrated is(are) defined in external function ! subprogram(s) -- see the sample function subprograms below. The name(s) of ! the function subprogram(s) must be included in appropriate type and external ! statements in the main program. ! Inputs set in parameter statement below: ! ndebug Debug level setting. Default = 2. ! ndigits1 Primary working precision. With QD precision, set to 64. ! nepsilson1 Log10 of the desired tolerance. Normally set to - ndigits1. ! nquadl Max number of phases in quadrature routine; adding 1 increases ! (possibly doubles) the number of accurate digits in the result, ! but also roughly *quadruples* the run time. ! nq2 Space parameter for wk and xk arrays in the calling program. By ! default it is set to 8 * 2^nq1. Increase nq2 if directed by a ! message in subroutine initqts. use qdmodule implicit none integer ndebug, nquadl, ndigits1, nepsilon1, nwords1, nq1, nq2, nqmx parameter (ndebug = 2, nquadl = 6, ndigits1 = 64, nepsilon1 = -64, & nwords1 = 2, nq1 = nquadl, nq2 = 8 * 2**nq1) type (qd_real) xk(-nq2:nq2), wk(-nq2:nq2) end module ! program tquadtsq2d subroutine f_main use qdmodule use quadglobal implicit none integer i, n, n1 double precision dplog10q, d1, d2, second, tm0, tm1 type (qd_real) cat, catalan, err, quadtsq2d, fun01, fun02, fun03, fun04, & t1, t2, t3, t4, x1, x2, y1, y2 external quadtsq2d, catalan, fun01, fun02, fun03, fun04, second integer*4 old_cw ! This line must be present in DD and QD main programs. call f_fpu_fix_start (old_cw) write (6, 1) ndigits1, nepsilon1, nquadl 1 format ('Quadtsq2d test'/'Digits =',i6,' Epsilon =',i6,' Quadlevel =',i6) ! Initialize quadrature tables wk and xk (weights and abscissas). tm0 = second () call initqts tm1 = second () write (6, 2) tm1 - tm0 2 format ('Quadrature initialization completed: cpu time =',f12.6) cat = catalan () ! Begin quadrature tests. write (6, 11) 11 format (/ & 'Problem 1: Int_-1^1 Int_-1^1 1/(1+x^2+y^2) dx dy = 4*log(2+sqrt(3))-2*pi/3') x1 = -1.d0 x2 = 1.d0 y1 = -1.d0 y2 = 1.d0 tm0 = second () t1 = quadtsq2d (fun01, x1, x2, y1, y2) tm1 = second () write (6, 3) tm1 - tm0 3 format ('Quadrature completed: CPU time =',f12.6/'Result =') call qdwrite (6, t1) t2 = 4.d0 * log (2.d0 + sqrt (qdreal (3.d0))) - 2.d0 * qdpi () / 3.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 4 format ('Actual error =',f10.6,'x10^',i5) write (6, 12) 12 format (/& 'Problem 2: Int_0^pi Int_0^pi log (2-cos(s)-cos(t)) = 4*pi*cat- pi^2*log(2)') x1 = 0.d0 x2 = qdpi() y1 = 0.d0 y2 = qdpi() tm0 = second () t1 = quadtsq2d (fun02, x1, x2, y1, y2) tm1 = second () t2 = 4.d0 * qdpi() * cat - qdpi()**2 * log (qdreal (2.d0)) write (6, 3) tm1 - tm0 call qdwrite (6, t1) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 13) 13 format (/& 'Problem 3: Int_0^inf Int_0^inf sqrt(x^2+xy+y^2) * exp(-x-y) = 1 + 3/4*log(3)') x1 = 0.d0 x2 = 1.d0 y1 = 0.d0 y2 = 1.d0 tm0 = second () t1 = quadtsq2d (fun03, x1, x2, y1, y2) tm1 = second () t2 = 1.d0 + 0.75d0 * log (qdreal (3.d0)) write (6, 3) tm1 - tm0 call qdwrite (6, t1) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 14) 14 format (/& 'Problem 4: Int_0^1 Int_0^1 1/(sqrt((1-x)*(1-y))*(x+y)) dx dy = 4*cat') x1 = 0.d0 x2 = 1.d0 y1 = 0.d0 y2 = 1.d0 tm0 = second () t1 = quadtsq2d (fun04, x1, x2, y1, y2) tm1 = second () t2 = 4.d0 * cat write (6, 3) tm1 - tm0 call qdwrite (6, t1) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 call f_fpu_fix_end (old_cw) stop end function fun01 (s, t) ! fun01 (s,t) = 1/sqrt[1+s^2+t^2] use qdmodule implicit none type (qd_real) fun01, s, t fun01 = 1.d0 / sqrt (1.d0 + s**2 + t**2) return end function fun02 (s, t) ! fun02 (s,t) = log (2 - cos(s) - cos(t)) use qdmodule implicit none type (qd_real) fun02, s, t, t1 t1 = 2.d0 - cos (s) - cos (t) if (t1 > 0.d0) then fun02 = log (2.d0 - cos (s) - cos (t)) else fun02 = 0.d0 endif return end function fun03 (s, t) ! fun03 (s,t) = ((1/s-1)^2 + (1/s-1)*(1/t-1) + (1/t-1)^2) ! / (s^2 * t^2 * exp(1/s + 1/t - 2) use qdmodule implicit none type (qd_real) fun03, s, t, s1, t1, sq external dplog10q if (s > 3.d-3 .and. t > 3.d-3) then s1 = 1.d0 / s - 1.d0 t1 = 1.d0 / t - 1.d0 sq = sqrt (s1**2 + s1 * t1 + t1**2) fun03 = sq / (s**2 * t**2) * exp (-s1 - t1) else fun03 = 0.d0 endif return end function fun04 (s, t) ! fun04 (s,t) = 1/(sqrt((1-s)*(1-t)) * (s+t)) use qdmodule implicit none type (qd_real) fun04, s, t fun04 = 1.d0 / (sqrt ((1.d0 - s) * (1.d0 - t)) * (s + t)) return end subroutine initqts ! This subroutine initializes the quadrature arays xk and wk for ! tanh-sinh quadrature. The argument nq2 is set to 8 * 2^nq1 in module ! quadmod above. Increase nq2 if directed by a message produced below. ! One option here is to set ! x(k) = 1.d0 / (t3 * t4) ! instead of the line below. This change stores 1 - absicssas in x(k), ! which can be used to improve quadrature result accuracy in some cases. use qdmodule use quadglobal implicit none integer i, ierror, iprint, j, k, k1 double precision eps, h parameter (iprint = 1000) type (qd_real) pi, p2, t1, t2, t3, t4, t5, u1, u2 pi = qdpi() eps = 10.d0 ** nepsilon1 if (ndebug >= 1) then write (6, 1) 1 format ('initqts: Tanh-sinh quadrature initialization') endif p2 = 0.5d0 * pi h = 0.5d0 ** nq1 do k = 0, nq2 if (ndebug >= 2 .and. mod (k, iprint) == 0) write (6, *) k, nq2 t1 = dble (k) * h ! xk(k) = 1 - tanh (u1) = 1 /(e^u1 * cosh (u1)) ! wk(k) = u2 / cosh (u1)^2 ! where u1 = pi/2 * cosh (t1), u2 = pi/2 * sinh (t1) t2 = exp (t1) u1 = 0.5d0 * p2 * (t2 + 1.d0 / t2) u2 = 0.5d0 * p2 * (t2 - 1.d0 / t2) t3 = exp (u2) t4 = 0.5d0 * (t3 + 1.d0 / t3) xk(k) = 1.d0 - 1.d0 / (t3 * t4) wk(k) = u1 / t4 ** 2 if (k > 0) then xk(-k) = - xk(k) wk(-k) = wk(k) endif if (wk(k) < eps) goto 100 enddo write (6, 2) nq2 2 format ('initqts: Table space parameter is too small; value =',i8) stop 100 continue nqmx = k if (ndebug >= 2) then write (6, 3) k 3 format ('initqts: Table spaced used =',i8) write (6, *) 'final xk, wk =' call qdwrite (6, xk(k), wk(k)) endif return end function quadtsq2d (fun, x1, x2, y1, y2) ! This performs 2-D tanh-sinh quadrature. No attempt is made in this code ! to estimate errors. ! David H. Bailey 2007-03-23 use qdmodule use quadglobal implicit none integer i, j, k, n double precision h type (qd_real) ax, bx, ay, by, quadtsq2d, fun, s1, t1, t2, & x1, x2, xx1, y1, y2, yy1 external fun ax = 0.5d0 * (x2 - x1) bx = 0.5d0 * (x2 + x1) ay = 0.5d0 * (y2 - y1) by = 0.5d0 * (y2 + y1) if (nqmx == 0) then write (6, 1) 1 format ('quadtsq2d: quadrature arrays have not been initialized') stop endif h = 0.5d0 ** nq1 s1 = 0.d0 do k = -nqmx, nqmx ! write (6, *) k, nqmx yy1 = ay * xk(k) + by do j = -nqmx, nqmx xx1 = ax * xk(j) + bx t1 = fun (xx1, yy1) s1 = s1 + wk(j) * wk(k) * t1 enddo enddo quadtsq2d = ax * ay * h**2 * s1 return end function catalan () use qdmodule implicit none integer k real*8 dk, eps type (qd_real) catalan, c1, c2, c4, c8, r16, t1, t2, t3 type (qd_real) x1, x2, x3, x4, x5, x6 c1 = 1.d0 c2 = 2.d0 c4 = 4.d0 c8 = 8.d0 r16 = 1.d0 / 16.d0 t1 = 0.d0 t2 = 1.d0 eps = 1.d-64 do k = 0, 10000000 dk = k t3 = t2 * (c8 / (8.d0 * dk + 1.d0) ** 2 + c8 / (8.d0 * dk + 2.d0) ** 2 & + c4 / (8.d0 * dk + 3.d0) ** 2 - c2 / (8.d0 * dk + 5.d0) ** 2 & - c2 / (8.d0 * dk + 6.d0) ** 2 - c1 / (8.d0 * dk + 7.d0) ** 2) t1 = t1 + t3 t2 = r16 * t2 if (t3 < 1.d-5 * eps) goto 100 enddo write (6, *) 'catalan: error - contact author' 100 continue catalan = 1.d0 / 8.d0 * qdpi() * log (c2) + 1.d0 / 16.d0 * t1 return end function dplog10q (a) ! For input MP value a, this routine returns a DP approximation to log10 (a). use qdmodule implicit none integer ia double precision da, dplog10q, t1 type (qd_real) a ! call mpmdc (a%mpr, da, ia) da = a ia = 0 if (da .eq. 0.d0) then dplog10q = -9999.d0 else dplog10q = log10 (abs (da)) + ia * log10 (2.d0) endif 100 continue return end subroutine decmdq (a, b, ib) ! For input MP value a, this routine returns DP b and integer ib such that ! a = b * 10^ib, with 1 <= abs (b) < 10 for nonzero a. use qdmodule implicit none integer ia, ib double precision da, b, t1, xlt parameter (xlt = 0.3010299956639812d0) type (qd_real) a ! call mpmdc (a%mpr, da, ia) da = a ia = 0 if (da .ne. 0.d0) then t1 = xlt * ia + log10 (abs (da)) ib = t1 if (t1 .lt. 0.d0) ib = ib - 1 b = sign (10.d0 ** (t1 - ib), da) else b = 0.d0 ib = 0 endif return end qd-2.3.11/fortran/f_dd.cpp0000644000175000017500000002246311202062041015520 0ustar prudhommprudhomm/* * src/c_dd.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains the C wrapper functions for double-double precision arithmetic. * This can be used from Fortran code. */ #include "config.h" #ifdef HAVE_FORTRAN #include #include "config.h" #include #include #define f_dd_add FC_FUNC_(f_dd_add, F_DD_ADD) #define f_dd_add_dd_d FC_FUNC_(f_dd_add_dd_d, F_DD_ADD_DD_D) #define f_dd_sub FC_FUNC_(f_dd_sub, F_DD_SUB) #define f_dd_sub_dd_d FC_FUNC_(f_dd_sub_dd_d, F_DD_SUB_DD_D) #define f_dd_sub_d_dd FC_FUNC_(f_dd_sub_d_dd, F_DD_SUB_D_DD) #define f_dd_mul FC_FUNC_(f_dd_mul, F_DD_MUL) #define f_dd_mul_dd_d FC_FUNC_(f_dd_mul_dd_d, F_DD_MUL_DD_D) #define f_dd_div FC_FUNC_(f_dd_div, F_DD_DIV) #define f_dd_div_dd_d FC_FUNC_(f_dd_div_dd_d, F_DD_DIV_DD_D) #define f_dd_div_d_dd FC_FUNC_(f_dd_div_d_dd, F_DD_DIV_D_DD) #define f_dd_sqrt FC_FUNC_(f_dd_sqrt, F_DD_SQRT) #define f_dd_sqr FC_FUNC_(f_dd_sqr, F_DD_SQR) #define f_dd_abs FC_FUNC_(f_dd_abs, F_DD_ABS) #define f_dd_npwr FC_FUNC_(f_dd_npwr, F_DD_NPWR) #define f_dd_nroot FC_FUNC_(f_dd_nroot, F_DD_NROOT) #define f_dd_nint FC_FUNC_(f_dd_nint, F_DD_NINT) #define f_dd_aint FC_FUNC_(f_dd_aint, F_DD_AINT) #define f_dd_floor FC_FUNC_(f_dd_floor, F_DD_FLOOR) #define f_dd_ceil FC_FUNC_(f_dd_ceil, F_DD_CEIL) #define f_dd_exp FC_FUNC_(f_dd_exp, F_DD_EXP) #define f_dd_log FC_FUNC_(f_dd_log, F_DD_LOG) #define f_dd_log10 FC_FUNC_(f_dd_log10, F_DD_LOG10) #define f_dd_sin FC_FUNC_(f_dd_sin, F_DD_SIN) #define f_dd_cos FC_FUNC_(f_dd_cos, F_DD_COS) #define f_dd_tan FC_FUNC_(f_dd_tan, F_DD_TAN) #define f_dd_asin FC_FUNC_(f_dd_asin, F_DD_ASIN) #define f_dd_acos FC_FUNC_(f_dd_acos, F_DD_ACOS) #define f_dd_atan FC_FUNC_(f_dd_atan, F_DD_ATAN) #define f_dd_atan2 FC_FUNC_(f_dd_atan2, F_DD_ATAN2) #define f_dd_sinh FC_FUNC_(f_dd_sinh, F_DD_SINH) #define f_dd_cosh FC_FUNC_(f_dd_cosh, F_DD_COSH) #define f_dd_tanh FC_FUNC_(f_dd_tanh, F_DD_TANH) #define f_dd_asinh FC_FUNC_(f_dd_asinh, F_DD_ASINH) #define f_dd_acosh FC_FUNC_(f_dd_acosh, F_DD_ACOSH) #define f_dd_atanh FC_FUNC_(f_dd_atanh, F_DD_ATANH) #define f_dd_sincos FC_FUNC_(f_dd_sincos, F_DD_SINCOS) #define f_dd_sincosh FC_FUNC_(f_dd_sincosh, F_DD_SINCOSH) #define f_dd_swrite FC_FUNC_(f_dd_swrite, F_DD_SWRITE) #define f_dd_write FC_FUNC_(f_dd_write, F_DD_WRITE) #define f_dd_neg FC_FUNC_(f_dd_neg, F_DD_NEG) #define f_dd_rand FC_FUNC_(f_dd_rand, F_DD_RAND) #define f_dd_comp FC_FUNC_(f_dd_comp, F_DD_COMP) #define f_dd_comp_dd_d FC_FUNC_(f_dd_comp_dd_d, F_DD_COMP_DD_D) #define f_dd_pi FC_FUNC_(f_dd_pi, F_DD_PI) #define f_dd_nan FC_FUNC_(f_dd_nan, F_DD_NAN) #define TO_DOUBLE_PTR(a, ptr) ptr[0] = a.x[0]; ptr[1] = a.x[1]; extern "C" { /* add */ void f_dd_add(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) + dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_dd_add_dd_d(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) + *b; TO_DOUBLE_PTR(cc, c); } /* sub */ void f_dd_sub(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) - dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_dd_sub_dd_d(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) - *b; TO_DOUBLE_PTR(cc, c); } void f_dd_sub_d_dd(const double *a, const double *b, double *c) { dd_real cc; cc = *a - dd_real(b); TO_DOUBLE_PTR(cc, c); } /* mul */ void f_dd_mul(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) * dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_dd_mul_dd_d(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) * *b; TO_DOUBLE_PTR(cc, c); } /* div */ void f_dd_div(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) / dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_dd_div_dd_d(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) / *b; TO_DOUBLE_PTR(cc, c); } void f_dd_div_d_dd(const double *a, const double *b, double *c) { dd_real cc; cc = *a / dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_dd_sqrt(const double *a, double *b) { dd_real bb; bb = sqrt(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_sqr(const double *a, double *b) { dd_real bb; bb = sqr(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_abs(const double *a, double *b) { dd_real bb; bb = abs(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_npwr(const double *a, const int *n, double *b) { dd_real bb; bb = npwr(dd_real(a), *n); TO_DOUBLE_PTR(bb, b); } void f_dd_nroot(const double *a, const int *n, double *b) { dd_real bb; bb = nroot(dd_real(a), *n); TO_DOUBLE_PTR(bb, b); } void f_dd_nint(const double *a, double *b) { dd_real bb; bb = nint(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_aint(const double *a, double *b) { dd_real bb; bb = aint(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_floor(const double *a, double *b) { dd_real bb; bb = floor(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_ceil(const double *a, double *b) { dd_real bb; bb = ceil(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_log(const double *a, double *b) { dd_real bb; bb = log(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_log10(const double *a, double *b) { dd_real bb; bb = log10(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_exp(const double *a, double *b) { dd_real bb; bb = exp(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_sin(const double *a, double *b) { dd_real bb; bb = sin(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_cos(const double *a, double *b) { dd_real bb; bb = cos(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_tan(const double *a, double *b) { dd_real bb; bb = tan(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_asin(const double *a, double *b) { dd_real bb; bb = asin(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_acos(const double *a, double *b) { dd_real bb; bb = acos(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_atan(const double *a, double *b) { dd_real bb; bb = atan(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_atan2(const double *a, const double *b, double *c) { dd_real cc; cc = atan2(dd_real(a), dd_real(b)); TO_DOUBLE_PTR(cc, c); } void f_dd_sinh(const double *a, double *b) { dd_real bb; bb = sinh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_cosh(const double *a, double *b) { dd_real bb; bb = cosh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_tanh(const double *a, double *b) { dd_real bb; bb = tanh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_asinh(const double *a, double *b) { dd_real bb; bb = asinh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_acosh(const double *a, double *b) { dd_real bb; bb = acosh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_atanh(const double *a, double *b) { dd_real bb; bb = atanh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_dd_sincos(const double *a, double *s, double *c) { dd_real ss, cc; sincos(dd_real(a), ss, cc); TO_DOUBLE_PTR(ss, s); TO_DOUBLE_PTR(cc, c); } void f_dd_sincosh(const double *a, double *s, double *c) { dd_real ss, cc; sincosh(dd_real(a), ss, cc); TO_DOUBLE_PTR(ss, s); TO_DOUBLE_PTR(cc, c); } /* Writes a dd_real into a character array of length maxlen, with * the given precision. The rest of the array will be filled with * spaces. Parameter maxlen should at least be precision + 7 * characters. Prec can be zero to put out the defaut number of * digits. */ void f_dd_swrite(const double *a, int *precision, char *s, int *maxlen) { int prec = *precision; if (prec <= 0 || prec > dd_real::_ndigits) prec = dd_real::_ndigits; std::ios_base::fmtflags fmt = static_cast(0); std::string str = dd_real(a).to_string(prec, 0, fmt, false, true); int len = 0; if (a[0] < 0.0) { strncpy(&s[len], str.c_str(), *maxlen - len); } else { s[len++] = ' '; strncpy(&s[len], str.c_str(), *maxlen - len); } len += str.length(); for (int i = len; i < *maxlen; i++) s[i] = ' '; } void f_dd_write(const double *a) { std::cout << dd_real(a) << std::endl; } void f_dd_neg(const double *a, double *b) { b[0] = -a[0]; b[1] = -a[1]; } void f_dd_rand(double *a) { dd_real aa; aa = ddrand(); TO_DOUBLE_PTR(aa, a); } void f_dd_comp(const double *a, const double *b, int *result) { dd_real aa(a), bb(b); if (aa < bb) *result = -1; else if (aa > bb) *result = 1; else *result = 0; } void f_dd_comp_dd_d(const double *a, const double *b, int *result) { dd_real aa(a); if (aa < *b) *result = -1; else if (aa > *b) *result = 1; else *result = 0; } void f_dd_comp_d_dd(const double *a, const double *b, int *result) { dd_real bb(b); if (*a < bb) *result = -1; else if (*a > bb) *result = 1; else *result = 0; } void f_dd_pi(double *a) { TO_DOUBLE_PTR(dd_real::_pi, a); } void f_dd_nan(double *a) { TO_DOUBLE_PTR(dd_real::_nan, a); } } #endif /* HAVE_FORTRAN */ qd-2.3.11/fortran/Makefile.sample0000644000175000017500000000215111202062041017030 0ustar prudhommprudhomm# Sample Makefile for compiling Fortran programs using Quad-Double library. # Make sure the script qd-config (installed during "make install") # is in your path. # Fortran compiler. Should be whatever "qd-config --fc" returns. FC=$(shell qd-config --fc) # C++ compiler. Used for linking. # Should be whatever "qd-config --cxx" returns. CXX=$(shell qd-config --cxx) # Fortran compiler flags. Should be whatever "qd-config --fcflags" # returns, but some items (like optimization levels) # can be # tweaked if desired. FCFLAGS=$(shell qd-config --fcflags) # Linker flags. Includes the Quad-Double library and any Fortran # libraries that needs to be linked in. Should be whatever # "qd-config --fclibs" returns FCLIBS=$(shell qd-config --fclibs) # If your main proram is written in Fortran, you need declare your # main program as "subroutine f_main", not "program myprog", since # C++ linker must find the main entry, provided by # "qd-config --fmainlib". FCMAIN=$(shell qd-config --fmainlib) fortran_test: fortran_test.o $(CXX) -o $@ fortran_test.o $(FCLIBS) $(FCMAIN) %.o: %.f90 $(FC) -c $(FCFLAGS) $< qd-2.3.11/fortran/qd_timer.f0000644000175000017500000000542011202062041016065 0ustar prudhommprudhomm! program to time the various routines subroutine f_main use qdmodule implicit none integer*4 old_cw double precision t double precision second double precision time_thresh parameter (time_thresh = 0.5d0) type (qd_real) a, b, c, d integer n, i, k call f_fpu_fix_start (old_cw) write (6, *) 'Timing addition / subtraction ...' n = 512 do k = 1, 25 n = n * 2 a = qdpi() b = sqrt(a) c = sqrt(b) d = sqrt(c) t = second() do i = 1, n a = b + c b = a - d a = b + c b = a - d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call qdwrite(6, a) write (6, *) 'Timing multiplication ...' n = 512 do k = 1, 25 n = n * 2 a = 1.0d0 + qdpi() * 1.0d-7 b = a + 1.0d-7 c = b + 1.0d-8 d = c + 1.0d-9 t = second() do i = 1, n a = b * c b = a * d a = b * c b = a * d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call qdwrite(6, a) write (6, *) 'Timing division ...' n = 512 do k = 1, 25 n = n * 2 a = 1.0d0 + qdpi() b = 2.0d0 + qdpi() c = 1.0d0 + 1.0d-8 d = 1.0d0 + 1.0d-9 t = second() do i = 1, n a = b / c b = a / d a = b / c b = a / d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call qdwrite(6, a) write (6, *) 'Timing square root ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 b = 2.0d0 + qdpi() t = second() do i = 1, n a = sqrt(a + b) enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call qdwrite(6, a) write (6, *) 'Timing sin ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 c = 1.7d0 * qdreal(1.0d0) / dble(n) d = 2.45d0 * qdpi() / dble(n + 3) t = second() do i = 1, n a = a + sin(c) c = c + d enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call qdwrite(6, a) write (6, *) 'Timing log ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 c = exp(qdreal(-50.1d0)); d = exp(qdreal(100.2d0) / dble(n)) t = second() do i = 1, n a = a + log(c) c = c * d enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call qdwrite(6, a) end qd-2.3.11/fortran/qdext.f0000644000175000017500000001352711202062041015415 0ustar prudhommprudhomm! module file describing the C++-to-Fortran interface found in f_qd.cpp. module qdext implicit none interface pure subroutine f_qd_add(a, b, c) real*8, intent(in) :: a(4), b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_add_qd_d(a, b, c) real*8, intent(in) :: a(4), b real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_add_d_qd(a, b, c) real*8, intent(in) :: a, b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_sub(a, b, c) real*8, intent(in) :: a(4), b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_sub_qd_d(a, b, c) real*8, intent(in) :: a(4), b real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_sub_d_qd(a, b, c) real*8, intent(in) :: a, b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_mul(a, b, c) real*8, intent(in) :: a(4), b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_mul_qd_d(a, b, c) real*8, intent(in) :: a(4), b real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_mul_d_qd(a, b, c) real*8, intent(in) :: a, b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_div(a, b, c) real*8, intent(in) :: a(4), b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_div_qd_d(a, b, c) real*8, intent(in) :: a(4), b real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_div_d_qd(a, b, c) real*8, intent(in) :: a, b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_sqrt(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_sqr(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_abs(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_npwr(a, n, b) real*8, intent(in) :: a(4) integer, intent(in) :: n real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_nroot(a, n, b) real*8, intent(in) :: a(4) integer, intent(in) :: n real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_nint(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_aint(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_floor(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_ceil(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_log(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_log10(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_exp(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_sin(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_cos(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_tan(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_asin(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_acos(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_atan(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_atan2(a, b, c) real*8, intent(in) :: a(4), b(4) real*8, intent(out) :: c(4) end subroutine pure subroutine f_qd_sinh(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_cosh(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_tanh(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_asinh(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_acosh(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_atanh(a, b) real*8, intent(in) :: a(4) real*8, intent(out) :: b(4) end subroutine pure subroutine f_qd_sincos(a, s, c) real*8, intent(in) :: a(4) real*8, intent(out) :: s(4), c(4) end subroutine pure subroutine f_qd_sincosh(a, s, c) real*8, intent(in) :: a(4) real*8, intent(out) :: s(4), c(4) end subroutine subroutine f_qd_swrite(a, prec, str, maxlen) real*8, intent(in) :: a(4) integer, intent(in) :: prec, maxlen character, intent(out) :: str(*) end subroutine subroutine f_qd_rand(a) real*8, intent(out) :: a(4) end subroutine pure subroutine f_qd_comp(a, b, r) real*8, intent(in) :: a(4), b(4) integer, intent(out) :: r end subroutine pure subroutine f_qd_comp_qd_d(a, b, r) real*8, intent(in) :: a(4), b integer, intent(out) :: r end subroutine pure subroutine f_qd_comp_d_qd(a, b, r) real*8, intent(in) :: a, b(4) integer, intent(out) :: r end subroutine pure subroutine f_qd_pi(a) real*8, intent(out) :: a(4) end subroutine pure subroutine f_qd_nan(a) real*8, intent(out) :: a(4) end subroutine end interface end qd-2.3.11/fortran/tquadgsq.f0000644000175000017500000004217611202062041016123 0ustar prudhommprudhommmodule quadglobal use qdmodule implicit none integer ndebug, ndigits, nerror, nquadl end module ! program tquadgsq subroutine f_main ! David H. Bailey 2004-12-16 ! This is Quad-Double Fortran-90 version. ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC03-76SF00098. ! This program demonstrates the quadrature routine 'quadgsq', which employs ! Gaussian quadrature. The function quadgsq is suitable to integrate ! a function that is continuous, infinitely differentiable and integrable on a ! finite open interval. It can also be used for certain integrals on infinite ! intervals, by making a suitable change of variable -- see below. While ! this routine is usually more efficient than quaderf or quadts for functions ! that are regular on a closed interval, it is not very effective for ! functions with a singularity at one or both of the endpoints. ! The function(s) to be integrated is(are) defined in external function ! subprogram(s) -- see the sample function subprograms below. The name(s) of ! the function subprogram(s) must be included in appropriate type and external ! statements in the main program. ! Note that an integral of a function on an infinite interval can be ! converted to an integral on a finite interval by means of a suitable ! change of variable. Example (here the notation "inf" means infinity): ! Int_0^inf f(t) dt = Int_0^1 f(t) dt + Int_1^inf f(t) dt ! = Int_0^1 f(t) dt + Int_0^1 f(1/t)/t^2 dt ! See examples below. ! Inputs set in parameter statement below: ! kdebug Debug level setting. Default = 2. ! ndp Digits of precision. May not exceed mpipl in file mpmod90.f. ! In some cases, ndp must be significantly greater than the desired ! tolerance in the result-- see the examples below. ! neps Log10 of the desired tolerance in the result (negative integer). ! nq1 Max number of phases in quadrature routine; adding 1 increases ! (possibly doubles) the number of accurate digits in the result, ! but also roughly doubles the run time and memory. nq1 > 2. ! nq2 Space parameter for wk and xk arrays in the calling program. By ! default it is set to 8 * 2^nq1. Increase nq2 if directed by a ! message produced in initqerf. Note that the dimension of the ! wk and xk arrays starts with -1, so the length of these arrays is ! (nq2+2) * 4 eight-byte words. use qdmodule use quadglobal implicit none integer i, kdebug, ndp, neps, nq1, nq2, n1 parameter (kdebug = 2, ndp = 64, neps = -64, nq1 = 8, nq2 = 8 * 2 ** nq1 +100) double precision dplog10q, d1, d2, second, tm0, tm1 type (qd_real) err, quadgsq, fun01, fun02, fun03, fun04, fun05, fun06, fun07, & fun08, fun09, fun10, fun11, fun12, fun13, fun14, fun15a, fun15b, & t1, t2, t3, t4, wk(-1:nq2), xk(-1:nq2), x1, x2 external quadgsq, fun01, fun02, fun03, fun04, fun05, fun06, fun07, fun08, & fun09, fun10, fun11, fun12, fun13, fun14, fun15a, fun15b, second integer*4 old_cw call f_fpu_fix_start (old_cw) ndebug = kdebug ndigits = ndp nerror = 0 nquadl = nq1 write (6, 1) ndigits, neps, nquadl 1 format ('Quadgsq test'/'Digits =',i6,' Epsilon =',i6,' Quadlevel =',i6) ! Initialize quadrature tables wk and xk (weights and abscissas). tm0 = second () call initqgsq (nq1, nq2, wk, xk) tm1 = second () if (nerror > 0) stop write (6, 2) tm1 - tm0 2 format ('Quadrature initialization completed: cpu time =',f12.6) ! Begin quadrature tests. write (6, 11) 11 format (/'Continuous functions on finite itervals:'//& 'Problem 1: Int_0^1 t*log(1+t) dt = 1/4') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun01, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 3 format ('Quadrature completed: CPU time =',f12.6/'Result =') call qdwrite (6, t1) t2 = 0.25d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 4 format ('Actual error =',f10.6,'x10^',i5) write (6, 12) 12 format (/'Problem 2: Int_0^1 t^2*arctan(t) dt = (pi - 2 + 2*log(2))/12') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun02, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = (qdpi() - 2.d0 + 2.d0 * log (qdreal (2.d0))) / 12.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 13) 13 format (/'Problem 3: Int_0^(pi/2) e^t*cos(t) dt = 1/2*(e^(pi/2) - 1)') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quadgsq (fun03, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * (exp (0.5d0 * qdpi()) - 1.d0) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 14) 14 format (/ & 'Problem 4: Int_0^1 arctan(sqrt(2+t^2))/((1+t^2)sqrt(2+t^2)) dt = 5*Pi^2/96') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun04, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 5.d0 * qdpi()**2 / 96.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 15) 15 format (/& 'Continuous functions on finite itervals, but non-diff at an endpoint'// & 'Problem 5: Int_0^1 sqrt(t)*log(t) dt = -4/9') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun05, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = qdreal (-4.d0) / 9.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 16) 16 format (/'Problem 6: Int_0^1 sqrt(1-t^2) dt = pi/4') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun06, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.25d0 * qdpi() call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 17) 17 format (/& 'Functions on finite intervals with integrable singularity at an endpoint.'//& 'Problem 7: Int_0^1 t/sqrt(1-t^2) dt = 1') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun07, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 1.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 18) 18 format (/'Problem 8: Int_0^1 log(t)^2 dt = 2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun08, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 2.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 19) 19 format (/'Problem 9: Int_0^(pi/2) log(cos(t)) dt = -pi*log(2)/2') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quadgsq (fun09, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = -0.5d0 * qdpi() * log (qdreal (2.d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 20) 20 format (/'Problem 10: Int_0^(pi/2) sqrt(tan(t)) dt = pi*sqrt(2)/2') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quadgsq (fun10, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * qdpi() * sqrt (qdreal (2.d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 21) 21 format (/& 'Functions on an infinite interval (requiring a two-step solution'//& 'Problem 11: Int_0^inf 1/(1+t^2) dt = pi/2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun11, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * qdpi() call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 22) 22 format (/'Problem 12: Int_0^inf e^(-t)/sqrt(t) dt = sqrt(pi)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun12, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = sqrt (qdpi()) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 23) 23 format (/'Problem 13: Int_0^inf e^(-t^2/2) dt = sqrt(pi/2)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun13, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = sqrt (0.5d0 * qdpi()) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 24) 24 format (/& 'Oscillatory functions on an infinite interval.'//& 'Problem 14: Int_0^inf e^(-t)*cos(t) dt = 1/2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadgsq (fun14, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 25) 25 format (/'Problem 15: Int_0^inf sin(t)/t = pi/2') x1 = 0.d0 x2 = qdpi() tm0 = second () t1 = quadgsq (fun15a, x1, x2, nq1, nq2, wk, xk) x2 = 1.d0 / qdpi() t2 = quadgsq (fun15b, x1, x2, nq1, nq2, wk, xk) t3 = t1 + 40320.d0 * t2 - 1.d0 / qdpi() + 2.d0 / qdpi() ** 3 & - 24.d0 / qdpi() ** 5 + 720.d0 / qdpi() ** 7 tm1 = second () write (6, 3) tm1 - tm0 t4 = 0.5d0 * qdpi() call decmdq (t4 - t3, d1, n1) write (6, 4) d1, n1 write (6, 26) 26 format ('Prob 15 error may be 40,000 X higher than estimated error.') call f_fpu_fix_end (old_cw) stop end function fun01 (t) ! fun01(t) = t * log(1+t) use qdmodule implicit none type (qd_real) fun01, t fun01 = t * log (1.d0 + t) return end function fun02 (t) ! fun02(t) = t^2 * arctan(t) use qdmodule implicit none type (qd_real) fun02, t fun02 = t ** 2 * atan (t) return end function fun03 (t) ! fun03(t) = e^t * cos(t) use qdmodule implicit none type (qd_real) fun03, t fun03 = exp(t) * cos(t) return end function fun04 (t) ! fun04(t) = arctan(sqrt(2+t^2))/((1+t^2)sqrt(2+t^2)) use qdmodule implicit none type (qd_real) fun04, t, t1 t1 = sqrt (2.d0 + t**2) fun04 = atan(t1)/((1.d0 + t**2)*t1) return end function fun05 (t) ! fun05(t) = sqrt(t)*log(t) use qdmodule implicit none type (qd_real) fun05, t fun05 = sqrt (t) * log (t) return end function fun06 (t) ! fun06(t) = sqrt(1-t^2) use qdmodule implicit none type (qd_real) fun06, t fun06 = sqrt (1.d0 - t**2) return end function fun07 (t) ! fun07(t) = t / sqrt(1-t^2) use qdmodule implicit none type (qd_real) fun07, t fun07 = t / sqrt (1.d0 - t**2) return end function fun08 (t) ! fun08(t) = log(t)^2 use qdmodule implicit none type (qd_real) fun08, t fun08 = log (t) ** 2 return end function fun09 (t) ! fun09(t) = log (cos (t)) use qdmodule implicit none type (qd_real) fun09, t fun09 = log (cos (t)) return end function fun10 (t) ! fun10(t) = sqrt(tan(t)) use qdmodule implicit none type (qd_real) fun10, t fun10 = sqrt (tan (t)) return end function fun11 (t) ! fun11(t) = 1/(u^2(1+(1/u-1)^2)) = 1/(1 - 2*u + u^2) use qdmodule implicit none type (qd_real) fun11, t fun11 = 1.d0 / (1.d0 - 2.d0 * t + 2.d0 * t ** 2) return end function fun12 (t) ! fun12(t) = e^(-(1/t-1)) / sqrt(t^3 - t^4) use qdmodule implicit none type (qd_real) fun12, t, t1 t1 = 1.d0 / t - 1.d0 fun12 = exp (-t1) / sqrt (t ** 3 - t ** 4) return end function fun13 (t) ! fun13(t) = e^(-(1/t-1)^2/2) / t^2 use qdmodule implicit none type (qd_real) fun13, t, t1 t1 = 1.d0 / t - 1.d0 fun13 = exp (-0.5d0 * t1 ** 2) / t ** 2 return end function fun14 (t) ! fun14(t) = e^(-(1/t-1)) * cos (1/t-1) / t^2 use qdmodule implicit none type (qd_real) fun14, t, t1 t1 = 1.d0 / t - 1.d0 fun14 = exp (-t1) * cos (t1) / t ** 2 return end function fun15a (t) ! fun15a(t) = sin(t)/t use qdmodule use quadglobal implicit none type (qd_real) fun15a, t fun15a = sin (t) / t return end function fun15b (t) ! fun15b(t) = t^7 * sin(1/t) use qdmodule use quadglobal implicit none type (qd_real) fun15b, t if (abs (t) > 1.d-10) then fun15b = t**7 * sin (1.d0 / t) else fun15b = 0.d0 endif return end subroutine initqgsq (nq1, nq2, wk, xk) ! This subroutine initializes the quadrature arays xk and wk for Gaussian ! quadrature. It employs a Newton iteration scheme with a dynamic precision ! level. The argument nq2, which is the space allocated for wk and xk in ! the calling program, should be at least 8 * 2^nq1 + 100, although a higher ! value may be required, depending on precision level. Monitor the space ! figure given in the message below during initialization to be certain. ! David H Bailey 2002-11-04 use qdmodule use quadglobal implicit none integer i, ierror, ik0, is, j, j1, k, n, nq1, nq2, nwp, nws double precision pi parameter (pi = 3.141592653589793238d0) type (qd_real) eps, r, t1, t2, t3, t4, t5, wk(-1:nq2), xk(-1:nq2) parameter (ik0 = 100) if (ndebug >= 1) then write (6, 1) 1 format ('initqgsq: Gaussian quadrature initialization') endif eps = 1.d-64 wk(-1) = dble (nq1) wk(0) = 0.d0 xk(0) = 0.d0 wk(1) = dble (nq1) xk(1) = dble (ik0) i = ik0 do j = 2, ik0 wk(j) = 0.d0 xk(j) = 0.d0 enddo do k = 1, nq1 if (ndebug >= 2) write (6, *) k, i, nq2 n = 3 * 2 ** (k + 1) do j = 1, n / 2 ! Compute a double precision estimate of the root. is = 0 r = cos ((pi * (j - 0.25d0)) / (n + 0.5d0)) ! Compute the j-th root of the n-degree Legendre polynomial using Newton's ! iteration. 100 continue t1 = 1.d0 t2 = 0.d0 do j1 = 1, n t3 = t2 t2 = t1 t1 = (dble (2 * j1 - 1) * r * t2 - dble (j1 - 1) * t3) / dble (j1) enddo t4 = dble (n) * (r * t1 - t2) / (r ** 2 - 1.d0) t5 = r r = r - t1 / t4 ! Once convergence is achieved at nwp = 3, then start doubling (almost) the ! working precision level at each iteration until full precision is reached. if (abs (r - t5) > eps) goto 100 i = i + 1 if (i > nq2) goto 110 xk(i) = r t4 = dble (n) * (r * t1 - t2) / (r ** 2 - 1.d0) wk(i) = 2.d0 / ((1.d0 - r ** 2) * t4 ** 2) enddo xk(k+1) = dble (i) enddo xk(-1) = dble (i) if (ndebug >= 2) then write (6, 2) i 2 format ('initqerf: Table spaced used =',i8) endif goto 130 110 continue write (6, 3) nq2 3 format ('initqgsq: Table space parameter is too small; value =',i8) nerror = 92 goto 130 120 continue nerror = ierror + 100 write (6, 4) nerror 4 format ('initqgsq: Error in quadrature initialization; code =',i5) 130 continue return end function quadgsq (fun, x1, x2, nq1, nq2, wk, xk) ! This routine computes the integral of the function fun on the interval ! [0, 1], with up to nq1 iterations, with a target tolerance of eps. ! wk and xk are precomputed tables of weights and abscissas, each of size ! nq2 and of type qd_real. The function fun is not evaluated at x1 or x2. ! David H. Bailey 2002-11-04 use qdmodule use quadglobal implicit none integer i, ierror, ik0, k, j, n, nds, nq1, nq2 double precision d1, d2, d3, d4, dplog10q type (qd_real) a, b, c10, quadgsq, eps, eps1, eps2, err, fmx, fun, h, sum, & s1, s2, s3, t1, t2, t3, wk(-1:nq2), xk(-1:nq2), x1, x2, xx1, xx2 external fun, dplog10q parameter (ik0 = 100) a = 0.5d0 * (x2 - x1) b = 0.5d0 * (x2 + x1) s1 = 0.d0 s2 = 0.d0 c10 = 10.d0 eps = 1.d-64 eps1 = 1.d-61 if (wk(-1) < dble (nq1)) then write (6, 1) nq1 1 format ('quadgsq: quadrature arrays have not been initialized; nq1 =',i6) nerror = 70 goto 130 endif do k = 1, nq1 n = 3 * 2 ** (k + 1) s3 = s2 s2 = s1 fmx = 0.d0 sum = 0.d0 i = dble (xk(k)) do j = 1, n / 2 i = i + 1 xx1 = - a * xk(i) + b xx2 = a * xk(i) + b if (xx1 > x1) then t1 = fun (xx1) else t1 = 0.d0 endif if (xx2 < x2 .and. j + k > 2) then t2 = fun (xx2) else t2 = 0.d0 endif sum = sum + wk(i) * (t1 + t2) fmx = max (fmx, abs (t1), abs (t2)) enddo s1 = a * sum eps2 = fmx * eps d1 = dplog10q (abs (s1 - s2)) d2 = dplog10q (abs (s1 - s3)) d3 = dplog10q (eps2) - 1.d0 if (k <= 2) then err = 1.d0 elseif (d1 .eq. -9999.d0) then err = 0.d0 else d4 = min (0.d0, max (d1 ** 2 / d2, 2.d0 * d1, d3)) err = c10 ** nint (d4) endif ! Output current integral approximation and error estimate, to 56 dp. if (ndebug >= 2) then write (6, 2) k, nq1, nint (dplog10q (abs (err))) 2 format ('quadgsq: Iteration',i3,' of',i3,'; est error = 10^',i5, & '; approx value =') call qdwrite (6, s1) endif if (k >= 3 .and. err < eps1) goto 130 if (k >= 3 .and. err < eps2) goto 110 enddo write (6, 3) nint (dplog10q (abs (err))), nquadl 3 format ('quadgsq: Estimated error = 10^',i5/& 'Increase Quadlevel for greater accuracy. Current Quadlevel =',i4) if (err > 1.d-20) then write (6, 4) 4 format ('quadgsq: Poor results may be due to singularities at endpoints.'/& 'If so, try the erf or tanh-sinh quadrature routines (Quadtype = 2 or 3).') endif goto 130 110 continue write (6, 5) nint (dplog10q (abs (err))), ndigits 5 format ('quadgsq: Estimated error = 10^',i5/& 'Increase working prec (Digits) for greater accuracy. Current Digits =',i4) goto 130 120 continue nerror = ierror + 100 write (6, 6) nerror 6 format ('quadgsq: Error in quadrature calculation; code =',i5) s1 = 0.d0 130 continue quadgsq = s1 return end function dplog10q (a) ! For input MP value a, this routine returns a DP approximation to log10 (a). use qdmodule implicit none integer ia double precision da, dplog10q, t1 type (qd_real) a da = a if (da .eq. 0.d0) then dplog10q = -9999.d0 else dplog10q = log10 (abs (da)) endif 100 continue return end subroutine decmdq (a, b, ib) ! For input MP value a, this routine returns DP b and integer ib such that ! a = b * 10^ib, with 1 <= abs (b) < 10 for nonzero a. use qdmodule implicit none integer ia, ib double precision da, b, t1, xlt parameter (xlt = 0.3010299956639812d0) type (qd_real) a da = a if (da .ne. 0.d0) then t1 = log10 (abs (da)) ib = t1 if (t1 .lt. 0.d0) ib = ib - 1 b = sign (10.d0 ** (t1 - ib), da) else b = 0.d0 ib = 0 endif return end qd-2.3.11/fortran/zz_timer.f0000644000175000017500000000542011202062041016124 0ustar prudhommprudhomm! program to time the various routines subroutine f_main use @@module implicit none integer*4 old_cw double precision t double precision second double precision time_thresh parameter (time_thresh = 0.5d0) type (@@_real) a, b, c, d integer n, i, k call f_fpu_fix_start (old_cw) write (6, *) 'Timing addition / subtraction ...' n = 512 do k = 1, 25 n = n * 2 a = @@pi() b = sqrt(a) c = sqrt(b) d = sqrt(c) t = second() do i = 1, n a = b + c b = a - d a = b + c b = a - d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call @@write(6, a) write (6, *) 'Timing multiplication ...' n = 512 do k = 1, 25 n = n * 2 a = 1.0d0 + @@pi() * 1.0d-7 b = a + 1.0d-7 c = b + 1.0d-8 d = c + 1.0d-9 t = second() do i = 1, n a = b * c b = a * d a = b * c b = a * d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call @@write(6, a) write (6, *) 'Timing division ...' n = 512 do k = 1, 25 n = n * 2 a = 1.0d0 + @@pi() b = 2.0d0 + @@pi() c = 1.0d0 + 1.0d-8 d = 1.0d0 + 1.0d-9 t = second() do i = 1, n a = b / c b = a / d a = b / c b = a / d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call @@write(6, a) write (6, *) 'Timing square root ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 b = 2.0d0 + @@pi() t = second() do i = 1, n a = sqrt(a + b) enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call @@write(6, a) write (6, *) 'Timing sin ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 c = 1.7d0 * @@real(1.0d0) / dble(n) d = 2.45d0 * @@pi() / dble(n + 3) t = second() do i = 1, n a = a + sin(c) c = c + d enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call @@write(6, a) write (6, *) 'Timing log ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 c = exp(@@real(-50.1d0)); d = exp(@@real(100.2d0) / dble(n)) t = second() do i = 1, n a = a + log(c) c = c * d enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call @@write(6, a) end qd-2.3.11/fortran/main.cpp0000644000175000017500000000027711202062041015547 0ustar prudhommprudhomm#include #include #include "config.h" #define f_main FC_FUNC_(f_main, F_MAIN) extern "C" void f_main(); int main() { fpu_fix_start(NULL); f_main(); return 0; } qd-2.3.11/fortran/Makefile.in0000644000175000017500000005614711202062041016173 0ustar prudhommprudhomm# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 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. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@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 = fortran DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/second.f.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_clock_gettime.m4 \ $(top_srcdir)/m4/ax_cxx_copysign.m4 \ $(top_srcdir)/m4/ax_cxx_fc_lib.m4 \ $(top_srcdir)/m4/ax_cxx_fma.m4 \ $(top_srcdir)/m4/ax_cxx_isfinite.m4 \ $(top_srcdir)/m4/ax_cxx_isinf.m4 \ $(top_srcdir)/m4/ax_cxx_isnan.m4 \ $(top_srcdir)/m4/ax_f90_module_flag.m4 \ $(top_srcdir)/m4/ax_f90_module_style.m4 \ $(top_srcdir)/m4/ax_fc_etime.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/include/qd/qd_config.h CONFIG_CLEAN_FILES = second.f 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkglibdir)" libLIBRARIES_INSTALL = $(INSTALL_DATA) LIBRARIES = $(lib_LIBRARIES) AR = ar ARFLAGS = cru libqd_f_main_a_AR = $(AR) $(ARFLAGS) libqd_f_main_a_LIBADD = am__libqd_f_main_a_SOURCES_DIST = main.cpp @HAVE_FORTRAN_TRUE@am_libqd_f_main_a_OBJECTS = main.$(OBJEXT) libqd_f_main_a_OBJECTS = $(am_libqd_f_main_a_OBJECTS) libqdmod_a_AR = $(AR) $(ARFLAGS) libqdmod_a_LIBADD = am__libqdmod_a_SOURCES_DIST = ddext.f ddmod.f qdext.f qdmod.f f_dd.cpp \ f_qd.cpp @HAVE_FORTRAN_TRUE@am_libqdmod_a_OBJECTS = ddext.$(OBJEXT) \ @HAVE_FORTRAN_TRUE@ ddmod.$(OBJEXT) qdext.$(OBJEXT) \ @HAVE_FORTRAN_TRUE@ qdmod.$(OBJEXT) f_dd.$(OBJEXT) \ @HAVE_FORTRAN_TRUE@ f_qd.$(OBJEXT) libqdmod_a_OBJECTS = $(am_libqdmod_a_OBJECTS) am__dd_timer_SOURCES_DIST = dd_timer.f @HAVE_FORTRAN_TRUE@am_dd_timer_OBJECTS = dd_timer.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_dd_timer_OBJECTS = second.$(OBJEXT) dd_timer_OBJECTS = $(am_dd_timer_OBJECTS) $(nodist_dd_timer_OBJECTS) dd_timer_LDADD = $(LDADD) am__DEPENDENCIES_1 = @HAVE_FORTRAN_TRUE@dd_timer_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am__qd_timer_SOURCES_DIST = qd_timer.f @HAVE_FORTRAN_TRUE@am_qd_timer_OBJECTS = qd_timer.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_qd_timer_OBJECTS = second.$(OBJEXT) qd_timer_OBJECTS = $(am_qd_timer_OBJECTS) $(nodist_qd_timer_OBJECTS) qd_timer_LDADD = $(LDADD) @HAVE_FORTRAN_TRUE@qd_timer_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am__quaderq_SOURCES_DIST = tquaderq.f @HAVE_FORTRAN_TRUE@am_quaderq_OBJECTS = tquaderq.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_quaderq_OBJECTS = second.$(OBJEXT) quaderq_OBJECTS = $(am_quaderq_OBJECTS) $(nodist_quaderq_OBJECTS) quaderq_LDADD = $(LDADD) @HAVE_FORTRAN_TRUE@quaderq_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am__quadgsq_SOURCES_DIST = tquadgsq.f @HAVE_FORTRAN_TRUE@am_quadgsq_OBJECTS = tquadgsq.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_quadgsq_OBJECTS = second.$(OBJEXT) quadgsq_OBJECTS = $(am_quadgsq_OBJECTS) $(nodist_quadgsq_OBJECTS) quadgsq_LDADD = $(LDADD) @HAVE_FORTRAN_TRUE@quadgsq_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am__quadgsq2d_SOURCES_DIST = tquadgsq2d.f @HAVE_FORTRAN_TRUE@am_quadgsq2d_OBJECTS = tquadgsq2d.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_quadgsq2d_OBJECTS = second.$(OBJEXT) quadgsq2d_OBJECTS = $(am_quadgsq2d_OBJECTS) \ $(nodist_quadgsq2d_OBJECTS) quadgsq2d_LDADD = $(LDADD) @HAVE_FORTRAN_TRUE@quadgsq2d_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am__quadtsq_SOURCES_DIST = tquadtsq.f @HAVE_FORTRAN_TRUE@am_quadtsq_OBJECTS = tquadtsq.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_quadtsq_OBJECTS = second.$(OBJEXT) quadtsq_OBJECTS = $(am_quadtsq_OBJECTS) $(nodist_quadtsq_OBJECTS) quadtsq_LDADD = $(LDADD) @HAVE_FORTRAN_TRUE@quadtsq_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am__quadtsq2d_SOURCES_DIST = tquadtsq2d.f @HAVE_FORTRAN_TRUE@am_quadtsq2d_OBJECTS = tquadtsq2d.$(OBJEXT) @HAVE_FORTRAN_TRUE@nodist_quadtsq2d_OBJECTS = second.$(OBJEXT) quadtsq2d_OBJECTS = $(am_quadtsq2d_OBJECTS) \ $(nodist_quadtsq2d_OBJECTS) quadtsq2d_LDADD = $(LDADD) @HAVE_FORTRAN_TRUE@quadtsq2d_DEPENDENCIES = libqdmod.a libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) F77LD = $(F77) F77LINK = $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ SOURCES = $(libqd_f_main_a_SOURCES) $(libqdmod_a_SOURCES) \ $(dd_timer_SOURCES) $(nodist_dd_timer_SOURCES) \ $(qd_timer_SOURCES) $(nodist_qd_timer_SOURCES) \ $(quaderq_SOURCES) $(nodist_quaderq_SOURCES) \ $(quadgsq_SOURCES) $(nodist_quadgsq_SOURCES) \ $(quadgsq2d_SOURCES) $(nodist_quadgsq2d_SOURCES) \ $(quadtsq_SOURCES) $(nodist_quadtsq_SOURCES) \ $(quadtsq2d_SOURCES) $(nodist_quadtsq2d_SOURCES) DIST_SOURCES = $(am__libqd_f_main_a_SOURCES_DIST) \ $(am__libqdmod_a_SOURCES_DIST) $(am__dd_timer_SOURCES_DIST) \ $(am__qd_timer_SOURCES_DIST) $(am__quaderq_SOURCES_DIST) \ $(am__quadgsq_SOURCES_DIST) $(am__quadgsq2d_SOURCES_DIST) \ $(am__quadtsq_SOURCES_DIST) $(am__quadtsq2d_SOURCES_DIST) pkglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkglib_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_ARGS = @CONFIGURE_ARGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETIME = @ETIME@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCLIBS = @FCLIBS@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REQ_CXXFLAGS = @REQ_CXXFLAGS@ REQ_FCFLAGS = @REQ_FCFLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_f90_modflag = @ax_f90_modflag@ 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@ 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@ mkdir_p = @mkdir_p@ module_ext = @module_ext@ 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@ @HAVE_FORTRAN_TRUE@AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include @HAVE_FORTRAN_TRUE@LDADD = libqdmod.a libqd_f_main.a $(top_builddir)/src/libqd.a $(FCLIBS) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_FALSE@DDEXT = ddext.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_TRUE@DDEXT = DDEXT.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_FALSE@QDEXT = qdext.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_TRUE@QDEXT = QDEXT.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_FALSE@QDMOD = qdmodule.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_TRUE@QDMOD = QDMODULE.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_FALSE@DDMOD = ddmodule.$(module_ext) @HAVE_FORTRAN_TRUE@@UPCASE_MODULE_TRUE@DDMOD = DDMODULE.$(module_ext) @HAVE_FORTRAN_TRUE@lib_LIBRARIES = libqdmod.a libqd_f_main.a @HAVE_FORTRAN_TRUE@libqdmod_a_SOURCES = ddext.f ddmod.f qdext.f qdmod.f f_dd.cpp f_qd.cpp @HAVE_FORTRAN_TRUE@libqd_f_main_a_SOURCES = main.cpp @HAVE_FORTRAN_TRUE@pkglib_DATA = $(QDMOD) $(QDEXT) $(DDMOD) $(DDEXT) @HAVE_FORTRAN_TRUE@DEMO = quaderq$(EXEEXT) quadgsq2d$(EXEEXT) quadgsq$(EXEEXT) \ @HAVE_FORTRAN_TRUE@ quadtsq$(EXEEXT) quadtsq2d$(EXEEXT) @HAVE_FORTRAN_TRUE@TIMER = dd_timer$(EXEEXT) qd_timer$(EXEEXT) @HAVE_FORTRAN_TRUE@EXTRA_PROGRAMS = $(DEMO) $(TIMER) @HAVE_FORTRAN_TRUE@quaderq_SOURCES = tquaderq.f @HAVE_FORTRAN_TRUE@nodist_quaderq_SOURCES = second.f @HAVE_FORTRAN_TRUE@quaderq_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@quadgsq2d_SOURCES = tquadgsq2d.f @HAVE_FORTRAN_TRUE@nodist_quadgsq2d_SOURCES = second.f @HAVE_FORTRAN_TRUE@quadgsq2d_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@quadgsq_SOURCES = tquadgsq.f @HAVE_FORTRAN_TRUE@nodist_quadgsq_SOURCES = second.f @HAVE_FORTRAN_TRUE@quadgsq_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@quadtsq_SOURCES = tquadtsq.f @HAVE_FORTRAN_TRUE@nodist_quadtsq_SOURCES = second.f @HAVE_FORTRAN_TRUE@quadtsq_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@quadtsq2d_SOURCES = tquadtsq2d.f @HAVE_FORTRAN_TRUE@nodist_quadtsq2d_SOURCES = second.f @HAVE_FORTRAN_TRUE@quadtsq2d_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@dd_timer_SOURCES = dd_timer.f @HAVE_FORTRAN_TRUE@nodist_dd_timer_SOURCES = second.f @HAVE_FORTRAN_TRUE@dd_timer_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@qd_timer_SOURCES = qd_timer.f @HAVE_FORTRAN_TRUE@nodist_qd_timer_SOURCES = second.f @HAVE_FORTRAN_TRUE@qd_timer_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@CLEANFILES = $(EXTRA_PROGRAMS) *.mod MAINTAINERCLEANFILES = dd_timer.f qd_timer.f EXTRA_DIST = dd_timer.f qd_timer.f zz_timer.f Makefile.sample all: all-am .SUFFIXES: .SUFFIXES: .cpp .f .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fortran/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu fortran/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh second.f: $(top_builddir)/config.status $(srcdir)/second.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done @$(POST_INSTALL) @list='$(lib_LIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ p=$(am__strip_dir) \ echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \ $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \ else :; fi; \ done uninstall-libLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \ rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLIBRARIES: -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) libqd_f_main.a: $(libqd_f_main_a_OBJECTS) $(libqd_f_main_a_DEPENDENCIES) -rm -f libqd_f_main.a $(libqd_f_main_a_AR) libqd_f_main.a $(libqd_f_main_a_OBJECTS) $(libqd_f_main_a_LIBADD) $(RANLIB) libqd_f_main.a libqdmod.a: $(libqdmod_a_OBJECTS) $(libqdmod_a_DEPENDENCIES) -rm -f libqdmod.a $(libqdmod_a_AR) libqdmod.a $(libqdmod_a_OBJECTS) $(libqdmod_a_LIBADD) $(RANLIB) libqdmod.a dd_timer$(EXEEXT): $(dd_timer_OBJECTS) $(dd_timer_DEPENDENCIES) @rm -f dd_timer$(EXEEXT) $(dd_timer_LINK) $(dd_timer_OBJECTS) $(dd_timer_LDADD) $(LIBS) qd_timer$(EXEEXT): $(qd_timer_OBJECTS) $(qd_timer_DEPENDENCIES) @rm -f qd_timer$(EXEEXT) $(qd_timer_LINK) $(qd_timer_OBJECTS) $(qd_timer_LDADD) $(LIBS) quaderq$(EXEEXT): $(quaderq_OBJECTS) $(quaderq_DEPENDENCIES) @rm -f quaderq$(EXEEXT) $(quaderq_LINK) $(quaderq_OBJECTS) $(quaderq_LDADD) $(LIBS) quadgsq$(EXEEXT): $(quadgsq_OBJECTS) $(quadgsq_DEPENDENCIES) @rm -f quadgsq$(EXEEXT) $(quadgsq_LINK) $(quadgsq_OBJECTS) $(quadgsq_LDADD) $(LIBS) quadgsq2d$(EXEEXT): $(quadgsq2d_OBJECTS) $(quadgsq2d_DEPENDENCIES) @rm -f quadgsq2d$(EXEEXT) $(quadgsq2d_LINK) $(quadgsq2d_OBJECTS) $(quadgsq2d_LDADD) $(LIBS) quadtsq$(EXEEXT): $(quadtsq_OBJECTS) $(quadtsq_DEPENDENCIES) @rm -f quadtsq$(EXEEXT) $(quadtsq_LINK) $(quadtsq_OBJECTS) $(quadtsq_LDADD) $(LIBS) quadtsq2d$(EXEEXT): $(quadtsq2d_OBJECTS) $(quadtsq2d_DEPENDENCIES) @rm -f quadtsq2d$(EXEEXT) $(quadtsq2d_LINK) $(quadtsq2d_OBJECTS) $(quadtsq2d_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/f_dd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/f_qd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.o: $(F77COMPILE) -c -o $@ $< .f.obj: $(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-pkglibDATA: $(pkglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" @list='$(pkglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ done uninstall-pkglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ 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; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 $(LIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkglibdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libLIBRARIES 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 info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-libLIBRARIES install-pkglibDATA install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: 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 pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLIBRARIES uninstall-pkglibDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLIBRARIES ctags distclean distclean-compile \ distclean-generic 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-libLIBRARIES install-man install-pdf \ install-pdf-am install-pkglibDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLIBRARIES \ uninstall-pkglibDATA @HAVE_FORTRAN_TRUE@ddmod.o: ddext.o @HAVE_FORTRAN_TRUE@qdmod.o: ddmod.o qdext.o @HAVE_FORTRAN_TRUE@$(QDMOD): qdmod.o @HAVE_FORTRAN_TRUE@$(DDMOD): ddmod.o @HAVE_FORTRAN_TRUE@$(DDEXT): ddext.o @HAVE_FORTRAN_TRUE@$(QDEXT): qdext.o @HAVE_FORTRAN_TRUE@demo: $(DEMO) dd_timer.f: zz_timer.f sed -e 's/@@/dd/' zz_timer.f >dd_timer.f qd_timer.f: zz_timer.f sed -e 's/@@/qd/' zz_timer.f >qd_timer.f @HAVE_FORTRAN_TRUE@.PHONY: demo # 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: qd-2.3.11/fortran/ddext.f0000644000175000017500000001312211202062041015367 0ustar prudhommprudhomm! module file describing the C++-to-Fortran interface found in f_dd.cpp. module ddext implicit none interface pure subroutine f_dd_add(a, b, c) real*8, intent(in) :: a(2), b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_add_dd_d(a, b, c) real*8, intent(in) :: a(2), b real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_sub(a, b, c) real*8, intent(in) :: a(2), b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_sub_dd_d(a, b, c) real*8, intent(in) :: a(2), b real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_sub_d_dd(a, b, c) real*8, intent(in) :: a, b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_mul(a, b, c) real*8, intent(in) :: a(2), b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_mul_dd_d(a, b, c) real*8, intent(in) :: a(2), b real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_div(a, b, c) real*8, intent(in) :: a(2), b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_div_dd_d(a, b, c) real*8, intent(in) :: a(2), b real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_div_d_dd(a, b, c) real*8, intent(in) :: a, b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_sqrt(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_sqr(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_abs(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_npwr(a, n, b) real*8, intent(in) :: a(2) integer, intent(in) :: n real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_nroot(a, n, b) real*8, intent(in) :: a(2) integer, intent(in) :: n real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_nint(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_aint(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_floor(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_ceil(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_log(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_log10(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_exp(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_sin(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_cos(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_tan(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_asin(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_acos(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_atan(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_atan2(a, b, c) real*8, intent(in) :: a(2), b(2) real*8, intent(out) :: c(2) end subroutine pure subroutine f_dd_sinh(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_cosh(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_tanh(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_asinh(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_acosh(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_atanh(a, b) real*8, intent(in) :: a(2) real*8, intent(out) :: b(2) end subroutine pure subroutine f_dd_sincos(a, s, c) real*8, intent(in) :: a(2) real*8, intent(out) :: s(2), c(2) end subroutine pure subroutine f_dd_sincosh(a, s, c) real*8, intent(in) :: a(2) real*8, intent(out) :: s(2), c(2) end subroutine subroutine f_dd_swrite(a, prec, str, maxlen) real*8, intent(in) :: a(2) integer, intent(in) :: prec, maxlen character, intent(out) :: str(maxlen) end subroutine subroutine f_dd_rand(a) real*8, intent(out) :: a(2) end subroutine pure subroutine f_dd_comp(a, b, r) real*8, intent(in) :: a(2), b(2) integer, intent(out) :: r end subroutine pure subroutine f_dd_comp_dd_d(a, b, r) real*8, intent(in) :: a(2), b integer, intent(out) :: r end subroutine pure subroutine f_dd_comp_d_dd(a, b, r) real*8, intent(in) :: a, b(2) integer, intent(out) :: r end subroutine pure subroutine f_dd_pi(a) real*8, intent(out) :: a(2) end subroutine pure subroutine f_dd_nan(a) real*8, intent(out) :: a(2) end subroutine end interface end qd-2.3.11/fortran/ddmod.f0000644000175000017500000014613511202062041015361 0ustar prudhommprudhomm! ddmod.f ! ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC03-76SF00098. ! ! Copyright (c) 2000-2008 ! ! Fortran-90 module file to use with double-double numbers. ! ! Yozo Hida ! David H Bailey 2008-03-20 module ddmodule use ddext implicit none type dd_real sequence real*8 :: re(2) end type dd_real type dd_complex sequence real*8 :: cmp(4) end type dd_complex real*8 d_dd_eps parameter (d_dd_eps = 4.93038065763132d-32) type (dd_real) dd_one, dd_zero, dd_eps, dd_huge, dd_tiny parameter (dd_one = dd_real((/1.0d0, 0.0d0/)), & dd_zero = dd_real((/0.0d0, 0.0d0/))) parameter (dd_eps = dd_real((/d_dd_eps, 0.0d0/))) parameter (dd_huge = dd_real((/1.79769313486231570815d+308, & 9.97920154767359795037d+291/))) parameter (dd_tiny = dd_real((/4.00833672001794555599d-292, 0.0d0/))) interface assignment (=) module procedure assign_dd_str module procedure assign_dd module procedure assign_dd_d module procedure assign_d_dd module procedure assign_dd_i module procedure assign_i_dd module procedure assign_ddc module procedure assign_ddc_dd module procedure assign_dd_ddc module procedure assign_ddc_d module procedure assign_d_ddc module procedure assign_ddc_dc module procedure assign_dc_ddc module procedure assign_ddc_i end interface interface operator (+) module procedure add_dd module procedure add_dd_d module procedure add_d_dd module procedure add_dd_i module procedure add_i_dd module procedure add_ddc module procedure add_ddc_dd module procedure add_dd_ddc module procedure add_ddc_d module procedure add_d_ddc end interface interface operator (-) module procedure sub_dd module procedure sub_dd_d module procedure sub_d_dd module procedure neg_dd module procedure sub_ddc module procedure sub_ddc_dd module procedure sub_dd_ddc module procedure sub_ddc_d module procedure sub_d_ddc module procedure neg_ddc end interface interface operator (*) module procedure mul_dd module procedure mul_dd_d module procedure mul_d_dd module procedure mul_dd_i module procedure mul_i_dd module procedure mul_ddc module procedure mul_ddc_dd module procedure mul_dd_ddc module procedure mul_ddc_d module procedure mul_d_ddc module procedure mul_ddc_i module procedure mul_i_ddc end interface interface operator (/) module procedure div_dd module procedure div_dd_d module procedure div_d_dd module procedure div_dd_i module procedure div_i_dd module procedure div_ddc module procedure div_ddc_dd module procedure div_dd_ddc module procedure div_ddc_d end interface interface operator (**) module procedure pwr_dd module procedure pwr_dd_i module procedure pwr_d_dd module procedure pwr_ddc_i end interface interface ddreal module procedure to_dd_i module procedure to_dd_d module procedure to_dd_dd module procedure to_dd_str module procedure to_dd_ddc end interface interface ddcomplex module procedure to_ddc_dd module procedure to_ddc_dd2 module procedure to_ddc_d module procedure to_ddc_dc end interface interface real module procedure to_d_dd module procedure to_dd_ddc end interface interface int module procedure to_int_dd end interface interface sin module procedure ddsin end interface interface cos module procedure ddcos end interface interface tan module procedure ddtan end interface interface sincos module procedure ddsincos end interface interface asin module procedure ddasin end interface interface acos module procedure ddacos end interface interface atan module procedure ddatan end interface interface atan2 module procedure ddatan2 end interface interface exp module procedure ddexp module procedure ddcexp end interface interface log module procedure ddlog module procedure ddclog end interface interface log10 module procedure ddlog10 end interface interface sqrt module procedure ddsqrt end interface interface sqr module procedure ddsqr end interface interface nroot module procedure ddnroot end interface interface sinh module procedure ddsinh end interface interface cosh module procedure ddcosh end interface interface tanh module procedure ddtanh end interface interface sincosh module procedure ddsincosh end interface interface asinh module procedure ddasinh end interface interface acosh module procedure ddacosh end interface interface atanh module procedure ddatanh end interface interface aint module procedure ddaint end interface interface anint module procedure ddanint end interface interface nint module procedure ddnint end interface interface abs module procedure ddabs module procedure ddcabs end interface interface sign module procedure ddsign module procedure ddsign_dd_d end interface interface random_number module procedure ddrand end interface interface aimag module procedure dd_aimag end interface interface operator (==) module procedure eq_dd module procedure eq_dd_d module procedure eq_d_dd module procedure eq_dd_i module procedure eq_i_dd module procedure eq_ddc module procedure eq_ddc_dd module procedure eq_dd_ddc end interface interface operator (/=) module procedure ne_dd module procedure ne_dd_d module procedure ne_d_dd module procedure ne_dd_i module procedure ne_i_dd module procedure ne_ddc module procedure ne_ddc_dd module procedure ne_dd_ddc end interface interface operator (>) module procedure gt_dd module procedure gt_dd_d module procedure gt_d_dd module procedure gt_dd_i module procedure gt_i_dd end interface interface operator (<) module procedure lt_dd module procedure lt_dd_d module procedure lt_d_dd module procedure lt_dd_i module procedure lt_i_dd end interface interface operator (>=) module procedure ge_dd module procedure ge_dd_d module procedure ge_d_dd module procedure ge_dd_i module procedure ge_i_dd end interface interface operator (<=) module procedure le_dd module procedure le_dd_d module procedure le_d_dd module procedure le_dd_i module procedure le_i_dd end interface interface read_scalar module procedure ddinpq module procedure ddcinpq end interface interface write_scalar module procedure ddoutq module procedure ddcoutq end interface interface ddread module procedure ddinpq end interface interface ddwrite module procedure ddoutq end interface interface ddcread module procedure ddcinpq end interface interface ddcwrite module procedure ddcoutq end interface interface dble module procedure to_d_dd module procedure to_d_ddc end interface interface cmplx module procedure to_dc_ddc end interface interface conjg module procedure ddcconjg end interface interface min module procedure ddmin module procedure ddmin2 end interface interface max module procedure ddmax module procedure ddmax2 end interface interface mod module procedure ddmod end interface interface ddpi module procedure dd_pi end interface interface huge module procedure ddhuge end interface interface safe_huge module procedure dd_safe_huge end interface interface tiny module procedure ddtiny end interface interface epsilon module procedure ddepsilon end interface interface radix module procedure dd_radix end interface interface digits module procedure dd_digits end interface interface maxexponent module procedure dd_max_expn end interface interface minexponent module procedure dd_min_expn end interface interface nan module procedure dd_nan end interface contains ! Assignments subroutine assign_dd_str(a, s) type (dd_real), intent(inout) :: a character (len=*), intent(in) :: s character*80 t t = s call ddinpc (t, a%re) end subroutine assign_dd_str elemental subroutine assign_dd (a, b) type (dd_real), intent(inout) :: a type (dd_real), intent(in) :: b a%re = b%re end subroutine assign_dd elemental subroutine assign_dd_d(a, d) type (dd_real), intent(inout) :: a real*8, intent(in) :: d a%re(1) = d a%re(2) = 0.0d0 end subroutine assign_dd_d elemental subroutine assign_d_dd(d, a) real*8, intent(inout) :: d type (dd_real), intent(in) :: a d = a%re(1) end subroutine assign_d_dd elemental subroutine assign_dd_i(a, i) type (dd_real), intent(inout) :: a integer, intent(in) :: i a%re(1) = i a%re(2) = 0.0d0 end subroutine assign_dd_i elemental subroutine assign_i_dd(i, a) integer, intent(inout) :: i type (dd_real), intent(in) :: a i = a%re(1) end subroutine assign_i_dd elemental subroutine assign_ddc (a, b) type (dd_complex), intent(inout) :: a type (dd_complex), intent(in) :: b a%cmp = b%cmp end subroutine assign_ddc elemental subroutine assign_ddc_dd (ddc, dd) type (dd_complex), intent (inout) :: ddc type (dd_real), intent(in) :: dd ddc%cmp(1:2) = dd%re ddc%cmp(3:4) = 0.d0 end subroutine assign_ddc_dd elemental subroutine assign_dd_ddc (dd, ddc) type (dd_real), intent (inout) :: dd type (dd_complex), intent(in) :: ddc dd%re = ddc%cmp(1:2) end subroutine assign_dd_ddc elemental subroutine assign_ddc_d (ddc, d) type (dd_complex), intent (inout) :: ddc real*8, intent(in) :: d ddc%cmp(1) = d ddc%cmp(2:4) = 0.d0 end subroutine assign_ddc_d elemental subroutine assign_ddc_i (ddc, i) type (dd_complex), intent (inout) :: ddc integer, intent(in) :: i ddc%cmp(1) = i ddc%cmp(2:4) = 0.d0 end subroutine assign_ddc_i elemental subroutine assign_d_ddc (d, ddc) real*8, intent(inout) :: d type (dd_complex), intent (in) :: ddc d = ddc%cmp(1) end subroutine assign_d_ddc elemental subroutine assign_ddc_dc (ddc, dc) type (dd_complex), intent (inout) :: ddc complex (kind (0.d0)), intent (in) :: dc ddc%cmp(1) = dble (dc) ddc%cmp(2) = 0.d0 ddc%cmp(3) = aimag (dc) ddc%cmp(4) = 0.d0 end subroutine assign_ddc_dc elemental subroutine assign_dc_ddc (dc, ddc) complex (kind (0.D0)), intent (inout) :: dc type (dd_complex), intent (in) :: ddc dc = cmplx (ddc%cmp(1), ddc%cmp(3), kind (0.d0)) end subroutine assign_dc_ddc ! Conversions elemental type (dd_real) function to_dd_i(ia) integer, intent(in) :: ia to_dd_i%re(1) = ia to_dd_i%re(2) = 0.d0 end function to_dd_i elemental type (dd_real) function to_dd_d(a) real*8, intent(in) :: a to_dd_d%re(1) = a to_dd_d%re(2) = 0.0d0 end function to_dd_d elemental type (dd_real) function to_dd_dd(a) type (dd_real), intent(in) :: a to_dd_dd%re = a%re end function to_dd_dd elemental real*8 function to_d_dd(a) type (dd_real), intent(in) :: a to_d_dd = a%re(1) end function to_d_dd elemental integer function to_int_dd(a) type (dd_real), intent(in) :: a to_int_dd = a%re(1) end function to_int_dd type (dd_real) function to_dd_str(s) character (len=*), intent(in) :: s character*80 t t = s call ddinpc (t, to_dd_str%re) end function to_dd_str elemental type (dd_real) function to_dd_ddc(ddc) type (dd_complex), intent(in) :: ddc to_dd_ddc%re = ddc%cmp(1:2) end function to_dd_ddc elemental type (dd_complex) function to_ddc_dd(dd) type (dd_real), intent(in) :: dd to_ddc_dd%cmp(1:2) = dd%re to_ddc_dd%cmp(3:4) = 0.d0 end function to_ddc_dd elemental type (dd_complex) function to_ddc_dd2(x, y) type (dd_real), intent(in) :: x, y to_ddc_dd2%cmp(1:2) = x%re to_ddc_dd2%cmp(3:4) = y%re end function to_ddc_dd2 elemental type (dd_complex) function to_ddc_d(d) real*8, intent(in) :: d to_ddc_d%cmp(1) = d to_ddc_d%cmp(2:4) = 0.d0 end function to_ddc_d elemental complex (kind (0.D0)) function to_dc_ddc (ddc) type (dd_complex), intent (in) :: ddc to_dc_ddc = cmplx (ddc%cmp(1), ddc%cmp(3), kind (0.d0)) end function to_dc_ddc elemental type (dd_complex) function to_ddc_dc (dc) complex (kind (0.d0)), intent(in) :: dc to_ddc_dc%cmp(1) = dble (dc) to_ddc_dc%cmp(2) = 0.d0 to_ddc_dc%cmp(3) = aimag (dc) to_ddc_dc%cmp(4) = 0.d0 end function to_ddc_dc elemental real*8 function to_d_ddc(ddc) type (dd_complex), intent(in) :: ddc to_d_ddc = ddc%cmp(1) end function to_d_ddc ! Complex conjugation elemental type (dd_complex) function ddcconjg (ddc) type (dd_complex), intent(in) :: ddc ddcconjg%cmp(1:2) = ddc%cmp(1:2) ddcconjg%cmp(3:4) = - ddc%cmp(3:4) end function ddcconjg ! Additions elemental type (dd_real) function add_dd(a, b) type (dd_real), intent(in) :: a, b call f_dd_add(a%re, b%re, add_dd%re) end function add_dd elemental type (dd_real) function add_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b call f_dd_add_dd_d(a%re, b, add_dd_d%re) end function add_dd_d elemental type (dd_real) function add_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_add_dd_d(b%re, a, add_d_dd%re) end function add_d_dd elemental type (dd_real) function add_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_add_dd_d(b%re, dble(a), add_i_dd%re) end function add_i_dd elemental type (dd_real) function add_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b call f_dd_add_dd_d(a%re, dble(b), add_dd_i%re) end function add_dd_i elemental type (dd_complex) function add_ddc(a, b) type (dd_complex), intent(in) :: a, b call f_dd_add (a%cmp(1:2), b%cmp(1:2), add_ddc%cmp(1:2)) call f_dd_add (a%cmp(3:4), b%cmp(3:4), add_ddc%cmp(3:4)) end function add_ddc elemental type (dd_complex) function add_ddc_d(a, b) type (dd_complex), intent(in) :: a real*8, intent(in) :: b type (dd_real) :: ddb ddb%re(1) = b ddb%re(2) = 0.d0 call f_dd_add (a%cmp(1:2), ddb%re, add_ddc_d%cmp(1:2)) add_ddc_d%cmp(3:4) = a%cmp(3:4) end function add_ddc_d elemental type (dd_complex) function add_d_ddc(a, b) real*8, intent(in) :: a type (dd_complex), intent(in) :: b type (dd_real) dda dda%re(1) = a dda%re(2) = 0.d0 call f_dd_add (dda%re, b%cmp(1:2), add_d_ddc%cmp(1:2)) add_d_ddc%cmp(3:4) = b%cmp(3:4) end function add_d_ddc elemental type (dd_complex) function add_ddc_dd(a, b) type (dd_complex), intent(in) :: a type (dd_real), intent(in) :: b call f_dd_add (a%cmp(1:2), b%re, add_ddc_dd%cmp(1:2)) add_ddc_dd%cmp(3:4) = a%cmp(3:4) end function add_ddc_dd elemental type (dd_complex) function add_dd_ddc(a, b) type (dd_real), intent(in) :: a type (dd_complex), intent(in) :: b call f_dd_add (a%re, b%cmp(1:2), add_dd_ddc%cmp(1:2)) add_dd_ddc%cmp(3:4) = b%cmp(3:4) end function add_dd_ddc ! Subtractions elemental type (dd_real) function sub_dd(a, b) type (dd_real), intent(in) :: a, b call f_dd_sub(a%re, b%re, sub_dd%re) end function sub_dd elemental type (dd_real) function sub_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b call f_dd_sub_dd_d(a%re, b, sub_dd_d%re) end function sub_dd_d elemental type (dd_real) function sub_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_sub_d_dd(a, b%re, sub_d_dd%re) end function sub_d_dd elemental type (dd_complex) function sub_ddc(a, b) type (dd_complex), intent(in) :: a, b call f_dd_sub (a%cmp(1:2), b%cmp(1:2), sub_ddc%cmp(1:2)) call f_dd_sub (a%cmp(3:4), b%cmp(3:4), sub_ddc%cmp(3:4)) end function sub_ddc elemental type (dd_complex) function sub_ddc_d(a, b) type (dd_complex), intent(in) :: a real*8, intent(in) :: b type (dd_real) ddb ddb%re(1) = b ddb%re(2) = 0.d0 call f_dd_sub (a%cmp(1:2), ddb%re, sub_ddc_d%cmp(1:2)) sub_ddc_d%cmp(3:4) = a%cmp(3:4) end function sub_ddc_d elemental type (dd_complex) function sub_d_ddc(a, b) real*8, intent(in) :: a type (dd_complex), intent(in) :: b type (dd_real) dda dda%re(1) = a dda%re(2) = 0.d0 call f_dd_sub (dda%re, b%cmp(1:2), sub_d_ddc%cmp(1:2)) sub_d_ddc%cmp(3:4) = - b%cmp(3:4) end function sub_d_ddc elemental type (dd_complex) function sub_ddc_dd(a, b) type (dd_complex), intent(in) :: a type (dd_real), intent(in) :: b call f_dd_sub (a%cmp(1:2), b%re, sub_ddc_dd%cmp(1:2)) sub_ddc_dd%cmp(3:4) = a%cmp(3:4) end function sub_ddc_dd elemental type (dd_complex) function sub_dd_ddc(a, b) type (dd_real), intent(in) :: a type (dd_complex), intent(in) :: b call f_dd_sub (a%re, b%cmp(1:2), sub_dd_ddc%cmp(1:2)) sub_dd_ddc%cmp(3:4) = - b%cmp(3:4) end function sub_dd_ddc ! Unary Minus elemental type (dd_real) function neg_dd(a) type (dd_real), intent(in) :: a neg_dd%re = -a%re end function neg_dd elemental type (dd_complex) function neg_ddc(a) type (dd_complex), intent(in) :: a neg_ddc%cmp = - a%cmp end function neg_ddc ! Multiplications elemental type (dd_real) function mul_dd(a, b) type (dd_real), intent(in) :: a, b call f_dd_mul(a%re, b%re, mul_dd%re) end function mul_dd elemental type (dd_real) function mul_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b call f_dd_mul_dd_d(a%re, b, mul_dd_d%re) end function mul_dd_d elemental type (dd_real) function mul_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_mul_dd_d(b%re, a, mul_d_dd%re) end function mul_d_dd elemental type (dd_real) function mul_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b call f_dd_mul_dd_d(a%re, dble(b), mul_dd_i%re) end function mul_dd_i elemental type (dd_real) function mul_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_mul_dd_d(b%re, dble(a), mul_i_dd%re) end function mul_i_dd elemental type (dd_complex) function mul_ddc(a, b) type (dd_complex), intent(in) :: a, b type (dd_real) t1, t2 call f_dd_mul (a%cmp(1:2), b%cmp(1:2), t1%re) call f_dd_mul (a%cmp(3:4), b%cmp(3:4), t2%re) call f_dd_sub (t1%re, t2%re, mul_ddc%cmp(1:2)) call f_dd_mul (a%cmp(1:2), b%cmp(3:4), t1%re) call f_dd_mul (a%cmp(3:4), b%cmp(1:2), t2%re) call f_dd_add (t1%re, t2%re, mul_ddc%cmp(3:4)) end function mul_ddc elemental type (dd_complex) function mul_ddc_d(a, b) type (dd_complex), intent(in) :: a real*8, intent(in) :: b call f_dd_mul_dd_d (a%cmp(1:2), b, mul_ddc_d%cmp(1:2)) call f_dd_mul_dd_d (a%cmp(3:4), b, mul_ddc_d%cmp(3:4)) end function mul_ddc_d elemental type (dd_complex) function mul_d_ddc(a, b) real*8, intent(in) :: a type (dd_complex), intent(in) :: b call f_dd_mul_dd_d (b%cmp(1:2), a, mul_d_ddc%cmp(1:2)) call f_dd_mul_dd_d (b%cmp(3:4), a, mul_d_ddc%cmp(3:4)) end function mul_d_ddc elemental type (dd_complex) function mul_ddc_i(a, b) type (dd_complex), intent(in) :: a integer, intent(in) :: b call f_dd_mul_dd_d (a%cmp(1:2), dble(b), mul_ddc_i%cmp(1:2)) call f_dd_mul_dd_d (a%cmp(3:4), dble(b), mul_ddc_i%cmp(3:4)) end function mul_ddc_i elemental type (dd_complex) function mul_i_ddc(a, b) integer, intent(in) :: a type (dd_complex), intent(in) :: b call f_dd_mul_dd_d (b%cmp(1:2), dble(a), mul_i_ddc%cmp(1:2)) call f_dd_mul_dd_d (b%cmp(3:4), dble(a), mul_i_ddc%cmp(3:4)) end function mul_i_ddc elemental type (dd_complex) function mul_ddc_dd(a, b) type (dd_complex), intent(in) :: a type (dd_real), intent(in) :: b call f_dd_mul (a%cmp(1:2), b%re, mul_ddc_dd%cmp(1:2)) call f_dd_mul (a%cmp(3:4), b%re, mul_ddc_dd%cmp(3:4)) end function mul_ddc_dd elemental type (dd_complex) function mul_dd_ddc(a, b) type (dd_real), intent(in) :: a type (dd_complex), intent(in) :: b call f_dd_mul (a%re, b%cmp(1:2), mul_dd_ddc%cmp(1:2)) call f_dd_mul (a%re, b%cmp(3:4), mul_dd_ddc%cmp(3:4)) end function mul_dd_ddc ! Divisions elemental type (dd_real) function div_dd(a, b) type (dd_real), intent(in) :: a, b call f_dd_div(a%re, b%re, div_dd%re) end function div_dd elemental type (dd_real) function div_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b call f_dd_div_dd_d(a%re, b, div_dd_d%re) end function div_dd_d elemental type (dd_real) function div_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_div_d_dd(a, b%re, div_d_dd%re) end function div_d_dd elemental type (dd_real) function div_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b call f_dd_div_dd_d(a%re, dble(b), div_dd_i%re) end function div_dd_i elemental type (dd_real) function div_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b call f_dd_div_d_dd(dble(a), b%re, div_i_dd%re) end function div_i_dd elemental type (dd_complex) function div_ddc(a, b) type (dd_complex), intent(in) :: a, b type (dd_real) t1, t2, t3, t4, t5 call f_dd_mul (a%cmp(1:2), b%cmp(1:2), t1%re) call f_dd_mul (a%cmp(3:4), b%cmp(3:4), t2%re) call f_dd_add (t1%re, t2%re, t3%re) call f_dd_mul (a%cmp(1:2), b%cmp(3:4), t1%re) call f_dd_mul (a%cmp(3:4), b%cmp(1:2), t2%re) call f_dd_sub (t2%re, t1%re, t4%re) call f_dd_mul (b%cmp(1:2), b%cmp(1:2), t1%re) call f_dd_mul (b%cmp(3:4), b%cmp(3:4), t2%re) call f_dd_add (t1%re, t2%re, t5%re) call f_dd_div (t3%re, t5%re, div_ddc%cmp(1:2)) call f_dd_div (t4%re, t5%re, div_ddc%cmp(3:4)) end function div_ddc elemental type (dd_complex) function div_ddc_d(a,b) type (dd_complex), intent(in) :: a real*8, intent(in) :: b call f_dd_div_dd_d(a%cmp(1:2), b, div_ddc_d%cmp(1:2)) call f_dd_div_dd_d(a%cmp(3:4), b, div_ddc_d%cmp(3:4)) end function div_ddc_d elemental type (dd_complex) function div_ddc_dd(a, b) type (dd_complex), intent(in) :: a type (dd_real), intent(in) :: b call f_dd_div (a%cmp(1:2), b%re, div_ddc_dd%cmp(1:2)) call f_dd_div (a%cmp(3:4), b%re, div_ddc_dd%cmp(3:4)) end function div_ddc_dd elemental type (dd_complex) function div_dd_ddc(a, b) type (dd_real), intent(in) :: a type (dd_complex), intent(in) :: b type (dd_real) t1, t2, t3, t4, t5 call f_dd_mul (a%re, b%cmp(1:2), t1%re) call f_dd_mul (a%re, b%cmp(3:4), t2%re) t2%re = - t2%re call f_dd_mul (b%cmp(1:2), b%cmp(1:2), t3%re) call f_dd_mul (b%cmp(3:4), b%cmp(3:4), t4%re) call f_dd_add (t3%re, t4%re, t5%re) call f_dd_div (t1%re, t5%re, div_dd_ddc%cmp(1:2)) call f_dd_div (t2%re, t5%re, div_dd_ddc%cmp(3:4)) end function div_dd_ddc ! Power elemental type (dd_real) function pwr_dd (a, b) type (dd_real), intent(in) :: a, b type (dd_real) q1, q2 call f_dd_log(a%re, q1%re) call f_dd_mul(q1%re, b%re, q2%re) call f_dd_exp(q2%re, pwr_dd%re) end function pwr_dd elemental type (dd_real) function pwr_dd_i(a, n) type (dd_real), intent(in) :: a integer, intent(in) :: n call f_dd_npwr(a%re, n, pwr_dd_i%re) end function pwr_dd_i elemental type (dd_real) function pwr_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b type (dd_real) q1, q2, q3 q1%re(1) = a q1%re(2) = 0.d0 call f_dd_log(q1%re, q2%re) call f_dd_mul(q2%re, b%re, q3%re) call f_dd_exp(q3%re, pwr_d_dd%re) end function pwr_d_dd elemental type (dd_complex) function pwr_ddc_i(a, n) type (dd_complex), intent(in) :: a integer, intent(in) :: n integer i2, j, n1 type (dd_real) t1, t2, t3 type (dd_complex) c1, c2 intrinsic :: iabs, ishft if (n == 0) then if (all(a%cmp == 0.d0)) then !write (6, *) 'pwr_ddc_i: a = 0 and n = 0' call f_dd_nan(pwr_ddc_i%cmp(1:2)) call f_dd_nan(pwr_ddc_i%cmp(3:4)) return endif pwr_ddc_i%cmp(1) = 1.d0 pwr_ddc_i%cmp(2:4) = 0.d0 return endif n1 = iabs (n) i2 = ishft(1, n1-1) c1%cmp(1) = 1.d0 c1%cmp(2:4) = 0.d0 110 continue if (n1 >= i2) then call f_dd_mul (a%cmp(1:2), c1%cmp(1:2), t1%re) call f_dd_mul (a%cmp(3:4), c1%cmp(3:4), t2%re) call f_dd_sub (t1%re, t2%re, c2%cmp(1:2)) call f_dd_mul (a%cmp(1:2), c1%cmp(3:4), t1%re) call f_dd_mul (a%cmp(3:4), c1%cmp(1:2), t2%re) call f_dd_add (t1%re, t2%re, c2%cmp(3:4)) do j = 1, 4 c1%cmp(j) = c2%cmp(j) enddo n1 = n1 - i2 endif i2 = i2 / 2 if (i2 >= 1) then call f_dd_mul (c1%cmp(1:2), c1%cmp(1:2), t1%re) call f_dd_mul (c1%cmp(3:4), c1%cmp(3:4), t2%re) call f_dd_sub (t1%re, t2%re, c2%cmp(1:2)) call f_dd_mul (c1%cmp(1:2), c1%cmp(3:4), t1%re) c2%cmp(3:4) = 2.d0 * t1%re c1%cmp = c2%cmp goto 110 endif if (n > 0) then pwr_ddc_i%cmp = c1%cmp else c1%cmp(3:4) = - c1%cmp(3:4) call f_dd_mul (c1%cmp(1:2), c1%cmp(1:2), t1%re) call f_dd_mul (c1%cmp(3:4), c1%cmp(3:4), t2%re) call f_dd_add (t1%re, t2%re, t3%re) call f_dd_div (c1%cmp(1:2), t3%re, pwr_ddc_i%cmp(1:2)) call f_dd_div (c1%cmp(3:4), t3%re, pwr_ddc_i%cmp(3:4)) endif return end function pwr_ddc_i ! Trigonometric Functions elemental type (dd_real) function ddsin(a) type (dd_real), intent(in) :: a call f_dd_sin(a%re, ddsin%re) end function ddsin elemental type (dd_real) function ddcos(a) type (dd_real), intent(in) :: a call f_dd_cos(a%re, ddcos%re) end function ddcos elemental type (dd_real) function ddtan(a) type (dd_real), intent(in) :: a call f_dd_tan(a%re, ddtan%re) end function ddtan elemental subroutine ddsincos(a, s, c) type (dd_real), intent(in) :: a type (dd_real), intent(out) :: s, c call f_dd_sincos(a%re, s%re, c%re) end subroutine ddsincos ! Inverse Trigonometric Functions elemental type (dd_real) function ddasin(a) type (dd_real), intent(in) :: a call f_dd_asin(a%re, ddasin%re) end function ddasin elemental type (dd_real) function ddacos(a) type (dd_real), intent(in) :: a call f_dd_acos(a%re, ddacos%re) end function ddacos elemental type (dd_real) function ddatan(a) type (dd_real), intent(in) :: a call f_dd_atan(a%re, ddatan%re) end function ddatan elemental type (dd_real) function ddatan2(a, b) type (dd_real), intent(in) :: a, b call f_dd_atan2(a%re, b%re, ddatan2%re) end function ddatan2 ! Exponential and Logarithms elemental type (dd_real) function ddexp(a) type (dd_real), intent(in) :: a call f_dd_exp(a%re, ddexp%re) end function ddexp elemental type (dd_complex) function ddcexp (a) type (dd_complex), intent(in) :: a type (dd_real) t1, t2, t3 call f_dd_exp (a%cmp(1:2), t1%re) call f_dd_sincos (a%cmp(3:4), t3%re, t2%re) call f_dd_mul (t1%re, t2%re, ddcexp%cmp(1:2)) call f_dd_mul (t1%re, t3%re, ddcexp%cmp(3:4)) end function ddcexp elemental type (dd_real) function ddlog(a) type (dd_real), intent(in) :: a call f_dd_log(a%re, ddlog%re) end function ddlog elemental type (dd_complex) function ddclog (a) type (dd_complex), intent(in) :: a type (dd_real) t1, t2, t3 call f_dd_mul (a%cmp(1:2), a%cmp(1:2), t1%re) call f_dd_mul (a%cmp(3:4), a%cmp(3:4), t2%re) call f_dd_add (t1%re, t2%re, t3%re) call f_dd_log (t3%re, t1%re) ddclog%cmp(1:2) = 0.5d0 * t1%re call f_dd_atan2 (a%cmp(3:4), a%cmp(1:2), ddclog%cmp(3:4)) end function ddclog elemental type (dd_real) function ddlog10(a) type (dd_real), intent(in) :: a call f_dd_log10(a%re, ddlog10%re) end function ddlog10 ! SQRT, etc. elemental type (dd_real) function ddsqrt(a) type (dd_real), intent(in) :: a call f_dd_sqrt(a%re, ddsqrt%re) end function ddsqrt elemental type (dd_real) function ddsqr(a) type (dd_real), intent(in) :: a call f_dd_sqr(a%re, ddsqr%re) end function ddsqr elemental type (dd_real) function ddnroot(a, n) type (dd_real), intent(in) :: a integer, intent(in) :: n call f_dd_nroot(a%re, n, ddnroot%re) end function ddnroot ! Hyperbolic Functions elemental type (dd_real) function ddsinh(a) type (dd_real), intent(in) :: a call f_dd_sinh(a%re, ddsinh%re) end function ddsinh elemental type (dd_real) function ddcosh(a) type (dd_real), intent(in) :: a call f_dd_cosh(a%re, ddcosh%re) end function ddcosh elemental type (dd_real) function ddtanh(a) type (dd_real), intent(in) :: a call f_dd_tanh(a%re, ddtanh%re) end function ddtanh elemental subroutine ddsincosh(a, s, c) type (dd_real), intent(in) :: a type (dd_real), intent(out) :: s, c call f_dd_sincosh(a%re, s%re, c%re) end subroutine ddsincosh ! Inverse Hyperbolic Functions elemental type (dd_real) function ddasinh(a) type (dd_real), intent(in) :: a call f_dd_asinh(a%re, ddasinh%re) end function ddasinh elemental type (dd_real) function ddacosh(a) type (dd_real), intent(in) :: a call f_dd_acosh(a%re, ddacosh%re) end function ddacosh elemental type (dd_real) function ddatanh(a) type (dd_real), intent(in) :: a call f_dd_atanh(a%re, ddatanh%re) end function ddatanh ! Rounding elemental type (dd_real) function ddaint(a) type (dd_real), intent(in) :: a call f_dd_aint(a%re, ddaint%re) end function ddaint elemental type (dd_real) function ddanint(a) type (dd_real), intent(in) :: a call f_dd_nint(a%re, ddanint%re) end function ddanint elemental integer function ddnint(a) type (dd_real), intent(in) :: a ddnint = to_int_dd(ddaint(a)); end function ddnint ! Random Number Generator subroutine ddrand(harvest) type (dd_real), intent(out) :: harvest call f_dd_rand(harvest%re) end subroutine ddrand ! Equality elemental logical function eq_dd(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r == 0) then eq_dd = .true. else eq_dd = .false. end if end function eq_dd elemental logical function eq_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_dd_comp_dd_d(a%re, b, r) if (r == 0) then eq_dd_d = .true. else eq_dd_d = .false. end if end function eq_dd_d elemental logical function eq_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b integer :: r call f_dd_comp_dd_d(b%re, a, r) if (r == 0) then eq_d_dd = .true. else eq_d_dd = .false. end if end function eq_d_dd elemental logical function eq_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b eq_dd_i = eq_dd_d(a, dble(b)) end function eq_dd_i elemental logical function eq_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b eq_i_dd = eq_d_dd(dble(a), b) end function eq_i_dd elemental logical function eq_ddc (a, b) type (dd_complex), intent(in) :: a, b integer :: i1, i2 call f_dd_comp (a%cmp(1:2), b%cmp(1:2), i1) call f_dd_comp (a%cmp(3:4), b%cmp(3:4), i2) if (i1 == 0 .and. i2 == 0) then eq_ddc = .true. else eq_ddc = .false. endif end function eq_ddc elemental logical function eq_ddc_dd (a, b) type (dd_complex), intent(in) :: a type (dd_real), intent(in) :: b integer :: i1 call f_dd_comp (a%cmp(1:2), b%re, i1) if (i1 == 0 .and. all(a%cmp(3:4) == 0.d0)) then eq_ddc_dd = .true. else eq_ddc_dd = .false. endif end function eq_ddc_dd elemental logical function eq_dd_ddc (a, b) type (dd_real), intent(in) :: a type (dd_complex), intent(in) :: b integer :: i1 call f_dd_comp (a%re, b%cmp(1:2), i1) if (i1 == 0 .and. all(b%cmp(3:4) == 0.d0)) then eq_dd_ddc = .true. else eq_dd_ddc = .false. endif end function eq_dd_ddc ! Non-Equality elemental logical function ne_dd(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r == 0) then ne_dd = .false. else ne_dd = .true. end if end function ne_dd elemental logical function ne_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_dd_comp_dd_d(a%re, b, r) if (r == 0) then ne_dd_d = .false. else ne_dd_d = .true. end if end function ne_dd_d elemental logical function ne_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b integer :: r call f_dd_comp_dd_d(b%re, a, r) if (r == 0) then ne_d_dd = .false. else ne_d_dd = .true. end if end function ne_d_dd elemental logical function ne_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b ne_dd_i = ne_dd_d(a, dble(b)) end function ne_dd_i elemental logical function ne_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b ne_i_dd = ne_d_dd(dble(a), b) end function ne_i_dd elemental logical function ne_ddc (a, b) type (dd_complex), intent(in) :: a, b integer :: i1, i2 call f_dd_comp (a%cmp(1:2), b%cmp(1:2), i1) call f_dd_comp (a%cmp(3:4), b%cmp(3:4), i2) if (i1 /= 0 .or. i2 /= 0) then ne_ddc = .true. else ne_ddc = .false. endif end function ne_ddc elemental logical function ne_ddc_dd (a, b) type (dd_complex), intent(in) :: a type (dd_real), intent(in) :: b integer :: i1 call f_dd_comp (a%cmp(1:2), b%re, i1) if (i1 /= 0 .or. any(a%cmp(3:4) /= 0.d0)) then ne_ddc_dd = .true. else ne_ddc_dd = .false. endif end function ne_ddc_dd elemental logical function ne_dd_ddc (a, b) type (dd_real), intent(in) :: a type (dd_complex), intent(in) :: b integer :: i1 call f_dd_comp (a%re, b%cmp(1:2), i1) if (i1 /= 0 .or. any(b%cmp(3:4) /= 0.d0)) then ne_dd_ddc = .true. else ne_dd_ddc = .false. endif end function ne_dd_ddc ! Greater-Than elemental logical function gt_dd(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r == 1) then gt_dd = .true. else gt_dd = .false. end if end function gt_dd elemental logical function gt_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_dd_comp_dd_d(a%re, b, r) if (r == 1) then gt_dd_d = .true. else gt_dd_d = .false. end if end function gt_dd_d elemental logical function gt_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b integer :: r call f_dd_comp_dd_d(b%re, a, r) if (r == -1) then gt_d_dd = .true. else gt_d_dd = .false. end if end function gt_d_dd elemental logical function gt_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b gt_dd_i = gt_dd_d(a, dble(b)) end function gt_dd_i elemental logical function gt_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b gt_i_dd = gt_d_dd(dble(a), b) end function gt_i_dd ! Less-Than elemental logical function lt_dd(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r == -1) then lt_dd = .true. else lt_dd = .false. end if end function lt_dd elemental logical function lt_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_dd_comp_dd_d(a%re, b, r) if (r == -1) then lt_dd_d = .true. else lt_dd_d = .false. end if end function lt_dd_d elemental logical function lt_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b integer :: r call f_dd_comp_dd_d(b%re, a, r) if (r == 1) then lt_d_dd = .true. else lt_d_dd = .false. end if end function lt_d_dd elemental logical function lt_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b lt_dd_i = lt_dd_d(a, dble(b)) end function lt_dd_i elemental logical function lt_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b lt_i_dd = lt_d_dd(dble(a), b) end function lt_i_dd ! Greater-Than-Or-Equal-To elemental logical function ge_dd(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r >= 0) then ge_dd = .true. else ge_dd = .false. end if end function ge_dd elemental logical function ge_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_dd_comp_dd_d(a%re, b, r) if (r >= 0) then ge_dd_d = .true. else ge_dd_d = .false. end if end function ge_dd_d elemental logical function ge_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b integer :: r call f_dd_comp_dd_d(b%re, a, r) if (r <= 0) then ge_d_dd = .true. else ge_d_dd = .false. end if end function ge_d_dd elemental logical function ge_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b ge_dd_i = ge_dd_d(a, dble(b)) end function ge_dd_i elemental logical function ge_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b ge_i_dd = ge_d_dd(dble(a), b) end function ge_i_dd ! Less-Than-Or-Equal-To elemental logical function le_dd(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r <= 0) then le_dd = .true. else le_dd = .false. end if end function le_dd elemental logical function le_dd_d(a, b) type (dd_real), intent(in) :: a real*8, intent(in) :: b integer :: r call f_dd_comp_dd_d(a%re, b, r) if (r <= 0) then le_dd_d = .true. else le_dd_d = .false. end if end function le_dd_d elemental logical function le_d_dd(a, b) real*8, intent(in) :: a type (dd_real), intent(in) :: b integer :: r call f_dd_comp_dd_d(b%re, a, r) if (r >= 0) then le_d_dd = .true. else le_d_dd = .false. end if end function le_d_dd elemental logical function le_dd_i(a, b) type (dd_real), intent(in) :: a integer, intent(in) :: b le_dd_i = le_dd_d(a, dble(b)) end function le_dd_i elemental logical function le_i_dd(a, b) integer, intent(in) :: a type (dd_real), intent(in) :: b le_i_dd = le_d_dd(dble(a), b) end function le_i_dd ! Absolute Value elemental type (dd_real) function ddabs(a) type (dd_real), intent(in) :: a call f_dd_abs(a%re, ddabs%re) end function ddabs elemental type (dd_real) function ddcabs (ddc) type (dd_complex), intent(in) :: ddc type (dd_real) t1, t2, t3 call f_dd_mul (ddc%cmp(1:2), ddc%cmp(1:2), t1%re) call f_dd_mul (ddc%cmp(3:4), ddc%cmp(3:4), t2%re) call f_dd_add (t1%re, t2%re, t3%re) call f_dd_sqrt (t3%re, ddcabs%re) end function ddcabs ! Sign transfer elemental type (dd_real) function ddsign(a, b) result (c) type (dd_real), intent(in) :: a, b if (b%re(1) .gt. 0.0d0) then if (a%re(1) .gt. 0.0d0) then c%re = a%re else c%re = -a%re end if else if (a%re(1) .gt. 0.0d0) then c%re = -a%re else c%re = a%re end if endif end function ddsign elemental type (dd_real) function ddsign_dd_d(a, b) result (c) type (dd_real), intent(in) :: a real*8, intent(in) :: b if (b .gt. 0.0d0) then if (a%re(1) .gt. 0.0d0) then c%re = a%re else c%re = -a%re end if else if (a%re(1) .gt. 0.0d0) then c%re = -a%re else c%re = a%re end if endif end function ddsign_dd_d ! Input subroutine ddinpq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (dd_real), intent(in) :: q1 type (dd_real), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 ! CHARACTER (LEN=72) :: str call ddinp (u, q1%re) if (present(q2)) then call ddinp (u, q2%re) end if if (present(q3)) then call ddinp (u, q3%re) end if if (present(q4)) then call ddinp (u, q4%re) end if if (present(q5)) then call ddinp (u, q5%re) end if if (present(q6)) then call ddinp (u, q6%re) end if if (present(q7)) then call ddinp (u, q7%re) end if if (present(q8)) then call ddinp (u, q8%re) end if if (present(q9)) then call ddinp (u, q9%re) end if end subroutine ddinpq subroutine ddcinpq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (dd_complex), intent(in) :: q1 type (dd_complex), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 call ddinp (u, q1%cmp(1:2)) call ddinp (u, q1%cmp(3:4)) if (present(q2)) then call ddinp (u, q2%cmp(1:2)) call ddinp (u, q2%cmp(3:4)) end if if (present(q3)) then call ddinp (u, q3%cmp(1:2)) call ddinp (u, q3%cmp(3:4)) end if if (present(q4)) then call ddinp (u, q4%cmp(1:2)) call ddinp (u, q4%cmp(3:4)) end if if (present(q5)) then call ddinp (u, q5%cmp(1:2)) call ddinp (u, q5%cmp(3:4)) end if if (present(q6)) then call ddinp (u, q6%cmp(1:2)) call ddinp (u, q6%cmp(3:4)) end if if (present(q7)) then call ddinp (u, q7%cmp(1:2)) call ddinp (u, q7%cmp(3:4)) end if if (present(q8)) then call ddinp (u, q8%cmp(1:2)) call ddinp (u, q8%cmp(3:4)) end if if (present(q9)) then call ddinp (u, q9%cmp(1:2)) call ddinp (u, q9%cmp(3:4)) end if end subroutine ddcinpq ! Output subroutine ddoutq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (dd_real), intent(in) :: q1 type (dd_real), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 ! CHARACTER (LEN=72) :: str call ddout (u, q1%re) if (present(q2)) then call ddout (u, q2%re) end if if (present(q3)) then call ddout (u, q3%re) end if if (present(q4)) then call ddout (u, q4%re) end if if (present(q5)) then call ddout (u, q5%re) end if if (present(q6)) then call ddout (u, q6%re) end if if (present(q7)) then call ddout (u, q7%re) end if if (present(q8)) then call ddout (u, q8%re) end if if (present(q9)) then call ddout (u, q9%re) end if end subroutine ddoutq subroutine ddcoutq(u, q1, q2, q3, q4, q5, q6, q7, q8, q9) integer, intent(in) :: u type (dd_complex), intent(in) :: q1 type (dd_complex), intent(in), optional :: q2, q3, q4, q5, q6, q7, q8, q9 call ddout (u, q1%cmp(1:2)) call ddout (u, q1%cmp(3:4)) if (present(q2)) then call ddout (u, q2%cmp(1:2)) call ddout (u, q2%cmp(3:4)) end if if (present(q3)) then call ddout (u, q3%cmp(1:2)) call ddout (u, q3%cmp(3:4)) end if if (present(q4)) then call ddout (u, q4%cmp(1:2)) call ddout (u, q4%cmp(3:4)) end if if (present(q5)) then call ddout (u, q5%cmp(1:2)) call ddout (u, q5%cmp(3:4)) end if if (present(q6)) then call ddout (u, q6%cmp(1:2)) call ddout (u, q6%cmp(3:4)) end if if (present(q7)) then call ddout (u, q7%cmp(1:2)) call ddout (u, q7%cmp(3:4)) end if if (present(q8)) then call ddout (u, q8%cmp(1:2)) call ddout (u, q8%cmp(3:4)) end if if (present(q9)) then call ddout (u, q9%cmp(1:2)) call ddout (u, q9%cmp(3:4)) end if end subroutine ddcoutq elemental type (dd_real) function ddmin2(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r == 1) then ddmin2 = b else ddmin2 = a end if end function ddmin2 elemental type (dd_real) function ddmin(a1, a2, a3, a4, a5, a6, a7, a8, a9) type (dd_real), intent(in) :: a1, a2, a3 type (dd_real), intent(in), optional :: a4, a5, a6, a7, a8, a9 ddmin = ddmin2(ddmin2(a1, a2), a3) if (present(a4)) ddmin = ddmin2(ddmin, a4) if (present(a5)) ddmin = ddmin2(ddmin, a5) if (present(a6)) ddmin = ddmin2(ddmin, a6) if (present(a7)) ddmin = ddmin2(ddmin, a7) if (present(a8)) ddmin = ddmin2(ddmin, a8) if (present(a9)) ddmin = ddmin2(ddmin, a9) end function ddmin elemental type (dd_real) function ddmax2(a, b) type (dd_real), intent(in) :: a, b integer :: r call f_dd_comp(a%re, b%re, r) if (r == -1) then ddmax2 = b else ddmax2 = a end if end function ddmax2 elemental type (dd_real) function ddmax(a1, a2, a3, a4, a5, a6, a7, a8, a9) type (dd_real), intent(in) :: a1, a2, a3 type (dd_real), intent(in), optional :: a4, a5, a6, a7, a8, a9 ddmax = ddmax2(ddmax2(a1, a2), a3) if (present(a4)) ddmax = ddmax2(ddmax, a4) if (present(a5)) ddmax = ddmax2(ddmax, a5) if (present(a6)) ddmax = ddmax2(ddmax, a6) if (present(a7)) ddmax = ddmax2(ddmax, a7) if (present(a8)) ddmax = ddmax2(ddmax, a8) if (present(a9)) ddmax = ddmax2(ddmax, a9) end function ddmax elemental type (dd_real) function ddmod (a, b) type (dd_real), intent(in) :: a, b type (dd_real) :: s1, s2 call f_dd_div (a%re, b%re, s1%re) call f_dd_aint(s1%re, s2%re) call f_dd_mul (s2%re, b%re, s1%re) call f_dd_sub (a%re, s1%re, ddmod%re) end function ddmod pure type (dd_real) function dd_pi() call f_dd_pi(dd_pi%re) end function dd_pi subroutine ddinp (iu, a) ! This routine reads the DD number A from logical unit IU. The input ! value must be placed on a single line of not more than 80 characters. implicit none integer iu, ln parameter (ln = 80) character*80 cs real*8 a(2) read (iu, '(a)', end = 100) cs call ddinpc (cs, a) goto 110 100 write (6, 1) 1 format ('*** ddinp: End-of-file encountered.') ! call ddabrt stop 110 return end subroutine subroutine ddinpc (a, b) ! Converts the CHARACTER*80 array A into the DD number B. implicit none integer i, id, ie, inz, ip, is, k, ln, lnn, beg parameter (ln = 80) real*8 bi character*80 a character*1 ai character*10 dig character*16 ca parameter (dig = '0123456789') real*8 b(2), f(2), s0(2), s1(2), s2(2) id = 0 ip = -1 is = 0 inz = 0 s1(1) = 0.d0 s1(2) = 0.d0 beg = 0 do i = 1, 80 if (a(i:i) /= ' ') then beg = i goto 80 end if end do goto 210 80 continue do i = beg, 80 if (a(i:i) == ' ') then lnn = i-1 goto 90 end if enddo lnn = 80 90 continue ! Scan for digits, looking for the period also. do i = beg, lnn ai = a(i:i) if (ai .eq. '.') then if (ip >= 0) goto 210 ip = id inz = 1 elseif (ai .eq. '+') then if (id .ne. 0 .or. ip >= 0 .or. is .ne. 0) goto 210 is = 1 elseif (ai .eq. '-') then if (id .ne. 0 .or. ip >= 0 .or. is .ne. 0) goto 210 is = -1 elseif (ai .eq. 'e' .or. ai .eq. 'E' .or. ai .eq. 'd' .or. ai .eq. 'D') then goto 100 elseif (index (dig, ai) .eq. 0) then goto 210 else ! read (ai, '(f1.0)') bi bi = index (dig, ai) - 1 if (inz > 0 .or. bi > 0.d0) then inz = 1 id = id + 1 ! call ddmuld (s1, 10.d0, s0) call f_dd_mul_dd_d (s1, 10.d0, s0) f(1) = bi f(2) = 0.d0 ! call dddqc (bi, f) ! call ddadd (s0, f, s1) call f_dd_add (s0, f, s1) endif endif enddo 100 continue if (is .eq. -1) then s1(1) = - s1(1) s1(2) = - s1(2) endif k = i if (ip == -1) ip = id ie = 0 is = 0 ca = ' ' do i = k + 1, lnn ai = a(i:i) if (ai .eq. ' ') then elseif (ai .eq. '+') then if (ie .ne. 0 .or. is .ne. 0) goto 210 is = 1 elseif (ai .eq. '-') then if (ie .ne. 0 .or. is .ne. 0) goto 210 is = -1 elseif (index (dig, ai) .eq. 0) then goto 210 else ie = ie + 1 if (ie .gt. 3) goto 210 ca(ie:ie) = ai endif enddo ! read (ca, '(i4)') ie ie = dddigin (ca, 4) if (is .eq. -1) ie = - ie ie = ie + ip - id s0(1) = 10.d0 s0(2) = 0.d0 ! call ddnpwr (s0, ie, s2) call f_dd_npwr (s0, ie, s2) ! call ddmul (s1, s2, b) call f_dd_mul (s1, s2, b) goto 220 210 write (6, 1) a 1 format ('*** ddinpc: Syntax error in literal string: ', a) ! call ddabrt stop 220 return end subroutine subroutine ddout (iu, a) ! This routine writes the DD number A on logical unit iu using a standard ! E format, with lines 40 characters long. implicit none integer iu, ln parameter (ln = 40) character cs(40) real*8 a(2) call ddoutc (a, cs) write (iu, '(40a)') cs return end subroutine subroutine ddoutc (a, b) implicit none real*8 a(2) character b(40) b(1) = ' ' b(2) = ' ' call f_dd_swrite(a, 31, b(3), 38) end subroutine real*8 function dddigin (ca, n) implicit none real*8 d1 character*(*), ca character*16 digits integer i, k, n parameter (digits = '0123456789') d1 = 0.d0 do i = 1, n k = index (digits, ca(i:i)) - 1 if (k < 0) then write (6, *) 'dddigin: non-digit in character string' elseif (k <= 9) then d1 = 10.d0 * d1 + k endif enddo dddigin = d1 end function character*16 function dddigout (a, n) implicit none real*8 a, d1, d2 character*16 ca, digits parameter (digits = '0123456789') integer i, is, k, n real*8 dabs, dint intrinsic :: dabs, dint ca = ' ' is = sign (1.d0, a) d1 = dabs (a) do i = n, 1, -1 d2 = dint (d1 / 10.d0) k = 1.d0 + (d1 - 10.d0 * d2) d1 = d2 ca(i:i) = digits(k:k) if (d1 == 0.d0) goto 100 enddo i = 0 100 continue if (is < 0 .and. i > 1) then ca(i-1:i-1) = '-' elseif (i == 0 .or. is < 0 .and. i == 1) then ca = '****************' endif dddigout = ca return end function elemental type (dd_real) function ddhuge(a) type (dd_real), intent(in) :: a ddhuge = dd_huge end function ddhuge elemental type (dd_real) function dd_safe_huge(a) type (dd_real), intent(in) :: a dd_safe_huge = dd_real((/1.7976931080746007281d+308, & 9.97920154767359795037d+291/)); end function dd_safe_huge elemental type (dd_real) function ddtiny(a) type (dd_real), intent(in) :: a ddtiny = dd_tiny end function ddtiny elemental type (dd_real) function ddepsilon(a) type (dd_real), intent(in) :: a ddepsilon = dd_eps end function ddepsilon elemental integer function dd_radix(a) type (dd_real), intent(in) :: a dd_radix = 2 end function dd_radix elemental integer function dd_digits(a) type (dd_real), intent(in) :: a dd_digits = 104 end function dd_digits elemental integer function dd_max_expn(a) type (dd_real), intent(in) :: a dd_max_expn = 1023 end function dd_max_expn elemental integer function dd_min_expn(a) type (dd_real), intent(in) :: a dd_min_expn = -969 end function dd_min_expn elemental integer function dd_precision(a) type (dd_real), intent(in) :: a dd_precision = 31 end function dd_precision elemental integer function dd_range(a) type (dd_real), intent(in) :: a dd_range = 291 end function dd_range elemental type (dd_real) function dd_nan(a) type (dd_real), intent(in) :: a call f_dd_nan(dd_nan%re) end function dd_nan elemental type (dd_real) function dd_aimag(a) type (dd_complex), intent(in) :: a dd_aimag%re = a%cmp(3:4) end function end module ddmodule qd-2.3.11/fortran/tquadtsq.f0000644000175000017500000004670611202062041016143 0ustar prudhommprudhommmodule quadglobal use qdmodule implicit none integer ndebug, ndigits, nerror, nquadl end module ! program tquadtsq subroutine f_main ! David H. Bailey 2004-12-16 ! This is the Quad-Double Fortran-90 version. ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC03-76SF00098. ! This program demonstrates the quadrature routine 'quadtsq', which employs ! the tanh-sinh function. The function quadtsq is suitable to integrate ! a function that is continuous, infinitely differentiable and integrable on a ! finite open interval. It can also be used for certain integrals on ! infinite intervals, by making a suitable change of variable -- see below. ! While this routine is not quite as efficient as quadgs for functions that ! are regular on a closed interval, it can be used for functions with an ! integrable singularity at one or both of the endpoints. ! The function(s) to be integrated is(are) defined in external function ! subprogram(s) -- see the sample function subprograms below. The name(s) of ! the function subprogram(s) must be included in appropriate type and external ! statements in the main program. ! Note that an integral of a function on an infinite interval can be ! converted to an integral on a finite interval by means of a suitable ! change of variable. Example (here the notation "inf" means infinity): ! Int_0^inf f(t) dt = Int_0^1 f(t) dt + Int_1^inf f(t) dt ! = Int_0^1 f(t) dt + Int_0^1 f(1/t)/t^2 dt ! Inputs set in parameter statement below: ! kdebug Debug level setting. Default = 2. ! ndp Digits of precision. May not exceed mpipl in file mpmod90.f. ! In some cases, ndp must be significantly greater than the desired ! tolerance in the result-- see the examples below. ! neps Log10 of the desired tolerance in the result (negative integer). ! nq1 Max number of phases in quadrature routine; adding 1 increases ! (possibly doubles) the number of accurate digits in the result, ! but also roughly quadruples the run time. nq1 > 2. ! nq2 Space parameter for wk and xk arrays in the calling program. By ! default it is set to 8 * 2^nq1. Increase nq2 if directed by a ! message produced in initqts. Note that the dimension of the ! wk and xk arrays starts with -1, so the length of these arrays is ! (nq2+2) * 4 eight-byte words. use qdmodule use quadglobal implicit none integer i, kdebug, ndp, neps, nq1, nq2, n1 parameter (kdebug = 2, ndp = 64, neps = -64, nq1 = 8, nq2 = 8 * 2 ** nq1) double precision dplog10q, d1, d2, second, tm0, tm1 type (qd_real) err, quadtsq, fun01, fun02, fun03, fun04, fun05, fun06, fun07, & fun08, fun09, fun10, fun11, fun12, fun13, fun14, fun15a, fun15b, & t1, t2, t3, t4, wk(-1:nq2), xk(-1:nq2), x1, x2, gammax external quadtsq, fun01, fun02, fun03, fun04, fun05, fun06, fun07, fun08, & fun09, fun10, fun11, fun12, fun13, fun14, fun15a, fun15b, second, gammax integer*4 old_cw call f_fpu_fix_start (old_cw) ndebug = kdebug ndigits = ndp nerror = 0 nquadl = nq1 write (6, 1) ndigits, neps, nquadl 1 format ('Quadtsq test'/'Digits =',i6,' Epsilon =',i6,' Quadlevel =',i6) ! Initialize quadrature tables wk and xk (weights and abscissas). tm0 = second () call initqtsq (nq1, nq2, wk, xk) tm1 = second () if (nerror > 0) stop write (6, 2) tm1 - tm0 2 format ('Quadrature initialization completed: cpu time =',f12.6) ! Begin quadrature tests. write (6, 11) 11 format (/'Continuous functions on finite itervals:'//& 'Problem 1: Int_0^1 t*log(1+t) dt = 1/4') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun01, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 3 format ('Quadrature completed: CPU time =',f12.6/'Result =') call qdwrite (6, t1) t2 = 0.25d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 4 format ('Actual error =',f10.6,'x10^',i5) write (6, 12) 12 format (/'Problem 2: Int_0^1 t^2*arctan(t) dt = (pi - 2 + 2*log(2))/12') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun02, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = (qdpi() - 2.d0 + 2.d0 * log (qdreal (2.d0))) / 12.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 13) 13 format (/'Problem 3: Int_0^(pi/2) e^t*cos(t) dt = 1/2*(e^(pi/2) - 1)') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quadtsq (fun03, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * (exp (0.5d0 * qdpi()) - 1.d0) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 14) 14 format (/ & 'Problem 4: Int_0^1 arctan(sqrt(2+t^2))/((1+t^2)sqrt(2+t^2)) dt = 5*Pi^2/96') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun04, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 5.d0 * qdpi()**2 / 96.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 15) 15 format (/& 'Continuous functions on finite itervals, but non-diff at an endpoint'// & 'Problem 5: Int_0^1 sqrt(t)*log(t) dt = -4/9') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun05, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = qdreal (-4.d0) / 9.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 16) 16 format (/'Problem 6: Int_0^1 sqrt(1-t^2) dt = pi/4') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun06, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.25d0 * qdpi() call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 17) 17 format (/& 'Functions on finite intervals with integrable singularity at an endpoint.'//& 'Problem 7: Int_0^1 sqrt(t)/sqrt(1-t^2) dt = 2*sqrt(pi)*gamma(3/4)/gamma(1/4)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun07, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 2.d0 * sqrt (qdpi()) * gammax (qdreal (0.75d0)) / gammax (qdreal (0.25d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 18) 18 format (/'Problem 8: Int_0^1 log(t)^2 dt = 2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun08, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 2.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 19) 19 format (/'Problem 9: Int_0^(pi/2) log(cos(t)) dt = -pi*log(2)/2') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quadtsq (fun09, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = -0.5d0 * qdpi() * log (qdreal (2.d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 20) 20 format (/'Problem 10: Int_0^(pi/2) sqrt(tan(t)) dt = pi*sqrt(2)/2') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quadtsq (fun10, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * qdpi() * sqrt (qdreal (2.d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 21) 21 format (/& 'Functions on an infinite interval (requiring a two-step solution'//& 'Problem 11: Int_0^inf 1/(1+t^2) dt = pi/2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun11, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * qdpi() call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 22) 22 format (/'Problem 12: Int_0^inf e^(-t)/sqrt(t) dt = sqrt(pi)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun12, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = sqrt (qdpi()) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 23) 23 format (/'Problem 13: Int_0^inf e^(-t^2/2) dt = sqrt(pi/2)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun13, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = sqrt (0.5d0 * qdpi()) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 24) 24 format (/& 'Oscillatory functions on an infinite interval.'//& 'Problem 14: Int_0^inf e^(-t)*cos(t) dt = 1/2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quadtsq (fun14, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 25) 25 format (/'Problem 15: Int_0^inf sin(t)/t = pi/2') x1 = 0.d0 x2 = qdpi() tm0 = second () t1 = quadtsq (fun15a, x1, x2, nq1, nq2, wk, xk) x2 = 1.d0 / qdpi() t2 = quadtsq (fun15b, x1, x2, nq1, nq2, wk, xk) t3 = t1 + 40320.d0 * t2 - 1.d0 / qdpi() + 2.d0 / qdpi() ** 3 & - 24.d0 / qdpi() ** 5 + 720.d0 / qdpi() ** 7 tm1 = second () write (6, 3) tm1 - tm0 t4 = 0.5d0 * qdpi() call decmdq (t4 - t3, d1, n1) write (6, 4) d1, n1 write (6, 26) 26 format ('Prob 15 error may be 40,000 X higher than estimated error.') call f_fpu_fix_end (old_cw) stop end function fun01 (t) ! fun01(t) = t * log(1+t) use qdmodule implicit none type (qd_real) fun01, t fun01 = t * log (1.d0 + t) return end function fun02 (t) ! fun02(t) = t^2 * arctan(t) use qdmodule implicit none type (qd_real) fun02, t fun02 = t ** 2 * atan (t) return end function fun03 (t) ! fun03(t) = e^t * cos(t) use qdmodule implicit none type (qd_real) fun03, t fun03 = exp(t) * cos(t) return end function fun04 (t) ! fun04(t) = arctan(sqrt(2+t^2))/((1+t^2)sqrt(2+t^2)) use qdmodule implicit none type (qd_real) fun04, t, t1 t1 = sqrt (2.d0 + t**2) fun04 = atan(t1)/((1.d0 + t**2)*t1) return end function fun05 (t) ! fun05(t) = sqrt(t)*log(t) use qdmodule implicit none type (qd_real) fun05, t fun05 = sqrt (t) * log (t) return end function fun06 (t) ! fun06(t) = sqrt(1-t^2) use qdmodule implicit none type (qd_real) fun06, t fun06 = sqrt (1.d0 - t**2) return end function fun07 (t) ! fun07(t) = sqrt(t) / sqrt(1-t^2) use qdmodule implicit none type (qd_real) fun07, t fun07 = sqrt (t) / sqrt (1.d0 - t**2) return end function fun08 (t) ! fun08(t) = log(t)^2 use qdmodule implicit none type (qd_real) fun08, t fun08 = log (t) ** 2 return end function fun09 (t) ! fun09(t) = log (cos (t)) use qdmodule implicit none type (qd_real) fun09, t fun09 = log (cos (t)) return end function fun10 (t) ! fun10(t) = sqrt(tan(t)) use qdmodule implicit none type (qd_real) fun10, t fun10 = sqrt (tan (t)) return end function fun11 (t) ! fun11(t) = 1/(u^2(1+(1/u-1)^2)) = 1/(1 - 2*u + u^2) use qdmodule implicit none type (qd_real) fun11, t fun11 = 1.d0 / (1.d0 - 2.d0 * t + 2.d0 * t ** 2) return end function fun12 (t) ! fun12(t) = e^(-(1/t-1)) / sqrt(t^3 - t^4) use qdmodule implicit none type (qd_real) fun12, t, t1 t1 = 1.d0 / t - 1.d0 fun12 = exp (-t1) / sqrt (t ** 3 - t ** 4) return end function fun13 (t) ! fun13(t) = e^(-(1/t-1)^2/2) / t^2 use qdmodule implicit none type (qd_real) fun13, t, t1 t1 = 1.d0 / t - 1.d0 fun13 = exp (-0.5d0 * t1 ** 2) / t ** 2 return end function fun14 (t) ! fun14(t) = e^(-(1/t-1)) * cos (1/t-1) / t^2 use qdmodule implicit none type (qd_real) fun14, t, t1 t1 = 1.d0 / t - 1.d0 fun14 = exp (-t1) * cos (t1) / t ** 2 return end function fun15a (t) ! fun15a(t) = sin(t)/t use qdmodule use quadglobal implicit none type (qd_real) fun15a, t fun15a = sin (t) / t return end function fun15b (t) ! fun15b(t) = t^7 * sin(1/t) use qdmodule use quadglobal implicit none type (qd_real) fun15b, t if (abs (t) > 1.d-10) then fun15b = t**7 * sin (1.d0 / t) else fun15b = 0.d0 endif return end subroutine initqtsq (nq1, nq2, wk, xk) ! This subroutine initializes the quadrature arays xk and wk using the ! function x(t) = tanh (pi/2*sinh(t)). The argument nq2 is the space ! allocated for wk and xk in the calling program. By default it is set to ! 8 * 2^nq1. Increase nq2 if directed by a message produced below. ! Upon completion, wk(-1) = nq1, and xk(-1) = n, the maximum space parameter ! for these arrays. In other words, the arrays occupy (wk(i), i = -1 to n) ! and (xk(i), i = -1 to n), where n = xk(-1). The array x_k contains ! 1 minus the abscissas; the wk array contains the weights at these abscissas. ! David H Bailey 2004-07-28 use qdmodule use quadglobal implicit none integer i, ierror, iprint, j, k, k1, nq1, nq2 real*8 eps, h parameter (iprint = 1000) type (qd_real) p2, t1, t2, t3, t4, t5, u1, u2, wk(-1:nq2), xk(-1:nq2) if (ndebug >= 1) then write (6, 1) 1 format ('initqtsq: Tanh-sinh quadrature initialization') endif eps = 1.d-64 p2 = 0.5d0 * qdpi() h = 0.5d0 ** nq1 wk(-1) = dble (nq1) do k = 0, nq2 if (ndebug >= 2 .and. mod (k, iprint) == 0) write (6, *) k, nq2 t1 = dble (k) * h ! xk(k) = 1 - tanh (u1) = 1 /(e^u1 * cosh (u1)) ! wk(k) = u2 / cosh (u1)^2 ! where u1 = pi/2 * cosh (t1), u2 = pi/2 * sinh (t1) t2 = exp (t1) u1 = 0.5d0 * p2 * (t2 + 1.d0 / t2) u2 = 0.5d0 * p2 * (t2 - 1.d0 / t2) t3 = exp (u2) t4 = 0.5d0 * (t3 + 1.d0 / t3) xk(k) = 1.d0 / (t3 * t4) wk(k) = u1 / t4 ** 2 if (wk(k) < eps) goto 100 enddo write (6, 2) nq2 2 format ('initqtsq: Table space parameter is too small; value =',i8) nerror = 91 goto 130 100 continue xk(-1) = dble (k) if (ndebug >= 2) then write (6, 3) k 3 format ('initqtsq: Table spaced used =',i8) endif goto 130 120 continue nerror = ierror + 100 write (6, 4) nerror 4 format ('initqtsq: Error in quadrature initialization; code =',i5) 130 continue return end function quadtsq (fun, x1, x2, nq1, nq2, wk, xk) ! This routine computes the integral of the function in fun on the interval ! [x1, x2], with up to nq1 iterations, with a target tolerance of eps. ! wk and xk are precomputed tables of weights and abscissas. The function ! fun is not evaluated at x = x1 or x2. The array x_k contains 1 minus ! the abscissas; the wk array contains the weights at these abscissas. ! David H. Bailey 2004-07-28 use qdmodule use quadglobal implicit none integer i, ierror, ip(0:100), iz1, iz2, izx, j, k, k1, k2, n, nds, nq1, nq2, & nqq1 parameter (izx = 4) logical log1, log2 real*8 d1, d2, d3, d4, dplog10q, h type (qd_real) ax, bx, c10, quadtsq, eps, eps1, eps2, err, fun, & tsum, s1, s2, s3, t1, t2, t3, t4, tw1, tw2, twi1, twi2, twmx, & wk(-1:nq2), xk(-1:nq2), x1, x2, xki, xt1, xx1, xx2 external fun, dplog10q ax = 0.5d0 * (x2 - x1) bx = 0.5d0 * (x2 + x1) tsum = 0.d0 s1 = 0.d0 s2 = 0.d0 h = 1.d0 c10 = 10.d0 eps = 1.d-64 if (wk(-1) < dble (nq1)) then write (6, 1) nq1 1 format ('quadtsq: quadrature arrays have not been initialized; nq1 =',i6) nerror = 70 goto 140 endif nqq1 = dble (wk(-1)) n = dble (xk(-1)) do k = 0, nqq1 ip(k) = 2 ** k enddo do k = 1, nq1 h = 0.5d0 * h s3 = s2 s2 = s1 k1 = ip(nqq1-k) k2 = ip(nqq1-k+1) iz1 = 0 iz2 = 0 twmx = 0.d0 ! Evaluate function at level k in x, avoiding unnecessary computation. do i = 0, n, k1 if (mod (i, k2) /= 0 .or. k == 1) then xki = xk(i) xt1 = 1.d0 - xki xx1 = - ax * xt1 + bx xx2 = ax * xt1 + bx log1 = xx1 > x1 log2 = xx2 < x2 if (log1 .and. iz1 < izx) then t1 = fun (xx1) tw1 = t1 * wk(i) twi1 = abs (tw1) if (twi1 < eps) then iz1 = iz1 + 1 else iz1 = 0 endif else t1 = 0.d0 tw1 = 0.d0 endif if (i > 0 .and. log2 .and. iz2 < izx) then t2 = fun (xx2) tw2 = t2 * wk(i) twi2 = abs (tw2) if (twi2 < eps) then iz2 = iz2 + 1 else iz2 = 0 endif else t2 = 0.d0 tw2 = 0.d0 endif tsum = tsum + tw1 + tw2 twmx = max (twmx, abs (tw1), abs (tw2)) endif enddo ! Compute s1 = current integral approximation and err = error estimate. ! Tsum is the sum of all tw1 and tw2 from the loop above. ! Twmx is the largest absolute value of tw1 and tw2 from the loop above. ! Twi1 and twi2 are the final nonzero values of abs(tw1) and abs(tw2). s1 = ax * h * tsum eps1 = twmx * eps eps2 = max (twi1, twi2) d1 = dplog10q (abs (s1 - s2)) d2 = dplog10q (abs (s1 - s3)) d3 = dplog10q (eps1) - 1.d0 d4 = dplog10q (eps2) - 1.d0 if (k <= 2) then err = 1.d0 elseif (d1 .eq. -9999.d0) then err = 0.d0 else err = c10 ** nint (min (0.d0, max (d1 ** 2 / d2, 2.d0 * d1, d3, d4))) endif ! Output current integral approximation and error estimate, to 56 dp. if (ndebug >= 2) then write (6, 2) k, nq1, nint (dplog10q (abs (err))) 2 format ('quadtsq: Iteration',i3,' of',i3,'; est error = 10^',i5, & '; approx value =') call qdwrite (6, s1) endif if (k >= 3 .and. err < eps1) goto 140 if (k >= 3 .and. err < eps2) goto 120 enddo write (6, 3) nint (dplog10q (abs (err))), nquadl 3 format ('quadtsq: Estimated error = 10^',i5/& 'Increase Quadlevel for greater accuracy. Current Quadlevel =',i4) goto 140 120 continue write (6, 4) nint (dplog10q (abs (err))), ndigits 4 format ('quadtsq: Estimated error = 10^',i5/& 'Increase working prec (Digits) for greater accuracy. Current Digits =',i4) goto 140 130 continue if (ierror > 0) nerror = ierror + 100 write (6, 5) nerror 5 format ('quadtsq: Error in quadrature calculation; code =',i5) s1 = 0.d0 140 continue quadtsq = s1 return end function gammax (t) ! This evaluates the gamma function, using an algorithm of R. W. Potter. use qdmodule implicit none integer i, j, k, ndp, neps, nt, nwords double precision alpha, con1, con2, d1, d2 parameter (con1 = 1.151292547d0, con2 = 1.974476770d0) type (qd_real) eps, gammax, sum1, sum2, t, t1, t2, t3, t4, z neps = -64 ndp = 64 eps = 1d-64 ! Handle special arguments. if (abs (t) > 170.d0) then write (6, *) 'gamma: argument too large' goto 120 elseif (t == anint (t)) then if (t <= 0.d0) then write (6, *) 'gamma: invalid negative argument' z = 0.d0 goto 120 endif nt = dble (t) t1 = 1.d0 do i = 2, nt - 1 t1 = dble (i) * t1 enddo z = t1 goto 120 endif ! Calculate alpha, then take the next highest integer value, so that ! d2 = 0.25 * alpha^2 can be calculated exactly in double precision. alpha = aint (con1 * ndp + 1.d0) t1 = t d2 = 0.25d0 * alpha**2 t3 = 1.d0 / t1 sum1 = t3 ! Evaluate the series with t, terminating when t3 < sum1 * epsilon. do j = 1, 1000000000 t3 = t3 * d2 / (dble (j) * (t1 + dble (j))) sum1 = sum1 + t3 if (abs (t3) < abs (sum1) * eps) goto 100 enddo write (6, *) 'gamma: loop overflow 1' sum1 = 0.d0 100 continue sum1 = t1 * (0.5d0 * alpha) ** t1 * sum1 t1 = -t t3 = 1.d0 / t1 sum2 = t3 ! Evaluate the same series with -t, terminating when t3 < sum1 * epsilon. do j = 1, 1000000000 t3 = t3 * d2 / (dble (j) * (t1 + dble (j))) sum2 = sum2 + t3 if (abs (t3) < abs (sum2) * eps) goto 110 enddo write (6, *) 'gamma: loop overflow 2' sum2 = 0.d0 110 continue sum2 = t1 * (0.5d0 * alpha) ** t1 * sum2 ! Conclude with this square root expression. z = sqrt (qdpi() * sum1 / (t * sin (qdpi() * t) * sum2)) 120 continue gammax = z return end function dplog10q (a) ! For input MP value a, this routine returns a DP approximation to log10 (a). use qdmodule implicit none integer ia double precision da, dplog10q, t1 type (qd_real) a da = a if (da .eq. 0.d0) then dplog10q = -9999.d0 else dplog10q = log10 (abs (da)) endif 100 continue return end subroutine decmdq (a, b, ib) ! For input MP value a, this routine returns DP b and integer ib such that ! a = b * 10^ib, with 1 <= abs (b) < 10 for nonzero a. use qdmodule implicit none integer ia, ib double precision da, b, t1, xlt parameter (xlt = 0.3010299956639812d0) type (qd_real) a da = a if (da .ne. 0.d0) then t1 = log10 (abs (da)) ib = t1 if (t1 .lt. 0.d0) ib = ib - 1 b = sign (10.d0 ** (t1 - ib), da) else b = 0.d0 ib = 0 endif return end qd-2.3.11/fortran/f_qd.cpp0000644000175000017500000002770011202062041015534 0ustar prudhommprudhomm/* * src/c_qd.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains C wrapper function for quad-double precision arithmetic. * This can be used from fortran code. */ #include "config.h" #ifdef HAVE_FORTRAN #include #include "config.h" #include #include #define f_qd_add FC_FUNC_(f_qd_add, F_QD_ADD) #define f_qd_add_qd_dd FC_FUNC_(f_qd_add_qd_dd, F_QD_ADD_QD_DD) #define f_qd_add_qd_d FC_FUNC_(f_qd_add_qd_d, F_QD_ADD_QD_D) #define f_qd_sub FC_FUNC_(f_qd_sub, F_QD_SUB) #define f_qd_sub_dd_qd FC_FUNC_(f_qd_sub_dd_qd, F_QD_SUB_DD_QD) #define f_qd_sub_qd_dd FC_FUNC_(f_qd_sub_qd_dd, F_QD_SUB_QD_DD) #define f_qd_sub_d_qd FC_FUNC_(f_qd_sub_d_qd, F_QD_SUB_D_QD) #define f_qd_sub_qd_d FC_FUNC_(f_qd_sub_qd_d, F_QD_SUB_QD_D) #define f_qd_mul FC_FUNC_(f_qd_mul, F_QD_MUL) #define f_qd_mul_qd_dd FC_FUNC_(f_qd_mul_qd_dd, F_QD_MUL_QD_DD) #define f_qd_mul_qd_d FC_FUNC_(f_qd_mul_qd_d, F_QD_MUL_QD_D) #define f_qd_div FC_FUNC_(f_qd_div, F_QD_DIV) #define f_qd_div_dd_qd FC_FUNC_(f_qd_div_dd_qd, F_QD_DIV_DD_QD) #define f_qd_div_qd_dd FC_FUNC_(f_qd_div_qd_dd, F_QD_DIV_QD_DD) #define f_qd_div_d_qd FC_FUNC_(f_qd_div_d_qd, F_QD_DIV_D_QD) #define f_qd_div_qd_d FC_FUNC_(f_qd_div_qd_d, F_QD_DIV_QD_D) #define f_qd_sqrt FC_FUNC_(f_qd_sqrt, F_QD_SQRT) #define f_qd_sqr FC_FUNC_(f_qd_sqr, F_QD_SQR) #define f_qd_abs FC_FUNC_(f_qd_abs, F_QD_ABS) #define f_qd_npwr FC_FUNC_(f_qd_npwr, F_QD_NPWR) #define f_qd_nroot FC_FUNC_(f_qd_nroot, F_QD_NROOT) #define f_qd_nint FC_FUNC_(f_qd_nint, F_QD_NINT) #define f_qd_aint FC_FUNC_(f_qd_aint, F_QD_AINT) #define f_qd_floor FC_FUNC_(f_qd_floor, F_QD_FLOOR) #define f_qd_ceil FC_FUNC_(f_qd_ceil, F_QD_CEIL) #define f_qd_exp FC_FUNC_(f_qd_exp, F_QD_EXP) #define f_qd_log FC_FUNC_(f_qd_log, F_QD_LOG) #define f_qd_log10 FC_FUNC_(f_qd_log10, F_QD_LOG10) #define f_qd_sin FC_FUNC_(f_qd_sin, F_QD_SIN) #define f_qd_cos FC_FUNC_(f_qd_cos, F_QD_COS) #define f_qd_tan FC_FUNC_(f_qd_tan, F_QD_TAN) #define f_qd_asin FC_FUNC_(f_qd_asin, F_QD_ASIN) #define f_qd_acos FC_FUNC_(f_qd_acos, F_QD_ACOS) #define f_qd_atan FC_FUNC_(f_qd_atan, F_QD_ATAN) #define f_qd_atan2 FC_FUNC_(f_qd_atan2, F_QD_ATAN2) #define f_qd_sinh FC_FUNC_(f_qd_sinh, F_QD_SINH) #define f_qd_cosh FC_FUNC_(f_qd_cosh, F_QD_COSH) #define f_qd_tanh FC_FUNC_(f_qd_tanh, F_QD_TANH) #define f_qd_asinh FC_FUNC_(f_qd_asinh, F_QD_ASINH) #define f_qd_acosh FC_FUNC_(f_qd_acosh, F_QD_ACOSH) #define f_qd_atanh FC_FUNC_(f_qd_atanh, F_QD_ATANH) #define f_qd_sincos FC_FUNC_(f_qd_sincos, F_QD_SINCOS) #define f_qd_sincosh FC_FUNC_(f_qd_sincosh, F_QD_SINCOSH) #define f_qd_swrite FC_FUNC_(f_qd_swrite, F_QD_SWRITE) #define f_qd_write FC_FUNC_(f_qd_write, F_QD_WRITE) #define f_qd_neg FC_FUNC_(f_qd_neg, F_QD_NEG) #define f_qd_rand FC_FUNC_(f_qd_rand, F_QD_RAND) #define f_qd_comp FC_FUNC_(f_qd_comp, F_QD_COMP) #define f_qd_comp_qd_d FC_FUNC_(f_qd_comp_qd_d, F_QD_COMP_QD_D) #define f_qd_pi FC_FUNC_(f_qd_pi, F_QD_PI) #define f_qd_nan FC_FUNC_(f_qd_nan, F_QD_NAN) #define TO_DOUBLE_PTR(a, ptr) ptr[0] = a.x[0]; ptr[1] = a.x[1]; \ ptr[2] = a.x[2]; ptr[3] = a.x[3]; extern "C" { /* add */ void f_qd_add(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) + qd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_add_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) + dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_add_qd_d(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) + *b; TO_DOUBLE_PTR(cc, c); } /* sub */ void f_qd_sub(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) - qd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_sub_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) - dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_sub_dd_qd(const double *a, const double *b, double *c) { qd_real cc; cc = dd_real(a) - qd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_sub_qd_d(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) - *b; TO_DOUBLE_PTR(cc, c); } void f_qd_sub_d_qd(const double *a, const double *b, double *c) { qd_real cc; cc = *a - qd_real(b); TO_DOUBLE_PTR(cc, c); } /* mul */ void f_qd_mul(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) * qd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_mul_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) * dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_mul_qd_d(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) * *b; TO_DOUBLE_PTR(cc, c); } /* div */ void f_qd_div(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) / qd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_div_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) / dd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_div_dd_qd(const double *a, const double *b, double *c) { qd_real cc; cc = dd_real(a) / qd_real(b); TO_DOUBLE_PTR(cc, c); } void f_qd_div_qd_d(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) / *b; TO_DOUBLE_PTR(cc, c); } void f_qd_div_d_qd(const double *a, const double *b, double *c) { qd_real cc; cc = *a / qd_real(b); TO_DOUBLE_PTR(cc, c); } /* selfadd */ void f_qd_selfadd(const double *a, double *b) { qd_real bb(b); bb += qd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfadd_dd(const double *a, double *b) { qd_real bb(b); bb += dd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfadd_d(const double *a, double *b) { qd_real bb(b); bb += *a; TO_DOUBLE_PTR(bb, b); } /* selfsub */ void f_qd_selfsub(const double *a, double *b) { qd_real bb(b); bb -= qd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfsub_dd(const double *a, double *b) { qd_real bb(b); bb -= dd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfsub_d(const double *a, double *b) { qd_real bb(b); bb -= *a; TO_DOUBLE_PTR(bb, b); } /* selfmul */ void f_qd_selfmul(const double *a, double *b) { qd_real bb(b); bb *= qd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfmul_dd(const double *a, double *b) { qd_real bb(b); bb *= dd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfmul_d(const double *a, double *b) { qd_real bb(b); bb *= *a; TO_DOUBLE_PTR(bb, b); } /* selfdiv */ void f_qd_selfdiv(const double *a, double *b) { qd_real bb(b); bb /= qd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfdiv_dd(const double *a, double *b) { qd_real bb(b); bb /= dd_real(a); TO_DOUBLE_PTR(bb, b); } void f_qd_selfdiv_d(const double *a, double *b) { qd_real bb(b); bb /= *a; TO_DOUBLE_PTR(bb, b); } void f_qd_sqrt(const double *a, double *b) { qd_real bb; bb = sqrt(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_sqr(const double *a, double *b) { qd_real bb; bb = sqr(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_abs(const double *a, double *b) { qd_real bb; bb = abs(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_npwr(double *a, int *n, double *b) { qd_real bb; bb = npwr(qd_real(a), *n); TO_DOUBLE_PTR(bb, b); } void f_qd_nroot(double *a, int *n, double *b) { qd_real bb; bb = nroot(qd_real(a), *n); TO_DOUBLE_PTR(bb, b); } void f_qd_nint(const double *a, double *b) { qd_real bb; bb = nint(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_aint(const double *a, double *b) { qd_real bb; bb = aint(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_floor(const double *a, double *b) { qd_real bb; bb = floor(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_ceil(const double *a, double *b) { qd_real bb; bb = ceil(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_log(const double *a, double *b) { qd_real bb; bb = log(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_log10(const double *a, double *b) { qd_real bb; bb = log10(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_exp(const double *a, double *b) { qd_real bb; bb = exp(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_sin(const double *a, double *b) { qd_real bb; bb = sin(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_cos(const double *a, double *b) { qd_real bb; bb = cos(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_tan(const double *a, double *b) { qd_real bb; bb = tan(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_asin(const double *a, double *b) { qd_real bb; bb = asin(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_acos(const double *a, double *b) { qd_real bb; bb = acos(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_atan(const double *a, double *b) { qd_real bb; bb = atan(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_atan2(const double *a, const double *b, double *c) { qd_real cc; cc = atan2(qd_real(a), qd_real(b)); TO_DOUBLE_PTR(cc, c); } void f_qd_sinh(const double *a, double *b) { qd_real bb; bb = sinh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_cosh(const double *a, double *b) { qd_real bb; bb = cosh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_tanh(const double *a, double *b) { qd_real bb; bb = tanh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_asinh(const double *a, double *b) { qd_real bb; bb = asinh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_acosh(const double *a, double *b) { qd_real bb; bb = acosh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_atanh(const double *a, double *b) { qd_real bb; bb = atanh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void f_qd_sincos(const double *a, double *s, double *c) { qd_real ss, cc; sincos(qd_real(a), ss, cc); TO_DOUBLE_PTR(cc, c); TO_DOUBLE_PTR(ss, s); } void f_qd_sincosh(const double *a, double *s, double *c) { qd_real ss, cc; sincosh(qd_real(a), ss, cc); TO_DOUBLE_PTR(cc, c); TO_DOUBLE_PTR(ss, s); } /* Writes a dd_real into a character array of length maxlen, with * the given precision. The rest of the array will be filled with * spaces. Parameter maxlen should at least be precision + 7 * characters. Prec can be zero to put out the defaut number of * digits. */ void f_qd_swrite(const double *a, int *precision, char *s, int *maxlen) { int prec = *precision; if (prec <= 0 || prec > qd_real::_ndigits) prec = qd_real::_ndigits; std::ios_base::fmtflags fmt = static_cast(0); std::string str = qd_real(a).to_string(prec, 0, fmt, false, true); int len = 0; if (a[0] < 0.0) { strncpy(&s[len], str.c_str(), *maxlen - len); } else { s[len++] = ' '; strncpy(&s[len], str.c_str(), *maxlen - len); } len += str.length(); for (int i = len; i < *maxlen; i++) s[i] = ' '; } void f_qd_write(const double *a) { std::cout << qd_real(a) << std::endl; } void f_qd_neg(const double *a, double *b) { b[0] = -a[0]; b[1] = -a[1]; b[2] = -a[2]; b[3] = -a[3]; } void f_qd_rand(double *a) { qd_real aa; aa = qdrand(); TO_DOUBLE_PTR(aa, a); } void f_qd_comp(const double *a, const double *b, int *result) { qd_real aa(a), bb(b); if (aa < bb) *result = -1; else if (aa > bb) *result = 1; else *result = 0; } void f_qd_comp_qd_d(const double *a, const double *b, int *result) { qd_real aa(a); if (aa < *b) *result = -1; else if (aa > *b) *result = 1; else *result = 0; } void f_qd_comp_d_qd(const double *a, const double *b, int *result) { qd_real bb(b); if (*a < bb) *result = -1; else if (*a > bb) *result = 1; else *result = 0; } void f_qd_pi(double *a) { TO_DOUBLE_PTR(qd_real::_pi, a); } void f_qd_nan(double *a) { TO_DOUBLE_PTR(qd_real::_nan, a); } } #endif /* HAVE_FORTRAN */ qd-2.3.11/fortran/tquaderq.f0000644000175000017500000005141311202062041016112 0ustar prudhommprudhommmodule quadglobal use qdmodule implicit none integer ndebug, ndigits, nerror, nquadl end module ! program tquaderq subroutine f_main ! David H. Bailey 2004-12-16 ! This is the Quad-Double Fortran-90 version. ! This work was supported by the Director, Office of Science, Division ! of Mathematical, Information, and Computational Sciences of the ! U.S. Department of Energy under contract number DE-AC03-76SF00098. ! This program demonstrates the quadrature routine 'quaderq', which employs ! the error function. The function quaderq is suitable to integrate ! a function that is continuous, infinitely differentiable and integrable on a ! finite open interval. It can also be used for certain integrals on ! infinite intervals, by making a suitable change of variable -- see below. ! While this routine is not quite as efficient as quadgs for functions that ! are regular on a closed interval, it can be used for functions with an ! integrable singularity at one or both of the endpoints. ! The function(s) to be integrated is(are) defined in external function ! subprogram(s) -- see the sample function subprograms below. The name(s) of ! the function subprogram(s) must be included in appropriate type and external ! statements in the main program. ! Note that an integral of a function on an infinite interval can be ! converted to an integral on a finite interval by means of a suitable ! change of variable. Example (here the notation "inf" means infinity): ! Int_0^inf f(t) dt = Int_0^1 f(t) dt + Int_1^inf f(t) dt ! = Int_0^1 f(t) dt + Int_0^1 f(1/t)/t^2 dt ! Inputs set in parameter statement below: ! kdebug Debug level setting. Default = 2. ! ndp Digits of precision. May not exceed mpipl in file mpmod90.f. ! In some cases, ndp must be significantly greater than the desired ! tolerance in the result-- see the examples below. ! neps Log10 of the desired tolerance in the result (negative integer). ! nq1 Max number of phases in quadrature routine; adding 1 increases ! (possibly doubles) the number of accurate digits in the result, ! but also roughly quadruples the run time. nq1 > 2. ! nq2 Space parameter for wk and xk arrays in the calling program. By ! default it is set to 8 * 2^nq1. Increase nq2 if directed by a ! message produced in initqerq. Note that the dimension of the ! wk and xk arrays starts with -1, so the length of these arrays is ! (nq2+2) * 4 eight-byte words. use qdmodule use quadglobal implicit none integer i, kdebug, ndp, neps, nq1, nq2, n1 parameter (kdebug = 2, ndp = 64, neps = -64, nq1 = 9, nq2 = 8 * 2 ** nq1) double precision dplog10q, d1, d2, second, tm0, tm1 type (qd_real) err, quaderq, fun01, fun02, fun03, fun04, fun05, fun06, fun07, & fun08, fun09, fun10, fun11, fun12, fun13, fun14, fun15a, fun15b, & t1, t2, t3, t4, wk(-1:nq2), xk(-1:nq2), x1, x2, gammax external quaderq, fun01, fun02, fun03, fun04, fun05, fun06, fun07, fun08, & fun09, fun10, fun11, fun12, fun13, fun14, fun15a, fun15b, second, gammax integer*4 old_cw call f_fpu_fix_start (old_cw) ndebug = kdebug ndigits = ndp nerror = 0 nquadl = nq1 write (6, 1) ndigits, neps, nquadl 1 format ('Quaderq test'/'Digits =',i6,' Epsilon =',i6,' Quadlevel =',i6) ! Initialize quadrature tables wk and xk (weights and abscissas). tm0 = second () call initqerq (nq1, nq2, wk, xk) tm1 = second () if (nerror > 0) stop write (6, 2) tm1 - tm0 2 format ('Quadrature initialization completed: cpu time =',f12.6) ! Begin quadrature tests. write (6, 11) 11 format (/'Continuous functions on finite itervals:'//& 'Problem 1: Int_0^1 t*log(1+t) dt = 1/4') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun01, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 3 format ('Quadrature completed: CPU time =',f12.6/'Result =') call qdwrite (6, t1) t2 = 0.25d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 4 format ('Actual error =',f10.6,'x10^',i5) write (6, 12) 12 format (/'Problem 2: Int_0^1 t^2*arctan(t) dt = (pi - 2 + 2*log(2))/12') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun02, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = (qdpi() - 2.d0 + 2.d0 * log (qdreal (2.d0))) / 12.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 13) 13 format (/'Problem 3: Int_0^(pi/2) e^t*cos(t) dt = 1/2*(e^(pi/2) - 1)') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quaderq (fun03, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * (exp (0.5d0 * qdpi()) - 1.d0) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 14) 14 format (/ & 'Problem 4: Int_0^1 arctan(sqrt(2+t^2))/((1+t^2)sqrt(2+t^2)) dt = 5*Pi^2/96') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun04, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 5.d0 * qdpi()**2 / 96.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 15) 15 format (/& 'Continuous functions on finite itervals, but non-diff at an endpoint'// & 'Problem 5: Int_0^1 sqrt(t)*log(t) dt = -4/9') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun05, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = qdreal (-4.d0) / 9.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 16) 16 format (/'Problem 6: Int_0^1 sqrt(1-t^2) dt = pi/4') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun06, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.25d0 * qdpi() call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 17) 17 format (/& 'Functions on finite intervals with integrable singularity at an endpoint.'//& 'Problem 7: Int_0^1 sqrt(t)/sqrt(1-t^2) dt = 2*sqrt(pi)*gamma(3/4)/gamma(1/4)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun07, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 2.d0 * sqrt (qdpi()) * gammax (qdreal (0.75d0)) / gammax (qdreal (0.25d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 18) 18 format (/'Problem 8: Int_0^1 log(t)^2 dt = 2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun08, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 2.d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 19) 19 format (/'Problem 9: Int_0^(pi/2) log(cos(t)) dt = -pi*log(2)/2') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quaderq (fun09, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = -0.5d0 * qdpi() * log (qdreal (2.d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 20) 20 format (/'Problem 10: Int_0^(pi/2) sqrt(tan(t)) dt = pi*sqrt(2)/2') x1 = 0.d0 x2 = 0.5d0 * qdpi() tm0 = second () t1 = quaderq (fun10, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * qdpi() * sqrt (qdreal (2.d0)) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 21) 21 format (/& 'Functions on an infinite interval (requiring a two-step solution'//& 'Problem 11: Int_0^inf 1/(1+t^2) dt = pi/2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun11, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 * qdpi() call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 22) 22 format (/'Problem 12: Int_0^inf e^(-t)/sqrt(t) dt = sqrt(pi)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun12, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = sqrt (qdpi()) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 23) 23 format (/'Problem 13: Int_0^inf e^(-t^2/2) dt = sqrt(pi/2)') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun13, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = sqrt (0.5d0 * qdpi()) call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 24) 24 format (/& 'Oscillatory functions on an infinite interval.'//& 'Problem 14: Int_0^inf e^(-t)*cos(t) dt = 1/2') x1 = 0.d0 x2 = 1.d0 tm0 = second () t1 = quaderq (fun14, x1, x2, nq1, nq2, wk, xk) tm1 = second () write (6, 3) tm1 - tm0 call qdwrite (6, t1) t2 = 0.5d0 call decmdq (t2 - t1, d1, n1) write (6, 4) d1, n1 write (6, 25) 25 format (/'Problem 15: Int_0^inf sin(t)/t = pi/2') x1 = 0.d0 x2 = qdpi() tm0 = second () t1 = quaderq (fun15a, x1, x2, nq1, nq2, wk, xk) x2 = 1.d0 / qdpi() t2 = quaderq (fun15b, x1, x2, nq1, nq2, wk, xk) t3 = t1 + 40320.d0 * t2 - 1.d0 / qdpi() + 2.d0 / qdpi() ** 3 & - 24.d0 / qdpi() ** 5 + 720.d0 / qdpi() ** 7 tm1 = second () write (6, 3) tm1 - tm0 t4 = 0.5d0 * qdpi() call decmdq (t4 - t3, d1, n1) write (6, 4) d1, n1 write (6, 26) 26 format ('Prob 15 error may be 40,000 X higher than estimated error.') call f_fpu_fix_end (old_cw) stop end function fun01 (t) ! fun01(t) = t * log(1+t) use qdmodule implicit none type (qd_real) fun01, t fun01 = t * log (1.d0 + t) return end function fun02 (t) ! fun02(t) = t^2 * arctan(t) use qdmodule implicit none type (qd_real) fun02, t fun02 = t ** 2 * atan (t) return end function fun03 (t) ! fun03(t) = e^t * cos(t) use qdmodule implicit none type (qd_real) fun03, t fun03 = exp(t) * cos(t) return end function fun04 (t) ! fun04(t) = arctan(sqrt(2+t^2))/((1+t^2)sqrt(2+t^2)) use qdmodule implicit none type (qd_real) fun04, t, t1 t1 = sqrt (2.d0 + t**2) fun04 = atan(t1)/((1.d0 + t**2)*t1) return end function fun05 (t) ! fun05(t) = sqrt(t)*log(t) use qdmodule implicit none type (qd_real) fun05, t fun05 = sqrt (t) * log (t) return end function fun06 (t) ! fun06(t) = sqrt(1-t^2) use qdmodule implicit none type (qd_real) fun06, t fun06 = sqrt (1.d0 - t**2) return end function fun07 (t) ! fun07(t) = sqrt(t) / sqrt(1-t^2) use qdmodule implicit none type (qd_real) fun07, t fun07 = sqrt(t) / sqrt (1.d0 - t**2) return end function fun08 (t) ! fun08(t) = log(t)^2 use qdmodule implicit none type (qd_real) fun08, t fun08 = log (t) ** 2 return end function fun09 (t) ! fun09(t) = log (cos (t)) use qdmodule implicit none type (qd_real) fun09, t fun09 = log (cos (t)) return end function fun10 (t) ! fun10(t) = sqrt(tan(t)) use qdmodule implicit none type (qd_real) fun10, t fun10 = sqrt (tan (t)) return end function fun11 (t) ! fun11(t) = 1/(u^2(1+(1/u-1)^2)) = 1/(1 - 2*u + u^2) use qdmodule implicit none type (qd_real) fun11, t fun11 = 1.d0 / (1.d0 - 2.d0 * t + 2.d0 * t ** 2) return end function fun12 (t) ! fun12(t) = e^(-(1/t-1)) / sqrt(t^3 - t^4) use qdmodule implicit none type (qd_real) fun12, t, t1 t1 = 1.d0 / t - 1.d0 fun12 = exp (-t1) / sqrt (t ** 3 - t ** 4) return end function fun13 (t) ! fun13(t) = e^(-(1/t-1)^2/2) / t^2 use qdmodule implicit none type (qd_real) fun13, t, t1 t1 = 1.d0 / t - 1.d0 fun13 = exp (-0.5d0 * t1 ** 2) / t ** 2 return end function fun14 (t) ! fun14(t) = e^(-(1/t-1)) * cos (1/t-1) / t^2 use qdmodule implicit none type (qd_real) fun14, t, t1 t1 = 1.d0 / t - 1.d0 fun14 = exp (-t1) * cos (t1) / t ** 2 return end function fun15a (t) ! fun15a(t) = sin(t)/t use qdmodule use quadglobal implicit none type (qd_real) fun15a, t fun15a = sin (t) / t return end function fun15b (t) ! fun15b(t) = t^7 * sin(1/t) use qdmodule use quadglobal implicit none type (qd_real) fun15b, t if (abs (t) > 1.d-10) then fun15b = t**7 * sin (1.d0 / t) else fun15b = 0.d0 endif return end subroutine initqerq (nq1, nq2, wk, xk) ! This subroutine initializes the quadrature arays xk and wk using the ! function x(t) = erf(t) = 1 - erfc(t). The argument nq2 is the space ! allocated for wk and xk in the calling program. By default it is set to ! 8 * 2^nq1. Increase nq2 if directed by a message produced below. ! Upon completion, wk(-1) = nq1, and xk(-1) = n, the maximum space parameter ! for these arrays. In other words, the arrays occupy (wk(i), i = -1 to n) ! and (xk(i), i = -1 to n), where n = xk(-1). The array x_k contains ! 1 minus the abscissas; the wk array contains the weights at these abscissas. ! David H Bailey 2004-07-28 use qdmodule use quadglobal implicit none integer i, ierror, iprint, j, k, k1, nq1, nq2, ntab, ntabx real*8 eps, h parameter (iprint = 1000, ntabx = 1000) type (qd_real) erfc, etab(ntabx), p2, spi, t1, t2, t3, t4, t5, & wk(-1:nq2), xk(-1:nq2) external erfc if (ndebug >= 1) then write (6, 1) 1 format ('initqerq: Error function quadrature initialization') endif eps = 1.d-64 p2 = 0.5d0 * qdpi() spi = 2.d0 / sqrt (qdpi()) h = 0.5d0 ** (nq1 - 2) wk(-1) = dble (nq1) do k = 0, nq2 if (ndebug >= 2 .and. mod (k, iprint) == 0) write (6, *) k, nq2 t1 = dble (k) * h xk(k) = erfc (t1, ntab, ntabx, etab) wk(k) = spi * exp (- t1 ** 2) if (wk(k) < eps) goto 100 enddo write (6, 2) nq2 2 format ('initqerq: Table space parameter is too small; value =',i8) nerror = 91 goto 130 100 continue xk(-1) = dble (k) if (ndebug >= 2) then write (6, 3) k 3 format ('initqerq: Table spaced used =',i8) endif goto 130 120 continue nerror = ierror + 100 write (6, 4) nerror 4 format ('initqerq: Error in quadrature initialization; code =',i5) 130 continue return end function quaderq (fun, x1, x2, nq1, nq2, wk, xk) ! This routine computes the integral of the function in fun on the interval ! [x1, x2], with up to nq1 iterations, with a target tolerance of eps. ! wk and xk are precomputed tables of weights and abscissas. The function ! fun is not evaluated at x = x1 or x2. The array x_k contains 1 minus ! the abscissas; the wk array contains the weights at these abscissas. ! David H. Bailey 2004-07-28 use qdmodule use quadglobal implicit none integer i, ierror, ip(0:100), iz1, iz2, izx, j, k, k1, k2, n, nds, nq1, nq2, & nqq1 parameter (izx = 4) logical log1, log2 real*8 d1, d2, d3, d4, dplog10q, h type (qd_real) ax, bx, c10, quaderq, eps, eps1, eps2, err, fun, & tsum, s1, s2, s3, t1, t2, t3, t4, tw1, tw2, twi1, twi2, twmx, & wk(-1:nq2), xk(-1:nq2), x1, x2, xki, xt1, xx1, xx2 external fun, dplog10q ax = 0.5d0 * (x2 - x1) bx = 0.5d0 * (x2 + x1) tsum = 0.d0 s1 = 0.d0 s2 = 0.d0 h = 4.d0 c10 = 10.d0 eps = 1.d-64 if (wk(-1) < dble (nq1)) then write (6, 1) nq1 1 format ('quaderq: quadrature arrays have not been initialized; nq1 =',i6) nerror = 70 goto 140 endif nqq1 = dble (wk(-1)) n = dble (xk(-1)) do k = 0, nqq1 ip(k) = 2 ** k enddo do k = 1, nq1 h = 0.5d0 * h s3 = s2 s2 = s1 k1 = ip(nqq1-k) k2 = ip(nqq1-k+1) iz1 = 0 iz2 = 0 twmx = 0.d0 ! Evaluate function at level k in x, avoiding unnecessary computation. do i = 0, n, k1 if (mod (i, k2) /= 0 .or. k == 1) then xki = xk(i) xt1 = 1.d0 - xki xx1 = - ax * xt1 + bx xx2 = ax * xt1 + bx log1 = xx1 > x1 log2 = xx2 < x2 if (log1 .and. iz1 < izx) then t1 = fun (xx1) tw1 = t1 * wk(i) twi1 = abs (tw1) if (twi1 < eps) then iz1 = iz1 + 1 else iz1 = 0 endif else t1 = 0.d0 tw1 = 0.d0 endif if (i > 0 .and. log2 .and. iz2 < izx) then t2 = fun (xx2) tw2 = t2 * wk(i) twi2 = abs (tw2) if (twi2 < eps) then iz2 = iz2 + 1 else iz2 = 0 endif else t2 = 0.d0 tw2 = 0.d0 endif tsum = tsum + tw1 + tw2 twmx = max (twmx, abs (tw1), abs (tw2)) endif enddo ! Compute s1 = current integral approximation and err = error estimate. ! Tsum is the sum of all tw1 and tw2 from the loop above. ! Twmx is the largest absolute value of tw1 and tw2 from the loop above. ! Twi1 and twi2 are the final nonzero values of abs(tw1) and abs(tw2). s1 = ax * h * tsum eps1 = twmx * eps eps2 = max (twi1, twi2) d1 = dplog10q (abs (s1 - s2)) d2 = dplog10q (abs (s1 - s3)) d3 = dplog10q (eps1) - 1.d0 d4 = dplog10q (eps2) - 1.d0 if (k <= 2) then err = 1.d0 elseif (d1 .eq. -9999.d0) then err = 0.d0 else err = c10 ** nint (min (0.d0, max (d1 ** 2 / d2, 2.d0 * d1, d3, d4))) endif ! Output current integral approximation and error estimate, to 56 dp. if (ndebug >= 2) then write (6, 2) k, nq1, nint (dplog10q (abs (err))) 2 format ('quaderq: Iteration',i3,' of',i3,'; est error = 10^',i5, & '; approx value =') call qdwrite (6, s1) endif if (k >= 3 .and. err < eps1) goto 140 if (k >= 3 .and. err < eps2) goto 120 enddo write (6, 3) nint (dplog10q (abs (err))), nquadl 3 format ('quaderq: Estimated error = 10^',i5/& 'Increase Quadlevel for greater accuracy. Current Quadlevel =',i4) goto 140 120 continue write (6, 4) nint (dplog10q (abs (err))), ndigits 4 format ('quaderq: Estimated error = 10^',i5/& 'Increase working prec (Digits) for greater accuracy. Current Digits =',i4) goto 140 130 continue if (ierror > 0) nerror = ierror + 100 write (6, 5) nerror 5 format ('quaderq: Error in quadrature calculation; code =',i5) s1 = 0.d0 140 continue quaderq = s1 return end function erfc (t, ntab, ntabx, etab) ! This routine employs a formula given in Richard Crandall's "Topics in ! Advanced Scientific Computation", Springer, 1996, pg. 84. He attributes ! the formula to a 1968 paper by Chiarella and Reichel. ! David H Bailey 2002-11-05 use qdmodule implicit none integer i, j, k, n, ndp, ntab, ntabx real*8 alpha, d1, d2, dpi, dlog10, dlog2, dplog10q, eps type (qd_real) erfc, etab(ntabx), t, t1, t2, t3, t4, t5 type (qd_real) t6, t7, t8 save alpha, dlog10 ndp = 64 eps = 1.d-64 if (ntab == 0) then ! On the first call, calculate alpha and round to some nice binary rational. dpi = acos (-1.d0) dlog10 = log (10.d0) dlog2 = log (2.d0) d1 = dpi / sqrt (ndp * dlog10) ntab = ndp * dlog10 / dpi if (ntab > ntabx) then write (6, *) 'ntabx must be at least', ntab stop endif n = abs (int (log (d1) / dlog2)) + 1 alpha = 0.5d0 ** (n + 6) * anint (d1 * 2.d0 ** (n + 6)) ! Calculate table of exp(-k^2*alpha^2). t1 = - alpha ** 2 t2 = exp (t1) t3 = t2 ** 2 t4 = 1.d0 do i = 1, ntab t4 = t2 * t4 etab(i) = t4 t2 = t2 * t3 enddo endif if (t == 0.d0) then erfc = 1.d0 goto 200 endif t1 = 0.d0 t2 = t ** 2 t3 = exp (-t2) t4 = eps / t3 * 1.d-4 do k = 1, ntab t5 = etab(k) / (k ** 2 * alpha ** 2 + t2) t1 = t1 + t5 if (abs (t5) < t4) goto 110 enddo 110 continue erfc = t3 * alpha * t / qdpi() * (1.d0 / t2 + 2.d0 * t1) & + 2.d0 / (1.d0 - exp (2.d0 * qdpi() * t / alpha)) 200 continue return end function gammax (t) ! This evaluates the gamma function, using an algorithm of R. W. Potter. use qdmodule implicit none integer i, j, k, ndp, neps, nt, nwords double precision alpha, con1, con2, d1, d2 parameter (con1 = 1.151292547d0, con2 = 1.974476770d0) type (qd_real) eps, gammax, sum1, sum2, t, t1, t2, t3, t4, z neps = -64 ndp = 64 eps = 1d-64 ! Handle special arguments. if (abs (t) > 170.d0) then write (6, *) 'gamma: argument too large' goto 120 elseif (t == anint (t)) then if (t <= 0.d0) then write (6, *) 'gamma: invalid negative argument' z = 0.d0 goto 120 endif nt = dble (t) t1 = 1.d0 do i = 2, nt - 1 t1 = dble (i) * t1 enddo z = t1 goto 120 endif ! Calculate alpha, then take the next highest integer value, so that ! d2 = 0.25 * alpha^2 can be calculated exactly in double precision. alpha = aint (con1 * ndp + 1.d0) t1 = t d2 = 0.25d0 * alpha**2 t3 = 1.d0 / t1 sum1 = t3 ! Evaluate the series with t, terminating when t3 < sum1 * epsilon. do j = 1, 1000000000 t3 = t3 * d2 / (dble (j) * (t1 + dble (j))) sum1 = sum1 + t3 if (abs (t3) < abs (sum1) * eps) goto 100 enddo write (6, *) 'gamma: loop overflow 1' sum1 = 0.d0 100 continue sum1 = t1 * (0.5d0 * alpha) ** t1 * sum1 t1 = -t t3 = 1.d0 / t1 sum2 = t3 ! Evaluate the same series with -t, terminating when t3 < sum1 * epsilon. do j = 1, 1000000000 t3 = t3 * d2 / (dble (j) * (t1 + dble (j))) sum2 = sum2 + t3 if (abs (t3) < abs (sum2) * eps) goto 110 enddo write (6, *) 'gamma: loop overflow 2' sum2 = 0.d0 110 continue sum2 = t1 * (0.5d0 * alpha) ** t1 * sum2 ! Conclude with this square root expression. z = sqrt (qdpi() * sum1 / (t * sin (qdpi() * t) * sum2)) 120 continue gammax = z return end function dplog10q (a) ! For input MP value a, this routine returns a DP approximation to log10 (a). use qdmodule implicit none integer ia double precision da, dplog10q, t1 type (qd_real) a da = a if (da .eq. 0.d0) then dplog10q = -9999.d0 else dplog10q = log10 (abs (da)) endif 100 continue return end subroutine decmdq (a, b, ib) ! For input MP value a, this routine returns DP b and integer ib such that ! a = b * 10^ib, with 1 <= abs (b) < 10 for nonzero a. use qdmodule implicit none integer ia, ib double precision da, b, t1, xlt parameter (xlt = 0.3010299956639812d0) type (qd_real) a da = a if (da .ne. 0.d0) then t1 = log10 (abs (da)) ib = t1 if (t1 .lt. 0.d0) ib = ib - 1 b = sign (10.d0 ** (t1 - ib), da) else b = 0.d0 ib = 0 endif return end qd-2.3.11/fortran/Makefile.am0000644000175000017500000000352111202062041016146 0ustar prudhommprudhommif HAVE_FORTRAN AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include LDADD=libqdmod.a libqd_f_main.a $(top_builddir)/src/libqd.a $(FCLIBS) if UPCASE_MODULE DDEXT=DDEXT.$(module_ext) QDEXT=QDEXT.$(module_ext) QDMOD=QDMODULE.$(module_ext) DDMOD=DDMODULE.$(module_ext) else DDEXT=ddext.$(module_ext) QDEXT=qdext.$(module_ext) QDMOD=qdmodule.$(module_ext) DDMOD=ddmodule.$(module_ext) endif lib_LIBRARIES = libqdmod.a libqd_f_main.a libqdmod_a_SOURCES = ddext.f ddmod.f qdext.f qdmod.f f_dd.cpp f_qd.cpp libqd_f_main_a_SOURCES = main.cpp ddmod.o: ddext.o qdmod.o: ddmod.o qdext.o $(QDMOD): qdmod.o $(DDMOD): ddmod.o $(DDEXT): ddext.o $(QDEXT): qdext.o pkglib_DATA = $(QDMOD) $(QDEXT) $(DDMOD) $(DDEXT) DEMO=quaderq$(EXEEXT) quadgsq2d$(EXEEXT) quadgsq$(EXEEXT) \ quadtsq$(EXEEXT) quadtsq2d$(EXEEXT) TIMER = dd_timer$(EXEEXT) qd_timer$(EXEEXT) EXTRA_PROGRAMS=$(DEMO) $(TIMER) quaderq_SOURCES = tquaderq.f nodist_quaderq_SOURCES=second.f quaderq_LINK=$(CXXLINK) quadgsq2d_SOURCES = tquadgsq2d.f nodist_quadgsq2d_SOURCES=second.f quadgsq2d_LINK=$(CXXLINK) quadgsq_SOURCES = tquadgsq.f nodist_quadgsq_SOURCES=second.f quadgsq_LINK=$(CXXLINK) quadtsq_SOURCES = tquadtsq.f nodist_quadtsq_SOURCES=second.f quadtsq_LINK=$(CXXLINK) quadtsq2d_SOURCES = tquadtsq2d.f nodist_quadtsq2d_SOURCES=second.f quadtsq2d_LINK=$(CXXLINK) dd_timer_SOURCES = dd_timer.f nodist_dd_timer_SOURCES = second.f dd_timer_LINK=$(CXXLINK) qd_timer_SOURCES = qd_timer.f nodist_qd_timer_SOURCES = second.f qd_timer_LINK=$(CXXLINK) demo: $(DEMO) CLEANFILES = $(EXTRA_PROGRAMS) *.mod endif MAINTAINERCLEANFILES = dd_timer.f qd_timer.f EXTRA_DIST = dd_timer.f qd_timer.f zz_timer.f Makefile.sample dd_timer.f: zz_timer.f sed -e 's/@@/dd/' zz_timer.f >dd_timer.f qd_timer.f: zz_timer.f sed -e 's/@@/qd/' zz_timer.f >qd_timer.f if HAVE_FORTRAN .PHONY: demo endif qd-2.3.11/fortran/dd_timer.f0000644000175000017500000000542011202062041016050 0ustar prudhommprudhomm! program to time the various routines subroutine f_main use ddmodule implicit none integer*4 old_cw double precision t double precision second double precision time_thresh parameter (time_thresh = 0.5d0) type (dd_real) a, b, c, d integer n, i, k call f_fpu_fix_start (old_cw) write (6, *) 'Timing addition / subtraction ...' n = 512 do k = 1, 25 n = n * 2 a = ddpi() b = sqrt(a) c = sqrt(b) d = sqrt(c) t = second() do i = 1, n a = b + c b = a - d a = b + c b = a - d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call ddwrite(6, a) write (6, *) 'Timing multiplication ...' n = 512 do k = 1, 25 n = n * 2 a = 1.0d0 + ddpi() * 1.0d-7 b = a + 1.0d-7 c = b + 1.0d-8 d = c + 1.0d-9 t = second() do i = 1, n a = b * c b = a * d a = b * c b = a * d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call ddwrite(6, a) write (6, *) 'Timing division ...' n = 512 do k = 1, 25 n = n * 2 a = 1.0d0 + ddpi() b = 2.0d0 + ddpi() c = 1.0d0 + 1.0d-8 d = 1.0d0 + 1.0d-9 t = second() do i = 1, n a = b / c b = a / d a = b / c b = a / d enddo t = second() - t if (t .ge. time_thresh) exit enddo n = n * 4 write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call ddwrite(6, a) write (6, *) 'Timing square root ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 b = 2.0d0 + ddpi() t = second() do i = 1, n a = sqrt(a + b) enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call ddwrite(6, a) write (6, *) 'Timing sin ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 c = 1.7d0 * ddreal(1.0d0) / dble(n) d = 2.45d0 * ddpi() / dble(n + 3) t = second() do i = 1, n a = a + sin(c) c = c + d enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call ddwrite(6, a) write (6, *) 'Timing log ...' n = 512 do k = 1, 25 n = n * 2 a = 0.0d0 c = exp(ddreal(-50.1d0)); d = exp(ddreal(100.2d0) / dble(n)) t = second() do i = 1, n a = a + log(c) c = c * d enddo t = second() - t if (t .ge. time_thresh) exit enddo write (6, *) n, ' operations in ', t, ' seconds.' write (6, *) t/n*1.0d6, ' usec' call ddwrite(6, a) end qd-2.3.11/NEWS0000644000175000017500000001274311202062041013144 0ustar prudhommprudhommChanges for 2.3.7 - Fixed bug in to_digits where digits larger than 10 where output occasionally. Changes for 2.3.6 - Added fmod (C++) and mod (Fortran) functions. Changes for 2.3.5 - Fixed bug in division of qd_real by dd_real. - Fixed bug in ddoutc (Fortran ddmod.f). - Now compiles with g++ 4.3. - Distribute tests/coeff.dat. Changes for 2.3.4 - Fixed bug in Makefile for cygwin / mingw systems. Changes for 2.3.3 - Fixed bug in atan2. Changes for 2.3.2 - Fixed bug in sin / cos / sincos where too much accuracy was lost for (moderately) large angles. - Use fused-multiply add intrinsics on IA-64 platforms if compiled by Intel compiler. - Fixed bug in c_dd_write and c_qd_write. - Fixed bug were qdext.mod was not being installed. Changes for 2.3.1 - Fixed bug in sincos and cos_taylor. This affected the result of trigonometric functions in some cases. Changes for 2.3.0 This is a fairly significant change, breaking API compatibility. - Moved C++ main entry in libqdmod.a to libqd_f_main.a. This allows to link Fortran code using QD with custom C++ main function. Pure Fortran code will need to be linked with qd_f_main library in addition to qdmod and qd library. - Constructors accepting pointers made explicit. - Fortran routines labeled as elemental or pure, where appropriate. - Write() is now to_string(), and now takes a single fmtflag. - dd_real addition and multiplication made commutative. - dd_real now represented as array of two doubles, instead of two discrete scalars. - New Fortran generic routines to read / write, operations with complex and integers. - Improved exp, sin, and cos functions. - Removed unused constants and obscure constants only used internally from public interface. Changes for 2.2.6 - Fixed bug in mixed precision multiplication: qd_real * dd_real. Changes for 2.2.5 - Bug fix in qd_real addition when --enable-ieee-add is specified. - Debugging routines dump and dump_bits updated; dump_components removed (just use dump). - Fortran support for Fortran strings. Use character arrays instead. - Return NaN under error conditions. - Added _inf constant; exp now returns Inf when argument is too large. - Output formatting fixes for Inf and NaNs. - Added more real-complex mixed arithmetic routines in Fortran interface. Changes for 2.2.4 - Added random_number interface for Fortran modules. - Use slightly more conservative values for eps. - Avoid unnecessary overflow near overflow threshold. - Added radix, digits, min/maxexponent, range, and precision intrinsics to Fortran interface. - Added safe_max (C++) and safe_huge (Fortran). Changes for 2.2.3 - Fix sign function bug in Fortran modules. Changes for 2.2.2 - Do not bother setting uninitialized dd_real and qd_reals to zero. - Use clock_gettime if available for timing. - Fortran I/O should be more consistent with C++ version. - fpu.h is now included with dd_real.h. Changes for 2.2.1 - Minor fixes when printing in scientific format. - Change search order of C++ compilers in Apple systems to avoid case insensitive filesystems. Changes for 2.2.0 - Added F95 interface for complex types. - Renamed dd.h and qd.h to dd_real.h and qd_real.h, respectively. This will break older C++ code using 2.1.x library, but it was conflicting with QuickDraw libraries on Macs. (Hence the version bump to 2.2). - Removed overloaded typecast operators for int and double. These permitted *automatic* conversion of dd_real/qd_real to double or int, which is somewhat dangerous. Instead to_int and to_double routines are added. Changes for 2.1.214 - Updated pslq_test. - Implmented numeric_limits<>. - Better polyroot. - Added isnan, isfinite, isinf functions. - Fix / improve input output functions. - Drop Microsoft Visual C++ 6.0 support. - More efficient dd_real::sin. Changes for 2.1.213 - Support for x86_64 platforms. - Drop libtool support for now. Changes for 2.1.212 - Support for pathCC compiler. - Added accurate and sloppy versions of add / sub / mul / div avaialble. - Added autodetection of fma functions. Changes for 2.1 (2003-12-30) - added automake scripts. - use libtool to compile / link and build libraries. - supports standard installation targets (make install). - support for Intel C++ compilers (icc / ecc). - Fortran programs are now linked by C++ compiler. - support for building shared library. - minor bug fixes. Changes for 2.0 (2003-12-08) - all header files are in "include/qd" directory. - added autoconf scripts. - added config.h and qd_config.h to store configuration information. - renamed x86_* routines to fpu_* routines. - added separate Fortran interface (f_* routines). - options for sloppy multiply and sloppy divison separated. - fixed C interface to be actually in C syntax. - updated / added README, AUTHORS, NEWS, and LICENSE files. - minor bug fixes. Changes for 1.2 (2003-12-04) - added "dist-clean" target in Makefile - initialize dd and qd variables to zero - increases tolerance for qd / dd tests - changed .cc extension to .cpp - updated README, COPYING, and NEWS files - added ChangeLog file - fixed bug in '-all' flag in qd_test - minor bug fixes Changes for 1.1 (2002-10-22) - added "Changes" file (this file) - fixed to - fixed constant (3/4) * pi - fixed exp(x) to return zero if x is a large negative number - removed "docs" target in Makefile qd-2.3.11/docs/0000755000175000017500000000000011431215437013403 5ustar prudhommprudhommqd-2.3.11/docs/qd_mul_accum.fig0000644000175000017500000001574611202062041016523 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 4500 4350 4650 4500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4500 4425 4650 4425 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4575 4350 4575 4500 -6 6 3600 2850 3750 3000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3600 2925 3750 2925 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3675 2850 3675 3000 -6 6 2700 1575 2850 1725 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2700 1650 2850 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2775 1575 2775 1725 -6 6 2250 675 2400 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2250 750 2400 750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2325 675 2325 825 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 600 2175 600 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2175 450 2475 450 2475 1050 2175 1050 2175 450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 900 2175 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2475 600 2775 600 2775 1200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1350 2625 1350 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1500 2625 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1650 2625 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1800 2625 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1950 2625 1950 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2625 1200 2925 1200 2925 2100 2625 2100 2625 1200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 2550 3525 2550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 2700 3525 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 2850 3525 2850 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 3000 3525 3000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 3150 3525 3150 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 3300 3525 3300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 3450 3525 3450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2475 900 3675 900 3675 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 2925 1500 3225 1500 3225 2400 3525 2400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3825 2925 4125 2925 4125 3900 4425 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2925 1800 4575 1800 4575 3750 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3525 2250 3825 2250 3825 3600 3525 3600 3525 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4050 4425 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4200 4425 4200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4350 4425 4350 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4500 4425 4500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4650 4425 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4800 4425 4800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 4950 4425 4950 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4425 3750 4725 3750 4725 5100 4425 5100 4425 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 1125 150 1575 150 1575 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2325 1050 2325 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2775 2100 2775 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3675 3600 3675 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4575 5100 4575 5550 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1275 5550 4875 5550 4875 5850 1275 5850 1275 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1725 5850 1725 6450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2625 5850 2625 6450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3525 5850 3525 6450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4425 5850 4425 6450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 750 2175 750 4 1 0 50 0 0 12 0.0000 4 135 1155 3075 5775 Renormalization\001 4 1 0 50 0 0 12 0.0000 4 165 60 300 225 (\001 4 1 0 50 0 1 12 0.0000 4 135 135 225 225 O\001 4 1 0 50 0 0 12 0.0000 4 165 60 450 225 )\001 4 1 0 50 0 0 12 0.0000 4 135 90 375 225 1\001 4 1 0 50 0 0 12 0.0000 4 120 315 750 225 term\001 4 1 0 50 0 1 12 0.0000 4 135 135 225 825 O\001 4 1 0 50 0 0 12 0.0000 4 120 390 750 825 terms\001 4 1 0 50 0 1 12 0.0000 4 135 135 150 1725 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 300 1725 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 375 1650 2\001 4 1 0 50 0 0 12 0.0000 4 120 390 750 1725 terms\001 4 1 0 50 0 1 12 0.0000 4 135 135 150 3075 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 300 3075 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 375 3000 3\001 4 1 0 50 0 0 12 0.0000 4 120 390 750 3075 terms\001 4 1 0 50 0 1 12 0.0000 4 135 135 150 4575 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 300 4575 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 375 4500 4\001 4 1 0 50 0 0 12 0.0000 4 120 390 750 4575 terms\001 4 1 0 50 0 1 12 0.0000 4 135 135 3075 1425 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 3225 1425 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 3300 1350 3\001 4 1 0 50 0 1 12 0.0000 4 135 135 4200 1725 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 4350 1725 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 4425 1650 4\001 4 1 0 50 0 1 12 0.0000 4 135 135 3300 825 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 3450 825 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 3525 750 3\001 4 1 0 50 0 1 12 0.0000 4 135 135 2625 525 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 2775 525 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 2850 450 2\001 4 1 0 50 0 1 12 0.0000 4 135 135 3975 2850 O\001 4 1 0 50 0 32 12 0.0000 4 90 75 4125 2850 e\001 4 1 0 50 0 0 7 0.0000 4 60 45 4200 2775 4\001 4 1 0 50 0 1 12 0.0000 4 90 75 4425 6600 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 4500 6675 3\001 4 1 0 50 0 1 12 0.0000 4 90 75 3525 6600 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 3600 6675 2\001 4 1 0 50 0 0 7 0.0000 4 60 45 2700 6675 1\001 4 1 0 50 0 1 12 0.0000 4 90 75 2625 6600 s\001 4 1 0 50 0 1 12 0.0000 4 90 75 1725 6600 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 1800 6675 0\001 4 1 0 50 0 0 12 0.0000 4 165 60 300 825 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 225 1725 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 225 3075 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 225 4575 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 4050 2850 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 4275 1725 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 3150 1425 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 3375 825 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 2700 525 (\001 4 1 0 50 0 0 12 0.0000 4 165 60 450 825 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 450 1725 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 450 3075 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 450 4575 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 4275 2850 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 4500 1725 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 3375 1425 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 3600 825 )\001 4 1 0 50 0 0 12 0.0000 4 165 60 2925 525 )\001 4 1 0 50 0 32 12 0.0000 4 90 75 375 825 e\001 qd-2.3.11/docs/quick-two-sum.fig0000644000175000017500000000141411202062041016602 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 900 225 900 825 2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 150 975 750 975 2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 900 1125 900 1725 2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 975 1650 975 2 3 0 1 0 7 50 0 -1 0.000 0 0 0 0 0 5 900 1125 1050 975 900 825 750 975 900 1125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 825 975 975 975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 900 900 1050 4 1 0 100 0 1 12 0.0000 4 90 90 900 150 a\001 4 1 0 100 0 1 12 0.0000 4 135 90 75 1050 b\001 4 1 0 100 0 1 12 0.0000 4 90 75 900 1875 s\001 4 1 0 100 0 1 12 0.0000 4 90 75 1800 1050 e\001 qd-2.3.11/docs/two-sum.fig0000644000175000017500000000141211202062041015466 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 750 825 1050 825 1050 1125 750 1125 750 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 825 975 975 975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 900 900 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 150 975 750 975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 900 225 900 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 975 1650 975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 900 1125 900 1725 4 1 0 100 0 1 12 0.0000 4 90 90 900 150 a\001 4 1 0 100 0 1 12 0.0000 4 135 90 75 1050 b\001 4 1 0 100 0 1 12 0.0000 4 90 75 900 1875 s\001 4 1 0 100 0 1 12 0.0000 4 90 75 1800 1050 e\001 qd-2.3.11/docs/Makefile0000644000175000017500000000124711202062041015032 0ustar prudhommprudhommLATEX = latex DVIPS = dvips DVIPDF = dvipdf BIBTEX = bibtex EPSFIGS = nine-two-sum.eps normal_sum_prod.eps qd_add.eps qd_add_proof.eps \ qd_add_qd_d.eps qd_mul_accum.eps qd_mul_qd_d.eps quick-two-sum.eps \ six-three-sum.eps three-sum-2.eps three-sum-3.eps three-sum.eps \ two-prod.eps two-sum.eps all: qd.pdf dvi: qd.dvi pdf: qd.pdf ps: qd.ps qd.dvi: qd.tex qd.bib $(EPSFIGS) $(LATEX) $< && $(BIBTEX) qd && \ $(LATEX) $< && $(LATEX) $< qd.ps: qd.dvi $(DVIPS) -o $@ $< qd.pdf: qd.dvi $(DVIPDF) $< clean: rm -f qd.dvi qd.blg qd.bbl qd.toc qd.log qd.aux maintainer-clean: clean rm -f qd.ps qd.pdf .PHONY: clean maintainer-clean all qd-2.3.11/docs/two-prod.fig0000644000175000017500000000144611202062041015635 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 825 900 1125 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 825 900 1125 900 1125 1200 825 1200 825 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 975 1050 1125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1050 975 900 1125 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 225 1050 825 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 300 975 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 1200 975 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1050 1725 1050 4 1 0 50 0 1 12 0.0000 4 90 90 975 225 a\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 1125 b\001 4 1 0 50 0 1 12 0.0000 4 90 75 1875 1125 e\001 4 1 0 50 0 1 12 0.0000 4 135 90 975 1950 p\001 qd-2.3.11/docs/qd_add_proof.fig0000644000175000017500000002011511202062041016475 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 975 900 1275 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 975 900 1275 900 1275 1200 975 1200 975 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1050 1050 1200 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1125 975 1125 1125 -6 6 1875 1500 2175 1800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1875 1500 2175 1500 2175 1800 1875 1800 1875 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1950 1650 2100 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2025 1575 2025 1725 -6 6 2775 2100 3075 2400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2775 2100 3075 2100 3075 2400 2775 2400 2775 2100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2850 2250 3000 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2925 2175 2925 2325 -6 6 3675 2700 3975 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3675 2700 3975 2700 3975 3000 3675 3000 3675 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3750 2850 3900 2850 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3825 2775 3825 2925 -6 6 2100 1875 2250 2100 4 0 0 50 0 1 12 0.0000 4 105 60 2100 2025 t\001 4 0 0 50 0 0 7 0.0000 4 75 60 2175 2100 1\001 -6 6 3000 2475 3150 2700 4 0 0 50 0 1 12 0.0000 4 105 60 3000 2625 t\001 4 0 0 50 0 0 7 0.0000 4 75 60 3075 2700 2\001 -6 6 825 4800 5025 5850 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 825 4800 5025 4800 5025 5100 825 5100 825 4800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1425 5100 1425 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2325 5100 2325 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3225 5100 3225 5550 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4125 5100 4125 5550 4 1 0 50 0 0 12 0.0000 4 135 1230 2925 5025 Renormalization\001 4 1 0 50 0 1 12 0.0000 4 90 75 1425 5775 s\001 4 1 0 50 0 0 7 0.0000 4 75 60 1500 5850 0\001 4 1 0 50 0 1 12 0.0000 4 90 75 2325 5775 s\001 4 1 0 50 0 0 7 0.0000 4 75 60 2400 5850 1\001 4 1 0 50 0 1 12 0.0000 4 90 75 3225 5775 s\001 4 1 0 50 0 0 7 0.0000 4 75 60 3300 5850 2\001 4 1 0 50 0 1 12 0.0000 4 90 75 4125 5775 s\001 4 1 0 50 0 0 7 0.0000 4 75 60 4200 5850 3\001 -6 6 4800 4500 4950 4725 4 0 0 50 0 1 12 0.0000 4 90 90 4800 4650 x\001 4 0 0 50 0 0 7 0.0000 4 75 60 4875 4725 4\001 -6 6 3900 4500 4050 4725 4 0 0 50 0 1 12 0.0000 4 90 90 3900 4650 x\001 4 0 0 50 0 0 7 0.0000 4 75 60 3975 4725 3\001 -6 6 3000 4500 3150 4725 4 0 0 50 0 1 12 0.0000 4 90 90 3000 4650 x\001 4 0 0 50 0 0 7 0.0000 4 75 60 3075 4725 2\001 -6 6 2100 4500 2250 4725 4 0 0 50 0 1 12 0.0000 4 90 90 2100 4650 x\001 4 0 0 50 0 0 7 0.0000 4 75 60 2175 4725 1\001 -6 6 1200 4500 1350 4725 4 0 0 50 0 1 12 0.0000 4 90 90 1200 4650 x\001 4 0 0 50 0 0 7 0.0000 4 75 60 1275 4725 0\001 -6 6 1875 4050 2175 4350 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1875 4050 2175 4050 2175 4350 1875 4350 1875 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1950 4200 2100 4200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2025 4125 2025 4275 -6 6 2250 1350 2400 1575 4 0 0 50 0 1 12 0.0000 4 90 90 2250 1500 e\001 4 0 0 50 0 0 7 0.0000 4 75 60 2325 1575 1\001 -6 6 1350 750 1500 975 4 0 0 50 0 1 12 0.0000 4 90 90 1350 900 e\001 4 0 0 50 0 0 7 0.0000 4 75 60 1425 975 0\001 -6 6 3150 1950 3300 2175 4 0 0 50 0 1 12 0.0000 4 90 90 3150 2100 e\001 4 0 0 50 0 0 7 0.0000 4 75 60 3225 2175 2\001 -6 6 4050 2550 4200 2775 4 0 0 50 0 1 12 0.0000 4 90 90 4050 2700 e\001 4 0 0 50 0 0 7 0.0000 4 75 60 4125 2775 3\001 -6 6 2850 3975 3000 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2850 4050 3000 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2925 3975 2925 4125 -6 6 4650 3975 4800 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4650 4050 4800 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4725 3975 4725 4125 -6 6 3750 3675 3900 3825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3750 3750 3900 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3825 3675 3825 3825 -6 6 3900 3075 4050 3300 4 0 0 50 0 1 12 0.0000 4 105 60 3900 3225 t\001 4 0 0 50 0 0 7 0.0000 4 75 60 3975 3300 3\001 -6 6 5625 3225 5775 3450 4 0 0 50 0 0 7 0.0000 4 75 60 5700 3450 1\001 4 0 0 50 0 1 12 0.0000 4 180 60 5625 3375 f\001 -6 6 5625 3825 5775 4050 4 0 0 50 0 1 12 0.0000 4 180 60 5625 3975 f\001 4 0 0 50 0 0 7 0.0000 4 75 60 5700 4050 2\001 -6 6 5625 4125 5775 4350 4 0 0 50 0 1 12 0.0000 4 180 60 5625 4275 f\001 4 0 0 50 0 0 7 0.0000 4 75 60 5700 4350 3\001 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 1050 975 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 1650 1875 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 2250 2775 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 2850 3675 2850 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 1800 2025 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 2400 2925 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 3000 3825 3450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 3975 2850 4725 2850 4725 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1200 1125 4800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 300 1125 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 300 2025 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 300 2925 2100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 300 3825 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 4350 2025 4800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 4350 2925 4800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 4050 3825 4800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4725 4350 4725 4800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4575 3750 4875 3750 4875 4350 4575 4350 4575 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2175 4200 2775 4200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3075 4200 4575 4200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3675 3450 3975 3450 3975 4050 3675 4050 3675 3450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3975 3900 4575 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3075 3900 3675 3900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2775 3750 3075 3750 3075 4350 2775 4350 2775 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 2175 1650 2475 1650 2475 3900 2775 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 1275 1050 1575 1050 1575 4200 1875 4200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3075 2250 3375 2250 3375 3600 3675 3600 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3975 3600 4275 3600 4275 3300 5550 3300 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 3900 5550 3900 2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 4200 5550 4200 4 1 0 50 0 1 12 0.0000 4 90 90 3825 225 a\001 4 1 0 50 0 0 7 0.0000 4 75 60 3900 300 3\001 4 1 0 50 0 1 12 0.0000 4 90 90 2925 225 a\001 4 1 0 50 0 0 7 0.0000 4 75 60 3000 300 2\001 4 1 0 50 0 1 12 0.0000 4 90 90 2025 225 a\001 4 1 0 50 0 0 7 0.0000 4 75 60 2100 300 1\001 4 1 0 50 0 1 12 0.0000 4 90 90 1125 225 a\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 1125 b\001 4 1 0 50 0 0 7 0.0000 4 75 60 225 1200 0\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 1725 b\001 4 1 0 50 0 0 7 0.0000 4 75 60 225 1800 1\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 2325 b\001 4 1 0 50 0 0 7 0.0000 4 75 60 225 2400 2\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 2925 b\001 4 1 0 50 0 0 9 0.0000 4 105 75 225 3000 3\001 4 1 0 50 0 0 7 0.0000 4 75 60 1200 300 0\001 4 0 0 50 0 1 12 0.0000 4 90 90 2250 4125 u\001 4 0 0 50 0 1 12 0.0000 4 90 90 3150 4125 v\001 4 0 0 50 0 1 12 0.0000 4 90 135 3150 3825 w\001 4 0 0 50 0 1 12 0.0000 4 90 75 4050 3825 z\001 4 0 0 50 0 0 10 0.0000 4 105 75 852 871 1\001 4 0 0 50 0 0 10 0.0000 4 105 75 1790 1472 2\001 4 0 0 50 0 0 10 0.0000 4 105 75 2700 2062 3\001 4 0 0 50 0 0 10 0.0000 4 105 75 3581 2671 4\001 4 0 0 50 0 0 10 0.0000 4 105 75 1771 4035 5\001 4 0 0 50 0 0 10 0.0000 4 105 75 2681 3726 6\001 4 0 0 50 0 0 10 0.0000 4 105 75 3600 3446 7\001 4 0 0 50 0 0 10 0.0000 4 105 75 4481 3735 8\001 qd-2.3.11/docs/nine-two-sum.fig0000644000175000017500000001031411202062041016416 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 75 75 2625 2775 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 675 675 975 675 975 975 675 975 675 675 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 1575 1275 1875 1275 1875 1575 1575 1575 1575 1275 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 825 675 825 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 825 75 825 675 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1725 75 1725 1275 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 1425 1575 1425 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 825 975 825 2625 2025 2625 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 975 825 1275 825 1275 2325 2025 2325 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 1725 1575 1725 1875 2175 1875 2175 2175 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 1875 1425 2475 1425 2475 2175 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 2025 2175 2625 2175 2625 2775 2025 2775 2025 2175 -6 6 2775 75 5325 2775 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 3375 675 3675 675 3675 975 3375 975 3375 675 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 4275 1275 4575 1275 4575 1575 4275 1575 4275 1275 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3525 75 3525 675 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4425 75 4425 1275 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 3525 975 3525 2625 4725 2625 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3675 825 3975 825 3975 2325 4725 2325 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 4425 1575 4425 1875 4875 1875 4875 2175 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 4575 1425 5175 1425 5175 2175 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 4725 2175 5325 2175 5325 2775 4725 2775 4725 2175 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 3075 75 3075 825 3375 825 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2775 75 2775 1425 4275 1425 -6 6 4350 1350 4500 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 4425 1350 4425 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 4350 1425 4500 1425 -6 6 3450 750 3600 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 3525 750 3525 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 3450 825 3600 825 -6 6 1650 1350 1800 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 1725 1350 1725 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 1650 1425 1800 1425 -6 6 750 750 900 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 825 750 825 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 750 825 900 825 -6 6 2250 2400 2400 2550 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2325 2400 2325 2550 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2250 2475 2400 2475 -6 6 4950 2400 5100 2550 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 5025 2400 5025 2550 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 4950 2475 5100 2475 -6 6 4950 3300 5100 3450 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 5025 3300 5025 3450 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 4950 3375 5100 3375 -6 6 4950 4050 5100 4200 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 5025 4050 5025 4200 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 4950 4125 5100 4125 -6 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2175 2775 2175 3225 4725 3225 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2475 2775 2475 3525 4725 3525 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 4725 3075 5325 3075 5325 3675 4725 3675 4725 3075 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 2775 4875 3075 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 5175 2775 5175 3075 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 4725 3975 5325 3975 5325 4275 4725 4275 4725 3975 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 3675 4875 3975 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 5175 3675 5175 3975 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 4125 4725 4125 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4875 4275 4875 5025 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 5175 4275 5175 4575 5925 4575 2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 375 375 5625 375 5625 4725 375 4725 375 375 qd-2.3.11/docs/qd.bib0000644000175000017500000000640011202062041014450 0ustar prudhommprudhomm @article{she97, author = {Jonathan R. Shewchuk}, title = {Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates}, journal = {Discrete \& Computational Geometry}, year = 1997, volume = 18, number = 3, pages = {305-363} } @article{dek71, author = {T.J. Dekker}, title = {A Floating-Point Technique for Extending the Available Precision}, journal = {Numerische Mathematik}, year = 1971, volume = 18, pages = {224-242} } @phdthesis{pri92, author = {Douglas M. Priest}, title = {On Properties of Floating Point Arithmetics: Numerical Stability and the Cost of Accurate Computations}, school = {University of California, Berkeley}, year = 1992, month = {November}, note = {Available by anonymous FTP at {\tt ftp.icsi.berkeley.edu/pub/theory/ \linebreak[0]priest-thesis.ps.Z}} } @book{knu81, author = {Donald E. Knuth}, title = {The Art of Computer Programming: Seminumerical Algorithms}, publisher = {Addison Wesley}, year = 1981, volume = 2, address = {Reading, Massachusetts} } @misc{bai-dd, author = {David H. Bailey}, title = {A Fortran-90 double-double library}, note = {Available at {\tt http://www.nersc.gov/\linebreak\~{ }dhbailey/mpdist/mpdist.html}} } @article{bai-mp, author = {David H. Bailey}, title = {A Fortran-90 based multiprecision system}, journal = {ACM Transactions on Mathematical Software}, year = 1995, volume = 21, number = 4, pages = {379-387}, note = {Software available at {\tt http://www.nersc.gov/\linebreak\~{ }dhbailey/mpdist/mpdist.html}} } @misc{cha98, author = {Siddhardtha Chatterjee}, title = {{MPFUN++}: A Multiple Precision Floating Point Computation Package in {C}++}, note = {Available at {\tt http://www.cs.unc.edu/Research/HARPOON/mpfun++/}}, year = 1998} } @article{bai93, author = {David H. Bailey and Robert Krasny and Richard Pelz}, title = {Multiple Precision, Multiple Processor Vortex Sheet Roll-Up Computation}, journal = {Proc. Sixth SIAM Conference on Parallel Processing for Scientific Computing}, year = 1993, pages = {52-56} } @MISC{kbriggs97, AUTHOR = {Briggs, K.}, TITLE = {Doubledouble Floating Point Arithmetic}, HOWPUBLISHED = {{\tt http://www-epidem.plantsci.cam.ac.uk\linebreak[0] /$\sim$kbriggs/doubledouble.html}}, YEAR = {1998} } @ARTICLE{brent, AUTHOR = {R. Brent}, TITLE = {A {Fortran} Multiple Precision Arithmetic Package}, JOURNAL = {{ACM} Trans. Math. Soft.}, YEAR = {1978}, VOLUME = {4}, PAGES = {57--70}} @TECHREPORT{hida00, AUTHOR = {Yozo Hida and Xiaoye S. Li and David H. Bailey}, TITLE = {Quad-Double Arithmetic: Algorithms, Implementation, and Application}, INSTITUTION = {Lawrence Berkeley National Laboratory}, note = {Available at {\tt http://www.nersc.gov/\~{ }dhbailey/mpdist/mpdist.html}}, YEAR = {2000}, MONTH = {October}, ADDRESS = {Berkeley, CA 94720}, NUMBER = {LBNL-46996} } @misc{gnu-mp, key = {gmp}, title = {{GMP}}, note = {{\tt http://www.swox.com/gmp/}} } % pgs. 282-283, 292-297, 635-636, 675-677. @book{c++, author = {Bjarne Stroustrup}, title = {The C++ Programming Language}, publisher = {Addison Wesley}, year = 1997, address = {Reading Massachusetts} } qd-2.3.11/docs/two-prod.eps0000644000175000017500000001037611202062041015661 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: two-prod.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Thu Aug 3 16:13:32 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 129 132 %%Magnification: 1.0000 %%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 end save newpath 0 132 moveto 0 0 lineto 129 0 lineto 129 132 lineto closepath clip newpath % Fill background color 0 0 moveto 129 0 lineto 129 132 lineto 0 132 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 4.0 130.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 825 900 m 1125 900 l 1125 1200 l 825 1200 l cp gs col0 s gr % Polyline n 900 975 m 1050 1125 l gs col0 s gr % Polyline n 1050 975 m 900 1125 l gs col0 s gr % Polyline gs clippath 840 1080 m 840 1020 l 689 1020 l 809 1050 l 689 1080 l cp eoclip n 225 1050 m 825 1050 l gs col0 s gr gr % arrowhead n 689 1080 m 809 1050 l 689 1020 l 689 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 945 915 m 1005 915 l 1005 764 l 975 884 l 945 764 l cp eoclip n 975 300 m 975 900 l gs col0 s gr gr % arrowhead n 945 764 m 975 884 l 1005 764 l 945 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 945 1815 m 1005 1815 l 1005 1664 l 975 1784 l 945 1664 l cp eoclip n 975 1200 m 975 1800 l gs col0 s gr gr % arrowhead n 945 1664 m 975 1784 l 1005 1664 l 945 1664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1740 1080 m 1740 1020 l 1589 1020 l 1709 1050 l 1589 1080 l cp eoclip n 1125 1050 m 1725 1050 l gs col0 s gr gr % arrowhead n 1589 1080 m 1709 1050 l 1589 1020 l 1589 1080 l cp gs 0.00 setgray ef gr col0 s /Times-Italic ff 180.00 scf sf 975 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1125 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1875 1125 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 975 1950 m gs 1 -1 sc (p) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/three-sum.fig0000644000175000017500000000430511202062041015770 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 900 900 1200 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 900 1200 900 1200 1200 900 1200 900 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 975 1050 1125 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1050 975 1050 1125 -6 6 900 1500 1200 1800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 1500 1200 1500 1200 1800 900 1800 900 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 975 1650 1125 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1050 1575 1050 1725 -6 6 1500 1500 1800 1800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1500 1500 1800 1500 1800 1800 1500 1800 1500 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1575 1650 1725 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1650 1575 1650 1725 -6 6 2700 1800 2925 2025 4 1 0 50 0 1 12 0.0000 4 90 60 2775 1950 r\001 4 1 0 50 0 0 7 0.0000 4 75 60 2850 2025 1\001 -6 6 2700 2100 2925 2325 4 1 0 50 0 1 12 0.0000 4 90 60 2775 2250 r\001 4 1 0 50 0 0 7 0.0000 4 75 60 2850 2325 2\001 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 300 1050 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 300 1050 900 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 1200 1050 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 1800 1050 2850 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1200 1650 1500 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 1200 1050 1650 1050 1650 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 300 1650 900 1650 2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 600 600 2400 600 2400 2550 600 2550 600 600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 1800 1650 2100 1650 2100 2250 2700 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 1650 1800 1650 1950 2700 1950 4 1 0 50 0 1 12 0.0000 4 135 90 150 1125 y\001 4 1 0 50 0 1 12 0.0000 4 90 90 1050 225 x\001 4 1 0 50 0 1 12 0.0000 4 90 75 150 1725 z\001 4 1 0 50 0 1 9 0.0000 4 75 75 900 1350 u\001 4 1 0 50 0 1 9 0.0000 4 75 75 1350 975 v\001 4 1 0 50 0 1 9 0.0000 4 75 105 1350 1800 w\001 4 1 0 50 0 1 12 0.0000 4 90 60 1050 3000 r\001 4 1 0 50 0 0 7 0.0000 4 75 60 1125 3075 0\001 qd-2.3.11/docs/normal_sum_prod.eps0000644000175000017500000001126311202062041017302 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: normal_sum_prod.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Wed Aug 2 14:12:28 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 175 113 %%Magnification: 1.0000 %%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 end save newpath 0 113 moveto 0 0 lineto 175 0 lineto 175 113 lineto closepath clip newpath % Fill background color 0 0 moveto 175 0 lineto 175 113 lineto 0 113 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 7.0 106.0 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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc 7.500 slw % Ellipse n 825 825 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 750 825 m 900 825 l gs col0 s gr % Polyline n 825 750 m 825 900 l gs col0 s gr % Ellipse n 2475 825 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 2400 750 m 2550 900 l gs col0 s gr % Polyline n 2550 750 m 2400 900 l gs col0 s gr % Polyline gs clippath 795 690 m 855 690 l 855 539 l 825 659 l 795 539 l cp eoclip n 825 75 m 825 675 l gs col0 s gr gr % arrowhead n 795 539 m 825 659 l 855 539 l 795 539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 690 855 m 690 795 l 539 795 l 659 825 l 539 855 l cp eoclip n 75 825 m 675 825 l gs col0 s gr gr % arrowhead n 539 855 m 659 825 l 539 795 l 539 855 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 795 1590 m 855 1590 l 855 1439 l 825 1559 l 795 1439 l cp eoclip n 825 975 m 825 1575 l gs col0 s gr gr % arrowhead n 795 1439 m 825 1559 l 855 1439 l 795 1439 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2445 690 m 2505 690 l 2505 539 l 2475 659 l 2445 539 l cp eoclip n 2475 75 m 2475 675 l gs col0 s gr gr % arrowhead n 2445 539 m 2475 659 l 2505 539 l 2445 539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2340 855 m 2340 795 l 2189 795 l 2309 825 l 2189 855 l cp eoclip n 1725 825 m 2325 825 l gs col0 s gr gr % arrowhead n 2189 855 m 2309 825 l 2189 795 l 2189 855 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2445 1590 m 2505 1590 l 2505 1439 l 2475 1559 l 2445 1439 l cp eoclip n 2475 975 m 2475 1575 l gs col0 s gr gr % arrowhead n 2445 1439 m 2475 1559 l 2505 1439 l 2445 1439 l cp gs 0.00 setgray ef gr col0 s $F2psEnd rs qd-2.3.11/docs/qd_mul_qd_d.eps0000644000175000017500000003107011202062041016350 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: qd_mul_qd_d.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Thu Aug 3 16:43:10 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 362 372 %%Magnification: 1.0000 %%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 end save newpath 0 372 moveto 0 0 lineto 362 0 lineto 362 372 lineto closepath clip newpath % Fill background color 0 0 moveto 362 0 lineto 362 372 lineto 0 372 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 9.0 370.0 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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 1800 975 m 2100 975 l 2100 1275 l 1800 1275 l cp gs col0 s gr % Polyline n 1875 1050 m 2025 1200 l gs col0 s gr % Polyline n 2025 1050 m 1875 1200 l gs col0 s gr % Polyline n 2700 1575 m 3000 1575 l 3000 1875 l 2700 1875 l cp gs col0 s gr % Polyline n 2775 1650 m 2925 1800 l gs col0 s gr % Polyline n 2925 1650 m 2775 1800 l gs col0 s gr % Polyline n 3600 2175 m 3900 2175 l 3900 2475 l 3600 2475 l cp gs col0 s gr % Polyline n 3675 2250 m 3825 2400 l gs col0 s gr % Polyline n 3825 2250 m 3675 2400 l gs col0 s gr % Polyline n 2700 3975 m 3000 3975 l 3000 4275 l 2700 4275 l cp gs col0 s gr % Polyline n 2775 4125 m 2925 4125 l gs col0 s gr % Polyline n 2850 4050 m 2850 4200 l gs col0 s gr % Ellipse n 4650 2925 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 4575 2850 m 4725 3000 l gs col0 s gr % Polyline n 4725 2850 m 4575 3000 l gs col0 s gr % Ellipse n 5400 4125 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 5325 4125 m 5475 4125 l gs col0 s gr % Polyline n 5400 4050 m 5400 4200 l gs col0 s gr % Polyline gs clippath 1920 990 m 1980 990 l 1980 839 l 1950 959 l 1920 839 l cp eoclip n 1950 375 m 1950 975 l gs col0 s gr gr % arrowhead n 1920 839 m 1950 959 l 1980 839 l 1920 839 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2715 4155 m 2715 4095 l 2564 4095 l 2684 4125 l 2564 4155 l cp eoclip n 2100 1125 m 2400 1125 l 2400 4125 l 2700 4125 l gs col0 s gr gr % arrowhead n 2564 4155 m 2684 4125 l 2564 4095 l 2564 4155 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2820 1590 m 2880 1590 l 2880 1439 l 2850 1559 l 2820 1439 l cp eoclip n 2850 375 m 2850 1575 l gs col0 s gr gr % arrowhead n 2820 1439 m 2850 1559 l 2880 1439 l 2820 1439 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3720 2190 m 3780 2190 l 3780 2039 l 3750 2159 l 3720 2039 l cp eoclip n 3750 375 m 3750 2175 l gs col0 s gr gr % arrowhead n 3720 2039 m 3750 2159 l 3780 2039 l 3720 2039 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2820 3990 m 2880 3990 l 2880 3839 l 2850 3959 l 2820 3839 l cp eoclip n 2850 1875 m 2850 3975 l gs col0 s gr gr % arrowhead n 2820 3839 m 2850 3959 l 2880 3839 l 2820 3839 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3615 3855 m 3615 3795 l 3464 3795 l 3584 3825 l 3464 3855 l cp eoclip n 3000 1725 m 3300 1725 l 3300 3825 l 3600 3825 l gs col0 s gr gr % arrowhead n 3464 3855 m 3584 3825 l 3464 3795 l 3464 3855 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3720 3690 m 3780 3690 l 3780 3539 l 3750 3659 l 3720 3539 l cp eoclip n 3750 2475 m 3750 3675 l gs col0 s gr gr % arrowhead n 3720 3539 m 3750 3659 l 3780 3539 l 3720 3539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4515 3555 m 4515 3495 l 4364 3495 l 4484 3525 l 4364 3555 l cp eoclip n 3900 2325 m 4200 2325 l 4200 3525 l 4500 3525 l gs col0 s gr gr % arrowhead n 4364 3555 m 4484 3525 l 4364 3495 l 4364 3555 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3615 4155 m 3615 4095 l 3464 4095 l 3584 4125 l 3464 4155 l cp eoclip n 3000 4125 m 3600 4125 l gs col0 s gr gr % arrowhead n 3464 4155 m 3584 4125 l 3464 4095 l 3464 4155 l cp gs 0.00 setgray ef gr col0 s % Polyline n 3750 3900 m 3750 4050 l gs col0 s gr % Polyline n 3675 3975 m 3825 3975 l gs col0 s gr % Polyline n 3600 3675 m 3900 3675 l 3900 4275 l 3600 4275 l cp gs col0 s gr % Polyline gs clippath 4515 3855 m 4515 3795 l 4364 3795 l 4484 3825 l 4364 3855 l cp eoclip n 3900 3825 m 4500 3825 l gs col0 s gr gr % arrowhead n 4364 3855 m 4484 3825 l 4364 3795 l 4364 3855 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4500 3375 m 4800 3375 l 4800 3975 l 4500 3975 l cp gs col0 s gr % Polyline gs clippath 4620 2790 m 4680 2790 l 4680 2639 l 4650 2759 l 4620 2639 l cp eoclip n 4650 375 m 4650 2775 l gs col0 s gr gr % arrowhead n 4620 2639 m 4650 2759 l 4680 2639 l 4620 2639 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4620 3390 m 4680 3390 l 4680 3239 l 4650 3359 l 4620 3239 l cp eoclip n 4650 3075 m 4650 3375 l gs col0 s gr gr % arrowhead n 4620 3239 m 4650 3359 l 4680 3239 l 4620 3239 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4575 3675 m 4725 3675 l gs col0 s gr % Polyline n 4650 3600 m 4650 3750 l gs col0 s gr % Polyline gs clippath 5370 3990 m 5430 3990 l 5430 3839 l 5400 3959 l 5370 3839 l cp eoclip n 4800 3675 m 5400 3675 l 5400 3975 l gs col0 s gr gr % arrowhead n 5370 3839 m 5400 3959 l 5430 3839 l 5370 3839 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5265 4155 m 5265 4095 l 5114 4095 l 5234 4125 l 5114 4155 l cp eoclip n 3900 4125 m 5250 4125 l gs col0 s gr gr % arrowhead n 5114 4155 m 5234 4125 l 5114 4095 l 5114 4155 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2820 4890 m 2880 4890 l 2880 4739 l 2850 4859 l 2820 4739 l cp eoclip n 2850 4275 m 2850 4875 l gs col0 s gr gr % arrowhead n 2820 4739 m 2850 4859 l 2880 4739 l 2820 4739 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1920 4890 m 1980 4890 l 1980 4739 l 1950 4859 l 1920 4739 l cp eoclip n 1950 1275 m 1950 4875 l gs col0 s gr gr % arrowhead n 1920 4739 m 1950 4859 l 1980 4739 l 1920 4739 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3720 4890 m 3780 4890 l 3780 4739 l 3750 4859 l 3720 4739 l cp eoclip n 3750 4275 m 3750 4875 l gs col0 s gr gr % arrowhead n 3720 4739 m 3750 4859 l 3780 4739 l 3720 4739 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4620 4890 m 4680 4890 l 4680 4739 l 4650 4859 l 4620 4739 l cp eoclip n 4650 3975 m 4650 4875 l gs col0 s gr gr % arrowhead n 4620 4739 m 4650 4859 l 4680 4739 l 4620 4739 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5370 4890 m 5430 4890 l 5430 4739 l 5400 4859 l 5370 4739 l cp eoclip n 5400 4275 m 5400 4875 l gs col0 s gr gr % arrowhead n 5370 4739 m 5400 4859 l 5430 4739 l 5370 4739 l cp gs 0.00 setgray ef gr col0 s % Polyline n 1650 4875 m 5700 4875 l 5700 5175 l 1650 5175 l cp gs col0 s gr % Polyline gs clippath 2370 5790 m 2430 5790 l 2430 5639 l 2400 5759 l 2370 5639 l cp eoclip n 2400 5175 m 2400 5775 l gs col0 s gr gr % arrowhead n 2370 5639 m 2400 5759 l 2430 5639 l 2370 5639 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3270 5790 m 3330 5790 l 3330 5639 l 3300 5759 l 3270 5639 l cp eoclip n 3300 5175 m 3300 5775 l gs col0 s gr gr % arrowhead n 3270 5639 m 3300 5759 l 3330 5639 l 3270 5639 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4170 5790 m 4230 5790 l 4230 5639 l 4200 5759 l 4170 5639 l cp eoclip n 4200 5175 m 4200 5775 l gs col0 s gr gr % arrowhead n 4170 5639 m 4200 5759 l 4230 5639 l 4170 5639 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5070 5790 m 5130 5790 l 5130 5639 l 5100 5759 l 5070 5639 l cp eoclip n 5100 5175 m 5100 5775 l gs col0 s gr gr % arrowhead n 5070 5639 m 5100 5759 l 5130 5639 l 5070 5639 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1815 1155 m 1815 1095 l 1664 1095 l 1784 1125 l 1664 1155 l cp eoclip n 825 2100 m 1275 1125 l 1800 1125 l gs col0 s gr gr % arrowhead n 1664 1155 m 1784 1125 l 1664 1095 l 1664 1155 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2715 1755 m 2715 1695 l 2564 1695 l 2684 1725 l 2564 1755 l cp eoclip n 825 2100 m 1275 1725 l 2700 1725 l gs col0 s gr gr % arrowhead n 2564 1755 m 2684 1725 l 2564 1695 l 2564 1755 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3615 2355 m 3615 2295 l 3464 2295 l 3584 2325 l 3464 2355 l cp eoclip n 825 2100 m 1275 2325 l 3600 2325 l gs col0 s gr gr % arrowhead n 3464 2355 m 3584 2325 l 3464 2295 l 3464 2355 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4515 2955 m 4515 2895 l 4364 2895 l 4484 2925 l 4364 2955 l cp eoclip n 825 2100 m 1275 2925 l 4500 2925 l gs col0 s gr gr % arrowhead n 4364 2955 m 4484 2925 l 4364 2895 l 4364 2955 l cp gs 0.00 setgray ef gr col0 s % Polyline n 225 2100 m 825 2100 l gs col0 s gr /Times-Roman ff 180.00 scf sf 3600 5100 m gs 1 -1 sc (Renormalization) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1950 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2025 300 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2925 300 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2850 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3750 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3825 300 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4650 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4725 300 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3300 5925 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2400 5925 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2475 6000 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4200 5925 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4275 6000 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 5100 5925 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 5175 6000 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 75 2175 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3375 6000 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/qd_mul_accum.eps0000644000175000017500000004320311202062041016532 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: qd_mul_accum.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Thu Aug 3 16:37:10 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 310 418 %%Magnification: 1.0000 %%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 end save newpath 0 418 moveto 0 0 lineto 310 0 lineto 310 418 lineto closepath clip newpath % Fill background color 0 0 moveto 310 0 lineto 310 418 lineto 0 418 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 6.0 411.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 4500 4425 m 4650 4425 l gs col0 s gr % Polyline n 4575 4350 m 4575 4500 l gs col0 s gr % Polyline n 3600 2925 m 3750 2925 l gs col0 s gr % Polyline n 3675 2850 m 3675 3000 l gs col0 s gr % Polyline n 2700 1650 m 2850 1650 l gs col0 s gr % Polyline n 2775 1575 m 2775 1725 l gs col0 s gr % Polyline n 2250 750 m 2400 750 l gs col0 s gr % Polyline n 2325 675 m 2325 825 l gs col0 s gr % Polyline gs clippath 2190 630 m 2190 570 l 2039 570 l 2159 600 l 2039 630 l cp eoclip n 1125 600 m 2175 600 l gs col0 s gr gr % arrowhead n 2039 630 m 2159 600 l 2039 570 l 2039 630 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2175 450 m 2475 450 l 2475 1050 l 2175 1050 l cp gs col0 s gr % Polyline gs clippath 2190 930 m 2190 870 l 2039 870 l 2159 900 l 2039 930 l cp eoclip n 1125 900 m 2175 900 l gs col0 s gr gr % arrowhead n 2039 930 m 2159 900 l 2039 870 l 2039 930 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2745 1215 m 2805 1215 l 2805 1064 l 2775 1184 l 2745 1064 l cp eoclip n 2475 600 m 2775 600 l 2775 1200 l gs col0 s gr gr % arrowhead n 2745 1064 m 2775 1184 l 2805 1064 l 2745 1064 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2640 1380 m 2640 1320 l 2489 1320 l 2609 1350 l 2489 1380 l cp eoclip n 1125 1350 m 2625 1350 l gs col0 s gr gr % arrowhead n 2489 1380 m 2609 1350 l 2489 1320 l 2489 1380 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2640 1530 m 2640 1470 l 2489 1470 l 2609 1500 l 2489 1530 l cp eoclip n 1125 1500 m 2625 1500 l gs col0 s gr gr % arrowhead n 2489 1530 m 2609 1500 l 2489 1470 l 2489 1530 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2640 1680 m 2640 1620 l 2489 1620 l 2609 1650 l 2489 1680 l cp eoclip n 1125 1650 m 2625 1650 l gs col0 s gr gr % arrowhead n 2489 1680 m 2609 1650 l 2489 1620 l 2489 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2640 1830 m 2640 1770 l 2489 1770 l 2609 1800 l 2489 1830 l cp eoclip n 1125 1800 m 2625 1800 l gs col0 s gr gr % arrowhead n 2489 1830 m 2609 1800 l 2489 1770 l 2489 1830 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2640 1980 m 2640 1920 l 2489 1920 l 2609 1950 l 2489 1980 l cp eoclip n 1125 1950 m 2625 1950 l gs col0 s gr gr % arrowhead n 2489 1980 m 2609 1950 l 2489 1920 l 2489 1980 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2625 1200 m 2925 1200 l 2925 2100 l 2625 2100 l cp gs col0 s gr % Polyline gs clippath 3540 2580 m 3540 2520 l 3389 2520 l 3509 2550 l 3389 2580 l cp eoclip n 1125 2550 m 3525 2550 l gs col0 s gr gr % arrowhead n 3389 2580 m 3509 2550 l 3389 2520 l 3389 2580 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 2730 m 3540 2670 l 3389 2670 l 3509 2700 l 3389 2730 l cp eoclip n 1125 2700 m 3525 2700 l gs col0 s gr gr % arrowhead n 3389 2730 m 3509 2700 l 3389 2670 l 3389 2730 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 2880 m 3540 2820 l 3389 2820 l 3509 2850 l 3389 2880 l cp eoclip n 1125 2850 m 3525 2850 l gs col0 s gr gr % arrowhead n 3389 2880 m 3509 2850 l 3389 2820 l 3389 2880 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 3030 m 3540 2970 l 3389 2970 l 3509 3000 l 3389 3030 l cp eoclip n 1125 3000 m 3525 3000 l gs col0 s gr gr % arrowhead n 3389 3030 m 3509 3000 l 3389 2970 l 3389 3030 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 3180 m 3540 3120 l 3389 3120 l 3509 3150 l 3389 3180 l cp eoclip n 1125 3150 m 3525 3150 l gs col0 s gr gr % arrowhead n 3389 3180 m 3509 3150 l 3389 3120 l 3389 3180 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 3330 m 3540 3270 l 3389 3270 l 3509 3300 l 3389 3330 l cp eoclip n 1125 3300 m 3525 3300 l gs col0 s gr gr % arrowhead n 3389 3330 m 3509 3300 l 3389 3270 l 3389 3330 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 3480 m 3540 3420 l 3389 3420 l 3509 3450 l 3389 3480 l cp eoclip n 1125 3450 m 3525 3450 l gs col0 s gr gr % arrowhead n 3389 3480 m 3509 3450 l 3389 3420 l 3389 3480 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3645 2265 m 3705 2265 l 3705 2114 l 3675 2234 l 3645 2114 l cp eoclip n 2475 900 m 3675 900 l 3675 2250 l gs col0 s gr gr % arrowhead n 3645 2114 m 3675 2234 l 3705 2114 l 3645 2114 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3540 2430 m 3540 2370 l 3389 2370 l 3509 2400 l 3389 2430 l cp eoclip n 2925 1500 m 3225 1500 l 3225 2400 l 3525 2400 l gs col0 s gr gr % arrowhead n 3389 2430 m 3509 2400 l 3389 2370 l 3389 2430 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 3930 m 4440 3870 l 4289 3870 l 4409 3900 l 4289 3930 l cp eoclip n 3825 2925 m 4125 2925 l 4125 3900 l 4425 3900 l gs col0 s gr gr % arrowhead n 4289 3930 m 4409 3900 l 4289 3870 l 4289 3930 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4545 3765 m 4605 3765 l 4605 3614 l 4575 3734 l 4545 3614 l cp eoclip n 2925 1800 m 4575 1800 l 4575 3750 l gs col0 s gr gr % arrowhead n 4545 3614 m 4575 3734 l 4605 3614 l 4545 3614 l cp gs 0.00 setgray ef gr col0 s % Polyline n 3525 2250 m 3825 2250 l 3825 3600 l 3525 3600 l cp gs col0 s gr % Polyline gs clippath 4440 4080 m 4440 4020 l 4289 4020 l 4409 4050 l 4289 4080 l cp eoclip n 1125 4050 m 4425 4050 l gs col0 s gr gr % arrowhead n 4289 4080 m 4409 4050 l 4289 4020 l 4289 4080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 4230 m 4440 4170 l 4289 4170 l 4409 4200 l 4289 4230 l cp eoclip n 1125 4200 m 4425 4200 l gs col0 s gr gr % arrowhead n 4289 4230 m 4409 4200 l 4289 4170 l 4289 4230 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 4380 m 4440 4320 l 4289 4320 l 4409 4350 l 4289 4380 l cp eoclip n 1125 4350 m 4425 4350 l gs col0 s gr gr % arrowhead n 4289 4380 m 4409 4350 l 4289 4320 l 4289 4380 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 4530 m 4440 4470 l 4289 4470 l 4409 4500 l 4289 4530 l cp eoclip n 1125 4500 m 4425 4500 l gs col0 s gr gr % arrowhead n 4289 4530 m 4409 4500 l 4289 4470 l 4289 4530 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 4680 m 4440 4620 l 4289 4620 l 4409 4650 l 4289 4680 l cp eoclip n 1125 4650 m 4425 4650 l gs col0 s gr gr % arrowhead n 4289 4680 m 4409 4650 l 4289 4620 l 4289 4680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 4830 m 4440 4770 l 4289 4770 l 4409 4800 l 4289 4830 l cp eoclip n 1125 4800 m 4425 4800 l gs col0 s gr gr % arrowhead n 4289 4830 m 4409 4800 l 4289 4770 l 4289 4830 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4440 4980 m 4440 4920 l 4289 4920 l 4409 4950 l 4289 4980 l cp eoclip n 1125 4950 m 4425 4950 l gs col0 s gr gr % arrowhead n 4289 4980 m 4409 4950 l 4289 4920 l 4289 4980 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4425 3750 m 4725 3750 l 4725 5100 l 4425 5100 l cp gs col0 s gr % Polyline gs clippath 1545 5565 m 1605 5565 l 1605 5414 l 1575 5534 l 1545 5414 l cp eoclip n 1125 150 m 1575 150 l 1575 5550 l gs col0 s gr gr % arrowhead n 1545 5414 m 1575 5534 l 1605 5414 l 1545 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2295 5565 m 2355 5565 l 2355 5414 l 2325 5534 l 2295 5414 l cp eoclip n 2325 1050 m 2325 5550 l gs col0 s gr gr % arrowhead n 2295 5414 m 2325 5534 l 2355 5414 l 2295 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2745 5565 m 2805 5565 l 2805 5414 l 2775 5534 l 2745 5414 l cp eoclip n 2775 2100 m 2775 5550 l gs col0 s gr gr % arrowhead n 2745 5414 m 2775 5534 l 2805 5414 l 2745 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3645 5565 m 3705 5565 l 3705 5414 l 3675 5534 l 3645 5414 l cp eoclip n 3675 3600 m 3675 5550 l gs col0 s gr gr % arrowhead n 3645 5414 m 3675 5534 l 3705 5414 l 3645 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4545 5565 m 4605 5565 l 4605 5414 l 4575 5534 l 4545 5414 l cp eoclip n 4575 5100 m 4575 5550 l gs col0 s gr gr % arrowhead n 4545 5414 m 4575 5534 l 4605 5414 l 4545 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline n 1275 5550 m 4875 5550 l 4875 5850 l 1275 5850 l cp gs col0 s gr % Polyline gs clippath 1695 6465 m 1755 6465 l 1755 6314 l 1725 6434 l 1695 6314 l cp eoclip n 1725 5850 m 1725 6450 l gs col0 s gr gr % arrowhead n 1695 6314 m 1725 6434 l 1755 6314 l 1695 6314 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2595 6465 m 2655 6465 l 2655 6314 l 2625 6434 l 2595 6314 l cp eoclip n 2625 5850 m 2625 6450 l gs col0 s gr gr % arrowhead n 2595 6314 m 2625 6434 l 2655 6314 l 2595 6314 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3495 6465 m 3555 6465 l 3555 6314 l 3525 6434 l 3495 6314 l cp eoclip n 3525 5850 m 3525 6450 l gs col0 s gr gr % arrowhead n 3495 6314 m 3525 6434 l 3555 6314 l 3495 6314 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4395 6465 m 4455 6465 l 4455 6314 l 4425 6434 l 4395 6314 l cp eoclip n 4425 5850 m 4425 6450 l gs col0 s gr gr % arrowhead n 4395 6314 m 4425 6434 l 4455 6314 l 4395 6314 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2190 780 m 2190 720 l 2039 720 l 2159 750 l 2039 780 l cp eoclip n 1125 750 m 2175 750 l gs col0 s gr gr % arrowhead n 2039 780 m 2159 750 l 2039 720 l 2039 780 l cp gs 0.00 setgray ef gr col0 s /Times-Roman ff 180.00 scf sf 3075 5775 m gs 1 -1 sc (Renormalization) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 300 225 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 225 225 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 450 225 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 375 225 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 750 225 m gs 1 -1 sc (term) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 225 825 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 750 825 m gs 1 -1 sc (terms) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1725 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 300 1725 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 375 1650 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 750 1725 m gs 1 -1 sc (terms) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 3075 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 300 3075 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 375 3000 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 750 3075 m gs 1 -1 sc (terms) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 4575 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 300 4575 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 375 4500 m gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 750 4575 m gs 1 -1 sc (terms) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3075 1425 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 3225 1425 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3300 1350 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4200 1725 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 4350 1725 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4425 1650 m gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3300 825 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 3450 825 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3525 750 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2625 525 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 2775 525 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2850 450 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3975 2850 m gs 1 -1 sc (O) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 4125 2850 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4200 2775 m gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4425 6600 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4500 6675 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3525 6600 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3600 6675 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2700 6675 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2625 6600 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1725 6600 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1800 6675 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 300 825 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 225 1725 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 225 3075 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 225 4575 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 4050 2850 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 4275 1725 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 3150 1425 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 3375 825 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 2700 525 m gs 1 -1 sc (\() dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 450 825 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 450 1725 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 450 3075 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 450 4575 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 4275 2850 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 4500 1725 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 3375 1425 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 3600 825 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 2925 525 m gs 1 -1 sc (\)) dup sw pop 2 div neg 0 rm col0 sh gr /Symbol ff 180.00 scf sf 375 825 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/qd_mul_qd_d.fig0000644000175000017500000001217511202062041016333 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 1800 975 2100 1275 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 975 2100 975 2100 1275 1800 1275 1800 975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1875 1050 2025 1200 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2025 1050 1875 1200 -6 6 2700 1575 3000 1875 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 1575 3000 1575 3000 1875 2700 1875 2700 1575 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2775 1650 2925 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2925 1650 2775 1800 -6 6 3600 2175 3900 2475 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3600 2175 3900 2175 3900 2475 3600 2475 3600 2175 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3675 2250 3825 2400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3825 2250 3675 2400 -6 6 2700 3975 3000 4275 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 3975 3000 3975 3000 4275 2700 4275 2700 3975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2775 4125 2925 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2850 4050 2850 4200 -6 6 4500 2775 4800 3075 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 4650 2925 150 150 4650 2925 4800 2925 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4575 2850 4725 3000 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4725 2850 4575 3000 -6 6 5250 3975 5550 4275 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 4125 150 150 5400 4125 5550 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5325 4125 5475 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 5400 4050 5400 4200 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1950 375 1950 975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 2100 1125 2400 1125 2400 4125 2700 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2850 375 2850 1575 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3750 375 3750 2175 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2850 1875 2850 3975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3000 1725 3300 1725 3300 3825 3600 3825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3750 2475 3750 3675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3900 2325 4200 2325 4200 3525 4500 3525 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3000 4125 3600 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3750 3900 3750 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3675 3975 3825 3975 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3600 3675 3900 3675 3900 4275 3600 4275 3600 3675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3900 3825 4500 3825 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4500 3375 4800 3375 4800 3975 4500 3975 4500 3375 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4650 375 4650 2775 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4650 3075 4650 3375 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4575 3675 4725 3675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4650 3600 4650 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 4800 3675 5400 3675 5400 3975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3900 4125 5250 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2850 4275 2850 4875 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1950 1275 1950 4875 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3750 4275 3750 4875 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4650 3975 4650 4875 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 5400 4275 5400 4875 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1650 4875 5700 4875 5700 5175 1650 5175 1650 4875 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2400 5175 2400 5775 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3300 5175 3300 5775 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4200 5175 4200 5775 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 5100 5175 5100 5775 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 825 2100 1275 1125 1800 1125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 825 2100 1275 1725 2700 1725 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 825 2100 1275 2325 3600 2325 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 825 2100 1275 2925 4500 2925 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 225 2100 825 2100 4 1 0 50 0 0 12 0.0000 4 135 1155 3600 5100 Renormalization\001 4 1 0 50 0 1 12 0.0000 4 90 90 1950 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 2025 300 0\001 4 1 0 50 0 0 7 0.0000 4 60 45 2925 300 1\001 4 1 0 50 0 1 12 0.0000 4 90 90 2850 225 a\001 4 1 0 50 0 1 12 0.0000 4 90 90 3750 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 3825 300 2\001 4 1 0 50 0 1 12 0.0000 4 90 90 4650 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 4725 300 3\001 4 1 0 50 0 1 12 0.0000 4 90 75 3300 5925 s\001 4 1 0 50 0 1 12 0.0000 4 90 75 2400 5925 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 2475 6000 0\001 4 1 0 50 0 1 12 0.0000 4 90 75 4200 5925 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 4275 6000 2\001 4 1 0 50 0 1 12 0.0000 4 90 75 5100 5925 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 5175 6000 3\001 4 1 0 50 0 1 12 0.0000 4 135 90 75 2175 b\001 4 1 0 50 0 0 7 0.0000 4 60 45 3375 6000 1\001 qd-2.3.11/docs/six-three-sum.fig0000644000175000017500000000674411202062041016602 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 2850 4500 3000 4650 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2925 4500 2925 4650 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2850 4575 3000 4575 -6 6 3750 4350 3900 4500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 3825 4350 3825 4500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 3750 4425 3900 4425 -6 6 3750 3600 3900 3750 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 3825 3600 3825 3750 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 3750 3675 3900 3675 -6 6 1950 2400 2100 2550 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2025 2400 2025 2550 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 1950 2475 2100 2475 -6 6 2850 3000 3000 3150 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2925 3000 2925 3150 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 2850 3075 3000 3075 -6 6 750 1800 900 1950 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 825 1800 825 1950 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 750 1875 900 1875 -6 6 750 600 900 750 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 825 600 825 750 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 750 675 900 675 -6 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 3825 3675 150 150 3825 3675 3975 3675 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 675 375 975 375 975 975 675 975 675 375 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 525 675 525 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 825 675 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 675 675 675 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 675 1575 975 1575 975 2175 675 2175 675 1575 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 1725 675 1725 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 1875 675 1875 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 2025 675 2025 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 825 2175 825 2475 1875 2475 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1875 2325 2175 2325 2175 2625 1875 2625 1875 2325 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2775 2925 3075 2925 3075 3225 2775 3225 2775 2925 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 975 2025 1275 2025 1275 3675 3675 3675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 975 1725 1575 1725 1575 3075 2775 3075 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 825 975 825 1275 2025 1275 2025 2325 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 975 825 3825 825 3825 3525 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 975 525 2925 525 2925 2925 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 2175 2475 2475 2475 2475 4575 2775 4575 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 3225 2925 4425 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3075 3075 3375 3075 3375 4275 3675 4275 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2775 4425 3075 4425 3075 4725 2775 4725 2775 4425 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3075 4575 3675 4575 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3675 4125 3975 4125 3975 4725 3675 4725 3675 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 3825 3825 4125 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 2625 2025 5925 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 2925 4725 2925 5025 4575 5025 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 3825 4725 3825 5325 4575 5325 2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 375 75 4275 75 4275 5625 375 5625 375 75 qd-2.3.11/docs/qd_add_qd_d.fig0000644000175000017500000000643411202062041016267 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 900 900 1200 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 900 900 1200 900 1200 1200 900 1200 900 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 975 1050 1125 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1050 975 1050 1125 -6 6 1800 900 2100 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1800 900 2100 900 2100 1200 1800 1200 1800 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1875 1050 2025 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1950 975 1950 1125 -6 6 2700 900 3000 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2700 900 3000 900 3000 1200 2700 1200 2700 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2775 1050 2925 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2850 975 2850 1125 -6 6 3600 900 3900 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3600 900 3900 900 3900 1200 3600 1200 3600 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3675 1050 3825 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3750 975 3750 1125 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 300 1050 900 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1200 1050 1800 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2100 1050 2700 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3000 1050 3600 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 1200 1050 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1950 1200 1950 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2850 1200 2850 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3750 1200 3750 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 3900 1050 4500 1050 4500 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 300 1050 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1950 300 1950 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2850 300 2850 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3750 300 3750 900 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 750 1800 4800 1800 4800 2100 750 2100 750 1800 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1350 2100 1350 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2250 2100 2250 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3150 2100 3150 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4050 2100 4050 2700 4 1 0 50 0 1 12 0.0000 4 135 90 150 1125 b\001 4 1 0 50 0 0 12 0.0000 4 135 1155 2700 2025 Renormalization\001 4 1 0 50 0 1 12 0.0000 4 90 90 1050 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 1125 300 0\001 4 1 0 50 0 1 12 0.0000 4 90 90 1950 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 2025 300 1\001 4 1 0 50 0 1 12 0.0000 4 90 90 2850 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 2925 300 2\001 4 1 0 50 0 1 12 0.0000 4 90 90 3750 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 3825 300 3\001 4 1 0 50 0 1 12 0.0000 4 90 75 4050 2850 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 4125 2925 3\001 4 1 0 50 0 1 12 0.0000 4 90 75 3150 2850 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 3225 2925 2\001 4 1 0 50 0 0 7 0.0000 4 60 45 2325 2925 1\001 4 1 0 50 0 1 12 0.0000 4 90 75 1350 2850 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 1425 2925 0\001 4 1 0 50 0 1 12 0.0000 4 90 75 2250 2850 s\001 qd-2.3.11/docs/qd_add.fig0000644000175000017500000001266311202062041015301 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 975 900 1275 1200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 975 900 1275 900 1275 1200 975 1200 975 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1050 1050 1200 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1125 975 1125 1125 -6 6 1875 1500 2175 1800 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1875 1500 2175 1500 2175 1800 1875 1800 1875 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1950 1650 2100 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2025 1575 2025 1725 -6 6 2775 2100 3075 2400 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2775 2100 3075 2100 3075 2400 2775 2400 2775 2100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2850 2250 3000 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2925 2175 2925 2325 -6 6 3675 2700 3975 3000 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3675 2700 3975 2700 3975 3000 3675 3000 3675 2700 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3750 2850 3900 2850 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3825 2775 3825 2925 -6 6 1875 3900 2175 4200 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 1875 3900 2175 3900 2175 4200 1875 4200 1875 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1950 4050 2100 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2025 3975 2025 4125 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 1050 975 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 1650 1875 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 2250 2775 2250 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 375 2850 3675 2850 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 1800 2025 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 2400 2925 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 1275 1050 1575 1050 1575 4050 1875 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 2175 1650 2475 1650 2475 3750 2775 3750 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 3675 3300 3975 3300 3975 3900 3675 3900 3675 3300 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2175 4050 2775 4050 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 2775 3600 3075 3600 3075 4200 2775 4200 2775 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3075 3750 3675 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4 1 1 1.00 60.00 120.00 3075 2250 3375 2250 3375 3450 3675 3450 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 3000 3825 3300 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 4575 3600 4875 3600 4875 4200 4575 4200 4575 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3975 3750 4575 3750 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3075 4050 4575 4050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 3975 2850 4725 2850 4725 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1200 1125 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 4200 2025 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 4200 2925 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 3900 3825 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4725 4200 4725 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2850 3900 3000 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2925 3825 2925 3975 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3750 3600 3900 3600 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 3825 3525 3825 3675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4650 3900 4800 3900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 4725 3825 4725 3975 2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 825 4650 5025 4650 5025 4950 825 4950 825 4650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1425 4950 1425 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2325 4950 2325 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3225 4950 3225 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 4125 4950 4125 5400 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 300 1125 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2025 300 2025 1500 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2925 300 2925 2100 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 3825 300 3825 2700 4 1 0 50 0 0 12 0.0000 4 135 1155 2925 4875 Renormalization\001 4 1 0 50 0 1 12 0.0000 4 90 90 3825 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 3900 300 3\001 4 1 0 50 0 1 12 0.0000 4 90 90 2925 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 3000 300 2\001 4 1 0 50 0 1 12 0.0000 4 90 90 2025 225 a\001 4 1 0 50 0 0 7 0.0000 4 60 45 2100 300 1\001 4 1 0 50 0 1 12 0.0000 4 90 90 1125 225 a\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 1125 b\001 4 1 0 50 0 0 7 0.0000 4 60 45 225 1200 0\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 1725 b\001 4 1 0 50 0 0 7 0.0000 4 60 45 225 1800 1\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 2325 b\001 4 1 0 50 0 0 7 0.0000 4 60 45 225 2400 2\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 2925 b\001 4 1 0 50 0 0 9 0.0000 4 105 75 225 3000 3\001 4 1 0 50 0 0 7 0.0000 4 60 45 1200 300 0\001 4 1 0 50 0 1 12 0.0000 4 90 75 1425 5625 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 1500 5700 0\001 4 1 0 50 0 1 12 0.0000 4 90 75 2325 5625 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 2400 5700 1\001 4 1 0 50 0 1 12 0.0000 4 90 75 3225 5625 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 3300 5700 2\001 4 1 0 50 0 1 12 0.0000 4 90 75 4125 5625 s\001 4 1 0 50 0 0 7 0.0000 4 60 45 4200 5700 3\001 qd-2.3.11/docs/qd.pdf0000644000175000017500000057370611202062041014507 0ustar prudhommprudhomm%PDF-1.4 %Çì¢ 5 0 obj <> stream xœ­Z[“µMo[©ü†yœ)øÆº_Þ° N‚Á©$ò°7/»k{½†,¿>§¥‘Ô3£µÁ¤(³SIÝêîsº[ó½Ä,Aÿ-O¯Ž|㇋7Gbø3þ]½>’i°ü9½=Ǥ0H?+iÍðüÅQ^,)±‘\T³Ç‹«£j¶!Z3þ0䬢wr<™Ô,¤ö~¼¡Aj<¦G£ƒ—u4êñD;G+ÇÓAÏÂz«Ç—«¹ZÈY 9~†m­•ÊÖ÷ãÛ*©É¼ÌŠ8Çs Z¹ñ€'i­¿f‹¥—í8çPAJ³ža¼®+ÎH?3» Æg“œ¡rtˆ´M]qVWü&UvʪÄñá¤g¥ ˬ¹ø 5ÞæQXðûºÑ9ãC±Œq¡LÜ,?-ïÿóü/ˆ„ÄFk„ŽØ& nVF(=9 ;GŸ§™àí"9pÉÉ8¿ ³¤À^Œs³Õ>áÂÀ†dçØoëàIz"»·¼Q€Úy‚=°L4 Ž*€’>l#cÖ;"H‹pž-¹šÈ%4vã"´•”E¸‚)n蚎ž¢*ïIæóH8°ËqÖ#xìAެŶ¿®OËžVQ¤C!!¼b«›Âmq~%v ßã£áº‘naVˆí7)OíVGƒB¶ÕZó‚ÖØYK"YD&¹çç ¤fcšF‡uãSb)a|2´ >, MÆ‚qãÎ'I߬EŒäŠJG@ˆÈ¡‘ $ïx §yU÷¹IûH`[í4? ]w4€f&Õ¢0rŒÐ6"¥×+¨¦ÐtöC±¤=2¹Ü ×dÄ•¾ÕÖ `‹+À¶ÜJlÏ"oáÖúîçÖôº…?C¸Uéˆ “;n%‰Wô: à  ¢¨™ÁºxDý ¢ŽýLuC3Q¡£XùU\K“ƒ3ï"Ûæ·F))~p*eAÈŸ;¢ PcÖc±ÏBµ ¨5Ë*¤íǦØË XÇ¥¯$¡œR3Ð,Ü! Òî!W…r—*©qÀ㳑᛼Ëfd¨–‚ØàB®q .k" û·’g½ŠëdQ?·_›º¢WˆžÐTG–÷²=ªE–‰;~MÍš pK=ÑÀlØ*Þ@…q²ï&ê#Z¨èv‘BV¿h3·Ì+Ñfï™—åÎʼ„¹û`^ƒš9Àg©å”Bq?3‰/{ܺM*¹!eá %|.ªjiLpÖ©õŽ*¢P– éHãú\ÞäµÅ EŠ»'ôR`O[²Û Kþ=%uŬ¹¯2 }@ò”ßÙóe†žñÔz/È»ÞÌßUõ^‰Áh‡ñV3ÑÙ&nöŠð°¿cJ6 QÞjÖÆî¼¸aOr(Rmp¼6ë‚­cV¡ù¦Å°æžrrWÚ¯bE®ÌœY|†e6zÍ‹Ç=˜å«Ü>Fi&+wAºNXoò•½~fe˜c‘Ô2&‰­oBO‹—â{Nb ºz] ´Å`dE–CV,½°‰ScÔD2Ç]’Êð|ø¿ê~ÇÓàw…y¾O5ØTIؤ’Zlö3Ü®= Ám{ÀzO²ÍšŒ5PÏ<$é(ñ½§û¤ àïI(lý1y1,¼‡KKJ–j»y¯Mdƒ['Y÷袬¶·²©vIqW «D‘¡–m¸N€½Ôq_Ë¥­Höûó{³•–€_ßTh»ƒÕåê}V“î6µD/û`؃‰F=…à×#¹Ì³aÍ­q¢6e²U—$Ù |Q´ ãÏ-²ú©ñ AAÝÛ;’=/סv_mD"mñ:ŽŸOå¡ï Û¥þ4tùÕAÚꊈî½^wÚÀÔJwÆ,ÜÒ pæ †Šæ×9_KÑÇŒ¯'`O¡îIJÝôÈÞ7üs•V‘]ФO&u+TÁ¤` }_ž^–/eg¶gMp-@x¤½;¿°ÑtûŠ¢ZnС ø|:XÛf²LÓÚÅöº{ÃÉt‘M6xòüèÙÑë´J_»è/#ôdh4}>{ôôèÁÓ/‡Û›·çGþ1È£_Ðÿ}ýž~6üáèÉÓáÙ½ŸÕ”,(ÛÛÀ¿«WGÈ ˆ×ü]í#RÝJpI¾VjhÍN ámøm‚†ƒë½ùóÉ¡‡‹‰² ¾*’(΂Jp4V 0L—ÓΨôRRã©)ÊtdcÇÝ^:-9àFmLbbLÏÏ‚ ¸ckªÀ¸lnù)«¦¨Ùãšnw(]tD¦OTA*@ )G7²à Šˆ“ ¨¨³»£;N“ú£e‘ÆúÅÚÆ| J:ÓçDÚf%’j… $EÔ)bÆ[‘Z̺iÖÔò [+ýLÁõ7r SàðñOD¢@ºCnc[UMLÝŠ.Œ]¬©ñÛ¦r[’Õ´¶øÍ®]ùD°5%òL“Šõ ¤:rÄrÿä?Ñ%ˆ FæACŽÓγ±¢íuv@®Æwør¢DÓuS~yŸCŠ•¯’,}~t½EMƒvÐ2í’Þé)áYcèË-ÝöPV‰À­ô0Ýó`ÖÁYu:o®„1}-¸©AšbãàcÕŒI>«3ëÒéŠü‰2yéqqC¢”°A7ÔDY°D[3„4²Á­Öôúºá¯™) LÕ¤·ÙÜùκlÓÜv½˜°ñ jú ÁOôb¹6+Í¿o;çô…rü;e ú–(ÁØEü¢®|X•è9Y\7^µ©Ç{‡3Ï®âŸÈÅØ|ZJ§úµ|9È“”g¥[[ۆɼH‹½W)QŠîËë¦ðÙÒW µë¶†}ºçÕd[ÅLÿ²î¾Ò¼œ’éQ̱¢7¤œÙǸ,&Neª¥ëE0ý:!3vT«3V}WЇ·díàÕ¹RÓ­ØÃIIŠs•>J”bQG/Ûl¿Œ¸å/#ÇÏ¡»stmT–oÿÆåo¨h®a´äÖURN÷·Šîà<53åç ðT ¯¸Jö²Æ£n“ße‰’‹'@–wÉΉTS¥ ¾ýÝÀÄF¨¾LÍ*õ´œnØwY€[ú~P·aP¸(Y`«|àÍÓ¢ÖÂù>Fz‰çvRE† 7ˆF¦r1»Ðëì¶h›¥4€i¡—‚ÛŠã ,:&j5‡Åè£=Ò‰êãÇ ` ¬ákÒg©½Óî&”/X©ª-¥b'¢®ßêÔà–¸6U­UGDæs!] X"Øðv.EnQòn¢Ê9¦o£å‰~›#ÐHJ6öi}:­OoÒ“‘´2vRÇÎëØM}ú±óö²3Ö´š;oÏêÓÛò¶‡ÕÇ•cÒO!Æw³HŸ~u±â„_>€¾jÙlIã79´oÊslg^:֢ў~9î ‘ …×Ô¥—©»ÊÞ _…ˆ2ÉÍÖë%„¥p+¾©ý˜€zGäÒ’»ü‰–~‘öUÃ~Íûk¨u’¾lµÔrl=Gáɦi°ûܶ‘Û™·Â› éCbú’èôî363^îN²—31΂^°ýf)Í#X²„áYóiáÑüZó~jI~ñî·0J9a˺`K½:RñšQlæ“”1UÍ© >ñî½|"éG(•óþ[¡ùCîñ†bh¬ü|C1ôözó–Æn6´Ó¨hM@u¬‘×Oå©_oòdížÖì°:,ýÌgSÇ'2’=ªÚòtRŸŽ×öHc—õ©GxŸæ·Ñ.ÄXIu3¶9qz»91ýŠn¤BdÃ2 tXÓø$"BƒçTdW¶r²õZåÙÑÿ]Vendstream endobj 6 0 obj 3441 endobj 29 0 obj <> stream xœí[ÛrÜ6­ÚG}Å<’›"tãúè8—Í–ss¦*É>Ørì¸"Åvdç²_¿§Á @g4#ÅžYG¥R‰A tŸî^­T«WJ~ú¿ç—g>ô«gWgjõ~Ÿ½:өªÿs~¹úhJ¬WÚ´l­ÖOϺ¯õÊÓʳk /Ͼ¯î׺Õì©^ÔÔ*o”©~©…Úéê5ʬ!c«kn•snx©Ê—WµBƒ>F÷Ÿõ¿Ñ³v¥*jé™ „aµ~p¶þç÷•®›Hx¹ú¼n¸ ѤVñÐþk)óÁp¨~E³N¡‡áV­RÎVOP‚g«7ùñ¼¶­V‘lÙÀs‘˨à=€üJkô4|#²§[ï01ë'˜ ƈb„òªéß5ߥ»*”¥ÿ:u© õ‚ÚHóÔà-‘B÷©{i)%¹ÄŒ3“/˲PÕ£ºÑmôÑørüÏsSeW5b¸ÑX8å£Ú´Ê@€¾ÿ€Ñô­…¤ç˜Ýa½«¾ªLi몗(% ‚ÌD¼~^Øù²Ù½h×ðl9< .”ˆkŒ±hwÕhn­S4 ×V->óÞ³ P+Š-püP$Qy%“kdž‰ F#m˜h!šÅPÀB°XN¦àÞ\ M>þ;6"ï_× Ù¤û €‘ÑAtÔbXª±Š[LåìݵD¼½Â!uo_áq®0+\~\ª*áÐ&=~öh4¿×À*J:›vÓÐVÂWRmø¢Œ¯{5Aihê±±2bæAQö•OwyN±·wˆ¬Å÷I[A9.á¶Y~@V°@TØ¥¹h®Æ´^}#j•ˆ`Cßdˆ‰*À×h0>LÕÇPRP³.&¤_<εGեΠÖúêy”‘¸¾ ó]4!ßmiÂ{4aÌxR[0Ì~Ymm€§¯»S-ÍtÔÑÀ³Ù£|tMÛ±u<í1(l ƒ±ö@)¡ÆûVq\Ö>{)"£„ÏÅ]Šˆ³‰û6¯Ç2²+ˆ”,öùÈ•¶Û@½a8žÀRboÇCY‡‘-6n±©ÈéIc]õhÒÂ"/)-“ö@âœqp±ƒF½ÌpÜ$êç;‰z Q²ÑiãàýB]Òb C:^Ë¡n:†Õ@·E»™£Ð,Á#±éZU:µZ6 “ñQŒ%X'å=êÿ;¢öv‰ÚÞ¸ÓÚ´´3.aŽBÐÞìî(Þi‚cË´ËK°Ùàv‹âlÈFñ7‰—ɲzŸ ¯$¾Šïh™¾aUOuqN±·cãê€F0×!lžh ¹6JTc~69ü|OâÀì- 1süS=«yM~œÃËå"H>„©ƒyçaj ]5Ì™¢Ô˜šñjlI5§#3ÒO-ó$·bñÒC_Š J”–º‰mtJ!ô¬y3óý ƒ6âméêkIôX“ö1|C…5©~¯¡H*åpè–‘é6q컽|6ÂÕ?¬à˜ÍlÄ7Ùôþ_¶aÆS Ç_Œ7I “&É—uC!Y Ù{РK'°0§ØÛ±1u+ûÐ _îÐwüÎõÝÍ‘xº0ù{òpE·ÁT¬nY9e*63•u-È•Iÿ"gßÑGœ³çéh‚V`4%éÈ‹ Ó r$"â©`"?¹Šc“ŸþWSœ´t2ì°½8Žß—ãä8ŸÝ’“ÿD„4Æzªþ(LŠŒ.´Æ’œ‹Áð”‰{òÂ[–ây]¾¾±P#„õ8þ^8ÅÞŽ³oPö ål\ìîòš>aéYmç4e!=ÿSFÜ%*9²#1qº‹üw€ÔméŠ_¢+vQu¹°uLç#-AI`V¨.§:MVœ)úq!#¶ÔRN^\ÕM I°Æ\ú÷h·=T´´É¹¢eÕUäÂ>BŒ¶·yCü­æTSO=ô=}˜.x3¦å=ÿåõÌCK^»9d‰Èa1 ±ïw0¼Ö.² -ùx#˜Ã0fǺîvè»"Bü¯šª?79š±a‚óû‹Ç'χè@¬>­£‚ªËt@ÃëNH¨.pɯõØÎߩ›¨Âît‰k?ätÉá ÜðÌ8&çb晹ì™}!Š34‰O°t>|Ë í‹ì-ºsågcøMáíxâÁWJ«àlI½òŒú²»µÜÅ>þV8<¦ì¶ø[[2n¯—õüXOw–§amSHäCÙM6MÿW‹ ʼ-·¶e± ú÷Ïû°[ß6C;²ÛâsÝïöV<'H¶ùbƒ™…®D´ÿƒƒ wÀº!°–µXáz•!ÜGSp'zÌ1wÎû—à/…Fº¬Yµl¬ˆŠ%7%2d˪ÏjaëÑ„|€b3"%…~4r’Ì”ûë%–ä^ÐÄÞ•ÓµhäwDƒG]æ3ѸŸÖØÕ5§¼u:Ø —`χKmÊôW½4˜îËÌ.6®r¡Fq-l#•r[bÀ{å¨A-ö%MWiʱByåM2ÁÁÓ ¥6~\~*ÅN{ç]b?Å«<ü*ßà+Ãä2-‚Ó(¸ºVð˜‡#Ϊípgôu˜”D¶„R‘e˜¬È+smþa;-=d¼÷äÈ€¬ìò%Êá¶g¢§’éåóã¿XGFN˜ ‰b |£n¤4ÃTs9#èç»t˜Å„è²neœ­y’s#OF_lÂk·&ñ%Iu°°ecû)p&¸éÝ×þ›_»o0ý}MG´ä‹üRŠ–’Dcý¡Ê=¹`vjÐA:–0èž8ȹè@Ädi×Q^éj±½Ø m(Ji—[‚]N@Êáœ1 D*þd}ö ~þk®endstream endobj 30 0 obj 2206 endobj 38 0 obj <> stream xœÍ]I“×q¶|„ù#º¨Ûâß¾˜¡ƒdS y‘e H 0° @$¡ƒ»3ßšo«î †Bƒêª·U._®õæ>Ûø}†ÿ¥ÿüòÞgÿmï?ýþ»ÿøßÓ{oîñpÃýô_ÞÿݸIòû\mRqÿÁ7÷âÓü¾÷­4›‚‹/ï}yàÇ+΅ݸ<üñÈ6«wêðê(ùƇ·G±i%”>|w¼b›6BIs¸9^Á Ò+y¸>^ ˜D(xWÿ| Ãn&Òi)ßåÆ`2‹Y¥ L”ùúÁ¿Âš¹ƒ]lžyŽkjÒ»ûþýÞƒüòð0€1 Æ„™ô¦”ÖüðƲÖJ˜GnÎka¢téu¼Mù°z8 ©¼8<9*¸È…€Uæ¿Ê#ßãµ¶†\»9j\(œä¦´$Oá/qÆX£òt†™¼@œ9­KðÃÃ#ý×0¼ÔaøgõQ|à{ü–¤üóJ }øá¨Õ táw²±2bÜ¡ §3ð„9¼Ç p8Ï0ß78ª€ù|„ù³møq¸îÅJ¹<ª¸@|µÂº$Â×@vOšÈ¡Š{´›`ž^%Çùø(í¦¤ ÎLºæ €&Ò,wùIay>)Ë L%™„{}uO¦VŸŒ«e|}s<¯U:"¸·Û”ò›ày«÷WŸ&‹¼®KÇ7Æá©DhßàÜJ9)ð<¯ò^q؇a"žkZ ”Ø€%QUòŸî¦!ÍJêxà X@B¶ãWuô´kgUGø¯ŽðZµVŽ\ïŽÈËðÞëØ„¶ß£ô0µ7”D+ â:ž¶üÐQö³¸Xýû£³¸A¦µ+¶û€÷ Cn&D?çw¼}àw\Ò>ä×O6ðˆSS™Ep3OVS7ž&hN 7è™>l0‘vô~wÄŸ…q•ž ±â"ÞÕ5*EVq,°Uo9¬|н[¥8 ÏEÚÀ:•ÂJ „s‹ÛA\ö° ÞŸ¸È–Ã7o‚-1Z®HÁå*dåIú )‚¦80/Ø6¼N-¢È¾ÊXʾ7ǹ Ÿv/?–a#*-:Þw/Ë>oüÑ̇\P]ÑÇ#u?ɳˆþéŒàoÉŒ Ǿ)¯L©FÑÆþ'tLüW˜A ƵÕüßèØÏïQÔY oæ¯Gqø¾Ài_–”÷`ľ.q‰¦“Ôn›©µ» 5«K¼™#œ_«¸ªWíÏ(ºl0%¾Ì'éâÊ©6âGeÀýr¶ÕŸ`¿ÅGtàâvø«Ncû3€k&•0ÈO¿=Š@Xž'Ù {·¾ìJDN¿j©pBÑð@[ñWÅÈš;Å:¤WI[ž• †iàžiåí„-q/HƒòξŒ™Áí"¨Ü“Ê;b8·™‘K:%nÍU,©á„£Tšiqئä^7jÜ•3Õ8jß×EEÏÕ¸u((ÀÎ7Öi^ Û87äÇWG´!¬ŠB$ýSx»¯æ&U§ãôÜ‘ÝZÅ¢4ÇÝwšeåpCŸ7(.²Ò[ZBí›Î~ɇñO40n‰Ø$ƒë†%ó¼G½‡k©¼JšäÈ´º4X˜Hˆ&š;‚"#ë´i4þQ%àh o¿[1o;'¼œsî/N/È»àÕBÁ£uñdI û¸ã·™ù*rl¯zè:óä=oQ^}õ]! ‰™¯˜€Tƒ…Þ ñjÑ'ª´‡Ó5À º±J›]×ñ ˆBÒdÙ¤j‘*ÆPR¡*8SN#¶4C´Œâù´ ¦wrÙé@X‰vS,TÂ'Ù æ.œ§Uý +•ëŸô0˜øzÇ®Ùñø.ÙcF ÞÀB¤Uô‰¼æ_D\ UvE0ñp‰¾f¥®9<:]¢ÒîxîϹK¬0¸ý†2ºwŸÅ3Ž<Áª¶™±nãî‹<,¾¨~YrÃsø«`0á/|•ð€¥ º•Z›ðMôŒ˜ì…àÞQóåÅ„°+±ï7•g/1ª³àÁµ¼Bp duÞîÈš{ ûüÃ4J"–Óß1_Mã‚ N &ö@@ïe>ckư²ØB-¿£ }dU¦šGǽٌp°^[bœÂÅx±á‰eó´1ï‡ð êÐh½h⻆ 0æN4f–޽°-¥Æ£½;òmlûV©ÇšP_ô|·&ˆA`0µaŒŸPrç" ç2£äôD²WtñJÈõ¬òG âxOö'ÃH£H÷9¦ÒR9p™(+H¥A˜ÃÏ„>Òq)íÇ4Þç<û–ÂRôèvº P& ƒÿ9úpKÀ…p5ÌOhþ¦ Úæ{ì‹:Œ9²‹ÚB/±79z×iÄ®XT-vy7™åo樰[±ð¯@öB›ð"Å–áü§œ>ÕäKà©2ïéL!øo²h ,PQ[:‚ »XPÖI{y&ªüüÏ"fM<Œñ Äó¥!At„ýñl¤¹CÝ ÑT¿ãVóXzÓ±ôW sÁ˜õ!g‡8Cµ1L4ÙS”†i $'1ªE0ýHc1)»YØëLë©¢Ã!qŸ×I*Šj†dÌvpSIÕx³3O‹’tê\¦\:FËàÜF‹^jšÞž•ZPéœÜIDD1©1FÜq(7/'RvV˜6Ž[Üzx’#–\%`òÃ%ÉÙ[”ŽVy›Gpè²u7HãKA„ç³PmçLÔÁ@ËÒCG-ûÕWðo"–© ÕÐA¾á—5†ð1"5 ï´_þAuÅÃÝ©ÞÖ:оcõÆ$D‹™qÖæo]S@ìŒú e Û¢ëMQíÖE¥'áQ|÷`/ËU*P>ŒЙÞsÓǾc”ÒLX8ÒÙ]rp&ž”ÿŽ´UKÄ#|sNRª¯úÞ¾ ®ÁèÚçÚ胕3 ‚õ7ÕrF‹øk¸Î£waôg$ÜTg™Å”Ÿ&Œ‹ ŒG÷`™A5ÞÅ¢÷ÿtJÂc´âÖ™>†ÛòÒ¬ªÈ- H3³Œ1ï]ÍÒ«Ò):%°Fº„<œgºI¼èS”h¼/ÔßÌyÐNAÀ]·ÜARCÍPÙÚtqZÂ-“~þѾítÉÇá„%ümÐÛ*Vš'ÄGÎIº Qá`&šu~Ì] §A±¯ý%CÊ.,ŠiªÐ)5õÎL¢i$‰>2‘žxùê "ù! Ú‹*O‚P=,< Áõèw4Ëtlâ6üq>õéExH:QÊ„Ýócâ)=øú®+OuøøQý¥¡O¡ƒsë¶ñ +ê\Â)cþãx«k‚ªj2ò rê_úõãFŒ‚ߦAYmÄk#p C©Dxmë thîÛâ½½Ÿ­57Œë… "„ГX¡¢¬ðž¼5ás­È Í2©À‡û"Vh³çP½HÑ!­?†z!P¡<Ÿ~ Þ1Õdêƒ# ´´4«ôTø±s]Ãqj-….”~ARx7P‹Zr>é9 )Ã4Y¯%Ê·Xrz:¥ˆ¶4Ë‘<Ñ7(dA×Åd/`xm³¸;׃ ¹,W=6®J¡P °÷Š”€‡à;´`¨’úx[À£™W.½a £å·¢LŸŒÕ˜@ùèïJ¿`úÍ+³ÂÀ¹Äà<Y'E[ç0k–pž˜ÆLüÔÃ…¤@Äç°9¢×éŸ)šO¡Õ+—²ÀDÚÄ.—5 Q‰ÀŸ=@½-)œuÉßÌ¥´””¶’Èö‡G¶i§8KÄ ˜ü„=Þ«7«½µpì˜@ÅgØ“p…4³áUº³yâs8p#Â)ïOÈY|½í„|™ Åi;™øx“;“íd­>& †”²1µ]/Èñê³ZŒ§BÕœŽ^žS&g¨ÏzyL¤5p>Û˜·ki’dü”d ÒÄ,µ$†Uñç.É0nöÙeXR8ŸŸwIâÿß’.c½O+GÝ¡±1 ´­(˜Y³¥‹ÙU$GæÄü ýxÐMÇ;Âó“BS$#NþXsD¸ZF9>©Ê¯Ïg %ÜÚ×L{Òá¤RÌ {JFË"e`[2s­8§"–í¸¿O$4¶7—”ÚYʽçMªùÙ)„ \ÎR8^½£UÓÀ>Þûásª[—z¢µ3eYÇ“è-‹þñG-&’¶_ˆ˜P³IbZ ³MÒS÷L RÛvJ(îãi£KôÞo’‰Ò#ÅyHn5õf áLﮔՓǺpF[¯\}¥E›~³6ׇ3±Óî hÿJOønÜG¼ëw«À[_Ø’Û›BßÜÙ"9æ¹DÄ!V"ú³„˜.E®5#‚Ta¶“*Áÿ$ÛÈi*VwR_ŠI«õb“¸TÇ3FõUàJfj^$W¹…ºÃŠM5‹þ4» )šFŽ:7؉6 •{¦õym­BL_ðƒKº»³éL’Ÿ™^}~cÎÑHöè´±Küœ«7§Ï¾ëê(jü$9õŽýtAª‰nž‡©g¢ÓÌed„÷'ã̽w¹B¨Pó^Œíì¼™x”’fãœSthPžU¸8XX4äÿY缿PjÐc‹Ÿ»èž7„ƒH«¥‹éö¬fqWelð~Þ² sLìÿCgS&¢Úk íP5¦5àÕ…‹LyVœäo['Eë€æNâ|VÐo‹:`Äxñu½øOåâgõâgåâô¯üs½¸Õ‹¯ÊÅ'õâwåâ÷å¯Çõç­\|Z/Þ”‹?ÌVô¿õâu¹X÷ûèºÂsÛƒÅkßÖG^àÏ.É“tí}3 þ‰Dñòè0UJ5§UÝùyИïœo}; …¾Ì“Þn$rÈÏê­oË­/éöö ÈßÅ)°õöÙfû(ÔÈ׉!Bþ 43ö½cÿ^ªŽ¹=‡Æ¼DÛZ)5QVOúoŒzRÿ•U¶1bÐKˆÕÈã•Ì3´k2ZèRrª;KoÒókõEou8CÈêZu€11}ðaýs­Û°Ü™]![»tÁª@¨ƒh{ë§cé?ÔNÐ$îüWÍ"Šéuz£ÒÏuhmÍ2Mü^U/¶)«?ú^çQ„wDAóU›}ž¬ææþ…Yì·¹¦bÄœW&]Th¡fi·'GÛàDÔ«Óu”Ss`Sø‘#~³ ’’qçpê¡>þÑWŠTÁ5&„ 쯽üä”Q z¸(]Þ”¡¡áÑÑ )8zÎŒ½Ã›‘‡pè€?rtºËS›g~+ënÕtà®ÐqdN,>¥¨¸µ×œŒ…^™™’Ôu½ªw ËCAàþ›t¢¥K¨û]©1jHõÍ4ÆH /n\ÇÀ3asbš`õG~sÆéNÃÄt:¾Ht'άVžY¤3Ù1,šÔìm´XD—¬Ü"OH®È$~q ÝëàÖ…ØÛ¥K˱ءÃRCûæ¨çú(-xª;«±jüóãÕ±¹žÙ+V&ÂîÝ„chÕðcß Ï‡ê‘4O¢›ÙÜÇFƒeD+RJË@>©/ŽA]߃ ü‹ð]ì=–‡€-J#/·ÂÙS$Çàîü—4^ìb} ‰agT%³4i*(Ïñ)…4d«2§é¦ói5Aö†Æ„ÊzšÐºÌÞ=Û¤ Æj9Ϥ†ü ¼’Wæ®’¨”GÇ­ÕÅ~§[eÕx|¾„©ë:ÉȲZ1ŸÂ¯\…jyIþàžWâ÷§T?ô ì›w*wÎ=‹¨_*Ùþ-?w~LueagÌPr!®ÜU‘ÇΈMÞa8ƾÁe— }AGñUlŽUítúFCÄð™LOlg·¸<¯Ü$öŸ¸=ŽÉªFK…ázíúxv"±‡dƒ}*¹ ˃ԲÑÀ³SE|H’ej…;Ñk©®poÅ5ò‰º)¬E4ÁVmž.‚lĬ¦tg´ ýÁÒ™3âÚGâdŒ´!=–»àMÄ¢e]Ì€ˆ§¶;Òª,ÿÅ1¦eqM‹I‘Ç ‘»±6hr¯>ÐÐ<iM<3Ì¿ÄèÈ ø§§ƒk ǰžf¼DãˆZø©dªË±¨ps£ÏI³Ð2` !‰|ûÐY|æÖà)¼O¶¾‡9ÏML”lD¤žüMÙ`:´eÒáhl—cèr>öÝø†m¬s1t@)p8ÿ\½)7Fgþo0!ü~§‚gä“ :ϦœÓZc€ª–ÒŸ š\눠E‰>F¾?:æŒ ^˜…è1tøø©‡™qé;ŒÂôÁšOU˜Ýs*/=’­™ÔÈ<"X7]y‹:]òpyo²ïUT¸ú•ŽúÊÞ>S·)úú,KC©¶L¨ïâ²#ZªþžS&¤½£LޤU‚sÒÔ^ÞÉó7ƒzÿpdX°+¸[󄆨a‚ ~é¦õÒNÜv_±½$EåbÈËx¹€Áv’N€O¬3,µW³#(ãÔ›=´.lù¥Ô¡5Í#ˆ«ñnàÆ\;ÈÍÇ»ñ=¯ßhbQý—š®ò!ÂÖCÞcN,_j aj&0wà;òU¦'°Hf Êùü¥¥øÍ¥øå Ú9x{¨bÂÈyúbÓC¸È­ó¼²>×i³þ­÷ó˜¬9ð}üfÓ^aWÛ§iæÜŸ:&ÎEsÈÖŸVfn«¾‚€ðwXõµŸO•Ò Îs$äì«u×ÙÁãÚ ˆ 75h1&M-Д–uZIF‹“J êÕºÂÊD%ØHŽôHl½»¸f¬¡pììæš¥ÖrêÔ]vÖìòWÎ÷>ÙSóMŽb:ÂA}H´dM€šÛ6…k`–}|/œ¬õ§—z½µ¢D{ªJË AJoÖÅò+!†½ÌBg^’9bÚö-ñ¯=ß`¡J¯+C¼ô¦þ%¡I|“tÆä_=”Ÿ“6Õ”ãm¬ «íÄMALíÄF‘ÿ­&9Ôr{r i † ¯:¼_ ïCjÉ š2N[SÚÌŠ àN§kJç¢^½ttËoqLSí£*àÎæX†Î_ë*ªžc  À¦ëÊЇÔÊò‘·i{ôbÚŽ}§ÊºìQDp–DVft¤†Ö=3`•›"ðF(íÿÚ6@{]âs§5Í:wÀ.ý޼«5õ4g80g÷u}®…Æ&-y?Óf®»ý½*Û4mùB:Nó±?œ´·K¢w=õµ#´ ´’]ô¾m·õ:$»(D O뉜ÔJü ¥Ÿuj ™žùi;óK˜«h©_õà¯ÅfÓÌ‚ó,³$ŠXÀÏ ™ñ+PÖ¸Ô (û°@ï²z€ÎHÃ×=»ƒEÓ+´©ã%#<Ý~n ˜VÝ·Ò×NE³Îj(=.Bú½äü˜]0˜þDQz‚\¢:¥©¡«ZlÜÛ´Üä¬î2¡¨BžÑ=îÔP9Ó=E ÍWmÈpø`½Nj¸Qš×J“4fÊ£àØ…¤Íë'š¦C}³¿1Мjü&¤éd¶×Sáù„Ì—õÕ/—‡ß=‡ÃT%¾(Ǽ4ª£˜,md~šˆþªeç.;ÒÆØéå1Ú–°“åÛ|C`kׂâ~Qá€8–Âëoò‡5:£XæùÙýÊF>QUèûs"÷ú%a‘bºíï>˜Ù˜¥ú7åÚ„±ªåŸÎJ7‘ðÜ®º\Ê×JW]xËçƒ_Å)Fb÷ëá‚ ÕÅlg׿è<=íÀ©@³H*,W}5ýv.›g¤Ò[¹·ï—0 òͤ‹ÖþÉî°œÃb™8oñ®Ý)iøÂ(ÞZåÐÜØ ]x²‰}=¢‡Î(Ù‡Ó5ˆwÒ•ïÂH~Ü¢~œãD^˜}ñO%^Λ°ÅÇk2f oÎ_ƒ<ÿõþª%M;%ùŽ&QoA“„%—m§áÏOÝ“í |Ïvñm'òç>ƒFZ¶³ø™(°m Þ_0e]ý™koxloí›ÔEíïÀµ7£°±±V’¦Wî¿؈D輄‹62y \6à Ô¸B‡ ö,™‚€Â´MÅ\W›oBo‰`Ç…¦¸µŽÈâ›ÎJ:"ÎJ¯ñ)šÓ]ÏÞ&2šãs>—Å}ù^¦ô+®$&6’ÎÍ‚ÂÿâÁ½ÿ‚ÿþ*Ñendstream endobj 39 0 obj 7077 endobj 49 0 obj <> stream xœí\[$µFyˆ’ὕ§êd»âûE€H”$#åx˜…`ï ÿ>çØåò±ËUÝUÓ³"´mu·Ë>>>wöóëùŽá¿áÿëÇù—Ý=|yÁv‡¿‡Ï/xh°þ»~¼ûðqßôžy¾»üö"¾ÍwVì¬4½»ËÇ_vÏöÝ+¥5ï®ö?J‡Ÿe÷Í^Á¢{±?¨^JÃTwo/zk­üúòŸ0‚”t){˽‡Q.@Ï„÷%ZŶ%5®Ž1—Ú¾¿?ç{Á|'özxAílï-ã‘|Û3éÝNöÞ0nâkïì¼7^+_QÅ+¦7© ´À€Nt2=µ¨â^9C|7L¸{ œQ¢×Ju¯ö²wÎÞÝDî)¯]`ü®»Ç0›ÞkTàéõ^Zà7|"ÍÇ~Ÿ”](Ûkcæ ©Òáï/qºZ[#òëÒÃSé vk «÷-Ò ”Žâ//𠋨º`/Îsf»ñQ)©\õ(%|Т{Ç^^ç÷óãHÒ/t¯á‘P=Hò‚Ìêz|¢ ÆÙyG˜ƒöŒqØ$5°QÁ“)&)9÷’õR(‰„¡k‘˜Èx"ÁrCyxZrÓ —éÉEBxà’Hr3Ì_XÞxß;è]•¯lS5НÒ;ä}lþ¤È8ÇaÙ3ǵ›IDìÆ×FU±[TÚQDHÓñéS“BÓ{Tû–Þ€jfÅ1ƒâhÉA,wã*aß080_à’ìÎ!ôElÔ°’ ñÄ>]Oµ09« a5ˆ>RåCáÕ‚ôüóþÀz!„±6™FÉesèlˆ¥´Py;j¡úALŸ“ž‰£ ¥;@§R y M\«.¨“De‰¾ô…퇅&B `¾Äôò“‹Ë?}Ù}‚oÁ2¶B+!˜t0*~)ìðó=(æz!²Óû¦¤ißÔ…AR¿L³åÀ#‚ :mƒ^`®´Ô õðÈUøV†öºcð÷u1)ŪñÀUð4Þ'{­aÉ€T˜.¸Û¡“Ú–¦ûžYoÓ«W0/íg¦5Žgl¬{μ@ñä8„@ßÚ[&€›&óå> Æ š»Ö`¤”xÞû{ Ö‡+dÆæ©u?¡LHë‚üFªš®_õ¸h©Óg(öÎJÝfk¯¡ñHî×Hë #Yp@ÍwQ‚ C«q€¹ôÖøî«@<0ôÀs&4áW¦›¼ž™ø:òg âÛÜäiµ_y…ò CZòÝkœ4í=rœ1Âø&OâšxÃcðà$’ `ᜫJú¹FºÁy‚Oc‘'r“>N“ãJU’Ç îr‹ñ[bî÷É 7W­O#•jõ¨aŠD<¿ܦpÝ{hf€`Êâ@  Š(RP°¾5œ¯H´ê¸¥q¨Ý Mšì.q2øN˜46.¡Uº5ìbP÷àz0 ¡£6Ï5oFÊÄS}ÕEß`mÓTØÞ «›[‹*næt-þ ¼ˆiöÌ¢gž± eÏÛ¿Ú'Ö^#AÄA€h Ð¥?À#HŸ€Eø~!O¬˜ð„¬ei¸åh+E}Þ9PÑìFË18“PF]ÉéþåÚ;ˆË޹Gƒ1âŒoÔ`‘„Ãü-zA0 ¥otÆV&ßÈøF£ÁÀg7øF'©ù[ô°.\×ë2ç!9G¹Û=äÀü“6Á¬rsac aÉï8>¸%ÎówmÖ0Rt9öŠöéöÙƒ ~tm ™‹ÛÓí™9cx,%U1Æ,Ÿ@!l€0 ¬ƒHèÂ"¦¥±@y *½À)KnàKkT<ƒ “0ƒƒc1ˆ5(¸ü„0D 8d…UF!"D!©íe Ïz?)¼zjUÑs,‡"©D=vÓªÂÂ:+ðJW´ƒ‡{ 8©02¾ ?VJJ2 #O#H©{ µa2uRšÉÝåzL.6ƒ,ÖŽ¦â%’(”wÍr¢ÇJA6èA|¬»7LäŒc²¹Í›H³Ê1ꉉ\ዎñ*—ö°Â¸\Å•¬'(’ÐmO5Ç;;g€*€;f`!n7í ‡b±••©N{fßЬ`g0Eí 2›”[Ó#ðýu®Ûbï’Þ8%Ò ¡É|¸oæäÊöU%cfçik!#å’iÌõ„JBYbÕ¼¿èùÀʳގŠÏ‘±Ú(ý ¸q‡þ |"w`ஃ/õˆÆÑIÊÊ0 ÿËàÀ@âÁ*аnÌ6Ô B…Ø-å(ÙÎCàBö8ú%ל•3‘Î$U]²l'¢˜ vŪ.xeiŽÄK&LJÃc0¾Al™EßÒ//´š5¨K±×nê¢,‚¿:Û]ìówç +ŒÍ-UX¬`Gm"ÏÀe=²=£zôûUqÿ©2·¼È¸'K¦U“°¸ “¥v &©’[çz/˜¬j’r²ZÕ^ Y­ç)öË2—Â<%ÑD³W¤ˆÐ(‡ìðeÓV¹ÂGoà0ÕêE‡Ëu›/“øWÕóXc;ð+¥Ç:E§Ž¿*3~!ò•L76§BŒKB_C_ácµn6öî¼±¯dgˆ}…Gžù7û ¾`©—’õ÷³Ë‡Ð7~,ò²8Ã`ödÕ¶Yö—ã´I½qeÔ+ü†¨W¸LÞ¢º&P ¶Ýªº&üŠ$âM±2E½¨ŽƒÚ9Ĉ܌ü,Á èQE!ì!YÓç´ ·‡*mªpEh¬5TSHÀwŸ^FàŽ¶¢ÝÙÊ/%Ü’•T? ‰±yÄ(U䉨 g—õvΨ@$ÏâžCB໤u) KÈyÄkšð„™Ñ+lGBdÓ$`Z(b28Èayc¬nà(߯åA°Ôrí¼¤˜ŒŠX2lÄ…)NÁ0}¹ÛYfÇÆñC 0Ê×$†çúl1¼fKôöcx#ãò¯Q|Åqáš(þGäMºf¢\•NdÇÛŠ¡g’ši˜|_¹-õX%Eo'û1K ØdåܬU©OQÌê>öë½`j’j½:Gn•’.ÊòF¦Ä:†ÂO•Ú«_ÓÁ7šBB†é >žêõ´W.b²Ê8ÀѶë˜&lãünÈ©-#Œ[~·Ë!Ò !‰µÈlÇ®ýàDXÈ dLFÈ’˜‹ôC¦!–Qï1¨÷€‹ñXÄچز,MìÃØäј ¤PÚŒ+‰¿“”h̘®ÓC+“ _å{'Êrô«‹×žäTe¨¬ƒÔøÊ?ž‹{Ñó°§¹E<€á¤óÐÀµ;OÊÓ}3µ‡‘…cºt“9C¬áõV{é¼þ& ê »¹ 3N¶µ41Æ«(ýÁ¸K1Sð0©B1M‰´–ù(’¦QŸ öÉߌïÝ‹°T, •yJÌ)4˜²ÜÆý7M /ÔÛ¡1ñ“Ûé }¢ZémHSäƒ4O©<,y:~ÿ.͆è<¦u lC¦MFy]§Tˆ¯G0­G£ïÚ§ Õi¯¬F_{"úÇ×;ƒ ñ€èÍ ¡.ä% µ %ˆArf¢U9ºQHqîk‰Ú*ÄU®»Xɹ+FÕÊÿS®÷dsúhú«=BQWá­ò‰h¼+{g<¦pµá\“i—lÈ©”w'5¬Ìµ‹X:.©r£Ñ(6‘ZRŠE ¼8ÁÙèÉq£¶fŠ%…’¦h)‹¡ØÝšGÎ"è¤ZÅÒâ‘ð'ΑÕåéz­ÐÌ-®UåŒkÅË á”k3в,dImz©O_°Áö¶Ïä”å"0ƒX–Õ¢Xr8ʳh,Lé;•6_›Ç-®Ó òödwÅn˜¼±ôjŒ[))íÍê$?Æ+…Úƒ±/ÆåóuvQ¦(Lyªì¸²€S_N”¡aQ»{rÆ’‹7µ²½uÔ„YŸbÑY5@ÏøÞlñJÜ9&òî«0·"áÎö ½ŽÁÁöâÚÚ•ž·úõJ‡#vkWúVõ¶UlÞ.Ò¥²Y„ê¢-àœò_fÝçl<*GH5Êñ½TTòÈÉ`Ü>ž=V•r„t7E)‡g)„'¥èYÑ%˜B»(…û¢ðm*J™¡(¥ü2LáìE©aGñö…©asõ @<¤Æ¸×{îÆý.  •Ñ+wüfýVÕ ¸BÜÞÕ+á ¾°áG s@Ûàt+ –‘¦o’¡´°´u Ùb…l35l+Šš1¢Ÿ׌Žy'Ç’´¤ÛË"U¨vla Äì[Ü?¶ íõæýã‰Â²…=Óþq!CÇÃ÷y\òd»4^ØÑÀ€8óørĺ¨º†uÝzã7zô˜'žÝ£W»€²½èU®ŠHé—›ƒÑÑÿuƒØLÎàk˜ÌܱѡˆÔ›å!=îÖ±M ø™-³È ;©,Í4qyKÀŒ#Ï—` $å‘L‰€8†þT´çß®éùEGKÖtSÕÕ|d¾}D$\x€Å9ÖÞ”g¬Ë "‡KH±´ºYrŠ‚²ÜÍdïÙx¾:¦QA/nBðý¿÷xªU¢® *A=i‹þjÒÃË7em6 ò©òØÞìG.‘>¶É!ªÊ·¡DåU§Î„:7ãáZã¡?z¡4QØãÔDE²…ó{Jx¢,iò4~‰ãØA»¬cBí¹–U“®eÍyÜôšTÎíà´ò­¨ˆÀÀñÆ•Àf¨8¯×YbËn”ï9WiE@Ý‚ìÁˆé°Pñ»‹³Ÿ?­„:4#ʲÓБ¯g¸b"Œ`©›NtàËÒcA÷Qˆáœ;ÂDFKGMç¯SÉÛÑyi¼8'ä@,Àæv¤É\¾æ:ûhŽncŠ]EaEwâîPj‰I‰Ò ç+A4>Ü'Üí§8ròÝg{Ë,~7ÜpƒìØeåCZX%E¯B&"ôYFM”}T¾£*ì↠oYF`“*7öZRRâ7‡wš;wŽìaªé§/c¶G¼9®Þ»µÜ%§³",[º’–âŽøz0(”SX/ʨiC²º4‘:h‰¹ 䊕õ4üõãË‹ÏáßêÙS$endstream endobj 50 0 obj 4503 endobj 56 0 obj <> stream xœ½\I¯#·rÔ¯ÐQr¢÷%1` â$ö< ;‡™7˳-Íê±ãüú|Å-¶Þ&ƒñˆ"Y¬_U·ünÍ&¾fô'ý{}Xýák»~õaõnÅ™µ“Y[¥þ9ä±áa¼_ 9§õûÕÍêßë×+¾¦?ï_ͶsÉXüÏû«—«¯Îr7ÎÓ çX¤`…®ã}{Ë'Æ,PtÞÇqÚŸç!Á'AMzýó*¨iýõ_ò.+”O§$*aó~õäLÒöØúÕŒ«Ã1×s©fR¼üäH‚GR¼9›ŒÜC+¬ã‘B;n£Å´lG†9¬õ¾™‹;m%tà î!ú¼_ÀV O‡!¿½d™ûH霶‰V—ª¦8®^¢dMR÷Ñ”çOF“±¬&©.M‘«Ã1×s©fR,GÓC)žÏb‚›.šò8{Š`¶qÕøTœ»%š¬ï¢Ip}Ñhjy: ùí%[ަ‡R"ÛD"¸ÁH´ð9ýs}Xv…ûR;|3¹õÕËU¼Eqã71º#ü¤Ìúê°Ú<Ý^}¿ÚÁ©õz§ÕúêùjóŒ¾ÒlbÞ‹uœ¢¯?„¯åd™äëòí úöó+hø8b|g…ù}4Ïy$CtyÑjÑ[²PQª‹K›¬D¶fë¿;-)†Åxæy§¦'è_{>yEºùfóÅâZ£õæ»­À'+7¯¶zóq»ÃRe˜Ù¼ßîÔ$‘4±“ÒLZé Ç¢?¦ÿ¹úÙ‚·G*;Y펅 ¿Ù|µÝ‰I㑆ÀÆ…#õ$¸ó|sM_:/Ûü@•fÚlv9kìæ +9Zm~Þ >iíÄæÍ|¡¡'Ä­ó‚Ûö ÃvÇ!ƒ ¬S¾[ K7Á’Æ%8¤Ž—@V¿}²J4<Ä£%G»GÇ`•ÌËê×ܱðœ?YI.]ë®R×»«äN¶îšÇ­»žCÛöoSlçô!íÈ©Êeœ;b…•²“4+¥K±çñš–ŸÃ×^ªåôúPJ7g´‹i >yãu¼/ã a‹¿$È›÷Ÿ†þiWþ…Š»€u:ŽÇIÔK0°Ò#)žÑZFõQ”ÆÅK´n}ƈ֟ÂÜé(’£.ŠŒ¼\5ü†¼öRˆ¢R:eÈŸ="Cþ<ÎÐ5{P†ºyÿiÈ_r3루‡üç¢ Î8>’¨—`9ŠJ±Âý»C&Tj™•Œ “òz™ÔFÜ2A® y“jR0”†MãbH-ÅhœÖAž~;ž Hgf;¥§µV†µ-ÄP†2ÎD§T–…1¤KN™¿)+ÒŽºâ<Ò)m]8‡™H!CŽÜ¯”rجŽ5<ÆBõóaÿR*Á‚*â®CQM¦r.iÈV=G‡eŽç& Žƒð±oÎg-£8­ðL'¯@5[Æû:ö&„¿2:èÙƒP§ýi~ÁZq—™ÏL…_ÀZG‡Çs‰z Öz$Åó[KšÞZq\9A4tÖ’®·Vž?i­”fª¼Ò^ÎZ‘£Ã€ã¹D½ËÖz(ÅóYKsÞeÂ2NQ­™è¢\£îl³@™? ­ê2¡æìb™°çè°Ìñ\ÂÅLøXŠíp)#'T Tã—úßlžmwžs‚À „âté¼-=€ûB"Åõ4j"UDäZHd¹ËÈrÓB"Y ¶Ü1a"å¤húEÿÚÂÚ+ƒ9Ð!´Ð¬{»QLˆ¶ÄFik]D½qŒsåz9§õÇý n;·ªãr Ž„Ê)Áe<:9,íAáW#A³”Â\]¯„e Ôò¬1íÎ4Št±61+×y§d-Ý8"ºñÔ4›9Œ;;~¯ƒ'ƒšîd€IëxVÄ„N Î’—V­vzÈã(´®Ñ2z§‰{¿ê·J»32¿e¤É;£¤™nÖC>5ÍfãΎߨPÓ­”دgR¦oÊŠ´£®8;¢áŸÊ8‹Êx_Æ2Þ{HHÇqž_j›Å]ÆÈΪQ_瓆‚«çè0àx.Q/ÁàéÄ#)ÞœÏZÆøà>â£<2¶„Kë˜|ØÔøÊóqÿ¢µ$ë3M—!Îl­Ž£Ã"Çs ³k=’â­ý@YÝÅ–ÊMïkI+ºL(­î2aç¨.w@ÊyÿéL˜wåLØß$çµVÏÑaÀñ\"qK&|,Å3ZËè.æqŽj©MåÒ¨. äùÓ™P ßc#œÙZG‡EŽç.gÂÇR<{l•L˜ü¤dÂ<ÎQüªd¼ÿt&ìÑÞ¡R¹@&ì9: 8žK$nÉ„¥øÆ5½€¢ÔZ)”€|Ö¯B•¶Cí4 \ÿØ¢òóNy”T]¯ûP»ÏO1³' ´ÅlþJÍhç9³›Ïé£RR¹ÙG WU:g¹þ¦o«?«÷YbSèIããÛ…¼Â—BªÍuùTÄÿ@h˜JÞPɸ“›× ­H‹6/´F´ èp4J¿®3ÏI $Ïl5E°0.T£.ËJs‰¬°<1ÊøæGÌ9Í|,¹i ½Ãå¥$jãÒ±:þó–á îé“âÀÂ$’ÄÙHLËP¤‡Yï NØÁ'¸Á—ÎYèŒÄRôÔlZìœÊòÄFçoÖLsµB9“ XüЬ8‹z}ó2–áÊÛ`ÞbÈ}Õ¿t(ï ™b˜F½¯0íùĸNžÖ¸óÌ)Ëö¨L+ cÙ‚¢ZÓ¸Qh|¹ñ«Æö•\õ°êNQSRv‘‰ìTVÔÛðÆ‹•ZŽ´ê'iì 65rìùí{ø§ÖÊðÍ·›ÌÃè8[™ÄSXQ;ÅY¶"kCÐCaî·¤~!P á“pŒçÅÏ@u¶´|$ nÇXéà|»iÇ'Îå fÒÇÑ¡¨´yãg/ ºZù¡öŽô¦“•TM'êýÖÀôR»¬Êj3UzÌU£*Tê2ª„Ù†b-ª2:=¥+ë!$fØX#—®‚@rv'u¦Æwåœ;g>Þò~‹ºñ±ÉçG—ëÕ]Tý›Û¨º^Ï’é;äÒ?U¬Ú†BÄp®É*7ƒh%WV"`Кˆ(G4‰áE™ø}: Æ;8}WŒJ‹:Ø^Øãá¬6- ×m£³¡S¹;2§’×[a±`£.Ì2*Ê4¸‹%·f‘:P±¡7QÉ}!*P½)@Ùav-5œW¦/Êpzô·,\µ÷|]&>ŠUB÷h(¬K†„jß>þ"|ÉI¢/IN.pƒPú„Ï ÉœF²«N{©©i€ÒÈ%¹A(Í-‹ãzVè4gí8½¥BH €^ÝîÕ;C;€û‹(õT~]ƒãaPÊ.ÔoC¢¢9¯ïï§µ´3¡¿ûÖ˳;/¥ngêUžP¨t^ ïæÊÞƒñ–1\7'Õü<¬\.fæoT*ëÃE2çÍü³²nÒ뼚·«?žÂäÏ“ {Eº¶õ”F «Ðø¡rȤzŒ`üä—å½oô!óKR„ ×ü»fÕÇΙšj@Î.Sº¿€£¥hÛL±»¥˜m_ÎhPæ¾àõâ3¢µ€-‰ÖTœSÑé¦h;YÍæÒæ"Ò‚~ $Ú–q“½wàŒ‡¾BEÒ§õ¡ÞÑM©àœƒ!ãä‘›Òêóy0b‡S~ÏŽkÃH(ð¶è²&Äèe轊~8è:nxJ;íXè=©‹~i¼(B9¸k‹Ôº¶\.ÓM/+¬L9CÂ6@…- ã–°wÔÈ}Uj Óø½{½ÑçCñÕäÔGw}›ò4èOg_0¢bèäÚÒ¢$Ò#Oó¸†ïŽ^fç|àïÔÑ yê¨cj1 ’fú«òôëêD0£ãÙvýgÈ(\‘»ˆp žññï««OèFÞqŽPáróY’ãȧ8œ[ú…ßê"ÓKE”?äİØSö•€÷OÌ3ÇÓ!PQÙ îäárdÆ„@a˜‡\©þ¸¥šD(Ý}ƒï ?Núà—•çJWYé×ÔdéB/² *¼·PÈ´ oуD Ø|MúbR›aÖsKGÁÏ©õþ†b(D‚õ~çT3aÔC÷¯š‘€÷´%}Ѓÿ ÏI¬4¦Y÷#Ç5 ´¥9%ŸÔÌAKYÑ8q ÅÅC±J‡‚ü= 8’¼=»¡_tÃpÉò|—ÿâ+”ØóG-µKf€-²S¬u¬öÖ‚¿Ô‚ {NEÝæÄ¸„@T·«sõ ä-‡quÐÆ/w];ýaâ×”Lö‡Í{~³Ãè \"´ª†@ìí  Æøq]ÓF¯fÝ3o [¬Yu[Bÿm"'>¾É3t#à&æL/'¦»Æýœn±›àfeü?AšÄ– D.Tföô@8RßüáAÒ„% m<¬ÍSÛÍ»·çò-Žž2§ç!’ù‚W?w.$ø^Ƈ WòÜ󘨔ùy:Cóåb°)¬4š„§¶…ÅG²z`Ø”ÔßÀNÚMŧ`›!¶vÍI¬ÖÊæ7@;”v“§–޲ÔTONouùµÎW«ÿ)æ1îendstream endobj 57 0 obj 4183 endobj 62 0 obj <> stream xœí\K“Åöyƒ£ÀÜ:…F2À“1Š(7§ßž¤·åÆ«×n4jsúôä«í'ƒÚžf4F*µ½v>Z+·§‡çÃNÃÖÆíëAÅQ êíÃÎŒZ›È{z>ìĨ”rÞo_¥^pÛ'ƒ½÷º}i§•¥®^z Á)¹}œÞ1Ñnï¾€áü(û-ÊdŒ-ãj]·ôqVÿÉFg®êÇ‹2OìZêúë-íµþæôo _­ù=J">=±ÞÄhƒ‘Â¥¶Ælü½ÔÖŽÞ k7;9º DHïž J»^÷f„Ýä­?vÒ)\êÁ غ0Lî,µ|ûP³ÕϹ:ÝÖjÂb°¯‡Œ.a3¾`·Ïð¡cÔÛ0Æ;•ÁXÚLpf-¾vŠÐ·?%0JkCžˆàÙ7‚˜@¥„Žy.ßå{RÒkèrKtI7ÉxG‡(”ï‰QÁ‚°ià¸5h (í ¤„ï„lÅù”AI·ý-Ȭ@w#d.Üþ2˜Û~|zrïäùÆÚQ‘áÚá®iá%Ltã¥Ð0"ÚÂîžÜ¹ûÙæå¯ÎOîüc#Oî|‚ÿûè‹?Á_wÿ¼ùÍÉÇw7÷nh#aÖÅ8F“̤J³r£ÃÙ¡tší«ŽÉ¸À˜9©Õ!‹G-c<榶ËÑ£Yª1€Íi§<ôÝ*K£¿&zPÉT:aºkp´we O o+Bo2ŽöÚ”–„Q| I¶®#Ïb,5Z4ð™w›tÃŽ`Ç·ï£ „ä׈dxUé_¤¥F­ßï‹+š°Âû EåÑhh /j”?hÒ(¤ÑÙ+mاW]‡–?zɼíemùºjŒÁÒö^vŒ3p*jÕªu÷ÊFÀÚ»C²ë!¹,J£¤ fµÒ n«g|š[ÇÛ¬8åÀ%¸íƒú"Û.èÁ€Ã§ñGÈŠ¾w!j¢6³Wp¢Ñ\“Vè‘IH@e„ðÅ0YðQ/§OY@^†‰rI;J©ÛÞ@BNAsTÐQ%#‡Š#ãRyYà…}žÕ§»7&ËFÇëó¤EBn4Œí‚¬jŸdÁ´#úX[~òË:z o“¶ ·Íûd`êz†MÅh€ær½1¸{šóáRα­7 `ç ÎfŸT:Yza=d“Œ Çaç¦?¸ªˆÊHÖ÷a]v-ªQĸ ý4[µ}¯k>ò¼Ð>`_AÈçÎl‡ñŸº¤9›¨ž:(ãÇUS±àÉ6z¿Ÿ'·Ú°+ÚÐÂá~Ún¤wo¹¸ WŽþªÂ| U›-äB“hÿëÃl‘ s™l²®¯ª5vúŸ,ì©Ý=E»äœ–žñVDÒrD LëFi1¸¾‰(ê˜Xpu—•Ð*[üŸ”ž+ß,«B<¸ @6F¤¥ ÷\3{çéNT+pƨÜ9×mZ3ÙaR§é!®ØìÜÍ"L'E.–™ú©ï·ÛÈ—Šbë‡$ ‹Èûì]ÚÏ™3TxQ_0Ïòù¤N/Ó@Õ'·Ó³±%R® m$Phg$KÅìò§83èžì´VJÀ8O|Ô'}ÐÌ Ïoàa(²‹±˜‰& ðMþõ/CÀÓ4alB¶°$öþôðÆRÒ¤( °pYÚ…“Ô25Q!bË‹;”€RÖéô¾~6}Êo»M~L_»ÝÌAok6?#cçKónÀ J ÷4ÀõÑv¯åI ñd׺€Gƒå±>z£~[+9œàÎ 3Qª3>R¡>l¶5ríŨÙMkÁ‰ÓY¦&®]ƬŸœE6‰~pÅP0ÍçÈÜ[úÝ(‰VdoÉ9ÖQ9Ùºj½* §Ïë‰m©”+x9 04“[òy#)Ðl¨#‰Üy_=kZs80þÉæXÞ¹¬¬²Ѽpý`¤gJ¤´â€Q8 æÀiý+å`€IÊ-5¡‹—1Å”áå}{ ¡`L»ë÷í1m¡ &¬‰••¾4 ÉqJ ¤@Ò{Ù%màªòM¶¿†ê§ uch‹8Ýö”²J>F¹ߨ'õa–ž ¥­mÞÏ9XMTЦDžE|IA‡n<ÃyhG×PýXäpm­@<(G5á|zÐæ»&jSϚ U1=!yÊœUü1)?׌3üuGïh¾¹áb·j²gÂ6 ›Ì‚³‹I÷ª¾Ù3÷œ½%‘¶qWU)/̲º,Ãd™¦/ Q° ‹*®’m6¶1«Ik) óÌc4 _&_÷éÉéï¿Ú~ˆd_{‹JI´þŠFÊ ³#¬vžÒb)( 0Ð >÷10Á³  ëÍǦi¢¶rÜ‹nÝŒœòE7YQg¿æ‰Â¶ÌÇS¡Ê¤ ˜R×ÐÙzî¡"ô)殬êñC|¢…ßW›°£,¢zJÉ;áõ ÈJªl<¬°.7Düw”[ˆJN¡íxZy]ïà’±:ºiè”õÀòñ•çvxêÕÌM©_ª¤¾Eõωê[¹„Љþ~äªs€b&hPý(±+“U€Ö7~è‘ZE{ÝçúÆ;èDˆÍ-ºŠ:OæF|t¿zî0t ð¼Løfç’sÜ_ó<]÷ù#íú­0^~À*b,¿Jmì0¯™Á\4vk1~ƒ‰@5òf‰‹yDª¥¿¾êb+,ÙÏ!ž ™Þq7[ê÷X&ƒë¢?.×8;#ÖMat.ŸÞ™œl=£_Ìl–{ogö-fÌœ´]?ƒ×"l‡ËIwgBŸ…‚š¯X¢Ãæ7Œf³kš§Âñ(eO"¥Âõfr9f%øq:ÒÇêÈä-øjëhBr4JŠÆï€¹Ñ¶±¢}&tŽÅ`cWæ¶o~¥2+fýzlÓ-ئs{èî‡&/½?Ö£ŸSéxÀ`h9»ñ§j"xÏmG¿¦²QÏ9¬Ö­=X×Óï ë7IvÜc\Të¤s”ý†ÚøF#Àê¤Ãá޾Š{W ;˜µ ƒ\Y•ÌyÀp#/¶ß3ï|VšvËiÏ V{ÈKÎVç®÷ns;uÓmmN[Ýlêû=j® ¿ÙÌç]†¹«wå{TΑ]ÎÎÇQøè;;¢i—k -y•ì%lãÒ)¡×ùxm]ÿfÂ.}/…m‘;ÛÓÕY*>º‹˜M¯ ²Ú’Hî^Ç(òLe ¥B •5 :ÔÐlFyð°kLCã–®mìçæÃ¬™cÔÉî,æTG¼ü6¾u­ìÁÁ(Ž?^­,0(O‰P ™£~Þ\•ç÷ã;wzØÉÞ¬8â',ÿJ·ëÚC:vwÖ©9éÜ&boaSVŠÙ¹Ä©Ô¨•ÚvoñCz0&tÚß­+csì×Nܾ°ÅèTØrà ÕÙŠ°¨Š³6WY"G¬ð’îÂåß4°z>À÷( O†½ÒÌVÍ §å©â¬×J’i÷%ÇES¨ò><3f¡”Tà‘3+$ëabuÄþ¼¶he‘O/øÑ;íge&*šRþ\m3ûµˆR| ]’䦛? b°°A8ËoÓ2üBÜðÂ7 4—á{oË»*WÆï”D;ÀÑ=–ÂÉn)(?Xª1Üw·./_‹5Þ²ŠëÎu;¨PlOõ̬ DZ@·¤9f-‹ñ©¼¤¹fE÷‹ES4ƒ’@Jéì\Ûs¹²ŒMÕ5ŠUšc¹FÅèGãõÚr{ uÃ'&5«ªhÔ,K´SGU >­ÖwøÏHÊ~“2—¦Ì*-z­ÐòqÕ„¦j×ëMÐÚòØÕøTz ³®?в4fSÍt1òSaxñ@Ë[ä½kŒø©‚ÝGÓåÀ1ƒÛ~2”ÛKtK±šÚÚç'4†6Òmøk{®ÖZ/ÝêJ‰6Sr°œê0JÕ¾ŽË!鯱L¿Ш]»Òv+™£ÅžÖÒ弄™ž,ˆÝоßjÎOÌ‚|ŪºÕË׸š„Õúf|¥±3m®É JÙÓ:‚N×o¥UÚ;b™ðcƒ'DÏ{û"CSzz¡hgGç-å\èGh,z—ý”dÚB¬§t†ÐÇ«gÆK¨œXןóTŠ‰ÖžûR€(è gÖ€·r:¬ ÖÛ9ì®4‚³)áÇï•ðSÅ¥Õ­æi[N°VŠöòRÛêÞ4êÖ­•3r¨ÖÅg¢”„ÖzŠîä‹*«âC‘¬©öýºrvï —Ð£(i-i•Öì"@3•üÃ[ãcµ¿•2­¶”çì‘Á³ìñà6ÄYE8Æïõ8·exoelòïõƒÁ¦„q@!ýbÂ`Rì§Ô&u:¤ØO¤ØäSËç.­Ñ*ïÒ%h,¬ö95+AQ2 ovž/MSe¢Aþ§È€‰Q8©R™ei{158yIm€ ©QÐ>”Ç—Di*HɇÅ[Œb_ÇÖQŸÑ׉ôä±D׺1ê•Ù×—_$À ¯Ø4Q‘}³Î¯’n+g/£Éñ¨`ç`ÀÊ> stream xœÍ=ÉŽ\Ç‘>†Oó_\%«s_Æðadk4Ȇ%5 ƒäC“¹«I¶HQÒ×;"÷È—¯ªº«Zß’û’¯ôvÅ&¾bø'ýûtwñèK»zñÃÅÛ ®•šÔÊ*«&±Úå{­=Þ__(mG÷iüõÅË‹¯W7|…n_tÓ%“lÅc«Ûï.ž_¨I¯>\LV_~v!¸À±ÆJË aäWðÊx|åDÄJÝÜ_ãÁÃdãˆxo­Ï#ŒYoo}Þj >ÝWðR°%ðR(^JÙ—Âðù¾oÕ"xë(xg{ðNRð龂ÿâ,¬\ʰ3‘Jù^‰0H$&×Üs`’«˜–÷a~¦@š:9á62²p+ÉMÝïyvƒ‚ÌV/:¬vËX÷»L»xþÑLÒO„øò|"Ë÷yeí(&FSLóû½’QŽó°#Xí–±îw¹Ì±!žc”ªåX¹O+K.&’{‚iy¿ŸcNŽeëöP£Xí–±îw¹È±S!ž‘cVSŽåû¼²1´ñ-¦ùý^ŽIé(ǬzXެvËX÷»\æØ‰Ïh¹7H;it &¤¨÷×å^i \—`üj¼OóóûË!ŠÌAM‚bÈ*¬vs¬û]u»XÅ!ž‘cVRŽYK9–î &)~+˜¦ù8–£¾Ì± å¡8F°Ú °îw%qìDˆçôc–pL‚n9–ïóÊ9$Θæùû9Vi™ý˜PŽQ¬vs¬g»²8v*Ä3rÌqÊ1§)ÇÒ}Á$eÓ4ÿÇrn’9–¡<ÇV»Öý®ø!Žñ|Sh·S’Žåû¼²Ž`šçà˜oó¯]’ývú@¤Xîæ»˜íÒàà©Ï‰xF#‘x_=¬÷4ñ‚F"ùýÞHÄ K#Ï6‰XíæX÷»êv±‰Üâù#‘±äQ Çò}Æ$yà‚iž¿ŸcqVåX†òP#XíX÷»’‡8v"ÄóG"™cÙ£fŽ•{O#‘Œi™¿—ciVáXò@£XíæXÏvepìTˆçD Ç’G-Ë÷“ä ¦yþ~ŽÅY•cÊCqŒ`µ`ÝïŠâ؉‘c‚Å9<à/”l*Ïg²˜2ȉv"YLä(Ý_—{Ï“%Aî´SÉR¤ùùýR Ò7ûØU(ò,&Áj7Çz¶+º‹Å<â}œç”c^SŽ¥û‚‰—Ó4ÿǼ¤ËPŠc«Ýë~WüÇN„xF‹©4á˜Tžp,ßç•¥²Ó<?ÇҬ±å8F±Ú °îw¥pìTˆgä˜÷„cŠI±|ŸWVŒSLÓüýK³ Ç ”‡âÁj7úßU¿‹ÇN„ˆ‹Àn_àVãuúçénõÉåÅ£/µƒ'0üòùEl™ó7j²X§°“«ËÝÅúÉæò{l¤Ë:–ûÉ2½Újµº|v±þò»›×·»«ëW¿\½{õú&Žo`o!/‡ñœ¹0᪀4“Äz2à! ð=›Pn’V¯ò€Cø©Ä©ä x1o•Xm¹–aÈsLhëöÙjƒ\Áã0°d[ Í=`vG`|z zöÈágAK–Ä0žyÞJ¢‹`VZêÉ£~³þŸœ¬µÆ®_m^Éõ‹^¿ßlõ¤”òz}» %³õw›­„Ì 4z­aÐÁ@Qp½þÞLBcÚ©W0èY½ÝÂZRBv½þëFMÎieÖ¯ébOâ¥ån}ñÁUmmÔúˆ,ÄÍAxÙ€=WBª^þÐF‚ÖðÉk-«@v€(Û`€Ì߀ˆ° tß*·ž6pvœË·œc0¼þoܬÑBؘŒÕ"]!€Ž8Ãh·~‡”ãÊ›öák€­ŠÆú&MŽHqÓ2L°IsLúüâò#ÄH*0S1g-à’o¹’ÄPƒð€qd„ž8°bä,p±…ýZ¯, Zžnñ©1N1áµtÌz²ø¤^^×å‘#Dq|ÒÚP c@³É™9e\¶, op‰®#‚QLd"\"Ý­ãL®_V& € ø^ÞÒ¥a¦ ÷;@ 1âõÊÏ Á“1 ›xûoÁôKޤSt™Ùt#s~,s /±~³ MI(×OËUAêä ìÉi‚(’ÕÉ€®u]" Éd«» † 1“0P Ó¬‡H€/’J$zX‰ÐËF›=¿E Hüqš=¦Ñ²^µû@Yà‹öõ›}¡Çý0«™V^+$ rh5)`¾y½ÛlAùŒä¶yx]®pÕƒ™J 4TúªÚª$ŽÂòŠÔ‡ð`©œöJ ƒÕ|Ù3 'ÿ+˜{ ÞZôÒQ1‚£/бMÔÙr„$é3XZZ[¾Ýp\Ñ… ­¢³Eµs€â6Ø|£õúS˜a´ÍüéaÁȾÙÀ"¨Syv/ ä„HM ^@Â=G²@䤼j‡ŽT«ŽñÌ×o²$p 8Gšx/À }Œ´çŽFw¦ÍÖ1†e­×þþ3ƒÀ9q‹`mʤFÑ+ ÖÑ5bßYÝÛÝÅ'‚÷{UǼL÷}U="‘\Ÿ$6œ¹K¼@Í”–.2 ¤J~½pcP¨Ÿ 4â’ žÞ)ìÏ;ÌNº˜Õ-Íc®}I§@¦›Åˆ}F · q…Œ¢Fô9¸Óŵæ…â~Nq¶b?Å¥Ÿ$‚O¤¼škg¤RCšçaÏ£z)o3xÃTL´c`¤ Ä»ª®ø&‰•³ _x‰aA~jCLÒ|7_ùÛ*eOËö®ÉDâ "OíqaùÎØ«h¥BTÖ‹j—§$rÛŒ0ó®E¢Q¨Fgòæ¸X».jÝŒE¡YÐ÷FK$ ÚxäUÄ8´ò´Ìì0 ¾Í:„ƒØ3@ièÿ.ø9&«ú¹¡¯jøƒJP_ü¶JõÓ¬dÕÀa=ûvS.§·ËR ®ZF\8„å²eÃÅÒ¦…qÁðõk´µàT,õj[©øÄTçÅ®0ÆG?P•îÇ ¤æÖÒUM«QGêFzˆ\‘Ý'›÷?E# +o­öU†‘¾$ùE,1Bü0 K‰EïëãÛ8ÇãaXð9K>)$?š7‚ôScߪt¨‰ÀZT†¡ûi¶ó¾7‰%:F>Þ‹(„Oû³Ü|ƒØö'yÀÿ€Þ$u0“Åð 7ÑØŽ×›b,$…½AºTS_%ú—™P6ÂÛhFÝ}W§”ü·Ï›³ž¾Ÿi âÕ%ÎSž´@@<ÉEçy¾ª¢_hy3²ÇdxÒ$·¡‚ïÕ‚ìWâ!ÒÝâœÙ9íñ}ãUš ¤ ÀÆOÓŠvÔqóû¼Ã0`ËS™ßp dThØ[Œç‰Ø6 ²“Œbãk|\ÙXÙÍ/(ÁI@`Itøu\ƒ™Æ]tÁä-ÒL âA¯)Ùý]¨os–Æ©d’ Ó¼YIJ-¿’!¦]íêð ­>KHÊkÙÁ–5l,~¢\̵}Mu三ބ‡,ÒR2{’¤ ŧD p RÊfn:E8ÔMG“ –pIÁ¢…ƒX££(+f "¥0ÁG9y2°®uÉlI•Ê% ôi|t§yb¬fe*—lÖ1e*ñÿ¢L•–fJ%¡(—vtþY}š–¶À¯#ª[x——°ÏcŠ[AT#é¾Þø@ú`Ñú[ø‰L¼B7 ñ®H¡ ™ÕV±hY‹À̪‹y3°>L‘#×à 8ìã2˘Ne¦DÈäoÆ[ç›Ò‹ÎÖ¾š‹Y#º f˜`²X ê¬(Bã² »Pö¨®ÓGqMqÁ€Â~/‡ñ “ç+Ǥ$¸É¹O«Ä‚VkÚ38E a³–lvfŽzØXáz§Ò¦¼MLžQ#û§iñψ†0'h<5¾Ä–gÔšt¤ø3‡‡æà‘D4Êæ:ý¯¤–ÆüR‡B`JQ~ÿRãóÆ*G}ò¿ÿÜC5¥ $7“ó iíÐJAŽ•Âoµ&"]òŽèJx@K ]Œp3’ìQik;1G+ |\2>¬ 1®cuð”öÍ0¶£Ž*Ù:ðÏ ÁÖ…j\“–sxšÌñòzxð-c‚ô;Ú¼QjŒ³`€C‹lE5|…v:ì(Lá0E8ºC3õ5N§=Ioû#t¸ ÑZuÚ°A&ñ0Ç%À>ËÏÒÛÌï“7º˜©Ds D‡r^<òµÅ­A œÇ<ݺP^Wx2Òóˆ ó"Äé*˜à<£ÂA–\(Ôb¼æY<>DA{S&ÝnÀ’â!KxÑð–Ù¯"oc‹Ã%Mû°®Žh@ý­uëoo7(îžaò΄Ž$ #ëÖ@‘Î,Æ lb‘]Îæí2Ã)xâ"LK~Øc‡ŠnD¥‘ÖܺÅdÄpÙl ”£©,m¡]¤ ð žÏ©ð· ÿ4'7 ç—ù3Zk ͲîŸê‘µTÛÐÙoÑ:“Ä’TußÓ^BWñX<C@jô„µÌrÈ?uM Ö„î-jXÔážsye ’R¼€¬Ç3FŠÙ”_¦(gN¦¬[áIå.í¾D¦ƒ‰Y>ƒ¤$£aôoáˆ]úžÜ´o«Oª%×…""5dû>ÍKiûË“~‰×¾(Ù Î='E¥Æô-Tóþ³Ã¦Ó!Û:%}Öju-“E´BÍ?'qßÇ1N—Â/xx 9‹Åžj6š­%Ì&(ZÁE2®hwÞVãÚX¨Fl¢AË&2˜oÍCQ}tl.'8"¦W(¡êNâ5:ÇØ^ÖÂêP0(+UoIEüÁE®à¼Wäl<ÏÚ‹­q7YÁìJ ƒ’cøfäíJÉá7'n%±9 x}ö:üiÏO_}¼úbñ›“­ôÍ ž#Òb~eAįNöÖuøòA¬$îJò¸Ña 48IrðoAá„"qÐ~7H•n?Ãl"z|À8ðøUÇÑÆ!Ö0Ä.Æ™0Õ…1‹”AmÂA Áï#Kav8«þ#k²á;…ÉŽp,„Êáןi#ÂÁŸŸ1F™,تäã³E¡xIXzŸ0º­²ÿ‚»Wn!ˆV­º?)†8TT¢‡Áâ›QÀ\ n¨Ñ@z#ڇŸ‹mZ ¾.ÃX¡U.`4‹Ž[7(xiSÑë$±hà·ó¢A7J À %ûó,üî„„°ÙïìdmLíX6 ¿©¬¿þEhŸ+O^°D91+Lûô­¶6FÛ‘Q•1êš%Œ®¾Iæƒ) 3Ž^Ð's··sÔ/èúÅH¬Ùé"÷5¨Šy¬žDÐ*²7Ë–:M-öï&Óbo¯Iu=i²O2#©Oª"Ý ‚•|-JŸí¥y‹QQ¡ê„A›¦ÄPž Æc ?«ôO  Ÿgi¬5oEÖeílJiñy/¶˜!Ô ƒø;™HÙ•õv!’ì\"ªØ´­†¹]¬÷!}—ÜuI˜Far`ÁGÐ ->’šüYÝXxìTPŒ“ºaÖù+bG=N›nCã·.¨Ù—o*o•˜V‚Óâã¼R/ˆ‰p[ØëAË2°“až›ŒÞZϲ¹6~QGfsKaÚ,›Û“/uåy(7°ÉýلÔ»OìŽ u1<9:Ô-é°kªx5 ê¼ÙÕŽC…ŸûHfŸëIß#$ó>ô…Tbá8„bBâ…`æF˜Ïc-~ѧU,éñð|MJþ>°7èÅSØ›T±å¦­,?/¾vÊWC«×سùGääk|ìb‚®'RÒÎrQš( Î5ñ”Òþö~u½í›a´,ñsÓPõN_Äs Œë˜ÉÅ8zÖüĈ›ß+`% 3/|ø—Žþy³uJù„š- ÜzÑl…€±ü¬JýÑ–tx KÌo±qŸáªaÉ1š+ÑÖÙÃ_ÎNóv_¶'³êyÿæÓÙpêIŸúÁ:ˆÜï òÂVÛø“ƒR„#ê\‰ðSwèw­Œ©}3;Wg„#C¡þNpúy†îÑ~=N2Ðzo€ó.vòlTîô£tÿß5`endstream endobj 72 0 obj 5931 endobj 77 0 obj <> stream xœµ[Ko$·¾Ï¯èãŒMHŸ9I ä¶9>¬í]ié]XN ¿>l²Šìb?F«î† hjØõñ+~|ÉÖï¸ÊN ?ø÷—þôç÷®{úãôûIj§¯¾³àdüÓ“­< öí¤­ž³ñùÛéùô¯îËIvÃÏËSãÒ‰ŒÝËÇÓ§“¾šî¿§Ä¤{ÿÃI‰âCƦg¥é7>ùÏ“’©ãTf¥Œì[zÂ'ggm~më,=a!}£ÜÞúáÙÉ٩䬣 ’àclÃ7:È <(•à„Èðrd'geœÐmLw2}cÌÞÙ.*ðÞŒìäìEr¶áÑ6¡ið3mŸ‚bƒö¨q XÖ8àKÛ¿Û¥g))|ÒXjŒvâ~‹Hú«ÛA$™–òäŸúêw±³6ÝPf÷Ú×°[Ö¾¶O4Ã8ÝSê_fÝF‰Q|ún:¶!>律ÕI!ÐÈ„l‡5“j.¶…Ä”^)ׯQ¬ _;¶PŒ±ê—Y·QêEÅ6"î§HïÓÌã3´¹f!Õ\ì8¥'ç2,Gÿ{Š•1Ož£q_Å8«~‰ue‰bªØVÄs*)f2!Û`ÍRÍÅvR$—‡R®^¡X]dp=ª‹ÌΊ1Vý2ë6Jµ¨ØFÄgE—r-„Ê£ÝiWí[µ\u²ÓzªEœ¿³þX>¯¥(ÊѺ(ò Y‘±êgX·Qñ(ffň;Ž1•Ò.-}V ”wÕ¾[¹\3åoqeE;ûSù¼b%ë“8ÆÐ–á 1ÆXõ3¬Û¨x3cl#âî™Á2ÀVÐjç·dµ¥|5WTÊñ\Q–+¢]Q1ÍGå’Œu¿UÛ Ë¹äFÄý3Á3-›VòÌDË&3«™‰ò’ç’!°\튊Û>ypæ"xž1‰ªmq7sy+âóh7*Êf,nw»t»b#UíDé–¥|}øf±ËÖÅŽÔ„¡A0BÃò*âAÑVJä é°A5z©g§õò,%é"ò,&é"“lº ƒÜV’.ðÈý"½r}E9ê"“±êgX·Qñ(fÖëˆ;fX>pł⊑ML‚àLÉ]± ¸b„r”bŒU?eÝFÕD1£ØFÄ×k L1Ж)Vl¬´fL‹ÿªbäEŠ”ƒã¬úÖmTpG±­ˆ;*SL Á+61 ž3%ÿuÅЫ(F(G)ÆXõÖÓ¨Ü=Å6"î~R`¼`'hߪM£÷ü^±“‚R¾zR`%½C(GÍŠŒU?e=‰ŠG±xRðfÄÝO ŒÖì¤í²6ØIÑ–”òÕ“‚ª¡˜ƒc¬úÖmT<ŠÅ“‚7#î~R`… í²6’¿Be$…ª”¯žÅÊ‹õǾB…¬úÖmT<ŠÅ“‚7#îeè¿2Ìv½ ó’_:ͯ ©|õ¤ *F(pbŒU?eÝFÕD±|eøVÄA± öò4„š?ãŸ_úîûÇáßs ~½?ò?íÈ.æ¤×àMq㱤?ßüòõ¥ÿpûü¿ÿþüõËåñ·èj|q]G:åB÷øëéü!?Áí†ÌÕ*Ó= å0Ax0!=BOÜCP›äëŒæƒÑ髟ÐüDì@æUs¼¾b®q!üUfé¦ ªð×`:iÕBœR]ƒÓj¨" ÆSšBçךKû £_1m¯oǘ6Ø·c¤ûÛcœVÞÅa÷Cš–FLŽŸd/~çT7\®º4î~<ÿýWçœuçÏ5|‚óÓÅœÿs‰‚ê¸1ç—Kd ƒ:¼<ØkLVÎ6>ô—XÃPÒœßÅ’«RÊÚ±ë‡øÐ¯Õ|ˆu(Pç¿^â$çãb~þÊ+û9tÒŸoćj5îü§ác¬HÚƒkÔñ+ú§Çœ‚ºB÷ ¾¦ÎùãÙ_ÌP„bü+¡endstream endobj 78 0 obj 2056 endobj 82 0 obj <> stream xœí=ɮǑ>7 ŸæsêÖ¸K¹/<€ä‘mòÀcðAözIY¯¹IE}ýDäQ•Õoé~3>„ÈήÌÈØ·Ìj½ÞŠInþ)ÿ^7þÕoŸ}·y½ Îl½ñfRÛcX+pp½Q^ÏGeâõæùæoÛ¹Å?ožÑu2x±•þzóõæéÆLvûn“6ßþõiŒÙ:•fŠôÌû„¸uAe<¤õmtO-lî‚‹å)޼õiªý Pã(Ð<ê@­ @l@ƒX 5"šFhæ0ìõFæÏ埫ãö“G à›)l=ÝdQÉ­²fò6Qa2jûè¸Ù½Ù?ú'JPoݤq®„²>lÈîGO6;™gp‡6Gê2éf0 g|úhó?ðçþª"­t[…-Œ¶ªŽ®ë(ZÀòº!*]Fi]y*÷èÜ\¡p…WÞ!FY¥qÖ¨àbûŒaq\`ȱ§ø>ý`‰ëý =?“i,ˆ8—y”GFeþk§&CÆlÓtÛkÏÓêU)ˆ`ˆõ&{ìÖ{)0<ŽëxÎé*x¤q&ij¥’dl µŠ<ªÚà4µ ë¨UÔg'¬¢¸ÙªiÖ^Þ*2dž{ŠïšUÜÒEøo½&ü/£²¯ ŠðßzKøßžâ¿¦^Ézsqþ,Ž 9ößþßÒÙüü1Åúò([ó*ÙZÇd›5Î¶çæ¤WrÊHzÔ‘Ã㸎çœ.³ê•΄x¾T<õJQR¯”FÍs¦S-5­»Á+%y´(‘Ö7o›¡]ÖGœŽs|g´øÓ>êž.¹›.äQàñ¨KüjšRŸŸ¶‘¹›¤È}aax×ñœÓµn#gBD©|¹[å·ÿÀ¿žl¤BºbÒEà¤ÝÒ—tÿ(«A`"d4óHªŒ”2&!ÕÆV&"d…UžçÕ«â‹T|J:Â†Ó Ì—éŒ:6H¦ö°«®›kHQ:*W ³¦ØžZGWÖQ,sË‚,©+e póæ–]ËÓ‚QYÉð½JZÐ8•PÒϨ¬;TNUJÌ9-# º¬m}±·o‰…Z1?ÁàÖ #yaµJ\â·EO¤êãë6V.'\Mó¢.ã¼¾>ûäºJ—8Ú 0O|#EŸÌ±:.±^PÅ©Xúäs!>¿¸È$æ<—X7LªTLËú$¦ƒaî©@©î‰[îHayP1§Rß$Á3!^P‚Öëäƒ|Žïu,eŽçÚMFàdºGËÏòÊ›d×¼"óÈ +‚Óqˆ/§¬b?Ñ=!]P6Ùn­ÓÌ–q³sëó‡ÖYæÛóÓþ°âÙ ˜’Ãê¸ÄzA§bÕÞâå$f¤dÖTÇUSLJiû(ÊÏn°¦Yžd¤xPk¢8‡ørÊÖ­é¾.nM <»°ÜšœãÖä,·¦öü´5EnMàß6»p\÷;Ö ª8ëÙÅ}!^RbÙzŒ.>¸Ž}ñ»5¥P§ZNŸéSÖ5,Ï+J‘cìÉŠàtãË)Ó«±éž./›÷tyß>¢öžŸötU6-oPëé(NÇ!¾œ²yÃ=!-•Z¨ÇrÛ< ‘þKE÷} EáðàÙÔ–JfGoy¤>‹˜TtÁÃ÷ÚõÆJ+öŒ2 {U_ÆÑVÙѸÌ_\)áË¥b¤ã[%&: sËñÁ±N4QÉÉÖ¾¨ >=Ë£« JM²=õ®¬#[æ–±Xñו9+ªpóæ–]ËÓ‚QYÉðͽ€æ8 ’Œ¯ÓŒ¼ƒ-M›6nM› WFÎi(r/µ®–‚ó¡<-”–•u9”¡|Èý¿ W·ò´`TV2|9: ’Œ)”æ|­gru4!…7WsmBìãë6®9cÓ€ëúÓ¹vYÕü×£ËQÓò7†Õq€õœ*NÅ ;âóËIÌG‘,¢DÁ6.‘Ï—'EÇéC³±öüdŽ`ŒâÞ†y‰Ã긎õœÊÕ\á\ˆ”XÑå¹)ÏmL;nc*rÓ'»EÜçw å'-—·1í¸Et¬çTq*Ömì¾/ocÒsS’ëJgݪþ»>—'s½jc- °ôp6Ö©c=§R®W·gB¼¸µ«NEWÚe§:<޵K@uýé+O<Ÿ8v(ÇÚÅ¥%Ösª8«6voˆËlÝ8‘ ä‹Öœ™­Ã†“ð»Xçë줕rn É96½sÊ/¶H’X£@¦-£ˆ’_gF5·äE¤àËÝï÷zòÞ;¿ûf¯ð“Þ=ÛÛÝÛ=àiŒ‰ˆj´†Lr÷õþ ÝÖʇI¿)+þñèOH£¤?yÃ6¹{´·“Þ˜ÝóýAMÎyg2Ò‡€¥®£ö»CB.F¹û‘ÌzD­8îP N²“wBU ¾Ã¹Öz§pòA¹0¡œÔqRšòß{µ{ t}Û†¾!áQ×:G¾|Þyó8͆9~’ãA‚6؈ÏíBØÝ»½‚dYÜî Ácp³Ÿ¤RUN˜Ë¥ôPœþ+1\CmæBxOéz¹¶Á^øq¨û¾@zuLÌ+×´öر|•÷ð2ì®ëã@‹ ë©~—cGM[ðx”MBŠ9E Ì•wdÃ'!Þý°×Iœ)ܨ€d«Òä‹®ß@š‚@ ZÕUhÄCiTêÔצ@ôMRVwW†: ›§¼F$tÒ³GÄä  ¹OøˆåØ.$žÌaæVtàŸl¢Öt¢®“ÞìÅ$!êÚâ— U‚Pá…̹ÅA#*Àä‚ÅÐL”v#L™ÉVpT¸ïktÄØ…ƒŸŒL%fa©VÄU\ÓpC¿/CGá@k¥^â—b§÷vÄK ɯoTü¶Úf?¼H óóß‘-,Ý»9xª²å«͘†ü—“Ðq¦ÅžVµàÇý!ݨ#˜Š4^ÀÃä$jLódcÇ´9Áe¡’Ü Ù÷è-½R5˜s9Ü÷ÿÆõ'°0AŽ1µÉ¸n…iS™}ÍdR˜Â· uö±]-’îƒ'0ÚõćfN=E›åêé Î0KJD9>|›2˜8 ïÑ“h3HÍ£LÑà¶Þ–[¼­† Ÿ"ø­¯ÖR‚æØ(COÑotr*Ý£e.K&''‚‰#r÷öx¿âF˜aÇè}pS3| 7ž'‘Lc˜t}ˆÁÖ¹¡<Ø ] Ö{ äh¨”á!ŠÔãS{`às¬Ì!Mô™•“@(%h£UZ©ÖUP¼kÀï{ ú ƒÊOÞÀîbb dR䯑”¬}?´ŒV`. YÄä%Ó´™º×wmÞ7™:$Q¶‰®ÒjD4ÒmžæE.leÑ›=ä7Ϊ\‡,‹*þ˜:=o“û…Vç5Æ: =£©²_mÀ‘p‰Õ>¨’ žÒ…*bMšRóS#±OìØ|3¢É†:×GU”#V]“$€n;ïÁT!yíþ\LÏHõ“I÷BRÒ_#´T‘Fg,%2úI›^ëß'íñËö¸¬–1Å1•ù`¥ê &b¡§?ìÐiX𦫄OY^R6“-U[ƒôqK $!ò ñ*2‹ÑF×ôÎ6¡E ¤j7è}WÕþøeûô‚ö`œMš ¿µ49ä†gÒòüÙL Y!Kê®Ý¹Râ KU´Ð‘4¸~J©”UššGˆ–!m;aÕ: ÀLŒ<î»\Á%µ™ÁŽí¨sŽØEƒ]ð¨í_õEï3ÃŒ3Ĭ@Ñ0*½©Ì%¿› ×y$hàVò ùg]ÿï X|Ȍқ\¹Á4¤¤¯‘A! ’ƒ»§<Ü#N>¥¸mÙ¬:â>\ÊEÌa¸.Jgæ–­Š¼È~|˜‰VÝT… dû[,ÇBÊfa/•KJFÇ¥„³ãbD¯Õ!+åÂcŒ]Áicî^Ú¬€ühVVÌŠõ;Ö3_a¶êÀ É­µÿ=+š‘NàR™8Ñ–øϸA![–3þ‚yˆÉ´à1Ü``¤‰KxÚœáT? q$»/»NènhÏ"%‰^‘~i© à3Ø7-}Zjû#SÇ2Ýw}ß”%È ªö…Ð}D¬ÏÛ)Gt=7]ËÕ{IÀÚïoYÕU‘ZdòÊЖÎ&él¦ã㸉ú,‡uìä~Þ]ÏÔ‹ÅÅæÆ×jHíNdž œeV¸…ódŸ×“í—t1*¶Y}9M³a"(ƒX)¨iï}~º•IðÑ/ hA&K›úK%½?´SÂå¹DÜpŽ ˜·ku¹tJ10B ðØ&¥@–ê˜KÈLÕè K©z•lû˜R*$ȸÊÁhu%(xWº¢Úƒ“.%¦œ4u¥ûM§F¿o{ŽXszÀN¹ÊɃK¥ P0\"¢Ë~"é˜ÜŠOnɺ#­Ao(šÄNH™ÉÇ>Bj±ç’‚ö#àû°ÑÙ«W”qƒ=(¥ë©„£xŽ ¶£·Š-ñÒøëmŽb{ðè‚-JÄ|UU`ŽzuÜ|òÙæÃÏþ¼ýþÍÛ¯7þm+7þÿúä/¿ƒ>û¯í/6Ÿ~¶EH©jxˆŽÅõƒã4– w‚3§,¦úøÝéªÔ.Øfßjƒ•k¾-ðñ^U/¼¡‰›>v3Zó±Ba9}¦®æT7žª/Fhô/h̲ôüð´ŒEùr¬6lŸÍhŸæz•Ô°ƒÐÞy¦€üwìr÷³ý“GóÆq:ß”¬qV6ò½‰U‚Fu¯'C_š˜âEî4~Õ§ôu)¼#•k\á0øò·(¥÷uOl‡_<º²A?2ïÚ~F¼0€":¯¿¿éK‹ú¸q5©³)>s {Î=ƒžŸH, ž˜£åÀÎsÐðôP A‘Mªb.)p£è:N〉Én~UMaÜÌ©‘ Öi“}¥‘ÓÙì¢Â€ß“ž«g)†p0ŠŸúñéö> ÐzŠäúÕp²“œÖð÷–h$¹Dnˆ,Ýà°ÀUÈÌÙÖ GÎgêÈ¢€e³o…Á©#ôEI|YjæŸíK»„Qª@wÿvÚx&ÕÜÏ1>¬ôsÒ»¦«ýiíú9¿9UâçÆl}ÄúÕ?ÆúÓi ¾Èw*M1*§)·»ý‘v,³¯i±0ËNZÆ{üÑô kÇ;XsÊ… S…Àzò“~òK+–‚K WœGë¼^ô“ ×(Ìs7ZÆÌdK\¢êòö$)¬ð¨tðâD&„§iSªAàKkèu¢ù}7L|9à·1ß[ËŒ°œžÈÕC<’Rβ×ïò)V‡ÃÓ´E.Ô³˜¸Ìbæ‰ ¹ZZ‚„IÉ\Þö©W³b•‘%û˜î› Žïæ‰!~w¢RØ«¢pêl6Á¯‚áêY "UÌ8cò]Ã¥$=¾b·ËºV¯°¥çíú笜%gÙXåØ˜ò™¯_Û8ÀC1¸e=ïâXaÝ™·{—M—+~‹¶ Ý, ü!#Oë’öøãÚN"RÔbr¯×`¨ÔÍXžä>8ž¸k’º½âˆùñú§º5üÍsÀïslëãÒ+¬kÐc|[úŽùŠ…—‚ÌÍí«n:!kme£Â ÌÊpRé1æÖç«—QÚíiw¢¢.}§;TÔ8çrµEÖÊÛTÔ©ô“|?æ5Óì .ØÈ.Ü'SYË‚Eùö·ƒ‹©\?»ôŠÈ¢‚ßq}5Täžðß‘obw:Šr›äFÈHïg7[Aߥ³«Vã÷"Œ¯o5Ü÷½ˆt›_Ý25Jûs~j„wžA[iÆSûw„é•VRn¿ì”‰ÈBõŠr“ÄÉ㱩£k>Œ;r÷®sÌOñ£œ% >¢kEnN«™ áÁµtìô£\Ñð^½*l«ßNb]ÙÞÁ,ïx;)›ÄŸãk9@¨r­T'on_¨‡é]DR­Ü½}Q.TŸß¾ðëÕû,.ó¾A/ÆÉΣ=B?¤¿©1aþo˜kÃ$Ï*ü!Å8«êŸŸlK~²}À_ÞQ",jÞYÝOޤJj|AÛv¾^è–à ‹rJÖ–U“5ø"+8^îç¯8$Ïç’i¼|PÒK|c[˜TÄ`–‹UI­{¶@²à¡÷%æ˜ût3d”ÔÊàëêFÜÒ!ÄIS©þk´­¹Ç:¦oñâŸÕrŒ€§’bü€Ž{RxÕ§~«ð¦2Rx |[®·ÃÜá1¿I'ñ†ZˆŽ¹;z§›½Z°5§Íræ-—ÌiÞdþŠcÎ/N:ŠÀ¯˜gN-ìé·Hø+wÚb, Â~òPÇÐog—ãOõ(‰³­µ¤´Ô ³Oöv\.‹ì<Ř½‹–æÄÙ!èn…!µ5¾«â©®¤Š¾VÑU×¹q’Æ`®Ø2ÎÛ–oöÜ“\ØÀô.°d|î†{³÷@ &Ýžûý›® ½Ûc´Ò" [ž¡øÜÛ€t¥ûXæþç<40À¿ñó;“·ŠUÕ_@ ¸õë0c3+?2þŒ¹v+Tïñ2Ìe0½[—t¤â© VûG.m€’Oöý ˆðé Oÿ*é"œüEOò|--Xyoë!fX~pR4{·ë¿]Q/üü=0ÒqDöa‚J¬Ÿx­ü0‚f¿ú0»Ã“d©¯ì˜”zUá­:î†?r°¸´S4ztÍŠàæSÙ»õÍ òV”‚ì­ŠòÂÖ°Šˆ‰yÔ¢–½6îÎFƒœŠ¦Ÿ+€oú쫘—Ÿ—àWªóÕUÖl)¿ÃaïÖÞüåȦÚolD~ž:<œà¿ûÐwyzú[ˆµ+ïTÞµk¹êVQ–ø?NÁ(È;#?÷-î[þÜ·üè[J!`XgÌÉj3!å‡Óþuuendstream endobj 83 0 obj 6391 endobj 87 0 obj <> stream xœí\I“G¾þs£»Ë¹/v` 8Øž›íƒF£ k³¤± üy¾—KåRÙÕ‹… …B­®¬Ì—oýÞ2óý5›ø5£?é߇/®>þÒ^?y{Å®ÿ„¿O®¾¿âaÁuúçá‹ëÏn°ˆ;|3yæùõÍã«ø6¿¶âÚJ3)q}óâêëÍŸ·bój+ÝæÇ­ð“`ÊmmÕ¤bóÃVŠÉZË«ïÞlwj’Ry±ùh»Ã¿“vólÊÍ;|ÇõÄß<Ýî4^R^olõæ-ž6iÍñ_,RcvópÞøÖT›§†©êpìÁ±ƒ5bó{¸II.Û/ËawåãLVõø ^dbò^ ¶S:ß_HU}º#Šå¤´Ì+µ0Õó—í]Ÿv€×Îbí?¶;6 ðÊ›Ío‰Œ3ÆÕL¸/Û¦,w“ÌOZÉúóNOZv<Û~{ó—+á@*#%¸¹ƒØ?(ÏΗx^aš¸Ò'笔å6¸ƒ”,¼:x~ =²“wZde·"‹§[áN“nóÍ&l­™ß<Þîž;)ÂéóêwóФá]µä1±Cör#ðßá¯ÜjºåÇ_JÙ(½ÔùÆŸ*½Vq]k2¯Òt’†rdÖžçwó­ÞsEœåfóÍv¾ÀT¼S |wüzGÚ$½‹ÇÞàØÉ:Îdm5°4UÓ* ¸³–Jè\Óšß ,”|2º²ˆ·´¹›´C%zA‚1ÆÙJEg¤Ã…€<}¥)¯ð%.ƸÚ|UŽo®”•-ò;rà©ÒÆb!)Ÿ*Åÿ®2œ_WÔ'’£85oÄîɲLÿ¸åëHÅÂ¥¬ ¦¯°+ù޾t^·Ùá"Ø”|:¶Üo~Šïxç`ùÇãëz£—£=Ÿm5ÝÍsâ\3mê•å ¯èçHáîËót= ]j+‡ï”&_ïëÌ©pâ›÷°vòÎJÐC„ϾcÚîŒ%Ÿ-Éf‚ý0üývÖpzM9P/!¢ •ÒL"s(hÕ=kªöI[h§w¤ ‚ðY›èjýë|'…ž¿'ÞÀË0ìÏ'¬NIÄ'á;«j3Ð]IûmðOpÁv†&ñˆžCÙ¬Š>Ú36Ûtp3;©]Pä}~Šš(hÿ×­ÃOþÖ03´¦.BU€<”Å®`âÍ>:x:]&gês*s/fC´gº FÙŒ(¨@˜Ì»ÊÍ1•@ªÈב¹ØÑV¦ž¬TÒë¡î¢…O‰•6„Înÿ&®(NF Aºúã¸(VÛYÙkÿ…ŠŽ=Ii‹V~PlaŽ6Uà63ãÁmY\ëuví™ó}cÀšU綆 Pejc¬L€ü„ËÐ…žÝâg:g©Ö}Ô„—Ä­`/:Gâ©g!¨¥ „‘0*7{;KQýh”BŠÑÃ\éÖÞ@-Ź*ºÓåÓ}¥€-¤P÷obNÙ9Û='7)›¨&½ Zy¿°7RÒ+Êðúù«Ä+gZ®Ä X]+Ü–_ÊÀÂÞœµ¡Z:3¡E»0“Ô>F!¶ò ò¾‰wš,à†ÌÐé1жØò¤ÄºÒñ§åuRlÏÇËKÕö¯‹ß—o[¢Ë!6a ]djjL–,¹­Àý¼3ˆÈ¦6‚,tw`DÍÓ•öîͱ’嫤À2Ñ¡üjË‚ÉHSW?{®FàmJ_¥ðošðï&s}ó׫›ß|½ù‡(i5Ù%£ñP°8 „MñÄP~žzoÂÁˆêšnǂΨÀM)=øÉ!Ä1NtÐ{ÌY;"û†M:øéVÔ¡­²ªÆÊ—À²Í΄ek¶—Œà¾Å~‚Í`þžˆG–[BÆÅÞHq~À·PA鯨ÊOlÊ[Ô6(\t,þ<Ï.‚ ‚wIHŠ»,)Æ^râ†ßmLþT!Þ1ÎèœÚ>œA :#ƒVc†>¢KEÛM‰˜I×óæOE‚.Œ,œ¤Gž‘¹Î(»”…0ã( V03sÆØÿ–Žuյ̾„„¦5É#fÃX“eÜ8³øFLÕ€Z˜Û=;¥ÄÎÉ­ÉÓj¨°­rJîLQNwH9 4ÅÏ[ ÉÜamD’d›šal"H/SäêÑ1H`Õ*¯ÎZ$m¯‚¹*ÏÜ9ÏâÉ^d<|>ˆïÕQÉHc_;Ò÷G8rÅåÂØx(˜ÅŒbc¢¨S½ê¤0'Wïri˜&Tw"&ŒLC’?ò•?û‘vºÙ«í^4^•[@ˆH ÅQ½»)3†½¼a'ˆº ŒØEÑÚ×€-ÝØ"éΠžÊN’½U·:ÜU)ÃߨÙü—àà¥K%:åcΘw»¥.ÚÀ[…ÃôP‰Ëª†÷)Õ`œ ¾,ÔµçõÇEaOº¦ÚWíÿ`k9rŸË’ô~9t\ t˜!Áf-©²p6†ÖL‚pLþVÈCp:£×*©H€Ü ”ù'áSrÂî ¶?@2<¡­ðx‰œ3ÐϨI—ÈÛ‡•¬É&Y{¯kœ0T&aEÓÍFË„öE*Êu]özBűXëõ)ëH%F´k6±*Ã:Z¼g r /[AiÚÞ’ÅÅ…¹`@£ø_æØV×Aä~>AŠNŒrÛc€¶æ@P­I‹sY€ð › ynX“OBMdÿ=Õ\Ð\û{;Ţжí3µ ¾%Bò¸xl…ˆ¢7}k±¹Øº4vZæ½é¸®O£{qkÓ6¦»S Õ(af¬–$`Ý¡dsšZ<"]ðB0„ó—¡¸ä” 8®™­5½é8–·n9fß“ž®GÊ^ô”e=-ìt§É{A[!âH=]7@èiÇpÿ‹7-Ã:’yêi®’ Dü¾,ËÑmzËŠÍÚʬ>\ÔºÒÖKΉӈŠ5f%ÂÜÐ.‘Ë%fBõ÷P#r5Ú(gõør8‹á>:JBÇ×€…iÊÚ}øô‚ºï;nãªõŽÐôSê˜þW5ñÔ6»r¯:ÍÜ-jJ„M„¾,2­¶Ýg/ÒâáFÓ·Ÿ‰hS2€¤P‡˜¿ïçÆÒ„5v©Žq;yrãWî¯jÿ°ÿ)õé¶Ý~ámyº¨‰Åaõ‹ܽégk4± EJz7±Yr¹Î¡ udç†Ãa”NÉR}•šk´{ù¶oiÉ.*fÑ ÒZÍuØ¿\öQæ98}JéxT¶/¥¶Rd4væ©Åï«Mµ_g¥ 4®îo»‡. _öQTIr8ºfÀ`9–ÓOIu1Q¡¦”Ñœ‘jâ±Ü ž2Ì7 åºÉøúC`fvòúò#*ÏHªÔBa¤9ŽÂ­;øò±ÿ™õê9Û=pg1îµgñÿØYøÛ³Ä{¼—lÏje»8« /F,k¨YÖ"…ª°KÞù@a·Í{oqn°xDŒM„ìU4¶#-žAV0b’J‡Œ¹¡±ìˆë‡Å•g'è‡ú6xœ¾Å¹‡â±×øÙ–Ü×&Oç¾ëb Šz0„@BÅKÔcÖ.•ækC‰]o¾Œ£ÐƒâÌ›i¡¦ÔßLÇaé¤÷G&!bY»œÐôtžÖ3|BƾSÃH×xð.Œ ›_Ì`sÁcßi8â^Ý31éMýЧo·£r›°ìÈf‹ðŽ‹\„§Aðû2Ù³,Â3¡W‹ð|®¼s0wY„§]Ót­°vP…§R^ñ\…çJ¨Â„ ‰.Ë»/.2·‰MÕè¨&«¤]˜M¼UÞö2Î-%»Ÿš8¡aGžš†ujÂçaÎA;-4`¢¨oGˆl_G¹i¥;{º4sœù‚®†œÃ«ªaS 8Œ Mm®»¸T¨ù#®XêµQ?Œ9¢Ió†> [—4A„Á‘cû1LTÓÙG§¯1¬+ÎL¾öÎwÑÙŠí­ó–½TãeÑ:hÀ „ÈÓ › ‘c_Ü9p"çS—próÉÞa({½ÒRpŽ Ì;Êì9lokãÔ¶ÆßÈåÁPLÓÂ|³å  rH<ScçZý”Bå¨ßq¡teÃy"r¾Iìͬ=QåV¡ÎúMŽ9ìäœaív—ÈŽÎQ¢Û†þxÌxnžwð¬½èûýœunžwÎY?+Ï£šƒé礖åàEn§×Ú ÇÕÿ»°ÖÖÿ瞊¬zjçr•À3{*Ç8hújNv~™à]3tüþ|ÊB—æ´ö㢙†—ñˆ(3íàשô!8é}'v SscR}Ô„Äoî‰Ä:«ä\×­”aeLPöÊ‹HÂ`–zý]7fÛ5Úyx•(µ%ÛO¼‘ÛÑ09 Õ¾LöÝÜß F6ç<£á6eÜq>î‚æ÷ÜQôÝÍD½JµåaþCS:ÿ Å¬ü±_‹Ä’Ð8ú¥n®õž:—™éÇÉ´ÈÿÇÉ–SH=#L Ó6š&£ÎDØÈŒ¥lX3ÄCqz5¸ÑÏ?wþeÙŽo ¡ëmŸ=Lp¨»ÌKi>ïæï‹ ²•I]ÏIÌvw¨mOe±êjIùôµÍ¾j©+q‚±q?¾H8Ô]²ÏoÕh ä˜f¿²ù¯GØÖùIz¿å¾yþ©î'C‡'ùY_†æZ‡Æº†•ñ‹ä.üPßÑóyïåÐÂ!@ØQuhXev¿åÚÏ® hçyŒ†á‡àNœÇø9€de^£Ì½ÑKx¹JôÙNŒlžÑï‡APÅQ £š)¬*%ÝÀH‡†\‰C‡™²+ŽlÜ&*º„â vùc«ÕôÛhÖïTÿ·Ža µìCiÀÆÿ²4@þ7iÀ"6‡ÓaQ¶³_¦ì¸÷¥s=˜ñ\~øªEµÝðÕ—´W'©jõ{Lšbà\4/¿½¤þE),-¿埅ØuXjS}êT`Ú©Ãñ}à½4b\Õ[=ï¢Å¨³Î:³uÖYg£róÂzȯwH+}öhÅç7W_àÏ¿šEúendstream endobj 88 0 obj 3998 endobj 92 0 obj <> stream xœÝ=ËŽ$Çq†kÁ'_|0Ðm±Ë•ïL>H¶hØHËš›èþ¸«õìƒ×"ÿÞùŒÌŠª®ÞžRÄb±½UY•Q‘ñŽÈÈonæIÜÌø'ÿûüí“ü/wóêO曃¿¯ž|óDÄ7ùŸçoo~y ƒ”¸b ÆÈ›Û¯Ÿ¤§Å“7NÙIÃÅ·O~PÇyR!8íÓQLJy!àâI©&øÝQNÖyøX)ÏÊ¥o'= 3[}øßãINRY¡OzòfžÝá9¼eòN[Ÿ‡ê`åáqgïÓÌR¹Ã»üÊÿ¾ý€[xø’)ÌA ÜržŒáæö×Onÿá÷ÐÉLZ#¤øS0Õ«ßnoC 4LegÊ8†)Ë)99çcŠø;Û‡Rã'…pÌ7·/oOzã­Ò:=ÓÁ¶ û‹ãIMRJ˾ÓOÎ΢~ï#8D¸iöóìËà ú÷JNFëví-®‡…õÒ‡õ«wåöËŠ 2°]„åp“±ÒeL9U‘J^à|@@JD´âôZMÆI2úu[š—p_ÚÑîŸðö ni`(‡F¡ÍÔ“VF‹²Œ=+²p Y§_ʬÜZ 9;˽+ŠÄ*÷­¨ž,]ѯŽõã?Càf„ñ+&c€õ€J3o)Â`5ü4O‘^FŠˆøÕ…Q..™Ÿìˆ"­žKïLŒ>¼‚ÿáÊd&s¢À„7Ó|fe>éD|«ÖøÞøª¼¤NøJQÆjÅ«ùÍÄNwà;µ "Óâ,èämÊF×¾—Pë&}s@µ¸°™j"Æ”–c(E^7Ñ‚cßÒÔ¡úQº\¡n仺7Èà“Öþp{ôz’³ŽË®,{P„»âR$г…çêÃßO@R°æÁRÙ9À}‚·Ö•¤Ê¥¸ÅŸD¦b PŠÊòCÏŠ>óö¨@Þƒ¨À§q%´Dªä¥ÔA"ñ+aÒߎ2Lû¤"Çñ™LFø}ZùÃ$[Dc€yq¡Õl'Wy‘yYD¡èÕ é‰ôØhÿ{œP):*®ÔÖ¯’$¯«ÕQI%j\¦×8" ÕçeÄûž3he)Ñt3gÄIæž Ø‘ô3J"í›àf¾¬"­¡SDÊPÚ(P¸™A¿àˆ‘(Ýò.ÿ‚38/€$~ž&SÀZøS©(åšr^~õ‚=Ó*cqb œË… 8µRM^÷Ž¡fî&w ×éU™ÊuA[¸ñýeµ&ø¿£Šo<¼q[è®l”ƒPäÖ»žguú<³†›*gô3¬1·  Ágî>6á^Å¢ „ù> Lh¬‰uáþºÝiâûY{=§ZÚµ„KëE“ª(u™xÜJøù9.xPgÈĈt‡þ¾’\æÄO¯"²ºƒ9VÞjÀÀw²öF•1e´e¡3ÃAž‰ÈxÉœeÍo]ÍïßÀ;HRŸíoP3wÅ~&æwµ©?,F¥[T+1Ç“.ÜKÐ0×ó,á™3†¹Õˆ›ô%ªµÚVEÄr7h>@N%Ä[l×äA“¤œÞT•¯î­aï"/<ëuY¯•iîzãA÷•Ȥ¨Ôa§ŠaNU•Òψ¤2ˆ(H;TX“°=BQ_ñ*2Jt£¨)þuÓsÄÃÇ“ºTÙÔ&7^$´%õi•EßcQ}…p}‘Iq × wKɺ¹°ßÛƒ—£]ˆ£Ñçèí̘ q¹ñg¢Œ?¶±Ù’ñž^lÖA¯ú“9V~²<f{õ;â×mÁ £„úâ(‰ó0˜.|„®‚ÑQ"ûæ) ZðŒ¬Þ@à7¿yaB¬[ ‘æ‘vkÆž]®. t$·ñ":O¶H…°ÂÜ»?4}Þ¶ÛÏ©e¼ýÐÏ:Ã6ãº×ØŠ>©@ÌàÛ!jAàÏ,_upqÊ»9 —ÍÌhÒŽ Œœ ”#ʽjüf¤d†‰[dZñ.j0"ŒƒÇÎÐ%AZ=HJÆT )fðïÑ\>àWøD#)ýOåmt}{µfÁʦ£"¿3$q‚oøü,æ–“Jv'eçäáIXRW5Õ»…ŒZ ÙHº«£¹éX|eã¯Þm€ÀÔE"ö€†øß?£AÇ×SëUÀê¹¹øM+ÓÒ Rýuæ%nR‘I³ÝŠ3µIùЖÞü¾ê/ÏáK÷Èö û¢e@J\ŽÊ‹Rhpâ,€—bzPôŒ3ˆ=8¹¸ŒÅ¢Œj®F”JÀsðN1ˆ¥)W)´¤à$›Š•ú"[¼JôÖÏì¸ÉNϰþ¼L iòÒi}‘›E¦9Ò:²~þ šõ\«ðcöŽ'ä0¹ö¬õ.|rÃoÒ—Áê¨à´¾ppÊÁ8uHÿB¥âð[ĉ -:Gñ¥Ñ§pƒ Úõê ¯‚ÜÔ‡Ç&€pGq®èƒÏÚÏ»6ýKDgrVž  Ó<ç‘¶û2¢¥ îàÍ DÆJ•añèmÂÒ¡ý^5Ü\–$ Îók„fªºcÙ/`VA¬2öq…ZãtYr€êb'1ÆIFt&8‡$˜ø=>3Ãç€\õ’e\ ¤nô?ÁÚ[!Ûž ^Ù²ŸL<Üdhô÷“ÉÇü2ÕO6 Øa2±Ò£ˆu}Ð6¹»1æ]]Û.ƒD[î¢ËÒ«)ƒÌ q³“|·4Ä8€&ýÞ4^è3D^ó7¼^Ž'\kW¢m/ž-§¼–VwÄL 0Øï=âö{õ‹.-ÊO¸}»­³Ë”†úô$LHyCzðª?4ý™0Ú§ð5Õ­Ÿ4A jÖÄ$OdUb")æÞN¯QÞΟûØ<‚·"þÊ8Ewü:ŒŽ©„Õ2,25q)‰ùY‰Œ`#zÍ^å(ù9¡,kØ-¤ÉEÙímk~®ï{´‰ø³œÁ¸ü³œÁ¸ºGÀGeŠrQ%~دaH~”X‘Y =u.4gô7yÕÆ7l¥®YßM= 4aÂÓ%cào¶WÏ%ó°s´ó+.x êFM!®ã>¸NÝð744sAŸbîGPGOF LJ$ ª€¸)ÀО„põ‡ž§„‘aÒH†iˆ÷^ÍÐ;°:v„ôñWúà]ÑOÕUÝS[¥ ¤Êb¥ü1ñ3¼ažM©%J%ÊZ™Ž Œ#3\Ö2ÕW\.‰t0AÙ¡«ÖQWì¡ÕœÙ>~»l‰ãXjºiçé鲚¾.Í¢ÏõY™( ”‹•@Ý6¨n×ñ°se»²Ø$Õ}<铪O öv•JjÝœ);7Œ¦>¦ »Øßn¿Ö£°?‘PQÏï¶”Úèý¶ØÎ¬²³ý$Ÿ@³(tDÚ— ‡ ²±ËÄàV,cgjD—å~üŠ–=†°Ø²ÞJIF÷ÄÙÂŒpÉGß{5ÌÕÖPýŸFm—Iȱ"~î^ú 4;~cEà"³û@äû˜²Cî$ßöÄ‘o›`ù^÷Ñ{yö¡>šYé=qŒÔ&àRøûPWš6¥à$âè<‰Ó¦ ¿n7€ÃŸž²Ú 5üT•Õ^÷P}ïeŸ÷a–D.ܾ®¢æj³»á<ºmò 5u»½·ûqmÐ<&·ÿEÜÃsûPÄ=<·oÒ1h~$ÜÞ,ýø ¶·‚’&íŒïzP¤jŒ¯gCݥŌAœnÏ:ÙÔÎ4^Ytvš±3ÍbßüZ0® çÊîVw̨9Äm$~±ÜÆ“JJ±g†n±•Ô,±„¯¯âCö’Í6Œ›óðÿ­R3Yí‰Ò©MѦ[\@CÓ©€ý4‡±@sEüôzžTA›ž'ÍÅÓ‚©c ±\²;"©­6r¥jƒÝ7‹óâ:Ïf’sW¨Ûµ)CIû‘ü1bY2Ò¥°uÆZ ¦R±KÀ1ëH|é5–›3’;ûÅ˽ìxq¬ ëšì ©Ð>Ýöm ‰¯ÖÒcA •]µô¸ôÀç&FNe›÷l==MvªÔ­ê–eÈŠVFac”Ïôl—§¸ÌÒÍÙî‹6L¦ôâ82MÞOÅ|¢/Í”l·nD„£Q^%žÆíœCk=R ?tºË[š¥—gHØj>·ñ¼ß Ä]¡¯ðü¾ÂÛYt¶o1SÊØjk—F5özÝÚ,ƒm>Wó´yël5-&¶Y>ø&«¤¥ýy± FUXRàvì§Q¢6êâ©÷ü’åmr‘&ë@áGc¿—ÄŸƒ`µ;põû‹¦ñÁÚ=^4³å°h[A³êø ?kÏîÜò}œq\ÂàŪÜðSù¸õ‚1X‰^ØNà‚ö¦{ ? `Æ\ë`éh@C.Ͱ{$<+ôæx‚uc+%\ì].Wë¾Áõ2ÞÅÍ]º»œ›\Kv±“æJ_ {Qä;=L·ïöQv¦Û%|w+·Ñ¨×ózÃ,‰ÊgÝ#[[úí´ÚKÞîð·—QcÓYàÅq)É—X[7­D±8;ñùB–6#_(±Š×3?â r3¦õVÒø½LÀ–x.¸%¥´åYr¨dêêþ£Å¨Uݦ붘•bÿ!Öƒm_êž7ÉÙHñN`ºú–;ç#I ¼S ®î¶Æ~Sãþ'ÙjiþX¤?”T2UÀXÍ)E­ps©ÝüÎ’Ç쓳±Ó¾'ÂuÕBä TÔ&lj·„to\nS¾-mêtü¨bö/îÙÜ$þ°_{“Žìgbì± Æ¢IƧÔuˆÉ2yžYrÕ¹¯Õ–.ª‘ë‘Z/–æçªŠ¬4¯è.y²+Q·ug Qi +“ŸÙX0ëX´eÛL±´´Ò»cIÝëmR÷&»ù¬ø .y×­Bı]5….c»Ë…Ó T'PSƒÏÿ)!Á¦^†~í^Çæ7Ö2„¸âú:míºÆ½?HöÒÊ“[JžKûMbö1ÂØ°‘ÅŠòäÚ»šœ)èõ~£ þ±ë|wŠÖ”ÆËà//¤ öÉÏãÚH擈oi›†øì?âAÜuûñ—Çõi˜i÷–\é±Y‹í÷²HÜv ¨íÌ—þ’ªÛ Ü2UOûøú·YòÜ÷ñl-wi‰;œ¹(y×8$"W7>çð¾dxî2_6Ãt=¦S,|5ÙÅÃqŸÔ¥Â¹öcS+ç¥ ³Gª?XQ0×.áCmm5î´Wº8—1Ñ…%ê{ó\˜óáËîµËHè:šB8@ª»;*içæÔ=rµÑlÕ¤Ü)’H!¯útÙíDŽ4[gòŽ2« \!ÂcÆÓy†f®ÖMØÒ„ú¯0  ¿T[¶ü¶úI|±JþâàÂõF4ñ&ô]êËQAß‘ÝÀ]3 ’‚6ÊFÄ®E‘âùZÍÚZfËr›¦)9î:44_I*›ÚfÚAÂGò"&ÝêÕå\kí¿ÈT€1зКƒ ÷ºAÉmYV@£ªüÄÃ÷NT¬œ4¨0¯Å`sÿÑL¢ã®å²¢o6¥@r»“f—q?t²èÀØi%ÍZr¥±]Š“«Ü‡/¾L§ ˜¡0V)›ºö…ñȉ˜ì}òòUÝ9'nÝS¤Í^.ŒÂΉ¶Šfâa¦Æ/EÆ æÜ­uê|±ub†¹üEêÞgÀ¦'Äü®ït”#Ùä1íl£ÇÁ¤?…€eÌ£1ñMž 8ux&º‹õ(ŠdÇÎ;êZ§DV’Iì¥VýÝûªÂsU‡co'¶íxNÞ9çgí*IýŽO¥­ÿZ ³Ò·`ë0ÚMªm‡§k×sä@µ9@7ö ŠÎk"fì sI™J lÐÌPУTöXˆ¸ j=ó»`¡êîf®ŽœÍ¼nн3ô’¶^—v›#º9Nf»6{Êö°~^(zuwÙÞP »ãlõ®n¦U·Ì{]öµ;GÓðÊÝœ€š¢©(GüêöÉoáÏÿº9”)endstream endobj 93 0 obj 6053 endobj 97 0 obj <> stream xœµ[ÉŽÜ6rì¯ÐQ ;Ü—ƒ$r³=@Fãmì eÃãòõ¡Èª¢JKw<’0°{^“U|ÅÇœ/8ËFô?ðù¦;üðÂ7__RYq63NžCÓ!VÞôør0ÁÏaÈ9|8üÞ|:Ȧÿy|™k§D£}úïñÝáýÁœmóÏ!3i^<;(£ú¼Öy—òÊ ò¿”óeJr¶O ²°RÖfìU)õ%}C9Àb#ºì^ˉ{-DÎll1Ö"f¬ã75‡ç°¢wo¢ºOf}fÁØé‚ã7˜-Ĉ½ÓÊ.::7d¸°Ï*!‘}Æ:Rå•ëÞ¸P|Ö>5“Êê?lìSÔ9­ 7#Rª§Ta†–ˆæ-Øk—ÄGKï‡~ Jy¡THF`Éø¾IÍîeÏÖ%J#}ÆÎP”ð å‹AçŰ. ËÓ=#ÁØ0$ñµºSMZ"r·à¤HަXa~¥¼¥TL-ŒÐ’ñ…z°ÚòÔ¨=P Ð0’Úžo2(Uî”ÆC·U¡â á¨ûËÜECbš1Øcz\¾O£ËxÜ(VNI¥€ë6¦ØDó0bÕMY£EñþûéÈ·Îã‡í‹.æ–`B©KÄÁÅ‚ï*Ž©„PÛ¥gûEÅ\+­‡ª|à âê¿Ú‚7V”±î–£×D9£èJÛ)ª…Îm%¥ÀØïBÅÂÖ—¶sƒµÂ.ö˜>¯(XQD/&î£gÕͰGÅ£˜*¶Öㆊ¥EKïY*P̉Pñ…°’ÀÄæ¹ÄJLÁÓ+VU1ô¢wRŒ±ê¦¬'Qñ(f[éqó>–7¬¦¶“8¬áX£ô«} °]õ²Ó<ÇYu3¬ÇQñ(ûØ“=nÙÇDÌžU€ÖØ•ñX§Åg^’Ž"cãxºº6ÏiiÊ((@1­ø‚¸z…=âÍe¬»å¨Æµ –æ¹µ75ÓÆ€š€i40ššFñQ“Ò¯Žš°Ë몗}GM`ÕMYO¢âQ,ŽšOö¸bixÌ}N‹Òvh+Ñæ¶‚ØÛ–Vާ‹«}Еµ¥0 Xp|AL^q‡ŠxsEën9ªq-ˆÅ>¸Òãæ£*­z Öû8²U1¥_Ý=À¨ZÏ;ʨ¹Ûê–Y£\ܬõø!*•~+á‰B=‘ʇH°> c§Ázk®*¥Þ_•¶íâ8=v¼)"ƦKÓ¦_ŸfK«ŽºðnÓ(cÕ-³G¹<®ôXŽ¿Ì`9¸‡˜Ræ™À»2Ã&v¡â á`ËLAçyÁ.ö˜>/&XѾ„Ÿ n/&gÕͰGÅ£˜Š¹Öã†3,x6‚+Vpeb"WÌ(®¦_U Îk¼Fî«XaÕͰGÅ£XV쩇§Ïe%XOŸëʽª Y=É¸í©«±ŽíF“0l7ŠwUt »0´¿¾Åxм`¼ü{‡VÀXv3QŒ£t7v§k=nØoMdë(°H˜­Œ lý@é××QnxÊÚøÅŠ1VÝ2ëq”‹ë¨µ7?J *vøRqd'@Ú*vDéWO€`½VïñìN#-gÕͰGÅ£X<z²Ç o:Ê )w,¤áÈ)Ù_U orœgwS»)ÆYuSÖã¨FQ,ÞM=Ùãæ'<µ•“ŠÚÇcÛ);¢Ú¶Ðþz+êcèe¯>ÆXuSÖ“¨ü­>¶ÒãæëOR ÖQ¤a¾þ$¦dÿ¿ÖŸ¸Ï%/û®?©~§¬ÇQÉŠ­õ¸¡beMS+ETÅ#x9@LÑþºbìåD}°›bŒU7Ãz•»¥ØJ½bJ•u^1+£oz6šã|.UEر+Ÿ‹|Aœ&a»Ë½»Š°S{J_˜ãà¶^kv›¯âN;vΪ›a=ŽŠG13Ç­ô¸á§S,U*S 0• 7HÄìo(V¤yÙI1Ϊ›a=ŽJÜPl­Ç  †+§dyãK^à}²ßëcÙ-G1ŽzùÚJ›¿+´:°w…Ö(öþ­âò^Ž^J`z±ÿVÉ <G¼Ó;ÂA”óQŒ£Æ¨ß>Ùãæw»Vð3Vð—œï4ë=;¦_½Ê[RPð2„wºë­Q.E1ŽúÖ ™'{Üþ½…sü2Ö ~©ˆ/!Ëûš^ì¿QAòÂÿ"`¿ËÙå|ã¨1ªåËÙ§zì”ƳZáµÔ×B)îñ¡¯Œò;|¼éšŸîú?ÐÑM½ïÞÊŸíÈFKsÆ6ý°-SJwh_¼ûôù±»¿|ü÷þ¯Ÿ?ïþL¦6éÉÙ³V¦i\¥0ïÞÚû’)ùwgÝç±g§ls2%ýU+ާ ¼<ÝÊãw¿qi®ÐÞ6”ûþx2©—¦Ï’uà72Ç­š°ã¾n1kõ4¼¤‰Pé‹“Ör}ís¬IUF;M>T·bâV¦ÝCô†ˆÝö1¡¾ÁÇLxZøsêJ  ’éõØŒ1g9Õ<²ÏóË]êiÏS;{–ûÉR3“¹´(¢¶4¥RÕ7}§ô¹½j=ê³÷ÞùöãQõ¿éöáhÛ¿§Ô°‰¶}L á¬Óx§ÚwÇS¿¶Æ´!eú1¥¤êPÒ¶ÏSÊY)åÜÐô>ez[á)••vxZµ?S Ö¸ö3/ìuùÕËÐ^Ï»”Ù¥MiˆR°ÈRß Ð&^µß ÈËkAeªVÌ|‹Dÿë<‰“•çhcÒX{VÅLNÔÑöé Ñ—ðÌendstream endobj 98 0 obj 2190 endobj 102 0 obj <> stream xœµ[Kܸrì_¡Û¶h-߃}ÁrØÍÁñŽg¼hÙÙ±ƒùõá£H±ÔR«GMbÓ%²¾úJIQ%éŽ ´#þþ¿ß½ÕÝÓ—Ã*‰T§”eîߘl&©·Ï¡mè><þÑ}:ÐÎÿ½<ÍÜ9%¤Ôîåñðá Ùý÷˜to:¦|_n•¡—…}>üÝ¡Âý„2èlnƒ\3ï# `pC ;öÐÃF²Í„A÷‘ŠC¦ ;ô`\„#¢€-MŠÂlˆ«¨ B ;öPÞG11’MYÂxSEf q„ˆq’mHèá’ã…e”t–be[ð Ò~ë´©Æb3øx|]ØõòðÊtOˆÓ¸Ìgì?|{Á|'Ò³W/f)màçG4WaT×–(,››A¥lòÄ”ä£ç–lÑg’-a´‘mÊæ’/Î,±_“íõHÏÕrâŒ*/¾±¦¿d“}ζ5b`ÁŽËƒ_r¢ýSû²BœH4±%ÑŒJÚ(†YŽ Y̳ÄY]*w/bE©ôRImã(J¶áqäp¢xaQ.h±-znÌ.ðñø¥Ý@«‚Ó¸Èg–Ø/h´©6k£Š+Jm4CÚ[´‰>“6š5Õ†”gtÆgF6´y5R}mÅÚ(YÆÍV`˜¶MÐFoÑ&o½hi·ÒfÊf/ÎŒ^׿õHõµ‘ k#U7[¡%Ãè¹¥Mô™´Im´™²Yà‹3c×µy=R}mÇÚ]ÆÍV`(dÉ0zni}&mFm¦løâÌøum^ônÔb–\¥M¸U7á\…$èM)PR„—–vä xǶè¹%†\™Ân [Ái\ä‹3KìdÛ‰TqJE-„5XÂP\†´!CðÜԆ̴iµÝ.8K|qf™ýŠ6;êkc,ÒFXŽâòB¨Ç¤6sËözªáDm2Fm¦l.ùâÌÌúöz'RmÖÆW”ڤڴݲ½ŸIÓj{]p—ùâÌÖ·×;‘êk£)ÖFË2îdy†š— õ-Ûkð™´Ñ­¶×§q™/Îl}{½©¾6Šam”*ãN–g¨DÉPݲ½ŸIÕj{]p—ùâÌÖ·×;‘êk#9ÖFê2îdy†R– å-Ûkð™´‘­¶×§q™/Îl}{½©¢6Z†"SP,Õ¡ ìs¶¹„¢_|#™¢ ø§öëÅÒTΔ\Ψº‘bˆå¸Å…6JK%§q‘/ÎŒ¬––ö"U׆[‹µ!Åå¥6„ ÁsK›üŠh“0šhSdsÁg–Ù¯h³©6ií@qE¡M~u Ún)-OÖ¦xý«‰6¤8£s¾8³ÕÒÒ^¤úÚе1²Œ›­ÀÐð’¡¹¥´>“6¦Qi©ä4.óÅ™­––ö"Õ×F3¬VeÜl†Z” õ-¥%ð™´ÑJK%§q™/Îlµ´´©¾6Šcm”.ãf+0T²d¨n)-ϤjTZ*9Ë|qf«¥¥½H^›”¥lµ½f"ìé93ñÞ‰É0£Á>gÛ¦°çwP'ñ!ù§öë/QJXôì •5Útc–ãeó,gY-¼\y'b½‰Ç¬À Zƒ;3‰ïOOLÁCÁèïñæ·°Û)†X ¬çY‰-ÅîD¬þZlV ^çÌŠ%;E†×?3Óä]±ôÒ(ǯÅ6S ³Xϳ¢ŠÝ‹X½6?)kÊ“b`g&±=1ÿ Åà ‘”fŠ!VãëyVrK±;«×³bPËÊŠ%;EN_È$¦ÉÿºbÉK‚bÉn¥f5^²žgŶ®c÷"†o*Ó®q*Ü‚}ζá°v«p_È´JWãèŸÚW®qÑ ò'”F[LÌj¼d=Ïj–ÅÂ5îNÄš/r2¤§ )–ì^QÌL“ÿuÅÀ++–QZ=oF¬ÆÖ󬨆b÷"Ö|z©°bš`ÅÀÎLbåb þŠE¯I±„Òì …ÏïœõEVjK±;k^ãRL0KvŠ 7“™iò¿®XºMŠe”V7ÞˆÕ¸ÀzžÙPì^ÄŠ÷jéãD‹Ù¶ècÅd…OöÒ—°Ð&o(’ä¯iÓÇŠ´Ñ3É’Ó¸Ìg&׊${‘¼6äåɧÿ÷c÷—ÿÉ6wGÓ=|8Ĺilj„ ©´êÆÃñíã§Ï/ã»óÇÿ½ûúñó§þá÷ɺÝ'Üíwx÷ðÛáøëÑþî­4ñäÆ !Ú8Xßão±CRúÐþËñ×¾7œÔÐ#íOÖݲaŽ__ÆþŸa'ßW+茂Ñ=Ì—KŠLÖw:IQÂPw(³$ƒd†ÎcŽ£î›åÀ¬ÔWÍ·³Ë,Ù@´RÝ)uÙ¢âbU¡Âï§bI*b/*ü[ ÔØª§¤ é Ür×ÜþOVMÍ;ÆM'l­ —™œÜ#÷A(¯„]Qr át¹ÝX«³å††Õ"H’N×—K¤[ZN×·õLŽ´ òõKA¤N0ÁaNÛ!ÈÅLp“l`Ì­¤’+ipH«R<ä×…ŸƒñÍÁOÌô;ž&J’ì±wJ£c'g ký„Â=ÃAXIS|²Ðõä¿®:¥C½?ä)þŒo2þ`Ø/1ìö‰¡ìPßÍ/F‰^ŸèÍúáAxòßÇIwšÛ0xp×ù7îºøS¸J¯]iPÜKË+£¿á ¬cnuÔÂ_9þØóAk%åñcÏÜ/ÍO½<þ§wE¸Ý:¾ôNIÎ…eŽÁ‰s5H!Öuú³kf`T߸7˜RÉUXy|ç:ý6™'‹» ÎŽß÷b0F uü<ó]þjjŽçÄçÑu‚q¯¡” Ô¨Céü§LúâÓಧ֦Îm9Ÿ8“ƒT"¾O)¿ „±çÄ­|‚—3–øêh£9Ÿdò,>¹0Êx‡ã¿'Ïñ'Ó4ø~éOÔ1aÄ©$ÔŸê2⇗»pPÏ uýy/};Œ´ÿmò:endstream endobj 103 0 obj 2544 endobj 108 0 obj <> stream xœÅË’Åñ>öGLøÂ Á6õ~Ø7†°v ápVBrÄŽ$ø{gVe=²ºzVìΘP€:»º²òýªÑ÷{±È½À?ô÷íi÷é¿õÃîû´Ñ,aï7‹ÚŸ ¬½Føng¬šÁôýÝîõîßû7;¹Ç?ï_ ÛUԞؿ¹ûng»ÿy—(Ù?ùb§Œð­ñ"]`'3ê¯vö¦76Ò®ƒÓÑf‘pXTQ¦=ÞdFˆîpc ‡•vÀaed8Æ/TðiOtGƒ7õ öD™q¨¨:8’ù·ŽËÃÚQÖryœN‘‰v§ÑA°Ò•™xqÊJtp‡DÈqD;∑ãˆUF˜È%F0üe÷ ?üËJ«UÞ ºEi£¥–Õຊô-ÁÊ„%îËNz¼ºÝ•S3\(Ê;9½·`ÖÀ¥H¸]H’LÙ%Kþj÷åE&ä`+rÐX( ¤±8h,^Wc«)Õ#—•‹m=c0E¼nÀtÚr÷ÓUà„v\™yÿ}ÊÌ»š2 –k)³qµAõÈ¥½O™Åxy÷SŽkLE~r ¥¥©ëîC4VkÒX«i®£±ÆÕÕ#—î>=ãå5&ý 11œÌ‹'y2¦ý÷iLò¢¤b¹–Æ$/!VT\ÊûŠ’c¼ Æ| ©“DI5i %xèà LG]ç4VºQR\†;,Á—Ö §ò´ÍÅȵØÒàc1¦”G\URþ—RžÖ*-·ZºŒd z'=KJÙV”¢µO×à,´v­e]ž-m”2ÜSbžJpÃÊ:´ËÛ§ú´ÉÕ(¹Yú<ãåms5JÁljô‘/›$hŒšBdYHà¾kpð×]™9!Á´ŸÖÏÇæ YlvN“F ë‹+5”œêÓ„«‘kÎå$V?ã}4™¢lÈÕÑûßUXû|rBÅ@pÞ_ÖÏûh–Ú@óÙÖ|’Qyšp1rɹšøä#1^PƒF$ÌÎö ¾«°×DI™ËZ¢”ö—õ³¬c7ÂR‡V«¹’•§ #—œ«‰‰ñâyÒ8ž'ãñ¼Á9þ×{ƒº~>OF×U´pŠ4¬Â%¸aÍy²»¸Jžì¸Þàj”Â}yòÁ/î“ð‚ù$ÁÕ¶Là>i<÷ɺ>×h±Xã˜OvwAWñA¢ê4¡zäŠs±éƒÆxAånÃź,«’œ«j $òuuεíkQ8Å^›f¸aÍÝG…¯Ô}t\op5JAÝÓ}<ãëÖj{åV³Š{NT…‰‰HÊúÙ€KÊn×½¤Ì«TFÕi›ê‘Ëí€úHŒI™ÄuSæ…§èTY™¨XKp«Ä„d¬‰šW°e}C™ìV·ÝÌGuÝŠ5SušP=rŹخXŠñâ]¤†u‘×îGGͺH,ë"ëúF½S~³ ¨‹,X®”9U§ Õ#Wœ‹Í.ñÁ/§1cRc Ù8‚š­’ãWؤ€ÑÔ”u}vŠ^²¿ꙊÅ_ZƒœÊÓ&#×zsªþXŒ—× Œ\ƒJñ“+L”*Á)•g¯úKL©$¸b! ª+Mj8•§M.F®åæÕÿc1¢¿Þǽòûoñ/v2äO¤¸¤ ¤ÝCÃWS¢Ø‘X±d"è¯ÛÓþ³§»OŸÈo–(¢Ü?ýn—'M\¤Ûkˆmqÿô´ûúðùQ/Þ{çÿ9*|Ò‡WG{øéxccL´‡÷dzhØ¢/7Z»Åsð‘€ÿþL»¾}ú8ÕÊþT«壇“Ÿ¾€£¾BDÀUÔp–]”tpê/ǵÀƒ3‡›JÊSX–BYsxÝ–ßã£Ò‡DÇ¢”ºlû»“~jNǹ€­Abo”ЋUûƒŸ ÙÓ…‰DcˆrM£³vMcð®Ð(œ+„9!ûǶM#"È4BNUY \Á,®Hóöh@AR©Ã[P鑸.«Î W´Ò9ü‡à5J 7‚A~º 5@WÑ-¿nšGºƒ€u‰ŸJxðNõ¦§jïd‰øñ…ü®ÿ¾ÚÕ/ˆdª/Š·ÜØž·Ç»²ìíb½é~‹§‚Œ@S.˜ýLȸžõ¿˜¼1°Æ~>¢k «Ó>:ÆKGd@Yd mFE. {x`V!XE} Ã½ €-@£öUÑ9Ûô+"s`¢þðÍ¡ž˜¥Á,—úô²li¯>j%êÂvÔ‰É3ÀªàûýÔh!ŸMü9Qð¡éU± eMúUåÿ=jô\Vy‘l­mïTÓ¡'i*ãàEµ,•4á³[hÝ»˜„”1)ý+ù˜–qêB‹˜ò-IÎ)9CŒyƒ>ü­¥Ê±ãÓ' ¿D/dt‹€8­÷zDæ}Þ¡a‡ "L=Ù,(†èö|s,ÔôKÑFØ1PT G7¯âþ¥–”ÆßYÈVÎŽ–þ†y: ‡=¤(kà„_›‚ÀÅ|¤ÓíÀE; fvç¼B”a"lFœD‡WÓíïÚcç¦ SåŸm/ü°‘È)Ž8Ð xmïÎ ²Tú” ;+íÕwÍ]»£‹ÁZ\ãÁ 9wB©:ÚÔäàç²X[õXðÓôc ôYS¢xzˆ%‰ ®k»pDαw T]ÖhqãMãïUc^‡Ó u™#„*3¢4j–µ•ªiÐúËeD§ÜȬ!l,&iräÔ(/8 ò…gwF¿èX½¡â"yvB¡2`¦[rK!ÀÉí´JUÔ†õi}1¸í¬‹Â‰!YÖð‰Ëæ1/Õp¥óË3š_ÌhFi €Úgü”åîüO àHKæÉÈ™wÏòy¨ëÎ;Góë¬={ êmUö{Äç™Rn8Å !ÖÒw/ïê L (4Kƒ•¶ï»×ù}'Q$MJsRöÔ Ù“¾ÆRj^dà +2”MÕÉ\y,êÿX3E}Õ…wü´¯Fãj+މÇAìú¼zã¬@\3³µXδÒ¥¤7D¢ˆ%„2çJÉ­ñÅ(¦±¢Ußà8É’Þ0ÎEcΕu+°ª  ¨´y:â…+Ú®ßt¡í$émŸ½¾’À6zR—g)³`†’àU7^W£yðª[š”#Š7»Òª÷¥û0äz6óä?¤Š®‰v(žƒ_|h±)ÿFÛÕÙTfaÖ}ݼ¾T'þ«k&/ùéBZU´ä…V‰29‚1* ~ò®Å ä„t\_9€cÉU$†r+ªd–gÊ­©}#&4Œ€ýcè^¾Íbmu;+ôyNnû^fƒBC¥‚Åå–d˜E(è§´ ÿ_«Ë19ËJu%%óP„A&y>–cCjD±A׌bë^Žî¹Œ(¡ÖôÁÁr¬æÕõШžu|4ÇçM̽§°óÝÔ“^®<ŽyÁ:—²L``õkù!~’5+ùñrKbüwZOJbb,xHŽ<¯ŠåÎ>чZ«ÙW˸²ª–›ôÑE²£¥ÞæQIÿ£ÑjŒóT*Š:w0êw Ây9{wÈÁ4ÌG5·õi=”D{˜9ÅÉ‘o¨Iåç'ø›°Ô11ãgÓŒ;¤47âëþ9¯Ð×áH]ç6ÍòX³O5ðR!8 ‹¹EJ›*eЧs ñcÂ]ëÓÎCz ¸íy[Yc wRCJêP`¦!“ö~Ò§wëy¢HÎL4Êäј ÃÆ¶ ]zeØÛ®È˜a§¡§:Ó8 n̬„L‚b £ ~²Yúá$Ò>Më|!÷`õ³Îà'ý âœô‚4ÇíœñíQ§HÌâ$Q÷q-õ[KóâC÷͈gòyF-äP‡u¡ô›#ž®àœ±ÂÂÑ´qóÊj42N‡»¾:äÍépþõˆMw¸¥ ’SŽó,$dÈ)$žR>;&Þ¤ê+3=3Jªô”ê>ê&tÚê<ê6”Û[®ÉIúxÝÇ\@dR“ðuù³o Pú@i·Ajès/$‡FpÞøýõ JLs&8 “Àj|LµÈÏ-RôÃMt…àÍz ý€ˆs#Í*TĉY³½ì¸éÜžb‘‰9u…iK(?#:·@·ÙG¤I„(ÄÐ ™Ž8Š]kr_Â+ôµo~E4””ëfÜ´¹±Tÿ:Ø ¨ …–…̃ŽÕ¦SEvUwZû¨1ŸÇ6 Ãj¶™³ O]½Bàa8»cÃZ®/5¨î´ãs›¢×Z˜Î;vÌr]îk( w^o…–ÇË‚ü9®Œœî"¼ý w~zÉñ€»'¤Ë;Lº‹vz%‚—ä7ì󓃄úC³mÒÎÚ¤¶3²¿Ð•E½ [5ž]D¤KÁÖ->ë2¨ÎíîŽ"esÝWímÇøµzÏÌW(]üqêSD{ ¹öòbÐ( f*ƒ-ؽ.®C„ƒK°²33Ìùï{Hâ³,°¾Êu®wËyÁ¼Jòˆ¤ØÖ«|¿)èÂáìp¥µlÝK>`m^´ê‹#b1>£@µ”tk¥›Ó:t<‘— $óJ$¥ûRt×)´+'s?%ó4ïK(ÝUª1À“:Ľmâ©{Øh¦ w½zßrY(íÂãw½ëlãž»ÎY|A±ÿåÁ´;ìdŠùS„$³N¦gf"h'¯r ˆIá ÏWëCðFô Ë»½¨Ó Æoÿ‰–Ž] ÝÓÛŽ% F¢¾¥ ¢Šé­ÂÃ$ñʰÓÉf®yÛåÆ@ )ÿ|"œŽ…r`³Ͱ8Á߬)ä+ÏYþI°YŒÑnžã×ÎÎ.'³f%ëc[†§Ÿ2àMå”sÜ’ÞõÝéÝPZû®ò}7Ñr]ä±áÌ\oW1ãÍÊ’C?]]Ö éœu±y¾í½d…¸RÀÝj¼Ãüfò=ïߞ?ÿ½Ãendstream endobj 109 0 obj 3921 endobj 113 0 obj <> stream xœµZËŽÜ6¼ë+tœ102Éæ3ljØ^ Ã'?Ö–ì ð”šzŒ±¢°ï–)«U"Uäî·ž ¼gñ ¿ðÝË7¦ü·ûÖqîØ {-˜Dï36â§N:XÃxýS÷¥û«ÿÚñ>~}¬ºƒ‘¬ÁXÿýS÷¹“ƒêt£’þÍ«Žk­ÂµJI®å–ŸpåÛN66q»hzÝD4×FÆ4w‰!c¥Æ+¸²0ØŽ?D †¶ýÇÛð"܇ºBHe¤^¾TœYZU-`ýc¥Êo«®«Ä*>¿XTpñK;ÇL2Ü;Ãmb0&üT°e6ˆX÷Ú€Fœúçö ÇR/Í,:–YÄIŽU~Eu]­bűƒŒíŒ̠’c8Lø©`)ÓÈB¸Q)8õÏíëŽa¯âXaÑç8FUù¥êEU´Š¥cG[:ÆÇUP(‡÷±K³[p1Îî »q5ˆ‚H»ú™U1õòe±Ï,Í#ªü¶êºJµµ*el蘴Ñ!©•dlpdpqä K­F¬ m‡]Çp Io겦L,ÒÜÜA¢ÒoWQW ›dlï áÔA£èÈ£RT©ÙO"V’$Æ'IñÄŠŽš“’ Uí·«ªïÂfR9ÊØÐÑ8M½³˜TDÌD?ìð+Ô˜ ¥Å7tîïv“J~Kðê½ÇÖ›Xk,íII†ªö+UÕUÓ*W=ÈØÐÑÿæŽME\”I•bÿ;Ž‚¥ïÅÄ2½U2ëY•~¥ŠºJqÏÁƒŒÑÁ¼É1ÏfãgÜ ‚°[H°âÜ $€"ÛˆËÉl;’qŽÕ†ÄðÜ;‚½J¸-,'=T•_Q]W¥îlGŽ2¶›Ä`ÙŽ„Év$ã«ÁqÃsÿýíöšË,'mG¨*¿T]WUU±âØAÆvŽIÎH¸-C™dœ„4É, q¥}7Üæ'2‡[Ä3wj¸¥*ývuÕ›áö(c{s(+XÑ‘'lIh+í»áäüX-8¨ça÷)ã«;5ÜRÕ~»ªú.l†Û£Œ-Õ$ IÁHÊ8¿Â%·ä•ŸûïG¡¼æðjÍaYk|Z4¢ªý²ªEÕúN4:ÊØÐQ Û t»’qQ4†çþûŽJF}¥„ÛÂz–ƒ@7Ë*ê*ïmOŽ2FóJ´n…áÈï9 Æ…âcfçØóýÒ¾¿sFCgtÆ ~Öï=¨J¿]E]õæ‚{”±elr&[0ž-‚‘ä¬,'g‘¥}÷LV8AOÑžX,ÅÍ$*ývuÕ›g´G£ƒ%ú A^CÞ°†Í—5pšÑû”㥶b/•r…Æ»2Å—°öÓÙR~#€:2žt¡ˆ²Ò‘Ïp³Žr¦[tpÃ‰Ž°c®uètî«êȘzäZæ3 6Ãñ ) á(¸pH„C‚ØààŠr0]spF98«8À0šWaY'ˆÛÍй¡!Ypæ&œÂw4ü¥þ›3OÏÒ«f:M›XÁg…âRåFuÕ¹ªíPü\ÆæÛpŽ:È€Ž<ᤔq¢ûo:ˆ§gÅAÄ‹#ø$§*׫¨«.Um:ølÆY„'NŠP9y Cw< OI4ÝñGw<¹}#c¯lna±çîh’*¿T½¨ŠV±½£y.cûMq “xq qQ‚ɽ(Åþwº –³#ªüŠêº*yϱƒŒóé§Ê¦ñA;>&`€L?Äå± •L¿²Èô+í»ÓW?±ÈS§ªòKÕ‹ªh›ÓïٌͧßäXzŒ&Ç%é±›”bÿ;Ža¯âXf9Ë1¢Ê¯¨®«’÷;ÈØ>¿hzКÏðøž.I¸´ïÿIú»Ÿ)OãÒÑ:O×yEÓcð¥êºÊ{ëÏfl~ œÑU1ái¶sGWE.誘Û÷WEEC ð³&Qå—ªUÑ*¶WÅç26tÌŠqNÆg±dø¬Ÿ•‚-Ÿ-À8‘ÛSÿ{«¢¢¡db±œàæ•~³Šºê\ÕŠƒ£ƒïz× Ó¿ÿ|ì¸LÏ€÷‰Àëã±E-¬5–nKß>øþׇîånÃÿ Ž9Þ?|îÒ_Ôó^„)nm@¦ðÝ»ËïWŒ1Ú\þ¾Šø\¯êòßõF—Ò©Ë÷ëM҉˧ë-(””.ŠŸ_°×û‡?¨ŠÏGU0pålùácêÏë \(: î·Ž_¾^obÐÚh9ÒB80—Û(Ë…ö‡p%gBÉË«àƒÒÒ]þ‰}¤bJÏ.|uZ'¸‰ê3§¿ÞxPoQ ½-&Ð1®û7<(K2cUêªâõ¿=„;ýºûl5yúendstream endobj 114 0 obj 1770 endobj 118 0 obj <> stream xœí\YÇ‘öaû#úm»mu1ïc ?X+æáC?È~ H‘#€ä %J¶üë™Y™•UÝ=œ‘vaÃÙSwÆñEÄWýv'&¹ø¿üï³×W>ó»—ß^‰Ýoà¿—Wo¯$5Øåž½Þ}ôÉO¦(¢Ü=yq•zË]S”1î¼v“Q»'¯¯¾Ø~8ÚÉkåþíá(&¥””~ÿ]zl¢Ý?=Øý7‡£™´6Qí¿>¨É{¯÷oj“—‡£ r[µÐðÑÌã9¿ïyúÓ ·?4Œ¬´*±Í ´a]¾¬Í_•é¿‚9£š¬°å'k„æ}^´˜´2{ë0«t2ðµÒw¤|„™íþÙü—ÛÒRCó®#íÐÚ~•ìÊŠœÛ{8bcïØy½l[ÏÏÿ«>ëW‚ÛrÂìßÁ…൮Ûÿ—'%âþÌK§©›ûÝá¯O~w•ðä9\xsZH8#9\ï›~]Bâñv­“yM&½N ½ óxµ¼ü>_JËKÑñN¢ áÑâ¾bÄžl2ÞEÒK£Â8§An¿Å>a}x@óx8°˜"ìŽxç:†tHoªV¤ ¥R쓘Pk8;8°4®£ÕÃC;ÅØËV–$—ñl®~Ê/{8_ÝÎ׬L[OÒ[G-b K2: —¸ŠWae·XÅ´iIã[5蔵CK3á‘VqfÅDð‡d8´óÝzgøÇ:o‹mà‡Cð“Âî§|`xÕ>Ór'å­UhUœ¤ðñ÷WO~öÅ^à¼cô&@/P ¤Ü[X•T0Åþc\T´ÁÔüÞÁ©}Ÿ¬Æ©Ï¾…9¥°¸ôÌ;Ø' [B½˜œ·*­¨5ÔJLŽd0­ècØ%ìMšª”ß3=?ÌGˆï®iý 8§heÛ“Á `'C7™|¿Éœ6fm24ídên“1×rcº«½ÝÅ\9 ~ºIJ[l{1ÍY%”—£Uƒ\’}É÷ý%¬T:ØzMëó”«BeK¿M¡ê'iÃà$ÆßP˜ üò„l!B–iqÿ€Üß’³B\H¼¨ñwí½¥ŽÑ­©Ð<.^¶P»x¸/Áfó7a£Ral( tµzÛP´BÑn̘¦ t¨ƒpðªõ†kvŒœþBÕZvë±'ÔFAÈKv¾PoyI¦d ñ~-–›¯“ûN@7Ù8Ø0Õ`ƒ‰; å-iO‘ËTžbæ5Pi´%mX(8[™ 06Êó(x}ÎGë,×C1¡ÊÁ7x;°@ëGG 5óv'ÅË0ÿ»u¢ßÒìƒí1%â2Õi‘vU‹btzY- ˆJ`àÄ{üÇ%KJâ¡úXV˜ñ!¬ß§(ãi üŸgK¨ãû×FÜ:_¾‡À§ƒ ß0P~6HûPÃ8O±Ø¹ÉŒáÑz\ê&sqÙrÛdzêr™É´ì²{m¹ƒü-¬&¡¶ŸÈj"䕺3›‘ˆ«i±„'+ ¡²T„j­dE4ÙôyÏ Øî`ņukÉ^m55\ÂÌ(Þ`>“­§ZF+ã(F r[°LðÞfÔÖZõÞ—”Pß4|4å µÁ½êFQY–²¨Stº>lS‡Õdñ-à2P¦œ3 ZñÀ@åé €qÍK1è*ŠæP¶}‰Ûæ5)Ð<#­œsƒˆà_à€Xû°|9sŸ¿a¾^µÇùj÷êØªÉ9v;9ÓÜâOªsRâÌ~µ­ñMŠèˆ‰y+ùɧؾñ“FE·)Ž46ô~¿5oÙ>{f³r yÚà2UÝZÀüǃbT†ÂÊSvhlÜS¼mä$¥™ÿtègx F‹ ÷x†^Pü؆–¥ƒÛˆ4é7KåŽê¯àk+H1ß²xs\îÃ?/È4áéØHÙåôKï†+à¯ÛA³ùË6Ú_Goåö'evã4§_Ù9/7…3¬YT‰¡HT¯²ájM9†xi¦¹ã£›)ÁPt…LF ?=I"9ì-f†@‹ôC\ø§¦¤ –° \ØYGõî@ÅqB’8¨0(ÍeIoÒJ$E €@Œ­›fÜ3S¹fÄ-óÃl˜”àC€wŸ!Å¡“´Ðk4W)_æ¶(N*Âã úÒDð¼×é\<ÙŸ@9 |7„À4%òB!¨ç Šæe¬ÉgŒ=&Ú„•4ô2ý1Úv i×+%7,è¼íÂ,UÑÁŽÈRy¥¦ ¿ 0Xy}yh¨š>É>èÂh ÂþG°)"U¬îÈÄËz˜^ÄÈWGƒÑ ãk8ƒˆ}ÆÍ„¨,iƒ¤ÛÈYãáüèhÕ£†Z0ù 3H=T WõÉ#¯:㎀ñºúÞÆ‘"sÍÚλjE|蕙ÿ­üÕü=†ÑKüq;6H<®ŽT,ü–(‡mÀ¿ðÖ9êLñ6ÇËŒÝæ}狳t³¨bCºOòV-iV"[bÜ8çŸ2§T`ÕrhŒØ -³©Ï’a=òU¦xY’I4r¢Ú!…©ÀpGp0åB 1^-]uI/éýåK‰»ŒÌþ¯åÙ)’œ­”´¡#S3IîóLnƒ;)¼¸ïÊ£§¸U‹æ(»' ISD?­÷Ÿá! MÆbÃÉ+§‰8g„P6dof…3kÔ9æp·iÍ…¡ÐHdÎ¥™ö¶ îO·R2G>å[ÀÕ´u7 šÝ®”ßHƒnçi°Ç¯Ÿ\}zõv‘p ‚÷‘ AH³3dGrÆ?z|õèñvï¾ùî««GÞÉ«G¿Åÿûè“ÿ…¼ûàê×wŸ®rÉ;{œ¹ä’nm‡ÅYm•¼÷†ãÒR¶tgy2Œ™Mâ”»ø#y2‚»sÊ7=Æ:òŽ7 Mšö ®Œˆ½#ßC©»t%ÚJëzVÓH:{—YÎ.o\Õ½jrŸ!ÜÈb€äO”—m™õ‚ºÈ0¦ß1T°Mâ4µÄA»ñàX†ðÒµøˆh„”MÖ]W)̊ȧĜ.u)Ë¬Ž„qM5;€™ Ú…‡2;ˆOL@ÒëѦۜPÙ4xdF%¯Öòbøˆ)¡·ª³H"åøÏÒí£r 1íà§ŸC'– )vÊèƒvþeˆÑUJÉØý°‚0 ¼Ýôq,{ºáŸ¢OÅ˼åÿÜ<Ÿ@1âjÜ$‡Dã&úãÀ ©LYRùT5 ɘ®ü²m×'çvªm·¤ ´Á"x¨u†©F°nìigX̺WCHËÀpIðžžaéªÕôS¶„žû0]¹],Ù0…ƒ3¤Ž+fË 5¸-Í~H4D¡†D…ñWeý®ÚºÎ|¡"°W³V¿¦â ›_Á€ˆ$ôÌ¢ «¦RXW¸Ž’ò±›¯øQ#¯7Sœ ÓD‹µ×ð`Pñª@Šî V)šS2P“8°hÞ?(Æ"$Ko¡Î{ÁBIyå®|ÍJî5úo¶<1"­ûBÐzêßÀÔ1ñ Ø;ޤnÑN$·ÄÆU¨Ü1ƒ\öæAøª"–ØÆIëÁ;ÏÒ]rf¦?³©\hvë¶£»d`ƒ¸ù1JD9÷(±æ×’—& bŒ¬ÐX‹§ðÑ¿¤P=¹“=‡eÜIÙ•w¸hüñƒöÇ ýìB¥[›C»i²×'ÔwØitM¥BK9"Ø-©ÂþW3|Èaì ÷?$­yˆôüzN  ÜÚhøDºÁ4é†E¦q)¾sŸ‘˜<“¦ãJº´Ë¤­ÄË‹LÚÜîD&m-ó6’Riu¡KÒ-ÚXÊ;Ú_Ɔ0†O,¿ìó© ",i®Ûí0…I«gb Hå#ˆ• âZ—_™©àdAdF%éˆÌÍKAg™»òù(¶ü5´»²Ùš _ïÀ¼¢„ ª–ÎGyø÷^r#kUË0i·C¢²<§h¹üaó3[‰ªÞÔ:ßz%þ(m ·(æ’|"· òú§a–]ZÁߢ”)¡ï‘R†åGK è_=qCñ ¸¡ªHtË{rÙ„Øp’…ä¦ ÍPÁH©‡Vôl] +X;¥À…Ô%À”óÉb^~¼”_:|xæåˆËv ãK ÈlT„¯d¶,ã@fËïgÜÌF¤Îb³Ùô»ríCRÖ`£eÚžîªzªüªJ¢-ºšÔà­ªÕ,“U-K—Rã9$ „—å´»¦®óû³åÏ\þ=Uä¿»5L¡Ý©”'cªH›ÞÑø¿ÎjÐÉ¿xú3f54¦T‹€KØ`– «Á€AøkVH ãZ]CjHÔb#çªhëõù×P”Õþß‘:~wKj8ƒ§Øc]=Oa›:^€PBÍ|Ⳉcùw,ÿ•Ø6¿^vœ òß„„3 aù›BH ‹Õ&ßNHú›.?!ÁmZƒí2<>‹PÞQ˜gš÷9d!Çþ Œd„yÈØ9°[ÌO–`£‹‚ #˜š°£bq1U›¼'SÔt„~qö.p™{Çü÷§Wÿ"yG¦endstream endobj 119 0 obj 4902 endobj 127 0 obj <> stream xœ½\K“$G‘Öim2ì^öV7ªUN¼»Æ-bWÄ6¶àКF#¡™i‰A ñë×=žî‘‘õèéY“µº§*32Âßî‘ßìÄ"wÿ+¿Ÿ¿ºyö[¿{ñæFìþ ~^Ü|s#Ó»òëù«Ý‡·p‘ ðÉE”»ÛÏoòÝrçÕÎk·µ»}uóûýíᨤÐû/G»c¢Ýÿåp4‹ÖN˜ýŸ>”JÁ_GmübmÜyP‹÷^ïÿzÐKNIr]¹ÙDµ¿;XrI»ë>~ÝŸööv±Æ¦ÈýøHëÜþkø3,Æ*7Ô燣‚Oˆix²‚WøsÞÕÅ(mö÷ýñàºâ¢´LÉ׿5“ Žýmÿç ø'|«LMG¼ÅÄ¥Ûÿ=ÉÕÇH–ý¼=×å"ˆ2ôoQ V/Ö+> 2}|8\&áFï< äz!ýôÛÃoq£‚]¢ƒ¿½‡]þA#†@&ўܥòú `ƒòdñ ¬VšE‰°ÿéA.1«´ƒVåJ rÏãY…¯\À©<û­ÖTaáRÆPçöÝá(ãAž>_Íõ6.^ƨêÕ?A¹*¥œ› -%LEÈzñÝA,68mLÙìü½éb»x[µÓ (ünyéðš|‹a·¸¥‰TÂbUPºÌñëà«>árj<\;[¦!îŽl*y¢5I5œñeû@ƨ D5¾Î:©¼¬êée˜íÍ}¿ðƒúœÐÑ¿³;ÂL@•CžÃß ,C˜T”ÛZUæ€öw— Yp(šhzÖ#Nåo>Ûp¨ÂÚ/’x‰ü”7f?ñY7¶~ >—<¬^1W Ó7mT³¥6zO÷YuÑ>ÃueŸ´S}– GÏ{ÝŸj­|ÅÖðÀù:À±€!ôÇÙj9Îm¨(²îv¶y•Áå§ðÒ£tn8)\QºÜ‚!HØE©!F„¿uÚ9þÁ€:ßÁnHÀÁ¥k£À/¼ƒnÅè@KÀ’Àƒ8 [¯ᜣWÞ÷?É×Z.R ô½ ôG¥ˆPóÝ^tŒû_ÃcD°p•ƒ]‚ªTæ©Uðd€<(l è\(…A—ªΧÍM:SW!íÂϺÂR&¹¤Ýí/onÿ %pNldÿ¨u6¥êºÿ()»ÕAÃ~Ö¨²_ãvC08xLBXÍâ¼ÅuÀ8QytÈÉ|L²³H+:n|ŒÇ-0K°ÌûeúÈÙ0S%g„ªž‡|°oc} µÝ¾[ºã‘§ü¼¡Ñíh<Æ4‰ ƒàƒ€ -¤ÑûïqKÐq{߇}àáþÛjŠö+øË9[zòÆ„Š£sÂÑA¨_0!"d SïÁnvOÿö .Ç$GCtúÌ1 0üÅ ^ÑR®Í¸$råßÊ©ÀÃ>y@GQ8H»sæ%@g×LíÁ)kâÌwÙEèh,ße-ƒ2S$˜Ð£ lêÃC‰ùdm&@Ì£[í¥Kê†ÚbWD”=ú½îß¿HJJÂÚý»ªÀ€ŸŠþ%íôO{pM/ÛØuVààtr_ø|§æ`†Ì©}Kîi‚“Í æ{R´E|&Õmï8p}Ñu­ªDû H(-€MÚI…çRËd’ T×»ï»u{N?¹ƒ2ªóg-¶‚Pµ§hþaŽù_SМ „vޱ™¾OcaÂS*ÇÄ‹”< Þ¡A· ûδYz:¡â „ ŠYý8cD]‡Ûˆ¯Õ½Ó8(@UÑlõ%®?‹¬ˆ%£\Œ‹{ÅáæÊÁƒ-ÛÝ‘-` u˜N1D[.•aÒüIÌð¤?ìOíIçŒÍ†7†OÊp˜ÎOgÙVj°Ûq6{0Ó´÷üÿÁÀŸض„½JêÙ`ô<äˆ8çÛ°k"eÙÝŠxœ®ßOàö,G72ß³Õ‚ß4$B—³b›’So£¼KIíóƒFxcí˜:à@ØQ¡š[IÀCZè#=DH˜Ì]<µ %hy°‹18°ØP‘ò‘ùRk°cLAÏÝU`ª$ÃSèÑv•0oÁ~ͨÁþ£QøYÁ}‰’ ¢dkr™…)Yß?ƒÏ‰ò%Â&·ß/Dµ ¸8ÝSÔ’¢ô Òl¿ù*AÛàX\„žA˜›ûø3MXG)ézÕW(ÚÝ=(»@4ãZ*6 Ž›ì£ÃTËèý¿ ,÷Ü0§`„Ûµ\‰qÝÞ|zóÍÎèäö:ް31FL°@ó“oxþêæÃož}ü«Ý_ÿòíŸnžýïNÞ<ûoü߇¿ùOøõñÏvïÝ|ôñîÓMvo˜Ra÷à9àÒá1¢1|'#‡‡Ij\ ÄFb¥¤`m!„Ë’!p[m‡þuÜà… õX¼+Ý#æZo»iþû oÛ¶]Ã| ü8ø±ðãá•߯Ä]ýî0O[.™NŒBó½] X9› ÉÏiðM‰¡íÈd•YQÝtwqàB#&¸#…Ò ?ß omféþÜTNÛ‡Å;BAûð*-é´}TXª‘¨»MA~‰‚­Aã°HP‡wg$ðPù¬{ .‰m˜«Íó´áH  "ô¶gBȦíÅ:m;à¬,ážÈh`˜ô#áG=5Åp|†öŸ4Ò÷‚!¶§¶‚ûx!ØKN‡e“§Áž¯`ÝÓão 7%´Dâ° 2fê±fšu£×#Éh#ª…JhåºÌÑ áÍï:«¥'wõÉôÏHfÙsÊ µXà_Z™—0a^¤\3/ÚØWa WT:$ø-¹µÅ„Ž1(ÐÅä¹c…ÐÂŒ’ââ…«RÍFŽk×ùìPÔ![Ó5¤#­/Y˜«6€VHi£}6Ýè>\V½4͸~L¡«šìÛ˜@‰r#£–B—±”H¡kLåˆ-¶EÝšçC'‹)u©5ˆ®Œ>ÜÕEôÐV2cï;‚NO,„¬ºŽu…[ù.—+>ÇåjÌ 6œ¤&V¾5£uHDLá-µAæ×q“ÎŽè[¯[ÿKXŸ‘ ¥”—ÑÿÌŒ»…1p +ïl($½‰¡\!ó_Á-Î4¦ Ôüÿt¶oP)3—-ëKP ç×’ñ:Äð¸ê”0ýèLôm\ça«å’V5ÿ¡·`еWXr‹³öb§5¨R÷ZE‹tDÖ ítCú E&’ýVæ·«’ü¤aÁF*¿—ÙgGÕÁÑCƒ÷¤S€Äó[Wë®8c¶½iRû8oš[2<…,l'ûÅß/Ñ íò ôwÝ©H[8Ò鈗¨³¹¯í¤Gⱓu€žw5-~0Ú‘gbÙ‘ÅI}'sV È|r vA>ê›ÜühBË_ßHÃ`E/Ö¯+M0Ñýû}¯™ãÏÀ@õçÿ˜ 2­‡QÚ„¤—4ï(£c~Þú„J+–qè1Õ"…ÐS¯ÙHjF¸(i`¨áQ 0JzÚS–¡*6ŽXy¢²UÛ©1qÝ9t3ŒzD“\k6úxÆÉ—‹µÿß,7³Y$6M:‚Ò³ŒÅÑNm9ʘ Ûu€1´ óVŒ›S€O¢#Fþ mÛ!!üñ ¯Y;½¦éÏŠ›…û§Ä8"™³-Ê‘‚;ž÷ܳëØÔJÀ`7A^Wƒ¥º}Ö^w±áAk¿k¦¶ >[d¶´Kû ~¤;ë—ATÕXÆÇÇÜu`¶¥=g n.B€¯]…ÐzŸÔF£/D^CjBo`w§ÕF>pc].Øð ÜÎk:­81©¨h¯**®÷SœÐÈ?·ŠèXT\eC¯ ú—˜«–“J–3žško_³þ"E”ªó#Kô$.Rmy‹ýÉÖÕ4ÓŠi÷‘ãøu×+5Ï]CW›«Ð1é—À$¤óa~r˜7•7ǃeíÒiUÉt@q‹trÒÕHÈ™Æ>„‰ÛC¤*\„²á?tÌ-ôJEPu;+G<ÓD2þbÁÀõðìgP&‘ jΙL<²4‰¿Ÿq"åpE3‹ÃæV²ßÿt.› ŸE[¹­e|Ëé݉%Íi¬(]Ö´gG?~-œ0î+Ûˆ²ú±«X û‹‡2`.S%¤¾ÑÉÇá§®ÉþŸ^‹W]¡±w%¸iêÇb vfô.•Üà•ÔÖ­ú»jJƺ»×§fø€´M»(?¯€S8‚ƒ¯àHã™mÇ.…s_[¯;£%¿Ëëäm¯ô¡|ªÿ:2ý?ï8Tw õ1? nî j´IǨ¦\öpÜrU~VCZ7G=¬ÞX9fÒ«e­Qú€†¨nç¼Î¹ÇxšªÛ²Ñsëe^Bû\‰¸p†²q³¢3¶Ñ9Hp,[Mnèõb„í‰^¯aïð&³YŸL‡ÓÇÃ,3ÁÖB:ì•]Ÿ²UË(‡YK˙放QöÚã†6§fg&³nï¯n1Ÿ‡0àëȃ»§½ËT?±&0\ ©µÍ:Z6ûAô)JUª¸Ã–å ¥t¤Î•ÝtÏ7È¡q.9êz`ߊ~Y ëð(²’>ÁQäùÛ8ñE 0QÈ[WÎëË9‘å{êpU;è%éÀpLºïÍ"R½¢0¬ax ÄKeãÈn!ûxò0òÏcc d¯óÙ|K™ŽÙmo?˜TNù”¸gD¤ˆwÒRŸËŸƒÚ Æ(|'Ôă¯XÌv:s&ÅÀÄ~ò¹r¿¹xêÉzB*hô³4².ˆ¿”*¦~¢ëÜ%ª•n¬36ƒ¦Ý¥’+ï¸÷lóˆtE3ÔÙÂ;± ¼q2ù^%Ó 8Äüº§vùåyùÛþ«l0å¸rF”¹ÛϘ #šÑeêí6šöv°/¿ªÏ8»ÿ ކÝï5;|ïÆ'3b¥ø÷ÕÈ>’³`öìב°ìá¶O7Ÿê›B«—'=~³Ã76Ɔñ.q«c(²™©’åEiœb¶ƒ¤bê`JIåèè+Z~ˆž`†¶$z ¥oÒð)›…G¡¿»ð…™`A€¼©o›™/;ò`.¾ù÷æ _Ű‚ŽLV<ÔK•ßÀáÓ¥†~˜ 0\zûÌ»JÁŠs© ­p™[ºÝ’&®ŠJE%øšV‡+ˆøþÓw·™ƒ­,áä ‹JðĵW¡D…½ê=Œq+XaŠtòia Þ©‡1OôãÓ›ÿrºyendstream endobj 128 0 obj 5301 endobj 134 0 obj <> stream xœµ\I—Åæ<“í‹o}ì6t)÷Ìòr@2ùlð¼çø0£ÕH³Iøõþ"×Ȫìž#=?YMwV.‘_|±”^mÄ$7‚þ—ÿ~tqrïk¿yöúDl>ßg'¯Nd°É=ºØÜ?Å ðÍ4‹YnNŸž¤§åF7³ñZMÆmN/N¾Ù>ڙɥÍöjg·¯w{9Yëú÷é_i5oæivÊ™8ÃX¡6ÒLÊÏ~sú3üj''íÌìÒ#Zó•Ãdå<«Í ëkçGöËmé™OOO¾:yµ±vRqŸ{3…òÒO!`¯ tôûOî=übóæû·ONîýk#Oî}Nÿwÿð×Ã?o>8ùôáæ«»ŠÄK¬æ•p®(µ³ÃûÉm”œ<ΓNñëþà‹ùÅdpà;“ÕŸèàJ)Ÿ‘jòJèC³läî°P´–„ñ¾…‚u&ëHEð'H(Њö~½Û«É9ï ;‚ ‚@zŒÀ ŒRt½ïíÐ:MWØœ´Ûð—Â%HGßH'n0^Ÿ æ ‚V(òr3{üäÝf¯LÔþôÌ?w{\¢±Vnßì4„à¼ßžaåïw‘ÆÕöÃvPïõö2=ff»}†Ug9 á·ÿ¥ ø …n#óÃJnŸÓ@RD™)•ºÅ!CÞn>äoiðì½ÒÝ1‰ô¾TÙ‹ïƒåà0ÂQ cû1D$`P"àäjÆ«·O0Kt ì*I —4ZÆãgÙšYaxÓF¿mÂÍ#=ô£I© ÷‡¦O°y^–"y»Ii>!›¥ìÔ˜|I^kº¤2´žDÆýŸÓNÆ*‡KÃ'!MÝ€—4`ŒÙôö)ž1NÌñzÙi/vZLÚ8Ï·T7|†<0nÖlCWIkèË«´ zÎË¢–«Ðö’Lfkª qé´Na ÿÝâ;mÝöÛm™b¤x*Œý\nü§"íÓê«øÓnhfeÇ•DààjkðçÛ¶#ÅÏ*Qó8}„ I÷F’f6Yt1ÖµÙÀ!ñ|˜èè 2tÔÄÿŸç(F=åËËëÊ„uZ«"â˜âvÈ8ÈÒâlv˜£ 'rZ:H‰i÷R Ãö!i%”!íš#=Ã~lÔZ<2+oH¯´;Ù†š¤Ú¥МÓ]˜§ãÌ4ÐZÐA5žaF…Wíã%&rÞ*þݤ.¤ð–­ý†tZÂÛªõìÞá¢ö¤;Æ…¸5í•C!‹ˆ*›Ó¿œþî::›,ñÐR¸ˆbb>Û8]6)ÃÏ CtvCO9†ºÌú*l<Ã^5ýsÂÅÿ¼H3àm©ã3á ÚÍ“…H²Õ›¹7ÍËÅ£Áœu¢¼mA?w@´\ƒÆ† gìËüÍkúFãÕ•^T:@Ì lŠáP›»é㼂9€¡K‡H¦LQ»è¿„BÌ S3¦¤ûWÁ‚dU“ü¥ŸgÙ^:˜#°—޴ߓɣ!bC;>1 9·ž·ý5‚ó­ÊùPü¬IÄB[:"“!`¨òxK†ˆä n3U7ýãn;ö8¹O©"×-ÓŸÕ¬%rAöð{“02²#JãófD†'¶qÉÅþœTCB&Ç÷·d(‹©ñ‘À$>‚Ùà´1£“CU 7ÁxôA㲞}ã¶Âøç´WçDó~¶ÚAsˆ’Cñ”c?o¿3~YA›¬XÁ_v³!М¡¢¼Š;¥83ÈNÓXë†Ðb»Hžb¾SijD¼@ôu"IÆê1ZguŒÖQ©O¨`÷1˜!d}’Gùá–¶G‰öÁ\Öë%—_ŒyW Jû³wCU„B†¨¢’6ƒPlRÕPæÈ4ÿó£Hº3²K7†¢¹Çe˜±°ËXëAÄGž@.NY“ A½2§ˆÓkØ (ZÝô×BÖ#¤ðg÷ÝøÁ¢v±yó^> Q»YŒë·Ï€ºßt‰Á…‹‹—äŠExlÂÆ#ÞkrDÅl @*]ÁP\ Xó1Ÿ¤9×^Çá,Bê‘Jîá=éáû»Ö£Ðëâg±Ô¥îâxnR§(ã÷§N`⎒:ï[(TU#u*yü²‡«5t#GAasɘÀ¢NƒÐ÷c ± \˰<çÀ]ž:N>¼‹ªsKåÄǪǽö6¦7˜M°Èጻµ—D<£s¬!*H?{ðl§qÓÁV/ ©ñÍé¢y?ßõ|¥;¥>|>q„ü}G^)ÄTÜoŽf‚á´Ø ek(#~ßm¶ŸL³ibœckò˜åÞ¥=œ ±xco™ )‰©_’ qóàq»I«[xàL9¾×'%„¨±Ä‚XÔU÷dك˘°tOŸ:oc^Öð¤ÎKröäÿý +S§¡Rš"š½ :ºˆNwÁ$s?«wR£”¾É¶HÒÂFUèót"YåÛ~%ñhã¶Î\ML ¨…-íq:«2‘5Ž.=ÓÂ÷ö4 ®å°ñ„!µŠñ„6)+”)´‹!ƒŸ¤Þ~Ø:…½Â’Šh0ŒX!H®i„ÑÉçX¶Oõ$=%·.I ÓÖSêß“¾M?Kó(:Ð&õökŠœŒ™¡ÁÈ7;¨26oRISÖ‘Q]óÎòÆ¥±M -ª‚¨# U) ¢)9NŠ•àæºD,5ðyC‡€…à÷¢RoÿŽÉ¼ÕÒwƒÈ‰ŠÈÙ»œâ¿Þ"auGú¨äÚÞKÖ˜•((š¶iÐUÂ0ØEQŸ„lE¯ZSWX9›êcúh'¥ÐŒÐ7ù×QU˜-«7:Íú”6L“Øí«æ²¸u1S ÿÜ㬑VüKš‰=r>Ûs9ÇNžIP­ ¯+0íSCCš ™ËÛ²T|¬N2Jµ-ŽvÙ;©œ”<¯Ç(ª ôúÖû4_é|å÷ ]Ö¿€ÏêË’•3\ãHÖ+;Sþ|Ùq{¦îˆ²¨Ëíy9fÈp"³«|ÉÀ Ý̹6-xT}KÁ="ÞD*ÙGµ{|"µ]Ô Zïyo„†4Á—Jï’$Qɲl´H…9òÐcü PïnJ/XX.5ŒB Y…G¢À—B‡ä[ Y¯FÇ´TŸX…=ÇN¹Ø÷SFÙ‰¤ÔSˆxPT„Q Ú Ç3¬Ö4S`_¶ ð*ݲ2@#£¶?2òyøìJ´žç©³÷¸^Jñ` ½£k7¦| ^¥¬®›Qõºþg$ð¦y—›Â<æ®hA1 7Ë ¢“.‚Ëò/S4 ÿÆQò³ŒVf‡+M%ƒ*š:ÖTMû²¼M¤(µdìlø«[«T–BráŽ_ ë³26ùÇn{ØTrGÃWèb¬‰sû…¯žn6¥æ™~5Ô`} ÜA¯]1ü¯§ yО9\ˆ*ߊ§C ØݸN½Íz–b0fäµ€4ÎNõ¬ýFÈ[\[(+7Ž2±kGYÐÜ š^C\‹Â]¥!‰ §£ÞÜÏñ¬¿Òúý‡Mû—ÚVZ·(—&49¨…×¾ƒò¤ªNUž:á‡+’ʺÁÚq‰uÞ­ô0C¿ 7¸/($£Cîû2©Ë’"›Q|w4L\tÍu"׫êÄ0Wt \S —"4Å4;“f#’oø”¤bŒ6¡“Î¥aÎ!4RKoèк³9–g¼†ì ÔD¤4"ÍTƒ2¶,œ`""•ï8rãÂ]“qcÝ쪘®CÇ«\¿Ì²:Ô{Z:ïÌÈœµ4‘…ŒuÑeòݰe°Óáh§­‡AxÊ‚Yk{¨j$~VÐëÌ¡JVP˜>«íÁJ›J•§cø‚ƒyl6 Íìi´5ŒG¦Î,ìX϶qO-\Gx¼®<þkš_莦×>©Ç•…wÚ@—²ý²5€ÕÒh‚€¬,^:<룮.±}†)gjóì÷ºôªyŒ‚†¶EÖêżÚÐ[4v® íÅ &«¨EÊ÷Änz,´à§Ì’S^$@sNÞ9š(8J(oYb{ÁöoAš‹VÛ‹%ªQ*…mGºÞŽl ­öšN–²³t”VüEå—ÄvË’Ü\ŽIW?ˆÕ¡³tCÖ¶éð‚~_T'p¼˜:T’ˆKºÎ¡œõô(]&J¹–oêìú$€ÄÕ´õÊð‘I˜©ËXçÎÚäÇü±Hàå*©È¢ƒìe.g{$£:!CØ.;gè¶ÇÙäaqzÔ¯~¾Ò92¤QA»ÃÓ½÷!¦×°@Ïó}àéèÛºïl*Á3tjæì±ÜÑ9ÏÁ(Zµ™»›š; Ï·T ]\aøkjÉHÄ{_áÂ¥rñ•_ ‰%Èc¥¥¸ºT”‹_•˜v/ÂFŽ3ûi_l ²†G¸’Oh‹!¦ïuÞb‹ŒYäÛ¬‘eS-Œ‘ªT&sínYt—T gZ[ªÝ`Ô«Ú±)¦° w®›É°ë·Ï˜T ¼‹ŸP°X×Õ7ï”u¢7w;?Ñ·žÝÁO(?Ǭ·eMļ[䥩ŒMÝ.,‰©°€_âÆžÄ”KÌ $õ©³Þ¤Ô)ý.™cÉ…Vz·WÊØDE 9ò`ƒÐhÕ÷DÛ¤ŒSH €CGÑ…Q|vù¥‹Q6s#UqKªÙwýË$<‡ÎÒåë×)Y­ø1Ë#ñ+ >ÆÎʵÄï©Ù¶f6ôáÞºvçÃ[ ÄŽÛk«—@æuÎÀ·œþàEÙÒ¬ÂÛ¸JSV÷v,+ ôvUÉ¿_÷Væâq“âÑòB[ŒÁÏ Zš%Ð}ëÔz&-M­Á>?Bɱm‚vƒ¨Ë@ÕL»ufŸÞÈN]R­Y«õe¥‘³‹½±¹‰ê’^ü“2¾a¨´¹½+Ì廾«õlµ¦¬!áÇáX$tð/KïðÂPs÷ç+‡LQá:m³ö=õˆ†_Ñ ˜QY¼Î‰xL:¬jª bJ…SˆÒàyŸÔ·á¾Ü©Rޡզ}†9ð´fk:/M˜#:"ÁS©$ŠG ú™Qýi&*bÀû¹mÅErG(»Êv€WïòÅúƒèûLÊé âBp‰ï:ʘèq)¢OÅô\œ%Õ=ðÀ½æÞõ z{LOUÖ½ÄÞDíZYfq(éBÿ¦ƒ´œ°”^D¿¤37u­2š^ùaÛÍ0ÉJÊ ¿m:¾Ô³êZ ô«ëDë¢Uæíò úTè¸I¡‹xËô1YK¿§Í85«˜u» t²³€Ž9e\3 ¬÷ÿùA «Ë• »ÝëaMûAnU–‹Zôv×S†ò„’¦£ïŒih05mœaXCóÖÌ^ì/ß®ÿ-q²ÈÁödh@Í aã;iº’òÊý*_üÈ11endstream endobj 135 0 obj 4554 endobj 139 0 obj <> stream xœíÙnÇ1ÏD~ o vlï¨ïC–ÄW¢À6,›F,àDŠ6,‰ºhIòï©ê³º§gIJ¡ž‚ Ör¦êº¯žg6ó Ãÿ¥<>¸ùÝœ¾8`›¿ÃÿOžð0`“þyðxóé! âžÌžy¾9|xgó+Í¬ÄæðñÁÛ“š•âBlÏ&½}<íÄlŒÛ§ÓNà åõöÑ$fk­ÜþšÁÐ'“°³ÖÒn_Â$ËgÎÕö³i'gë8“Ûñ§ÒZü)´™7ãí¬Qy?ÃLݦl|Rf=Ÿvj–Ry±}1í8`ØÎðTÀÒm¿¯pw;œ ˜ f¸ðæ!üi’Ãä윕rûKõÃëûˆŠî^Î/ÓñðýKáÓdl_¹vÌç¨8¥i‚“i‡+Û~‹•ÒVŒä—"ÓN. ˆöižßCè„À‹7ûã@!ŒÄqvó;P/T÷¿j“¹ï;Ô Œq¾ýñâ=l»ý[yøy}øõ`d\¿ÕmÀJÚ°ÂÞQ=p«ü` ŽÍxž{§lùM…ãûòðpñWõáWùáL%gɽÏ[%2À¡ YÊ/`g‚Á†j¥ 4"a©I_à&¾(Á'ø'Ax>“E¤°‡&’9V5ÐèÞô,Z #,Ù°²?þU7Ê œ«)U¶ã²wRa .Hi`…€áûq *ÙóŠ­%VŽÓ.’×—„s;«ˆ”¢µ«}«#Ë’gõ(ÿxÇ!xnf\Ž¢³Âùrò,«²y7ôA'Ì#Šlc·U¯3¼7æR ¡[(h"ø\Á55¿y]¡ÇhnÉ­œ"<ÁF¸o£ÛÓb5æŒ×íÓ¼i…bézym2KûÕ|‰`^‰V†B2ÓÅ Äã ‘2]H= o=ÃØcá¬/î<Û€çB*n‡?¤f@|·1}c‡Ù½Oïܼóõæåó󓃛ÿÚðƒ›ÿÀÿ|úígðÏÏ78øâÎæîjÖ¯-eý¤–i›˜"dþž8Oª¤•‡öK:ŒÂdH:óG–F^Šbf½oTú(§×G²ûŽ6q¿i{{ÒvÌ’˜ª:‚ðäŠÙ/<©úUZ­ⶈQ«Ž¨vuàvZ£ŽEVUÀ<ºÏþŒX¹,-hŒã¤,†ÜÉ3mTÈ’\wr¥`>QY3ˆsàÇ óV“*'ÒHzúœ/CiLÜÈèŸDÒßÖ óß‘Àd¦\²Ñ2 ûGæª!sžN‹Ðò1΃mOJƒ¼SšÊù}’á'ÚêIb$=n- y_Np6Éd#‰˜R”-( ɈÁ?#„;·¥|ŸÈWÁúzØ$ôv™r†ÿyQ¦¼Ä?;‚#>¶¥T/üêàðƒ·àYys³L©Ï~^‚Òë¡+Ô‚*ldºêy>n…7Î?EÏÔ…ˆ+¼~Yà¸UÆÜʧ‹X;/ã>Nb[TÉÿj³“‚Ôã,ze3aó>õ/qa)v4ØøÞÿ¾7Á0Á¶ÿÎ`sPC­DD`Á:‚¸f½ðˆ"LDˆØoø òè\ipVß¿Mz‘™#”­Òû'u§×å¡«“LÝéqy4:”_ëÏ' ÐøƒÎ‘˜÷/ñç£:î¬!oÎä»` ˜€€è!£~ÿ@Lˆ§»#䔽k^櫺1¯?uyïË/Ñ -=Ôõ¡=tƒ…l}]ÊúPŒºÄfÂB£°žÌ1õµ" ¡þ´Š(ÝtQZ yÅK¨l‚Ád#¼8²x^§Á›sg&°±´ ž—/9"Þ ºNÂÍÁËÅBÝš’ž‚д£4eehKµJŒ´)«ÏnÔŸ—•’sޱp¯À»÷Ǽ+ ïŠ'PÀAÝšôâi\dÇ¥âÿvü*v¼÷ÓˆWýe¦g„ïy"[fUF¥wW]Îþg'Êv5ê1¡†3‰Ô€S[5vBÑ|n—È>Jí:¨:Ú|rWEÆØp\• ½€ï¢-67ŒÔÞÀÐ\DçÑ’0É~‘vH‡Xˆe³[6&|´?uDsËÀªú5ÄÙ).ÄJ• ÙËš4¥Ö¥d…5ØjD K¹Ò^÷ž`=ô .°ŽœJˆ§‡úêº;"$LëM×Óaeé2’àh’1·XaòP¡§©K6(ª§Ô ¶Ñ$4ÁÀpˆÌ.§¹0ˆ†™mS9†±3 ^·ŒÖàÊÚ=çc—š¡­çÔÚOˆI| ó¹èuP*&;Œ»$¬ä8ãŠÇÈz‰Ô95 w¤Ê;žhúÍ¢È)R—õ wF2«v¼®Ùù‘¸ 0ë횸6[¸j¨×Hè}£qàz1Ö ˜šB$íPØ.ÜIHº½ëIîZ%‘l¡Q—w­æµó‘–vE›Ð;±­kܶ™¥ …ü°·îý¤ˆ)í‘+ÊñO8Ö[3V{f6µÐFn»$Aå5AÀ<˜ªO&=Z–]*‚¨¯¯\G^aQuéEOÛFhå‡Ì¬ˆ"•FÉÑÂÑ¢Fh_âà]ø”ã±%n½@<Ög¡ýÞs¿ý}Ô.5¬*gªû!Õ;›ÈL5£W*+¦ƒ§%œ¹ÖB±‡N ܆ŠAÜQ|~ßý\?¶D¹÷p(F€…è¡žŽ‚Ù!C§X°À¤¬úý ž0¬ö«=kr"–}/vüýQXsó^(Œ)ŒËP8g.SÖuAl; ÒÀ´—Ø;Gã½¥* ÆU”8%°¦.¬¼Öš:6ã¢:IÅÐêß­}€ƒ)u³¹~È98”€W ûÓ’¥S+9›!寉 ÞGÓ¯sA„WN½‡ƒCí¡™¼µ¸ïƒZ‚©žZ%[;¶ç–êH´ç*:ÃW»¶ãwõJ¶Thœ¯kGFͰ 襚®Úºü…'rν¥‚Y2æšUž$¹ÜÓA¥èRÍ;¥Kÿpµ‘-šÈ1zCv“ê+r!²í% ¸xí¢KŽ$ÎÅØ¼fÏJ†!÷])Es$qe©¿’tîtc$c8jW%#»ÛopI¼éé•2`Ù?[Ã•Ìæ¬Þs|‹u^aÛ*þTñÂë(`€¢wjûS~vo*q4Ém,5Oˆýׯy+?\Ì ü‡œª ëÝ›ƒÄÅù0diSަM¼Ç29"r™NhÛÏC>¥4hÛEÆó=@MÌ÷ÌÕˆAçÖwO}§Më;áKŒÁbuË:;â5Äu‡á›9Óñ¢¦óŠ¡xÉpž'¢Ëz‚œ’k®Þh¿×¬&‡Ö3ø+f8 ¼9Q(`—Ítˆ±¡Œ†…S‹q>^»aÒæ• u.ÐLyú Í)\H EÞ}#æ ƒÖÇwMîþÂ*h~¸ã·ñ=ïšÂ*Jo”±XÈ¢e(éYÈX§7ŠÞ†4ÜÛß§“?°'ÞTCà’Û‚ ãs.MÊp[8kö§tXÜÒ]VöÇbuJ-×úÒ‰ÝÝÖXtò 3áë•÷ • NJ›÷½÷¼­L«]^m‹Í£¡×sÑOk¦òljî²å'æÆ½,¹ñuVêòºÃ ¢ƒ‹ ÕœÔ íßXjx¹&Wà}“7mo·)RôN˜-w88œ ˆYÍÁ^ÍÞƒÛkäg÷\ÙѶ-ç¯;Ð&Þ˜“²hbÏ‚I C¡pè0w]ïÙ’ (žóÒµ®z6ý <^<Ì<˜¥gíþv÷ ‡}Lè›4{âBÞ–6‹Œ6ÓeõÆI—F›¸~—1~É"fªEv]ÝÄ:IRQMoÊ JÛ(O—¼V£ã=˜Lìp(/s«-|H$n@»p]£Ç\vñ d¹ð)‘Ö˜„gJ¯ºùã,­gN¹"ÏkäT‡ ÉÉP÷Xý JÉÕ«æšUF—Íö ãÁT74ù¦Ìû8_ÒÏ“äë‚•‹Ö ç¯ÁŒ®ÆÝ.`À/Æà7_„³È ã聆¤Ø­=bHc£ÌDô]¦(y6Õ Í®+fò.BOÀF?~)QÝ]춘hV·i…>)y´Üä~üâFFUôñ‹(ƒ¯¯§VǪìšö|o[Ü7(ŒÕG…õ®‚}9Á±r\y<ù¥$3Zº§Öo¨ÓR b7v7Ô¸ŠÛ¨Ù«˜Z¨“îë‹!–B„Ì×uC,ÃÅY qs­e™Þ!yö—Óž8ô›4•øãÈ1`±$ÎKLÞøðƒ¼ 3êÆRv.ñð£+¤Åj½Úúp)';†YsFà=æj”YIjÉ,‹Çk–<Ü ü€¡p¼8Ôב[{Ô} &Ù£Òì‘{”5æ!`Ízw2”¹‰s½ö=´•B>Wl~W¡è“BðÁ=w×Y¶¸ƒÁ6³tï$ôBópUñÚ!Öºwgò0çÉ0^Â}roIèGµ¥c˜jZ8¿¤½±úÍ%=ºšõI’°–>h. v¾`Qº14}‚jôY ”^ovNÏ.ßãÐ[[ ½ïü)¥ûÆendstream endobj 140 0 obj 4711 endobj 144 0 obj <> stream xœÍ\YsÜÆÎ3_òö-‹H Í}8¥KŽm¥lÇUv•íšÔá*R¤ÊGòãÓ=÷,–$TIŠÇ §§¿¾¯7¤§‚ÿÿž^=øVo^¼="›G¯7Ühwy³½ÙPÊd/ÌF -ð_¸ûÑ“£O¾Ü¼{sýìèÁ÷zôàsüÏ£¯Ã?O>ÙüåèŸO6ßÀHø¼ˆ(?ôæ¡Èæ³£×GÔ“þ9½Ø<:Ê) LzK,Ý??òS¢ð.Ó ±ÑðF+6ÇG?nÿÝíxÏSj{‡x]ší³¦%(cÛ7L˜saÙö¤“Ûw"£Û_;Ök­ùöN¿êvÀ¡ˆúùø_Gÿ<>jMÔHy³‰6IFhOÙFsÝK?ǯ;N{)Œ ób\Å ® ÂÔ4çyJ×~:ÂÊí0Eð^¾}‚‡p«;¢½±”hœ®ê¹"Tmv”÷‚[³9>ƒ— ` _Â+”’Zo?ïho­vûg$‡ØÙÞ¸C*Âü_t;¨²2Ò,¹. ü¨â¤g|ËàM}œBõƒÂÕÉéµa0¿²6†Àôʵyšr©Í 2¾ïò¬¯ò!^)n<-ù*Ü‚ˆÁÒpxÂÿë$¼ž‡â’à ±ÁÚð^SkÙ`m bŠÕ@ÐԔȂ{9R íV–ë¢çÖ„ƒŽYuM¸T=3m¼\v |û[ÇlÏ0(c¨àú׈PšmÃdéa~nÂÄÏ^® ¡ƒÕ`^8áov5u‹ä´Å(øVh‘s+#8(а2B˜¾µ0ŠÍ, ¡q]4U(æŽmð;ÉpÍz¯£@³©ÞXOÇœg½JPÊŒÿî Úsºýb@`}R]b–Ÿ°æ7Ô>Sv™(#ÞÈ.SB•í2Qä@?±È‚ÌØdeU/”_æoPs”]†‡À[Ðs=%–ÉíQ’½CÉ£ÃIwù2]O+“_Д Š•’2 ²²c­ñsO røÜ§Ø¨,kb%²Ñ°Þz.¢]8ËÈ?›uQ±ÁEY›XFhÂ’XR* T™ÆÛ¨iZ£É^V+öJævlmB¹VŽ´š`fÌ­Q³¯M« eÛ¤¢¶D»I÷ñ5‚ô´N‚T‹¾ÀÚ U6é:DéiŠ6òQa³ƒ9S`Têäš-0ŽàaÝì+O:‚½˜4ú{A”о6±¶^žÊ1BÆ|÷•)pßGì2¼¯LlÀ{Sð28Êtà'vð [ð€´ è.:p¿9ÕªDx ý€ue‚#X3ÁVmª‰ð`€Õµiµb’ÐÃÌ» ª+¡:A«ö*e^­$¤®Lk@j‹T* ©ƒe@=œÖI J@ÒaÍ€* ^™Á·ÖI©Ë©Ìõ]%Û ‡.ÄfûšbŠqõm¾òD#À‹‰VÂH‚ë5‘. |mbm½$M‡v™ó½2¥âSlÅÚÿ-ÀøÊÄŒ7‹ 7ØY-Ÿ@~8±“ çÜIªaäÌôÚø‰>sJœ½ïvÄ%.µ^€×•iŽx-h®R¨1{8+X ¯kkkC*ãueJ#^ bÍ­û#Јו‰ xm2ñŠ¿¬ÿ[€×ÉÄ+êCä´(æøne”oó•§a^LU Íòò ymb­˜¦48 =ï•)0/ˆUC˜“Å0_™Øó&cæ6˜åe0?œØI˜SJ?DVŒÐ^©Ì_{˜rmUYpKY°Ø]™~FYOjúY“’ …´ÑB·zm‚-í¹ªŽñr¥pÈb¯L0×¼çlÄa:t/f*—(¯L°¤7bÄáÚlǘ`>îx>œâ‰Ú ´ú®4 Åî&P™­ J£{"•/Ñ’cIKîXª5„n?e •5bû5„Rš©íWép?wo0‘Iž®>@#µè©¹u¥omjƒ_SR;ìqPžµiQ/®N¬Ó”ò€_¶D!®M)G†p[Qû_°™û5ßÚ”y'¦¤«vbÔ!™þ; KMVíU‰°T¤WìNRýkS¡YP¬‡. Ûgž4×&ÖŠyJùÒÌÂÚ”:hÖÄ.DæÊ„dtÉn˜õã{S”™‡;‰L©ä/¤Ð=Qw”õ[›æR”4‡lTh“})ásm‚}H±—àÅåóµ Ž0-^Ó• 0-è²£¨ao&(Áôpb§¢ÁWÕNšm$= ªé¸3¢gDçÜþâñ*%öÓ(×ÂgY®†ãÉGàî3…ɾÐ%ªy»ÿ96¢{l]æ°è®¹À+1(ßhó*k‰Ü—ƒ=7;@ÝÃ8–õ"Y™²À+ÅX‘P¥|g£ï‰¾®;¸ •´ë°û‘q¶ý¤ÃÎ&)üËŠ'~ÉmÖ) _ãÇK§_t²œ'r é¼Üiþ²êø”¿Å! Éâ.N€wªœln‡~ßq×pÜ>á:fñQ… ìZeÍìç8˜ôÓŠí§×½`à6½Ì³,7¸“LÓÜðëÉQ –´‡·ÀóHöæž§çÎq. S¬^š0¾¸˜Ôu~s i¾»5ÂpC…b"ÿtÕ¥}ÉÏÊžîȨº9¹häÞÁp%½ØkDS›R’/ëéAq°n=qê`mÐ\Œá“eí¤6.•âðtéš²2Z—¸,Â1úUyEÂÉ9Lü-RÉJMP‘Qrc«ÀÆÖ´+æÓ@ ö¥„8" Ër¡«Ojx›JˆqÞ”Ûï¡@ô§Áöka?âQkŸIòÏp®¾åvÀ%‘Öó£]˜üN 9'ÔóÀ›)Hu ¨/Æqæà·)åJ¸UŒ ®@!ëE8f@)ÀNãvˆò† ¸¬‚¶ÙÙƒ1°hpóƒ`ÂÂDq‡ŠæJ¦x:k_ ÖK4?_ÿýÇ9? mLйÂê›úQÀ¢èZ ÎeÞÆ½ï¤èAøÌpg[µãòº²Wœ/D*×Â>¹³Úó8°‡iP™ìv°ñª µÄ‰;«á0öâÊ´Pò/%+ôJµ“JÌïh™µ‰ÑùPè=zÌÅh‚¯<`Am8ŒÁZ¢0?¿ ˜¨@ªàýÄ]eº^Ì;òíüBè±DÈDÄNùk…8ð×Ó-[˜m]pÐçj;Vú>Q¹7ÖÑú:M/CÃÉw¹¡{pìT·¡$Yîhî²9d´ëBW·.ŸùmBM,ü*¬PË›ËËMZØm0²a»((•º–£Üֻ͎1à˜÷W½Ž¢A8Ä{‚Œúuƺ¥n¹¨lÎóä¼ij­¡…®öo×›±=pi´ÙÙq?8s¼ØÝì|a°ÒS[h“_O´MÓúgöîjv/À‡ù`ï^Ž1ñЂÕɬž´Ãj/C½Øç‚V‚r>Ö o¼¹'ø;®cd/ 9~eØg¾L ÀK‡`¥tp˜Ws‡”/ÂÆñÃÔ‚?aËžçÃkˆ`}•Ͼɇ—ùð<ß{žÏîF7 »Ì]å³oÓ¡waÅÔÐ5†¡¹ÓžÀœW,°&”º`9ŸsJ¡¸ùº¾ù¾KO\¦Ç0øÐ-÷°¿û"“xšN^U 'æ“¿¦“*™|N ‹Û`iûE'éä›ÖÛ_æ“ÓÉê•ñ²iœlz6îÃQtІ1”æ†3Pˆ}:÷gå//ò P5Cx“pÖÒ;pМqý˜ƒÿeúq¼M®µ%n·ýÓ®ˆÂ³îkWÀ7ÏMW É¢ü~&&ò¶éYåwè”i~0 93"øfÀË*zìU!è›aŸKšÃí5_bÒˆ}\TçhäÝ(< Ëï÷‘òCm#a00_hŒŠ{_U¸‹÷¾«ÀßçÃgéÞ– j¸†jkŒ(\É<¿¬ä?9°$ŸŒì°¥Í+H+1ß줌°˜ÿüJ: ægQ‘ä`'¢^»ìbŒBtÁÚAG¢3cÑ߇Øá—A0Èýi›¦ˆùËBôŠ×*ç« 2hûYç¾Ó®'Bó§.é§û!ñ Fñ©‰ø¾àƧñZÀ£»­¯K8_ÊåuÃkaÚŒŸ–ׂžy »Î¡ÊÄE»AP<0H•¾ß"AZlŸiÏ…`¦J}ÏÅ#L©Õ$„'—Áýç*طѳRwç¦DÂÞ5¬üe¥Á23Vž ÷å£ÿK+O¥«èÞDÝÈ£e“J4¸€5‚ùí·˜0–h¢J“ø Kû£b¨ºâ&Ê‹{¸–Z$(­ æ´" òqúÐQ˜ÆV?à,0‘êvŠùdHH™ šR´Ü}Yg¢Zm´[9Á}©YTL3¿òY¼ðG¾JÈê]wœÒ5¯M¿`ÔùÍwYœ,|*X±ÁjRÒ¶/’„ÝËâ|/žlªkÝ3Ìê‡Àõ‚IHXØ2·‹ Ö˜°<É —,NM…ÓÊÁŽÊÿÞƒqCbfqÞÖÅ–ôö~û(w‹Ã¼@J8öÆ.^”ŠÌŽktÖ¼3” ge¹©¡K0teFý—EÿHІµÎ<*$+Ý6¬³³…ßÜþCXâÌWav@qOiµÂuè>,@Ôk7¨´õ¹f]ñ¤¬=Òà{§‚Ú>1f~5ŸØ竸lªN‰_Øãr…“ÕQæ¶Ô ¾¦Áâ {gõC¡¤zUR…1‹.y1“\Ô<¾Ë{£Œ+kô~U£t!2¼…®V“ßžÌÇ\B´Œ ¨´N¹>g´KÈdÑ,~ÛRV kP¨k€fTiE Ô¢¼-‚‰®ø7ª;¤»lù(-z«Pƒëkp+ž(»KN†\jênñ=ZÙôâ‚}-¨µOp¦éu@‹†³HƒÃ‰±E4fÁ}4 hêâîJc¡PÙ,¢ ;¢ÐJÄÕº­ý½úôÃÂZ0ðŽ5pj°«D·kºµ¤g,ë h8Qã^ŽÊî“F¥»Úi\ÔyQ[’ü«4îcÀÁ_ÒyÌ×5iƒDÚѪŠa)ÚgA·ªQ[EßiRµ»[ËW(yî‚\Ý\´¬ ßþ§K•瑨"*°LBü$XxUò)PSÛûN‹8™2zliˆ6ϲ®ûV\g ¯õøUi5Ò»šuïÞÖ‘ ÇE)½ÑwÛÁ )7ºTýZ8¢ ºllœp"«¾DdgÝ•8jJ@1M vÜ”0Ó*=ëË–ÄL”¾“À j0i¡Yé&.ÿj^ª\Ë6}µk7Ý êðM…4ðÚkàÄ…D?hÔƒA¦ôÎT­eGj^ÕYî“´Z5\:!ƘŠHR Jù#…uãØ Ÿ%Ȇvˆ…(XÓèÌ„¹¹´U‘R͹’¦z°Rj2žˆþa£Åv¢¯7ËOe/‚ÊtlÉý޽v­ö—W!@¥Vk%²Æ ªS‘ãAë–ø’ÌD—\±Ý Í,µõn…vWmÒ&•Juz èÁÚ¹-+C~:íŽùæè§Jg¢endstream endobj 145 0 obj 4752 endobj 149 0 obj <> stream xœ½\Y·6ò¸ÈC~Â<ÎÄÚVó&øÁWb âc=X†±‡´’­=tYrò¿ž*žEvõ쮬†G³Ý<ŠÅ:¾*çÅfžÄfÆÿò¿§÷¿s›óWóæoðÿùÁ‹lò?§›ÏŽ ‘–ðd s›£'©·Ø„0IüÆ);A‹£‹ƒ¶/v‡j{†?áÇKø˜æYˆícüó?žïÍì§àíö5þß\àÇumýøöãÑ×BM§8úûÁÑŸ`Ú9C¿ý$~Ý^•aR«6}œ9v¿*/¶ãÇ£m%ìÞîP7… ·'µã£ÝîPÂ3äUÒ„!lï×÷3Bo?­ÏZ§³úðY{øš{xU^–o™ÆÎ²ðàNKü¤-ñtXâ*ïqŠתX_ëçõáU[Aä7Üä[v2PZ¾ªß´‡ÏëÃ×i;_ÓIȨ̂”9÷¿žÊæ¡tI(¥œŒAÑ9±|°;“³I¼UfÒF¥58/æÈ…]…IÕÔH±} “NZë``›ääœS‘p%&£‘ o…”@µC£a,Xû¸¤‚°èI)dc]Ú§T[HÚúÞ,u;wþ´Ú¢jš’DýTõþ¬~ŒÆöDØh ðï$€& YµÄHVµäNÌQ¸öÉVõ- >®OÚCœ0ÚMÐÝgÔR,mJQÛ+K²³È²·M-žR1(‚™÷ÈÎe¶ØmyµÁ÷ÔÂé(dDäóW;Ûq£qˆú(Ë¢¶Sñ ˆƒ0}{.tþ’´S¹`{½RY‰4¾Â™UìFž.˜‚š•)s¶É4Ý+ä„^()ÑŒ×ØË:xÒëér ZS.4ˆfåQðM1qxã'êvƘµnH”Ö[{ðóY‹Ê4¶:ôo;ï&Æu;í=ˆÚ”£$D” /Bº²7ÁDrµAEõ…Hn&CÂSÜß“q!Ø3-yè·ÀŠOÖša\Ü2Wl 8ì»@U±V ׆xËRy¼+^|2ã0sã°úbd 6«L¨_šžüšý€Ä´±QV[cØ­4ÎêHT­X™®3Ž/;êüN´úŒ®LfmäGà6Ä4ƒE[z Ôq Œu ï× yÙiψeë¹·u=d2n½ý4DæAH-(pÿhE§q˥ד°Eþ{ퟵ'ë"í$KÂéN3¶sÚ—œn¼ &Šèr•ZôÕ­ªjb Ì,¢9޶Lh"¨"Dܨ6J›TµžòS«R–ºImh”¬å¬ Õ´0jRæk¯IHÜå…¥ÖJlì–¶2‚fä¤À‚·V"„Ô#€f€gœ„Úþuçg`$Ì«Ò¨ÆØJêîáKä‰±ÂøäV¬ž¸•‡;ø!§ÙeÜ‹-% r4¾8ì· d‘t‰q‰@ß¡ùbÖ.ã¾Ù ‰ xM Æ3  åVá¿ 2Âÿ“~³%ñŽXŒU樿ç“èYBüfŒm £¸%º‘!¡›[r$ÜüqúŠ‘Þ6Ü%ð†×1¿Ðƒ'²RÖsÈ{±`‚ÿXø.¾`E1º×‹ÝOÜE3ž5®,`BtN âÇ5ˆ½D´Õà‘Å L"F³šiÆr^2Ö¼w8½á{¥1l'Ø·Ë J‘*Ä+œ)ßOZ²Û™Å=ša5ª³•Z ]/æTA„¬×h LGÝ qC84z-¡æÇ8Ξ ÛȰ³¤ðUé$€» xªúý«ÃMJÇ^YÑ]—Z:‚ëšAê³M„$ ?Éh˜4Ö!ºo𩆀ÊÓM¶ I†|²h6«ºRYcn‘T õºýpÔåÆgsð?—Ü |ë +LÂÅþRäŒFèVÞ§@YÜ4¯×MeH`Rò‘ò6„Á€ôì¹lP§KvZå:"Âd§žS0z5Ì p$!·5ÐFPȲ̎4µ"éßã !Ôß«Õ8ǧ80+ ¬Í/»PÍ+iczW¿Ì×¶lo\®#SúÍb†7“z1‰:sÜXH”Š8é”Uª!õùÎ,Á¨Ö{øô£kÁœÎC Õ9X?ÉÜ<^zÎ=`d…ðMÒð”úƒ«+ÙÀ¯ßï¹s--SÕIŸècƒ¦T9Á´Œ‰£úà|ÍÔ·o$ ¨«é1Q¡;ÍFÍ‚aö .ld³:€;:Xj>¨+£_$kdmàå—Mß î½êôÃHÛN.üªEGxD`U Ëµ€@Ø) îï­ÖÑí’æ9O”2H–É Å7Ú° ¯ëæ¤ûEøý8%é9"{íz›¦g-Yò›„ø™x…$`˜nbcóÒ'ˆõtõ+806jn¶K1)¢LN‘ÝflWIé,ÉP©WÒû$4‰ö@ã“s“e²ã|:tá.‹mZÁ•rª.@_æ:ÞÁFx«t>3mé'«‚×¥ñG¸*L˜±q¯3àgÁä8tÜ%TPñ|{´¥ò‘dF¦lAõö“˜×‡Ö‚­c#X؇Q¹ï£]?Q¿b×Xó‡aµ=E°ÚÊ—ýóƒEòó\ç¿Wìy4ÔÚšÁPŸSñå€IÍÓùšÒÁ &Q0’ÒAåþ=)wÍà¿¡ö À‘ÁH2&ªY{–•`j›¥½ÕÐ8f†É±$‚0‚¦ü•›GŠÉö[†ây‹-”&.fe?oнÌ@µ·Ncþƒ9ï*ùŸÎ»V Ëj¹¸é„uIƒG@wít4QûêJØauœl•¢7$ }¼ o3£ÿì@J·ªè¥Ïx`Oë–>…ÃZÒ‰œX8+a_ƒÀ#ösKˆKCÐBKbÄJÁ3Bª’Jvç)Dó˜¡ËÂP麯G‘ ä¬}-5ÊeÝβé&kuÍ(p>I©Ä‘ACñœn=ÎXùâhD®Ú´ƒ„ ™ЬÁðIŸ®FÎ¥0‡|ÌaB˜X¸VG¸Z5”~Er@u>“h·}[ªw[m’ I¬VÁÁÂÝx´ßCõ…§sým­!W;V\T1„ÄP¡Ÿ!ñy—xã1Ç0@U„³TÔŸÎY,fð\ïç8‹D µýžÓ`r^XShL*ª0·<"í,Ô®&j‘k á4bE›oU,RNF–Ãz¦š)Eä$_źE߇c¨´ÚŒþ¼§,o$@¬¥7šuM†Åû­%~G–s9ä¶ %=‡ôYAóÀ.™`2Í;’€+uf³¼S"¢;/|ÞØ\2ךà¯d  ÎX çfÞn%)úfwbÍ«%º±È!"ßJ¸{Iž¹ÁC’´8shHÜ_u©Mší‘ïPİúv¨|érkŽ)Y!n¬ l'ºËÈõNa𧘡鸞/x!¢>érB"i Í;‚—¹ª™¬]Õæ";@¸E™g<>²ûÓÐ2¸è£ýº«vLÄë—\þ,÷ÆÚé˜M®ä9¸ã$Jr98¢¬ÃªAŸ,έû˜!9T—þÖUš0ÄÅÕµ7E ^Š~°¨»K&#AzvÔ®í/«§X¤R’Cžª×E6qØ[Ž"ûÏôÕŒñ¨@Žü?éK7×Â÷®¶,Mq­ÎF§·¡Ò#0°·¾ÁçjÄH¢å–‡IéfÀÐþ²e†4`b‹oõ[º4ä@(ù¯ /‹.\%2Þr¶åo­†­6æ¶öé1=IåÌÿÒ·3áÕ½lna›ŸR5‹çÝΫW'ÝŸö.µÒÒªÊÅJ»Ô%7ì€ ò¶÷3}‰XÆËv,¢x4²ž-Cõ-?+3º®œ· xµc]R#›/ŨĪ89Áaœ¸–3e>\N~=œ³ÿl@÷=… ùR…Ý~¶£u½äº@R„ó›ú”Á˜Ø7—"}2†8¸L|"SsgBI¤…w¥ScÕï'C- G§]šºèF;C„Ž’¯«t¿Á)ÒPn¶×Éeí aR…z9?ÛÕJNÍS9D/iÒ¡yó’·r䂺…ë.5üŸ3·ØLóÏš¦¥¾¦°ÏÆ+pE¿]Ø>O‘Ï~o¨º*F²„ßÕ|ÇPIþO`X Œü$Lè3[L@F±7Qî\öjѤœ®·ÐD¿O ªTEÙ—Vb˜lyE®5Yn½ÛÜû.gІ(ÕÍ!iwœ}@ 5%¯æ–æ¤L„ß ÐÿnHŸ0û˜¸(giûró kœìJLrL«ÓB͆‰t¢À#D’DȤé :Û¯vou>YaÕRI¥×³Ý% N÷Þ-êÅ£R#pÔÖõG1@³½_ýС éPØõw“:A oæú4_xåŠlNŠIÑŽÐbÝlh³'¹á²w‘lŠûÚiÚÏLèa‘öœú.þw‘…[¤ˆköö6u CQj5C‹¤Ò²ŽŽ˜|’%^­¦‹öG–lÊ ]D€jQ“ý`E8µV†Ëû²s~«”wܺdçÑKjJ‘ârc&·ô g¥:‡èÁê!RN@weAÃÁ ÌHnuòI—$…]üý‘"!.*ËË!Kw5"†íEw Í» n‘Š­AøæRËmÒnkfK‚¢_ ´;Ý¿LÕÜ@ˆRÿ,ªP( Ïw¨Ï2&~à›Åkig­ËyœÓ(A^_ìæè'‚Ë#N‚¹$™ëȵ@Žƒ€Ù´áRñXúýp⵫;³Ùs" è9ÿ⥘¥ÂìA¾û¬Þà­Ê·¶ $O`¯¨ÿ“³Ä䨛Ö|–º “d|zàÊf¾ƒ'0ø'埩6¾®Æ%W-*ÇE$ùŠJeq÷Áûc¦‹5nû<+¬é.1,‹$rº —®“O’¾bfÓ·°)™²yF#л¢ˆ‹@rHpwUp‹ü5=E d½hÒe·ìI-™±Žø†%è¦FnoïèñMòb‰%½ûu­³9T n¦CÁ$‡Q: Èíî-Ä›¹ãaÆB(r@‘0šs>:ºü3xñë¯t:Ã?™Ž‰ŠØóÒΔ÷9íæ¨h7ÝI¾û©,McTÞà×^Õ“\©‡¨å®¸±´à¯#—øŒ(Sfj8鋼¶‚l0“IîχزˆrgÙé^Aâ]è^ˆ""ƒ$ÇtÔ«Dɹ`¯ÎófNõÑL¶yB²6/•¿WÆpssmµ2A•º~ąáFšYÓJ ×Í·óR?xcNÕµ$ëð¤¬ñª»ðjå’s+V.«€®bJQý Sœ·닪•4̱¤øácee.öÞùà¢õ½œeü• ¨OÇ4;´€“âBÛxm·Àã¨Öòt±‘‘©Ð<$Simþúl¢}¬DæÝUyOçŒØÂÆJ|¸Ö*L%4 ÁjÙ(›ˆÐÎOz·.ö4·—ñä¯Lø¼Ô:£—° xíóØ6‰-ž eEs^çÞ8dšÐD Í,æ9ÓÜ£ Múž%"T:ÜÊ-3SAmð”\K9-ó”uô=™)3pöÚ‰ÉDtMß´©H¯qqü{É:·Ê¢ö–Œ“6ZؘRÔ ë*˜Ê„Wɼ+XÐ ¼ØÁ:)ׇ†Ðf®Ò„¯Û66“×K^ÃÃë¸&cQÇtD Ën3^å¢D£_O‰ãÆ·1È/Ð@p¤´§O·et“À½ÂlCDP œYcA¿X¤K~Ô`õð!X5`l¢sUµçz‡?þ iÑ×Ì ‹fã¤çÉØ[H÷'É;%ЏçŸgÊï‰ 9.ýãC“6ÈÅõÔeF iËfZxÝع¦N²-õÐ Úbyv™À¦ÿ<YßB PÛòP°=†Îб%‰ÇT^²WœAàíæP¢Ç[w“q"•°EÿòíÁÍOÃ]endstream endobj 150 0 obj 5108 endobj 154 0 obj <> stream xœ½=É®$¹q÷Á'@ÁWUi’ÁÕ$H–aŒ ÍÌtéÐûkáe÷ô6=š¯w×`VfÖ{UÙƒFw'“d06ÆÂÌŒz·ƒÜ ú“ÿ6Þüûwn÷êÃØý ÿ¾ºyw#ã€]þïÙ¸ûý-¹“zmÕîöåMš-wNíØAãÍñæ‡ýïG)•ÌþÏx5¥µÛ¿?Å`¬Ò`÷oG x©á´¶û—xÓ™ÁÊ…›ßÄ ¼´Þ¨ý§ÃQ!J‡ý“ Òù ÷ÏÛÍ#­«…±nÿœæ¤%Xål™·÷OÛå=‚RI½AËÞ6D V{[àÓHvù:NZï?"x£µ4ùjK¾!~pˆÇñ&@º0EŸ¯AyŽé{šf‡`Ãþ÷„‰iO)‰ÀÞ$¤Œ0„81€“û¿î#Z Iù†¸b…E^†n?"s¬:„t‰×Á"Kàå`ðRÆ…¬´{U¯þz ˆ„ùÛíÿ NH‹Z2$éÊ]Að»Ûonn¿ú!­ ` ñG)%ÀãbtS¹|ôÓ¢Zø‘ÀåA!e^Âó%Œ” Uïö9ªÛ€è8ç Õ‚õƒ÷Bø2ô‰4ÚI¿¿;˜AJ.ÊÚ;”—Þÿ±QÒ(¹ÿ yI=ŠTÉ JYg¢€Q¨¨–±ç=¢h­DNd˜’šD"<*áÏÍ{%Õþǃŭ&‚B*M¼0(­²Ö‡:îubx…n¸S‡jñô`H±6[æeš„re“ÞŒ¬QÉ >’—ð7&SVê!ÏÑÆrè M\œÇ#^8ë§ë>ª[À©ù¥’Ø6l^ÏQ€dãþ2-1ˆ G›%ð#Ñ&¨¯Àð6jêôÇé„ò~+‹$Ú•5¸î;—÷’E³Ñ”ÄéçuxÖMAé~[»ólL´)‰Fª¦a"dòiøó™'Ìi:A“TœŽ;ðFÚËÝQÜ‘ΉH"&¯±Ìc/“ q›WÍ3U,B±-Rô5¿)kë~[¯> U­R.^ºkÐ;¿ÿ¯ª;¬ÿÕD I%­ Öì-þ§Ñ Õ4Ó!,»ú@ä€ZÊ6H†ç™žÉT*´JKûÃj\G±î¶JÆUËPGz3¿“çM4iºˆúþ´MúGb˜ŽÞ©l¬ ´5 ½ŠÚôȽÒA3(N€ÎŒ#(B™ÿ/(XÊèldõÎ 51ÙãAà>Ò¨ƒOÃ߃¼'-Gƒå›]# cFÆîê´ÿE%Ò+çL¹”¨/Íêÿ6± +zÎ~k«,'’%ŸÃ|D½Àœ¬ß{Œ{ЗT3òŸý¹RdQžè;QHÈ]´ûèè”  ÈùÎ2"dˆE` °¿G {'H–QOÈ{y ZÏA3ÄùH_÷£zˆHðã =E¥E4K®F•`¾x²gv‰ÁFÇA=É¢€l;£IÄ ƒÊT´»BÖ®?ÇH΢Õ,î1Ã!׌H3“ð²á\ÍâÈV¿%ØÎÓî»#7A‚ˆ» äªè®´øQG{DááQEcDkªpE)ž‰[Z4é1 +Óiô›Ù5ž”C8ÙaPÉãðÅÙå}YçQa8äG]üMø*-²Ká\2=/hÛiºèð~º hå%6¡¥‹½l XÑ{QlEeø1Êߤ¬!Ýlkœgpƒ¦`yJG.¦F6eå1²3q(Ý$HâG ‡öeŃó=PÄ\ã{Ÿì}JÔ‚Œ.RRòáÜlÄ*:;ó„í‘-†óÂÒ,gU æãäßÊèÇQ î"ïé2°H(—ÊÚL ªG¦Ä;t¯ŸšÜÎP:+ücV‡Š6ðýŒã²IDòM ªI>R©,Y[ÖémŠ ©”¯`îàŒÿI&N¸òÒ„9ðdÚºÑ_#!VEsž×7·VüÌZ2®%ü¬“¹f-Ls`²–úRkÍЗ®õ‘ôÂûÌÜb>»ª˜xv1œ{ÓÈ-©»˜•1œÐ£ÖÙÕ0,ЦeNù¿Ìj”zÏINýUhS¿êj°¾Úº¢\ÄM})}Ÿ0üÒF&Gå.ÚåŸÈ'в6ö3ÚbIgH–ßý…a†@™ »û2:%ék Ö[_MÇcT¢ì%BÖD@S–MT¢wY',£Ô#%Zé4 É—³9‘K”fŸt†-ƒHåº6õˆzÚ²SmzJ¹7ŠU¥PO™ÁÄÓ²\éxäÈÝð] 0|Á¸(ôôŸSxJ'’orˆ%Ö£HnNƒœ—Ç@§u¿ÂÕ>µ %°N&”ÀF(nS3‰T jüåb”3M]}ÀÙb„võœTSb&\âEÆ{ÁÛÌã¬âxæÈÈ@±‹cóïÚ’ÄЩ‹:ï8Zدb4û›v÷§n/çÁ³¨”b,Šj½™Sý‘@LR-ëÿ™Åã?ö(2&1ŠkОsƒÌ¨œ}ââ³Ú tSóÙ3¦ÊÒ©®6Q¯ÀÝ̺©j£/3Œmþ7“FnºâC\Í¥«›ÙæŸq5sS?Àf¶Ñ˜‡ãR˜"•í)$7ùR¡—!»0ÅË—-bHKÇtöjËv6Ít‘‰a[­õ³å>5+OqeL¦:ÔqdÛ„™°ûjÛ>fºÐtùsÙé„-f°ÉŠÕó„š?7#•óNׯRˆ‰N¡“K¾›ÑRÍJUš=æø5àœš=ñ8=‚S•Høâ`NÎ? c˜É«7g’ÒØŽ×±yÜ\²§S›¸~"çf-çä@NË"¿©Læ‰É<=qëF?¯»AgÎðÎÀJGx´‡æH*ñîv$­û‘ßPu Ekÿw(‡Oo£»n®5ŸÍûíìÛU ßî};…*dpÞö~–“)o#"s§hé$ªøð‚’}NÉ0óW‚s¦–P¥'Ä">à`YOÐú(¯,0kSãaä „Ñ%&KÉ,í³‚LÅŠžƒ£íÕúµs0m§ 6Æë<œž2¢Aœ;ï’ª ¸ÓÔªœwÑOç]^:_¹l~´—/Óy—EåÈç]–ó.qW:ïÂàFÍi¤…ô8;£àR L æS‡jË{Jý3³Uí°ñ®!’)Öôµå2€Ë”`@?sÙNîòøB]QoT8‰Þl§0GÌ•QŒþë”ÝšC€N&IJD$·îsËZÚ2ÔB(ãCnѼ҇JýjõDcÓŒ„óXçÉ\¿‰8ã ~=îÛ—_bz¤»ëùoç¿“œÿ±UW¶cçá¿ œÿyþ†üg8ŒSü&¸»uþ_ézþŠ·ñÍ$ãj•µ­fÃ*Í[çšQø_æoÇŽÃx‚_»\åÿ¥6à¿3œÿ.pþÇV]Ù9ŽUœw†ÿqFåž¿!ÿã ~=îfÿBº{ˆspêÃÈ bNõcß½xóöýøäþõ/O>¾~ûæÄo1/—ÂtNÉ7}˜z.ŒÌPt¾y/qêü<rZíʈó0fè£a¨ `À  ¬ÓÐ-Ôÿóª×3ìôØWú×gŸ®ý˜Ù§Ô?fö)ÿ3[Ôø%švÓi  X ™[5Ð ,ÐÐ%|{LÔ†!)ÆúƒHÚþâ2¢E°>ýTï%ðîŽÖ=hþŒ¾öAãút¨Lñ6hÏâíܪñ6ÅâíÌiêÕ"°¹”#ò¹3§67µÚÜ’ƒ-q>…ä¹UCrp‚…ä`å2EÀ»øüð!‘xäJ–CX’²fšý’ºÁÒçIxý¯Ú`±ŸÎ}¤ˆë:$}ИÚÑq"ÍL­àc/J†®íLlgÖþ8{ÉŸJ”wK4S>ª6ô§=ã2–Sª2Ö§~õZˆÄ÷4fÊ"­Ÿ[VS¸eÞÆÌ4¶sž]ûÅY©´L]·ÖFQ~‡Å¸Œå”*±$•k!n ôþ;mt^?µ\^Íû¸Zm±+µ_Ÿ—J9êH'"í¨c©tXŒËXN©Ò‹R¹â¹€‘Oz•µ”L«VqµÖ»rÒSúÓìu©Ô³¢x¤ÔΊ6È:,ÆE,§T¬g2ƒ+!naÁ‚Cç^N( @iÝç–)¹y ÖJÞç™õŠtr%øKó7Ü% ‡qŠ_{‡íÌî¸Ò»B³&gÈÈܺÏ-§snC8ksÞ畾… 9²¦“Ú±Îßp?0ÆüzÜ9¶3ûàBH[X%‡ð4÷Ÿ‰„e¯Ž(¥Ù«#±Õà¥ŶŒ+: ÇE ¦¯ÄWBÜÊ$:à&ÑÙ~«·v2 Îô¦!Í^5‰í[ Pì†Øjð¢¹t[”uŽËL)†sæòRˆD‚‚ÌN4µt% ^hÖ¶h̨g×~ÙIì´Ø»¿!Ïç£ WÞ|ö–‹+¶*húܨ¶6ɲ:dÇeb¦ÄË%á] q+áÕ(µ|¿ZmgìŠù®ýæÂÓJñ1 hKÖ#4.#<%pу] q+ÕŒ"¶j^•W«íŒ]±Ö¥âÁÎ ¨¦\Q@[:¬¡qá)ËëZˆúÎ`î ]cñ†qõÝ'§/Ú[uæU÷‡”ç ̽îþ8soÏ@H¯„1E¤[OÏ=}'ü˜GÔ·ºÏ˜Ãë‘ æ˜³Âùƒ[éN%Ä–ðC0;iÕVÇï$ŽJ…âúÊ]!ö?ÅòãÈA™¿ÉýL\€ª ¦rq•±”à0ý C㪗¢bG°ƒÈ5C‘Fo““¯X£µñ4ˆFH_ä§O3ŽÇ{ ©ÆSÁHOµPÒ]ï"Oh¾$í¦»®/Ýe¼ïßîžÝ8“OóÞQˆ’ðøŸ%¶Ñ¯¥L î9àõöXÁèT<)—”µÞÞÛSo[•ßO}©Vi£Õ¦ûÃÊ¡P˜·ý‚O§…²Ô•­ŽŸ«.$í^1×üHedd¨¨*ä:&Q³fxǪk³b T—AÒ¯h^³¥U¢2 /R}iª¤½R"0wÌ}*ïàñu¦5ÝOJH/”û ZGå“ÄÎ~³oYáúÍþ™J\´cjQ°åbT–ŠàL+À_[ck†AÓr ç \Åœµ‚l¨±ØCŠ»äÚZÝ”ÇÔ3ø-/EµRÕ´ç‡ÒÝ/=|1¡œ©2Q«7~yÁÄJ—ÏV^¼F(hUb-¯¹‚LJ}í°hˆäb­²ÔïgýØJØ°Š‡¥ØXüu«\Øf¦Ð(Íš” bÅe[V$¦PÝ[i®”OF6­-Àæ+3Ž­”ýLÝžTSÖÑ^™”kEY¹œ¹â¹aê˜Ç˜¬®¨²ù—ùÊ´\©*„Òþ¾Ý­³ÇVì«ÞëêÇÕÚWó*Òª`½c’›8ÞS¤›½>ñ­Qrb©¥üTÄŠ3°ß[¨•é@Gj®*nKBWñ]›¼§ú }³Át?6­j8-vÚý0 +8ø»Zpða?¡!çö$íWIûè' Ø¯  j]ù¶¢ùORYe!Úïfdn•û ó5óäf~"âWùU ^÷ÊÑ;3Ù¿dƒÖZqçÛ›ÿFyÛendstream endobj 155 0 obj 5545 endobj 159 0 obj <> stream xœÕZKsÜDæ¬3?@ÅI*ÐxzÞà CS„"°U(!NlR8à$N€_O÷è9òìêa+ÙTÊYiwfÔýM÷×ÑuÎäœþ5ŸO®²“Ÿl~ñ*ãù7øw‘]gäÍÇ“«üt‡ƒÀá7ÌsùîYVφ܊ÜJÔÈwWÙ¯”ºø¬¬¤tL€)D|+ã[ß¾-…g‚+Q<¥/ ÓZá˜ßËJ3¥”×ÅëR2猀â1þðG)˜µV/º¿í¾#Yy$«æy‚™|wŽ2>ofÕC¥•¨TôOYq¦¬1®YR©Ü2o9„q† éÂe™qœ»z/NH“’B5#£ÏËÊ ÀÅŠQg&„0íän ¨­tˆkJzÄ ñ•©9$E‘L›~µY€A9$ ì‡Q©@C{®@2…ê,çu‰š;ߦБÌkoí8c™ Ð;2› `Þ½Ùì]é¼ÝÛfÍHòxe’¼Š†OX£„;Xc@}[kGh‡Lµ0Ì,Ü=x/öý”ƒØK´Ù{µrÔ_.ü謼‡Nαò™HGV®7ç\ùáYyO¸÷V>“aÞ…•O~tVÞC§–ry¥sÖ©âóËXðJ8Ãh›gFµ¬þCI‰®t˜WR)feÃB“{OP(¥@ˆþ¾ 4•ĉtûwŸ&7—†›âÏ6GþGƒ'Kþ¾¬hÕv©+¼eÆX£†—ë§rnCRÏÃm“[))1¯ÔçÚ–uû²+5Nyjƒ~®Aã<|„Ò\›¢ÂŬõŠŸË !EG³ÅM$ 0¬’Hj$ ´øöQ:®%†rÁ“uý¾ ŽÐžqÔŸ™®#^³8Nµ{ Ø2u‡¼0Zmy¸ncš¤Wœ×—Â&IÍskL}ë§{@½)S-¸±©%ÛÚŒà™¢p„ÇÈ~{ç£¬ÛˇF.JT¦Bg,.+ƒlœ¡ )ÔÜ‘šÖ PÅe~ãðmÔ%NK2Zv¿Ò“*E<áFAy@1èÈC¶‰(F"/æ8ˆýÔù{xÆæ›Õ3Íe½¼³¦xI—Öqc‡¢\íð²& bÛdd°³VS“±÷rD>Í—÷A@Š“ßkŒ¸1‚ËmúÖ??GíG“£YvÑÖ›´³á¥›ÂnZTÊ×iÇŠlõ-R–É]K×ä{cÊšÁèCÊ¢þÚž\h’5om—zVʆ [SݾA$1®H§’1:rlHö6‘V¦mrfj) Ã9D¦k_}©åtbÈ0Ö¦ˆ¨¸èYz6«KÓ1zDŠ@1H¤Ž—ýÊ ¡ƒu-‹[í¥ÇªáNåˆÐm²;­eßn£+ô¸”¸õN ´O0l#®ICEA‘Á¡ærbÃ{Ó‹+±Õ\NM·ÇwL_Ìåó YÝJ’ð+Xè?´4®\r] wå ÂQˆ+°¼#ÄÒ0K!q–Ï‚ã{ ã´dªsFÞKj²éè-C£b"Š_wÉnŠä) í"B”ЫÐýJÎÍì:,- nzÐE©oåÊT.( 3ÚÖSl<šàâ&ªR¶ ý¤çŸõv›H’èN¨ÍºCö«›Nu4ÙSŠ è˜Ë£ÉlœM Œã°Þñ´fuâõì êk¶áŽ,8{–iK·aÕqÂ1mCoÚf7Ì Fª>≚M ¸Du1—"2mcÉ+*:8µŒÓ¡gVêa&¹3mñ)Ô¢wBÖå)Ü¥…Hç)ûqe•ŸŽÍ'~å…‡-[ÔªžTsé“¢ý*¶0WEõÕ©6×¹ã,ó='ú¡ðS~æòk]„FS·±J´qŸ0·ë^öšà(tÏaz}ÏÚt¯“|(Ú$Ýî@õ 6|¤ÍðH`ÂáV©#õܳÿìc“­[¢ìȇ ±U‡Nnꬷ‰Ú×tðí0@SÕï@»Ô3<³ »i-¯’^„C BŠÒ÷î…BŸBÓRjpÞÛTQ 4(œúÂê¼/ÃØ€ì²GÙu®B÷’ç•Åñ¹¦ k\.VRÎÑë §gÙÉÙÃüõË›§ÙÉ/9d'ßÒ§?~‰g_åeÎrZɘz!ZQS‡PÝã:(5¡³d±fžÓ +$Zô¬ä þ€áÙÕïÀ6žÔaþ(û„5Äendstream endobj 160 0 obj 1684 endobj 164 0 obj <> stream xœí[IsG¾ó æ¨ÓDwد©}áæÝá1Øf41‹íƒB€$#ÖL„ûdÖ–Yýê=ÌbŸ„D«ºöÊúòË¥>‹<ø¯üüìÖíûþàôê–8ø~Noý|K¦ å¿ãgB%-¤Y´qêàðÑ­ÜZxuàµ[ >»õýtV‹sRÚédÖ‹pÎMf±¡‚TTö|ÞˆÅ:e´£Âóy£ eât„©|SñÞëIÎvúqÞX˜½aút6KΆéhÖay‰óQJ9ï§ÇµÝÃyc¤ZŒÓ—³š–y££†¦¡­¥uЃ¥úOëà ¼7ÐTM7sð‹wQck§-´öÓGØ‘=ì ,Ùýt]Á¶`Ï^ºé–`t-4Q¥á`—ljb§ ÔÑZi5Ex!°[Øàpæµvû‚þ|@«é*mX‡¥/Ão놖‹5†ÊÚ¶°«¥°?ËFI“6JÂ6ƒ}4Ë%ÆòðrÆ3W°ýÒØ¥óï=–j±>·×Š˜e Ä—É’‰‹ª£œá Á$ÉúEã’JïÐãí­G¬ûŠJÇ =žS³*}NWôx¼Õ6;¥Ò z|9šîÂF+»hu°Ý·N¨¼þ_áhQ4îD:L¸ŽBJØÅ ò÷~“EN~ÝÆ_Ïð×e«ü°U¾Â_×{êÕÉ=n…Wݾ—ÂeÆ«k¥OóÊe쀞Ín‚yvéõ5¤“‹0õ¬—",i7¤‡` ÝÂõ˜â<ÇcAÚÞTÌ›¨€Àï¼eo*ÆúEÈîVa“+„hk½S @py´Å“ÕbÑÒ;m54“¶ÒË!NPßÇí©5)s€ƒ¦²‹¼œ¼Ë’Oó&ˆöÑñâë‚-»Hú 7Ó9ïL'‚ \„¬í¹<,NàÐZÖ8áät7ÏJ=ÎÞ/v–jÃ⌸©‹^H˜¾üó7Ô`@-Ioñ²Ã¤B$Üc\‰Ö!­|ÐÁÆ j*Û½Þ²/ÚÜÅM×Ú*>>u~†eRo°¢R>¸ŒB/~ˆSxî(œÁ”£²¥Cc\-ì¬ÃÂÅ”ÆæŠR€j|šµ¤Ñvú{ZƒU²LûyD­©ËWxVÚÏúÉ»jUÂ%5ºùÁ-¨D=°çWYëàÕFÊðÃÔdÔàŸsûóN•5 å~ð¦ü~ðïPʰG¸ *óX~,üÀ­•pô°›°ÈNQ—›ëDÄ â–aç_Í BX½Ö™'¸Y¸ÿ¶ ŽÉz9[û¯Â›ëGgÌbmx½~T0XüSCþ©!›†4Û¬[÷ò>‚oˆ€/é´@4QLëma>ªºóYNQ†S2éL‘;¥¸=}>GD3#Çú•B'LÕwZ™¤ ÞEOuTÑ{Tcx&Ñ8W8£·HóãíYžÑèLsÑèƒõcÿpóˆ/{rÔ ‹*@i_Ê&/xÚ§=¬Z3"ÌÌFÔ×» O¼çcƒuw;˜ªÃ±§ž÷-Iwu2Îø-b¾IJ ´˜±Ê¥v¬&!ŒâAnìïuïvܘ^×"6L×n#9A~¯iKa¯hKá+þÄÔl)ÜPáɨ÷Çôø°«JÚ¥)Y¦±YOéñˆêž¹ÄUÒdÞH®ÆÙ–¤Ê¢å¯vÌ¥öÄÞ¹Á‹VõI{Ÿn˜Ò}MÝ•Ä-P z¯À¹,þÒ®Ûè¨Ãbe$^õ¤² =Í´ý)þyÚ¨ÂíÆ?.ð׋ž„õè«ä·º)…'Ý~”Â3Üc`õ–‰Û³Aë! 4 *ŸVÎŒHf÷à¶²B¤­•å‚ÓPa„ÌY¯ä3`•ˆ9tÕ7`r€¨¡¾‚õúÆF­€£ú`Kz" c(ò™éôž«ÑŠ©w¡çP=}‹kŒüúÍ,ïŸþ1«é^ó”}@ˆÎïÎ|9“ïö–þ^´'›å€ÀíJ¼_´GÜÃ=Ô‘ÉÂÆ¹ŠL'œ—5*/릡´™J½áÄ). ƴĦ»I–e¤JÈŒ;A¤û€\ÐTàákÖÉr\6‹hï¹4 #e£/zûf‡T"תX“Ù–3cR¿r¶ÂPO¬¥ú£ÜÒÁÿ¶EÀG`y>jÃ:"MÉtâ‹Ñ4ï3¬­FÚÕZás®&þe«øQ7`}ü¶*Ëo¨Œ=Þ# x»õÄ€žÀ£‘²d›ô,ƒÒ&Œ…r¥76= Ì.uàzupHW`iêà+,”2¹MÎòO|•0ø sÜ>™54Ò1z£Àqìn˜Be0†)îx-h¥£ÜÃMA7%üã`‹˜bçÚ‹ ×zü™¹D™À`‰q)žÃ\RÕ¸Ö0OÐ44Ü/¬—ÑtØÈ“èá”xŠaqn]5A0ä …yØõý[ù¾}Ÿ6€>É^nÄ+†Î圕 ˆI5ºg5æÔò«ºèDyË(­ìŽê\H· ¢Z&£)Tð*;YŸ'J uõ§ê ²ìáje1Ù·Õ BÁ0]Q×b&;Ãܧä\=ke̹2®oUfÎÝ';Ü®H.·MV7²h æ\E?,þ˜b"×g•«ÚKî\õÅkÛQH ™ÑVc¸­¸†ïAã \œŒ@2ã2ÎVÆ…’±ÏJ³·Þs-–]x×½÷îN#ìé׫þ×R9=©0î—üe¿öb5Ÿ”Î鈷_òš{<2#5ö†¸Ëúýý÷EºÿmP s"ƒ&†Ãx˜Œst8îc‚Ùñjøî®ÿt“`Úû¤<ƒ‰’2ç:â´ÏίñD3Wný@ÿQ"„5ï Ã+ÀwESXãjˆÏ»âKÀÇçDbz_6VŽã‡È<ž*ûâ|›9ÎçE²€Ã.Êé;¢q/úMb{¶ÇG bŽD·ô†!ž©F5¬#´³Ì9âºgÔÙ–ûCÈ!)nHzÃ!É L”“&s:gõ™W#DñÁ[µ„†1n·oa‰M޹¯P¼BHik¾Mû±ýÀuµµ^ò[;ÉõþpÑ Š¢’i.;E_0{kd™ ¼L;Œ¥ÕøIÔzAD“OoÁ,úqŸâÈŒ¨ßåyžåPæ7¸Æõ# y¼Ãå"©½ƒ‰†'|Q›Ô$¥á²š€w°&–¶Ù©Ë#\]•-›! 8§{Ôä¸3ÖÊÔ“˜6¶Z®¾Tc2ù„X}= ÿƒ´ŠÄ^aá¿Q¬ê!x¤½u±ÕÔ~°Þü.7€dfõ2ãSi¥Ð Þèp÷¬_ï†>¨–º@ÉÉv­‡óA²J„|–¦Õ¼è­Ñ7„—$’ý’Êòs.Z9Ì"€˜±Õì‘Ú{ýA-, ¹­lv„1´}ü3øÊf_|Ý”Iõø.Œãœ[žÅÛ˜<‹Ç­Êiõæz}„´þÚù„›‰ZíÛ..JNÜ­ $7o;a¶è¶3€|Ü*‘ºæÓ­¾[?Ëj…XñÍ£*H&_­R1¤PóØÜóŽô#ví«Cò)#&ÕEô§µ9<ºŠEƒŠ©é9ÉØò‰ºËÝížåë¦ ~gThŠ&ÃÆF‘>p-}\%€h«öyÄÞ“}rÙÊŠå à Dy·qÑ6±}$þ!@Ê I£;ÓMšÚÔ·Gƒ±é‰™gç-Ÿ}’É#0›@²L²±¼ˆ=E­Ùr†F¡Méf5dy<[”Ä:O ¢DŠ0žLûŽBðº5ÍŽr…F®‚¨©^ž5تp_F¢®…êcx¸J¢Ñ^5ÂEVÄDFU ÅÂ80 Œ²xð Ž{‘Ž ÝG½‡¡ùá¼v@àž®ÑH/xr@œþ9ÇT‡»‡XíÉyh½˜÷õô6çÁª+Ò¾Ë/T÷ ZP$`•ÇɧœYZu±‹ŠÖç•ìA2­Yv`âp}ijrÚJ©]àQáá2ÁˆR¾Ç‚»UBŸK²ÒjâÚ“Ç/öpètL òyÃºÊ ¹DlÙƒ”Š·§Ã&ç$ªH¾‚ƒ! ]ç#î3DrÖf=n&e6&‡%y Å($z!ßÞ[–³QuȘ³K¡ù£Dbæ`•Œ ²™ÒæàòfF±Û€<Ú`f÷LŽŽŠ6QÂÀ-‰»= ¼ Ù_Ï¿m zhÊ2›ÊHþi› ‰ìø“œÈˆš4ÐsŸÔÙcXÊJUØ¿Ú Õáå<¡ «¼“½‡”Tèlú¨mÛÛ%$wvõvË’9Íóˆ0Õ»Õd_¡ V^ãg(½…Pjox~%àú>_Ö&„åðöñâ„« fº·Y°•pèþÞH£ÐyÔbHf¶øú³Ã[ßÁ¿ÿkÏÂendstream endobj 165 0 obj 4309 endobj 4 0 obj <> /Contents 5 0 R >> endobj 28 0 obj <> /Contents 29 0 R >> endobj 37 0 obj <> /Contents 38 0 R >> endobj 48 0 obj <> /Contents 49 0 R >> endobj 55 0 obj <> /Contents 56 0 R >> endobj 61 0 obj <> /Contents 62 0 R >> endobj 70 0 obj <> /Contents 71 0 R >> endobj 76 0 obj <> /Contents 77 0 R >> endobj 81 0 obj <> /Contents 82 0 R >> endobj 86 0 obj <> /Contents 87 0 R >> endobj 91 0 obj <> /Contents 92 0 R >> endobj 96 0 obj <> /Contents 97 0 R >> endobj 101 0 obj <> /Contents 102 0 R >> endobj 107 0 obj <> /Contents 108 0 R >> endobj 112 0 obj <> /Contents 113 0 R >> endobj 117 0 obj <> /Contents 118 0 R >> endobj 126 0 obj <> /Contents 127 0 R >> endobj 133 0 obj <> /Contents 134 0 R >> endobj 138 0 obj <> /Contents 139 0 R >> endobj 143 0 obj <> /Contents 144 0 R >> endobj 148 0 obj <> /Contents 149 0 R >> endobj 153 0 obj <> /Contents 154 0 R >> endobj 158 0 obj <> /Contents 159 0 R >> endobj 163 0 obj <> /Contents 164 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 28 0 R 37 0 R 48 0 R 55 0 R 61 0 R 70 0 R 76 0 R 81 0 R 86 0 R 91 0 R 96 0 R 101 0 R 107 0 R 112 0 R 117 0 R 126 0 R 133 0 R 138 0 R 143 0 R 148 0 R 153 0 R 158 0 R 163 0 R ] /Count 24 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 26 0 obj <> endobj 27 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 74 0 obj <> endobj 75 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 136 0 obj <> endobj 137 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 146 0 obj <> endobj 147 0 obj <> endobj 151 0 obj <> endobj 152 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 129 0 obj <> endobj 188 0 obj <> endobj 24 0 obj <> endobj 122 0 obj <> endobj 58 0 obj <> endobj 22 0 obj <> endobj 189 0 obj <> endobj 120 0 obj <> endobj 20 0 obj <> endobj 190 0 obj <> endobj 66 0 obj <> endobj 18 0 obj <> endobj 191 0 obj <> endobj 64 0 obj <> endobj 192 0 obj <> endobj 16 0 obj <> endobj 14 0 obj <> endobj 193 0 obj <> endobj 51 0 obj <> endobj 12 0 obj <> endobj 104 0 obj <> endobj 194 0 obj <> endobj 44 0 obj <> endobj 195 0 obj <>stream xœ]‘Ánƒ0 †ï> endobj 196 0 obj <> endobj 42 0 obj <> endobj 8 0 obj <> endobj 40 0 obj <> endobj 197 0 obj <> endobj 33 0 obj <> endobj 198 0 obj <> endobj 73 0 obj <> endobj 31 0 obj <> endobj 130 0 obj <> endobj 168 0 obj <>stream xœ]Oh’aÇŸGMÝ2«…‡Ñ«¾A]"û#tÙ¤ð0QP ^õÝ«ä¿Þ½m:Û ôíçŸa›¢ÜuŠVlll‡í4¨‹ê²b+w‰=¯{Œ¥vëð…ïçðû}øb¤Q!Œ±Îé¾vÇ~¥U/(ç±Â¨³˜ÃOG3Ë'À ƒæòº‹xÏ’{§Éí3H‹ñõwýãOœ‘hL ~‰½è¼ÄÚŽ>v Ä‹/fÝœäçCœÔ„ {3â ðRì2; ²Ã­‹1v˜ãÅqÞ÷Ï¢%^dÝ/†£œÈ‡ƒü¨ä BÚž‰œ¯õs0 „Ô]ç üÎ´× J"‚{±û2«~2¨9džéè­bâÛSׇ˜Ã/&ÈËY97úÞUsD{Hqì€b²°Dˆƒl~#¶Ýݵµ\²ÓÏ=ƒDB†xÜB÷é¶­1 4Ì¿,)ЭªôÁ³"”’Y(ƒ¾\€9ë^ehO­,2ô‘ ³]ailM¼âWÙþ­Œ€âÐâLg´?šRS_5Ñûõij¥}/㟿“ÇVßB^,v+ëŒöãLòé.>MÆS““)‹q¢ªeh¬ªÛèÜ8iéÔÄ"†Žå‚ÁÐÌ)„þèŸ÷_ endstream endobj 25 0 obj <> endobj 169 0 obj <>stream xœ¥UkTSW¾—$7W@¥Ú˨­÷b}ŒïÑ:ÕB»”‡¢¢U±*RÁ˜@$$$<"0*lÞ (oI0 2bQWQ'³FP¹ãàTD™vÍÔj[­µ¶éɬã¬57ƦõßüÉÊYçžo{ïo›$ÄI’THøÖ­þÎs¯‘Ž×=ÓE€ÓMŽgð·øÄëžÛ'!Ý+(t"ZìCˆH2tÃÎ6#EŸ ÷›2Ïo©¿ÿ ¿ $yŠR§ö Ó'È“âôÂAå·E#SÊõ‹ý‚T*¿ÍÎ:¿Ír<%U¾÷yèM’Ö —§ø…köÊSÔAøf¨e™ÂA‘¯KPRUqé{ÄN"‚XMD‘Ä"”XKl!Ö[‰õD±xŸØH„ÁÄ"„˜HÌ ~%dGˆ 94{øzðŠêÅ1âï$ñ’ËÔl*OJKävz m¡ûÇ­u4Op4ã4Þqœ'{†DŽ@‡s ¬P^RUbª„fºC™,¦¨L $æTd›qå…8 9ò´MYÛ5oå*¦ÑETA{Úåä›úþ³nÀ Ç¡¢¤®¼²Ìt‡2œï³Ô˜^›W}Xxßõ€¦ã¦–í‡"(Ò¿kTdêÜ”Âʆ)…§RŽd­ÉH×Êl±—oÚ¯}ÖÎ ,G}<ùpE <ƒÑyæÉÎóþ»b2÷ÉYkѱ=ì**[à¸Ïfî¶ïvŸÐrÊd…ŽN-¹Ý(ˆúføTo¯IÉb]¢4[àµÏêüjþ˜¯(!ÞAÝàÉ¿!ÕW"‡‘L“±Ú“ †<¶À˜·è塃÷.Ù~D¯3A×XX\TœWª´8 ´¥±Ñr{6ìÂA›ðkËð„o梉h¦í‰ùE*vžìB6!•ôÆTÕPCwé!Å÷)e^~-M}W´4°m(WŠyÜ›y;UÑ,ú7ÕY]u’»*m€…ôé¬WKG‰ÿq5èJ¤bÏ¢'X‚%‹æbìóh>#ñ£ÇȇÅ2¼„ ޏõàþÀµÁ›×Ãß\̹ xäÁ“'‡P±³ÜŽ?3ùÕÊÿ-òBÊÐ kÙ4-X€_ÁÌGÄùžc§Os*Èü[Ñ äËD}ù—{÷ù·ú/¾źB1h?ÌE¯¢iç´:› ”ÁÇé6o€\xVœL{D0 Ÿ^?ó'¸ gc*韊Œ¼y… ‰Pµ l4ÎM»@ݺZ|‚-Õ6e5ÝÐfê¸æÆ•±¿áv,fia_¢3ÍÇØ>‡r«¤2µ b5ÚJ4_¡G™§7>C[ª°ÔÝÒtÌÚ°ÿüÛ›7ꢢ9›ôy±˜2ºJx”û¶¿ã>¡z769Áqú ¸zim y§ð;®‰Püu&r ¿4 A®s¤ê Ê ¶¼Úb´åÙ€~8tëóŽ«íÐHì Uê„›dM}ilAã¡ ЂÀÓ¸%R#h;̦Jk{1á 4Z¿<Ó«²éÌœìxJù"s\Åúè¢Û:¬_|Qª4³% Tí¤QqJû¥N‚6H¡óg†ÿßLžËdä;å BáW«¾E£Ñë5š½ÕÚÒbeqöeÜZ`;ž0&¬Ý­7Ðê9IW…ǘ¢cêK¦TA­X¹_¹Úm,jþev¸ŒZt#ùΩîò=lYR£àÍôðÏ­° }Ï“­­kA´Sf×u‡=ݳÑFÍÂü,ÄKÚÆèØÓ­ïv yà{µ‚{5ÁÔaIÔžvÏ©T"¢_„>D• òBbÉ)Êl@’A–¸A:)¼Ï” '®LÖ»ÃôÌ=fP—¸IDߦîÜ*:W’¨¦ºLòvë\ r ¡=—2;¼œ2j¼6gC|Ÿ°ï˜ó½1ü|_ì‹¥ü—‚ 9Q+ÑiænÄ]ì3ÕÍ­Gm±ÖÒzÁéé‘ û6qøB> endobj 170 0 obj <>stream xœcd`ab`dddsöõõ4±T~H3þaú!ËÜÝø3â§k7s7ËÊK…¾› ~7àÿ®#ÀÀÌÈèæåœ_PY”™žQ¢ á¬©`hii®à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–Tê)8æä(t+¥§•¥¦€-vÎÏ-(-I-RðÍOI-Êc```ÊËd`ðgðb`ºá,cÚFßP¾ÿÌŒ«Wÿ_ÍøcÙMæï;¿¿m»î:/µ;µ»°¤2»(©>¬»£aJû”Ù=“fO›{ñêÕÝ뻓«“[òå[ “ÚJ[ŠZ [ŠZòë#»[9Jç4Ì;gú¬Ér½§¬›0ÒÊÉ+'­œ´´îÄESÖ®;°aÃüyÛVìæ8ÝQ P'ßZÕRÝ]ű3ýЇ½ß%övM¯¬íj«h•«K Œèæ¨hžµ`þ¤9SÈÏÚ´ã;k÷aŽ»¾kí#½«m¼åøþ3î ñÅw‘ç3~—¸±ì:ó÷?YDWÎ.)È+Ì+š[³põ’•KäüíŸ:eqÿ”¾)ýS»çpŽ\©õ[¢´­¿iæÌ¾‰Súä–¿9°hy7ÇüIu%å­5-òU •‰U õyÝu™u¹mu8œ‘ätjeÓôÅó'Κ±Jž¯lÁOû¿—N6íwÂTöu\¸å¸XÌçóp®ëçáa`¿ìñG endstream endobj 23 0 obj <> endobj 171 0 obj <>stream xœ­X TSWÞ!’÷T”*¾ŠNû‚îŠZÜkE,îZYe[{’ÂaÂYT@YT´¶n­N]f¬:ZmµZíBm½¹Ìtn@lçûÚùΜóñrœóòî½ÿÿoûG@ 1¡©½“‹­ñkþOþ-þm!`õßßìM23!˜ i|küÁÑèÊ(äeŽf½A ‡ »ìCBc¤þ¾~VÓì§[ͳµ]leä-õ÷ò¶ròˆðóòˆ ÿH¬¶„xù{GÄ̱²“H¬\ŒŸ·rñ÷–î÷Þg\Ù>$(42Â[jå²Ï[LQÔÂv1Á^NkBöm²õv^æ³Nêëîçá¿%rë»û·EI<‚<—̶c3oþ‚iïL_´xÖHŠšMM¤vSÎÔZj5‰ÚL­£æR“©÷)ʆšB¹PŽ”5µ…ZOM¥¶RïR ¨mÔêj;µšAí 6R‹¨”µ†ÚDÙS㨑ÔxÊœE¦,¨1ÔPŠ¥†Qc)Kj„`8µˆŽ¢©=Ô‚2ÙnòB$¼>dÛk¦ëL/ˆfŠEÏhOú³‚Ñ ú·aòáæÃ¯›3 1aDâˆF®Ùbîl~ö¸7:G9Œ2:ÎÂÔâm‹‹Kc6Œ)`ÍX-Û÷æ–7›Ç®[5ö Ëk¿¶P#1Ir ÀÐ+0Õ#!ÿ *`CD2ë8<;óŽèENƒ˜¯¡›35¹zƒÈOn^°œÀ5ƒ‘TÒ·Ô2q_í£­ä"$|­hä/B“Ãä™hwÔ øÙ½ï±i…òÜXˆEjj,ì{l™á·RÉHè#zh†F¨P~¨` ´‹ê€Ê O¥Îê@¬%ÒˆÎà™™‰*9¤ Úaœ„>‘qÚádÀ=9c8@;,/±†Á ü! ÃwL±Œl„ ¦°‡Ž¿eh¿ò«Ð}¶ º´å²š¬(—@<„€D¢&{hW€/¤ƒ,=1=Ù'Yâ!¨8µ²@=®ºÊ9½[¥ô9¸À>rjú”)4¡h~m) MOŽŽÜ츤p P®ÎUÕäBS]!‰ umõ9ýIÛGg«8²§¥˜†S'@Cn"Ÿ›B>å°pjC#j¼ wÁpwˆ a”ÏExŠÌTB_ÍKÙ-ÆZz¯ Þ%GïP—©:¡ •ÝÆj½+ƒv1Ú@ÿü—Ó—>.ÜíÌáØ?¸s'ÙœÒÀŒüEpá%«AMkk Û!Oño³ûӣ⠘ ÓFUW—2\\wd3Ó Âì‹éh×£yÈe 8ÊE8l Û Ì{¶§Ñ4ds§ã|á…´YLZ߀á4ÅÀ7Ý"èÎ&k•êP`ðrI¥h0it(ì™BöyV]¤ê"û,Vž1îs têÅ|=­R!å?¨¬øÌ$ Œ+€¬¼Ì<”Ñkf©Ršö]›è|Æ(†l¸ —"蕊‚f1_A7« nq•¼\´R %Gô]¶$åÿës#.?Ñ¡f²¿I÷ѵg–ÞUìïÀx²ýééWO½s 5âï´Ÿ]‚›Ì—3ïbKoÂWY”N7¨s:8ô¦èÛ–Î+×;Ìc ?bûù‚ªÐû4bŽNß´ÒyÕdRÁCRu~†NPû5=òÑÈŸEc'½ÀæØÂÚ Á£^LCæÈâ‡9‡£ðNvxè"ކµ*» ؛ᜮ¥îÔÉâ&8-ZÿJÕNðx_ê²wo”0ð’éø©:äÓjl®îš]5žïŒüé´l×î¤æVÓ1‹G}o†ß8ÑV^*~F3 L ´cRN—˜AÛõ]c!ä÷K\÷F{;xU…µ†µ)>†zèÈî®>VQßbè†V8¶_ï­‰%D3ƒÌP¿Ú D²Þl²FÑýí¯u‚.EL_Ó@!ͯè{™›EH8®rËÄ|­‡ÎÂÅmŠƒÊ=°âU[Œäí=¡â¾U49þc*ÒÐ;Û 8×ç酽«{—±‡ /!E.OJåv®4¸|h ãðv¼/Ä®Ø-ÅóÑV´ôGô6šyqñ’¤'ãYØÌn20‹ð»Ýè0ªGºï}÷Ój¼¨J¬ŽW¥SYåâŠãí4KÇO®¼¼‰*Q^Ì0Ó–®kø4™`Ö~ç‚Æ óŸºoµD÷©â¶4¾³ !Yœ­'ºW’UœWÈô¤³óáÛ ½ºáP•¸X«/®æ̈ˆ€óÄíx%[Ì•K]VºÎžn×q¶$ÿÓÆã”]7ö¨Ã€Úz´»FÈ?ë]Îö}ô¿K,:‘q‘ˆþ1x Ä×i›tM³)ÑÏ  ´n‘,p7e½jÝhš º-%˜#­#ÐË÷6:M… áŠ?%DÏù¥ýR˜¦€„xN¡HJJM“TH²ý 4,Öì , «Œ7HޤœJ:•xH^q ?Y ÞÌkˆ›öÅ™Nž¯ÌN&’cÄx }’4Ù*UY)—™]P˜•ÕêÙ.×¥3o»~åD”>²RìØ7Ç®(,kM!œcê+[#*g‰TÍ© •Hh䔉“‰Œ¦õG±h=ìö“la”è™h@5ûAÔWòÿ—‹L~Š¡"+H‹NéÐ)Ãh"I¨«ç[ýX‹x~7Q»oôŸ Ÿ3ßáw1á导x­S¢ŽŒ“`|2yÿ5Œ  Ú¢™‰®C½wfz„µä4nÞ>硘ûÅ«²ACœ')Y)NÛ( —Èɴɇ’*’®¦žH¾˜t ,(f1ƒòEP­Î+ËÌS×C90àé Ý6â·Œ‚“ÙlL´D+øù&_#Dë‚3Å€§ !"åb¿É3äŒô!®¥ñ»ÝW/_ãÎ…l£í$¾¾ëáËRRoÇõËV+2C”Q·„È™ïcë«‚$ÒààJ©¡®ªªŽÃS±‰—óR Ëë{B]®:%$t‘*ÐÒ³ŽŠy!=ÐgâÎ6ÄD.£»—Iêµeµ›¢T&¤pñ1ù…;hwœœM 9t±Í”{²ÒÄ'ÜJÓÐð»ÑyŠÃþ*eƒlfw¯¶Y‰I$µMæ”$ÿÅ÷£2JŒ·ÑQ¬ÉQ©49\aibüáÓo'vT޼ûýËsû‡×‰ÝϺl(^Pn¹LvŽ3WÎ\¾ØÓ3­‹¸ŒhUš¦˜ƒÞN8ôækT¢ë¼ýë,µŽž¿ë=û%img8tŸÆ3 ¼òùb<ƒ† àÑîWÕ’r NCWeíyFµD„¦½X½Š+¤Î¸Y€n?2†[ö´( GšÖˆŠ­¶Í “P-ä+JÓU‰ÄÖüáàDnŸDÔ”L \äW©ó>z"7£/T«ò´™ùj=”y€6¸ÛH‚ÿfÐCøØ&µæ§3ˆ<åŽ$ใ#x’éFGßQ'ø‘í«HXÆI%¢–Œ«ý‹]…²–”^¦Ð4‰lUVÎ7ø5è+¶üT£¦QEz$wůÓU­âÐAƒD¥"]6 gYbª–g+²!g\u”‘D箈Pºƒ¯qºê Ç.öAÖYfÇæÊó rÕ9‡^9)™¨…ÍGˆZQ5ûííG¯fuýä ˆƒ LµÍ¸n±R“BFÎèØø¤d<·äÃèßãjªZ@§<ñZ<~ /Ÿ9ì^ïVï6®$27â˜Dy‚¤ßUª£¤+õPkÄw„«|;_%_ï±ýå%žOÔ`ñ[ÓM}›6¢õÿÆà\"r•o!î³¶üÛ=ŒÆÖhÄÄ¡©÷ÑÛßs¨®ƒŽ?м¨ï(ô­¸Ð’Yn¬¿©CxCxËÙ¦, %>–¨H•§ÌÅ–ÖHOldŒ«6¨«ÉÓ÷Ê=I$¤üÆûëA«,ˆË“z‘W‘&¥-Ž´œ… S‹Iä̧?Úß´½¤i^d`ð7~Š(ªBãXü³eVBFb1™Ë2 2ó{ÐaËñáÌÄLY1Œ+†ŒüÌ|fPcz­ú²±wû‡ºÞpHÙõº5¯¦)Ú¯«}Ú¨Üx‚–ݼNìt&*gÉxÔàÚâsxOñ.`¯óxOR~ Z_¦­nsËRŠõÕyµÀœ:ç½@@ªº:m} ½_äðblŸ‡^¹wälM—åQëÛŒîRññ‡![iìòõ…Îή“±:Èí·†“Ÿžû ÍÎ&b)Üó›‰Þ×øöÊîõjš÷Wyiö‚=ìöÙžð±WÓbX»wìßË(¿ý¯|D}~òüÙÒ}ëþØÉþ‹[5½ßŒ/¯!™^þG/žÔÐÍ n'CÎÀ¸Á1fÔ´°™ã~¡áâŒM,¡«ª ¤¡½«ä‰cáÕÕîêÍÄÅ>HÝæè)Ù®à]ÞWªþ¡ÅØÁÈš^sàZ'ªé$ÒŠþÉž¬ºqî2OgŸ7Ñvõ\ï"ߪ`îPtvúG> <6o[fÂOë…˜oÿ†¨çvÒN–\šÃà©_³Aezhf>ùìè§·.n[·Îy¯W·r3Ûv(ñŠGåÁ“°‰Y¾lÏòwÖ\¼wýäùÏšŒ^·½€BNH/DG{ëèÁý5}_ÇOÐ þü=òæ¨%ó‹ÐÝ%bgæá0.S”«8š ǘêmHHtLлÝîK.K‚ª°Ù§ó0=eŽq¨øz&2½q¬»­”ÃìZ6–P9ðbôè åGêN-l"úªwÈL,òÉÜîÌš€I³ݘøð—ˆ¢gØÚp]PP¸48¨*¼®ß†_mV×;Z'8ö=òAè WäüþâötUÕûà «ÂÝf:¤-…U°A=£myÇ¢ÏcÛá¸YÓúuÝ•ì¿ÀKðglØE#ÓÄáaÒU¸­9«ýêriKQes ¶Â ØN°8qó~,²K”«f4Žk(ê–ëµ`uJµ”szo.Ñ¢epÎT3}E´65ÉHƒDåÚO/i Ð4ñB7ô0ˆžu›cz…Í®¶´¼Šº’¦ºý’49(Ó¹ªk—ëÏÓÓ8ËaÊÊ%{vˆñ{x·LFL*bo!l÷m‚­‰ÕhØ÷u‚6$@’!JG_²¬›…Ç8ú‘uÓUÜ”V£ƒæ°´ÆæOÖh““•™3Xeoà=HË.À=º—#a,':A©ŒKâð'}>¦T½´K¶š‹”ˆ.e|9×û¿i‹¤W§´=†)´/bûDèÛ3J ›>…2Yø[2Ù„›‘ùœd|HT$ËÓÔòœñG; ~ ðÀ“Âð<ÿI!OO‡4F®NÎ×<ºŽg¸ÎgU?2{-¼Xwïëc¤?QÐ!î³ÐSpNZÛÒõÑMÐB{z¥/ãVUSSVZ÷¡W· fI°ÀḠ\ÿ ¿B(j1÷6uv÷s£7ðç¬ t$ÔFŸPÞƒæŠQÏJºÀ©ž+ó&tÝC®ÝÑ>·”ÐAÌG–óïhÈY7<òñüK6¯€d9ƒÕ"<ä…ò2&D€½IžË¬Ìý°P““}ŠHõEo·Û‚ßÄŽ x1¸02pmï€ã…\ hjbº¯¿rI¼­­6æð :!ÚPÂǵ]eŸžé dÒ²Sr îÞBÃþÖ¼Ï/:44´,´QW\¬úÕ™L hÔ7µ:£º_BþŸ¼«$? P*HH`ðHd"zñ´ñ\å‘Ôp·/=U LPÕJ}yY͹­'–9o>à³›‹ªóªÚ Œ5ºu‚›þÛW¿gÔè¯(àÿ¼c!Ý‘ï)Æÿé>Þ„îû,E&ôÏOŸÕ´*ƒ œk‰8é›]–Ì`–YÑ»ªë¡àöÔІa7‡sÆ,Öš Õe›™Ý,1AQÿX:ØL endstream endobj 121 0 obj <> endobj 172 0 obj <>stream xœcd`ab`dddwöõõ441U~H3þaú!ËÜÝýóÝO{Önæn–•?…¾›~7äÿ®'ÀÀÌÈèæíœ_PY”™žQ¢ á¬©`hii®à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–Tê)8æä(t+¥§•¥¦@lvÎÏ-(-I-RðÍOI-Êc```ôc`Ðg`ºíÄFßP¾ÿÌ" Ý+~²®`ÜùóóÏŠ×D§m›½òzGßôž9ÓšºÛË#:»Ëå£Ùj»+{k»9Zë»+'wO’?ÞÙ_Ò]ÙÝÔÕÑQû›õO¸Äï¬+Zfwõ”vKþæc+oª›Ô=o±î¦ÎÎæ®ùß’–ÕG—yvH¶5vU6Ní¯·{¾ün¶™Ýs:gvsLšÖ=oJcO»|VOöÄîõÝ“{§ôNþ.ýcµÄÄÆîÎþ¦ïMžJL¨ïmÒ=µ»§¯_Ù‚Ÿö ~/:mÛï„©ì ¹ÎpËq±˜Ïçá\8‰‡‡÷š¡Å endstream endobj 21 0 obj <> endobj 173 0 obj <>stream xœ…ÐïKqð»Më(é‡ d?n¤!  ‰4H¥@ÓÓ͹_·smNo¶»s»ûÞÍínm7ÝK§MÔR VOzÒó‚|TýßÉ¥>õÙûóàÍçÅE*LŠ¢GZÛ:º®í§Kåshù¼©|Á {yq÷a%¨2ƒªŠÜî·jxû4¼u6ŸB*Pôö½îV—;@Ù­4q¹µžhljºN´8HÊÖ×ë$Úzi+éè¥÷Ža¢ÃÕg#éÀ¢ex˜hßox‰vÒKR>²ÿßëV—Ã=B“Ñæê')g¯w/Û¼ö½¾As`ÔŒ năŠÿÀˆ y‡þ0MžøcºYv½¼½ mŠÛfø±|µ¦-rɨ>¹ÄÎlUYȨ‘¥¾gnžuZXÁÃQQ¹Ré/±Ùä{°‚½õ*AãwÙÔ'q7žº ÙMÅ(%óÅí* °¾ˆWÜ«……„Z²¨ò¼RŒ ®Hd€0èƬñ8NJ¬žS@r*6—‡C¶O üŠñ BF(`ÿÅ=:lÚ†ÍI‡ÍßáùÓšœ Š%öøÒË,ÅVõ±¼ÇGG',6,y~*ŸÚŒM'VÀ¶a“yÆÅ÷;T2Aãj¿ì—™•œêÀ zjOîóû¬¥Éì‹,ÈlZÕ¤”“OÄ?ÑãmÀ‹õ¬ íUb}‘]ãgqv]È 9ìwwÅá ÎÆrêke9± Š2¨8ñdì“B‡/HG¬•â‡uà˜çÞp%<¼!èbz-æ'²¢—ÏÐ2 /Ö¤¸ì„ 0-Ÿ~©3ñçqK§ÞYxT€õŸÏÌ$Ò (`/ýi†D6„uxIÖ*³cZ`4ÈŒFå Á3aÔí„TAâ@-ãøÒ“Ó¼6Ü7êïùžÕŽäCš"Kj‡u;âxÄ*†jŸ7TŽÎ0ÙÜ´–•Â;bS‘5QÃNxçvo5©£[Ç~ßJVU!È_ùžŒÜ endstream endobj 67 0 obj <> endobj 174 0 obj <>stream xœcd`ab`ddduö 21T~H3þaú!ËÜÝý£÷§.k7s7˺ïBß ¿ëò×``fdtóŠtÎ/¨,ÊLÏ(QÐpÖT0´´4WpÌM-ÊLNÌSðM,ÉHÍM,rr‚ó“3SK*õsr‚@:Š‚R‹S‹ÊRS@ö:çç”–¤)øæ§¤å1000201012²ÿg\°Šï?S² C÷¦ó7mŸÏø}éCæï¿ò‹®lïΕóôVíNïæHa_Ú}¶ûørŽ?½ìYÝu*r )l‡úov›݇Ú96%°«tÏX#ÏW¶à§ý‚ßKg}ÏŸÊö;qû&®{Ür\,æóy8WOâá¹7‡‡—‹e endstream endobj 19 0 obj <> endobj 175 0 obj <>stream xœ­zxWÖöaÍÐÁbbȈÞ!ô˜^C5Õ¸7p/ÂÝ–‹¬r$¹÷"ËÙØÛÓ[ 6@B „¶ „Ü1×»ùïØ²ßf³ûï÷=z=–¦Ü;ç¼ï{ÞsdÕ¹%‰$ V­›8Aøk8ß_ÄèÄ¿/vņ×Ê–x è.†îkŒzdÉëƒ{¡ñ½)±H´xÅÖþáA;<½BŽ\0jàÄ™3§´õuÚáêì7p•sˆ—»¯sùà3p½¿ë÷ðñm}|®®¸Î=Ø=h—»[ÛÒ ü}ä!îAWù»¹ùQµa¥m¸ŸëæUó#üݶ|¼ À}õÂ@5‹‚<×.öZ·$dÇú¥ò–íò¶[êã¼"Ì×eSí3ÆEÎß{ÖN61jΤö“GN5uð¶icb»OÛ­'E£S[©ÕÔBj&5žBm£ÖP‹¨YÔÔPj-µ˜š@ £ÖQK¨‰Ôpj=µ”šD 6P˨ÉÔHÊŽZNM¡FQ©ÔTj4µ‰ZIM£ÆP›©UÔ|j,µ…ú˜Z@Í ü¨(ª'åOõ£zQ©Tª75€êCI(KJCq””b¨T_ª ÅR]©÷¨Pj6eEu§(_Êšê!ê*êFÙ‘¼P4å@=…u²èä.#>Ûyiç ‰Eš¤ŸÄD³t!C1™“]l»TwµéªëúºÛ7Ý3zHzìï9§çßzôzÔ{^o¾OfŸW–Û,/KKsúÎè»—µd/¾×å=“Õ:ë¾Ö·l\ûqý÷»ÝߣLÿôC,0àÈ€Wï¯}ÿgäžr“Í—í•áQƒ¬íôÅà ƒïq¢Ú}èÖ¡)Ãf +vx鈢ßD«ì¨ž-`F®Fž3‹Ð€‡è›21 e±AŰhÜ/f¦Ä^“V#ãwÓ{ ÷;®Æ,ñTOpƒ9àe`|Jéz…§¬µ”öÔ(>â‚}øBIÏ–xrÛ-f~™QTÝb+æ·¬d“r4i‘ jeR4vmýÎ:|³k”–ñ¡Ktûõu`†ãšj-c¦·••t™:½ì²²@ 9ÇéTz%¨l|×CçC×®À^؇´MÆN¯†è4E ƒM|&‹,ðM ,—ôü­S¯sv6ÞãåfQÑ=1?=dË/ÓåY%Dã§ p°×Ëudfm~AœV“;k­±™T™šdH¶)¯‡"ÎLj—i" \u¾zrÁa(‚\/4ºUd½S#ßà¿x$A„š“ÓMÏ”‡å‡„Êc|š<^hô•ôÄ­²ž¿‰ŽRŠ2Tó¤¾L´ç.ÚôDŒ0ÿë¢VúB XZYn,ØýùÜ}á>` ÷Æ}‰Ô¯uÏÌŒu¼F¥Ôp~ã—Çz³qò~4M¿Ót"ã‚Ö³VÖƒ‘YTÚ²NÌ'7Fï£í¦ê=Õu6fÚMk¯ WØ®GtƒÖ$'Á‹ÓhX‚çXcÙi Ié$m*د#神îà«t$ Eô)(J,òG+±ÙÏÀIÑ¡¾Û‡ƒ Aˆ®I_õp êÔä²íºˆ („ CrZŒ<¬Ñ$œ WT ¶Xy„“ÃZÃ5‚ª¦T…‘PîJÙefzþ&Î0Sí‚Vò¥·ÅHÙ2Š7©Év<ǧTÒN5öCÛrr„¬^G4µBN†Bs…Œ¯ÓÑHù·N)1)ñ™`“†ôä,¤méa­k½*éàŽ¤Þð9ì#¯¿@=Ùw0ý‘&«NÆ—Òuú¬\©Ï‘hñë9k¦3vdgè’ í3["Ù]töÙüçVRñX¤¥kôiÍê-yV;m㊭ӱXö8ž}Vtù"|É<øà~kíôvû¥´ô—7 A6þõÁÌëXœ-[…o±¸O» r´†þ±iüÒ…›f퀔ñ}M¢J¾‹˜ïÇc3²@ÉLN„søšD§Z”IR_Õ£NÀ ‰W·öˆW€’l¢Ó·Ð]IZm$‰Ç]w9b†µ«¤'¯V”ñÈmï¢Ýwż7ÚÉ¢¾#^á¸Ïh,"âÄþ<uA=~úI9ˆíY'p,8tÎC‰áÉÒ‡š‹àì——;•;ÁZ‚O°“;Êý¶ÓÎF…IÞÄÛ˜G“%á@Ñ%+ißû»ŒF#²,Ìô¢„´#2þg}KìCKÔù9•ÛõÇ]Â,–þ0I.ÜS]&Cű3M”E£ˆðÝæ wð,Þب>P¯?Wu°Ø¼·æ$ÔBS”Ù!+‚D"œyKtリÿ•¿ÇÖŸÿ$¹Z*«6€€~­>PªÆü°P…2F¥”ᙸ/C‡3IÀSlŠË’¡ò$qgØ®s&)¤?‡tE~ òÀßYãMoTZRg¸Ú†´«m ¡?Rgî“!;úÝ>Tò3+Å(ªeŸ­Õ…‘´|äS%É£6O[¢Öi!Œi-úSÌÐ)I:m²’ÛúÌ:#V§M&ÒŠdüºš_’Ýzi·jvÂNت÷î%ØÈZçÒ$5WgPrsË8³èôK>`·¸e\˶Ò*Ä&p[l=ê66x5žŠ'c'슦á‰èc4ý$CL&¤Å(@§•%à!gb0ãÍ{Ð1tmÚs‰NÀÃ2}4¨sÉC±¬x£5ñ6MAe–¯.£ü»VÒÛhzÄV;Ru ˜kç'c ÜcÑt[Wwcc€,ºt`d6tN‰l²ûмÛÏ? IGÿˆ;Ïqv”‡Ê¤Ï.u çjšÒQÖêõF»÷èŽëË¡ŽµÇ¬]ågÓouÙ·Ío#@ü%Â,Éš Pü£Ý3~惡ä½ß/£zDâ¢Ì}R¼F™ ‘y q°\w‡Ôû†KPÇèŠÙT4ê^Ù`^fâþnäQÅ]ÎQòò–eBx_Š[ÜÑ9á1$ŠËñ<OÁ.ØÇÐb´A“‘‡¿Áß²cp¿oQ.ÊFÃ?¿û Yˆ3p!~úBñ·o¤’»ÏKŸ‹k[æ²à:IÐlÄ¡‘h Z‡û£‰x® ÷ýÛ@¶Ýkìm®ç’Oá²üØÂýk2¦·Åa«=·†¬[;¼ºByoÏÕè²P£ÀÝ|RIoó½Ï³xÉŸ…˜?#§Ý'XHŸUƸ\ø°?fÆïá>φ#æJãþ*“Ì€|X<ˆïpypL´w€=0ó?~HBÝíÊÝ/¿nš²Q¾‰í…ÜŒ¦ÜK7‰PçKOˆÑb~(‹$fÜ1’o>`ȃÄ<.VALH~hEUž±´Þ£fã¢iq˜žís ßx³Ù}ºf}%4@34Nî¢mõ'OZ%¬„ö–£ mqEG_ŠQ(ºÌ¢9ÔQ·Ÿÿ0ò[ü¾ ¿ú–¿áy­áKRÕöÂu¨}WQÔ¨€E%íQ~(A“aÐV{ õ}ò»ÕΙQÍž6S¸µLÜ2°Íáñ!óñ<"6ÅÀøˆ~–å=MV† ƒ$S>£¹‰(QÒ^vX ò±Œ)“ø#¹Eë¹·û+~‹„/‰S©Ìo=Ñ«K¯î[I¢y7Y4žš‡_¥éA«çÔÚÐXdü‹£L…eÙÕÕ>UNó=—:EsÒ¨eïĹøÏÃÉ«±K Zwö^ ‚ËÊã¡×ÑüëµÇ­¤¿¢ 4ÏK*tÕye²ôì’Ê`Àˆ­wT,!6Äߘ‘éì>ÿFu0O/_¾QYT"«ÛS—R(ˆ0´ U’b™ˆœØüÌ¢´’‚Øj·PG¥‹3ç\ãl3~ñâMîe»d1Qá;Á‹‘¶€OŽ»9tu„·¸2 ~Ü€z¢®?»Y}ls%·±r-|Ll$꼓w™¡’¡¤ÀÈ )þ¾øØ‰C{ëdŸHî£Î0Õná–QüÆ_^.C½L|aùsÂt๘ÏKcQ×ß ¾€Æ0ÿÄx4OFË͵©U\ÞØÜžó¢ÙË„,E¼6ªÒÎÙ× ì!hOðEoÎ`팸ó5@ ÊAo?y†LÅésbñ As8ùiï£k€Ùìãä¦ÓÈЙìŽ0o‰Äæ„CyUÅ5ûNšœ×f ÐÓ ×lF‡Ú¡·¡ Z’–Ùlë¡÷MRÂáq[ÛI…œZÒÞ§¿Ï|Êéq;ÇpSQj(»KÐh([Ÿ9J‚<-Z?­È²¦$ä0Š$oVÒ‡È mdMª;‘°€Ùìå:gºç™oÂ8uŽ69˜H —ak:³Rtº¢"N¯}aÑçƒÚb"ÿô¡¿|qÂwwl¶lgµ[ºs:#½±>kiÎÙ~µå÷Q§”‰>zNŸAÀÂä@J‘ì'Z(jIˆáÔª¸x•Ú½Ò¢Ézº/]ï•ï_!—UV*¿ˆfÞvmnE„: ̓˜ßŽRØß»ýéà¸:Ò“Ñ¢Ÿ$¿3-­ÿWÍÙÆ7(¹‰¤ê„ 'Γh’YÌ}ù}¹•4… W,ʦ¡„ØvC¦¾ ŒÀÆÓð$ìLÊìBºu×¾.ÿdPZ¿Êÿ#ò7£FÑÏ—Q¿21²jË3‚VI´3}ŽR1òop{=­»Zyõ"w&hmëëî±fSÄžkVÔã•åõW‹ˆ·}Šñ³x €‹Ï2”D/Mo²]­;©/%®´¶=ÛËT)ûdÒŸ’ù½luP±¿< 0Àh®,+®îèc‰=›Piyº<ð"úüâF’ûkèoÍâ¾æUyn'á¬Í•“ço¢Mx†C*§S‚2«óh{[8µÚØDÎko•Kã$ñôɃfœ˜3@–¥:{%‚‘>­HÜXéQ˜I<"³pË‚é~sSŽläÖžT_ÔÖi3@ý†‘ömŒLÓé³Ò8Ð 5'Ì;.z>$Œìòõ¨Óóew¦Û[Rô©íix(æ[ølG%ñRÛ’Áæý~¶cðqCÿé9ÿ®â¢9þËrŠ×ÈCÅXá‚X ¤â§®H œ@./Ù˜ Ly¸Ñß?<4pÓiÿ3×?½ø˜“¶¶Œï\\êçìçW\UUZ*¬"8w‚º™Åȶ^TW†Ò¢tâ!Æ·Ìd[‘$ ËI;˜‹¦æÕ 1¤)/‡LM±  î€èÁœ«¤Ñð‘×Kh$r¥Cî¡&Z’[˜œET©ˆ”/ÈÛ™‹§¶+ùŽoœç€‡b$’jȺŕ ›MÒå³ÛVNß2t$L­˜Í ɸER±nµ%#ž­nO1˜Šb¾ŸYTÄG‹ù)è>›QR°ÿ’îíô(¶ë#„®¥^›a¯Q©Ãpº5•9Dâõ6åû È‡¯v½&äÝôè$+s|ÐPŒ¬S£õI9ÉÉ™¶–®BM¢W—Ĩå³Z}R* ùê¹Ìô ÇšôÅÂüÔ1àOúÙUúhaEÚLÄ@htlB"„{Zó!ôÊ ±EU°´ š7òÿ’¾xêÆ ¦õn¡ #gUê>ÑCTi«„³<@î'„.•Þª<-faZÉâÁ£?k»–¡ußçßð¤!“ úÑS$)à FÈ€]£kà Ðzj·iv€lÓ{¾m I`Dß’šsuæw™E¨3u_ŒN¡‘ì[ÖoT.³žÜñìÝåuþFùŽhGÛ««¾¸våz–L—N±‡á×йpÜßQ㮵' òdp'«£€/Y;lÛó](Ì,CÙ£æœZ!Ör’o9øƒ>LØRÖN>)A“3gXDÕªl­ÐƒWì#YÂO»Y ¾àמîzÈ×dƤ(³|Ó¦â$ë±È˜”- IÞœßlÔy ç…lu¶7²Ä¿Z§DxèSSrBuÖ/p}²BøÊ& íiWùqb˜E-ËÙ‘øú2(#-zýÛº/ŒYLfä]\ñè°É²éƶ'húåkeVÒHºÿ›ìZáÜ LñùÜÛ²ÓAëéµAJÅNÕÁÙÓ¤ïó¬wÛ·%03Û/ó5F”W˳“j¶ëdµG²ª9rÆm’̃”mÅfõ"õJßy;‚6#3ëYÐ…K‡š‹¸D4ƒA]°Ãa«KíÑSMwÑÌT®ÝÀ¾#4?”ŸÎ¢¥È6=ýıÛÂø0PíMøä ë`Gûø05â!2.ŽÀÿ>n®þ/{Ô -ÃÅ©ñ1kãë¡‚)j›>×ÂÞ¶9!m»’}¼c®…Y”ÍëÞÆ²»÷î=RZn®kÌkP¨ñÕTlÔÇ(*Ö¤Ç@$ÙrL’rÕë9?Å sœTÈËË0¶¯]¦‰„]`¯ PqtÚæÕ?bÖÚ~5hì×m[»F³ Èr½YWN¸Ú¤)+7$æ@˜ªjÎQ單ط%]‘IÐ L:wëNëM¤)Þ§ÝÝþáú*ÁÙÚýÓlº­Õþ_§ÿ·ƒlÁÚF¸G?°Írx;Ô¾þ?†ÚíETa䇶Íô^]BEw­¤GÐ<¾‹®üƒ&>-£uºôÜŠfF’×´åËþo¦7£~Ä’9Nöá‘2Îg‘ Mê.+ßéSé¥pêKÝË] ëÀ<4«ývù¸ï´}¥ÁõÑÅDª I8;‹ÏQòâ–ADP^‹_âï°…gögîfz¾-‘XÑ>Óû‹Ö¸“¥:A£Ä£[]¬ñ>F›¬I%’²û,”·õ–´ØIï"\qŠ!ÛÓ´ÈËZmñT^¡5hÓÀð/ξÉIÙȾµÅÚoˆË\Ч%ç ™|Š5šÕšÚþ¥Mû·ïú 3RBSŽ<‰MxÆK‰}7¯ø#AáÿN{*-¤·U Õ©ôÞ¹.¤²3ƒ±hý–üôã®F7häifñNd!yúÕ¡/3* ¾’‹WEÆA „§G(;ô^m¡n b4¹%žÅï»>ûûØÑ®è}ar,¯léUfÙt4ä*?rÔJzMç·³Ûw«ö@sþ³¦«×.nZ°ÎmÛj/ÎÅ~Qä8\bžL:3aÄ,Ûñáz‡&{.+¶>¨ŒXЇký¦®ÙoЋ¥¿ ‹ïîþZ§8èÞÄ…Gf®h`F8³•;‡}*Ú}ácÆvÞ¦™S|z÷lõÅošõʎB«ÏвP¡U¡ÕìY\¸–&;Dé&ð*1¯B鬩U%§Û¶]÷ä^ ?”lýÑò'Èí‘•ôW^Œ®²Þ4޲}m„~Ow ½ªÀœ'ôw[zÒåמ¤šzˈ3aúóI¶†;8q.!Î0Á}¾…:Ÿol:[ÂáÞ±‘°|.„×ÃQ8'¡¹¸¾âèÞœZbµjv8d{'¯„íÌŒ£'¿i^‰î¿£ 'Ø?pzoû‹ŽÊóÿÓY¼¹=òïXïùÏKà›`0y56¿^oæ­Äüò{6…ÔBÐ3YñŠhU\œšÃýûü¤ÒhlñY¹É™™†Žýb»b4ïÏW k³ÄZÍYa›˜P3‰)ª”¬/¾FL•æK;¯ð€ÀÀ‚€º=èt\š.KŸžÆÙ3µX›Dûî¢ô»bÞ ]cá뤯½¾ÜþýÌ|gX ó]Æ{/Nš¼ä‰s÷Ϻ*dà«âßU_N¹ ·쉯±n°¦,ü{Å9xŸÀE¸”~²u»žQ5p)¼hdæz˜ +I)[¢X5v¯t÷zÂ&0!ƒéÉòô§h]š%¼[I+ZlIR3ôHm R\Rb¢’Û²diÀ|X«Ê6+Ø•ç ÌÜ…ÓqÜã‹Yׯyˆ:çBó®ã²Ï<Ž&ÕÁWpÌœš¬ÓZ·Úýmb| $ ±ÍŒÏÌÔ'g¥seüx6tYš…>ü,§øÄ1ÛÁ˜Ú´`“LzOÁ¯nñ‡Çp—°ˆ^ó`áÿXVH1U½ù€Q„¾£æ–¾l)èC¸U+&ƒ·PòŒ$8ÇË™VÒR©c'rÞB äõ ­ˆ{ÓÕYõ²ž¯£Ú˜ö:Rü:R`Úß# ÓÚ¼²i@ãD§[Ɖ[ ¯Ù¼"0à ZÖú½$: BC‹ OƇ7²¹íG¢d­•DµÉŒÜ@¿üò“YtôäøXÌÛ¡ùl$É7Ñ1.*1a1Ì ^*yõM@ܹ“ðÜI&~{b Û&­? †‚ÚìÆòðr¯ hÕ\Ég'ëÏóxÿ¬™n™½a• oÀ;¯dÁ6<-iÇ./°+B+MbäÂßgÏtzGcnf*é²õ:=D«¼¬\%‹}‡à»_¡®Blyî²%¡kBóÈÊøõlyD…ghtœRÉi5Z­ ä&W§}qáSY¶àT LZRr’bÆ\Üuu©ÃþÚŠrm|¬Mè®o5´uýéS"v¨ó´èÃ's_ZI1…ö£_Ø;g¯BÜ™|zÌð¹«çî4…U™¦ª£öÅ™\Ê©¦ñ”|b¬fm £ÌwÛu6A¬I„m¢âi«B‘ÜÉú%£ð€Å~ŽNó >ñ’Õ&™M°—© 0ú{G;Nxº ‰PÏÇ_ÜYysH1×>{é—ÏŠÑ=œÈ ÚQ€û Ko´Ð8@ó÷¢ù¨ê“ÓñŒ*ƒ2nâ,]ÃmÆb±˜ø”9Y¸Ç)lq÷º¿<˜ÔdCZf̨Ÿ™w6Z¢æ ¯ZIªD3YT4EøØ–Û%4¾Ç‰¯n‚moÇÐúÁsZúÔ<‚ßFpŸ¯¦Hø\ë TöVKšïbñ[G‘dïMÈÀÂMê±Y¬F½¦~ŒR¥RU, —ý0ò ž Øð\¼÷Æ–1íPQ&«R3}ޤŸpÇP§l$†{mòV‰:ý@‡¬îZýq›…=Ê“Ú΢n3Ÿcj›S¤—'‡6ÑFeM"1þ¨×•Ç9©ê”D-¹k’,4~kèRp…íiöÅ  YЉƒ„H>B‡CBnšÞšÌeåן¼ Ç¡l{zx¾‡Þ ¶0Òפ\ììæ¸˜¾u'">1³“LMAYiiDÙÎh¯ÄíS/&=!óâ{$âü†)Ví÷_’…@ü¿âØ?x”®Ä£¤cÛ0úõØg øý¿Gµ{~pÉÝÇ B±GnO–“bߊ¬Ñm¶”F©¨wݱÒ&åå >¥Q¦üÝûÎ9žûâþ˜Å¤Úc#b>EâïþJ®“Nú‹—xlÞÊ¡nø:»|Ï)ó›ákâEoV?”V™¹BØ [al‰ðô]½=)¤­|9œQŒ6 CFoÑ æÇ¡UKrßh"®F5’\( …°h×à:ú"òI aF#å¶É˥碗ϟ>#Gþ7¶4´Ü×_.÷÷7É+wËK9d÷^¥Üäïl Ü]i2UþîÿbÌ FD?¬kóœ+Ÿé£è.q‡Òb\d¸äO­§˜Æ–ñ‘ZAˆl4uÑÀHïâ®ÄKþx¿áÓÝuq!FÎE£ô‡HfgyLQIIþîO64ÙŽÇÝ6c÷ŸÙS!sÅüg7² É>óü+6Cb«$¸'hrTELd'v±(“ò3.äd§¥Þ$<ƒ\%ŠÈÙX$ß9÷߉e0Œ0ÀáÐ!8˜É£á”áTúÉä’Üû>e~oUDhAð’|V§ÓF¯ðÿØÑ^¦T’GTµ.ûÖ-D_ nt}ƒÑüìÔôL! Kì:,|ŠID‚éqéé1¿A˜!ÓfFòðpóÁ?ü}²ÎkÏú5Žîª$ί~}J0c1³ Sÿ™GÿæM‚¥W,² ŸÝiúìHep‘êPa’¥ÔUÄ«cHË`š~׎¶AâIMGÒŠc þçÿnê­ªئ²‘Þ£´Œþÿ“×¹F…s!µÎÆ-ÀŒÃ]DþÃxþ[-ëhqž?Ø÷Iim’禉†PgG&1=‰•œkÂÈ/K‚]²is×Ëݸ®§»w1etï~ÙØ½Eý?&4|² endstream endobj 65 0 obj <> endobj 176 0 obj <>stream xœ­”{LSWÇïm®Ž8i"™»í1sYÌ\²‰Î= ™Š®(EbyT¸"Hß-¶´¥úäWÚÒrûBJ[,µ@y¨<AE'K¶–-‹Y–ÅÝþ\n±nî¢lÉÌügYNNrÎ'çóýžïù¢HAQ43ËÍÏ]ZmL½ˆ¦60R/1uiÇöbë ÈfBvFbC推üµTîóÔæ5Ewí+ËKÔ²ºÚc Îëy›8[¶mÛÊÙ)$duÕ‡+P#„½ià‰«ë…z3ggC‡·tBÎárBÖHÔ<¾:O,”(„ŒÃ×2‚ ˜HVW\%|Aö#EÈ^dò r)@Ö +if$ ù­AÓ ³<ƒ½âÒG(·YýˆaF ñ;ަÖÝt-0)>•ËrÉ1G0pìÑ¡¡‹&o6nä¤3Ueìæz0A3Æ» žøõÅñ“m£Þf4Xqù6A ˜¦ŒF=ò;86IeÁUìÛ’‘¼í%e„7ÎU–B-Èš9ßplX«ÛâñÛ17î»Øs}°X§L©6«ÚêÙ¶6í‹N“o”ê -Z“ ,˜"Ôæï ú|nÜÑéIºÂØêGèJĦfîúiè}&ULá,ï„w‚œ´w¸OÛ]Ž®Sçb§O']=à…žö€¾ªÕtZ1åIm¤?9;Ò0ÌÛ]^!iÄO,ìÃ2Ÿ¢¢¥¬ÿoØOzp¬n批ë.zûæÐ×Ljv1ƒÑt+¤"¹PÙ­‰ÆN÷%ðôƇL–$l’ÍZ³š°²±ÚË¿üÓ\Å{GŽT¦×»úûÜ=þ6ÙOö{—gWÔ7'±™êáÒ7iNóæNÒÇïïO ÍbC»Î dÓXÉQ$]Oýô˜K{R,0S[h°6$JÅRUPÕ—ˆÅcxšøý]–¶ loh@ë´Ù‚Î~èÂúÔþF‘DVOŒÊ®}N1ƨì~‡zàðux ˜3Wy¦ðeî2…×îºñÄÍÙÙÀÂ>]½ÎJš‚±éÚjâN0NS(uí»«ôÓM-¾É²w8ü`Ç\–.½¥ÁjSàE¥ÍÐê]|Ó`jµ‚ͬÆÓ¯<üÊ¢¥ÃØžÓÐ…’žÁ€'Çc¿yÇçL7TÀ3˜mk³MfìÀdÕgã±ï힇N쉵&µoæK÷ð“š"ý~»ÏeÛÎn:)?¼ÖSê$“>ÿÜ•©ÑiðƒÏê1í…ç\R>r¨°¤’Çà y²‘N$ãÓõ´¶àŠK«CïS·î1S¶Ô«¬Ê[ ’¥£‘äɉkŸtåõ5 \y¹$t°4Z^+^òÍ×áò9ØÑoæ§/v&$®=¡/o;Î6Š”o›UºâZAX@ ó^§ÝŠªJ‰HA”_”Î^=;؃GÊÎ+¦£Ðyjmüï±OìáV/Œ÷vFWÙîDä¶+¸4<1.ˆAXG+`.,÷Ââö§zÁAvöu®¡/'‡’±!O°Ñ^e¹Ü¤h©`¥M{Líþõæ&£výéïýyý³Û%Ku˜mZ ú×vÉÏl—]¼ZnÞvk_O ”Cæ`žqþpœÇ@ÖØTG7MÙÿÑ4Œu!iGøAQ/z=õ3E,–²:ÐÌo ›5½Á‚§Óì0éÀÖœfÒàïvúH'¾º1¼øa8#½ÞÌt™5¸êûçðU[{³WÆÙÙò'Kuö endstream endobj 17 0 obj <> endobj 177 0 obj <>stream xœX T×¶­¦¥ªœPiKpH7'"NQGœpBEÔV! È(  B ‚Ý}º™G™d¦E±Ä‰§$þ8|ò’g4‰qHLžæ¹dåßMâïý¿Ö_½ ¡ûVݪ³÷Ù{Ÿ’1½,™LÆ-Zéä1ÅÑü§½4\&°Þ1Žèe茷„~rè׫iÄP7küdú À)¹LæâºeQpHtØN?ÿp»q‹ÆÛM™={¦ÝÂ@ß°;¼‚ìVz…ûûz…ÓvÛ­ Þ±Ó7<ú-»…»wÛ¹™Øcçæ»Ç7,Ò×§góEÁ!á¾av+ƒ}|†™îº0hÇJ§`ŸU‹B|W/~os˜ßZ—=þná;#Ö/ Ø»Û+*Ð{ã,‡Ùo9N™:mÜôñ3Þž8“a˜QÌjf1óó&³†qf&3£™µŒ ãÈŒa–0S˜±Ì:f)3•±gÖ3˘iÌf9ãÎÌ`&0®Œ³’qb61«˜EÌ,f(cÅ c0ƒkFÁ fz3Ó‡ÂØ0ý[f-Ã1+˜™£,Ãb’E¼—<±×ˆ^E–,³Y–õb¯pS¸î¹·®÷Ã>}¹¾M};û­ê×Ôß²¿KÿûVñVmœÜxpàïƒ ¬í¬gYŸ·¾¯XªH,|Tè%lÚ‡lòØæ›ªßeq«ß-šj¥¢ íq^å6xLP³ .1d*YühéÙíZ"ƒÍ°Æ‚o2¯F¦ëaÔÒ Îêw¹o=Ž¥åŲæÎcr)¨sº ©ˆƒ†Ã ‡¢‰¡ëÛÄýÚ„ùÀGªÙFÃic œ€÷Ḗ9ÝtÈ5$g ª3ØßKØËd¬å$º,ù´B܇ºlG¾—dI%‰bé¥ÇÞ7oû¬ÃÏd,}y"k£hk5Wi¸ll¤;\ÒUêyÑ}9”Ýk¿V_9_IÊ\þyA÷|à û‰în¡JÅgÈpdA‚¥š»š>*r•Þ¤ì÷Lb“4 IÖˆƒÑ ɱKš(DïÓEB<¿½!êXMmIË=§­%KŽðdè÷“ð-|»ùô¼p0Z¯‹MR†ºn‰òž¨íO½8…†­6Weõ{¯E`1î¼ôÝBjE[’*4刀¡$Ì\øË,DèõÁÚ=Z­/f®ÔEz/-pši¥Â¸hˆ1Dƒ’õ(å%ÑÀay×Ó̽9IÙ0´2ޤdb­Dl ݲ¦ä‡ÐL_߃‰M 8#’P.4  ã)ÀSû™+ÝfÂÑšòÄ/à(¡½B©¯€¸œ{V8gë¼-+'¨)úè2|Æ7ýs2CÙåÒMVñÜÌßùêþÓÇ3®“¾™ªäC¸bº³Å B½g¬ d0­´’nѲ+L²ZZöt,—N`€Ã&?#3É,Ç1d(xßßÅ9_?ÃJ’A\¢d¾nƒ³õª¢ã-%í´4-ûJýKvÂzØÂOÂ…²‡A‰¦@Q’›pm‡µØTÊ/EŒôTV‚*é9Gœÿ$ÃFNÑ~bÓÆ´]ÃÉØQÓÈHbûÝ$wåôÑòÕfW¤Y’øB É\l´÷zJxbØÿÆi¸PqBUÕ"fÕÀEh ( â­~µ}Õzç¥Ãçåx¡s† ÉÑ"éAÑÿ¤‹9)©ëˬ8ƒ>†ƒÌ2•t‡ƒRƒ¡2ùh²*/Y_­ø€loÚÈå\!è uUZƒ"ø®ñ憞g`4¢ô«(û$m»¼3½sŠP™Ññ:Ý¡å²5+Ï,-\Bùh$d<ñ"^Hßш«Ñ W|È1zÕ!2Œô_5æÂÌ£¯¨/ÆÝoàýdd®}üÑÇ_gŸ£@Á£ù¥D‘eЕ_a0V¨z!î"Ž4I²ŽMÖ/¡°°žÁ6Š;‚ È`ÈËkj>—V üõ÷Wk2Òyãòj¸°M¥ÉñŸPnÑæ^ŵúŸ<Ø „O‚›–5®H™KÀùðT/—mNÎÀ¼_è³?å„dƒör´ïT=⾈ÃM8º CÈÈfU—“šEm׊ÄXîcø2ªÝ¹Á#c ¼Dç°mË’iûV™O-ÛîmŸE ¡úÜû§1È<À6Š'Ø[\Ôlƒ¡Íx éÕ™Ug:þŒœÈQèÿŒE‹O3ËSSA—®Ü¯Iˆ‚(Þ³!ª¢º¶¤¹Å¯mîxÂxKåØê;f®Z3o“ÑŒíÝÚ4‚Œ >V‹æZ°C@g–BÎßÂÞh1îïäU׌WîE»é)u˜Vx ÝÊG÷§ø¶ d¶ãp'ÀüE‹a™h¦ä?’Í5ˆ˜u¾Ç,gP³ôë6Ë¢ žJVR|'aCû8Ës¡JÄz5»0Þs‚r=fá$g@…S>éÏ‹ìnL´üMf¾Š/éUtZS3“ÝÍ7Ÿ=ß\ßafû ´²¡>ta­Ì"îF9Zý¨Ôë£÷Aï]»·ªª¶¤éü†ªÎ;6¹†+mhÉ‘wþbX”ů՗ª(ÙjÂIoš0¼Ùºö{g”ãb”Ã}ç{6Š_4˜nÂ4¸ÞÖ×ï߇¥Û¶ÁÒi*buP8µç¬®œvÎ莻7ݺýùªêüc¶A—¤‹‡D>¬ º¢¢ èhYLÃÖýj­ÿvetŽWÉBZ‰Ñëç:{{׆«‚ýwA$ìOÙÜÀ+:™X­S¤ë0ލFç»—nT'\[Z¯\W¹&B(l…$ÃötM#BVÊ‘´ þ*Ù `o¶-a¥ŸÏ2„ôÛ|êÔåk§êiâŽÕMߘ$½¹mìq€ (‘¥…Îú°ÇÊøj!OJ•±¸¿´ÎѤ¬$–ÅsÿSöù (ŒÞ¯‹=¤W%ú®ÔÇ@8‚Ï%ždÔ dÀ%-N‚»4•<:~óÜã{GÚàÜÝ{úíÆ¥É3` u.2~Ⲉ:¿óK÷غsK¢AcLR¡s¢¦ L ~ý¡ÚœcUEu•õ×b3¯n1#_&béK^Mñ J-ÛÎ9B×O¯XB¹ú NB;½8i&ëp,;Ã=Îüƒi ”i›°íÌL+›w„ô¦L£Äú Ÿzœ4¼Öº±Åë&ÆÑ_fbù¡(¼—¾<DþêC(ºÓ´>UiØoH*þ(¤–©>çÌzXQ>ÊÐ\ÿ´ÀÚä6;ŠCŠcTMþ‰ŸàL‰wb× [0"F†ÞnS&å%Áà÷@b¸ŠÈ¸(ˆ/L7‘%5¨#ÉÆSç ø| plëÞÿJ•OU@ÚÜ\þU {iÆTì{$¿;Õ=—È?SšÇZߥ²ñeÅ“®3ÿ"×ýïÁòg›†Ñ˜ÂD¬1aM€`,£¡G6?´'6?@Gë»èHú˜ãÎC —Üâd®ç¥?4¤ÆÐnlj8«3Ñj®äϲ¤ëÂI¿z/OOÏÿÖSýÉ?’”ßyzÚ?²xOŽ —–ßærèœf)rÝyJÑ&Ñx½âOµZÇÍöpwš§-¿ Äï_ûæg÷EÄ·àî)¥Ug3%ÇÝd-"¢]’@[$¼s¦ðÛ 6’$ZŠl&Zf}£ÿ¬ë.qP³’©¾]¢/úvÁ …ƒt÷Sß„¬w³ÛÓÍÃÿ2ýȱ…Z²"ë­Ouh+ŒïŽHÈRdY5×L‘=E_O»³a©ûXl{öÒä6RÙþytO)}ÑI¨*ËH+Ϋ÷ª÷ªóÊŒËß Z>>b•j®Úøµ!LP¯¯×ñb ç Ú”Ø|2ýlqȳ¼ìÌôë0TäB´aT C`¹1ÜÀ«¹2HÖf$µd¼­´õ¯´ë ……úéqƒh4Áq8Ý•ËËw¸D(ÊÊ;KäR?!57%ãЙ+\¨ßCÏ®6F˜ÏžÙ®×hµ‰z­jÉ$,ÖY¾/²úº@½ŒûèšK\É&Л×Í!ëmGa¶y™·Î[ï »a»qg÷2tèê““r°†–CJVzÁ ̱}Ar^ûŒEDéA‡ ydäÞ¹\xí¾(ké¤h6èSºú—7e1Ù²;³ãêjt0Y×bïy8§›E"Rêó™°¶þCyš-Σe±«Ze€\(ã1€{°ø#2ÞXžöjZ«Ž*Е•iµ†àï4xÍWíäâb-I'c†MÄÑŸ|.6·”*cpŠ0‰›896ÌcGÃIdpjÞ™då_à—•J—åøê©Sáܼ´ô/Íúë6ê“ 6ƒÍU΃]ΡÉ ;|x¦ƒíxä,›D6Tïª €ØfÜEÝähKºbå[`(urã9J˜rø@WL‹ÀEG¥¦Àž¡z‚2´ C,}Ôl…኱j¡MWG×,6£vÃëã±WÏ¢ýߎÈ_·_­/Ý;ï_Èÿç‚îgæÑŽ7m Uî}89Ù¦ƒÛ¶W^ñÅ¿¨__%ÒÝzÿZÂÁ]ÒO½Æó'"—_TP˜_Ä+Z2Ú7<ŽãîŽóß“1N›‚öîQ¥øR¸c §«:hh±ÒßY ëC}TAÞ[5à >¡äëU~I(édEÙѽÂå¿^ˆV`0Ö$K ßÜ"!zÝ6ð…•àGE€+‡ÓP¥! ºÖÙgi›åcó$åžt–šþtÅ=®y$Ažÿ»oñÐo²´}ô@Z>:Iî¶èÔåþڧ欦i•¾8a}úÞ†;XpgÃ=³ao‘öû2ƒ  ž¿ñMzÓWg¼—lݹ=Hy2L¸aª9 ð?9¶–¨œçLÜ^èzw»Rñ`æ{ÛÝÒ pú÷Ñ™™âæJ%™¿DhˆC:vŸ ;I‡â™ûÜÆ»½{÷|kC±Ù&â60èôD–‹Èñ&´'äƒ \÷µ•à v¾ ˆ#ìhó­Æ7h†”†áE!‚§ø5ûwÆøxnshð3ç$σ6¾>¼ÒÇgO¨ï’³n4{Á)_a¦RñëuÀrŒ÷•?,À búF%‘{ “àÎOáó_.•¹LQå삵°“w 3ó•¡£ì t”ãÁ»B«ƒç+Sjmhh5?8И¤oM²6é£Ì*ð–ðD $‘$êIüøq²ñc~T’$" ~°®4övü9øtÀ-ø(ã\΃YG©ª6Gm/xFÂlñm<ð–ë@0cE%,Q«íYñĹֶ:d¿úP„G>)¹}îñŸÍ¿J÷é;wÅ»ž5!måµÇ?Ø}Ø l¨<™Qü—É+vÅê‰Í›‰*oNŸ¤?¨×¤‚¢K…Ê“, ®ã=Ô0æÍÐ)Õ[Tu™ååÐÌ·Ôl÷òñ˜òd5¥è’Û?~ÛtŒ©Qöäb,ùÕ—y"—!èØò+^88ô¿â¾ƒû€›ÎâÊiù‘#¤òÙ“b¼Þ‹‰VG29œ¸RÀÈ :b!Îú˜pß.->#+9;U›U7v(%çbk¼ƒ¨íQq|&­EGá‰8AšÍÓ¥Gêõûã”ä§®e–jl&2ÒKÍ5&Ûý`òë—&鱎¯Y¾~å‰Oäø-& ß]h¡þrrŽ×£€O8¨Õ$®`Ÿ ­Éàzâ d Md ± òýûõzHâ5YÚŒ‚–ã…JtÄÉeè /zôá Í©£Mßà@ë‹8lÖy:¡2÷`n›óŒ rר•hËU&eë꩎ý-ËÓuÙqZjá•[„{¢'Ì÷¢ÐÌød½A üÐìS‘6ŽÆ”Ò\cJFºòÄ© Y4¡>€i謹:=é·Ç5õ¢—Òd¬:JÁ;ïydÏþñ«Þ¾û6ÄéO¿A«î¾kÅŸM§q`…™TJ\…ƒìp„¢ ]ñ‘PIJ%­éGŽŠLWè”W¯- ÷KŠ@~gYð‰G+¯z]3Kéì$•JÌÉ|·ÙEœÿéžô>Tÿ†ÃÐnìmÒ?bÌ÷R='ׄr"!_-܆B];Áû±°p,å‘<6„!¶%øÕü{±Lš~E.…bˆ€WÙÜj¨® ‚Ô‘ð›Õ»!(VI®Q‡:»«!W…WÉ56«k *·ûöJ¤4”C±Ý`~FÛ&=²²Á <ñdÃØ§H‰LÑgê²x5ëOÒi6Íú477ŘöÐ[˜ËFGDEFGL$½‘á@ÆñÎïCZ¾˜ú±ò§“O§‹™×K.54óVšìN§l’–‰ÛJX²5û ÛWÙ§×Ìâ~½›ÒûõC¶²_C?+†ùox-›™ endstream endobj 15 0 obj <> endobj 178 0 obj <>stream xœ…ÐÍOÓpð_WÄFT’PÖ‹‰4у€ Y41†„€1a'6V¶A÷ÚŽ¹@ÖÎe}ºŒµc°ÉØÆÂDE$:TŒWc<‰7ò?ü¶Œ ¹brÒ}&ÞÆ8LüþÁÒƒ®;îѽ,K$8z€áïc9ülp9Ü>žñÒ}. ãu"„È@pº‘UHƒ6‰?š–Ö=âWjŒk¿·1[ °q›Ärí¦.ÏÅÊb)ºÍU…õ„{9æb§÷ˆX(./Âræ[²œþ o(6F°FÆÔ¡Y¶#ó&e_ NrŠ/åI€2ƒ-.$¹rR-ëW”|òyB IAÁ¾"<††Vmt.4trX³ €"'æÙfá d¦¾S3Ÿ`.^¢ŽÈÃE|{÷ä"îù‰ïü§[t‹ñ”T?N-H9 ^Ïå— áEžóFÞ%F¥`\.È™tuv5½ /¨c›öÄ,NuD±u¨VyZ~Jˆ²[aÓ¾Y(>ô‡”‰õÌd?ë+Š*ïÓýÒÓˆù™3b5¼Éù•ä»UὸÞ!¼•æ¥%jרtr…Ey.]M½R«P9v¤M©±#ÇÉNH3s”Ìà>vD6£kÿ­{ä­Q„ý[ÄN½¬÷c¿.[‚åeLêw4Oú€çKÕ·råúÝbs£M=½uf§e+§Õ"ôfÆI{ endstream endobj 52 0 obj <> endobj 179 0 obj <>stream xœ¥XiTTW¶¾Eɽ׌&e “ÔűµŠ(yQcpŒâ„Q@PÆbF†ª ªvUQ3XRŒ *ƒÆ¨‰S'LÚ$­Ñ¼t:éLƼô¾ô©tÞ¹ t²ÌËŸ·îZLëžÚgûû¾½72f˜#“Éx_?ŸÙžÒÏSÄgdâ³Nâsr ÿòîu†Qr5¬ãÙ±ÿ‹ cðÕÑèõ#—ÉVøù$$fªb¢¢S<¦úLó˜½pá|¥q‘ª˜ð°xß°”èȸ°úK¬‡_BxLdJæL¥±±›¤É›"“#Ui‘ƒû$Ä%¦¦Dª<|""Uñ ÃL\±.1rý² ËUQW$GoZ™ã—ºywzlXFÜŽ 3YÏ,cf2Û˜ Ìrf³‘YÁx2“™ÙÌÆYÅx1d63«™9ÌTÆŸy…™Ë0ÞÌZf ã˼Ì2ëÆ•™D`8Æ ãeéNO9Å9•ÿQÞ>l̰üa·œ}œ»ÙÉì.‹ŸÉ×÷þÕˆƒ#—Žlùõ¨j—±.y®S]¿½ptïº1¢¶Ÿe™ןå3î2ÐAâŠF™èÓÿŠBSo(É‚= ×êrI’ãK·‚”=!^>–Ûgì1õÀkpN_gà;¸-)ÍM¥`²T oà8gl`Ï‘–\ÐC±{¼$)c¹CæëpŽÁqÃkz¾#“[ùåù­<é÷)ЕÜq&ŬëÏN‘þ ØÅ» ¹Vü¸UŽþ¢^QP¥‡ àÉ(ۭШác¸ðQªèEzMPC?×®ç휜Ù/࿸Š<¼âXU¦6C)¸WÃÞA|šÛgú”v.Í¢O‡l6ªL¼Šëƒ€¼ÉÑèëŸarì¢Ú.;uOÝ$‹FE-”åk úüBeÄ–4ÛÖ£/;™Nd$yž<ô;NÇqýði9ìÍUƒ6ß hÆ{¯Ÿ| ™Þ‚ ¨ÂYM½7ï¾JžlL£¶ø*°4ï¿Jx÷Ë:d8¯U<ýW9ÖôÏ ˜k!&»(¶‰½eRG Žb.‚&Q »Œ'Má œÔwI O‚-‚x„3±ü§á%–‚ p¯KyI9Vö?áf48;ú¸(½z±29–=l¾ Ýô¹‡‹ùŽdn±ÞzH›¸C&ë-eSYĦ@1flÇ{n®?Ëþ9ŸV1Œb!N•‹ÄtÅÞ 0C _­ %ù'[H9ÛÙRtz³ó;àq4K.9‚4ùôCtî٥ШØJ vV±Z¬Õd<ÍiœTâ=&&§YÌ“@Æß“‹·±LÓ(ŽO©dAž _§£ Sèã‚#pº’4’"Å2âtq²'¯\Eç@²ž§MË(–N‰‰ˆ3üž»#ï­ wÅ¢Ý!8Xn‡N»J©ÂNÇÿˆ<>‡ÊI8šLˆÇJEÅÜ¥¼ÅÞƒcAÕ™¶[L…Ùai»÷¤†Î~1­3÷ô1P/¯VÑ—’³¼¶"¿Ê`¬Û 7À\`Ôƒ²yG Á¿Y¶ãí‚ØÀ‰«?•åYÀ2@Ð}‚ØËµÃñÊ.Ú°U¿ vÁVS´‘jíÇ Ž¥Ag\ Ybä~ÌL4ïž7b®ÿÀ~÷É;é[rpiR±¿Nœk3ž3ÙÀgõíª’UºÒ£B1ú*p#7þ5ÇÂ’ðXLÆ Cq2ìÑJ•؇žv¹ØŒ ›E\’·‘§hÂÌ .è{{¿2}•`Çm*vU^úRår\È|ì÷,òÐm%2ÞÎfà"gÇÆGW“?¼šLó’¯M`R›ûØe}ÄüòþJü»ÃÈ\ô&‰?™Mæ“í$ç9¸ ýq6zc’|Oþ[A"|‰åXŒ“oßÿœ0hI5™ä5Y*Ø¢© 6÷ž8ó;ù¹þ%ŠØ&nPVM¤!º²¸ 'ãTÊ,?2=É JŒŸ<Aú½%4í=¡Dgö,|˜u~qïë\XS2}‚üw¯Ù½xŠØßÚ$ï<ÒŒï DÛähÂk \Í¢+ÿðÁ·ã?%ã‡lHÖCñÙ.óûÔÀÐõic÷ƾÏâb N!¡@†‘ÅÂP¸‹x°“²ñ3Œ²Ëû×!¥<«"3’—’å´@ÓÙ°ñîÛ긹´@õ*vnNÜTå4Ô°ƒIMdq6ØRK&Ò %`ª³ãÎÐ÷ ô¤Û­ ˜œF­“l˜d+±/ùÞMûÓOfãÏTÁ×ë/õŸùë^ï%Ñ<ÆÀvã¦VhƒÓúæ!âËÜ“'þÆÚ¡Ùл/’a;øAæØúÌžì^à/×\j´@E®ÚPP$hÖE4UZka­¶5÷raWþ©—Úx¯*Å\Á‚ÝTQaÙknzàß¿[ì¡ó!ã$¬ò%WÇ%v<9à9wúäâ!|NÑ]Rzšvƒ]úpCDÁFˆ6óªFî/%êp!ŽƒHOIÍÑÄ¿ŽL:ˆ1Ô̧·œ¼ùÉcVŽ‹¸_v‰Gl›i—˜FÆQ7›A¦á⊞]ï[ÞîÊsÚc­À—CY0H|ðàšGÛÄ6Jÿïð^þN.¾Uª@ç7îãhÀyücRÂÙÄýϯ£²~FÝÌ/€ÿa?>}¦¬êƒFM»ÐÆmI; ’Úâ®ò$´\±¤yÂ=ÀhÍ8ñóQŽÂóÄ05™<5a™2áâî€ß³#TU™aÖ è]¡Ø‘iÈ>  ·¶}ÿž‹Û¬žΑ¸w¢r/”rϹÿE…ãÊãÔ¡Üþ6£ð9¢ÜÞÅ=U]¾ä¾©Œõ¤¤w^ì4å ,}HIwgA«-ñ ”¤èÒ©)Úd§NáÞSrñ©¡¦lHÍVêtùÙEÚÈÃÁ•;€÷\½r‘ß]•yB{\cÑßÓÞÊ­ÐïO³µ$Âv>0ÂE’IW¨2¤«ø¤¡ÅPVh,>4™y†Û…¥F£­Fi±TÔ””¶%Nyø¯/Ýúèˆ0 ;ì1ÏkL³D—iM{º¡?Þsò >YO†ï.Qš4 µõöÁA³¨YÛ´²N'®Sµ”^¡¬‹7lÒ§B*ø™âŒüÃ>Eæ‘BœÇýοoè¸ Éšß{õÿhªÖîŒ OwŒ•lêüƒš¨„Å]ø…Gµ]~®ò_×;„¶Ü[¿aU‡Ì7¦ˆå|hUXJuŒcØ·à@zÝž#;AËaD‹8¼ûlAð7Ün-+ 4¡pÑu€¦7yõõ"ûîi¶Ý V~R•‚¸`% -¦ò&s¹±ÿÝ€LóXJœ%Åø…1©˜Ó!NîºÅæÏäýA¸Uñº.ÑÖ¹Me…àQf>¶‹û rb„5q!³ Ï“l:x7Ÿ¼ýã÷ ɬýJSޱ¸ øZ0ï0Ÿ«ƒ½ê¢"È+T¾º8¶}Ã…ñTÆÛÈ ´2Á$ù¸ý£{ͺ„ªÔžðÿÈXéôB­¿ŠÖùˆhQ8òØœ©Ç6Ö£ø³f ^D¡LS±Ýæ ÐCŸ Ð]ÌÛÓ¸ÅEÖAd¸cf8‹Œ-‹ÀÔùá¬Í¯,½*´î QEkÐb¼@÷ÚNèÖ7I¯ûA%·‹'ñ"«ø‚hÉú_oË âZEA%Ý%J ®º¢Á(1Û°NŸF‰aŒ“°:eÚÖˆ‹/ôú JŠYë¹+fµt5»©ÝØ èÕª¥Xé&u5Þº2k­­ãhûkzp$™ïV¢3ë 4ºÌéP«ñ<åSô:$’ÄÓúgÔæT/LT×V׌L™µëõîºÞ»ècHbJ— ¬ÕWR`³ ó4…IQIщÑRqþÑþ(›‘­¢7µ¦Q3´»<œ(É—¿·ù‹£¤mx½#ô×Ûð&1j`ö|$†Fº’uAÒƒÈ>qá®ÂK Ü\Å[´Ä{ltÄ–áˆ÷°æŽüøoí–os(¿~õú»kÞžknÔœë…óü;Ë/™’L$j¾8¸i}Å~^³(9*é剖ªÀ?±w[–„…ìZé)L{´hJÿŽÁõçeÍx@Žçq½â<9°‘sMµõ/±¿jTZÙŽ}#•#†Ío5Ü^:jT_Ý(†ù_­!_ endstream endobj 13 0 obj <> endobj 180 0 obj <>stream xœ}–{\TeÇÏp`ÎIQS;iç`­).iZŠši‘"`BÞP¹ƒ‚0Üd(™aæ™á>\”¹0Ù@rB׿•¦l©ìêvÓìbÛî{¦?íÀê>ý7çóy/¿÷ù}Ï3"ÂÕ…‰Dbÿ°%K¿žág‹ø9.ü“$àhÇ׎×ÝÀwWûœÉOÍ@ÓQà4´èQ‚‰7Fø§¤ÊÓöî“y-ð÷öZ²r¥¯×ºdIzBlŒÔ+$F¶O’#>’¼ÂSb$2ù"¯uII^aÎ^a’ Iz–$nìjÿ”äÔL™$Ý+$%N’.%bV°|{ˆ_NJÜI@Bøú¬¤˜‹ž[êCÏÄJbñ4±“xx…XEóˆ â›ØF„~„'1˜NÌ$¦ ¯#(aáw¢——³äd>ùÀUåú•Ûf7«8Bü3•JÙéet'}õ‘­œ›4ýQàbê/.±CØn6šsƒä/¡*&S¬˜Ÿ‡gb _G©+ŽqüÛT›®æ6ÛbKÕÏÃ>H†¥¡£¥&êJ‰"žµRñÅ ö€”±p¦ëYG› Ã|¾Md¼FòÞè6Ó|é]­h%UçÂ~Â…¨vu• äP Vªóp™&ÑÑ¢:(­g“L¬JSG@ H„ aÎ ƒP©¬MBÞ£.QsA­*ÌIN•D”mì¥öÆìZyN–B*i?u¦³ïB'Hqx¦Åñ ÉÏæc‹v×7ÚNÜÕzÚ¨hu>l‡TØ2çŵùª¢¢ìŽ<ðl´«¸TUežuæ#m‚ª õj º^+u ôJó~´ ·xàÕX“¾?v‰ÆSJuëªá=h†!hP Ñå…z¨.«(¯BóÑ~´+Ë ´PyÂAyNœF8«Q÷)ØÀ —¡Ñ¹ç5È™žú ©XþÐ+®‘¯¿J¢‡sȨªIãÅR“xÜ -• »|X)Õ¤;%c…SÐä<ÈÞmæøn-…ŠL*Í/)ÔƒgèÊÊ#•cª‡vôšxÂFqƒîº Á×Çd ü‹õío¥ÚKôWX“ /g‚FS˜¥£xåí’ÊÐG&Ô%ˆc‡Ñ­/ÉnÇZæq#æ‹ÛßÜð»Ž'×rw ]„kô­Fðã,Ä—¤£Žé*N°h†øû¶e[6l[Inþœ#ÙÐ&ê›~ß5«B×y ¾Š:ž%ÀÂ{šDͼ ÉOçç3UÕ ƒRºúä°ø’8?ïf—ß7¶#Јãã£OºÉu`aÑgâ#(Ø-S\€Å9;ñd¡ˆS|Ew* ……_jµ £–a’B‰ b¼Ä4v÷™‹gàǾÿ+£I÷¾E3Xœˆ#™xˆ<"íKíÑœ….xεöX»O±Ãqè’7ǵî†`ˆb’¶+eçîl fºpBaâ›PB‡È>Œ HtÊY2êÃÊCN£²lÑöPA=ß?†gÞõF.Ã'úu\ …æêÝlÔ«…}ÿ_*hô*#D¨873cßé Ó0¡G[¯ÔtXŽq¦ÖŽÖ~8öHý59Bˆäôï〮Fòßò·˜c§zkºù W«©©°Ò`ÛÌyyêbÅ~ [q(:]¤W—@¹§¹©Ä™™z•‚ÏÁe¨-¶ìE{ñ]¼ƒú §›c8Ý#úå§ÖÛ9´‹7PaA©Fä?VïÂó$?½ÉXt`üaË<‹Ÿÿ ~{Ü_ˆH4¹æreiQ¡Z©Tsi¾ëe1@Çèé8idKwµîbo¬»ÎÉ §Â2 s%pê0ÔÇxû%FGìi;‰<Кš6;.#«Ù1­QÔÙ‹z;IôzÀô7Ò ÿ¤oû¾¿xÁK~Ï%è¬ lužVóqÄÂÈëÁžûÆûˆüúæO÷ý{^:Éâ9_0yU±MÐG}ØyéÊÅmþ¡Q›÷³[™fù¥èfySNo„Òk×l{q¹ßù‘Oÿ~a¨…¨á=Ñí{$ îcšeætéYzòÑì†f‹ÙúPŸÉñ„IÔ9Œ*…Öý:ú„å½Ã{Fü-°¤ñ+R‚!€ XXá×p|íGpúlƒm×tß £ñUf?²‘(ÿ}††®9[é½Ön¡¿ÊŒËjÃ`5¼ ëam~h6v ÎÞ7Öpý| §ïJ!ù`´ZøOUœSøºâCaÔ477œ»ØÔˆ|×™øŽFÔsÿæ ýê‚eÛO@‰¹éð[ÖlcJ4ŬñÃÓ½C@ÿk `ñòˆua…Dâ,· ^D×o1£—…¦ão"Ñ6s>ëxœ4;3-Õ˜Ùr¸º¢¬œ-)Ñ‚hä*7¦mŠÚÍ©Š5jPÑÊ2eYÕðUD±S³Ì޵fÜt¥èÅ8¦š²MšÌNrõ5¹?bªrw:â>… þ5ÅU6 endstream endobj 45 0 obj <> endobj 181 0 obj <>stream xœ}UkPgí¡é!êtÔÛ=*‰/’㮉º¢QQ,&Æ^ÄxB*LBP„–x,RxÌñh")r)yvÔØQ»Ä^b…ÄSb•<¡B_‹¶Ì F¿öøp‘]ÏOrŠêQÇ Éç£8I}Çãñ>˜ÀR,}5}„˜—¿ )‹3q QŽ”F]k~ƒf8_ÔÑØfé‚pTgWÕF†‚ä¦mT¢" ´À³z9‘íä9'R¶‹QÃ5ÝògÔÔå};7r8–R5o²„-ð‘30ƒÇ<ýy÷ö8ÝÜ* ùe9Å=ÿŒò¾Ä€ò2Ò´ yò&ƒ¢&¹)±%·ºà\I«½±¦©Ãyº¡;¹.|„|Ö9‡¹ÑL'?±~„ýP?É'óÁŒV3G}òÛ†U0Aàõá•>ŸŠÆ\í¤·Ç'jӾς‘MøùáÓ{+ú?µqÎÞËp›¾íwvŠlÞZÿ˜ƒÛõ›«)¾"¥m;}Ó|hGŽÏÒ­QÆí\‚FoZ·­ §vÐÆ¨fßéˆÆ¹ùAÈ«7Hžú„±À¾ÔÆl_VˆÕ¨ñ+AĬ…¬^-¹oÞ g…Ú ÷õÔÂüÒ&îÞK÷$j/f†Å¸˜z7Ý‹'(Љ˜ûeÑ+72=$‘ŒïeÊóŽd·¤ý?U–î4çšLû.:Cž*˜¼±RS–]d‚ w@–Ô2«ö™÷ì+bË*›ß‡3P+/ÙV»[ÑSªÜ– Ð„A¬lÕ÷™ öB!ÐNÛú¦­åi†øìÍ~·f! I_>Fc=÷9öܰi{œò]ˆëø Î;8DíÑžG$bÑ Ü+¾vøBݱã­ß ÉïÌ·«"LyqE'ØÓk¸J›ÏGôøaO® ®AÞËwŸ(?ÚÁiihƒ47í!&6Ë7êYÄàL¨›2œúÓeh¦Ÿœº~óX]’꯬5"àÏBE¦Å&ÉUo. r^ 1ÅŠ¾ïD-"þw$¿¥1¨KRa»=ŒîBÝ’ °éõbdq7) ×Û ‚CÂIb„»loNµò½wÐÚG$oæ_2%¥‚6Kt )ÔíßSP’_Ek$q8V\/Ù]Yz¥b_iÑ áÏA#•ijX‚}“ñlX0!ä]]ÐQÆvS€|jgO=:Õ:äoÅŽJ¤Ý/ÁQ¥”Û³ÿ}ÖsÔ\‹×{Î"/¯þ*¯â?—1þs endstream endobj 11 0 obj <> endobj 182 0 obj <>stream xœ•V PTç¾—…Ý+R4NndSÙ]iZI­4ŠUã#JðE’F4UAë.°º,° ²oöqöÁ²/ ,‚ˆFEÝÄXß ÍhµÖ±JfR[jSgÔ:gÚØÿÂØPÛ™Ž»{÷üç¿ÿ=ß9ßy,MÅÆP4M‹2³s6Í~cTüÿ]šŸÃ' `dýPæ 1Û5-¾a ?ý%ôIèËÉÔš^¹6·`G•ÞjÛ=sñÚï>Ì,-«Q+ŠŠ+d©™¯Ëf¿ùæ|YF §VäËU²lyE1W"¯ ¥,§4_ÁUÔ¤É2”JÙºÑÙ:NéwrãP2KKÊ*+8µ,»´€S«äjui•’+¬Ð(JJ¹Z®!{ ÍòÂb%§Ñpå•re‘š“õ˜,/+S—V‰jyÁ¨QNÉ•pªŠ|…:ŸH•Ê E™²f|U¦¬Ô<Ñ+TOłҊ|N¡T¨ŠFí>ǼSqEÄR•F)×S5UHnŸTDÅÈ’/³â²9ñÌ„„nEý’RSyÔª‚ÚJuS=´ƒÚI»h7í¡i/ÝDûh? ƒtˆn¦’T %§Ìô+t]Hó1²˜`Ìß+·b{6nKܧÂÂOD‹Eû˜f#ãb>O|,˜p‚(ÚE¿j§ù¸¨€Ÿ…®°èCa¸ ÚÛ«A+Å¢ýˆTUAV‚áƒ"m5TUµAXŠâ½ø ðÙš¿ÿísÂÄÇ4{B›Òy(@ë‘›íÑtªTJÕ©éééìì‘$ò6ìŽð…¼¢FÊß P/…ëÐÑÙÕÚº§óš§Ñéñ€— š@7cÎÆL»g‰`Ô–—jµeek­ŒÙì0¼pHÛní„ Þ,‚÷Aq®ðxÉoM€ ù °€Á)]ÜXxÂØk ‚ 3è‡"Øgíú+Y{ ‚(þüö1ã  ¨¡‚hbT€ÒålÚHªµ’‘…"-T··C[x|_=h§ûø©þ=â߿ҿJÁô¼9)²¿ÎýÑ·nýÔÃ⯈<õð& ŸÃ¡ŸÙÖ“åߌÁúqþÐpd«¿È­;3˜,.CóêËåÇô8^Ë¡”Áïˆ *5êšš Í kƒÃj £@àÁí³×]DâsvïÝww_ò0MMÎÀ¸ûÛÜó"ð€gíŠÒ< ¾Žv±ÏXþø6ÇŸóGølˆ|•€ŸG\D¹(/t¹À'ýz“Õj4Jp¹¶ <}Ðî2Ø`0êM«ß(E¹d#ç 6 XÄú€1às¹‚A ʽp^ÀàµyAòùƒ>»K”&Õ] ä(’´ÓC)[K+ÁVuÒGáŸã7¹Í:»Åj—ÔïÈœ‘§·Ø`s£½É:PptC÷û£«!L“Ïí÷mXöÙg¸%öÑ}ƒ³ƒúŠ4[­Á!ix-3÷]X ¿è͸’õ럷åó½ìé?Ò4™š‚îv·´17ž‡KðQQÿêËë>©> Ì?óðoRÂï¡ÿ* Qù £¶·¼·ìHyÈØZßLs8´Ûg h›¤øûWQÊU¿'ä…ÝâÝÚP=¡Î¤—à)ia4×ÙìØ£q-Ô×»ë½(ŒÓñ”;õ~pšA\¯ÕÕÖ†,~«MO_e´ê,P+® ëšIyøH0§ÜÕâq "[]X†n€=Žðž1 eZ„?Ü>Îöþðø<ÐÌŒÒg³ƒE/>[ F+Ô‹Ahð[ùs¸%)hq˜ ß ™Ý:¯t¸9ãxßpÕÓ|©“G…Úªçòå?ìÍG_²~O BÐlô‡Ï¢pR}“lÀèF½Îkk¶HùìÞƒ]Fë½ßô¸À”ðGqÞÿ²Ö×÷§¾cäû„R~#1ûÍÛ.B©uÕ y¼[÷¯:±m߇³€ùqÆŠ´Ê1J[¥Ø.À‰’«[—ž/¾ Ìþkw¥¸>6b˜õö]u$/Öeç.ÿÿ^rïúÛ£ð26P#ëÇÚÈÁˆ€?ºÏâ•ü4«Ïî%¤ÚHM©Ë’ôF‡HóX½nRU~ɹchóð*¯Öå‚x7¸Ži9@åGI)UóGþäsÅü–0„¦¡ø{h0hî·zó|!ž‹_Éx1^ˆRðd4_Šæ}k?]ˆe€E÷uèÕ'i´ ‹î¢ûºxÜ5Z:¤dã™(¯ÆÙ8ÏÄkp6š‰SÑj”RÑL´F2|ídÏžì?<ýÐ_vq.À\®ÂUlÎ%õ¤ÙÞ]>6 —Fiô6ùw ÜüMCÆ«…%Vk‰td™‰Uã3q(]ôü©2A;Èí±zT¼FXWC ¸Z¤(sdŽðÙ¹D¬Œ M"]TÊ[ƒ²Þ“ô¦ÉÒ¬5X,$݇?¡,:‡¬b³·>ðzC^IbeÇàÒ!žÜ(ŠÆßš(‰ßž0!Ú’@Qÿx»8 endstream endobj 43 0 obj <> endobj 183 0 obj <>stream xœX X×Úž˜Œ»‚£ Þ¯{Ýê^÷Š *V×*ʾ‡-! K @rÂŽ„=a ‹"T\‚¶Üzmµ½*VÛÚª½ö?ÓþçÿOIzë]x’'œ™3çœïûÞï{ßox„µÁãñk\=<æÎ1ý;…ËãÆYqá§#1wð70˜[7Œc¶œÕ7 ÎNðy<§ Ÿ®  ý¢ÇO[óÞø¹K–|0Þ1ÔW¸×;l¼«wt€o¨w4„Œwßè-ž=Þ1$d¼›é‰¨ñn¾Q¾ÂXß}½{¯ ˆ‰öŽw ßç+ #bÝGqØ^<ܸ&Âwç'k#ý6­úG¸Eº¯ñpŽ Ž ñ…ú,ž5aÉì‰^Kß_6G²|î”ód+çOKXðÞÂé‹f|0“ fˆÄ'ÄZb6±‰XG¼OL"6NÄ2b1™p#>"æSwb=áA8ó‰-„ ±€xØJ,$¦Ûˆ Äv•XMì 6kb(Á'ÆÃkb1–NŒ#F»ˆ¿¶„€`;“`‰‘Ä‹ ‰Ä(b1šLØC'ìlüØÂÀsç]·ou‘oÃå?³ö°¾f3Ñ&Ù¦‹\LV ‚}‚ÇÔú“´œ3ðËA å^:øÂYC”Cn ;ôä0×aÙÆWŽX?âˆíTÛ ¶:»÷ì\ìþoä„‘»FŒ|Jϣό8jçèÉ£ýFwÚ{ØW:ÌuHpx4ÆyŒf¬ÝØÚq³Æ‰ÆÝøË®r(W œÌÀƒ<#TùЉk¥ÛÉâ:ÐÐ ¤,ZDJ¢@Hh (a[ºe~æ7˜àÕqA|häÐòÃ2u ÷ECºuö2 Ê$…"$P¡µ ŒyM–Wã-ã€?[õ¸ˆ¬šhㇷªåìk²¬4¥íOÌaY1@ (´†‹¢¿@7l=‰·D"wÐÀ;ñ˜Ï­æHº,©Á«E ‹R! ©¥¬ž\ƒüâÔ™V!×¥V̆©ö5˜Þoa# ' ß²“¨€R¸$Aæá¯”ª€:'Q5âraD¼8ÒûàÞ¶—§ }a6Óc=ì0xl_¡‡q´ÝßàRn$ÝJö2«I‰/] ŠÙS¨ÃË<‚óÉbl`£À ®#íN½¼{øÜ…âðO·OÐ3¯Î4o–å<)ùjû‰åë=E"Ó¾ ü›wÇ£ºøœäÑú0 $+ãRE‚h—# ­éüîŒ àXÝ gÕ²j@UëÊêïLžhÕ'hÜ|4øûÉв*c{™h„ ^g;¬içÜ è/S„Q*2¹u>Ô(s“«…@(÷^?ë@Û-Çö9ña¯ocA0ËEª…»¯#ì„üè"ßœÔÜMªâüüâ¬Ü¿Ã\ÍJÝI¾óa™ I„”î¤H—É#©~³/a‘ÏùÃŽ˜ý3²FÖ³§¡ÈРZýð#´e7ZH;ºÞ{þÝçŸßº}ÝeÎl×UŽlÏxÓm ¶‡Œ0M ?KûÙQæYZƒw2Ö“Ë%ûÿÇy¤][}Oéž±ˆ7c&²CßNÿµýx]½ž…ÁÖkîž‹W®ýäVןw^os÷`ú3îy;ŒÅ.uãnÓ‰¤Y€úÈ Õšn™Ð<úÕ P!®&á†îŒ¢€RU-phÐdf¹ÜAÿŒ¿š\Ó®2¥G’Ë7ðŽáÍ«|NÄݧKAM¨8-95Q¦e‚0H¿[»g=7¹ !þ…£ õ¨ëé($aJ6õ½¥Q>€š³ðW8¾÷ø×®«w/-f³â3% €j:­ÉHh€ï›Ú›&>€Ka}åò…kw/¯^0c˺OÎ0hŠõ1ïò&@AÞ‹ 6ï§¿~ê) dí^Ô+‹}ÿàêný¿J²ã®Â‘ÞÅÛ°âŸ[Ýi]häÇ?¡QhÐŒ©húj ¤¡}ëÓSrˆS2D©lÌö-òp° ¬:+yD©¯ÒÅw®\ìçA‡°`Õ¬«FxÌ;Aï/¹`?u0ˆô˜ JI bW D æ ÉÌX(@»ÅÉR É• ‚ozkå3A¨Äµ26ŽYƒô‚þÈ´a^=^¦áñX=rE®±è:®‹€®pCe<Î ”OÏB]âÙÄsà1¸:ÀÍÂÓEW5Á=Ð,/ñÐìÂvl®`mÒ–$÷ÈØyÀlÀC#,7ò¯rîóa [Ù-‹!ûGЇ„£ŸÀñp!\°NG,t·ÒœìG´iGˆB6cò-b|·TUøèÜxº×¶x_&¢Þ§Ö £ÉzrOB|?ZÝ<ÝR¥cQðNA?¨á23ªw’NÒn;—,qté|ú¬Óøõ½S+ûË) jƒñÅc>ÌÅåµ(ØC[Éû7@“^°¯Y[Uª¿º H–­Ü½€Ù:µ·ršáê˜BJ#ñÎ=¦V“%µ}7…ìÝdƒfx¯JL‚K¡×Rwž>îø Xm~¼¡[já7Ú¼X(Éɬ%<á´uë§8{1@¯ždm@Ò|TV0ÏûnK|4zAåV²vw=µ©{€Å9I :‚³ŒÐéñh»SP7Òß_ùaÔQeq5€ªÔ–Öi/Þþ±xƒkg<Ø»²2 ¨c©y‹Í&#~ÿНBÇK¯ÂÝWmë/‹LÔwäòæÛ£íþ' ÊàZz‹wë…K'Ožÿìø®­n^^ÛØ¹t–òpt žÝ¹ÝÕ ¯×³:Muv‘:7¢*u? Êª4õU¢Æ-I;U»YIa@Ån@ÍZ»jÑž² k‡ˆ$‰<&t ($:z‚@µðÍF8Ž|Óñ÷ñÙíuLBžwå\@­#S@HÉ4edbqR±J 2Avfqö~ B×è©«Nœ,/hjÒ²5¥à º  XèµjÏTö-ÃØÞ6ÀDCˆa´Ý+xæÓÑÙqYœ°ì4àUÛÔøÃ7Å¡‘YŒ:>3¾±¯¦*•.KU2^:/ ±,z‰ÿûoâŸÉX»çm)_'lãç4g—{á}!“Vž^ (SôÙé 6”ª[4L›ÿ¥—ÈyMßœù¢uÁ9}ÌÜCY¼Áç>„§i³€¢ªnÙ¿‘ÿ…àè%’dúØ>6Bg£·Q‹Ñ,s°j¼M>;¹éÓž›ç°kHèLÑRaǨG>D´Î’–0¹õà vƒA¤ÝÙûdhMᕱ xZ\ª—Ôµê/7aBJŽ¡*6EéN_¸òåULb}´NVØ' n~ÑòL Ÿ‡óYh*‹-ŠÆâ‡d¦-Y`®OP9ã¦ÿ»Nt•]@*6žQ¹ºáí¨•à| û6£¼´…¾/°ñÏa7†î͘ 5Æu !eâŒ9g&v¯8¥µ>¦2<<&&<¼2F¯¯¬Ô3oùÀöüç°ôsßÏM‹·Á:Z¯ø&, ¶íÙ´<|gvÝ^Æ».ý¸ª\U¦*î ²ïALenqSs4Ô ¹ŽCÝ~ÒuÝÿxbës4"oE9e÷ji¹·Æ·´:œk;s ,™’ËdÅ*´} …ö½¨M‹Ma|š·h<1jù«–/ZÚù›(6[õ"º8£—U`¬zxΖ:z…–Až(zþñî†X€b-tÐî’o¥[G¿ØÁß›hu°”ÊR¹Á‡ïPnXgÏ]š¼hb`ÕŸ3ŒQwŽÛ¯o1˶Z#t0B{Œª³ØdhÿŽ<ö¢À¡[¶Í‚û͆l#ÍM˜èí²„E…=l*¢[†‹ña‹y„i¡ôóðžWÍEü‡NñÐ=ă÷lôïn~H(@Ï5¸¹   úéx>ªÖ®Gq%„àÀ¦Ùâ³-:F-B3mà›^Ǹ˜ÐÖ-Ûi×ÙRàùõ]\–ßïíÿz@1м|H‘:èh„|¯”Kâs»Mvšzƒ( Æ¢…Gáe«@ÛFî@çlTdzmÂéÄcâk… ×ᤘŒÔ½ˆIÃMÌ6xΦ­·ùŒ¢þÇu ½Šº²£³¤GÃQUPn¨y¢.Ϊ¤Ôdζ4 ;E_4 d•fWRÿÃ}%ažEÍ…ƒG[ŒZ¸~T?œç^l/÷tAW éXΪ‰® 9£: (}eo䜓•ÂÂÁ­-ߢI{&ƒÕ¡:Iu‰¾ EÍ€|µZ›Y¬.€úò|ÈZÖ®­Ë@ÃvÌãtÍåuKG^c+“„5ÀÜ…ÇîûÇ{‚@¹ú<Òö¨NÎî/r¸ƒ4YHCN³9jñZ K• Žuœòá+›Ú¾£õ܉죣$ˆ¦¡áh¡Í^óU8àmWÂ>‚úÐ0›ð˜·‘`Þc¯¥|¹Ð™>¦^‚ÇM¦• q@ ¨àÞTÐC,êøÇömñ¤/±ÀŸ… ìÚºŽµ«*ŽwaL zKn÷þ0é?NIh$ç…ú$ì g¤Ã˃@0•EÅôއžòÅÛr)gOC—wðp.b±¢ÓÖ0vmÞÇp4öOýÚa}G𧆩‡ `¦î6Øž4z˜¤·©ì½€%°›^ízªý|û™¯î_út››«×jö«úëºSmàõpÑ}4 þ`ùR·Ó;¾Šdì~Yûñ¦Uc¦?ŸG@ÛgO^Üs¹â¨c–£&z±s»ÑpùÚwÏ.mØèäì¾Ø„XÝÉkçæð¹%°šÖ4ƒææÈ¢[dbhšžIt0s®íàÃ0î:Õ˜Ÿ€ó-,)Ë«yÙ«¥Y±zPrÊÕetƒ{þýŒ^k—tÀã¶.˜pÛÊM‚µt2¾bÚ þêØÒ윜\PFU‹µ‘¸øÐàòµXÚãº4îdìÞ@âg"þ”Åh"ŸÌƒVçÏ—;Å IÙôÒ­7î>¾Õ~û„>:®”­ ÒlÇQ©R‚4–-rÊc‹ÛâžÚGðà.8‚ïwÐ-¡µÁ¾Â¿†È¦Ã5=tpB'œÒ 'hyÍÜN>g? ¿$ûåL–Ã)6gÌ|Éb(Èi‰Ú/! =L•(ECì'½óêJ³£ob4Åf§ùÂR‚†t ¢ÄÅñºÆ¬zM&S ‡ÚüòŽëhüŽþ¥g…I¦ìšù6¬3ÿeT±áÐÙl{… >Â48ÅøóÝ;ï¡©hš ¸ÂäÅxÖôy[çËh ×£Yù凟d6*W›[ ºxâ%ÌgU °„SsÀHý%þÒ*¬$qЍÐjÕ~¶Vy™[(´TBçù°ãÑSÏ ÓQc½P-gѸ,p4Rp¡Ôdóh8^Sr@]cJvç¥í ß&NBæåƒ ªJ¤‘È3Trƒ¢½rEB 9€„ü¤ý©ðòµ/–g©01”Vhª*ðÕ<…Î6½ä5Ôð§o6ëzß+"‘"11ñ]´-I¤”¨b•ØayZIűÜÃ'™î¥sfÝ–mæ²9½¼c€£ <½1·ýÛvhßÎç>ÀDÝhž÷þ[PÆF¬ Z±5Açs-î³WoÀPEb¿\»c‹çÔ=yîº LJÊæ•*Q”$ì¦>l]óåùcM‡™Rщí—õEýÍ3"2R™Æ¦{‰$Àøž–ktÍÚÓûk(´N§¥çU0/×ÖVÌ\/ûïpgâ5'©*ޮܗ#/‹òÛêŸ&”gòµº3…šÖó=…m[çÃNÞa΃Ϲ—´æÎ?,+ÑϤÌgÊœ)ð šI·à;A¦úL ÂwZp½ïõm†w¾ –ù7.ÓòEQ!5 ”Ïz;ÿÚ¾Ö^Î 9yåÜ÷N½Ö~ú:øš‚ƒ§ÜCCÑÀåKùé“ÊtUezMZ‘<)9ÝÚxPÿ¶{þº›=ÞÏ+4ЃSÛê?­Ý¨xÌB‘阄%†d…0°ö–ŸˆvVîér€0à&+{PŠÏXöøíƒV Î=õT€ñXr¨ôPÉuu/Ü¢ÔÉl”Ye*Ûÿ ˜n¸T䚀 ŠR “óÐ#èk/+ÈPË%%F‹ðÕTEΓR{Ð]‘XZ¥.(~KwWq›a{²ë“.aÜk¢;ŽÓí‡ô—ÀgÔÝÕ7 ^÷©SPLkrN±bFÓØxˤ€nžõ÷ •DİÁ‘B¥¿Ò-] @e÷‹Iw2§ÉŸÏ­ß¼Ñ}ܽ+ [#Ùœœ¼\ ¥ªEZatŒ4xދ͘EFÿýÙó[»®87˜Î³D÷[NGSdz…%©Ùb þínè 5xy²pÌw¥…yÙ „ÊOÓF†¡=È A§ç6ï`.¬¾ç޽V›£Í7‹K„ƒyá/¦îéKºTZ*IR¤)R™ÐðH‰ +Õ”‚MBQœ.D€pIt|œ4,ˆ)I‰¤´07'7iÐ×–ƒý¸û-J,JÐÆu@_ZU¦-©¯å}z0pð‘ï¶óà Zž” Ž *Hmd`"\-z¯õæÜt…Ä}óh…éfj~ NF4UB…–uS4Â×6èµÀì—Cto ´ûiÀÙ­wVµGJ¨ˆK‘¦æd°p1â• …¸¥Ÿê‡X4vŽ49% H©”ܸšz¸³vA_Ô p!n„»¶¡ªGâ4ptðJõ‰1I‡TóûnTI¥ÊƒYT!ƒè¦òìœýùL]Ó±r\ìÞ<<µÚeÙÚO>ÿ8ÿb8p~p}ti¬4T¾oñ·ë 5ñóSȵò'4д÷S7["½ÊçÖp­É+ÊÃu5ÔïeÐð5™µê/@½C8‚äajçÌH×dJ âÄRQ¡¢ƒš· ›S Î!„eàðÛÊH•3sƒ À‚zÕÊZÆè§íô®“d‚|@i‹ÊKÊ ”jVXöÑÈâ>ÔÒ—`ô”umÃÞààpLäÅð¯ß?|‚Ò¤œ4ü§À؈*«­Ñ–5´ù6“Û,y<±BÉÐzõÏ÷Ó·p0$çw!«mÛâ}<8£]À¾¶8ƒ2W•‹¿ÙöêUž² ä9t\=ûåƒ ë:»­1yë»p%vN\'®-X  f=ƒ&À‰¤4`ñÈ ‰h‚ _GÀ h"™šñdMO€u\‹wÒx çÑÜï"G´!EdEÉ@PsYYa=“[à,¸ÚpE[ž™ Š)S°±h ¥bS¿bD¬w_‹]¡·P<Ø|›³h©ë.Ibzr†8 #Þ$š^­ ûŽxí ö­ÈÍSgæ1C“ 9XˆÜ H$Î1­Åáƒ6BÿKsfÝ endstream endobj 9 0 obj <> endobj 184 0 obj <>stream xœµVyPwîf`º$‰Ú Yí㨛]‚1PŠ*A4*r £ Ç Ã€3Ñå 0óN9ÇáE@åPÁ$Šh*Ä2«E²•U“¬qc®õ¨r_“»n®ÆXÉVmÕî_Ý¿ª~Ç÷½ï{¿¦)g'Цii@PÈBÇÛá7´0ÍI˜.9ºwt³ ¸IÀÍùè´qw&¢ú9\ñ z?KIhzåÚ­*µ^¿3N+Ÿ0O¾Ð××G¾4I©‰WD'˃¢µqʤh­xH”‡ªñJ­Þ[¾41QâˆH•‡(S•šteìƒÒª$ušV©‘©b•šdŠ¢¸uKõÉ ñ´|‡fCœ6>-1:)Æ‹¢¼¨¨­Ô›Ôr*˜ZA­¤fS«¨PjH…Qk¨MTµŒZOPîÔÅP[¨«t}ÃÉßÉ.ñ”üAò¥s ó…ËçÒ9Ò=Ò+Œ'sŒU°Ø÷i¯ë”û}'ÿ¿S`uµÓ8õ‚DèÄN/Í™›A&`½¥ cñ™p’9f.ÿ”o°KcŒÛ !’Íl óqDÈÆ:˜ˆ,Xɧ;1ã‰`1#&Ø…×êh¼?ºŠË­2fC6ós3HÜØ÷º0EVˆáVsÔBtA£‘µ3áfC+TÂ~s±¹dçy`ô<ñ+Î#äyª£@ǧ0Íæ~h;ô> ÙzÈhgIÐá;ùÞ…äKÝïÓ_½O‘H‹pÝNW~$žÇo¹¦z ªAŒÐ™4&¤Ã.Øí@Б_ ‚È6ææfšØ<ˆ+öäVB)x6ØÌ¼I5FÔiŽˆÓP’[•€óÆ$d|ÊÊušB½Õf.¯†ìÌšÝiY{õŠãÉ=CÇ{ëx±Ÿ^9äúöÆH„ßâY®/û¿$f½b/oº-%ã³\R˜sûßÙ&#-Œ2/w­¶ÑÜ-BµCÏC°kóŠ:e¸‘ùzðã?Ž”nãIÎúR¬[IåX±áÒˆ•nÆè˼ƒw9 âT¶œªÒæÂ£—Vö›±pž8oÏoÜÁg[©(2 &SFž,eqÈî(`×úùøòÈ™sCº ŽÌZÅÌ«úà06K„ÜÅádï["‡´÷‹bº‰7ç#ôÍïp"O"HŠCÚNMOþ tà s¿½§®­³µOl¹CÓ×¢®boª·©¶Gé”À>ä-Ç",² ªÝÀÒ'ÁžQîQL^qÌðb`gÏ]@<ÈÔ›¯üðE÷…ÒbÙ2'”¹Ø™à}%ïÉ„™Mc—8HÒ«µ»ã“âsuÀ&ϬÁP| ÙJû©ö”6YU:䃞}ÌYZ .Î Žë9Ì䊊À åì°¯ˆt†Ïò ™òíü{èÜ}¯¾ô0LÆÌ<>mÕÆøÍQêîÄ>8ï²5\)ÎúSk\„Sk ˆ³XÃéLé#×y ÏHú€ú¹›ðƒ¿CN$>7I¸ˆøÈˆÇ?fs=ÙË1wñè,½†^[I™¢SËRCÂ^~ÀݤA‡æÜí¸âb……¾Ó÷õE z s9”Ú ‹¤×NôŸ¬ªÉ3”ó9ÆthØ”ºœêêº2{ÇN›"äðœz)tÆÉr’AÞXíµ:ŠßÛ—z~ °ÛÔÑJí~]E† gÖpŠôãÛÀFdoh©oë¶„„—Éžp½C½OßW¸+“7!J‰ëcÆþwΧ"ú“·£oýÃòV Îw _n'r ÒK³âþÞÈîù 9Âè€8#{îÈÐVʬToNVÔýU\\Ôh“‚k;N¿*JH‚¯c\ƒ¾V›¦ÓkÓ¬:[C­ÕÆ“qdƒ(ßÁ²§FyR\íplŽÆ‚%Çd‚”yìêéHÁw…Ÿ,½†ñ‰X¶Ô×ð~?W2ÁÁM„K62°¢ìªªŒ¦”Ëð´].«g ¼¥èúØëø#ó¨ëQ×ö-{®á~•ã&‘¹îŸ3çØlÜc©»ü™…îúc®ˆäa%àht玶¨òx`—„î8l,©²•jÒU¼—k2åËê?> endobj 185 0 obj <>stream xœ­Y xSeº>!4ª‚"Î9€€¸ ,Ê¢r¬€€Xv¤lÝ·tIÓ-mš&iöó%iö¤é–toºÐR -ûbYDÇtÅ™;‹Žó§sz‡û§­Šw®ÎÌ“§ÏÓ¦çœüÿ÷½ïû½ï1rÁápFE¬Û¼zÞÜЯ³‚S8Á‡Fų1+\;2ð-ÎÜâîEsï#¸ÎÊ—wDdŠ Ä)IÉ9SgG<:uÞ’%‹¦.OO§ÄÅdL]““œ“ƒÿH›º)3.%!§àÉ©ËÓÒ¦n Ý‘=ucBv‚8/!~è³#2ÓE¹9 â©ë2ãÄAÌ{yyAFܺÂÌøW"D ‘/f%®'mX™¼*'eSîæ<á–ü´Izì¸9O>;káãc=AsˆéDI¼H.~ÃΙËùd„sD{q¤aä§a^ÞÞ¥QÚQ ד§F'Œþû=¥cÂÇ´ŒŽ{f\Gxʽsî­¿/â~þý§Æë'p&|ð@1%ÿðÄW&…OæN¶ ‚Ó‚›Ξ2mÊÞ‡Æ?ô§_y~õÁmNÂ"üöˆìEú9Îùànpbð¾£Ý꼤“Wá‚*·t»wêa 1æ8 5Å ‘Û¡*Ð…z0èd4;e K•¢Q­Tÿé€r:¸Œç£ÑZq 'ƒ±ÔFÒ-½œÑKÔ”p~4K²s|–—f›Õì4Zi¼–/¶àµ ¨@ð¥jΙþq\´…ñ£­K6(¦Ro,qÕ5™¡ž @‹¾H‹ª\*Pi1ÉpXÜŽŠšîºîÚnIx.öÙ°üly´BŽWæsG—:©vØ«oÒê†J ¤ÛôözÝÏcüŒYŠ·:µFA¦±\~ {5ŒMà…ßæ|n"Ø½þàŒj…ündœóžž4á[Ô_ÏO`—,߳ȲN‹Ñh´é€ÅÝå¤Oê*Çk6mÛŸrê››_ÿ¡Žúï e´š,`¸TÞütu†Ê@½À ›ð» u\äú)»K¶žký¼î"m÷YÊ Š<šˆ~2™­Q:Áâ1šÊJ){ á«> ].}V¶R$‹§³Vd-‡mäÓ}'{µ…«9¡ðçø9Á §+ÏqQ!Šà[üVŸÅï9ÆŠ¦²Úž÷/yд;oÝvŒ,Ž.NÑ—@¹§1éð—mèQ‹Sêb0é(•Hôè óoY³Þ^KWŸØFBùÑfÔ’‘’bJ}$¥9’ ?Gš.‰+^rhÁF¿…ª|»êHÈzÈPHõ”^Æž0h-è {Qµ»ÂVe£ÂƒÑ ?ê¼Òãç o£˜Üàªà8þv Äâ‡I]Òš†Zç‘莵ì},ŸÎΚ}fõoÑÿÑkQ¹T:†Qª¨åsæë Ü"îé;Ñð—úÃôÞ7޶÷€ z ÞX2ü6Wü›{žû·ûƒA¾½ÅnHŸc …4û/ô (`¿8?yS°Ïà7@6Xoà?FÿnÙ¦ùnƒ@¥` J¬z[s›t ´ëCs«rz£ÉP^0ƒµ´ ‚“¼s_› Aí,6«+8ºŸƒßf§ ¼~'¡\¶û0léNدïÒ‚­ò7€Ýa[©s‡ãù”P\pù‘Ûﺀ¹<‹‹úQ7ÿLßáËà q#5r†‘k¨ÔÅZ)€Ò)©——Ö\='¿Äf°»&·…¶û›ê: *U~ek‘ ¯¸¨°D!•²‹ÙE“7mÞ±”¤ÒV—Ñd+¥Ê| =໢R\žï•à ÿþ$šXëâz±Ž.ؾ#%òAjËw¤{ä¥ù h›ÝWרˆ¹ýÐ0NCMw¿Í ZQ€ÿÕúKO×寯û݇øh:z„b­l5?>1ðÎÑzÄm9Iwœ;ܼÈ#{ÖGçÎFÒ›_Ýw>%vsq‘<Ù?o4›ì`"³J¯d=5[%g H '”6©•z}10Ô¶¸( jˆÁmç²÷°O°³ö®xïAß‘.ÚÕ‘×à«ó*;Ý}øy!ªà çj(Ù&ÉË)@fAC™ ¼ÖZz}-_•öÊs›Ü©:Ó|4€FWvÓuçzî;Ô0•™N©3$ gt ù Jr€ÛŸ¼Æ/¿pÚÜd$Ínc…]g)IKÕƒBŠ9 H-d…ƒqÐÇ ö|ȃƒÚ bG ¬ÌF+4åŒ1ïáþï¡k; * z%ÍNhmN,Þõ‹ Ëº'#áÀ-K‘ÑP”-U¡e_0¹þ9zìSnÿ±þ¥|c©Ñ ¥¤‰±+ ZP”P//¾´¡|;^O,+dsY9»ø¯3…¶!J=ìT‚V£•ž~•]ÊÞ¿v1‹œFÓÏסyWÑúâ_ô~ä·{:K+=Ò—ÙXQJ u›Ý@O I^ä[ÜÏÙpáUúx†,Á꯶hm xt4âíµ n·d¯‚ÕiµÕ—–Ó{Ñ,[a]ìqàõŒA³Ñ£<”’AËûv»Å?CÞ4 UgÒgrøö¶óWNÙãÜ(Œ±c2ÖÒrqôŠWÜ ¼a7‡`H žÈžÃàç]BÚN.R!)¿Þ2®ºÒo€ìMÜ·v:ûð,vżà ¿º»Ú­Qüf_§³ÇÖ@[ýühñ×f']5¢”iìH Ö¿ˆÜúþÅu4ûó` nSp=-žù{v<ÃÆ±J¶ˆ}üÖTôÚ‰Q.ÒP ¼ÌŸ»é#4¦· M}…Ó'nÝ|÷S ?|'’}pA+Ø:—^Ãrç¯_†ÙÖ¯‚lÿKsѲwùCúE~oÐYÚ€6¡ü쇟ý3˧Ù7W&:ÚmÆV¬"¼kWv³“Ög°‘ ¡£6¾ó3î´ ÁèÚ=Èî’à3ß³[eÒ+’’3¥”¼)«}wrxG}C#¿ÔùÏ+¢ÝZ†,Æ Á¿¥Ý ­t+v-?ƇÍdÁŸi@¥¿ŒÊœùlüUWƒ’šó¡ÏÏ_Gç¯sQspÿ#^…sxâ,啽g®ô¾mïpØ‹å3x¤éZY6䓹•Êòººêö±5±ŠÙ‰)j*¶:T¼|,Y^ú<ï…ÑòuÊXMž@•R¼- ” 1+¼Í–²Z¨&ýN©XœŸ¼û@^Ç7ûQâ^[È4 Z­Îzô:îÙÄßrÑ[è=ÅCãÑ”?£Ñ×W]`94{ânï'vO§ÎýfØGwáé´ïÇÓ©L¥e4žv=|Ç^à¾~Â{ûXÖÚü¢GöÐÉñÛ%‘¸7ãCöª¾™PøÐ¥+^LÞGq…\h?îfâh„jY²B/-YìÔWÊö_ãJ]™´=WJ)NÄW¥þ‹Æ£ÙÖd7…Œî’ûƒ[þ`¸ßàâºè⤠A7OðóÉ·kò2Sq;ã Š! D®j»Û¤§¤*« M×Qpý/—ß¼\E!NpM©LP*ðZ”òU†ŽšðU“LÔ=…ÉŽbg³ÓZõþ±ûÝnú TÆßÍ®Q _Yº[ —]‡›Ñhß!ºîäÁ\ʳŽEªaò²[o}X‡îõ›B¾ñ™ \ç+-yC‘€V‘w£s{»Ýæ£TÛ  #7ûû¹m2Ù´Ê Q¨œÛ3!²½†›$áà¿Øšó¼êÐãï£Qç¾¼qê= ¿8ó,;fÁÖÈ>3“6´hÞ‹rsÌÆR³Ú¤¥Ñ,?[.T`3¡H‡®½-‡ž„]Y*3ƒë7ö…Àv(€zÛðL[ÀE—Їüyo8ŠD…:)nŠAÍè@Ob,•b=¯²P§ X.ì$Š}–*xQ*Æ#a)ïrÛ[C*!@£yõ§­ÌÖKô94# = ÌXZi¢jÐ s½CÁÀ^¡ ŠmPݪԺ"š}p õ' îê6CÝ ‡ô=@:ܘû% ¥•¼Àî áø{—åí*zòâQ¬:OžFã_ …¦Q|¡N%ÂÎHa-¬­¨wèÝ·šûø¶ÿzCÖ¨¡*{”°…Šž›‘»ÁrLJ³@7Ö©ªbO^NfáîWú’~ƒëDὟ.­ŒuP™Ö$; k}¯6t(ã]ÔOÝÌAGúøvöÀ§Œ)ƒ@á(ªòy*\fªÔÛ‚&Ú‡Rc¯ÑTÙRÝràõ·ÿ©à¥ääô4¼pn˜û$ g[ƒ—PßZcrÒã‚ÊAG“r4ѰÛ ¤ª+vž´ç ÆÃøôvd ƒ*3w¾A‘ž¿YžäKÞD‚¾Z´àâþ3{p醼ˆàŸy‘g¾™†¦ñnoGíÈö'¹À&«ÙÒñ—³” €"ª±38ËE,à7†r&Ïñ:ÐìÒ2Ì|Ë óÅÊ<\ŸxvAØB^áw3ð*/‚íbt:)ÈÛ[ãŽÿéØp5åÀ¨¨‚qË6)‚ºr”Ûé¡ù1ÔtÁµñèÓ‡NÅ|4iB]GóïhC†èqÜ•ÌØPïiõtÐþ×|øålÂȨ"O%Ô%ÎIaÕþ­õ_ÆGmN¶"C-¡iŠ UNqª¿d :¢lU–ŸÛêíìC"H±§Ôg·döè+ÇYOó1ob—è œ…îýÍ¿i¾¸= 'È»á â„Ó cs· cw¹]º¿Ûa¬u¤»ÑóV¿³ 3&$j‚ðÛÄmÞG?¿›sëì/ÄÏý8%hó¡H°uoâáÎê†:UÑ^vaZ hõ”Z\¸B“ ‚Ž~tbÊ=ùÁ1ü¡ÑC†FP¢e(Éa¹ðǹ痞]„Tf½¯®{ön‡²…”3ØN0–[è†OŽï벩*'.[U’H+bb—tMÞs‘X ²¡°¬Ùî¨/YŸg-‹óRã»sz·v6WPÕ(êüúz°zxKR--zf{| ù"÷ñZ×{íêöž··–o8u‹P”ËB§‚óú†KÚÿ‡¥GÀäö5=Ðw È^xµH¤Î0”àäëù‡Ì.ôôÐ=‚¸é_÷R×7Tï\±}ÏžtJui[Õnˆ„¨Ô”]ÿ¡ÓÖïüä¨×è­_àÙ4£WÆB‚`Q÷ªwÑH4=† ˜$¤ä S(ý@8_œê{ÿ £½ ñh[-˜¼ÕM]mw;Á’°¶o(+¿;h´æ\©¥åàˆ³Üþðþ¡)\:D )UĈÑHJ’'3qÈã{z;Eþ¤ôdyn*mþú Zü%4ÃÁã äFØÁ„´å¨ù\å¹Ä“+§NcdÇãIäȤMZ`ðË`00†ˆ¥yOA"ùðÍ9h ¼‡d<›{4¹—˜¹€ïôt:dy…Jœ$JHLϯnP«lncpºÿ««]8s}™ßá"‡•¿^~¾éJ/’ A™²+h‡Ü‘i°+™}(?>kgLô& ³Ñ'üšÏkßì=Øwâð9ðC«Î™DîÐÆªeö‚ú¶ÊÆÎ£‰M‘KæmœA/dÇæ² p™0€ç„Ì+ž”ÓÑcGEß²a¯ì‰ÆÌjÃFªêBÕ8L ¹ÁXTÈGN^YTWK@F³À;Œx‡”CŽ“u‰ZÃzÃXO&üü*(£‘‘·Ž½Œa@'9ÕNoiŽ‚Cvþ>|µið¸ê˳DZ5jÂyíü)q½6ø•—IàRC!Ūxö.“ÇÞUý;Ïë(qæ®ï)øáI²6ï³÷€˜%—dzÓDTÁœ°1z%Û¯ŒRDÉ£ê¬â­Iúz¦¸ò§Œ>(iÿü š…f6çç\_°ÎèmšÌå¢Ç‚›ø9¾—!•v°¹ŒF[)õ>šù…o/v[uEfyF¹¶ÊWÈ6‹}–1¤®žË®‘Læ±¢bŸ£¥ÍNÐØn4¡Ýwì½ÔxÀáÓP94ZèuTQ~â–ĸXä‚Þ«oÓuêšc±A‰RmØ\s_k$Cß †‘©‡Ënñ¡eƒÄærQ”—_ô_Û×ËC-#õfµ­݋ơ1­²zaœ89CX£ôU—»J-Tx®¿ÿ×~¶Á…²M<6Æ5*pÏÅ1Ô=#UíwŒKÿ ™c«2 endstream endobj 34 0 obj <> endobj 186 0 obj <>stream xœ¥W{tSu¶>!P O8­â9E‹£^™¹WFÁA­Ê³PZÀò(miÓ&)M“&m“ô‘÷sçýN›6Mš¶iK›B)”—(AAð:zG—‚Þë8ã,×/õt®÷¤€óPïºkÝ?²VrÖÉï·÷þöþ¾o3°©S0ƒ1=3+kí²g“_—$a$LI<Ê,§¬ßÆÆUÓ`fMí^ðóÔPß|Ä›‹VÏæ3¯oØ™¿§ŒŸY)VqË8âôŒÌ¥éËž~yúËì*nq?=«HÌaW‰é{Ós+‹¹l±ô™ô—÷îMÏIþC”žÃ±«jØ%wïϬ¬T‹ÙUéY•%ì*¾€[ÂÞ+N!.b Dܽ•| ÃJùÅY²ö&ai•HÌ­æÕ”×I*ö¼ðâÊß®H›óÀc¶Û„½Š=ƒíÄþÛŒ½Ž=‹å`«±\l ¶[‡mÃÖco`°<ìl;¶ËÄæbó°G1›Í01€afX°Çèº`Ó±3ŒFÆSÎ1USŸ›ú§i»¦LÉK¡¦ëñxýŒÙ3NÏ\3óÜÏÚg g?4ûœ‹s³ç çö̘·ažgþóc<øÀáïY[±9ß1¾XQEá¡CáÄÓaÂ.zǘ Yb>Ë 8ñ–w½²N[¯"Œ:õ^½T#Ô´‚ÝÔšT}}ákkÏS8|«ïÙ|Ðæ…>\>°ý©Rj±Jé‹Çli¶w»ûw¡¼J)ÔHÈâ…ÒØ…ÿêBŹ}Á®.¢ñ ùŽâmB.›Ÿ °Û*;Ð ~øˆön÷ÓÇ+@Cæ˜!ˆ€Ól·zÑ‚ÄPª9å“¿b¹Yáƒ4/8¼vg"c|6ý˜Z4qEYbT¯„4YòbX»~g….ò 2Ü‘s«<<Žx$8V:H­jp‘£&o TƒÁXo2PS'6§RÂD«ºÅdÓ€=œR«¢ßsC«ý¨Hêቾ»¥i&‰Æ®ÿ!D•YAn¶¨ÃºQj"šjÓ‚Ñ®D–‰OR2«Ñ ^«½…Ž™Ò1j[zjrìϽ˦æ°Ô\£¦p9šš¾¥3–Dmôzï5‚¶ƒÓíBËQÒÏïâ¼ 8ÂÑ|´=q'çÒªí;ËJx¤òTa[é䩤Rnã&0üpŠ‚5[lPèeäEËÙÙÙÕÒÔßslçdgó¨éR6É}m'¯ðµ9,`±ú&;¥-9q‚0Zfy÷1Ñ&TÇŠÁuˉ¶+ÝösÀ³¾N1©_>Ie.>·òËŸ˜´U÷úÌ=MçIG˜u=õuSàG;ùÜEÔ¿Âú®)ߞê;Æeœ¸°ÝdŽKkXèß"ŒZJí¥T-Õ@½€¦.A#¡J¤&&^žx••ñÚ Ôôä}4ƒ|ç/_žüð?|–K-ÍPÏfPsÉŸÏ^I ÞäþƒW™‰¼D&ËfphÅÅ|Q}ª¤¹pj&5—Ê /=—uíÐöxœTqxÔ#•ºR­Ï5áJ¨5ÒÿÃÙUBÝN2§Åaq“‰°6éß‹!Fpˆì¹~rˆžÈ·/h´[¨Jƒž¬¯Ì]Ÿ;ØORPZo$=hñÍ–0cäúÝ-f‚™xœõIJÈsv~“â=k2zÏÚÚW>wk°© lô¼µJ ôJÔãâykG,¼ÿH~dwƒ4£‚ÐÖ”"êüõûÄÔJ^Jyi‚”>){ö HÓCHZŽXÝqhÂ#RŸDȯfï>,:xzðÜþ¢÷BÍ6;“!žÉÀmèüM?­ÿyûGuÃbëC l-®}-W6×Ñö°Ëë8DGØ$7C…®ZB¼Î+¡;0ï/ïÎ[W°£RB¨‡ËzwýZø{!¸6B·åÈ ”qí(MÚ(Z:ÊL<’˜Éª4ÕVC5NËo8Ü<0\xp•Zº¸àÅëõ1-qRyR[p¡x95«á·0"&öë¢ÝÐ…Gê|5ŠšÝ9£ÅŸ ç ÙÃqITî#]|{»ÌUì„a<Ö~þFô„¦¤‰VQwAREÓzPfˆqñí¡ºs()ùë”8zÌ”{d†JGE”P¿žötJ­’FÁ!òFJ&5 —ߺŸ}êÏ£IõTƒ^e2(tDá¢m".à5Jÿ¾v‹ÓL&§º+Üè¡›ŒÇ1ÑÀø4V¨¡Y,’€¬=Òé&VMÌbùbtõ:]!{€¶Ikñ4û§¬E¦F¯$ÕÂÝ^W¨6ò ßÕÇ9FËùb÷ßä\º·1ïžœ;‘óÉ])¾ï$& úú Ë»§_xú!iî ÆýçÁ‚OžaÒ7ˆ†\ÉꢻI…}G]ý¤;ãÖ&Ï~[“=âÙO—+éœtBWMH^) 2åÛLúâ¯þ†rxàL×ï¾îï³ú'ÃýtÿÀ~ÀÝͦr‘‚¯­'K3j²`þÔ;U§.ŇÃÁ$pÍ—““æù4a,dã-Ä¿ÀL,¤+ÙÚ‰+ĵºHggG'Aåÿu9K²jgN.h¡¤în'MZ!¼YÑ*¨â×”V»r{äQâVb v¬i£EýÛçÜ Ëm6·ºˆèù#çOhÑÝå`:Š›Ã÷KǸèC¿¸ÃLp8ë”°YZ%V7Úµ^ÑVëB^´‘’R3òÄý'Ït^ëùˆp ÖØŸEb÷£@#% (¼1 q »Qw­EŸLZ@¨}EœG+Ÿ¤ÑÚ"¶fÒ¤YÌooˆ=çíiéí´9rè88À “Ïh—Öb“ŸӠ*ù$…Ð4w [¼owe¾zE&Áe—³ëižšrñ‹ïKû¶{ìÏQ6]Ü=èËö Üë0¹T]«! š]T.mÍ+ŒRÒ&ÍhÖ‰·Uì-|\öÚEsIo·#ôç¼ÿìÏoèé¿ÛnUŠJŒ®öLy>°ñg/sÞ …+ƒDÇúw´Ýð¾Ð1Ö÷û^ô0ÃO šdUU4Æ­[MxQ!ì.©0O¸Ã¡-ó.A÷h—³ÇHÎØ<ï½l’j5#1‡%àwî¦5j5z‚Zòô鵿°]#]Eý¼c?5z²uÒì=€ ¡°Åå=Lz‡,÷þàE[kÓ¨³‹^Zl“L%ª¯®6ë(K'c½¬`ËžºJÀ·7œ>p¢Í!{Î  &Uìy­Ö¨5é’A®ÐÑAúo¢¢¤8Än¡Ë·˜èStšåèˆÜºvh‡¶ÆJ]mˆ&‘ ÷¶ žÌp7s¶‰åDÕ¥­>à‹r(VÕ¤I´Zܲï›KQš¡ZûU›÷ÊÖ”Réd]§¨€D1Ôø£öpMÛÕ®úŠ*ayþ‰Ú×âWVÂW/üëQÄŠ&³Wõ#ÉK_-¢u½¤®·Þfèìç|;ånUÇçþ?v *M¥º‚”çéj»•¥&­Š§¯UqïÒãˆöºˆÀz+r°úGÐ,Äü—[–SD¥Ôn#U"½jluªßVþê–XN!&½:½]<ôÒKyÛJ “ßÐWÙ^ÕVn¯‚e°c½L¬-êÞ}_C9Ù?¦¡ÍM§¡}OÞ“šŽŽ!Å»L¤þß(@£âêjˆç©äÛõuÀI{j$ë:š‰æ¢¥èñÏ·½³"oQû[–#L3Ÿ÷øÛÃI‡ï¬XÏ_òÖä—ѳÅåu^o…Öæ É Xc|Ãøä&Ú2ЉÚù|‘ˆÏoÅbíí1bNÂ@YÛ¾Í 1Î$~ÁL¬ßÅ¢m– ̸WåVh4­ ¾úï,]#èÁ”¦p«¼~«3è 9Ž9c +iKô…%s|yBÇò9œvðNþÕ`M#1ñ&PèÔ:§Ü¥óêôƒT¿ÆVÀ½n·×«±ËäD™§ýðD$ayí.;øÀ§¶+ìo¢@j£ÓÀ*•Be×4d"L™'èOƒF§Õd„V 8ýÄÝÜ©­mè¥ohm˜‰ ̬KUJxµU•‚pŸÏos{«Ål6n6›^ælâñHMS4´ô^b÷~HÞ$¿’tfße ›Ç™¨%1ƒ…¦¥ð¨ U!¬¡uKàâz ¼Ú&z™nk 9À¢ üwámè‚ç)ïI¥¤øãÐ×^’º‘R l(ØÅ)æÓ­l•Ïe±¹Äñ÷ÏÒû>šRNÍÞJÍ.zV]O‡¢Á%Íj·«kÀGŽ€Å"é 1yx|Y/cè­¯:¿z‡‰‚‰µ,j~Å“ÔC@ÍÆy1óšñZ†ˆÏ‹Op‡‰²álš$ñp¨½¿;ÔØÐF„ä¡F:àhS{s¸ÎZæ"ßð6Ð+ þbY᦭±Üž¤¯šÍïÞ ™øZ6µâ™-{†þýÂÊFÄ“µ½.L*ܵ^t-̺„ú.1;Ö%)"S$õ ÕOIŸŽQÌÏÑBôDb‚£e/†>¼Úy|àÌ0àÇësv¨óD¤ªœ¥È¯yŽÉYÍÞQ8¯&v{Èq¶ãËd _ÍÆª Íá@-8ÂèìˆF™ô¡µ¬} 1šøðŽÓÐÓα²k8FY))öÉZ¡?ÿeü³æ8T^µÅèÜðZ7î_MM§°5« ãU6™Í+Ï…||ÝèÆoPê™MM«3è F¢A,*¥f¾ñ¹¦«}]#ç»É}~VÄÕfBl¦]½ÆhbÓ+¯$v|Nux|U˜êôzý)T‘wzÏÌwFÌœº<4kFÔ1k†ýÕYü¯ endstream endobj 32 0 obj <> endobj 187 0 obj <>stream xœXXg·žuagDÄ–Q‰q¬Øk,‰ÆØ°¢(**–E@šô&½îž]Þa)"à*¢°(&H4±&ÖhнFc‰&úëòñ'÷P“›üÿ½÷ùŸYž‡ýæ+ç¼ç}ß32Ƥ#“ÉØùvóÖOš,ý;R$ßê&–I{Ë$ =ÎÌå`nrä­A¤/~ß}{á¤ÞŒ\&³]î4ßwW˜¿‡›{ •ÍüQV“fΜn5×ÛÕßc›³•s »«·s ýâeåà»ÍÃ50l¼Õ\//«ÕÒV«]\ýƒ]·w->ß×{WP «¿•ïvW†af-Ÿæ³Ín^¸ïöów¹®\à·Ã~¡¿Û*Û÷Õ‹=­Yìâåêíâ8cÜÌñ&Nš<Åf꨷§™Î0ã˜!ÌFf%³€Ï eœ{f!3Ƭbl™‰Ìpf5³ˆ™ÄŒ`˜ÅÌdf$³†YÂLal˜µÌRf*3ŠYǼ͌f™åÌzÆŽ™Çl`V0ó™Œ%cÁ¼Éôbz3}˜¾L?æ ¦;Ã3fLfcÎ dfÓ2&th‹lž¬¦›E· ¹¹\%ÿÐd¼ÉÓ¥¦Ç#9ŠÇ¬#käzs^Ü™îéffz¬êqÜÜÉ\ìù^OÅD‹J‹_{-î¥îõcïÄ>#ûlêóu_ß~=ú¾aö¼¡çñïñáüýþcú— xg@ံv°ô´lzs”ØÃâ÷n?1`ÛŒ2†åí–óΊÛ2™,ÎJlCK£b£z2¬ƒ@à£ãTÏ;Ú¬Uâ'¬ÅïòUjú8N4ŠKKeâ–ö™|B±zOøƒ:)!Œh;^ LˆµoŠJ2¦RìÕj¨‚Ï¡\ÍÙ pßœÔ,ÐéÒZ±ÿ@Ô+Γ‰¦ãTŠýº6¨‡ýð TÒcYrOŒà‘# ¦$RAw¾ª•!› â§FYÊäb¼Ø‹OÏO˼tVu2¸À.PÃjº_VÛ Q))‰š%éNö7°Æô¤Q ^¾àöàG]`Ñ®cxRt¤OR´eðOÛ… Ñ“®ÓÖäB=gÐ{{{ljr>sû£ëM¥‚E») ™A†r”áiûð4ÿ£Ë¤Û|;÷÷= vSÙñ¦*ö\lW’+¶*¶\w öÑ«ëü¶èÁ"s³õÂ!}ÀTý}k!¦$Ö‰êdõhŽ‹ÐL.ºcw>7b#4šè$!!t×â ÀkÀ±GOkqÈ8­NÒh4j2%%j7øsÎÂ+õõyÍ· ›¾–Ø.$aÉ[?NÀ‘8©¹ Áâw“1Ö¯0²Y|&­Sƒýx’ ŒÓÇA0Xšù‹ Òhü’ÃÔ!š0àUŠrÝWûýºs¿¬õ€TŸ4Ê8ñ¤–ÅÊŽ{bÒc‹À²Ò³÷ä`M{·Z DŠ*Ý38@¯gPE¶Ûž‰ qÌQ|)?–ðõ¡Ë龆c/ü/|K~¸}ÿ„ëYœyëþ£g\&=³”8¬jßmhæN¿I¦ d-ùŒÇr\Â>ÕÏÞ°pû|Ò]IF‘oxüXì^D˜-Ë=Þ!¬’†êÄY­8S..GóY9 ƒt®$Bò›"†¼oÚ¨Hÿ±¬ åÀ=PÚ6.†4Á2$ J±‡¢7š:+â­ƒH_à&JÃÐ̽I§¥™ËEs¹X…¾<šð˜L"Ó§%ýÉ€‡ãpN¿÷û DGVñ¤?`÷ÛÍðaI²ìÈÑb#| u»Š|KÝÀœ¸@SÇKÐK4ЙqmK',Ò)øð‰–—HÛ•l­¶¥°2b ±"COCË“Í%†ÃJGmÓM¬]VŠ"Kdxçë£ÜèèÞ€ý>£«—Õ+kON/‡h 3l•Rá[öš)šÅÄf9Û§ñ±9m}Îï?€†ã;¾Ï‰ÖjòÀ²ÒË•â-Ê´Ú½iźRm1påFE z6-R_˜´HËÙ*š—Š”êd­‚¸Žia¢èXŠKõèb”CkQÛ(omŸÊ—Cjðþ|‡ã‹+æRÇ“ñd8ÙA\p…j´E-Ь(Q»;6b4Ê82–ðŽ“`)L)v8ï^ïyP€Ÿ >o>uáÆ“ìãp°§s Y ‹Ë‚\ºAÐU(i2È:#7HEúŒRA:M5$cx[\£¨ jò?~ñ Ž@aü}2È~}ˆç6å –Ì}M ™­|[±?t¼µð0pŸž¶'Éðùë—©TeÍ^J -Ù -t¨Æ÷ºÐ÷P.®G?¾<*knlnV:7:ä­¢™™8m8éK¬žNÄ18æèó¢‚Ý¡I‰JTú-]ìDG ×à SÊj]ƒö°¾®dÿÁ2#¼€,b®Ý å}ùC&º¾½w]g`—¢µ¼½¿çÑ8‚ø“2˜Œ$nÄ ­ˆ5Z£›@:ÈE~),¯uýØéó¤è¡Î¦Þi¸ÔtåZåi¸gTÕ[­Êµƒ‘`3cƒ­¿ÇÕlÖÛ²àEê'¾Eë½þzŸÉâ´¡<°ƒÉXìEì•ÄþŸxªS£Ù{pÅãcµKÉF <î»Ý7¹o^¼s’4o§^¼NÓ«¢‹Äuüźî-÷/¡†¾M†¡O¦áÀú–ÌNÐRúœ{öT Èv â 8» ‘1 áƹÂ++ E -ŽûœfyØ:GRù”+ÈŒ¿Êç_"Ñ,Ù¼'?¼±£ÈjocÀóôÛrìKùã~§ €VŸpòË+->uÑÙÊꊴ"]J5$Q\p~èÞ½ù%úаýÎ*—à°`Á¥b{ÖzzLaÍ{ ½²]=”á¡aîàªòúˆ€D»@XÍÙº—ã;w>ºñíªjÿ\Á©bL¡¦g+$iUÑõP™Ú‚œ<{¤óSáò±cpùÞ=°Ý¼l§*O'þó+QŽîî«hYt;Uá<(»J¬C놺6ƒ¸G*¸·7àaZâÕß>׌Ã͸W|Y Ý,ì%¦%³¾îi ö:—»£41ñe¢Ëšx_jÂ<ÁåG’ªyòæ)À%pîg}ÑøYÝÉOë®Á'p=°yVãÂÔI°’#2j„­Ë%×ò­À­ßê¾)<5Q—¤Ä)¼¶‡o¦7c ÕÕ¥Žëwn*”xéÔX BÕôóBS(„ÌÚgó÷»Ð@Áˆ 8­p> $–X}’}”¹u^žæÅo#¬¡pªÀ)P9/Ÿô¤x¢:ÞÊPɳª‘Õ_ˆKr±§8‡/ŒÝ‰jˆÛ-$§Ä$$¥øîH§*æMFé?{Õ&)«’ ‰ip$îˆ?8sïM„àõË Û|…ÄR6¸`H T– …„‚ – {KŽºÅ`yûä¢åq?CH±Òå€GúÚìe9+sà8÷é}У<}¡¿NÐFeJ2 ‡Ôrå+;(iò¿p„#6.ð– ý“âÏ´ÿÉä—/˜hC°°ÎØ·“êÑz@¿Ýâ^‰œÕ®ÁGÜ“!wˆÐaúšžuòÀ?ºx±ýŽbÅØ]æWãA±±˜^.-'ÜokÊ€û%÷A~Q|jT¨&!J£LÚàì Ë ábüÃÄÖ„ë„1PÓYÊ“îXGgÁé©3í×h¦’w%$Ε4ÙÉ(öíäÉRs‹áüW’ï¶¢ \K`•t´ÎRwé»Í?$Ê+ÖVƒM¾ÝçÛœ4‡§EW޶þ{éEö—ø‹_´6(x~ \.dK •5vú2ÖˆsJe¿ÐDõl”£›DÐÃŒd:8+46N66)ÜÎ[¤–µ¾xízÓ©ëB«³#»ÄÛÇk%\,§~Y6#F‚ºØò3“h^Žír¾agív/W×Z†Ã†Ú, K¨+;ý'»L»Ÿ}p¡“ÀìÄ1,N´±=";÷? Ç q9oS–r ò¹Ãé¶¶{›È½ š’—PC{V‚~BŠ&6NPmô×o8<šž}èœID¶¸nS~¤ò„ã¾ÄgO‚rÕeÁyQÕ¾°žSÏ"&Sˆ²GÄ šbH yû.økµYÙBNNV^eå'›oGI¦eâgÏŸÿ`÷€È*•¯ 5bqW»ˆ7¥¬´àŸ>4«nô²êjI1¹‰ÅÏì_îK@dÿ"Hxo’£¿ÏvÙ\îOõ„ÏůMîzvΖ³ßO®<)à#–Øþ¡±ìÈ‹>/*®Ã-£ }Gsÿ0¼&RùX¸Ijôí ~%a;m\ÿ9RBb©ËÏBYæ]Ü­ŽoÉ•â¦î)mPÎÂpSâ«1â·7Yúsæô,Ò­‹šÊÉ+Ç2”Άûh@ÐĨpSgz7 ç&mÄDÅÖéž@#½ž@4´Éš$éEÞ(£]¬ŸQ–y^êbÝÔê?w±UeI Ð$ÅJ]l6áñ€ÔŪÒ!>°ª³‹=Ï₎¾Y¡º¤r°,„L]VéKïÓeIœZ¨Ëñ.xìûKnvNÖe°4²~êÚÞûC§Ëfs+Râ““Õj%YJF˜Š*öïœ%¡¸ .¿ä¬7ÙÂÜ‚¼²bìI&̈§[Öp±!)¨Ø Ýgt` äC£ÔðG@Äh#S“Scò¹.÷ÞuööíbO>£(5ãéì>ê( ˆê ›õDѳ'Ç*‡<Âb½éÇ‘ØÓ£¯§‹m cN³©ñ{¢ÒâR³ Ô) š”9dÕ@Â`‰4:¶û»(ñ8wçh×Ñ'#,-¡ ,s(¡d–>ÇâÏIaVôÕ² RÓ3йW….¶µtU¹wûRþïѸÚ«¯ ºÛ»T®Ð¥ §d(|]$1Pá þá¼sÄÚ˜%MwÞVUS­¯/I(Ï YÔ6p—\g*·±d2™²•È'"rùË›J•;@õ³Ð¢ÐgBmÇ#•˵På‘âÇMóÜèb8ö2µ?íþ”o>@à‘CËœ¼¬Ìo¤T;PPyP¼¨ÀW l‰>)AM?jåÔQ6ØÓ´ñU ¼am爫,N$«i«:2:2!aXªØ3:ÔRÖû¤Œ†ïÉЂ6#SùMQN™:«º‹”äj¨ÎKcJEWÃüé}ÉÖ®?yû]ª·Ÿ -òŒ"î.*XcÀÑ.؉û¾@‘Ý:qþPYÐì)—ÿçöÏÝô³g˜#µoÛÿ’æŸÙ¢’¢’ÂÒ–u'cŽHŽòùŽƒÇ= ƒí7…zº(÷8ñŸ(n¤¿õÒoÉX°Céå´)ÖÁŽã‘eL&3&NßÞÃ(ûµVüÏ(֥ߑà¾fe5ÍÊ<è,Ào!Rêä8%™Õ±š,½L4*<ÕãÁ¼`tç ;laÈà†ØÒŸx-O þ?cÜ?¹ôðT àÌé…8Otˆó;œÓ#:ï–Àž´Œ®ËBGï×Éšoâ™›’¹2á?Ü{ê|Å=ÐDdÄrÁœÑk«V^ß.Ó ¡¶àÈö‰•›{7)¼do7¯ß'ÅOùßr0p7_èÊïß²Ä%Lµz§@º¿Í׆}©ª 3„¨½û®ÿ|‡Ö¯??zìx•`!öÀe¹Ø*ÇOqÿ´N`_íªÍNð7º5êqÜñ ¹8ò ,'½Ü2 ƒ…êt½ösu»Ê=ýv†o]xrýS:tü7˜s0DaÔ»Ô'+½æ\Ý/Å:Þnýôî¡ìBùê˜4e¶·Îvr }l¦¿wªëwp˜C¯uÊúö^..¯Ã²þ²íHÕÿêP*;'.‘‹qíkø=¹:®82;*49:2Qè0ÿmjR4$ƒÚ2,?6¯$-§ ýå³Ññ±AÖDûÐHéÍP>^ã&’ $aô у1ZÜýX 7[xOÈ ÑûWFFøy"ÿñµŒ2ØçvçO§]Ë;ÔT‘˜Ý‘ÞÞ!!»bàefiÑ¥›Jet!S9>ngùj5x s—¹ôN6TU¢8­éGò¸Ž2¢T±º@3½žw6ü2´ñÀ hÙb”BK´—2¡COÚ¦'ØïŽO˜ »iã4AQ¿ÿ»/ rPþÍ¥xÄ¡™ÕUÚæ˜Ž^6vqwymþX£—Þ+M8r¬5MÜæ÷çÏ^7ßE¥$Þ$$6޲y˜e¸8ã5£€}ÞÁ7ëd_a7´“ÚÝ|¼C5†:mkÂ/I=à¤4fÔB ×àSíâìãã<áÉZì…3¿þîÉþ?’ U·UgÏÁ×Üù牒˜Ì´gÃሽÕKŽ•ÇØ”!46\‚tà·wòfZÐ~~jWu´&D“¬NLHæÂÓ¡Tèr$MÿëTæ¡\4#ñ¼”ùÐbb‚&*\ÒgÃ8 MÐ47W«…4.7’âÔì'a„]D–YLQ|™,Â!„Û¤ƒlà(‚r•¯Ò†ŠÎ÷êø¥¤ qßf-ÎUTjÒüÃÔ°;Z m+MUxˆ(ˆLrO©w:;ߥŽf‰LôåÉUìÿÜqÌC9ÞB¸Ü‘!Èù•©!8ŠÔh Õ’0%š#YÒgÃF2˜Óèh†† :ödé@¿W ½„Ë¿¦«ØÇ~¦g–"s }%?4^,äÄWÑ>¼>†‹ µ%'ŽRåÚ¹Ñ5$Å ›#6Æ8PúsÊÙT” KÑ¥ ±áJÒDiLi¶N›)äæ×5Ý¥pq³æÃPÒkÇòü=”­yGÊêüªvxï Û4õëéØÇ·ÝÇÞh1ã¼Í)ÞS¥|µ7$†ÐlŸD$<ºa?9ÎÃßx8›znßGe-‡?¥ò[—Ráïšá »8·ªÀý{ EMg¶BúÙ³I>MWÆâÀŸ¾B+´}ôYÓ¶ (#gøeàÿQrf¤nB‡½ZOœ~ w‡ í¿“¾z¼yo•ÊÄñ'å¢+úóxF‘GMÃ>?*æä žUäAÕ._ð‹ÈYr–ôß]U§DúM»ªöÁÞüWä¡§„a&ÙAzQoñYÙ £ÄKÜ ´mß­óOS稳9gÅNÔÖÒ^)ÊÉJÿ†Ú—(mÞ¢"¼ìí 7 6r‹[ ³2?/#CÈ+¤þ§ p\>šœ¿ÁYDç¶ÏË%Y¸µTA6g°F3”õÌL¦—šw?en޲róžZs †ùoïã endstream endobj 199 0 obj <>stream dvips\(k\) 5.96 Copyright 2005 Radical Eye Software qd.dvi endstream endobj 2 0 obj <>endobj xref 0 200 0000000000 65535 f 0000108132 00000 n 0000190145 00000 n 0000107899 00000 n 0000103876 00000 n 0000000015 00000 n 0000003526 00000 n 0000108198 00000 n 0000118575 00000 n 0000168938 00000 n 0000117308 00000 n 0000159673 00000 n 0000116123 00000 n 0000154524 00000 n 0000115242 00000 n 0000149337 00000 n 0000114822 00000 n 0000143486 00000 n 0000113723 00000 n 0000133053 00000 n 0000113067 00000 n 0000131404 00000 n 0000112360 00000 n 0000124759 00000 n 0000111773 00000 n 0000121426 00000 n 0000108239 00000 n 0000108269 00000 n 0000104044 00000 n 0000003546 00000 n 0000005824 00000 n 0000120106 00000 n 0000182476 00000 n 0000119472 00000 n 0000177727 00000 n 0000108387 00000 n 0000108417 00000 n 0000104206 00000 n 0000005845 00000 n 0000012994 00000 n 0000118920 00000 n 0000171312 00000 n 0000118099 00000 n 0000162342 00000 n 0000116647 00000 n 0000157376 00000 n 0000108493 00000 n 0000108523 00000 n 0000104368 00000 n 0000013015 00000 n 0000017590 00000 n 0000115744 00000 n 0000150262 00000 n 0000108621 00000 n 0000108651 00000 n 0000104530 00000 n 0000017611 00000 n 0000021866 00000 n 0000112292 00000 n 0000108760 00000 n 0000108790 00000 n 0000104692 00000 n 0000021887 00000 n 0000026425 00000 n 0000114455 00000 n 0000141810 00000 n 0000113570 00000 n 0000132471 00000 n 0000108899 00000 n 0000108929 00000 n 0000104862 00000 n 0000026446 00000 n 0000032449 00000 n 0000120039 00000 n 0000109071 00000 n 0000109101 00000 n 0000105032 00000 n 0000032470 00000 n 0000034598 00000 n 0000109243 00000 n 0000109273 00000 n 0000105194 00000 n 0000034619 00000 n 0000041082 00000 n 0000109327 00000 n 0000109357 00000 n 0000105364 00000 n 0000041103 00000 n 0000045173 00000 n 0000109477 00000 n 0000109507 00000 n 0000105526 00000 n 0000045194 00000 n 0000051319 00000 n 0000109605 00000 n 0000109635 00000 n 0000105688 00000 n 0000051340 00000 n 0000053602 00000 n 0000109744 00000 n 0000109774 00000 n 0000105851 00000 n 0000053623 00000 n 0000056241 00000 n 0000116476 00000 n 0000109840 00000 n 0000109871 00000 n 0000106017 00000 n 0000056263 00000 n 0000060258 00000 n 0000109950 00000 n 0000109981 00000 n 0000106183 00000 n 0000060280 00000 n 0000062124 00000 n 0000110047 00000 n 0000110078 00000 n 0000106349 00000 n 0000062146 00000 n 0000067122 00000 n 0000112910 00000 n 0000130702 00000 n 0000112122 00000 n 0000123888 00000 n 0000110122 00000 n 0000110153 00000 n 0000106523 00000 n 0000067144 00000 n 0000072519 00000 n 0000111302 00000 n 0000120546 00000 n 0000110278 00000 n 0000110309 00000 n 0000106697 00000 n 0000072541 00000 n 0000077169 00000 n 0000110434 00000 n 0000110465 00000 n 0000106871 00000 n 0000077191 00000 n 0000081976 00000 n 0000110566 00000 n 0000110597 00000 n 0000107045 00000 n 0000081998 00000 n 0000086824 00000 n 0000110663 00000 n 0000110694 00000 n 0000107219 00000 n 0000086846 00000 n 0000092028 00000 n 0000110782 00000 n 0000110813 00000 n 0000107393 00000 n 0000092050 00000 n 0000097669 00000 n 0000110923 00000 n 0000110954 00000 n 0000107559 00000 n 0000097691 00000 n 0000099449 00000 n 0000111086 00000 n 0000111117 00000 n 0000107733 00000 n 0000099471 00000 n 0000103854 00000 n 0000111194 00000 n 0000111225 00000 n 0000120798 00000 n 0000121727 00000 n 0000124119 00000 n 0000125148 00000 n 0000130914 00000 n 0000131629 00000 n 0000132681 00000 n 0000133620 00000 n 0000142056 00000 n 0000143876 00000 n 0000149556 00000 n 0000150567 00000 n 0000154810 00000 n 0000157657 00000 n 0000160107 00000 n 0000162893 00000 n 0000169208 00000 n 0000171677 00000 n 0000178058 00000 n 0000182886 00000 n 0000111647 00000 n 0000112824 00000 n 0000113455 00000 n 0000114270 00000 n 0000114734 00000 n 0000115636 00000 n 0000116556 00000 n 0000116971 00000 n 0000117740 00000 n 0000119384 00000 n 0000119900 00000 n 0000188749 00000 n trailer << /Size 200 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 190345 %%EOF qd-2.3.11/docs/qd.tex0000644000175000017500000012742711202062041014531 0ustar prudhommprudhomm% qd.tex % % This work was supported by the Director, Office of Science, Division % of Mathematical, Information, and Computational Sciences of the % U.S. Department of Energy under contract number DE-AC03-76SF00098. % % (C) September 2000-2004 \documentclass[11pt]{article} \usepackage{graphicx} \usepackage{amsthm} \pagestyle{plain} \setlength{\textwidth}{6.5in} \setlength{\textheight}{8.5in} \setlength{\topmargin}{-0.2in} \setlength{\oddsidemargin}{0.0in} \setlength{\evensidemargin}{0.0in} % All thm/def/lem/etc... have same numbering \newtheorem{thm}{Theorem} \newtheorem{defn}[thm]{Definition} \newtheorem{lem}[thm]{Lemma} \newtheorem{prop}[thm]{Proposition} \theoremstyle{definition} \newtheorem{alg}[thm]{Algorithm} \newcommand{\round}{\mathrm{round}} \newcommand{\fl}{\mathrm{fl}} \newcommand{\err}{\mathrm{err}} \newcommand{\ulp}{\mathrm{ulp}} \newcommand{\hi}{\mathrm{hi}} \newcommand{\lo}{\mathrm{lo}} \newcommand{\eps}{\varepsilon} \newcommand{\epsqd}{\varepsilon_\mathrm{qd}} \title{Library for Double-Double and Quad-Double Arithmetic\footnotemark[1]} \author{Yozo Hida\footnotemark[2] \and Xiaoye S. Li\footnotemark[3] \and David H. Bailey\footnotemark[3]} \date{\today} \begin{document} \maketitle % change foot note symbols \renewcommand{\thefootnote}{\fnsymbol{footnote}} \footnotetext[1]{This research was supported by the Director, Office of Science, Division of Mathematical, Information, and Computational Sciences of the U.S. Department of Energy under contract number DE-AC03-76SF00098.} \footnotetext[2]{Computer Science Division, University of California, Berkeley, CA 94720 ({\tt yozo@cs.berkeley.edu}).} \footnotetext[3]{NERSC, Lawrence Berkeley National Laboratory, 1 Cycloton Rd, Berkeley, CA 94720 ({\tt xiaoye@nersc.gov}, {\tt dhbailey@lbl.gov}).} % change footnote symbols back to numbers \renewcommand{\thefootnote}{\arabic{footnote}} \vspace{1cm} \begin{abstract} A double-double number is an unevaluated sum of two IEEE double precision numbers, capable of representing at least 106 bits of significand. Similarly, a quad-double number is an unevaluated sum of four IEEE double precision numbers, capable of representing at least 212 bits of significand. Algorithms for various arithmetic operations (including the four basic operations and various algebraic and transcendental operations) are presented. A C++ implementation of these algorithms is also described, along with its C and Fortran interfaces. Performance of the library is also discussed. \end{abstract} \newpage \tableofcontents \newpage \section{Introduction} \label{sec:intro} Multiprecision computation has a variety of application areas, such as pure mathematics, study of mathematical constants, cryptography, and computational geometry. Because of this, many arbitrary precision algorithms and libraries have been developed using only the fixed precision arithmetic. They can be divided into two groups based on the way precision numbers are represented. Some libraries store numbers in a {\em multiple-digit} format, with a sequence of digits coupled with a single exponent, such as the symbolic computation package Mathematica, Bailey's MPFUN~\cite{bai-mp}, Brent's MP~\cite{brent} and GNU MP~\cite{gnu-mp}. An alternative approach is to store numbers in a {\em multiple-component} format, where a number is expressed as unevaluated sums of ordinary floating-point words, each with its own significand and exponent. Examples of this format include~\cite{dek71,pri92,she97}. The multiple-digit approach can represent a much larger range of numbers, whereas the multiple-component approach has the advantage in speed. We note that many applications would get full benefit from using merely a small multiple of (such as twice or quadruple) the working precision, without the need for arbitrary precision. The algorithms for this kind of ``fixed'' precision can be made significantly faster than those for arbitrary precision. Bailey~\cite{bai-dd} and Briggs~\cite{kbriggs97} have developed algorithms and software for ``double-double'' precision, twice the double precision. They used the multiple-component format, where a double-double number is represented as an unevaluated sum of a leading double and a trailing double. In this paper we present the algorithms used in the {\tt qd} library, which implements both double-double and quad-double arithmetic. A quad-double number is an unevaluated sum of four IEEE doubles. The quad-double number $(a_0, a_1, a_2, a_3)$ represents the exact sum $a = a_0 + a_1 + a_2 + a_3$, where $a_0$ is the most sigficant component. We have designed and implemented algorithms for basic arithmetic operations, as well as some algebraic and transcendental functions. We have performed extensive correctness tests and compared the results with arbitrary precision package MPFUN. Our quad-precision library is available at {\tt http://www.nersc.gov/\~{ }dhbailey/mpdist/mpdist.html}. Our quad-double library has been successfully integrated into a parallel vortex roll-up simulation code; this is briefly described in \cite{hida00}. The rest of the paper is organized as follows. Section~\ref{sec:prelim} describes some basic properties of IEEE floating point arithmetic and building blocks for our quad-double algorithms. In Section~\ref{sec:basic} we present the quad-double algorithms for basic operations, including renormization, addition, multiplication and division. Section~\ref{sec:algebraic} and~\ref{sec:transcendental} present the algorithms for some algebraic operations and transcendental functions. Section~\ref{sec:misc} describes some auxiliary functions. Section~\ref{sec:implement} briefly describes our C++ library implementing the above algorithms. Section~\ref{sec:performance} presents the timing results of the kernel operations on different architectures. Section~\ref{sec:future} discusses future work. \section{Preliminaries} \label{sec:prelim} In this section, we present some basic properties and algorithms of IEEE floating point arithmetic used in quad-double arithmetic. These results are based on Dekker \cite{dek71}, Knuth \cite{knu81}, Priest \cite{pri92}, Shewchuk \cite{she97}, and others. In fact, many of the algorithms and diagrams are directly taken from, or based on, Shewchuk's paper. All basic arithmetics are assumed to be performed in IEEE double format, with round-to-even rounding on ties. For any binary operator $\cdot \in \{+, -, \times, /\}$, we use $\fl(a \cdot b) = a \odot b$ to denote the floating point result of $a \cdot b$, and define $\err(a \cdot b)$ as $a \cdot b = \fl(a \cdot b) + \err(a \cdot b)$. Throughout this paper, $\eps = 2^{-53}$ is the machine epsilon for IEEE double precision numbers, and $\epsqd = 2^{-211}$ is the precision one expects for quad-double numbers. \begin{lem} {\rm \cite[p. 310]{she97}} Let $a$ and $b$ be two $p$-bit floating point numbers such that $|a| \ge |b|$. Then $|\err(a+b)| \le |b| \le |a|$. \end{lem} \begin{lem} {\rm \cite[p. 311]{she97}} Let $a$ and $b$ be two $p$-bit floating point numbers. Then $\err(a+b) = (a + b) - \fl(a+b)$ is representable as a $p$-bit floating point number. \end{lem} \begin{alg} \cite[p. 312]{she97} The following algorithm computes $s = \fl(a+b)$ and $e = \err(a+b)$, assuming $|a| \ge |b|$. \vspace{0.1in} \hfill \begin{minipage}[t]{4in} {\sc Quick-Two-Sum}($a, b$) \\ \begin{tabular}{rl} 1. & $s \leftarrow a \oplus b$ \\ 2. & $e \leftarrow b \ominus (s \ominus a)$ \\ 3. & {\bf return} $(s, e)$ \end{tabular} \end{minipage} \end{alg} \begin{alg} \cite[p. 314]{she97} The following algorithm computes $s = \fl(a+b)$ and $e = \err(a+b)$. This algorithm uses three more floating point operations instead of a branch. \vspace{0.1in} \hfill \begin{minipage}[t]{4in} {\sc Two-Sum}($a, b$) \\ \begin{tabular}{rl} 1. & $s \leftarrow a \oplus b$ \\ 2. & $v \leftarrow s \ominus a$ \\ 3. & $e \leftarrow (a \ominus (s \ominus v)) \oplus (b \ominus v)$ \\ 4. & {\bf return} $(s, e)$ \end{tabular} \end{minipage} \end{alg} \begin{alg} \cite[p. 325]{she97} The following algorithm splits a 53-bit IEEE double precision floating point number into $a_{\hi}$ and $a_{\lo}$, each with 26 bits of significand, such that $a = a_\hi + a_\lo$. $a_\hi$ will contain the first $26$ bits, while $a_\lo$ will contain the lower $26$ bits. \vspace{0.1in} \hfill \begin{minipage}[t]{4in} {\sc Split}($a$) \\ \begin{tabular}{rl} 1. & $t \leftarrow (2^{27}+1) \otimes a$ \\ 2. & $a_\hi \leftarrow t \ominus (t \ominus a)$ \\ 3. & $a_\lo \leftarrow a \ominus a_\hi$ \\ 4. & {\bf return} $(a_\hi, a_\lo)$ \end{tabular} \end{minipage} \end{alg} \begin{alg} \cite[p. 326]{she97} The following algorithm computes $p = \fl(a \times b)$ and $e = \err(a \times b)$. \vspace{0.1in} \hfill \begin{minipage}[t]{5in} {\sc Two-Prod}($a, b$) \\ \begin{tabular}{rl} 1. & $p \leftarrow a \otimes b$ \\ 2. & $(a_\hi, a_\lo) \leftarrow$ {\sc Split}($a$) \\ 3. & $(b_\hi, b_\lo) \leftarrow$ {\sc Split}($b$) \\ 4. & $e \leftarrow ((a_\hi \otimes b_\hi \ominus p) \oplus a_\hi \otimes b_\lo \oplus a_\lo \otimes b_\hi) \oplus a_\lo \otimes b_\lo$ \\ 5. & {\bf return} $(p, e)$ \end{tabular} \end{minipage} \end{alg} Some machines have a fused multiply-add instruction (FMA) that can evaluate expression such as $a \times b \pm c$ with a single rounding error. We can take advantage of this instruction to compute exact product of two floating point numbers much faster. These machines include IBM Power series (including the PowerPC), on which this simplification is tested. \begin{alg} The following algorithm computes $p = \fl(a \times b)$ and $e = \err(a \times b)$ on a machine with a FMA instruction. Note that some compilers emit FMA instructions for $a \times b + c$ but not for $a \times b - c$; in this case, some sign adjustments must be made. \vspace{0.1in} \hfill \begin{minipage}[t]{4in} {\sc Two-Prod-FMA}($a, b$) \\ \begin{tabular}{rl} 1. & $p \leftarrow a \otimes b$ \\ 2. & $e \leftarrow \fl(a \times b - p)$ \\ 3. & {\bf return} ($p, e$) \end{tabular} \end{minipage} \end{alg} The algorithms presented are the basic building blocks of quad-double arithmetic, and are represented in Figures \ref{quick_two_sum_fig}, \ref{two_sum_fig}, and \ref{two_prod_fig}. Symbols for normal double precision sum and product are in Figure~\ref{normal_sum_prod_fig}. \begin{figure} \hfill \begin{minipage}[t]{2in} \begin{center} \includegraphics{quick-two-sum.eps} \caption{\label{quick_two_sum_fig}{\sc Quick-Two-Sum}} \end{center} \end{minipage} \begin{minipage}[t]{2in} \begin{center} \includegraphics{two-sum.eps} \caption{\label{two_sum_fig}{\sc Two-Sum}} \end{center} \end{minipage} \begin{minipage}[t]{2in} \begin{center} \includegraphics{two-prod.eps} \caption{\label{two_prod_fig}{\sc Two-Prod}} \end{center} \end{minipage} \end{figure} \begin{figure} \begin{center} \includegraphics{normal_sum_prod.eps} \caption{\label{normal_sum_prod_fig}Normal IEEE double precision sum and product} \end{center} \end{figure} \section{Basic Operations} \label{sec:basic} \subsection{Renormalization} A quad-double number is an unevaluated sum of four IEEE double numbers. The quad-double number $(a_0, a_1, a_2, a_3)$ represents the exact sum $a = a_0 + a_1 + a_2 + a_3$. Note that for any given representable number $x$, there can be many representations as an unevaluated sum of four doubles. Hence we require that the quadruple $(a_0, a_1, a_2, a_3)$ to satisfy \begin{displaymath} |a_{i+1}| \le \frac{1}{2}\ulp(a_i) \end{displaymath} for $i = 0, 1, 2$, with equality occurring only if $a_i = 0$ or the last bit of $a_i$ is $0$ (that is, round-to-even is used in case of ties). Note that the first double $a_0$ is a double-precision approximation to the quad-double number $a$, accurate to almost half an ulp. \begin{lem} For any quad-double number $a = (a_0, a_1, a_2, a_3)$, the normalized representation is unique. \end{lem} Most of the algorithms described here produce an expansion that is not of canonical form -- often having overlapping bits. Therefore, a five-term expansion is produced, and then renormalized to four components. \begin{alg} \label{renorm_alg} This renormalization procedure is a variant of Priest's renormalization method \cite[p. 116]{pri92}. The input is a five-term expansion with limited overlapping bits, with $a_0$ being the most significant component. \vspace{0.1in} \hfill \begin{minipage}[t]{5in} {\sc Renormalize}($a_0, a_1, a_2, a_3, a_4$) \\ \begin{tabular}{rl} 1. & $(s, t_4) \leftarrow$ {\sc Quick-Two-Sum}($a_3, a_4$) \\ 2. & $(s, t_3) \leftarrow$ {\sc Quick-Two-Sum}($a_2, s$) \\ 3. & $(s, t_2) \leftarrow$ {\sc Quick-Two-Sum}($a_1, s$) \\ 4. & $(t_0, t_1) \leftarrow$ {\sc Quick-Two-Sum}($a_0, s$) \\ \\ 5. & $s \leftarrow t_0$ \\ 6. & $k \leftarrow 0$ \\ 7. & {\bf for\footnotemark[1]} $i \leftarrow 1, 2, 3, 4$ \\ 8. & \quad $(s, e) \leftarrow$ {\sc Quick-Two-Sum}($s, t_i$) \\ 9. & \quad {\bf if} $e \ne 0$ \\ 10. & \quad \quad $b_k \leftarrow s$ \\ 11. & \quad \quad $s \leftarrow e$ \\ 12. & \quad \quad $k \leftarrow k + 1$ \\ 13. & \quad {\bf end if} \\ 14. & {\bf end for} \\ 15. & {\bf return} $(b_0, b_1, b_2, b_3)$ \end{tabular} \end{minipage} \end{alg} \footnotetext[1]{In the implementation, this loop is unrolled to several {\tt if} statements.} Necessary conditions for this renormalization algorithm to work correctly are, unfortunately, not known. Priest proves that if the input expansion does not overlap by more than 51 bits, then the algorithm works correctly. However, this condition is by no means necessary; that the renormalization algorithm (Algorithm \ref{renorm_alg}) works on all the expansions produced by the algorithms below remains to be shown. \subsection{Addition} \subsubsection{Quad-Double + Double} The addition of a double precision number to a quad-double number is similar to Shewchuk's {\sc Grow-Expansion} \cite[p. 316]{she97}, but the double precision number $b$ is added to a quad-double number $a$ from most significant component first (rather than from least significant). This produces a five-term expansion which is the exact result, which is then renormalized. See Figure~\ref{qd_add_qd_d_fig}. \begin{figure} \begin{center} \includegraphics{qd_add_qd_d.eps} \caption{\label{qd_add_qd_d_fig}Quad-Double + Double} \end{center} \end{figure} Since the exact result is computed, then normalized to four components, this addition is accurate to at least the first 212 bits of the result. \subsubsection{Quad-Double + Quad-Double} We have implemented two algorithms for addition. The first one is faster, but only satisfies the weaker (Cray-style) error bound $a \oplus b = (1 + \delta_1)a + (1 + \delta_2)b$ where the magnitude of $\delta_1$ and $\delta_2$ is bounded by $\epsqd = 2^{-211}$. \begin{figure} \begin{center} \includegraphics{qd_add.eps} \caption{\label{qd_add_fig}Quad-Double + Quad-Double} \end{center} \end{figure} Figure \ref{qd_add_fig} best describes the first addition algorithm of two quad-double numbers. In the diagram, there are three large boxes with three inputs to them. These are various {\sc Three-Sum} boxes, and their internals are shown in Figure \ref{three_sum_fig}. \begin{figure} \begin{center} \includegraphics{three-sum.eps} \includegraphics{three-sum-2.eps} \includegraphics{three-sum-3.eps} \caption{\label{three_sum_fig}{\sc Three-Sum}s} \end{center} \end{figure} Now for a few more lemmas. \begin{lem} \label{two_sum_bound} Let $a$ and $b$ be two double precision floating point numbers. Let $M = \max(|a|, |b|)$. Then $|\fl(a+b)| \le 2M$, and consequently, $|\err(a+b)| \le \frac{1}{2}\ulp(2M) \le 2 \eps M$. \end{lem} \begin{lem} \label{three_sum_bound} Let $x, y,$ and $z$ be inputs to {\sc Three-Sum}. Let $u, v, w, r_0, r_1,$ and $r_2$ be as indicated in Figure \ref{three_sum_fig}. Let $M = \max (|x|, |y|, |z|)$. Then $|r_0| \le 4M$, $|r_1| \le 8 \eps M$, and $|r_2| \le 8 \eps^2 M$. \end{lem} \begin{proof} This follows from applying Lemma \ref{two_sum_bound} to each of the three {\sc Two-Sum} boxes. First {\sc Two-Sum} gives $|u| \le 2M$ and $|v| \le 2\eps M$. Next {\sc Two-Sum} (adding $u$ and $z$) gives $|r_0| \le 4M$ and $|w| \le 4\eps M$. Finally, the last {\sc Two-Sum} gives the desired result. \end{proof} Note that the two other {\sc Three-Sum}s shown are simplification of the first {\sc Three-Sum}, where it only computes one or two components, instead of three; thus the same bounds apply. The above bound is not at all tight; $|r_0|$ is bounded closer to $3M$ (or even $|x| + |y| + |z|$), and this makes the bounds for $r_1$ and $r_2$ correspondingly smaller. However, this suffices for the following lemma. \begin{lem}\label{sum_lemma} The five-term expansion before the renormalization step in the quad-double addition algorithm shown in Figure \ref{qd_add_fig} errs from the true result by less than $\epsqd M$, where $M = \max(|a|, |b|)$. \end{lem} \begin{proof} This can be shown by judiciously applying Lemmas \ref{two_sum_bound} and \ref{three_sum_bound} to all the {\sc Two-Sum}s and {\sc Three-Sum}s in Figure \ref{qd_add_fig}. See Appendix \ref{proof_appendix} for detailed proof. \end{proof} Assuming that the renormalization step works (this remains to be proven), we can then obtain the error bound \begin{displaymath} \fl(a+b) = (1 + \delta_1) a + (1 + \delta_2) b \qquad \textrm{with} \quad |\delta_1|, |\delta_2| \le \epsqd. \end{displaymath} Note that the above algorithm for addition is particularly suited to modern processors with instruction level parallelism, since the first four {\sc Two-Sum}s can be evaluated in parallel. Lack of branches before the renormalization step also helps to keep the pipelines full. Note that the above algorithm does not satisfy the IEEE-style error bound \begin{displaymath} \fl(a+b) = (1+\delta)(a+b) \qquad \textrm{with} \quad |\delta| \le 2\epsqd \textrm{ or so.} \end{displaymath} To see this, let $a = (u, v, w, x)$ and $b = (-u, -v, y, z)$, where none of $w, x, y, z$ overlaps and $|w| > |x| > |y| > |z|$. Then the above algorithm produces $c = (w, x, y, 0)$ instead of $c = (w, x, y, z)$ required by the stricter bound. The second algorithm, due to J. Shewchuk and S. Boldo, computes the first four components of the {\em result} correctly. Thus it satisfies more strict error bound \begin{displaymath} \fl(a+b) = (1+\delta)(a+b) \qquad \textrm{with} \quad |\delta| \le 2\epsqd \textrm{ or so.} \end{displaymath} However, it has a corresponding speed penalty; it runs significantly slower (factor of $2$--$3.5$ slower). The algorithm is similar to Shewchuk's {\sc Fast-Expansion-Sum} \cite[p. 320]{she97}, where it merge-sorts the two expansions. To prevent components with only a few significant bits to be produced, a double-length accumulator is used so that a component is output only if the inputs gets small enough to not affect it. \begin{alg} \label{double_accum_alg} Assuming that $u, v$ is a two-term expansion, the following algorithm computes the sum $(u, v) + x$, and outputs the significant component $s$ if the remaining components contain more than one double worth of significand. $u$ and $v$ are modified to represent the other two components in the sum. \vspace{0.1in} \hfill \begin{minipage}[t]{5in} {\sc Double-Accumulate}($u, v, x$) \\ \begin{tabular}{rl} 1. & $(s, v) \leftarrow$ {\sc Two-Sum}($v, x$) \\ 2. & $(s, u) \leftarrow$ {\sc Two-Sum}($u, s$) \\ 3. & {\bf if} $u = 0$ \\ 4. & \quad $u \leftarrow s$ \\ 5. & \quad $s \leftarrow 0$ \\ 6. & {\bf end if} \\ 7. & {\bf if} $v = 0$ \\ 8. & \quad $v \leftarrow u$ \\ 9. & \quad $u \leftarrow s$ \\ 10. & \quad $s \leftarrow 0$ \\ 11. & {\bf end if} \\ 12. & {\bf return} ($s, u, v$) \\ \end{tabular} \end{minipage} \end{alg} The accurate addition scheme is given by the following algorithm. \begin{alg} \label{accurate_add_alg} This algorithm computes the sum of two quad-double numbers $a = (a_0, a_1, a_2, a_3)$ and $b = (b_0, b_1, b_2, b_3)$. Basically it merge-sorts the eight doubles, and performs {\sc Double-Accumulate} until four components are obtained. \vspace{0.1in} \hfill \begin{minipage}[t]{5in} {\sc QD-Add-Accurate}($a, b$) \\ \begin{tabular}{rl} 1. & $(x_0, x_1, \ldots, x_7) \leftarrow$ {\sc Merge-Sort}$(a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3)$ \\ 2. & $u \leftarrow 0$ \\ 3. & $v \leftarrow 0$ \\ 4. & $k \leftarrow 0$ \\ 5. & $i \leftarrow 0$ \\ 6. & {\bf while} $k < 4$ {\bf and} $i < 8$ {\bf do} \\ 7. & \quad $(s,u,v)\leftarrow$ {\sc Double-Accumulate}$(u, v, x_i)$ \\ 8. & \quad {\bf if} $s \ne 0$ \\ 9. & \quad \quad $c_k \leftarrow s$ \\ 10. & \quad \quad $k \leftarrow k + 1$ \\ 11. & \quad {\bf end if} \\ 12. & \quad $i \leftarrow i + 1$ \\ 13. & {\bf end while} \\ 14. & {\bf if} $k < 2$ {\bf then} $c_{k+1} \leftarrow v$ \\ 15. & {\bf if} $k < 3$ {\bf then} $c_k \leftarrow u$ \\ 16. & {\bf return} {\sc Renormalize}$(c_0, c_1, c_2, c_3)$ \end{tabular} \end{minipage} \end{alg} \subsection{Subtraction} Subtraction $a - b$ is implemented as the addition $a + (-b)$, so it has the same algorithm and properties as that of addition. To negate a quad-double number, we can just simply negate each component. On a modern C++ compiler with inlining, the overhead is noticeable but not prohibitive (say $5\%$ or so). \subsection{Multiplication} Multiplication is basically done in a straightforward way, multiplying term by term and accumulating. Note that unlike addition, there are no possibilities of massive cancellation in multiplication, so the following algorithms satisfy the IEEE style error bound $a \otimes b = (1 + \delta)(a \times b)$ where $\delta$ is bounded by $\epsqd$. \subsubsection{Quad-Double $\times$ Double} Let $a = (a_0, a_1, a_2, a_3)$ be a quad-double number, and let $b$ be a double precision number. Then the product is the sum of four terms, $a_0 b + a_1 b + a_2 b + a_3 b$. Note that $|a_3| \le \eps^3 |a_0|$, so $|a_3 b| \le \eps^3 |a_0 b|$, and thus only the first 53 bits of the product $a_3 b$ need to be computed. The first three terms are computed exactly using {\sc Two-Prod} (or {\sc Two-Prod-FMA}). All the terms are then accumulated in a similar fashion as addition. See Figure \ref{qd_mul_qd_d_fig}. \begin{figure} \begin{center} \includegraphics{qd_mul_qd_d.eps} \caption{\label{qd_mul_qd_d_fig}Quad-Double $\times$ Double} \end{center} \end{figure} \subsubsection{Quad-Double $\times$ Quad-Double} Multiplication of two quad-double numbers becomes a bit complicated, but nevertheless follows the same idea. Let $a = (a_0, a_1, a_2, a_3)$ and $b = (b_0, b_1, b_2, b_3)$ be two quad-double numbers. Assume (without loss of generality) that $a$ and $b$ are order 1. After multiplication, we need to accumulate $13$ terms of order $O(\eps^4)$ or higher. \begin{displaymath} \begin{array}{rcl@{\qquad}l} a \times b &\approx& a_0 b_0 & O(1) \textrm{ term} \\ & & +\; a_0 b_1 + a_1 b_0 & O(\eps) \textrm{ terms}\\ & & +\;a_0 b_2 + a_1 b_1 + a_2 b_0 & O(\eps^2) \textrm{ terms}\\ & & +\;a_0 b_3 + a_1 b_2 + a_2 b_1 + a_3 b_0 & O(\eps^3) \textrm{ terms}\\ & & +\;a_1 b_3 + a_2 b_2 + a_3 b_1 & O(\eps^4) \textrm{ terms} \end{array} \end{displaymath} Note that smaller order terms (such as $a_2 b_3$, which is $O(\eps^5)$) are not even computed, since they are not needed to get the first 212 bits. The $O(\eps^4)$ terms are computed using normal double precision arithmetic, as only their first few bits are needed. For $i+j \le 3$, let $(p_{ij}, q_{ij}) = ${\sc Two-Prod}($a_i$, $b_j$). Then $p_{ij} = O(\eps^{i+j})$ and $q_{ij} = O(\eps^{i+j+1})$. Now there are one term ($p_{00}$) of order $O(1)$, three ($p_{01}$, $p_{10}$, $q_{00}$) of order $O(\eps)$, five ($p_{02}$, $p_{11}$, $p_{20}$, $q_{01}$, $q_{10}$) of order $O(\eps^2)$, seven of order $O(\eps^3)$, and seven of order $O(\eps^4)$. Now we can start accumulating all the terms by their order, starting with $O(\eps)$ terms (see Figure \ref{qd_mul_accum_fig}). \begin{figure} \begin{center} \includegraphics{qd_mul_accum.eps} \caption{\label{qd_mul_accum_fig}Quad-Double $\times$ Quad-Double accumulation phase} \end{center} \end{figure} In the diagram, there are four different summation boxes. The first (topmost) one is {\sc Three-Sum}, same as the one in addition. The next three are, respectively, {\sc Six-Three-Sum} (sums six doubles and outputs the first three components), {\sc Nine-Two-Sum} (sums nine doubles and outputs the first two components), and {\sc Nine-One-Sum} (just adds nine doubles using normal arithmetic). {\sc Six-Three-Sum} computes the sum of six doubles to three double worth of accuracy (i.e., to relative error of $O(\eps^3)$). This is done by dividing the inputs into two groups of three, and performing {\sc Three-Sum} on each group. Then the two sums are added together, in a manner similar to quad-double addition. See Figure \ref{six_three_sum_fig}. {\sc Nine-Two-Sum} computes the sum of nine doubles to double-double accuracy. This is done by pairing the inputs to create four double-double numbers and a single double precision number, and performing addition of two double-double numbers recursively until one arrives at a double-double output. The double-double addition (the large square box in the diagram) is the same as David Bailey's algorithm \cite{bai-dd}. See Figure \ref{nine_two_sum_fig}. \begin{figure} \begin{center} \includegraphics{six-three-sum.eps} \caption{\label{six_three_sum_fig}{\sc Six-Three-Sum}} \end{center} \end{figure} \begin{figure} \begin{center} \includegraphics{nine-two-sum.eps} \caption{\label{nine_two_sum_fig}{\sc Nine-Two-Sum}} \end{center} \end{figure} If one wishes to trade few bits of accuracy for speed, we don't even need to compute the $O(\eps^4)$ terms; they can affect the first 212 bits only by carries during accumulation. In this case, we can compute the $O(\eps^3)$ terms using normal double precision arithmetic, thereby speeding up multiplication considerably. Squaring a quad-double number can be done significantly faster since the number of terms that needs to be accumulated can be reduced due to symmetry. \subsection{Division} Division is done by the familiar long division algorithm. Let $a = (a_0, a_1, a_2, a_3)$ and $b = (b_0, b_1, b_2, b_3)$ be quad-double numbers. We can first compute an approximate quotient $q_0 = a_0 / b_0$. We then compute the remainder $r = a - q_0 \times b$, and compute the correction term $q_1 = r_0 / b_0$. We can continue this process to obtain five terms, $q_0,\; q_1,\; q_2,\; q_3$, and $q_4$. (only four are needed if few bits of accuracy is not important). Note that at each step, full quad-double multiplication and subtraction must be done since most of the bits will be canceled when computing $q_3$ and $q_4$. The five-term (or four-term) expansion is then renormalized to obtain the quad-double quotient. \section{Algebraic Operations} \label{sec:algebraic} \subsection{$N$-th Power} $N$-th Power computes $a^n$, given a quad-double number $a$ and an integer $n$. This is simply done by repeated squaring, borrowed from David Bailey \cite{bai-dd}. \subsection{Square Root} Square root computes $\sqrt{a}$ given a quad-double number $a$. This is done with Newton iteration on the function \begin{displaymath} f(x) = \frac{1}{x^2} - a \end{displaymath} which has the roots $\pm a^{-1/2}$. This gives rise to the iteration \begin{displaymath} x_{i+1} = x_i + \frac{x_i (1 - ax_i^2)}{2}. \end{displaymath} Note that the iteration does not require division of quad-double numbers. (Multiplication by $1/2$ can be done component-wise.) Since Newton's iteration is locally quadratically convergent, only about two iterations are required if one starts out with double precision approximation $x_0 = \sqrt{a_0}$. (In the implementation it is done three times.) After $x = a^{-1/2}$ is computed, we perform a multiplication to obtain $\sqrt{a} = ax$. \subsection{$N$-th Root} $N$-th Root computes $\sqrt[n]{a}$ given a quad-double number $a$ and an integer $n$. This is done again by Newton's iteration on the function \begin{displaymath} f(x) = \frac{1}{x^n} - a \end{displaymath} which has the roots $a^{-1/n}$. This gives rise to the iteration \begin{displaymath} x_{i+1} = x_i + \frac{x_i (1 - ax_i^n)}{n}. \end{displaymath} Three iterations are performed, although twice is almost sufficient. After $x = a^{-1/n}$ is computed, we can invert to obtain $a^{1/n} = 1/x$. \section{Transcendental Operations} \label{sec:transcendental} \subsection{Exponential} The classic Taylor-Maclaurin series is used to evaluate $e^x$. Before using the Taylor series, the argument is reduced by noting that \begin{displaymath} e^{kr + m \log 2} = 2^m (e^r)^k, \end{displaymath} where the integer $m$ is chosen so that $m \log 2$ is closest to $x$. This way, we can make $|kr| \le \frac{1}{2} \log 2 \approx 0.34657$. Using $k = 256$, we have $|r| \le \frac{1}{512} \log 2 \approx 0.001354$. Now $e^r$ can be evaluated using familiar Taylor series. The argument reduction substantially speeds up the convergence of the series, as at most 18 terms are need to be added in the Taylor series. \subsection{Logarithm} Since the Taylor series for logarithm converges much more slowly than the series for exponential, instead we use Newton's iteration to find the zero of the function $f(x) = e^x - a$. This leads to the iteration \begin{displaymath} x_{i+1} = x_i + ae^{-x_i} - 1, \end{displaymath} which is repeated three times. \subsection{Trigonometrics} Sine and cosine are computed using Taylor series after argument reduction. To compute $\sin x$ and $\cos x$, the argument $x$ is first reduced modulo $2 \pi$, so that $|x| \le \pi$. Now noting that $\sin (y + k \pi /2)$ and $\cos (y + k \pi / 2)$ are of the form $\pm \sin y$ or $\pm \cos y$ for all integers $k$, we can reduce the argument modulo $\pi/2$ so that we only need to compute $\sin y$ and $\cos y$ with $|y| \le \pi / 4$. Finally, write $y = z + m (\pi / 1024)$ where the integer $m$ is chosen so that $|z| \le \pi / 2048 \approx 0.001534$. Since $|y| \le \pi / 4$, we can assume that $|m| \le 256$. By using a precomputed table of $\sin (m \pi / 1024)$ and $\cos (m \pi / 1024)$, we note that \begin{displaymath} \sin (z + m \pi / 1024) = \sin z \cos (m \pi / 1024) + \cos z \sin (m \pi / 1024) \end{displaymath} and similarly for $\cos (z + m \pi / 1024)$. Using this argument reduction significantly increases the convergence rate of sine, as at most 10 terms need be added. Note that if both cosine and sine are needed, then one can compute the cosine using the formula \begin{displaymath} \cos x = \sqrt{1 - \sin^2 x}. \end{displaymath} The values of $\sin (m \pi / 1024)$ and $\cos (m \pi / 1024)$ are precomputed by using arbitrary precision package such as MPFUN \cite{bai-mp} using the formula \begin{displaymath} \sin \left( \frac{\theta}{2} \right) = \frac{1}{2} \sqrt{2 - 2 \cos \theta} \end{displaymath} \begin{displaymath} \cos \left( \frac{\theta}{2} \right) = \frac{1}{2} \sqrt{2 + 2 \cos \theta} \end{displaymath} Starting with $\cos \pi = -1$, we can recursively use the above formula to obtain $\sin (m \pi / 1024)$ and $\cos (m \pi / 1024)$. \subsection{Inverse Trigonometrics} Inverse trigonometric function $\arctan$ is computed using Newton iteration on the function $f(x) = \sin x - a$. \subsection{Hyperbolic Functions} Hyperbolic sine and cosine are computed using \begin{displaymath} \sinh x = \frac{e^x - e^{-x}}{2} \qquad \cosh x = \frac{e^x + e^{-x}}{2} \end{displaymath} However, when $x$ is small (say $|x| \le 0.01$), the above formula for $\sinh$ becomes unstable, and the Taylor series is used instead. \section{Miscellaneous Routines} \label{sec:misc} \subsection{Input / Output} Binary to decimal conversion of quad-double number $x$ is done by determining the integer $k$ such that $1 \le |x 10^{-k}| < 10$, and repeatedly extracting digits and multiplying by 10. To minimize error accumulation, a table of accurately precomputed powers of 10 is used. This table is also used in decimal to binary conversion. \subsection{Comparisons} Since quad-double numbers are fully renormalized after each operation, comparing two quad-double number for equality can be done component-wise. Comparing the size can be done from most significant component first, similar to dictionary ordering of English words. Comparison to zero can be done just by checking the most significant word. \subsection{Random Number Generator} The quad-double random number generator produces a quad-double number in the range $[0, 1)$, uniformly distributed. This is done by choosing the first 212 bits randomly. A 31-bit system-supplied random number generator is used to generate 31 bits at a time, this is repeated $\lceil 212 / 31 \rceil = 7$ times to get all 212 bits. \section{C++ Implementation} \label{sec:implement} The quad-double library is implemented in ANSI C++, taking full advantage of operator / function overloading and user-defined data structures. The library should compile fine with ANSI Standard compliant C++ compilers. Some of the test codes may not work with compilers lacking full support for templates. Please see the files {\tt README} and {\tt INSTALL} for more details on the implementation and build instructions. Full C++ implementation of double-double library is included as a part of the quad-double library, including full support for mixing three types: double, double-double, and quad-double. In order to use the library, one must include the header file {\tt qd.h} and link the code with the library {\tt libqd.a}. Quad-double variables are declared as {\tt qd\_real}, while double-double variables are declared as {\tt dd\_real}. A sample C++ program is given below. \bigskip \begin{minipage}{0.8\textwidth} \begin{tt}\begin{verbatim} #include #include using std::cout; using std::endl; int main() { unsigned int oldcw; fpu_fix_start(&oldcw); // see notes on x86 machines below. qd_real a = "3.141592653589793238462643383279502884197169399375105820"; dd_real b = "2.249775724709369995957"; qd_real r; r = sqrt(a * b + 1.0); cout << " sqrt(a * b + 1) = " << r << endl; fpu_fix_end(&oldcw); // see notes on x86 machines below. return 0; } \end{verbatim}\end{tt} \end{minipage} \bigskip Note that strings must be used to assign to a quad-double (or double-double) numbers; otherwise the double precision approximation is assigned. For example, {\tt a = 0.1} does not assign quad-double precision 0.1, but rather a double precision number 0.1. Instead, use {\tt a = "0.1"}. Common constants such as $\pi$, $\pi/2$, $\pi/4$, $e$, $\log 2$ are provided as {\tt qd\_real::\_pi}, {\tt qd\_real::\_pi2}, {\tt qd\_real::\_pi4}, {\tt qd\_real::\_e}, and {\tt qd\_real::\_log2}. These were computed using an arbitrary precision package (MPFUN++ \cite{cha98}), and therefore are accurate to the last bit. \noindent{\bf Note on Intel x86 Processors}. The algorithms in this library assume IEEE double precision floating point arithmetic. Since Intel x86 processors have extended (80-bit) floating point registers, the round-to-double flag must be enabled in the control word of the FPU for this library to function properly under x86 processors. The function {\tt fpu\_fix\_start} turns on the round-to-double bit in the FPU control word, while {\tt fpu\_fix\_end} will restore the original state. \section{Performance} \label{sec:performance} Performance of various operations on quad-double numbers on a variety of machines are presented in Table \ref{timing_table}. The tested machines are \begin{itemize} \item Intel Pentium II, 400 MHz, Linux 2.2.16, g++ 2.95.2 compiler, with {\tt -O3 -funroll-loops -finline-functions -mcpu=i686 -march=i686} optimizations. \item Sun UltraSparc 333 MHz, SunOS 5.7, Sun CC 5.0 compiler, with {\tt -xO5 -native} optimizations. \item PowerPC 750 (Apple G3), 266 MHz, Linux 2.2.15, g++ 2.95.2 compiler, with {\tt -O3 -funroll-\\loops -finline-functions} optimizations. \item IBM RS/6000 Power3, 200 MHz, AIX 3.4, IBM xlC compiler, with {\tt -O3 -qarch=pwr3 -qtune\\=pwr3 -qstrict} optimizations. \end{itemize} \noindent {\bf Note}: For some reason, GNU C++ compiler ({\tt g++}) has a terrible time optimizing the code for multiplication; it runs more than 15 times slower than the code compiled by Sun's CC compiler. \begin{table}[t] \begin{center} \label{timing_table} \begin{tabular}{|l|c|c|c|c|} \hline Operation & \begin{tabular}{c}Pentium II \\ 400MHz \\ Linux 2.2.16 \end{tabular} & \begin{tabular}{c}UltraSparc \\ 333 MHz \\ SunOS 5.7 \end{tabular} & \begin{tabular}{c}PowerPC 750 \\ 266 MHz \\ Linux 2.2.15 \end{tabular} & \begin{tabular}{c}Power3 \\ 200 MHz \\ AIX 3.4 \end{tabular} \\ \hline \multicolumn{5}{|l|}{{\em Quad-double}} \\ add & 0.583 & 0.580 & 0.868 & 0.710 \\ accurate add & 1.280 & 2.464 & 2.468 & 1.551 \\ mul & 1.965 & 1.153 & 1.744 & 1.131 \\ sloppy mul & 1.016 & 0.860 & 1.177 & 0.875 \\ div & 5.267 & 6.440 & 8.210 & 6.699 \\ sloppy div & 4.080 & 4.163 & 6.200 & 4.979 \\ sqrt & 23.646 & 15.003 & 21.415 & 16.174 \\ \hline \multicolumn{5}{|l|}{{\em MPFUN}}\\ add & 5.729 & 5.362 & --- & 4.651 \\ mul & 7.624 & 7.630 & --- & 5.837 \\ div & 10.102 & 10.164 & --- & 9.180 \\ \hline \end{tabular} \caption{Performance of some Quad-Double algorithms on several machines. All measurements are in microseconds. We include the performance of MPFUN~\cite{bai-mp} as a comparison. Note, we do not have the MPFUN measurements on the PowerPC, because we do not have a Fortran-90 compiler.} \end{center} \end{table} Most of the routines runs noticeably faster if implemented in C, it seems that C++ operator overloading has some overhead associated with it -- most notably excessive copying of quad-double numbers. This occurs because operator overloading does not account for where the result is going to be placed. For example, for the code \begin{quote}\begin{tt}c = a + b;\end{tt}\end{quote} the C++ compiler often emits the code equivalent to \begin{quote}\begin{tt} \begin{verbatim} qd_real temp; temp = operator+(a, b); // Addition operator=(c, temp); // Copy result to c \end{verbatim} \end{tt}\end{quote} In C, this copying does not happen, as one would just write \begin{quote}\begin{tt}\begin{verbatim} c_qd_add(a, b, c); // Put (a+b) into c \end{verbatim}\end{tt}\end{quote} where the addition routine knows where to put the result directly. This problem is somewhat alleviated by inlining, but not completely eliminated. There are techniques to avoid these kinds of copying~\cite{c++}, but they have their own overheads associated with them and is not practical for quad-double with only 32 bytes of data\footnote{These techniques are feasible, for larger data structures, such as for much higher precision arithmetics, where copying of data becomes time consuming.}. \section{Future Work} \label{sec:future} Currently, the basic routines do not have a full correctness proof. The correctness of these routines rely on the fact that renormalization step works; Priest proves that it does work if the input does not overlap by 51 bits and no three components overlap at a single bit. Whether such overlap can occur in any of these algorithm needs to be proved. There are improvements due in the remainder operator, which computes $a - \round(a/b) \times b$, given quad-double numbers $a$ and $b$. Currently, the library does the na\"\i ve method of just divide, round, multiply, and subtract. This leads to loss of accuracy when $a$ is large compared to $b$. Since this routine is used in argument reduction for exponentials, logarithms and trigonometrics, a fix is needed. A natural extention of this work is to extend the precision beyond quad-double. Algorithms for quad-double additions and multiplication can be extended to higher precisions, however, with more components, asymptotically faster algorithm due to S. Boldo and J. Shewchuk may be preferrable (i.e. Algorithm~\ref{accurate_add_alg}). One limitation these higher precision expansions have is the limited exponent range -- same as that of double. Hence the maximum precision is about 2000 bits (39 components), and this occurs only if the first component is near overflow and the last near underflow. \section{Acknowledgements} We thank Jonathan Shewchuk, Sylvie Boldo, and James Demmel for constructive discussions on various basic algorithms. In particular, the accurate version of addition algorithm is due to S. Boldo and J. Shewchuk. Problems with remainder was pointed out by J.Demmel. \appendix \newpage \section{Proof of Quad-Double Addition Error Bound (Lemma \ref{sum_lemma})} \label{proof_appendix} \noindent {\bf Lemma \ref{sum_lemma}}. \emph{The five-term expansion before the renormalization step in the quad-double addition algorithm shown in Figure \ref{qd_add_fig} errs from the true result by less than $\epsqd M$, where $M = \max(|a|, |b|)$.} \begin{proof} The proof is done by applying Lemmas \ref{two_sum_bound} and \ref{three_sum_bound} to each of {\sc Two-Sum}s and {\sc Three-Sum}s. Let $e_0, e_1, e_2, e_3, t_1, t_2, t_3, x_0, x_1, x_2, x_3, x_4, u, v, w, z, f_1, f_2$, and $f_3$ be as shown in Figure \ref{qd_add_proof_fig}. We need to show that the five-term expansion $(x_0, x_1, x_2, x_3, x_4)$ errs from the true result by less than $\epsqd M$, where $M = \max(|a_0|, |b_0|)$. Note that the only place that any error is introduced is in {\sc Three-Sum} 7 and {\sc Three-Sum} 8, where lower order terms $f_1, f_2,$ and $f_3$ are discarded. Hence it suffices to show $|f_1| + |f_2| + |f_3| \le \epsqd M$. \begin{figure}[h] \begin{center} \includegraphics{qd_add_proof.eps} \caption{\label{qd_add_proof_fig}Quad-Double + Quad-Double} \end{center} \end{figure} First note that $|a_1| \le \eps M$, $|a_2| \le \eps^2 M$,and $|a_3| \le \eps^3 M$, since the input expansions are assumed to be normalized. Similar inequalities applies for expansion $b$. Applying Lemma \ref{two_sum_bound} to {\sc Two-Sum}s 1, 2, 3, 4, we obtain \begin{displaymath} \begin{array}{rcl@{\qquad}rcl} |x_0| &\le& 2M & |e_0| &\le& 2\eps M\\ |t_1| &\le& 2\eps M & |e_1| &\le& 2\eps^2 M\\ |t_2| &\le& 2\eps^2 M & |e_2| &\le& 2\eps^3 M\\ |t_3| &\le& 2\eps^3 M & |e_3| &\le& 2\eps^4 M. \end{array} \end{displaymath} Now we can apply Lemma \ref{two_sum_bound} to {\sc Two-Sum} 5, to obtain $|x_1| \le 4\eps M$ and $|u| \le 4 \eps^2 M$. Then we apply Lemma \ref{three_sum_bound} to {\sc Three-Sum} 6 to obtain \begin{displaymath} \begin{array}{r@{\;\le\;}l} |x_2| & 16\eps^2 M \\ |w| & 32 \eps^3 M \\ |v| & 32 \eps^4 M. \end{array} \end{displaymath} Applying Lemma \ref{three_sum_bound} to {\sc Three-Sum} 7, we have \begin{displaymath} \begin{array}{r@{\;\le\;}l} |x_3| & 128\eps^3 M \\ |z| & 256 \eps^4 M \\ |f_1| & 256 \eps^5 M. \end{array} \end{displaymath} Finally we apply Lemma \ref{three_sum_bound} again to {\sc Three-Sum} 8 to get \begin{displaymath} \begin{array}{r@{\;\le\;}l} |x_4| & 1024\eps^4 M \\ |f_2| & 2048 \eps^5 M \\ |f_3| & 2048 \eps^6 M. \end{array} \end{displaymath} Thus we have \begin{displaymath} |f_1| + |f_2| + |f_3| \le 256 \eps^5 M + 2048 \eps^5 M + 2048 \eps^6 M \le 2305 \eps^5 M \le \epsqd M \end{displaymath} as claimed. \end{proof} \newpage \bibliographystyle{plain} \bibliography{qd} \end{document} qd-2.3.11/docs/three-sum-3.eps0000644000175000017500000001206111202062041016150 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: three-sum-3.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Sat Oct 7 22:58:56 2000 %%For: yozo@yozo.HIP.Berkeley.EDU (Yozo Hida) %%BoundingBox: 0 0 101 170 %%Magnification: 1.0000 %%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 end save newpath 0 170 moveto 0 0 lineto 101 0 lineto 101 170 lineto closepath clip newpath % Fill background color 0 0 moveto 101 0 lineto 101 170 lineto 0 170 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 4.0 168.0 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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc 7.500 slw % Ellipse n 975 1050 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 900 1050 m 1050 1050 l gs col0 s gr % Polyline n 975 975 m 975 1125 l gs col0 s gr % Ellipse n 975 1650 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 900 1650 m 1050 1650 l gs col0 s gr % Polyline n 975 1575 m 975 1725 l gs col0 s gr % Polyline gs clippath 945 915 m 1005 915 l 1005 764 l 975 884 l 945 764 l cp eoclip n 975 300 m 975 900 l gs col0 s gr gr % arrowhead n 945 764 m 975 884 l 1005 764 l 945 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 840 1080 m 840 1020 l 689 1020 l 809 1050 l 689 1080 l cp eoclip n 225 1050 m 825 1050 l gs col0 s gr gr % arrowhead n 689 1080 m 809 1050 l 689 1020 l 689 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 945 1515 m 1005 1515 l 1005 1364 l 975 1484 l 945 1364 l cp eoclip n 975 1200 m 975 1500 l gs col0 s gr gr % arrowhead n 945 1364 m 975 1484 l 1005 1364 l 945 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 840 1680 m 840 1620 l 689 1620 l 809 1650 l 689 1680 l cp eoclip n 225 1650 m 825 1650 l gs col0 s gr gr % arrowhead n 689 1680 m 809 1650 l 689 1620 l 689 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 945 2415 m 1005 2415 l 1005 2264 l 975 2384 l 945 2264 l cp eoclip n 975 1800 m 975 2400 l gs col0 s gr gr % arrowhead n 945 2264 m 975 2384 l 1005 2264 l 945 2264 l cp gs 0.00 setgray ef gr col0 s % Polyline [15 45] 45 sd n 525 600 m 1425 600 l 1425 2100 l 525 2100 l cp gs col0 s gr [] 0 sd /Times-Italic ff 180.00 scf sf 975 2550 m gs 1 -1 sc (r) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1050 2625 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 975 225 m gs 1 -1 sc (x) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1050 m gs 1 -1 sc (y) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1650 m gs 1 -1 sc (z) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/qd_add_qd_d.eps0000644000175000017500000002221111202062041016300 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: qd_add_qd_d.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Thu Aug 3 16:26:45 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 303 188 %%Magnification: 1.0000 %%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 end save newpath 0 188 moveto 0 0 lineto 303 0 lineto 303 188 lineto closepath clip newpath % Fill background color 0 0 moveto 303 0 lineto 303 188 lineto 0 188 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 4.0 186.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 900 900 m 1200 900 l 1200 1200 l 900 1200 l cp gs col0 s gr % Polyline n 975 1050 m 1125 1050 l gs col0 s gr % Polyline n 1050 975 m 1050 1125 l gs col0 s gr % Polyline n 1800 900 m 2100 900 l 2100 1200 l 1800 1200 l cp gs col0 s gr % Polyline n 1875 1050 m 2025 1050 l gs col0 s gr % Polyline n 1950 975 m 1950 1125 l gs col0 s gr % Polyline n 2700 900 m 3000 900 l 3000 1200 l 2700 1200 l cp gs col0 s gr % Polyline n 2775 1050 m 2925 1050 l gs col0 s gr % Polyline n 2850 975 m 2850 1125 l gs col0 s gr % Polyline n 3600 900 m 3900 900 l 3900 1200 l 3600 1200 l cp gs col0 s gr % Polyline n 3675 1050 m 3825 1050 l gs col0 s gr % Polyline n 3750 975 m 3750 1125 l gs col0 s gr % Polyline gs clippath 915 1080 m 915 1020 l 764 1020 l 884 1050 l 764 1080 l cp eoclip n 300 1050 m 900 1050 l gs col0 s gr gr % arrowhead n 764 1080 m 884 1050 l 764 1020 l 764 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1815 1080 m 1815 1020 l 1664 1020 l 1784 1050 l 1664 1080 l cp eoclip n 1200 1050 m 1800 1050 l gs col0 s gr gr % arrowhead n 1664 1080 m 1784 1050 l 1664 1020 l 1664 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2715 1080 m 2715 1020 l 2564 1020 l 2684 1050 l 2564 1080 l cp eoclip n 2100 1050 m 2700 1050 l gs col0 s gr gr % arrowhead n 2564 1080 m 2684 1050 l 2564 1020 l 2564 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3615 1080 m 3615 1020 l 3464 1020 l 3584 1050 l 3464 1080 l cp eoclip n 3000 1050 m 3600 1050 l gs col0 s gr gr % arrowhead n 3464 1080 m 3584 1050 l 3464 1020 l 3464 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1020 1815 m 1080 1815 l 1080 1664 l 1050 1784 l 1020 1664 l cp eoclip n 1050 1200 m 1050 1800 l gs col0 s gr gr % arrowhead n 1020 1664 m 1050 1784 l 1080 1664 l 1020 1664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1920 1815 m 1980 1815 l 1980 1664 l 1950 1784 l 1920 1664 l cp eoclip n 1950 1200 m 1950 1800 l gs col0 s gr gr % arrowhead n 1920 1664 m 1950 1784 l 1980 1664 l 1920 1664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2820 1815 m 2880 1815 l 2880 1664 l 2850 1784 l 2820 1664 l cp eoclip n 2850 1200 m 2850 1800 l gs col0 s gr gr % arrowhead n 2820 1664 m 2850 1784 l 2880 1664 l 2820 1664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3720 1815 m 3780 1815 l 3780 1664 l 3750 1784 l 3720 1664 l cp eoclip n 3750 1200 m 3750 1800 l gs col0 s gr gr % arrowhead n 3720 1664 m 3750 1784 l 3780 1664 l 3720 1664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4470 1815 m 4530 1815 l 4530 1664 l 4500 1784 l 4470 1664 l cp eoclip n 3900 1050 m 4500 1050 l 4500 1800 l gs col0 s gr gr % arrowhead n 4470 1664 m 4500 1784 l 4530 1664 l 4470 1664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1020 915 m 1080 915 l 1080 764 l 1050 884 l 1020 764 l cp eoclip n 1050 300 m 1050 900 l gs col0 s gr gr % arrowhead n 1020 764 m 1050 884 l 1080 764 l 1020 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1920 915 m 1980 915 l 1980 764 l 1950 884 l 1920 764 l cp eoclip n 1950 300 m 1950 900 l gs col0 s gr gr % arrowhead n 1920 764 m 1950 884 l 1980 764 l 1920 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2820 915 m 2880 915 l 2880 764 l 2850 884 l 2820 764 l cp eoclip n 2850 300 m 2850 900 l gs col0 s gr gr % arrowhead n 2820 764 m 2850 884 l 2880 764 l 2820 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3720 915 m 3780 915 l 3780 764 l 3750 884 l 3720 764 l cp eoclip n 3750 300 m 3750 900 l gs col0 s gr gr % arrowhead n 3720 764 m 3750 884 l 3780 764 l 3720 764 l cp gs 0.00 setgray ef gr col0 s % Polyline n 750 1800 m 4800 1800 l 4800 2100 l 750 2100 l cp gs col0 s gr % Polyline gs clippath 1320 2715 m 1380 2715 l 1380 2564 l 1350 2684 l 1320 2564 l cp eoclip n 1350 2100 m 1350 2700 l gs col0 s gr gr % arrowhead n 1320 2564 m 1350 2684 l 1380 2564 l 1320 2564 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2220 2715 m 2280 2715 l 2280 2564 l 2250 2684 l 2220 2564 l cp eoclip n 2250 2100 m 2250 2700 l gs col0 s gr gr % arrowhead n 2220 2564 m 2250 2684 l 2280 2564 l 2220 2564 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3120 2715 m 3180 2715 l 3180 2564 l 3150 2684 l 3120 2564 l cp eoclip n 3150 2100 m 3150 2700 l gs col0 s gr gr % arrowhead n 3120 2564 m 3150 2684 l 3180 2564 l 3120 2564 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4020 2715 m 4080 2715 l 4080 2564 l 4050 2684 l 4020 2564 l cp eoclip n 4050 2100 m 4050 2700 l gs col0 s gr gr % arrowhead n 4020 2564 m 4050 2684 l 4080 2564 l 4020 2564 l cp gs 0.00 setgray ef gr col0 s /Times-Italic ff 180.00 scf sf 150 1125 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 180.00 scf sf 2700 2025 m gs 1 -1 sc (Renormalization) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1050 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1125 300 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1950 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2025 300 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2850 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2925 300 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3750 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3825 300 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4050 2850 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4125 2925 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3150 2850 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3225 2925 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2325 2925 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1350 2850 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1425 2925 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2250 2850 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/six-three-sum.eps0000644000175000017500000002201011202062041016604 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: six-three-sum.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Wed Aug 2 16:27:26 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 293 374 %%Magnification: 1.0000 %%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 end save newpath 0 374 moveto 0 0 lineto 293 0 lineto 293 374 lineto closepath clip newpath % Fill background color 0 0 moveto 293 0 lineto 293 374 lineto 0 374 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 7.0 367.0 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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 2925 4500 m 2925 4650 l gs col0 s gr % Polyline n 2850 4575 m 3000 4575 l gs col0 s gr % Polyline n 3825 4350 m 3825 4500 l gs col0 s gr % Polyline n 3750 4425 m 3900 4425 l gs col0 s gr % Polyline n 3825 3600 m 3825 3750 l gs col0 s gr % Polyline n 3750 3675 m 3900 3675 l gs col0 s gr % Polyline n 2025 2400 m 2025 2550 l gs col0 s gr % Polyline n 1950 2475 m 2100 2475 l gs col0 s gr % Polyline n 2925 3000 m 2925 3150 l gs col0 s gr % Polyline n 2850 3075 m 3000 3075 l gs col0 s gr % Polyline n 825 1800 m 825 1950 l gs col0 s gr % Polyline n 750 1875 m 900 1875 l gs col0 s gr % Polyline n 825 600 m 825 750 l gs col0 s gr % Polyline n 750 675 m 900 675 l gs col0 s gr % Ellipse n 3825 3675 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 675 375 m 975 375 l 975 975 l 675 975 l cp gs col0 s gr % Polyline gs clippath 690 555 m 690 495 l 539 495 l 659 525 l 539 555 l cp eoclip n 75 525 m 675 525 l gs col0 s gr gr % arrowhead n 539 555 m 659 525 l 539 495 l 539 555 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 690 855 m 690 795 l 539 795 l 659 825 l 539 855 l cp eoclip n 75 825 m 675 825 l gs col0 s gr gr % arrowhead n 539 855 m 659 825 l 539 795 l 539 855 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 690 705 m 690 645 l 539 645 l 659 675 l 539 705 l cp eoclip n 75 675 m 675 675 l gs col0 s gr gr % arrowhead n 539 705 m 659 675 l 539 645 l 539 705 l cp gs 0.00 setgray ef gr col0 s % Polyline n 675 1575 m 975 1575 l 975 2175 l 675 2175 l cp gs col0 s gr % Polyline gs clippath 690 1755 m 690 1695 l 539 1695 l 659 1725 l 539 1755 l cp eoclip n 75 1725 m 675 1725 l gs col0 s gr gr % arrowhead n 539 1755 m 659 1725 l 539 1695 l 539 1755 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 690 1905 m 690 1845 l 539 1845 l 659 1875 l 539 1905 l cp eoclip n 75 1875 m 675 1875 l gs col0 s gr gr % arrowhead n 539 1905 m 659 1875 l 539 1845 l 539 1905 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 690 2055 m 690 1995 l 539 1995 l 659 2025 l 539 2055 l cp eoclip n 75 2025 m 675 2025 l gs col0 s gr gr % arrowhead n 539 2055 m 659 2025 l 539 1995 l 539 2055 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1890 2505 m 1890 2445 l 1739 2445 l 1859 2475 l 1739 2505 l cp eoclip n 825 2175 m 825 2475 l 1875 2475 l gs col0 s gr gr % arrowhead n 1739 2505 m 1859 2475 l 1739 2445 l 1739 2505 l cp gs 0.00 setgray ef gr col0 s % Polyline n 1875 2325 m 2175 2325 l 2175 2625 l 1875 2625 l cp gs col0 s gr % Polyline n 2775 2925 m 3075 2925 l 3075 3225 l 2775 3225 l cp gs col0 s gr % Polyline gs clippath 3690 3705 m 3690 3645 l 3539 3645 l 3659 3675 l 3539 3705 l cp eoclip n 975 2025 m 1275 2025 l 1275 3675 l 3675 3675 l gs col0 s gr gr % arrowhead n 3539 3705 m 3659 3675 l 3539 3645 l 3539 3705 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2790 3105 m 2790 3045 l 2639 3045 l 2759 3075 l 2639 3105 l cp eoclip n 975 1725 m 1575 1725 l 1575 3075 l 2775 3075 l gs col0 s gr gr % arrowhead n 2639 3105 m 2759 3075 l 2639 3045 l 2639 3105 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 2340 m 2055 2340 l 2055 2189 l 2025 2309 l 1995 2189 l cp eoclip n 825 975 m 825 1275 l 2025 1275 l 2025 2325 l gs col0 s gr gr % arrowhead n 1995 2189 m 2025 2309 l 2055 2189 l 1995 2189 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 3540 m 3855 3540 l 3855 3389 l 3825 3509 l 3795 3389 l cp eoclip n 975 825 m 3825 825 l 3825 3525 l gs col0 s gr gr % arrowhead n 3795 3389 m 3825 3509 l 3855 3389 l 3795 3389 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 2940 m 2955 2940 l 2955 2789 l 2925 2909 l 2895 2789 l cp eoclip n 975 525 m 2925 525 l 2925 2925 l gs col0 s gr gr % arrowhead n 2895 2789 m 2925 2909 l 2955 2789 l 2895 2789 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2790 4605 m 2790 4545 l 2639 4545 l 2759 4575 l 2639 4605 l cp eoclip n 2175 2475 m 2475 2475 l 2475 4575 l 2775 4575 l gs col0 s gr gr % arrowhead n 2639 4605 m 2759 4575 l 2639 4545 l 2639 4605 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 4440 m 2955 4440 l 2955 4289 l 2925 4409 l 2895 4289 l cp eoclip n 2925 3225 m 2925 4425 l gs col0 s gr gr % arrowhead n 2895 4289 m 2925 4409 l 2955 4289 l 2895 4289 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3690 4305 m 3690 4245 l 3539 4245 l 3659 4275 l 3539 4305 l cp eoclip n 3075 3075 m 3375 3075 l 3375 4275 l 3675 4275 l gs col0 s gr gr % arrowhead n 3539 4305 m 3659 4275 l 3539 4245 l 3539 4305 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2775 4425 m 3075 4425 l 3075 4725 l 2775 4725 l cp gs col0 s gr % Polyline gs clippath 3690 4605 m 3690 4545 l 3539 4545 l 3659 4575 l 3539 4605 l cp eoclip n 3075 4575 m 3675 4575 l gs col0 s gr gr % arrowhead n 3539 4605 m 3659 4575 l 3539 4545 l 3539 4605 l cp gs 0.00 setgray ef gr col0 s % Polyline n 3675 4125 m 3975 4125 l 3975 4725 l 3675 4725 l cp gs col0 s gr % Polyline gs clippath 3795 4140 m 3855 4140 l 3855 3989 l 3825 4109 l 3795 3989 l cp eoclip n 3825 3825 m 3825 4125 l gs col0 s gr gr % arrowhead n 3795 3989 m 3825 4109 l 3855 3989 l 3795 3989 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 5940 m 2055 5940 l 2055 5789 l 2025 5909 l 1995 5789 l cp eoclip n 2025 2625 m 2025 5925 l gs col0 s gr gr % arrowhead n 1995 5789 m 2025 5909 l 2055 5789 l 1995 5789 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4590 5055 m 4590 4995 l 4439 4995 l 4559 5025 l 4439 5055 l cp eoclip n 2925 4725 m 2925 5025 l 4575 5025 l gs col0 s gr gr % arrowhead n 4439 5055 m 4559 5025 l 4439 4995 l 4439 5055 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4590 5355 m 4590 5295 l 4439 5295 l 4559 5325 l 4439 5355 l cp eoclip n 3825 4725 m 3825 5325 l 4575 5325 l gs col0 s gr gr % arrowhead n 4439 5355 m 4559 5325 l 4439 5295 l 4439 5355 l cp gs 0.00 setgray ef gr col0 s % Polyline [15 45] 45 sd n 375 75 m 4275 75 l 4275 5625 l 375 5625 l cp gs col0 s gr [] 0 sd $F2psEnd rs qd-2.3.11/docs/nine-two-sum.eps0000644000175000017500000002424311202062041016446 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: nine-two-sum.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Wed Aug 2 16:56:44 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 374 320 %%Magnification: 1.0000 %%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 end save newpath 0 320 moveto 0 0 lineto 374 0 lineto 374 320 lineto closepath clip newpath % Fill background color 0 0 moveto 374 0 lineto 374 320 lineto 0 320 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 7.0 313.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 675 675 m 975 675 l 975 975 l 675 975 l cp gs col0 s gr % Polyline n 1575 1275 m 1875 1275 l 1875 1575 l 1575 1575 l cp gs col0 s gr % Polyline gs clippath 690 855 m 690 795 l 539 795 l 659 825 l 539 855 l cp eoclip n 75 825 m 675 825 l gs col0 s gr gr % arrowhead n 539 855 m 659 825 l 539 795 l 539 855 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 795 690 m 855 690 l 855 539 l 825 659 l 795 539 l cp eoclip n 825 75 m 825 675 l gs col0 s gr gr % arrowhead n 795 539 m 825 659 l 855 539 l 795 539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1695 1290 m 1755 1290 l 1755 1139 l 1725 1259 l 1695 1139 l cp eoclip n 1725 75 m 1725 1275 l gs col0 s gr gr % arrowhead n 1695 1139 m 1725 1259 l 1755 1139 l 1695 1139 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1590 1455 m 1590 1395 l 1439 1395 l 1559 1425 l 1439 1455 l cp eoclip n 75 1425 m 1575 1425 l gs col0 s gr gr % arrowhead n 1439 1455 m 1559 1425 l 1439 1395 l 1439 1455 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2040 2655 m 2040 2595 l 1889 2595 l 2009 2625 l 1889 2655 l cp eoclip n 825 975 m 825 2625 l 2025 2625 l gs col0 s gr gr % arrowhead n 1889 2655 m 2009 2625 l 1889 2595 l 1889 2655 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2040 2355 m 2040 2295 l 1889 2295 l 2009 2325 l 1889 2355 l cp eoclip n 975 825 m 1275 825 l 1275 2325 l 2025 2325 l gs col0 s gr gr % arrowhead n 1889 2355 m 2009 2325 l 1889 2295 l 1889 2355 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2145 2190 m 2205 2190 l 2205 2039 l 2175 2159 l 2145 2039 l cp eoclip n 1725 1575 m 1725 1875 l 2175 1875 l 2175 2175 l gs col0 s gr gr % arrowhead n 2145 2039 m 2175 2159 l 2205 2039 l 2145 2039 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2445 2190 m 2505 2190 l 2505 2039 l 2475 2159 l 2445 2039 l cp eoclip n 1875 1425 m 2475 1425 l 2475 2175 l gs col0 s gr gr % arrowhead n 2445 2039 m 2475 2159 l 2505 2039 l 2445 2039 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2025 2175 m 2625 2175 l 2625 2775 l 2025 2775 l cp gs col0 s gr % Polyline n 3375 675 m 3675 675 l 3675 975 l 3375 975 l cp gs col0 s gr % Polyline n 4275 1275 m 4575 1275 l 4575 1575 l 4275 1575 l cp gs col0 s gr % Polyline gs clippath 3495 690 m 3555 690 l 3555 539 l 3525 659 l 3495 539 l cp eoclip n 3525 75 m 3525 675 l gs col0 s gr gr % arrowhead n 3495 539 m 3525 659 l 3555 539 l 3495 539 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4395 1290 m 4455 1290 l 4455 1139 l 4425 1259 l 4395 1139 l cp eoclip n 4425 75 m 4425 1275 l gs col0 s gr gr % arrowhead n 4395 1139 m 4425 1259 l 4455 1139 l 4395 1139 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4740 2655 m 4740 2595 l 4589 2595 l 4709 2625 l 4589 2655 l cp eoclip n 3525 975 m 3525 2625 l 4725 2625 l gs col0 s gr gr % arrowhead n 4589 2655 m 4709 2625 l 4589 2595 l 4589 2655 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4740 2355 m 4740 2295 l 4589 2295 l 4709 2325 l 4589 2355 l cp eoclip n 3675 825 m 3975 825 l 3975 2325 l 4725 2325 l gs col0 s gr gr % arrowhead n 4589 2355 m 4709 2325 l 4589 2295 l 4589 2355 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4845 2190 m 4905 2190 l 4905 2039 l 4875 2159 l 4845 2039 l cp eoclip n 4425 1575 m 4425 1875 l 4875 1875 l 4875 2175 l gs col0 s gr gr % arrowhead n 4845 2039 m 4875 2159 l 4905 2039 l 4845 2039 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5145 2190 m 5205 2190 l 5205 2039 l 5175 2159 l 5145 2039 l cp eoclip n 4575 1425 m 5175 1425 l 5175 2175 l gs col0 s gr gr % arrowhead n 5145 2039 m 5175 2159 l 5205 2039 l 5145 2039 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4725 2175 m 5325 2175 l 5325 2775 l 4725 2775 l cp gs col0 s gr % Polyline gs clippath 3390 855 m 3390 795 l 3239 795 l 3359 825 l 3239 855 l cp eoclip n 3075 75 m 3075 825 l 3375 825 l gs col0 s gr gr % arrowhead n 3239 855 m 3359 825 l 3239 795 l 3239 855 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4290 1455 m 4290 1395 l 4139 1395 l 4259 1425 l 4139 1455 l cp eoclip n 2775 75 m 2775 1425 l 4275 1425 l gs col0 s gr gr % arrowhead n 4139 1455 m 4259 1425 l 4139 1395 l 4139 1455 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4425 1350 m 4425 1500 l gs col0 s gr % Polyline n 4350 1425 m 4500 1425 l gs col0 s gr % Polyline n 3525 750 m 3525 900 l gs col0 s gr % Polyline n 3450 825 m 3600 825 l gs col0 s gr % Polyline n 1725 1350 m 1725 1500 l gs col0 s gr % Polyline n 1650 1425 m 1800 1425 l gs col0 s gr % Polyline n 825 750 m 825 900 l gs col0 s gr % Polyline n 750 825 m 900 825 l gs col0 s gr % Polyline n 2325 2400 m 2325 2550 l gs col0 s gr % Polyline n 2250 2475 m 2400 2475 l gs col0 s gr % Polyline n 5025 2400 m 5025 2550 l gs col0 s gr % Polyline n 4950 2475 m 5100 2475 l gs col0 s gr % Polyline n 5025 3300 m 5025 3450 l gs col0 s gr % Polyline n 4950 3375 m 5100 3375 l gs col0 s gr % Polyline n 5025 4050 m 5025 4200 l gs col0 s gr % Polyline n 4950 4125 m 5100 4125 l gs col0 s gr % Polyline gs clippath 4740 3255 m 4740 3195 l 4589 3195 l 4709 3225 l 4589 3255 l cp eoclip n 2175 2775 m 2175 3225 l 4725 3225 l gs col0 s gr gr % arrowhead n 4589 3255 m 4709 3225 l 4589 3195 l 4589 3255 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4740 3555 m 4740 3495 l 4589 3495 l 4709 3525 l 4589 3555 l cp eoclip n 2475 2775 m 2475 3525 l 4725 3525 l gs col0 s gr gr % arrowhead n 4589 3555 m 4709 3525 l 4589 3495 l 4589 3555 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4725 3075 m 5325 3075 l 5325 3675 l 4725 3675 l cp gs col0 s gr % Polyline gs clippath 4845 3090 m 4905 3090 l 4905 2939 l 4875 3059 l 4845 2939 l cp eoclip n 4875 2775 m 4875 3075 l gs col0 s gr gr % arrowhead n 4845 2939 m 4875 3059 l 4905 2939 l 4845 2939 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5145 3090 m 5205 3090 l 5205 2939 l 5175 3059 l 5145 2939 l cp eoclip n 5175 2775 m 5175 3075 l gs col0 s gr gr % arrowhead n 5145 2939 m 5175 3059 l 5205 2939 l 5145 2939 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4725 3975 m 5325 3975 l 5325 4275 l 4725 4275 l cp gs col0 s gr % Polyline gs clippath 4845 3990 m 4905 3990 l 4905 3839 l 4875 3959 l 4845 3839 l cp eoclip n 4875 3675 m 4875 3975 l gs col0 s gr gr % arrowhead n 4845 3839 m 4875 3959 l 4905 3839 l 4845 3839 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5145 3990 m 5205 3990 l 5205 3839 l 5175 3959 l 5145 3839 l cp eoclip n 5175 3675 m 5175 3975 l gs col0 s gr gr % arrowhead n 5145 3839 m 5175 3959 l 5205 3839 l 5145 3839 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4740 4155 m 4740 4095 l 4589 4095 l 4709 4125 l 4589 4155 l cp eoclip n 75 4125 m 4725 4125 l gs col0 s gr gr % arrowhead n 4589 4155 m 4709 4125 l 4589 4095 l 4589 4155 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4845 5040 m 4905 5040 l 4905 4889 l 4875 5009 l 4845 4889 l cp eoclip n 4875 4275 m 4875 5025 l gs col0 s gr gr % arrowhead n 4845 4889 m 4875 5009 l 4905 4889 l 4845 4889 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5940 4605 m 5940 4545 l 5789 4545 l 5909 4575 l 5789 4605 l cp eoclip n 5175 4275 m 5175 4575 l 5925 4575 l gs col0 s gr gr % arrowhead n 5789 4605 m 5909 4575 l 5789 4545 l 5789 4605 l cp gs 0.00 setgray ef gr col0 s % Polyline [15 45] 45 sd n 375 375 m 5625 375 l 5625 4725 l 375 4725 l cp gs col0 s gr [] 0 sd $F2psEnd rs qd-2.3.11/docs/three-sum-2.eps0000644000175000017500000001377111202062041016160 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: three-sum-2.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Thu Oct 12 10:29:57 2000 %%For: xiaoye@scg1 (Sherry Li) %%BoundingBox: 0 0 144 150 %%Magnification: 1.0000 %%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 end save newpath 0 150 moveto 0 0 lineto 144 0 lineto 144 150 lineto closepath clip newpath -6.0 158.0 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 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 825 900 m 1125 900 l 1125 1200 l 825 1200 l cp gs col0 s gr % Polyline n 975 975 m 975 1125 l gs col0 s gr % Polyline n 900 1050 m 1050 1050 l gs col0 s gr % Polyline n 825 1500 m 1125 1500 l 1125 1800 l 825 1800 l cp gs col0 s gr % Polyline n 975 1575 m 975 1725 l gs col0 s gr % Polyline n 900 1650 m 1050 1650 l gs col0 s gr % Ellipse n 1575 1650 150 150 0 360 DrawEllipse gs col0 s gr % Polyline n 1500 1650 m 1650 1650 l gs col0 s gr % Polyline n 1575 1575 m 1575 1725 l gs col0 s gr /Times-Italic ff 180.00 scf sf 975 2550 m gs 1 -1 sc (r) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1050 2625 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2400 1650 m gs 1 -1 sc (r) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2475 1725 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline gs clippath 945 1515 m 1005 1515 l 1005 1364 l 975 1484 l 945 1364 l cp eoclip n 975 1200 m 975 1500 l gs col0 s gr gr % arrowhead n 945 1364 m 975 1484 l 1005 1364 l 945 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1545 1515 m 1605 1515 l 1605 1364 l 1575 1484 l 1545 1364 l cp eoclip n 1125 1050 m 1575 1050 l 1575 1500 l gs col0 s gr gr % arrowhead n 1545 1364 m 1575 1484 l 1605 1364 l 1545 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1440 1680 m 1440 1620 l 1289 1620 l 1409 1650 l 1289 1680 l cp eoclip n 1125 1650 m 1425 1650 l gs col0 s gr gr % arrowhead n 1289 1680 m 1409 1650 l 1289 1620 l 1289 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 945 2415 m 1005 2415 l 1005 2264 l 975 2384 l 945 2264 l cp eoclip n 975 1800 m 975 2400 l gs col0 s gr gr % arrowhead n 945 2264 m 975 2384 l 1005 2264 l 945 2264 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2340 1680 m 2340 1620 l 2189 1620 l 2309 1650 l 2189 1680 l cp eoclip n 1725 1650 m 2325 1650 l gs col0 s gr gr % arrowhead n 2189 1680 m 2309 1650 l 2189 1620 l 2189 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 945 915 m 1005 915 l 1005 764 l 975 884 l 945 764 l cp eoclip n 975 300 m 975 900 l gs col0 s gr gr % arrowhead n 945 764 m 975 884 l 1005 764 l 945 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 840 1080 m 840 1020 l 689 1020 l 809 1050 l 689 1080 l cp eoclip n 225 1050 m 825 1050 l gs col0 s gr gr % arrowhead n 689 1080 m 809 1050 l 689 1020 l 689 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 840 1680 m 840 1620 l 689 1620 l 809 1650 l 689 1680 l cp eoclip n 225 1650 m 825 1650 l gs col0 s gr gr % arrowhead n 689 1680 m 809 1650 l 689 1620 l 689 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline [15 45] 45 sd n 525 600 m 2025 600 l 2025 2100 l 525 2100 l cp gs col0 s gr [] 0 sd /Times-Italic ff 180.00 scf sf 975 225 m gs 1 -1 sc (x) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1050 m gs 1 -1 sc (y) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1650 m gs 1 -1 sc (z) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/quick-two-sum.eps0000644000175000017500000001035111202062041016624 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: quick-two-sum.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Tue Aug 1 15:41:53 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 130 130 %%Magnification: 1.0000 %%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 end save newpath 0 130 moveto 0 0 lineto 130 0 lineto 130 130 lineto closepath clip newpath % Fill background color 0 0 moveto 130 0 lineto 130 130 lineto 0 130 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 9.0 123.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw gs clippath 870 840 m 930 840 l 930 689 l 900 809 l 870 689 l cp eoclip n 900 225 m 900 825 l gs col0 s gr gr % arrowhead n 870 689 m 900 809 l 930 689 l 870 689 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 765 1005 m 765 945 l 614 945 l 734 975 l 614 1005 l cp eoclip n 150 975 m 750 975 l gs col0 s gr gr % arrowhead n 614 1005 m 734 975 l 614 945 l 614 1005 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 870 1740 m 930 1740 l 930 1589 l 900 1709 l 870 1589 l cp eoclip n 900 1125 m 900 1725 l gs col0 s gr gr % arrowhead n 870 1589 m 900 1709 l 930 1589 l 870 1589 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1665 1005 m 1665 945 l 1514 945 l 1634 975 l 1514 1005 l cp eoclip n 1050 975 m 1650 975 l gs col0 s gr gr % arrowhead n 1514 1005 m 1634 975 l 1514 945 l 1514 1005 l cp gs 0.00 setgray ef gr col0 s /Times-Italic ff 180.00 scf sf 900 150 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 75 1050 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 900 1875 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1800 1050 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline n 900 1125 m 1050 975 l 900 825 l 750 975 l cp gs col0 s gr % Polyline n 825 975 m 975 975 l gs col0 s gr % Polyline n 900 900 m 900 1050 l gs col0 s gr $F2psEnd rs qd-2.3.11/docs/three-sum-2.fig0000644000175000017500000000351611202062041016132 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 825 900 1125 1200 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 825 900 1125 900 1125 1200 825 1200 825 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 975 975 975 1125 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 900 1050 1050 1050 -6 6 825 1500 1125 1800 2 2 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 825 1500 1125 1500 1125 1800 825 1800 825 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 975 1575 975 1725 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 0 0 2 900 1650 1050 1650 -6 6 1425 1500 1725 1800 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 1575 1650 150 150 1575 1650 1725 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1500 1650 1650 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 1575 1575 1575 1725 -6 6 900 2400 1125 2625 4 1 0 50 0 1 12 0.0000 4 90 75 975 2550 r\001 4 1 0 50 0 0 7 0.0000 4 60 45 1050 2625 0\001 -6 6 2325 1500 2550 1725 4 1 0 50 0 1 12 0.0000 4 90 75 2400 1650 r\001 4 1 0 50 0 0 7 0.0000 4 60 45 2475 1725 1\001 -6 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 1200 975 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 3 1 1 1.00 60.00 120.00 1125 1050 1575 1050 1575 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1125 1650 1425 1650 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 1800 975 2400 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1725 1650 2325 1650 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 300 975 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 225 1050 825 1050 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 225 1650 825 1650 2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 525 600 2025 600 2025 2100 525 2100 525 600 4 1 0 50 0 1 12 0.0000 4 90 75 975 225 x\001 4 1 0 50 0 1 12 0.0000 4 135 75 150 1050 y\001 4 1 0 50 0 1 12 0.0000 4 90 75 150 1650 z\001 qd-2.3.11/docs/three-sum.eps0000644000175000017500000001524211202062041016014 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: three-sum.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Sat Oct 7 23:13:22 2000 %%For: yozo@yozo.HIP.Berkeley.EDU (Yozo Hida) %%BoundingBox: 0 0 187 197 %%Magnification: 1.0000 %%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 end save newpath 0 197 moveto 0 0 lineto 187 0 lineto 187 197 lineto closepath clip newpath % Fill background color 0 0 moveto 187 0 lineto 187 197 lineto 0 197 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 4.0 195.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 900 900 m 1200 900 l 1200 1200 l 900 1200 l cp gs col0 s gr % Polyline n 975 1050 m 1125 1050 l gs col0 s gr % Polyline n 1050 975 m 1050 1125 l gs col0 s gr % Polyline n 900 1500 m 1200 1500 l 1200 1800 l 900 1800 l cp gs col0 s gr % Polyline n 975 1650 m 1125 1650 l gs col0 s gr % Polyline n 1050 1575 m 1050 1725 l gs col0 s gr % Polyline n 1500 1500 m 1800 1500 l 1800 1800 l 1500 1800 l cp gs col0 s gr % Polyline n 1575 1650 m 1725 1650 l gs col0 s gr % Polyline n 1650 1575 m 1650 1725 l gs col0 s gr /Times-Italic ff 180.00 scf sf 2775 1950 m gs 1 -1 sc (r) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2850 2025 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2775 2250 m gs 1 -1 sc (r) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2850 2325 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline gs clippath 1020 915 m 1080 915 l 1080 764 l 1050 884 l 1020 764 l cp eoclip n 1050 300 m 1050 900 l gs col0 s gr gr % arrowhead n 1020 764 m 1050 884 l 1080 764 l 1020 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 915 1080 m 915 1020 l 764 1020 l 884 1050 l 764 1080 l cp eoclip n 300 1050 m 900 1050 l gs col0 s gr gr % arrowhead n 764 1080 m 884 1050 l 764 1020 l 764 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1020 1515 m 1080 1515 l 1080 1364 l 1050 1484 l 1020 1364 l cp eoclip n 1050 1200 m 1050 1500 l gs col0 s gr gr % arrowhead n 1020 1364 m 1050 1484 l 1080 1364 l 1020 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1020 2865 m 1080 2865 l 1080 2714 l 1050 2834 l 1020 2714 l cp eoclip n 1050 1800 m 1050 2850 l gs col0 s gr gr % arrowhead n 1020 2714 m 1050 2834 l 1080 2714 l 1020 2714 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1515 1680 m 1515 1620 l 1364 1620 l 1484 1650 l 1364 1680 l cp eoclip n 1200 1650 m 1500 1650 l gs col0 s gr gr % arrowhead n 1364 1680 m 1484 1650 l 1364 1620 l 1364 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1620 1515 m 1680 1515 l 1680 1364 l 1650 1484 l 1620 1364 l cp eoclip n 1200 1050 m 1650 1050 l 1650 1500 l gs col0 s gr gr % arrowhead n 1620 1364 m 1650 1484 l 1680 1364 l 1620 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 915 1680 m 915 1620 l 764 1620 l 884 1650 l 764 1680 l cp eoclip n 300 1650 m 900 1650 l gs col0 s gr gr % arrowhead n 764 1680 m 884 1650 l 764 1620 l 764 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline [15 45] 45 sd n 600 600 m 2400 600 l 2400 2550 l 600 2550 l cp gs col0 s gr [] 0 sd % Polyline gs clippath 2715 2280 m 2715 2220 l 2564 2220 l 2684 2250 l 2564 2280 l cp eoclip n 1800 1650 m 2100 1650 l 2100 2250 l 2700 2250 l gs col0 s gr gr % arrowhead n 2564 2280 m 2684 2250 l 2564 2220 l 2564 2280 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2715 1980 m 2715 1920 l 2564 1920 l 2684 1950 l 2564 1980 l cp eoclip n 1650 1800 m 1650 1950 l 2700 1950 l gs col0 s gr gr % arrowhead n 2564 1980 m 2684 1950 l 2564 1920 l 2564 1980 l cp gs 0.00 setgray ef gr col0 s /Times-Italic ff 180.00 scf sf 150 1125 m gs 1 -1 sc (y) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1050 225 m gs 1 -1 sc (x) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1725 m gs 1 -1 sc (z) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 135.00 scf sf 900 1350 m gs 1 -1 sc (u) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 135.00 scf sf 1350 975 m gs 1 -1 sc (v) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 135.00 scf sf 1350 1800 m gs 1 -1 sc (w) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1050 3000 m gs 1 -1 sc (r) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1125 3075 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/normal_sum_prod.fig0000644000175000017500000000173111202062041017257 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 75 75 2625 1575 6 675 675 975 975 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 825 825 150 150 825 825 975 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 750 825 900 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 825 750 825 900 -6 6 2325 675 2625 975 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 2475 825 150 150 2475 825 2625 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2400 750 2550 900 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 2550 750 2400 900 -6 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 825 75 825 675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 75 825 675 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 825 975 825 1575 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2475 75 2475 675 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1725 825 2325 825 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 2475 975 2475 1575 -6 qd-2.3.11/docs/three-sum-3.fig0000644000175000017500000000240311202062041016125 0ustar prudhommprudhomm#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 6 75 75 1425 2625 6 225 300 1425 2400 6 825 900 1125 1200 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 975 1050 150 150 975 1050 1125 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 1050 1050 1050 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 975 975 975 1125 -6 6 825 1500 1125 1800 1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 975 1650 150 150 975 1650 1125 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 900 1650 1050 1650 2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2 975 1575 975 1725 -6 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 300 975 900 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 225 1050 825 1050 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 1200 975 1500 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 225 1650 825 1650 2 1 0 1 0 7 50 0 -1 3.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 975 1800 975 2400 2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5 525 600 1425 600 1425 2100 525 2100 525 600 -6 6 900 2400 1125 2625 4 1 0 50 0 1 12 0.0000 4 90 60 975 2550 r\001 4 1 0 50 0 0 7 0.0000 4 75 60 1050 2625 0\001 -6 4 1 0 50 0 1 12 0.0000 4 90 90 975 225 x\001 4 1 0 50 0 1 12 0.0000 4 135 90 150 1050 y\001 4 1 0 50 0 1 12 0.0000 4 90 75 150 1650 z\001 -6 qd-2.3.11/docs/qd_add.eps0000644000175000017500000003216011202062041015315 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: qd_add.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Thu Aug 3 16:22:01 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 317 354 %%Magnification: 1.0000 %%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 end save newpath 0 354 moveto 0 0 lineto 317 0 lineto 317 354 lineto closepath clip newpath % Fill background color 0 0 moveto 317 0 lineto 317 354 lineto 0 354 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 4.0 352.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 975 900 m 1275 900 l 1275 1200 l 975 1200 l cp gs col0 s gr % Polyline n 1050 1050 m 1200 1050 l gs col0 s gr % Polyline n 1125 975 m 1125 1125 l gs col0 s gr % Polyline n 1875 1500 m 2175 1500 l 2175 1800 l 1875 1800 l cp gs col0 s gr % Polyline n 1950 1650 m 2100 1650 l gs col0 s gr % Polyline n 2025 1575 m 2025 1725 l gs col0 s gr % Polyline n 2775 2100 m 3075 2100 l 3075 2400 l 2775 2400 l cp gs col0 s gr % Polyline n 2850 2250 m 3000 2250 l gs col0 s gr % Polyline n 2925 2175 m 2925 2325 l gs col0 s gr % Polyline n 3675 2700 m 3975 2700 l 3975 3000 l 3675 3000 l cp gs col0 s gr % Polyline n 3750 2850 m 3900 2850 l gs col0 s gr % Polyline n 3825 2775 m 3825 2925 l gs col0 s gr % Polyline n 1875 3900 m 2175 3900 l 2175 4200 l 1875 4200 l cp gs col0 s gr % Polyline n 1950 4050 m 2100 4050 l gs col0 s gr % Polyline n 2025 3975 m 2025 4125 l gs col0 s gr % Polyline gs clippath 990 1080 m 990 1020 l 839 1020 l 959 1050 l 839 1080 l cp eoclip n 375 1050 m 975 1050 l gs col0 s gr gr % arrowhead n 839 1080 m 959 1050 l 839 1020 l 839 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1890 1680 m 1890 1620 l 1739 1620 l 1859 1650 l 1739 1680 l cp eoclip n 375 1650 m 1875 1650 l gs col0 s gr gr % arrowhead n 1739 1680 m 1859 1650 l 1739 1620 l 1739 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2790 2280 m 2790 2220 l 2639 2220 l 2759 2250 l 2639 2280 l cp eoclip n 375 2250 m 2775 2250 l gs col0 s gr gr % arrowhead n 2639 2280 m 2759 2250 l 2639 2220 l 2639 2280 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3690 2880 m 3690 2820 l 3539 2820 l 3659 2850 l 3539 2880 l cp eoclip n 375 2850 m 3675 2850 l gs col0 s gr gr % arrowhead n 3539 2880 m 3659 2850 l 3539 2820 l 3539 2880 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 3915 m 2055 3915 l 2055 3764 l 2025 3884 l 1995 3764 l cp eoclip n 2025 1800 m 2025 3900 l gs col0 s gr gr % arrowhead n 1995 3764 m 2025 3884 l 2055 3764 l 1995 3764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 3615 m 2955 3615 l 2955 3464 l 2925 3584 l 2895 3464 l cp eoclip n 2925 2400 m 2925 3600 l gs col0 s gr gr % arrowhead n 2895 3464 m 2925 3584 l 2955 3464 l 2895 3464 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1890 4080 m 1890 4020 l 1739 4020 l 1859 4050 l 1739 4080 l cp eoclip n 1275 1050 m 1575 1050 l 1575 4050 l 1875 4050 l gs col0 s gr gr % arrowhead n 1739 4080 m 1859 4050 l 1739 4020 l 1739 4080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2790 3780 m 2790 3720 l 2639 3720 l 2759 3750 l 2639 3780 l cp eoclip n 2175 1650 m 2475 1650 l 2475 3750 l 2775 3750 l gs col0 s gr gr % arrowhead n 2639 3780 m 2759 3750 l 2639 3720 l 2639 3780 l cp gs 0.00 setgray ef gr col0 s % Polyline n 3675 3300 m 3975 3300 l 3975 3900 l 3675 3900 l cp gs col0 s gr % Polyline gs clippath 2790 4080 m 2790 4020 l 2639 4020 l 2759 4050 l 2639 4080 l cp eoclip n 2175 4050 m 2775 4050 l gs col0 s gr gr % arrowhead n 2639 4080 m 2759 4050 l 2639 4020 l 2639 4080 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2775 3600 m 3075 3600 l 3075 4200 l 2775 4200 l cp gs col0 s gr % Polyline gs clippath 3690 3780 m 3690 3720 l 3539 3720 l 3659 3750 l 3539 3780 l cp eoclip n 3075 3750 m 3675 3750 l gs col0 s gr gr % arrowhead n 3539 3780 m 3659 3750 l 3539 3720 l 3539 3780 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3690 3480 m 3690 3420 l 3539 3420 l 3659 3450 l 3539 3480 l cp eoclip n 3075 2250 m 3375 2250 l 3375 3450 l 3675 3450 l gs col0 s gr gr % arrowhead n 3539 3480 m 3659 3450 l 3539 3420 l 3539 3480 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 3315 m 3855 3315 l 3855 3164 l 3825 3284 l 3795 3164 l cp eoclip n 3825 3000 m 3825 3300 l gs col0 s gr gr % arrowhead n 3795 3164 m 3825 3284 l 3855 3164 l 3795 3164 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4575 3600 m 4875 3600 l 4875 4200 l 4575 4200 l cp gs col0 s gr % Polyline gs clippath 4590 3780 m 4590 3720 l 4439 3720 l 4559 3750 l 4439 3780 l cp eoclip n 3975 3750 m 4575 3750 l gs col0 s gr gr % arrowhead n 4439 3780 m 4559 3750 l 4439 3720 l 4439 3780 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4590 4080 m 4590 4020 l 4439 4020 l 4559 4050 l 4439 4080 l cp eoclip n 3075 4050 m 4575 4050 l gs col0 s gr gr % arrowhead n 4439 4080 m 4559 4050 l 4439 4020 l 4439 4080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4695 3615 m 4755 3615 l 4755 3464 l 4725 3584 l 4695 3464 l cp eoclip n 3975 2850 m 4725 2850 l 4725 3600 l gs col0 s gr gr % arrowhead n 4695 3464 m 4725 3584 l 4755 3464 l 4695 3464 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1095 4665 m 1155 4665 l 1155 4514 l 1125 4634 l 1095 4514 l cp eoclip n 1125 1200 m 1125 4650 l gs col0 s gr gr % arrowhead n 1095 4514 m 1125 4634 l 1155 4514 l 1095 4514 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 4665 m 2055 4665 l 2055 4514 l 2025 4634 l 1995 4514 l cp eoclip n 2025 4200 m 2025 4650 l gs col0 s gr gr % arrowhead n 1995 4514 m 2025 4634 l 2055 4514 l 1995 4514 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 4665 m 2955 4665 l 2955 4514 l 2925 4634 l 2895 4514 l cp eoclip n 2925 4200 m 2925 4650 l gs col0 s gr gr % arrowhead n 2895 4514 m 2925 4634 l 2955 4514 l 2895 4514 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 4665 m 3855 4665 l 3855 4514 l 3825 4634 l 3795 4514 l cp eoclip n 3825 3900 m 3825 4650 l gs col0 s gr gr % arrowhead n 3795 4514 m 3825 4634 l 3855 4514 l 3795 4514 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4695 4665 m 4755 4665 l 4755 4514 l 4725 4634 l 4695 4514 l cp eoclip n 4725 4200 m 4725 4650 l gs col0 s gr gr % arrowhead n 4695 4514 m 4725 4634 l 4755 4514 l 4695 4514 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2850 3900 m 3000 3900 l gs col0 s gr % Polyline n 2925 3825 m 2925 3975 l gs col0 s gr % Polyline n 3750 3600 m 3900 3600 l gs col0 s gr % Polyline n 3825 3525 m 3825 3675 l gs col0 s gr % Polyline n 4650 3900 m 4800 3900 l gs col0 s gr % Polyline n 4725 3825 m 4725 3975 l gs col0 s gr % Polyline n 825 4650 m 5025 4650 l 5025 4950 l 825 4950 l cp gs col0 s gr % Polyline gs clippath 1395 5415 m 1455 5415 l 1455 5264 l 1425 5384 l 1395 5264 l cp eoclip n 1425 4950 m 1425 5400 l gs col0 s gr gr % arrowhead n 1395 5264 m 1425 5384 l 1455 5264 l 1395 5264 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2295 5415 m 2355 5415 l 2355 5264 l 2325 5384 l 2295 5264 l cp eoclip n 2325 4950 m 2325 5400 l gs col0 s gr gr % arrowhead n 2295 5264 m 2325 5384 l 2355 5264 l 2295 5264 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3195 5415 m 3255 5415 l 3255 5264 l 3225 5384 l 3195 5264 l cp eoclip n 3225 4950 m 3225 5400 l gs col0 s gr gr % arrowhead n 3195 5264 m 3225 5384 l 3255 5264 l 3195 5264 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4095 5415 m 4155 5415 l 4155 5264 l 4125 5384 l 4095 5264 l cp eoclip n 4125 4950 m 4125 5400 l gs col0 s gr gr % arrowhead n 4095 5264 m 4125 5384 l 4155 5264 l 4095 5264 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1095 915 m 1155 915 l 1155 764 l 1125 884 l 1095 764 l cp eoclip n 1125 300 m 1125 900 l gs col0 s gr gr % arrowhead n 1095 764 m 1125 884 l 1155 764 l 1095 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 1515 m 2055 1515 l 2055 1364 l 2025 1484 l 1995 1364 l cp eoclip n 2025 300 m 2025 1500 l gs col0 s gr gr % arrowhead n 1995 1364 m 2025 1484 l 2055 1364 l 1995 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 2115 m 2955 2115 l 2955 1964 l 2925 2084 l 2895 1964 l cp eoclip n 2925 300 m 2925 2100 l gs col0 s gr gr % arrowhead n 2895 1964 m 2925 2084 l 2955 1964 l 2895 1964 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 2715 m 3855 2715 l 3855 2564 l 3825 2684 l 3795 2564 l cp eoclip n 3825 300 m 3825 2700 l gs col0 s gr gr % arrowhead n 3795 2564 m 3825 2684 l 3855 2564 l 3795 2564 l cp gs 0.00 setgray ef gr col0 s /Times-Roman ff 180.00 scf sf 2925 4875 m gs 1 -1 sc (Renormalization) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3825 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3900 300 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2925 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3000 300 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2025 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2100 300 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1125 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1125 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 225 1200 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1725 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 225 1800 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 2325 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 225 2400 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 2925 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 135.00 scf sf 225 3000 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1200 300 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1425 5625 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1500 5700 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2325 5625 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2400 5700 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3225 5625 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3300 5700 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4125 5625 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4200 5700 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr $F2psEnd rs qd-2.3.11/docs/two-sum.eps0000644000175000017500000001034511202062041015515 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: two-sum.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Tue Aug 1 15:41:11 2000 %%For: yozo@n2001.lbl.gov () %%BoundingBox: 0 0 130 130 %%Magnification: 1.0000 %%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 end save newpath 0 130 moveto 0 0 lineto 130 0 lineto 130 130 lineto closepath clip newpath % Fill background color 0 0 moveto 130 0 lineto 130 130 lineto 0 130 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 9.0 123.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc /Times-Italic ff 180.00 scf sf 900 150 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 75 1050 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 900 1875 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1800 1050 m gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline 7.500 slw n 750 825 m 1050 825 l 1050 1125 l 750 1125 l cp gs col0 s gr % Polyline n 825 975 m 975 975 l gs col0 s gr % Polyline n 900 900 m 900 1050 l gs col0 s gr % Polyline gs clippath 765 1005 m 765 945 l 614 945 l 734 975 l 614 1005 l cp eoclip n 150 975 m 750 975 l gs col0 s gr gr % arrowhead n 614 1005 m 734 975 l 614 945 l 614 1005 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 870 840 m 930 840 l 930 689 l 900 809 l 870 689 l cp eoclip n 900 225 m 900 825 l gs col0 s gr gr % arrowhead n 870 689 m 900 809 l 930 689 l 870 689 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1665 1005 m 1665 945 l 1514 945 l 1634 975 l 1514 1005 l cp eoclip n 1050 975 m 1650 975 l gs col0 s gr gr % arrowhead n 1514 1005 m 1634 975 l 1514 945 l 1514 1005 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 870 1740 m 930 1740 l 930 1589 l 900 1709 l 870 1589 l cp eoclip n 900 1125 m 900 1725 l gs col0 s gr gr % arrowhead n 870 1589 m 900 1709 l 930 1589 l 870 1589 l cp gs 0.00 setgray ef gr col0 s $F2psEnd rs qd-2.3.11/docs/qd_add_proof.eps0000644000175000017500000004131511202062041016524 0ustar prudhommprudhomm%!PS-Adobe-2.0 EPSF-2.0 %%Title: qd_add_proof.eps %%Creator: fig2dev Version 3.2.3 Patchlevel %%CreationDate: Sun Oct 8 12:43:55 2000 %%For: yozo@yozo.HIP.Berkeley.EDU (Yozo Hida) %%BoundingBox: 0 0 360 363 %%Magnification: 1.0000 %%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 end save newpath 0 363 moveto 0 0 lineto 360 0 lineto 360 363 lineto closepath clip newpath % Fill background color 0 0 moveto 360 0 lineto 360 363 lineto 0 363 lineto closepath 1.00 1.00 1.00 setrgbcolor fill 4.0 361.0 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 %%Page: 1 1 10 setmiterlimit 0.06000 0.06000 sc % Polyline 7.500 slw n 975 900 m 1275 900 l 1275 1200 l 975 1200 l cp gs col0 s gr % Polyline n 1050 1050 m 1200 1050 l gs col0 s gr % Polyline n 1125 975 m 1125 1125 l gs col0 s gr % Polyline n 1875 1500 m 2175 1500 l 2175 1800 l 1875 1800 l cp gs col0 s gr % Polyline n 1950 1650 m 2100 1650 l gs col0 s gr % Polyline n 2025 1575 m 2025 1725 l gs col0 s gr % Polyline n 2775 2100 m 3075 2100 l 3075 2400 l 2775 2400 l cp gs col0 s gr % Polyline n 2850 2250 m 3000 2250 l gs col0 s gr % Polyline n 2925 2175 m 2925 2325 l gs col0 s gr % Polyline n 3675 2700 m 3975 2700 l 3975 3000 l 3675 3000 l cp gs col0 s gr % Polyline n 3750 2850 m 3900 2850 l gs col0 s gr % Polyline n 3825 2775 m 3825 2925 l gs col0 s gr /Times-Italic ff 180.00 scf sf 2100 2025 m gs 1 -1 sc (t) col0 sh gr /Times-Roman ff 105.00 scf sf 2175 2100 m gs 1 -1 sc (1) col0 sh gr /Times-Italic ff 180.00 scf sf 3000 2625 m gs 1 -1 sc (t) col0 sh gr /Times-Roman ff 105.00 scf sf 3075 2700 m gs 1 -1 sc (2) col0 sh gr % Polyline n 825 4800 m 5025 4800 l 5025 5100 l 825 5100 l cp gs col0 s gr % Polyline gs clippath 1395 5565 m 1455 5565 l 1455 5414 l 1425 5534 l 1395 5414 l cp eoclip n 1425 5100 m 1425 5550 l gs col0 s gr gr % arrowhead n 1395 5414 m 1425 5534 l 1455 5414 l 1395 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2295 5565 m 2355 5565 l 2355 5414 l 2325 5534 l 2295 5414 l cp eoclip n 2325 5100 m 2325 5550 l gs col0 s gr gr % arrowhead n 2295 5414 m 2325 5534 l 2355 5414 l 2295 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3195 5565 m 3255 5565 l 3255 5414 l 3225 5534 l 3195 5414 l cp eoclip n 3225 5100 m 3225 5550 l gs col0 s gr gr % arrowhead n 3195 5414 m 3225 5534 l 3255 5414 l 3195 5414 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4095 5565 m 4155 5565 l 4155 5414 l 4125 5534 l 4095 5414 l cp eoclip n 4125 5100 m 4125 5550 l gs col0 s gr gr % arrowhead n 4095 5414 m 4125 5534 l 4155 5414 l 4095 5414 l cp gs 0.00 setgray ef gr col0 s /Times-Roman ff 180.00 scf sf 2925 5025 m gs 1 -1 sc (Renormalization) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1425 5775 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1500 5850 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2325 5775 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2400 5850 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 3225 5775 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3300 5850 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4125 5775 m gs 1 -1 sc (s) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 4200 5850 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 4800 4650 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 105.00 scf sf 4875 4725 m gs 1 -1 sc (4) col0 sh gr /Times-Italic ff 180.00 scf sf 3900 4650 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 105.00 scf sf 3975 4725 m gs 1 -1 sc (3) col0 sh gr /Times-Italic ff 180.00 scf sf 3000 4650 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 105.00 scf sf 3075 4725 m gs 1 -1 sc (2) col0 sh gr /Times-Italic ff 180.00 scf sf 2100 4650 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 105.00 scf sf 2175 4725 m gs 1 -1 sc (1) col0 sh gr /Times-Italic ff 180.00 scf sf 1200 4650 m gs 1 -1 sc (x) col0 sh gr /Times-Roman ff 105.00 scf sf 1275 4725 m gs 1 -1 sc (0) col0 sh gr % Polyline n 1875 4050 m 2175 4050 l 2175 4350 l 1875 4350 l cp gs col0 s gr % Polyline n 1950 4200 m 2100 4200 l gs col0 s gr % Polyline n 2025 4125 m 2025 4275 l gs col0 s gr /Times-Italic ff 180.00 scf sf 2250 1500 m gs 1 -1 sc (e) col0 sh gr /Times-Roman ff 105.00 scf sf 2325 1575 m gs 1 -1 sc (1) col0 sh gr /Times-Italic ff 180.00 scf sf 1350 900 m gs 1 -1 sc (e) col0 sh gr /Times-Roman ff 105.00 scf sf 1425 975 m gs 1 -1 sc (0) col0 sh gr /Times-Italic ff 180.00 scf sf 3150 2100 m gs 1 -1 sc (e) col0 sh gr /Times-Roman ff 105.00 scf sf 3225 2175 m gs 1 -1 sc (2) col0 sh gr /Times-Italic ff 180.00 scf sf 4050 2700 m gs 1 -1 sc (e) col0 sh gr /Times-Roman ff 105.00 scf sf 4125 2775 m gs 1 -1 sc (3) col0 sh gr % Polyline n 2850 4050 m 3000 4050 l gs col0 s gr % Polyline n 2925 3975 m 2925 4125 l gs col0 s gr % Polyline n 4650 4050 m 4800 4050 l gs col0 s gr % Polyline n 4725 3975 m 4725 4125 l gs col0 s gr % Polyline n 3750 3750 m 3900 3750 l gs col0 s gr % Polyline n 3825 3675 m 3825 3825 l gs col0 s gr /Times-Italic ff 180.00 scf sf 3900 3225 m gs 1 -1 sc (t) col0 sh gr /Times-Roman ff 105.00 scf sf 3975 3300 m gs 1 -1 sc (3) col0 sh gr /Times-Roman ff 105.00 scf sf 5700 3450 m gs 1 -1 sc (1) col0 sh gr /Times-Italic ff 180.00 scf sf 5625 3375 m gs 1 -1 sc (f) col0 sh gr /Times-Italic ff 180.00 scf sf 5625 3975 m gs 1 -1 sc (f) col0 sh gr /Times-Roman ff 105.00 scf sf 5700 4050 m gs 1 -1 sc (2) col0 sh gr /Times-Italic ff 180.00 scf sf 5625 4275 m gs 1 -1 sc (f) col0 sh gr /Times-Roman ff 105.00 scf sf 5700 4350 m gs 1 -1 sc (3) col0 sh gr % Polyline gs clippath 990 1080 m 990 1020 l 839 1020 l 959 1050 l 839 1080 l cp eoclip n 375 1050 m 975 1050 l gs col0 s gr gr % arrowhead n 839 1080 m 959 1050 l 839 1020 l 839 1080 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1890 1680 m 1890 1620 l 1739 1620 l 1859 1650 l 1739 1680 l cp eoclip n 375 1650 m 1875 1650 l gs col0 s gr gr % arrowhead n 1739 1680 m 1859 1650 l 1739 1620 l 1739 1680 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2790 2280 m 2790 2220 l 2639 2220 l 2759 2250 l 2639 2280 l cp eoclip n 375 2250 m 2775 2250 l gs col0 s gr gr % arrowhead n 2639 2280 m 2759 2250 l 2639 2220 l 2639 2280 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3690 2880 m 3690 2820 l 3539 2820 l 3659 2850 l 3539 2880 l cp eoclip n 375 2850 m 3675 2850 l gs col0 s gr gr % arrowhead n 3539 2880 m 3659 2850 l 3539 2820 l 3539 2880 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 4065 m 2055 4065 l 2055 3914 l 2025 4034 l 1995 3914 l cp eoclip n 2025 1800 m 2025 4050 l gs col0 s gr gr % arrowhead n 1995 3914 m 2025 4034 l 2055 3914 l 1995 3914 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 3765 m 2955 3765 l 2955 3614 l 2925 3734 l 2895 3614 l cp eoclip n 2925 2400 m 2925 3750 l gs col0 s gr gr % arrowhead n 2895 3614 m 2925 3734 l 2955 3614 l 2895 3614 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 3465 m 3855 3465 l 3855 3314 l 3825 3434 l 3795 3314 l cp eoclip n 3825 3000 m 3825 3450 l gs col0 s gr gr % arrowhead n 3795 3314 m 3825 3434 l 3855 3314 l 3795 3314 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4695 3765 m 4755 3765 l 4755 3614 l 4725 3734 l 4695 3614 l cp eoclip n 3975 2850 m 4725 2850 l 4725 3750 l gs col0 s gr gr % arrowhead n 4695 3614 m 4725 3734 l 4755 3614 l 4695 3614 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1095 4815 m 1155 4815 l 1155 4664 l 1125 4784 l 1095 4664 l cp eoclip n 1125 1200 m 1125 4800 l gs col0 s gr gr % arrowhead n 1095 4664 m 1125 4784 l 1155 4664 l 1095 4664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1095 915 m 1155 915 l 1155 764 l 1125 884 l 1095 764 l cp eoclip n 1125 300 m 1125 900 l gs col0 s gr gr % arrowhead n 1095 764 m 1125 884 l 1155 764 l 1095 764 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 1515 m 2055 1515 l 2055 1364 l 2025 1484 l 1995 1364 l cp eoclip n 2025 300 m 2025 1500 l gs col0 s gr gr % arrowhead n 1995 1364 m 2025 1484 l 2055 1364 l 1995 1364 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 2115 m 2955 2115 l 2955 1964 l 2925 2084 l 2895 1964 l cp eoclip n 2925 300 m 2925 2100 l gs col0 s gr gr % arrowhead n 2895 1964 m 2925 2084 l 2955 1964 l 2895 1964 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 2715 m 3855 2715 l 3855 2564 l 3825 2684 l 3795 2564 l cp eoclip n 3825 300 m 3825 2700 l gs col0 s gr gr % arrowhead n 3795 2564 m 3825 2684 l 3855 2564 l 3795 2564 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1995 4815 m 2055 4815 l 2055 4664 l 2025 4784 l 1995 4664 l cp eoclip n 2025 4350 m 2025 4800 l gs col0 s gr gr % arrowhead n 1995 4664 m 2025 4784 l 2055 4664 l 1995 4664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2895 4815 m 2955 4815 l 2955 4664 l 2925 4784 l 2895 4664 l cp eoclip n 2925 4350 m 2925 4800 l gs col0 s gr gr % arrowhead n 2895 4664 m 2925 4784 l 2955 4664 l 2895 4664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3795 4815 m 3855 4815 l 3855 4664 l 3825 4784 l 3795 4664 l cp eoclip n 3825 4050 m 3825 4800 l gs col0 s gr gr % arrowhead n 3795 4664 m 3825 4784 l 3855 4664 l 3795 4664 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4695 4815 m 4755 4815 l 4755 4664 l 4725 4784 l 4695 4664 l cp eoclip n 4725 4350 m 4725 4800 l gs col0 s gr gr % arrowhead n 4695 4664 m 4725 4784 l 4755 4664 l 4695 4664 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4575 3750 m 4875 3750 l 4875 4350 l 4575 4350 l cp gs col0 s gr % Polyline gs clippath 2790 4230 m 2790 4170 l 2639 4170 l 2759 4200 l 2639 4230 l cp eoclip n 2175 4200 m 2775 4200 l gs col0 s gr gr % arrowhead n 2639 4230 m 2759 4200 l 2639 4170 l 2639 4230 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4590 4230 m 4590 4170 l 4439 4170 l 4559 4200 l 4439 4230 l cp eoclip n 3075 4200 m 4575 4200 l gs col0 s gr gr % arrowhead n 4439 4230 m 4559 4200 l 4439 4170 l 4439 4230 l cp gs 0.00 setgray ef gr col0 s % Polyline n 3675 3450 m 3975 3450 l 3975 4050 l 3675 4050 l cp gs col0 s gr % Polyline gs clippath 4590 3930 m 4590 3870 l 4439 3870 l 4559 3900 l 4439 3930 l cp eoclip n 3975 3900 m 4575 3900 l gs col0 s gr gr % arrowhead n 4439 3930 m 4559 3900 l 4439 3870 l 4439 3930 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3690 3930 m 3690 3870 l 3539 3870 l 3659 3900 l 3539 3930 l cp eoclip n 3075 3900 m 3675 3900 l gs col0 s gr gr % arrowhead n 3539 3930 m 3659 3900 l 3539 3870 l 3539 3930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 2775 3750 m 3075 3750 l 3075 4350 l 2775 4350 l cp gs col0 s gr % Polyline gs clippath 2790 3930 m 2790 3870 l 2639 3870 l 2759 3900 l 2639 3930 l cp eoclip n 2175 1650 m 2475 1650 l 2475 3900 l 2775 3900 l gs col0 s gr gr % arrowhead n 2639 3930 m 2759 3900 l 2639 3870 l 2639 3930 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1890 4230 m 1890 4170 l 1739 4170 l 1859 4200 l 1739 4230 l cp eoclip n 1275 1050 m 1575 1050 l 1575 4200 l 1875 4200 l gs col0 s gr gr % arrowhead n 1739 4230 m 1859 4200 l 1739 4170 l 1739 4230 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3690 3630 m 3690 3570 l 3539 3570 l 3659 3600 l 3539 3630 l cp eoclip n 3075 2250 m 3375 2250 l 3375 3600 l 3675 3600 l gs col0 s gr gr % arrowhead n 3539 3630 m 3659 3600 l 3539 3570 l 3539 3630 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 5565 3330 m 5565 3270 l 5414 3270 l 5534 3300 l 5414 3330 l cp eoclip n 3975 3600 m 4275 3600 l 4275 3300 l 5550 3300 l gs col0 s gr gr [] 0 sd % arrowhead n 5414 3330 m 5534 3300 l 5414 3270 l 5414 3330 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 5565 3930 m 5565 3870 l 5414 3870 l 5534 3900 l 5414 3930 l cp eoclip n 4875 3900 m 5550 3900 l gs col0 s gr gr [] 0 sd % arrowhead n 5414 3930 m 5534 3900 l 5414 3870 l 5414 3930 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 5565 4230 m 5565 4170 l 5414 4170 l 5534 4200 l 5414 4230 l cp eoclip n 4875 4200 m 5550 4200 l gs col0 s gr gr [] 0 sd % arrowhead n 5414 4230 m 5534 4200 l 5414 4170 l 5414 4230 l cp gs 0.00 setgray ef gr col0 s /Times-Italic ff 180.00 scf sf 3825 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3900 300 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2925 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 3000 300 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2025 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 2100 300 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 1125 225 m gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1125 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 225 1200 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 1725 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 225 1800 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 2325 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 225 2400 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 150 2925 m gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 135.00 scf sf 225 3000 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 105.00 scf sf 1200 300 m gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Italic ff 180.00 scf sf 2250 4125 m gs 1 -1 sc (u) col0 sh gr /Times-Italic ff 180.00 scf sf 3150 4125 m gs 1 -1 sc (v) col0 sh gr /Times-Italic ff 180.00 scf sf 3150 3825 m gs 1 -1 sc (w) col0 sh gr /Times-Italic ff 180.00 scf sf 4050 3825 m gs 1 -1 sc (z) col0 sh gr /Times-Roman ff 150.00 scf sf 852 871 m gs 1 -1 sc (1) col0 sh gr /Times-Roman ff 150.00 scf sf 1790 1472 m gs 1 -1 sc (2) col0 sh gr /Times-Roman ff 150.00 scf sf 2700 2062 m gs 1 -1 sc (3) col0 sh gr /Times-Roman ff 150.00 scf sf 3581 2671 m gs 1 -1 sc (4) col0 sh gr /Times-Roman ff 150.00 scf sf 1771 4035 m gs 1 -1 sc (5) col0 sh gr /Times-Roman ff 150.00 scf sf 2681 3726 m gs 1 -1 sc (6) col0 sh gr /Times-Roman ff 150.00 scf sf 3600 3446 m gs 1 -1 sc (7) col0 sh gr /Times-Roman ff 150.00 scf sf 4481 3735 m gs 1 -1 sc (8) col0 sh gr $F2psEnd rs qd-2.3.11/COPYING0000644000175000017500000000133611202313720013477 0ustar prudhommprudhommThis work was supported by the Director, Office of Science, Division of Mathematical, Information, and Computational Sciences of the U.S. Department of Energy under contract numbers DE-AC03-76SF00098 and DE-AC02-05CH11231. Copyright (c) 2003-2009, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy) All rights reserved. By downloading or using this software you are agreeing to the modified BSD license that is in file "BSD-LBNL-License.doc" in the main ARPREC directory. If you wish to use the software for commercial purposes please contact the Technology Transfer Department at TTD@lbl.gov or call 510-286-6457." qd-2.3.11/m4/0000755000175000017500000000000011431215437012773 5ustar prudhommprudhommqd-2.3.11/m4/ax_cxx_isinf.m40000644000175000017500000000174111202062041015705 0ustar prudhommprudhommdnl Tries to determine if the isinf function exists in std namespace, dnl global namespace, or doesn't exist (in which case an appropriate dnl macro is generated). The result is put into ax_cxx_isinf. dnl AC_DEFUN([AX_CXX_ISINF], [ AC_MSG_CHECKING([for isinf]) AC_LANG_PUSH(C++) ax_cxx_isinf= AC_COMPILE_IFELSE([#include int main() { std::isinf(1.0); return 0; }], [AC_MSG_RESULT(std::isinf) ax_cxx_isinf="std::isinf(x)"]) if test "x$ax_cxx_isinf" = "x"; then AC_COMPILE_IFELSE([#include int main() { ::isinf(1.0); return 0; }], [AC_MSG_RESULT(::isinf) ax_cxx_isinf="::isinf(x)"], [AC_MSG_RESULT(none) ax_cxx_isinf="( (x) != 0.0 && (x) == 2.0 * (x) )"]) fi AC_LANG_POP(C++) ]) qd-2.3.11/m4/ax_cxx_isnan.m40000644000175000017500000000171311202062041015704 0ustar prudhommprudhommdnl Tries to determine if the isnan function exists in std namespace, dnl global namespace, or doesn't exist (in which case an appropriate dnl macro is generated). The result is put into ax_cxx_isnan. dnl AC_DEFUN([AX_CXX_ISNAN], [ AC_MSG_CHECKING([for isnan]) AC_LANG_PUSH(C++) ax_cxx_isnan= AC_COMPILE_IFELSE([#include int main() { std::isnan(1.0); return 0; }], [AC_MSG_RESULT(std::isnan) ax_cxx_isnan="std::isnan(x)"]) if test "x$ax_cxx_isnan" = "x"; then AC_COMPILE_IFELSE([#include int main() { ::isnan(1.0); return 0; }], [AC_MSG_RESULT(::isnan) ax_cxx_isnan="::isnan(x)"], [AC_MSG_RESULT(none) ax_cxx_isnan="((x) != (x))"]) fi AC_LANG_POP(C++) ]) qd-2.3.11/m4/ax_fc_etime.m40000644000175000017500000000100711202062041015461 0ustar prudhommprudhommAC_DEFUN([AX_FC_ETIME], [ AC_MSG_CHECKING([for etime]) AC_LANG_PUSH(Fortran) ax_fc_etime= ax_fc_etime_names="etime etime_" for name in $ax_fc_etime_names; do AC_LINK_IFELSE([AC_LANG_PROGRAM(, [[ real*4 t(2), tot tot = $name(t)]])], [ax_fc_etime=$name], []) if test "x$ax_fc_etime" != "x"; then break; fi done AC_LANG_POP(Fortran) if test "x$ax_fc_etime" != "x"; then AC_MSG_RESULT($ax_fc_etime) $1 else AC_MSG_RESULT(none) ifelse([$2],,AC_MSG_ERROR([Cannot find etime.]), [$2]) fi ]) qd-2.3.11/m4/ax_cxx_fc_lib.m40000644000175000017500000000167411202062041016020 0ustar prudhommprudhommdnl Still not quite there yet, as FC_DUMMY_MAIN may be needed dnl but that complicates matters since FC_DUMMY_MAIN needs the dnl correct libraries to link. dnl AC_DEFUN([AX_CXX_FC_LIB], [ AC_MSG_CHECKING([whether extra library is needed to link Fortran and C++]) AC_LANG_PUSH(C++) ax_cxx_fc_lib= ax_cxx_fc_lib_names="none -lompstubs -lmtsk" for name in $ax_cxx_fc_lib_names; do if test "x$name" = xnone; then lib="" else lib=$name fi save_LIBS="$LIBS" LIBS="$LIBS $FCLIBS $lib" AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ax_cxx_fc_lib=$name], []) LIBS="$save_LIBS" if test "x$ax_cxx_fc_lib" != "x"; then break fi done AC_LANG_POP(C++) if test "x$ax_cxx_fc_lib" != x; then AC_MSG_RESULT($ax_cxx_fc_lib) if test "x$ax_cxx_fc_lib" = xnone; then ax_cxx_fc_lib= fi ifelse([$1],,FCLIBS="$FCLIBS $ax_cxx_fc_lib", [$2]) else AC_MSG_RESULT(unknown) ifelse([$2],,AC_MSG_ERROR(Cannot link C++ and Fortran.), [$2]) fi ]) qd-2.3.11/m4/ax_cxx_fma.m40000644000175000017500000000703211202062041015337 0ustar prudhommprudhommdnl Tries to determine appropriate function names for dnl fused multiply-add (fma) and fused multiply-subtract (fms). dnl dnl Usage: ACX_CXX_FMA(list) dnl where fma_list can contain any of ibm, c99. If list is dnl blank it will search for a first compatible function. dnl AC_DEFUN([AX_CXX_FMA], [ AC_MSG_CHECKING([for fused multiply-add/subtract]) AC_LANG_PUSH(C++) ax_cxx_fma_list=$1 if test "x$ax_cxx_fma_list" = "x"; then ax_cxx_fma_list="ibm gnu c99 compiler" fi ax_cxx_fma= ax_cxx_fms= for name in $ax_cxx_fma_list; do if test "x$ax_cxx_fma" = "x"; then case $name in ibm) # IBM VisualAge C++ __fmadd / __fmsub. AC_RUN_IFELSE([#include #include int main() { double d = std::ldexp(1.0, -52); double x = __fmadd(1.0 + d, 1.0 - d, -1.0); double y = __fmsub(1.0 + d, 1.0 - d, 1.0); return (x == -d*d && y == -d*d) ? 0 : 1; }], [ax_cxx_fma="__fmadd(x,y,z)" ax_cxx_fms="__fmsub(x,y,z)" AC_DEFINE([QD_VACPP_BUILTINS_H], [1], [Set to 1 if using VisualAge C++ compiler for __fmadd builtin.])]) ;; gnu) # Later gcc (3.4 and later) have __builtin_fma that seems to work. AC_RUN_IFELSE([#include int main() { double d = std::ldexp(1.0, -52); return (__builtin_fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); }], [ax_cxx_fma="__builtin_fma(x,y,z)" ax_cxx_fms="__builtin_fma(x,y,-z)"]) ;; ia64) # Intel and HP compilers for IA 64 architecture seems to have # _Asm_fma/fms macros. Not much documentation is available for # these... AC_RUN_IFELSE([#include int main() { double d = std::ldexp(1.0, -52); return (_Asm_fma(2, 1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); }], [ax_cxx_fma="_Asm_fma(2, x,y,z)" ax_cxx_fms="_Asm_fms(2, x,y,z)"]) ;; c99) # Try C99 fma() function. Some platforms doesn't seem to implement this # correctly (Apple gcc-3.3 for example). AC_RUN_IFELSE([#include int main() { double d = std::ldexp(1.0, -52); return (fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); }], [ax_cxx_fma="fma(x,y,z)" ax_cxx_fms="fma(x,y,-z)"]) ;; compiler) # Try relying on the compiler to optimize x * y + z into an fma. # This method is not recommended since if it is inlined it does not # always produce the same correct code. AC_RUN_IFELSE([#include int main() { double d = std::ldexp(1.0, -52); return ( (1.0 + d) * (1.0 - d) - 1.0 == -d*d ? 0 : 1); }], [ax_cxx_fma="((x)*(y) + (z))" ax_cxx_fms="((x)*(y) - (z))"]) ;; *) AC_MSG_ERROR([Unknown option $name to --enable-fma.]) ;; esac fi done AC_LANG_POP(C++) if test "x$ax_cxx_fma" != "x"; then AC_MSG_RESULT([$ax_cxx_fma, $ax_cxx_fms]) else AC_MSG_RESULT(none) fi ]) qd-2.3.11/m4/ax_cxx_copysign.m40000644000175000017500000000212011202062041016420 0ustar prudhommprudhommdnl Tries to determine if the copysign function exists in std namespace, dnl global namespace, or doesn't exist (in which case an appropriate dnl macro is generated). The result is put into ax_cxx_copysign. dnl AC_DEFUN([AX_CXX_COPYSIGN], [ AC_MSG_CHECKING([for copysign]) AC_LANG_PUSH(C++) ax_cxx_copysign= AC_COMPILE_IFELSE([#include int main() { std::copysign(1.0, 1.0); return 0; }], [AC_MSG_RESULT(std::copysign) ax_cxx_copysign="std::copysign(x, y)"]) if test "x$ax_cxx_copysign" = "x"; then AC_COMPILE_IFELSE([#include int main() { ::copysign(1.0, 1.0); return 0; }], [AC_MSG_RESULT(::copysign) ax_cxx_copysign="::copysign(x, y)"], [AC_MSG_RESULT(none) ax_cxx_copysign="( ((y) != 0.0) ? ( ((y) > 0.0) ? (x) : -(x) ) : ( ((1.0 / y) > 0.0) ? (x) : -(x) ) )"]) fi AC_LANG_POP(C++) ]) qd-2.3.11/m4/ax_f90_module_flag.m40000644000175000017500000000305411202062041016646 0ustar prudhommprudhommdnl @synopsis AX_F90_MODULE_FLAG dnl dnl @summary Find Fortran 90 modules inclusion flag. dnl dnl Find Fortran 90 modules inclusion flag. The module inclusion flag dnl is stored in the cached variable ax_f90_modflag. An error is dnl triggered if the flag cannot be found. Supported are the -I GNU dnl compilers flag, the -M SUN compilers flag, and the -p Absoft Pro dnl Fortran compiler flag. dnl dnl @category Fortran dnl @author Luc Maisonobe dnl @author Julian C. Cummings dnl @version 2006-01-28 dnl @license AllPermissive AC_DEFUN([AX_F90_MODULE_FLAG],[ AC_CACHE_CHECK([fortran 90 modules inclusion flag], ax_f90_modflag, [AC_LANG_PUSH(Fortran) i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i AC_COMPILE_IFELSE([module conftest_module contains subroutine conftest_routine write(*,'(a)') 'gotcha!' end subroutine conftest_routine end module conftest_module ],[],[]) cd .. ax_f90_modflag="not found" for ax_flag in "-I " "-M" "-p"; do if test "$ax_f90_modflag" = "not found" ; then ax_save_FCFLAGS="$FCFLAGS" FCFLAGS="$ax_save_FCFLAGS ${ax_flag}tmpdir_$i" AC_COMPILE_IFELSE([program conftest_program use conftest_module call conftest_routine end program conftest_program ],[ax_f90_modflag="$ax_flag"],[]) FCFLAGS="$ax_save_FCFLAGS" fi done rm -fr tmpdir_$i if test "$ax_modflag" = "not found" ; then AC_MSG_ERROR([unable to find compiler flag for modules inclusion]) fi AC_LANG_POP(Fortran) ])]) qd-2.3.11/m4/ax_f90_module_style.m40000644000175000017500000000300711202062041017073 0ustar prudhommprudhommdnl ax_f90_module_style dnl dnl Figures out the F90 module naming style: dnl - whether the base name is lower or upper case, and dnl - the suffix (usually .mod or .MOD). dnl dnl Y. Hida (2006-02-17) dnl dnl The code is based on the ax_f90_module_extension code: dnl dnl @synopsis AX_F90_MODULE_EXTENSION dnl dnl Find Fortran 90 modules file extension. The module extension is dnl stored in the cached variable ax_f90_modext, or "unknown" if the dnl extension cannot be found. dnl dnl @category Fortran dnl @author Luc Maisonobe dnl @version 2005-06-17 dnl @license AllPermissive AC_DEFUN([AX_F90_MODULE_STYLE],[ AC_CACHE_CHECK([fortran 90 modules naming style], ax_f90_module_style, [AC_LANG_PUSH(Fortran) i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i AC_COMPILE_IFELSE([module conftest_module contains subroutine conftest_routine write(*,'(a)') 'gotcha!' end subroutine conftest_routine end module conftest_module ], [ax_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` if test x$ax_f90_modext = x ; then dnl Some F90 compilers put module filename in uppercase letters ax_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` if test x$ax_f90_modext = x ; then ax_f90_modext=unknown else ax_f90_module_style="uppercase, $ax_f90_modext" fi else ax_f90_module_style="lowercase, $ax_f90_modext" fi ], [ax_f90_module_style=unknown]) cd .. rm -fr tmpdir_$i AC_LANG_POP(Fortran) ])]) qd-2.3.11/m4/ax_cxx_isfinite.m40000644000175000017500000000202411202062041016402 0ustar prudhommprudhommdnl Tries to determine if the isfinite function exists in std namespace, dnl global namespace, or doesn't exist (in which case an appropriate dnl macro is generated). The result is put into ax_cxx_isfinite. dnl AC_DEFUN([AX_CXX_ISFINITE], [ AC_MSG_CHECKING([for isfinite]) AC_LANG_PUSH(C++) ax_cxx_isfinite= AC_COMPILE_IFELSE([#include int main() { std::isfinite(1.0); return 0; }], [AC_MSG_RESULT(std::isfinite) ax_cxx_isfinite="std::isfinite(x)"]) if test "x$ax_cxx_isfinite" = "x"; then AC_COMPILE_IFELSE([#include int main() { ::isfinite(1.0); return 0; }], [AC_MSG_RESULT(::isfinite) ax_cxx_isfinite="::isfinite(x)"], [AC_MSG_RESULT(none) ax_cxx_isfinite="( ((x) == 0.0) || ((x) != (2.0 * (x))) )"]) fi AC_LANG_POP(C++) ]) qd-2.3.11/m4/ax_cxx_clock_gettime.m40000644000175000017500000000062411202062041017405 0ustar prudhommprudhommdnl Tries to determine whether clock_gettime is useable. dnl AC_DEFUN([AX_CXX_CLOCK_GETTIME], [ AC_MSG_CHECKING([for clock_gettime useability]) AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([ #include int main() { struct timespec tv; return clock_gettime(CLOCK_REALTIME, &tv); } ], [ax_cxx_clock_gettime="yes"], [ax_cxx_clock_gettime="no"]) AC_LANG_POP(C++) AC_MSG_RESULT([$ax_cxx_clock_gettime]) ]) qd-2.3.11/include/0000755000175000017500000000000011431215437014076 5ustar prudhommprudhommqd-2.3.11/include/qd/0000755000175000017500000000000011431215437014502 5ustar prudhommprudhommqd-2.3.11/include/qd/qd_config.h.in0000644000175000017500000000432611202062041017201 0ustar prudhommprudhomm#ifndef _QD_QD_CONFIG_H #define _QD_QD_CONFIG_H 1 #ifndef QD_API #undef QD_API #endif /* Set to 1 if using VisualAge C++ compiler for __fmadd builtin. */ #ifndef QD_VACPP_BUILTINS_H #undef QD_VACPP_BUILTINS_H #endif /* If fused multiply-add is available, define to correct macro for using it. It is invoked as QD_FMA(a, b, c) to compute fl(a * b + c). If correctly rounded multiply-add is not available (or if unsure), keep it undefined.*/ #ifndef QD_FMA #undef QD_FMA #endif /* If fused multiply-subtract is available, define to correct macro for using it. It is invoked as QD_FMS(a, b, c) to compute fl(a * b - c). If correctly rounded multiply-add is not available (or if unsure), keep it undefined.*/ #ifndef QD_FMS #undef QD_FMS #endif /* Set the following to 1 to define commonly used function to be inlined. This should be set to 1 unless the compiler does not support the "inline" keyword, or if building for debugging purposes. */ #ifndef QD_INLINE #undef QD_INLINE #endif /* Set the following to 1 to use ANSI C++ standard header files such as cmath, iostream, etc. If set to zero, it will try to include math.h, iostream.h, etc, instead. */ #ifndef QD_HAVE_STD #undef QD_HAVE_STD #endif /* Set the following to 1 to make the addition and subtraction to satisfy the IEEE-style error bound fl(a + b) = (1 + d) * (a + b) where |d| <= eps. If set to 0, the addition and subtraction will satisfy the weaker Cray-style error bound fl(a + b) = (1 + d1) * a + (1 + d2) * b where |d1| <= eps and |d2| eps. */ #ifndef QD_IEEE_ADD #undef QD_IEEE_ADD #endif /* Set the following to 1 to use slightly inaccurate but faster version of multiplication. */ #ifndef QD_SLOPPY_MUL #undef QD_SLOPPY_MUL #endif /* Set the following to 1 to use slightly inaccurate but faster version of division. */ #ifndef QD_SLOPPY_DIV #undef QD_SLOPPY_DIV #endif /* Define this macro to be the isfinite(x) function. */ #ifndef QD_ISFINITE #undef QD_ISFINITE #endif /* Define this macro to be the isinf(x) function. */ #ifndef QD_ISINF #undef QD_ISINF #endif /* Define this macro to be the isnan(x) function. */ #ifndef QD_ISNAN #undef QD_ISNAN #endif #endif /* _QD_QD_CONFIG_H */ qd-2.3.11/include/qd/qd_inline.h0000644000175000017500000005677411316270607016642 0ustar prudhommprudhomm/* * include/qd_inline.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains small functions (suitable for inlining) in the quad-double * arithmetic package. */ #ifndef _QD_QD_INLINE_H #define _QD_QD_INLINE_H #include #include #ifndef QD_INLINE #define inline #endif /********** Constructors **********/ inline qd_real::qd_real(double x0, double x1, double x2, double x3) { x[0] = x0; x[1] = x1; x[2] = x2; x[3] = x3; } inline qd_real::qd_real(const double *xx) { x[0] = xx[0]; x[1] = xx[1]; x[2] = xx[2]; x[3] = xx[3]; } inline qd_real::qd_real(double x0) { x[0] = x0; x[1] = x[2] = x[3] = 0.0; } inline qd_real::qd_real() { x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; x[3] = 0.0; } inline qd_real::qd_real(const dd_real &a) { x[0] = a._hi(); x[1] = a._lo(); x[2] = x[3] = 0.0; } inline qd_real::qd_real(int i) { x[0] = static_cast(i); x[1] = x[2] = x[3] = 0.0; } /********** Accessors **********/ inline double qd_real::operator[](int i) const { return x[i]; } inline double &qd_real::operator[](int i) { return x[i]; } inline bool qd_real::isnan() const { return QD_ISNAN(x[0]) || QD_ISNAN(x[1]) || QD_ISNAN(x[2]) || QD_ISNAN(x[3]); } /********** Renormalization **********/ namespace qd { inline void quick_renorm(double &c0, double &c1, double &c2, double &c3, double &c4) { double t0, t1, t2, t3; double s; s = qd::quick_two_sum(c3, c4, t3); s = qd::quick_two_sum(c2, s , t2); s = qd::quick_two_sum(c1, s , t1); c0 = qd::quick_two_sum(c0, s , t0); s = qd::quick_two_sum(t2, t3, t2); s = qd::quick_two_sum(t1, s , t1); c1 = qd::quick_two_sum(t0, s , t0); s = qd::quick_two_sum(t1, t2, t1); c2 = qd::quick_two_sum(t0, s , t0); c3 = t0 + t1; } inline void renorm(double &c0, double &c1, double &c2, double &c3) { double s0, s1, s2 = 0.0, s3 = 0.0; if (QD_ISINF(c0)) return; s0 = qd::quick_two_sum(c2, c3, c3); s0 = qd::quick_two_sum(c1, s0, c2); c0 = qd::quick_two_sum(c0, s0, c1); s0 = c0; s1 = c1; if (s1 != 0.0) { s1 = qd::quick_two_sum(s1, c2, s2); if (s2 != 0.0) s2 = qd::quick_two_sum(s2, c3, s3); else s1 = qd::quick_two_sum(s1, c3, s2); } else { s0 = qd::quick_two_sum(s0, c2, s1); if (s1 != 0.0) s1 = qd::quick_two_sum(s1, c3, s2); else s0 = qd::quick_two_sum(s0, c3, s1); } c0 = s0; c1 = s1; c2 = s2; c3 = s3; } inline void renorm(double &c0, double &c1, double &c2, double &c3, double &c4) { double s0, s1, s2 = 0.0, s3 = 0.0; if (QD_ISINF(c0)) return; s0 = qd::quick_two_sum(c3, c4, c4); s0 = qd::quick_two_sum(c2, s0, c3); s0 = qd::quick_two_sum(c1, s0, c2); c0 = qd::quick_two_sum(c0, s0, c1); s0 = c0; s1 = c1; s0 = qd::quick_two_sum(c0, c1, s1); if (s1 != 0.0) { s1 = qd::quick_two_sum(s1, c2, s2); if (s2 != 0.0) { s2 = qd::quick_two_sum(s2, c3, s3); if (s3 != 0.0) s3 += c4; else s2 += c4; } else { s1 = qd::quick_two_sum(s1, c3, s2); if (s2 != 0.0) s2 = qd::quick_two_sum(s2, c4, s3); else s1 = qd::quick_two_sum(s1, c4, s2); } } else { s0 = qd::quick_two_sum(s0, c2, s1); if (s1 != 0.0) { s1 = qd::quick_two_sum(s1, c3, s2); if (s2 != 0.0) s2 = qd::quick_two_sum(s2, c4, s3); else s1 = qd::quick_two_sum(s1, c4, s2); } else { s0 = qd::quick_two_sum(s0, c3, s1); if (s1 != 0.0) s1 = qd::quick_two_sum(s1, c4, s2); else s0 = qd::quick_two_sum(s0, c4, s1); } } c0 = s0; c1 = s1; c2 = s2; c3 = s3; } } inline void qd_real::renorm() { qd::renorm(x[0], x[1], x[2], x[3]); } inline void qd_real::renorm(double &e) { qd::renorm(x[0], x[1], x[2], x[3], e); } /********** Additions ************/ namespace qd { inline void three_sum(double &a, double &b, double &c) { double t1, t2, t3; t1 = qd::two_sum(a, b, t2); a = qd::two_sum(c, t1, t3); b = qd::two_sum(t2, t3, c); } inline void three_sum2(double &a, double &b, double &c) { double t1, t2, t3; t1 = qd::two_sum(a, b, t2); a = qd::two_sum(c, t1, t3); b = t2 + t3; } } /* quad-double + double */ inline qd_real operator+(const qd_real &a, double b) { double c0, c1, c2, c3; double e; c0 = qd::two_sum(a[0], b, e); c1 = qd::two_sum(a[1], e, e); c2 = qd::two_sum(a[2], e, e); c3 = qd::two_sum(a[3], e, e); qd::renorm(c0, c1, c2, c3, e); return qd_real(c0, c1, c2, c3); } /* quad-double + double-double */ inline qd_real operator+(const qd_real &a, const dd_real &b) { double s0, s1, s2, s3; double t0, t1; s0 = qd::two_sum(a[0], b._hi(), t0); s1 = qd::two_sum(a[1], b._lo(), t1); s1 = qd::two_sum(s1, t0, t0); s2 = a[2]; qd::three_sum(s2, t0, t1); s3 = qd::two_sum(t0, a[3], t0); t0 += t1; qd::renorm(s0, s1, s2, s3, t0); return qd_real(s0, s1, s2, s3); } /* double + quad-double */ inline qd_real operator+(double a, const qd_real &b) { return (b + a); } /* double-double + quad-double */ inline qd_real operator+(const dd_real &a, const qd_real &b) { return (b + a); } namespace qd { /* s = quick_three_accum(a, b, c) adds c to the dd-pair (a, b). * If the result does not fit in two doubles, then the sum is * output into s and (a,b) contains the remainder. Otherwise * s is zero and (a,b) contains the sum. */ inline double quick_three_accum(double &a, double &b, double c) { double s; bool za, zb; s = qd::two_sum(b, c, b); s = qd::two_sum(a, s, a); za = (a != 0.0); zb = (b != 0.0); if (za && zb) return s; if (!zb) { b = a; a = s; } else { a = s; } return 0.0; } } inline qd_real qd_real::ieee_add(const qd_real &a, const qd_real &b) { int i, j, k; double s, t; double u, v; /* double-length accumulator */ double x[4] = {0.0, 0.0, 0.0, 0.0}; i = j = k = 0; if (std::abs(a[i]) > std::abs(b[j])) u = a[i++]; else u = b[j++]; if (std::abs(a[i]) > std::abs(b[j])) v = a[i++]; else v = b[j++]; u = qd::quick_two_sum(u, v, v); while (k < 4) { if (i >= 4 && j >= 4) { x[k] = u; if (k < 3) x[++k] = v; break; } if (i >= 4) t = b[j++]; else if (j >= 4) t = a[i++]; else if (std::abs(a[i]) > std::abs(b[j])) { t = a[i++]; } else t = b[j++]; s = qd::quick_three_accum(u, v, t); if (s != 0.0) { x[k++] = s; } } /* add the rest. */ for (k = i; k < 4; k++) x[3] += a[k]; for (k = j; k < 4; k++) x[3] += b[k]; qd::renorm(x[0], x[1], x[2], x[3]); return qd_real(x[0], x[1], x[2], x[3]); } inline qd_real qd_real::sloppy_add(const qd_real &a, const qd_real &b) { /* double s0, s1, s2, s3; double t0, t1, t2, t3; s0 = qd::two_sum(a[0], b[0], t0); s1 = qd::two_sum(a[1], b[1], t1); s2 = qd::two_sum(a[2], b[2], t2); s3 = qd::two_sum(a[3], b[3], t3); s1 = qd::two_sum(s1, t0, t0); qd::three_sum(s2, t0, t1); qd::three_sum2(s3, t0, t2); t0 = t0 + t1 + t3; qd::renorm(s0, s1, s2, s3, t0); return qd_real(s0, s1, s2, s3, t0); */ /* Same as above, but addition re-organized to minimize data dependency ... unfortunately some compilers are not very smart to do this automatically */ double s0, s1, s2, s3; double t0, t1, t2, t3; double v0, v1, v2, v3; double u0, u1, u2, u3; double w0, w1, w2, w3; s0 = a[0] + b[0]; s1 = a[1] + b[1]; s2 = a[2] + b[2]; s3 = a[3] + b[3]; v0 = s0 - a[0]; v1 = s1 - a[1]; v2 = s2 - a[2]; v3 = s3 - a[3]; u0 = s0 - v0; u1 = s1 - v1; u2 = s2 - v2; u3 = s3 - v3; w0 = a[0] - u0; w1 = a[1] - u1; w2 = a[2] - u2; w3 = a[3] - u3; u0 = b[0] - v0; u1 = b[1] - v1; u2 = b[2] - v2; u3 = b[3] - v3; t0 = w0 + u0; t1 = w1 + u1; t2 = w2 + u2; t3 = w3 + u3; s1 = qd::two_sum(s1, t0, t0); qd::three_sum(s2, t0, t1); qd::three_sum2(s3, t0, t2); t0 = t0 + t1 + t3; /* renormalize */ qd::renorm(s0, s1, s2, s3, t0); return qd_real(s0, s1, s2, s3); } /* quad-double + quad-double */ inline qd_real operator+(const qd_real &a, const qd_real &b) { #ifndef QD_IEEE_ADD return qd_real::sloppy_add(a, b); #else return qd_real::ieee_add(a, b); #endif } /********** Self-Additions ************/ /* quad-double += double */ inline qd_real &qd_real::operator+=(double a) { *this = *this + a; return *this; } /* quad-double += double-double */ inline qd_real &qd_real::operator+=(const dd_real &a) { *this = *this + a; return *this; } /* quad-double += quad-double */ inline qd_real &qd_real::operator+=(const qd_real &a) { *this = *this + a; return *this; } /********** Unary Minus **********/ inline qd_real qd_real::operator-() const { return qd_real(-x[0], -x[1], -x[2], -x[3]); } /********** Subtractions **********/ inline qd_real operator-(const qd_real &a, double b) { return (a + (-b)); } inline qd_real operator-(double a, const qd_real &b) { return (a + (-b)); } inline qd_real operator-(const qd_real &a, const dd_real &b) { return (a + (-b)); } inline qd_real operator-(const dd_real &a, const qd_real &b) { return (a + (-b)); } inline qd_real operator-(const qd_real &a, const qd_real &b) { return (a + (-b)); } /********** Self-Subtractions **********/ inline qd_real &qd_real::operator-=(double a) { return ((*this) += (-a)); } inline qd_real &qd_real::operator-=(const dd_real &a) { return ((*this) += (-a)); } inline qd_real &qd_real::operator-=(const qd_real &a) { return ((*this) += (-a)); } inline qd_real operator*(double a, const qd_real &b) { return (b * a); } inline qd_real operator*(const dd_real &a, const qd_real &b) { return (b * a); } inline qd_real mul_pwr2(const qd_real &a, double b) { return qd_real(a[0] * b, a[1] * b, a[2] * b, a[3] * b); } /********** Multiplications **********/ inline qd_real operator*(const qd_real &a, double b) { double p0, p1, p2, p3; double q0, q1, q2; double s0, s1, s2, s3, s4; p0 = qd::two_prod(a[0], b, q0); p1 = qd::two_prod(a[1], b, q1); p2 = qd::two_prod(a[2], b, q2); p3 = a[3] * b; s0 = p0; s1 = qd::two_sum(q0, p1, s2); qd::three_sum(s2, q1, p2); qd::three_sum2(q1, q2, p3); s3 = q1; s4 = q2 + p2; qd::renorm(s0, s1, s2, s3, s4); return qd_real(s0, s1, s2, s3); } /* quad-double * double-double */ /* a0 * b0 0 a0 * b1 1 a1 * b0 2 a1 * b1 3 a2 * b0 4 a2 * b1 5 a3 * b0 6 a3 * b1 7 */ inline qd_real operator*(const qd_real &a, const dd_real &b) { double p0, p1, p2, p3, p4; double q0, q1, q2, q3, q4; double s0, s1, s2; double t0, t1; p0 = qd::two_prod(a[0], b._hi(), q0); p1 = qd::two_prod(a[0], b._lo(), q1); p2 = qd::two_prod(a[1], b._hi(), q2); p3 = qd::two_prod(a[1], b._lo(), q3); p4 = qd::two_prod(a[2], b._hi(), q4); qd::three_sum(p1, p2, q0); /* Five-Three-Sum */ qd::three_sum(p2, p3, p4); q1 = qd::two_sum(q1, q2, q2); s0 = qd::two_sum(p2, q1, t0); s1 = qd::two_sum(p3, q2, t1); s1 = qd::two_sum(s1, t0, t0); s2 = t0 + t1 + p4; p2 = s0; p3 = a[2] * b._hi() + a[3] * b._lo() + q3 + q4; qd::three_sum2(p3, q0, s1); p4 = q0 + s2; qd::renorm(p0, p1, p2, p3, p4); return qd_real(p0, p1, p2, p3); } /* quad-double * quad-double */ /* a0 * b0 0 a0 * b1 1 a1 * b0 2 a0 * b2 3 a1 * b1 4 a2 * b0 5 a0 * b3 6 a1 * b2 7 a2 * b1 8 a3 * b0 9 */ inline qd_real qd_real::sloppy_mul(const qd_real &a, const qd_real &b) { double p0, p1, p2, p3, p4, p5; double q0, q1, q2, q3, q4, q5; double t0, t1; double s0, s1, s2; p0 = qd::two_prod(a[0], b[0], q0); p1 = qd::two_prod(a[0], b[1], q1); p2 = qd::two_prod(a[1], b[0], q2); p3 = qd::two_prod(a[0], b[2], q3); p4 = qd::two_prod(a[1], b[1], q4); p5 = qd::two_prod(a[2], b[0], q5); /* Start Accumulation */ qd::three_sum(p1, p2, q0); /* Six-Three Sum of p2, q1, q2, p3, p4, p5. */ qd::three_sum(p2, q1, q2); qd::three_sum(p3, p4, p5); /* compute (s0, s1, s2) = (p2, q1, q2) + (p3, p4, p5). */ s0 = qd::two_sum(p2, p3, t0); s1 = qd::two_sum(q1, p4, t1); s2 = q2 + p5; s1 = qd::two_sum(s1, t0, t0); s2 += (t0 + t1); /* O(eps^3) order terms */ s1 += a[0]*b[3] + a[1]*b[2] + a[2]*b[1] + a[3]*b[0] + q0 + q3 + q4 + q5; qd::renorm(p0, p1, s0, s1, s2); return qd_real(p0, p1, s0, s1); } inline qd_real qd_real::accurate_mul(const qd_real &a, const qd_real &b) { double p0, p1, p2, p3, p4, p5; double q0, q1, q2, q3, q4, q5; double p6, p7, p8, p9; double q6, q7, q8, q9; double r0, r1; double t0, t1; double s0, s1, s2; p0 = qd::two_prod(a[0], b[0], q0); p1 = qd::two_prod(a[0], b[1], q1); p2 = qd::two_prod(a[1], b[0], q2); p3 = qd::two_prod(a[0], b[2], q3); p4 = qd::two_prod(a[1], b[1], q4); p5 = qd::two_prod(a[2], b[0], q5); /* Start Accumulation */ qd::three_sum(p1, p2, q0); /* Six-Three Sum of p2, q1, q2, p3, p4, p5. */ qd::three_sum(p2, q1, q2); qd::three_sum(p3, p4, p5); /* compute (s0, s1, s2) = (p2, q1, q2) + (p3, p4, p5). */ s0 = qd::two_sum(p2, p3, t0); s1 = qd::two_sum(q1, p4, t1); s2 = q2 + p5; s1 = qd::two_sum(s1, t0, t0); s2 += (t0 + t1); /* O(eps^3) order terms */ p6 = qd::two_prod(a[0], b[3], q6); p7 = qd::two_prod(a[1], b[2], q7); p8 = qd::two_prod(a[2], b[1], q8); p9 = qd::two_prod(a[3], b[0], q9); /* Nine-Two-Sum of q0, s1, q3, q4, q5, p6, p7, p8, p9. */ q0 = qd::two_sum(q0, q3, q3); q4 = qd::two_sum(q4, q5, q5); p6 = qd::two_sum(p6, p7, p7); p8 = qd::two_sum(p8, p9, p9); /* Compute (t0, t1) = (q0, q3) + (q4, q5). */ t0 = qd::two_sum(q0, q4, t1); t1 += (q3 + q5); /* Compute (r0, r1) = (p6, p7) + (p8, p9). */ r0 = qd::two_sum(p6, p8, r1); r1 += (p7 + p9); /* Compute (q3, q4) = (t0, t1) + (r0, r1). */ q3 = qd::two_sum(t0, r0, q4); q4 += (t1 + r1); /* Compute (t0, t1) = (q3, q4) + s1. */ t0 = qd::two_sum(q3, s1, t1); t1 += q4; /* O(eps^4) terms -- Nine-One-Sum */ t1 += a[1] * b[3] + a[2] * b[2] + a[3] * b[1] + q6 + q7 + q8 + q9 + s2; qd::renorm(p0, p1, s0, t0, t1); return qd_real(p0, p1, s0, t0); } inline qd_real operator*(const qd_real &a, const qd_real &b) { #ifdef QD_SLOPPY_MUL return qd_real::sloppy_mul(a, b); #else return qd_real::accurate_mul(a, b); #endif } /* quad-double ^ 2 = (x0 + x1 + x2 + x3) ^ 2 = x0 ^ 2 + 2 x0 * x1 + (2 x0 * x2 + x1 ^ 2) + (2 x0 * x3 + 2 x1 * x2) */ inline qd_real sqr(const qd_real &a) { double p0, p1, p2, p3, p4, p5; double q0, q1, q2, q3; double s0, s1; double t0, t1; p0 = qd::two_sqr(a[0], q0); p1 = qd::two_prod(2.0 * a[0], a[1], q1); p2 = qd::two_prod(2.0 * a[0], a[2], q2); p3 = qd::two_sqr(a[1], q3); p1 = qd::two_sum(q0, p1, q0); q0 = qd::two_sum(q0, q1, q1); p2 = qd::two_sum(p2, p3, p3); s0 = qd::two_sum(q0, p2, t0); s1 = qd::two_sum(q1, p3, t1); s1 = qd::two_sum(s1, t0, t0); t0 += t1; s1 = qd::quick_two_sum(s1, t0, t0); p2 = qd::quick_two_sum(s0, s1, t1); p3 = qd::quick_two_sum(t1, t0, q0); p4 = 2.0 * a[0] * a[3]; p5 = 2.0 * a[1] * a[2]; p4 = qd::two_sum(p4, p5, p5); q2 = qd::two_sum(q2, q3, q3); t0 = qd::two_sum(p4, q2, t1); t1 = t1 + p5 + q3; p3 = qd::two_sum(p3, t0, p4); p4 = p4 + q0 + t1; qd::renorm(p0, p1, p2, p3, p4); return qd_real(p0, p1, p2, p3); } /********** Self-Multiplication **********/ /* quad-double *= double */ inline qd_real &qd_real::operator*=(double a) { *this = (*this * a); return *this; } /* quad-double *= double-double */ inline qd_real &qd_real::operator*=(const dd_real &a) { *this = (*this * a); return *this; } /* quad-double *= quad-double */ inline qd_real &qd_real::operator*=(const qd_real &a) { *this = *this * a; return *this; } inline qd_real operator/ (const qd_real &a, const dd_real &b) { #ifdef QD_SLOPPY_DIV return qd_real::sloppy_div(a, b); #else return qd_real::accurate_div(a, b); #endif } inline qd_real operator/(const qd_real &a, const qd_real &b) { #ifdef QD_SLOPPY_DIV return qd_real::sloppy_div(a, b); #else return qd_real::accurate_div(a, b); #endif } /* double / quad-double */ inline qd_real operator/(double a, const qd_real &b) { return qd_real(a) / b; } /* double-double / quad-double */ inline qd_real operator/(const dd_real &a, const qd_real &b) { return qd_real(a) / b; } /********** Self-Divisions **********/ /* quad-double /= double */ inline qd_real &qd_real::operator/=(double a) { *this = (*this / a); return *this; } /* quad-double /= double-double */ inline qd_real &qd_real::operator/=(const dd_real &a) { *this = (*this / a); return *this; } /* quad-double /= quad-double */ inline qd_real &qd_real::operator/=(const qd_real &a) { *this = (*this / a); return *this; } /********** Exponentiation **********/ inline qd_real qd_real::operator^(int n) const { return pow(*this, n); } /********** Miscellaneous **********/ inline qd_real abs(const qd_real &a) { return (a[0] < 0.0) ? -a : a; } inline qd_real fabs(const qd_real &a) { return abs(a); } /* Quick version. May be off by one when qd is very close to the middle of two integers. */ inline qd_real quick_nint(const qd_real &a) { qd_real r = qd_real(qd::nint(a[0]), qd::nint(a[1]), qd::nint(a[2]), qd::nint(a[3])); r.renorm(); return r; } /*********** Assignments ************/ /* quad-double = double */ inline qd_real &qd_real::operator=(double a) { x[0] = a; x[1] = x[2] = x[3] = 0.0; return *this; } /* quad-double = double-double */ inline qd_real &qd_real::operator=(const dd_real &a) { x[0] = a._hi(); x[1] = a._lo(); x[2] = x[3] = 0.0; return *this; } /********** Equality Comparison **********/ inline bool operator==(const qd_real &a, double b) { return (a[0] == b && a[1] == 0.0 && a[2] == 0.0 && a[3] == 0.0); } inline bool operator==(double a, const qd_real &b) { return (b == a); } inline bool operator==(const qd_real &a, const dd_real &b) { return (a[0] == b._hi() && a[1] == b._lo() && a[2] == 0.0 && a[3] == 0.0); } inline bool operator==(const dd_real &a, const qd_real &b) { return (b == a); } inline bool operator==(const qd_real &a, const qd_real &b) { return (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3]); } /********** Less-Than Comparison ***********/ inline bool operator<(const qd_real &a, double b) { return (a[0] < b || (a[0] == b && a[1] < 0.0)); } inline bool operator<(double a, const qd_real &b) { return (b > a); } inline bool operator<(const qd_real &a, const dd_real &b) { return (a[0] < b._hi() || (a[0] == b._hi() && (a[1] < b._lo() || (a[1] == b._lo() && a[2] < 0.0)))); } inline bool operator<(const dd_real &a, const qd_real &b) { return (b > a); } inline bool operator<(const qd_real &a, const qd_real &b) { return (a[0] < b[0] || (a[0] == b[0] && (a[1] < b[1] || (a[1] == b[1] && (a[2] < b[2] || (a[2] == b[2] && a[3] < b[3])))))); } /********** Greater-Than Comparison ***********/ inline bool operator>(const qd_real &a, double b) { return (a[0] > b || (a[0] == b && a[1] > 0.0)); } inline bool operator>(double a, const qd_real &b) { return (b < a); } inline bool operator>(const qd_real &a, const dd_real &b) { return (a[0] > b._hi() || (a[0] == b._hi() && (a[1] > b._lo() || (a[1] == b._lo() && a[2] > 0.0)))); } inline bool operator>(const dd_real &a, const qd_real &b) { return (b < a); } inline bool operator>(const qd_real &a, const qd_real &b) { return (a[0] > b[0] || (a[0] == b[0] && (a[1] > b[1] || (a[1] == b[1] && (a[2] > b[2] || (a[2] == b[2] && a[3] > b[3])))))); } /********** Less-Than-Or-Equal-To Comparison **********/ inline bool operator<=(const qd_real &a, double b) { return (a[0] < b || (a[0] == b && a[1] <= 0.0)); } inline bool operator<=(double a, const qd_real &b) { return (b >= a); } inline bool operator<=(const qd_real &a, const dd_real &b) { return (a[0] < b._hi() || (a[0] == b._hi() && (a[1] < b._lo() || (a[1] == b._lo() && a[2] <= 0.0)))); } inline bool operator<=(const dd_real &a, const qd_real &b) { return (b >= a); } inline bool operator<=(const qd_real &a, const qd_real &b) { return (a[0] < b[0] || (a[0] == b[0] && (a[1] < b[1] || (a[1] == b[1] && (a[2] < b[2] || (a[2] == b[2] && a[3] <= b[3])))))); } /********** Greater-Than-Or-Equal-To Comparison **********/ inline bool operator>=(const qd_real &a, double b) { return (a[0] > b || (a[0] == b && a[1] >= 0.0)); } inline bool operator>=(double a, const qd_real &b) { return (b <= a); } inline bool operator>=(const qd_real &a, const dd_real &b) { return (a[0] > b._hi() || (a[0] == b._hi() && (a[1] > b._lo() || (a[1] == b._lo() && a[2] >= 0.0)))); } inline bool operator>=(const dd_real &a, const qd_real &b) { return (b <= a); } inline bool operator>=(const qd_real &a, const qd_real &b) { return (a[0] > b[0] || (a[0] == b[0] && (a[1] > b[1] || (a[1] == b[1] && (a[2] > b[2] || (a[2] == b[2] && a[3] >= b[3])))))); } /********** Not-Equal-To Comparison **********/ inline bool operator!=(const qd_real &a, double b) { return !(a == b); } inline bool operator!=(double a, const qd_real &b) { return !(a == b); } inline bool operator!=(const qd_real &a, const dd_real &b) { return !(a == b); } inline bool operator!=(const dd_real &a, const qd_real &b) { return !(a == b); } inline bool operator!=(const qd_real &a, const qd_real &b) { return !(a == b); } inline qd_real aint(const qd_real &a) { return (a[0] >= 0) ? floor(a) : ceil(a); } inline bool qd_real::is_zero() const { return (x[0] == 0.0); } inline bool qd_real::is_one() const { return (x[0] == 1.0 && x[1] == 0.0 && x[2] == 0.0 && x[3] == 0.0); } inline bool qd_real::is_positive() const { return (x[0] > 0.0); } inline bool qd_real::is_negative() const { return (x[0] < 0.0); } inline dd_real to_dd_real(const qd_real &a) { return dd_real(a[0], a[1]); } inline double to_double(const qd_real &a) { return a[0]; } inline int to_int(const qd_real &a) { return static_cast(a[0]); } inline qd_real inv(const qd_real &qd) { return 1.0 / qd; } inline qd_real max(const qd_real &a, const qd_real &b) { return (a > b) ? a : b; } inline qd_real max(const qd_real &a, const qd_real &b, const qd_real &c) { return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c); } inline qd_real min(const qd_real &a, const qd_real &b) { return (a < b) ? a : b; } inline qd_real min(const qd_real &a, const qd_real &b, const qd_real &c) { return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c); } /* Random number generator */ inline qd_real qd_real::rand() { return qdrand(); } inline qd_real ldexp(const qd_real &a, int n) { return qd_real(std::ldexp(a[0], n), std::ldexp(a[1], n), std::ldexp(a[2], n), std::ldexp(a[3], n)); } #endif /* _QD_QD_INLINE_H */ qd-2.3.11/include/qd/fpu.h0000644000175000017500000000163411202062041015434 0ustar prudhommprudhomm/* * include/fpu.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2001 * * Contains functions to set and restore the round-to-double flag in the * control word of a x86 FPU. The algorithms in the double-double and * quad-double package does not function with the extended mode found in * these FPU. */ #ifndef _QD_FPU_H #define _QD_FPU_H #include #ifdef __cplusplus extern "C" { #endif /* * Set the round-to-double flag, and save the old control word in old_cw. * If old_cw is NULL, the old control word is not saved. */ QD_API void fpu_fix_start(unsigned int *old_cw); /* * Restore the control word. */ QD_API void fpu_fix_end(unsigned int *old_cw); #ifdef __cplusplus } #endif #endif /* _QD_FPU_H */ qd-2.3.11/include/qd/dd_real.h0000644000175000017500000002121311316272435016247 0ustar prudhommprudhomm/* * include/dd_real.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2007 * * Double-double precision (>= 106-bit significand) floating point * arithmetic package based on David Bailey's Fortran-90 double-double * package, with some changes. See * * http://www.nersc.gov/~dhbailey/mpdist/mpdist.html * * for the original Fortran-90 version. * * Overall structure is similar to that of Keith Brigg's C++ double-double * package. See * * http://www-epidem.plansci.cam.ac.uk/~kbriggs/doubledouble.html * * for more details. In particular, the fix for x86 computers is borrowed * from his code. * * Yozo Hida */ #ifndef _QD_DD_REAL_H #define _QD_DD_REAL_H #include #include #include #include #include #include // Some compilers define isnan, isfinite, and isinf as macros, even for // C++ codes, which cause havoc when overloading these functions. We undef // them here. #ifdef isnan #undef isnan #endif #ifdef isfinite #undef isfinite #endif #ifdef isinf #undef isinf #endif #ifdef max #undef max #endif #ifdef min #undef min #endif struct QD_API dd_real { double x[2]; dd_real(double hi, double lo) { x[0] = hi; x[1] = lo; } dd_real() {x[0] = 0.0; x[1] = 0.0; } dd_real(double h) { x[0] = h; x[1] = 0.0; } dd_real(int h) { x[0] = (static_cast(h)); x[1] = 0.0; } dd_real (const char *s); explicit dd_real (const double *d) { x[0] = d[0]; x[1] = d[1]; } static void error(const char *msg); double _hi() const { return x[0]; } double _lo() const { return x[1]; } static const dd_real _2pi; static const dd_real _pi; static const dd_real _3pi4; static const dd_real _pi2; static const dd_real _pi4; static const dd_real _e; static const dd_real _log2; static const dd_real _log10; static const dd_real _nan; static const dd_real _inf; static const double _eps; static const double _min_normalized; static const dd_real _max; static const dd_real _safe_max; static const int _ndigits; bool isnan() const { return QD_ISNAN(x[0]) || QD_ISNAN(x[1]); } bool isfinite() const { return QD_ISFINITE(x[0]); } bool isinf() const { return QD_ISINF(x[0]); } static dd_real add(double a, double b); static dd_real ieee_add(const dd_real &a, const dd_real &b); static dd_real sloppy_add(const dd_real &a, const dd_real &b); dd_real &operator+=(double a); dd_real &operator+=(const dd_real &a); static dd_real sub(double a, double b); dd_real &operator-=(double a); dd_real &operator-=(const dd_real &a); dd_real operator-() const; static dd_real mul(double a, double b); dd_real &operator*=(double a); dd_real &operator*=(const dd_real &a); static dd_real div(double a, double b); static dd_real sloppy_div(const dd_real &a, const dd_real &b); static dd_real accurate_div(const dd_real &a, const dd_real &b); dd_real &operator/=(double a); dd_real &operator/=(const dd_real &a); dd_real &operator=(double a); dd_real &operator=(const char *s); dd_real operator^(int n); static dd_real sqr(double d); static dd_real sqrt(double a); bool is_zero() const; bool is_one() const; bool is_positive() const; bool is_negative() const; static dd_real rand(void); void to_digits(char *s, int &expn, int precision = _ndigits) const; void write(char *s, int len, int precision = _ndigits, bool showpos = false, bool uppercase = false) const; std::string to_string(int precision = _ndigits, int width = 0, std::ios_base::fmtflags fmt = static_cast(0), bool showpos = false, bool uppercase = false, char fill = ' ') const; int read(const char *s, dd_real &a); /* Debugging Methods */ void dump(const std::string &name = "", std::ostream &os = std::cerr) const; void dump_bits(const std::string &name = "", std::ostream &os = std::cerr) const; static dd_real debug_rand(); }; namespace std { template <> class numeric_limits : public numeric_limits { public: inline static double epsilon() { return dd_real::_eps; } inline static dd_real max() { return dd_real::_max; } inline static dd_real safe_max() { return dd_real::_safe_max; } inline static double min() { return dd_real::_min_normalized; } static const int digits = 104; static const int digits10 = 31; }; } QD_API dd_real ddrand(void); QD_API dd_real sqrt(const dd_real &a); QD_API dd_real polyeval(const dd_real *c, int n, const dd_real &x); QD_API dd_real polyroot(const dd_real *c, int n, const dd_real &x0, int max_iter = 32, double thresh = 0.0); QD_API inline bool isnan(const dd_real &a) { return a.isnan(); } QD_API inline bool isfinite(const dd_real &a) { return a.isfinite(); } QD_API inline bool isinf(const dd_real &a) { return a.isinf(); } /* Computes dd * d where d is known to be a power of 2. */ QD_API dd_real mul_pwr2(const dd_real &dd, double d); QD_API dd_real operator+(const dd_real &a, double b); QD_API dd_real operator+(double a, const dd_real &b); QD_API dd_real operator+(const dd_real &a, const dd_real &b); QD_API dd_real operator-(const dd_real &a, double b); QD_API dd_real operator-(double a, const dd_real &b); QD_API dd_real operator-(const dd_real &a, const dd_real &b); QD_API dd_real operator*(const dd_real &a, double b); QD_API dd_real operator*(double a, const dd_real &b); QD_API dd_real operator*(const dd_real &a, const dd_real &b); QD_API dd_real operator/(const dd_real &a, double b); QD_API dd_real operator/(double a, const dd_real &b); QD_API dd_real operator/(const dd_real &a, const dd_real &b); QD_API dd_real inv(const dd_real &a); QD_API dd_real rem(const dd_real &a, const dd_real &b); QD_API dd_real drem(const dd_real &a, const dd_real &b); QD_API dd_real divrem(const dd_real &a, const dd_real &b, dd_real &r); QD_API dd_real pow(const dd_real &a, int n); QD_API dd_real pow(const dd_real &a, const dd_real &b); QD_API dd_real npwr(const dd_real &a, int n); QD_API dd_real sqr(const dd_real &a); QD_API dd_real sqrt(const dd_real &a); QD_API dd_real nroot(const dd_real &a, int n); QD_API bool operator==(const dd_real &a, double b); QD_API bool operator==(double a, const dd_real &b); QD_API bool operator==(const dd_real &a, const dd_real &b); QD_API bool operator<=(const dd_real &a, double b); QD_API bool operator<=(double a, const dd_real &b); QD_API bool operator<=(const dd_real &a, const dd_real &b); QD_API bool operator>=(const dd_real &a, double b); QD_API bool operator>=(double a, const dd_real &b); QD_API bool operator>=(const dd_real &a, const dd_real &b); QD_API bool operator<(const dd_real &a, double b); QD_API bool operator<(double a, const dd_real &b); QD_API bool operator<(const dd_real &a, const dd_real &b); QD_API bool operator>(const dd_real &a, double b); QD_API bool operator>(double a, const dd_real &b); QD_API bool operator>(const dd_real &a, const dd_real &b); QD_API bool operator!=(const dd_real &a, double b); QD_API bool operator!=(double a, const dd_real &b); QD_API bool operator!=(const dd_real &a, const dd_real &b); QD_API dd_real nint(const dd_real &a); QD_API dd_real floor(const dd_real &a); QD_API dd_real ceil(const dd_real &a); QD_API dd_real aint(const dd_real &a); QD_API dd_real ddrand(void); double to_double(const dd_real &a); int to_int(const dd_real &a); QD_API dd_real exp(const dd_real &a); QD_API dd_real ldexp(const dd_real &a, int exp); QD_API dd_real log(const dd_real &a); QD_API dd_real log10(const dd_real &a); QD_API dd_real sin(const dd_real &a); QD_API dd_real cos(const dd_real &a); QD_API dd_real tan(const dd_real &a); QD_API void sincos(const dd_real &a, dd_real &sin_a, dd_real &cos_a); QD_API dd_real asin(const dd_real &a); QD_API dd_real acos(const dd_real &a); QD_API dd_real atan(const dd_real &a); QD_API dd_real atan2(const dd_real &y, const dd_real &x); QD_API dd_real sinh(const dd_real &a); QD_API dd_real cosh(const dd_real &a); QD_API dd_real tanh(const dd_real &a); QD_API void sincosh(const dd_real &a, dd_real &sinh_a, dd_real &cosh_a); QD_API dd_real asinh(const dd_real &a); QD_API dd_real acosh(const dd_real &a); QD_API dd_real atanh(const dd_real &a); QD_API dd_real fabs(const dd_real &a); QD_API dd_real abs(const dd_real &a); /* same as fabs */ QD_API dd_real fmod(const dd_real &a, const dd_real &b); QD_API std::ostream& operator<<(std::ostream &s, const dd_real &a); QD_API std::istream& operator>>(std::istream &s, dd_real &a); #ifdef QD_INLINE #include #endif #endif /* _QD_DD_REAL_H */ qd-2.3.11/include/qd/c_dd.h0000644000175000017500000000603511202062041015533 0ustar prudhommprudhomm/* * include/c_dd.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains C wrapper function prototypes for double-double precision * arithmetic. This can also be used from fortran code. */ #ifndef _QD_C_DD_H #define _QD_C_DD_H #include #include #ifdef __cplusplus extern "C" { #endif /* add */ void c_dd_add(const double *a, const double *b, double *c); void c_dd_add_d_dd(double a, const double *b, double *c); void c_dd_add_dd_d(const double *a, double b, double *c); /* sub */ void c_dd_sub(const double *a, const double *b, double *c); void c_dd_sub_d_dd(double a, const double *b, double *c); void c_dd_sub_dd_d(const double *a, double b, double *c); /* mul */ void c_dd_mul(const double *a, const double *b, double *c); void c_dd_mul_d_dd(double a, const double *b, double *c); void c_dd_mul_dd_d(const double *a, double b, double *c); /* div */ void c_dd_div(const double *a, const double *b, double *c); void c_dd_div_d_dd(double a, const double *b, double *c); void c_dd_div_dd_d(const double *a, double b, double *c); /* copy */ void c_dd_copy(const double *a, double *b); void c_dd_copy_d(double a, double *b); void c_dd_sqrt(const double *a, double *b); void c_dd_sqr(const double *a, double *b); void c_dd_abs(const double *a, double *b); void c_dd_npwr(const double *a, int b, double *c); void c_dd_nroot(const double *a, int b, double *c); void c_dd_nint(const double *a, double *b); void c_dd_aint(const double *a, double *b); void c_dd_floor(const double *a, double *b); void c_dd_ceil(const double *a, double *b); void c_dd_exp(const double *a, double *b); void c_dd_log(const double *a, double *b); void c_dd_log10(const double *a, double *b); void c_dd_sin(const double *a, double *b); void c_dd_cos(const double *a, double *b); void c_dd_tan(const double *a, double *b); void c_dd_asin(const double *a, double *b); void c_dd_acos(const double *a, double *b); void c_dd_atan(const double *a, double *b); void c_dd_atan2(const double *a, const double *b, double *c); void c_dd_sinh(const double *a, double *b); void c_dd_cosh(const double *a, double *b); void c_dd_tanh(const double *a, double *b); void c_dd_asinh(const double *a, double *b); void c_dd_acosh(const double *a, double *b); void c_dd_atanh(const double *a, double *b); void c_dd_sincos(const double *a, double *s, double *c); void c_dd_sincosh(const double *a, double *s, double *c); void c_dd_read(const char *s, double *a); void c_dd_swrite(const double *a, int precision, char *s, int len); void c_dd_write(const double *a); void c_dd_neg(const double *a, double *b); void c_dd_rand(double *a); void c_dd_comp(const double *a, const double *b, int *result); void c_dd_comp_dd_d(const double *a, double b, int *result); void c_dd_comp_d_dd(double a, const double *b, int *result); void c_dd_pi(double *a); #ifdef __cplusplus } #endif #endif /* _QD_C_DD_H */ qd-2.3.11/include/qd/inline.h0000644000175000017500000000676311202062041016130 0ustar prudhommprudhomm/* * include/inline.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * This file contains the basic functions used both by double-double * and quad-double package. These are declared as inline functions as * they are the smallest building blocks of the double-double and * quad-double arithmetic. */ #ifndef _QD_INLINE_H #define _QD_INLINE_H #define _QD_SPLITTER 134217729.0 // = 2^27 + 1 #define _QD_SPLIT_THRESH 6.69692879491417e+299 // = 2^996 #ifdef QD_VACPP_BUILTINS_H /* For VisualAge C++ __fmadd */ #include #endif #include #include namespace qd { static const double _d_nan = std::numeric_limits::quiet_NaN(); static const double _d_inf = std::numeric_limits::infinity(); /*********** Basic Functions ************/ /* Computes fl(a+b) and err(a+b). Assumes |a| >= |b|. */ inline double quick_two_sum(double a, double b, double &err) { double s = a + b; err = b - (s - a); return s; } /* Computes fl(a-b) and err(a-b). Assumes |a| >= |b| */ inline double quick_two_diff(double a, double b, double &err) { double s = a - b; err = (a - s) - b; return s; } /* Computes fl(a+b) and err(a+b). */ inline double two_sum(double a, double b, double &err) { double s = a + b; double bb = s - a; err = (a - (s - bb)) + (b - bb); return s; } /* Computes fl(a-b) and err(a-b). */ inline double two_diff(double a, double b, double &err) { double s = a - b; double bb = s - a; err = (a - (s - bb)) - (b + bb); return s; } #ifndef QD_FMS /* Computes high word and lo word of a */ inline void split(double a, double &hi, double &lo) { double temp; if (a > _QD_SPLIT_THRESH || a < -_QD_SPLIT_THRESH) { a *= 3.7252902984619140625e-09; // 2^-28 temp = _QD_SPLITTER * a; hi = temp - (temp - a); lo = a - hi; hi *= 268435456.0; // 2^28 lo *= 268435456.0; // 2^28 } else { temp = _QD_SPLITTER * a; hi = temp - (temp - a); lo = a - hi; } } #endif /* Computes fl(a*b) and err(a*b). */ inline double two_prod(double a, double b, double &err) { #ifdef QD_FMS double p = a * b; err = QD_FMS(a, b, p); return p; #else double a_hi, a_lo, b_hi, b_lo; double p = a * b; split(a, a_hi, a_lo); split(b, b_hi, b_lo); err = ((a_hi * b_hi - p) + a_hi * b_lo + a_lo * b_hi) + a_lo * b_lo; return p; #endif } /* Computes fl(a*a) and err(a*a). Faster than the above method. */ inline double two_sqr(double a, double &err) { #ifdef QD_FMS double p = a * a; err = QD_FMS(a, a, p); return p; #else double hi, lo; double q = a * a; split(a, hi, lo); err = ((hi * hi - q) + 2.0 * hi * lo) + lo * lo; return q; #endif } /* Computes the nearest integer to d. */ inline double nint(double d) { if (d == std::floor(d)) return d; return std::floor(d + 0.5); } /* Computes the truncated integer. */ inline double aint(double d) { return (d >= 0.0) ? std::floor(d) : std::ceil(d); } /* These are provided to give consistent interface for double with double-double and quad-double. */ inline void sincosh(double t, double &sinh_t, double &cosh_t) { sinh_t = std::sinh(t); cosh_t = std::cosh(t); } inline double sqr(double t) { return t * t; } inline double to_double(double a) { return a; } inline int to_int(double a) { return static_cast(a); } } #endif /* _QD_INLINE_H */ qd-2.3.11/include/qd/bits.h0000644000175000017500000000157611202062041015610 0ustar prudhommprudhomm/* * include/bits.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * This file defines various routines to get / set bits of a IEEE floating * point number. This is used by the library for debugging purposes. */ #ifndef _QD_BITS_H #define _QD_BITS_H #include #include /* Returns the exponent of the double precision number. Returns INT_MIN is x is zero, and INT_MAX if x is INF or NaN. */ int get_double_expn(double x); /* Prints SIGN EXPN MANTISSA of the given double. If x is NaN, INF, or Zero, this prints out the strings NaN, +/- INF, and 0. */ void print_double_info(std::ostream &os, double x); #endif /* _QD_BITS_H */ qd-2.3.11/include/qd/dd_inline.h0000644000175000017500000003426211202062041016572 0ustar prudhommprudhomm/* * include/dd_inline.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains small functions (suitable for inlining) in the double-double * arithmetic package. */ #ifndef _QD_DD_INLINE_H #define _QD_DD_INLINE_H #include #include #ifndef QD_INLINE #define inline #endif /*********** Additions ************/ /* double-double = double + double */ inline dd_real dd_real::add(double a, double b) { double s, e; s = qd::two_sum(a, b, e); return dd_real(s, e); } /* double-double + double */ inline dd_real operator+(const dd_real &a, double b) { double s1, s2; s1 = qd::two_sum(a.x[0], b, s2); s2 += a.x[1]; s1 = qd::quick_two_sum(s1, s2, s2); return dd_real(s1, s2); } /* double-double + double-double */ inline dd_real dd_real::ieee_add(const dd_real &a, const dd_real &b) { /* This one satisfies IEEE style error bound, due to K. Briggs and W. Kahan. */ double s1, s2, t1, t2; s1 = qd::two_sum(a.x[0], b.x[0], s2); t1 = qd::two_sum(a.x[1], b.x[1], t2); s2 += t1; s1 = qd::quick_two_sum(s1, s2, s2); s2 += t2; s1 = qd::quick_two_sum(s1, s2, s2); return dd_real(s1, s2); } inline dd_real dd_real::sloppy_add(const dd_real &a, const dd_real &b) { /* This is the less accurate version ... obeys Cray-style error bound. */ double s, e; s = qd::two_sum(a.x[0], b.x[0], e); e += (a.x[1] + b.x[1]); s = qd::quick_two_sum(s, e, e); return dd_real(s, e); } inline dd_real operator+(const dd_real &a, const dd_real &b) { #ifndef QD_IEEE_ADD return dd_real::sloppy_add(a, b); #else return dd_real::ieee_add(a, b); #endif } /* double + double-double */ inline dd_real operator+(double a, const dd_real &b) { return (b + a); } /*********** Self-Additions ************/ /* double-double += double */ inline dd_real &dd_real::operator+=(double a) { double s1, s2; s1 = qd::two_sum(x[0], a, s2); s2 += x[1]; x[0] = qd::quick_two_sum(s1, s2, x[1]); return *this; } /* double-double += double-double */ inline dd_real &dd_real::operator+=(const dd_real &a) { #ifndef QD_IEEE_ADD double s, e; s = qd::two_sum(x[0], a.x[0], e); e += x[1]; e += a.x[1]; x[0] = qd::quick_two_sum(s, e, x[1]); return *this; #else double s1, s2, t1, t2; s1 = qd::two_sum(x[0], a.x[0], s2); t1 = qd::two_sum(x[1], a.x[1], t2); s2 += t1; s1 = qd::quick_two_sum(s1, s2, s2); s2 += t2; x[0] = qd::quick_two_sum(s1, s2, x[1]); return *this; #endif } /*********** Subtractions ************/ /* double-double = double - double */ inline dd_real dd_real::sub(double a, double b) { double s, e; s = qd::two_diff(a, b, e); return dd_real(s, e); } /* double-double - double */ inline dd_real operator-(const dd_real &a, double b) { double s1, s2; s1 = qd::two_diff(a.x[0], b, s2); s2 += a.x[1]; s1 = qd::quick_two_sum(s1, s2, s2); return dd_real(s1, s2); } /* double-double - double-double */ inline dd_real operator-(const dd_real &a, const dd_real &b) { #ifndef QD_IEEE_ADD double s, e; s = qd::two_diff(a.x[0], b.x[0], e); e += a.x[1]; e -= b.x[1]; s = qd::quick_two_sum(s, e, e); return dd_real(s, e); #else double s1, s2, t1, t2; s1 = qd::two_diff(a.x[0], b.x[0], s2); t1 = qd::two_diff(a.x[1], b.x[1], t2); s2 += t1; s1 = qd::quick_two_sum(s1, s2, s2); s2 += t2; s1 = qd::quick_two_sum(s1, s2, s2); return dd_real(s1, s2); #endif } /* double - double-double */ inline dd_real operator-(double a, const dd_real &b) { double s1, s2; s1 = qd::two_diff(a, b.x[0], s2); s2 -= b.x[1]; s1 = qd::quick_two_sum(s1, s2, s2); return dd_real(s1, s2); } /*********** Self-Subtractions ************/ /* double-double -= double */ inline dd_real &dd_real::operator-=(double a) { double s1, s2; s1 = qd::two_diff(x[0], a, s2); s2 += x[1]; x[0] = qd::quick_two_sum(s1, s2, x[1]); return *this; } /* double-double -= double-double */ inline dd_real &dd_real::operator-=(const dd_real &a) { #ifndef QD_IEEE_ADD double s, e; s = qd::two_diff(x[0], a.x[0], e); e += x[1]; e -= a.x[1]; x[0] = qd::quick_two_sum(s, e, x[1]); return *this; #else double s1, s2, t1, t2; s1 = qd::two_diff(x[0], a.x[0], s2); t1 = qd::two_diff(x[1], a.x[1], t2); s2 += t1; s1 = qd::quick_two_sum(s1, s2, s2); s2 += t2; x[0] = qd::quick_two_sum(s1, s2, x[1]); return *this; #endif } /*********** Unary Minus ***********/ inline dd_real dd_real::operator-() const { return dd_real(-x[0], -x[1]); } /*********** Multiplications ************/ /* double-double = double * double */ inline dd_real dd_real::mul(double a, double b) { double p, e; p = qd::two_prod(a, b, e); return dd_real(p, e); } /* double-double * (2.0 ^ exp) */ inline dd_real ldexp(const dd_real &a, int exp) { return dd_real(std::ldexp(a.x[0], exp), std::ldexp(a.x[1], exp)); } /* double-double * double, where double is a power of 2. */ inline dd_real mul_pwr2(const dd_real &a, double b) { return dd_real(a.x[0] * b, a.x[1] * b); } /* double-double * double */ inline dd_real operator*(const dd_real &a, double b) { double p1, p2; p1 = qd::two_prod(a.x[0], b, p2); p2 += (a.x[1] * b); p1 = qd::quick_two_sum(p1, p2, p2); return dd_real(p1, p2); } /* double-double * double-double */ inline dd_real operator*(const dd_real &a, const dd_real &b) { double p1, p2; p1 = qd::two_prod(a.x[0], b.x[0], p2); p2 += (a.x[0] * b.x[1] + a.x[1] * b.x[0]); p1 = qd::quick_two_sum(p1, p2, p2); return dd_real(p1, p2); } /* double * double-double */ inline dd_real operator*(double a, const dd_real &b) { return (b * a); } /*********** Self-Multiplications ************/ /* double-double *= double */ inline dd_real &dd_real::operator*=(double a) { double p1, p2; p1 = qd::two_prod(x[0], a, p2); p2 += x[1] * a; x[0] = qd::quick_two_sum(p1, p2, x[1]); return *this; } /* double-double *= double-double */ inline dd_real &dd_real::operator*=(const dd_real &a) { double p1, p2; p1 = qd::two_prod(x[0], a.x[0], p2); p2 += a.x[1] * x[0]; p2 += a.x[0] * x[1]; x[0] = qd::quick_two_sum(p1, p2, x[1]); return *this; } /*********** Divisions ************/ inline dd_real dd_real::div(double a, double b) { double q1, q2; double p1, p2; double s, e; q1 = a / b; /* Compute a - q1 * b */ p1 = qd::two_prod(q1, b, p2); s = qd::two_diff(a, p1, e); e -= p2; /* get next approximation */ q2 = (s + e) / b; s = qd::quick_two_sum(q1, q2, e); return dd_real(s, e); } /* double-double / double */ inline dd_real operator/(const dd_real &a, double b) { double q1, q2; double p1, p2; double s, e; dd_real r; q1 = a.x[0] / b; /* approximate quotient. */ /* Compute this - q1 * d */ p1 = qd::two_prod(q1, b, p2); s = qd::two_diff(a.x[0], p1, e); e += a.x[1]; e -= p2; /* get next approximation. */ q2 = (s + e) / b; /* renormalize */ r.x[0] = qd::quick_two_sum(q1, q2, r.x[1]); return r; } inline dd_real dd_real::sloppy_div(const dd_real &a, const dd_real &b) { double s1, s2; double q1, q2; dd_real r; q1 = a.x[0] / b.x[0]; /* approximate quotient */ /* compute this - q1 * dd */ r = b * q1; s1 = qd::two_diff(a.x[0], r.x[0], s2); s2 -= r.x[1]; s2 += a.x[1]; /* get next approximation */ q2 = (s1 + s2) / b.x[0]; /* renormalize */ r.x[0] = qd::quick_two_sum(q1, q2, r.x[1]); return r; } inline dd_real dd_real::accurate_div(const dd_real &a, const dd_real &b) { double q1, q2, q3; dd_real r; q1 = a.x[0] / b.x[0]; /* approximate quotient */ r = a - q1 * b; q2 = r.x[0] / b.x[0]; r -= (q2 * b); q3 = r.x[0] / b.x[0]; q1 = qd::quick_two_sum(q1, q2, q2); r = dd_real(q1, q2) + q3; return r; } /* double-double / double-double */ inline dd_real operator/(const dd_real &a, const dd_real &b) { #ifdef QD_SLOPPY_DIV return dd_real::sloppy_div(a, b); #else return dd_real::accurate_div(a, b); #endif } /* double / double-double */ inline dd_real operator/(double a, const dd_real &b) { return dd_real(a) / b; } inline dd_real inv(const dd_real &a) { return 1.0 / a; } /*********** Self-Divisions ************/ /* double-double /= double */ inline dd_real &dd_real::operator/=(double a) { *this = *this / a; return *this; } /* double-double /= double-double */ inline dd_real &dd_real::operator/=(const dd_real &a) { *this = *this / a; return *this; } /********** Remainder **********/ inline dd_real drem(const dd_real &a, const dd_real &b) { dd_real n = nint(a / b); return (a - n * b); } inline dd_real divrem(const dd_real &a, const dd_real &b, dd_real &r) { dd_real n = nint(a / b); r = a - n * b; return n; } /*********** Squaring **********/ inline dd_real sqr(const dd_real &a) { double p1, p2; double s1, s2; p1 = qd::two_sqr(a.x[0], p2); p2 += 2.0 * a.x[0] * a.x[1]; p2 += a.x[1] * a.x[1]; s1 = qd::quick_two_sum(p1, p2, s2); return dd_real(s1, s2); } inline dd_real dd_real::sqr(double a) { double p1, p2; p1 = qd::two_sqr(a, p2); return dd_real(p1, p2); } /********** Exponentiation **********/ inline dd_real dd_real::operator^(int n) { return npwr(*this, n); } /*********** Assignments ************/ /* double-double = double */ inline dd_real &dd_real::operator=(double a) { x[0] = a; x[1] = 0.0; return *this; } /*********** Equality Comparisons ************/ /* double-double == double */ inline bool operator==(const dd_real &a, double b) { return (a.x[0] == b && a.x[1] == 0.0); } /* double-double == double-double */ inline bool operator==(const dd_real &a, const dd_real &b) { return (a.x[0] == b.x[0] && a.x[1] == b.x[1]); } /* double == double-double */ inline bool operator==(double a, const dd_real &b) { return (a == b.x[0] && b.x[1] == 0.0); } /*********** Greater-Than Comparisons ************/ /* double-double > double */ inline bool operator>(const dd_real &a, double b) { return (a.x[0] > b || (a.x[0] == b && a.x[1] > 0.0)); } /* double-double > double-double */ inline bool operator>(const dd_real &a, const dd_real &b) { return (a.x[0] > b.x[0] || (a.x[0] == b.x[0] && a.x[1] > b.x[1])); } /* double > double-double */ inline bool operator>(double a, const dd_real &b) { return (a > b.x[0] || (a == b.x[0] && b.x[1] < 0.0)); } /*********** Less-Than Comparisons ************/ /* double-double < double */ inline bool operator<(const dd_real &a, double b) { return (a.x[0] < b || (a.x[0] == b && a.x[1] < 0.0)); } /* double-double < double-double */ inline bool operator<(const dd_real &a, const dd_real &b) { return (a.x[0] < b.x[0] || (a.x[0] == b.x[0] && a.x[1] < b.x[1])); } /* double < double-double */ inline bool operator<(double a, const dd_real &b) { return (a < b.x[0] || (a == b.x[0] && b.x[1] > 0.0)); } /*********** Greater-Than-Or-Equal-To Comparisons ************/ /* double-double >= double */ inline bool operator>=(const dd_real &a, double b) { return (a.x[0] > b || (a.x[0] == b && a.x[1] >= 0.0)); } /* double-double >= double-double */ inline bool operator>=(const dd_real &a, const dd_real &b) { return (a.x[0] > b.x[0] || (a.x[0] == b.x[0] && a.x[1] >= b.x[1])); } /* double >= double-double */ inline bool operator>=(double a, const dd_real &b) { return (b <= a); } /*********** Less-Than-Or-Equal-To Comparisons ************/ /* double-double <= double */ inline bool operator<=(const dd_real &a, double b) { return (a.x[0] < b || (a.x[0] == b && a.x[1] <= 0.0)); } /* double-double <= double-double */ inline bool operator<=(const dd_real &a, const dd_real &b) { return (a.x[0] < b.x[0] || (a.x[0] == b.x[0] && a.x[1] <= b.x[1])); } /* double <= double-double */ inline bool operator<=(double a, const dd_real &b) { return (b >= a); } /*********** Not-Equal-To Comparisons ************/ /* double-double != double */ inline bool operator!=(const dd_real &a, double b) { return (a.x[0] != b || a.x[1] != 0.0); } /* double-double != double-double */ inline bool operator!=(const dd_real &a, const dd_real &b) { return (a.x[0] != b.x[0] || a.x[1] != b.x[1]); } /* double != double-double */ inline bool operator!=(double a, const dd_real &b) { return (a != b.x[0] || b.x[1] != 0.0); } /*********** Micellaneous ************/ /* this == 0 */ inline bool dd_real::is_zero() const { return (x[0] == 0.0); } /* this == 1 */ inline bool dd_real::is_one() const { return (x[0] == 1.0 && x[1] == 0.0); } /* this > 0 */ inline bool dd_real::is_positive() const { return (x[0] > 0.0); } /* this < 0 */ inline bool dd_real::is_negative() const { return (x[0] < 0.0); } /* Absolute value */ inline dd_real abs(const dd_real &a) { return (a.x[0] < 0.0) ? -a : a; } inline dd_real fabs(const dd_real &a) { return abs(a); } /* Round to Nearest integer */ inline dd_real nint(const dd_real &a) { double hi = qd::nint(a.x[0]); double lo; if (hi == a.x[0]) { /* High word is an integer already. Round the low word.*/ lo = qd::nint(a.x[1]); /* Renormalize. This is needed if x[0] = some integer, x[1] = 1/2.*/ hi = qd::quick_two_sum(hi, lo, lo); } else { /* High word is not an integer. */ lo = 0.0; if (std::abs(hi-a.x[0]) == 0.5 && a.x[1] < 0.0) { /* There is a tie in the high word, consult the low word to break the tie. */ hi -= 1.0; /* NOTE: This does not cause INEXACT. */ } } return dd_real(hi, lo); } inline dd_real floor(const dd_real &a) { double hi = std::floor(a.x[0]); double lo = 0.0; if (hi == a.x[0]) { /* High word is integer already. Round the low word. */ lo = std::floor(a.x[1]); hi = qd::quick_two_sum(hi, lo, lo); } return dd_real(hi, lo); } inline dd_real ceil(const dd_real &a) { double hi = std::ceil(a.x[0]); double lo = 0.0; if (hi == a.x[0]) { /* High word is integer already. Round the low word. */ lo = std::ceil(a.x[1]); hi = qd::quick_two_sum(hi, lo, lo); } return dd_real(hi, lo); } inline dd_real aint(const dd_real &a) { return (a.x[0] >= 0.0) ? floor(a) : ceil(a); } /* Cast to double. */ inline double to_double(const dd_real &a) { return a.x[0]; } /* Cast to int. */ inline int to_int(const dd_real &a) { return static_cast(a.x[0]); } /* Random number generator */ inline dd_real dd_real::rand() { return ddrand(); } #endif /* _QD_DD_INLINE_H */ qd-2.3.11/include/qd/qd_real.h0000644000175000017500000002407411202062041016254 0ustar prudhommprudhomm/* * include/qd_real.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2007 * * Quad-double precision (>= 212-bit significand) floating point arithmetic * package, written in ANSI C++, taking full advantage of operator overloading. * Uses similar techniques as that of David Bailey's double-double package * and that of Jonathan Shewchuk's adaptive precision floating point * arithmetic package. See * * http://www.nersc.gov/~dhbailey/mpdist/mpdist.html * http://www.cs.cmu.edu/~quake/robust.html * * for more details. * * Yozo Hida */ #ifndef _QD_QD_REAL_H #define _QD_QD_REAL_H #include #include #include #include #include struct QD_API qd_real { double x[4]; /* The Components. */ /* Eliminates any zeros in the middle component(s). */ void zero_elim(); void zero_elim(double &e); void renorm(); void renorm(double &e); void quick_accum(double d, double &e); void quick_prod_accum(double a, double b, double &e); qd_real(double x0, double x1, double x2, double x3); explicit qd_real(const double *xx); static const qd_real _2pi; static const qd_real _pi; static const qd_real _3pi4; static const qd_real _pi2; static const qd_real _pi4; static const qd_real _e; static const qd_real _log2; static const qd_real _log10; static const qd_real _nan; static const qd_real _inf; static const double _eps; static const double _min_normalized; static const qd_real _max; static const qd_real _safe_max; static const int _ndigits; qd_real(); qd_real(const char *s); qd_real(const dd_real &dd); qd_real(double d); qd_real(int i); double operator[](int i) const; double &operator[](int i); static void error(const char *msg); bool isnan() const; bool isfinite() const { return QD_ISFINITE(x[0]); } bool isinf() const { return QD_ISINF(x[0]); } static qd_real ieee_add(const qd_real &a, const qd_real &b); static qd_real sloppy_add(const qd_real &a, const qd_real &b); qd_real &operator+=(double a); qd_real &operator+=(const dd_real &a); qd_real &operator+=(const qd_real &a); qd_real &operator-=(double a); qd_real &operator-=(const dd_real &a); qd_real &operator-=(const qd_real &a); static qd_real sloppy_mul(const qd_real &a, const qd_real &b); static qd_real accurate_mul(const qd_real &a, const qd_real &b); qd_real &operator*=(double a); qd_real &operator*=(const dd_real &a); qd_real &operator*=(const qd_real &a); static qd_real sloppy_div(const qd_real &a, const dd_real &b); static qd_real accurate_div(const qd_real &a, const dd_real &b); static qd_real sloppy_div(const qd_real &a, const qd_real &b); static qd_real accurate_div(const qd_real &a, const qd_real &b); qd_real &operator/=(double a); qd_real &operator/=(const dd_real &a); qd_real &operator/=(const qd_real &a); qd_real operator^(int n) const; qd_real operator-() const; qd_real &operator=(double a); qd_real &operator=(const dd_real &a); qd_real &operator=(const char *s); bool is_zero() const; bool is_one() const; bool is_positive() const; bool is_negative() const; static qd_real rand(void); void to_digits(char *s, int &expn, int precision = _ndigits) const; void write(char *s, int len, int precision = _ndigits, bool showpos = false, bool uppercase = false) const; std::string to_string(int precision = _ndigits, int width = 0, std::ios_base::fmtflags fmt = static_cast(0), bool showpos = false, bool uppercase = false, char fill = ' ') const; static int read(const char *s, qd_real &a); /* Debugging methods */ void dump(const std::string &name = "", std::ostream &os = std::cerr) const; void dump_bits(const std::string &name = "", std::ostream &os = std::cerr) const; static qd_real debug_rand(); }; namespace std { template <> class numeric_limits : public numeric_limits { public: inline static double epsilon() { return qd_real::_eps; } inline static double min() { return qd_real::_min_normalized; } inline static qd_real max() { return qd_real::_max; } inline static qd_real safe_max() { return qd_real::_safe_max; } static const int digits = 209; static const int digits10 = 62; }; } QD_API qd_real polyeval(const qd_real *c, int n, const qd_real &x); QD_API qd_real polyroot(const qd_real *c, int n, const qd_real &x0, int max_iter = 64, double thresh = 0.0); QD_API qd_real qdrand(void); QD_API qd_real sqrt(const qd_real &a); QD_API inline bool isnan(const qd_real &a) { return a.isnan(); } QD_API inline bool isfinite(const qd_real &a) { return a.isfinite(); } QD_API inline bool isinf(const qd_real &a) { return a.isinf(); } /* Computes qd * d where d is known to be a power of 2. This can be done component wise. */ QD_API qd_real mul_pwr2(const qd_real &qd, double d); QD_API qd_real operator+(const qd_real &a, const qd_real &b); QD_API qd_real operator+(const dd_real &a, const qd_real &b); QD_API qd_real operator+(const qd_real &a, const dd_real &b); QD_API qd_real operator+(const qd_real &a, double b); QD_API qd_real operator+(double a, const qd_real &b); QD_API qd_real operator-(const qd_real &a, const qd_real &b); QD_API qd_real operator-(const dd_real &a, const qd_real &b); QD_API qd_real operator-(const qd_real &a, const dd_real &b); QD_API qd_real operator-(const qd_real &a, double b); QD_API qd_real operator-(double a, const qd_real &b); QD_API qd_real operator*(const qd_real &a, const qd_real &b); QD_API qd_real operator*(const dd_real &a, const qd_real &b); QD_API qd_real operator*(const qd_real &a, const dd_real &b); QD_API qd_real operator*(const qd_real &a, double b); QD_API qd_real operator*(double a, const qd_real &b); QD_API qd_real operator/(const qd_real &a, const qd_real &b); QD_API qd_real operator/(const dd_real &a, const qd_real &b); QD_API qd_real operator/(const qd_real &a, const dd_real &b); QD_API qd_real operator/(const qd_real &a, double b); QD_API qd_real operator/(double a, const qd_real &b); QD_API qd_real sqr(const qd_real &a); QD_API qd_real sqrt(const qd_real &a); QD_API qd_real pow(const qd_real &a, int n); QD_API qd_real pow(const qd_real &a, const qd_real &b); QD_API qd_real npwr(const qd_real &a, int n); QD_API qd_real nroot(const qd_real &a, int n); QD_API qd_real rem(const qd_real &a, const qd_real &b); QD_API qd_real drem(const qd_real &a, const qd_real &b); QD_API qd_real divrem(const qd_real &a, const qd_real &b, qd_real &r); dd_real to_dd_real(const qd_real &a); double to_double(const qd_real &a); int to_int(const qd_real &a); QD_API bool operator==(const qd_real &a, const qd_real &b); QD_API bool operator==(const qd_real &a, const dd_real &b); QD_API bool operator==(const dd_real &a, const qd_real &b); QD_API bool operator==(double a, const qd_real &b); QD_API bool operator==(const qd_real &a, double b); QD_API bool operator<(const qd_real &a, const qd_real &b); QD_API bool operator<(const qd_real &a, const dd_real &b); QD_API bool operator<(const dd_real &a, const qd_real &b); QD_API bool operator<(double a, const qd_real &b); QD_API bool operator<(const qd_real &a, double b); QD_API bool operator>(const qd_real &a, const qd_real &b); QD_API bool operator>(const qd_real &a, const dd_real &b); QD_API bool operator>(const dd_real &a, const qd_real &b); QD_API bool operator>(double a, const qd_real &b); QD_API bool operator>(const qd_real &a, double b); QD_API bool operator<=(const qd_real &a, const qd_real &b); QD_API bool operator<=(const qd_real &a, const dd_real &b); QD_API bool operator<=(const dd_real &a, const qd_real &b); QD_API bool operator<=(double a, const qd_real &b); QD_API bool operator<=(const qd_real &a, double b); QD_API bool operator>=(const qd_real &a, const qd_real &b); QD_API bool operator>=(const qd_real &a, const dd_real &b); QD_API bool operator>=(const dd_real &a, const qd_real &b); QD_API bool operator>=(double a, const qd_real &b); QD_API bool operator>=(const qd_real &a, double b); QD_API bool operator!=(const qd_real &a, const qd_real &b); QD_API bool operator!=(const qd_real &a, const dd_real &b); QD_API bool operator!=(const dd_real &a, const qd_real &b); QD_API bool operator!=(double a, const qd_real &b); QD_API bool operator!=(const qd_real &a, double b); QD_API qd_real fabs(const qd_real &a); QD_API qd_real abs(const qd_real &a); /* same as fabs */ QD_API qd_real ldexp(const qd_real &a, int n); QD_API qd_real nint(const qd_real &a); QD_API qd_real quick_nint(const qd_real &a); QD_API qd_real floor(const qd_real &a); QD_API qd_real ceil(const qd_real &a); QD_API qd_real aint(const qd_real &a); QD_API qd_real sin(const qd_real &a); QD_API qd_real cos(const qd_real &a); QD_API qd_real tan(const qd_real &a); QD_API void sincos(const qd_real &a, qd_real &s, qd_real &c); QD_API qd_real asin(const qd_real &a); QD_API qd_real acos(const qd_real &a); QD_API qd_real atan(const qd_real &a); QD_API qd_real atan2(const qd_real &y, const qd_real &x); QD_API qd_real exp(const qd_real &a); QD_API qd_real log(const qd_real &a); QD_API qd_real log10(const qd_real &a); QD_API qd_real sinh(const qd_real &a); QD_API qd_real cosh(const qd_real &a); QD_API qd_real tanh(const qd_real &a); QD_API void sincosh(const qd_real &a, qd_real &sin_qd, qd_real &cos_qd); QD_API qd_real asinh(const qd_real &a); QD_API qd_real acosh(const qd_real &a); QD_API qd_real atanh(const qd_real &a); QD_API qd_real qdrand(void); QD_API qd_real max(const qd_real &a, const qd_real &b); QD_API qd_real max(const qd_real &a, const qd_real &b, const qd_real &c); QD_API qd_real min(const qd_real &a, const qd_real &b); QD_API qd_real min(const qd_real &a, const qd_real &b, const qd_real &c); QD_API qd_real fmod(const qd_real &a, const qd_real &b); QD_API std::ostream &operator<<(std::ostream &s, const qd_real &a); QD_API std::istream &operator>>(std::istream &s, qd_real &a); #ifdef QD_INLINE #include #endif #endif /* _QD_QD_REAL_H */ qd-2.3.11/include/qd/c_qd.h0000644000175000017500000001021011202062041015536 0ustar prudhommprudhomm/* * include/c_qd.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains C wrapper function prototypes for quad-double precision * arithmetic. This can also be used from fortran code. */ #ifndef _QD_C_QD_H #define _QD_C_QD_H #include #include #ifdef __cplusplus extern "C" { #endif /* add */ void c_qd_add(const double *a, const double *b, double *c); void c_qd_add_dd_qd(const double *a, const double *b, double *c); void c_qd_add_qd_dd(const double *a, const double *b, double *c); void c_qd_add_d_qd(double a, const double *b, double *c); void c_qd_add_qd_d(const double *a, double b, double *c); void c_qd_selfadd(const double *a, double *b); void c_qd_selfadd_dd(const double *a, double *b); void c_qd_selfadd_d(double a, double *b); /* sub */ void c_qd_sub(const double *a, const double *b, double *c); void c_qd_sub_dd_qd(const double *a, const double *b, double *c); void c_qd_sub_qd_dd(const double *a, const double *b, double *c); void c_qd_sub_d_qd(double a, const double *b, double *c); void c_qd_sub_qd_d(const double *a, double b, double *c); void c_qd_selfsub(const double *a, double *b); void c_qd_selfsub_dd(const double *a, double *b); void c_qd_selfsub_d(double a, double *b); /* mul */ void c_qd_mul(const double *a, const double *b, double *c); void c_qd_mul_dd_qd(const double *a, const double *b, double *c); void c_qd_mul_qd_dd(const double *a, const double *b, double *c); void c_qd_mul_d_qd(double a, const double *b, double *c); void c_qd_mul_qd_d(const double *a, double b, double *c); void c_qd_selfmul(const double *a, double *b); void c_qd_selfmul_dd(const double *a, double *b); void c_qd_selfmul_d(double a, double *b); /* div */ void c_qd_div(const double *a, const double *b, double *c); void c_qd_div_dd_qd(const double *a, const double *b, double *c); void c_qd_div_qd_dd(const double *a, const double *b, double *c); void c_qd_div_d_qd(double a, const double *b, double *c); void c_qd_div_qd_d(const double *a, double b, double *c); void c_qd_selfdiv(const double *a, double *b); void c_qd_selfdiv_dd(const double *a, double *b); void c_qd_selfdiv_d(double a, double *b); /* copy */ void c_qd_copy(const double *a, double *b); void c_qd_copy_dd(const double *a, double *b); void c_qd_copy_d(double a, double *b); void c_qd_sqrt(const double *a, double *b); void c_qd_sqr(const double *a, double *b); void c_qd_abs(const double *a, double *b); void c_qd_npwr(const double *a, int b, double *c); void c_qd_nroot(const double *a, int b, double *c); void c_qd_nint(const double *a, double *b); void c_qd_aint(const double *a, double *b); void c_qd_floor(const double *a, double *b); void c_qd_ceil(const double *a, double *b); void c_qd_exp(const double *a, double *b); void c_qd_log(const double *a, double *b); void c_qd_log10(const double *a, double *b); void c_qd_sin(const double *a, double *b); void c_qd_cos(const double *a, double *b); void c_qd_tan(const double *a, double *b); void c_qd_asin(const double *a, double *b); void c_qd_acos(const double *a, double *b); void c_qd_atan(const double *a, double *b); void c_qd_atan2(const double *a, const double *b, double *c); void c_qd_sinh(const double *a, double *b); void c_qd_cosh(const double *a, double *b); void c_qd_tanh(const double *a, double *b); void c_qd_asinh(const double *a, double *b); void c_qd_acosh(const double *a, double *b); void c_qd_atanh(const double *a, double *b); void c_qd_sincos(const double *a, double *s, double *c); void c_qd_sincosh(const double *a, double *s, double *c); void c_qd_read(const char *s, double *a); void c_qd_swrite(const double *a, int precision, char *s, int len); void c_qd_write(const double *a); void c_qd_neg(const double *a, double *b); void c_qd_rand(double *a); void c_qd_comp(const double *a, const double *b, int *result); void c_qd_comp_qd_d(const double *a, double b, int *result); void c_qd_comp_d_qd(double a, const double *b, int *result); void c_qd_pi(double *a); #ifdef __cplusplus } #endif #endif /* _QD_C_QD_H */ qd-2.3.11/include/Makefile.in0000644000175000017500000003217011202062041016131 0ustar prudhommprudhomm# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 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. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@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 = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_clock_gettime.m4 \ $(top_srcdir)/m4/ax_cxx_copysign.m4 \ $(top_srcdir)/m4/ax_cxx_fc_lib.m4 \ $(top_srcdir)/m4/ax_cxx_fma.m4 \ $(top_srcdir)/m4/ax_cxx_isfinite.m4 \ $(top_srcdir)/m4/ax_cxx_isinf.m4 \ $(top_srcdir)/m4/ax_cxx_isnan.m4 \ $(top_srcdir)/m4/ax_f90_module_flag.m4 \ $(top_srcdir)/m4/ax_f90_module_style.m4 \ $(top_srcdir)/m4/ax_fc_etime.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/include/qd/qd_config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" nobase_includeHEADERS_INSTALL = $(install_sh_DATA) nobase_nodist_includeHEADERS_INSTALL = $(install_sh_DATA) HEADERS = $(nobase_include_HEADERS) $(nobase_nodist_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_ARGS = @CONFIGURE_ARGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETIME = @ETIME@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCLIBS = @FCLIBS@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REQ_CXXFLAGS = @REQ_CXXFLAGS@ REQ_FCFLAGS = @REQ_FCFLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_f90_modflag = @ax_f90_modflag@ 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@ 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@ mkdir_p = @mkdir_p@ module_ext = @module_ext@ 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@ nobase_include_HEADERS = qd/c_dd.h qd/c_qd.h qd/dd_real.h qd/dd_inline.h \ qd/fpu.h qd/inline.h qd/qd_real.h qd/qd_inline.h \ qd/bits.h nobase_nodist_include_HEADERS = qd/qd_config.h DISTCLEANFILES = qd/qd_config.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ 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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-nobase_includeHEADERS: $(nobase_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @$(am__vpath_adj_setup) \ list='$(nobase_include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__vpath_adj) \ echo " $(nobase_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ $(nobase_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ done uninstall-nobase_includeHEADERS: @$(NORMAL_UNINSTALL) @$(am__vpath_adj_setup) \ list='$(nobase_include_HEADERS)'; for p in $$list; do \ $(am__vpath_adj) \ echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ rm -f "$(DESTDIR)$(includedir)/$$f"; \ done install-nobase_nodist_includeHEADERS: $(nobase_nodist_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @$(am__vpath_adj_setup) \ list='$(nobase_nodist_include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__vpath_adj) \ echo " $(nobase_nodist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ $(nobase_nodist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ done uninstall-nobase_nodist_includeHEADERS: @$(NORMAL_UNINSTALL) @$(am__vpath_adj_setup) \ list='$(nobase_nodist_include_HEADERS)'; for p in $$list; do \ $(am__vpath_adj) \ echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ rm -f "$(DESTDIR)$(includedir)/$$f"; \ 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; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) installdirs: for dir in "$(DESTDIR)$(includedir)" "$(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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-nobase_includeHEADERS \ install-nobase_nodist_includeHEADERS install-dvi: install-dvi-am 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 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 pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nobase_includeHEADERS \ uninstall-nobase_nodist_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ ctags distclean distclean-generic 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-nobase_includeHEADERS \ install-nobase_nodist_includeHEADERS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-nobase_includeHEADERS \ uninstall-nobase_nodist_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: qd-2.3.11/include/Makefile.am0000644000175000017500000000034211202062041016114 0ustar prudhommprudhommnobase_include_HEADERS = qd/c_dd.h qd/c_qd.h qd/dd_real.h qd/dd_inline.h \ qd/fpu.h qd/inline.h qd/qd_real.h qd/qd_inline.h \ qd/bits.h nobase_nodist_include_HEADERS = qd/qd_config.h DISTCLEANFILES = qd/qd_config.h qd-2.3.11/src/0000755000175000017500000000000011431215437013242 5ustar prudhommprudhommqd-2.3.11/src/bits.cpp0000644000175000017500000000330011202062041014666 0ustar prudhommprudhomm/* * src/bits.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Defines various routines to get / set bits of a IEEE floating point * number. This used by the library for debugging purposes. */ #include #include #include #include #include "config.h" #include #include #ifdef HAVE_IEEEFP_H #include #endif using std::setw; int get_double_expn(double x) { if (x == 0.0) return INT_MIN; if (QD_ISINF(x) || QD_ISNAN(x)) return INT_MAX; double y = std::abs(x); int i = 0; if (y < 1.0) { while (y < 1.0) { y *= 2.0; i++; } return -i; } else if (y >= 2.0) { while (y >= 2.0) { y *= 0.5; i++; } return i; } return 0; } void print_double_info(std::ostream &os, double x) { std::streamsize old_prec = os.precision(19); std::ios_base::fmtflags old_flags = os.flags(); os << std::scientific; os << setw(27) << x << ' '; if (QD_ISNAN(x) || QD_ISINF(x) || (x == 0.0)) { os << " "; } else { x = std::abs(x); int expn = get_double_expn(x); double d = std::ldexp(1.0, expn); os << setw(5) << expn << " "; for (int i = 0; i < 53; i++) { if (x >= d) { x -= d; os << '1'; } else os << '0'; d *= 0.5; } if (x != 0.0) { // should not happen os << " +trailing stuff"; } } os.precision(old_prec); os.flags(old_flags); } qd-2.3.11/src/util.h0000644000175000017500000000010211202062041014344 0ustar prudhommprudhomm#include void append_expn(std::string &str, int expn); qd-2.3.11/src/dd_real.cpp0000644000175000017500000006565511316265624015366 0ustar prudhommprudhomm/* * src/dd_real.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2007 * * Contains implementation of non-inlined functions of double-double * package. Inlined functions are found in dd_inline.h (in include directory). */ #include #include #include #include #include #include #include #include "config.h" #include #include "util.h" #include #ifndef QD_INLINE #include #endif using std::cout; using std::cerr; using std::endl; using std::ostream; using std::istream; using std::ios_base; using std::string; using std::setw; /* This routine is called whenever a fatal error occurs. */ void dd_real::error(const char *msg) { if (msg) { cerr << "ERROR " << msg << endl; } } /* Computes the square root of the double-double number dd. NOTE: dd must be a non-negative number. */ QD_API dd_real sqrt(const dd_real &a) { /* Strategy: Use Karp's trick: if x is an approximation to sqrt(a), then sqrt(a) = a*x + [a - (a*x)^2] * x / 2 (approx) The approximation is accurate to twice the accuracy of x. Also, the multiplication (a*x) and [-]*x can be done with only half the precision. */ if (a.is_zero()) return 0.0; if (a.is_negative()) { dd_real::error("(dd_real::sqrt): Negative argument."); return dd_real::_nan; } double x = 1.0 / std::sqrt(a.x[0]); double ax = a.x[0] * x; return dd_real::add(ax, (a - dd_real::sqr(ax)).x[0] * (x * 0.5)); } /* Computes the square root of a double in double-double precision. NOTE: d must not be negative. */ dd_real dd_real::sqrt(double d) { return ::sqrt(dd_real(d)); } /* Computes the n-th root of the double-double number a. NOTE: n must be a positive integer. NOTE: If n is even, then a must not be negative. */ dd_real nroot(const dd_real &a, int n) { /* Strategy: Use Newton iteration for the function f(x) = x^(-n) - a to find its root a^{-1/n}. The iteration is thus x' = x + x * (1 - a * x^n) / n which converges quadratically. We can then find a^{1/n} by taking the reciprocal. */ if (n <= 0) { dd_real::error("(dd_real::nroot): N must be positive."); return dd_real::_nan; } if (n%2 == 0 && a.is_negative()) { dd_real::error("(dd_real::nroot): Negative argument."); return dd_real::_nan; } if (n == 1) { return a; } if (n == 2) { return sqrt(a); } if (a.is_zero()) return 0.0; /* Note a^{-1/n} = exp(-log(a)/n) */ dd_real r = abs(a); dd_real x = std::exp(-std::log(r.x[0]) / n); /* Perform Newton's iteration. */ x += x * (1.0 - r * npwr(x, n)) / static_cast(n); if (a.x[0] < 0.0) x = -x; return 1.0/x; } /* Computes the n-th power of a double-double number. NOTE: 0^0 causes an error. */ dd_real npwr(const dd_real &a, int n) { if (n == 0) { if (a.is_zero()) { dd_real::error("(dd_real::npwr): Invalid argument."); return dd_real::_nan; } return 1.0; } dd_real r = a; dd_real s = 1.0; int N = std::abs(n); if (N > 1) { /* Use binary exponentiation */ while (N > 0) { if (N % 2 == 1) { s *= r; } N /= 2; if (N > 0) r = sqr(r); } } else { s = r; } /* Compute the reciprocal if n is negative. */ if (n < 0) return (1.0 / s); return s; } dd_real pow(const dd_real &a, int n) { return npwr(a, n); } dd_real pow(const dd_real &a, const dd_real &b) { return exp(b * log(a)); } static const int n_inv_fact = 15; static const dd_real inv_fact[n_inv_fact] = { dd_real( 1.66666666666666657e-01, 9.25185853854297066e-18), dd_real( 4.16666666666666644e-02, 2.31296463463574266e-18), dd_real( 8.33333333333333322e-03, 1.15648231731787138e-19), dd_real( 1.38888888888888894e-03, -5.30054395437357706e-20), dd_real( 1.98412698412698413e-04, 1.72095582934207053e-22), dd_real( 2.48015873015873016e-05, 2.15119478667758816e-23), dd_real( 2.75573192239858925e-06, -1.85839327404647208e-22), dd_real( 2.75573192239858883e-07, 2.37677146222502973e-23), dd_real( 2.50521083854417202e-08, -1.44881407093591197e-24), dd_real( 2.08767569878681002e-09, -1.20734505911325997e-25), dd_real( 1.60590438368216133e-10, 1.25852945887520981e-26), dd_real( 1.14707455977297245e-11, 2.06555127528307454e-28), dd_real( 7.64716373181981641e-13, 7.03872877733453001e-30), dd_real( 4.77947733238738525e-14, 4.39920548583408126e-31), dd_real( 2.81145725434552060e-15, 1.65088427308614326e-31) }; /* Exponential. Computes exp(x) in double-double precision. */ dd_real exp(const dd_real &a) { /* Strategy: We first reduce the size of x by noting that exp(kr + m * log(2)) = 2^m * exp(r)^k where m and k are integers. By choosing m appropriately we can make |kr| <= log(2) / 2 = 0.347. Then exp(r) is evaluated using the familiar Taylor series. Reducing the argument substantially speeds up the convergence. */ const double k = 512.0; const double inv_k = 1.0 / k; if (a.x[0] <= -709.0) return 0.0; if (a.x[0] >= 709.0) return dd_real::_inf; if (a.is_zero()) return 1.0; if (a.is_one()) return dd_real::_e; double m = std::floor(a.x[0] / dd_real::_log2.x[0] + 0.5); dd_real r = mul_pwr2(a - dd_real::_log2 * m, inv_k); dd_real s, t, p; p = sqr(r); s = r + mul_pwr2(p, 0.5); p *= r; t = p * inv_fact[0]; int i = 0; do { s += t; p *= r; t = p * inv_fact[++i]; } while (std::abs(to_double(t)) > inv_k * dd_real::_eps && i < 5); s += t; s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s += 1.0; return ldexp(s, static_cast(m)); } /* Logarithm. Computes log(x) in double-double precision. This is a natural logarithm (i.e., base e). */ dd_real log(const dd_real &a) { /* Strategy. The Taylor series for log converges much more slowly than that of exp, due to the lack of the factorial term in the denominator. Hence this routine instead tries to determine the root of the function f(x) = exp(x) - a using Newton iteration. The iteration is given by x' = x - f(x)/f'(x) = x - (1 - a * exp(-x)) = x + a * exp(-x) - 1. Only one iteration is needed, since Newton's iteration approximately doubles the number of digits per iteration. */ if (a.is_one()) { return 0.0; } if (a.x[0] <= 0.0) { dd_real::error("(dd_real::log): Non-positive argument."); return dd_real::_nan; } dd_real x = std::log(a.x[0]); /* Initial approximation */ x = x + a * exp(-x) - 1.0; return x; } dd_real log10(const dd_real &a) { return log(a) / dd_real::_log10; } static const dd_real _pi16 = dd_real(1.963495408493620697e-01, 7.654042494670957545e-18); /* Table of sin(k * pi/16) and cos(k * pi/16). */ static const dd_real sin_table [] = { dd_real(1.950903220161282758e-01, -7.991079068461731263e-18), dd_real(3.826834323650897818e-01, -1.005077269646158761e-17), dd_real(5.555702330196021776e-01, 4.709410940561676821e-17), dd_real(7.071067811865475727e-01, -4.833646656726456726e-17) }; static const dd_real cos_table [] = { dd_real(9.807852804032304306e-01, 1.854693999782500573e-17), dd_real(9.238795325112867385e-01, 1.764504708433667706e-17), dd_real(8.314696123025452357e-01, 1.407385698472802389e-18), dd_real(7.071067811865475727e-01, -4.833646656726456726e-17) }; /* Computes sin(a) using Taylor series. Assumes |a| <= pi/32. */ static dd_real sin_taylor(const dd_real &a) { const double thresh = 0.5 * std::abs(to_double(a)) * dd_real::_eps; dd_real r, s, t, x; if (a.is_zero()) { return 0.0; } int i = 0; x = -sqr(a); s = a; r = a; do { r *= x; t = r * inv_fact[i]; s += t; i += 2; } while (i < n_inv_fact && std::abs(to_double(t)) > thresh); return s; } static dd_real cos_taylor(const dd_real &a) { const double thresh = 0.5 * dd_real::_eps; dd_real r, s, t, x; if (a.is_zero()) { return 1.0; } x = -sqr(a); r = x; s = 1.0 + mul_pwr2(r, 0.5); int i = 1; do { r *= x; t = r * inv_fact[i]; s += t; i += 2; } while (i < n_inv_fact && std::abs(to_double(t)) > thresh); return s; } static void sincos_taylor(const dd_real &a, dd_real &sin_a, dd_real &cos_a) { if (a.is_zero()) { sin_a = 0.0; cos_a = 1.0; return; } sin_a = sin_taylor(a); cos_a = sqrt(1.0 - sqr(sin_a)); } dd_real sin(const dd_real &a) { /* Strategy. To compute sin(x), we choose integers a, b so that x = s + a * (pi/2) + b * (pi/16) and |s| <= pi/32. Using the fact that sin(pi/16) = 0.5 * sqrt(2 - sqrt(2 + sqrt(2))) we can compute sin(x) from sin(s), cos(s). This greatly increases the convergence of the sine Taylor series. */ if (a.is_zero()) { return 0.0; } // approximately reduce modulo 2*pi dd_real z = nint(a / dd_real::_2pi); dd_real r = a - dd_real::_2pi * z; // approximately reduce modulo pi/2 and then modulo pi/16. dd_real t; double q = std::floor(r.x[0] / dd_real::_pi2.x[0] + 0.5); t = r - dd_real::_pi2 * q; int j = static_cast(q); q = std::floor(t.x[0] / _pi16.x[0] + 0.5); t -= _pi16 * q; int k = static_cast(q); int abs_k = std::abs(k); if (j < -2 || j > 2) { dd_real::error("(dd_real::sin): Cannot reduce modulo pi/2."); return dd_real::_nan; } if (abs_k > 4) { dd_real::error("(dd_real::sin): Cannot reduce modulo pi/16."); return dd_real::_nan; } if (k == 0) { switch (j) { case 0: return sin_taylor(t); case 1: return cos_taylor(t); case -1: return -cos_taylor(t); default: return -sin_taylor(t); } } dd_real u = cos_table[abs_k-1]; dd_real v = sin_table[abs_k-1]; dd_real sin_t, cos_t; sincos_taylor(t, sin_t, cos_t); if (j == 0) { if (k > 0) { r = u * sin_t + v * cos_t; } else { r = u * sin_t - v * cos_t; } } else if (j == 1) { if (k > 0) { r = u * cos_t - v * sin_t; } else { r = u * cos_t + v * sin_t; } } else if (j == -1) { if (k > 0) { r = v * sin_t - u * cos_t; } else if (k < 0) { r = -u * cos_t - v * sin_t; } } else { if (k > 0) { r = -u * sin_t - v * cos_t; } else { r = v * cos_t - u * sin_t; } } return r; } dd_real cos(const dd_real &a) { if (a.is_zero()) { return 1.0; } // approximately reduce modulo 2*pi dd_real z = nint(a / dd_real::_2pi); dd_real r = a - z * dd_real::_2pi; // approximately reduce modulo pi/2 and then modulo pi/16 dd_real t; double q = std::floor(r.x[0] / dd_real::_pi2.x[0] + 0.5); t = r - dd_real::_pi2 * q; int j = static_cast(q); q = std::floor(t.x[0] / _pi16.x[0] + 0.5); t -= _pi16 * q; int k = static_cast(q); int abs_k = std::abs(k); if (j < -2 || j > 2) { dd_real::error("(dd_real::cos): Cannot reduce modulo pi/2."); return dd_real::_nan; } if (abs_k > 4) { dd_real::error("(dd_real::cos): Cannot reduce modulo pi/16."); return dd_real::_nan; } if (k == 0) { switch (j) { case 0: return cos_taylor(t); case 1: return -sin_taylor(t); case -1: return sin_taylor(t); default: return -cos_taylor(t); } } dd_real sin_t, cos_t; sincos_taylor(t, sin_t, cos_t); dd_real u = cos_table[abs_k-1]; dd_real v = sin_table[abs_k-1]; if (j == 0) { if (k > 0) { r = u * cos_t - v * sin_t; } else { r = u * cos_t + v * sin_t; } } else if (j == 1) { if (k > 0) { r = - u * sin_t - v * cos_t; } else { r = v * cos_t - u * sin_t; } } else if (j == -1) { if (k > 0) { r = u * sin_t + v * cos_t; } else { r = u * sin_t - v * cos_t; } } else { if (k > 0) { r = v * sin_t - u * cos_t; } else { r = - u * cos_t - v * sin_t; } } return r; } void sincos(const dd_real &a, dd_real &sin_a, dd_real &cos_a) { if (a.is_zero()) { sin_a = 0.0; cos_a = 1.0; return; } // approximately reduce modulo 2*pi dd_real z = nint(a / dd_real::_2pi); dd_real r = a - dd_real::_2pi * z; // approximately reduce module pi/2 and pi/16 dd_real t; double q = std::floor(r.x[0] / dd_real::_pi2.x[0] + 0.5); t = r - dd_real::_pi2 * q; int j = static_cast(q); int abs_j = std::abs(j); q = std::floor(t.x[0] / _pi16.x[0] + 0.5); t -= _pi16 * q; int k = static_cast(q); int abs_k = std::abs(k); if (abs_j > 2) { dd_real::error("(dd_real::sincos): Cannot reduce modulo pi/2."); cos_a = sin_a = dd_real::_nan; return; } if (abs_k > 4) { dd_real::error("(dd_real::sincos): Cannot reduce modulo pi/16."); cos_a = sin_a = dd_real::_nan; return; } dd_real sin_t, cos_t; dd_real s, c; sincos_taylor(t, sin_t, cos_t); if (abs_k == 0) { s = sin_t; c = cos_t; } else { dd_real u = cos_table[abs_k-1]; dd_real v = sin_table[abs_k-1]; if (k > 0) { s = u * sin_t + v * cos_t; c = u * cos_t - v * sin_t; } else { s = u * sin_t - v * cos_t; c = u * cos_t + v * sin_t; } } if (abs_j == 0) { sin_a = s; cos_a = c; } else if (j == 1) { sin_a = c; cos_a = -s; } else if (j == -1) { sin_a = -c; cos_a = s; } else { sin_a = -s; cos_a = -c; } } dd_real atan(const dd_real &a) { return atan2(a, dd_real(1.0)); } dd_real atan2(const dd_real &y, const dd_real &x) { /* Strategy: Instead of using Taylor series to compute arctan, we instead use Newton's iteration to solve the equation sin(z) = y/r or cos(z) = x/r where r = sqrt(x^2 + y^2). The iteration is given by z' = z + (y - sin(z)) / cos(z) (for equation 1) z' = z - (x - cos(z)) / sin(z) (for equation 2) Here, x and y are normalized so that x^2 + y^2 = 1. If |x| > |y|, then first iteration is used since the denominator is larger. Otherwise, the second is used. */ if (x.is_zero()) { if (y.is_zero()) { /* Both x and y is zero. */ dd_real::error("(dd_real::atan2): Both arguments zero."); return dd_real::_nan; } return (y.is_positive()) ? dd_real::_pi2 : -dd_real::_pi2; } else if (y.is_zero()) { return (x.is_positive()) ? dd_real(0.0) : dd_real::_pi; } if (x == y) { return (y.is_positive()) ? dd_real::_pi4 : -dd_real::_3pi4; } if (x == -y) { return (y.is_positive()) ? dd_real::_3pi4 : -dd_real::_pi4; } dd_real r = sqrt(sqr(x) + sqr(y)); dd_real xx = x / r; dd_real yy = y / r; /* Compute double precision approximation to atan. */ dd_real z = std::atan2(to_double(y), to_double(x)); dd_real sin_z, cos_z; if (std::abs(xx.x[0]) > std::abs(yy.x[0])) { /* Use Newton iteration 1. z' = z + (y - sin(z)) / cos(z) */ sincos(z, sin_z, cos_z); z += (yy - sin_z) / cos_z; } else { /* Use Newton iteration 2. z' = z - (x - cos(z)) / sin(z) */ sincos(z, sin_z, cos_z); z -= (xx - cos_z) / sin_z; } return z; } dd_real tan(const dd_real &a) { dd_real s, c; sincos(a, s, c); return s/c; } dd_real asin(const dd_real &a) { dd_real abs_a = abs(a); if (abs_a > 1.0) { dd_real::error("(dd_real::asin): Argument out of domain."); return dd_real::_nan; } if (abs_a.is_one()) { return (a.is_positive()) ? dd_real::_pi2 : -dd_real::_pi2; } return atan2(a, sqrt(1.0 - sqr(a))); } dd_real acos(const dd_real &a) { dd_real abs_a = abs(a); if (abs_a > 1.0) { dd_real::error("(dd_real::acos): Argument out of domain."); return dd_real::_nan; } if (abs_a.is_one()) { return (a.is_positive()) ? dd_real(0.0) : dd_real::_pi; } return atan2(sqrt(1.0 - sqr(a)), a); } dd_real sinh(const dd_real &a) { if (a.is_zero()) { return 0.0; } if (abs(a) > 0.05) { dd_real ea = exp(a); return mul_pwr2(ea - inv(ea), 0.5); } /* since a is small, using the above formula gives a lot of cancellation. So use Taylor series. */ dd_real s = a; dd_real t = a; dd_real r = sqr(t); double m = 1.0; double thresh = std::abs((to_double(a)) * dd_real::_eps); do { m += 2.0; t *= r; t /= (m-1) * m; s += t; } while (abs(t) > thresh); return s; } dd_real cosh(const dd_real &a) { if (a.is_zero()) { return 1.0; } dd_real ea = exp(a); return mul_pwr2(ea + inv(ea), 0.5); } dd_real tanh(const dd_real &a) { if (a.is_zero()) { return 0.0; } dd_real ea = exp(a); dd_real inv_ea = inv(ea); return (ea - inv_ea) / (ea + inv_ea); } void sincosh(const dd_real &a, dd_real &sinh_a, dd_real &cosh_a) { sinh_a = sinh(a); cosh_a = cosh(a); } dd_real asinh(const dd_real &a) { return log(a + sqrt(sqr(a) + 1.0)); } dd_real acosh(const dd_real &a) { if (a < 1.0) { dd_real::error("(dd_real::acosh): Argument out of domain."); return dd_real::_nan; } return log(a + sqrt(sqr(a) - 1.0)); } dd_real atanh(const dd_real &a) { if (abs(a) >= 1.0) { dd_real::error("(dd_real::atanh): Argument out of domain."); return dd_real::_nan; } return mul_pwr2(log((1.0 + a) / (1.0 - a)), 0.5); } QD_API dd_real fmod(const dd_real &a, const dd_real &b) { dd_real n = aint(a / b); return (a - b * n); } QD_API dd_real ddrand() { static const double m_const = 4.6566128730773926e-10; /* = 2^{-31} */ double m = m_const; dd_real r = 0.0; double d; /* Strategy: Generate 31 bits at a time, using lrand48 random number generator. Shift the bits, and reapeat 4 times. */ for (int i = 0; i < 4; i++, m *= m_const) { // d = lrand48() * m; d = std::rand() * m; r += d; } return r; } /* polyeval(c, n, x) Evaluates the given n-th degree polynomial at x. The polynomial is given by the array of (n+1) coefficients. */ dd_real polyeval(const dd_real *c, int n, const dd_real &x) { /* Just use Horner's method of polynomial evaluation. */ dd_real r = c[n]; for (int i = n-1; i >= 0; i--) { r *= x; r += c[i]; } return r; } /* polyroot(c, n, x0) Given an n-th degree polynomial, finds a root close to the given guess x0. Note that this uses simple Newton iteration scheme, and does not work for multiple roots. */ QD_API dd_real polyroot(const dd_real *c, int n, const dd_real &x0, int max_iter, double thresh) { dd_real x = x0; dd_real f; dd_real *d = new dd_real[n]; bool conv = false; int i; double max_c = std::abs(to_double(c[0])); double v; if (thresh == 0.0) thresh = dd_real::_eps; /* Compute the coefficients of the derivatives. */ for (i = 1; i <= n; i++) { v = std::abs(to_double(c[i])); if (v > max_c) max_c = v; d[i-1] = c[i] * static_cast(i); } thresh *= max_c; /* Newton iteration. */ for (i = 0; i < max_iter; i++) { f = polyeval(c, n, x); if (abs(f) < thresh) { conv = true; break; } x -= (f / polyeval(d, n-1, x)); } delete [] d; if (!conv) { dd_real::error("(dd_real::polyroot): Failed to converge."); return dd_real::_nan; } return x; } /* Constructor. Reads a double-double number from the string s and constructs a double-double number. */ dd_real::dd_real(const char *s) { if (dd_real::read(s, *this)) { dd_real::error("(dd_real::dd_real): INPUT ERROR."); *this = dd_real::_nan; } } dd_real &dd_real::operator=(const char *s) { if (dd_real::read(s, *this)) { dd_real::error("(dd_real::operator=): INPUT ERROR."); *this = dd_real::_nan; } return *this; } /* Outputs the double-double number dd. */ ostream &operator<<(ostream &os, const dd_real &dd) { bool showpos = (os.flags() & ios_base::showpos) != 0; bool uppercase = (os.flags() & ios_base::uppercase) != 0; return os << dd.to_string(os.precision(), os.width(), os.flags(), showpos, uppercase, os.fill()); } /* Reads in the double-double number a. */ istream &operator>>(istream &s, dd_real &a) { char str[255]; s >> str; a = dd_real(str); return s; } void dd_real::to_digits(char *s, int &expn, int precision) const { int D = precision + 1; /* number of digits to compute */ dd_real r = abs(*this); int e; /* exponent */ int i, d; if (x[0] == 0.0) { /* this == 0.0 */ expn = 0; for (i = 0; i < precision; i++) s[i] = '0'; return; } /* First determine the (approximate) exponent. */ e = to_int(std::floor(std::log10(std::abs(x[0])))); if (e < -300) { r *= dd_real(10.0) ^ 300; r /= dd_real(10.0) ^ (e + 300); } else if (e > 300) { r = ldexp(r, -53); r /= dd_real(10.0) ^ e; r = ldexp(r, 53); } else { r /= dd_real(10.0) ^ e; } /* Fix exponent if we are off by one */ if (r >= 10.0) { r /= 10.0; e++; } else if (r < 1.0) { r *= 10.0; e--; } if (r >= 10.0 || r < 1.0) { dd_real::error("(dd_real::to_digits): can't compute exponent."); return; } /* Extract the digits */ for (i = 0; i < D; i++) { d = static_cast(r.x[0]); r -= d; r *= 10.0; s[i] = static_cast(d + '0'); } /* Fix out of range digits. */ for (i = D-1; i > 0; i--) { if (s[i] < '0') { s[i-1]--; s[i] += 10; } else if (s[i] > '9') { s[i-1]++; s[i] -= 10; } } if (s[0] <= '0') { dd_real::error("(dd_real::to_digits): non-positive leading digit."); return; } /* Round, handle carry */ if (s[D-1] >= '5') { s[D-2]++; i = D-2; while (i > 0 && s[i] > '9') { s[i] -= 10; s[--i]++; } } /* If first digit is 10, shift everything. */ if (s[0] > '9') { e++; for (i = precision; i >= 2; i--) s[i] = s[i-1]; s[0] = '1'; s[1] = '0'; } s[precision] = 0; expn = e; } /* Writes the double-double number into the character array s of length len. The integer d specifies how many significant digits to write. The string s must be able to hold at least (d+8) characters. showpos indicates whether to use the + sign, and uppercase indicates whether the E or e is to be used for the exponent. */ void dd_real::write(char *s, int len, int precision, bool showpos, bool uppercase) const { string str = to_string(precision, 0, ios_base::scientific, showpos, uppercase); std::strncpy(s, str.c_str(), len-1); s[len-1] = 0; } string dd_real::to_string(int precision, int width, ios_base::fmtflags fmt, bool showpos, bool uppercase, char fill) const { string s; bool fixed = (fmt & ios_base::fixed) != 0; bool sgn = true; int i, e = 0; if (isnan()) { s = uppercase ? "NAN" : "nan"; sgn = false; } else { if (*this < 0.0) s += '-'; else if (showpos) s += '+'; else sgn = false; if (isinf()) { s += uppercase ? "INF" : "inf"; } else if (*this == 0.0) { /* Zero case */ s += '0'; if (precision > 0) { s += '.'; s.append(precision, '0'); } } else { /* Non-zero case */ int off = (fixed ? (1 + to_int(floor(log10(abs(*this))))) : 1); int d = precision + off; if (fixed && d <= 0) { s += '0'; if (precision > 0) { s += '.'; s.append(precision, '0'); } } else { char *t = new char[d+1]; int j; to_digits(t, e, d); if (fixed) { if (off > 0) { for (i = 0; i < off; i++) s += t[i]; if (precision > 0) { s += '.'; for (j = 0; j < precision; j++, i++) s += t[i]; } } else { s += "0."; if (off < 0) s.append(-off, '0'); for (i = 0; i < d; i++) s += t[i]; } } else { s += t[0]; if (precision > 0) s += '.'; for (i = 1; i <= precision; i++) s += t[i]; } delete [] t; } } if (!fixed && !isinf()) { /* Fill in exponent part */ s += uppercase ? 'E' : 'e'; append_expn(s, e); } } /* Fill in the blanks */ int len = s.length(); if (len < width) { int delta = width - len; if (fmt & ios_base::internal) { if (sgn) s.insert(static_cast(1), delta, fill); else s.insert(static_cast(0), delta, fill); } else if (fmt & ios_base::left) { s.append(delta, fill); } else { s.insert(static_cast(0), delta, fill); } } return s; } /* Reads in a double-double number from the string s. */ int dd_real::read(const char *s, dd_real &a) { const char *p = s; char ch; int sign = 0; int point = -1; int nd = 0; int e = 0; bool done = false; dd_real r = 0.0; int nread; /* Skip any leading spaces */ while (*p == ' ') p++; while (!done && (ch = *p) != '\0') { if (ch >= '0' && ch <= '9') { int d = ch - '0'; r *= 10.0; r += static_cast(d); nd++; } else { switch (ch) { case '.': if (point >= 0) return -1; point = nd; break; case '-': case '+': if (sign != 0 || nd > 0) return -1; sign = (ch == '-') ? -1 : 1; break; case 'E': case 'e': nread = std::sscanf(p+1, "%d", &e); done = true; if (nread != 1) return -1; break; default: return -1; } } p++; } if (point >= 0) { e -= (nd - point); } if (e != 0) { r *= (dd_real(10.0) ^ e); } a = (sign == -1) ? -r : r; return 0; } /* Debugging routines */ void dd_real::dump(const string &name, std::ostream &os) const { std::ios_base::fmtflags old_flags = os.flags(); std::streamsize old_prec = os.precision(19); os << std::scientific; if (name.length() > 0) os << name << " = "; os << "[ " << setw(27) << x[0] << ", " << setw(27) << x[1] << " ]" << endl; os.precision(old_prec); os.flags(old_flags); } void dd_real::dump_bits(const string &name, std::ostream &os) const { string::size_type len = name.length(); if (len > 0) { os << name << " = "; len +=3; } os << "[ "; len += 2; print_double_info(os, x[0]); os << endl; for (string::size_type i = 0; i < len; i++) os << ' '; print_double_info(os, x[1]); os << " ]" << endl; } dd_real dd_real::debug_rand() { if (std::rand() % 2 == 0) return ddrand(); int expn = 0; dd_real a = 0.0; double d; for (int i = 0; i < 2; i++) { d = std::ldexp(static_cast(std::rand()) / RAND_MAX, -expn); a += d; expn = expn + 54 + std::rand() % 200; } return a; } qd-2.3.11/src/dd_const.cpp0000644000175000017500000000351411202062041015531 0ustar prudhommprudhomm/* * src/dd_const.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2007 */ #include "config.h" #include const dd_real dd_real::_2pi = dd_real(6.283185307179586232e+00, 2.449293598294706414e-16); const dd_real dd_real::_pi = dd_real(3.141592653589793116e+00, 1.224646799147353207e-16); const dd_real dd_real::_pi2 = dd_real(1.570796326794896558e+00, 6.123233995736766036e-17); const dd_real dd_real::_pi4 = dd_real(7.853981633974482790e-01, 3.061616997868383018e-17); const dd_real dd_real::_3pi4 = dd_real(2.356194490192344837e+00, 9.1848509936051484375e-17); const dd_real dd_real::_e = dd_real(2.718281828459045091e+00, 1.445646891729250158e-16); const dd_real dd_real::_log2 = dd_real(6.931471805599452862e-01, 2.319046813846299558e-17); const dd_real dd_real::_log10 = dd_real(2.302585092994045901e+00, -2.170756223382249351e-16); const dd_real dd_real::_nan = dd_real(qd::_d_nan, qd::_d_nan); const dd_real dd_real::_inf = dd_real(qd::_d_inf, qd::_d_inf); const double dd_real::_eps = 4.93038065763132e-32; // 2^-104 const double dd_real::_min_normalized = 2.0041683600089728e-292; // = 2^(-1022 + 53) const dd_real dd_real::_max = dd_real(1.79769313486231570815e+308, 9.97920154767359795037e+291); const dd_real dd_real::_safe_max = dd_real(1.7976931080746007281e+308, 9.97920154767359795037e+291); const int dd_real::_ndigits = 31; qd-2.3.11/src/c_qd.cpp0000644000175000017500000002174611202062041014651 0ustar prudhommprudhomm/* * src/c_qd.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains C wrapper function for quad-double precision arithmetic. * This can be used from fortran code. */ #include #include "config.h" #include #include #define TO_DOUBLE_PTR(a, ptr) ptr[0] = a.x[0]; ptr[1] = a.x[1]; \ ptr[2] = a.x[2]; ptr[3] = a.x[3]; extern "C" { /* add */ void c_qd_add(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) + qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_add_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) + dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_add_dd_qd(const double *a, const double *b, double *c) { qd_real cc; cc = dd_real(a) + qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_add_qd_d(const double *a, double b, double *c) { qd_real cc; cc = qd_real(a) + b; TO_DOUBLE_PTR(cc, c); } void c_qd_add_d_qd(double a, const double *b, double *c) { qd_real cc; cc = a + qd_real(b); TO_DOUBLE_PTR(cc, c); } /* sub */ void c_qd_sub(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) - qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_sub_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) - dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_sub_dd_qd(const double *a, const double *b, double *c) { qd_real cc; cc = dd_real(a) - qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_sub_qd_d(const double *a, double b, double *c) { qd_real cc; cc = qd_real(a) - b; TO_DOUBLE_PTR(cc, c); } void c_qd_sub_d_qd(double a, const double *b, double *c) { qd_real cc; cc = a - qd_real(b); TO_DOUBLE_PTR(cc, c); } /* mul */ void c_qd_mul(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) * qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_mul_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) * dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_mul_dd_qd(const double *a, const double *b, double *c) { qd_real cc; cc = dd_real(a) * qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_mul_qd_d(const double *a, double b, double *c) { qd_real cc; cc = qd_real(a) * b; TO_DOUBLE_PTR(cc, c); } void c_qd_mul_d_qd(double a, const double *b, double *c) { qd_real cc; cc = a * qd_real(b); TO_DOUBLE_PTR(cc, c); } /* div */ void c_qd_div(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) / qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_div_qd_dd(const double *a, const double *b, double *c) { qd_real cc; cc = qd_real(a) / dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_div_dd_qd(const double *a, const double *b, double *c) { qd_real cc; cc = dd_real(a) / qd_real(b); TO_DOUBLE_PTR(cc, c); } void c_qd_div_qd_d(const double *a, double b, double *c) { qd_real cc; cc = qd_real(a) / b; TO_DOUBLE_PTR(cc, c); } void c_qd_div_d_qd(double a, const double *b, double *c) { qd_real cc; cc = a / qd_real(b); TO_DOUBLE_PTR(cc, c); } /* selfadd */ void c_qd_selfadd(const double *a, double *b) { qd_real bb(b); bb += qd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfadd_dd(const double *a, double *b) { qd_real bb(b); bb += dd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfadd_d(double a, double *b) { qd_real bb(b); bb += a; TO_DOUBLE_PTR(bb, b); } /* selfsub */ void c_qd_selfsub(const double *a, double *b) { qd_real bb(b); bb -= qd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfsub_dd(const double *a, double *b) { qd_real bb(b); bb -= dd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfsub_d(double a, double *b) { qd_real bb(b); bb -= a; TO_DOUBLE_PTR(bb, b); } /* selfmul */ void c_qd_selfmul(const double *a, double *b) { qd_real bb(b); bb *= qd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfmul_dd(const double *a, double *b) { qd_real bb(b); bb *= dd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfmul_d(double a, double *b) { qd_real bb(b); bb *= a; TO_DOUBLE_PTR(bb, b); } /* selfdiv */ void c_qd_selfdiv(const double *a, double *b) { qd_real bb(b); bb /= qd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfdiv_dd(const double *a, double *b) { qd_real bb(b); bb /= dd_real(a); TO_DOUBLE_PTR(bb, b); } void c_qd_selfdiv_d(double a, double *b) { qd_real bb(b); bb /= a; TO_DOUBLE_PTR(bb, b); } /* copy */ void c_qd_copy(const double *a, double *b) { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; } void c_qd_copy_dd(const double *a, double *b) { b[0] = a[0]; b[1] = a[1]; b[2] = 0.0; b[3] = 0.0; } void c_qd_copy_d(double a, double *b) { b[0] = a; b[1] = 0.0; b[2] = 0.0; b[3] = 0.0; } void c_qd_sqrt(const double *a, double *b) { qd_real bb; bb = sqrt(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_sqr(const double *a, double *b) { qd_real bb; bb = sqr(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_abs(const double *a, double *b) { qd_real bb; bb = abs(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_npwr(const double *a, int n, double *b) { qd_real bb; bb = npwr(qd_real(a), n); TO_DOUBLE_PTR(bb, b); } void c_qd_nroot(const double *a, int n, double *b) { qd_real bb; bb = nroot(qd_real(a), n); TO_DOUBLE_PTR(bb, b); } void c_qd_nint(const double *a, double *b) { qd_real bb; bb = nint(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_aint(const double *a, double *b) { qd_real bb; bb = aint(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_floor(const double *a, double *b) { qd_real bb; bb = floor(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_ceil(const double *a, double *b) { qd_real bb; bb = ceil(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_log(const double *a, double *b) { qd_real bb; bb = log(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_log10(const double *a, double *b) { qd_real bb; bb = log10(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_exp(const double *a, double *b) { qd_real bb; bb = exp(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_sin(const double *a, double *b) { qd_real bb; bb = sin(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_cos(const double *a, double *b) { qd_real bb; bb = cos(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_tan(const double *a, double *b) { qd_real bb; bb = tan(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_asin(const double *a, double *b) { qd_real bb; bb = asin(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_acos(const double *a, double *b) { qd_real bb; bb = acos(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_atan(const double *a, double *b) { qd_real bb; bb = atan(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_atan2(const double *a, const double *b, double *c) { qd_real cc; cc = atan2(qd_real(a), qd_real(b)); TO_DOUBLE_PTR(cc, c); } void c_qd_sinh(const double *a, double *b) { qd_real bb; bb = sinh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_cosh(const double *a, double *b) { qd_real bb; bb = cosh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_tanh(const double *a, double *b) { qd_real bb; bb = tanh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_asinh(const double *a, double *b) { qd_real bb; bb = asinh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_acosh(const double *a, double *b) { qd_real bb; bb = acosh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_atanh(const double *a, double *b) { qd_real bb; bb = atanh(qd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_qd_sincos(const double *a, double *s, double *c) { qd_real ss, cc; sincos(qd_real(a), ss, cc); TO_DOUBLE_PTR(cc, c); TO_DOUBLE_PTR(ss, s); } void c_qd_sincosh(const double *a, double *s, double *c) { qd_real ss, cc; sincosh(qd_real(a), ss, cc); TO_DOUBLE_PTR(cc, c); TO_DOUBLE_PTR(ss, s); } void c_qd_read(const char *s, double *a) { qd_real aa(s); TO_DOUBLE_PTR(aa, a); } void c_qd_swrite(const double *a, int precision, char *s, int len) { qd_real(a).write(s, len, precision); } void c_qd_write(const double *a) { std::cout << qd_real(a).to_string(qd_real::_ndigits) << std::endl; } void c_qd_neg(const double *a, double *b) { b[0] = -a[0]; b[1] = -a[1]; b[2] = -a[2]; b[3] = -a[3]; } void c_qd_rand(double *a) { qd_real aa; aa = qdrand(); TO_DOUBLE_PTR(aa, a); } void c_qd_comp(const double *a, const double *b, int *result) { qd_real aa(a), bb(b); if (aa < bb) *result = -1; else if (aa > bb) *result = 1; else *result = 0; } void c_qd_comp_qd_d(const double *a, double b, int *result) { qd_real aa(a); if (aa < b) *result = -1; else if (aa > b) *result = 1; else *result = 0; } void c_qd_comp_d_qd(double a, const double *b, int *result) { qd_real bb(b); if (a < bb) *result = -1; else if (a > bb) *result = 1; else *result = 0; } void c_qd_pi(double *a) { TO_DOUBLE_PTR(qd_real::_pi, a); } } qd-2.3.11/src/Makefile.in0000644000175000017500000003533111202062041015277 0ustar prudhommprudhomm# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 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. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@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 = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_clock_gettime.m4 \ $(top_srcdir)/m4/ax_cxx_copysign.m4 \ $(top_srcdir)/m4/ax_cxx_fc_lib.m4 \ $(top_srcdir)/m4/ax_cxx_fma.m4 \ $(top_srcdir)/m4/ax_cxx_isfinite.m4 \ $(top_srcdir)/m4/ax_cxx_isinf.m4 \ $(top_srcdir)/m4/ax_cxx_isnan.m4 \ $(top_srcdir)/m4/ax_f90_module_flag.m4 \ $(top_srcdir)/m4/ax_f90_module_style.m4 \ $(top_srcdir)/m4/ax_fc_etime.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/include/qd/qd_config.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" libLIBRARIES_INSTALL = $(INSTALL_DATA) LIBRARIES = $(lib_LIBRARIES) AR = ar ARFLAGS = cru libqd_a_AR = $(AR) $(ARFLAGS) libqd_a_LIBADD = am__objects_1 = c_dd.$(OBJEXT) c_qd.$(OBJEXT) dd_real.$(OBJEXT) \ dd_const.$(OBJEXT) fpu.$(OBJEXT) qd_real.$(OBJEXT) \ qd_const.$(OBJEXT) util.$(OBJEXT) bits.$(OBJEXT) am_libqd_a_OBJECTS = $(am__objects_1) libqd_a_OBJECTS = $(am_libqd_a_OBJECTS) DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libqd_a_SOURCES) DIST_SOURCES = $(libqd_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_ARGS = @CONFIGURE_ARGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETIME = @ETIME@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCLIBS = @FCLIBS@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REQ_CXXFLAGS = @REQ_CXXFLAGS@ REQ_FCFLAGS = @REQ_FCFLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_f90_modflag = @ax_f90_modflag@ 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@ 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@ mkdir_p = @mkdir_p@ module_ext = @module_ext@ 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@ SRC = c_dd.cpp c_qd.cpp dd_real.cpp dd_const.cpp \ fpu.cpp qd_real.cpp qd_const.cpp util.cpp bits.cpp util.h lib_LIBRARIES = libqd.a libqd_a_SOURCES = $(SRC) AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done @$(POST_INSTALL) @list='$(lib_LIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ p=$(am__strip_dir) \ echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \ $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \ else :; fi; \ done uninstall-libLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \ rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLIBRARIES: -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) libqd.a: $(libqd_a_OBJECTS) $(libqd_a_DEPENDENCIES) -rm -f libqd.a $(libqd_a_AR) libqd.a $(libqd_a_OBJECTS) $(libqd_a_LIBADD) $(RANLIB) libqd.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_dd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_qd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dd_const.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dd_real.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qd_const.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qd_real.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 $(LIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLIBRARIES 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 info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-libLIBRARIES install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: 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 pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLIBRARIES ctags distclean distclean-compile \ distclean-generic 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-libLIBRARIES 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 pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-libLIBRARIES # 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: qd-2.3.11/src/fpu.cpp0000644000175000017500000000413011202062041014521 0ustar prudhommprudhomm/* * src/fpu.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains functions to set and restore the round-to-double flag in the * control word of a x86 FPU. */ #include "config.h" #include #ifdef X86 #ifdef _WIN32 #include #else #ifdef HAVE_FPU_CONTROL_H #include #endif #ifndef _FPU_GETCW #define _FPU_GETCW(x) asm volatile ("fnstcw %0":"=m" (x)); #endif #ifndef _FPU_SETCW #define _FPU_SETCW(x) asm volatile ("fldcw %0": :"m" (x)); #endif #ifndef _FPU_EXTENDED #define _FPU_EXTENDED 0x0300 #endif #ifndef _FPU_DOUBLE #define _FPU_DOUBLE 0x0200 #endif #endif #endif /* X86 */ extern "C" { void fpu_fix_start(unsigned int *old_cw) { #ifdef X86 #ifdef _WIN32 #ifdef __BORLANDC__ /* Win 32 Borland C */ unsigned short cw = _control87(0, 0); _control87(0x0200, 0x0300); if (old_cw) { *old_cw = cw; } #else /* Win 32 MSVC */ unsigned int cw = _control87(0, 0); _control87(0x00010000, 0x00030000); if (old_cw) { *old_cw = cw; } #endif #else /* Linux */ volatile unsigned short cw, new_cw; _FPU_GETCW(cw); new_cw = (cw & ~_FPU_EXTENDED) | _FPU_DOUBLE; _FPU_SETCW(new_cw); if (old_cw) { *old_cw = cw; } #endif #endif } void fpu_fix_end(unsigned int *old_cw) { #ifdef X86 #ifdef _WIN32 #ifdef __BORLANDC__ /* Win 32 Borland C */ if (old_cw) { unsigned short cw = (unsigned short) *old_cw; _control87(cw, 0xFFFF); } #else /* Win 32 MSVC */ if (old_cw) { _control87(*old_cw, 0xFFFFFFFF); } #endif #else /* Linux */ if (old_cw) { int cw; cw = *old_cw; _FPU_SETCW(cw); } #endif #endif } #ifdef HAVE_FORTRAN #define f_fpu_fix_start FC_FUNC_(f_fpu_fix_start, F_FPU_FIX_START) #define f_fpu_fix_end FC_FUNC_(f_fpu_fix_end, F_FPU_FIX_END) void f_fpu_fix_start(unsigned int *old_cw) { fpu_fix_start(old_cw); } void f_fpu_fix_end(unsigned int *old_cw) { fpu_fix_end(old_cw); } #endif } qd-2.3.11/src/util.cpp0000644000175000017500000000047711202062041014716 0ustar prudhommprudhomm#include #include "util.h" void append_expn(std::string &str, int expn) { int k; str += (expn < 0 ? '-' : '+'); expn = std::abs(expn); if (expn >= 100) { k = (expn / 100); str += '0' + k; expn -= 100*k; } k = (expn / 10); str += '0' + k; expn -= 10*k; str += '0' + expn; } qd-2.3.11/src/qd_const.cpp0000644000175000017500000000625011202062041015546 0ustar prudhommprudhomm/* * src/qd_const.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Defines constants used in quad-double package. */ #include "config.h" #include /* Some useful constants. */ const qd_real qd_real::_2pi = qd_real(6.283185307179586232e+00, 2.449293598294706414e-16, -5.989539619436679332e-33, 2.224908441726730563e-49); const qd_real qd_real::_pi = qd_real(3.141592653589793116e+00, 1.224646799147353207e-16, -2.994769809718339666e-33, 1.112454220863365282e-49); const qd_real qd_real::_pi2 = qd_real(1.570796326794896558e+00, 6.123233995736766036e-17, -1.497384904859169833e-33, 5.562271104316826408e-50); const qd_real qd_real::_pi4 = qd_real(7.853981633974482790e-01, 3.061616997868383018e-17, -7.486924524295849165e-34, 2.781135552158413204e-50); const qd_real qd_real::_3pi4 = qd_real(2.356194490192344837e+00, 9.1848509936051484375e-17, 3.9168984647504003225e-33, -2.5867981632704860386e-49); const qd_real qd_real::_e = qd_real(2.718281828459045091e+00, 1.445646891729250158e-16, -2.127717108038176765e-33, 1.515630159841218954e-49); const qd_real qd_real::_log2 = qd_real(6.931471805599452862e-01, 2.319046813846299558e-17, 5.707708438416212066e-34, -3.582432210601811423e-50); const qd_real qd_real::_log10 = qd_real(2.302585092994045901e+00, -2.170756223382249351e-16, -9.984262454465776570e-33, -4.023357454450206379e-49); const qd_real qd_real::_nan = qd_real(qd::_d_nan, qd::_d_nan, qd::_d_nan, qd::_d_nan); const qd_real qd_real::_inf = qd_real(qd::_d_inf, qd::_d_inf, qd::_d_inf, qd::_d_inf); const double qd_real::_eps = 1.21543267145725e-63; // = 2^-209 const double qd_real::_min_normalized = 1.6259745436952323e-260; // = 2^(-1022 + 3*53) const qd_real qd_real::_max = qd_real( 1.79769313486231570815e+308, 9.97920154767359795037e+291, 5.53956966280111259858e+275, 3.07507889307840487279e+259); const qd_real qd_real::_safe_max = qd_real( 1.7976931080746007281e+308, 9.97920154767359795037e+291, 5.53956966280111259858e+275, 3.07507889307840487279e+259); const int qd_real::_ndigits = 62; qd-2.3.11/src/qd_real.cpp0000644000175000017500000026613711316277401015375 0ustar prudhommprudhomm/* * src/qd_real.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2007 * * Contains implementation of non-inlined functions of quad-double * package. Inlined functions are found in qd_inline.h (in include directory). */ #include #include #include #include #include #include #include #include "config.h" #include #include "util.h" #include #ifndef QD_INLINE #include #endif using std::cout; using std::cerr; using std::endl; using std::istream; using std::ostream; using std::ios_base; using std::string; using std::setw; using namespace qd; void qd_real::error(const char *msg) { if (msg) { cerr << "ERROR " << msg << endl; } } /********** Multiplications **********/ qd_real nint(const qd_real &a) { double x0, x1, x2, x3; x0 = nint(a[0]); x1 = x2 = x3 = 0.0; if (x0 == a[0]) { /* First double is already an integer. */ x1 = nint(a[1]); if (x1 == a[1]) { /* Second double is already an integer. */ x2 = nint(a[2]); if (x2 == a[2]) { /* Third double is already an integer. */ x3 = nint(a[3]); } else { if (std::abs(x2 - a[2]) == 0.5 && a[3] < 0.0) { x2 -= 1.0; } } } else { if (std::abs(x1 - a[1]) == 0.5 && a[2] < 0.0) { x1 -= 1.0; } } } else { /* First double is not an integer. */ if (std::abs(x0 - a[0]) == 0.5 && a[1] < 0.0) { x0 -= 1.0; } } renorm(x0, x1, x2, x3); return qd_real(x0, x1, x2, x3); } qd_real floor(const qd_real &a) { double x0, x1, x2, x3; x1 = x2 = x3 = 0.0; x0 = std::floor(a[0]); if (x0 == a[0]) { x1 = std::floor(a[1]); if (x1 == a[1]) { x2 = std::floor(a[2]); if (x2 == a[2]) { x3 = std::floor(a[3]); } } renorm(x0, x1, x2, x3); return qd_real(x0, x1, x2, x3); } return qd_real(x0, x1, x2, x3); } qd_real ceil(const qd_real &a) { double x0, x1, x2, x3; x1 = x2 = x3 = 0.0; x0 = std::ceil(a[0]); if (x0 == a[0]) { x1 = std::ceil(a[1]); if (x1 == a[1]) { x2 = std::ceil(a[2]); if (x2 == a[2]) { x3 = std::ceil(a[3]); } } renorm(x0, x1, x2, x3); return qd_real(x0, x1, x2, x3); } return qd_real(x0, x1, x2, x3); } /********** Divisions **********/ /* quad-double / double */ qd_real operator/(const qd_real &a, double b) { /* Strategy: compute approximate quotient using high order doubles, and then correct it 3 times using the remainder. (Analogous to long division.) */ double t0, t1; double q0, q1, q2, q3; qd_real r; q0 = a[0] / b; /* approximate quotient */ /* Compute the remainder a - q0 * b */ t0 = two_prod(q0, b, t1); r = a - dd_real(t0, t1); /* Compute the first correction */ q1 = r[0] / b; t0 = two_prod(q1, b, t1); r -= dd_real(t0, t1); /* Second correction to the quotient. */ q2 = r[0] / b; t0 = two_prod(q2, b, t1); r -= dd_real(t0, t1); /* Final correction to the quotient. */ q3 = r[0] / b; renorm(q0, q1, q2, q3); return qd_real(q0, q1, q2, q3); } qd_real::qd_real(const char *s) { if (qd_real::read(s, *this)) { qd_real::error("(qd_real::qd_real): INPUT ERROR."); *this = qd_real::_nan; } } qd_real &qd_real::operator=(const char *s) { if (qd_real::read(s, *this)) { qd_real::error("(qd_real::operator=): INPUT ERROR."); *this = qd_real::_nan; } return *this; } istream &operator>>(istream &s, qd_real &qd) { char str[255]; s >> str; qd = qd_real(str); return s; } ostream &operator<<(ostream &os, const qd_real &qd) { bool showpos = (os.flags() & ios_base::showpos) != 0; bool uppercase = (os.flags() & ios_base::uppercase) != 0; return os << qd.to_string(os.precision(), os.width(), os.flags(), showpos, uppercase, os.fill()); } /* Read a quad-double from s. */ int qd_real::read(const char *s, qd_real &qd) { const char *p = s; char ch; int sign = 0; int point = -1; /* location of decimal point */ int nd = 0; /* number of digits read */ int e = 0; /* exponent. */ bool done = false; qd_real r = 0.0; /* number being read */ /* Skip any leading spaces */ while (*p == ' ') p++; while (!done && (ch = *p) != '\0') { if (ch >= '0' && ch <= '9') { /* It's a digit */ int d = ch - '0'; r *= 10.0; r += static_cast(d); nd++; } else { /* Non-digit */ switch (ch) { case '.': if (point >= 0) return -1; /* we've already encountered a decimal point. */ point = nd; break; case '-': case '+': if (sign != 0 || nd > 0) return -1; /* we've already encountered a sign, or if its not at first position. */ sign = (ch == '-') ? -1 : 1; break; case 'E': case 'e': int nread; nread = std::sscanf(p+1, "%d", &e); done = true; if (nread != 1) return -1; /* read of exponent failed. */ break; case ' ': done = true; break; default: return -1; } } p++; } /* Adjust exponent to account for decimal point */ if (point >= 0) { e -= (nd - point); } /* Multiply the the exponent */ if (e != 0) { r *= (qd_real(10.0) ^ e); } qd = (sign < 0) ? -r : r; return 0; } void qd_real::to_digits(char *s, int &expn, int precision) const { int D = precision + 1; /* number of digits to compute */ qd_real r = abs(*this); int e; /* exponent */ int i, d; if (x[0] == 0.0) { /* this == 0.0 */ expn = 0; for (i = 0; i < precision; i++) s[i] = '0'; return; } /* First determine the (approximate) exponent. */ e = static_cast(std::floor(std::log10(std::abs(x[0])))); if (e < -300) { r *= qd_real(10.0) ^ 300; r /= qd_real(10.0) ^ (e + 300); } else if (e > 300) { r = ldexp(r, -53); r /= qd_real(10.0) ^ e; r = ldexp(r, 53); } else { r /= qd_real(10.0) ^ e; } /* Fix exponent if we are off by one */ if (r >= 10.0) { r /= 10.0; e++; } else if (r < 1.0) { r *= 10.0; e--; } if (r >= 10.0 || r < 1.0) { qd_real::error("(qd_real::to_digits): can't compute exponent."); return; } /* Extract the digits */ for (i = 0; i < D; i++) { d = static_cast(r[0]); r -= d; r *= 10.0; s[i] = static_cast(d + '0'); } /* Fix out of range digits. */ for (i = D-1; i > 0; i--) { if (s[i] < '0') { s[i-1]--; s[i] += 10; } else if (s[i] > '9') { s[i-1]++; s[i] -= 10; } } if (s[0] <= '0') { qd_real::error("(qd_real::to_digits): non-positive leading digit."); return; } /* Round, handle carry */ if (s[D-1] >= '5') { s[D-2]++; i = D-2; while (i > 0 && s[i] > '9') { s[i] -= 10; s[--i]++; } } /* If first digit is 10, shift everything. */ if (s[0] > '9') { e++; for (i = precision; i >= 2; i--) s[i] = s[i-1]; s[0] = '1'; s[1] = '0'; } s[precision] = 0; expn = e; } /* Writes the quad-double number into the character array s of length len. The integer d specifies how many significant digits to write. The string s must be able to hold at least (d+8) characters. showpos indicates whether to use the + sign, and uppercase indicates whether the E or e is to be used for the exponent. */ void qd_real::write(char *s, int len, int precision, bool showpos, bool uppercase) const { string str = to_string(precision, 0, ios_base::scientific, showpos, uppercase); strncpy(s, str.c_str(), len-1); s[len-1] = 0; } string qd_real::to_string(int precision, int width, ios_base::fmtflags fmt, bool showpos, bool uppercase, char fill) const { string s; bool fixed = (fmt & ios_base::fixed) != 0; bool sgn = true; int i, e = 0; if (isinf()) { if (*this < 0.0) s += '-'; else if (showpos) s += '+'; else sgn = false; s += uppercase ? "INF" : "inf"; } else if (isnan()) { s = uppercase ? "NAN" : "nan"; sgn = false; } else { if (*this < 0.0) s += '-'; else if (showpos) s += '+'; else sgn = false; if (*this == 0.0) { /* Zero case */ s += '0'; if (precision > 0) { s += '.'; s.append(precision, '0'); } } else { /* Non-zero case */ int off = (fixed ? (1 + to_int(floor(log10(abs(*this))))) : 1); int d = precision + off; if (fixed && d <= 0) { s += '0'; if (precision > 0) { s += '.'; s.append(precision, '0'); } } else { char *t = new char[d+1]; int j; to_digits(t, e, d); if (fixed) { if (off > 0) { for (i = 0; i < off; i++) s += t[i]; if (precision > 0) { s += '.'; for (j = 0; j < precision; j++, i++) s += t[i]; } } else { s += "0."; if (off < 0) s.append(-off, '0'); for (i = 0; i < d; i++) s += t[i]; } } else { s += t[0]; if (precision > 0) s += '.'; for (i = 1; i <= precision; i++) s += t[i]; } delete [] t; } } if (!fixed) { /* Fill in exponent part */ s += uppercase ? 'E' : 'e'; append_expn(s, e); } } /* Fill in the blanks */ int len = s.length(); if (len < width) { int delta = width - len; if (fmt & ios_base::internal) { if (sgn) s.insert(static_cast(1), delta, fill); else s.insert(static_cast(0), delta, fill); } else if (fmt & ios_base::left) { s.append(delta, fill); } else { s.insert(static_cast(0), delta, fill); } } return s; } /* Computes qd^n, where n is an integer. */ qd_real pow(const qd_real &a, int n) { if (n == 0) return 1.0; qd_real r = a; /* odd-case multiplier */ qd_real s = 1.0; /* current answer */ int N = std::abs(n); if (N > 1) { /* Use binary exponentiation. */ while (N > 0) { if (N % 2 == 1) { /* If odd, multiply by r. Note eventually N = 1, so this eventually executes. */ s *= r; } N /= 2; if (N > 0) r = sqr(r); } } else { s = r; } if (n < 0) return (1.0 / s); return s; } qd_real pow(const qd_real &a, const qd_real &b) { return exp(b * log(a)); } qd_real npwr(const qd_real &a, int n) { return pow(a, n); } /* Debugging routines */ void qd_real::dump_bits(const string &name, std::ostream &os) const { string::size_type len = name.length(); if (len > 0) { os << name << " = "; len += 3; } os << "[ "; len += 2; for (int j = 0; j < 4; j++) { if (j > 0) for (string::size_type i = 0; i < len; i++) os << ' '; print_double_info(os, x[j]); if (j < 3) os << endl; else os << " ]" << endl; } } void qd_real::dump(const string &name, std::ostream &os) const { std::ios_base::fmtflags old_flags = os.flags(); std::streamsize old_prec = os.precision(19); os << std::scientific; string::size_type len = name.length(); if (len > 0) { os << name << " = "; len += 3; } os << "[ "; len += 2; os << setw(27) << x[0] << ", " << setw(26) << x[1] << "," << endl; for (string::size_type i = 0; i < len; i++) os << ' '; os << setw(27) << x[2] << ", " << setw(26) << x[3] << " ]" << endl; os.precision(old_prec); os.flags(old_flags); } /* Divisions */ /* quad-double / double-double */ qd_real qd_real::sloppy_div(const qd_real &a, const dd_real &b) { double q0, q1, q2, q3; qd_real r; qd_real qd_b(b); q0 = a[0] / b._hi(); r = a - q0 * qd_b; q1 = r[0] / b._hi(); r -= (q1 * qd_b); q2 = r[0] / b._hi(); r -= (q2 * qd_b); q3 = r[0] / b._hi(); ::renorm(q0, q1, q2, q3); return qd_real(q0, q1, q2, q3); } qd_real qd_real::accurate_div(const qd_real &a, const dd_real &b) { double q0, q1, q2, q3, q4; qd_real r; qd_real qd_b(b); q0 = a[0] / b._hi(); r = a - q0 * qd_b; q1 = r[0] / b._hi(); r -= (q1 * qd_b); q2 = r[0] / b._hi(); r -= (q2 * qd_b); q3 = r[0] / b._hi(); r -= (q3 * qd_b); q4 = r[0] / b._hi(); ::renorm(q0, q1, q2, q3, q4); return qd_real(q0, q1, q2, q3); } /* quad-double / quad-double */ qd_real qd_real::sloppy_div(const qd_real &a, const qd_real &b) { double q0, q1, q2, q3; qd_real r; q0 = a[0] / b[0]; r = a - (b * q0); q1 = r[0] / b[0]; r -= (b * q1); q2 = r[0] / b[0]; r -= (b * q2); q3 = r[0] / b[0]; ::renorm(q0, q1, q2, q3); return qd_real(q0, q1, q2, q3); } qd_real qd_real::accurate_div(const qd_real &a, const qd_real &b) { double q0, q1, q2, q3; qd_real r; q0 = a[0] / b[0]; r = a - (b * q0); q1 = r[0] / b[0]; r -= (b * q1); q2 = r[0] / b[0]; r -= (b * q2); q3 = r[0] / b[0]; r -= (b * q3); double q4 = r[0] / b[0]; ::renorm(q0, q1, q2, q3, q4); return qd_real(q0, q1, q2, q3); } QD_API qd_real sqrt(const qd_real &a) { /* Strategy: Perform the following Newton iteration: x' = x + (1 - a * x^2) * x / 2; which converges to 1/sqrt(a), starting with the double precision approximation to 1/sqrt(a). Since Newton's iteration more or less doubles the number of correct digits, we only need to perform it twice. */ if (a.is_zero()) return 0.0; if (a.is_negative()) { qd_real::error("(qd_real::sqrt): Negative argument."); return qd_real::_nan; } qd_real r = (1.0 / std::sqrt(a[0])); qd_real h = mul_pwr2(a, 0.5); r += ((0.5 - h * sqr(r)) * r); r += ((0.5 - h * sqr(r)) * r); r += ((0.5 - h * sqr(r)) * r); r *= a; return r; } /* Computes the n-th root of a */ qd_real nroot(const qd_real &a, int n) { /* Strategy: Use Newton's iteration to solve 1/(x^n) - a = 0 Newton iteration becomes x' = x + x * (1 - a * x^n) / n Since Newton's iteration converges quadratically, we only need to perform it twice. */ if (a == 0.0) { return qd_real(0.0); } qd_real r = std::pow(a[0], -1.0/n); double dbl_n = static_cast(n); r += r * (1.0 - a * (r ^ n)) / dbl_n; r += r * (1.0 - a * (r ^ n)) / dbl_n; r += r * (1.0 - a * (r ^ n)) / dbl_n; return 1.0 / r; } static const int n_inv_fact = 15; static const qd_real inv_fact[n_inv_fact] = { qd_real( 1.66666666666666657e-01, 9.25185853854297066e-18, 5.13581318503262866e-34, 2.85094902409834186e-50), qd_real( 4.16666666666666644e-02, 2.31296463463574266e-18, 1.28395329625815716e-34, 7.12737256024585466e-51), qd_real( 8.33333333333333322e-03, 1.15648231731787138e-19, 1.60494162032269652e-36, 2.22730392507682967e-53), qd_real( 1.38888888888888894e-03, -5.30054395437357706e-20, -1.73868675534958776e-36, -1.63335621172300840e-52), qd_real( 1.98412698412698413e-04, 1.72095582934207053e-22, 1.49269123913941271e-40, 1.29470326746002471e-58), qd_real( 2.48015873015873016e-05, 2.15119478667758816e-23, 1.86586404892426588e-41, 1.61837908432503088e-59), qd_real( 2.75573192239858925e-06, -1.85839327404647208e-22, 8.49175460488199287e-39, -5.72661640789429621e-55), qd_real( 2.75573192239858883e-07, 2.37677146222502973e-23, -3.26318890334088294e-40, 1.61435111860404415e-56), qd_real( 2.50521083854417202e-08, -1.44881407093591197e-24, 2.04267351467144546e-41, -8.49632672007163175e-58), qd_real( 2.08767569878681002e-09, -1.20734505911325997e-25, 1.70222792889287100e-42, 1.41609532150396700e-58), qd_real( 1.60590438368216133e-10, 1.25852945887520981e-26, -5.31334602762985031e-43, 3.54021472597605528e-59), qd_real( 1.14707455977297245e-11, 2.06555127528307454e-28, 6.88907923246664603e-45, 5.72920002655109095e-61), qd_real( 7.64716373181981641e-13, 7.03872877733453001e-30, -7.82753927716258345e-48, 1.92138649443790242e-64), qd_real( 4.77947733238738525e-14, 4.39920548583408126e-31, -4.89221204822661465e-49, 1.20086655902368901e-65), qd_real( 2.81145725434552060e-15, 1.65088427308614326e-31, -2.87777179307447918e-50, 4.27110689256293549e-67) }; qd_real exp(const qd_real &a) { /* Strategy: We first reduce the size of x by noting that exp(kr + m * log(2)) = 2^m * exp(r)^k where m and k are integers. By choosing m appropriately we can make |kr| <= log(2) / 2 = 0.347. Then exp(r) is evaluated using the familiar Taylor series. Reducing the argument substantially speeds up the convergence. */ const double k = ldexp(1.0, 16); const double inv_k = 1.0 / k; if (a[0] <= -709.0) return 0.0; if (a[0] >= 709.0) return qd_real::_inf; if (a.is_zero()) return 1.0; if (a.is_one()) return qd_real::_e; double m = std::floor(a.x[0] / qd_real::_log2.x[0] + 0.5); qd_real r = mul_pwr2(a - qd_real::_log2 * m, inv_k); qd_real s, p, t; double thresh = inv_k * qd_real::_eps; p = sqr(r); s = r + mul_pwr2(p, 0.5); int i = 0; do { p *= r; t = p * inv_fact[i++]; s += t; } while (std::abs(to_double(t)) > thresh && i < 9); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s = mul_pwr2(s, 2.0) + sqr(s); s += 1.0; return ldexp(s, static_cast(m)); } /* Logarithm. Computes log(x) in quad-double precision. This is a natural logarithm (i.e., base e). */ qd_real log(const qd_real &a) { /* Strategy. The Taylor series for log converges much more slowly than that of exp, due to the lack of the factorial term in the denominator. Hence this routine instead tries to determine the root of the function f(x) = exp(x) - a using Newton iteration. The iteration is given by x' = x - f(x)/f'(x) = x - (1 - a * exp(-x)) = x + a * exp(-x) - 1. Two iteration is needed, since Newton's iteration approximately doubles the number of digits per iteration. */ if (a.is_one()) { return 0.0; } if (a[0] <= 0.0) { qd_real::error("(qd_real::log): Non-positive argument."); return qd_real::_nan; } if (a[0] == 0.0) { return -qd_real::_inf; } qd_real x = std::log(a[0]); /* Initial approximation */ x = x + a * exp(-x) - 1.0; x = x + a * exp(-x) - 1.0; x = x + a * exp(-x) - 1.0; return x; } qd_real log10(const qd_real &a) { return log(a) / qd_real::_log10; } static const qd_real _pi1024 = qd_real( 3.067961575771282340e-03, 1.195944139792337116e-19, -2.924579892303066080e-36, 1.086381075061880158e-52); /* Table of sin(k * pi/1024) and cos(k * pi/1024). */ static const qd_real sin_table [] = { qd_real( 3.0679567629659761e-03, 1.2690279085455925e-19, 5.2879464245328389e-36, -1.7820334081955298e-52), qd_real( 6.1358846491544753e-03, 9.0545257482474933e-20, 1.6260113133745320e-37, -9.7492001208767410e-55), qd_real( 9.2037547820598194e-03, -1.2136591693535934e-19, 5.5696903949425567e-36, 1.2505635791936951e-52), qd_real( 1.2271538285719925e-02, 6.9197907640283170e-19, -4.0203726713435555e-36, -2.0688703606952816e-52), qd_real( 1.5339206284988102e-02, -8.4462578865401696e-19, 4.6535897505058629e-35, -1.3923682978570467e-51), qd_real( 1.8406729905804820e-02, 7.4195533812833160e-19, 3.9068476486787607e-35, 3.6393321292898614e-52), qd_real( 2.1474080275469508e-02, -4.5407960207688566e-19, -2.2031770119723005e-35, 1.2709814654833741e-51), qd_real( 2.4541228522912288e-02, -9.1868490125778782e-20, 4.8706148704467061e-36, -2.8153947855469224e-52), qd_real( 2.7608145778965743e-02, -1.5932358831389269e-18, -7.0475416242776030e-35, -2.7518494176602744e-51), qd_real( 3.0674803176636626e-02, -1.6936054844107918e-20, -2.0039543064442544e-36, -1.6267505108658196e-52), qd_real( 3.3741171851377587e-02, -2.0096074292368340e-18, -1.3548237016537134e-34, 6.5554881875899973e-51), qd_real( 3.6807222941358832e-02, 6.1060088803529842e-19, -4.0448721259852727e-35, -2.1111056765671495e-51), qd_real( 3.9872927587739811e-02, 4.6657453481183289e-19, 3.4119333562288684e-35, 2.4007534726187511e-51), qd_real( 4.2938256934940820e-02, 2.8351940588660907e-18, 1.6991309601186475e-34, 6.8026536098672629e-51), qd_real( 4.6003182130914630e-02, -1.1182813940157788e-18, 7.5235020270378946e-35, 4.1187304955493722e-52), qd_real( 4.9067674327418015e-02, -6.7961037205182801e-19, -4.4318868124718325e-35, -9.9376628132525316e-52), qd_real( 5.2131704680283324e-02, -2.4243695291953779e-18, -1.3675405320092298e-34, -8.3938137621145070e-51), qd_real( 5.5195244349689941e-02, -1.3340299860891103e-18, -3.4359574125665608e-35, 1.1911462755409369e-51), qd_real( 5.8258264500435759e-02, 2.3299905496077492e-19, 1.9376108990628660e-36, -5.1273775710095301e-53), qd_real( 6.1320736302208578e-02, -5.1181134064638108e-19, -4.2726335866706313e-35, 2.6368495557440691e-51), qd_real( 6.4382630929857465e-02, -4.2325997000052705e-18, 3.3260117711855937e-35, 1.4736267706718352e-51), qd_real( 6.7443919563664065e-02, -6.9221796556983636e-18, 1.5909286358911040e-34, -7.8828946891835218e-51), qd_real( 7.0504573389613870e-02, -6.8552791107342883e-18, -1.9961177630841580e-34, 2.0127129580485300e-50), qd_real( 7.3564563599667426e-02, -2.7784941506273593e-18, -9.1240375489852821e-35, -1.9589752023546795e-51), qd_real( 7.6623861392031492e-02, 2.3253700287958801e-19, -1.3186083921213440e-36, -4.9927872608099673e-53), qd_real( 7.9682437971430126e-02, -4.4867664311373041e-18, 2.8540789143650264e-34, 2.8491348583262741e-51), qd_real( 8.2740264549375692e-02, 1.4735983530877760e-18, 3.7284093452233713e-35, 2.9024430036724088e-52), qd_real( 8.5797312344439894e-02, -3.3881893830684029e-18, -1.6135529531508258e-34, 7.7294651620588049e-51), qd_real( 8.8853552582524600e-02, -3.7501775830290691e-18, 3.7543606373911573e-34, 2.2233701854451859e-50), qd_real( 9.1908956497132724e-02, 4.7631594854274564e-18, 1.5722874642939344e-34, -4.8464145447831456e-51), qd_real( 9.4963495329639006e-02, -6.5885886400417564e-18, -2.1371116991641965e-34, 1.3819370559249300e-50), qd_real( 9.8017140329560604e-02, -1.6345823622442560e-18, -1.3209238810006454e-35, -3.5691060049117942e-52), qd_real( 1.0106986275482782e-01, 3.3164325719308656e-18, -1.2004224885132282e-34, 7.2028828495418631e-51), qd_real( 1.0412163387205457e-01, 6.5760254085385100e-18, 1.7066246171219214e-34, -4.9499340996893514e-51), qd_real( 1.0717242495680884e-01, 6.4424044279026198e-18, -8.3956976499698139e-35, -4.0667730213318321e-51), qd_real( 1.1022220729388306e-01, -5.6789503537823233e-19, 1.0380274792383233e-35, 1.5213997918456695e-52), qd_real( 1.1327095217756435e-01, 2.7100481012132900e-18, 1.5323292999491619e-35, 4.9564432810360879e-52), qd_real( 1.1631863091190477e-01, 1.0294914877509705e-18, -9.3975734948993038e-35, 1.3534827323719708e-52), qd_real( 1.1936521481099137e-01, -3.9500089391898506e-18, 3.5317349978227311e-34, 1.8856046807012275e-51), qd_real( 1.2241067519921620e-01, 2.8354501489965335e-18, 1.8151655751493305e-34, -2.8716592177915192e-51), qd_real( 1.2545498341154623e-01, 4.8686751763148235e-18, 5.9878105258097936e-35, -3.3534629098722107e-51), qd_real( 1.2849811079379317e-01, 3.8198603954988802e-18, -1.8627501455947798e-34, -2.4308161133527791e-51), qd_real( 1.3154002870288312e-01, -5.0039708262213813e-18, -1.2983004159245552e-34, -4.6872034915794122e-51), qd_real( 1.3458070850712620e-01, -9.1670359171480699e-18, 1.5916493007073973e-34, 4.0237002484366833e-51), qd_real( 1.3762012158648604e-01, 6.6253255866774482e-18, -2.3746583031401459e-34, -9.3703876173093250e-52), qd_real( 1.4065823933284924e-01, -7.9193932965524741e-18, 6.0972464202108397e-34, 2.4566623241035797e-50), qd_real( 1.4369503315029444e-01, 1.1472723016618666e-17, -5.1884954557576435e-35, -4.2220684832186607e-51), qd_real( 1.4673047445536175e-01, 3.7269471470465677e-18, 3.7352398151250827e-34, -4.0881822289508634e-51), qd_real( 1.4976453467732151e-01, 8.0812114131285151e-18, 1.2979142554917325e-34, 9.9380667487736254e-51), qd_real( 1.5279718525844344e-01, -7.6313573938416838e-18, 5.7714690450284125e-34, -3.7731132582986687e-50), qd_real( 1.5582839765426523e-01, 3.0351307187678221e-18, -1.0976942315176184e-34, 7.8734647685257867e-51), qd_real( 1.5885814333386145e-01, -4.0163200573859079e-18, -9.2840580257628812e-35, -2.8567420029274875e-51), qd_real( 1.6188639378011183e-01, 1.1850519643573528e-17, -5.0440990519162957e-34, 3.0510028707928009e-50), qd_real( 1.6491312048996992e-01, -7.0405288319166738e-19, 3.3211107491245527e-35, 8.6663299254686031e-52), qd_real( 1.6793829497473117e-01, 5.4284533721558139e-18, -3.3263339336181369e-34, -1.8536367335123848e-50), qd_real( 1.7096188876030122e-01, 9.1919980181759094e-18, -6.7688743940982606e-34, -1.0377711384318389e-50), qd_real( 1.7398387338746382e-01, 5.8151994618107928e-18, -1.6751014298301606e-34, -6.6982259797164963e-51), qd_real( 1.7700422041214875e-01, 6.7329300635408167e-18, 2.8042736644246623e-34, 3.6786888232793599e-51), qd_real( 1.8002290140569951e-01, 7.9701826047392143e-18, -7.0765920110524977e-34, 1.9622512608461784e-50), qd_real( 1.8303988795514095e-01, 7.7349918688637383e-18, -4.4803769968145083e-34, 1.1201148793328890e-50), qd_real( 1.8605515166344666e-01, -1.2564893007679552e-17, 7.5953844248530810e-34, -3.8471695132415039e-51), qd_real( 1.8906866414980622e-01, -7.6208955803527778e-18, -4.4792298656662981e-34, -4.4136824096645007e-50), qd_real( 1.9208039704989244e-01, 4.3348343941174903e-18, -2.3404121848139937e-34, 1.5789970962611856e-50), qd_real( 1.9509032201612828e-01, -7.9910790684617313e-18, 6.1846270024220713e-34, -3.5840270918032937e-50), qd_real( 1.9809841071795359e-01, -1.8434411800689445e-18, 1.4139031318237285e-34, 1.0542811125343809e-50), qd_real( 2.0110463484209190e-01, 1.1010032669300739e-17, -3.9123576757413791e-34, 2.4084852500063531e-51), qd_real( 2.0410896609281687e-01, 6.0941297773957752e-18, -2.8275409970449641e-34, 4.6101008563532989e-51), qd_real( 2.0711137619221856e-01, -1.0613362528971356e-17, 2.2456805112690884e-34, 1.3483736125280904e-50), qd_real( 2.1011183688046961e-01, 1.1561548476512844e-17, 6.0355905610401254e-34, 3.3329909618405675e-50), qd_real( 2.1311031991609136e-01, 1.2031873821063860e-17, -3.4142699719695635e-34, -1.2436262780241778e-50), qd_real( 2.1610679707621952e-01, -1.0111196082609117e-17, 7.2789545335189643e-34, -2.9347540365258610e-50), qd_real( 2.1910124015686980e-01, -3.6513812299150776e-19, -2.3359499418606442e-35, 3.1785298198458653e-52), qd_real( 2.2209362097320354e-01, -3.0337210995812162e-18, 6.6654668033632998e-35, 2.0110862322656942e-51), qd_real( 2.2508391135979283e-01, 3.9507040822556510e-18, 2.4287993958305375e-35, 5.6662797513020322e-52), qd_real( 2.2807208317088573e-01, 8.2361837339258012e-18, 6.9786781316397937e-34, -6.4122962482639504e-51), qd_real( 2.3105810828067111e-01, 1.0129787149761869e-17, -6.9359234615816044e-34, -2.8877355604883782e-50), qd_real( 2.3404195858354343e-01, -6.9922402696101173e-18, -5.7323031922750280e-34, 5.3092579966872727e-51), qd_real( 2.3702360599436720e-01, 8.8544852285039918e-18, 1.3588480826354134e-34, 1.0381022520213867e-50), qd_real( 2.4000302244874150e-01, -1.2137758975632164e-17, -2.6448807731703891e-34, -1.9929733800670473e-51), qd_real( 2.4298017990326390e-01, -8.7514315297196632e-18, -6.5723260373079431e-34, -1.0333158083172177e-50), qd_real( 2.4595505033579462e-01, -1.1129044052741832e-17, 4.3805998202883397e-34, 1.2219399554686291e-50), qd_real( 2.4892760574572018e-01, -8.1783436100020990e-18, 5.5666875261111840e-34, 3.8080473058748167e-50), qd_real( 2.5189781815421697e-01, -1.7591436032517039e-17, -1.0959681232525285e-33, 5.6209426020232456e-50), qd_real( 2.5486565960451457e-01, -1.3602299806901461e-19, -6.0073844642762535e-36, -3.0072751311893878e-52), qd_real( 2.5783110216215899e-01, 1.8480038630879957e-17, 3.3201664714047599e-34, -5.5547819290576764e-51), qd_real( 2.6079411791527551e-01, 4.2721420983550075e-18, 5.6782126934777920e-35, 3.1428338084365397e-51), qd_real( 2.6375467897483140e-01, -1.8837947680038700e-17, 1.3720129045754794e-33, -8.2763406665966033e-50), qd_real( 2.6671275747489837e-01, 2.0941222578826688e-17, -1.1303466524727989e-33, 1.9954224050508963e-50), qd_real( 2.6966832557291509e-01, 1.5765657618133259e-17, -6.9696142173370086e-34, -4.0455346879146776e-50), qd_real( 2.7262135544994898e-01, 7.8697166076387850e-18, 6.6179388602933372e-35, -2.7642903696386267e-51), qd_real( 2.7557181931095814e-01, 1.9320328962556582e-17, 1.3932094180100280e-33, 1.3617253920018116e-50), qd_real( 2.7851968938505312e-01, -1.0030273719543544e-17, 7.2592115325689254e-34, -1.0068516296655851e-50), qd_real( 2.8146493792575800e-01, -1.2322299641274009e-17, -1.0564788706386435e-34, 7.5137424251265885e-51), qd_real( 2.8440753721127182e-01, 2.2209268510661475e-17, -9.1823095629523708e-34, -5.2192875308892218e-50), qd_real( 2.8734745954472951e-01, 1.5461117367645717e-17, -6.3263973663444076e-34, -2.2982538416476214e-50), qd_real( 2.9028467725446239e-01, -1.8927978707774251e-17, 1.1522953157142315e-33, 7.4738655654716596e-50), qd_real( 2.9321916269425863e-01, 2.2385430811901833e-17, 1.3662484646539680e-33, -4.2451325253996938e-50), qd_real( 2.9615088824362384e-01, -2.0220736360876938e-17, -7.9252212533920413e-35, -2.8990577729572470e-51), qd_real( 2.9907982630804048e-01, 1.6701181609219447e-18, 8.6091151117316292e-35, 3.9931286230012102e-52), qd_real( 3.0200594931922808e-01, -1.7167666235262474e-17, 2.3336182149008069e-34, 8.3025334555220004e-51), qd_real( 3.0492922973540243e-01, -2.2989033898191262e-17, -1.4598901099661133e-34, 3.7760487693121827e-51), qd_real( 3.0784964004153487e-01, 2.7074088527245185e-17, 1.2568858206899284e-33, 7.2931815105901645e-50), qd_real( 3.1076715274961147e-01, 2.0887076364048513e-17, -3.0130590791065942e-34, 1.3876739009935179e-51), qd_real( 3.1368174039889146e-01, 1.4560447299968912e-17, 3.6564186898011595e-34, 1.1654264734999375e-50), qd_real( 3.1659337555616585e-01, 2.1435292512726283e-17, 1.2338169231377316e-33, 3.3963542100989293e-50), qd_real( 3.1950203081601569e-01, -1.3981562491096626e-17, 8.1730000697411350e-34, -7.7671096270210952e-50), qd_real( 3.2240767880106985e-01, -4.0519039937959398e-18, 3.7438302780296796e-34, 8.7936731046639195e-51), qd_real( 3.2531029216226293e-01, 7.9171249463765892e-18, -6.7576622068146391e-35, 2.3021655066929538e-51), qd_real( 3.2820984357909255e-01, -2.6693140719641896e-17, 7.8928851447534788e-34, 2.5525163821987809e-51), qd_real( 3.3110630575987643e-01, -2.7469465474778694e-17, -1.3401245916610206e-33, 6.5531762489976163e-50), qd_real( 3.3399965144200938e-01, 2.2598986806288142e-17, 7.8063057192586115e-34, 2.0427600895486683e-50), qd_real( 3.3688985339222005e-01, -4.2000940033475092e-19, -2.9178652969985438e-36, -1.1597376437036749e-52), qd_real( 3.3977688440682685e-01, 6.6028679499418282e-18, 1.2575009988669683e-34, 2.5569067699008304e-51), qd_real( 3.4266071731199438e-01, 1.9261518449306319e-17, -9.2754189135990867e-34, 8.5439996687390166e-50), qd_real( 3.4554132496398904e-01, 2.7251143672916123e-17, 7.0138163601941737e-34, -1.4176292197454015e-50), qd_real( 3.4841868024943456e-01, 3.6974420514204918e-18, 3.5532146878499996e-34, 1.9565462544501322e-50), qd_real( 3.5129275608556715e-01, -2.2670712098795844e-17, -1.6994216673139631e-34, -1.2271556077284517e-50), qd_real( 3.5416352542049040e-01, -1.6951763305764860e-17, 1.2772331777814617e-33, -3.3703785435843310e-50), qd_real( 3.5703096123343003e-01, -4.8218191137919166e-19, -4.1672436994492361e-35, -7.1531167149364352e-52), qd_real( 3.5989503653498817e-01, -1.7601687123839282e-17, 1.3375125473046791e-33, 7.9467815593584340e-50), qd_real( 3.6275572436739723e-01, -9.1668352663749849e-18, -7.4317843956936735e-34, -2.0199582511804564e-50), qd_real( 3.6561299780477385e-01, 1.6217898770457546e-17, 1.1286970151961055e-33, -7.1825287318139010e-50), qd_real( 3.6846682995337232e-01, 1.0463640796159268e-17, 2.0554984738517304e-35, 1.0441861305618769e-51), qd_real( 3.7131719395183754e-01, 3.4749239648238266e-19, -7.5151053042866671e-37, -2.8153468438650851e-53), qd_real( 3.7416406297145799e-01, 8.0114103761962118e-18, 5.3429599813406052e-34, 1.0351378796539210e-50), qd_real( 3.7700741021641826e-01, -2.7255302041956930e-18, 6.3646586445018137e-35, 8.3048657176503559e-52), qd_real( 3.7984720892405116e-01, 9.9151305855172370e-18, 4.8761409697224886e-34, 1.4025084000776705e-50), qd_real( 3.8268343236508978e-01, -1.0050772696461588e-17, -2.0605316302806695e-34, -1.2717724698085205e-50), qd_real( 3.8551605384391885e-01, 1.5177665396472313e-17, 1.4198230518016535e-33, 5.8955167159904235e-50), qd_real( 3.8834504669882630e-01, -1.0053770598398717e-17, 7.5942999255057131e-34, -3.1967974046654219e-50), qd_real( 3.9117038430225387e-01, 1.7997787858243995e-17, -1.0613482402609856e-33, -5.4582148817791032e-50), qd_real( 3.9399204006104810e-01, 9.7649241641239336e-18, -2.1233599441284617e-34, -5.5529836795340819e-51), qd_real( 3.9680998741671031e-01, 2.0545063670840126e-17, 6.1347058801922842e-34, 1.0733788150636430e-50), qd_real( 3.9962419984564684e-01, -1.5065497476189372e-17, -9.9653258881867298e-34, -5.7524323712725355e-50), qd_real( 4.0243465085941843e-01, 1.0902619339328270e-17, 7.3998528125989765e-34, 2.2745784806823499e-50), qd_real( 4.0524131400498986e-01, 9.9111401942899884e-18, -2.5169070895434648e-34, 9.2772984818436573e-53), qd_real( 4.0804416286497869e-01, -7.0006015137351311e-18, -1.4108207334268228e-34, 1.5175546997577136e-52), qd_real( 4.1084317105790397e-01, -2.4219835190355499e-17, -1.1418902925313314e-33, -2.0996843165093468e-50), qd_real( 4.1363831223843456e-01, -1.0393984940597871e-17, -1.1481681174503880e-34, -2.0281052851028680e-51), qd_real( 4.1642956009763721e-01, -2.5475580413131732e-17, -3.4482678506112824e-34, 7.1788619351865480e-51), qd_real( 4.1921688836322396e-01, -4.2232463750110590e-18, -3.6053023045255790e-34, -2.2209673210025631e-50), qd_real( 4.2200027079979968e-01, 4.3543266994128527e-18, 3.1734310272251190e-34, -1.3573247980738668e-50), qd_real( 4.2477968120910881e-01, 2.7462312204277281e-17, -4.6552847802111948e-34, 6.5961781099193122e-51), qd_real( 4.2755509343028208e-01, 9.4111898162954726e-18, -1.7446682426598801e-34, -2.2054492626480169e-51), qd_real( 4.3032648134008261e-01, 2.2259686974092690e-17, 8.5972591314085075e-34, -2.9420897889003020e-50), qd_real( 4.3309381885315196e-01, 1.1224283329847517e-17, 5.3223748041075651e-35, 5.3926192627014212e-51), qd_real( 4.3585707992225547e-01, 1.6230515450644527e-17, -6.4371449063579431e-35, -6.9102436481386757e-51), qd_real( 4.3861623853852766e-01, -2.0883315831075090e-17, -1.4259583540891877e-34, 6.3864763590657077e-52), qd_real( 4.4137126873171667e-01, 2.2360783886964969e-17, 1.1864769603515770e-34, -3.8087003266189232e-51), qd_real( 4.4412214457042926e-01, -2.4218874422178315e-17, 2.2205230838703907e-34, 9.2133035911356258e-51), qd_real( 4.4686884016237421e-01, -1.9222136142309382e-17, -4.4425678589732049e-35, -1.3673609292149535e-51), qd_real( 4.4961132965460660e-01, 4.8831924232035243e-18, 2.7151084498191381e-34, -1.5653993171613154e-50), qd_real( 4.5234958723377089e-01, -1.4827977472196122e-17, -7.6947501088972324e-34, 1.7656856882031319e-50), qd_real( 4.5508358712634384e-01, -1.2379906758116472e-17, 5.5289688955542643e-34, -8.5382312840209386e-51), qd_real( 4.5781330359887723e-01, -8.4554254922295949e-18, -6.3770394246764263e-34, 3.1778253575564249e-50), qd_real( 4.6053871095824001e-01, 1.8488777492177872e-17, -1.0527732154209725e-33, 3.3235593490947102e-50), qd_real( 4.6325978355186020e-01, -7.3514924533231707e-18, 6.7175396881707035e-34, 3.9594127612123379e-50), qd_real( 4.6597649576796618e-01, -3.3023547778235135e-18, 3.4904677050476886e-35, 3.4483855263874246e-51), qd_real( 4.6868882203582796e-01, -2.2949251681845054e-17, -1.1364757641823658e-33, 6.8840522501918612e-50), qd_real( 4.7139673682599764e-01, 6.5166781360690130e-18, 2.9457546966235984e-34, -6.2159717738836630e-51), qd_real( 4.7410021465055002e-01, -8.1451601548978075e-18, -3.4789448555614422e-34, -1.1681943974658508e-50), qd_real( 4.7679923006332214e-01, -1.0293515338305794e-17, -3.6582045008369952e-34, 1.7424131479176475e-50), qd_real( 4.7949375766015301e-01, 1.8419999662684771e-17, -1.3040838621273312e-33, 1.0977131822246471e-50), qd_real( 4.8218377207912277e-01, -2.5861500925520442e-17, -6.2913197606500007e-36, 4.0802359808684726e-52), qd_real( 4.8486924800079112e-01, -1.8034004203262245e-17, -3.5244276906958044e-34, -1.7138318654749246e-50), qd_real( 4.8755016014843594e-01, 1.4231090931273653e-17, -1.8277733073262697e-34, -1.5208291790429557e-51), qd_real( 4.9022648328829116e-01, -5.1496145643440404e-18, -3.6903027405284104e-34, 1.5172940095151304e-50), qd_real( 4.9289819222978404e-01, -1.0257831676562186e-18, 6.9520817760885069e-35, -2.4260961214090389e-51), qd_real( 4.9556526182577254e-01, -9.4323241942365362e-18, 3.1212918657699143e-35, 4.2009072375242736e-52), qd_real( 4.9822766697278187e-01, -1.6126383830540798e-17, -1.5092897319298871e-33, 1.1049298890895917e-50), qd_real( 5.0088538261124083e-01, -3.9604015147074639e-17, -2.2208395201898007e-33, 1.3648202735839417e-49), qd_real( 5.0353838372571758e-01, -1.6731308204967497e-17, -1.0140233644074786e-33, 4.0953071937671477e-50), qd_real( 5.0618664534515534e-01, -4.8321592986493711e-17, 9.2858107226642252e-34, 4.2699802401037005e-50), qd_real( 5.0883014254310699e-01, 4.7836968268014130e-17, -1.0727022928806035e-33, 2.7309374513672757e-50), qd_real( 5.1146885043797041e-01, -1.3088001221007579e-17, 4.0929033363366899e-34, -3.7952190153477926e-50), qd_real( 5.1410274419322177e-01, -4.5712707523615624e-17, 1.5488279442238283e-33, -2.5853959305521130e-50), qd_real( 5.1673179901764987e-01, 8.3018617233836515e-18, 5.8251027467695202e-34, -2.2812397190535076e-50), qd_real( 5.1935599016558964e-01, -5.5331248144171145e-17, -3.1628375609769026e-35, -2.4091972051188571e-51), qd_real( 5.2197529293715439e-01, -4.6555795692088883e-17, 4.6378980936850430e-34, -3.3470542934689532e-51), qd_real( 5.2458968267846895e-01, -4.3068869040082345e-17, -4.2013155291932055e-34, -1.5096069926700274e-50), qd_real( 5.2719913478190139e-01, -4.2202983480560619e-17, 8.5585916184867295e-34, 7.9974339336732307e-50), qd_real( 5.2980362468629472e-01, -4.8067841706482342e-17, 5.8309721046630296e-34, -8.9740761521756660e-51), qd_real( 5.3240312787719801e-01, -4.1020306135800895e-17, -1.9239996374230821e-33, -1.5326987913812184e-49), qd_real( 5.3499761988709726e-01, -5.3683132708358134e-17, -1.3900569918838112e-33, 2.7154084726474092e-50), qd_real( 5.3758707629564551e-01, -2.2617365388403054e-17, -5.9787279033447075e-34, 3.1204419729043625e-51), qd_real( 5.4017147272989285e-01, 2.7072447965935839e-17, 1.1698799709213829e-33, -5.9094668515881500e-50), qd_real( 5.4275078486451589e-01, 1.7148261004757101e-17, -1.3525905925200870e-33, 4.9724411290727323e-50), qd_real( 5.4532498842204646e-01, -4.1517817538384258e-17, -1.5318930219385941e-33, 6.3629921101413974e-50), qd_real( 5.4789405917310019e-01, -2.4065878297113363e-17, -3.5639213669362606e-36, -2.6013270854271645e-52), qd_real( 5.5045797293660481e-01, -8.3319903015807663e-18, -2.3058454035767633e-34, -2.1611290432369010e-50), qd_real( 5.5301670558002758e-01, -4.7061536623798204e-17, -1.0617111545918056e-33, -1.6196316144407379e-50), qd_real( 5.5557023301960218e-01, 4.7094109405616768e-17, -2.0640520383682921e-33, 1.2290163188567138e-49), qd_real( 5.5811853122055610e-01, 1.3481176324765226e-17, -5.5016743873011438e-34, -2.3484822739335416e-50), qd_real( 5.6066157619733603e-01, -7.3956418153476152e-18, 3.9680620611731193e-34, 3.1995952200836223e-50), qd_real( 5.6319934401383409e-01, 2.3835775146854829e-17, 1.3511793173769814e-34, 9.3201311581248143e-51), qd_real( 5.6573181078361323e-01, -3.4096079596590466e-17, -1.7073289744303546e-33, 8.9147089975404507e-50), qd_real( 5.6825895267013160e-01, -5.0935673642769248e-17, -1.6274356351028249e-33, 9.8183151561702966e-51), qd_real( 5.7078074588696726e-01, 2.4568151455566208e-17, -1.2844481247560350e-33, -1.8037634376936261e-50), qd_real( 5.7329716669804220e-01, 8.5176611669306400e-18, -6.4443208788026766e-34, 2.2546105543273003e-50), qd_real( 5.7580819141784534e-01, -3.7909495458942734e-17, -2.7433738046854309e-33, 1.1130841524216795e-49), qd_real( 5.7831379641165559e-01, -2.6237691512372831e-17, 1.3679051680738167e-33, -3.1409808935335900e-50), qd_real( 5.8081395809576453e-01, 1.8585338586613408e-17, 2.7673843114549181e-34, 1.9605349619836937e-50), qd_real( 5.8330865293769829e-01, 3.4516601079044858e-18, 1.8065977478946306e-34, -6.3953958038544646e-51), qd_real( 5.8579785745643886e-01, -3.7485501964311294e-18, 2.7965403775536614e-34, -7.1816936024157202e-51), qd_real( 5.8828154822264533e-01, -2.9292166725006846e-17, -2.3744954603693934e-33, -1.1571631191512480e-50), qd_real( 5.9075970185887428e-01, -4.7013584170659542e-17, 2.4808417611768356e-33, 1.2598907673643198e-50), qd_real( 5.9323229503979980e-01, 1.2892320944189053e-17, 5.3058364776359583e-34, 4.1141674699390052e-50), qd_real( 5.9569930449243336e-01, -1.3438641936579467e-17, -6.7877687907721049e-35, -5.6046937531684890e-51), qd_real( 5.9816070699634227e-01, 3.8801885783000657e-17, -1.2084165858094663e-33, -4.0456610843430061e-50), qd_real( 6.0061647938386897e-01, -4.6398198229461932e-17, -1.6673493003710801e-33, 5.1982824378491445e-50), qd_real( 6.0306659854034816e-01, 3.7323357680559650e-17, 2.7771920866974305e-33, -1.6194229649742458e-49), qd_real( 6.0551104140432555e-01, -3.1202672493305677e-17, 1.2761267338680916e-33, -4.0859368598379647e-50), qd_real( 6.0794978496777363e-01, 3.5160832362096660e-17, -2.5546242776778394e-34, -1.4085313551220694e-50), qd_real( 6.1038280627630948e-01, -2.2563265648229169e-17, 1.3185575011226730e-33, 8.2316691420063460e-50), qd_real( 6.1281008242940971e-01, -4.2693476568409685e-18, 2.5839965886650320e-34, 1.6884412005622537e-50), qd_real( 6.1523159058062682e-01, 2.6231417767266950e-17, -1.4095366621106716e-33, 7.2058690491304558e-50), qd_real( 6.1764730793780398e-01, -4.7478594510902452e-17, -7.2986558263123996e-34, -3.0152327517439154e-50), qd_real( 6.2005721176328921e-01, -2.7983410837681118e-17, 1.1649951056138923e-33, -5.4539089117135207e-50), qd_real( 6.2246127937414997e-01, 5.2940728606573002e-18, -4.8486411215945827e-35, 1.2696527641980109e-52), qd_real( 6.2485948814238634e-01, 3.3671846037243900e-17, -2.7846053391012096e-33, 5.6102718120012104e-50), qd_real( 6.2725181549514408e-01, 3.0763585181253225e-17, 2.7068930273498138e-34, -1.1172240309286484e-50), qd_real( 6.2963823891492698e-01, 4.1115334049626806e-17, -1.9167473580230747e-33, 1.1118424028161730e-49), qd_real( 6.3201873593980906e-01, -4.0164942296463612e-17, -7.2208643641736723e-34, 3.7828920470544344e-50), qd_real( 6.3439328416364549e-01, 1.0420901929280035e-17, 4.1174558929280492e-34, -1.4464152986630705e-51), qd_real( 6.3676186123628420e-01, 3.1419048711901611e-17, -2.2693738415126449e-33, -1.6023584204297388e-49), qd_real( 6.3912444486377573e-01, 1.2416796312271043e-17, -6.2095419626356605e-34, 2.7762065999506603e-50), qd_real( 6.4148101280858316e-01, -9.9883430115943310e-18, 4.1969230376730128e-34, 5.6980543799257597e-51), qd_real( 6.4383154288979150e-01, -3.2084798795046886e-17, -1.2595311907053305e-33, -4.0205885230841536e-50), qd_real( 6.4617601298331639e-01, -2.9756137382280815e-17, -1.0275370077518259e-33, 8.0852478665893014e-51), qd_real( 6.4851440102211244e-01, 3.9870270313386831e-18, 1.9408388509540788e-34, -5.1798420636193190e-51), qd_real( 6.5084668499638088e-01, 3.9714670710500257e-17, 2.9178546787002963e-34, 3.8140635508293278e-51), qd_real( 6.5317284295377676e-01, 8.5695642060026238e-18, -6.9165322305070633e-34, 2.3873751224185395e-50), qd_real( 6.5549285299961535e-01, 3.5638734426385005e-17, 1.2695365790889811e-33, 4.3984952865412050e-50), qd_real( 6.5780669329707864e-01, 1.9580943058468545e-17, -1.1944272256627192e-33, 2.8556402616436858e-50), qd_real( 6.6011434206742048e-01, -1.3960054386823638e-19, 6.1515777931494047e-36, 5.3510498875622660e-52), qd_real( 6.6241577759017178e-01, -2.2615508885764591e-17, 5.0177050318126862e-34, 2.9162532399530762e-50), qd_real( 6.6471097820334490e-01, -3.6227793598034367e-17, -9.0607934765540427e-34, 3.0917036342380213e-50), qd_real( 6.6699992230363747e-01, 3.5284364997428166e-17, -1.0382057232458238e-33, 7.3812756550167626e-50), qd_real( 6.6928258834663612e-01, -5.4592652417447913e-17, -2.5181014709695152e-33, -1.6867875999437174e-49), qd_real( 6.7155895484701844e-01, -4.0489037749296692e-17, 3.1995835625355681e-34, -1.4044414655670960e-50), qd_real( 6.7382900037875604e-01, 2.3091901236161086e-17, 5.7428037192881319e-34, 1.1240668354625977e-50), qd_real( 6.7609270357531592e-01, 3.7256902248049466e-17, 1.7059417895764375e-33, 9.7326347795300652e-50), qd_real( 6.7835004312986147e-01, 1.8302093041863122e-17, 9.5241675746813072e-34, 5.0328101116133503e-50), qd_real( 6.8060099779545302e-01, 2.8473293354522047e-17, 4.1331805977270903e-34, 4.2579030510748576e-50), qd_real( 6.8284554638524808e-01, -1.2958058061524531e-17, 1.8292386959330698e-34, 3.4536209116044487e-51), qd_real( 6.8508366777270036e-01, 2.5948135194645137e-17, -8.5030743129500702e-34, -6.9572086141009930e-50), qd_real( 6.8731534089175916e-01, -5.5156158714917168e-17, 1.1896489854266829e-33, -7.8505896218220662e-51), qd_real( 6.8954054473706694e-01, -1.5889323294806790e-17, 9.1242356240205712e-34, 3.8315454152267638e-50), qd_real( 6.9175925836415775e-01, 2.7406078472410668e-17, 1.3286508943202092e-33, 1.0651869129580079e-51), qd_real( 6.9397146088965400e-01, 7.4345076956280137e-18, 7.5061528388197460e-34, -1.5928000240686583e-50), qd_real( 6.9617713149146299e-01, -4.1224081213582889e-17, -3.1838716762083291e-35, -3.9625587412119131e-51), qd_real( 6.9837624940897280e-01, 4.8988282435667768e-17, 1.9134010413244152e-33, 2.6161153243793989e-50), qd_real( 7.0056879394324834e-01, 3.1027960192992922e-17, 9.5638250509179997e-34, 4.5896916138107048e-51), qd_real( 7.0275474445722530e-01, 2.5278294383629822e-18, -8.6985561210674942e-35, -5.6899862307812990e-51), qd_real( 7.0493408037590488e-01, 2.7608725585748502e-17, 2.9816599471629137e-34, 1.1533044185111206e-50), qd_real( 7.0710678118654757e-01, -4.8336466567264567e-17, 2.0693376543497068e-33, 2.4677734957341755e-50) }; static const qd_real cos_table [] = { qd_real( 9.9999529380957619e-01, -1.9668064285322189e-17, -6.3053955095883481e-34, 5.3266110855726731e-52), qd_real( 9.9998117528260111e-01, 3.3568103522895585e-17, -1.4740132559368063e-35, 9.8603097594755596e-52), qd_real( 9.9995764455196390e-01, -3.1527836866647287e-17, 2.6363251186638437e-33, 1.0007504815488399e-49), qd_real( 9.9992470183914450e-01, 3.7931082512668012e-17, -8.5099918660501484e-35, -4.9956973223295153e-51), qd_real( 9.9988234745421256e-01, -3.5477814872408538e-17, 1.7102001035303974e-33, -1.0725388519026542e-49), qd_real( 9.9983058179582340e-01, 1.8825140517551119e-17, -5.1383513457616937e-34, -3.8378827995403787e-50), qd_real( 9.9976940535121528e-01, 4.2681177032289012e-17, 1.9062302359737099e-33, -6.0221153262881160e-50), qd_real( 9.9969881869620425e-01, -2.9851486403799753e-17, -1.9084787370733737e-33, 5.5980260344029202e-51), qd_real( 9.9961882249517864e-01, -4.1181965521424734e-17, 2.0915365593699916e-33, 8.1403390920903734e-50), qd_real( 9.9952941750109314e-01, 2.0517917823755591e-17, -4.7673802585706520e-34, -2.9443604198656772e-50), qd_real( 9.9943060455546173e-01, 3.9644497752257798e-17, -2.3757223716722428e-34, -1.2856759011361726e-51), qd_real( 9.9932238458834954e-01, -4.2858538440845682e-17, 3.3235101605146565e-34, -8.3554272377057543e-51), qd_real( 9.9920475861836389e-01, 9.1796317110385693e-18, 5.5416208185868570e-34, 8.0267046717615311e-52), qd_real( 9.9907772775264536e-01, 2.1419007653587032e-17, -7.9048203318529618e-34, -5.3166296181112712e-50), qd_real( 9.9894129318685687e-01, -2.0610641910058638e-17, -1.2546525485913485e-33, -7.5175888806157064e-50), qd_real( 9.9879545620517241e-01, -1.2291693337075465e-17, 2.4468446786491271e-34, 1.0723891085210268e-50), qd_real( 9.9864021818026527e-01, -4.8690254312923302e-17, -2.9470881967909147e-34, -1.3000650761346907e-50), qd_real( 9.9847558057329477e-01, -2.2002931182778795e-17, -1.2371509454944992e-33, -2.4911225131232065e-50), qd_real( 9.9830154493389289e-01, -5.1869402702792278e-17, 1.0480195493633452e-33, -2.8995649143155511e-50), qd_real( 9.9811811290014918e-01, 2.7935487558113833e-17, 2.4423341255830345e-33, -6.7646699175334417e-50), qd_real( 9.9792528619859600e-01, 1.7143659778886362e-17, 5.7885840902887460e-34, -9.2601432603894597e-51), qd_real( 9.9772306664419164e-01, -2.6394475274898721e-17, -1.6176223087661783e-34, -9.9924942889362281e-51), qd_real( 9.9751145614030345e-01, 5.6007205919806937e-18, -5.9477673514685690e-35, -1.4166807162743627e-54), qd_real( 9.9729045667869021e-01, 9.1647695371101735e-18, 6.7824134309739296e-34, -8.6191392795543357e-52), qd_real( 9.9706007033948296e-01, 1.6734093546241963e-17, -1.3169951440780028e-33, 1.0311048767952477e-50), qd_real( 9.9682029929116567e-01, 4.7062820708615655e-17, 2.8412041076474937e-33, -8.0006155670263622e-50), qd_real( 9.9657114579055484e-01, 1.1707179088390986e-17, -7.5934413263024663e-34, 2.8474848436926008e-50), qd_real( 9.9631261218277800e-01, 1.1336497891624735e-17, 3.4002458674414360e-34, 7.7419075921544901e-52), qd_real( 9.9604470090125197e-01, 2.2870031707670695e-17, -3.9184839405013148e-34, -3.7081260416246375e-50), qd_real( 9.9576741446765982e-01, -2.3151908323094359e-17, -1.6306512931944591e-34, -1.5925420783863192e-51), qd_real( 9.9548075549192694e-01, 3.2084621412226554e-18, -4.9501292146013023e-36, -2.7811428850878516e-52), qd_real( 9.9518472667219693e-01, -4.2486913678304410e-17, 1.3315510772504614e-33, 6.7927987417051888e-50), qd_real( 9.9487933079480562e-01, 4.2130813284943662e-18, -4.2062597488288452e-35, 2.5157064556087620e-51), qd_real( 9.9456457073425542e-01, 3.6745069641528058e-17, -3.0603304105471010e-33, 1.0397872280487526e-49), qd_real( 9.9424044945318790e-01, 4.4129423472462673e-17, -3.0107231708238066e-33, 7.4201582906861892e-50), qd_real( 9.9390697000235606e-01, -1.8964849471123746e-17, -1.5980853777937752e-35, -8.5374807150597082e-52), qd_real( 9.9356413552059530e-01, 2.9752309927797428e-17, -4.5066707331134233e-34, -3.3548191633805036e-50), qd_real( 9.9321194923479450e-01, 3.3096906261272262e-17, 1.5592811973249567e-33, 1.4373977733253592e-50), qd_real( 9.9285041445986510e-01, -1.4094517733693302e-17, -1.1954558131616916e-33, 1.8761873742867983e-50), qd_real( 9.9247953459870997e-01, 3.1093055095428906e-17, -1.8379594757818019e-33, -3.9885758559381314e-51), qd_real( 9.9209931314219180e-01, -3.9431926149588778e-17, -6.2758062911047230e-34, -1.2960929559212390e-50), qd_real( 9.9170975366909953e-01, -2.3372891311883661e-18, 2.7073298824968591e-35, -1.2569459441802872e-51), qd_real( 9.9131085984611544e-01, -2.5192111583372105e-17, -1.2852471567380887e-33, 5.2385212584310483e-50), qd_real( 9.9090263542778001e-01, 1.5394565094566704e-17, -1.0799984133184567e-33, 2.7451115960133595e-51), qd_real( 9.9048508425645709e-01, -5.5411437553780867e-17, -1.4614017210753585e-33, -3.8339374397387620e-50), qd_real( 9.9005821026229712e-01, -1.7055485906233963e-17, 1.3454939685758777e-33, 7.3117589137300036e-50), qd_real( 9.8962201746320089e-01, -5.2398217968132530e-17, 1.3463189211456219e-33, 5.8021640554894872e-50), qd_real( 9.8917650996478101e-01, -4.0987309937047111e-17, -4.4857560552048437e-34, -3.9414504502871125e-50), qd_real( 9.8872169196032378e-01, -1.0976227206656125e-17, 3.2311342577653764e-34, 9.6367946583575041e-51), qd_real( 9.8825756773074946e-01, 2.7030607784372632e-17, 7.7514866488601377e-35, 2.1019644956864938e-51), qd_real( 9.8778414164457218e-01, -2.3600693397159021e-17, -1.2323283769707861e-33, 3.0130900716803339e-50), qd_real( 9.8730141815785843e-01, -5.2332261255715652e-17, -2.7937644333152473e-33, 1.2074160567958408e-49), qd_real( 9.8680940181418553e-01, -5.0287214351061075e-17, -2.2681526238144461e-33, 4.4003694320169133e-50), qd_real( 9.8630809724459867e-01, -2.1520877103013341e-17, 1.1866528054187716e-33, -7.8532199199813836e-50), qd_real( 9.8579750916756748e-01, -5.1439452979953012e-17, 2.6276439309996725e-33, 7.5423552783286347e-50), qd_real( 9.8527764238894122e-01, 2.3155637027900207e-17, -7.5275971545764833e-34, 1.0582231660456094e-50), qd_real( 9.8474850180190421e-01, 1.0548144061829957e-17, 2.8786145266267306e-34, -3.6782210081466112e-51), qd_real( 9.8421009238692903e-01, 4.7983922627050691e-17, 2.2597419645070588e-34, 1.7573875814863400e-50), qd_real( 9.8366241921173025e-01, 1.9864948201635255e-17, -1.0743046281211033e-35, 1.7975662796558100e-52), qd_real( 9.8310548743121629e-01, 4.2170007522888628e-17, 8.2396265656440904e-34, -8.0803700139096561e-50), qd_real( 9.8253930228744124e-01, 1.5149580813777224e-17, -4.1802771422186237e-34, -2.2150174326226160e-50), qd_real( 9.8196386910955524e-01, 2.1108443711513084e-17, -1.5253013442896054e-33, -6.8388082079337969e-50), qd_real( 9.8137919331375456e-01, 1.3428163260355633e-17, -6.5294290469962986e-34, 2.7965412287456268e-51), qd_real( 9.8078528040323043e-01, 1.8546939997825006e-17, -1.0696564445530757e-33, 6.6668174475264961e-50), qd_real( 9.8018213596811743e-01, -3.6801786963856159e-17, 6.3245171387992842e-34, 1.8600176137175971e-50), qd_real( 9.7956976568544052e-01, 1.5573991584990420e-17, -1.3401066029782990e-33, -1.7263702199862149e-50), qd_real( 9.7894817531906220e-01, -2.3817727961148053e-18, -1.0694750370381661e-34, -8.2293047196087462e-51), qd_real( 9.7831737071962765e-01, -2.1623082233344895e-17, 1.0970403012028032e-33, 7.7091923099369339e-50), qd_real( 9.7767735782450993e-01, 5.0514136167059628e-17, -1.3254751701428788e-33, 7.0161254312124538e-50), qd_real( 9.7702814265775439e-01, -4.3353875751555997e-17, 5.4948839831535478e-34, -9.2755263105377306e-51), qd_real( 9.7636973133002114e-01, 9.3093931526213780e-18, -4.1184949155685665e-34, -3.1913926031393690e-50), qd_real( 9.7570213003852857e-01, -2.5572556081259686e-17, -9.3174244508942223e-34, -8.3675863211646863e-51), qd_real( 9.7502534506699412e-01, 2.6642660651899135e-17, 1.7819392739353853e-34, -3.3159625385648947e-51), qd_real( 9.7433938278557586e-01, 2.3041221476151512e-18, 1.0758686005031430e-34, 5.1074116432809478e-51), qd_real( 9.7364424965081198e-01, -5.1729808691005871e-17, -1.5508473005989887e-33, -1.6505125917675401e-49), qd_real( 9.7293995220556018e-01, -3.1311211122281800e-17, -2.6874087789006141e-33, -2.1652434818822145e-51), qd_real( 9.7222649707893627e-01, 3.6461169785938221e-17, 3.0309636883883133e-33, -1.2702716907967306e-51), qd_real( 9.7150389098625178e-01, -7.9865421122289046e-18, -4.3628417211263380e-34, 3.4307517798759352e-51), qd_real( 9.7077214072895035e-01, -4.7992163325114922e-17, 3.0347528910975783e-33, 8.5989199506479701e-50), qd_real( 9.7003125319454397e-01, 1.8365300348428844e-17, -1.4311097571944918e-33, 8.5846781998740697e-51), qd_real( 9.6928123535654853e-01, -4.5663660261927896e-17, 9.6147526917239387e-34, 8.1267605207871330e-51), qd_real( 9.6852209427441727e-01, 4.9475074918244771e-17, 2.8558738351911241e-33, 6.2948422316507461e-50), qd_real( 9.6775383709347551e-01, -4.5512132825515820e-17, -1.4127617988719093e-33, -8.4620609089704578e-50), qd_real( 9.6697647104485207e-01, 3.8496228837337864e-17, -5.3881631542745647e-34, -3.5221863171458959e-50), qd_real( 9.6619000344541250e-01, 5.1298840401665493e-17, 1.4564075904769808e-34, 1.0095973971377432e-50), qd_real( 9.6539444169768940e-01, -2.3745389918392156e-17, 5.9221515590053862e-34, -3.8811192556231094e-50), qd_real( 9.6458979328981276e-01, -3.4189470735959786e-17, 2.2982074155463522e-33, -4.5128791045607634e-50), qd_real( 9.6377606579543984e-01, 2.6463950561220029e-17, -2.9073234590199323e-36, -1.2938328629395601e-52), qd_real( 9.6295326687368388e-01, 8.9341960404313634e-18, -3.9071244661020126e-34, 1.6212091116847394e-50), qd_real( 9.6212140426904158e-01, 1.5236770453846305e-17, -1.3050173525597142e-33, 7.9016122394092666e-50), qd_real( 9.6128048581132064e-01, 2.0933955216674039e-18, 1.0768607469015692e-34, -5.9453639304361774e-51), qd_real( 9.6043051941556579e-01, 2.4653904815317185e-17, -1.3792169410906322e-33, -4.7726598378506903e-51), qd_real( 9.5957151308198452e-01, 1.1000640085000957e-17, -4.2036030828223975e-34, 4.0023704842606573e-51), qd_real( 9.5870347489587160e-01, -4.3685014392372053e-17, 2.2001800662729131e-33, -1.0553721324358075e-49), qd_real( 9.5782641302753291e-01, -1.7696710075371263e-17, 1.9164034110382190e-34, 8.1489235071754813e-51), qd_real( 9.5694033573220882e-01, 4.0553869861875701e-17, -1.7147013364302149e-33, 2.5736745295329455e-50), qd_real( 9.5604525134999641e-01, 3.7705045279589067e-17, 1.9678699997347571e-33, 8.5093177731230180e-50), qd_real( 9.5514116830577067e-01, 5.0088652955014668e-17, -2.6983181838059211e-33, 1.0102323575596493e-49), qd_real( 9.5422809510910567e-01, -3.7545901690626874e-17, 1.4951619241257764e-33, -8.2717333151394973e-50), qd_real( 9.5330604035419386e-01, -2.5190738779919934e-17, -1.4272239821134379e-33, -4.6717286809283155e-50), qd_real( 9.5237501271976588e-01, -2.0269300462299272e-17, -1.0635956887246246e-33, -3.5514537666487619e-50), qd_real( 9.5143502096900834e-01, 3.1350584123266695e-17, -2.4824833452737813e-33, 9.5450335525380613e-51), qd_real( 9.5048607394948170e-01, 1.9410097562630436e-17, -8.1559393949816789e-34, -1.0501209720164562e-50), qd_real( 9.4952818059303667e-01, -7.5544151928043298e-18, -5.1260245024046686e-34, 1.8093643389040406e-50), qd_real( 9.4856134991573027e-01, 2.0668262262333232e-17, -5.9440730243667306e-34, 1.4268853111554300e-50), qd_real( 9.4758559101774109e-01, 4.3417993852125991e-17, -2.7728667889840373e-34, 5.5709160196519968e-51), qd_real( 9.4660091308328353e-01, 3.5056800210680730e-17, 9.8578536940318117e-34, 6.6035911064585197e-50), qd_real( 9.4560732538052128e-01, 4.6019102478523738e-17, -6.2534384769452059e-34, 1.5758941215779961e-50), qd_real( 9.4460483726148026e-01, 8.8100545476641165e-18, 5.2291695602757842e-34, -3.3487256018407123e-50), qd_real( 9.4359345816196039e-01, -2.4093127844404214e-17, 1.0283279856803939e-34, -2.3398232614531355e-51), qd_real( 9.4257319760144687e-01, 1.3235564806436886e-17, -5.7048262885386911e-35, 3.9947050442753744e-51), qd_real( 9.4154406518302081e-01, -2.7896379547698341e-17, 1.6273236356733898e-33, -5.3075944708471203e-51), qd_real( 9.4050607059326830e-01, 2.8610421567116268e-17, 2.9261501147538827e-33, -2.6849867690896925e-50), qd_real( 9.3945922360218992e-01, -7.0152867943098655e-18, -5.6395693818011210e-34, 3.5568142678987651e-50), qd_real( 9.3840353406310806e-01, 5.4242545044795490e-17, -1.9039966607859759e-33, -1.5627792988341215e-49), qd_real( 9.3733901191257496e-01, -3.6570926284362776e-17, -1.1902940071273247e-33, -1.1215082331583223e-50), qd_real( 9.3626566717027826e-01, -1.3013766145497654e-17, 5.2229870061990595e-34, -3.3972777075634108e-51), qd_real( 9.3518350993894761e-01, -3.2609395302485065e-17, -8.1813015218875245e-34, 5.5642140024928139e-50), qd_real( 9.3409255040425887e-01, 4.4662824360767511e-17, -2.5903243047396916e-33, 8.1505209004343043e-50), qd_real( 9.3299279883473885e-01, 4.2041415555384355e-17, 9.0285896495521276e-34, 5.3019984977661259e-50), qd_real( 9.3188426558166815e-01, -4.0785944377318095e-17, 1.7631450298754169e-33, 2.5776403305507453e-50), qd_real( 9.3076696107898371e-01, 1.9703775102838329e-17, 6.5657908718278205e-34, -1.9480347966259524e-51), qd_real( 9.2964089584318121e-01, 5.1282530016864107e-17, 2.3719739891916261e-34, -1.7230065426917127e-50), qd_real( 9.2850608047321559e-01, -2.3306639848485943e-17, -7.7799084333208503e-34, -5.8597558009300305e-50), qd_real( 9.2736252565040111e-01, -2.7677111692155437e-17, 2.2110293450199576e-34, 2.0349190819680613e-50), qd_real( 9.2621024213831138e-01, -3.7303754586099054e-17, 2.0464457809993405e-33, 1.3831799631231817e-49), qd_real( 9.2504924078267758e-01, 6.0529447412576159e-18, -8.8256517760278541e-35, 1.8285462122388328e-51), qd_real( 9.2387953251128674e-01, 1.7645047084336677e-17, -5.0442537321586818e-34, -4.0478677716823890e-50), qd_real( 9.2270112833387852e-01, 5.2963798918539814e-17, -5.7135699628876685e-34, 3.0163671797219087e-50), qd_real( 9.2151403934204190e-01, 4.1639843390684644e-17, 1.1891485604702356e-33, 2.0862437594380324e-50), qd_real( 9.2031827670911059e-01, -2.7806888779036837e-17, 2.7011013677071274e-33, 1.1998578792455499e-49), qd_real( 9.1911385169005777e-01, -2.6496484622344718e-17, 6.5403604763461920e-34, -2.8997180201186078e-50), qd_real( 9.1790077562139050e-01, -3.9074579680849515e-17, 2.3004636541490264e-33, 3.9851762744443107e-50), qd_real( 9.1667905992104270e-01, -4.1733978698287568e-17, 1.2094444804381172e-33, 4.9356916826097816e-50), qd_real( 9.1544871608826783e-01, -1.3591056692900894e-17, 5.9923027475594735e-34, 2.1403295925962879e-50), qd_real( 9.1420975570353069e-01, -3.6316182527814423e-17, -1.9438819777122554e-33, 2.8340679287728316e-50), qd_real( 9.1296219042839821e-01, -4.7932505228039469e-17, -1.7753551889428638e-33, 4.0607782903868160e-51), qd_real( 9.1170603200542988e-01, -2.6913273175034130e-17, -5.1928101916162528e-35, 1.1338175936090630e-51), qd_real( 9.1044129225806725e-01, -5.0433041673313820e-17, 1.0938746257404305e-33, 9.5378272084170731e-51), qd_real( 9.0916798309052238e-01, -3.6878564091359894e-18, 2.9951330310507693e-34, -1.2225666136919926e-50), qd_real( 9.0788611648766626e-01, -4.9459964301225840e-17, -1.6599682707075313e-33, -5.1925202712634716e-50), qd_real( 9.0659570451491533e-01, 3.0506718955442023e-17, -1.4478836557141204e-33, 1.8906373784448725e-50), qd_real( 9.0529675931811882e-01, -4.1153099826889901e-17, 2.9859368705184223e-33, 5.1145293917439211e-50), qd_real( 9.0398929312344334e-01, -6.6097544687484308e-18, 1.2728013034680357e-34, -4.3026097234014823e-51), qd_real( 9.0267331823725883e-01, -1.9250787033961483e-17, 1.3242128993244527e-33, -5.2971030688703665e-50), qd_real( 9.0134884704602203e-01, -1.3524789367698682e-17, 6.3605353115880091e-34, 3.6227400654573828e-50), qd_real( 9.0001589201616028e-01, -5.0639618050802273e-17, 1.0783525384031576e-33, 2.8130016326515111e-50), qd_real( 8.9867446569395382e-01, 2.6316906461033013e-17, 3.7003137047796840e-35, -2.3447719900465938e-51), qd_real( 8.9732458070541832e-01, -3.6396283314867290e-17, -2.3611649895474815e-33, 1.1837247047900082e-49), qd_real( 8.9596624975618511e-01, 4.9025099114811813e-17, -1.9440489814795326e-33, -1.7070486667767033e-49), qd_real( 8.9459948563138270e-01, -1.7516226396814919e-17, -1.3200670047246923e-33, -1.5953009884324695e-50), qd_real( 8.9322430119551532e-01, -4.1161239151908913e-18, 2.5380253805715999e-34, 4.2849455510516192e-51), qd_real( 8.9184070939234272e-01, 4.6690228137124547e-18, 1.6150254286841982e-34, -3.9617448820725012e-51), qd_real( 8.9044872324475788e-01, 1.1781931459051803e-17, -1.3346142209571930e-34, -9.4982373530733431e-51), qd_real( 8.8904835585466457e-01, -1.1164514966766675e-17, -3.4797636107798736e-34, -1.5605079997040631e-50), qd_real( 8.8763962040285393e-01, 1.2805091918587960e-17, 3.9948742059584459e-35, 3.8940716325338136e-51), qd_real( 8.8622253014888064e-01, -6.7307369600274315e-18, 1.2385593432917413e-34, 2.0364014759133320e-51), qd_real( 8.8479709843093779e-01, -9.4331469628972690e-18, -5.7106541478701439e-34, 1.8260134111907397e-50), qd_real( 8.8336333866573158e-01, 1.5822643380255127e-17, -7.8921320007588250e-34, -1.4782321016179836e-50), qd_real( 8.8192126434835505e-01, -1.9843248405890562e-17, -7.0412114007673834e-34, -1.0636770169389104e-50), qd_real( 8.8047088905216075e-01, 1.6311096602996350e-17, -5.7541360594724172e-34, -4.0128611862170021e-50), qd_real( 8.7901222642863353e-01, -4.7356837291118011e-17, 1.4388771297975192e-33, -2.9085554304479134e-50), qd_real( 8.7754529020726124e-01, 5.0113311846499550e-17, 2.8382769008739543e-34, 1.5550640393164140e-50), qd_real( 8.7607009419540660e-01, 5.8729024235147677e-18, 2.7941144391738458e-34, -1.8536073846509828e-50), qd_real( 8.7458665227817611e-01, -5.7216617730397065e-19, -2.9705811503689596e-35, 8.7389593969796752e-52), qd_real( 8.7309497841829009e-01, 7.8424672990129903e-18, -4.8685015839797165e-34, -2.2815570587477527e-50), qd_real( 8.7159508665595109e-01, -5.5272998038551050e-17, -2.2104090204984907e-33, -9.7749763187643172e-50), qd_real( 8.7008699110871146e-01, -4.1888510868549968e-17, 7.0900185861878415e-34, 3.7600251115157260e-50), qd_real( 8.6857070597134090e-01, 2.7192781689782903e-19, -1.6710140396932428e-35, -1.2625514734637969e-51), qd_real( 8.6704624551569265e-01, 3.0267859550930567e-18, -1.1559438782171572e-34, -5.3580556397808012e-52), qd_real( 8.6551362409056909e-01, -6.3723113549628899e-18, 2.3725520321746832e-34, 1.5911880348395175e-50), qd_real( 8.6397285612158670e-01, 4.1486355957361607e-17, 2.2709976932210266e-33, -8.1228385659479984e-50), qd_real( 8.6242395611104050e-01, 3.7008992527383130e-17, 5.2128411542701573e-34, 2.6945600081026861e-50), qd_real( 8.6086693863776731e-01, -3.0050048898573656e-17, -8.8706183090892111e-34, 1.5005320558097301e-50), qd_real( 8.5930181835700836e-01, 4.2435655816850687e-17, 7.6181814059912025e-34, -3.9592127850658708e-50), qd_real( 8.5772861000027212e-01, -4.8183447936336620e-17, -1.1044130517687532e-33, -8.7400233444645562e-50), qd_real( 8.5614732837519447e-01, 9.1806925616606261e-18, 5.6328649785951470e-34, 2.3326646113217378e-51), qd_real( 8.5455798836540053e-01, -1.2991124236396092e-17, 1.2893407722948080e-34, -3.6506925747583053e-52), qd_real( 8.5296060493036363e-01, 2.7152984251981370e-17, 7.4336483283120719e-34, 4.2162417622350668e-50), qd_real( 8.5135519310526520e-01, -5.3279874446016209e-17, 2.2281156380919942e-33, -4.0281886404138477e-50), qd_real( 8.4974176800085244e-01, 5.1812347659974015e-17, 3.0810626087331275e-33, -2.5931308201994965e-50), qd_real( 8.4812034480329723e-01, 1.8762563415239981e-17, 1.4048773307919617e-33, -2.4915221509958691e-50), qd_real( 8.4649093877405213e-01, -4.7969419958569345e-17, -2.7518267097886703e-33, -7.3518959727313350e-50), qd_real( 8.4485356524970712e-01, -4.3631360296879637e-17, -2.0307726853367547e-33, 4.3097229819851761e-50), qd_real( 8.4320823964184544e-01, 9.6536707005959077e-19, 2.8995142431556364e-36, 9.6715076811480284e-53), qd_real( 8.4155497743689844e-01, -3.4095465391321557e-17, -8.4130208607579595e-34, -4.9447283960568686e-50), qd_real( 8.3989379419599952e-01, -1.6673694881511411e-17, -1.4759184141750289e-33, -7.5795098161914058e-50), qd_real( 8.3822470555483808e-01, -3.5560085052855026e-17, 1.1689791577022643e-33, -5.8627347359723411e-50), qd_real( 8.3654772722351201e-01, -2.0899059027066533e-17, -9.8104097821002585e-35, -3.1609177868229853e-51), qd_real( 8.3486287498638001e-01, 4.6048430609159657e-17, -5.1827423265239912e-34, -7.0505343435504109e-51), qd_real( 8.3317016470191319e-01, 1.3275129507229764e-18, 4.8589164115370863e-35, 4.5422281300506859e-51), qd_real( 8.3146961230254524e-01, 1.4073856984728024e-18, 4.6951315383980830e-35, 5.1431906049905658e-51), qd_real( 8.2976123379452305e-01, -2.9349109376485597e-18, 1.1496917934149818e-34, 3.5186665544980233e-51), qd_real( 8.2804504525775580e-01, -4.4196593225871532e-17, 2.7967864855211251e-33, 1.0030777287393502e-49), qd_real( 8.2632106284566353e-01, -5.3957485453612902e-17, 6.8976896130138550e-34, 3.8106164274199196e-50), qd_real( 8.2458930278502529e-01, -2.6512360488868275e-17, 1.6916964350914386e-34, 6.7693974813562649e-51), qd_real( 8.2284978137582632e-01, 1.5193019034505495e-17, 9.6890547246521685e-34, 5.6994562923653264e-50), qd_real( 8.2110251499110465e-01, 3.0715131609697682e-17, -1.7037168325855879e-33, -1.1149862443283853e-49), qd_real( 8.1934752007679701e-01, -4.8200736995191133e-17, -1.5574489646672781e-35, -9.5647853614522216e-53), qd_real( 8.1758481315158371e-01, -1.4883149812426772e-17, -7.8273262771298917e-34, 4.1332149161031594e-50), qd_real( 8.1581441080673378e-01, 8.2652693782130871e-18, -2.3028778135179471e-34, 1.5102071387249843e-50), qd_real( 8.1403632970594841e-01, -5.2127351877042624e-17, -1.9047670611316360e-33, -1.6937269585941507e-49), qd_real( 8.1225058658520388e-01, 3.1054545609214803e-17, 2.2649541922707251e-34, -7.4221684154649405e-51), qd_real( 8.1045719825259477e-01, 2.3520367349840499e-17, -7.7530070904846341e-34, -7.2792616357197140e-50), qd_real( 8.0865618158817498e-01, 9.3251597879721674e-18, -7.1823301933068394e-34, 2.3925440846132106e-50), qd_real( 8.0684755354379922e-01, 4.9220603766095546e-17, 2.9796016899903487e-33, 1.5220754223615788e-49), qd_real( 8.0503133114296355e-01, 5.1368289568212149e-17, 6.3082807402256524e-34, 7.3277646085129827e-51), qd_real( 8.0320753148064494e-01, -3.3060609804814910e-17, -1.2242726252420433e-33, 2.8413673268630117e-50), qd_real( 8.0137617172314024e-01, -2.0958013413495834e-17, -4.3798162198006931e-34, 2.0235690497752515e-50), qd_real( 7.9953726910790501e-01, 2.0356723822005431e-17, -9.7448513696896360e-34, 5.3608109599696008e-52), qd_real( 7.9769084094339116e-01, -4.6730759884788944e-17, 2.3075897077191757e-33, 3.1605567774640253e-51), qd_real( 7.9583690460888357e-01, -3.0062724851910721e-17, -2.2496210832042235e-33, -6.5881774117183040e-50), qd_real( 7.9397547755433717e-01, -7.4194631759921416e-18, 2.4124341304631069e-34, -4.9956808616244972e-51), qd_real( 7.9210657730021239e-01, -3.7087850202326467e-17, -1.4874457267228264e-33, 2.9323097289153505e-50), qd_real( 7.9023022143731003e-01, 2.3056905954954492e-17, 1.4481080533260193e-33, -7.6725237057203488e-50), qd_real( 7.8834642762660623e-01, 3.4396993154059708e-17, 1.7710623746737170e-33, 1.7084159098417402e-49), qd_real( 7.8645521359908577e-01, -9.7841429939305265e-18, 3.3906063272445472e-34, 5.7269505320382577e-51), qd_real( 7.8455659715557524e-01, -8.5627965423173476e-18, -2.1106834459001849e-34, -1.6890322182469603e-50), qd_real( 7.8265059616657573e-01, 9.0745866975808825e-18, 6.7623847404278666e-34, -1.7173237731987271e-50), qd_real( 7.8073722857209449e-01, -9.9198782066678806e-18, -2.1265794012162715e-36, 3.0772165598957647e-54), qd_real( 7.7881651238147598e-01, -2.4891385579973807e-17, 6.7665497024807980e-35, -6.5218594281701332e-52), qd_real( 7.7688846567323244e-01, 7.7418602570672864e-18, -5.9986517872157897e-34, 3.0566548232958972e-50), qd_real( 7.7495310659487393e-01, -5.2209083189826433e-17, -9.6653593393686612e-34, 3.7027750076562569e-50), qd_real( 7.7301045336273699e-01, -3.2565907033649772e-17, 1.3860807251523929e-33, -3.9971329917586022e-50), qd_real( 7.7106052426181382e-01, -4.4558442347769265e-17, -2.9863565614083783e-33, -6.8795262083596236e-50), qd_real( 7.6910333764557959e-01, 5.1546455184564817e-17, 2.6142829553524292e-33, -1.6199023632773298e-49), qd_real( 7.6713891193582040e-01, -1.8885903683750782e-17, -1.3659359331495433e-33, -2.2538834962921934e-50), qd_real( 7.6516726562245896e-01, -3.2707225612534598e-17, 1.1177117747079528e-33, -3.7005182280175715e-50), qd_real( 7.6318841726338127e-01, 2.6314748416750748e-18, 1.4048039063095910e-34, 8.9601886626630321e-52), qd_real( 7.6120238548426178e-01, 3.5315510881690551e-17, 1.2833566381864357e-33, 8.6221435180890613e-50), qd_real( 7.5920918897838807e-01, -3.8558842175523123e-17, 2.9720241208332759e-34, -1.2521388928220163e-50), qd_real( 7.5720884650648457e-01, -1.9909098777335502e-17, 3.9409283266158482e-34, 2.0744254207802976e-50), qd_real( 7.5520137689653655e-01, -1.9402238001823017e-17, -3.7756206444727573e-34, -2.1212242308178287e-50), qd_real( 7.5318679904361252e-01, -3.7937789838736540e-17, -6.7009539920231559e-34, -6.7128562115050214e-51), qd_real( 7.5116513190968637e-01, 4.3499761158645868e-17, 2.5227718971102212e-33, -6.5969709212757102e-50), qd_real( 7.4913639452345937e-01, -4.4729078447011889e-17, -2.4206025249983768e-33, 1.1336681351116422e-49), qd_real( 7.4710060598018013e-01, 1.1874824875965430e-17, 2.1992523849833518e-34, 1.1025018564644483e-50), qd_real( 7.4505778544146595e-01, 1.5078686911877863e-17, 8.0898987212942471e-34, 8.2677958765323532e-50), qd_real( 7.4300795213512172e-01, -2.5144629669719265e-17, 7.1128989512526157e-34, 3.0181629077821220e-50), qd_real( 7.4095112535495911e-01, -1.4708616952297345e-17, -4.9550433827142032e-34, 3.1434132533735671e-50), qd_real( 7.3888732446061511e-01, 3.4324874808225091e-17, -1.3706639444717610e-33, -3.3520827530718938e-51), qd_real( 7.3681656887736990e-01, -2.8932468101656295e-17, -3.4649887126202378e-34, -1.8484474476291476e-50), qd_real( 7.3473887809596350e-01, -3.4507595976263941e-17, -2.3718000676666409e-33, -3.9696090387165402e-50), qd_real( 7.3265427167241282e-01, 1.8918673481573520e-17, -1.5123719544119886e-33, -9.7922152011625728e-51), qd_real( 7.3056276922782759e-01, -2.9689959904476928e-17, -1.1276871244239744e-33, -3.0531520961539007e-50), qd_real( 7.2846439044822520e-01, 1.1924642323370718e-19, 5.9001892316611011e-36, 1.2178089069502704e-52), qd_real( 7.2635915508434601e-01, -3.1917502443460542e-17, 7.7047912412039396e-34, 4.1455880160182123e-50), qd_real( 7.2424708295146689e-01, 2.9198471334403004e-17, 2.3027324968739464e-33, -1.2928820533892183e-51), qd_real( 7.2212819392921535e-01, -2.3871262053452047e-17, 1.0636125432862273e-33, -4.4598638837802517e-50), qd_real( 7.2000250796138165e-01, -2.5689658854462333e-17, -9.1492566948567925e-34, 4.4403780801267786e-50), qd_real( 7.1787004505573171e-01, 2.7006476062511453e-17, -2.2854956580215348e-34, 9.1726903890287867e-51), qd_real( 7.1573082528381871e-01, -5.1581018476410262e-17, -1.3736271349300259e-34, -1.2734611344111297e-50), qd_real( 7.1358486878079364e-01, -4.2342504403133584e-17, -4.2690366101617268e-34, -2.6352370883066522e-50), qd_real( 7.1143219574521643e-01, 7.9643298613856813e-18, 2.9488239510721469e-34, 1.6985236437666356e-50), qd_real( 7.0927282643886569e-01, -3.7597359110245730e-17, 1.0613125954645119e-34, 8.9465480185486032e-51), qd_real( 7.0710678118654757e-01, -4.8336466567264567e-17, 2.0693376543497068e-33, 2.4677734957341755e-50) }; /* Computes sin(a) and cos(a) using Taylor series. Assumes |a| <= pi/2048. */ static void sincos_taylor(const qd_real &a, qd_real &sin_a, qd_real &cos_a) { const double thresh = 0.5 * qd_real::_eps * std::abs(to_double(a)); qd_real p, s, t, x; if (a.is_zero()) { sin_a = 0.0; cos_a = 1.0; return; } x = -sqr(a); s = a; p = a; int i = 0; do { p *= x; t = p * inv_fact[i]; s += t; i += 2; } while (i < n_inv_fact && std::abs(to_double(t)) > thresh); sin_a = s; cos_a = sqrt(1.0 - sqr(s)); } static qd_real sin_taylor(const qd_real &a) { const double thresh = 0.5 * qd_real::_eps * std::abs(to_double(a)); qd_real p, s, t, x; if (a.is_zero()) { return 0.0; } x = -sqr(a); s = a; p = a; int i = 0; do { p *= x; t = p * inv_fact[i]; s += t; i += 2; } while (i < n_inv_fact && std::abs(to_double(t)) > thresh); return s; } static qd_real cos_taylor(const qd_real &a) { const double thresh = 0.5 * qd_real::_eps; qd_real p, s, t, x; if (a.is_zero()) { return 1.0; } x = -sqr(a); s = 1.0 + mul_pwr2(x, 0.5); p = x; int i = 1; do { p *= x; t = p * inv_fact[i]; s += t; i += 2; } while (i < n_inv_fact && std::abs(to_double(t)) > thresh); return s; } qd_real sin(const qd_real &a) { /* Strategy. To compute sin(x), we choose integers a, b so that x = s + a * (pi/2) + b * (pi/1024) and |s| <= pi/2048. Using a precomputed table of sin(k pi / 1024) and cos(k pi / 1024), we can compute sin(x) from sin(s) and cos(s). This greatly increases the convergence of the sine Taylor series. */ if (a.is_zero()) { return 0.0; } // approximately reduce modulo 2*pi qd_real z = nint(a / qd_real::_2pi); qd_real r = a - qd_real::_2pi * z; // approximately reduce modulo pi/2 and then modulo pi/1024 double q = std::floor(r.x[0] / qd_real::_pi2[0] + 0.5); qd_real t = r - qd_real::_pi2 * q; int j = static_cast(q); q = std::floor(t.x[0] / _pi1024[0] + 0.5); t -= _pi1024 * q; int k = static_cast(q); int abs_k = std::abs(k); if (j < -2 || j > 2) { qd_real::error("(qd_real::sin): Cannot reduce modulo pi/2."); return qd_real::_nan; } if (abs_k > 256) { qd_real::error("(qd_real::sin): Cannot reduce modulo pi/1024."); return qd_real::_nan; } if (k == 0) { switch (j) { case 0: return sin_taylor(t); case 1: return cos_taylor(t); case -1: return -cos_taylor(t); default: return -sin_taylor(t); } } qd_real sin_t, cos_t; qd_real u = cos_table[abs_k-1]; qd_real v = sin_table[abs_k-1]; sincos_taylor(t, sin_t, cos_t); if (j == 0) { if (k > 0) { r = u * sin_t + v * cos_t; } else { r = u * sin_t - v * cos_t; } } else if (j == 1) { if (k > 0) { r = u * cos_t - v * sin_t; } else { r = u * cos_t + v * sin_t; } } else if (j == -1) { if (k > 0) { r = v * sin_t - u * cos_t; } else { r = - u * cos_t - v * sin_t; } } else { if (k > 0) { r = - u * sin_t - v * cos_t; } else { r = v * cos_t - u * sin_t; } } return r; } qd_real cos(const qd_real &a) { if (a.is_zero()) { return 1.0; } // approximately reduce modulo 2*pi qd_real z = nint(a / qd_real::_2pi); qd_real r = a - qd_real::_2pi * z; // approximately reduce modulo pi/2 and then modulo pi/1024 double q = std::floor(r.x[0] / qd_real::_pi2.x[0] + 0.5); qd_real t = r - qd_real::_pi2 * q; int j = static_cast(q); q = std::floor(t.x[0] / _pi1024.x[0] + 0.5); t -= _pi1024 * q; int k = static_cast(q); int abs_k = std::abs(k); if (j < -2 || j > 2) { qd_real::error("(qd_real::cos): Cannot reduce modulo pi/2."); return qd_real::_nan; } if (abs_k > 256) { qd_real::error("(qd_real::cos): Cannot reduce modulo pi/1024."); return qd_real::_nan; } if (k == 0) { switch (j) { case 0: return cos_taylor(t); case 1: return -sin_taylor(t); case -1: return sin_taylor(t); default: return -cos_taylor(t); } } qd_real sin_t, cos_t; sincos_taylor(t, sin_t, cos_t); qd_real u = cos_table[abs_k-1]; qd_real v = sin_table[abs_k-1]; if (j == 0) { if (k > 0) { r = u * cos_t - v * sin_t; } else { r = u * cos_t + v * sin_t; } } else if (j == 1) { if (k > 0) { r = - u * sin_t - v * cos_t; } else { r = v * cos_t - u * sin_t; } } else if (j == -1) { if (k > 0) { r = u * sin_t + v * cos_t; } else { r = u * sin_t - v * cos_t; } } else { if (k > 0) { r = v * sin_t - u * cos_t; } else { r = - u * cos_t - v * sin_t; } } return r; } void sincos(const qd_real &a, qd_real &sin_a, qd_real &cos_a) { if (a.is_zero()) { sin_a = 0.0; cos_a = 1.0; return; } // approximately reduce by 2*pi qd_real z = nint(a / qd_real::_2pi); qd_real t = a - qd_real::_2pi * z; // approximately reduce by pi/2 and then by pi/1024. double q = std::floor(t.x[0] / qd_real::_pi2.x[0] + 0.5); t -= qd_real::_pi2 * q; int j = static_cast(q); q = std::floor(t.x[0] / _pi1024.x[0] + 0.5); t -= _pi1024 * q; int k = static_cast(q); int abs_k = std::abs(k); if (j < -2 || j > 2) { qd_real::error("(qd_real::sincos): Cannot reduce modulo pi/2."); cos_a = sin_a = qd_real::_nan; return; } if (abs_k > 256) { qd_real::error("(qd_real::sincos): Cannot reduce modulo pi/1024."); cos_a = sin_a = qd_real::_nan; return; } qd_real sin_t, cos_t; sincos_taylor(t, sin_t, cos_t); if (k == 0) { if (j == 0) { sin_a = sin_t; cos_a = cos_t; } else if (j == 1) { sin_a = cos_t; cos_a = -sin_t; } else if (j == -1) { sin_a = -cos_t; cos_a = sin_t; } else { sin_a = -sin_t; cos_a = -cos_t; } return; } qd_real u = cos_table[abs_k-1]; qd_real v = sin_table[abs_k-1]; if (j == 0) { if (k > 0) { sin_a = u * sin_t + v * cos_t; cos_a = u * cos_t - v * sin_t; } else { sin_a = u * sin_t - v * cos_t; cos_a = u * cos_t + v * sin_t; } } else if (j == 1) { if (k > 0) { cos_a = - u * sin_t - v * cos_t; sin_a = u * cos_t - v * sin_t; } else { cos_a = v * cos_t - u * sin_t; sin_a = u * cos_t + v * sin_t; } } else if (j == -1) { if (k > 0) { cos_a = u * sin_t + v * cos_t; sin_a = v * sin_t - u * cos_t; } else { cos_a = u * sin_t - v * cos_t; sin_a = - u * cos_t - v * sin_t; } } else { if (k > 0) { sin_a = - u * sin_t - v * cos_t; cos_a = v * sin_t - u * cos_t; } else { sin_a = v * cos_t - u * sin_t; cos_a = - u * cos_t - v * sin_t; } } } qd_real atan(const qd_real &a) { return atan2(a, qd_real(1.0)); } qd_real atan2(const qd_real &y, const qd_real &x) { /* Strategy: Instead of using Taylor series to compute arctan, we instead use Newton's iteration to solve the equation sin(z) = y/r or cos(z) = x/r where r = sqrt(x^2 + y^2). The iteration is given by z' = z + (y - sin(z)) / cos(z) (for equation 1) z' = z - (x - cos(z)) / sin(z) (for equation 2) Here, x and y are normalized so that x^2 + y^2 = 1. If |x| > |y|, then first iteration is used since the denominator is larger. Otherwise, the second is used. */ if (x.is_zero()) { if (y.is_zero()) { /* Both x and y is zero. */ qd_real::error("(qd_real::atan2): Both arguments zero."); return qd_real::_nan; } return (y.is_positive()) ? qd_real::_pi2 : -qd_real::_pi2; } else if (y.is_zero()) { return (x.is_positive()) ? qd_real(0.0) : qd_real::_pi; } if (x == y) { return (y.is_positive()) ? qd_real::_pi4 : -qd_real::_3pi4; } if (x == -y) { return (y.is_positive()) ? qd_real::_3pi4 : -qd_real::_pi4; } qd_real r = sqrt(sqr(x) + sqr(y)); qd_real xx = x / r; qd_real yy = y / r; /* Compute double precision approximation to atan. */ qd_real z = std::atan2(to_double(y), to_double(x)); qd_real sin_z, cos_z; if (std::abs(xx.x[0]) > std::abs(yy.x[0])) { /* Use Newton iteration 1. z' = z + (y - sin(z)) / cos(z) */ sincos(z, sin_z, cos_z); z += (yy - sin_z) / cos_z; sincos(z, sin_z, cos_z); z += (yy - sin_z) / cos_z; sincos(z, sin_z, cos_z); z += (yy - sin_z) / cos_z; } else { /* Use Newton iteration 2. z' = z - (x - cos(z)) / sin(z) */ sincos(z, sin_z, cos_z); z -= (xx - cos_z) / sin_z; sincos(z, sin_z, cos_z); z -= (xx - cos_z) / sin_z; sincos(z, sin_z, cos_z); z -= (xx - cos_z) / sin_z; } return z; } qd_real drem(const qd_real &a, const qd_real &b) { qd_real n = nint(a/b); return (a - n * b); } qd_real divrem(const qd_real &a, const qd_real &b, qd_real &r) { qd_real n = nint(a/b); r = a - n * b; return n; } qd_real tan(const qd_real &a) { qd_real s, c; sincos(a, s, c); return s/c; } qd_real asin(const qd_real &a) { qd_real abs_a = abs(a); if (abs_a > 1.0) { qd_real::error("(qd_real::asin): Argument out of domain."); return qd_real::_nan; } if (abs_a.is_one()) { return (a.is_positive()) ? qd_real::_pi2 : -qd_real::_pi2; } return atan2(a, sqrt(1.0 - sqr(a))); } qd_real acos(const qd_real &a) { qd_real abs_a = abs(a); if (abs_a > 1.0) { qd_real::error("(qd_real::acos): Argument out of domain."); return qd_real::_nan; } if (abs_a.is_one()) { return (a.is_positive()) ? qd_real(0.0) : qd_real::_pi; } return atan2(sqrt(1.0 - sqr(a)), a); } qd_real sinh(const qd_real &a) { if (a.is_zero()) { return 0.0; } if (abs(a) > 0.05) { qd_real ea = exp(a); return mul_pwr2(ea - inv(ea), 0.5); } /* Since a is small, using the above formula gives a lot of cancellation. So use Taylor series. */ qd_real s = a; qd_real t = a; qd_real r = sqr(t); double m = 1.0; double thresh = std::abs(to_double(a) * qd_real::_eps); do { m += 2.0; t *= r; t /= (m-1) * m; s += t; } while (abs(t) > thresh); return s; } qd_real cosh(const qd_real &a) { if (a.is_zero()) { return 1.0; } qd_real ea = exp(a); return mul_pwr2(ea + inv(ea), 0.5); } qd_real tanh(const qd_real &a) { if (a.is_zero()) { return 0.0; } if (std::abs(to_double(a)) > 0.05) { qd_real ea = exp(a); qd_real inv_ea = inv(ea); return (ea - inv_ea) / (ea + inv_ea); } else { qd_real s, c; s = sinh(a); c = sqrt(1.0 + sqr(s)); return s / c; } } void sincosh(const qd_real &a, qd_real &s, qd_real &c) { if (std::abs(to_double(a)) <= 0.05) { s = sinh(a); c = sqrt(1.0 + sqr(s)); } else { qd_real ea = exp(a); qd_real inv_ea = inv(ea); s = mul_pwr2(ea - inv_ea, 0.5); c = mul_pwr2(ea + inv_ea, 0.5); } } qd_real asinh(const qd_real &a) { return log(a + sqrt(sqr(a) + 1.0)); } qd_real acosh(const qd_real &a) { if (a < 1.0) { qd_real::error("(qd_real::acosh): Argument out of domain."); return qd_real::_nan; } return log(a + sqrt(sqr(a) - 1.0)); } qd_real atanh(const qd_real &a) { if (abs(a) >= 1.0) { qd_real::error("(qd_real::atanh): Argument out of domain."); return qd_real::_nan; } return mul_pwr2(log((1.0 + a) / (1.0 - a)), 0.5); } QD_API qd_real fmod(const qd_real &a, const qd_real &b) { qd_real n = aint(a / b); return (a - b * n); } QD_API qd_real qdrand() { static const double m_const = 4.6566128730773926e-10; /* = 2^{-31} */ double m = m_const; qd_real r = 0.0; double d; /* Strategy: Generate 31 bits at a time, using lrand48 random number generator. Shift the bits, and repeat 7 times. */ for (int i = 0; i < 7; i++, m *= m_const) { d = std::rand() * m; r += d; } return r; } /* polyeval(c, n, x) Evaluates the given n-th degree polynomial at x. The polynomial is given by the array of (n+1) coefficients. */ qd_real polyeval(const qd_real *c, int n, const qd_real &x) { /* Just use Horner's method of polynomial evaluation. */ qd_real r = c[n]; for (int i = n-1; i >= 0; i--) { r *= x; r += c[i]; } return r; } /* polyroot(c, n, x0) Given an n-th degree polynomial, finds a root close to the given guess x0. Note that this uses simple Newton iteration scheme, and does not work for multiple roots. */ QD_API qd_real polyroot(const qd_real *c, int n, const qd_real &x0, int max_iter, double thresh) { qd_real x = x0; qd_real f; qd_real *d = new qd_real[n]; bool conv = false; int i; double max_c = std::abs(to_double(c[0])); double v; if (thresh == 0.0) thresh = qd_real::_eps; /* Compute the coefficients of the derivatives. */ for (i = 1; i <= n; i++) { v = std::abs(to_double(c[i])); if (v > max_c) max_c = v; d[i-1] = c[i] * static_cast(i); } thresh *= max_c; /* Newton iteration. */ for (i = 0; i < max_iter; i++) { f = polyeval(c, n, x); if (abs(f) < thresh) { conv = true; break; } x -= (f / polyeval(d, n-1, x)); } delete [] d; if (!conv) { qd_real::error("(qd_real::polyroot): Failed to converge."); return qd_real::_nan; } return x; } qd_real qd_real::debug_rand() { if (std::rand() % 2 == 0) return qdrand(); int expn = 0; qd_real a = 0.0; double d; for (int i = 0; i < 4; i++) { d = std::ldexp(std::rand() / static_cast(RAND_MAX), -expn); a += d; expn = expn + 54 + std::rand() % 200; } return a; } qd-2.3.11/src/Makefile.am0000644000175000017500000000037211202062041015263 0ustar prudhommprudhommSRC = c_dd.cpp c_qd.cpp dd_real.cpp dd_const.cpp \ fpu.cpp qd_real.cpp qd_const.cpp util.cpp bits.cpp util.h lib_LIBRARIES = libqd.a libqd_a_SOURCES = $(SRC) AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include qd-2.3.11/src/c_dd.cpp0000644000175000017500000001451411202062041014627 0ustar prudhommprudhomm/* * src/c_dd.cc * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains the C wrapper functions for double-double precision arithmetic. * This can be used from Fortran code. */ #include #include "config.h" #include #include #define TO_DOUBLE_PTR(a, ptr) ptr[0] = a.x[0]; ptr[1] = a.x[1]; extern "C" { /* add */ void c_dd_add(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) + dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_dd_add_dd_d(const double *a, double b, double *c) { dd_real cc; cc = dd_real(a) + b; TO_DOUBLE_PTR(cc, c); } void c_dd_add_d_dd(double a, const double *b, double *c) { dd_real cc; cc = a + dd_real(b); TO_DOUBLE_PTR(cc, c); } /* sub */ void c_dd_sub(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) - dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_dd_sub_dd_d(const double *a, double b, double *c) { dd_real cc; cc = dd_real(a) - b; TO_DOUBLE_PTR(cc, c); } void c_dd_sub_d_dd(double a, const double *b, double *c) { dd_real cc; cc = a - dd_real(b); TO_DOUBLE_PTR(cc, c); } /* mul */ void c_dd_mul(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) * dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_dd_mul_dd_d(const double *a, double b, double *c) { dd_real cc; cc = dd_real(a) * b; TO_DOUBLE_PTR(cc, c); } void c_dd_mul_d_dd(double a, const double *b, double *c) { dd_real cc; cc = a * dd_real(b); TO_DOUBLE_PTR(cc, c); } /* div */ void c_dd_div(const double *a, const double *b, double *c) { dd_real cc; cc = dd_real(a) / dd_real(b); TO_DOUBLE_PTR(cc, c); } void c_dd_div_dd_d(const double *a, double b, double *c) { dd_real cc; cc = dd_real(a) / b; TO_DOUBLE_PTR(cc, c); } void c_dd_div_d_dd(double a, const double *b, double *c) { dd_real cc; cc = a / dd_real(b); TO_DOUBLE_PTR(cc, c); } /* copy */ void c_dd_copy(const double *a, double *b) { b[0] = a[0]; b[1] = a[1]; } void c_dd_copy_d(double a, double *b) { b[0] = a; b[1] = 0.0; } void c_dd_sqrt(const double *a, double *b) { dd_real bb; bb = sqrt(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_sqr(const double *a, double *b) { dd_real bb; bb = sqr(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_abs(const double *a, double *b) { dd_real bb; bb = abs(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_npwr(const double *a, int n, double *b) { dd_real bb; bb = npwr(dd_real(a), n); TO_DOUBLE_PTR(bb, b); } void c_dd_nroot(const double *a, int n, double *b) { dd_real bb; bb = nroot(dd_real(a), n); TO_DOUBLE_PTR(bb, b); } void c_dd_nint(const double *a, double *b) { dd_real bb; bb = nint(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_aint(const double *a, double *b) { dd_real bb; bb = aint(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_floor(const double *a, double *b) { dd_real bb; bb = floor(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_ceil(const double *a, double *b) { dd_real bb; bb = ceil(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_log(const double *a, double *b) { dd_real bb; bb = log(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_log10(const double *a, double *b) { dd_real bb; bb = log10(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_exp(const double *a, double *b) { dd_real bb; bb = exp(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_sin(const double *a, double *b) { dd_real bb; bb = sin(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_cos(const double *a, double *b) { dd_real bb; bb = cos(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_tan(const double *a, double *b) { dd_real bb; bb = tan(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_asin(const double *a, double *b) { dd_real bb; bb = asin(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_acos(const double *a, double *b) { dd_real bb; bb = acos(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_atan(const double *a, double *b) { dd_real bb; bb = atan(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_atan2(const double *a, const double *b, double *c) { dd_real cc; cc = atan2(dd_real(a), dd_real(b)); TO_DOUBLE_PTR(cc, c); } void c_dd_sinh(const double *a, double *b) { dd_real bb; bb = sinh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_cosh(const double *a, double *b) { dd_real bb; bb = cosh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_tanh(const double *a, double *b) { dd_real bb; bb = tanh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_asinh(const double *a, double *b) { dd_real bb; bb = asinh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_acosh(const double *a, double *b) { dd_real bb; bb = acosh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_atanh(const double *a, double *b) { dd_real bb; bb = atanh(dd_real(a)); TO_DOUBLE_PTR(bb, b); } void c_dd_sincos(const double *a, double *s, double *c) { dd_real ss, cc; sincos(dd_real(a), ss, cc); TO_DOUBLE_PTR(ss, s); TO_DOUBLE_PTR(cc, c); } void c_dd_sincosh(const double *a, double *s, double *c) { dd_real ss, cc; sincosh(dd_real(a), ss, cc); TO_DOUBLE_PTR(ss, s); TO_DOUBLE_PTR(cc, c); } void c_dd_read(const char *s, double *a) { dd_real aa(s); TO_DOUBLE_PTR(aa, a); } void c_dd_swrite(const double *a, int precision, char *s, int len) { dd_real(a).write(s, len, precision); } void c_dd_write(const double *a) { std::cout << dd_real(a).to_string(dd_real::_ndigits) << std::endl; } void c_dd_neg(const double *a, double *b) { b[0] = -a[0]; b[1] = -a[1]; } void c_dd_rand(double *a) { dd_real aa; aa = ddrand(); TO_DOUBLE_PTR(aa, a); } void c_dd_comp(const double *a, const double *b, int *result) { dd_real aa(a), bb(b); if (aa < bb) *result = -1; else if (aa > bb) *result = 1; else *result = 0; } void c_dd_comp_dd_d(const double *a, double b, int *result) { dd_real aa(a), bb(b); if (aa < bb) *result = -1; else if (aa > bb) *result = 1; else *result = 0; } void c_dd_comp_d_dd(double a, const double *b, int *result) { dd_real aa(a), bb(b); if (aa < bb) *result = -1; else if (aa > bb) *result = 1; else *result = 0; } void c_dd_pi(double *a) { TO_DOUBLE_PTR(dd_real::_pi, a); } } qd-2.3.11/BSD-LBNL-License.doc0000644000175000017500000011600011202313727015652 0ustar prudhommprudhommÐÏࡱá>þÿ IKþÿÿÿHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì¥Á‹a ø¿jbjb1Ã1à M[¡[¡ ÿÿÿÿÿÿˆ”””””””$î– – – Pæ ò îê        ~ € € € € € € ,ñRC´¬ ”     ¬ R ””  Á R R R  ” ” ~ R ¸Ì"”””” ~ R R ””R  · VÖ 6 R R ,× 0R ÷R ÷R R ”îîò¤îîò Berkeley Software Distribution Agreement Software: main.cpp library This License Agreement is entered into by The Regents of the University of California, Department of Energy contract-operators of the Lawrence Berkeley National Laboratory, 1 Cyclotron Road, Berkeley, CA 94720 (“Berkeley Lab”), and the entity listed below (“you” or "Licensee") having its place of business at the address below: Company/Institution (“Licensee”): Name of responsible Licensee employee: Title or position: Department (if applicable): Address: City / State / Postal Code / Country: Tel: Fax: E-Mail: The parties now agree as follows: 1. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: (1) Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. (2) Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, U.S. Dept. of Energy nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3. You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code ("Enhancements") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to Lawrence Berkeley National Laboratory, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such enhancements or derivative works thereof, in binary and source code form. 071106 -HIJ“·¸âãùú&'PQYZabmnpq“”îßÐÁº±«¤«¤«¤«¤«¤«¤«¤«¤«¤«¤ –  h/³h/³CJh/³h/³>*CJh/³ h/³>*CJ h/³CJh/³6OJQJ h/³:CJh„X³h/³@ˆCJOJQJh„X³h/³@ˆCJOJQJh/³5:@ˆCJOJQJ"jh/³5@ˆCJOJQJU -IJ“”¹ºäíÛÛÁ{gbYYY Æ$gd/³gd/³$ Æh„H„]„H^„a$gd/³EkdÖ3$$If–lÖ0ý=((à"ö+ÖÿÿÖÿÿÖÿÿÖÿÿ4Ö laöý$ ÆL"t"0*dð¤$Ifa$gd/³$ Æð dð¤$Ifa$$ Ædð¤$Ifa$ þþäåûü()RScdpq“”•' ( öööööööööêØÌ½³½½¡¡$ Æx¸ `'a$gd/³  Æh¤gd/³ Æx¸ `'gd/³ Æ °È(gd/³ Æx°¸ $gd/³ Æ °$gd/³ Æ$gd/³( £ ¤ m n s t jkíííííííííåãááå$a$gd/³$ Æx¸ `'a$gd/³°Ð/ °à=!°"°# $ %°- 0:p/³°Ð/ °à=!°€"°€#€$€%° P @Ö3DdàLòèð<² ð C ðA¿ÿð€BðF3c•®E~4šõ¾•wŸÕÝÿ"3D Tð3c•®E~4šõ¾•wŸÕݶ¡X7  „¨ è2þxœÌ[ën#ÉuVöOÀÀ ?ù”L m ²ï!Ȅ͋½¶F+´k/‹q‹lJÔ´Ø\6©Kå ò1çHòy ö8ß©Kwu³©Ñ¬c`5C©ûœS§Î­Nºð×ÿ¶G?ÁÞ/÷þì“ßý`ïwÿ»·÷É?ŠÏÿüê¿—¿ý‹ß˜œâ_÷þ…~½7ÝûÁééÉùÞ'€~‚µ÷G{RÒþ1§þ½óVÿŽÿ¹÷§“Íj•.ÖË|¾Xÿ½ýö/ck4Ó[Î'çù’¥÷“+6MgŽÓÙº‚ìqJ·Æ¨â|½Îoê-ßÎ/¯ô¦ÔòÏ¿f‡®0; Ù¡íy̵Üo$×ÿ²Øt>Y³‹ôr¾`½¢jªÄò­WɢȒuj”½(ŠbsÁ f³ËÏÌ›ÎoJLÉG[’Ø©“$K Åb‘^–ô\I.¦F¯¸Êï–ÉeÊŸ„ö“|ù ö¸†lïÕOÏûÓü"=tº&žéÁxõj°J“u¾:bË>˲M^Ú?sÀñqÛ5 _° ÛÕÞã¶ÓàSéGÆ&«UòÀî®ÒUÊ9àF§S²“ jÄx%šŽh™`¢)ôœæ‹ŒOìb¾˜òœ†°6µEÎc½%&Œ,OJœš%~–dE*pŒæ„NÇ4ÀmŽw´4*©z I6YÙ°ÁêavÙ¤¬êêÎÄó$Cˆ · %uÕÅï­ÓÕÍ|A“o#;âBlµO¿•–‘ Éuv7Éê½ÁM2ቋO2MÛ÷f ŸÜ<¼×h”É=V÷Ö©[Úð áf'ûsKv:.ýâøŽËÀ#½gˆcæb°aèd„x‚S—_Ññ¡@¨öÔÉ({z‡K!”î]®ð5»•Ãer{B$0'd—k!®îÌÛù$ž~†T‚Yf5¿gÒÅêW 3ÌA<ŽITQÙÈ—d:eÅ·«5ã¡]ñîymt >”$0Y\n03q${¿ÈïÄH˜Ÿl´›˜ŠªŒÊ¸¤îd'š uëèþï5Œ'ýÀ¢)H)$^Ô8ê·²”×aéúRÄEçIÆ„²iÏ Õ$©3eš—Ôõ×ÖDÈáõå SL»âº™*Y:YÏò²a85¼ ½q0ÅÆúa™².ü‘QÕãñ}ªXñ.1¼t­P,Enâ/ÐA!jï45U²mö%x%ô×¥i«±UŽRŽû†Þ?Qƒr«Kñ{’¥É c_¤˜dñÀg÷×" )xÔÇDõ½•劵¨á8õe‘Ü’®µ(n ËUÊ“7*Έìüj•o.¯ã²¦É§·­î$¿YæÅ|¾.Ç—&/ èß³"²JÀš\O‚Ÿ¨aLÖ.uG–7»Ñ‚à4ì@'Ð[~ -ÈxR© ðÌ´¬<Õ›<$‹×ì9]Ô$A%ùb¼fÏi¦ˆÒ,Ëï^³çÔT´(ùß¿fÏ©,I5·ôæ¥Ë×LèPʧú–|áNñ¿¬ÊÒÿ5Ó¸ÀXz Á=²FÍ Õ¼‚T5â‡jÆ]뤨ûTŒójNª/(žíÿ!*ÇFíÔ¬›š…eSýw·Éª`Ù¬1)†{ï²%ë-ò…(êzï–3ãÑxR/Eí¥Žªá®ëÈë:6Ïœx™æƒl¾T¯“™J 3Tè’d}£Uxzš®ÎÖHžÆ×F/5Yo…O‚OŽOj៟¹i|Sk…°A›ÅvmüêÍ-ýÓhG _¾ÏQñ*é“ûêñ¡|œTÐIE¶§}tOѧØOšÚݬïë€bÉ,ÿ¯M[ñ¹zX^¥ ¶x ³³IVuˆù´¤¤mñˆ‚x~›Ž[$CIX9iÇ —X)»\¬W~HÑcË â »[…=¿¯Ü}~]=Þrcj±@ë]ʈ´m¤/gÂ)R§&±v€y Ï´uÌ1Ñ5FE“Q 5F…Æh:G}±šžÑLVµ¸ØÌfˆ ÛóF™O€i< @E ÕwÃŽÓÅåúJÃd´ZÀ™–þžo*Èï(lÿÕܯÓÁgiŠÔ¬©³Hïbˆ«u!!ñf=ž¯Šõ6æ8©A'¨ã|u;èœ)i(ç°ÀmM7Ú ³å޶Ú2ø¹Œ&I¤§(<ÅÌk•rõTVfĶ·˜pËɶDN`Ô£éä= -–Y¢$ÍaYê’¿!Aò@”†ÔEUOn÷%&6Xu™¬¯THU ÕGAÀ©À5*»Oé÷Nóå¦{0«äqOÏBQQ´Óƒ4^€ß$÷êõÛJy Iaó% ÷!mó2méȉ•õÓYMâ±\§ÕUw¥ˆšdb4Ýͧ0—X,T%·£-~ù’J­€+#(TÙǵê¤Z-ÿºìø0‡”¹˜›J®‚M¹íÐ4ü—Å Ýi}™ b•›Ž ÅiËÅtùfKÖ¢X–2µUt*ÛÐÌÜ©ÌBbÙl!V4ûæèÇN7ÅíÖUÍŠl0¹JVá¬vPRmW H3­TÖ«ü}Z/-o°Ò\ç\ÞÝJžD¿r=æñ¤×ßQMzšb+Ÿp_ŠÜü[ŵ@l(ü¤x=o—mðÒ,Úöã-ä×,T”#P˜…)£T|¶[üƒÚ —4zü#Zà•oþmsÀƒ×íø¼ ^M…eF”[XFÇìÚß²YÑyã¯jƒçCØyÅG¹$] O'Ókds±÷@=.ùAŸ(èu ,Ò'冦_,Þ„Óvez·µOl¬ÌJ[Í¿¤zóå9n­-ú¯ˆD§—C.›/jtÇ„Òén]e}?‘ÒJµe‹x§]‡] .3ö±:¢ÉKÕiCSˆ½)é ÿN“¢,&Úzi®&+³œ—),&å„KûYY5…^K~$Ú5ì¡à?Õà“¤ í7|3G’ÍñGaî´b"”ˆŸTÂ]Í$Ë‹T¯eNªvJhµ¶³´±M5$ÓW}µ8U!©žrÁ [ŸpÒiY{p{ªJƒD8Qoã— $6§°Î-·ž—QŠÂô183Z^ð‰{KÅ‘ÖÌzÞÙ¡Ëø]fu#ƒV"Î>V­â¥jV«x‰Zg-j‰[eîk(w¦ñ ”zõ}BMß³ÿ7mÏ^¢küŒ /ZÆ ñ žñ*µ¦"9pܧ¼_ä‰=_U“‹ˆ(Q«]q.„˜^õ}å¦ «QEhÙÕ¦Ò_Tß¶¹@–Iz럷Òi›Ëé§›ŠVÔ¸rHœéÚ¡SÒlºE¹Õgé½Ë¡œIKÆw•†Ÿþ¢zþ•pÅœñàè‹\i>,ÄÄ—2°¯jiWV7“|1IdéÔÜñ-¯ÉpnrÚ0«“þ¨RtÇbµü[aybïXü]ËÜt(ñ ãP>TÎÖºE‘~’£,ðÏjíÙ”û$îs²ŽC¾Ç¢y¡1žT‹·µÅ Z\ \6¸ÏdAÀÍæ´EWŽt¥¦ Á.gúQZ¯j×XO©–rE&²9QÖ°E ˆQÃ_7´Rôéy…,n§Ðu_Må¢Eåb[eÙr—Ò…ì„g?µÒÐñu‚¢¡s {]G·*ûžçÉLÝ8àãã;x—8”§áÍ“Øï±³&ô/úgXà{æûû¶‘ÝzO‚oçþ~à ¨§úÁzýbÅ÷9N~Ù–vÙê÷Ï`A}½ÀZß³˜ê7æõd±È×ÉZT›Ð:B-òÄ¥‘GÚí¥‹-OìQî„5+7¹Ì×BTÔöþåV!¯r´ær²¯6ùuÊö[5jÍ· «­Tt»Î—Ët*tÓ³.C5O—ÇðÚÕM¨ uÏ}¹Jð³ÚÆûÖ9D¥†Ü"•Š”§òäÃdÍ–°/â,]Ý&Y³QuÐ ™X[­EÙ÷ q$!Û··¶ZÚ«¥ÇÕ|¶Ž¹è¤¶âc²¦„0”âP’ñ®MCí< ?ˆ;tåa?¹M¿e$:5yÐ6l.ï•鬔0IJÐBˆOj@o©.ïÇp¤~£„ iÊ¥uG× YÎ¥mH® «UðÚá–㿯F5¾šNúÉWy4!j(. ò]Rׄv°ãYP±ët4"S1PZ­\Ù¹|Я }´ñm2¾0©¶ÛÅÍ*‡Y•Ú%)Œ a¹ý²%ºÊê\$ѹÃsÂ.GëG“5ßWAËü´%.e誻Þ/×ìícB“¶ ­n¬])kíº)º“¥:Ú¶nÔú1)-3ÅÒõsJ„^[¦&',XÒ;CíÂzcÖê8Û¦»ö~Û|+¤²¶¶ ¦VyÆÔ;_5î÷õâ‹ò«q¼…¼d–ØÞW47ìѯ&Œ€Z›+öèjük$ÇâüF,¥ýò‡¿ºúkuŠ[m˜šâûü¾9¿ Ä/› ±€S9¤Kr~×"§~´Í÷ßEÉÓáØóû­›^oõËÆt©îeñ ulkwI×äùÂCÛí‘)£,zÇ|MoIA%®¹È ¥j›F;—ml|ÈtQéc”—¤Õ¥HgÛ‚òr@½llöôByH¯–Þ:M²t½N+oéÍN–b£¡¤~w’/N©¾Åà×]\3Ì¢Áý¥Ñ„ð² °e‰=¿¥^^z‘YìÙ[,[W{öÖŽ-û7\ñoË×iµ)õ†;ðçå¶6ŠÅê’ Þ„Ù{jí_VÄ•¦µõa5´š$ZÁÿ¨à•Dz0«ï p?‘ÿŸE>sQ\[û¢ÇYºÞ,­›ùÚͦJvcÇýVÚ*èÁa t,/4ôWÉtUŽØþWüþ"û[gÈoO²£ GÛ,¦Ëdo˜¦i™¶é˜®é™¾˜¡™}36æÐ™cË´,˶˵<Ë·+´"«oÅÖÀZ#kl›¶eÛ¶c»¶gûv`Ø¡Ù};¶öÐÙcÇt,ÇvÇu<Çw't"§ïÄÎÀ:#gìš®åڮ㺮çúnà†näöÝØ¸CwäŽ Ïô,ÏöÏõ<Ï÷/ô"¯ïÅÞÀz#o웾å۾㻾çû~à‡~ä÷ýØøCä3°;p7ð?Œ ¢ ÄÁ £`š¡Ú¡º¡úa†aöÃ8„ÃpŽ#3²";r"7ò"? ¢0Š¢~Gƒh¢±Ñ7ûVßî;}·ïõý~ÐûQ¿ßûƒþ°?êc3¶b;vb7öb?â0Žâ~ǃxâñÀX{à Ü7ð1Ñ ?ˆƒÁp0Œ‡æÐÚCg轡? †á0ö‡ñp0GÃñÈY#{äŒÜ‘7òGÁ(E£þ( FÃÑh46Æpä¾»cl ÇÑ‚Á{<@(ìrñ¶“¥w{™ûÙhqônWsg·øZó¶Ñp÷‡o»¼ôxÃçFéôÝnßåxîú¦ç îú]ÎßíþF”þ!°+v‡al-° Ÿ~"¨»A3¸:ÂбÑ7©,@vÀ"1´¦ŸV `+8 VCÀ~ˆCt³Bj&€©A £Ã90?yÚ…;ŒD`hž"MÜs}â búñ 8Öƒ{gp4b60Éñp?Œƒ@€®E LN¡c#€ê¼1Âi„›{±ABj$ Z ¢¡ˆGP";ºc„è 7Á™°ÂB#)=—~¸07 ×tƈû¢žÅ8 óE¤!„¦!âa°¸2WÆ „t4¹ ˜@P01å¼z¯ÄÍ߮ҷI~åÞÃ/—…a•ßÍ$ i h<4T‘£&*£½êѦ4Y<¡7Çc¨±NÆé\ÒSýÿÞ Ô3ßü~«EùÿÃ_ŒUí­–Ž+p+æeR=ÿßçÅÿz|€ÑÇÈt‚W”H¢(j¬f õ Ñ}1Ë}[+¨}N¬v¼@ÿ}#D¡œ5ÙOA{VwÌeoØ×ß  _3>É×醯!&¬®Ç\ßöØz;tM,Ký“ö©±áç/ðÈ¡D]Ëq"æøA×õü8Ú¡ß Ä-ŒBæ„ìƒÎ2 "»‹``Ñ7ëíÐAW¡Ï`âø¼yÔL'àÀ ìb€ 4»µ‘6eÈŒT°JþCÇ º˜û"†¬Ú œHÂè˜!zÄñqˆ ´z®Ý,›·ñ<æ=~Jvë/y£¥Õµ,×; c»®Ýõ-Þ‡R®Õ5‘û+ @ˆ¤Ðq8w k‘Ã&†„ ˜¶»#aî1ÓdÃÞŒK";5éÁWü"µn›»f »5!l:vŠÌ²¥úÝÕo)‰z]Ìn¼±ÕµÃ€ì ]ƒ0"C2ùh¢Y¯·™”íº¤Ómß;»Œ9WMXñ*A,pæ Z»”ð7jÒ–Øñ&-±cAÊža=© w£'·D™iK—ä”™‡&~°Z5£d ï×½:½4Í[â l=ãÀ´€.§Õ¨lê?!$J³8¬Ù Ìiùȯ)á€Õb¨Gñ tǬT0 úù¡Àj qŠ7‚Õæè ±Z«¬lPªÙ6&Ã$–Äõà`²Æ•_Ý0X“"åü䥇)ІÁFÑRL¹üaŸšh Ó2¯E´ tÜ“F,ž5ƒ5÷ Ì3Ûµ@Ç=UñFбAÂé)Š:6(Ôl “ø'9IXà UFŸj1L†(n½î”?Q¤I_jzy3ð²–¾€¼7JZ1 Yd†z˜5j*1A+»«X¢ØIŒ©Xu#ójÙr Ò¼Y)0ƒbÐL:R 5‚µÄ²-Àhq=1¹'QÖb^ ÆiÔêä€×­3Àš(’ZŠœ«(nƒîÑX/Ž$œIK­r–ó\À*^`frÍâU…¬;õ’°Jø´f¬cÃ0¬8Ïn*Þ2Ï„˜²S?«[È»[XŽÓìdU‚ú~wÄ,W”ÜËjP• 8 ´sf ꤥ+By…œÇ´Õ,õM÷¶¶¾œšôü4±íEºyu(eZ””¢6Ä4_‰bÀØtzm7¨9^m’Gn¾³¤2^Ý—-­\‰ íê+öSÓQ*0¡è&rq…~˜·€¢bÔŽô×Ê…qVú¸Pê˜Ì¹YÔgAä&Y`•´MX ]Q,tf“&ºÒ)aMiÌJÇa…£“0kÑÏC.M+ÐbÛÉ:qÆRDI­vÄ Õ/ê*¡"6¡[^d`\é”RÈ™ *Øîr®îJnSÅô¨0íÎB4ÉqÜ‹0Ü-7DxèTIÄ¥WR $P0Vý0:ø]Ér.ãÃÐ.À å\³SLmuüi ƒdœ”ÁzÏB~d¡4«Jb^µ|™áKБŠÊr éL¦P`Jff“¸›»²`Ãê1HÃò÷ñ8Äûºžä”Çšéä›®0†uµ~ Y õ8Y%Qý*ÅÈR½$.Ú 3Ú2†÷ü85fÃ$äsc° }•—Il A0§aVƒÀ :¦&A72LÓa Fih@:Ô[ÜÁ¢·|¿«ÁgjpSR u ‡¬O§9¬ |þf €|Û$ ±GNcâ &C±owq`;?Óf Q¨¹<ÍIˆúÌÔÿÃØòeÜíQH¦—Z( Ê¢¹ŠM0 _¤AB$*ß·>̂ȔLÏE¦ÑØç2Ûð’ÀÄW’F”Í:¦óù#œ,Šk/B4Óî†Á.… 2Í…PJ €4?RǦyêmúiž«cÔÖpØ8 3¯ÁdÃÚXMSnÈíáˆXc“»O™á4Ž’Ô€‰±9–ÆÆaÜ#mð¡q-7/MŸ@a/ΊÔ,ÏŒ0EøeÊšs˜ÆÆ,˜º¹]Dãy&’™„ƶ£ø‘í= _ðm…e‹’ÄB:Þ)DJœ’%¨n$”hlÇv#G¡4(jóŒg‘äAlbêj˜ƒÐtö˜®ÓÌ¿è(gÊ3Íj ñØÑe³‰.ë.ã?ÉKÄu ñ+V…¶Ÿ8~ÅŠÈŽu¥[¹aù5·f\ÀçëÖ 9Hùu·D’çúU¡8výªív¥_µ>?týJ(ö#ׯ„0òÕýš³KE™ëW$/P!qýÊÉ^ç7×±sfKÇêî'ǫʱÜÖÝñ,¬™ë Äõ,$ñõ€ñ,•àÎ:Çdz€"OCØñ,½ƒu=«ÓNWºvŠÕµ‘‡Õªdf Ì$Ëý¼èž^h&Ùë‚À Í,qÈç>FœÚy1M=…ÐÙ“Äλ©™d hAîÿ$NS‹Ä%%Í$kJ†IÁ—Y¾4ÌŠÊr eEIþ®Ù9Aï´‘âq’å¯cÜ5“l /¸»2ýǘœ†f’%ˆ8‰Õ±˜s³å4›wàBdfÙ03ž¥1Ó80³l”›Y– Ò 3Ë&\)+'©™e±È „:Q?èk%Ö9~nfY$¹åóuä”û] 4ŽÅêÌóŸš·Ì©sßL³|…\ì"‚Ó8#MÔ0†õÔNŒXT°™€c;.&¾Ýz#Xô³„Ó¬B± õ˜"A™YÖ” r r–U(µÝ8‰ $ ­3ËêÖw˜˜6Ã\÷s‘òºé³:îD!'¦ØÌ²¯ˆECÎÚQª®Í=¦{ÜËÆ é›>Ë-RåJ³ÈŽÆi±É˜vëTÄ>›%åî6+©z6÷ô5 0aرÏroÇ8"í0ëeæ­A?3½Ñ[Ôór3Í"µ‰»|h\‹ /6½"4s9]Ë /mbœ›9 h6çMthÐ÷[a`Óà ·o=°˜·c4¡3;-h§ã°x]‚´>±P˜Íxà” *Ō웶0,¡À¾ ‚@Emf<Ž"&Õ©ÍÑpÕ¥¯L4½Öa'Ð7ƒ1ßT¤¾ÉóÐô½˜ó6û2sã”ã1ß•ÅYh“ãL‡,@ºÃÌÜ8Š‹6}êšÇf8&ˆñ 4©qê©áh¯ÌL´YfÂZ!*²`ûB’ W$‘-§¾M„󩹞=ÂWòªEÑaw}s³mïs¬æ¸ÙsŒ]š¶d:dÈXÁ˜ü>à[;.’¿O $ H þˆü±Ö"’°ð§¤àÏHñ$'ÿ+IÁÿ*mM䨸‘ü¿D þ_&ǤàµJ%ò+” üg’âüURð¿†üg‘‚ó×TzÄ¥ÿ¯“û Rðÿ&)øÏ&ÿo©–"¯£–¸z=)øÏ!ÿo“‚ÿ ¤àÿµ†Èi ðŸK äw×èŸü?Áÿû¤àÿEEþ(øßD þ7“âÉ[HÁÿG¤àÿc--rKƒÿ­¤à)ø—‚c))øÏ×V`¶þ·“‚ÿ¤8ßI þe¤àü•FäBJþå¤àÿSR<{)ø/"ÿ»Uj‘÷Pj\ý)øÿœüï%ÿûHÁÿªÈ_R;ðÿ)¤àÿkRð¿ŸüP+`| ÀÿARð_LŠ'—\ ò!~‚ÿR½ù0ïÀÿRð_F þ’‚ãrRð_¡¥D®d)ðŒüW‘‚ÿjRœ+IÁyÖ.²Šµƒÿã¤à_M þ¿%ϵ¤à¿N¥¹žRàê¤à¿!Ôž"ê=ð’üŸRiE>MiÁ#)µ¤à_G þõ¤àÿŒj%òwÔ üO þ›Hñ¤‡üÿ@ þTíE>KíÁÿ9Rð÷’‚ÿŸHÁqs¨òyýù?ÁÿϤ࿅ü·’‚ÿ‹¤8ÿE¹EþÕŒÐòo¤àÿ)øo#ÿ¿“‚÷?´V‘ÿd­¸ú2)øo'ÿ¤àÿ )ø¿ª­‹|­ƒÿë¤@¾A þÿ"ÿ¤àÿ¦J)r¥ÿݤ࿇Oþ›ü÷’‚ÿ>ÕPð‹ü‚¿HÁÿ j-ò•ÿäà„üÿC þGIÁùm;Ç=6¹‡‡|çày<ä»û6ðÇwžÁC¾·éòýtñ'[ÅC~ðð'ﻈ‡üðÎ'yȾrÙxÛ×xÈS·z ¨¬_TØN@Cûpû¤²1\h—%††#°‘9‡ È ”5÷£–u:Ç °Ṁ–l*QÜØ’¢Z¶–EœáDüZްdui-j%Ǥ²ØþçtI–tôþ镬KùPòUc Öãàœ˜Ükú>öÙûteO©úÉ3}ÞØ3¦ôÃÃ/¸ äö:´EÄHXƒä˓֠ãÆeëä²iò;uXd/†æ“ßo…Ç'¿ˆG?¬×ûY 7OÕ¡›m­Cëí¬C7Ú]‡Ö¨C×aȬC«1¶ס•:vŒ»ÐU:8M8†ÔAˆZÞ^ŽÛÍÕíe(°¥º½Ãñ¶ênÝ `§ Lèw1{\`À^8`ÀÇû]`ƒ.pÀ  È° ìLj Á 뻌•&ˆ~gü—,;Á2Ž5ÀÜK„S÷®âfžö7[q³Û”¹dr'Ê kG*Qpìspìw†©š@C »À~UӘόºÀ^ÕÊö(0A± °.ßVÜìÂÓíÅ͈¼£¸¡º»Š›-êU{³  71E7O §ˆhêV}ü{AW<¿ôü^Ðó{AÏï=¿ôü^Ðó{AÿÏ÷‚^Rî­\Êä°ó.™¹lÙ’•Ë–qCèè{dÎÊ¥+—™“;C/¼Wæ®\ºtey2 =á~YÀB¢íÉUÅÂd:ËŽÉQe-8uèÄ |¶tå°t8õ1 >î!™†*¤½¬ð1KÛÒ•»e–­F÷îZÒÞL'¹ÇÄêÆeуrìʚ̕ìãrÚ£òâe®Üç‡%x\^îêpØóJyå“5´zøójñ7Ê1M‚ì–6J¸JNß$óZdø¼Ò*×j9u«t8m=Êbµö¯“®Ò^Vý€Ìkiî9e—Ì.ª¼Ïë|Jí–™¦²oði­eá^™¡UÝ.u=ÖÉ)2uÜ&õJ¿.m==åEdj¹UæÖ*½S¦õ¬]±QNÂãeËn†ŠUµß”i+XvÑ0£üsr”[ñÝ2½gmOÏSr⧤U÷ÊŒµ(¶O>)Ž˜÷ÉÌžžux´INZƒà­jû–ÌB]‚>Q‹ë>™µ¢GDK-¼^:¥7Èìžu"¬r³œ|-½SVù°LƒpЮgífY¸šÝ±¨ôZd\¦SÊ-²ðãxVÖú(J¬[1¦Ÿ[ä¤U|VTûm–Ãò­GÖn•…×ÈœJÌÇðhí(-²¢g«œxµÓ¿+mëV¤ ëðä*H!åã¬ï ÈÚ‰žmrÂÇð¤ñ{‡Ô3ÛäÔ+åè©q»zÉth°n»œv…,˜Ò¶³b­g&ý$kwÊ©EÌÖƒv;e cÖJOÏ.yñe­Z[Û)?8è¸u+vÉ ìü3´-¼ªO èB} õîPÙ÷ÉÌB‹ôˉúLkÜ¡AµÇÈÞ/á€Hß>™Ö××û¤~⺷¯kñ>éÝŒú¨‹ÖÇ2Ô¤_>2,súzÁ¥çˆt”×½}¸ësŸÍ©ž¬=Å]õŒ•TG!+­³ƒÁ‡èëë›N<ÁS Ƶb¤¥†9U kF2 G`fz`‡ËKŸ¶”§×Ä}¿œ? l¢6R›Mô J[_3ÔÖ‹«Vä€õæF6žÎEÝ}eSŒö~Y>*³¬TC¸2"Ê,+ê`6$³ ]pY(u ŒãSuÒhak¶ÀÐÓ¶QaNNÃʘ;ž~ìÕ6j~D¾cÌšDPË¡ÍT C¥ •¦ß_êd}Æt}¥Z Ûåcì™èU¸`ž‡Rk­i­÷™ø¬pÁþ# ÃwŽ=]ÐC5aÓTcQ¡b‡ÅÃèåèà‚…í]½ŠŽ©{\°hb°æ²ÃFâcGu­@²+Ï“é”j@GÚ}æf?nzûö²aŒè½½{÷‘A¨f¦„ÃÉK«©ãé<|š;‘Ì¢oÐàVßzR1Oš¦[ƨT•A«/º <óöRæ{ Ø/gmщúÇ9ïvtÝcu;o@^ÓÓ£ùÑ3<¬Íµ{LîÑ/o—L–Õp>! ù çwš­ùjã÷¼G«©*¿ÙêÞ uÙe~«?lvÆéŸ•κxO5»eñM&ý¨„ØÚ`õÓ×kuNÓ;›­wúÒY·Êîf›œ¾¦mk‘D5ª~Úu2·Öò`³Æ/]-G¹ 7ë{ÊJë ¦·Í"ÑÕôÔ«dNÕÖˆæü-:.ºR:Ÿª+¶ðrÇٛ뺜|™[ù–º /•ö²Ömu©‘3šx¡Ô®¸'_"s¤¬rg‹ |“Ó^ŠÚ_ôd¾Ö)­¿§.é"®®ÛK«ï­‹ºˆï{ÚKcLv¨tî~GØEúÒ—ƒS¤=àX`hŠ´ÖvxŠ´ûTQSõH]Ú“ùÞhv!ìèaw—ÂŽÕ-Ûï;.mެ'ñµÒìBÔq ¨¥ ÇóSå¬]…ŒÇñ]ÓìBÄþB¸ãøÖ©nw!Vï4éë-²ªçÎ9îtÚ½ÖP7PœÌÿÙ8m~0*³ ïí+÷ùʳ*joï±ÍFkE‡Ú_ÄÒÍ"ϾÏ[Ï6®Îª?PøM3ĤloùéšpB^rD|CLl Ýí#34Xhæ6¬Ÿ˜LµšÆ36™a•›#ƒBÚ£7U~lr*§Ñ ™i®ÊL :ðpÑ»ß?C3Ëq6I2 dØùœ€XC·"NTÉ+$éc–;^®&L®[Üò¡ò)º¿áGl½Ô˜RY‚«7TÇôYƒPó˜Ú¢½·2ÂÜšÆ`'cM€œid´è†×±2ÝÔàÖ¦MO0…>XZ¼Ý±°cýªØA™ãFÈQ®SFŠV¦›ÞëL_ãEwû€énf50b 8d\Q¬F ³—æ)Ì?Zù¡rÖzE†{öTY׸î´õËÅÆ&ãE"¸ƒ¡: Û»™…FSBq¤\\ËQõîâî¤˜Š†Œvc‘SNpÛäÚ†À é«š¤0ßpá¥ö²j'LZìÏ[ç~ÂÝç4!7Ýð©Ÿv9IÀv9ßt•Ú/†¤ÍvŽñªŸŒU±«ñ9\úAÜaK—„ƒR.œwTÙÄYnT4ÚÙ~0MƒYì·‰†Ìà -ÍlTnÐ(ÐEÁgèLý»ä½ÆÓÃÅAµŠÀ×~m.ÙöÕˆž›YºæßA•pVi\A_°ƒÐÇ’{¤ç9:™lr–Bò…çê½QLYCŽ=w“Ÿ'dAëòtÊWxd½\ƒóRœ_•ÏÈRé8çœ×½Q¦ë»ºõrµž“2åï’=ºúb$$If–ý!vh5Ö(5Öà"#và"#v(:V –lö+ö5Öà"5Ö(4Öaöý¥<`ñÿ< NormalCJaJmH sH tH DA@òÿ¡D Default Paragraph FontRi@óÿ³R  Table Normalö4Ö l4Öaö (k@ôÿÁ(No ListJ>`òJ /³Title$dh¤xa$@ˆ CJ OJQJaJTT`T /³ Block Text„h„h]„h^„h6CJOJQJaJVC`V /³Body Text Indent$ Æh¤xa$CJaJ4@"4 /³Header  ÆàÀ!4 @24 /³Footer  ÆàÀ!• ÿÿÿÿÿÿÿÿ"ÿÿ z™•¸ -IJ“”¹ºäåûü()RScdpq“”•'(£¤mnstjk   ©0€€¸ § ©0€€¸ §€©0€€¸0›€©0€€¸0› ™0€€¼0› ˜0€€p`Ƙ0€€¸ §€˜0€€p`Ƙ0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §€˜0€€¸ §˜0€€¸ §€˜0€€¸ §€˜0€€p`Ƙ0€€¸0›€˜0€€p`Ƙ0€€¸ §˜0€€p`Ƙ0€€¸ §˜0€€p`Ƙ0€€¸ §˜0€€¸ §˜0€€¸ §˜0€€p`Ƙ0€€¸ §˜0€€¸Ð¢˜0€€¸ §€˜0€€p0Æÿ¿à“ÿ¿I–8oÿ¿”-IJ“”¹ºäåûü()RScdpq“”'(£¤mnstjk ©0€€p`Æ ©0€€p`Æ€©0€€p`Æ€«0€€p`Æ ™@0€€t`Æ ˜0€€p`Ƙ0€€p`Æ€˜0€€p`Ƙ0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æ€˜0€€p`Æš0€€p`Ƙ0€€p`Æš0€€p`Ƙ0€€p`Æš0€€p`Ƙ0€€p`Ƙ0€€p`Ƙ0€€p`Æš0€€p`Ƙ0€€p`Æš0€€p`Æš0€€ÿ¿p·2ðµA  ä(   7? J‘ :IJ“ –Uý£ÿ@€Áµÿa+Ÿ ` @ÿÿUnknownÿÿÿÿÿÿÿÿÿÿÿÿGTimes New Roman5€Symbol3 Arial3Times qŒðÐhô3»Fô3»Fš% ±ð¥À´´€>4d: c`ððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘_ ÿÿ+*** LBNL Modified BSD License agreement *** Pam Seidenman Pam Seidenmanþÿ à…ŸòùOh«‘+'³Ù0@˜ÌØðü  $0 P \ ht|„Œ”',*** LBNL Modified BSD License agreement ***Pam SeidenmanNormalPam Seidenman2Microsoft Word 11.3.5@@èᜀ È@èᜀ Èš% G¤þÿÿÿPICTœ€bÿ ÿþHH€b €€ÿÿšÿ€Ä€bHH·ÃD·‰d€b€bŸ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ÷ÿý0¯ÿùÿø0ÿÿŒŒ¶ÿtòÿþ0ÿŒŒûÿ csœkZo{o{w½kZo{kZo{cÿsœþkZ sœw½o{ÿkZcsœo{sœkZþo{kZg9o{sœo{w½sœÿsœo{kZkZsœsœkZo{w½kZëÿxùÿøÌ0ÿÌÌûÿ&BcVµVµZÖw½VµcVµg9F1{ÞZÖZÖkZcg9ZÖVµÿVµJRVµkZR”kZVµkZVµVµkZkZZÖNsÿZÖ^÷ZÖNsþVµkZVµVµÿkZëÿ*ùÿøŒ0ÿÌÌÍÿkZÿsœõÿw½w½ûÿ;òÿûŒÍÿR”ZÖkZNsR”kZ^÷ÿNsNso{VµcZÖZÖkZNskZVµZÖþÿùÿöÌŒŒ¶ÿùÿöÌþŒ·ÿ•ôÿC^÷ZÖZÖco{g9^÷g9g9^÷^÷kZg9NsR”kZZÖÿg9JRkZg9Vµo{F1ÿVµg9ÿ^÷ZÖg9R”g9^÷R”ZÖ^÷g9R”g9ÿVµ^÷ZÖg9kZJRÿ^÷g9Vµ^÷R”^÷kZVµ^÷F1g9^÷^÷kZNsg9^÷R”g9òÿ ¡ÿ‘ôÿ#Ns^÷g9kZ^÷g9^÷^÷kZR”c^÷^÷R”R”kZg9^÷g9R”g9ÿc^÷ckZJRg9ÿF1g9kZBg9ÿR”ý^÷kZc^÷Vµ^÷BkZg9w½kZVµg9g9R”kZ^÷^÷R”^÷^÷Vµw½F1g9kZBg9w½òÿ ¡ÿ•ôÿCVµ^÷VµccZÖVµkZw½F1R”ZÖZÖg9c^÷VµsœkZZÖ^÷VµR”g9g9NsZÖkZo{ZÖg9VµVµg9R”cg9g9^÷^÷sœ^÷kZsœR”ZÖ^÷g9g9sœkZZÖ^÷g9VµF1^÷ÿR”g9^÷g9Vµ^÷g9Vµg9g9òÿ ¡ÿ%ôÿ ^÷R”ÿR”VµVµZÖg9g9VµJRcºÿ ¡ÿ ¡ÿ ¡ÿ9ôÿVµ^÷Ns^÷^÷R”^÷^÷ZÖ^÷F1^÷ÿkZw½ZÖg9g9^÷g9sœkZÄÿ ¡ÿ ¡ÿ<ôÿR”^÷Nsg9^÷g9ZÖg9þ^÷ g9Bco{g9g9R”g9g9Ns^÷R”þg9Èÿ ¡ÿ ¡ÿ ¡ÿ!ôÿ ^÷^÷ZÖ^÷kZ^÷R”o{^÷^÷¸ÿ ¡ÿ ¡ÿ ¡ÿ-ôÿ JRg9^÷R”F1g9^÷kZR”ÿþ^÷g9JRZÖkZ¿ÿ ¡ÿ ¡ÿôÿ^÷VµVµkZþg9µÿ ¡ÿ ¡ÿ ¡ÿ7ôÿVµR”o{ÿZÖR”ZÖo{ZÖ^÷ZÖ^÷Ns^÷Vµg9Nsþ^÷kZg9Äÿ ¡ÿ ¡ÿ ¡ÿôÿ^÷ZÖØÿZÖ^÷g9Üÿ ¡ÿ ¡ÿôÿNsR”kZNs²ÿ ¡ÿ ¡ÿ ¡ÿ7ôÿ^÷ZÖg9^÷kZR”g9^÷^÷c^÷^÷ZÖg9^÷g9g9^÷R”cg9Ãÿ ¡ÿ ¡ÿ ¡ÿŸùÿkZR”g9VµZÖkZNsü^÷ Vµ^÷g9g9Vµÿg9^÷^÷kZR”R”þVµ ^÷kZg9g9^÷ZÖBÿ^÷ZÖýÿ%kZR”JRkZR”NsVµ^÷w½JRÿVµkZJRNsF1^÷cw½ÿZÖBVµkZ^÷cw½Ns^÷NsVµR”ÿc^÷R”cw½øÿ ¡ÿ¥ùÿ ^÷kZcJR^÷^÷F1^÷Vµo{g9ZÖþ^÷w½^÷ZÖÿ^÷g9F1^÷ZÖVµ^÷kZ^÷g9Nsg9VµR”^÷kZR”g9ýÿ%JRR”ÿÿVµJRR”ZÖNsR”VµNsR”^÷kZ^÷cÿJRÿ^÷VµR”R”NsZÖÿÿkZJRVµcVµJRkZR”R”w½øÿùÿg9^÷R”cVµ^÷g9^÷^÷Ns^÷^÷g9^÷ZÖÿNsZÖêÿ$F1Vµ^÷ÿÿR”JR^÷ÿÿckZVµR”NsJRÿÿ^÷JRw½ÿZÖR”JRVµVµR”NsVµF1ÿR”^÷ÿJRZÖ÷ÿ ¡ÿWÐÿ ZÖVµF1ZÖ^÷kZ^÷Vµ^÷NsR”þJRZÖÿJRR”ÿZÖNsR”^÷NsNsZÖÿcJRZÖZÖJRZÖÿVµZÖNsw½øÿ ¡ÿ–ùÿþkZR”g9VµJRNsþ^÷g9ÿÿ^÷g9g9^÷^÷kZg9g9^÷Vµg9ÿNs^÷g9kZg9kZ^÷VµÿR”g9ýÿJRþ^÷ÿw½ÿÿJRÿR”þÿZÖR”JRZÖkZ^÷ZÖþÿJRR”ýÿF1VµZÖJRÿNsZÖ÷ÿ ¡ÿ¥ùÿ$g9^÷^÷g9kZVµJRR”^÷g9w½R”o{g9R”kZ^÷g9g9^÷^÷Ns^÷^÷g9^÷^÷VµR”g9g9^÷R”cVµÿ^÷ýÿ$kZR”^÷NsR”R”VµZÖ^÷kZJRR”kZÿR”JRZÖJR^÷ÿBÿÿVµ^÷VµZÖNsJRÿ^÷R”ÿJRÿJRR”÷ÿ ¡ÿiùÿVµNskZVµNsg9kZßÿ$^÷R”cÿÿ^÷R”NsJRR”cÿÿJRZÖÿÿcR”F1kZckZNsÿw½ZÖNsÿNs^÷R”NsR”ÿÿJR÷ÿ ¡ÿWÐÿ$VµJRR”ÿ^÷R”^÷Vµ^÷w½ÿZÖ^÷R”kZVµ^÷ÿÿckZ^÷BckZ^÷cw½ÿJRR”ÿÿ^÷JRR”^÷÷ÿ£ùÿkZZÖJRg9VµZÖkZNsþ^÷g9ÿþVµ^÷kZg9g9^÷kZNsNs^÷ÿZÖÿkZg9^÷kZ^÷Vµ^÷ZÖg9ýÿ%kZkZR”VµcVµJRkZR”R”ÿÿR”NsR”cJRNsR”ÿVµNsÿÿJRR”ÿÿJR^÷R”NsR”ZÖ^÷ZÖNskZøÿ ¡ÿ£ùÿg9^÷^÷g9kZVµJRR”^÷g9w½R”o{g9R”kZ^÷g9g9^÷^÷Nsþ^÷ R”^÷VµR”g9ÿg9BcVµÿ^÷ýÿ$^÷R”kZZÖkZR”R”kZR”^÷ÿR”cZÖVµcÿÿJRVµ^÷ÿJRZÖ^÷R”NsÿVµZÖNsJRZÖÿ^÷R”R”÷ÿ ¡ÿ£ùÿ$VµNskZVµNsg9kZVµÿR”g9ÿVµ^÷g9F1g9^÷R”^÷^÷ÿ^÷^÷VµVµkZ^÷R”g9kZNs^÷ZÖkZVµZÖýÿZÖJRZÖ^÷ZÖo{^÷R”Nsw½ÿNs^÷NsR”þÿkZZÖÿ^÷JR^÷kZZÖNsJRÿÿJRZÖÿÿ^÷R”Ns÷ÿ ¡ÿbùÿ^÷kZ^÷g9Nsg9VµF1R”g9ÿVµZÖkZNsþ^÷êÿZÖJRZÖZÖkZF1VµkZ^÷cJRZÖÿF1ÿVµR”JR^÷ÿVµR”R”Nsêÿ ¡ÿ ¡ÿ ¡ÿ¥ùÿ%kZcJRg9^÷ZÖg9kZR”g9ÿ^÷F1ÿg9^÷g9kZZÖg9Vµ^÷ZÖg9kZ^÷ZÖÿ^÷Nsÿ^÷R”^÷kZ^÷Vµw½þÿcÿcþ^÷kZg9^÷^÷Vµg9kZþ^÷Vµ^÷F1^÷cZÖ^÷ZÖ^÷g9g9kZR”ÿ^÷kZ^÷g9NsR”^÷g9øÿ ¡ÿ¡ùÿ c^÷ckZJRg9ÿF1g9kZR”g9g9R”ý^÷kZc^÷Vµ^÷kZ^÷R”kZg9R”ZÖÿJRg9^÷kZ^÷g9ýÿVµ^÷^÷ÿg9ZÖg9g9w½^÷^÷ZÖZÖg9w½ÿ^÷kZÿþ^÷kZ^÷JRg9R”ÿÿR”g9ÿg9R”R”kZg9w½øÿ§ùÿ$Ns^÷g9kZ^÷R”^÷kZR”g9^÷^÷Nsg9g9^÷g9R”g9^÷^÷kZNs^÷R”kZg9Ns^÷g9Vµg9^÷g9g9VµR”ýÿ%g9^÷^÷g9^÷^÷R”R”ÿÿ^÷kZÿ^÷g9kZg9^÷kZNs^÷^÷R”g9ÿR”g9ÿÿg9^÷R”ZÖÿg9^÷Vµg9øÿ ¡ÿ¥ùÿ$g9^÷Vµ^÷kZR”ZÖ^÷kZ^÷Ns^÷ZÖ^÷kZ^÷Vµ^÷g9F1g9kZZÖg9Vµg9kZ^÷=ïZÖÿg9^÷g9VµR”g9ýÿ$kZsœNs^÷ZÖ^÷R”F1g9^÷ZÖsœkZR”^÷^÷g9^÷^÷g9ZÖ^÷cg9g9VµÿZÖg9^÷^÷g9ZÖ^÷^÷g9JR÷ÿ ¡ÿùÿcJR^÷^÷ZÖ^÷g9g9ZÖZÖ^÷kZVµkZc^÷ZÖ^÷^÷g9kZNsZÖ^÷^÷ñÿ%Ns^÷^÷g9ÿg9^÷^÷kZNs^÷ZÖR”g9Nsg9^÷ZÖ^÷g9^÷^÷VµZÖÿg9JRg9kZÿ^÷^÷JRg9ZÖw½^÷kZøÿ ¡ÿWÐÿVµ^÷g9R”g9ÿR”ÿÿc^÷cZÖ^÷g9ÿF1g9kZR”ZÖg9ÿR”þ^÷ ÿR”ÿc^÷Vµ^÷BkZg9w½øÿ ¡ÿ©ùÿ$ZÖÿ^÷R”kZZÖZÖJRÿZÖ^÷ZÖo{^÷R”NsÿkZZÖÿZÖR”JR^÷kZJRNsJRÿÿF1c^÷ÿÿR”Nsýÿ&cJR^÷^÷kZÿJR^÷^÷g9Vµ^÷^÷g9g9^÷^÷ZÖÿc^÷ZÖ^÷kZZÖg9^÷g9R”^÷kZg9Nsg9^÷kZg9^÷kZùÿ ¡ÿ§ùÿ$VµJRZÖcR”kZR”R”^÷R”JRcÿJRNsR”ZÖ^÷R”JRÿVµJRR”ÿ^÷R”BVµ^÷JRR”ÿZÖsœ^÷ZÖýÿ%g9^÷g9ZÖNs^÷ZÖ^÷JRNsg9^÷ZÖw½R”g9^÷g9^÷^÷ZÖg9kZg9VµR”kZ^÷kZR”g9g9^÷R”cVµÿ^÷øÿ›ùÿ kZZÖsœÿ^÷R”JR^÷R”cNs^÷ûÿZÖR”NsZÖZÖþÿ JRR”ÿÿkZVµR”ckZNsJRýÿkZZÖg9R”g9ÿþ^÷Vµg9g9R”g9ZÖg9w½kZ^÷g9Bsœg9kZg9R”g9kZ^÷R”JRkZZÖg9^÷g9ZÖ^÷øÿ ¡ÿ§ùÿ$ZÖVµR”R”^÷ÿR”^÷kZBw½kZR”VµcVµJRkZR”R”w½ÿF1Vµ^÷ÿR”JR^÷ÿckZVµkZ^÷NsJRýÿ%Vµg9kZR”g9^÷g9w½Ns^÷VµZÖg9ZÖkZR”^÷kZNsg9kZZÖ^÷R”g9c^÷kZ^÷g9R”g9^÷kZ^÷^÷ZÖ^÷øÿ ¡ÿŸùÿ^÷JRw½ÿÿ^÷R”NsýÿNsR”ckZNsJRþÿ ZÖo{^÷R”R”^÷R”^÷kZNsZÖþÿJRZÖýÿ%VµR”ÿ^÷R”g9kZg9^÷Ns^÷^÷ZÖkZg9^÷R”kZ^÷kZg9F1kZkZNs^÷ZÖw½^÷^÷Vµg9^÷NsZÖg9R”g9øÿ ¡ÿ§ùÿ$VµF1R”VµR”^÷R”ÿ^÷^÷F1kZckZNsÿÿ^÷R”JRZÖkZÿÿ^÷R”NsZÖZÖÿZÖJRÿR”ÿÿ^÷ýÿ%g9^÷g9ZÖg9^÷ZÖR”R”Nsg9^÷ZÖ^÷kZVµg9ZÖVµR”g9ÿc^÷kZ^÷ZÖg9kZg9^÷g9R”VµVµ^÷kZg9øÿ ¡ÿwùÿ$ZÖ^÷R”^÷NsVµc^÷ÿR”ZÖVµR”ZÖJRZÖNsÿ^÷R”NsJRkZZÖVµc^÷kZVµF1JRÿkZR”R”ÿJRýÿ ^÷^÷Vµg9^÷^÷ZÖg9^÷Vµg9^÷kZNsàÿ ¡ÿUùÿ#Ns^÷NsR”^÷ÿZÖR”^÷ccÿÿ^÷R”NsÿVµJRZÖcR”kZR”R”^÷ÿJRZÖNsÿNsR”ÿJRR”Íÿ ¡ÿWùÿ$VµJRR”^÷R”kZF1Vµ^÷JRR”ZÖÿF1NsckZ^÷F1cNsÿZÖJRR”ÿ^÷R”cÿÿJRJRNsVµ^÷w½Îÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿôÿVµckZkZVµZÖ´ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿ ¡ÿŸÿþÿ ÕÍÕœ.“—+,ù®0 hp€ˆ˜  ¨°¸ À ø'LBNL:  ,*** LBNL Modified BSD License agreement *** Title þÿÿÿ !"#$%&'()þÿÿÿ+,-./012þÿÿÿ456789:;<=>?þÿÿÿABCDEFGþÿÿÿýÿÿÿJþÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ ÀF€ý¿ ÈL€Data ÿÿÿÿÿÿÿÿÿÿÿÿ:41Tableÿÿÿÿÿÿÿÿ*÷WordDocumentÿÿÿÿMSummaryInformation(ÿÿÿÿÿÿÿÿÿÿÿÿ3pDocumentSummaryInformation8ÿÿÿÿÿÿÿÿ@CompObjÿÿÿÿXObjectPoolÿÿÿÿÿÿÿÿÿÿÿÿ€ý¿ È€ý¿ Èþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿ ÀFMicrosoft Word DocumentþÿÿÿNB6WWord.Document.8qd-2.3.11/AUTHORS0000644000175000017500000000104211202062041013503 0ustar prudhommprudhommlibqd: quad-double / double-double computation package ------------------------------------------------------ Authors ------- Yozo Hida U.C. Berkeley Xiaoye S. Li Lawrence Berkeley Natl Lab David H. Bailey Lawrence Berkeley Natl Lab Contributors ------------ Yves Renard - provided initial autotoolization (autoconf / automake / libool) E. Jason Riedy - various bug fixes and code cleanup. qd-2.3.11/README0000644000175000017500000004010111406505442013327 0ustar prudhommprudhomm------------------------------------------------------------------------ QUAD-DOUBLE/DOUBLE-DOUBLE COMPUTATION PACKAGE Copyright (c) 2005-2010 ------------------------------------------------------------------------ Revision date: 2010 June 14 Authors: Yozo Hida U.C. Berkeley yozo@cs.berkeley.edu Xiaoye S. Li Lawrence Berkeley Natl Lab xiaoye@nersc.gov David H. Bailey Lawrence Berkeley Natl Lab dhbailey@lbl.gov C++ usage guide: Alex Kaiser Lawrence Berkeley Natl Lab adkaiser@lbl.gov This work was supported by the Director, Office of Science, Division of Mathematical, Information, and Computational Sciences of the U.S. Department of Energy under contract number DE-AC02-05CH11231. This work was supported by the Director, Office of Science, Division of Mathematical, Information, and Computational Sciences of the U.S. Department of Energy under contract numbers DE-AC03-76SF00098 and DE-AC02-05CH11231. *** IMPORTANT NOTES: See the file COPYING for modified BSD license information. See the file INSTALL for installation instructions. See the file NEWS for recent revisions. See the file README.pdf for additional information. The file is mostly identical, but but includes additional tables on constructors and constants. Outline: I. Introduction II. Directories and Files III. C++ Usage IV. Fortran Usage V. Note on x86-Based Processors (MOST systems in use today) I. Introduction This package provides numeric types of twice the precision of IEEE double (106 mantissa bits, or approximately 32 decimal digits) and four times the precision of IEEE double (212 mantissa bits, or approximately 64 decimal digits). Due to features such as operator and function overloading, these facilities can be utilized with only minor modifications to conventional C++ and Fortran-90 programs. In addition to the basic arithmetic operations (add, subtract, multiply, divide, square root), common transcendental functions such as the exponential, logarithm, trigonometric and hyperbolic functions are also included. A detailed description of the algorithms used is available in the docs subdirectory (see docs/qd.ps). An abridged version of this paper, which was presented at the ARITH-15 conference, is also available in this same directory (see docs/arith15.ps). II. Directories and Files There are six directories and several files in the main directory of this distribution, described below src This contains the source code of the quad-double and double-double library. This source code does not include inline functions, which are found in the header files in the include directory. include This directory contains the header files. fortran This directory contains Fortran-90 files. tests This directory contains some simple (not comprehensive) tests. docs This directory contains two papers describing the algorithms. config This directory contains various scripts used by the configure script and the Makefile. C++ Usage: Please note that all commands refer to a Unix-type environment such as Mac OSX or Ubuntu Linux using the bash shell. A. Building To build the library, first run the included configure script by typing ./configure This script automatically generates makefiles for building the library and selects compilers and necessary flags and libraries to include. If the user wishes to specify compilers or flags they may use the following options. CXX C++ compiler to use CXXFLAGS C++ compiler flags to use CC C compiler to use (for C demo program) CFLAGS C compiler flags to use (for C demo program) FC Fortran 90 compiler FCFLAGS Fortran 90 compiler flags to use FCLIBS Fortran 90 libraries needed to link with C++ code. For example, if one is using GNU compilers, configure with: ./configure CXX=g++ FC=gfortran The Fortran and C++ compilers must produce compatible binaries. On some systems additional flags must be included to ensure that portions of the library are not built with 32 and 64 bit object files. For example, on 64-Bit Mac OSX 10.6 (Snow Leopard) the correct configure line using GNU compilers is: ./configure CXX=g++ FC=gfortran FCFLAGS=-m64 To build the library, simply type make and the automatically generated makefiles will build the library including archive files. To allow for easy linking to the library, the user may also wish to install the archive files to a standard place. To do this type: make install This will also build the library if it has not already been built. Many systems, including Mac and Ubuntu Linux systems, require administrator privileges to install the library at such standard places. On such systems, one may type: sudo make install instead if one has sufficient access. The directory ÔtestsÕ contains programs for high precision quadrature and integer-relation detection. To build such programs, type: make demo in the ÔtestsÕ directory. B. Linking The simplest way to link to the library is to install it to a standard place as described above, and use the Ðl option. For example g++ compileExample.cpp -o compileExample -l qd One can also use this method to build with make. A file called ÒcompileExample.cppÓ and the associated makefile ÒmakeCompileExampleÓ illustrate the process. A third alternative is to use a link script. If one types Òmake demoÓ in the test directory, the output produced gives guidance as to how to build the files. By following the structure of the compiling commands one may copy the appropriate portions, perhaps replacing the filename with an argument that the user can include at link time. An example of such a script is as follows: g++ -DHAVE_CONFIG_H -I.. -I../include -I../include -O2 -MT $1.o -MD -MP -MF .deps/qd_test.Tpo -c -o $1.o $1.cpp mv -f .deps/$1.Tpo .deps/$1.Po g++ -O2 -o $1 $1.o ../src/libqd.a Ðlm To use it, make the link script executable and type: ./link.scr compileExample Note that the file extension is not included because the script handles all extensions, expecting the source file to have the extension Ô.cppÕ . C. Programming techniques As much as possible, operator overloading is included to make basic programming as much like using standard typed floating-point arithmetic. Changing many codes should be as simple as changing type statements and a few other lines. i. Constructors To create dd_real and qd_real variables calculated to the proper precision, one must use care to use the included constructors properly. Many computations in which variables are not explicitly typed to multiple-precision may be evaluated with double-precision arithmetic. The user must take care to ensure that this does not cause errors. In particular, an expression such as 1.0/3.0 will be evaluated to double precision before assignment or further arithmetic. Upon assignment to a multi-precision variable, the value will be zero padded. This problem is serious and potentially difficult to debug. To avoid this, use the included constructors to force arithmetic to be performed in the full precision requested. For a table with descriptions, please see the included file README.pdf ii. Included functions and Constants Supported functions include assignment operators, comparisons, arithmetic and assignment operators, and increments for integer types. Standard C math functions such as exponentiation, trigonometric, logarithmic, hyperbolic, exponential and rounding functions are included. As in assignment statements, one must be careful with implied typing of constants when using these functions. Many codes need particular conversion for the power function, which is frequently used with constants that must be explicitly typed for multi- precision codes. Many constants are included, which are global and calculated upon initialization. The following list of constants is calculated for both the dd_real and qd_real classes separately. Use care to select the correct value. For a table with descriptions, please see the included file README.pdf ii. Conversion of types Static casts may be used to convert constants between types. One may also use constructors to return temporary multi-precision types within expressions, but should be careful, as this will waste memory if done repeatedly. For example: qd_real y ; y = sin( qd_real(4.0) / 3.0 ) ; CÐstyle casts may be used, but are not recommended. Dynamic and reinterpret casts are not supported and should be considered unreliable. Casting between multi-precision and standard precision types can be dangerous, and care must be taken to ensure that programs are working properly and accuracy has not degraded by use of a misplaced type-conversion. D. Available precision, Control of Precision Levels, The library provides greatly extended accuracy when compared to standard double precision. The type dd_real provides for 106 mantissa bits, or about 32 decimal digits. The type qd_real provides for 212 mantissa bits, or about 64 decimal digits. Both the dd_real and qd_real values use the exponent from the highest double-precision word for arithmetic, and as such do not extend the total range of values available. That means that the maximum absolute value for either data type is the same as that of double- precision, or approximately 10^308. The precision near this range, however, is greatly increased. To ensure that arithmetic is carried out with proper precision and accuracy, one must call the function Òfpu_fix_startÓ before performing any double-double or quad-double arithmetic. This forces all arithmetic to be carried out in 64-bit double precision, not the 80- bit precision that is found on certain compilers and interferes with the existing library. unsigned int old_cw; fpu_fix_start(&old_cw); To return standard settings for arithmetic on oneÕs system, call the function Òfpu_fix_endÓ. For example: fpu_fix_end(&old_cw); E. I/O The standard I/O stream routines have been overloaded to be fully compatible with all included data types. One may need to manually reset the precision of the stream to obtain full output. For example, if 60 digits are desired, use: cout.precision(60) ; When reading values using cin, each input numerical value must start on a separate line. Two formats are acceptable: 1. Write the full constant 3. Mantissa e exponent Here are three valid examples: 1.1 3.14159 26535 89793 123.123123e50 When read using cin, these constants will be converted using full multi-precision accuracy. IV. Fortran-90 Usage NEW (2007-01-10): The Fortran translation modules now support the complex datatypes "dd_complex" and "qd_complex". Since the quad-double library is written in C++, it must be linked in with a C++ compiler (so that C++ specific things such as static initializations are correctly handled). Thus the main program must be written in C/C++ and call the Fortran 90 subroutine. The Fortran 90 subroutine should be called f_main. Here is a sample Fortran-90 program, equivalent to the above C++ program: subroutine f_main use qdmodule implicit none type (qd_real) a, b integer*4 old_cw call f_fpu_fix_start(old_cw) a = 1.d0 b = cos(a)**2 + sin(a)**2 - 1.d0 call qdwrite(6, b) stop end subroutine This verifies that cos^2(1) + sin^2(1) = 1 to 64 digit accuracy. Most operators and generic function references, including many mixed-mode type combinations with double-precision (ie real*8), have been overloaded (extended) to work with double-double and quad-double data. It is important, however, that users keep in mind the fact that expressions are evaluated strictly according to conventional Fortran operator precedence rules. Thus some subexpressions may be evaluated only to 15-digit accuracy. For example, with the code real*8 d1 type (dd_real) t1, t2 ... t1 = cos (t2) + d1/3.d0 the expression d1/3.d0 is computed to real*8 accuracy only (about 15 digits), since both d1 and 3.d0 have type real*8. This result is then converted to dd_real by zero extension before being added to cos(t2). So, for example, if d1 held the value 1.d0, then the quotient d1/3.d0 would only be accurate to 15 digits. If a fully accurate double-double quotient is required, this should be written: real*8 d1 type (dd_real) t1, t2 ... t1 = cos (t2) + ddreal (d1) / 3.d0 which forces all operations to be performed with double-double arithmetic. Along this line, a constant such as 1.1 appearing in an expression is evaluated only to real*4 accuracy, and a constant such as 1.1d0 is evaluated only to real*8 accuracy (this is according to standard Fortran conventions). If full quad-double accuracy is required, for instance, one should write type (qd_real) t1 ... t1 = '1.1' The quotes enclosing 1.1 specify to the compiler that the constant is to be converted to binary using quad-double arithmetic, before assignment to t1. Quoted constants may only appear in assignment statements such as this. To link a Fortran-90 program with the C++ qd library, it is recommended to link with the C++ compiler used to generate the library. The Fortran 90 interface (along with a C-style main function calling f_main) is found in qdmod library. The qd-config script installed during "make install" can be used to determine which flags to pass to compile and link your programs: "qd-config --fcflags" displays compiler flags needed to compile your Fortran files. "qd-config --fclibs" displays linker flags needed by the C++ linker to link in all the necessary libraries. A sample Makefile that can be used as a template for compiling Fortran programs using quad-double library is found in fortran/Makefile.sample. F90 functions defined with dd_real arguments: Arithmetic: + - * / ** Comparison tests: == < > <= >= /= Others: abs, acos, aint, anint, asin, atan, atan2, cos, cosh, dble, erf, erfc, exp, int, log, log10, max, min, mod, ddcsshf (cosh and sinh), ddcssnf (cos and sin), ddranf (random number generator in (0,1)), ddnrtf (n-th root), sign, sin, sinh, sqr, sqrt, tan, tanh Similar functions are provided for qd_real arguments (with function names qdcsshf, qdcssnf, qdranf and qdnrtf instead of the names in the list above). Input and output of double-double and quad-double data is done using the special subroutines ddread, ddwrite, qdread and qdwrite. The first argument of these subroutines is the Fortran I/O unit number, while additional arguments (as many as needed, up to 9 arguments) are scalar variables or array elements of the appropriate type. Example: integer n type (qd_real) qda, qdb, qdc(n) ... call qdwrite (6, qda, qdb) do j = 1, n call qdwrite (6, qdc(j)) enddo Each input values must be on a separate line, and may include D or E exponents. Double- double and quad-double constants may also be specified in assignment statements by enclosing them in quotes, as in ... type (qd_real) pi ... pi = "3.14159265358979323846264338327950288419716939937510582097494459230" ... Sample Fortran-90 programs illustrating some of these features are provided in the f90 subdirectory. V. Note on x86-Based Processors (MOST systems in use today) The algorithms in this library assume IEEE double precision floating point arithmetic. Since Intel x86 processors have extended (80-bit) floating point registers, the round-to-double flag must be enabled in the control word of the FPU for this library to function properly under x86 processors. The following functions contains appropriate code to facilitate manipulation of this flag. For non-x86 systems these functions do nothing (but still exist). fpu_fix_start This turns on the round-to-double bit in the control word. fpu_fix_end This restores the control flag. These functions must be called by the main program, as follows: int main() { unsigned int old_cw; fpu_fix_start(&old_cw); ... user code using quad-double library ... fpu_fix_end(&old_cw); } A Fortran-90 example is the following: subroutine f_main use qdmodule implicit none integer*4 old_cw call f_fpu_fix_start(old_cw) ... user code using quad-double library ... call f_fpu_fix_end(old_cw) end subroutine qd-2.3.11/Makefile.in0000644000175000017500000005731411202062041014515 0ustar prudhommprudhomm# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 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. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@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) $(dist_doc_DATA) \ $(dist_noinst_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/qd-config.in $(top_srcdir)/configure \ $(top_srcdir)/include/qd/qd_config.h.in AUTHORS COPYING \ ChangeLog INSTALL NEWS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_clock_gettime.m4 \ $(top_srcdir)/m4/ax_cxx_copysign.m4 \ $(top_srcdir)/m4/ax_cxx_fc_lib.m4 \ $(top_srcdir)/m4/ax_cxx_fma.m4 \ $(top_srcdir)/m4/ax_cxx_isfinite.m4 \ $(top_srcdir)/m4/ax_cxx_isinf.m4 \ $(top_srcdir)/m4/ax_cxx_isnan.m4 \ $(top_srcdir)/m4/ax_f90_module_flag.m4 \ $(top_srcdir)/m4/ax_f90_module_style.m4 \ $(top_srcdir)/m4/ax_fc_etime.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 = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = config.h $(top_builddir)/include/qd/qd_config.h CONFIG_CLEAN_FILES = qd-config am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(docdir)" binSCRIPT_INSTALL = $(INSTALL_SCRIPT) SCRIPTS = $(bin_SCRIPTS) 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__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 = `echo $$p | sed -e 's|^.*/||'`; dist_docDATA_INSTALL = $(INSTALL_DATA) DATA = $(dist_doc_DATA) $(dist_noinst_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_ARGS = @CONFIGURE_ARGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETIME = @ETIME@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCLIBS = @FCLIBS@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REQ_CXXFLAGS = @REQ_CXXFLAGS@ REQ_FCFLAGS = @REQ_FCFLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_f90_modflag = @ax_f90_modflag@ 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 = ${datadir}/doc/${PACKAGE} dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ mkdir_p = @mkdir_p@ module_ext = @module_ext@ 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@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = config src include tests fortran BUILT_SOURCES = docs/qd.pdf dist_doc_DATA = README docs/qd.pdf dist_noinst_DATA = docs/Makefile \ docs/qd.tex docs/qd.bib \ docs/nine-two-sum.eps docs/nine-two-sum.fig \ docs/normal_sum_prod.eps docs/normal_sum_prod.fig \ docs/qd_add.eps docs/qd_add.fig \ docs/qd_add_proof.eps docs/qd_add_proof.fig \ docs/qd_add_qd_d.eps docs/qd_add_qd_d.fig \ docs/qd_mul_accum.eps docs/qd_mul_accum.fig \ docs/qd_mul_qd_d.eps docs/qd_mul_qd_d.fig \ docs/quick-two-sum.eps docs/quick-two-sum.fig \ docs/six-three-sum.eps docs/six-three-sum.fig \ docs/three-sum-2.eps docs/three-sum-2.fig \ docs/three-sum-3.eps docs/three-sum-3.fig \ docs/three-sum.eps docs/three-sum.fig \ docs/two-prod.eps docs/two-prod.fig \ docs/two-sum.eps docs/two-sum.fig bin_SCRIPTS = qd-config all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ 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: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(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 config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ include/qd/qd_config.h: include/qd/stamp-h2 @if test ! -f $@; then \ rm -f include/qd/stamp-h2; \ $(MAKE) $(AM_MAKEFLAGS) include/qd/stamp-h2; \ else :; fi include/qd/stamp-h2: $(top_srcdir)/include/qd/qd_config.h.in $(top_builddir)/config.status @rm -f include/qd/stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status include/qd/qd_config.h distclean-hdr: -rm -f config.h stamp-h1 include/qd/qd_config.h include/qd/stamp-h2 qd-config: $(top_builddir)/config.status $(srcdir)/qd-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ else :; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" @list='$(dist_doc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(dist_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \ $(dist_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \ done uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(dist_doc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \ rm -f "$(DESTDIR)$(docdir)/$$f"; \ done # 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): @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; \ (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): @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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ 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; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__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: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(SCRIPTS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-dist_docDATA install-dvi: install-dvi-recursive install-exec-am: install-binSCRIPTS install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive 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 mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-dist_docDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-hook dist-lzma dist-shar dist-tarZ dist-zip distcheck \ distclean distclean-generic distclean-hdr distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binSCRIPTS \ install-data install-data-am install-dist_docDATA 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 pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-dist_docDATA doc: docs/qd.pdf docs/qd.pdf: cd docs && $(MAKE) qd.pdf changelog: git log >ChangeLog dist-hook: rm -f ${distdir}/ChangeLog && git log >${distdir}/ChangeLog cpp-demo: cd tests && make demo @HAVE_FORTRAN_TRUE@fortran-demo: @HAVE_FORTRAN_TRUE@ cd fortran && make demo @HAVE_FORTRAN_TRUE@demo: cpp-demo fortran-demo @HAVE_FORTRAN_FALSE@fortran-demo: @HAVE_FORTRAN_FALSE@ @echo "You need a Fortran 95 compiler to build fortran demo programs." && false @HAVE_FORTRAN_FALSE@demo: cpp-demo time: cd tests && make time .PHONY: changelog cpp-demo fortran-demo demo time doc # 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: qd-2.3.11/config/0000755000175000017500000000000011431215437013720 5ustar prudhommprudhommqd-2.3.11/config/missing0000755000175000017500000002557711202062041015322 0ustar prudhommprudhomm#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2006-05-10.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." 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 # 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). case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) 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 $1 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 1 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 ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) 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-end: "$" # End: qd-2.3.11/config/ltmain.sh0000644000175000017500000060745011202062041015537 0ustar prudhommprudhomm# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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. # # 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. basename="s,^.*/,,g" # 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" # define SED for historic ltconfig's generated by Libtool 1.3 test -z "$SED" && SED=sed # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Same for EGREP, and just to be sure, do LTCC as well if test "X$EGREP" = X ; then EGREP=egrep fi if test "X$LTCC" = X ; then LTCC=${CC-gcc} fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" if test -z "$max_cmd_len"; then i=0 testring="ABCD" new_result= # 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"`$SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ = "XX$testring") >/dev/null 2>&1 && new_result=`expr "X$testring" : ".*" 2>&1` && max_cmd_len="$new_result" && test "$i" != 17 # 1/2 MB should be enough do i=`expr $i + 1` testring="$testring$testring" done testring= # 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. max_cmd_len=`expr $max_cmd_len \/ 2` fi ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done # user sometimes does CC=-gcc so we need to match that to 'gcc' trimedcc=`echo ${CC} | $SED -e "s/${host}-//g"` # and sometimes libtool has CC=-gcc but user does CC=gcc extendcc=${host}-${CC} # and sometimes libtool has CC=-gcc but user has CC=-gcc # (Gentoo-specific hack because we always export $CHOST) mungedcc=${CHOST-${host}}-${trimedcc} case "$@ " in "cc "* | " cc "* | "${host}-cc "* | " ${host}-cc "*|\ "gcc "* | " gcc "* | "${host}-gcc "* | " ${host}-gcc "*) tagname=CC break ;; "$trimedcc "* | " $trimedcc "* | "`$echo $trimedcc` "* | " `$echo $trimedcc` "*|\ "$extendcc "* | " $extendcc "* | "`$echo $extendcc` "* | " `$echo $extendcc` "*|\ "$mungedcc "* | " $mungedcc "* | "`$echo $mungedcc` "* | " `$echo $mungedcc` "*|\ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$srcfile" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done # It is ok to link against an archive when # building a shared library. if $AR -t $potlib > /dev/null 2>&1; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("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; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. # Make sure env LD_LIBRARY_PATH does not mess us up if test -n \"\${LD_LIBRARY_PATH+set}\"; then export LD_LIBRARY_PATH=\$progdir:\$LD_LIBRARY_PATH fi " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "X$EGREP" = X ; then EGREP=egrep fi # We do not want portage's install root ($D) present. Check only for # this if the .la is being installed. if test "$installed" = yes && test "$D"; then eval mynewdependency_lib=`echo "$libdir/$name" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` else mynewdependency_lib="$libdir/$name" fi # Do not add duplicates if test "$mynewdependency_lib"; then my_little_ninja_foo_1=`echo $newdependency_libs |$EGREP -e "$mynewdependency_lib"` if test -z "$my_little_ninja_foo_1"; then newdependency_libs="$newdependency_libs $mynewdependency_lib" fi fi ;; *) if test "$installed" = yes; then # Rather use S=WORKDIR if our version of portage supports it. # This is because some ebuild (gcc) do not use $S as buildroot. if test "$PWORKDIR"; then S="$PWORKDIR" fi # We do not want portage's build root ($S) present. my_little_ninja_foo_2=`echo $deplib |$EGREP -e "$S"` # We do not want portage's install root ($D) present. my_little_ninja_foo_3=`echo $deplib |$EGREP -e "$D"` if test -n "$my_little_ninja_foo_2" && test "$S"; then mynewdependency_lib="" elif test -n "$my_little_ninja_foo_3" && test "$D"; then eval mynewdependency_lib=`echo "$deplib" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` else mynewdependency_lib="$deplib" fi else mynewdependency_lib="$deplib" fi # Do not add duplicates if test "$mynewdependency_lib"; then my_little_ninja_foo_4=`echo $newdependency_libs |$EGREP -e "$mynewdependency_lib"` if test -z "$my_little_ninja_foo_4"; then newdependency_libs="$newdependency_libs $mynewdependency_lib" fi fi ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac # Do not add duplicates if test "$installed" = yes && test "$D"; then install_libdir=`echo "$install_libdir" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` fi $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: qd-2.3.11/config/install-sh0000755000175000017500000003160011202062041015707 0ustar prudhommprudhomm#!/bin/sh # install - install a program, script, or datafile scriptversion=2006-10-14.15 # 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. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" posix_glob= posix_mkdir= # Desired mode of installed file. mode=0755 chmodcmd=$chmodprog chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) mode=$2 shift shift case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac done if test $# -ne 0 && test -z "$dir_arg$dstarg"; 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 "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg 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 trap '(exit $?); exit' 1 2 13 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 starting with `-'. 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: 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-writeable 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 case $posix_glob in '') if (set -f) 2>/dev/null; then posix_glob=true else posix_glob=false fi ;; esac oIFS=$IFS IFS=/ $posix_glob && set -f set fnord $dstdir shift $posix_glob && set +f IFS=$oIFS prefixes= for d do test -z "$d" && 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"; } && # Now 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. { if test -f "$dst"; then $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 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } } || 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-end: "$" # End: qd-2.3.11/config/makedist.sh0000755000175000017500000000144711202062041016051 0ustar prudhommprudhomm#!/bin/bash PACKAGE_NAME=qd MAJOR_VERSION=2 MINOR_VERSION=3 PATCH_LEVEL=$1 if [ -z "$PATCH_LEVEL" ]; then echo "Usage: makedist.sh patch-level" exit fi if [ "$PATCH_LEVEL" = "git" ]; then PATCH_LEVEL=git-$(git log --max-count=1 --pretty=oneline | cut -c -8) fi VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL echo "Creating $PACKAGE_NAME-$VERSION distribution..." DIR=/var/tmp/$PACKAGE_NAME-$$ ORIG_DIR=`pwd` export CXX=g++ export FC=gfortran mkdir -p $DIR && cp -pr . $DIR && cd $DIR && mv configure.ac configure.old && sed "/^define(\[QD_PATCH_VERSION\]/s/devel/$PATCH_LEVEL/" configure.old >configure.ac && rm -f configure.old && config/autogen.sh && ./configure && git log --no-merges >ChangeLog && make doc && make distcheck && cp $PACKAGE_NAME-$VERSION.tar.gz $ORIG_DIR && rm -rf $DIR qd-2.3.11/config/mkinstalldirs0000755000175000017500000000664711202062041016526 0ustar prudhommprudhomm#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2006-05-11.19 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # 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-end: "$" # End: qd-2.3.11/config/Makefile.in0000644000175000017500000002201311202062041015746 0ustar prudhommprudhomm# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 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. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@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 = config DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in config.guess \ config.sub depcomp install-sh ltmain.sh missing mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_clock_gettime.m4 \ $(top_srcdir)/m4/ax_cxx_copysign.m4 \ $(top_srcdir)/m4/ax_cxx_fc_lib.m4 \ $(top_srcdir)/m4/ax_cxx_fma.m4 \ $(top_srcdir)/m4/ax_cxx_isfinite.m4 \ $(top_srcdir)/m4/ax_cxx_isinf.m4 \ $(top_srcdir)/m4/ax_cxx_isnan.m4 \ $(top_srcdir)/m4/ax_f90_module_flag.m4 \ $(top_srcdir)/m4/ax_f90_module_style.m4 \ $(top_srcdir)/m4/ax_fc_etime.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/include/qd/qd_config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_ARGS = @CONFIGURE_ARGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETIME = @ETIME@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCLIBS = @FCLIBS@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REQ_CXXFLAGS = @REQ_CXXFLAGS@ REQ_FCFLAGS = @REQ_FCFLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_f90_modflag = @ax_f90_modflag@ 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@ 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@ mkdir_p = @mkdir_p@ module_ext = @module_ext@ 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 = autogen.sh config.guess config.sub depcomp install-sh \ ltmain.sh makedist.sh missing mkinstalldirs all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu config/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu config/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am 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 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 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 distclean \ distclean-generic 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 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: qd-2.3.11/config/autogen.sh0000755000175000017500000000043211202062041015703 0ustar prudhommprudhomm#!/bin/bash echo "Creating changelog..." && git log >ChangeLog && echo "Running aclocal..." && aclocal -I ./m4 $ACLOCAL_FLAGS && echo "Running autoheader..." && autoheader && echo "Running automake..." && automake && echo "Running autoconf..." && autoconf && rm -rf autom4te.cache qd-2.3.11/config/depcomp0000755000175000017500000004224611202062041015270 0ustar prudhommprudhomm#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2006-10-15.18 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 . 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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 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 ' ' ' ' < "$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. ## 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" ;; 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$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" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # 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,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$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 understands `-MD -MF file'. However on # icc -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 ... \ # ... "$@" -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 "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$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" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: qd-2.3.11/config/config.guess0000755000175000017500000012706111202062041016232 0ustar prudhommprudhomm#! /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 Free Software Foundation, # Inc. timestamp='2007-07-22' # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 to . Submit a context # diff and a properly formatted 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. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 ." 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 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@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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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@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 ;; 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:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-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-unknown-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 /* 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 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:*:[45]) 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 #include 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 __LP64__ >/dev/null 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 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-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*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`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 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} 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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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' /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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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 echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@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-unknown-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 ;; 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 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; 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 < # include #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 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 # 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 < 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: qd-2.3.11/config/Makefile.am0000644000175000017500000000016711202062041015743 0ustar prudhommprudhommEXTRA_DIST = autogen.sh config.guess config.sub depcomp install-sh \ ltmain.sh makedist.sh missing mkinstalldirs qd-2.3.11/config/config.sub0000755000175000017500000007772411202062041015707 0ustar prudhommprudhomm#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-06-28' # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 . Submit a context # diff and a properly formatted 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. # 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 ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | 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 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | 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-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | 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-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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) 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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -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*) # 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 ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; 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 ;; -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: qd-2.3.11/aclocal.m40000644000175000017500000010035311202062041014300 0ustar prudhommprudhomm# generated automatically by aclocal 1.10.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008 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(AC_AUTOCONF_VERSION, [2.62],, [m4_warning([this file was generated for autoconf 2.62. 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, 2003, 2005, 2006, 2007 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. # 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.10' 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.10.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 AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 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. # 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, 2000, 2001, 2003, 2004, 2005, 2006 # 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_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$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 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, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # 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 # 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", "GCJ", or "OBJC". # 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 ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" 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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} 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, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # 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_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # 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_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008 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 13 # 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.60])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], [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], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [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) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_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)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) # 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, 2003, 2005 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 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_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .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 # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # 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_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 test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # 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 ]) # Copyright (C) 2003, 2004, 2005, 2006 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. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 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_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], [AC_FOREACH([_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, 1997, 2000, 2001, 2003, 2005 # 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 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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 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)]) # Copyright (C) 2001, 2003, 2005 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. # 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 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. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 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_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. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} 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 /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_cxx_clock_gettime.m4]) m4_include([m4/ax_cxx_copysign.m4]) m4_include([m4/ax_cxx_fc_lib.m4]) m4_include([m4/ax_cxx_fma.m4]) m4_include([m4/ax_cxx_isfinite.m4]) m4_include([m4/ax_cxx_isinf.m4]) m4_include([m4/ax_cxx_isnan.m4]) m4_include([m4/ax_f90_module_flag.m4]) m4_include([m4/ax_f90_module_style.m4]) m4_include([m4/ax_fc_etime.m4]) qd-2.3.11/README.pdf0000644000175000017500000026754711406254543014133 0ustar prudhommprudhomm%PDF-1.3 %Äåòåë§ó ÐÄÆ 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xíœk“ÜÖq†¿Ï¯€r9“P îÒŒhеŽìXJâÒ–MY©r•]%ëÿWåyO70˜K²*_"ª€Á¹4ºß¾œ>ìÏÉ×ÉÏI^ðšYV$uצ]—´M¸ýó¯ÉëäÉÃÏÉ“w¿$Yø÷Ë;údiQÙ³~ôYÒf}Út»wOž½¤6Ëš"yù.©êÐÊo/ÿž<ü"Oó$O^þ”ì?ùHÿv/ÿ–üæefÊXYißH À^bì­0µÛß9$KԳ雴-œbæH¿(æ.ˆù&ÙÿËÝ"ïï…ëÕ!y›¼üíy†ó¼K«ª.§/š0¼›£¸Ìp^iַ픚ØÎ{ØÞMè&Sº°}uÿ| ßwoö7‡CR$û üÛ!)çµ;«]–¬Èº´îÖ0ÜöŸ, V`°EYW ‚MÍnØŠ`è¾Kö‚¨.û§@P%û4”Ý}x€·ý½‡†ì4ÉÞÛåô]¾,ó´jû »;é![1óØM1éƸ<¶—•ªÚI1+oo[ ï»Éë§ͱ_ñ‚²ÝD(ÉwòñBU>Óߊ9®úeUÏs…8Z U×lÁÈÃWmw6î(RtÕåpã³›GÕ¼€›ÛR9››6O³*ŠÍ½¼ÁF«{PÕfvM0»68}wHêdß7xô8nð«ðûIp“Ê?{úô×k¶™·]J„ª“ “« \‰ yW¤Mxjr´Kï?{úìéJÀÉš´ïË|Jx•ÍË/ª¼¾ÐkÔJü(¨ƒÛ1ü¾7[-f;b_Ö<»Ì°ÜˆÐ”£Y<^%T+„Z»8ŸXÁHYwiÖ‡îsÊœµ” |²rÆ eÂÞŠW#¡Ä¬jr¹m¡g1ŠNY¤C C³æBŠõŒTŸ?®ÿ›ˆm²ÿâ0~Úï*”¿ñeQûe(¹W ±åùaGrñÛPkmìúYhƒ‹2ö=‹~[í„ ôU lôÅIÀŠ·Xûß­Å¡¢(‰-žÉ=QÃÜ6xñZ¢˜ãâ~:·´ZOYmžŸêaÆz¸gH¢Z†=Qm˜NÀx9gÈË,mK$h>xÌ™¤óë€Ô}™Ö²KE¨úl„~Ûä<ÿÌÊ~›Âÿ`yvÅàƒÑ+Z“§MÉ«›däC•‰<3×âRÎìf™Ð-4œ“•MW;EfÆ*¾ûu”¬Úo!}½Á…”Ÿ£jÜé¿‚ò­ä›–9ƒ:m¬Çx]†¯`B˜wu>eö}á+h&ROÝ> 4«„Ì@}BœK[2ÐL¡‡¬?žꡩ0N¬¯z‰EkHxÂÈS¨¼²4ê9 ¡ …(—þÍa‡'>o¬ÍsLXÅøí²ªªIëºl§œN°›ñ·fÃÄøºËÒ8¶d[ ï¿Íç,f›KbLH†‘qdPx=ÈÏo+a©¹“u¦hYÌœ¬ìI cö&RÞÂB‚§FbÎél5à¨`§¡xÆ~zs¸þÝb¦PÆ(©Ûòe+Ýì©10™ÖMM&ôĉe7áwc}rºàÌ×–[§v¸ÖB¨¯â^–UÚfòñHÎ9^[®àP€×édwf¯àõ‚€×Uc2º[9`Vf°˜™¿}}Ø!^_‘y,VUÄ3_p«AÈ}´J6Œñ ûÔ ®ð´§\±,å¾ÿ0åÖØš2ì€€Ž³ø½,tÞÔi×kà‹¹¨u¦„µ Ü &´à3’âŠÿG~ :Al¦Õ5Ä‚#Ä„d('©ô)^_>òq °¸‰ãÛ\ÝùC¹»‡U¸¯Ûv„µô¡Õ%¿(Ó2Ç’?ЉÈ1êJ«ÈçW[·FÑ©ò”Aø¸¨|fáâ¹ß+!;ƒ©‚¬Å ƒÑà0­‘•„¦;¹#ø~iõëùqÓ3Í"Ÿð81’gkF"Y‹>Dݘç£ê1$|¿â2ŠXܰtßâžDte l%bhü­•˜F,M$Ãü£ÌuFÆßmt[K Z<…¸qæSÒqgR¶àJ ~ûñ7ywÚs™mS0ç,º‚Ä.’pñ@îåßί=†€Ñ H•''BŠÍ˜úÚsPÏP¯1$5ï1°0| 9T{2T”Ëî.ÂešçU¹AØËy»'o´u>Ø fzi-Zt²%ƒMÎbÑ™UÒ8|ÚCfמñC°bh&®0¦KðKÍë–¦QõNsVÜ4îg¿¿"„†ÖÖ“ÌÎŒŽÆhi¤òÊ2oÜ™7Z#ã}ÑÔ^ueau¢ѳjR'Ø¥Ûr,(Ú‚XÀÈÀ‰—Ïæ¾ÜÚÞœÊ æMx3Ì[ï[®zs¦?Ü$¬Quš W^o]_Ó`™Ó²ìÒŽ]ŽSVësjœqÚˆÔ¥4ÓXQF w{ø7Ĺ L°îHßÔ¾C]jÙ¡-uôþ0¼Ìi¥ÕߢÇÛßÔ (ÚŸB­!÷ßíÁ1L¾ §è^›£ŽYæ¨ú,­›Hé—÷tQz& €Fl‹€ ,AûT⬇]+|ŒâM¼¼™érõv^£øaÀ-vÚ Óƒ“wºµj4§îñÚk¼ŽœD2LZÅ*f¦˜ñ& Ì9ð*/”îÇÎ‘Ý µ|Œ3ŠÚ/]²—YölÜçÙ-2‰2'õbSeJM9ç¦-__Uz"C<¹Bp`$;ÖVQ)ÿ8\…¿ j`ŸU“À¡DïX;–PWti´ù$âé Úô–ÃL)noÔPL0mC‹æðz£)~ƒ^e_z-kD¦Ï–idùÛöi_|%Àä Â/çµ¼ªÙ…¸AR/¿—A1-‹¾±·Ÿ3„ù¼cm+ŒÅ¢¾CéA”hXÛ¶€Œ{Á®-·³ô¾Â4#D‘UÎô–uâ5¦[&«uãL#Ïé„iš¾h°yúëZ†ëgÏ>ûã3Œ7bšÍöøÀJÁRGÕÉK¤ç¤ã!BZôÔôdŸVæÒTis) g^Žt’ŸgL‰NsŠ&RÖù$æÌrãÒAÉŒnc¼І~Ê$ì÷msù6Þ… 9ˆ¼)¿B38ñJÜWŽŽ×ðûÍ*è|_jµÐÊP§( R‘~ç uVáIdss@³N¦´º±  Oð_ìÆ–¬Jï5d){m žta·Ê›k áÐh‰ü\%?7˜†„rƒ°öß»0˜AÀéÐsYÂ1‰8‘øqYÂif'hq`I±Ì2 mÈÁ¹åEðw»$‚¼ –Žsø¦ØI«g&½’DgC±Û¿NÔH->vKb蓈eø‰xiK¤Jªñ¶Àg&êIŒô7cf"-ÚÓ@æ†å<3¡LFÇÍ;y•bT³Ì$Øï1Õ ™ i¿,ä13‰…œÌKß+3‰©ýfbzEï3“â#å%؈mãä OØÒ…ì„ó5S–ÑϘsSXææÚ¬#åI;8SΈ›ïÅ™É×Ì7oµÜÏY{ËÅ“1k ³“ÁáÅáa {ÃÄòO?à»øñŸŸ>}ú—w„t…TKh™Î¼Ý--XBmò²Œ š8Þ,ÿQœXZ:+ê6ÍJŪ)Ú§›}#Q_x¹Â ©¶)û¯GªçtZ+èrì"-ú‚¬oÊà­Ía5QåXXZç# b%÷¼á<çѲd¿Ìa5I'1 ^Ò³ŽÎ[¶äÕ×’²”Zæ%‡qÜ‹‚_ “!ª§¨:šu§»ä£aù¶ôã?B– Ç¡Y;NÕ*ìÜçVíöŸs#r¸V·{vËU7 / ÝÆ*LUÝBb¶Óù¡åq­Èjø®Q_$Ëô,È([ï:&%§æÙaûà%ÈGf‚¶_Y¶5ƈ¯-]³+|Úœ(´ø@ä‰+”Â&É×a%JÊRéGhUKi‡§ßsCI(Ž2AÏ­´2ëåDYìó|Jž”¬ªzô¢uU‡u™hÅdT-ô¬z¢Î×ò9P”Ïq»9ÜOPãQµÙzNà5ôÉ\P—O ì]sˆÃÊmP%Ë=Ò«©Ú(OõE°³uuå-ÇuÛ&q>9íuK¯ø.#š˜/èk¶9°®¯ ÙwΉĶa¾Z†wC2öN.Ï îHwðtC-ºá(Ÿ²GsGŽÌœ¢&ø¯ªD…Šž¨}쫉 Ï(&ø£ß ›¶ýI^DnƒÂdBw¦M5ã…Ž³‚шœ?ù;^àóô÷ºUí SÊ>o™sqw–7ÊtWÆÆ²¬ú¬$Öé%:|oɹƒfŒ¿ïcð pˆ–PÈpQÊ—øµ:žåg•è²ä‘ß`OÆ,”\ƒ Šp®åSö8Æ£È!Uض€î-ØÌ®ÃšÀc™²Ïš5„€Â7†ìïdQ`9`‡š5·61n?<´]Er艖FñmRg§b_! 6ÁÒÊ¡ÜñALÇÀ+±›cyOX>xøš‚œ 2«ú3íÌiýM(,ÃVd|TÂÎÄý°ñ½@tãkŽÌ˜:.† §Xšµ BS+AbÃgehô.\XU?Ñ¡ëì9–¹õiÝ‘_ôžáJtøäVdô%óéæPÁ—ã&Óö…£±f \£!4ÄpVÜ>„žÇ*g…©« bdÌâä׫@,çc‘ñàß:$vç¹Öíâ͇…3=ÑæƒB-žé©Íq*@³ÓŠPCÑê³§?Ø£Â!-®C÷ü¨6ŠþíŠe¶eÏÃæ°Òé<Ûr²é•ÙïEAfpo¢´’K3DØ7Nj XœšÛpi”Fyİ‘5;ä( Baš#,Ïó›UÙ±$¶~T?zÅ„¨ *„ë`oÆË t*£²ÚÆý º@žlØ—,ûådü#š k¼m$Ÿk8C‰¹CÖW)f²ÅKtmgË a\öpò ð@ „WÙX'\òÌ|ÈôwÒæ®Cwy™¡@?¹Ú‘¤Wwp.9™€÷×˽hkïÅD忯åb“o¡‹éÍZ´zOE‘kPø ŸšyÂ-ôZ¬AuÏìæOÐÕur:Vv_³b}ÁNR~aŒ¶‚({»àd ‰Å€àj$ ’Â9m½•u±Vo¨wíÐ q!ŒÆÄõùчý´hYÁ5Þ·e‹cbÎqó6cÉcBM¶¶iøZávÁ Æ‘¥òOmdcHã+v -pAÌÀ¿/"AVø;£R@$½ÓÎZcYü5ú Ԍ¤±5è‰õ´\ à Ì•¼ÂÖîW¼„Fpí]Vc½«É*¥Õ»ÞÇ$µ{—õ·ßÞÈØ—!…Õ_LJ?„`dŒ¤¿FëÊË–[±eí`8yä¯Sعѹ7¬Ú€1®k9:ºæsdü$®Éå*Ž%F$l j _Y8ò¨´Ò êÒ«BN\Z"Ä,ÀX7`U°øÆã>ªR6g žfVß‚‚3ÆBX&y´h °L¼åLQ ä¤Ä, Pª˜#ó²þÖ̺`GÐ Í,4ÄÀ’Þ%hWk©ê#…·Á¸ñv1(FNÚZY5EBüü° ÏâãŒq·P6Τ­å š”<¸ìC†ÁMî‚,R27/„ ªàœ6—UÑŽ*ÇFH‹etò›Uyk§*¯£…Ui¹‰‡@=†ª½¨ù}ìºluVWf=Þ8 qq¡yíô@É\±áo µ£o_Üßÿ…ó­KÛçg9;0ù±»`§nÈZN˜Ü”ÄO’qKƒUÚ¬Bö1c‘1Œ®@Ïß/«›¼>B²†7sLé} #3_ß [Öï7D†ÃÜFKç–gŒáÃr,b“2=ä—¹bÞ~“ãZ”ä&«¥…¯‚[¯Ç^èOš³Ò[~EK+ôðëô=haÚ4vñ2³”Š[N×·'ˆ3îYÁ¥Â¦·2µ#NË_}²«¡–ð³¬o¦þÊ@:øè7•´ƒƒÞ S¢n¸ñYÌAA­†"Š7¢„çÇž’^½î xE<Ï–º´ÅÎç‡xÞÌ(.gý ”oa^5"Ú`rLûÁöXc#ÈšÁ- iœA2HsÙN!qÂÃPƒúˆùÓ>€Àó?¡§½´è”«GÈDÞŠ08ªí °GþËõH6ÂfvWᣜV«1ÒåÅDçã‡D–ˆ~“õ“Äx¨Ó’)–¥yn^¬< œ§ãƒL›±Ø  Þ]˜3A\C­Û ¼õkÖT–ÌKia¯4Æì·ÌŠ'xÖ2P:SVv¬qÍàšÇ¨hé/XÁR¨+8LØeM3§§Xµ6/;5™Q .‚*4'³d®Hˆé"¿¿Sà>M±RaE!}—Å.k<µ™0[lnY-ê¤1´„Æô®79GÈOÔÀ¨çÞÞ\ÎŽJ:xÓ]‚ÑF&&Œ©x m᪃“‘Êé ¹ùÓÐ]†uŒëžPjF…Ñ9Þ_ñ 2°½ ŽÄ§m£?z:žMçO^ü³xlË5dš'XQü“ÒÀŽ·“Jr…KÄ„<^–O‘Ì—f/¬ <èŠáSS½ÀÀ—YΙÿ5}Í3uÆ?0'É;>aç/æÍém7iäF:ÃÀì×Ï٦熄‚Š[/R[R‘#!uQfdüaº $ïÑÊ äaÒÅ ôÏ•ÊZÆÅØEÎÎÐ2^L4@?×ꨊ4*Óï&‡tztcI6¡÷cgFܨzë·ˆƒM#ê´à°¢3•U©HïÎ ÍUº5ê}ý¿4j°Ô endstream endobj 5 0 obj 5883 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792] >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream x–wTSهϽ7½Ð" %ôz Ò;HQ‰I€P†„&vDF)VdTÀG‡"cE ƒ‚b× òPÆÁQDEåÝŒk ï­5óÞšýÇYßÙç·×Ùgï}׺Pü‚ÂtX€4¡XîëÁ\ËÄ÷XÀáffGøDÔü½=™™¨HƳöî.€d»Û,¿P&sÖÿ‘"7C$ EÕ6<~&å”S³Å2ÿÊô•)2†12¡ ¢¬"ãįlö§æ+»É˜—&ä¡Yμ4žŒ»PÞš%ᣌ¡\˜%àg£|e½TIšå÷(ÓÓøœL0™_Ìç&¡l‰2Eî‰ò”Ä9¼r‹ù9hžx¦g䊉Ib¦טiåèÈfúñ³Sùb1+”ÃMáˆxLÏô´ Ž0€¯o–E%Ym™h‘í­ííYÖæhù¿Ùß~Sý=ÈzûUñ&ìÏžAŒžYßlì¬/½ö$Z›³¾•U´m@åá¬Oï ò´Þœó†l^’Äâ ' ‹ììlsŸk.+è7ûŸ‚oÊ¿†9÷™ËîûV;¦?#I3eE妧¦KDÌÌ —Ïdý÷ÿãÀ9iÍÉÃ,œŸÀñ…èUQè” „‰h»…Ø A1ØvƒjpÔzÐN‚6p\WÀ p €G@ †ÁK0Þi‚ð¢Aª¤™BÖZyCAP8ÅC‰’@ùÐ&¨*ƒª¡CP=ô#tº]ƒú Ð 4ý}„˜Óa ض€Ù°;GÂËàDxœÀÛáJ¸>·Âáð,…_“@ÈÑFXñDBX$!k‘"¤©Eš¤¹H‘q䇡a˜Æã‡YŒábVaÖbJ0Õ˜c˜VLæ6f3ù‚¥bÕ±¦X'¬?v 6›-ÄV``[°—±Øaì;ÇÀâp~¸\2n5®·׌»€ëà á&ñx¼*Þï‚Ásðb|!¾ ߯¿' Zk‚!– $l$Tçý„Â4Q¨Ot"†yÄ\b)±ŽØA¼I&N“I†$R$)™´TIj"]&=&½!“É:dGrY@^O®$Ÿ _%’?P”(&OJEBÙN9J¹@y@yC¥R ¨nÔXª˜ºZO½D}J}/G“3—ó—ãÉ­“«‘k•ë—{%O”×—w—_.Ÿ'_!Jþ¦ü¸QÁ@ÁS£°V¡Fá´Â=…IEš¢•bˆbšb‰bƒâ5ÅQ%¼’’·O©@é°Ò%¥!BÓ¥yÒ¸´M´:ÚeÚ0G7¤ûÓ“éÅôè½ô e%e[å(ååå³ÊRÂ0`ø3R¥Œ“Œ»Œó4æ¹ÏãÏÛ6¯i^ÿ¼)•ù*n*|•"•f••ªLUoÕÕªmªOÔ0j&jajÙjûÕ.«Ï§ÏwžÏ_4ÿäü‡ê°º‰z¸újõÃê=ꓚ¾U—4Æ5šnšÉšåšç4Ç´hZ µZåZçµ^0•™îÌTf%³‹9¡­®í§-Ñ>¤Ý«=­c¨³Xg£N³Î]’.[7A·\·SwBOK/X/_¯Qï¡>QŸ­Ÿ¤¿G¿[ÊÀÐ Ú`‹A›Á¨¡Š¡¿aža£ác#ª‘«Ñ*£Z£;Æ8c¶qŠñ>ã[&°‰I’IÉMSØÔÞT`ºÏ´Ï kæh&4«5»Ç¢°ÜYY¬FÖ 9Ã<È|£y›ù+ =‹X‹Ý_,í,S-ë,Y)YXm´ê°úÃÚÄšk]c}džjãc³Î¦Ýæµ­©-ßv¿í};š]°Ý»N»Ïöö"û&û1=‡x‡½÷Øtv(»„}Õëèá¸ÎñŒã'{'±ÓI§ßYÎ)ΠΣ ðÔ-rÑqá¸r‘.d.Œ_xp¡ÔUÛ•ãZëúÌM×çvÄmÄÝØ=Ùý¸û+K‘G‹Ç”§“çÏ ^ˆ—¯W‘W¯·’÷bïjï§>:>‰>>¾v¾«}/øaýývúÝó×ðçú×ûO8¬ è ¤FV> 2 uÃÁÁ»‚/Ò_$\ÔBüCv…< 5 ]ús.,4¬&ìy¸Ux~xw-bEDCÄ»HÈÒÈG‹KwFÉGÅEÕGME{E—EK—X,Y³äFŒZŒ ¦={$vr©÷ÒÝK‡ãìâ ãî.3\–³ìÚrµå©ËÏ®_ÁYq*ßÿ‰©åL®ô_¹wåד»‡û’çÆ+çñ]øeü‘—„²„ÑD—Ä]‰cI®IIãOAµàu²_òä©””£)3©Ñ©Íi„´ø´ÓB%aа+]3='½/Ã4£0CºÊiÕîU¢@Ñ‘L(sYf»˜ŽþLõHŒ$›%ƒY ³j²ÞgGeŸÊQÌæôäšänËÉóÉû~5f5wug¾vþ†üÁ5îk­…Ö®\Û¹Nw]Áºáõ¾ëm mHÙðËFËeßnŠÞÔQ Q°¾`h³ïæÆB¹BQá½-Î[lÅllíÝf³­jÛ—"^ÑõbËâŠâO%Ü’ëßY}WùÝÌö„í½¥ö¥ûwàvwÜÝéºóX™bY^ÙЮà]­åÌò¢ò·»Wì¾Va[q`id´2¨²½J¯jGÕ§ê¤êšæ½ê{·íÚÇÛ׿ßmÓÅ>¼È÷Pk­AmÅaÜá¬ÃÏë¢êº¿g_DíHñ‘ÏG…G¥ÇÂuÕ;Ô×7¨7”6’ƱãqÇoýàõC{«éP3£¹ø8!9ñâÇøïž <ÙyŠ}ªé'ýŸö¶ÐZŠZ¡ÖÜÖ‰¶¤6i{L{ßé€ÓÎ-?›ÿ|ôŒö™š³ÊgKϑΜ›9Ÿw~òBÆ…ñ‹‰‡:Wt>º´äÒ®°®ÞË—¯^ñ¹r©Û½ûüU—«g®9];}}½í†ýÖ»ž–_ì~iéµïm½ép³ý–ã­Ž¾}çú]û/Þöº}åŽÿ‹úî.¾{ÿ^Ü=é}ÞýÑ©^?Ìz8ýhýcìã¢' O*žª?­ýÕø×f©½ôì ×`ϳˆg†¸C/ÿ•ù¯OÃÏ©Ï+F´FêG­GÏŒùŒÝz±ôÅðËŒ—Óã…¿)þ¶÷•Ñ«Ÿ~wû½gbÉÄðkÑë™?JÞ¨¾9úÖömçdèäÓwi獵ŠÞ«¾?öý¡ûcôÇ‘éìOøO•Ÿ?w| üòx&mfæß÷„óû endstream endobj 11 0 obj 2612 endobj 7 0 obj [ /ICCBased 10 0 R ] endobj 13 0 obj << /Length 14 0 R /Filter /FlateDecode >> stream x­œmÜÆ±…¿óW0‚ìâJã!‡%+HK+úpu%ÅŠµúàk$ä¹þÿ@žÓ§È!9$gäYØ —ýR]]uútõËèßùÛüßyQòÿ¦(·Û2¯ÍæpÈ›}zýÿßòòÿË¿ùÓ/Eþó/ù6ý÷ËÏÔÙnÊÊßú£ÝæÍ¶ÝìÙÏÿÊ¿{OîvÛîò÷?çUJÅëý¿òo^›"/ò÷Ï?å7¯_¼>ÜæU~ó.=_¸ÍŸþÊn¾¿¥ÜÍ£Û¼Îo\êÎÙNzv›ïò›§N–}å¤êyªÿò6+;)/osþ~ãüh+J»&°0Ww+•3ön3”ù6•²0—]k^Mþ×?Üf4ö6õ©¾ÍÔYËù}’é ÷Ïϯ©ˆ€QÏ;3Y)kþÊÂZkB;Ÿó÷Î_¼O{k×î6»¦®Ãg¹}6òT6ö”œðþŸKÒêMÓ6íXZB@ ²‘Ü|,¼øÞ½°Ü—jÔÛêþ>öyÝÅ]Õæªmç×ñ្½)Ñ%›ð¾Ýoš2ÌAŠêp„?>M˜@•b›ßš&˜Ð^?¾¾Í÷ÉÍäDêzz~Èó>ûûÛŒ¿é>¹ô´ÏÅŸG–çìçÆ¥,k©qàà ùSznoó6¿ù& ÿï-N†sY—›]ÑòÞ"ƒzÍ‘7¿YHY×›¶)Ëv¤Hà,A|÷GzˆI°+£ ºÜG:×ÜftŽþön=éÊn»—#÷Ç®?Ûê¤ù êAçÛ¥ ZE+ •ÕfOWǽ\µ=[Te³ÙVMç£Í¶õ‰Ö§cêÀˆx‚e8–3¬Ù&SVEb ª/ñ£üJV…ø[â‡HÄ ’)ÁÍ®½0 (Â/“6V%ô ‘Ÿ)¢13&†T=ƆÄDnÖ!;”"{ò’.CïdcÊc‚ÚªãÐÞîÛ ìø­ô-ÒDÔé‚JXU¤gØ‘—ôé!Íïø\”ÉëQ¼±·2¥TŒg^(%þÁ/²é¼VU±õ?Òj~,C+ƒ¿¹Í–ÆrUT¬¢ªö¤+6í{¸jÓù…xU±|Ýö£èÊáÕ‡íFDtUhÈ´Z–;†¶„]©S¢ˆPª 8í:îR¼ÊÊí|ØôâDš"l ùWX„YÒWv«‘>®¥8Cž'ënUÒlÌË‚ —˜Á)B/âÞ°Z8¶!R6çèe‘å…}ʃïc‰H«…Äȵ+·F ‚:Ö0 D[ïB«¹ÆFåÃPQ{¤Ôý½&ªÞ¹‡!:Ú¶”Ð'ª‡ÆŸÖè°Ú1 WMñ 8öµzõº¨’öèµü;Aÿ‹÷ºãÉIó{],àZ†B¿s%¬‚&Í~ªƒg$îå –H‰b!Ù9±…2Ƹ¡HÑ[æ0‰AH†e¹•86Ÿ©ùÏdÀN˜Ë.æèùö“êsí§½µ‘²À1ìî • ñNŠz•d1×vK6‘sarW÷ªQX]ƒü‡™ _W:¸’÷‘S›6PSì Ûí%u„cFŠ©ó=!Ù´{Š\1TG®bŒž'S-\EE¶Q;51%Šp€W9î(Ñ@h%‚’ðÔ€úQ:‘õ¨Ù(*t§Åüj²ÜÏ&]ïîï»Í¸ ­âbWÔ›-»®vÕÜ#X”íæ¶+êb¯£´¼1*V>YlÝßËþ8=<$ãâ›ø‚u”¾9ƒ ‡åT^ÂEÚ¥‹Æ­.áâØvT —qÑ7«ý'*Œ%Oû“ŠÐŸAü±†GneSoª†í¡AW÷Ûú=úL‡~Si-›QlŠŽ¤]ÿg8çÿ€É}âxôƳ_`iàJ÷Ï¢µª Ö’ ×ínS>‹UívÃfë¯û³;C7ϦK«‚¶eŸ´9´¹GG±ôÂú|r`ú¤Ø¢hLœYpš[²¡5nbuƒ—VÐÝáaÖåŒos!i‹©ElgähÀ,n^#gÇU@6n/’ä:¿¥.$}¡ v·gV(R¨©º“nß0¼äÇ㤛š_4ð ÞA  ¢å‰§—‡yÁîÊ¡àv[×xDÀ[V^gö‹oþ í,Uµ)ª-ÆQ§®ŸÍvû‡£WmÖcãêП>jy>wMjpg¿›~µ×Û;3è°-)vÀC2SU—¡%€SžÚ'þÀrd8Ųý´$LJD¼\ãî•[·ȼ×$–¨nÝ×Ç\ÈÍZä°qÿý•±sA°†àæÃ2`vÛ‚ëœËÙ’—xví\nË*¿æ\n$MTz~J”ñLs<‡ÚèâMúTö—šD¢di*§ ¤k'-JÈÂÞ4í¸—jÏpÈŠ-Úr³­«r„ª4t/;‹Öü¸[êÄ”Žö¤áh©70ÆÜžÊ§™‰‚¿£ >ûÁåÿ‹Dd,kÍ)¡†f7º1ßžóØ<® ¯7q`з3n-ŠK8í+â ‚yxâ ~é%Ç3Ëýª91ÞW-TÖõë̱:¹‹wÜüí&arÍ>ýô~ëQ$X¹zý{¥¤D“ô¨\ëô“µðS0•œ¤ ×®ôÔ‰ñárpXõ“EÌB!j~Î*Ù9möm=îàhY9¡@ä­Î¤e™RÏØ;©µ4‘ÊÞ„œý%Æ3êx♟G˶ñÍ3é#Ž/Îã:»ùË?a9Ö÷>\Ä–ŦÄaÑ)8—0¿.ñàx ØÖmnu.!JÚ^šO1OÉ ¢'WŸ[(ª[\x¡®Ÿ:°Ç‡7X‹xÎÂ. «ÙʺÙ%]ëô \a8S1{ìS2¶¥#-¸†+xÎóDf/9ýÍ¿œ3]³wûpºé 3Z‘7ÖÙÓd§¿<íBîkº‹ÝëàÕ~ÜqE7kµ\Ñ Yé}–Ñ¡x¦æ*Zž¼àǬÝÁξöõHœ€jšþ`•G4¥Ù"}fi6´Þâ ñ_Zt«èšRºÂ'¬Ó›¤ýQÈEãyæÇ °K®’Ž®zíÚìLpÊDõVה鲦K0¦Ù;„9(É:/­Ã:šAnÔ,Š——Xè^åéa¨ÜêAdûµáÍ Ín#þš…v©i0V5"¿™û²“•;¶šîð­ô;aDNQ;_ \FKòà“04F›8ŠâðP€¹»%ŸSåE|úY5pŸÂ$>£J’#‡§ã²ÈcÄËÑñbˆ,÷­äj",Ë <Ú0á]6(DÀF:Ðâ+õ4›èya“Õ¡YÖÌi{‚›Nµî¤¢>ý™ÇdòƽŸ±6dSÅhŒkøÆ@º8€yôå<òL8¹Ù€úqÌ‚…‡ƒxbûb›ÉÌ’§viÉ|`êÓI ÅaÄÚp5n32¢>ÃRbÜ€Ûtü7^<ÊræFí.»·Ú›Ã޵–—ª]Å!Ôv7&Ÿý§Ç\r½Q oLJˆŠa€mȉÈ?¥õ›‚=æ×@Ÿ0¹g´£ˆFÕ ÁžX\ò;Fp+4£öÕ‹F0v¤¡=I(ÊÓƒTòó5ÓÔzÍG¤EÍ©a»;ä#íê•ÓócÈ}ÿNƒBÑä¥E£Â”9‚4ik„èå¬w¦O–ʪRPY_ùe*MTƒPñY3½Ôqz‹Œ¢„—Ôs~©&!÷÷þ ™Z¢K´ê¬ЬÐÏ%>J–®þD™±”‘%8F9Ñ= RǶ…:ìþ^!EßÏHN}ÏÌÁ4UïÆÚZsŒÒÉÁ¿Îb[]Õý",`Û÷×aýý2mNN”‰®õ³£î6OZÂï÷Äüè© º »áà£Á É S,édÈ>KsZ ÈnF+ωD‹JdmÐ!J™&4ž2,bˆF@„Žt…¾Å('_‘õÌuq’Q^C"8u­es•vUuàgÕ£]û\zeq=³; UdÚ¥J‘b‘N¼bÝ·eºœ†‰yæñ_ÜïxÑ€§–õ§Œ³ÀeDöMAÜ{Ôåü³$ ÷=:/%Ý›>ùå¯~èz”¢)jÆ.§1C¿±Ì¨T•àŒM„ P€  šÀ/)Œmã†BW¶¥ÀN¾§NÙ\µ¬LÙ\¨;ßéó‡E \ÂO¿ý»?Ýß~M°ÀÎýø¡ãq¤ïÍ©ÝuÅC1Tc¾?‰½o$pÏÌÜɉCAú1»I~¦…c;Ùnæn„U’3… ûwêìÞ"'·°vi·—'›d°x84ݼ:KC_w¹"ÚŒ_dë…%gQññî:à…¶†K¯ÑGÚo4j&Ø9±TA¸ßÔÜüèõ8Ù[›0Ù*3rP¹,ˆ¡?ü‘Ôª ÍÎ2_6ªl˜/Æ` ‡g¸Dð3ïXð·‰q¯Ú¢î¹(\òŠ‹§7X,¨)ÈÌÅ+CÛÌÚÇÒ\bZ5Ûr5ûÎa˜+÷ùoq5Löûò§óØ _Ÿa*öè\îNÑ”1}uZ\…<f(ha(MÀ¬iùWfBZòãyÒò 5FU¦»qàhUœ,¢*‹ÙñrTUüöð°ãÂêÈz#F›ØluÜ*4ââéà¦ÚÜaÆD"^øIn`¢¿ðÙÃêt2„Ъ=öPQw&ˆî»37ŠÏݹHNþöT)¡s 'óüYfat'ÓSŒÁßÝÙ¦Jw†1ÜE„—àÑÛîd2(‰²Ó¿ñ1Ôu¾ÏFÜîÃÊ…NÏaaÌ0ôù‡ .–ûP4ûMÑò3â"µ}-KÊq]'z–¼ÔsòÖ¼çô}‘çRØ‹8ÛADA<¬p‰-“–UŸu ’h¢ˆƒo–Ͷ«ø™VÍmê‡14ÀêºÑ¿„5¾ÖŽ5a79üôøþ–m ÑáãáÞù²Z„å¾°}éßàv*\»ÞQ—c9N±ça Æë`àØ×ËÞ?‰ñî—sŠ >Ús6!ˆ&‹Ø£œ_òíø‡qöUYÌõlmÚÆî΂´à—_Ð?ÖkzI+âÝS8ðQ™$Ó åb'ܜО†rûýãèõFÓBÈ׆ eé™Zcï`àÿéÆÛ¯6íÚ<“xk³›6\ânöúgÝfvVæ“·ÿ‘æÂü endstream endobj 14 0 obj 5056 endobj 12 0 obj << /Type /Page /Parent 3 0 R /Resources 15 0 R /Contents 13 0 R /MediaBox [0 0 612 792] >> endobj 15 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode >> stream x­œYÇ•…ßóWä4d¨z,+·ZÄÑŒá¡IµÁy EZ”›=ƒ˜‘—¡YÿðwâÜÜ*—*© ••w9w‰Yýcþ:ÿ1/Jþo‹r·+óæxØùaŸ.ÿøßüÛü‡üéþTä~ÊwéßO³Û–µïõå´Ë»ÓvÌ>|Ìû†ÖÝî´Ïß|Èë&õŠË›ùÓŶȋüÍÿå÷ùæÏõá6/óÍÍmÞä›ç·4l¾»»Íò7¿Ï~÷&‰7fU”õéŠ`˜w ‹¦^f˜µ šÄé8íÃC¾¹çÆ2°?ºéý{_‘LOëÛ|Ÿo^28“˜ŒŠ†èþâ6?vÏ^%~í™oN‰JŒ¬n³:ß·y•o>»Íù _%úæò•‘Ø K¸,ƒUžvÛb·;kÍ&€‘½ù[> }y*·UÓœ&Ðïêê èoÐë Z¢Ø°‘'@*œŸv]@H ¨FT|:®‡7ïn³'a"õ}Æcìö¥ûþÞ@Ì‹^í÷±¯{Ñ3ÜtŒ±î¾?í·‡ÒÞ—ýR:E¹Ï÷Ǻ÷á]uÊ.Íë_žöÍ1ž`5Ÿ=Ãó #÷G.4Æå/~†ø“î²Mº`?»1Ž»¶–”}{ÛÉH˜08ßaAÛ^N;o«òXn„ùšy€ÔŠš5CŠí®…xžN^dd£KtšãvwìMUp3cªlœßžâœX^ַض§¦ÁÎXVWxC² ˜FXÐìPÖ†Ü v_Û^7aÔ0ukñ“Áä¾E‘mÈ¢²1iINFZÒ%Â4x’˜døéB:‡|7 Ñ;KèE Ú$°eµ#̤C9˜ŽLg£¯ÄŸŒ"‘ )ÉÐBe$æQê­[Ð;²Úã†$·hq7¥¸–@ ºo³~ `ðèu›üÿùšzuQl˪&2ZOQc²-ððËê½DD°†) *¬¥)fÛ2“]ó>5»+š#™útÜÀ€e·V’¬ÊŠN+óâ¸&¸“ù‘-.@ wd@hÀã{-\épþÜ"*(ûpãGw'DZ7II“;1Ê-Ï’Ü.›Ñ€‚|ú‘™S"!›‡|­i©iAk“q{1ã @ ߥ~iZw¾3ù!ô£Tj‘¶-Cmë@âæ6––êDC«c=ËtçËÞ¼ãîù-É6° uꡈA!”3Usèzuž’Wõ±Ø6{ªNûË ÇÖ³9vPCfÔï`§bNÔC$\ÔFøŽß¤Zmv uÌ0Jþ“¸ÂèRmþû? ¼6ÛTå¶þÙˆ†Søÿ‘ѳÍÙö«ú¨$ÞWÇ2ß‹û¾]3Q(›”àoè=ÇßÞþ55à£x*1Àç°n&óhlÍwwÅ U’š‹äe;'ÒC}:Yî!j¿|ébÝóS³Ž²û¤Ámã& äe)Ë# Ž“¼s`Û¥BB)ló/Ë.RÛºaµ1$&Ï+®Qù½ÐUÌ`çûÃQXÙJ6" ŸÛs¾M†£¶süÒðÛôä7é+3øƒƒÖƒv¶ñ(üRy'µ¾ƒfu§÷·éÀz&a4IŠ¾Ì•|'ƒ î̤òïY-7J59œ‹þæã±þt·’°/ŵfœâ´e~ì…»ùyÿ¬Jkç}Å!¢)¦ÉFŸªƒQL™Íšqƒ\‘ðëLóB×9 Ú»‘D#±£[´g5(|YÊœŸùâ¦V<ù6Òt€(&eîÁÔàñ¢ÍÕÐq'ófÄH®øúa·=eÓãøØeI<ÙãQˤæTm›Xo¥í…ëj㙥^$üIs²³ìHU¡ËêÒó ù™K%xÅÀ¿x|ðh9ãò*¿°›lOx„é®_*IÖ¶ÊrZ‡1Pq¨ë¯¸à•/ßú!,;KOæÜªÚo›CuÈGÀ^•Ö2í7eªšûr_Œ©)¯­mÊxÝÅ þ@B‹Õ4\íU$0E/ |6·ÉÕW¦ê戯G¦8×{˜.‘ÑNÙ ãÌ­ ÏCã§žb‘³½}E˜bcO¢¤ÍÎl ‹ò´Ý•€¸¦Ìµ’‚+ë›ð02°|JYØoà«R!*åh Ÿ$¡<”UîîoÈ(òѢĤ}e¦¤GЧèÜ2ÛèÓò^S¶¬KÆì‘Œ´=·Õ LÙmÍäM­Í͓մiÓÔÅöÔîþ\vó€ÿ0çÉÙ`ÅÌM±Ý7¢31 ;ÿRÍ B¶.:Ÿ‚³lƒJûÇÀ(2Å^›Çž@qwÝòPÙg#Nt!„ðHw”_ãÈ@놀ËÃv_TÇ‘ Þ¶ž.Q§á{§rf[Ëÿ1l,Ú æYª:Ä•ãKªlE¤“¬D aY)óq˜£È('kàø†¦PXËlË äËS‹Ä ¥)—÷ž÷fXáQWÛSqªCµžÇ…éa!nH™š@µæcêÖ|ûí|rS¿ÿ.™“ ºEo1×íÒRŠÜG¦%e€]µ-›¡SsÎÁj—Iæ&aBf8UœOÂ`J¬`ÀögêèwÄ¶Ëæp;ÌàÉÃv €­HKŸø¹ƒóƒ'ãö+å—¤¼SAè%fízáaÐ~‚m`d;‹ýo-†Yû»Yß·NÊ€9Bù!Û¼²¬¦=ÔG ¦:Te“Kà´wŸËʹÙÒ‡©†ƒ»ª9 žCC Á¸CÍ O á xˆnÁS… æl6n¶Cf½-Z±h]9âyÅ~˜R÷aº¬ŸÎ&/PQDå¿28J(¯rq ÚTCqù&­ù£ªkFB]ˆfû&Ýžº7ʈ )¹Á³´ÁÍHV7àaè ÷¶|¸Z‚y0Z=u+Ydì÷UaXŸ.ê=]*Sx¨~c †ÃêA¾X_¦,ÏCà£9´4¿¼L{ø ̘/0¾†—Åô³ì<űÚîö‡S/Ûc””+VÇ-gð[z‹x%"rhëGRqêå†Õ;\¿tîÛåZpìBÙ1éa}Î,“ÞãØ‚ê45˜’¹-æI“p'rƒ’Æð‘’Rûİ)a0Të¥Å¤ë²}Ë£6;eßrß@«'ç$…X·)Æ•‚›D­ðWR³D›"Ѥô¼¡ÑmêÓ]”Z¤^4ªˆåÕEs肊ò×`°¬LEš+ªª:sŽæšýæ'Ž ?ˆ+E?òwJàìkW÷ôE¾‚슿µJÊö½ÚJ*Ó£ÆEԪʊ„‚,õçÖ+Óì~'Ôa%q öùŒL(Cð,VÑ¥izes¸ûû[Å £GôÿÎ@ {_<Ä «IíÁmÙ’eQo눎”[Yif²ÀÒ»¤.<Ô¼œ3¢¦¥ÝÌþĪ›¡gç›ï-ÿØMÇ]|”%pQUG>®‚Ëæ× s’ƒˆžxHɧè‰6§Óø¸8¡¢PŸ.j’#Îb{/Ýe-ÃvD“­B3F†pc©ÆNþJ.C~“ÈššQ'xyÛ¦$bz¬VܵI!QO½Èµ›8¯ gQ1¹ ;¬:|Ýk¦Ò™VÜË•Žó˜ì2_éÈÅ%> Š9ƒ¬:,u>çY¼ç€¥ÑÏÒk ‹ú&Ú„ $C® )/"Ó¼¸OÓŠ{F¥$£A+:º)º‡tAÑM¸"¦G>“êÇR8qC·åجt˜Ñ›¼N`Ç,<ŠÍ³½¥Ø$U¼ÜWµ³ùˆÎÙ~ÂÕOÕ¬ÑW»ãŸIÆr«5Ä´ötày`Èi„²Þ˜ jø üÇ~D˜`C®Z;¶ÕØõIò?¾Õžt:mzd©VÕœ ÊÑ™sÛi,…ùdœ@ä™D±€d-ÔËî¥cãúÈÜ}Zµ\—¬#i=•²Tä7‰5ÈR‘´$P+,«Å:ROK¢½eE,ºÄ4ƒB„MþO;ºÆ%º.Ë ” y¬* 2«N—¶¿R‘´n%›®L„Æö¸ZÕðÚ+!÷XW+ËöÔ#s=IKm”¸ðV⌣óÈl˜S³Ûµ °¼lG«zÆÉÇÖv»·uŸcPØ`lË¿¸aNã&^Où[ª¦ÜþCwýýïí¡1ŽcRAD^”oZ™(±hñxte¤Ê¡&ŸA@3}'LxàÐ ‡Ê£!:]D3ïU'ijŠˆžq•ºxÓÛ ü] CBüÞd\ á”u϶úÑÏê=7‰dc¬›Ìwàóÿ9¶ O˜9$¬9\æ=DZ+œÏBÃ-:¿H1ÿxÍ ´ß±œ:÷+^Ê]ܵîüê  6ž3¤,7 @¨ÇwŒ‹´¼4Kk^åÝ÷ãൟ‹ïS_#ì` ÇC-F•v¢ñ¼ú%ÕÍ¥jŒcŒí±bwÝbôÓ²wAWÝÏwA'G‘ˆˆÙíÕˆõ ‘×ùÀ F·‹ÓG@?V¾+(ПeÜ}"¥q© eµ§–õͤ“ä©*ÇjŽüç¬æX«b°ZÉn6 ïmŒèüŒjHtxAˆ×wæéØŸ/¿©¬ªjDHÉyfWêLEìw~ªˆ­X« Âä–GxôJ’æ,œº¨?]•¼uý NKÞsN7– #¡L‘¬Ôj0T¹ÉŸL!}7ÀRÉ·*î N»¿§Ž¤Œ¹#IS=bÁ1¦B‚A]´€²ŽY’VŒq¢ì/›*·öŸÀ¼æ˜ÞydíPòÜè”åÊ—ÖЙÚàðÃxsŒ,Ë é0þæÕág¬€T¶¤þc>jüƒŽ³P¹” Xl-ñð¨õ^xJ[Ôñ3¨¹“¨3Áæ ,'LP!ýGm˜®ìÃvÊä¡Úù4´ïìaN»Î«nÀé„;ÚóÞ„L<¤|²4íê'ÓpHb²·šE^7ó±BK…,îdžVdºKì®î³DÎcÝÚÓlOq^¾`áNž¬üÄg7{Â#À—}±¦´å÷@l2þ` 1³šæ«öçȹƒúŸÝµ_ÌC «_•ÁJ‰JùŠl¨ ŸªBŒ$¥4œq+Bqfq8àîS<8F¾Lûké%ñ¿Ç$Ë0û¼Ø¾Š“3/‘LnvSV…0ŽSºÃ!ð5ðIÕùuo—Ô¼ØÂªr,Üj‰ñÿË7‡U‡ 5êƒÝUûí߀ š]²€Ö2ÖHªbò¾IÅ.MdkÔ'Ð¢× :t‰™Ìôä€ò{+ê¡D¥“®àòM„Í| ¯¥÷ñD¡22á9J£R-­·å T1í‰×x*8 :çðy©TˆíÙà’CÑ»Ï6§?Iõ<ýPŽ %ñ%x… ±'P¸s"}ò ><ùW€ü»»Ôqúòú²ÿ—Z\×ìTŒ%žÙº˜†Àk¤k=‚)AÒqY ·’Bâ¨Í>Ø]S–¬½_Sä´H«.‘?_õ“áøi ÒƒÙÛ8Ra Ämg„!ü«*W,®8¶k>ÊoßN¼iÕ£·Äçî…»8è¾ÇHøÕ0)OßìmTñ’NïbªÝ2žRL5Mæu%üG¶–(ÛÓÏÅãçáïr²vë’i_\§>øüœuçb ”‘Øïä’+¥*=÷슓ÁA‰ŒG"µó[?'è:jdv"“̳ëQŠGHxÀ°+».<Ç {·Y¾M­bÜ’¶pÃQï`€\æ±5Ïù\a}:nG¦=³îƒ”?p)=®ž>Ô¼XYïÌ5 åk&k¬¹V[q²ÿØ7¯<ÈÕWéüáª-„HFÃXuFj×nš$¿‹sg÷wT»§ãß¹À­¦Ó½%ȧéø9ÆóTe÷wîrü“»¹ eè^Õìò§¹;»§Çâ4p±„æëüeŽÊnIªe7*:(V95€7UTÄÙù,;õàr š 8¢¡&=„Uu¨âÎMÏ´‰Åâ¹-ýd %"ÆMþÑR—_S%°sZÊtý³•þð^Ö²ÒÏE ɉ’ü’÷²’? ¢€/RJ9kÅ'0#±VwÜô #Z¼•ÝÏd$=L-&Ð;Jw÷Œp:2®÷Ø8Yq™á²æ/8ÒèI”BçÊj' ¡–éƒ*? fDZåÒ'¢¹8˜ÝT§mšW¨¼”; ꦦêÒž{)èŒ63çÙ[8ÂÕ%°þ.‰´#¾„|8“ÛVtÝóZ$^¤“Ç5iBôºív'%¶°ñ:ü†‡ŠåèâEW9few•ŽD_–¹äçuü`ïÔÉÜÛçJ ƒgH±—œ2a‰´ò}D hßq§ãƒQ/nߺ×X'2­PHªA)ÁåFùE½‡3„L/¾ßЋD«ˆá€´bŨ¸œÉ”Ó@ßÒø¨õZi„•´«H;R´ÅCº„mæN5y§†?^ÐÇN¿ÆÙ]wÆMFÁs¤Eydzew ðþåa¯¿×Õ§ƒýôUói0=¤96|*zÂðÝHÝ‘ã–&@·ùøƒ0·)….ùGN—ëÑ1†EâÍR½ï!3ÁÆ„C½åA˜~æx†¸£³Ê©è9 † ã‡F ´x6’N¼†´ÂÈ3,Û®:ì·Çwc ÆöÇïV·ºAé>-É’Ø(„|ú4ÿË»xHïe™êô[` à™RJ¼T”Ÿ½·)žÄ[Dj¤žHÑñ[ë¹@õ<ԡ̯ÿ çz»c endstream endobj 18 0 obj 5543 endobj 16 0 obj << /Type /Page /Parent 3 0 R /Resources 19 0 R /Contents 17 0 R /MediaBox [0 0 612 792] >> endobj 19 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 21 0 obj << /Length 22 0 R /Filter /FlateDecode >> stream xÕi¯Çu†¿Ï¯˜\x¹ŒÅÑô6‹%†"‰¤!À¦I"TH„HÇ–åüÿýûáúìweígý8ï·Çýyw8m¾ùãö³Ôî÷Mµ}ñͶnR«øzñÇíÇ_»b[l_|»}½½}óæôüóÛ‡õöö1_Íöö©ŸÞ>Ø<,öÛÛ¨¼y@—ÛWÔ©ðôH?¶·Ÿ¸‹+£#`Þn_üfûÅ‹D[ÏâpÚÕ§#ôåØ.áx ð˜vÜïÎLëAíç5´?=>Ø–ÛÛóW&æ-_‡Dp±IÌ€@謶BÆø·H¦â)Oód–Õi·/Õ±z b7b/˜i,c$ÁÜÏÃæöK¾@J‚¡ôtó)ßQB T²¤ç͉o°ÇhóÜ…_!aÚ™E•µúTž’-øs^'ËýiWÊSÇûR\2+èC“?”+(Þ?Kôø³/¨MZ*Ër×Í! ^…öFøÚaÇD×vë ³‡õ¯P6¼®ùÈ‹c¤òx&Ì‘2Í ”ɉó%×›¼ÜfADÇÃîPÕôhÝÜ.(ey‚öÓ±Qæü&D´…÷'vs!6ü´½õ<áUÕìšóiIÈ—¯*|Z§šº ¢±áü5KØõËJªÙÙÕÖÍqWI¼Rpyeƒ#Î’\HÓŒ°Þޤõðãä4ÀZóüŸ“Ÿø,}>c¦…ÿÌ Š:–æ‚zOø¹?·^lÊÔìZ’B½¯wÇCYŽlÍ-Nˆáá/ÒT¿ŒpYíêªl5üx]wûÖvO ìZ Ìk 1aHõ¾®ñèGÔãž3§\S Mè s¾x©ÖLiÏú±«B'¢;E$õæV®“àå;¾.Q.³^DWúŠH5uH!— Ÿ¡äÐjGÉ‹*RàR‘)Z˜È˜ÒéΘ÷-étK­ÏÄŽ=hš?NoƒÝÐV>ÑÙåKËã±¶ç÷‡Àü~q.vu‰¯!ILÿâ›k†Wƒ&ÂùógLÎHgðÈ ‡3‘p3ñóº^6åîÄÌÝG£GTÇùú¦(~ŽARĺa!ž¹sœåçÄåÛ/xŽƒ:œYŠ÷O#à–$¸?îŠB2ÌÑ\„¶$CÂÓ!,©ÙDâ` )qžˆò)CDž2(ÂIŽ'Ùr”!RÈt¡¯Ï°'êÜM¦†ø£½V´XwÓƒ›Æ4\¼¤à‚êTG2''T'ñr__ŒT§*wZNl"ÿ²*1^N€7ãÞÑeAP\´ ˆñ”ï™V¤ñ[ûšÍt>¦ T-´†Ì€)˜ˆbj?Ŭ[#DN¸2æ'¹†ïK:\—»cUá‡2`Râä†ùßãð=sGë(Êiõ+”]vÆÈþéWDà¨+±9m_¢qØÁwOÜüé¢Ëf¿;¨^ÆõEþ·<Ì´Ëæ°«†À’/„tájž¿÷\%©º¦Ò¤vÉëŽKæ‘Ò‹sã¶ÐHê¿ä¡÷Rˆ™‡ÞŸ¦<ô¦Ÿçü_€|ÍÔþÂôôH]„‘5Y$ú:5r9 zØl”¡)y/`àäºnî@ªhPŽj úØÝ ïËFFøD™¬?r@ZðUD§S™ˆß×kr7è"k½4Ø„ü§V&ý!9.%‚B)„ iutosƒ‘MŒà«MVÜS¾œžŸ/ÍÚ!õ™4pŸœØÜ’_šÓ‰ªTôuÆŸäÌ™ƒ¶BÚsµCï’œƒCíZ,ÑÈeŠJ&hJQ· á’žEÜ*Ö£f¨$,Ä볈XC‚ƒpD¬Ò\­É$t>Ø(© Õ…^„ì{7ICýÔœ´'÷™“<ä\n‘Wl¼ÑîG›šÂÉv NC–9AQN¦ßsÌA¯À<±È¤È2RŒ—ÉÍ%N ì®Í¥vic¸ÕõRžÙàþó™Wû7"èÀ¹äñƒ lGÒv$ô2Z¨å¡Rî6.qmN€Ê7?-]‹Ú€œ1Áú†)[Ä”û·¡1«uåîõ4ù/÷ò¸9-9ƒòr·4´5(ÚH7ï^Œ8¯`Õñ¸c™_l›¡DG&5U?AV²¡'ÌÐ Æ(14ƒ"c×»ÖŸ.ljÑÑð ’È}»3<\O¯¨E*˜›ºØËz4K£ž³ë ÆuNðsY(HÈ–%8i”ðØ`Ôä ¨9»X€(S„º&î20Ÿçrq£3«Ì–ë¢)M%à•IfØÍÅS2P5Ûà3¿Ûê@GHöÉÓ/ÆuŸ¨(yÝNŒ_÷äâñûÒÉ9ò‡Ä‡hŸ&ûGƒ±|ýWª7§ÜjQžU-~Õ¸½\ªÓþʲ¼æ¯J’б„x0Dõði#ÓM0¼0ótJöQG1&¡”E)™ VéA±‹å-õ4‹/‹T:H37†qÔçÒAi¥ŽÑê”Tâ»PËzQ9KâÇæÌ4ßdÔõüé_cö¾"u=3ÍçSÂ8õy¿cë ßÁ™ô3&™ŸC,›ðËb#0þÁ'~{–q5,‡sm‡ P[Zâæ»r×"j_¦Z, ÀY„†sòâŒZ÷„”C§Ö¨GAbrj ²ËƒKÈt0¢aºÖ£sPnž@Œ ¶FPk8.oi¶yKÑžB077º© <»©‰^9ž=& "¥„¨4ÖÕfJÎJlv»ÙjÂL0Ê •´‹€U|åÈ»­!åãôÐU›¡Œç]2SF­¹ï¢^û‰TýX½žƒœWÀh_é}!•Éä(C`R&£¤ìLrÆJIY4€Ñ²jRU4Dj…°G ¢riÿÈ{ŠZÐ Æfxô¾yóV«Q@‹M@o#Ÿ2Ï£²&+&—sjÚ}ÆJu!¡ µyÚQÈáC‹ýx9=f{)î(ðc(17y€8*à éj×zí¨Ó6–|t…¡”à™Qy   w3ÐÇö¸1(2d ·•’ZL=F]á[ÄA9FÍHÝÃH^«z$·üÊÑ‘;xˆ—îçãÓÁÈD6Øp•ZÈŒ¶1¾&©¥Ó èHèKæ a84©O`ê "EФK"ÇOP›á2Ø®-˜¼‹3[lÆè›³í] ¬Ã§-;ÀîALD˜ cÖ ]sº“¼M72÷übhòs*u”{äü~ü$òoÅZV(À¼b\\Sc™€I±T«®±pQ#Ñ`áÄY^#~£Üêá¶…xm©Š¨wM€•8Žéžðí2¢‹¢~ƒzヰ\ô2!ËâP:3_Î;"p‡ËóZG„Qq¢ÊVèàŠyí1¤C'œA Î ‡4¿Nå Â8g7PJ* 줃kó@Ü€">4¤'ëVÖ ç9 ÉÆP\oè1,ýçI.™IK•2ák¢‹¥uÛçç‚°¢mf¡4v7 "ÆþLpÇ'˜éETñÛ¬~ ñ Tˆˆ>ÇâlÖˆó­õþÏQq†ƒ[cR§B1©7¨n>é@³¤˜æÉnà ‘fŽ ¤Ô ·^”§vf{¥¦65u‰Fò¸°¬w`]R¾( bE-©K¶LØOï‰u1z\P’ºÔu…ܹõ}Á!à¦Ø£õ pÆÉ« Ūƒó D,²E„ù°ê"k„ª/¾à‚¬#¼¢A‡›¨”Æ$%ñÄEVJÉE››ÏÜèÙ¯ý»ôÿÖ/½yÅsæ›Ãá>”Lf<Ì+BÉ ‘T/óÚˆ÷å5Þâ/ž26â3Ôu5¸ñ¹æ/6¦2VH˜QSG¡JCùÜMÄgÊà³\ŒŒe˜ÔíDÖâ®Ç˜§®Þ7lƒrøpHõüÚñÑH:F’Ëa‚m#9{éyrÖ>m ÎÕ=– ‡p÷èåjs€€ 2&–ñšWÈäÇ‘¦NO uÃV¨øÌèRZ»bñLºg”ä(¢ ¨‚˜¬ìr3)©HÉ.k"XA;!¢yL8g3î(h..S'bŸÝüŒQ"ëÕƒŒ¨5­Ìz¬B>¬þ‹Êhšp—BõJEKëv))²Xq®^6ÓI\dpÙYpÑRž'›4Ï®ª4/ î£`­ÈÎ$rzÀ>T|­ |Zá­Òvé/áƒÕf¼Ïk·yޤ;§ªåÈÅËß9ɱ3*áM-Û*_Y„^!¹•?]Ž'ïñÛQL#Ÿ•4Î讪ÝMX«§O-¶p…Ý'xÀK—!xY‰ >ÆTidîãþ¤«=œ†› Tç %3^Âì2ã­Ä̶cê‰9vŽ–?7d„È¡öØ2Ô;‘'Âf'ïóiÇž Ž#gò"44­Üs‚ÿ@Šj=4h‡ÖpÓ”­º4 rjwiQ)'„Xã.®¼N8ä{IrAÊ{Q¨i“'özxÐÉWtÃ…* Fs—Á\š ”þdªC˜xíÆšêh_.ý YÙÍ Á=T6=˜”lž·œÙÔ@¹ÅJò@Ëì\§…Ù:Æ‹¹Ì‰©:9aI»؂̫ó™Ó¤Ž=hÉ ¯9[ÕÛ¨@&p?Ƨ3/°s· ,f.Øÿ<çjò›“–¿xÔ<${’À «@”q%:Í€Ú_Gv­¶¥K"T°Â=×<3üÿ)Ã:ÏáâŒo=Õ8¤Œ¼Õ\<·[ èÅþpî“9L^æäXÉÚ š2oÉ-žýIQC†¯†h®®ªP_ËG"<”`Di… ŒÍ˵p`%Z\‚Ť:)ຼÙunƒÅÀQ(jP9y G—äñ.e1ÞÃÞ€›ä2¥Áž@å»§¶»a1?îmÈÐ1Æ òƒéå˜ð)è ÒïñÆß$x!D¶F÷@'`ËÕÓ¤ÍÓ/X–ÆûMNíåù"¼ÝõÄß1²CãbMJ©pú-Ê!ŸDÜÕâú©ÅSumÀ\árj h©™ƒjmDÕ°"=¤›Ü¢V"zƒf† tíý›iTÜÒø¯õ(&ÆÜÒånïZµOV ´W°|JލQD AÂÝÜÆôèË15.9ï†êÈЀðôiÅåDz$`NBŽ(sÁál¹¾°™Ÿ Éø”G‚³•ÐݪW2¹vW±B|sX ™u¢¼,†^œNãõÃÀשð…ÌP:Äÿð'ûÒö]|ºç\ Ý~J*m—"ÐÙ «È‰ßžt:ï\‹#ç=N§ê‚~»¬vàƒ÷!='™>»9ÒÂGŒÅš¡'tLŽÐeàE< ˆ=½¢äƨŸ œÔÉ/ò¡×#´²ãMÛ™$*Ñbµ™Z;™€6 倫…o ÀÓ<¿*.Ð\ƒ´¸/ “=êuûð™Ó -‰+ü^ð}œ…&}äw=­—s ÆÜLé^°Å-gñ ¶6wxÁVÉ›ò5åÔ©êñ’â£6†zŒ`*Ÿ2Eà]…2Ò!+ÒMװ߮ž¨¹æy&ÝfÖ$=2É Š»U)G.¦ l4bÀɩ،9ù Ô®ÁG[ Ÿp §Ùá.ðç2¦¬kƒ±¾G9¸JÐc7ÃW½T\’# ]Ï䔯 8í÷{6ìøu$µo¤ÓßJë[‰ÄÔ ÛXa šl¾Eò)•ÒwÞ @¡‹Nq®¨©æîþÔÕf=›F›ø€6ÀL(Jĵ˜çMÀrðc«{ò¤›±=£`dÌØ|zÆþ‡¡aÝ ×Ý!ýwD€û†«GZë6ÅéP›íÄ‹ v”4[¤\f«q®r˜tgVon8Ì–gp¤÷Þ¤]°kSð®›!ž+ IJϦâõÅ{ÝgVXdòfŠÉÜ8¨¼À)1yI_úLÖáÄE&û5Ž+˜¼YõÖË’ˆùØ 2<§˜<Öìö݆ ÊЃtÌta5Óï5LW‡¬¸¿XeeØ›&ø)Òk#«kX f«ÍÒ[BËBÖE¤{³Q^ä‚¿¿?.ÝKG3'ïJ$ëËÑFçŒð;ºwýõ_îÍÜ wEìhøÍ{(އú8iL|§F&œó¬'´¾úooÙn_ÓpG¡uŒ½M®ÐS½GÉ—7“‘,h~@xDAÿÙi7ò.8s¶`xøkªw«XõÀÝ~°´äÓCû6Ý;j§ø;éÊ9úRÕÜžœçïÐ(>»·Øç‚×þñ~/6Ú{h¬ÎøMñ×k±Xìåüýßc±‰Œ½þòßâÄ›Y¾õ5dQQï`Ñ«}œL&]Ú˜'Mø”; 0po¥Œ]Ê~«Tp{ÛC1Ū°€G×¼(c‘1Žp0¦>A›dÄ÷é7ÆBË¡­lî$ÒÕ¶ÂbúÄ…ƒÀ5!dòEë&ÜÕ".tûþL¼=äó”//±ÁÈVÖ{™Š«9wÐk±9³Õ¡ù 5ªñk’½ÈV¾¦Ia§¢,4%½Ì«Ã¬=›8‘y3ó¯7òÖ.C ¼æTú±Õj>²ë{`×âÂG°]<§Ã«¾îÂôÑšcZ™Þ§vn ! d&Ò{c¦ý¨‹ëél'矊–ïáá]å=™ÊmNåþ̼ýë ³Ù{QËšwïì›J sY/þÞ‚.æ2^øÆÍÞa"ù°9%×è¼§wén¥ä¡¥×Ot©nZ.ëÏ»¸ŒüPkõ!¢SëÈAÈÛob±Þ. ‰]ãžÓå]Ýsÿ>´îYñk»X™ ¦ |¸ÀBê*Wœi»‰ìÂê¬ÐÙ ½î²‡Æ|0-V”<¹çËb%£ï³L_ËYágå$›šÛIrßÓœMËS½ãrµc¡5çJÞšx¨¸(СÑF ?݉h±.x/C‡òOfâ#y~jH}t˜µÌ¼z}¨‰}ËZ+ ‡Ò‚š}¸‰±uïb^@ ­†Ö«õ\s/dè.æM#ðW‘º¶¡åôøaèýÉÿnK¿9CІë?fôÁ¡ÌîPû4>¬ÈhúsH>}0ÂHé„þÖß BÐ;½ÙYËÞÕ¶*nYˆÁt%ìNÛ%£i·ÍäëÝwÛ.i©ÉLw9üǶêú0h¯[ÌÉÐ&ˆ ì&.#Þ‰Ðk=š«]’ör›!š=­ 7Ìß/îŸä<Ÿ«l÷ÏÓ>â:ÛèNøhmt,’iì§bÍ‹þÜÝ.Á±³Eòì‘¿t\‘KÝ!j8ó¯S-:ÁB,Ý;ý¢“^´ ]§½±È²¾å‰ëé8dz=zEèÍSÔ¹PgbÈòEY”yéBƒ¹9Ç Ôü$F‰ª8›c¬)?Ø8dºá ò‰:m—â2Ó™Àöé"ËÖtê+VkoÃy—šçÝ{ëi;«îê½”ìpÚûWÝ”§¾Ç»È‹Õ" êòA|ÞéLœwD¹P1´ÝB‹}RŽyeÊOf¢^ÝûdQ?Ÿ’ñé÷E³»rt™ö®5tœ6>Û©ßé)£¸Ü8xt—`½VrÛ.¿ Çã¾K~›Rï˜-=¢k1 ð§Í‡0 ½±ñXònŸž~4wN¦éÇöå^t\R4?!g®›„(ª€RÞ׉§©‚ר Ò»9qZš<º?@õúÞû®nS/½wú,½,Ï¡9é”ö:fÖþÄ@áæ)¾Î|yæáÁõJfQ¤ Š>¾×䚣&2ª sï~OAÓü Ðèsˆ´bíÒŒÙýÛ菱¿ÍFCZbPb üZðº"Îè^àÒºð|©ª4×Ä뜑!rù\ ƒv"ˆÐ&ð~|ÆUkHàA²"ùâÆeãíÕ÷úŒøBDç\ñïY/ú¤ÞÀ$* Gð®7šŒØJO™}Ú7: í¬˜€ÂM߉}²šÌHq&ÞË ˆÙïðèÒ³M ”;À\Ê¢ü-e2±¼Ÿøë˜îà6Ý^Þ uÇuÉ‚ý%7…bc»”¹hb±˜æìåúb1àÅP¨&½ 6Џ’âM–¶.}a^áAi?\é µ$x"¥ùë—é”Ö±pÔœEÍ£ +F‹QŒÇ#9]MûÌù—{×9ŽÁáq’]E!çÖ w£Ë©ðÔBöx9žÃñ¡ð¶Q:9žî ð÷&5Ø$œîv†O om¿U^•¿¼¯‚?P@N0;ìÍ_XiO{G#þF.=óF—æé<ûªvŽ-¼úœ·7§âˆù52Ï0kµ ŒPÇ® Xâ×ìf}°l0d:µžÆ4bm«þ˜ÖêÆ@’䊆†øìÿЖ¯ endstream endobj 22 0 obj 7593 endobj 20 0 obj << /Type /Page /Parent 3 0 R /Resources 23 0 R /Contents 21 0 R /MediaBox [0 0 612 792] >> endobj 23 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 25 0 obj << /Length 26 0 R /Filter /FlateDecode >> stream xÕ]k¯·‘ýÞ¿¢÷"îâv¿¹v(²$Á2vÙù¢D dENv~N±H6_Í!ûNÏŒ%à΋Ã)ÖãT±X$?–oÊåÜWS[6mÕ´uÝ–mÛTu_NãTÍsùÏ?—ÿ]þoùùï?5åûOe-þz¯ÕUÛókz²ÔåT/U[¼ÿ{ùì->¬ë¾+ß¾/ûA4’oÿ^~þ¢©š²)ß~(ß•÷wø÷‡‡ò³¡¼ÿçCùcùö›ò«· „Y„UM½Ìu·Ð¯UsÓLc?•B›z®æaZ,rcDÞÿî¡|û7MU”]E*»š¦¯–~ž˜ŠreÚ8zL+<¦}º{(Ûòþ¯à[Š_8ÜË£³Å¿‰7(FVÃ8í4ÙØuÕÒ ƒÅF’úä ôðâñpÿ5€qð‹ù¡Ä`¾|(>Ã'ÿŸ‰Ï×fô%KA¢C„æIšÛÌÐüŽ4žôWŠÂUˆÂÐÚû§+„g?ŠÑE2£ç¹‚I¶yø2 È1._O^õß2¿ç‡ïJØÙó6&ktÛÖÕXÏÒ®VN¡óÿ ¼ý¯#øïOÇPÙƒ›¶ÕEE ÛJµ}OÔe]Ô!ÓTŽËH ¹šýI¬,âXyÊL‡êåb¥E¯Å0GéîŸíf˜EÿC­ÀÒ"ƒÀ&€–ÓXÁ6-ÓAÄÓþdεK5uC¿Jº`¯è›ƒŽ¿{óPŽ%ù'PºÉ̾¯š©]VÊÈ_Ge SÜi™öSUO]!ÃfLA~n'‚AÕ"[œ»jÈ‹[µü+O‰¶D³,P/¨Œ (äˆ\cÛÏ‘mÁG¦®?D€-z¼ý[¡¶Š‹d˜ªq$SlæÕ+„ }y? Çqþ~÷PÀéU0©¬ Éô|ßÝ!Ôú¹i@ÜÏþÙ·¾ì9¦›bvÀ©EáÿÜnä¨(ññ×Ì@Š6¡Ð#`uà7¬×uÀ³û¢¾ûhƒöBÆÑ#¢‡cB f™!€v´(=LÖ›X˜'UdàÈ‘'Ì” PdfC»]ÔT@èÙìEۚƶ,¦²Ïi ð€Y ‚mȳÈ|Àϲදú©™|ÚÓðˆ@Ê`) ¦Bz4¥ù9Ù0.åÄÒK‰¥çª‘‘ð…sk`ºtU×SS,wà ¡ t9{ê¾ ²;“>šR&€ée§”sÕ CçJ-9,¥é’U©ÓTï>‚ÿíÐVíX;öw˜Ðc°ÚÌÕbðÁ+’‡Kë J&ÏTn4é2,#çÄnÛá®NÄYdìŸ[5I߀šn:3ÊF/RKfc·TižiqQËšs®Ç¤3{@ÊDà¬ÈPIàÀ Ý·ÔOˆtÀ8Ä”øK^ôrì1n›f%ü$ÿž0ók0㘔ïãsî¯Ì9~qY-\ÎóEÿUØØÖ´tÇ«¨H×Â{ÒÁé…mti멚&·)Š˜çqYŽÚ˜P‡ü§ Ǧ8jå \^˜¹»'„Eä!–P2:2´˜wŒ›4˜KTOš{D¼ô€ ±îeŽÃe‚OÀºüÔÕ"u^®óÜÈ]C\p×BùT­iZ€Íx†ÔƬ€g8xN LzŽhRÔê;²‡G†ªGJt '~õ/ÐM:Зl)[ 1*Û÷¿@LGhʼ6ç.hÝß•Ê.d‡þOê·$ݲGZ:á„’×ÿ#e@ˆü†L)b岌 ɉM„ˆ‚ª*…ÄYï5’’c½ˆ~ö°/´0!M¬-º¼\'ù!¥$9Ç*!ý³]2LÊçQ6”ï"QAò·Ff0‹V¯ k$¶Ø=E*ìÏyåá&Œ#É޹ Ž×D=†öá/1 œ‡:c\wÇPÛðÉ-B“Þ«AÍvRÙAõsd·í‰•-9Ù¹±MHìÔ`.Ý#?h¥•¸‡O¹ U’4ÀAj(©pqÿÃâ»Òx¤üˆ†‹‚=Ùk¼ü®BZþEAE¡`ºƒßBóýš¾Í­¾ªnnìÄuDu¼°%Gh§P$ ¯í+ÝlIÐG•a÷{uGTA°2dê¨TB[g„OˆCºóø?¬RùǤJE•òÍ`¯Ý´ü–$Ž¿LXîåGÝ%z[dyÕpø¿:̦¶­\#ô€Ábt`x…¿°;äDáãð>?ÇÐ`è/1\|ð•xæà- ÁÈ·üm˜/¾ \ ->ž+6XZX(궬ÁFLTPbNp¢&šHnÓ±€>J‚& ¸ DôÚ9¢N[µ,LF`ÙKGÓÃ,ªÞN¿¡0 ÕS³P ]Wý\×5–~ðlZP„6÷>P¾'ÚŠ(ZAв/Y{§;B“â4†¶ª ÿRf+t$™íih§ªížúzŠr¦éd3s€Ã‚´¼dCÓbµNT*P“f qŠÈœŠ¶Òœ’­œ*?’SIà”I‘ÑD“´ÉÌãáK.Y?FÌ4Íh£Íb¸×U¸Ë%Pt‰JÆj–‹hEªù‡úGW$Yý8>Í ÏBý ¨ 4–ÎPnéa¯Ó#¼äçˆ÷·Ã'ÐÀù«p)@W½¶ÏÓ4êâ/¯í¿S@‹o‘OC#Fk,µá9&'è‚;5ßáã–À~ÌN¹ ¹4 û·/áãü þß¹5 ÛJ/ðJÌd¸€Õ–[É/r«oÄO¢Õ͹Ìí“ ýÒ•X‹3Ã!·7¬r}Í 'su ËÌX].ésRÙ%4®­UpË’ +¿ê)¨D!¨Ä!±ï¦ˆ°óæzþ„8[µÅÑd<[ÒTŽH:Ê‘dŠ„j¯£0™—Ê:ü¤„²[áÛÞ/¡à ¸ [ëðƤÉò1LÓÉfÖ6`!ÇÛ BZFÚ ‚åDÍVÂÏr#îIý Ùˆý£ÙÕ©ÉF@€‚BQ”œ˜Ö®ÖÐÚÂ; òÐ@-¸'—peÈ:w&Ôù3ß2g:˜üÁšz {]½ÄÙØ×4c5õ¨öH ¬û´ÞÁ]ç|óøJ‘XsrÄ‘ƒŸDOÖ-”qú½ÙN¶@=zù'UB¡èfwÁ¥Ò[XµÚãq¢ ˜º†1É£:Ï«À¼Ìy"ºKÖ‰4íXaâæÑZær JÕö#T¿ó\ZV¸`2ø)7k°t^/ãÄL6’!&› C§˜¼³0kkŨ™&LtûÞ¥3Äd¶ä6/¹Çë™Çdé¯cLö†(“‹@Š AÉÓ²À5¤h²ÁdÚuqMÆÒö"µ˜:wsýDMþ­Çä7çùÙ(“C+«mOSH” &ß®&·˜2·ÓÔ¹tæiò™É¨*Óž ª|¦Ý”í2Uª›--Çä˜XŽcò$½eò䘦åE)ÕÇô9¢gÏ’o€ª’vX°J ƒ¡Fóa¬Äø0¶Ø$»êt‚®`“H:KÒeÒ#ÝÓ#cØ ŠB’q\œfI8’ÙŽY¬ mSà+§•pÍÂú-¡ÀéK ©,ý)¯yÿÔåíNf¤Wåaú4ÎÃÊ£“9–ŒâÆdeiú† Hg*ËFq££6ð|ÞÆ9LøeuKHüd mÙŽN¤ÒÉF5öÎÜ;¹E-ÃÔ’uœà¯Ç®sÚ˜ ieWSËý´]§RJ³7)JòçDBaö‚itI$OºnÙ›< m˜½£ÍYfïiH¾Ù›ZÕœe³nô‘L¤Ø·»jæRð &ÐÒÃÑ‹f´l(÷i¯;Hbéo¦¤f,XÏ€2á±±‘ZM² œyáø2p$væÅ™í¯m±M‡›™tZ(äP—“G{:[¬šO ’Ô&y`cpíÍX± 3õ¢+çæ"Žæhæ¡qé<1gRËB‚§AÁ‰\’ȩ֡ )e[?™]rfÇÛ“ªvÆT¦í&¦8ŠzNªv§+j†…0ÃÓÁ Wè)áV¾@O3™¢KìʱG0Û8Í3·)ð8ñpLNÙ“J ¹äÒrÙœ²æÑusÊšŒôM¶ñœ²L-_hßy/VÜÒÖ,I$C»ZœÑIå]Œ 3™Ž<çù§Ñ”ÛÀ¹pÙ[x³ë+³×n@Y‹dð¢¦äBý%7Ço‚ÔδÀFµ6ݪj©§½=h¬¹ñA`ØpGç¬ûîäF5>Ø;„GþÂ=Ò)+)[|£é-Öܘ%kÒ!¸ZdÚ]-J³ÀdW×v´£t줚­„†"5'ÝI²“ Dr«–X'»YëDé´¨á^pE“ÅT 6 Y!›Ä EȉÞPy’E‘Å4KÎ]žÄ\«h‚2¡6fý®‚ä,9n zkO'7XZRréÊØ|à‘µµª¨gýĨÀ™ÀŽû‡­GŠ/³ùÀ";ʽŒ5Ùdî‘ÙØ§vSU‰EK.fö‚'W5{W*Ù¬k^6{“BKJ.] ÉŠ»š½IÆ9ÌþB Ã#J΄’ZÙONcÉ™N80¢ÆñbšŒôil=/ÄFì¸Æ}9l<"·B'‚wŽ&9Ó둼83Õ}·˜ß4Ý„¸S) (Ì›³UÈýЫã(z&W'£ƒ ‚©kOÉÓ"‚ ÁˆÀƒÈ4,2lwtX¾¹ÅµY*QˆPæ¤3<ÅÙ °t1“ʪ¸€T¤Ò£f$^@l–Òí,AÌžS •ÕwL‘Ф3ô~˜H:üŸøL›]u:Ã%5ÎpäISâ •Ó~€­ùvÞEÍ[êÜâB:x[})Oš@iP2Kƒ®²òL[’³[Á£ú*æÚ(‹*Þ‹n­×<:ŸeÌn“Áw sMeÙs}³õf·,è’Ǻ–U»n%° ëoú§Ìi™ª`·÷ow˜yÿÓN­Á¹'3ðmQÆa‰ÇÅu¿ž<!® =ÖJWs#AA(¼p²698ÑAÑÖ¢ =“²±“`Td‘GL(Vž+¥Sm&…Q)‰9÷Îh°Õ†f”ÚáT›3iØ£üMä!Ήµ8gkû F&ç’f9Å®YŽ'c¡r¡UB FeuŒ´ ”ÁÀH7xøÇ F&EQ-SXpδ;"£fipʵB3ŠŒ˜‚k‚‘EÁM‚‘EaTMDæê(0²”e#2ÒöÃál(s¥#£ €‘Ź›#—²ëƒ‘EQTËŽ#œã·ë µØ$)+2jW#“‚Û#“¨šˆüïa`d*ËÏŒLÎÝ9”Ý™Eµì(0ÂýuRm]Fe[2éTp#È!’;mV|H8œÍ ·wðR„ˆË)ÒÎÔì4÷=©à×]˜E4·› v)½©D°ÇNîÈ÷´7 µÄ³$GŒií­ž%áÒœñÞѵi¨+”fyáFEâÝÿã³®SÜÊËG³Ážt¶’ t^NWdžY{)hÁõ&8ü†Êà“"‹%Ž”ufìœóq1\mBŽ28‹¨« 9 žóÙÌ09[È•›³(´¤äÒ•±Pà‘µe>z¡À"c;uªs½ÜÎà•×1â~A,ÊýCÞ½‹ÛzðÑ¿Yä=«®á‚ ¤¡¹ªÂQ€;^zµ8Gl `¬+×'Î vÔáœE–~Ù(pÌ@Á“«¢€+•@†Þ•Ê…QÀ¤Ð’’K׳ôu”(`’qFÀÖ œõ…«¹h¡þ8Àí˜82‹5þZúF €².Ô!ECW¬ƒ€I‘¥^AÁµ„B5žTn6¥äjKFMç0Éx\öÌ$U«}²ô√ÎF•Æj2Tµ@`µÓ‘ktaÇŒ6uKæPõBËWJò·Rz ¾€¤Ø©)óŠ)Ò¥ç¯é¬QÓ‰[o"d\GáZèÒ=Æ×¯êT„ÌËÎÊ€ITÓÓm« ÷ªQ[`t0ebaåyê õ…†ŠXé7æ >µ‘ÒʼÌÏh§¨bŠ)AïîÇò â>ØôD dâõg8 ¹nÆ&¤_§§y ï³`:óöàŒæÀÝ„²b‡‰VØçðNg€d¾=zñorD¡.þŤâĽ§º\ÔÚÏžC…®OÁ5?öa}Š ø¶N‡ˆ¨¦õ4Ê·²ú%D†#`!9î‘D†£ ‹Oñ¿õÍàÀå§4ÃÁmÅ$g¬!à=º°/pk1½'ç@?âÕ"Z¢®ë g2L=c¡ƒ¯5 eèýÃD%FM7Vc§9H—æ$“6硲¯q·ä„£n=*Öä‹F%¦‰VI´"Mý==Ù·IøìnàI|·IKÑRS’>“&*;Å5ÒÔéÝWøýØ;ïå/ÊÞä÷ß@è6öD™•œçpt3u¸_]èñ·¥#צ͛*-`qä8ΤùÞ½sÊ(+’E"ź½ÌâÅ%AÖºuʢ⢡«R®.½77DÕ"ÛB’¯o8ÒDøò„kKĽ~•ën8îØ ¢¥m×+îd‡]o‘ìz×Å öÔìÐ¥Ž¿¸_Ø-<Ò:<¢åÒ¥/'?€¤ƒçrD¾' µ22r—ÜPö!ƒ~–ZÑ¡Ý=96¼I4r|g…æ¾ÆÑ`Š˜ÂEíØÜCŸ›¤íiË>ì…‹Å_È N’ý+žchßKÐp®xŽá/†7÷ßBø IÓΡŸÿþSS¾ÿ qTh7ãÂRk°aü ïªÊ M‡·­J±<ñÜVÁ‘æ8kD¦¨'%^46$s°‚ÌÀLùäHd{Mñbïa\9Th½Øš¼ì>‘+JEn¤c5´1…rdswñ³ à4ðSÏÓnir°â·„š0t•(¶ÇÃüP°,'†ÜÍnõÙH· û{' ­˜II]å3a¤Ý’|p9¬ëghòyAb\Hšè¿@l ‡f?x V€v¼àVä ñ–ü¦ùÉD<`Æ¡58!ŸèMðÈêXfò;wnvG>Pÿökñ{Åý$ß…g€Ü¸ù/Ð/Ô`øM"Ƥº÷È-„0¹ÿ©uÉež·åÂ^ryN mP>Œ´ /à\ñ÷9†‡é(Ø…$ 9H–ÞSŸëçÖw¸â ¾aƒs$ÁÏå/“¨ð9w6@ЛüwÀðçL¦$†„oJ¢¹k²JÙ‡Bxá/w#Ëàïðß¿!žlXç$¬©ÆPœãÃÚ÷Ð&æ´ŽmøŒ†µïósŽv0¼óú¡›¹%GJüéž('} “Ø¼Ž½µæP­(Ç ý0ŸÚfÈp\ö€_XѲi–m«„šâ]Xå/!:âuD¥PV¼€æB‹¿{(Xâ”pz(Q í†&@¾Ð˜þÂHð´m }üåïrK~ŸÚãħÜŒ¿Å=ðsnÉÏ™X ~ßA2¿Â„¾x(XAÏÚ¿¢ÐlÉ¿ÈÔBÑ¿n™]&Ó Ä5-ŒýRcÏðø„£¢t¤[fèt\Œ¹Eþz6‘±yò8›°6ÅY¼pâ†,|È•ÈöÆ¥K¢ÔöfŸJDìX¸ö\Ì,®þ¹þ¤á¬ã‘N/mZì ¡%ã¶Å"ÖÎFÔ’Í&¤±4Bû‘ŽT¡:#ndÿ¯ýþÕ˜-:ÛÖQ£P¡ú u F1<ä•r6´+Rg4QîŒÜœžÃÀ¹¸yŽïð17z'IŸqö-Æj«¾÷Z3Ç+ÆU(ûP7´Œõ(Y÷×ìD\ò5\?=ÂüåçÅC: DIÒT ¯¾†›G ‚P }RÈç=7CD %ÊM{6“<à~À9F8‚Ϫ<·|Ž3Ê,Ÿcš.2€'ó<©eÒÄ´Ñ^`]íŸPÛ“ §)2q 6ÕÙ•°wå"ªàa'íÑ‚æ©0!22°ñìÆ#ßz|¾¦OÐ IíaSrŒöéi#šÈË,”ìèQ#È_“ë0b´T«²)Þ4 ¹gTh‡‡ÍSäé|‡gåͱ)ÞmÀÊ Kè8$¡áD$<›:¬þƒÜÑ%[IOª›E~XâæàÑî `š­ j%¼r´§u.8€Ø¢©o·+¦|ê*¸w8•ö~hhÖ"ÃÃ%—“ÖFL×2Lz€'Úéþ°¦ û³X¡;“¬pH3LÊT#›4Í1£3Á±ÍŸdº$ÏœŸ$®ñoò(U+û7WÞâGíî" ¹Ç7ÿÂ’X« endstream endobj 26 0 obj 6999 endobj 24 0 obj << /Type /Page /Parent 3 0 R /Resources 27 0 R /Contents 25 0 R /MediaBox [0 0 612 792] >> endobj 27 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 29 0 obj << /Length 30 0 R /Filter /FlateDecode >> stream xÕkÝÆ‘†¿óWpY`&YñNžhµ8Ž-YŠ$X†Fùb¬pŒDÞÝ¿¿OuÉîæå3s4Ç6 9$ûRýÖµ‹Ýͤ¯Ò¤]uh‹4/y‘eEZù!«Ò¶i]—þó¿ÓoÓ¿§Oÿ)O¿ÿ”fîÿOßS-;•^Ëc–¶ÙñP$ßÿ˜~ñ†‡YV•é›ïÓªv…ìϛӧ_å‡<ÍÓ7Óë««›ôÍßÒ?¼S¤$›I©]U1$GPªd$1Û©ˆIÉón™€tŽ€d ËÉ‹fÂ’cu’%ßýs;–òìØeåQ¨:tyÞ6U›ÎHK^Ö‡¼éê¡™ X#ô»{På0š£¢ÊE},*zÉmš L‘ȼO¯?!»Ezý×›ôI‰$ߤÒ7¼£(÷_+zS÷ê¦kжž°nPÒú8áp;%=‚Ò¿zvƒ^¿„tF ÝMÊ0žß$Oxò“{þœçc1©´}ˆˆi²ÉpY…ýÈÚ€ ±($¾Ñøßí¢0Q–èd+ÐEžÊ2%ÕdûÙ¶©„¼¨þ¤¾Õ?¯oÒ:½þrŒ [’å¢*m~ ƒÜBçÿý»ã=yÿá~ÿ|"›µ_au„¡hÕV÷±zÙ0㩚c#>k›«Jö»ªˆ–ÁF'¯Ù»ª€¢XúC—i$§=æç-¾J)0÷½‰‚‡ôÙ⬠$€˜ñV±€ìñV˜€½Þ* 0À(¦ë‹3nÞ»«€ jÆ_aô}£9ç¯0ýßa˜°ú¸üí–}b’6ÃØÔ‡"'*è?éõÿs;Œ²–,eÞæ‡2«‹‘Œû¹ýÏã›lŒ9ŒEŒuž?ŒŸA‹¼9äeÛŽ$‹Î:ÉiÌô»W7i“^‡ÞƒÒ%™,ÊìP·±L®Z<ôƒ»Æ¢,U[G¦8 #&¹‡‡¼âĉ‡îÊCÝO&WH¯ÿg;›MÄ‘´>8EGÆcM!‡Áhæá& oþ6N!ËÌ…8÷œÕ—y&“Œyã‡)ø›gí8}ÀÇ]b) ™Qt7 ¿¿æy•^ÕélªÖ{23¡ŽµðLŸ=«ü’ßpAS_2a¡-+i%PUjk­_Qްö«¾¸›òè#™ßPwèÌM}Ïåæ\—öÈè¶%ÄgFÀP[øì·<ƒë@†ÚŽÍLJÖR/ƤÁ«®¸³iTÐÓ8.\Zep$ÛYgXÆ%CND"¹~¡P)ì˜ñç™´»*Búoã×’YV•Èüjd`Èö© íàÇfëÑó÷¥u¦Œßõˆ5âÄ¿h#ÎHØ>éÙNmÙŽu÷é LnÜB‰ïz6K1 ÄåiYÚƒ—øTä^ ³î\îòD “¼'“@&Íbâ²CÕeYV’ÒÄÉbÕáGÉŽ®–’Y…+% GmË2¨CCI>¦Äœ²3A„O~)20W[ª‹ö€s ZªHQDM,æ°!ÝKö€& †:?4R ã)T9„Ö°Z.5´VVj«€(° i2@ƒî"@ìÎ.wè†TÐêõGK^©„eز‚b û$€³¯[rð›=¹F’síTi–=í¤¯¦© è)ÉZ3n>~2¡Ûÿ¶ú€K&RÆ’a°šóâ÷w/?`Ðx$^žkl8vMËa¨±tZºº½í-^Hà@)ñ8TÑ 2‘Qðॶ¢ (ôÒ^YÍ«›B^bXéǧí¥ßµõ\i£úoõN©¦œ¹‹ØË¬<¸ÅŒz Vt%`›ãaÞ¡Š{x8C”XÌÛÌKYz\þz" .;ã7´qÎôËŸnxèðKAÇ‹+ëáìFHBpGÿUÿüè*|aS®¿[8—Pøg'O”=wŒ^Á{¨šw «C÷“#ÒwïJâÆ€™À©¼Ï.·# 9…š¾Ž‰|- õÔÕoäEƒâÄ3z¹ .˜“ŽOF€’þuD<¦¼9ºY ZÖ`š·&µ4ØçSWÚ.N{®¦‘wŽc^ö¸ú6#á"UªÓ«2‘gï£È†×~©ò§„¢.Å_ÎëÕ᪲£œoGgT…ËohI?}Â@NôSŒëný<¥ØúB¡×_}¥ÐßßxÊþÓo„b£f7Ý¡ÃK¦µ?Øûp±èÆA;ÑLé”4äääzÁÛÙÊEQ$Ä´ì¥J,D=™3D„ÁÅ®Gµ ü›©1¯‡i)¦G&B&R -s-žae¾dW°‡··V&¬C•‰H'jÚC™\ѸÖ|‰×7?M‰ ÑÓZ³•­e™ÛµŸé¤~t¸nq@¸à  X*³ª1»+ö¤{XÑòù¸kkp²êއr]¯™öº5ËNCÚi›CÓ›Vç3fƒ°H±¿.ÂN ´ìJŽÔ Ÿ( aš ~'%ܳ¸ âb.¢ò㦠HÓ*¯ë7B¬Ÿ™¸K[ÑúGëÓÂD-íî%FZÙ€´€š úlŒÚêû>X`pJTœZjïZ§§-…äZ ÐëC¥*Ñ/mp#ä^ÃË(æWn1‰üÆó®´éMÊ2㣤Á¬dž¶Ú³u Ô¤¤AŽ ¤gd¡uT)»° ÅL©ödÑ÷í^Ã.O§U´É£/Z_7 hû3QJàׄiŠ”5ïeY{2aÞ ¢Åß.6eª,ÃÖ„¥kyTõú˜÷g–÷¨0‘">]»‰ì‹ÚMóÅܪYæBÐ>ÂH½×gû´ è;•EEÍöò‘Sÿ .òGl6mYß—'³$ |™%kÂ0™kL$w~!Xd²®àŽt%Ôࣄ ¨ãêJèG¬Œ1OÛÄÌÝ©3¬¹· 2^®MúKy "36t®dèYE÷×i ÏTÄ…(J jÃ-Á«¯”^¿÷ì–REÐê’ø¦lXÅ®„m-$õµÆ†JÒ²‹ÊçnVÑ5ÒÔ4jwÚ”g±h_Ÿ°èg™­Žì˜±hCAõ‚s–yÍ€±õý•±PRµ+àÊÀôJÄÚßêMÌ–`ÅêôÜ/ÓXV$Äʶ›Ò8#zQœ㯌á¿‘B WÂw®¬ˆ]¥G¢ 't/“X1}ÎÚc~W­ë_ô]ÔÂð3RMuü2.}ÒK$5ɽv¼FX 1Y3€£Øé+¤Ã8@F‘$w«Z—­dP½éa™ÌH`ìU `àòÈs¸St Üq]x–cF€¦–ã =ò@¶» [Ã)7–™ÙÕ«UK–3ÇÌÄ EDå$÷Nû_A Jªèü‹dÀ¦[üF P2-£ÿ2î#!Ü×’M@³ú*ÃF”B•j.0ãŽ6§OµübeííýMÚõ !¿®O|žu¦XÈ´šß?f#ªòÐ+´$2©hÉ„Ú|Ýq£}Ç›]ÛÆ^AÌ[â|(MaºèNkk(¼*hØ:îhy-©x]¤Më˜0n- §8´ëáÏ:æÑúéX>»à€uú¡[bN¸STzOŸC c\±Ý”¡íK;h(!JÎ#­Ä „¸w±æ‚´!m:lGëX£ZLp kÔÈz®•µñ¹±ÊA‰¶ðD)ö–^‹Óp$žr=¢{ã üQ»~‡áV\{©ufj½ b¢JåsRÂp‚bÚ@O„ ñJ ]-ó¿bqHA&`"¼E‰…`êÜÚ¯ ŒázøAÄð¯ >>jõ& 3¨ß2PJ”Ð'´Ü³–Þq…[ ©¼<a–"dgYëÙ‰ld¼5an˜?(¸âE\>Î ˜<|ï(‡èêòL%˜GUAäRËtð^G'†çöV¼© þ E…¡ÔaŽ=¹þ±"_ÜÕæ\ÉÄŨc+"=C‡=QÕ¨1 ]×Q"õŒB+/ò4!‚"ËÀ—…éF1úÛüšôËX„NL¦tMî&Áç.yßÖ»{!ÕX#ƒqöâ¦ùË<$*Z*0:»²®]UdÑîzÁ$t oxø‘Ã.R-í ’Ü®BWL®5l Òé2ˆÕ‘äPÎ\'@q-ºþ—Õ¤NIƒîE_¿þl>ÏéBÍH£_Àâ_ÈfÄ O.B3h†þ5É-¤·Dhe©à^`â)¹·€„ޱ8›ú FŸX(Ã@ŽØ‚%1l°Ë*飠ŒÐÃ9J–”Es¨Ë¢˜2t›a6[iÙ€v7‡ ‡Ý´"fçdtÎTêüÑX#Ž™ÁúE5X¥'HØ%ì+kÇ®Âþí¦¬Ì3Téj¨à »xuõ”²gÒ¥QšËÈJHB­ºC(!CØë×öã ‰±u'Üæ9Ý3Ð×}t Pà_«y{«…LÐí®“þ!°zºg¸ n]é; štÕ’ë×ÖƒE!¯­5k;Ô%­{kÔX4£wßêí‘UÂ𞵬•MWí¯ô0X2º^k…pÌVOý&€üÙЖÐ\¢ ”Ëþ™îʥà ,|$¢MGF‘=‹b̽º‘hj×e”Ó°®Bz”6ûý~§í0G¡}¥P{DHÚLd ‚Îãùmæþ´G¿í SÚk›Tjñºh‹Žñ}ßò2#JæÅ²¶J€70±˜ºÅwP!úPÙ@ tè-˜ó)ÏÄ(êc„|«ŽÙà ®|ä·Ö%î0^+î¯çÏÙw]O³e&2áY ’*‚–öØ´DÐÌmËž:È>áõâÉ!_´èkJQ±ê¬’t•öø±bÉ[˜±âÃm"ÇÍÀᮨ8›Tc¡š"÷¡F€æ#!°]ï¼EwT»Ñ;䈹3}.Ëæôù(阮# *çvÙNWpñ~;¯;˜ãjE¸‰N¸l£ážU¾Ë[;l•¯R1†±ùÌâ詾þú;m­@‚@~­X10Àeƒ2 Ü<‚õÕö$ÉKY<µ Éø ¿0ô®+•Ù†,o„Ç%ºÃz_!ïr)õ­•Z]}´-¬W*¯¶dKfƒ–‚µ°JÓÉbÁYIæk„ÔÆ‘¥Ê…¶e«‚K¿Ä÷…´¥¾C¿ÐÕ—Ò¦NiŸ´h_¿»\&‡›¶ñK0›ÉÂëQ²ûïàÅþAŽ÷`JÈ„[ì‡Oî&ûq—m»䨉C×fMHŸÌÑgæƒSËde]©1€ 9î©z$+öÀs*F¤ºmâ'ñ3ž#˜\î–Ó¥mˆ9kª8s‚xÊqÙ{ÓÆ½Ó®ï'‰N¢L3–Ù²ÜÃsë'6ôÊlH¢rµ×ÜüÙý|j,¢™Î-EΕhŽÇèË‘XT¿`Ÿá±ùŨ~@îå9¨~@ß%«þ„нª/€•»¢d.@×Mo¢rü!@r) +cé‚Q¹ûs­™µ‰‹[R·üر_¨;šP›é¤$Š•Å$ô³—ZOÒrï9¢n]! –ÆåÎÓžZÕ°vVN`&k@n¶[ƒ§UrwN£N9áçn GuspzÖëR=mä]<íNu“½(h¨uÿ¥7cå{™‘CŠÚ#/‘‚¡ÊÅ<{”ïþ2#ÊÇž“ÂÏÙ^v˜{9@ŽÊÃy±ÊúY}„›¨b¬u«GNÄ}Éå ¦ ËEº<މ ö“\¸Ësä^°Ëóé»è3&ô³jÝ‚¯{h­óe;0Ñh2Å÷ÇšÒ¹Ü@Ó‘{ÁZçÓwÑZzf­³·2çñn9É NyèÒ—æËÒ3F{ã.Ü»9r/XÏ|ú.ZÏbBϬg–N©&I®È*þ,„–4¡ãƒVö#ÈÁpMuq2#:2îÍ/hBç“X±G:Ÿ¾‹V¾˜ÐÇP¾/t^'_Ó;{Wý ‰¸‚W^‡E‚~9’#*È+Ž`›ã…çT|r/ÈQ}ú.ZcBϬ‚²v5³— vuž¨³àÅcÖ!*ÛçΩ,¥vP®ü˜› OKëßϤßy¹±rð¿PÆFë`3ØšÚËз¿Çx˜yúð# 7òQçéƒÚô©ÚoX;¸¶bàŽXFŽÌv+&„Ψ}©ìÊW ˆû¯ ‡u}s¯ ãÃý®š]zïÞz%>#§I³ˆ§ …;â4oùž7“—o½ÚÉÞ‘­ urNŽb:½>d¯´ã›þ™Âÿxjç“»Fä=€¼Ã{ØQí|ú.Zí|B/ÈŠƒý¶ÿÄr¹egðçü2IÞ²À3»b:çÖüΧï¢Õ.&ôÌjgsóÄ}ZÅœ¯ùð-ªÉ¿‡yÏQòåߪa'¬Èÿ%¾jì8õ™OQ\$m-/‰ª‘6ôµ©;õÐò5»áÆxj=÷$³µñ éØˆàÀr Q…’¹ÇrLf×wwØ…j;&Û"ZÉt®¥dï¾-¢i)ÙˆÔ ³ŸE ˜Ó­\S,û“\ØÉ¾}7áDá«åãìeí©ó²ªÎúžZ+×g…l®cS›ÎØ »Ïß1š(—ûzÑ̇¤ùn:yš’›5˜{o‚ìŽsð·¿lÞ¼úö~µ¿KžoÛ_ýôN™:êŽ=Î8¨‘Ù ‡bpq÷-Õ>Ñ“ÍéeÅÞ¡–oÐÛ7)Ó96§ÇÛ³r^KÄ›CfÊW(EøÌqÀÅ€ˆ»wQsìT¸spP6‰_¥c³þš”Ūæ¤, Fê)m ^z@a›Øô_@N/T9>Ä’“͵š>•Ø °µÐŸô øïÔÍã®$D:vM¸•,À?oìBWñìÍÉo¥ûœ–¯ê(0AÂ;†#Ê`$³®O±þä…« òílWèöŒËy…Ì}ÕžHþâ%›EÚ‚Œw0²ßHñ|Ïb¢Uô» Á¾&À¾"ÀØŒQ€w€ºYhKÞ_ñM×2-îº`~sO ­¿œØÅv+g³Bû%GÝ€ ò/b‰%ÀŒ¸Íæzï-WÜ”Y¢ÌKZ¯*`#ÍËMH016¡È¹[juÆ'œT¤„–†òÛõ +CéÖh@‘¨ƒW Ó€b™Üa£Ð$7¢(Úß¶§I¼sð5Ião9ðÅVoßaV·JÇváÓÈê2Ö1Ê#Xš¸ÔÈrâ)r]ÀÃRÁ e é}°?Ÿ©/+>"–‘ ŽIÏfŽšœ’Þ1'±(ü‘à"!Ò„L & KDUĘ!!áa«øGžbYJ>Þtu´XÔn&ËÙV8p%’ u}–¢?õœñö8<Æ\æ¬{¨_6©‰ªæûÇVüÁy£ê`%¨øÛ)žb¸"ÅbG)æ”0ý ¨ÜGrøW%¹ ˆ ò®Ú€Ô HbI(„IëÜ‘úüN©VО–ů#{X7j`t¸O…sxšª8rÓ jniŠPr×IвØôá©[&¹ntv ž&Wø:A¶g‚þVÕü¸U”…Sá™x·×}p”mÊT=O«á¯`°ö B ÌþsÿÝêF´ì` Y‹äéï?åþDlòíÐ £×Vb-bè6XëkJV-Ãf¿ÂQD‡œc¸BJË‹šw$óÃY(µ`±¨‹ÄW’,ƒ¨­èìô}ˆÐ» ß cYóÝ‹œïƘs â$d‚Fqoȯ]íôÛ‰%¦961±«&yŠÏa·e-êõX zß|L­‡0'Pšl:,ŠÏV8Á•câüµÕhá)‚å§÷0'iæ|×L"‘`çз‡tü‚ Š•_µ”É6T@‚b³$}Øy.‹R# âQ°=2z¢*ç³(þJSÇô-Sã_< Ã,h7øa%0ÁZ`°úµç7‰rµ „ˆâ}œ=¬Äs׆ÖÖöô7Á°ƒQSCØ1x$­ZŽKtºÓk+V 8DlöºÁpH"öÅÊGmåà,ƒ€þ{Y¾ÕCB+¾OP—åtÑë¬åóí ØðUÞÖz»{Õ©z°ætòH%r$ 1AÒ€T+Êz‡ÆSYºË‘qn2†ñµÜjX¸äq&lɆ5+»låìc§=‚En‚å¦ÜÁTO&×AÄÕ.>0åàê¸Ê3@Fˆ™yp}e’R¹ó³Åás¢µý£\'„RXzZ;( [´Ô9Ø"î$™¢€ŒúœÍ|Âh˜’!'ú®¼•˜#%„€õ—_}IôÂmqj ø¨ Êð‘' ” 9‡ÚTG–·gdf?žñ—5ŠÈ±’ðtT:w:¦áB’pH’¦ D†p"<N$ ìyŒìq‹J!ñ=ƒ€‚<("ŒP²ÌSÙÓíö¤MÉéûÊÆÌZ²Óˆ´dù©|¶eçêOvtãƒ.†ÕaÎ>LÕÁ>cÃz=01>e…ê4Z30Gï¨ÁÐßjdÔRøFÅw®äfãMçÕÍÎÉÄf÷TÉ æ¢f‹ #¿tÞP-Z4¶Ê¹aò·Î9gØ•7Ê 7GDq”SÎò'§,øÈQ£oŒ˜¡7Q!±ˆÜð}7þU¾Ûóà‹HJLJÀSX9%GËÒvÈnѦVQ¹âñ>5Þ6]³¬K¿.ÌKññ•¦ØÚEbA¸b£Œ#ÿ:¯@½>lV €w¾÷åË.¾§VHGÞím—q8z“F°=š«Šˈ³šO¨Gñq¾š}uÈÅCˆ ©ãˆÃ>¡ÜÑôºþFz‘[˜ŠDb)‰ SY3´ú[KÂ4ua$a.hMïÀ?Ü Öµ.5Œi£çá(Þ¬ìªxÙÑÖ¨}e¢dTËÌD Wx¯pæ¾¼©dk:K÷«=»¬IþhkZåø~JÍ|ŸÀ}y€, G½û-aí†Ï!HÚçcÿ jµ%ï;Mñ÷ hŠu¶> endobj 31 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 33 0 obj << /Length 34 0 R /Filter /FlateDecode >> stream x­œ[Wv…ßù+8 d¦;3¦êJ²¬ñÄpdµ4P4’02º;ˆ!Ä’xŽýüû|ë¬]ÅSEV‘í¶¬sÙgŸµ¯çRýãúíúÇõ¾ÙìªuYmʪ(ªuU•›¢Yï¶»Í~¿þŸ_ÿuý·õ³þ©\úi]¤ÿ?}¢[±©?ëGW¬wE·©VŸ~Xõ~Ý´©*¾Þÿ°~ö²Ü”ërýþ»õõÕÍúý®¿~ÏèçÆ_=büm·'K ¬N2P©ããXM¨ËrÓVF!˜(6~ZDãn}ýý«¿ß¬šõõîf]¯¯_ÜÓõëôùîfý°~ÿçV—°º:+¬ºi7Ý~[O™-šúˆÝÕXx°{õêfýÙ6±øY»¾~ÎS5}ÚRH]ë–LIO/oVŸÍyÕ«»fÓ4Ýîr|;VÀEP/ÖÀõÛm;ud(§v°ÈÆÄW³†jx1 ָʭ±Ì\A»O>àŒ+À`v»²“ú›f_EkØ4»®Û­üN^f±•&˜Zá‹‚Vx¢MVß­ë¢Ýì¶}W–‡áL(À\¤ÔV»MµSjJ2\O© ïv'eþôÃêaÿ¦Ù”[ qEw‹Žÿ+x€ÜkíoÖÀðEB9_$ _ƒ 0»‘»úɶ~üÀ#‚svÑ©Ó**þ,dG?ÆoúÑ$÷F¢æûkÓ!ªc÷ͤ$}³œ·×Ñõ˜Ók®þÈ0Ûž)Ý=Œ[m¥# çŒø봚דz·Ý´mƒIr =QBƒ;ŸÒüN˜5ƒ"Ú¯¯…µDu³âýåÓ¤:ü&ÕÙ%†3t~¨E¶ÊsrH¹YEKÆÜ,$ èüv_µL§ܔ]ëöÂ*¥£§ô².7RoeµRËíöÌôW¤HÏeµžÌ3\H@Æþ\*CQ*‘#Õ1CµVÌ{¥º €K¤ãIŽ`(ºÅ ŠÜŸcóé V$½Mµß­·Ù4GIËÄæ®s3¤ S´ªR¾¥Ñ’Æ,ùNgä@Ö2!&Ì‘ñ çˆ 1Qîß Á”n‘è7àEí‹›=ÜÖÕ2êÝÑm?Om]D<Þ7&Ò³p ubpÝ%uõHÞ˜¼Ÿ\ä~Þ ´¿§ÑÅãúÁ³uÆß³ ùßß[‹Ýýîf…¸‡Ûæ³=žàP;oärß垌-3ïfF¿×ë#–E2ZÔþø„3ò†ë¸¥·p…å3WJ¢^:J3—Åb¦Ncäyh¼?†úIswÂ|òhÓqÎo¨6c9K&dö=.žQ“ˆ¾Í2Õ¨@Û`­dÁÇ3Esðçõy9Ôu»ÙîêýX‹f#}Ö>5CI•™düÉA¹íªMÛå_ÊOYî×9¡ñrxaQ4XYmÇ„ä\Ž´uBmÕúZj0ض!¨y©”[2ô-«d3°‘SË䉛dÔ+¹fôãêgdµ0 ¶Üm{ˆž˜%ˆvÝf¯}ed Y]uÒ1»‘ý‡Ís™å† ±Û·ë6”úì|nðçGWàãëØG28~O¼Ãïa–Kxµ›²Aî<ÌÇ)ú±.ü%È‚1j &Иøã¿ð„žà(ûÒ xú=¬Qè‡=ÑÎ5Ñúç¥TívÓ5;ô*‡ï—ZÖÞn·Úª{ºµ·5‹U#ºZäç ÞuÞïОØÙuÁÏ+‹r³=P{´¦áì‘« "d>ñÊ’?‹+ÄIäÕƒ´€ª—nþQR'N<Šº á*%ã´‘RÒEÙË(D‡Eò.9zÍ+tUâ«Ë ;Ìq1ob^ÚJM©Ç\ ¨Èé-G„/ô_š¹Ãr?Yy3™-«¢¯*ALÓ¼’U"” Vì(Ú¤ÐÊý·¢Q"$c_i …‹¦_×;¢Q‡«ìu«OÊëîÈïLLÿú-B˜ªÆ¡U$>GtÓ~è¢)ÈÑÿ– 9s™—rÍ2¹éX(¤¼hd4Ëð–]¦š]¥µäë/Y5¿–(GŒ˜V2ˆ”ÌÜ"ž¤¾C!µáPâ.’HßBç·Åb³ï¡u®¾ƒ’Ùåøë¾_0”Áy¼CÓ6Ŧ‹ÜDa®ŽóÁçÖ)9L1s˜'ÊoÚ}õD˜” •Ìü•ÛaT߯“z­®?wŸ>ÃwÃîæÐ…„›Ýz(0‹WnÅ”†Zsé7·}¡ºâ¶hí>f჋ܟ`Å<nYð¦E‡‡ò4Üù¶ëM‡àÑõ'p˜ ?cyô€:0zÌo – èÙHÛÑúÑÔݦ.êÝz$ž‘žO-ó7ózÞ`˜]»Å7 [Áþœe>nM©”¾—qÔüDw«½¦|Ø8‘þL&‹»ˆ(#ïŠteIÈ?ÂEîâ©R'›âkÇ¢CF‡Bé ™R¹”<혻!,šEÜ ÈV}‰pÇÑ/8qçi„ÓXc£ySŒ„wÁH ïz3£ûÉ {´˜Š+ZL´w>t{XŠuÃæcÊm* bçê¼3x“ ¬ìÂÖwÛÓ_Fvá[µÛFµ)¾É 8§õ¹÷#“hLõ¡©&h;5 +$ È Mœ¡–+ŸŽíOjIBÁ±ÆA-/ØI]]O}/ÃÉ-I'ˆå/– z‡«ˆÐÁ G^¿Ñ®J |º/‹N±Äè79G1æ5:@sJ}¢/Œ¹,:³¯¢ª!>˜i…qY7¸€Ò¨‡yëVªÑ5-)ÁÌËRÙÐa} c´å¦«+”7qHü.ÌÏ„c Yêu% lWiËdahIʲb rrz‹+te<²eä~%½Ô~ J‘ü _H@êc=‰Š/Ú"ÅÏØ°E z’$hrPåt`¬Êrþ,3yL[°ç|ÿsy¾`Ʊmކtªª ;’Ä(hMÌlƒÎ&gìlö»}7¦¦äŒ½ÑóNé‹ð¡ÒjÌNF ,Üʕ̉DnЙߡõüüZ6ùº”àöâî·N$ÎÓ™.%ÎmEZôj¼ˆŸKj床jÙÓW²Íž,¤ß·RnX/&óD­K.E¿¨”Z‘¦ŒÄCŒ¶äðê¼pÿq"Tì‡O¬†=RÌK ÈP‚Û@°.Aâöf´Á¢(GøÖdÊ1'~›ê0üFðtèμ6”‹êšM¹¥´QtBŽó—»+ÒL¯4/é)_8ß”¥ø+êä˜VrJ,µ+e¾ÚðM&”¹®ä!F¾Ä³RñXW÷7Ä„7‘àTâ)•_„ÀÝ5úÛa•#a>A6ó¶ýÖÛSèh}!\‡¡%GÑç•뙀A˜÷Ê0¨ `}Ø¥[FÖ=ë>rhª¼@¼­¦î‡¯¦ÄT5”ruMšBçA)ùmÒÎk#瘛æPs—ܲ0 àÁ̼ɡÖw>•WÁc^‘ðQ"gQ–1¬u d"žÛƒµ¥Í0'ùàâ0msÀšixîæÜ}á\“É $æí¯iö›¶Ù±VJRÎ\È2~ÕDr¤ ƒ± 3ì'6³ûU'æ-tÓoH 7˜~ÑÁ° u´QŽÍEƉÁ,'v¡{´5jþœìÕ[­b¦« 4J—ÑUªt•â(Í €±t7K_¥ÎìõBâßÒ§ËCI-·fÜCX ü©êžÒW»©«ï28C÷h˜öW¤#ÄžûËŒúO;†Æ¡Ë€âÑFlZÌ¿mʼž8f老B(óêK˜nÈŽwÛƒâž?סáqF–b³Y±óŸ"ÓT@XÚ¤gzÌ^)&ŽIöÑn –‰Ò"H™FA)ð¤ªtœè˜B¯ aº`.¾2¥xr• æ˜©©…¢ ètý@>F‰&î&;Å‘¸Ýóhb@à ¿ŽØ ©ïÀ¨ JÏÝ eU7Y ¤ÆsFO4u<æM±Þ€r3TEäÆÜ¢'b^)šŠ;˜-çs#ÕxJäÚzOϹàÐßãJ‘ô¢4í^al0f‚ñ„ßÀŽoëKäÔÐ-ãB9ÐK>ñ`ôB (ˆÛ OÊAWd:.A‹ƒûºCxêž¾¶°Pœ‡ÇEÝàÁ”]î’œó~F÷PžVjÌŽpM9æMc"žû–þm E¶ž¼;hqàâôh=ÆèX¢„ŒiÔóy¨or‘ÞÀ3ÃXàËÓkAW9=h8n_7I7.Yµ,­ötÿ[ucj)g;><^sD$ƒa¦ŒÅò  Èei"¿™&SS*3?+ÜrÝu¾ŠÇ"剻ÇùüG¨[]Yû Šüf ­ê“ŸäÚEÞ ªP8òy¤LøÕå ¤ÃRƒ€¼•î]­˜"Ò»ó1é-º„–ŒÐ(ÉwÓ%Ú¢¿< qÚš–GŒjÂÛá(2]™•¨s¨£àôp…KzFD)šºÚ#¹Ñ¨"'nžQÃÕònq…‰£á =¢d=äAë¦]NòMÊáÝÓXDS7Ê;âfÅÕØ¸¹ÄwXðíÙ…—g©Þót±eÍÛo7Í!(ÛKŽb˜²ô8àṲ̈tñíah0œ0s@5¯6¥@âÁ,ØÅ ¢4ú#°@cøi 2Re7öé•2Œ\‡¶Y«‘ÝÐÚF»]0u<ƒQ[›Â ç Rî½M7‘ðÏÌdÄDH¿G4IùxÀ åVìA@>Ä2Bj–JÎ]ôIéÊéû†Í–™®j×µ4æ°)Ú…sËa)Ò_‚­÷Iié iêë(Ìëj[p„\W;ÿD×/—»#–ôiʯáôµ2AtÈÙÉéß%#Û¡%qÚA øÓ¨­‡P|ÊDd•1 ¸â.ð!È é”{)fâ_¥n^ ý_úíeˆK>¥5úÒŠn‚™Xîç¥Õ~œ/Þšó—O̼bü1•ä†i»¥fâXÓ„r´ÜÙ0~´ª¸V Uÿ6¥ün¥¹Dã‡ÑðÖ´wËœ_ó8AòaÕ¿¯ub^ëJY~4³˜"¬¸áÁºio”fîú…„)?Èé vU…aòíÉ]ÌóÄMªMU°U:âl!oOù×®NäÒÍà Þœ½H,ê›á5Žó`Ô3 }&®XRqäG.s}®a ¤*éóK— sÀµFäí•ß “s…!#« à屉A‘(qmN:ÀÔ…F{Oç°5@Q(ò1Kž”,ŽÝ1¶X\4ÔëMCevLÊlú7½ç=h½ãH¾ØV–Pó/»~ƒÛê¯RSæU dO|Æùi_¡"»ª»ÔÝD<Éð .z°\8×UòlÁ¸ÆtMÐëOjçç*=ämØ}–Ú\¸ÕïéíÞ„ϔۭR¸B2j¾àK‹ôØG`JêuîöÇ%k™j_!)ŸK¸íZîïɤÉCY¹*o¿¿ßãE[ȽˆKWƒ¢XG¯²Â¿ù ž!±5SÃû{.Ýd=¢ØMƒ( šê‘!¹*Ù²+L[Ï¢g ÁNxIôäPu6Q˜uÖu»gÛ{Œ62•EǸ°H¬·¹l»nLM~íÔ–ï*{Yÿ¿¼å›ò`³ÛÁ¶¾—,‘t=í-ÌëwSó®ŠrÁƒ-{Ö¼1¤†|i]•÷ ¶ó"ÿî *SüÈà脉äÀx¼¼Ä]îßù¢ÏDÝ>XòÆ<-W|08†Þ¿hi¥—Ô~^ù“ ›mWuý™Ïù#|ÀÀÂÚ¡Ú“Ìœr ãmÓsK ¿0\Ë\4 6šæØ)ËfýBÌË;^ÿvºQÑünUÜ[ßo+Ò‰:Eï쌆Jë‹î/.£?–qäÃ¨å ¹ù?Q²S°3³ö¿`ª»’­÷•I2ÊböâB8Á§ Î;ðéZÚ‘ƒ›¦+ ˆKr¼3zcáøVÏ„ Š8ÚÔ? ²Ë·ƒ 30Ì]? p—î¨ r‚Ó¸ /§=‚B†àxiv\„iêSrޑ՝içC`JŽîÖ€H fí¿²Ùõ3UV@°Jü‰†©º} w—º¹ƒ2—þT-§ê§ò1¸ˆé¾¹u÷œsCÀVé'.eëâMÑðüDw½Y½_¤‡Á¥Ô›™Ë~bVËòáï’çÔOI?¹'š®¯IÏa¹àXóĵ³ÉúôÛXÞ$f Èð›þ#-ïyjë-¿y#zàâØks)ºÚw@•ór‘íž^sâUèþ*Ýø^ó8«È½îWÐ)yzxÝè"~t¥yòÚ’¼îˆ@¾ØëúUœÌ;ÆNÍY%8ágWc?ëöh?K¢U»˜Ò%§)èÈBd+÷…ӿŵ›–KDøÃuéæÈ5‡˜ÃÍé;˜ÇÞú‡#œG‘,â÷ÉGýÎ Þå?zyƒ{›vG¤ñØ¿  o€*â<%Uòó¦SœÖ=é:ê£ÃÓi6§ä{­vüöïáþ›¦IöÖñ—:Ÿ"U6)·ÞÏ!ªpLħɺ6^šsQ8~ÓÍÛz¼wýM<ž™Â#óÛýÛTSLg4Žˆ@ZÆ+xŽY{®w`r÷˜w\m̓հ›·1ÁE)Nù8V›îÉH9¯»ÒÞ.hò½òÇ$õLCyóS¼Ð&Ç—ÄÀLœÆìÑ"àRULU™d<¹E”¥ áUÿRJBæm8!ƒ  T"|F;(ÍO×·©ñÞÓy_xýf‘+ì-ŒÀ_¨kÊ®9âüF'‡~Y;é\WéKÈíUàƒæ¨tx—Gò,¤vþŠÂN| YõÄþ¦ ã1 §¤L;¥PÊ+e&|g÷Ÿš¥­¿ç¼Õ_H}©ðßþ?ˆ¥ç6 endstream endobj 34 0 obj 6234 endobj 32 0 obj << /Type /Page /Parent 3 0 R /Resources 35 0 R /Contents 33 0 R /MediaBox [0 0 612 792] >> endobj 35 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 37 0 obj << /Length 38 0 R /Filter /FlateDecode >> stream x­œÙrÇ‘†ïû)Ú_£ÙûBŠ–ˆ! ÑAÇ e2L‰†l“–4áÙaëÊzúù²þì>½Ÿ½UUVVæŸK-ÿŒßÄÿŒ³œÿI–§iWm“´mÜÔáö¯ïâ?Äý÷OYüé§8 ÿ~úD›4ÉK½ÛC—ÆMÚ%u}ú1¾y—U(óÛÛãG/³$‹³øí÷ñåÅUüöoñ‹·¡ïº«“&?ýA'MÒ¬)ã·Ÿv)~ˆ/¿{|7ñå󫸋/oÃ3ÝdE|ÙpK#/yu·ñå—¡¼¥ ï+w¡À›¼/ªû{Õz=._Å0 £¯ÿ¶MóiàlRþá*ÊÊŽXW§ª¬!9O“–UàF=?›Ì¨DƆ®’»«˜ñ‰nB|éTD2ÀÙÐ#Ä´úÀ«(OF>°„îâ£Kuä,L+–AÔ…©¶óã„4ˆê*BÇjzqšÔº‹ßþvZe›&ESW±ö@mKP Ú#PšVÕ (ý½É?(éº šÙf7K›¤*Á~ݖΫuStǺ¹|sqñhÛ²C¬[Ä0¦›•íQºïÑÕ–ÝfE•Ty5ç¶,ŽQÅt/þøÇ«ø±@ßÄN®A2»Î²ûŠŠ¯A3x°Â ô>ª‹âí­ÿ ¼¯1,¿y!๮:Þþ5ùÒ¯ùÛ=åeƒ›ëº‘üÎqvM–¤#svçЩÚ$mŽÿ),¯ãzD(xßè¸ï½ys#D,–ëwˆ#E‰¨ ¸Ku~»'‰¼H“ª*õ|~J[Ù¬ïÜt$H¢'äéñ2ª ¶8XÿÍç½0>ÿ–g¬|öÅhüÑ|ÚÉŒ5©sÂúÀøÉ“ÏÈ&¾‹ÉgU•6û]±¡¿#Zp…-Ve–t[64rç!!lš‰ÄlR]å]Ò“1D:¶y\ ÷%8²a. Þ¶ç²Fl˜ï8rÙ¦«ËxÆtÚ.µ?óHøþ§8]\?±w§‡¶žY;î!L¾ŽÏŠèáÃÝ‹E™C´7_M>Bz¦>i°Ä€:žxoïÀËü£W¹xOC›¶x ±¸@ óÛ…Í7¤šíÎ<$Yô#25ðÏÞ‹ì#“eËó¾½Kç …>úÙU¨õœÀжœ‹.Ošª™Èy‘”œ ŠŽL¹µ•¥–™-ÎçKXÜÁ6R€][rA @šqnó^æi’5Y§îNq‰¿ØŽªe^$m^:ï‡t&KO™íWš¡3 ù ¬ƒª—aö¢g€†›»•ÃY¼¨ª®¯Ec\P‡JL\+ž¬ÊФ®YË|=9•û•;‹¶ÖäH¿Í3ÝÃ-®0en1%çy÷ZvĽÚùÁ/¦õN–«âÒïe㈅ q®ÁJ0/3wnžx>ñ»:_÷}ÉHWÁŒx:póÔ:mº)µÕ\bßÇ/„¢_Â6CÃ+prº0ù‰Û†“±ð›má]ï*û¤MÙ°R²K&hæØŒ¦¬I=“D¾3åf4Ù¯Âèm5÷\uŸWòy( ­@8ºþiW,h¤+XÝgë·MXaG¿aT#²ð…3ý^~q³í§²:µÉþC1 oeŽ ½7“€ðæ‹ß„@ÎÜG‚Çß±ió)Ö{Ð)ƒo)åÙpé2<®Âªû•‚‰žfÉRÓMËØ/islêÁöK"Œ¬ÅL‡¾a SæødQ•7˜çzÇ €ò"‹ÆÔ°[„Ë‹jH¼T}oìõßSFÔVÑËÐL P¶u‰¾Óè²#ª©gK^ô)Ù¶ht˜4 a|®ÇµŒl7DòÔÙµÁ®qFÇȉAúðlJ,’A¹Ìiò n©=y!pY‰ $´™d±=GYe¬ºŽ~³tËäágc iúí}t5.FƒC“.vÀRAx·ÁqûYÒ·‘ðæštŠ*úù‡½n-̬›@±ïæÐWöÅò²` H§x!x&ˉNY´¬Ô Ð3žK¦½J , wÅ ËÅÀ®€‹I=æp \aŸrÐÙc”0+01óÉ †Û+t°[*‹"‹ÅàÑQî$Y³¶N¶z ub@þ²t^߉eàÅø†±î¬j±Ú’Ux—6©5ñîí1 ‘Ï÷˜¬K:³LÆí™û›"oˆ9¢ ®6… ž}Š.ÍA‘gS{[Àlöb6sali•- ¶¾üf~Àá €a<8†·_ëåeoßèíC«î¤4 ³5›,˜ìC²|À¤Ê;HQä]«Ê1Xõ]¥n¼ŠÙ»øÙ–HÑR–¥ÀÉ!°Ÿ4Sè;'&~€†…ùê óCƒîÉî\2"‚]õ„¶’Iüo}°>:‡…’%™v ˆŽ Üü3Žt¼Oy¯õ^}=z¶Abl4|ô›ŠŒ)tdn÷Ô·‘rÇ\m¶kZ /¡$ä—”ô‹Ë*2€AÂ&Étât'|¨áÔ[Åž”óK«m4äìˆ²Í ‚hÖòà™i˜ñmyló„aR²15ó !»Ù]ü´ìô#azAŒÜ†G ]óbŸ¢>Ä©|\×›+HªøVHzd½ÅÆL´"íõÓÙПwî š¾Ð?«kõVC Š–é‚'iš¤³P>ªº÷âßHHé’ø*»‘ibi)7'gú>ð«Î½hÂôõÈBïa™‡FÎìm¬„åÊ~—ÖúÚ2 (Ï—£°\1Xz…žág»Ó¬`9cX]Ÿ™7dlY”SÝ0ŽƒËV–r–ù¤/å`5ˆùa˜]Áãc²²bûô¾'uÚañG U±»_¤…×v‡o¸¼Ý…«ž¿ MtõÞ#•D ÄZ?í›P ®Œ¿yKñHæÜ³ª@4Æ]…ñFЍ‚ÎСSúh0=ô.9J>̹ŠRyÑZßÅÀ0ò»É$›NIט&z<¾<´q®†·2eUgB- ûè™Ðýñ¡=*ûH/Œ“+cÆj'W=£.jÚ$‘ªÈJÈ+_¶ ë+Xà(Æ‘ùèÄ06׉¤Í/X>Å­A©ÞËÊW†dóÌ{:äÅkv>µ›‚¾Ö(Ѧ¡c/@®%(¹×DW œJïú\¨<$Ūª«êŒ›ù¹ æFHØ|dåXÚ´Û](åUÅž#¾îZ”ª ÕÔ´åLI k»dñÛï-uöÛàè°¡„ÿ²aT¢g}GhD“ d( F4CæCU Í3:ä œ!‡ÒÑ—žDðD†°õÅØbU†3/>+¸fFk 5B˜Æõ{bx=«d¢´¤ôX1x4øÐf)YRjŽîi$g"Å$’çá ÂÑ• €¼eζóÞÓé7ÞOš¾V„A±Tdzé•rõoj „#®Oѧmݰ²c$§Žj6°·å8³ë#9BΉØ9?8!dúX9lE“;{Aöë¿5¥fØ\I`G#±àŒä€ˆÞ¹0¸&µ†Mý¶Å0ÇR;î(·ý-G¤ûœû8V{V˜ ~rDçD7]â&ƒÙ-ݤ¥ ÌDÂÍ]–Üœ¹ÄÞÿ=WûϲПU™L”¢®dÖ~ß×ñ£*~ª„YûαF =»?›²»¿ç2ƒHG„B.ÚÔ'$£¾¬ï€Ð²m3Á253=bˆuk¢ÁÐ3N‰‡®&ÂÓ  ?LoÉ0àv y]ÔÏÝL•Z.ƒú=oY™×)§¦&ØØzÍÐK~i)–`舽s~†w˜gi{‚Æ}µ»`Ôò¼¨‰ÏRàG\92Š=¨Ž¥TÕ‹ŠÇÍH-¨ª•E ”Æú"¢„2’>D˜)þ;8~……‹›ðEáB­†à %3Z©÷ÛÓÝo¾+""¨Q×t‹´¡­ï¢U“1zU¹®¸ç#N]TœkK˜¡&EÓR áÓ„Œ·yñÜT_ô¼'/†jDÄ9ãad'çM ° “’M–]=SìºWEHÇÿ¼?˜kìï{ÜRÊÆqˆ”îCS6U2F‹[±|Tƒöj„ 8$jªÏ_êfBC4ã5)wèí«Ø€Èà Q¾<¥Ç£"³iRÞQk™¾Äˆy“w¢ ò¯üo+¥°Ô—_®Èò4sÐu)؈JÄ«±¯q°|37ãÙdª·…¡…BߎâÌжTm›:o†ùÜe‚³™5ùo- –kíüi©^@£©PÛî4T:>³ƒMC¾y¦ñ¬¯q—-Š,™Ï˜Œgæɸ6G•ìÒvh}No5!è*˱ ŽŽQžÌëYƒa,ÛJ!¼ñÃɦžëò÷NC‡rtø Ã’yqu˜Ë")± µvÀ$Ëð <Ф7·ƒWn6ncSüFcµõ ŒK Ö l’I¢6ù46AqXº‡ÞMžsöàš¼¤±Α l³h Î7ÿ1Ÿj¦ endstream endobj 38 0 obj 5514 endobj 36 0 obj << /Type /Page /Parent 3 0 R /Resources 39 0 R /Contents 37 0 R /MediaBox [0 0 612 792] >> endobj 39 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 42 0 obj << /Length 43 0 R /Filter /FlateDecode >> stream x­œ}¯ÛÈuÆÿ×§PT½FÖ²(¾H²ëtskû^/\ŽmÄëkØx[¶Aº@ $_¾¿gžCŠC‘”n¼°AŠóræœç¼Ì™áðþeùzù—e±åÿºØn6Ûe½ß­÷ûå®I·ÿùå–ÿ½|ô/?ËÏ?/7éßÏŸé³Yo+?ëÇa³Ümëf¿øüÓòúí²ªS]ÜÞþ´|ô¢XËbùö?—W«Ë·ÿµ|þ6}B§94ëÝvùù§t6ëͦ*—o?ÏR¼ƒæjµ{°|X.¯žq«—W/}{íX\ýÈ­Z^}æÖÐøÖ÷ëËOË·ß³RT›õ¡ªöËŽ![|`û ©„Ž¥Z\$ÕXÝ.¯nHU›ñqõO<"òíƒ…Ä ©þìÓp,¯~ë~« êççÅÕ?Ïârج‹ 5”뺷t+X=Ï%Þcó@ƒèXê"3B2J@¦@®Fþ®š8£@¨ê{¨¤cŠj×^E|¡deŸ’j’ßY7y¸ ~!çhÙ1o ¹}±Ii´âÁýñ]†ÅPÄ\‰Û& —B}S!svŸó¶®†!ÉdP3Ú¨€ÓPVź©‹Ã²SÜÉÚýÁ¢$EØìȺ2jЧ'F0 J¨¸­Âô#_Bh G=3ÜïÛä#1Þ%æû«éPWe7÷ÇYý”ûÓuÈ$÷v|LäKˆwôl‹G,{ZHò RÙ¦õÈÖæ²FæIŠ+–A’‡]$•b(üÅ$f„=§ýY_Á†w)vBušefÔ0{ê…¼*"3„GϘ}af£ÚcKÄ`ÏâF:‚õH6—½ç‡±=Æ“AÎñÝœXÅ¡^ûÚÂyb5ðÔÄ*Œ´ÃÖføÙÂyàçèÔ•6ìú;KøÛÜv™W“ØÁÈvÙbr»¬Üû·ÀÓç'“+÷›4³ÎáCp:´ J9æ²k.öšˆ#«6=V.Š‹)£Àýd á¤T2Y ¥qn˜-ÔTY.7¬K>Câ¥~-ñk÷ ³”MûCÁŽjs`*¬“D—Ä©3–³=¬{³ì,0øFÚ„»tˬí_€Å¢Ñ¶ð½7q™Bå²o¾aæÕ:Qh2B™Ñg~Ã,T­…]ŸONtÜÒ‹¦ÁC«ùØj[)ËÂtŽ{m‹iÍo«ov˺…ãd~½§O°y·m}}Æ·çÁbÆ·*öpëæ3Î$jÚÇÅ·ÞAØ©ÔÇé•‹°We;möâÊɈ›9Ï"Œ“Ecç0Nn| ÷Æq»´î4­a/ÜÔ©¡ó® áTÌÕͨ¨d—¿a§Åç×{-›¨‘Òó&&Jøa`€¢O˜En…•Q᎚›<íBÖù ®]5Ûûü6¥WïÀÊD¦…*ërM"¶ ¡BÏ™½ 瘹̨ޭ˽O¬æ‚yf>3šQLyØ®·›ª9QŒ—žçÞ½rt­&¿²pŒ¥&ZàÁ5n…¥R2»¸®ªr]îzHèU†kîÏIÁs~ȾL¸áפUS­›6•PÂ]4ìtþKÂÞ°+€Â‡ž] ~c”¸)Ð`g¬¥ #%x`ºÖ}Žr÷P@¾KË*·ÁÃ;j€Ë¬?–©y·4—˜‚ە›($%&š $îÕçê:ˆ Éôü»Ï !:¾š[QHËB(÷eéãÐ/ïS3·.1µïVПóÌ=Ûº¬Y†*ÛðBm¸Tø(xÇ@š_¼€+îà©GXIbÒ€k@¥ÇÅ`;°bÙT$ÙñÈnuµ©×ÕŽw@5elŒ0”©ç1«<{Ž䘘¤%"EÆÀÃ3MÉ´l‡T=HhêÔkqÕ¸ÊÍ…J×ÚqàY6ÆÉþµk6yºV`M;çJª vâáÿi ÚŽ)±ö3+ÔÈ ›»$ŒùÝ·é:5Çs$.ÝÐ+B#'Pµ½üäÖ®=RĽ‰9~¸6MojÅC@½ À¤pܤÛ¨[V|ž$\_™An÷Ûõ¾hp“>µó&‹€“Jû©˜ 2Fs&•¶m¶6©xmážarV‚¯aÜaFß5Œ¦t”ÖêåzëÀïLzPÒ³ÞRd½,ËÍ1­¹Øz#ä2hl؆aøÕIXã¡Ãs¬ü0f¡Ñ7&ež‚ç‘hR0ï7;~æ|,wéÅãy’ñÔZ´›‚;ápÌx7‡™÷ËÝjò‡Ýj Ù--ÚCU­w>'>ƒX´P¯´S¨ •ù/‹ Ãï˜MÇW6)W퉖ŽñðÊ; 5¾ºK»±ôòˆêȹš²Þ®%o{2{˜ø³a³®÷{Üs`]¿Ì^ŽˆFÖ×cUØëU³Ê·[$n^6?°iÒÄN{ë¤ÅÉ­PeWs{×ÙãrL“„¢se_ÖYä|*ç«zw¨Ì¼OM­>ÿ~WÆ ¹ €M~Œ4íIò~z7†.y«µ¿ñÒ•R`Âíl̨²a F'^D'V@Ï*à*îhí´Ê¶SÔh ¥W4‡=knS” ¡xx¯2–x!é>ŽÅ Ìéx·-XëÍìQîqEÙÁ5Ò”¢Ôº£Iãt˜™Ïqªx‰vîô!­Ä)mdµ›M³;Y_Œ  Èn'«;žš‡¸ò4rE} N"ä ³Íá‚¥ÄoARÖr=;Æ®^×,´_™  ž’m5$Üg‹I§/;9fâ¿“;ŽMÜ‹ÇLõà)µvû`»Æ¥(x›Å»dqٔŲ &N6Ÿ Œ3þP6ÅñHÊÐúÖ{ŽNŨ—P8Çp™0à P9 ø¿ãë?lŸ’WÄnD*b«‰5X#6I#‚t0‡"|ÀÁ‡nÄtžz}ß‘[ª™œéíߦDæ ‰Øä1=÷Ö ü´£anÌ™{»!¦ö¶‘ƒ°h*]¸b ¤ƒ3ØW€åö‰b°&U‡]0äxælÆ}`Žêxoy«ËòúD3Žídã(âCLT=Ó{Mq5}jfÃm¡?•*)>ì·H/‹½ìå—@°!ÀÛ;l!áŽq)C±íÄ*-tG¹NódŠGÚŽdïtÞ´ Ue½Þõf≽žañïÂ6ïÀãöóWC †MÄ¿¤µç+wœÍ B/€ëœÅ̹®x5“»ýºØ±»q"ð~f§±ú@€ ¶ŽU‘a?–•ó„Šl}åzô‹zï(†FV@#7•ã*["Å´·«ÙTÕ@´ ¨|Y2ûzk{àt_³+O€[ž €e¼DóÈ嫽é ãE0AT–/Ê„R2 ˜ùw,ÕüpížÞ%ñõ¨ c$ßñæÚ”uâÜæFkPæw¾Â1é|‡Âüšvðù2Ö½mgb¨¥÷´*äP[öz™íÈ–ÌjŠ‚07 KR3e(5µæ{@=ÍxÁ[¾«`Bû_™\p,k]ìå¹=bZHh†³in™z•óý…B=Òù@lA ½(' ¸Å 0áá…,‚;zW¥ôq]PŒ–$íÇ «ÎØÙ4D%G÷‹bßdμl W ;“Ã—Ì ã/Ù÷:rÿî”;(_˜³ô瀀{Þü>ÁïLÎ@føøýƒ])ÁFTÂ@ž«»%*™M3¸Ã,:ŽÏ¾¢˜ èÚŒ! ›Úq¾d¡ÿÇo‘aÃßd+”ä¶€<˜‡BcδX[^Ó튎‘£ëóæò‚õÉ{`×b01m Öãée¿ˆ~áZߤVzרø’Š˜VDÐ-§Öb¦˜¤±C!!ßÌÝü¾3õ •ñ•—r0ˆT–æ’ipØ×ád k¡NçíGF÷z©î¬d{”V`:nŠF4ˆ$Hë{ )*N° 0OàÐ I0ÿÈ¢¨¯‘Ò> Ü_!…÷ÏŠ‚j¦ñ`‚Øî‰#Ù¶çႨøÍ‡FI@/•„ç)p»‘ç 6Ó&í.1Kz¢põ­kàY4åBK柎yÓ]hrëÓ²G¸‡Ëû4÷‹ÄHË&'JæÇ4üÛùb·ÑЛFn«—®öÝ3ü²ø;˜KDo*þnNËVnFm"z莯ø. p„ãü1iˆ×àâ,ùo÷I4Lâw¬ßÀ"T¶\í~ìÉÓȵ€Ž×;¬g‹Æ÷Þëò#îÆvoÓ#°Lk âÍG]nʳY ÌÄïjß$° 8ÔÀ½²ŒH~n?™¯+¦…òé]ïðVÁÆÏdVÒm·&Tˆ Ö¸Ç1ÂJG*ÄÍ(tªBÑ€}Œ½|.%÷{º•)#‚ˆÄ-Ç´w²ðåC¢=Æ;øŒŠBÕ<áûDÌ(kÆV Ëö}Çv6sd‹ðcmooù4Ñ‹da4¥lIÜÆ,çÉ©eÔÎè0-ìü¯ üOÈK Ö¿o'-yftñ, P âVà@_MÄQºÍ‹ÞyíÙ’µ{%mŸ›|oÝÇãú·Ñ`8¸ëS~oQ»ÊÜÄG|²·Žgq¸ˆ¯͆™õX1ù×–Ãõ\§½L›ä͆íké+׊é¼Ç–톌šÌûïØGy›|½!G ”éãh DZDï ¨vÀ`Êä4ÃÎ#½ëZóZ™ßQ¯ôfîªÙ‡®i;ˆj’y*’~|CT‘»hÊã†]Êï¤+näižŒ¸ÊíXûh!ŸUüŠîò³cwì1†¤J''•xDÇý¹8årÆ4”ºLñc‚rpÆÔÊ‘ŽÑ?øÊŸÜžð)÷aÊmC¨è¯Ù‹Ñ3~  VR‹tb@¢Ä°Ñ0 ÞMøãÇNü€3ßמ¸ãÝ'/¦‹LÙCžø#)'ßb+ðugÿÄç˜wéji?Žø+ÀßÛƒûce<Ÿ˜ûtðê\¸Ol‡d/Îô¦§‚£§áûXcN<ÀíB'¾ð¹<¾ Nnu¾ìÀ« ËpÉ|?®\ŽèùtGêÐ=ÏÐéݽð\<Yö&Àú +ä‰üHoÁ) ŒÝô¡«ÝSµ"ÒäœÚ&Û~ÒûasèÀGìÝÙ%®E£¸5܋ߨ¦£Ã¼F‰NîI9Þ ¦cʧ+™6ë­^ —|xQtÍKqzîë;F F^déåÒ‚Mû#àöãx É~T™7]i5ÕNõÔjê•|€ÐNÏÁ… &ëU—  ÊzRÄ@?ʆè±ÒüÎ]óû‘lŒ­A$ŠŽ@4 NµåcË]‘À9¦l~Ÿ.e›YVH} åµ)2"ÃÄþiöä8u}<µ¦%ϯGÚ³‘#ØÎô‡âꦌa.ñ󹏨­·3¥™>NË£{ýôˆ¸7^@› Ø€Fˆ]d; tý˜è¦hÀ¾ ¬2}Åû7·XÅnû±§0-Lª?Î Ÿ2ôCŒ®Æ86E¢«É™]üšÆÞ±7'îæ!W¢ÞÑ»k;­¯s¨÷¬^2»Èê ÝRÔ˜š¥d_ÛPíÎnFç~KЂMÓñ½ö]ÕÈìg(ý‡ôR­ 9¢c«£B°@sÖ€1mÏô¿z¸5lA!Ti®‘’â=eý˜¨v~8Dq{ËÆ°µì`‡FâO‡¸kœ*8{Òª7u…Ú‹àBÞ…ÙM„rÃä=‡ 2ľy>Fí},6ÙO_­~ ßÌ>˜-¤P¼WZ‡€’SñA…"ê¨U4E9Šäß­VÊôh TÓv[pذfsýÈj&ñ€ÁÙCI¼-ê-A¦GlbFÅàV?šíUûýoÇ÷Z)¹çŸÄüÆ@ÇÜ×j'fã˜õr}bš£G;#&Evj6Qˆg©jý“G‹Ûêý¸ú¿¸Çs[Åíc‚wqÅã4¬ÛšÏvåŽw8ÇɉÖ.9¼h \çqÒ==ž‘IsFŒbõÅ»žÀ Ì?Ì> ˜¾[ФmJ‚¢ø®-·ćµá;¡ˆ.ú.ÚTg®QJ(¤ ¼Q7|"éÚxlŒ“פøÐþn›%ÖüÑQ‰¢»öÏ•%4ºÔ-»[õ!\¤ ¯(s7g%GsššåÓ@›³ñbÞßô×Òý1Ü{ÛEŸORâ?éÄûSíäˆH·bó[͆Z޼6L#Ú»Õhñµ½ì['w«ÖÙÃøbÄcùÐÚö1Ø­µSWzî +[¨Vó©¤hÿŒBß :³¶­ñ‡ÄA}sÞ¢Küþòât€Ð7ã‡}Y- ÌL¡ §o¼þk"·ö endstream endobj 43 0 obj 6188 endobj 40 0 obj << /Type /Page /Parent 41 0 R /Resources 44 0 R /Contents 42 0 R /MediaBox [0 0 612 792] >> endobj 44 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 46 0 obj << /Length 47 0 R /Filter /FlateDecode >> stream xµœ[¯ÇqÇß÷SŒA|èÀ£¹_tDÚV(^æ Q8‡ŽE"–@1ùÁð§ÏïßUséÙÞ%Ž Ûgº««ë^Õ==ü){ý”•ÿçeUUÖ}> Yß…æÿ+û6ûŸì³ÿ¹Ì>þœ῟?2§È«ÆžõÇXd}1æÝpøøcöå[F‹¢©³·³¦ PÞ¼ý1ûìY™—Y™½ýsv—Ý/e¿í²oóÔd7Ïhêƒ5ÙÍs¹¿§-™ó…F³‡mxj} ƒ/íÑç8Úã³GM ƒ>1|™·ºÂ& ¹0QOñÕ£5Í-JÃ8dÀÔ¡";¶øÈge…GÁŸî02øü”¸I<]* ڻܷ¿ªìò¢ê±?1{ìEKUR³÷#î´B†äHt+÷gÑÕÐn>eœâMælÏa8ÁNÏÆ£([£à“½À#«(±eÃéG¹[7F,'m.!¿º(ó¾V0øÿß  Žna<6›ÃÔœwéyÑ<Çjf׌A  jÔˆ6¾¯Œ¦ªó¦k¨­G [¹PÂ&KãU «8Ž›)±¬{‡)Aâ÷¥m\Ìô“Á_iƒ…¾¥^ëU\_¢ì™ä e©4½|•½ùB!Ä0$G§ô=#+ð$ܛޖ޻PêAþ ü;àzE ŒÙbŽb=I–¼ ;¿ˆ¡ [LZ³¡ɲ²¨ŠV&¾[ cÀ˜üŒõyP.† Ü7“ºé)ÁÛ!ÖFäC›„eÅ×ùaÝŒùÐ d“­n[Õâ—6N÷÷ƒêh–©ÑÀ§t‡@ø•¬`4@Â6‰'éÅZaʦWª§7š.CaèþÞ°ùØçX,R"ƒ¾¬? ÷ùB2;àLÇécÚ¸Êú|õ'Èöµ o(º¼Y—íaë ›DŒ›".¨]KMj_X‡›ï­Oô.Ô;¼óââuâ÷xÿ Òù5M¶`ô‰g‚•ƒŽË¦y§ƒLº‘è˜ábÑÄÞ¥ÄRÕm>”#ƹNdœ³LlC—2Ϊf“Áv3Ʀ ‰Ü·²Þ=²~‡\‘±¥ÄÐqcàŽÄ4A€ŠÞÊ~ìAz扨,HÚ C!A%Ì Êƒ)„6‡t1{ß–j ¹±l8¼X m>¼¸_oeRp=¨ç YuŠ˜÷!); ý6íÜ,‡“úAìâ0èã§»] “lìžs¬ïVflV¦óþLð¯v¬ó¶Z6Eêto²#Íý³m…vM@ÐBÅÍ/T¢âeÛ¿OWÙQ÷5ÄÆˆºón4¥ ¼ìš|èú>Æ&͟ɬ³ã̼>{Œ$ÍŽ¥!Ì’_i²:Üôð—Ú_L! ª3€Ì Ù¦I¡ "é BúbH”6¾ïýÎF Ô'FXdo¸ƒÉŽÀB°=Y@µ9ë&ôÀ’ݨdS<…Hï%ůx3\NÀ½Óî“Àá&NÈBó[ê;šE|ΖÏ8þÚüü G3´yÛ·“š½€º`4‡Ä–­Š|Ê<аù=O”-~%}â!÷t&"#)šàX!‹r¼&^~°^B9Ç žbcεü„ùXˆlØwõËñN8×q˜íYÓ7Ìí¶[žNTuäQ=ytØ*‰3g»:dí$ŒÕ¶œ±:'˜NkSÖ2%÷ãñõk¼kOWåm!Lz“×SáT&]ù7ÃqÎÑå+Îõ·(.H]…½ªçCØ‘’c'˜låO¦¨­6OuLÂu½$ÔZrZS cÄéCƉž—ÔêY‰¹ý+cêÇ¿šŽ1Ž_NœÇžÏÉ«…7™ú£ÄH^Vf회ˆ8…\¬é w§16éŸÂêúÐ6E‡-ž’I"e䔵Ï;:ÈO?ÍŽBX9cGKÌÙ±£8*¸ <ÜÄV´‘{Å{œªe/±ù¹7c‘·]ÚŒ6š¼ƒ½ãÑ#¦G47ªÅ¶ö%±Õ¨ÛÌ–~xÒhú>ÊWIâÌëZ,#œ¼[ƒâ¬'{•$n~ƒ½ì‡È2ïÆ¡rÄ«z˜]ûv´ALl{ìõ »´IÂ&a·¶¡SÁÎŒ_SÕHL“ÓI{&}ÑÇö‚_ƒVYÄ.ÓldMaÍëƒyŽ×nN‰áñå¨9¡ÔÐøjJÄ`pj ðð°oU7ä]×”§B;s˜v*´[­kÒàþYÑñ·^Ê@ßÉ@½‡˜Ä²`Õ=aHZ¶_*.ÂΣ'¬a’Üy^Ï÷QŽ("è_SÌ È%IÉUh™tÁ ê"ØQSÖyÙ}d°á¼q®8ÈxªÒ˜]5¢‚'×çSo)ù¡ÆTI`4Ï¿bAøT77³9¸ž8‰ÒmQ©ªžÃcOÒs§Ãäó¹£iñ´)wè”á ÷Ò9|8CݺáºMiØ©óeðôƒØäÙzQîÌßI6£v#7rWÃèº&ÀMü‰L%GýE;v1¶Oà2}–K½»ÃtÑtó]Óâý(Ö9·0!È’ã+Yi‹h2´ Íðu×öp"¯š+P}ÃÆùzy|/ìÖº“ÕcŒíú­ykÆ-¿…%y6Âï!¼fFH‹@nN!8‘…8á²Ôø³g6¦M›|‘<Ïl·]®àx†X ‰=øÂa®ÝƒÂ„ŸHöàð3Ògvc·ÎRÓYj È *Ìù=.pwÌ$G@ó°"î郬ZáIYŽ®§b‡ó~BVË$uÙà<Øø†â)ÇÐÝ*NI`tÙ@Œ3µóªy‘ÓpBo²¸˜Â íž!J¦Ô£V '£&6ûŠ÷ŸxÇ‚úìÂî€YVuá>Oã´!Ü÷81Zà`«¼St¶·Q  û̶SHoÛÃuBù‚$5˜Ÿ´>mÛåÉD8Œißð]›~  \«ƒ¶Î¿”A5Aë©UÔ¹¼ý¸Z[†û ±ç2˜ÌבöÚ‹<ƒÿÅÄ‹8$Þݳªp÷d½Oå%|ºúÕYÕ?ÿv‚Å¿_ÚÃXãO°§ÖüÎí·˜àc$Å/O£ ÿ=ùrŽÅŸ|‚/û'C/äc>!žãŒ×ûƒ!ÓStœ¾^¼¬sël:ïtn?2_Ï!½ñNŸçrñ龺wú²¿‹(s,>ݹõNòæ¬:\¾Ð?Sž¨ªpû6‹ &ŠI›ã %‹Dð­ʰ 1éã•q3ÂýyíFás>G¬£å%^+„çhäÑgÞ¸lXÅǾ}©¤K„”c7 Ÿd]B*#Zê÷~’0•²S!V¿d'•ˆ§¼fÄ^¯(ŠoÚÉËÁ]—·#…ôì­ï×Ò‚¹¿‡……7h‡ƒ†æìÁªX‰N×U®Ýü°bÖ~½ö7 Y Ǿ,*d1Ô)òW•Õu[YòâVå„VT9±<ѧ[ù°¡"ˆ>q`/H½‡æTš5Ý•VÎ H¬ðO†ØáBEøoÅ=$øF5žnóR«Ðå í˦¡æ/Ê®„BÃI”íac˜®“Éñ®{ý'‰"Y/Ð} :ôXù±5ÐÊƒÔ G½—ò$Å}É–m•wm®iK¸`à2G«±ÿE®VCÃÆÌ‚TòzФž¢‡;Ç«7eÑ_qêñgdfÛ  4q"UdkÖ€ÔƒÈ>¬c‘å|€È€’nSrç†\[Yåô]<ŽüÕ>›xFÞƒdKè(`ºxÒ×A÷ŠK°C¼²€Ž­adÆ RÈ7ø£0K?Ö6CÚ,ûµQƒ´¤Jsöd¿EŽLûµ™ê·¢”AÙ Œv¦aãaÛã³öQ Åø%äÍ(ðþ6D6ÍP"#ÏX3–¹ÁbORŠª‡*¯v+“¢ö_¯]µ÷áJ×ò"fÏÏ\r¸d×\çåPl~¡³sþ¼ÉsŸmâò3IXæ"o ä”0ÜÚ+†*°›Ž°.›^ß³„*íæ]µœkøE@P"cõñAÛ¸Z@6جËã£Ý^ 4.' PÎòÙtKQiÐÎRöY­º6¯j6 '¬^Þ¥áWG]ÒbMÒ"çuƒ+Œ[ôPA¡Ï“X «)32vTÁE/~%‘(âÓ«ˆ?P}“ׂРˆdȼ£2•º­J"![fÚIST?hå”!4eÉ¥^™tÖ–¨¤œŒÙH§… hb]Ö{0Ãz<@pk ñ‹šéJqfØ uà6tšeÞÛd““Ü‘­+îçFﺺS?-6¦›îáÝ t–g-Ö%;HKÚ:Á-ùA é% Ò1àR€Ò±‘«'é˜1oÄ'x§áÒÕIpIÁLÓK™ AøƒÓ3‘*{až,“Æa^2›§3Hp(zÎéÁ0Œä¤•“F‘ªí«~ȹ;Ð.ØüÊGy¦Œ÷ Jqߘ‰˜¹$Ã}5V•IÕ<» Èúx†Å!„·y%J$0aë|7;:ü÷aÈ–Â1DFÊLÖ¾°*^8CÏåȵȢ1²~²8ª¸ÔÂG’}ŒM4ž*à4p|§’ÙiObZFN¾;k æK0ü(Ã@âŸàì á–^ìXNë‘ÑaUƒ"caÿœå†ù 0:¯ÿæc; endstream endobj 47 0 obj 5961 endobj 45 0 obj << /Type /Page /Parent 41 0 R /Resources 48 0 R /Contents 46 0 R /MediaBox [0 0 612 792] >> endobj 48 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 50 0 obj << /Length 51 0 R /Filter /FlateDecode >> stream x͘Ýã4ÅßóW˜JHíÃzmÇq`‚e¿4_˗ΨÖt:ÄêöN}½Q¾I÷ʰ¹SŸZm•U›ßÕr±R›?Õ·›ôÛ;qBtëÔí]uFë‚êñB•ÑÆøZmng_í'^n±^¯×+õ(¨åS†Z-Ÿ04jÙÊUµ\\1zµôyö9K˚ɓ‘›V-Ÿå5]~bñG¾¼^Uò䋱Œôóäù;ÁÚ¨$.Aü«UѸׄä*xFA!þË9´\ktcÛ uDB)«Ï,Ï"E4>pžù¦LÂŒiC5­b»Ü=“q©O ­sÈ(³°®€LÑod…Ôwæ‡ ¡†Õ¸ S7ÜÁ¨¤Œ3'°³ôB¶i §(xž,B7—h™ú@¥e²$Æq,¯rF¨—3ÈP,>)@¸ŸºîSb&Í;§k‚½ÔÈÛ'´1­&½×ÚP"DpÃ8¢·]ˆ&±Š("±&[Bn‘DMQZI ‹NÄÍÌŠâ$ñeÈúã ýÍ`EÓÞGï6…êÔòEr6Òýo ~gT½f„™°ÚÖ¤° X€ŠdUBšg†rEµÀ~e¿ïÀh±¢ØlûòAí÷ ‹¬ÇEƒéL£uAáéÙx9Rw¢V¼Õ]©Þܯ&V’eF{‚e^‰Ã/Àaþ„~8;d Œ¡„‹Š ©}\‰¡2ô·d]¶HiD‰–ïà |‡pÖ–Ÿá4U1EGÊ÷âÑù—¥í_Aè#z ZÆ^º© †’¶^]§Ïu]¡Õ9BŸ_ ‡­¾>Öc^ÒJ\ÊWÛÄ*GIDɹrÚ(Ge¸V%ƒ±9ÉYYC9L^äîˆ83dm¼£MÍZÑL—×xGÑö¶y»ÞýQxó‹_@³¦Öî^ä;ÚÊpÑ}^$Â.Æ`ŠÏˆå `ãWM«ò¦ÏgÓ·­ÎýSÙ6Îö/eT«ãmßIò‚xQ HõläÉõ«Ô\³'çSÜ›e¥ d«Ç-(%¸öÛµºéÐÉ–/€\ð:ˆé>ºõÿLÔ& endstream endobj 51 0 obj 1268 endobj 49 0 obj << /Type /Page /Parent 41 0 R /Resources 52 0 R /Contents 50 0 R /MediaBox [0 0 612 792] >> endobj 52 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /F1.1 9 0 R >> >> endobj 3 0 obj << /Type /Pages /Parent 53 0 R /Count 8 /Kids [ 2 0 R 12 0 R 16 0 R 20 0 R 24 0 R 28 0 R 32 0 R 36 0 R ] >> endobj 41 0 obj << /Type /Pages /Parent 53 0 R /Count 3 /Kids [ 40 0 R 45 0 R 49 0 R ] >> endobj 53 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 11 /Kids [ 3 0 R 41 0 R ] >> endobj 54 0 obj << /Type /Catalog /Pages 53 0 R >> endobj 55 0 obj << /Length 56 0 R /Length1 29704 /Filter /FlateDecode >> stream xì½y`TÕù7~νwöɬ™-“e&“™I2If&“mB–›d’@’°T…\°â‚U–Ö¶_Ðm«Ô*U+V«õmm«âÒZ•ŠývCax?çÎ [õûûýñû½½CÎrÏ9÷Þsží<Ïsι¬ºæÚDC6ž„æ_5w9‘~Å«¼:õ*WêÚ$¢\¿pùW¥®sŽ¢m¹béÚ…©ëR$]/Z07žº&gÖ,BAêšV!-ZtÕª5©k¿@]¾tÙüt}I åO_5wMúýä¸v]=÷ª©ö+?f×˯Y®§ƒ„>^é»/¿»lW>‡J>Õð¢X‡Wàr&9JÊIœÈG $HðDU³ácÜ@¥zÜü@ãËš£oøq*¥ûŸúÓ},óóqûÿü÷ªÏº­_Ø?Ç¥ OHýð\Å®d”Ûðß«Îî±~!=)])%3Ÿ".š|Be§\Gè—™ÌéLæß™Ì¿2™f2§2™Ï3™¿f2'3™Ï2™O3™?e2e2f2d2ïg2'2™÷2™72™_g2¯g2¿Êd^ÍdŽg2¯d2»3™;2™Û3™±Lfk&³%“¹%“™‘É g2C™Ì`&3Éôe2=™Lw&3!“©ÉdB™L0“)ÏdÊ2U&£Èddâ9 s—â¿IñR|JŠ?—â“Rü™"ÅIñ‡RüŸâw¤øm)þ­¿!ÅÇ¥ø)~YŠ_’â¥ø˜?/ÅÏIñQ)~VŠ*Ň¥ø â½R¼GŠwKñíR|›o—âmR<&Å·Jñ¨o–âMˆÅ¦ ®ÒÕ)^/Åë¤xžO–â>)î”âV)Ö±xNK'ÿ ˜b#ÿwr'Ân„ÂQ„×ÞC8… $A!Bš&!ÌAX†°á„G <‹ &BZW¡uZW¡uZW¡uQ_ ò.Âç<Ñ#.@hF˜ƒðˆà=²SïÓÄÙ£g¹£g_;ûÞÙSg…TÂ=÷Ú¹÷Î:',oQ ^tû(â×ÞC8%xE­ðÞ3§žá¤HßbÜx°›Én­õˆßCàðZ5»”OP½ê[œ‚Bº–#ÞÀÙ¤¶’îADhF˜„0ANÞEü9Â9îAq ÿî{V[AtÃVç 7:^ÿ5ò«¯CtÕrDK—!ºòj«óÊ«7\“³êÚlKîK-\ŒhÁ¢lç‚E£+r+­×·9Ük-aî.r?Gr—±w?·‹{€h¹Û¸Û¹;ŽqÛ¸íDKœÜýd†„ø„#üAàö¢Í~’Å=‚{¿ôAÜû0É:÷1wû¡lOô)dv±LKw3·(p7q7Bþ¸õÜõD@º.^ÏM—ʯã®Ò+¸é‡d×nù!§+úSîÔ³öW£\`åÓ‡#QUK ·‚8G= Ñf1®ÞFîcžÛÌ­DÜF¤ìþ HY?nH§k¹iRýŽÍ_n5RVm:]™N¦Û­BÊÚ­L§Ë¸i‡’–>\Sr ‹¹YÜln@8™ëç¦ ÈMâúJ 7a2Qs³È8ä‡_p-®Àõ“H‡TÍ-ÆW óñ¤HGð¤yH“n>ÂÂ,„Éb\ƒµ6ÎD81}Ý„k6êFΨu´XPNIâc7õ ÔG‘2(Õ¦Û»Ñ^Á 9d¶F[¬\0]Q‘NË‘24–¥¯é´7Êã[ZqM‰ ñ^Ãn„8®V!\+g^Ý‚”=©)ëz}º¼.Ö¤ÓêtêJ§UHÙ}átJ——¤Ób΀!Œµ\kJr?ÅUbÈ6ÎÎ9€ §å²*9§–£r4¾ ½U9 G䨀%cr”¨÷à/‘‡' ÍÁ“r‘z€ˆ<„‚AIèÚËFF'¦Óit&C šN§#eõoÓ7!Ûô·éô#ú!=‘NߣŸJן#eí?£ŸÖâ$*5˜í(…Ãé ˜æÈ¹£Oü¢ÀE þPYYôiÊ3=çPA¡ç)–=|4?ß“)ÌËËææž/t:3…Ù9éÜF9Ujä8J‹}Û£x"˵¨QHÈ$RÀŠXŠž‘C}S¥ž‘ÃëùQ^~TüØé”ºùç"otÚªÍô¿•ƽÕý'&4YÑŸ•0±ö³9*> EÜEì’víß½_Ü_( GïÚÁ¶î¸o§šoŸÿ‹ù¼k~–?õÄøoô—G¨ZÌ¥÷í¤Ú‡é=;¹€ý^_iÔv/5ìl£¿ÛIBkhæ‹ :.ŽÐà¡WXR~è8¤Œþ„öÐ R› ‡6ÈOÑt|¥oqÐ w€pôºUBΤ É·¦Ó­ôéÆÛ‘²ò;ÊÍ-Zº›Pú*}Eªü5R°!}¾rHÎ0«8TYeÉôáÜÑÃïäKh°çD_z™¼ü¢_t2(~Ñb“Òc€&»>fÍa©èy¶<í› 8M¼?°>ü”–F¿ z¥5&µÅïgé^±åDŸû„bÔªCoK/#Ÿx½Ñw?¡âóμèჲÀA F<ÚØ=z@¼q@8°âúm“5úÂO©ëvj¸².l«©“½ÍºR¹ ÏÞ~›,pÛ˜¸uLÿþ9øÛç²À¹À©ÝBàs€Fü¬²**~†·±ÇìžÜŸJÛǧҺéqšÝ@ü»»énÜÉÚÝ úG*¾¹ð¹i ¬G¯Öá'~»nõl¥-›ñ–M%£ÑÑ®Q~á(í¥5£Ô7Jµ{ÅRm1UYô‹¶Ò¢ [ä! ´ Ëé/õ®Ó¡ÓœÏ¯+öëKº²€¾Ð£+òèó t®=‘d\C£NÓ°ªáþ^o0jUjV®PjyA¦Å¡•óñ‚å¥T_J5ún=$Å8ãWñß#¿×Ë5DÃkôãÈ8Õ?Cµš€< º_ÿ;¢}Šj¨V,Õ;i^–]‘“e1زLBvVðô²ÓœÞ}úW§_;-o>-ž>p:qú½Ó2r„jOŸ¦ÒL5b…ðUÃé†5ü£¡¬¡´¡¸Á×PÔPØàjÈop6Ø, ¦}ƒªAÞÀ7†¾ÈM˜ºI÷@kÂL‘NiMDÝGxW¢2ÐPõÍvÙJÖ±¿ù©iÊgÄ4øoþ=÷ÍUßXó*y‰ü˜l’êB“ï§[~Ÿ oß—ÉŸùÿ‚ÿ›0"ÈeÇe’'… r¹çò§ W ‹„ÉÂaX¨ùÁA¹¤ru:æª2\ ¹FÄ¡øœÙ³fΜ:ÐßÛÓ=¡«s|G¬­µElnjlW­«­©®ŠT†CÁŠò²@iI±ßç-òº]ùy¹Î‡Ýfµd›MFƒ^—¥Õ¨UJ…\&ððf”Q{ÂÞ6ؾ$áhbó\ íÄS½Á19Ý£+*O·JÈ bîNd÷ $bÝPB¸¼ÉÄï5üÍ›{®ö„àÅŸgÂÜx¢¸Ðí1¼å<_?„Ç&rÚÝng‚ó⯠Uø›0×OúPŽ ©¤+AúY8rîý:’:÷âþÁD~ærˆ=-5”‹:ùDÏÑ˺9‘Žjm±É>H´ï'ˆ…5;Uu¡!Q ›Ïk@Nz &hößÔœ –^ éÒW°ÛÞ«û´Ç—xÚã‹ÑøÈ˜žJAÔísõ#N·[ê4̒Ƀ5ê6OÛ5F»ä Zƒ +Z–¤Ú&*e8m{ýAŽ(³>ën; Kâ¶d<1À 5æ 5pl¿¸Šà¶T#‚fRŽJïLÈÛŠT'\‹âÜÙæ:Xvtlû™7ÐÆ=ñ¹3ü\tê á½í‹¹Ý}Ã(B'F¹ºcRÄçj_äÃ5k;‚Øí—–Ç-adBG<1Ô©Ú·¸:akniO‰,Üžuý‡N~¬Ý¾ØÅ.ÇÆ¶¸»'^\ëfm@öò2×X»oÃÃÚ—´2ŒÏ£M¢Æ®¸„qÛ\Wbã¼%€þænÏп{ÌÐþÓ ì?¸“q0 ñ‘%l(Kp§€Ä5¶m4ÔíÒÐ@¯®ö%1Ø ~2w¶/ò´žé ¸Ÿ÷^~¯ÛpØccí¬‹sãè=ƒ þ0wÑÔx èO[B2 áoçÆ†ÒE騀‡„8bƒJ! ¡ðn‘Ux\cì¡ o";`p?º£åeÝýƒí1Fhɵ 6ž´;O"ßÝw¾˜ÚÑf,x’‰ÕLñtONQÁ" ¤PKcMÓí¥§·;§Þ0s°ÃÓ126ÖáquŒŒÍ=rnã<Ëà;¨ÕŽ-oqIìOQþô6g¢cûPÂ0²ˆÖKb¯ÇàxoL{óä U®EsQ‚¿f»Îé6žo)òõÕižõƒÏ>ÃèµNNW5p·Ö9†:ƲèÐÔAðÄ|¼¢=.Eàx}8'ã~ÈÛ¾xJXN7^)““Ó¥xˆÛÍøiÛ‘ÌÃEbãäÁÔµ‹Ìs"b0<ްš£™ËTV³1Ssþöðfg^'‰>¾‰¾!ÛÏÓö˜ÑcrE™`Gïð×OÀÿ]—PbêÍmƒ¼“cMãœ<Ë©˜¶€t#ƒ $æ˜ÁãzÍ“0²¶Á£Î†!—ÁaIѦ ¥^ó¼D™%Ù†mHP++'«€ä¾­•ç ÉÕ>6’&À‹‡…¦¬u|ÑyVJu¼ËƆÑ<`]g F“‡ðFð™‰ÁÛÁø (‘5a(¡có]B÷™¡¿Î¶A$8w²”qµ»1d'\#1I$ 9Y}¦øÈ¹÷FbL‚ÑÄ™&qz ´—’byÙÿ[BßB¿iûТzôI,Å\Õx-zÛÀ`šÝ$ŸB‹žÏ÷ Õü0 ùS@Œ‚ý©ÞP²³ºàÃ¤Š #K•ØTÁ_“¥N¨*ð@ü±¼¦ÄŸb@aƒ—®¶¤à݆„=ò]Êô €ªºX_ð·gMÆ3ùé÷¬IP ¢Ò«¨Ndy»æBYHݯA‰z_êfa»pL6$û¾<"Lþ…bŠâ·Ê¸ò¤ªKõ=µ[½[S©yT;Wû›¬XÖ1]îú E†ë ¯Wš5‡Í›³-ÙÛ²ÿmÙnùÐ:d}Î6Ïö{Üþ;Ç/ÿʩəŸsCÎý9ÇsÎ8'9t>í|3· wIîݹÏä•æÝ“÷û|U~n~}~¼ §àŸ.fÕi÷:÷G…K ßñzE…ESŠn*úIÑßÑy<ƒèÙ`VØU‘nÑk V—”‘²·2l7è½ÉŠÂCcsrjÝ?ýöÃtÀî­*?s˜>úLXmN ß4oBOAC*V-_$LùjïÄþ M˜ËåFán$k1æ%ðÈæsjÈÕâ8«¥¦´´†¯Ù!–jóJw‡òÊùòybÝË3i}¼o‡VÔjöÅ´¼q½Û¶–:Ö‡Ãu¥ ²à‰JŒæ„1ÊbÒ 9vKìç³ÈÏ?аQ«*8µ»Ò O‹\®°¤R_ ÏLç)”+ŒFk¤²—>ŸÇ³¶©4Kmó¡æ‘ŸÍn[:uëöµo?Ptß·Ë'-möÝXÐ5¼iGËø»o~ lðwNàç¶7{,YáØèâéŠT%ß[½õû½ÜßÚÞ>£Æ&pg¿<{µ¢õ¦¹s×7A¾\wî”`þ]d¹hÈ6è,ÙzÓÓ2o²(íbE ”>ì¾zT<—oÓñº¢Íœ/çå;ò…|*—sjjÞÙL…êõ9Á ½'ÀQü‘f  Änx´ žGV0z¤±‚öMÒ`k#F¹ÜSHŒU¦¢H¥U0Í·O˜×~Å·göܽ´Ñx×üÙ/¬N&Ïl¡òÎØ%«K~:ýв[“'þ|òÓÛ‚ ç'ßw8è úÅj=£m¬6 oÏNH¯zÑåÌçów8E'ê4é´ûbº¾d‡Ž7¯ózËs7È¥Ž‡'±Z}}ÆøócœÊ)ä Pnª«8p²bME±U éúžþÞ â¬Þ—÷G‹'l^:­ÆqíoîŽ5†µÖB±ŸÛÑ\üLyô‹ýßMž›Þ..œ%ä6\¹íñ¿¤²5°Â(´=¯ ·>EôØÊÑ­ÒvêÕ6;Ç©ðÞ$¢ÄdÛ!ª+ Õ ØBϾX¡·ï +Ê÷Å*T¼jGoÜ£7™ìtÇÙÝ®=!µ}ƒ?M²ÝJ¨JY¢R6vdÎ H k‡Añ4ºÛÈȘb¸óÝ•M|m„—X7EÔ‚kžÞUXRçO>ÿVY¥[?{¶®0|‹Ö†Ë mÙóÍg楩Y65ùëð„Ê|ÍÙ¿;ÄäÆ†Æœ³ÏKZÇÇ’ß¾„’ÙìÈ ¢DJÉVq Ñt.Ýn]B'Sñ:Ç)U*+¯7ƒÆÆg2•ѺC$*jáU¥ùªªPnA~Á¾X~iɾX©’Wî(åõ{Œ:‡¦LeÛàIåx@„E8$vöØìYiŽ¡$E¿üåÉf²êbp¨æYKÊÂÉß¿š‚†¾0XñªÎUSœŒ]‡Ø@™éì{y±ñÉáX{^rMCg)vÛü·Þn-'7ˆ9Å^Ÿr×GU¼Ï§åòdy|Þ‘ÊÌzÆ·%à[=1ôF ¯À·­ÖÂ[vh‹V«4ì1¹ò .WбN™¢û¨$ÅŒØ||§6G$ÉE ±%00ˆ„C^…ÿb>µ]ÆÇÕLhAºY0 5»ZnŸyöÙNåg}ñ|ç„+&]µgFï}ËV_cÕÒ»‹ŠÌ ™eb±ûȦý†¶þÀ’“<9¼ °=ùùÏžO~rÛW6 ÷•éÂamAE[Sšdh¡ŽÌC=¯ß!<¶ÀŽPH®²ðv›}_Li3yÃU|a¥ÇS¸/æáɆ²¬¬z}é†<Àæ°žöæ’äŽ0¡Qm{sjÒJqÀI¼“[›nã娕ˆY:3Zú¬\—íõ'gÕ–Ͼ©²”T$g¤‘L÷–ùm®ÌX<Ž>VWfø²¾Þc5©Ãa]aÇúXrV[S‘]{)ÆÃ«»µ=ù07],4 ©§£?=~®ãÏ!E¢I¦T(÷œٴ/fÆ@µÒ<„!Ùƒit}mÇéãRÿ†3ýÛÇú÷å7ö‚½tɱ= VR,f 2^¶CŒ:½n_L-]Ö êà‰cÐÒÙ[SSƒ ¦7¿4ã§ z_óÎ[܃òŒþF*½6¶å;«J Û ñÔP¥‘gpÍø¾ÌëH)_*Z}‘ʾ•ì:‡ÞLûeE™žy$Í5º¢ŽÉtý´:zÆÍÞ˜<úÝä]_ÃPg"üqs_‚…¦Â¾h‹R²\°ù Y•U•ûb¹º*Þ²‘l¼RYãÌ­â]Ë. 6i#>V™brjµÚ">²W “½FϱÁZþƒlù‹Â9Y2¥Òâ­ ‹Ê½6íº³oT•™ ˆPˆ­óCry ÃuôÊ»~Ý.2µ%¬Ív‰]_=Âï›ÞçïM^õâ+_3D¦}±¹ê瘫 Ð-ËD¬ðlÌÉfU.Ÿ»C%d­³Û ëdÁ¿‡¹HK ‡d…> ¤Ê»}ÏæäÔ`šRš–Žãn_óÂm½[Ïî?ôß7l?—Ì:üý«îëÚµpø¦©~äýTxò]*î(ù«ß’|f7÷ËäñäÑmT{ømZpóÀ8HÇIÚDÄ/Ò.zs]¼k‡˜›‹‰(%M%YÊ´C3o[_TT^ ‰ÕJ£¤ãKú¡$[%ó†ÍÒTqéÄåžÙtžBuJ‘gº®‚~7ËYNve(éÔ'un~bþ²ÆU+¾5±bòòÖù•gÇu”Ø4—·´hß’ aʸ[WL[Ù‘ÿà›¼YV øºa¹/£ju¶B§àû#Šå ^!êuÔ ÿ…3;ÛË{wˆÙf'³iD§ viHv¶ÛV°®¤$R¸Î&É/ŒQcoå8ŽCõÍ9¯²3›-¥ÿÏ(?ª-_ÀjmL µù}4ö¶ ÜeÈâE3T.Ë®íó†&Þ2>:¡kxÜøÓçRè;v¶óbì©"þæ¨G_RÔ41f­\8¸XKgÓX›ÉO’qk¾›ÿ6ƒðN,«s$&|ÔFÆ)ŠTPÖ÷ÅÜ>E¶y_,{?nG6_ZPàôy±Of}mm“7L7dAÿ 2ô.’Ä&ˆ4£Ç´dÅ2Ýï?XŠá[2ål6Iïù+x…ó³ã é㫯"y~Îýü“ï½·qzõ°¿®>”üÔsGáðÕ+¦/YÛ²yù079ùýÎ7㻋m»Çßz´Fé˜5oOgO±2\}}óþžÎ< ÷³ÿåèX7cÎúV6w.?wŠß ‘[D}ÙvÁò ʉF°2±%V3Ì2»Ë¾Ñ.èx»=WST$ä– ¼°C,7›¯šûžI6j³»Nêõ¡â“ E%ÙJM`^€,8K2›é¤ }D‰pLQL*h€42çs I=¬H˜çÚÑ™ÅoäÒLc|3;¶têµëªV¯½vkÛâ_nêÙqÕ|[Çìî–+"K—l¼mRëµÍ}è8­\¾þÚî…à õËnî]¾wØ›üÛà<hnÛøyUâÕ·Í^¼cFI55aä‹p#(ÅE¦‰åz“*“‘×Ð,¾ À¨rïÕðÜ^§.°·ìq¹Üê Tn66ÝœPCïßN¤¸"8=ÌHZ×2»¡ ó0Œ2ä!TS~žV¡~ž5ª­Ý I€Z8gÌšõÁƪ€y>,¡=ÓâUÖ3$Íû ƒ­¨©A ¦èbl–£d²ômô;LªÄ\¥$­”fsi9oµ`RXøðnŸ/’³A—ê#æÌ L£M 'š ‹•É"@=íz€‚#Íq^¬Â.È6û<‹îޝýÁŠJµ¹(L÷@[-™°°§cÉø¦±ÝQ0Ðß^5©»¾ª«´æ†ý7qwM¬uÙ@¡L?=Û0ws—;¿ënEJ•ÓÅ$­ÕŠ1ücp“Å©r—‘öÊ]jíQ°¬BÊ*YV)eU¢ u*4•Ól²¸à›ÅÆ7ØîfYžÞ.#|ŽÊéÌuèõ·¬Xo =²Üàq‰ÖŽMi¥ ¨™}ëÊFç’™61'\F×óP6oÒ·+Bð0}B äZ_ÛJ÷”T†=ɹ›’œÅ!Xäa¥½Ì Ó™×øsiq~VC-txµo`æWßfÌèõ«±a•ë¹ÓŠŒÕKÖ?…¯‰ .Úc ±Ø$Åð­¼&FU´…´e´×k²ðœI7…R•Þœ+舽P¡â½EK>NÕ˜LÊl3öÏåû•0É™¤’Dó²!{AÁ…:ÄÌ~êNÏ™r©™áM3Ÿ×qyõð?H}4ùGNA¹é÷›Â&ÃK´õ;TöY 2ŽŽå¹ý9É»ï¦}õ˜Ð›vÀ*Õ†ž‘Æ3ŸWµƒûjÛ¸ÆG`¸ç«—Øè-à²u}¹B¬/®PÚimm°)ßæ+‚ûb®ê@QŽ,H 攺nŒ YVY¯´×òÅÅæFsc¨ @ GÌRÈeXg†—ÑßÙ°QoŠB§‡g«•Dm©¼9e¾¥x>ãT„ËÂ,A…ž•ú<;îp¹²ŠJéJ︶¦÷“5Á’ 'ÙUQ–—ÿ䳡¢Òä-ÞPY͸ϒ*.ñäš@ Ÿ;w þ¿ÿ\ÕTj-(ŠÁ9ÉG“³‡Æ‡‹ÀJ'7VI+’¿˜q—¢^Sš0“.§¯‰õEz¹D!&Àè>À(@¦‹yD§Sx=>¯o_Ì+³ØyI ±rj“S¦àíº<ÖNdeº¼ „”—I¢ˆù™(z’è¼aÃTAÔ²Y 0‘(ˆ—¨ÝœBÚ²9/žøjú~‡Œª07Ívz^|¡Ø(¥7”4‰MÉO´¹PUjC¹Y8:IgõÁ…Ötäu¶&7Ñ™ãgøŠJ`±è«‡¯Lú’?‰v”ÚQ¯¶:ê¡ôaîI@ÏõaUác9÷ñŒIAö‹j–ã*hžPŒUq1¦Òwk4~Þ¸\³Q“ÐÕDcÐôiîÔìÖÈ´¼FãÑ ¡‚¯xX¬Þ¢ý1¯Åe™w›f!„ˆ3³óN~Y§`ÎÆ•#Ë’g)‡÷‡·ÞpŸÃ`ÎÎVæR¯d/UA°TVV•Ž*qÅJ8LSVÅq¦‘š0…àµ\˜µþÜôô½;-õW¤½#Éb ¼’_Äç«®*ò¦f|9üM˜ôààÌ™3—®C „{L?ýþi=«š°½Ø]<­sâû¦‘[ç¯iàÔÙþ²ä_µ¿|¹¢#[Öt‡04aÜ•w=’Õ²hM]ÿÍ•AgóÍ›’{&4VXµaú"·hq´ÕѺÇ;IÐ?-»+;dDô–Ñ´Ù{E™–ÕåÉòðžb–5DZ?–Cr©j“A0‹aÆç **rGÍ’OŒÁ³û…á3•°¹95Ó 4[z„°õ=…>¿Â92NB 95á³9ÐBg ³æ»òþ)ó¶y¦Ύv>ËæümœÎÝ<1´æÆ×Dû&yùÚÕê¹êí‡;±ÒYØhšGzªóMª*õW¯÷Îh¨4?ÿü±_x&tV@Ò,Æ8ûAen²VŒ¹°›Kà¸eÁFóx1L.¯*0Q½‰:à0õ•tšôv¸‹îíÖ8¯wŠƒAmr™Íœàô¨79%m†M Є’ÉEÊ0¥·¦¯Áz†£÷$ýÇg­`²'åÆŸIêM-üãCZ½á'l0V¶†;–6ÛëGÆ·_'F#‡¦G~úâò—7÷oã÷¾ÞÒ?|dtêmñºšXk]c‰ù«“wt#Ä<ÇF'€ÅBXÌKÄ ããƒ~Ì`‰díA>ȆQXRP̲‘(äûc ¢¤êQSv!ïaèdDîñÔ•±q¥iû?0™&aè pCïGÐìÁ¤QxjýLuÈ ÈÆ‹ HÉýÍ i$ʳ5Ÿ5hõͳ7ì9´ê…Z—FuàÆ[®^^V_WïÔ]„Êë'¶;4Uê=B[[ñéO÷|´ÜbOœ8[,Ë>~ôè‹zw}>Ž,†ï†Àñõb«ËlÍwyã=¢Û­±’ñ®wŸ;8â08\ŽS¸9VÁÊ[ï…˜ÐÀÝ¿SÔ Æf"n“aSNŽÇ´Y!Aâ Sô-côrk‡!øÅgzOJb†PZß÷^h÷n¦¬2ˆy…°ZÃo¯ÜØû꯯‹z­Ïa3f ªÆkG‡'ÕÎ7G*Üå>gÖçüô³µÅ<hÒ 7+u3'RqÕÖ¿æÉqa“OœÓ³~¨æd ÿ>°Y‰Uê)ä¿Åé­î~¿_­ *kxåΣ5T_SP¬áU55A}?í‰Z “ô†CÐð¹áœAæá †`'Å#xòW±Rïèä;wŠŽÜ`3ß¼3h𫵅=E H%DQQ¾»µµ§Ýe0ÓžöüüNUJÇm–À2™%BÈÔ6hôhÑc±Ll.•HäxÐcS-¦,TF™r 5 T¯„ß켕|ab¨†‘DÄqØ!N Ú”Õª³ÕÓÚ¹èB™Úâ.¬È+éìöɳ²½ÞäŸÛ®e2á“F¾PhhôfÎééôû'_ErKO½Ë†È´|›º¬Õ—kpõôV%¿uiÍÐòX©Uãíè)KÞm(´˜Ù¼‰X‡ÃBn ׉ ål(cQ€EŽÜœ)â`~PKÉãÅÅþý±b}™Ib zÈP3ªT6••fÂQÂØéÑ' FÚS¤pyA2Ò.¿„Ô¼àNÏçÁy1×Á×SQ¤P’^#‚©©@ivzC~Ç€O›)úI£F7aƬªš©-¥e¶/˜TÇ5]%yÆ‚ž ¡ä¶Á_ ŒÇ„nÑã¨ê]:%¹¥½ ˆ‚´evË[Ѓ²`¡M 4Ú"öEæð9;«AC{­›Ô.-øB¯>‰Ý&žÑ- yð#SO_¤†H+'i³ƒm+ºTsà²_ûýÊ7¾õ‡«_NnÝt}Ûìq9-Ë;×ÞdøÇ©½.;ý—}® _¾úÇ–«wLúÖs3~Íæ¯®d¿ ‹±Ò~³XÊé01œÄWáƒ)¾SôYkr">r/ÌÛãÐk0Uè 7…ÓóR˜”àŸp¸žØsø:išU(Ñ3Š€šH-å!e{§˜ýÁ .ˆà4ãKΨ«ÞóËXGH&PÈx‹ & Ÿ²Àª )ss¹Ê%•Û•‚Öæ/ÿ´1KßÔÙ;¾xïÁø³›'¬©´7N‰­½þ£ºÉ}îü7ZD¯ù±,%õüpgcqŽIU­zLhŽú ÿúëÞ+tÎÈ¢×KÏÓ­ž‰]¥ B‹!ð˜Ïì Ñ—/4uV(KµXª¾WÔZ­Ef3Ôôfƒ]o3X£J *Ì2 ‡#þMú”e9RÍŒœ%óú"£,¥©§hù"#Äj«µIRÖ3A2æ˜àJ. lªšY׈{®|uËøk:b*[yQò{ýÄê›n]¶¬t\t\Ž.ÙÝrÞæV:ÔØUñÏO÷}´"ÏÕhøêöqíØÉÄ¿>káø‚×~ K¬°>KLâh¾cõ“b¾Õa‡çÀna¾ßã^½žb+ªAÉeóJÙF-›Mk'\7Z™A¥T–ø©i4?ÍÉùlZekip²LJA˜uSis¯¤)¤­‰;3Æ“›ÿÁÀt™®vöUíõÁöš`ÑøVÔéäUÉ8+ßÖ[*ÿSM¸´¯#”|tF»‹¹//’UUjŒl6¸Q‘…É.ÑÌiΙ”Ã?›ƒÏer\àÈ_e”Üi²vá^ 2Ÿvµö-çÕVk9žh ØاÑÊT2m^…ÛpvŠkVwwVrö:¥•_5PF #ÊÑ”}Á–M$EI’bØ(æÌ4˜–Áݰx2ëf¬eð|a•Þë³CSëKP.2k*ܹkCOmß_ß‚…Ëškæméx¸{žsɬ¢öWñÀ’W7}gEë ³¸ í¹Ý- U² ób“–ÆòٯϜ¢÷4”GÄêr_ç¼¶þµb–pòâKÏ ‡!³¦‹a›Ïv™E_°Ó,jõfý68,õrªåå QM `©ÿªÐ›³Uª|…L3Š}Q†ô·˜k FhëÑæÞ³oPÙ\³‹Û"m¶aöµ´Æèƒqê­lòdkn§mÉŸÊêÊŠ; ËÇoˆÝ´þn~LYÜs–î¿^É6”7ÐÕþÒÒ¼äÕÉ/rÝ~ $¬Év9ãüI9ý(Ôä,-c>s÷xñ¬“û´7š«dÒ&ïÜWò2ŒÈKž :ƒ4e ‚¿Ú SÛòÉv!2²H'Í',‚Ljq k.€@¶ÅF)–îkÔc &ÛÅbc*Æ9µ“^•Éù"dÙs eJ½·(;;ÏÌQ£Ñ w½2/ë. iµ…­¸P—®»D.^yîÇ>YÄ>—ß"E—¬Â˜/›´ “ŸürÛ)[ˆa[}‰Vû¥·½Ð™Êkè,®Û‘|w ÷éY÷§ÎqyLáòû9^~æKú_{~)óÎ+ôyâYàgÃFç_~µ$þ)=÷o¦Báã`ÿCÈ8K‰Nð„L/_è)xêJ> ÂñÒ³TÀŠTHå5™¢ÞóË0pƒœ_X<¿ÓÆÆŒ °{.²zÌ)Q-ù/ìæÆÎws˜°lœòfKNaï›ýÕ‡á‰þäÕSt滌foqò»º¶üµß”U•YéÖI+ײ×qÚòá°FŸLoíÐcº®²ø/¿hõÚœ¬Fh‹¢µøð^QCM. "m¥­"—y&²“$þ¨4iìFkçGšh8…ˆQ.– êŽæ{¢ë"«Å_ÊöB-µé•{ +6²¸J¬)ôC< hý’²ÂdÚ+ßYe26YŸ—ϵéŘôÚãEÈ眲vѺiµíCÚ¢Âü`¤=üØéöùé½AŸ)KwèE£9XŸâ¡þwMÌ:Vâ²Õ­â¾èªÏÇl¦±¸sœõþ¤†¾WÜ–ÈðõdÐÀÐ@6yHÌÆîa5‡#•ÙœŠw©²:yóî=±ù,¶„ FŸ­#jƒšsðj‡]Þ;ENÃf1^µW-°Y½Ô#d1ËRg©ùì½Db7lþg©Ž]Hz©´nÛN ÉO&í-†~Ç6€°“¬Ã¦¶ÀìYÒFZw5uÂ\ƆblôÇ|VËO9“䊒_TÖWÙ§sÿ<ûGª¨ªò9haò0__40ž*ÏüÂàéé‡eèÜ)Ù ØéЉó* ÉÅù’9QÜå&õsÝõî¦|Mþt¾«k¶©ÕÕÒÒÔÞÄ7ÝÛŽØülž›e¨Ù‹¼ÕÔÇ÷Ý#šɦ¢¢V·fú\lŸוï®Æ ØNõô´Œb®ÅÕÚºh8íHN/°¹“¹-j8a„³]»hé€Ñô8sJ»#Ç™ô,EæUL-Ûl¼éy›#R®Àšôé~CÛy&c úÿK¯<¤n¦R3´B¦¦ØOòVû°WÇϯ_øìªµOÌiܲª«iäàÒ¶k§WêrË']?¡òÅm-¡jš§–«TZ­^o6㣺΂pW´ ¿¶¢¢aSC¸«'¹tã¦@_dÜŒH$oÞplõ„éÛ'¹ö–¸¶öwL¹ïŠþÑõm#õϺ£ÏÙ0Òîn¬­õ”¶ýuYûXWUxRWž—— ‰Æ¢<ü¢¢3×mjÏiàÞ‰=85:%™ÛÚ¸ñSñ¶á)k*ê‹:^¨,fÔlO~FÛðõ§,âMòCG³DF¹rEwP£ÑëR@ÇþÓ` ç3À1u²‚m=­òÓj]hñÌšHE¶âãŽXǪ•í¡^™²r>£«pú, §ªšDŸ§ßË ã)£ÌxþE†úV.ý6|CBñ±JÃ)xåð Ü\—½ÔÌò,<ÿâ¿x髹G>ùÄãÚ5x;ÓVUb— ¼wñ}ü¼LÏóŠ„(§œì€\©’(†¤5ôžˆT²-ú'Ù¶t¼ËOÕÒ«®yñÅù-Ÿ|rvîÇ3x]…¨ðâ‰MTó‰=Àq2Aê9Áýè.ëaí˧Ú/¥?㸙hïMå¹'DB±ƒž 2JŠëaeNòà¥îj7× Ñ×èÏ`ö,ÿ,}AöœLÓ“ѨS*ôT§Ó(\JÍAž7ØK¿x'Í,¤ù-ÇqûóP—$_·¤ä±ÙÀ|³6«hÊÜÆH™\{7ÿ¬{¢«iþ¢i ÍkòÛcô·lLãùïÒ™ðXéˆW4(пÔKxP€A/ŒmaK/ÜG?%_;v §‡¶i³Š§5†+äZÙ½xAëÂÅÆ­žkǸóÏóTöP‚:®(b#™hUZ¹4+K£PjœN‡ÅeuhóŽÃFŒç„!ó6F”zë[•Žã•9öãø¼ v_2}œé°–l›û’+|íT£)˜­õ“¦óYúÿ|QO^ó‚%]57 µM¾ä¬Çó‡¹û$ä‘Z1Gis)¬$æå9­6§N§Å6M‡üamª‡l1Óð‹1_½Y ð°®eà"±‡û’+Ñhxü­©©^óÛÇ;j¡|Ñ”ïÉ-õFÆÍNö.|_0Χ¹tò›Kúµºâ²I3ïûö¹ÉâÁ‹½  W×õÊ™êÍ×È6[,©^¼¬WflÀGw8Èðjx’Sÿ°ç"ÿ+j7Ð:|„j $ÿ+ùxòáäNî•äÓÉ_ÑZþ'šwcÿ®?²¹âìöWѧØ#ù&+¾  ”«”ªûqªßÖY­*9¾Þ0¦Óå:%LÄa{UHó…c)&VS[Ó;"ØF%?È-ܲÜM³{Ïæ-›S ûεzz}³VNeõã¼ ×Õ%36uðbok}/µ<Ž>Ý„>½„>“ùbÄ•g2©ìv«2ÏÊçXóp4W4˜;e E¾ø¥ÃaRÉr×v“©ÔQ¬RÙowOD‚ÌÈ ~ñV%3}ƒžlÁçX@òà[ø`[}ÙÒ)¼½œtö êsMmʽÓ3©%€™u<Ô6î™pC‘Å0Õxæ¥À]·¬ŠÔÕÚCó»ܲvíO?c)♡ÝÚÜò`ò¡Åع±µsñ¬`÷ÊÖ׎F#=P=4=~Åš—ð‘EJхÈF1–¥õú|84³Kô Vß®â>‡ù #¿ÜšÏ;ò±J`ÊyZþ€ h•>_iß}ÍQn/-Í1mw»+·§ÁgÄ K¥y[Ú{IÃeÕeê‰Yú DZ#·äó饭´'‰yÔ0§Kaø|dÕ˳W<>»a^ãŠÁê¯íœö‹)k<+çß<šx|xËSëWÌ^+Ô?S[Ó±iÆÔ›F*Tšêk»W=±ÈïzsÑì۷ݵkP986mÙš…‹Á ½XµuËfb¨…d$uò<ÈNžë•j…L+ÃypäT¦Ì±£Í¾XŽK‰/û«M·æºÜJA&+r*‚LPذýì7pô§ŽE¥$ƒ4À³ $cÕðü@#Ž”+°3B:9=[ <”pLêì›\×–úJ·®G{J:›¶$ùWºE.¨“k¥31{ºù•g3¯îID£çNÏþ˸³ß^ï^ƒYÕGîý¥ZYŽ!íT}ÆÜN½6ËSŠú¼Gò`͆ÏË3ʼÐbw‰^³Óä#8$ƒ½v¿ÕÈ[m6·>g›Á@ÝÛ•Êbîvza¦c¹ìNdõÌÉ®’6‹‘æWçMŽm×L:JDÏŽ[Náäž´“m‘GêAô…b+›é¥Í{Öæ¯ÝÚyý䨼º>Î_˜oÒNÔŸýYÕõ׉/sÇjß\8²û‘%ÛšŒ¦ w—Ææú8ÙeµÎ=¼ú–£q`öf¬…¨AáI³.Ë—ÉåF• óŃ¢Jåð9ð_¡ˆÁˆO]Àû*ó8`£eÝ=Û³SÅ<ÌþïB®.¶©2 Ÿï眶Ûi»õ°ÿQ6ŽÐÈX· £5Lw:0ì‡ l*aˆZA….¬âè`¶d´Í` MÌ"Bñ¦n Ù0A¢ÄlÉœÆ &»ÄÄ,x…¡§<_i™Ûž‹öæý~ž¾?Ïû“SÓÙÿkίu·“Z@R-®;£#_ðAîá-ô{6]ÅÎ&þü¢*ï¯Þ oÝ={á·ßÍ‚13íÛ¹u¥ªä)'Ú÷6UôÉ^ß©´”äîkGN|ß¿È6AÖ=´¦¯ªÊWµ@ó­Öî<Úrî2nü\ú1§¨«w`jK%£õªªPÑvŠrßq;bRªÊG=_­›¾ƒ X³xw7$9ý0°?Š U†¦–­¼à.vFÀ”4T/GW°®Uc†ÆÍÏi…Ùò¢¯ºX{k ë’Wüý³÷:•Þd#T¥tÈKã¼—â¼›¤±]!_¯ëh@Kz‰U‡b±"wž0¬ZI «I”ðŠǯºG4Måq¿?裗Kø×Tá?ÔFƃ.ÉA%Ë3xr»A0¢óJh²lž<ûÕAY) >ôË™Á»Cmô×ðìñϾëþ0•¬|µ»¥3ìö´Ìw÷¶vô¾Ò|äõ¶=MtÖ¾úê'½¡_Þ>йܾkþƒ‹oo»pàãq¢¬ß·¹6ØßÑÕß8üäQ0ÜQ¿áT×{±Vï–ý‚Áسù#ƒE¯ô¦Q³ X´¹rXô`ˆ‡À¢æBC@ÂÅe{ш®×¯A—ž8<ÿƒÄ"´ó/ú‹Ø¼«p åM–œ=ÉñäåøtQ‡‘o"?Ý»hÞ»}eåkÍMe6‡Õîlßt÷y|Ñ¿î> endobj 58 0 obj [ 332 220 653 648 623 662 653 611 537 575 490 563 815 568 593 324 681 629 611 531 556 504 414 278 494 552 338 382 441 382 554 554 554 554 621 488 504 430 558 555 488 264 307 552 554 570 455 687 205 524 271 885 547 571 496 774 483 554 205 303 832 554 554 554 537 554 554 427 921 604 547 554 266 221 221 500 375 375 371 506 387 350 350 264 387 554 554 688 554 393 237 ] endobj 59 0 obj << /Length 60 0 R /Filter /FlateDecode >> stream x]•ÍnÛ0„ïz ÓC`Z²¤ )øÐÔíÈ•¨eAv~û~3qÓ6‡ 0!w¹ß.)/¶·ãá_çS·K—0Æ~NçÓóÜ¥°OO‡1[æ¡?t—›óÿºc;e ‚w×ó%·ãp M“…°øFÈù2_Ã݇þ´Oïô¿/sŸæÃøî~<ìüŸÝó4ýJÇ4^BÌ6›Ð§tŸÚés{LaáÐûmÏúár½'êïŽï×)*"bùRRwêÓyj»4·ãSÊš7Íãã&Kcÿfé°ºŸíœ5ùrÓ„óž?mò¸ŒÁa· o·çÞ×lŠÉ£ÿ)ãKQûáVM^l)Ær¹áÌaKÙ‹b\yµÂ"ìJ«5aÙ÷X„Íe×X„íd[,Â:ó‹(Ó±±ZhsEØ^6aUEÙ‹°*£ ¡›×²´MÂ&YÚ"a÷²°JØZÖ€•Ê(€“b¬ ¸Â€µˆ à¤+¯W˜¨r*h Õ® šÂDô„Xh$bX@#ïTÐ&¢Ô¬YA#Å «ÖÑ] «¡Ð0‹n8"¦£ƒ¼8Ž­+mNª z`±Y½Z'a…@;-¬‚ue^¨Y…U¢“¶°2heö¹°2;,-f3¬EŠ—ûb±Y±LÕ"•zÅM´hŽª«)=²Jdæ›Õî©E‘Â/“8È©,=A2èÉý¹øEþæ!°½¡6Õ¯i–€–¦ã–b!“8Em,!“°ºŸ%d°êj „Uª : «XziQ¿-tT®Uu†ÛaaU?s°h…ÅH-èœPê!dV•@м*ˆ$R©Hî¬EÍN ýlø¬ø à*„X WBV—ÇaqžI DU.§Yœ«^ñV,6ÛBÄeS‘*ƒÇaQ•W!â¨f¯BÃEUÍ:—QXXÝ„‰sÅ˵ÈìUˆ¸NZÕM  K¯þ½>¼úxý wÏóÌ·Ü¿"þÌëó}ÓëÍtš”Àú T´™ endstream endobj 60 0 obj 767 endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /WLRSGK+Cambria /FontDescriptor 57 0 R /Widths 58 0 R /FirstChar 33 /LastChar 123 /ToUnicode 59 0 R >> endobj 61 0 obj (Microsoft Word - README.docx) endobj 62 0 obj (Mac OS X 10.6.3 Quartz PDFContext) endobj 63 0 obj (Alex Kaiser) endobj 64 0 obj (Microsoft Word) endobj 65 0 obj (D:20100616230819Z00'00') endobj 66 0 obj () endobj 67 0 obj [ ] endobj 1 0 obj << /Title 61 0 R /Author 63 0 R /Producer 62 0 R /Creator 64 0 R /CreationDate 65 0 R /ModDate 65 0 R /Keywords 66 0 R /AAPL:Keywords 67 0 R >> endobj xref 0 68 0000000000 65535 f 0000092378 00000 n 0000005999 00000 n 0000069845 00000 n 0000000022 00000 n 0000005979 00000 n 0000006103 00000 n 0000008937 00000 n 0000000000 00000 n 0000091973 00000 n 0000006201 00000 n 0000008916 00000 n 0000014126 00000 n 0000008973 00000 n 0000014105 00000 n 0000014233 00000 n 0000019972 00000 n 0000014332 00000 n 0000019951 00000 n 0000020079 00000 n 0000027868 00000 n 0000020178 00000 n 0000027847 00000 n 0000027975 00000 n 0000035170 00000 n 0000028074 00000 n 0000035149 00000 n 0000035277 00000 n 0000042956 00000 n 0000035376 00000 n 0000042935 00000 n 0000043063 00000 n 0000049493 00000 n 0000043162 00000 n 0000049472 00000 n 0000049600 00000 n 0000055310 00000 n 0000049699 00000 n 0000055289 00000 n 0000055417 00000 n 0000061801 00000 n 0000069968 00000 n 0000055516 00000 n 0000061780 00000 n 0000061909 00000 n 0000068066 00000 n 0000062008 00000 n 0000068045 00000 n 0000068174 00000 n 0000069638 00000 n 0000068273 00000 n 0000069617 00000 n 0000069746 00000 n 0000070058 00000 n 0000070150 00000 n 0000070201 00000 n 0000090466 00000 n 0000090488 00000 n 0000090726 00000 n 0000091110 00000 n 0000091953 00000 n 0000092135 00000 n 0000092182 00000 n 0000092234 00000 n 0000092264 00000 n 0000092297 00000 n 0000092339 00000 n 0000092358 00000 n trailer << /Size 68 /Root 54 0 R /Info 1 0 R /ID [ <1ba2e8343ce062c7eadc05557ca96c69> <1ba2e8343ce062c7eadc05557ca96c69> ] >> startxref 92537 %%EOF qd-2.3.11/INSTALL0000644000175000017500000000642611202606753013515 0ustar prudhommprudhommRevised 13 May 2009 Note on Compiler Optimizations ============================== This library is quite sensitive to the various optimization flags passed to the C++ compiler, both in terms of speed and correctness. In general, you should not turn on optimization that weakens the floating point numerics. For the more recent GNU C++ compiler (4.x series), I use '-O3 -funroll-all-loops', along with some architecture specifier, such as '-march=nocona'. By default the configure script will choose something fairly benign, such as '-O2', along with certain flags known to the author to disable optimzation that changes the floating point semantics (such as -mp on Intel compilers). When tinkering with optimization flags, it is advised to - check the correctness of the library by running "make check", and - do "make time" to perform some timings to see that the optimization is actually helpful. Note that since many functions are implemented as inline functions in the header files, same optimization precautions apply to any program that uses the QD library headers. Installation Instructions ========================= To build the qd library, follow the following steps. 1. You need to figure out which C++, C, (and optionally Fortran 95) compiler you will be using. Run the configure script by typing ./configure CXX= CC= FC= The script will attempt to automatically detect various system-dependent features used during compilation (such as C++ / C / Fortran compiler characteristics and availability of certain system headers). If you want to specify a particular C++ / Fortran-90 compiler flags, you can set them using CXXFLAGS and FCFLAGS. For example: CXX=icpc CXXFLAGS='-O2 -mp' FC=ifort FCFLAGS='-O2 -mp' ./configure Some variable of interests are CXX C++ compiler to use CXXFLAGS C++ compiler flags to use CC C compiler to use FC Fortran 90 compiler FCFLAGS Fortran 90 compiler flags to use FCLIBS Fortran 90 libraries needed to to link with C++ code LDFLAGS Linker flags For more build options, type "./configure --help". In particular, if you want to install to a custom path, do something like ./configure --prefix=/custom/path 3. Type "make". This will build the qd library. 4. Optionally, one can build and run some simple test programs. To do this, type "make check". Some programs run during this phase (especially qd_test and pslq_test in tests directory) is a good demonstration of how to use the qd library in C++. There are two other programs qd_timer and quadt_test that can be built inside tests directory using "make qd_timer" and "make quadt_test". The program qd_timer times the basic operations in double-double and quad-double. The program quadt_test is another demo program that computes quadratures of various functions. 5. If you want to build some sample programs written in Fortran 90, you can type "make fortran-demo". 6. Type "make install" to install the quad-double library to the location specified (through --prefix option) to the configure script (default is "/usr/local"). qd-2.3.11/config.h.in0000644000175000017500000001000411202062041014454 0ustar prudhommprudhomm/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef FC_DUMMY_MAIN /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef FC_FUNC /* As FC_FUNC, but for C identifiers containing underscores. */ #undef FC_FUNC_ /* Define to alternate name for `main' routine that is called from a `main' in the Fortran libraries. */ #undef FC_MAIN /* Define to 1 if your system has the clock_gettime function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if Fortran interface is to be compiled. */ #undef HAVE_FORTRAN /* Define to 1 if you have the header file. */ #undef HAVE_FPU_CONTROL_H /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* qd major version number */ #undef MAJOR_VERSION /* qd minor version number */ #undef MINOR_VERSION /* 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 version of this package. */ #undef PACKAGE_VERSION /* qd patch number (sub minor version) */ #undef PATCH_VERSION /* Any special symbols needed for exporting APIs. */ #undef QD_API /* Define this macro to be the copysign(x, y) function. */ #undef QD_COPYSIGN /* Define to 1 to enable debugging code. */ #undef QD_DEBUG /* If fused multiply-add is available, define correct macro for using it. */ #undef QD_FMA /* If fused multiply-subtract is available, define correct macro for using it. */ #undef QD_FMS /* Define to 1 if your compiler have the C++ standard include files. */ #undef QD_HAVE_STD /* Define to 1 to use additions with IEEE-style error bounds. */ #undef QD_IEEE_ADD /* Define to 1 to inline commonly used functions. */ #undef QD_INLINE /* Define this macro to be the isfinite(x) function. */ #undef QD_ISFINITE /* Define this macro to be the isinf(x) function. */ #undef QD_ISINF /* Define this macro to be the isnan(x) function. */ #undef QD_ISNAN /* Define to 1 to use sloppy division (which is faster by slightly inaccurate). */ #undef QD_SLOPPY_DIV /* Define to 1 to use sloppy multiplication (which is faster by slightly inaccurate). */ #undef QD_SLOPPY_MUL /* Set to 1 if using VisualAge C++ compiler for __fmadd builtin. */ #undef QD_VACPP_BUILTINS_H /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Whether to use x86 fpu fix. */ #undef X86 qd-2.3.11/tests/0000755000175000017500000000000011431215437013615 5ustar prudhommprudhommqd-2.3.11/tests/pslq_test.cpp0000644000175000017500000001436511202062041016333 0ustar prudhommprudhomm/* * tests/pslq_test.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * A driver for the pslq program which exercises the double-double and * quad-double library. */ #include #include #include #include #include #include #include #include "tictoc.h" #include "pslq.h" using std::cout; using std::cerr; using std::endl; using std::strcmp; int g_verbose = 0; bool flag_double_pslq = false; bool flag_dd_pslq = false; bool flag_qd_pslq = false; /* Computes the value of the given n-th degree polynomial at point x where the (n+1) coefficients of the polynomial is given in a. */ template T polyeval(T *a, int n, T &x, double &err_bnd) { /* Use Horner's evaluation scheme. */ T t = a[n]; err_bnd = std::abs(to_double(t)) * 0.5; for (int i = n-1; i >= 0; i--) { t *= x; t += a[i]; err_bnd *= std::abs(to_double(x)); err_bnd += std::abs(to_double(t)); } err_bnd = (2.0 * err_bnd - to_double(t)) * std::numeric_limits::epsilon(); return t; } double nroot(double x, int n) { return std::pow(x, 1.0 / n); } bool is_int(double x) { return (std::abs(x) <= std::numeric_limits::max() && static_cast(x) == x); } /* Sets r = 2^(1/p) + 3^(1/q) and tries to recover the algebraic * polynomial of degree pq performing PSLQ on 1, r, r^2, ..., r^n. */ template bool pslq_test(int p, int q, double eps, int max_itr = 100000) { T *x, *b; T r = nroot(T(2.0), p) + nroot(T(3.0), q); T t; int err; tictoc tv; double tm; int n = p * q + 1; std::ios_base::fmtflags fmt = cout.flags(); b = new T[n]; x = new T[n]; /* Fill in vector x with powers of r. */ x[0] = 1.0; x[1] = r; t = r*r; for (int i = 2; i < n; i++, t *= r) x[i] = t; cout << " testing pslq_test(" << p << ", " << q << ") ..." << endl; if (g_verbose) cout << std::setprecision(std::numeric_limits::digits10) << " r = " << r << endl; /* Construct algebraic relation */ tic(&tv); err = pslq(x, n, b, eps, max_itr); tm = toc(&tv); cout << " elapsed time = " << std::setprecision(4) << tm << " seconds." << endl; cout << std::right << std::setprecision(2) << std::fixed; if (!err) { if (g_verbose) { cout << " polynomial: "; for (int i = 0; i < n; i++) { if (i > 0) cout << " "; cout << std::setprecision(0) << std::setw(24) << b[i] << endl; } } /* Check if r satisfies the polynomial. */ double err_bnd; t = abs(polyeval(b, n-1, r, err_bnd)); err = t > 10.0 * err_bnd; cout << std::scientific << std::setprecision(4); if (err || g_verbose) { cout << " residual = " << t << endl; cout << " error bound = " << err_bnd << endl; } } delete [] x; delete [] b; if (err) cout << " test FAILED." << endl; else cout << " test passed." << endl; cout << endl; cout.flags(fmt); return !err; } /* We need this since Sun C++ compiler seems to miscompile when * eps parameter is given default (templated) argument. */ template bool pslq_test(int p, int q) { return pslq_test(p, q, std::numeric_limits::epsilon()); } void print_usage() { cout << "pslq_test [-h] [-n N] [-d] [-dd] [-qd] [-all] [-verbose]" << endl; cout << " Performs the PSLQ algorithm on 1, r, r^2, ..., r^{n-1}" << endl; cout << " where r is a root of a constructed integer coefficient" << endl; cout << " polynomial. PSLQ algorithm should reconstruct the polynomial" << endl; cout << " in most cases where the degree is not too high and the" << endl; cout << " polynomial is irreducible over the rationals." << endl; cout << endl; cout << " -h -help Print this usage message and exit." << endl; cout << " -d Perform PSLQ with double precision (53 bit mantissa)." << endl; cout << " -dd Perform PSLQ with double-double precision." << endl; cout << " (about 106 bits of significand)." << endl; cout << " -qd Perform PSLQ with quad-double precision." << endl; cout << " (about 212 bits of significand). This is the default." << endl; cout << " -all Perform PSLQ with all three precisions above." << endl; cout << " -verbose" << endl; cout << " -v Increase verbosity." << endl; } int main(int argc, char **argv) { char *arg; /* Parse the command-line arguments. */ for (int i = 1; i < argc; i++) { arg = argv[i]; if (strcmp(arg, "-h") == 0 || strcmp(arg, "-help") == 0) { print_usage(); return 0; } else if (strcmp(arg, "-d") == 0) { flag_double_pslq = true; } else if (strcmp(arg, "-dd") == 0) { flag_dd_pslq = true; } else if (strcmp(arg, "-qd") == 0) { flag_qd_pslq = true; } else if (strcmp(arg, "-all") == 0) { flag_double_pslq = flag_dd_pslq = flag_qd_pslq = true; } else if (strcmp(arg, "-v") == 0 || strcmp(arg, "-verbose") == 0) { g_verbose++; } else { cerr << "Unknown flag `" << arg << "'." << endl; } } if (!flag_double_pslq && !flag_dd_pslq && !flag_qd_pslq) { flag_dd_pslq = true; flag_qd_pslq = true; } unsigned int old_cw; fpu_fix_start(&old_cw); bool pass = true; if (flag_double_pslq) { cout << "Performing double-precision PSLQ." << endl; pass &= pslq_test(2, 2); pass &= pslq_test(3, 2); } if (flag_dd_pslq) { cout << "Performing double-double precision PSLQ." << endl; pass &= pslq_test(2, 2); pass &= pslq_test(2, 3); pass &= pslq_test(2, 4); pass &= pslq_test(3, 3); pass &= pslq_test(2, 5); } if (flag_qd_pslq) { cout << "Performing quad-double precision PSLQ." << endl; pass &= pslq_test(3, 3); pass &= pslq_test(2, 5); pass &= pslq_test(4, 3); pass &= pslq_test(2, 6); pass &= pslq_test(2, 7); pass &= pslq_test(3, 5); } if (pass) cout << "All tests passed." << endl; else cout << "Some tests FAILED." << endl; fpu_fix_end(&old_cw); return (pass ? 0 : 1); } qd-2.3.11/tests/qd_timer.cpp0000644000175000017500000002371411202062041016117 0ustar prudhommprudhomm/* * tests/qd_timer.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2004 * * Contains code to time basic operations. */ #include #include #include #include #include #include #include #include #include "tictoc.h" using std::cout; using std::cerr; using std::endl; using std::sqrt; using std::strcmp; using std::setw; using std::setprecision; using std::fixed; // Global flags passed to the main program. static bool flag_test_double = false; static bool flag_test_dd = false; static bool flag_test_qd = false; static bool flag_verbose = false; static int long_factor = 1; template class TestSuite { public: void test1(); void test2(); void test3(); void test4(); void test5(); void test6(); void test7(); void test8(); void test9(); void testall(); T pi(); }; template T TestSuite::pi() { return T::_pi; } template <> double TestSuite::pi() { return 3.141592653589793116; } void print_timing(double nops, double t) { double mops = 1.0e-6 * nops / t; cout << fixed; cout << setprecision(6) << setw(10) << 1.0 / mops << " us"; cout << setprecision(4) << setw(10) << mops << " mop/s" << endl; } template void TestSuite::test1() { if (flag_verbose) { cout << endl; cout << "Timing addition..." << endl; } int n = 100000, i; tictoc tv; double t; n *= long_factor; T a1 = 1.0 / T(7.0); T a2 = 1.0 / T(11.0); T a3 = 1.0 / T(13.0); T a4 = 1.0 / T(17.0); T b1 = 0.0, b2 = 0.0, b3 = 0.0, b4 = 0.0; tic(&tv); for (i = 0; i < n; i++) { b1 += a1; b2 += a2; b3 += a3; b4 += a4; } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << b1+b2+b3+b4 << endl; cout << 4*n << " operations in " << t << " s." << endl; } else { cout << " add: "; } print_timing(4.0*n, t); } template void TestSuite::test2() { if (flag_verbose) { cout << endl; cout << "Timing multiplication ..." << endl; } int n = 100000, i; tictoc tv; double t; n *= long_factor; T a1 = 1.0 + 1.0 / T(static_cast(n)); T a2 = 1.0 + 2.0 / T(static_cast(n)); T a3 = 1.0 + 3.0 / T(static_cast(n)); T a4 = 1.0 + 4.0 / T(static_cast(n)); T b1 = 1.0, b2 = 1.0, b3 = 1.0, b4 = 1.0; tic(&tv); for (i = 0; i < n; i++) { b1 *= a1; b2 *= a2; b3 *= a3; b4 *= a4; } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << b1+b2+b3+b4 << endl; cout << 4*n << " operations in " << t << " s." << endl; } else { cout << " mul: "; } print_timing(4.0*n, t); } template void TestSuite::test3() { if (flag_verbose) { cout << endl; cout << "Timing division ..." << endl; } int n = 100000, i; tictoc tv; double t; n *= long_factor; T a1 = 1.0 + 1.0 / T(static_cast(n)); T a2 = 1.0 + 2.0 / T(static_cast(n)); T a3 = 1.0 + 3.0 / T(static_cast(n)); T a4 = 1.0 + 4.0 / T(static_cast(n)); T b1 = 1.0, b2 = 1.0, b3 = 1.0, b4 = 1.0; tic(&tv); for (i = 0; i < n; i++) { b1 /= a1; b2 /= a2; b3 /= a3; b4 /= a4; } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << b1+b2+b3+b4 << endl; cout << 4*n << " operations in " << t << " s." << endl; } else { cout << " div: "; } print_timing(4.0*n, t); } template void TestSuite::test4() { if (flag_verbose) { cout << endl; cout << "Timing square root ..." << endl; } int n = 10000, i; tictoc tv; double t; n *= long_factor; T a1 = 0.0, a2 = 0.0, a3 = 0.0, a4 = 0.0; T b1 = 1.0 + pi(); T b2 = 2.0 + pi(); T b3 = 3.0 + pi(); T b4 = 4.0 + pi(); tic(&tv); for (i = 0; i < n; i++) { a1 = sqrt(a1 + b1); a2 = sqrt(a2 + b2); a3 = sqrt(a3 + b3); a4 = sqrt(a4 + b4); } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << a1+a2+a3+a4 << endl; cout << 4*n << " operations in " << t << " s." << endl; } else { cout << " sqrt: "; } print_timing(4.0*n, t); } template void TestSuite::test5() { if (flag_verbose) { cout << endl; cout << "Timing sin ..." << endl; } int n = 4000, i; tictoc tv; double t; n *= long_factor; T a = 0.0; T b = 3.0 * pi() / static_cast(n); T c = 0.0; tic(&tv); for (i = 0; i < n; i++) { a += b; c += sin(a); } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << c << endl; cout << n << " operations in " << t << " s." << endl; } else { cout << " sin: "; } print_timing(n, t); } template void TestSuite::test6() { if (flag_verbose) { cout << endl; cout << "Timing log ..." << endl; } int n = 1000, i; tictoc tv; double t; n *= long_factor; T a = 0.0; T c = exp(T(-50.1)); T d = exp(T(100.2) / double(n)); tic(&tv); for (i = 0; i < n; i++) { a = a + log(c); c *= d; } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "a = " << a << endl; cout << n << " operations in " << t << " s." << endl; } else { cout << " log: "; } print_timing(n, t); } template void TestSuite::test7() { if (flag_verbose) { cout << endl; cout << "Timing dot ..." << endl; } int n = 100000, i; tictoc tv; double t; n *= long_factor; T a1 = 1.0 / T(7.0); T a2 = 1.0 / T(11.0); T a3 = 1.0 / T(13.0); T a4 = 1.0 / T(17.0); T b1 = 1.0 - T(1.0) / static_cast(n); T b2 = 1.0 - T(2.0) / static_cast(n); T b3 = 1.0 - T(3.0) / static_cast(n); T b4 = 1.0 - T(4.0) / static_cast(n); T x1 = 1.0, x2 = 1.0, x3 = 1.0, x4 = 1.0; tic(&tv); for (i = 0; i < n; i++) { x1 = a1 + b1 * x1; x2 = a2 + b2 * x2; x3 = a3 + b3 * x3; x4 = a4 + b4 * x4; } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << x1+x2+x3+x4 << endl; cout << 8*n << " operations in " << t << " s." << endl; } else { cout << " dot: "; } print_timing(8.0*n, t); } template void TestSuite::test8() { if (flag_verbose) { cout << endl; cout << "Timing exp ..." << endl; } int n = 1000, i; tictoc tv; double t; n *= long_factor; T a = 0.0; T c = -5.0; T d = 10.0 / static_cast(n); tic(&tv); for (i = 0; i < n; i++) { a = a + exp(c); c += d; } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "a = " << a << endl; cout << n << " operations in " << t << " s." << endl; } else { cout << " exp: "; } print_timing(n, t); } template void TestSuite::test9() { if (flag_verbose) { cout << endl; cout << "Timing cos ..." << endl; } int n = 4000, i; tictoc tv; double t; n *= long_factor; T a = 0.0; T b = 3.0 * pi() / static_cast(n); T c = 0.0; tic(&tv); for (i = 0; i < n; i++) { a += b; c += cos(a); } t = toc(&tv); if (flag_verbose) { cout << "n = " << n << " t = " << t << endl; cout << "r = " << c << endl; cout << n << " operations in " << t << " s." << endl; } else { cout << " cos: "; } print_timing(n, t); } template void TestSuite::testall() { test1(); test2(); test3(); test4(); test5(); test6(); test7(); test8(); test9(); } void print_usage() { cout << "qd_test [-h] [-dd] [-qd] [-all]" << endl; cout << " Performs timing tests of the quad-double library." << endl; cout << " By default, double-double and quad-double arithmetics" << endl; cout << " are timed." << endl; cout << endl; cout << " -h -help Prints this usage message." << endl; cout << " -double Time arithmetic of double." << endl; cout << " -dd Time arithmetic of double-double." << endl; cout << " -qd Time arithmetic of quad-double." << endl; cout << " -all Perform both double-double and quad-double tests." << endl; cout << " -v Verbose output." << endl; cout << " -long Perform a longer timing loop." << endl; } int main(int argc, char *argv[]) { unsigned int old_cw; fpu_fix_start(&old_cw); /* Parse the arguments. */ char *arg; for (int i = 1; i < argc; i++) { arg = argv[i]; if (strcmp(arg, "-h") == 0 || strcmp(arg, "-help") == 0) { print_usage(); std::exit(0); } else if (strcmp(arg, "-double") == 0) { flag_test_double = true; } else if (strcmp(arg, "-dd") == 0) { flag_test_dd = true; } else if (strcmp(arg, "-qd") == 0) { flag_test_qd = true; } else if (strcmp(arg, "-all") == 0) { flag_test_double = flag_test_dd = flag_test_qd = true; } else if (strcmp(arg, "-v") == 0) { flag_verbose = true; } else if (strcmp(arg, "-long") == 0) { long_factor *= 10; } else { cerr << "Unknown flag `" << arg << "'." << endl; } } /* If no flag, test both double-double and quad-double. */ if (!flag_test_double && !flag_test_dd && !flag_test_qd) { flag_test_dd = true; flag_test_qd = true; } if (flag_test_double) { TestSuite test; cout << endl; cout << "Timing double" << endl; cout << "-------------" << endl; test.testall(); } if (flag_test_dd) { TestSuite test; cout << endl; cout << "Timing dd_real" << endl; cout << "--------------" << endl; test.testall(); } if (flag_test_qd) { TestSuite test; cout << endl; cout << "Timing qd_real" << endl; cout << "--------------" << endl; test.testall(); } fpu_fix_end(&old_cw); return 0; } qd-2.3.11/tests/coeff.dat0000644000175000017500000000441611202062041015361 0ustar prudhommprudhomm-0.9775167951976489664525469954372956343358810013057749724417862774e-3 -0.2075676914283777492727118016432227494608152196024915261153999901e-9 -0.1269367038136010543068339663371323731348000676768267625469448102e-15 -0.1052027278699348005047071676902386524189075944232894389841628352e-21 -0.1013862709339873804983259618712856406431507368366630114746652194e-27 -0.1070797160782079391652093252929022125892146568458306459066625793e-33 -0.1203024682204313742995875291169966746331236984031736777114302104e-39 -0.1413186765666548861807857674447967052084667162327752320681199850e-45 -0.1716934680463467799119970534957860324650302035114942758068507743e-51 -0.2141684303810732445664109047220683197049353785918847781307915946e-57 -0.2728728792013858214594623359015171594414499690547350426316476317e-63 -0.3537740851099290910904125744688322503286308246823228589610390084e-69 -0.4653866593076211746014999930808477556007283760568825784729118519e-75 -0.6198222036629372113743376552741744231526282610241755912017865074e-81 -0.8343163573566567964173005299761236198983193010010688597971245423e-87 -0.1133440877126749833628201009730991589630882455080264498144743046e-92 -0.1552307178288950850127847197432548602832581363150190995926321077e-98 -0.2141210693832760804471301181576487171556527761449953933723182650e-104 -0.2972374323937510048005418816630916320169010435263863852744755146e-110 -0.4149755825466059459836047799507803845640790041662842575959069864e-116 -0.5823334821134826021273748665219614719678055975439919739619995591e-122 -0.8209959030180363085847618386282698731878699835548748108868571308e-128 -0.1162380824812159815904187845984270255078065890997783213660727935e-133 -0.1652097958843265314528716469448290562813587320057617748784776789e-139 -0.2356483265664698414998912101530115585067265981922030210933715902e-145 -0.3372189144799648585521738136801552767051945061785360441880935746e-151 -0.4840277541130058059157644310674025433331802025292052611788876935e-157 -0.6966956086460986977095368691634405902169916528521680617493920982e-163 -0.1005412505814013202384573697823240736205894362609894605083067754e-168 -0.1454442845520587196539767533367342012940113398448039080001484172e-174 -0.2108776891671463482330396738781660457871205397711439187061630602e-180 -0.3063961604774525057027798220963629256575803255896446562939600635e-186 qd-2.3.11/tests/tictoc.h0000644000175000017500000000137411202062041015243 0ustar prudhommprudhomm/* * tests/timer.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * Contains function used for timing. */ #ifndef TICTOC_H__ #define TICTOC_H__ #include "config.h" #ifdef _WIN32 #include typedef DWORD tictoc; #else #ifdef HAVE_CLOCK_GETTIME #include typedef struct timespec tictoc; #else #ifdef HAVE_GETTIMEOFDAY #include typedef struct timeval tictoc; #else #include typedef time_t tictoc; #endif #endif #endif void tic(tictoc *tv); /* start timing. */ double toc(tictoc *tv); /* stop timing. */ #endif qd-2.3.11/tests/pslq.h0000644000175000017500000001261311202062041014733 0ustar prudhommprudhomm/* * tests/pslq.h * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * * Implementation of PSLQ Integer Relation Detection Algorithm * due to H. R. P. Ferguson and D. H. Bailey. See * * A new polynomial time algorithm for finding relations among * real numbers, Supercomputing Research Center Tech Report * SRC-93-093 (March 1993). * * This code is based in part on David Bailey's F90 version. */ #include #include #include #include using std::sqrt; using std::abs; using namespace qd; #define MIN(a, b) ( ((a)<(b)) ? (a) : (b) ) #define MAX(a, b) ( ((a)>(b)) ? (a) : (b) ) #define SWAP(a, b) { t = a; a = b; b = t; } #define SQR(a) ( (a)*(a) ) /* Create an n-by-m matrix of T. Diagonal elements are initialized to diag, while all other elements are initialized to elem. */ template T **new_matrix(int nr_rows, int nr_cols, T diag = 0.0, T elem = 0.0) { T **m = new T *[nr_rows]; int i, j; for (i = 0; i < nr_rows; i++) m[i] = new T[nr_cols]; for (i = 0; i < nr_rows; i++) for (j = 0; j < nr_cols; j++) m[i][j] = (i == j) ? diag : elem; return m; } /* Create an n-vector of T. Each elements are initialized to elem. */ template T *new_vector(int n, T elem = 0.0) { T *v = new T[n]; for (int i = 0; i < n; i++) v[i] = elem; return v; } /* Destroys a matrix m. */ template void delete_matrix(T **m, int nr_rows) { for (int i = 0; i < nr_rows; i++) delete [] m[i]; delete [] m; } /* Destroys a vector v. */ template void delete_vector(T *v) { delete [] v; } /* The parameter gamma used in the PSLQ algorithm. */ static const double gam = 1.2; /* Perform PSLQ integer relation algorithm to find any linear relation among the n numbers in the vector x. It returns the coefficients found in the vector r. The parameter eps provides the precision of type T. */ template int pslq(const T *x, int n, T *r, double eps, int max_itr) { T *s = new_vector(n); T *y = new_vector(n); T **a = new_matrix(n, n, 1.0); T **b = new_matrix(n, n, 1.0); T **h = new_matrix(n, n-1, 0.0); T t; double teps = 16.0 * eps; int i, j, k; int err = 0; /* Compute the vector s */ t = x[n-1] * x[n-1]; s[n-1] = abs(x[n-1]); for (i = n-2; i >= 0; i--) { t += x[i] * x[i]; s[i] = sqrt(t); } /* Normalize the vector x, s. */ t = s[0]; for (i = 0; i < n; i++) y[i] = x[i] / t; s[0] = 1.0; for (i = 1; i < n; i++) s[i] /= t; /* Construct matrix H. */ for (i = 0; i < n; i++) { for (j = 0; j <= MIN(i, n-2); j++) { h[i][j] = (i == j) ? s[j+1]/s[j] : - y[i]*y[j] / (s[j] * s[j+1]); } } /* Reduce matrix H. */ for (i = 1; i < n; i++) { for (j = i-1; j >= 0; j--) { t = nint(h[i][j] / h[j][j]); y[j] += t * y[i]; for (k = 0; k <= j; k++) h[i][k] -= t * h[j][k]; for (k = 0; k < n; k++) { a[i][k] -= t * a[j][k]; b[k][j] += t * b[k][i]; } } } int m; int itr = 0; bool done = false; while(!done) { itr++; /* Select m such that gam^i * |H_ii| is maximal when i = m. */ T m_val = -1.0; T g = gam; m = -1; for (i = 0; i < n-1; i++, g *= gam) { t = abs(g * h[i][i]); if (t > m_val) { m_val = t; m = i; } } if (m < 0) { /* This shouldn't happen. */ err = 1; break; } /* Exchange entries m and m+1 of y, rows m and m+1 of A and H, columns m and m+1 of B. */ SWAP(y[m], y[m+1]) for (i = 0; i < n; i++) { SWAP(a[m][i], a[m+1][i]) } for (i = 0; i < n-1; i++) { SWAP(h[m][i], h[m+1][i]) } for (i = 0; i < n; i++) { SWAP(b[i][m], b[i][m+1]) } /* Remove the corner on H diagonal. */ if (m < n-2) { T t0, t1, t2, t3, t4; t0 = sqrt(SQR(h[m][m]) + SQR(h[m][m+1])); t1 = h[m][m] / t0; t2 = h[m][m+1] / t0; for (i = m; i < n; i++) { t3 = h[i][m]; t4 = h[i][m+1]; h[i][m] = t1 * t3 + t2 * t4; h[i][m+1] = t1 * t4 - t2 * t3; } } /* Reduce H. */ for (i = m+1; i < n; i++) { for (j = MIN(i-1, m+1); j >= 0; j--) { t = nint(h[i][j]/h[j][j]); y[j] += t * y[i]; for (k = 0; k <= j; k++) { h[i][k] -= t * h[j][k]; } for (k = 0; k < n; k++) { a[i][k] -= t * a[j][k]; b[k][j] += t * b[k][i]; } } } /* Norm bound */ m_val = -1.0e308; for (j = 0; j < n-1; j++) { t = abs(h[j][j]); if (t > m_val) m_val = t; } /* Check the y vector for zeros. */ for (i = 0; i < n; i++) { t = abs(y[i]); if (t < teps) { m = i; done = true; break; } } if (itr > max_itr) { done = true; err = -1; } } /* while */ /* Get the coefficients. */ if (err == 0) { for (i = 0; i < n; i++) { r[i] = b[i][m]; } } delete_matrix(h, n); delete_matrix(a, n); delete_matrix(b, n); delete_vector(y); delete_vector(s); return err; } qd-2.3.11/tests/makeCompileExample0000644000175000017500000000032711402255270017301 0ustar prudhommprudhommall: compileExample CXX = g++ -Wall compileExample: compileExample.o $(CXX) compileExample.o -o compileExample -l qd compileExample.o: $(CXX) -c compileExample.cpp clean: rm compileExample.o compileExampleqd-2.3.11/tests/qd_test.cpp0000644000175000017500000002641511202062041015757 0ustar prudhommprudhomm/* * tests/qd_test.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * This contains some simple tests to sanity check the double-double * and quad-double library. */ #include #include #include #include #include #include #include #include using std::cout; using std::cerr; using std::endl; using std::abs; using std::sqrt; using std::strcmp; using std::exit; // Global flags passed to the main program. static bool flag_test_dd = false; static bool flag_test_qd = false; bool flag_verbose = false; bool print_result(bool result) { if (result) cout << "Test passed." << endl; else cout << "Test FAILED." << endl; return result; } template class TestSuite { static const int double_digits; public: bool test1(); bool test2(); bool test3(); bool test4(); bool test5(); bool test6(); bool test7(); bool test8(); bool testall(); }; template const int TestSuite::double_digits = 6; /* Test 1. Polynomial Evaluation / Polynomial Solving */ template bool TestSuite::test1() { cout << endl; cout << "Test 1. (Polynomial)." << endl; static const int n = 8; T *c = new T[n]; T x, y; for (int i = 0; i < n; i++) c[i] = static_cast(i+1); x = polyroot(c, n-1, T(0.0)); y = polyeval(c, n-1, x); if (flag_verbose) { cout.precision(T::_ndigits); cout << "Root Found: x = " << x << endl; cout << " p(x) = " << y << endl; } delete [] c; return (to_double(y) < 4.0 * T::_eps); } /* Test 2. Machin's Formula for Pi. */ template bool TestSuite::test2() { cout << endl; cout << "Test 2. (Machin's Formula for Pi)." << endl; /* Use the Machin's arctangent formula: pi / 4 = 4 arctan(1/5) - arctan(1/239) The arctangent is computed based on the Taylor series expansion arctan(x) = x - x^3 / 3 + x^5 / 5 - x^7 / 7 + ... */ T s1, s2, t, r; int k; int sign; double d; double err; /* Compute arctan(1/5) */ d = 1.0; t = T(1.0) / 5.0; r = sqr(t); s1 = 0.0; k = 0; sign = 1; while (t > T::_eps) { k++; if (sign < 0) s1 -= (t / d); else s1 += (t / d); d += 2.0; t *= r; sign = -sign; } if (flag_verbose) cout << k << " Iterations" << endl; /* Compute arctan(1/239) */ d = 1.0; t = T(1.0) / 239.0; r = sqr(t); s2 = 0.0; k = 0; sign = 1; while (t > T::_eps) { k++; if (sign < 0) s2 -= (t / d); else s2 += (t / d); d += 2.0; t *= r; sign = -sign; } if (flag_verbose) cout << k << " Iterations" << endl; T p = 4.0 * s1 - s2; p *= 4.0; err = abs(to_double(p - T::_pi)); if (flag_verbose) { cout.precision(T::_ndigits); cout << " pi = " << p << endl; cout << " _pi = " << T::_pi << endl; cout.precision(double_digits); cout << "error = " << err << " = " << err / T::_eps << " eps" << endl; } return (err < 8.0 * T::_eps); } /* Test 3. Salamin-Brent Quadratic Formula for Pi. */ template bool TestSuite::test3() { cout << endl; cout << "Test 3. (Salamin-Brent Quadratic Formula for Pi)." << endl; cout.precision(T::_ndigits); T a, b, s, p; T a_new, b_new, p_old; double m; double err; const int max_iter = 20; a = 1.0; b = sqrt(T(0.5)); s = 0.5; m = 1.0; p = 2.0 * sqr(a) / s; if (flag_verbose) cout << "Iteration 0: " << p << endl; for (int i = 1; i <= max_iter; i++) { m *= 2.0; a_new = 0.5 * (a + b); b_new = a * b; s -= m * (sqr(a_new) - b_new); a = a_new; b = sqrt(b_new); p_old = p; p = 2.0 * sqr(a) / s; if (flag_verbose) cout << "Iteration " << std::setw(2) << i << ": " << p << endl; if (abs(to_double(p - p_old)) < 64 * T::_eps) break; } err = abs(to_double(p - T::_pi)); if (flag_verbose) { cout << " _pi: " << T::_pi << endl; cout.precision(double_digits); cout << " error: " << err << " = " << err / T::_eps << " eps" << endl; } // for some reason, this test gives relatively large error compared // to other tests. May need to be looked at more closely. return (err < 1024.0 * T::_eps); } /* Test 4. Borwein Quartic Formula for Pi. */ template bool TestSuite::test4() { cout << endl; cout << "Test 4. (Borwein Quartic Formula for Pi)." << endl; cout.precision(T::_ndigits); T a, y, p, r, p_old; double m; double err; const int max_iter = 20; a = 6.0 - 4.0 * sqrt(T(2.0)); y = sqrt(T(2.0)) - 1.0; m = 2.0; p = 1.0 / a; if (flag_verbose) cout << "Iteration 0: " << p << endl; for (int i = 1; i <= max_iter; i++) { m *= 4.0; r = nroot(1.0 - sqr(sqr(y)), 4); y = (1.0 - r) / (1.0 + r); a = a * sqr(sqr(1.0 + y)) - m * y * (1.0 + y + sqr(y)); p_old = p; p = 1.0 / a; if (flag_verbose) cout << "Iteration " << std::setw(2) << i << ": " << p << endl; if (abs(to_double(p - p_old)) < 16 * T::_eps) break; } err = abs(to_double(p - T::_pi)); if (flag_verbose) { cout << " _pi: " << T::_pi << endl; cout.precision(double_digits); cout << " error: " << err << " = " << err / T::_eps << " eps" << endl; } return (err < 256.0 * T::_eps); } /* Test 5. Taylor Series Formula for E. */ template bool TestSuite::test5() { cout << endl; cout << "Test 5. (Taylor Series Formula for E)." << endl; cout.precision(T::_ndigits); /* Use Taylor series e = 1 + 1 + 1/2! + 1/3! + 1/4! + ... To compute e. */ T s = 2.0, t = 1.0; double n = 1.0; double delta; int i = 0; while (t > T::_eps) { i++; n += 1.0; t /= n; s += t; } delta = abs(to_double(s - T::_e)); if (flag_verbose) { cout << " e = " << s << endl; cout << " _e = " << T::_e << endl; cout.precision(double_digits); cout << "error = " << delta << " = " << delta / T::_eps << " eps" << endl; cout << i << " iterations." << endl; } return (delta < 64.0 * T::_eps); } /* Test 6. Taylor Series Formula for log 2.*/ template bool TestSuite::test6() { cout << endl; cout << "Test 6. (Taylor Series Formula for Log 2)." << endl; cout.precision(T::_ndigits); /* Use the Taylor series -log(1-x) = x + x^2/2 + x^3/3 + x^4/4 + ... with x = 1/2 to get log(1/2) = -log 2. */ T s = 0.5; T t = 0.5; double delta; double n = 1.0; double i = 0; while (abs(t) > T::_eps) { i++; n += 1.0; t *= 0.5; s += (t/n); } delta = abs(to_double(s - T::_log2)); if (flag_verbose) { cout << " log2 = " << s << endl; cout << "_log2 = " << T::_log2 << endl; cout.precision(double_digits); cout << "error = " << delta << " = " << (delta / T::_eps) << " eps" << endl; cout << i << " iterations." << endl; } return (delta < 4.0 * T::_eps); } /* Test 7. Sanity check for exp. */ template bool TestSuite::test7() { cout << endl; cout << "Test 7. (Sanity check for exp)." << endl; cout.precision(T::_ndigits); /* Do simple sanity check * * e^2 = exp(2) * = exp(-13/4) * exp(-9/4) * exp(-5/4) * exp(-1/4) * * exp(3/4) * exp(7/4) * exp(11/4) * exp(15/4) */ T t = -3.25; T p = 1.0; for (int i = 0; i < 8; i++, t += 1.0) { /* For some reason gcc-4.1.x on x86_64 miscompiles p *= exp(t) here. */ p = p * exp(t); } T t1 = exp(T(2.0)); T t2 = sqr(T::_e); double delta = std::max(abs(to_double(t1 - p)), abs(to_double(t2 - p))); if (flag_verbose) { cout << "result = " << p << endl; cout << "exp(2) = " << t1 << endl; cout << " e^2 = " << t2 << endl; cout.precision(double_digits); cout << " error = " << delta << " = " << (delta / T::_eps) << " eps" << endl; } return (delta < 16.0 * T::_eps); } template bool TestSuite::test8() { cout << endl; cout << "Test 8. (Sanity check for sin / cos)." << endl; cout.precision(T::_ndigits); /* Do simple sanity check * * sin(x) = sin(5x/7)cos(2x/7) + cos(5x/7)sin(2x/7) * * cos(x) = cos(5x/7)cos(2x/7) - sin(5x/7)sin(2x/7); */ T x = T::_pi / 3.0; T x1 = 5.0 * x / 7.0; T x2 = 2.0 * x / 7.0; T r1 = sin(x1)*cos(x2) + cos(x1)*sin(x2); T r2 = cos(x1)*cos(x2) - sin(x1)*sin(x2); T t1 = sqrt(T(3.0)) / 2.0; T t2 = 0.5; double delta = std::max(abs(to_double(t1 - r1)), abs(to_double(t2 - r2))); if (flag_verbose) { cout << " r1 = " << r1 << endl; cout << " t1 = " << t1 << endl; cout << " r2 = " << r2 << endl; cout << " t2 = " << t2 << endl; cout.precision(double_digits); cout << " error = " << delta << " = " << (delta / T::_eps) << " eps" << endl; } return (delta < 4.0 * T::_eps); } template bool TestSuite::testall() { bool pass = true; pass &= print_result(test1()); pass &= print_result(test2()); pass &= print_result(test3()); pass &= print_result(test4()); pass &= print_result(test5()); pass &= print_result(test6()); pass &= print_result(test7()); pass &= print_result(test8()); return pass; } void print_usage() { cout << "qd_test [-h] [-dd] [-qd] [-all]" << endl; cout << " Performs miscellaneous tests of the quad-double library," << endl; cout << " such as polynomial root finding, computation of pi, etc." << endl; cout << endl; cout << " -h -help Prints this usage message." << endl; cout << " -dd Perform tests with double-double types." << endl; cout << " -qd Perform tests with quad-double types." << endl; cout << " This is the default." << endl; cout << " -all Perform both double-double and quad-double tests." << endl; cout << " -v" << endl; cout << " -verbose Print detailed information for each test." << endl; } int main(int argc, char *argv[]) { bool pass = true; unsigned int old_cw; fpu_fix_start(&old_cw); /* Parse the arguments. */ char *arg; for (int i = 1; i < argc; i++) { arg = argv[i]; if (strcmp(arg, "-h") == 0 || strcmp(arg, "-help") == 0) { print_usage(); exit(0); } else if (strcmp(arg, "-dd") == 0) { flag_test_dd = true; } else if (strcmp(arg, "-qd") == 0) { flag_test_qd = true; } else if (strcmp(arg, "-all") == 0) { flag_test_dd = flag_test_qd = true; } else if (strcmp(arg, "-v") == 0 || strcmp(arg, "-verbose") == 0) { flag_verbose = true; } else { cerr << "Unknown flag `" << arg << "'." << endl; } } /* If no flag, test both double-double and quad-double. */ if (!flag_test_dd && !flag_test_qd) { flag_test_dd = true; flag_test_qd = true; } if (flag_test_dd) { TestSuite dd_test; cout << endl; cout << "Testing dd_real ..." << endl; if (flag_verbose) cout << "sizeof(dd_real) = " << sizeof(dd_real) << endl; pass &= dd_test.testall(); } if (flag_test_qd) { TestSuite qd_test; cout << endl; cout << "Testing qd_real ..." << endl; if (flag_verbose) cout << "sizeof(qd_real) = " << sizeof(qd_real) << endl; pass &= qd_test.testall(); } fpu_fix_end(&old_cw); return (pass ? 0 : 1); } qd-2.3.11/tests/huge.cpp0000644000175000017500000000756311202062041015247 0ustar prudhommprudhomm/* * tests/huge.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2007 * * This contains tests for check for accuracy when dealing with numbers * near overflow. */ #include #include #include #include #include #include #include using std::cout; using std::cerr; using std::endl; using std::string; // Global flags passed to the main program. static bool flag_test_dd = false; static bool flag_test_qd = false; bool flag_verbose = false; bool print_result(bool result) { if (result) cout << "Test passed." << endl; else cout << "Test FAILED." << endl; return result; } void print_usage() { cout << "qd_test [-h] [-dd] [-qd] [-all]" << endl; cout << " Tests output of large numbers." << endl; cout << endl; cout << " -h -help Prints this usage message." << endl; cout << " -dd Perform tests with double-double types." << endl; cout << " -qd Perform tests with quad-double types." << endl; cout << " This is the default." << endl; cout << " -all Perform both double-double and quad-double tests." << endl; cout << " -v" << endl; cout << " -verbose Print detailed information for each test." << endl; } bool check(string str, string true_str) { bool pass = (str == true_str); if (!pass) { cout << " fail: " << str << endl; cout << "should be: " << true_str << endl; } else if (flag_verbose) { cout << " pass: " << str << endl; } return pass; } template bool test_huge() { bool pass = true; int digits = T::_ndigits - 1; T x = T::_pi * T("1.0e290"); string pi_str = T::_pi.to_string(digits, 0, std::ios_base::fixed); if (flag_verbose) cout << pi_str << endl; for (int i = 0; i < 18; i++, x *= 10.0) { std::ostringstream os; os << pi_str << "e+" << (290 + i); pass &= check(x.to_string(digits), os.str()); } x = -T::_pi * T("1.0e290"); pi_str = "-" + pi_str; for (int i = 0; i < 18; i++, x *= 10.0) { std::ostringstream os; os << pi_str << "e+" << (290 + i); pass &= check(x.to_string(digits), os.str()); } return pass; } template bool test_max(string true_str) { bool pass = true; int digits = T::_ndigits - 1; pass &= check(T::_max.to_string(digits), true_str); pass &= check((-T::_max).to_string(digits), "-" + true_str); return pass; } int main(int argc, char *argv[]) { bool pass = true; unsigned int old_cw; fpu_fix_start(&old_cw); /* Parse the arguments. */ for (int i = 1; i < argc; i++) { string arg(argv[i]); if (arg == "-h" || arg == "-help") { print_usage(); exit(0); } else if (arg == "-dd") { flag_test_dd = true; } else if (arg == "-qd") { flag_test_qd = true; } else if (arg == "-all") { flag_test_dd = flag_test_qd = true; } else if (arg == "-v" || arg == "-verbose") { flag_verbose = true; } else { cerr << "Unknown flag `" << arg << "'." << endl; } } /* If no flag, test both double-double and quad-double. */ if (!flag_test_dd && !flag_test_qd) { flag_test_dd = true; flag_test_qd = true; } cout << "Testing output of huge numbers..." << endl; if (flag_test_dd) { cout << endl; cout << "Testing dd_real ..." << endl; pass &= test_huge(); pass &= test_max("1.797693134862315807937289714053e+308"); print_result(pass); } if (flag_test_qd) { cout << endl; cout << "Testing qd_real ..." << endl; pass &= test_huge(); pass &= test_max( "1.7976931348623158079372897140530286112296785259868571699620069e+308"); print_result(pass); } fpu_fix_end(&old_cw); return (pass ? 0 : 1); } qd-2.3.11/tests/quadt.h0000644000175000017500000001314411202062041015072 0ustar prudhommprudhomm/* * tests/quadt.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * This contains a C++ class template for a tanh-sinh quadrature * algorithm, which employs the transformation * * t <-- tanh (sinh (x)) * * This quadrature scheme is suitable for any function that is * continuous, infinitely differentiable and integrable on a finite * open interval. It can also be used for certain integrals on * infinite intervals by making a suitable change of variable. * While this routine is not quite as efficient as Gaussian quadrature, * it can be used for functions with an integrable singularity at one * or both of the endpoints. Further, this scheme has the advantage * that function evaluation at one level are all utilized at the next * level, thus saving significant computation. * * This program is based on David Bailey's tquadt.f program (written * in Fortran 90). C++ conversion, quad-double precision support, * and few other changes have been added. */ #ifndef _QUADT_CC_ #define _QUADT_CC_ /* Suppose we are given the integral * * / 1 * I = | f(x) dx * / -1 * * Then the substitution t = tanh (sinh (x)) gives * * dt = (tanh (sinh (x))' dx = (sech (sinh (x)))^2 * cosh(x) dx * * Also the limit point x = 1 corresponds to t = */ #include #include #include #include template class quadt { public: /* Constructor. This will create a tanh-sinh quadrature class. Parameters eps -- The machine epsilon of the variable type to be used. */ quadt(double eps); /* Destructor. This will take care of disposing internal tables, etc. */ ~quadt(); /* Computes the integral of the function f from -1 to 1. The class F is any class with overloaded operator() (T &). */ template int integrate_u(const F &f, double tol, T &result, double &err); /* Computes the integral of the function f from a to b. The class F is any class with overloaded operator() (T &). */ template int integrate(const F &f, T a, T b, double tol, T &result, double &err); private: int max_level; double initial_width, final_width; int table_size; double eps; /* Pre-computed quadrature points. */ T *weights; T *points; /* Scales and translates the given function f from the interval [a, b] to [-1, 1] so it can be evaluated using the tanh-sinh substitution. */ template class UnitFunction { private: F f; T offset, h; public: UnitFunction(const F &f, const T &a, const T &b) : f(f) { offset = 0.5 * (a + b); h = (b - a) * 0.5; } T operator()(T x) const { return f(offset + h * x) * h; } }; /* Initializes the weight and abcissa table. */ void init_table(); }; /*-**** Class Template Implementations ****-*/ template quadt::quadt(double eps) { max_level = 11; initial_width = 0.5; final_width = std::ldexp(initial_width, -max_level+1); table_size = static_cast(2.0 * 7.0 / final_width); this->eps = eps; init_table(); } template quadt::~quadt() { delete [] weights; delete [] points; } template void quadt::init_table() { weights = new T[table_size]; points = new T[table_size]; double h = initial_width * 2.0; double dt; double t; int i = 0; T sinh_t, cosh_t, sinh_s, cosh_s; T x, w; for (int level = 1; level <= max_level; level++, h *= 0.5) { t = h * 0.5; dt = (level == 1) ? t : h; for (;; t += dt) { sincosh(T(t), sinh_t, cosh_t); sincosh(sinh_t, sinh_s, cosh_s); x = sinh_s / cosh_s; // w = (cosh_t / cosh_s) / cosh_s; w = (cosh_t / sqr(cosh_s)); if (x == 1.0 || w < eps) { weights[i++] = 0.0; break; } points[i] = x; weights[i] = w; i++; } } } template template int quadt::integrate_u(const F &f, double tol, T &result, double &err) { T r1, r2, r3, s; T x, w; int level; double h = initial_width; bool conv = false; int i = 0; r1 = r2 = r3 = 0.0; s = f(T(0.0)); for (level = 1; level <= max_level; level++, h *= 0.5) { /* Compute the integral */ for (;;) { x = points[i]; w = weights[i]; i++; if (w == 0.0) break; s += w * (f(x) + f(-x)); } r1 = s * h; /* Check for convergence. */ if (level > 2) { double e1, e2, d1, d2; e1 = abs(to_double(r1 - r2)); if (e1 == 0.0) err = eps; else { e2 = abs(to_double(r1 - r3)); d1 = log(e1); d2 = log(e2); err = exp(d1 * d1 / d2); } cout << " level = " << level << endl; cout << " r = " << r1 << endl; cout << " err = " << err << endl; if (err < abs(r1) * tol) { conv = true; break; } } r2 = r1; r3 = r2; } if (level > max_level) puts("Level exhausted."); result = r1; if (!conv) { /* No convergence. */ return -1; } return 0; } template template int quadt::integrate(const F &f, T a, T b, double tol, T &result, double &err) { if (a == -1.0 && b == 1.0) return integrate_u(f, tol, result, err); else { UnitFunction unit_f(f, a, b); return integrate_u< UnitFunction >(unit_f, tol, result, err); } } #endif /* _QUADT_CC_ */ qd-2.3.11/tests/quadt_test.cpp0000644000175000017500000002262411202062041016467 0ustar prudhommprudhomm/* * tests/quadt_test.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2001 * * This class contains a test suite for the quadt integration * code (see quadt.h). */ #include #include #include #include #include #include #include "tictoc.h" using std::cout; using std::cerr; using std::endl; using std::abs; using std::exp; using std::log; using std::sqrt; using std::cos; using std::atan; using namespace qd; #include "quadt.h" /** Various flags passed to the main program. */ static bool flag_verbose = false; static bool flag_test_d = false; static bool flag_test_dd = false; static bool flag_test_qd = false; static bool flag_last_only = false; template class constants { public: static const T π static const T &pi2; static const T &pi4; static const T &log2; }; template const T &constants::pi = T::_pi; template const T &constants::pi2 = T::_pi2; template const T &constants::pi4 = T::_pi4; template const T &constants::log2 = T::_log2; template <> const double &constants::pi = 3.14159265358979; template <> const double &constants::pi2 = 1.57079632679490; template <> const double &constants::pi4 = 0.785398163397448; template <> const double &constants::log2 = 0.693147180559945; /* Sample Functions */ template class CircleFunction { T r, r2; public: CircleFunction(T radius) { r = radius; r2 = sqr(r); } T operator() (T x) const { if (abs(x) >= r) return 0; return sqrt(r2 - sqr(x)); } }; template class SecantFunction { public: T operator() (T x) const { return 1.0 / cos(x); } }; template class TestFunction1 { public: T operator() (T x) const { return x * log(1.0 + x); } }; template class TestFunction2 { public: T operator() (T x) const { return sqr(x) * atan(x); } }; template class TestFunction3 { public: T operator() (T x) const { if (x <= 0.0) return 0.0; return sqr(log(x)); } }; template class TestFunction4 { public: T operator() (T x) const { T tmp; if (x >= constants::pi2) return 0.0; tmp = tan(x); if (tmp < 0.0) return 0.0; return sqrt(tmp); } }; template class TestFunction5 { public: T operator() (T x) const { T t; if (x <= 0.0) return 0.0; if (x > 0.00146) { T rt = 1.0 / x; t = 1.0 / (exp(rt) * sqrt(rt) * sqr(x)); } else t = 0.0; t = 1.0 / (exp(x) * sqrt(x)) + t; return t; } }; template void convert(char *s, T *x) { *x = s; } template <> void convert(char *s, double *x) { *x = atof(s); } template class CosineProduct { private: T coeff[32]; public: CosineProduct() { const char *f_name = "coeff.dat"; char s[100]; FILE *f = fopen(f_name, "r"); if (f == NULL) { cerr << "Failed to open coefficient file " << f_name << "." << endl; exit(-1); } for (int i = 0; i < 32; i++) { fscanf(f, "%s", s); convert(s, &coeff[i]); } fclose(f); } T operator() (T x) const { T xx = (x + 1.0) * 0.5; T val = cos(2.0 * xx); T tmp = 0.0; T xp = sqr(xx); T x2 = xp; for (int i = 1; i < 512; i++) { val *= cos(xx / static_cast(i)); } for (int i = 0; i < 32; i++, xp *= x2) { tmp += coeff[i] * xp; } val *= exp(tmp); return val; } }; template class InvCosineProduct { private: T coeff[32]; public: InvCosineProduct() { const char *f_name = "coeff.dat"; char s[100]; FILE *f = fopen(f_name, "r"); if (f == NULL) { cerr << "Failed to open coefficient file " << f_name << "." << endl; exit(-1); } for (int i = 0; i < 32; i++) { fscanf(f, "%s", s); convert(s, &coeff[i]); } fclose(f); } T operator() (T x) const { T xx = (x + 1.0) * 0.5; if (xx < 0.005) return 0.0; T inv_x = 1.0 / xx; T val = cos(2.0 * inv_x); T tmp = 0.0; T xp = sqr(inv_x); T x2 = xp; for (int i = 1; i < 512; i++) { val *= cos(inv_x / static_cast(i)); } for (int i = 0; i < 32; i++, xp *= x2) { tmp += coeff[i] * xp; } val *= exp(tmp); val *= x2; return val; } }; template class quadt_tester { private: double eps; quadt *q; public: quadt_tester(double eps) { this->eps = eps; q = new quadt(eps); } ~quadt_tester() { delete q; } template void test_integral(F &f, T a, T b, T truth); void test(); }; template template void quadt_tester::test_integral(F &f, T a, T b, T truth) { int r; T result; double err_est, err; double tol = eps * 1024; r = q->integrate(f, a, b, tol, result, err_est); err = abs(to_double(result - truth)); if (flag_verbose) { cout << " Result: " << result << endl; cout << " Truth: " << truth << endl; cout << "Est. Error: " << err_est << endl; cout << "True Error: " << err << endl; cout << endl; } } template void quadt_tester::test() { CosineProduct f8; InvCosineProduct invf8; if (!flag_last_only) { CircleFunction f1(1.0); SecantFunction f2; TestFunction1 f3; TestFunction2 f4; TestFunction3 f5; TestFunction4 f6; TestFunction5 f7; cout << "Test 1." << endl; test_integral(f1, T(-1.0), T(1.0), constants::pi2); cout << "Test 2." << endl; test_integral(f2, T(0.0), constants::pi4, log(1.0 + sqrt(T(2.0)))); cout << "Test 3." << endl; test_integral(f3, T(0.0), T(1.0), T(0.25)); cout << "Test 4." << endl; test_integral(f4, T(0.0), T(1.0), constants::pi4/3.0 - T(1.0) / 6.0 + log(T(2.0)) / 6.0); cout << "Test 5." << endl; test_integral(f5, T(0.0), T(1.0), T(2.0)); cout << "Test 6." << endl; test_integral(f6, T(0.0), constants::pi2, constants::pi2 * sqrt(T(2.0))); cout << "Test 7." << endl; test_integral(f7, T(0.0), T(1.0), sqrt(constants::pi)); } cout << "Test 8." << endl; double tol = eps * 1024; double err; T r, r1, r2; T truth = constants::pi4 * 0.5; q->integrate_u(f8, tol, r1, err); r1 *= 0.5; if (flag_verbose) { cout << " Result 1: " << r1 << endl; cout << "Est. Error: " << err << endl; } q->integrate_u(invf8, tol, r2, err); r2 *= 0.5; if (flag_verbose) { cout << " Result 2: " << r2 << endl; cout << "Est. Error: " << err << endl; } r = r1 + r2; err = abs(to_double(r - truth)); if (flag_verbose) { cout << " Result: " << r << endl; cout << " Truth: " << truth << endl; cout << "True Error: " << err << endl; cout << endl; } } template void test_quadt(double eps) { tictoc tv; double tm1, tm2; tic(&tv); quadt_tester tester (eps); tm1 = toc(&tv); tic(&tv); tester.test(); tm2 = toc(&tv); cout << "Setup CPU Time = " << tm1 << endl; cout << " Test CPU Time = " << tm2 << endl; cout << "Total CPU Time = " << tm1 + tm2 << endl; } void print_usage() { cout << "quadt_test [-dd] [-qd] [-all] [-v] [-x]" << endl; cout << " Performs a selected set of integration using " << endl; cout << " the quad-double library." << endl; cout << endl; cout << " -h -help Print this usage message." << endl; cout << " -d Perform quadrature test with regular double precision." << endl; cout << " -dd Perform quadrature test with double-double." << endl; cout << " -qd Perform quadrature test with quad-double." << endl; cout << " This is the default." << endl; cout << " -all Perform quadrature test with all three precision types." << endl; cout << " -v" << endl; cout << " -verbose Prints out detailed test results." << endl; cout << " -x Perform only the last test, an interesting quadrature" << endl; cout << " whose value is *very* close to pi / 8 (see paper)." << endl; } int main(int argc, char **argv) { char *arg; /* Parse the command-line flags. */ for (int i = 1; i < argc; i++) { arg = argv[i]; if (strcmp(arg, "-h") == 0 || strcmp(arg, "-help") == 0) { print_usage(); exit(0); } else if (strcmp(arg, "-d") == 0) { flag_test_d = true; } else if (strcmp(arg, "-dd") == 0) { flag_test_dd = true; } else if (strcmp(arg, "-qd") == 0) { flag_test_qd = true; } else if (strcmp(arg, "-all") == 0) { flag_test_d = flag_test_dd = flag_test_qd = true; } else if (strcmp(arg, "-v") == 0 || strcmp(arg, "-verbose") == 0) { flag_verbose = true; } else if (strcmp(arg, "-x") == 0) { flag_last_only = true; } else { cerr << "Unknown flag `" << arg << "'." << endl; } } unsigned int old_cw; fpu_fix_start(&old_cw); if (!flag_test_d && !flag_test_dd && !flag_test_qd) flag_test_qd = true; double _eps = 1.11022302462516e-16; if (flag_test_d) test_quadt (_eps); if (flag_test_dd) test_quadt (dd_real::_eps); if (flag_test_qd) test_quadt (qd_real::_eps); fpu_fix_end(&old_cw); return 0; } qd-2.3.11/tests/Makefile.in0000644000175000017500000004747211202062041015663 0ustar prudhommprudhomm# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 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. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@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@ TESTS = qd_test$(EXEEXT) pslq_test$(EXEEXT) c_test$(EXEEXT) \ $(am__EXEEXT_1) check_PROGRAMS = qd_test$(EXEEXT) pslq_test$(EXEEXT) c_test$(EXEEXT) \ $(am__EXEEXT_1) EXTRA_PROGRAMS = qd_timer$(EXEEXT) quadt_test$(EXEEXT) huge$(EXEEXT) @HAVE_FORTRAN_TRUE@am__append_1 = f_test @HAVE_FORTRAN_TRUE@am__append_2 = f_test subdir = tests DIST_COMMON = $(dist_noinst_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_clock_gettime.m4 \ $(top_srcdir)/m4/ax_cxx_copysign.m4 \ $(top_srcdir)/m4/ax_cxx_fc_lib.m4 \ $(top_srcdir)/m4/ax_cxx_fma.m4 \ $(top_srcdir)/m4/ax_cxx_isfinite.m4 \ $(top_srcdir)/m4/ax_cxx_isinf.m4 \ $(top_srcdir)/m4/ax_cxx_isnan.m4 \ $(top_srcdir)/m4/ax_f90_module_flag.m4 \ $(top_srcdir)/m4/ax_f90_module_style.m4 \ $(top_srcdir)/m4/ax_fc_etime.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/include/qd/qd_config.h CONFIG_CLEAN_FILES = @HAVE_FORTRAN_TRUE@am__EXEEXT_1 = f_test$(EXEEXT) am_c_test_OBJECTS = c_test.$(OBJEXT) c_test_OBJECTS = $(am_c_test_OBJECTS) c_test_LDADD = $(LDADD) c_test_DEPENDENCIES = $(top_builddir)/src/libqd.a am__f_test_SOURCES_DIST = f_test.f @HAVE_FORTRAN_TRUE@am_f_test_OBJECTS = f_test.$(OBJEXT) f_test_OBJECTS = $(am_f_test_OBJECTS) am__DEPENDENCIES_1 = @HAVE_FORTRAN_TRUE@f_test_DEPENDENCIES = \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/fortran/libqdmod.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/fortran/libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(LDADD) $(top_builddir)/src/libqd.a \ @HAVE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) am_huge_OBJECTS = huge.$(OBJEXT) huge_OBJECTS = $(am_huge_OBJECTS) huge_LDADD = $(LDADD) huge_DEPENDENCIES = $(top_builddir)/src/libqd.a am_pslq_test_OBJECTS = pslq_test.$(OBJEXT) tictoc.$(OBJEXT) pslq_test_OBJECTS = $(am_pslq_test_OBJECTS) pslq_test_LDADD = $(LDADD) pslq_test_DEPENDENCIES = $(top_builddir)/src/libqd.a am_qd_test_OBJECTS = qd_test.$(OBJEXT) qd_test_OBJECTS = $(am_qd_test_OBJECTS) qd_test_LDADD = $(LDADD) qd_test_DEPENDENCIES = $(top_builddir)/src/libqd.a am_qd_timer_OBJECTS = qd_timer.$(OBJEXT) tictoc.$(OBJEXT) qd_timer_OBJECTS = $(am_qd_timer_OBJECTS) qd_timer_LDADD = $(LDADD) qd_timer_DEPENDENCIES = $(top_builddir)/src/libqd.a am_quadt_test_OBJECTS = quadt_test.$(OBJEXT) tictoc.$(OBJEXT) quadt_test_OBJECTS = $(am_quadt_test_OBJECTS) quadt_test_LDADD = $(LDADD) quadt_test_DEPENDENCIES = $(top_builddir)/src/libqd.a DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) F77LD = $(F77) F77LINK = $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ SOURCES = $(c_test_SOURCES) $(f_test_SOURCES) $(huge_SOURCES) \ $(pslq_test_SOURCES) $(qd_test_SOURCES) $(qd_timer_SOURCES) \ $(quadt_test_SOURCES) DIST_SOURCES = $(c_test_SOURCES) $(am__f_test_SOURCES_DIST) \ $(huge_SOURCES) $(pslq_test_SOURCES) $(qd_test_SOURCES) \ $(qd_timer_SOURCES) $(quadt_test_SOURCES) DATA = $(dist_noinst_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_ARGS = @CONFIGURE_ARGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETIME = @ETIME@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCLIBS = @FCLIBS@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REQ_CXXFLAGS = @REQ_CXXFLAGS@ REQ_FCFLAGS = @REQ_FCFLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_f90_modflag = @ax_f90_modflag@ 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@ 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@ mkdir_p = @mkdir_p@ module_ext = @module_ext@ 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@ LDADD = $(top_builddir)/src/libqd.a AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include dist_noinst_DATA = coeff.dat @HAVE_FORTRAN_TRUE@AM_FCFLAGS = @ax_f90_modflag@$(top_builddir)/fortran @HAVE_FORTRAN_TRUE@AM_FFLAGS = $(AM_FCFLAGS) @HAVE_FORTRAN_TRUE@f_test_SOURCES = f_test.f @HAVE_FORTRAN_TRUE@f_test_LINK = $(CXXLINK) @HAVE_FORTRAN_TRUE@f_test_LDADD = $(top_builddir)/fortran/libqdmod.a \ @HAVE_FORTRAN_TRUE@ $(top_builddir)/fortran/libqd_f_main.a \ @HAVE_FORTRAN_TRUE@ $(LDADD) $(top_builddir)/src/libqd.a $(FCLIBS) CLEANFILES = qd_timer quadt_test huge qd_test_SOURCES = qd_test.cpp pslq_test_SOURCES = pslq.h pslq_test.cpp tictoc.cpp tictoc.h qd_timer_SOURCES = qd_timer.cpp tictoc.cpp tictoc.h quadt_test_SOURCES = quadt_test.cpp tictoc.cpp quadt.h tictoc.h huge_SOURCES = huge.cpp c_test_SOURCES = c_test.c c_test_LINK = $(CXXLINK) all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .f .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ 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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) c_test$(EXEEXT): $(c_test_OBJECTS) $(c_test_DEPENDENCIES) @rm -f c_test$(EXEEXT) $(c_test_LINK) $(c_test_OBJECTS) $(c_test_LDADD) $(LIBS) f_test$(EXEEXT): $(f_test_OBJECTS) $(f_test_DEPENDENCIES) @rm -f f_test$(EXEEXT) $(f_test_LINK) $(f_test_OBJECTS) $(f_test_LDADD) $(LIBS) huge$(EXEEXT): $(huge_OBJECTS) $(huge_DEPENDENCIES) @rm -f huge$(EXEEXT) $(CXXLINK) $(huge_OBJECTS) $(huge_LDADD) $(LIBS) pslq_test$(EXEEXT): $(pslq_test_OBJECTS) $(pslq_test_DEPENDENCIES) @rm -f pslq_test$(EXEEXT) $(CXXLINK) $(pslq_test_OBJECTS) $(pslq_test_LDADD) $(LIBS) qd_test$(EXEEXT): $(qd_test_OBJECTS) $(qd_test_DEPENDENCIES) @rm -f qd_test$(EXEEXT) $(CXXLINK) $(qd_test_OBJECTS) $(qd_test_LDADD) $(LIBS) qd_timer$(EXEEXT): $(qd_timer_OBJECTS) $(qd_timer_DEPENDENCIES) @rm -f qd_timer$(EXEEXT) $(CXXLINK) $(qd_timer_OBJECTS) $(qd_timer_LDADD) $(LIBS) quadt_test$(EXEEXT): $(quadt_test_OBJECTS) $(quadt_test_DEPENDENCIES) @rm -f quadt_test$(EXEEXT) $(CXXLINK) $(quadt_test_OBJECTS) $(quadt_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pslq_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qd_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qd_timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quadt_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tictoc.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.o: $(F77COMPILE) -c -o $@ $< .f.obj: $(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ 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; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *$$ws$$tst$$ws*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ ;; \ *) \ echo "PASS: $$tst"; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *$$ws$$tst$$ws*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ *) \ failed=`expr $$failed + 1`; \ echo "FAIL: $$tst"; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ echo "SKIP: $$tst"; \ fi; \ done; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="All $$all tests passed"; \ else \ 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 \ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ 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`; \ echo "$$dashes"; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes"; \ 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(DATA) 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-checkPROGRAMS clean-generic 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 info: info-am info-am: install-data-am: install-dvi: install-dvi-am 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 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 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-TESTS check-am clean \ clean-checkPROGRAMS clean-generic ctags distclean \ distclean-compile distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ uninstall-am time: qd_timer$(EXEEXT) ./qd_timer$(EXEEXT) demo: $(check_PROGRAMS) $(EXTRA_PROGRAMS) .PHONY: time demo # 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: qd-2.3.11/tests/compileExample.cpp0000644000175000017500000000150711402304276017266 0ustar prudhommprudhomm // simple exaple of QD usage to illustrate linking process // Alex Kaiser, LBNL, 6/3/2010 #include #include #include using namespace std; int main() { // ensure that 80-bit arithmetic is not in place // this call forces 64-bit arithmetic unsigned int old_cw; fpu_fix_start(&old_cw); cout.precision(60); // simple read example /* qd_real readTest ; cin >> readTest ; cout << "readTest = " << readTest << endl ; */ // simple demo qd_real x = "1.0" ; x /= 3.0 ; qd_real y ; y = pow( qd_real(2.0) , 3 ) ; cout << "y = " << y << endl; cout << "x = " << x << endl; qd_real a ; qd_real b = qd_real("0.1"); a = sqrt(b); cout << " sqrt(0.1) = " << a << endl; cout << " sqrt(0.1) * sqrt(0.1) = " << a * a << endl; fpu_fix_end(&old_cw); return 0; } qd-2.3.11/tests/tictoc.cpp0000644000175000017500000000302611202062041015572 0ustar prudhommprudhomm/* * tests/tictoc.cpp * * This work was supported by the Director, Office of Science, Division * of Mathematical, Information, and Computational Sciences of the * U.S. Department of Energy under contract number DE-AC03-76SF00098. * * Copyright (c) 2000-2006 * * Contains function used for timing. */ #include "tictoc.h" #ifndef _WIN32 #ifdef HAVE_CLOCK_GETTIME #ifdef CLOCK_HIGHRES #define SAMPLED_CLOCK CLOCK_HIGHRES #else #define SAMPLED_CLOCK CLOCK_REALTIME #endif void tic(tictoc *tv) { if (clock_gettime(SAMPLED_CLOCK, tv)) tv->tv_sec = tv->tv_nsec = -1; } double toc(tictoc *tv) { struct timespec tv2; if (clock_gettime(SAMPLED_CLOCK, &tv2)) tv2.tv_sec = tv2.tv_nsec = -1; double sec = static_cast(tv2.tv_sec - tv->tv_sec); double nsec = static_cast(tv2.tv_nsec - tv->tv_nsec); return (sec + 1.0e-9 * nsec); } #else #ifdef HAVE_GETTIMEOFDAY void tic(tictoc *tv) { gettimeofday(tv, 0L); } double toc(tictoc *tv) { tictoc tv2; gettimeofday(&tv2, 0L); double sec = static_cast(tv2.tv_sec - tv->tv_sec); double usec = static_cast(tv2.tv_usec - tv->tv_usec); return (sec + 1.0e-6 * usec); } #else // Fall back to C/C++ low resolution time function. void tic(tictoc *tv) { time(tv); } double toc(tictoc *tv) { tictoc tv2; time(&tv2); return difftime(tv2, *tv); } #endif #endif #else // Windows. void tic(tictoc *tv) { *tv = GetTickCount(); } double toc(tictoc *tv) { tictoc tv2; tv2 = GetTickCount(); return 1.0e-3 * (tv2 - *tv); } #endif qd-2.3.11/tests/c_test.c0000644000175000017500000000324711202062041015233 0ustar prudhommprudhomm#include #include #include /* Test 1. Salamin-Brent quadratically convergent formula for pi. */ int test_1() { double a[4], b[4], s[4], p[4], t[4], t2[4]; double a_new[4], b_new[4], p_old[4]; double m, err; int r, i; const int max_iter = 20; puts("Test 1. (Salamin-Brent quadratically convergent formula for pi)"); c_qd_copy_d(1.0, a); /* a = 1.0 */ c_qd_copy_d(0.5, t); /* t = 0.5 */ c_qd_sqrt(t, b); /* b = sqrt(t) */ c_qd_copy_d(0.5, s); /* s = 0.5 */ m = 1.0; c_qd_sqr(a, p); c_qd_selfmul_d(2.0, p); c_qd_selfdiv(s, p); printf(" iteration 0: "); c_qd_write(p); for (i = 1; i <= max_iter; i++) { m *= 2.0; /* a_new = 0.5 * (a + b) */ c_qd_add(a, b, a_new); c_qd_selfmul_d(0.5, a_new); c_qd_mul(a, b, b_new); /* b_new = a * b */ /* Compute s = s - m * (a_new^2 - b) */ c_qd_sqr(a_new, t); /* t = a_new ^ 2 */ c_qd_selfsub(b_new, t); /* t -= b_new */ c_qd_selfmul_d(m, t); /* t *= m */ c_qd_selfsub(t, s); /* s -= t */ c_qd_copy(a_new, a); c_qd_sqrt(b_new, b); c_qd_copy(p, p_old); /* Compute p = 2.0 * a^2 / s */ c_qd_sqr(a, p); c_qd_selfmul_d(2.0, p); c_qd_selfdiv(s, p); /* Test for convergence by looking at |p - p_old|. */ c_qd_sub(p, p_old, t); c_qd_abs(t, t2); c_qd_comp_qd_d(t2, 1e-60, &r); if (r < 0) break; printf(" iteration %1d: ", i); c_qd_write(p); } c_qd_pi(p); /* p = pi */ printf(" _pi: "); c_qd_write(p); printf(" error: %.5e = %g eps\n", t2[0], t2[0] / ldexp(1.0, -209)); return 0; } int main(void) { fpu_fix_start(NULL); return test_1(); } qd-2.3.11/tests/f_test.f0000644000175000017500000000110211202062041015225 0ustar prudhommprudhomm! program fortran_test subroutine f_main ! A simple test of the fortran wrappers use qdmodule implicit none integer*4 old_cw integer i type (qd_real) x, y, z call f_fpu_fix_start (old_cw) ! Test for read/write z = "3.14159265358979323846264338327950288419716939937510582097494459230" call write_scalar(6, z) ! Test for atan/write do i=1,3 x = qdreal(dble(i)) call write_scalar(6, x) y = atan(x) call write_scalar(6, y) end do call write_scalar(6, nan(x)) call write_scalar(6, qdcomplex(x, y)) call f_fpu_fix_end (old_cw) end qd-2.3.11/tests/Makefile.am0000644000175000017500000000204211202062041015632 0ustar prudhommprudhommLDADD = $(top_builddir)/src/libqd.a AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I$(top_srcdir)/include TESTS = qd_test pslq_test c_test check_PROGRAMS = qd_test pslq_test c_test EXTRA_PROGRAMS = qd_timer quadt_test huge dist_noinst_DATA = coeff.dat if HAVE_FORTRAN TESTS += f_test check_PROGRAMS += f_test AM_FCFLAGS = @ax_f90_modflag@$(top_builddir)/fortran AM_FFLAGS = $(AM_FCFLAGS) f_test_SOURCES = f_test.f f_test_LINK=$(CXXLINK) f_test_LDADD = $(top_builddir)/fortran/libqdmod.a \ $(top_builddir)/fortran/libqd_f_main.a \ $(LDADD) $(top_builddir)/src/libqd.a $(FCLIBS) endif CLEANFILES=qd_timer quadt_test huge qd_test_SOURCES = qd_test.cpp pslq_test_SOURCES = pslq.h pslq_test.cpp tictoc.cpp tictoc.h qd_timer_SOURCES = qd_timer.cpp tictoc.cpp tictoc.h quadt_test_SOURCES = quadt_test.cpp tictoc.cpp quadt.h tictoc.h huge_SOURCES = huge.cpp c_test_SOURCES = c_test.c c_test_LINK = $(CXXLINK) time: qd_timer$(EXEEXT) ./qd_timer$(EXEEXT) demo: $(check_PROGRAMS) $(EXTRA_PROGRAMS) .PHONY: time demo qd-2.3.11/configure0000755000175000017500000115231211202062041014352 0ustar prudhommprudhomm#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.62 for qd 2.3.7. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## 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 # PATH needs CR # 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_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 if (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 # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false 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. 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); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. 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 # Name of the executable. 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'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF 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 : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF 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_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. 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 { (exit 1); exit 1; }; } # 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 } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi 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 -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' 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=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # 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 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, 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= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='qd' PACKAGE_TARNAME='qd' PACKAGE_VERSION='2.3.7' PACKAGE_STRING='qd 2.3.7' PACKAGE_BUGREPORT='yozo@cs.berkeley.edu' ac_unique_file="src/qd_real.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM MKDIR_P mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE REQ_CXXFLAGS CXXCPP GREP EGREP CONFIGURE_ARGS FC FCFLAGS ac_ct_FC FCLIBS ETIME ax_f90_modflag module_ext REQ_FCFLAGS UPCASE_MODULE_TRUE UPCASE_MODULE_FALSE HAVE_FORTRAN_TRUE HAVE_FORTRAN_FALSE QD_DEBUG_TRUE QD_DEBUG_FALSE F77 FFLAGS RANLIB LIBOBJS LTLIBOBJS' ac_subst_files='' ac_user_opts=' enable_option_checking enable_enable_inline enable_enable_ieee_add enable_enable_sloppy_mul enable_enable_sloppy_div enable_enable_debug enable_enable_warnings enable_dependency_tracking enable_enable_fma enable_enable_fortran ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CXXCPP FC FCFLAGS' # 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=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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } 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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } 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_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } 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_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } 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_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } 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_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $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_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } 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 $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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_echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # 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_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } 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 qd 2.3.7 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/qd] --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 qd 2.3.7:";; 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-inline inline commonly used functions. [default=yes] --enable-ieee-add use addition that satisfies IEEE-style error bound instead of Cray-style error bound. [default=no] --enable-sloppy-mul use fast but slightly inaccurate multiplication. [default=yes] --enable-sloppy-div use fast but slightly inaccurate division. [default=yes] --enable-debug enable debugging code. [default=no] --enable-warnings enable compiler warnings. [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-fma use fused multiply-add/subtract (auto,gnu,ia64,c99,ibm,compiler). Use this option with care. [default=auto] --enable-fortran build Fortran 77/90 interfaces [default=auto] Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CXXCPP C++ preprocessor FC Fortran compiler command FCFLAGS Fortran compiler flags 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 . _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 qd configure 2.3.7 generated by GNU Autoconf 2.62 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi 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 qd $as_me 2.3.7, which was generated by GNU Autoconf 2.62. 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) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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 cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX 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:$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= ;; #( *) $as_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 cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX 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 cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX 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 cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX 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'; { (exit 1); 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 # 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 # 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 ac_site_file1=$CONFIG_SITE 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 -r "$ac_site_file"; then { $as_echo "$as_me:$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" 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. if test -f "$cache_file"; then { $as_echo "$as_me:$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:$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:$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:$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:$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:$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:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$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_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 PACKAGE="qd" MAJOR_VERSION="2" MINOR_VERSION="3" PATCH_VERSION="7" VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION cat >>confdefs.h <<_ACEOF #define MAJOR_VERSION $MAJOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define MINOR_VERSION $MINOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define PATCH_VERSION $PATCH_VERSION _ACEOF echo "configuring $PACKAGE $VERSION..." 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_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;} { (exit 1); exit 1; }; } 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. am__api_version='1.10' # 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:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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:$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:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 $as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 $as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } 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` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { $as_echo "$as_me:$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 test "${ac_cv_path_mkdir+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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 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. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:$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:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:$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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi 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 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_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 $as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='qd' VERSION='2.3.7' 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"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$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:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$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:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$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:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&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" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" ac_config_headers="$ac_config_headers include/qd/qd_config.h" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 $as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; 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_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 $as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 $as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; 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:$LINENO: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; 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_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 $as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; 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 # Checks for arguments # --enable-inline # Check whether --enable-enable_inline was given. if test "${enable_enable_inline+set}" = set; then enableval=$enable_enable_inline; fi { $as_echo "$as_me:$LINENO: checking if commonly used function is to be inlined" >&5 $as_echo_n "checking if commonly used function is to be inlined... " >&6; } if test "$enable_inline" != "no"; then enable_inline="yes" cat >>confdefs.h <<\_ACEOF #define QD_INLINE 1 _ACEOF fi { $as_echo "$as_me:$LINENO: result: $enable_inline" >&5 $as_echo "$enable_inline" >&6; } # --enable-ieee-add # Check whether --enable-enable_ieee_add was given. if test "${enable_enable_ieee_add+set}" = set; then enableval=$enable_enable_ieee_add; fi { $as_echo "$as_me:$LINENO: checking if addition with IEEE-style error bound is to be used" >&5 $as_echo_n "checking if addition with IEEE-style error bound is to be used... " >&6; } if test "$enable_ieee_add" = "yes"; then cat >>confdefs.h <<\_ACEOF #define QD_IEEE_ADD 1 _ACEOF else enable_ieee_add="no" fi { $as_echo "$as_me:$LINENO: result: $enable_ieee_add" >&5 $as_echo "$enable_ieee_add" >&6; } # --enable-sloppy-mul # Check whether --enable-enable_sloppy_mul was given. if test "${enable_enable_sloppy_mul+set}" = set; then enableval=$enable_enable_sloppy_mul; fi { $as_echo "$as_me:$LINENO: checking if sloppy multiplication is to be used" >&5 $as_echo_n "checking if sloppy multiplication is to be used... " >&6; } if test "$enable_sloppy_mul" != "no"; then enable_sloppy_mul="yes" cat >>confdefs.h <<\_ACEOF #define QD_SLOPPY_MUL 1 _ACEOF fi { $as_echo "$as_me:$LINENO: result: $enable_sloppy_mul" >&5 $as_echo "$enable_sloppy_mul" >&6; } # --enable-sloppy-div # Check whether --enable-enable_sloppy_div was given. if test "${enable_enable_sloppy_div+set}" = set; then enableval=$enable_enable_sloppy_div; fi { $as_echo "$as_me:$LINENO: checking if sloppy division is to be used" >&5 $as_echo_n "checking if sloppy division is to be used... " >&6; } if test "$enable_sloppy_div" != "no"; then enable_sloppy_div="yes" cat >>confdefs.h <<\_ACEOF #define QD_SLOPPY_DIV 1 _ACEOF fi { $as_echo "$as_me:$LINENO: result: $enable_sloppy_div" >&5 $as_echo "$enable_sloppy_div" >&6; } # --enable-debug # Check whether --enable-enable_debug was given. if test "${enable_enable_debug+set}" = set; then enableval=$enable_enable_debug; fi { $as_echo "$as_me:$LINENO: checking if debugging code is to be enabled" >&5 $as_echo_n "checking if debugging code is to be enabled... " >&6; } if test "$enable_debug" = "yes"; then cat >>confdefs.h <<\_ACEOF #define QD_DEBUG 1 _ACEOF else enable_debug="no" fi { $as_echo "$as_me:$LINENO: result: $enable_debug" >&5 $as_echo "$enable_debug" >&6; } # --enable-warnings # Check whether --enable-enable_warnings was given. if test "${enable_enable_warnings+set}" = set; then enableval=$enable_enable_warnings; fi { $as_echo "$as_me:$LINENO: checking if compiler warnings is to be enabled" >&5 $as_echo_n "checking if compiler warnings is to be enabled... " >&6; } if test "$enable_warnings" != "yes"; then enable_warnings="no" fi { $as_echo "$as_me:$LINENO: result: $enable_warnings" >&5 $as_echo "$enable_warnings" >&6; } # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "$CXXFLAGS" = ""; then if test "$enable_debug" = "yes"; then CXXFLAGS="-O" else CXXFLAGS="-O2" fi fi # Set up compiler search list. DUe to possible case insensitive filesystems, # Cygwin and Apple systems sometimes gets confused between cc and CC. # Try to use vendor compilers first, as they are often the fastest. case $host in *cygwin* | *mingw* ) cxx_list="" ;; *apple* ) cxx_list="xlC_r xlC icpc pathCC c++ g++ gpp" ;; * ) cxx_list="xlC_r xlC icpc pathCC pgCC cxx aCC CC cc++ FCC KCC RCC c++ g++ gpp" ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in $cxx_list 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $cxx_list 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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:$LINENO: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: C++ compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C++ compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$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 test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:$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 # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { $as_echo "$as_me:$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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; 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'. 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_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} 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_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test "$CC" = ""; then CC="$CXX"; 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 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$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:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$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:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$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:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$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:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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:$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:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$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:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$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:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$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:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$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 test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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:$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:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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:$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:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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" 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} 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:$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 CXX_PROG_NAME=`basename $CXX` case $host in powerpc*-*-*) case "$CXX_PROG_NAME" in xlC*) REQ_CXXFLAGS="$REQ_CXXFLAGS -qstrict" ;; esac ;; i?86-*-* | k?*-*-* | athlon-*-* | ia64-*-* | x86_64-*-*) case "$CXX_PROG_NAME" in icc|icpc|ecc) REQ_CXXFLAGS="$REQ_CXXFLAGS -mp" if test "$enable_warnings" = "yes"; then CXXFLAGS="$CXXFLAGS -wd1572 -wd981 -wd1418 -wd1419" fi ;; esac ;; alpha*-*-*) case "$CXX_PROG_NAME" in cxx) CXXFLAGS="$CXXFLAGS -std strict_ansi -tweak" ;; esac ;; esac CXXFLAGS="$CXXFLAGS $REQ_CXXFLAGS" if test "$enable_warnings" = "yes"; then if test "$GCC" = "yes"; then CXXFLAGS="$CXXFLAGS -Wall" fi fi if test "$enable_debug" = "yes"; then CXXFLAGS="$CXXFLAGS -g" fi # --enable-fma # Check whether --enable-enable_fma was given. if test "${enable_enable_fma+set}" = set; then enableval=$enable_enable_fma; fi if test "x$enable_fma" = "x"; then enable_fma="auto" fi case "$enable_fma" in yes) { $as_echo "$as_me:$LINENO: checking for fused multiply-add/subtract" >&5 $as_echo_n "checking for fused multiply-add/subtract... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_fma_list= if test "x$ax_cxx_fma_list" = "x"; then ax_cxx_fma_list="ibm gnu c99 compiler" fi ax_cxx_fma= ax_cxx_fms= for name in $ax_cxx_fma_list; do if test "x$ax_cxx_fma" = "x"; then case $name in ibm) # IBM VisualAge C++ __fmadd / __fmsub. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include #include int main() { double d = std::ldexp(1.0, -52); double x = __fmadd(1.0 + d, 1.0 - d, -1.0); double y = __fmsub(1.0 + d, 1.0 - d, 1.0); return (x == -d*d && y == -d*d) ? 0 : 1; } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__fmadd(x,y,z)" ax_cxx_fms="__fmsub(x,y,z)" cat >>confdefs.h <<\_ACEOF #define QD_VACPP_BUILTINS_H 1 _ACEOF 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; gnu) # Later gcc (3.4 and later) have __builtin_fma that seems to work. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (__builtin_fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__builtin_fma(x,y,z)" ax_cxx_fms="__builtin_fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; ia64) # Intel and HP compilers for IA 64 architecture seems to have # _Asm_fma/fms macros. Not much documentation is available for # these... if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (_Asm_fma(2, 1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="_Asm_fma(2, x,y,z)" ax_cxx_fms="_Asm_fms(2, x,y,z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; c99) # Try C99 fma() function. Some platforms doesn't seem to implement this # correctly (Apple gcc-3.3 for example). if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="fma(x,y,z)" ax_cxx_fms="fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; compiler) # Try relying on the compiler to optimize x * y + z into an fma. # This method is not recommended since if it is inlined it does not # always produce the same correct code. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return ( (1.0 + d) * (1.0 - d) - 1.0 == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="((x)*(y) + (z))" ax_cxx_fms="((x)*(y) - (z))" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; *) { { $as_echo "$as_me:$LINENO: error: Unknown option $name to --enable-fma." >&5 $as_echo "$as_me: error: Unknown option $name to --enable-fma." >&2;} { (exit 1); exit 1; }; } ;; esac fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$ax_cxx_fma" != "x"; then { $as_echo "$as_me:$LINENO: result: $ax_cxx_fma, $ax_cxx_fms" >&5 $as_echo "$ax_cxx_fma, $ax_cxx_fms" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi if test "x$ax_cxx_fma" = "x"; then { { $as_echo "$as_me:$LINENO: error: Cannot find working fused multiply add." >&5 $as_echo "$as_me: error: Cannot find working fused multiply add." >&2;} { (exit 1); exit 1; }; } fi ;; auto) case $host in powerpc*-*-*) { $as_echo "$as_me:$LINENO: checking for fused multiply-add/subtract" >&5 $as_echo_n "checking for fused multiply-add/subtract... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_fma_list="ibm gnu" if test "x$ax_cxx_fma_list" = "x"; then ax_cxx_fma_list="ibm gnu c99 compiler" fi ax_cxx_fma= ax_cxx_fms= for name in $ax_cxx_fma_list; do if test "x$ax_cxx_fma" = "x"; then case $name in ibm) # IBM VisualAge C++ __fmadd / __fmsub. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include #include int main() { double d = std::ldexp(1.0, -52); double x = __fmadd(1.0 + d, 1.0 - d, -1.0); double y = __fmsub(1.0 + d, 1.0 - d, 1.0); return (x == -d*d && y == -d*d) ? 0 : 1; } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__fmadd(x,y,z)" ax_cxx_fms="__fmsub(x,y,z)" cat >>confdefs.h <<\_ACEOF #define QD_VACPP_BUILTINS_H 1 _ACEOF 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; gnu) # Later gcc (3.4 and later) have __builtin_fma that seems to work. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (__builtin_fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__builtin_fma(x,y,z)" ax_cxx_fms="__builtin_fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; ia64) # Intel and HP compilers for IA 64 architecture seems to have # _Asm_fma/fms macros. Not much documentation is available for # these... if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (_Asm_fma(2, 1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="_Asm_fma(2, x,y,z)" ax_cxx_fms="_Asm_fms(2, x,y,z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; c99) # Try C99 fma() function. Some platforms doesn't seem to implement this # correctly (Apple gcc-3.3 for example). if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="fma(x,y,z)" ax_cxx_fms="fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; compiler) # Try relying on the compiler to optimize x * y + z into an fma. # This method is not recommended since if it is inlined it does not # always produce the same correct code. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return ( (1.0 + d) * (1.0 - d) - 1.0 == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="((x)*(y) + (z))" ax_cxx_fms="((x)*(y) - (z))" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; *) { { $as_echo "$as_me:$LINENO: error: Unknown option $name to --enable-fma." >&5 $as_echo "$as_me: error: Unknown option $name to --enable-fma." >&2;} { (exit 1); exit 1; }; } ;; esac fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$ax_cxx_fma" != "x"; then { $as_echo "$as_me:$LINENO: result: $ax_cxx_fma, $ax_cxx_fms" >&5 $as_echo "$ax_cxx_fma, $ax_cxx_fms" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi ;; ia64-*) { $as_echo "$as_me:$LINENO: checking for fused multiply-add/subtract" >&5 $as_echo_n "checking for fused multiply-add/subtract... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_fma_list="ia64 gnu" if test "x$ax_cxx_fma_list" = "x"; then ax_cxx_fma_list="ibm gnu c99 compiler" fi ax_cxx_fma= ax_cxx_fms= for name in $ax_cxx_fma_list; do if test "x$ax_cxx_fma" = "x"; then case $name in ibm) # IBM VisualAge C++ __fmadd / __fmsub. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include #include int main() { double d = std::ldexp(1.0, -52); double x = __fmadd(1.0 + d, 1.0 - d, -1.0); double y = __fmsub(1.0 + d, 1.0 - d, 1.0); return (x == -d*d && y == -d*d) ? 0 : 1; } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__fmadd(x,y,z)" ax_cxx_fms="__fmsub(x,y,z)" cat >>confdefs.h <<\_ACEOF #define QD_VACPP_BUILTINS_H 1 _ACEOF 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; gnu) # Later gcc (3.4 and later) have __builtin_fma that seems to work. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (__builtin_fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__builtin_fma(x,y,z)" ax_cxx_fms="__builtin_fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; ia64) # Intel and HP compilers for IA 64 architecture seems to have # _Asm_fma/fms macros. Not much documentation is available for # these... if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (_Asm_fma(2, 1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="_Asm_fma(2, x,y,z)" ax_cxx_fms="_Asm_fms(2, x,y,z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; c99) # Try C99 fma() function. Some platforms doesn't seem to implement this # correctly (Apple gcc-3.3 for example). if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="fma(x,y,z)" ax_cxx_fms="fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; compiler) # Try relying on the compiler to optimize x * y + z into an fma. # This method is not recommended since if it is inlined it does not # always produce the same correct code. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return ( (1.0 + d) * (1.0 - d) - 1.0 == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="((x)*(y) + (z))" ax_cxx_fms="((x)*(y) - (z))" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; *) { { $as_echo "$as_me:$LINENO: error: Unknown option $name to --enable-fma." >&5 $as_echo "$as_me: error: Unknown option $name to --enable-fma." >&2;} { (exit 1); exit 1; }; } ;; esac fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$ax_cxx_fma" != "x"; then { $as_echo "$as_me:$LINENO: result: $ax_cxx_fma, $ax_cxx_fms" >&5 $as_echo "$ax_cxx_fma, $ax_cxx_fms" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi ;; esac ;; no) ax_cxx_fma= ;; *) { $as_echo "$as_me:$LINENO: checking for fused multiply-add/subtract" >&5 $as_echo_n "checking for fused multiply-add/subtract... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_fma_list=$enable_fma if test "x$ax_cxx_fma_list" = "x"; then ax_cxx_fma_list="ibm gnu c99 compiler" fi ax_cxx_fma= ax_cxx_fms= for name in $ax_cxx_fma_list; do if test "x$ax_cxx_fma" = "x"; then case $name in ibm) # IBM VisualAge C++ __fmadd / __fmsub. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include #include int main() { double d = std::ldexp(1.0, -52); double x = __fmadd(1.0 + d, 1.0 - d, -1.0); double y = __fmsub(1.0 + d, 1.0 - d, 1.0); return (x == -d*d && y == -d*d) ? 0 : 1; } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__fmadd(x,y,z)" ax_cxx_fms="__fmsub(x,y,z)" cat >>confdefs.h <<\_ACEOF #define QD_VACPP_BUILTINS_H 1 _ACEOF 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; gnu) # Later gcc (3.4 and later) have __builtin_fma that seems to work. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (__builtin_fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="__builtin_fma(x,y,z)" ax_cxx_fms="__builtin_fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; ia64) # Intel and HP compilers for IA 64 architecture seems to have # _Asm_fma/fms macros. Not much documentation is available for # these... if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (_Asm_fma(2, 1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="_Asm_fma(2, x,y,z)" ax_cxx_fms="_Asm_fms(2, x,y,z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; c99) # Try C99 fma() function. Some platforms doesn't seem to implement this # correctly (Apple gcc-3.3 for example). if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return (fma(1.0 + d, 1.0 - d, -1.0) == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="fma(x,y,z)" ax_cxx_fms="fma(x,y,-z)" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; compiler) # Try relying on the compiler to optimize x * y + z into an fma. # This method is not recommended since if it is inlined it does not # always produce the same correct code. if test "$cross_compiling" = yes; then { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #include int main() { double d = std::ldexp(1.0, -52); return ( (1.0 + d) * (1.0 - d) - 1.0 == -d*d ? 0 : 1); } _ACEOF rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ax_cxx_fma="((x)*(y) + (z))" ax_cxx_fms="((x)*(y) - (z))" 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 fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ;; *) { { $as_echo "$as_me:$LINENO: error: Unknown option $name to --enable-fma." >&5 $as_echo "$as_me: error: Unknown option $name to --enable-fma." >&2;} { (exit 1); exit 1; }; } ;; esac fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$ax_cxx_fma" != "x"; then { $as_echo "$as_me:$LINENO: result: $ax_cxx_fma, $ax_cxx_fms" >&5 $as_echo "$ax_cxx_fma, $ax_cxx_fms" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } fi if test "x$ax_cxx_fma" = "x"; then { { $as_echo "$as_me:$LINENO: error: Cannot find working fused multiply add." >&5 $as_echo "$as_me: error: Cannot find working fused multiply add." >&2;} { (exit 1); exit 1; }; } fi ;; esac if test "x$ax_cxx_fma" = "x"; then ax_cxx_fma="none" ax_cxx_fms="none" else cat >>confdefs.h <<_ACEOF #define QD_FMA(x,y,z) $ax_cxx_fma _ACEOF cat >>confdefs.h <<_ACEOF #define QD_FMS(x,y,z) $ax_cxx_fms _ACEOF fi # Checks for libraries. # Checks for header files. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$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 test "${ac_cv_path_GREP+set}" = set; 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" { test -f "$ac_path_GREP" && $as_test_x "$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 ac_count=`expr $ac_count + 1` 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_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; 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" { test -f "$ac_path_EGREP" && $as_test_x "$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 ac_count=`expr $ac_count + 1` 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_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #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 rm -f 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : 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 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` = yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in ieeefp.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$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_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to yozo@cs.berkeley.edu ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if test `eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` = yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done CONFIGURE_ARGS=$ac_configure_args # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if test "${ac_cv_header_stdbool_h+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; bool e = &s; char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; # if defined __xlc__ || defined __GNUC__ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 reported by James Lemley on 2005-10-05; see http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html This test is not quite right, since xlc is allowed to reject this program, as the initializer for xlcbug is not one of the forms that C requires support for. However, doing the test right would require a runtime test, and that would make cross-compilation harder. Let us hope that IBM fixes the xlc bug, and also adds support for this kind of constant expression. In the meantime, this test will reject xlc, which is OK, since our stdbool.h substitute should suffice. We also test this with GCC, where it should work, to detect more quickly whether someone messes up the test in the future. */ char digs[] = "0123456789"; int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); # endif /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdbool_h=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } { $as_echo "$as_me:$LINENO: checking for _Bool" >&5 $as_echo_n "checking for _Bool... " >&6; } if test "${ac_cv_type__Bool+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_type__Bool=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof (_Bool)) return 0; ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof ((_Bool))) return 0; ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type__Bool=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5 $as_echo "$ac_cv_type__Bool" >&6; } if test $ac_cv_type__Bool = yes; then cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STDBOOL_H 1 _ACEOF fi { $as_echo "$as_me:$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 test "${ac_cv_header_time+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_time=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi { $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test "${ac_cv_struct_tm+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_struct_tm=time.h else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then cat >>confdefs.h <<\_ACEOF #define TM_IN_SYS_TIME 1 _ACEOF fi # Check for x86 FPU fix { $as_echo "$as_me:$LINENO: checking whether x86 FPU control code is needed" >&5 $as_echo_n "checking whether x86 FPU control code is needed... " >&6; } x86_fix="no" case "$host" in i?86-*-* | k?*-*-* | athlon-*-* | x86_64-*-*) cat >>confdefs.h <<\_ACEOF #define X86 1 _ACEOF x86_fix="yes" ;; esac { $as_echo "$as_me:$LINENO: result: $x86_fix" >&5 $as_echo "$x86_fix" >&6; } if test "$x86_fix" = "yes"; then for ac_header in fpu_control.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$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_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to yozo@cs.berkeley.edu ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if test `eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` = yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi # Checks for library functions. for ac_func in gettimeofday do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* 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 $ac_func (); /* 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_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` = yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:$LINENO: checking for clock_gettime useability" >&5 $as_echo_n "checking for clock_gettime useability... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >conftest.$ac_ext <<_ACEOF #include int main() { struct timespec tv; return clock_gettime(CLOCK_REALTIME, &tv); } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ax_cxx_clock_gettime="yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ax_cxx_clock_gettime="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: result: $ax_cxx_clock_gettime" >&5 $as_echo "$ax_cxx_clock_gettime" >&6; } if test "$ax_cxx_clock_gettime" = "yes"; then { $as_echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if test "${ac_cv_search_clock_gettime+set}" = set; then $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_search_clock_gettime=$ac_res else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_clock_gettime+set}" = set; then break fi done if test "${ac_cv_search_clock_gettime+set}" = set; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_CLOCK_GETTIME 1 _ACEOF fi fi { $as_echo "$as_me:$LINENO: checking for isnan" >&5 $as_echo_n "checking for isnan... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_isnan= cat >conftest.$ac_ext <<_ACEOF #include int main() { std::isnan(1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: std::isnan" >&5 $as_echo "std::isnan" >&6; } ax_cxx_isnan="std::isnan(x)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "x$ax_cxx_isnan" = "x"; then cat >conftest.$ac_ext <<_ACEOF #include int main() { ::isnan(1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: ::isnan" >&5 $as_echo "::isnan" >&6; } ax_cxx_isnan="::isnan(x)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } ax_cxx_isnan="((x) != (x))" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >>confdefs.h <<_ACEOF #define QD_ISNAN(x) $ax_cxx_isnan _ACEOF { $as_echo "$as_me:$LINENO: checking for isinf" >&5 $as_echo_n "checking for isinf... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_isinf= cat >conftest.$ac_ext <<_ACEOF #include int main() { std::isinf(1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: std::isinf" >&5 $as_echo "std::isinf" >&6; } ax_cxx_isinf="std::isinf(x)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "x$ax_cxx_isinf" = "x"; then cat >conftest.$ac_ext <<_ACEOF #include int main() { ::isinf(1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: ::isinf" >&5 $as_echo "::isinf" >&6; } ax_cxx_isinf="::isinf(x)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } ax_cxx_isinf="( (x) != 0.0 && (x) == 2.0 * (x) )" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >>confdefs.h <<_ACEOF #define QD_ISINF(x) $ax_cxx_isinf _ACEOF { $as_echo "$as_me:$LINENO: checking for isfinite" >&5 $as_echo_n "checking for isfinite... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_isfinite= cat >conftest.$ac_ext <<_ACEOF #include int main() { std::isfinite(1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: std::isfinite" >&5 $as_echo "std::isfinite" >&6; } ax_cxx_isfinite="std::isfinite(x)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "x$ax_cxx_isfinite" = "x"; then cat >conftest.$ac_ext <<_ACEOF #include int main() { ::isfinite(1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: ::isfinite" >&5 $as_echo "::isfinite" >&6; } ax_cxx_isfinite="::isfinite(x)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } ax_cxx_isfinite="( ((x) == 0.0) || ((x) != (2.0 * (x))) )" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >>confdefs.h <<_ACEOF #define QD_ISFINITE(x) $ax_cxx_isfinite _ACEOF { $as_echo "$as_me:$LINENO: checking for copysign" >&5 $as_echo_n "checking for copysign... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_copysign= cat >conftest.$ac_ext <<_ACEOF #include int main() { std::copysign(1.0, 1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: std::copysign" >&5 $as_echo "std::copysign" >&6; } ax_cxx_copysign="std::copysign(x, y)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "x$ax_cxx_copysign" = "x"; then cat >conftest.$ac_ext <<_ACEOF #include int main() { ::copysign(1.0, 1.0); return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: ::copysign" >&5 $as_echo "::copysign" >&6; } ax_cxx_copysign="::copysign(x, y)" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } ax_cxx_copysign="( ((y) != 0.0) ? ( ((y) > 0.0) ? (x) : -(x) ) : ( ((1.0 / y) > 0.0) ? (x) : -(x) ) )" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >>confdefs.h <<_ACEOF #define QD_COPYSIGN(x, y) $ax_cxx_copysign _ACEOF cat >>confdefs.h <<\_ACEOF #define QD_API /**/ _ACEOF # check for C++ std includes cat >>confdefs.h <<\_ACEOF #define QD_HAVE_STD 1 _ACEOF # Check for fortran-90 compiler if test "$FCFLAGS" = ""; then if test "$enable_debug" = "yes"; then FCFLAGS="-O" else FCFLAGS="-O2" fi fi # Check whether --enable-enable_fortran was given. if test "${enable_enable_fortran+set}" = set; then enableval=$enable_enable_fortran; fi if test "$enable_fortran" != "no"; then ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 ifort pathf95 f95 gfortran g95 pgf95 lf95 fort ifc efc pathf90 xlf90 pgf90 epcf90 xlf f90 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_FC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$FC"; then ac_cv_prog_FC="$FC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { $as_echo "$as_me:$LINENO: result: $FC" >&5 $as_echo "$FC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 ifort pathf95 f95 gfortran g95 pgf95 lf95 fort ifc efc pathf90 xlf90 pgf90 epcf90 xlf f90 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_FC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_FC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_FC" >&5 $as_echo "$ac_ct_FC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } if test "${ac_cv_fc_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5 $as_echo "$ac_cv_fc_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FCFLAGS+set} ac_save_FFLAGS=$FCFLAGS FCFLAGS= { $as_echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5 $as_echo_n "checking whether $FC accepts -g... " >&6; } if test "${ac_cv_prog_fc_g+set}" = set; then $as_echo_n "(cached) " >&6 else FCFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_fc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5 $as_echo "$ac_cv_prog_fc_g" >&6; } if test "$ac_test_FFLAGS" = set; then FCFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$FC" != ""; then enable_fortran="yes" cat >>confdefs.h <<\_ACEOF #define HAVE_FORTRAN 1 _ACEOF FC="$FC" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to get verbose linking output from $FC" >&5 $as_echo_n "checking how to get verbose linking output from $FC... " >&6; } if test "${ac_cv_prog_fc_v+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:$LINENO: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="` $as_echo "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { $as_echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $FC" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_fc_v" >&5 $as_echo "$ac_cv_prog_fc_v" >&6; } { $as_echo "$as_me:$LINENO: checking for Fortran libraries of $FC" >&5 $as_echo_n "checking for Fortran libraries of $FC... " >&6; } if test "${ac_cv_fc_libs+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift $as_echo "$as_me:$LINENO: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="` $as_echo "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -LANG:=* | -LIST:* | -LNO:*) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:$LINENO: result: $ac_cv_fc_libs" >&5 $as_echo "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:$LINENO: checking for Fortran flag needed to allow free-form source" >&5 $as_echo_n "checking for Fortran flag needed to allow free-form source... " >&6; } if test "${ac_cv_fc_freeform+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat >conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & 'world.' end _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_fc_freeform=$ac_flag; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save fi { $as_echo "$as_me:$LINENO: result: $ac_cv_fc_freeform" >&5 $as_echo "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then { { $as_echo "$as_me:$LINENO: error: Fortran does not accept free-form source" >&5 $as_echo "$as_me: error: Fortran does not accept free-form source" >&2;} { (exit 77); exit 77; }; } else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FC_PROG_NAME=`basename $FC` case $host in i?86-*-* | k?*-*-* | athlon-*-* | ia64-*-* | x86_64-*-*) case "$FC_PROG_NAME" in ifc|ifort|efc) REQ_FCFLAGS="$REQ_FCFLAGS -mp -Vaxlib" ;; esac ;; powerpc*-*-*) case "$FC_PROG_NAME" in xlf*) REQ_FCFLAGS="$REQ_FCFLAGS -qstrict" ;; esac ;; esac { $as_echo "$as_me:$LINENO: checking for etime" >&5 $as_echo_n "checking for etime... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ax_fc_etime= ax_fc_etime_names="etime etime_" for name in $ax_fc_etime_names; do cat >conftest.$ac_ext <<_ACEOF program main real*4 t(2), tot tot = $name(t) end _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ax_fc_etime=$name else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "x$ax_fc_etime" != "x"; then break; fi done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "x$ax_fc_etime" != "x"; then { $as_echo "$as_me:$LINENO: result: $ax_fc_etime" >&5 $as_echo "$ax_fc_etime" >&6; } else { $as_echo "$as_me:$LINENO: result: none" >&5 $as_echo "none" >&6; } { { $as_echo "$as_me:$LINENO: error: Cannot find etime." >&5 $as_echo "$as_me: error: Cannot find etime." >&2;} { (exit 1); exit 1; }; } fi ETIME=$ax_fc_etime { $as_echo "$as_me:$LINENO: checking whether extra library is needed to link Fortran and C++" >&5 $as_echo_n "checking whether extra library is needed to link Fortran and C++... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cxx_fc_lib= ax_cxx_fc_lib_names="none -lompstubs -lmtsk" for name in $ax_cxx_fc_lib_names; do if test "x$name" = xnone; then lib="" else lib=$name fi save_LIBS="$LIBS" LIBS="$LIBS $FCLIBS $lib" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ax_cxx_fc_lib=$name else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" if test "x$ax_cxx_fc_lib" != "x"; then break fi done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "x$ax_cxx_fc_lib" != x; then { $as_echo "$as_me:$LINENO: result: $ax_cxx_fc_lib" >&5 $as_echo "$ax_cxx_fc_lib" >&6; } if test "x$ax_cxx_fc_lib" = xnone; then ax_cxx_fc_lib= fi FCLIBS="$FCLIBS $ax_cxx_fc_lib" else { $as_echo "$as_me:$LINENO: result: unknown" >&5 $as_echo "unknown" >&6; } { { $as_echo "$as_me:$LINENO: error: Cannot link C++ and Fortran." >&5 $as_echo "$as_me: error: Cannot link C++ and Fortran." >&2;} { (exit 1); exit 1; }; } fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:$LINENO: checking for dummy main to link with Fortran libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; } if test "${ac_cv_fc_dummy_main+set}" = set; then $as_echo_n "(cached) " >&6 else ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN 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 # First, try linking without a dummy main: cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_fortran_dummy_main=none else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_fortran_dummy_main=unknown fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_fortran_dummy_main=$ac_func; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_fc_dummy_main" >&5 $as_echo "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown; then if test $FC_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define FC_DUMMY_MAIN $FC_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then cat >>confdefs.h <<\_ACEOF #define FC_DUMMY_MAIN_EQ_F77 1 _ACEOF fi fi else { { $as_echo "$as_me:$LINENO: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&5 $as_echo "$as_me: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:$LINENO: checking for Fortran name-mangling scheme" >&5 $as_echo_n "checking for Fortran name-mangling scheme... " >&6; } if test "${ac_cv_fc_mangling+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" 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_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return $ac_func (); ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_success=yes; break 2 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; 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 ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return $ac_func (); ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_success_extra=yes; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: cannot compile a simple Fortran program See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compile a simple Fortran program See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_fc_mangling" >&5 $as_echo "$ac_cv_fc_mangling" >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) name _ACEOF ;; "lower case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) name ## __ _ACEOF ;; "upper case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) NAME _ACEOF ;; "upper case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define FC_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define FC_FUNC_(name,NAME) NAME ## __ _ACEOF ;; *) { $as_echo "$as_me:$LINENO: WARNING: unknown Fortran name-mangling scheme" >&5 $as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:$LINENO: checking for alternate main to link with Fortran libraries" >&5 $as_echo_n "checking for alternate main to link with Fortran libraries... " >&6; } if test "${ac_cv_fc_main+set}" = set; then $as_echo_n "(cached) " >&6 else ac_fc_m_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN 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_cv_fortran_main="main" # default entry point name for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN_EQ_F77 # undef F77_DUMMY_MAIN # undef FC_DUMMY_MAIN #else # undef $ac_fortran_dm_var #endif #define main $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_fortran_main=$ac_func; break else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_main=$ac_cv_fortran_main rm -rf conftest* LIBS=$ac_fc_m_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_fc_main" >&5 $as_echo "$ac_cv_fc_main" >&6; } cat >>confdefs.h <<_ACEOF #define FC_MAIN $ac_cv_fc_main _ACEOF ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:$LINENO: checking fortran 90 modules inclusion flag" >&5 $as_echo_n "checking fortran 90 modules inclusion flag... " >&6; } if test "${ax_f90_modflag+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i cat >conftest.$ac_ext <<_ACEOF module conftest_module contains subroutine conftest_routine write(*,'(a)') 'gotcha!' end subroutine conftest_routine end module conftest_module _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cd .. ax_f90_modflag="not found" for ax_flag in "-I " "-M" "-p"; do if test "$ax_f90_modflag" = "not found" ; then ax_save_FCFLAGS="$FCFLAGS" FCFLAGS="$ax_save_FCFLAGS ${ax_flag}tmpdir_$i" cat >conftest.$ac_ext <<_ACEOF program conftest_program use conftest_module call conftest_routine end program conftest_program _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ax_f90_modflag="$ax_flag" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS="$ax_save_FCFLAGS" fi done rm -fr tmpdir_$i if test "$ax_modflag" = "not found" ; then { { $as_echo "$as_me:$LINENO: error: unable to find compiler flag for modules inclusion" >&5 $as_echo "$as_me: error: unable to find compiler flag for modules inclusion" >&2;} { (exit 1); exit 1; }; } fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ax_f90_modflag" >&5 $as_echo "$ax_f90_modflag" >&6; } { $as_echo "$as_me:$LINENO: checking fortran 90 modules naming style" >&5 $as_echo_n "checking fortran 90 modules naming style... " >&6; } if test "${ax_f90_module_style+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i cat >conftest.$ac_ext <<_ACEOF module conftest_module contains subroutine conftest_routine write(*,'(a)') 'gotcha!' end subroutine conftest_routine end module conftest_module _ACEOF 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:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ax_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` if test x$ax_f90_modext = x ; then ax_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` if test x$ax_f90_modext = x ; then ax_f90_modext=unknown else ax_f90_module_style="uppercase, $ax_f90_modext" fi else ax_f90_module_style="lowercase, $ax_f90_modext" fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ax_f90_module_style=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cd .. rm -fr tmpdir_$i ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ax_f90_module_style" >&5 $as_echo "$ax_f90_module_style" >&6; } module_case=`echo "$ax_f90_module_style" | sed 's/,.*$//'` module_ext=`echo "$ax_f90_module_style" | sed 's/^.*, //'` else enable_fortran="no" fi FCFLAGS="$FCFLAGS $REQ_FCFLAGS" if test "$enable_debug" = "yes"; then FCFLAGS="$FCFLAGS -g" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test "$module_case" = "uppercase"; then UPCASE_MODULE_TRUE= UPCASE_MODULE_FALSE='#' else UPCASE_MODULE_TRUE='#' UPCASE_MODULE_FALSE= fi if test "$enable_fortran" = "yes"; then HAVE_FORTRAN_TRUE= HAVE_FORTRAN_FALSE='#' else HAVE_FORTRAN_TRUE='#' HAVE_FORTRAN_FALSE= fi if test "$enable_debug" = "yes"; then QD_DEBUG_TRUE= QD_DEBUG_FALSE='#' else QD_DEBUG_TRUE='#' QD_DEBUG_FALSE= fi F77=$FC FFLAGS=$FCFLAGS # Add libraries LIBS="$LIBS -lm" # libtool stuff # AC_DISABLE_SHARED # AC_PROG_LIBTOOL 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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:$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:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:$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:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:$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:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Output ac_config_files="$ac_config_files Makefile config/Makefile src/Makefile include/Makefile tests/Makefile fortran/Makefile qd-config fortran/second.f" 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:$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= ;; #( *) $as_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 test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$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= 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. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${UPCASE_MODULE_TRUE}" && test -z "${UPCASE_MODULE_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"UPCASE_MODULE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"UPCASE_MODULE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_FORTRAN_TRUE}" && test -z "${HAVE_FORTRAN_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FORTRAN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"HAVE_FORTRAN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${QD_DEBUG_TRUE}" && test -z "${QD_DEBUG_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"QD_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"QD_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } 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:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_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 # PATH needs CR # 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_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 if (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 # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false 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. 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); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. 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 # Name of the executable. 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'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. 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 { (exit 1); exit 1; }; } # 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 } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi 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 -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' 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=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # 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 # 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 qd $as_me 2.3.7, which was generated by GNU Autoconf 2.62. 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 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="`echo $ac_config_files`" config_headers="`echo $ac_config_headers`" config_commands="`echo $ac_config_commands`" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet 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 ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ qd config.status 2.3.7 configured by $0, generated by GNU Autoconf 2.62, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 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=$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 ;; --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"` ;; esac CONFIG_FILES="$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 CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --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_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$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 # 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 "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "include/qd/qd_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/qd/qd_config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "config/Makefile") CONFIG_FILES="$CONFIG_FILES config/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "fortran/Makefile") CONFIG_FILES="$CONFIG_FILES fortran/Makefile" ;; "qd-config") CONFIG_FILES="$CONFIG_FILES qd-config" ;; "fortran/second.f") CONFIG_FILES="$CONFIG_FILES fortran/second.f" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # 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=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /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 {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } 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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } 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 >>"\$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 ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$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 < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// 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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } 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 ' >$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] if (D_is_set[macro]) { # Preserve the white space surrounding the "#". prefix = substr(line, 1, index(line, defundef) - 1) 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 "/*", line, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } 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_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 $as_echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[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="$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_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$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:$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 >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; 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" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { 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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } 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:$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 "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$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 "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } 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:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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 case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { 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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # 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 || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;} fi chmod +x qd-config echo echo "Using " echo " C++ Compiler = $CXX" echo " C++ Flags = $CXXFLAGS $DEFS" if test "$enable_fortran" = "yes"; then echo " F90 Compiler = $FC" echo " F90 Flags = $FCFLAGS $FCFLAGS_f90" echo " F90 Libs = $FCLIBS" fi echo " enable fortran = $enable_fortran" echo " enable inline = $enable_inline" echo " enable x86 fix = $x86_fix" echo " enable ieee add = $enable_ieee_add" echo " enable sloppy mul = $enable_sloppy_mul" echo " enable sloppy div = $enable_sloppy_div" echo " fma = $ax_cxx_fma" echo " fms = $ax_cxx_fms" qd-2.3.11/TODO0000644000175000017500000000060611202062041013130 0ustar prudhommprudhomm* update documentation * add integer format support * support complex types. * partial template specialization for complex divide. * support x86 double-extended format (see Hladky's work) * perhaps rewrite core code in C preprocessor, with C/C++ wrappers. * complete numeric_limits * sane handling of overflow / underflow / NaNs. * handle more general streams, e.g., wide character streams qd-2.3.11/configure.ac0000644000175000017500000002363311202062041014733 0ustar prudhommprudhomm# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. define([QD_PATCH_VERSION], 7) AC_PREREQ(2.60) AC_INIT(qd, 2.3.QD_PATCH_VERSION, yozo@cs.berkeley.edu) AC_CONFIG_SRCDIR([src/qd_real.cpp]) PACKAGE="qd" MAJOR_VERSION="2" MINOR_VERSION="3" PATCH_VERSION="QD_PATCH_VERSION" VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION AC_DEFINE_UNQUOTED([MAJOR_VERSION],$MAJOR_VERSION,[qd major version number]) AC_DEFINE_UNQUOTED([MINOR_VERSION],$MINOR_VERSION,[qd minor version number]) AC_DEFINE_UNQUOTED([PATCH_VERSION],$PATCH_VERSION,[qd patch number (sub minor version)]) echo "configuring $PACKAGE $VERSION..." AC_CONFIG_AUX_DIR(config) AM_INIT_AUTOMAKE([nostdinc]) AM_CONFIG_HEADER([config.h]) AM_CONFIG_HEADER([include/qd/qd_config.h]) AC_CANONICAL_HOST # Checks for arguments # --enable-inline AC_ARG_ENABLE(enable_inline, AC_HELP_STRING(--enable-inline, [inline commonly used functions. [[default=yes]]])) AC_MSG_CHECKING([if commonly used function is to be inlined]) if test "$enable_inline" != "no"; then enable_inline="yes" AC_DEFINE([QD_INLINE], [1], [Define to 1 to inline commonly used functions.]) fi AC_MSG_RESULT($enable_inline) # --enable-ieee-add AC_ARG_ENABLE(enable_ieee_add, AC_HELP_STRING(--enable-ieee-add, [use addition that satisfies IEEE-style error bound instead of Cray-style error bound. [[default=no]]])) AC_MSG_CHECKING([if addition with IEEE-style error bound is to be used]) if test "$enable_ieee_add" = "yes"; then AC_DEFINE([QD_IEEE_ADD], [1], [Define to 1 to use additions with IEEE-style error bounds.]) else enable_ieee_add="no" fi AC_MSG_RESULT($enable_ieee_add) # --enable-sloppy-mul AC_ARG_ENABLE(enable_sloppy_mul, AC_HELP_STRING(--enable-sloppy-mul, [use fast but slightly inaccurate multiplication. [[default=yes]]])) AC_MSG_CHECKING([if sloppy multiplication is to be used]) if test "$enable_sloppy_mul" != "no"; then enable_sloppy_mul="yes" AC_DEFINE([QD_SLOPPY_MUL], [1], [Define to 1 to use sloppy multiplication (which is faster by slightly inaccurate).]) fi AC_MSG_RESULT($enable_sloppy_mul) # --enable-sloppy-div AC_ARG_ENABLE(enable_sloppy_div, AC_HELP_STRING(--enable-sloppy-div, [use fast but slightly inaccurate division. [[default=yes]]])) AC_MSG_CHECKING([if sloppy division is to be used]) if test "$enable_sloppy_div" != "no"; then enable_sloppy_div="yes" AC_DEFINE([QD_SLOPPY_DIV], [1], [Define to 1 to use sloppy division (which is faster by slightly inaccurate).]) fi AC_MSG_RESULT($enable_sloppy_div) # --enable-debug AC_ARG_ENABLE(enable_debug, AC_HELP_STRING(--enable-debug, [enable debugging code. [[default=no]]])) AC_MSG_CHECKING([if debugging code is to be enabled]) if test "$enable_debug" = "yes"; then AC_DEFINE([QD_DEBUG], [1], [Define to 1 to enable debugging code.]) else enable_debug="no" fi AC_MSG_RESULT($enable_debug) # --enable-warnings AC_ARG_ENABLE(enable_warnings, AC_HELP_STRING(--enable-warnings, [enable compiler warnings. [[default=no]]])) AC_MSG_CHECKING([if compiler warnings is to be enabled]) if test "$enable_warnings" != "yes"; then enable_warnings="no" fi AC_MSG_RESULT($enable_warnings) # Checks for programs. AC_LANG(C++) if test "$CXXFLAGS" = ""; then if test "$enable_debug" = "yes"; then CXXFLAGS="-O" else CXXFLAGS="-O2" fi fi # Set up compiler search list. DUe to possible case insensitive filesystems, # Cygwin and Apple systems sometimes gets confused between cc and CC. # Try to use vendor compilers first, as they are often the fastest. case $host in *cygwin* | *mingw* ) cxx_list="" ;; *apple* ) cxx_list="xlC_r xlC icpc pathCC c++ g++ gpp" ;; * ) cxx_list="xlC_r xlC icpc pathCC pgCC cxx aCC CC cc++ FCC KCC RCC c++ g++ gpp" ;; esac AC_PROG_CXX($cxx_list) if test "$CC" = ""; then CC="$CXX"; fi AC_PROG_CC CXX_PROG_NAME=`basename $CXX` case $host in powerpc*-*-*) case "$CXX_PROG_NAME" in xlC*) REQ_CXXFLAGS="$REQ_CXXFLAGS -qstrict" ;; esac ;; i?86-*-* | k?*-*-* | athlon-*-* | ia64-*-* | x86_64-*-*) case "$CXX_PROG_NAME" in icc|icpc|ecc) REQ_CXXFLAGS="$REQ_CXXFLAGS -mp" if test "$enable_warnings" = "yes"; then CXXFLAGS="$CXXFLAGS -wd1572 -wd981 -wd1418 -wd1419" fi ;; esac ;; alpha*-*-*) case "$CXX_PROG_NAME" in cxx) CXXFLAGS="$CXXFLAGS -std strict_ansi -tweak" ;; esac ;; esac AC_SUBST(REQ_CXXFLAGS) CXXFLAGS="$CXXFLAGS $REQ_CXXFLAGS" if test "$enable_warnings" = "yes"; then if test "$GCC" = "yes"; then CXXFLAGS="$CXXFLAGS -Wall" fi fi if test "$enable_debug" = "yes"; then CXXFLAGS="$CXXFLAGS -g" fi # --enable-fma AC_ARG_ENABLE(enable_fma, AC_HELP_STRING(--enable-fma, [use fused multiply-add/subtract (auto,gnu,ia64,c99,ibm,compiler). Use this option with care. [[default=auto]]])) if test "x$enable_fma" = "x"; then enable_fma="auto" fi case "$enable_fma" in yes) AX_CXX_FMA if test "x$ax_cxx_fma" = "x"; then AC_MSG_ERROR([Cannot find working fused multiply add.]) fi ;; auto) case $host in powerpc*-*-*) AX_CXX_FMA(["ibm gnu"]) ;; ia64-*) AX_CXX_FMA(["ia64 gnu"]) ;; esac ;; no) ax_cxx_fma= ;; *) AX_CXX_FMA([$enable_fma]) if test "x$ax_cxx_fma" = "x"; then AC_MSG_ERROR([Cannot find working fused multiply add.]) fi ;; esac if test "x$ax_cxx_fma" = "x"; then ax_cxx_fma="none" ax_cxx_fms="none" else AC_DEFINE_UNQUOTED([QD_FMA(x,y,z)], [$ax_cxx_fma], [If fused multiply-add is available, define correct macro for using it.]) AC_DEFINE_UNQUOTED([QD_FMS(x,y,z)], [$ax_cxx_fms], [If fused multiply-subtract is available, define correct macro for using it.]) fi # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([ieeefp.h]) CONFIGURE_ARGS=$ac_configure_args AC_SUBST(CONFIGURE_ARGS) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_HEADER_TIME AC_STRUCT_TM # Check for x86 FPU fix AC_MSG_CHECKING([whether x86 FPU control code is needed]) x86_fix="no" case "$host" in i?86-*-* | k?*-*-* | athlon-*-* | x86_64-*-*) AC_DEFINE([X86], [1], [Whether to use x86 fpu fix.]) x86_fix="yes" ;; esac AC_MSG_RESULT($x86_fix) if test "$x86_fix" = "yes"; then AC_CHECK_HEADERS([fpu_control.h]) fi # Checks for library functions. AC_CHECK_FUNCS([gettimeofday]) AX_CXX_CLOCK_GETTIME if test "$ax_cxx_clock_gettime" = "yes"; then AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define to 1 if your system has the clock_gettime function.])]) fi AX_CXX_ISNAN AC_DEFINE_UNQUOTED([QD_ISNAN(x)], [$ax_cxx_isnan], [Define this macro to be the isnan(x) function.]) AX_CXX_ISINF AC_DEFINE_UNQUOTED([QD_ISINF(x)], [$ax_cxx_isinf], [Define this macro to be the isinf(x) function.]) AX_CXX_ISFINITE AC_DEFINE_UNQUOTED([QD_ISFINITE(x)], [$ax_cxx_isfinite], [Define this macro to be the isfinite(x) function.]) AX_CXX_COPYSIGN AC_DEFINE_UNQUOTED([QD_COPYSIGN(x, y)], [$ax_cxx_copysign], [Define this macro to be the copysign(x, y) function.]) AC_DEFINE([QD_API], [], [Any special symbols needed for exporting APIs.]) # check for C++ std includes AC_DEFINE([QD_HAVE_STD], [1], [Define to 1 if your compiler have the C++ standard include files.]) # Check for fortran-90 compiler if test "$FCFLAGS" = ""; then if test "$enable_debug" = "yes"; then FCFLAGS="-O" else FCFLAGS="-O2" fi fi AC_ARG_ENABLE(enable_fortran, AC_HELP_STRING(--enable-fortran, [build Fortran 77/90 interfaces [[default=auto]]])) if test "$enable_fortran" != "no"; then AC_LANG_PUSH(Fortran) AC_PROG_FC([xlf95 ifort pathf95 f95 gfortran g95 pgf95 lf95 fort ifc efc pathf90 xlf90 pgf90 epcf90 xlf f90]) if test "$FC" != ""; then enable_fortran="yes" AC_DEFINE([HAVE_FORTRAN], [1], [Define to 1 if Fortran interface is to be compiled.]) AC_SUBST(FC, "$FC") AC_FC_LIBRARY_LDFLAGS AC_FC_FREEFORM FC_PROG_NAME=`basename $FC` case $host in i?86-*-* | k?*-*-* | athlon-*-* | ia64-*-* | x86_64-*-*) case "$FC_PROG_NAME" in ifc|ifort|efc) REQ_FCFLAGS="$REQ_FCFLAGS -mp -Vaxlib" ;; esac ;; powerpc*-*-*) case "$FC_PROG_NAME" in xlf*) REQ_FCFLAGS="$REQ_FCFLAGS -qstrict" ;; esac ;; esac AX_FC_ETIME AC_SUBST(ETIME, $ax_fc_etime) AX_CXX_FC_LIB AC_FC_WRAPPERS AC_FC_MAIN AX_F90_MODULE_FLAG AC_SUBST(ax_f90_modflag) AX_F90_MODULE_STYLE module_case=`echo "$ax_f90_module_style" | sed 's/,.*$//'` module_ext=`echo "$ax_f90_module_style" | sed 's/^.*, //'` AC_SUBST(module_ext) else enable_fortran="no" fi AC_SUBST(REQ_FCFLAGS) FCFLAGS="$FCFLAGS $REQ_FCFLAGS" if test "$enable_debug" = "yes"; then FCFLAGS="$FCFLAGS -g" fi AC_LANG_POP(Fortran) fi AM_CONDITIONAL(UPCASE_MODULE, [test "$module_case" = "uppercase"]) AM_CONDITIONAL(HAVE_FORTRAN, [test "$enable_fortran" = "yes"]) AM_CONDITIONAL(QD_DEBUG, [test "$enable_debug" = "yes"]) AC_SUBST(F77, $FC) AC_SUBST(FFLAGS, $FCFLAGS) # Add libraries LIBS="$LIBS -lm" # libtool stuff # AC_DISABLE_SHARED # AC_PROG_LIBTOOL AC_PROG_RANLIB # Output AC_CONFIG_FILES([Makefile config/Makefile src/Makefile include/Makefile tests/Makefile fortran/Makefile qd-config fortran/second.f]) AC_OUTPUT chmod +x qd-config echo echo "Using " echo " C++ Compiler = $CXX" echo " C++ Flags = $CXXFLAGS $DEFS" if test "$enable_fortran" = "yes"; then echo " F90 Compiler = $FC" echo " F90 Flags = $FCFLAGS $FCFLAGS_f90" echo " F90 Libs = $FCLIBS" fi echo " enable fortran = $enable_fortran" echo " enable inline = $enable_inline" echo " enable x86 fix = $x86_fix" echo " enable ieee add = $enable_ieee_add" echo " enable sloppy mul = $enable_sloppy_mul" echo " enable sloppy div = $enable_sloppy_div" echo " fma = $ax_cxx_fma" echo " fms = $ax_cxx_fms" qd-2.3.11/Makefile.am0000644000175000017500000000254411202062041014477 0ustar prudhommprudhommACLOCAL_AMFLAGS = -I m4 SUBDIRS = config src include tests fortran docdir=${datadir}/doc/${PACKAGE} BUILT_SOURCES = docs/qd.pdf dist_doc_DATA = README docs/qd.pdf dist_noinst_DATA = docs/Makefile \ docs/qd.tex docs/qd.bib \ docs/nine-two-sum.eps docs/nine-two-sum.fig \ docs/normal_sum_prod.eps docs/normal_sum_prod.fig \ docs/qd_add.eps docs/qd_add.fig \ docs/qd_add_proof.eps docs/qd_add_proof.fig \ docs/qd_add_qd_d.eps docs/qd_add_qd_d.fig \ docs/qd_mul_accum.eps docs/qd_mul_accum.fig \ docs/qd_mul_qd_d.eps docs/qd_mul_qd_d.fig \ docs/quick-two-sum.eps docs/quick-two-sum.fig \ docs/six-three-sum.eps docs/six-three-sum.fig \ docs/three-sum-2.eps docs/three-sum-2.fig \ docs/three-sum-3.eps docs/three-sum-3.fig \ docs/three-sum.eps docs/three-sum.fig \ docs/two-prod.eps docs/two-prod.fig \ docs/two-sum.eps docs/two-sum.fig doc: docs/qd.pdf docs/qd.pdf: cd docs && $(MAKE) qd.pdf changelog: git log >ChangeLog dist-hook: rm -f ${distdir}/ChangeLog && git log >${distdir}/ChangeLog cpp-demo: cd tests && make demo if HAVE_FORTRAN fortran-demo: cd fortran && make demo demo: cpp-demo fortran-demo else fortran-demo: @echo "You need a Fortran 95 compiler to build fortran demo programs." && false demo: cpp-demo endif time: cd tests && make time bin_SCRIPTS=qd-config .PHONY: changelog cpp-demo fortran-demo demo time doc qd-2.3.11/ChangeLog0000644000175000017500000057413111202062041014223 0ustar prudhommprudhommcommit e917e3183008443b60b3c883e4f160bc7eb5e9ae Author: Yozo Hida Date: Mon Jul 21 17:18:27 2008 -0700 Update NEWS for 2.3.7 release. commit 15797144220aa874e9f9c35f54a2e268447ec006 Author: François-R Boyer Date: Tue Apr 1 13:28:46 2008 -0700 Fixed to_digits function where digits > 10 were not fixed. commit bfe6685c0318c333a88284b07b3feedc891f3e13 Author: Yozo Hida Date: Sun Mar 16 09:54:59 2008 -0700 Prepare NEWS for 2.3.6 release. commit 697177c023f32cd8fe5eb5662ead1d8cbdd89106 Author: Yozo Hida Date: Sat Mar 15 15:22:38 2008 -0700 Added fmod function. commit f0b5253516d4ce875d2aebc460ff9b609e835edc Author: Yozo Hida Date: Sat Mar 15 15:07:41 2008 -0700 Added fortran mod interface. commit cc309f05792d2d53ad17e436601caad76ec9db4f Author: Yozo Hida Date: Mon Mar 3 08:23:12 2008 +0900 Fix example in qd.tex to actually work with the current version. The header file qd.h had been renamed to qd_real.h. Automatic conversion from quad-double to double-double is not done. commit 49437387deb3521ad60fcf45025a8976678c8163 Author: Yozo Hida Date: Thu Feb 14 12:15:12 2008 -0800 Update NEWS. commit 591d750e6bd96dae1795a4142c3a7dc81c13290f Author: Yozo Hida Date: Tue Feb 5 00:02:46 2008 -0800 Removed blurb in README about not supporting integer in fortran. commit 7ee1692c66181f47ac57fc53b538978f95da0326 Author: Yozo Hida Date: Tue Feb 5 10:24:13 2008 -0800 Updated NEWS for v2.3.5. commit f5f93a24031527917872617374a815ad6fab3c69 Author: Yozo Hida Date: Mon Feb 4 23:50:11 2008 -0800 Fix division between qd_real and dd_real. We needed to compute the product between approximate quotient (double) and divisor (dd_real) in qd_real precision. Future optimization may be possible here by only computing this product to td_real (triple-double precision). commit 9f3b39c6a0e60535435aaec1eeb6dbefec681166 Author: Yozo Hida Date: Tue Feb 5 10:15:38 2008 -0800 Include for strncpy and strcmp. commit e17dbffdaa488749291b22953c2d80f2638184a2 Author: Yozo Hida Date: Fri Feb 1 18:36:18 2008 -0800 Pass 38 as maxlen to f_dd_swrite in ddoutc (ddmod.f). Since we only have 40 characters, and 2 is already taken at the front. Hence there is only 38 characters left to fill. This was causing segfault in fortran/dd_timer. commit ccd3c085a427a3e58ddd4c1b657a78a03d16846d Author: Yozo Hida Date: Thu Jan 31 14:52:35 2008 -0800 Distribute tests/coeff.dat. This was omitted from distribution; it is now fixed by adding coeff.dat to dist_noinst_DATA in tests/Makefile.am. commit a49c5bf6b3b80e070df640765c80b3b21d1b75d8 Author: Yozo Hida Date: Thu Jan 17 13:33:22 2008 -0800 Need to attach EXEEXT to executable names in fortran/Makefile.am. This was causing problems during "make demo" in Cygwin environment. commit db274af48c9a3eaa1903f0d16dfae8659f17e667 Author: Yozo Hida Date: Sun Jan 13 00:21:04 2008 -0800 Update NEWS for 2.3.3 release. commit 78bb8150f816bd6d60c543591212c2a735d94258 Author: Yozo Hida Date: Sun Jan 13 00:13:47 2008 -0800 Fixed bug in atan2 where wrong Newton iteration were being chosen. We consider two forms of Newton iteration for atan2; we decide which one to use based on the magnitude of x and y. We were not taking the absolute value to figure out their relative magnitude. Bug reported by Lung Sheng Chien. commit 6532db5e2cfa3457d69d72492a85bcbd2b9aa0d6 Author: Yozo Hida Date: Mon Jan 7 16:06:58 2008 -0800 Update NEWS for 2.3.2 release. commit 9e2e910e9c776cb5d99f851ed950c80180a5a113 Author: Yozo Hida Date: Sat Jan 5 15:51:48 2008 -0800 Perform the initial trigonometric argument reduction in full precision. This allows argument up to about 2^106 for dd_real and 2^212 for qd_real. In the future this will be replaced with more accurate version with full range. commit e64ce24b0cfed71f2584b620a01d617e8892c746 Author: Yozo Hida Date: Fri Nov 16 17:34:41 2007 -0800 Added support for _Asm_fma/fms macros in Intel IA64 compiler. This gives access to fast fused multiply add and subtract, but is not documented very well. commit 1374b59000be3a205983920f1be0e425b93465ad Author: Yozo Hida Date: Thu Dec 6 17:40:53 2007 -0800 Emphasize compiler selection in INSTALL file. commit 6a801455007dd761fde7c8aab6bf99fcf10c7600 Author: Yozo Hida Date: Thu Dec 6 17:26:01 2007 -0800 Added a C test case. commit 317c5385bffa0ad3964fe1f78f61545cc50080ea Author: Yozo Hida Date: Thu Dec 6 17:21:36 2007 -0800 Include qd/fpu.h from c_dd.h. This alleviate the user to include qd/fpu.h directly. commit d11d86f8a86ca8427cd42364056dc0b0f8cd90b5 Author: Yozo Hida Date: Thu Dec 6 17:01:35 2007 -0800 Output _ndigits digits for c_dd_write and c_qd_write. Previously it relied on the default numbers of digits of std::cout, which is set to 6 by default. commit 8fec8450de5d74365e6019a54f6d76578a48c07a Author: Yozo Hida Date: Thu Dec 6 13:19:28 2007 -0800 Install qdext.mod during make install. $(QDEXT) was missing from pkglib_DATA in fortran/Makefile.am. Bug reported and fixed by Charles M. Coldwell. commit 3d2517598ba5721e0569ef43ea30dea92adbef35 Author: Yozo Hida Date: Sat Nov 24 19:26:38 2007 -0800 Update NEWS for 2.3.1. commit 0e1f76ece97e82465bf7e153c351f8e6c36717ea Author: Yozo Hida Date: Sat Nov 24 19:24:19 2007 -0800 strncpy is in std namespace. commit bcf48bb133a06a2f356520f0112c535e1cd7bdf5 Author: Yozo Hida Date: Sat Nov 24 16:40:10 2007 -0800 Fix bug in qd_real cos_taylor function. The index into inverse factorial table should start at 1 (instead of 0) for cosine. This was causing error after third term in the Taylor series of the cosine function. This bug does not affect the dd_real version. commit a51ac61a6c4d3cc45178014e1064cd9b70c0ade3 Author: Yozo Hida Date: Fri Nov 16 17:40:40 2007 -0800 Removed extra spaces around = sign in configure.ac. commit ee93cbc83bb55b4b5a77dd49f6ec032ce899c086 Author: Yozo Hida Date: Sat Nov 24 13:55:37 2007 -0800 Fix bug in qd_real sincos routine. Wrong results were being returned for angles near multiples of pi/2. The problem was that we forgot to permute sin/cos and the signs based on j when the reduction by pi/1024 gave k = 0. This bug was giving bogus values for tan (and others). The dd_real version is not affected. commit d72c0ed97fde44cfbe03c0867509e6a358aedcee Author: Yozo Hida Date: Mon Oct 15 13:46:09 2007 -0700 Update NEWS a bit. commit fb3b36b02fc7689fb26fb0b15f2fd740a0847ade Author: Yozo Hida Date: Mon Oct 15 12:13:48 2007 -0700 Added pgCC to the list of C++ compilers. commit b245c608bce8abf8f94395406951f4c0a945c597 Author: Yozo Hida Date: Sun Oct 14 23:41:12 2007 -0700 Include for std::max in tests/qd_test.cpp. commit 044f4bbb40a65fb3597aa1ccb400b8094f645384 Author: Yozo Hida Date: Sat Oct 6 14:14:31 2007 -0700 Update config.guess and config.sub from latest one. commit 563d6a96802b7313a1cb0318cc4810dde3d2b8db Author: Yozo Hida Date: Sat Oct 6 14:05:31 2007 -0700 Use g++ and gfortran by default during make-dist.sh. commit f9f367d2b2d8795d88e232ef9875c6a415f43792 Author: Yozo Hida Date: Sat Oct 6 14:00:38 2007 -0700 Update config scripts to that from automake-1.10. commit 275c366748b43cb3f5cf544c773a3f83ba463858 Author: Yozo Hida Date: Sun Oct 14 23:06:13 2007 -0700 Use type specific intrisics for abs and aint. For some reason pgf95 compiler does not like abs and aint declared as intrinsics; instead use dabs, iabs, and dint. commit 6241ab69067e48936473327bdc1b38b60326ff22 Author: Yozo Hida Date: Sun Oct 14 23:01:35 2007 -0700 Use volatile short for control word declaration in fpu.cpp. PGI C++ complains about it. commit cea4ab591687268953967023df6b0874fb0de507 Merge: 7a519cb... a49ed19... Author: Yozo Hida Date: Sat Sep 1 22:30:02 2007 -0700 Merge branch 'master' into dev Conflicts: NEWS commit a49ed19960e72503b810d58b2eef327c8d7b5879 Author: Yozo Hida Date: Thu May 31 01:24:00 2007 -0700 Update NEWS for 2.2.6 release. commit 7a519cb4763b5b42e3e692da3f366ca1e7e49fea Author: Yozo Hida Date: Wed May 30 18:38:45 2007 -0700 Added work around for gcc-4.1.x miscompilation on x86_64. For some reason gcc-4.1.x on x86_64 linux miscompiles the expression "p *= exp(t)" in a loop. Instead use "p = p * exp(t)". commit b4070e41d0e76443f68d192586f5af757695cf5f Author: Philippe GHESQUIERE Date: Wed May 30 17:43:54 2007 -0700 Fix bug in qd_real * dd_real code. Final result is in [p0..p3], not [q0..q3]. commit 02bfeb22cd9351400318364810cd8944a857db22 Author: Philippe GHESQUIERE Date: Wed May 30 17:43:54 2007 -0700 Fix bug in qd_real * dd_real code. Final result is in [p0..p3], not [q0..q3]. commit ca454d4fcefbe457925850a6517aad5c6c13d817 Author: Yozo Hida Date: Fri May 25 18:01:00 2007 -0700 Added --fmainlib to the qd-config usage output. commit 03bcb44885262892069ab64f6316dc7a0d83abe6 Author: Yozo Hida Date: Fri May 18 21:35:11 2007 -0700 Added rule to make docs/qd.pdf in toplevel Makefile. commit fd8aa35e157e205363c5b8e9956c9d6a912dd20d Author: Yozo Hida Date: Fri Apr 27 16:37:30 2007 -0700 Use mul_pwr2 when multiplying by 0.5 in qd_real sqrt. This minor changes results in 8-9% increase on P4. commit 400219c4bc279d6165c2080c3c321511f0b189ee Author: Yozo Hida Date: Thu Apr 26 16:41:57 2007 -0700 Autoheader needs to run before automake in config/autogen.sh. commit 246c90f01e26dedab1a1dbe1f66aaa2babb1de17 Author: didier deshommes Date: Fri Apr 27 01:52:08 2007 -0700 Add better infinity support for qd_real. Didier's patch modified to - QD_ISINF is used instead of isinf. - No need to include in qd_real.cpp. - Infinity is printed with sign if appropriate, - Inf/nan is printed correctly with field widths (inf/nan case need to fall through to near the end of to_string routine). commit 9a869f3c442b2d7d5b58aee38eca392a59c5ad09 Author: Yozo Hida Date: Thu Apr 26 16:41:57 2007 -0700 Autoheader needs to run before automake in config/autogen.sh. commit 0266d2a806cf9f057cf479fe4a19862b64d3f6fd Author: Yozo Hida Date: Thu Apr 26 13:12:15 2007 -0700 Updated NEWS for (future) 2.3.0 release. commit 1c95e3b65c45077fc7621f09931b2a6387b6aefb Author: Yozo Hida Date: Wed Apr 25 02:01:18 2007 -0700 Optimize qd_real sin / cos functions. commit 87c0283ecbdc5809a78350ae2b7e33b92bbadcc7 Author: Yozo Hida Date: Wed Apr 25 01:33:53 2007 -0700 Use std::floor instead of just floor in approximate argument reduction in exp function. commit d00200e595337635e224d548e8ecba1fbb1a2a2a Author: Yozo Hida Date: Wed Apr 25 01:32:32 2007 -0700 Optimize dd_real sin / cos even more by using approximate argument reduction. When reducing by 2*pi, pi/2, and pi/16, we can compute the quotient in double-precision accuracy, since the convergence of the Taylor series is not significantly affected by slightly larger argument. commit b68dec5a47c628c2a331749df5a42bb732198b67 Author: Yozo Hida Date: Wed Apr 25 01:14:32 2007 -0700 Clean up dd_real sin / cos. commit 184d1298bd67299f39f80fe9f0a2394e17681594 Author: Yozo Hida Date: Wed Apr 25 01:06:17 2007 -0700 Expand the domain of sin / cos timing tests. Now the timing tests of sin / cos includes domain outside of range [-pi, pi]. commit 592092cfe4c92e3fd718003b9af87bae9f2cc4a3 Author: Yozo Hida Date: Wed Apr 25 01:03:45 2007 -0700 Add timing test for cos function. commit ca3e9f5ce05cd6043199b3d381a62f4807952bb6 Author: Yozo Hida Date: Wed Apr 25 00:50:25 2007 -0700 Fix unused variable warning in dd_real.cpp. commit 94e15b245fdb571cf87155fa8d96e9abbd71eabb Author: Yozo Hida Date: Wed Apr 25 00:01:49 2007 -0700 Removed constants used internally for trig functions from public interface. Instead declare them as local static variables in dd_real.cpp and qd_real.cpp. Also removed _pi8, _pi16, and _pi1024 from public interface. commit b1ff7c35977c04009f930e8a9506e9481dc04908 Author: Yozo Hida Date: Tue Apr 24 19:17:49 2007 -0700 Speed up Taylor series for sin / cos routines. Use a precomputed table of 1/n!. commit 9b79ed48e85045283aaf6f9b936a67853e5c3dd3 Author: Yozo Hida Date: Tue Apr 24 18:17:09 2007 -0700 Use static_cast when using ldexp with double as second argument. commit c70d199102fff0818e627aa411ef8a8f2ac47efd Author: Yozo Hida Date: Sun Apr 22 01:54:00 2007 -0700 Added sanity check to sin/cos. commit cd8aba7df649142edc4ffa95fbb71731e3074a79 Author: Yozo Hida Date: Sun Apr 22 01:30:44 2007 -0700 Make exp use a precomputed table of inverse factorials. This makes it 10-30% faster. commit b43d047f25109c18620c35748024798907541e85 Author: Yozo Hida Date: Sat Apr 21 03:58:51 2007 -0700 Make exp function more accurate and efficient. Adjust k values for maximum performance. Integer m only needs to be determined approximately, so just use double precision arithmetic. Use mul_pwr2 and ldexp where appropriate. Don't add 1 to the result until the end to preserve accuracy during repeated squaring. These changes result in accuracy increase by an order of magnitude, and about 20-30% increase in performance on Core 2 Duo. Update qd_test for more stringent accuracy test. In the future this should be replaced with minimax polynomial approximation or maybe Pade approximants. commit c97137767f26478a1c6c11e0d3661a6a1c4c70b1 Author: Yozo Hida Date: Sat Apr 21 01:02:36 2007 -0700 Added sanity check for exp() function. commit ac265ed9a15e2cdbb35eb98a2f9d609cc16d42df Author: Yozo Hida Date: Sat Apr 21 00:29:55 2007 -0700 Added timing tests for exp() function. commit 89b8fa66c5c9e4e6d06c48410e55a5ca7b6616b3 Author: Yozo Hida Date: Fri Apr 20 23:58:46 2007 -0700 Renamed generic interface read and write to read_scalar and write_scalar. This avoids confusion with builtin read / write statements, and gets around a gfortran-4.1.x parser bug (seemed to be fixed in gfortran-4.2). Perhaps in the future I may come up with a better name... commit 7d904cedd2d24d1766a21ba3f70d19397a5567aa Author: Yozo Hida Date: Sat Apr 14 12:55:15 2007 -0700 Added read and write interface to Fortran 95. Apparently we can provide a generic interface "read" and "write" and not conflict with read and write statement. I'm not quite sure if this is a good idea, but does provide with a generic name to call I/O functions: read can be called to read dd_real, dd_complex, qd_real, and qd_complex. commit 67cbadf96262e8d9a34d9d44a6f212721037f6c1 Author: Yozo Hida Date: Sat Apr 14 11:55:58 2007 -0700 Added assignment of integer to complex types. commit c55bc793c131716ce6d15698bec5602a40c9aff9 Author: Yozo Hida Date: Sat Apr 14 11:40:32 2007 -0700 Added {dd,qd}_complex * integer support in Fortran interface. commit 5a9031921cbda8edd9e44216bfee834fc80b9d68 Author: Yozo Hida Date: Sat Apr 14 00:39:20 2007 -0700 Make ddcomplex accept pair of ddreals. Same changes for qdcomplex. commit d18b458aa91cb2094c6863a3aefc714d3a523432 Author: Yozo Hida Date: Sat Apr 14 00:07:28 2007 -0700 real(dd_complex) should return dd_real. Same for qd_real type. commit 99d74b6ab0c03f20bbf0b1e793add32405b289bc Author: Yozo Hida Date: Fri Apr 13 22:56:23 2007 -0700 Added aimag to fortran interface. This returns the imaginary part of a complex double-double or quad-double. commit 371d3ccc7c6f472bd3d5194432065ca1c0c01a11 Author: Yozo Hida Date: Wed Apr 11 01:24:34 2007 -0700 Added E. Jason Riedy as a contributor. commit fec2c8dbdffbb40f13ce7a8a8b5150674f1c362a Author: Yozo Hida Date: Sun Apr 8 23:36:43 2007 -0700 Added note on compiler optimization in INSTALL file. commit 3f7bd6a452538a49a0b48a983eaad68dce4151c7 Author: Yozo Hida Date: Sun Apr 8 23:27:25 2007 -0700 Removed note about cygwin in INSTALL file. Case insensitivity is no longer much a problem since there is a specialized compiler search order on cygwin systems. commit aa4260321d14b97e2750d314d9a89576ca3c4ae0 Author: Yozo Hida Date: Sun Apr 8 23:25:57 2007 -0700 Fix example in INSTALL: Intel C++ compiler is icpc, not icc. commit ab230d50cb15f8414388943fc2f007ede4b756af Author: Yozo Hida Date: Sun Apr 8 23:08:12 2007 -0700 Fix fortran/f_dd.cpp; double-double is now represented as an array. Commit 73115461 forgot to update this file. commit 05bef975a9488091aa43a03549cea3fdd0b35055 Author: Jason Riedy Date: Sun Apr 8 14:52:29 2007 -0700 Use Fortran array slices liberally. There may be a future problem lurking here... Array slices may be passed by descriptor and not use sequence association. That would be incredibly dumb in these cases. If it *does* occur, the routines in qdext.f and ddext.f should be changed to take implicitly-sized arrays (b(*) rather than b(4)). Signed-off-by: Jason Riedy commit 18d6320faa001bca6237efedfbc6b1118368ceda Author: Jason Riedy Date: Sun Apr 8 14:49:16 2007 -0700 Replace loop with ISHFT in pwr_{q,d}dc_i. More efficient and more clear. Signed-off-by: Jason Riedy commit 30c9162908875e80ba94259645aabcd118e4c052 Author: Jason Riedy Date: Sun Apr 8 14:48:44 2007 -0700 Continue elemental-izing functions. Note: The WRITEs in pwr_qdc_i and pwr_ddc_i are commented out. Signed-off-by: Jason Riedy commit 98c6ea2b52a8e0f75efe14f69f6171eef6c5107e Author: Jason Riedy Date: Sun Apr 8 14:48:22 2007 -0700 Fix prototypes in qdext.f; qd has 4 elements. Signed-off-by: Jason Riedy commit e2fee77d5382a1fb93fd66cc353e0fe36b25f7c1 Author: Jason Riedy Date: Sun Apr 8 14:48:00 2007 -0700 Negate all of a quad-double, not just first two pieces. Signed-off-by: Jason Riedy commit 49731aa90269a4bb5e505c46150f54e57aec2406 Author: Yozo Hida Date: Sun Apr 8 03:36:14 2007 -0700 Make dd_real multiplication commutative. commit 73115461d449585eff07259d2d166fde937a68ca Author: Yozo Hida Date: Sun Apr 8 00:47:08 2007 -0700 Change internal representabion of dd_real to array of two doubles. This makes it more consistent with qd_real and future extensions. commit 77a8fa5f7f384e2243945f956ede2657225b0ba7 Author: Yozo Hida Date: Sun Apr 8 00:20:08 2007 -0700 Make addition for dd_real commutative. commit 0c7d86ae1719275b4286c32c8946dcc246bfb354 Author: Yozo Hida Date: Sat Apr 7 23:51:48 2007 -0700 Time dot-like function a = a*b + c. commit 3768f72461727109c6dbcd993f566ed39a022a93 Author: Yozo Hida Date: Sat Apr 7 23:51:17 2007 -0700 Multiply the number of iterations of qd_timer for each -long flag. commit 94ecba6986c8c164766293f0ad704f2076b5524a Author: Yozo Hida Date: Sat Apr 7 23:23:31 2007 -0700 Perform multiple ops in a loop to measure time. Do four independent add / mul / div / sqrt inside the loop to better measure the time. commit e5afcd6bb2402b896863f5327b7367f9f9b85032 Author: Yozo Hida Date: Sat Apr 7 23:11:50 2007 -0700 Print out result in timing sin in qd_timer. Compiler optimization removed the loop when the result was unused. commit 93728d52287245b4883b8b55514904b3deb58095 Author: Yozo Hida Date: Sat Apr 7 23:09:34 2007 -0700 Print out mop/s (million of operations per second) in qd_timer. commit 5346abb51d14cf85eb84a18df39a87e7df2f18d9 Author: Yozo Hida Date: Sat Apr 7 23:06:43 2007 -0700 Don't bother saving format flags in qd_timer routines. commit 3b907888ba16b3afd1bb2efdea5d3f20095875f1 Author: Yozo Hida Date: Mon Mar 26 04:50:09 2007 -0700 Update comments in tests/huge.cpp. commit dd99599f98266b28b59cbf3201f3b337adb87a21 Author: Yozo Hida Date: Mon Mar 26 04:33:36 2007 -0700 Bump minor version number to 3. commit 851f42da0dfa613a9f87876bc68dc5f27fa40518 Author: Yozo Hida Date: Mon Mar 26 04:19:59 2007 -0700 Update tests/huge.cpp for write ==> to_string API change. commit 6596a171c846f50cf66893ccd3a1c66b361ed409 Author: Yozo Hida Date: Mon Mar 26 04:15:29 2007 -0700 Update ddext.f and qdext.f for API change in swrite. commit ae12ec0bcac828ae5ee18daea40af281b8571375 Author: Yozo Hida Date: Thu Mar 22 04:44:28 2007 -0700 Write to C string is now a wrapper to to_string method. commit e86abad81472bd0d097c7e6e0a0eabc4b0fe23b8 Author: Yozo Hida Date: Thu Mar 22 01:52:09 2007 -0700 Renamed abort() to error(). It does not abort, but it just prints out a error message. commit 740c4ec41c2effb0d8481a8e42afcb0eb03fe10c Author: Yozo Hida Date: Thu Mar 22 01:43:05 2007 -0700 Make f_xx_swrite more flexible. f_xx_swrite, called by the Fortran interface is not able to accept precision and character array length. commit 72b8b527d880b332ded64283cebf779102a47c33 Author: Yozo Hida Date: Wed Mar 21 19:06:21 2007 -0700 Renamed write to to_string for outputting to std::string. commit e7964b65b662bcf1fd4cc9bb9661b2fd2e33a9ee Author: Yozo Hida Date: Sat Mar 17 11:57:20 2007 -0700 Make T::write take one fmtflags instead of float_field and adjust_field. commit 0c04258f79ed6fd1aa040484088996da5caffc0d Author: Yozo Hida Date: Mon Mar 26 03:57:29 2007 -0700 Declare Fortran subroutines/functions as pure/elemental where appropriate. This allows more Fortran 95 constructs such as matrix operations and forall loops to be used with dd_real / qd_real types. commit 82486db011094e649c120923f740b656ba7c3c19 Author: Yozo Hida Date: Mon Mar 26 03:01:20 2007 -0700 Removed redundant routines in Fortran interface. These include copy routines, d+dd and d+qd additions and multiplications (which can be done with dd+d and qd+d routines), and cossin functions. commit 645a2b7a279342aa5fb8105213751030dbd7eb4d Author: Yozo Hida Date: Mon Mar 26 02:53:41 2007 -0700 Declare most routines in ddext.f and qdext.f as pure. commit dc7272c6cb09dfefbda3810cef90175f98e93419 Author: Yozo Hida Date: Tue Mar 27 18:01:32 2007 -0700 Added C++-to-Fortran glue to fortran/{dd/qd}ext.f. This allows some static error checking when compiling ddmod.f and qdmod.f. Fixed bunch of type errors when calling f_dd_* and f_qd_* routines. commit d9ac4a4d562a3d6dd5cbc32897595320aa48099a Author: Yozo Hida Date: Sun Mar 25 04:37:47 2007 -0700 Fix comments in qd_real.h and dd_const.cpp. commit c3fabe6a9914ad15c09bafa5740729c7cda2b3d6 Author: Yozo Hida Date: Sun Mar 25 01:35:05 2007 -0700 Make constructors accepting double pointer explicit. commit a2316077e044772d671b89b934b83db3d1b80ead Author: Yozo Hida Date: Sun Mar 25 00:39:49 2007 -0700 Make everything public in qd_real and dd_real types. commit ca5cab51a1799aec85c92a75d1cb8ac69be062a0 Author: Yozo Hida Date: Sat Mar 24 10:25:21 2007 -0700 Update qd-config.in and fortran/Makefile.sample for qd_f_main. commit 5938ae808308a626ac07b80b915d262baeec00fc Author: Yozo Hida Date: Sat Mar 24 01:37:18 2007 -0700 Split f_main from libqdmod.a, put it in libqd_f_main.a. commit f4dbe72c58c5e59a8b6dc0ab0fda64707ec2b656 Author: Yozo Hida Date: Wed Mar 28 11:54:10 2007 -0700 Include in where necessary in tests / demo programs. commit cea1f55118646ba9a9701d318bf55b3b67059774 Author: Yozo Hida Date: Tue Mar 27 17:19:39 2007 -0700 Update fortran/tquadtsq2d.f, added fortran/tquadgsq2d.f demo programs. commit b8dd81c8fc657ecf54e0a9a54c6c01663bfbc1e7 Author: Yozo Hida Date: Tue Mar 27 13:12:58 2007 -0700 Removed unused variable in tests/huge.cpp. commit d4c89c78721867ad9a6ca19167a94394f61b717d Author: Yozo Hida Date: Tue Mar 27 13:11:56 2007 -0700 Restore stream precision / flags when exiting print_double_info. commit 5aa61b0f03a7c9d1e9a88741c916ef764c5ec6eb Author: Yozo Hida Date: Tue Mar 27 12:40:45 2007 -0700 More robust check for clock_gettime. It checks to see if we can compile a simple program using clock_gettime. On some systems, we can detect clock_gettime in libraries but the compiler cannot use it for some reason. commit 9c4e9c37fcbae713ecd0b1a3d00754468c974014 Author: Yozo Hida Date: Mon Mar 26 14:55:31 2007 -0700 Automake expects ChangeLog to be there, so create it first in autogen.sh. commit 2a5b8132afdd0a045145d5fa94033d5b58aa1075 Author: Yozo Hida Date: Mon Mar 26 02:25:38 2007 -0700 Do not write to input parameter in pwr_{dd,qd}c_i. In the Fortran routien pwr_ddc_i and pwr_qdc_i, we were writing NaN (when 0^0 is requrested) to the input parameter a instead to the result. commit 32e9bfc1945c3d0fdfea6a4905c4c7db6a6bb545 Author: Yozo Hida Date: Sat Mar 24 00:50:14 2007 -0700 Call autotools in correct order in config/autogen.sh. commit f64ddddf61c0e77620048b79ddc347656ac4d6bc Author: Yozo Hida Date: Sat Mar 24 00:23:52 2007 -0700 Make MinGW system look for same compilers as in cygwin. commit 1d2fdae00a5df2ea8e6c1de3a6502bd088a9e667 Author: Yozo Hida Date: Sat Mar 24 00:09:59 2007 -0700 Prune out some obsolete C++ compilers from search list. These include old icc/ecc compilers (modern Intel uses icpc as their C++ compiler), and several compilers on Apple platforms. commit a25c2d2d156ca8ec0adcc377a80d2f899134af56 Author: Yozo Hida Date: Fri Mar 23 23:50:06 2007 -0700 Remove cl from C++ compiler search list. As far as I know cl refers to the MSVC++ cl.exe compiler, and I don't think autoconf/automake stuff works with command-line Microsoft compilers. commit f384bfb3cf92cccaf4834961ad59be1345713a10 Author: Yozo Hida Date: Fri Mar 23 23:21:04 2007 -0700 Return NaN instead of stopping the program when 0^0 is encountered. This applies to the complex exponentiation in Fortran. commit ade1c71668c3f4daed7df6511bb8f0f408f1eaf6 Author: Yozo Hida Date: Fri Mar 23 23:14:24 2007 -0700 Added nan generic function to the Fortran interface. This calls f_dd_nan or f_qd_nan to get NaN values. Simple printout of NaN added to f_test. commit cd21d1998ad9523c7cc2d41a31eee1c7c96f375d Author: Yozo Hida Date: Thu Mar 22 19:28:09 2007 -0700 Update NEWS for 2.2.5 release (again). commit bb3e13c67a20656cbef6c7d879658d0b234fe6f1 Author: Yozo Hida Date: Thu Mar 22 19:09:53 2007 -0700 Fix div_{dd,qd}c_d in Fortran interface. We cannot just divide each component of a dd_real by a double precision number to get the result of the division. commit 144a6228b7ea420085e5a7f06832cebe9842dea5 Author: David H Bailey Date: Thu Mar 22 18:59:14 2007 -0700 Added Fortran interface for mixed complex / double precision arithmetic. This includes mix of dd_complex and double, and qd_complex and double. commit cf76a920d276f79a122325fb0bc1a3592b5b5506 Author: Yozo Hida Date: Thu Mar 22 15:03:47 2007 -0700 Fix alignment in the verbose output of qd_test. commit 6a1a3f078a28813988ecd877cd69e5bb81b29366 Author: Yozo Hida Date: Thu Mar 22 14:37:35 2007 -0700 Update NEWS for 2.2.5 release. commit 7d2c9b90f44acd32c3854a25ff43dd7e29d22eef Author: Yozo Hida Date: Thu Mar 22 04:21:36 2007 -0700 Include cstdlib instead of stdlib.h in fortran/main.cpp. commit 504f46aeb75edbfa6bce51dd000900640baa8ab2 Author: Yozo Hida Date: Thu Mar 22 04:03:36 2007 -0700 Correctly detect when we cannot find a Fortran module inclusion flag. commit e54cf50ca3ecffd6949b454c294ef883cd71e2e5 Author: Yozo Hida Date: Thu Mar 22 04:01:29 2007 -0700 Moved Fortran test f_test to tests directory. commit 58b8e6e59d5414a27632e49250ef056e5c414a12 Author: Yozo Hida Date: Thu Mar 22 03:37:57 2007 -0700 Moved Fortran wrappers f_xx.cpp into fortran directory. commit fc0964a8047481b7f8cf19bc3288648543fc5567 Author: Yozo Hida Date: Thu Mar 22 03:25:36 2007 -0700 Printing NaN should follow format options as well. Previously NaNs were always printed out as "nan" or "NAN". Not it honors various format optons passed to to_string method. commit 9f28633b15133c2437706004d9249f3b4f634f24 Author: Yozo Hida Date: Thu Mar 22 03:13:25 2007 -0700 Check for infinity when printing numbers. commit 0a72a5a3c9f4abd5c6bd62dbbbcfb8b37fd96e4c Author: Yozo Hida Date: Thu Mar 22 12:45:09 2007 -0700 Return NaN under error conditions instead of zero. commit baafad498dda838321773ba4f4ea61f8b46844b7 Author: Yozo Hida Date: Thu Mar 22 12:42:50 2007 -0700 Exp now returns inf if the argument is too large. commit e4f3fff2eb18f0926b1ef1f1a0e710210e208778 Author: Yozo Hida Date: Thu Mar 22 02:06:25 2007 -0700 Added _inf constant, representing infinity. commit 6efb5ff5be6e3db403e7c473aca53dd83cc55e16 Author: Yozo Hida Date: Thu Mar 22 05:31:01 2007 -0700 Return nan if error is detected in assignment from strings. commit 7365abc771d8d5bfaff5147f4d9b71f46141ba47 Author: Yozo Hida Date: Wed Mar 21 18:49:50 2007 -0700 Added qd_real member access returning a reference. This makes possible, to assign numbers to each component. This is intended for debugging purposes. commit ba503495d28d8696ed0359c4c8f0388bf03a79c5 Author: Yozo Hida Date: Sat Mar 17 11:06:17 2007 -0700 Use newer write() function for Fortran string output. commit c291d9cb910886a09ec177d6814870335a2dd30b Author: Yozo Hida Date: Wed Mar 21 18:50:07 2007 -0700 Fix spelling error in NEWS. commit ec4acfb4c3e9e4af363e7c44fbc47597a6b212a0 Author: Yozo Hida Date: Sat Mar 17 03:03:52 2007 -0700 Removed support for Fortran strings. These were not mainttained and probably no longer works. Instead we use array of characters, which is slightly more portable. commit 600391d1ad77b260515544e8f37a008597bf2cf3 Author: Yozo Hida Date: Sat Mar 17 02:53:43 2007 -0700 Revamp debugging dump routines. - Removed dump_components(), it now does the same thing as dump(). - Accept optional variable name. - Accept output stream to dump information; defaults to cerr. commit 06a436a82ce40e6936f08615a808cdc22a8077e7 Author: Yozo Hida Date: Wed Mar 21 16:07:21 2007 -0700 Allow fortran/dd_timer.f and qd_timer.f to be generated without Fortran. These are required in the distribution (and does not require a Fortran compiler), so able to generate these without a Fortran compiler. commit cd7add6a8569bb69a4455b899bf00d5fa751b903 Author: Yozo Hida Date: Wed Mar 21 13:43:50 2007 -0700 Fix bug in quick_three_accum where both a and b becomes zero. When the sum is representable in a single double, it was returning it in b instead of a. This was affecting build with --enable-ieee-add option. Bug reported by Jean-Francois Paillard. commit 76406e421843c7956bd12e5db44d3ef0e7f4a02b Author: Yozo Hida Date: Wed Mar 21 11:04:50 2007 -0700 Do not compile f_{dd,qd}.cpp without fortran support. commit 4782048dc725fd559f225bd8fa469e029251a9f7 Author: Yozo Hida Date: Tue Mar 20 20:49:46 2007 -0700 Remove huge from list check_PROGRAMS for now. This is removed from standard "make check" until it is more stable. On some platforms the rounding seems to be different for some reason, causing it to spuriously fail. commit 7e2b8c2d2dcba2db72e5d1c0561f937311502257 Author: Yozo Hida Date: Tue Mar 20 20:48:22 2007 -0700 Update NEWS for 2.2.4 release (again). commit 9ff63a87fa4a012b01522962dd8bea319e84e2e5 Author: Yozo Hida Date: Sat Mar 17 00:29:17 2007 -0700 Fix indentation issues in fortran/qdmod.f and fortran/ddmod.f. commit 0ae13f30184b4f1ff411db5a8d2660a65dc66a8f Author: Yozo Hida Date: Sat Mar 17 00:23:34 2007 -0700 Added safe_huge interface to Fortran interfaces. These returns the maximum number that is safe to use in arithmetic operations. commit 07d05fafd961e35dc1938a2c9db2c244ce4a456a Author: Yozo Hida Date: Fri Mar 16 07:59:54 2007 -0700 Added safe_max constant. This is a maximum value where normal arithmetic operation can be done on (e.g., multiplication, sqrt). This is slightly smaller than the true max, and is approximately 2^1024 * (1 - 2^-26), chosen so that split operation does not overflow. commit 59c46215255952e3bd4a1984a6d69e50b119b8ba Author: Yozo Hida Date: Sat Mar 17 05:48:52 2007 -0800 Undef min/max for those compilers that likes to define them as macros. Macros max/min breaks definition of std::numeric_limits<>::max() and min(). commit e4dda14bb85af17304704f3d68926d9efda1ab03 Author: Yozo Hida Date: Sat Mar 17 05:47:42 2007 -0800 Definition of tic() and toc() should be outside of _WIN ifdefs. commit a3b03003b3a057fbd6d93d3eebf8c3f844294603 Author: Yozo Hida Date: Tue Mar 13 01:04:15 2007 -0700 Added range and precision interface to Fortran modules. commit a9fa3a4492dd2d50105baf32d526a8dab9704782 Author: Yozo Hida Date: Tue Mar 13 00:57:16 2007 -0700 Added min/maxexponent interface to Fortran modules. commit 2a05f959630c223a508188dfb2f1cc19157eb887 Author: Yozo Hida Date: Tue Mar 13 00:30:08 2007 -0700 Added output tests for _max. commit f4f49a221d5e86e4a1efe8c49f34d783c4009b26 Author: Yozo Hida Date: Tue Mar 13 00:18:46 2007 -0700 Add special case in write() for huge numbers. This enables numers up to _max to be printed. commit cf248c58ec73ca13efb0968c97a03321950ab8e5 Author: Yozo Hida Date: Mon Mar 12 23:53:35 2007 -0700 Small cleanup in to_digits. commit 73d360654e8d9b78dbcd7e029e98079aeb349559 Author: Yozo Hida Date: Mon Mar 12 23:10:55 2007 -0700 Added huge number output test. commit 7028c27623a84cff87372408a93a8a3714f38e3e Author: Yozo Hida Date: Mon Mar 12 20:01:19 2007 -0700 Make split() work near overflow threshold. If argumen to split() is near overflow, scale by 2^28 to avoid overflow. commit c1f2e596d88aeffc2a06369e80399d523c2cad9d Author: Yozo Hida Date: Mon Mar 12 18:47:36 2007 -0700 Added numeric_limits::max function. commit 5de86a341ff4ce1ffc4f0db32310d47544378c24 Author: Yozo Hida Date: Mon Mar 12 17:32:01 2007 -0700 Added interface to radix and digits Fortran intrinsics. commit 0d523aa17e04c8e1a45c86f0d716891ecd68c912 Author: Yozo Hida Date: Mon Mar 12 16:56:25 2007 -0700 Use slightly more conservative values for eps. Use 2^-104 for dd_real ,and 2^-209 for qd_real. commit fbba393db6eaadf0a45a0adc999d949360cf5a2b Author: Yozo Hida Date: Mon Mar 12 15:21:19 2007 -0700 String constants should be assigned to "const char*". commit f9979ef996d7e8ac6f3d1e3ec808a1217a65e54f Author: Yozo Hida Date: Mon Mar 12 12:13:31 2007 -0700 Update NEWS for 2.2.4 release. commit 99a1af3e3d31ef0bd407ccaf01cbe6a96430d46e Author: Yozo Hida Date: Mon Mar 12 11:55:38 2007 -0700 Use "cp -pr" instead of "cp -a" in config/makedist.sh. BSD cp does not have the -a flag. commit c68065253fd1f84c5ad896eb21fcc7a354a1294f Author: Yozo Hida Date: Mon Mar 12 11:39:23 2007 -0700 Provide implement random_number interface in Fortran modules. Random number routines is now a subroutine instead of a function to be compatible with random_number Fortran instrinsics, and to be able to distinguish by type. commit b544f0ba337c2fc8ef604ebea6ed2a9e357cd114 Author: Yozo Hida Date: Sun Mar 11 17:14:56 2007 -0700 Remove RCC from list of compilers on Apple systems. Due to case insensitive file systems it gets confused with rcc, the Qt resource compiler. commit 7b79931b013e2ba744d405e689ce75fff8b5ced4 Author: Yozo Hida Date: Wed Mar 7 21:25:42 2007 -0800 Update NEWS file for 2.2.3 release. commit 17ea136f440016f3f6b88f9933ffcd17cf1c48e9 Author: Yozo Hida Date: Wed Mar 7 03:31:55 2007 -0800 Fix sign function in Fortran modules. When copying signs we cannot just take absolute values of all the components since they can have different signs. commit fbacb1f1cb0c2e6df28742f32b90a0d247385bef Author: Yozo Hida Date: Wed Feb 21 05:52:10 2007 -0800 Include fpu.h in dd_real.h. This way users does not have to explicitly include fpu.h. On the other hand, this can cause symbol conflicts. commit 95ae0708e433ae211cb6ba4314ee16d914b6510b Author: Yozo Hida Date: Sat Feb 17 08:19:31 2007 -0800 Add note about --prefix option in INSTALL. commit aabe3e9f23604949b26301316dc5e57ac32e84b5 Author: Yozo Hida Date: Sat Feb 17 08:15:52 2007 -0800 Add fortran/Makefile.sample to the distribution. commit 6408de131eae81dbbeb66e08f39ec5480c424ece Author: Yozo Hida Date: Thu Feb 15 16:11:28 2007 -0800 Make ddoutc and qdoutc use f_dd_swrite and f_qd_swrite. Modified f_dd_swrite and f_qd_swrite to output identical string as was in Fortran. Some post processing is necessary after call to write(...). commit d0fbbef3998292f66abe16a2f0de67c35406bedf Author: Yozo Hida Date: Thu Feb 15 15:55:31 2007 -0800 Output to string (f_dd_swrite) should be limited to 40 chars. commit f102a8325d9f252cf9dac5ea388d27edebfc0236 Author: Yozo Hida Date: Mon Feb 12 18:27:06 2007 -0800 Add -long option to qd_timer. This increases the timing loop by factor of 10. commit 0695abb6df9055857566aeb921b9419cedd40eba Author: Yozo Hida Date: Mon Feb 12 18:21:30 2007 -0800 Get rid of unused base_n variable in qd_timer. commit 38dc778fbd54ce57b52260c3eb97c48f82103892 Author: Yozo Hida Date: Mon Feb 12 05:04:11 2007 -0800 Fix timing of sin. commit aff516c6ac459987ea817ef37446327d180e4d2b Author: Yozo Hida Date: Mon Feb 12 04:59:25 2007 -0800 Fix spelling error in BUGS. commit 94d95418ca2c4509a2740f0b3109f3f2331f00e7 Author: Yozo Hida Date: Mon Feb 12 04:11:09 2007 -0800 Clean up qd_timer a bit. commit c8d781d611274c853d7f2f8a54b79d771f41d2b5 Author: Yozo Hida Date: Mon Feb 12 04:07:55 2007 -0800 Use a fixed number of iteration for qd_timer. Differing number of iterations on different platforms lead to different values involved, causing timings that cannot be easily compared. commit 8963dc9358dda62358fea46f1d227d1c8fca0cb5 Author: Yozo Hida Date: Mon Feb 12 02:24:34 2007 -0800 Added support for gettimeofday back. Some systems (e.g. Apple) does not have clock_gettime. commit 382ba8dcf359686d580741deb5e526328e8cdebb Author: Yozo Hida Date: Mon Feb 12 01:36:40 2007 -0800 Use clock_gettime to measure time. This gives a higher resulution timer on many platforms than using gettimeofday. Requires linking with librt on some platforms, which is now checked by autoconf. commit e20ffe2e7d9d9318a5ed81758ef09b2c849bed03 Author: Yozo Hida Date: Fri Feb 9 22:15:16 2007 -0800 Update qd_test a bit. For computation of Pi, look at successive differences to figure out when to stop. commit dcfce97ac7a4d759db3587f9c14e17066d246730 Author: Yozo Hida Date: Fri Feb 9 21:49:01 2007 -0800 Fix dependency of Fortran modules to allow parallel make. QD modules depends on DD modules to be compiled first. commit 3dbcbd7b941f5b0ae963295299e95de78aa9c876 Author: Yozo Hida Date: Sun Feb 11 01:02:44 2007 -0800 Move qd_real::renorm member functions to qd_inline.h. commit 6511be4e8d999e7591cf10541c8ee5586fc384e6 Author: Yozo Hida Date: Sun Feb 11 01:01:09 2007 -0800 Do not bother setting uninitialized dd_real and qd_real to zero. commit a4c10bad349e241cb539a7d8571d4c7ef1d4d35e Author: Yozo Hida Date: Sat Feb 10 19:26:17 2007 -0800 Update NEWS for 2.2.1 release. commit 9d3dd4af2dad413fea02b467e8bf693b22f2a687 Author: Yozo Hida Date: Sat Feb 10 18:41:17 2007 -0800 makedist.sh now recognizes a "git" patchlevel. If makedist.sh is executed with "git" as patchlevel, it will append the version with "git-sha1" where sha1 is the first 8-digit of the last commit object. commit 555f56a604075945eeaff78b1948b797d6c5bf43 Author: Yozo Hida Date: Mon Feb 5 00:52:29 2007 -0800 Rename dd.cpp and qd.cpp to dd_real.cpp and qd_real.cpp. commit f2b3906c4e34b308810b709f6ea2ab746ac4bf22 Author: Yozo Hida Date: Mon Feb 5 00:37:15 2007 -0800 Use fixed point dd_real/qd_real output for pslq_test coefficients. Instead of converting the coefficient to integer, just print them out using dd_real/qd_real output functions using fixed point format. commit 4fc89d9a3f0f0fcee6bdf6922df37594bfd7167d Author: Yozo Hida Date: Mon Feb 5 00:36:28 2007 -0800 Do not print out decimal point if precision = 0. commit 7c6b3a4c6bd62a712e8f8fe6e9cc94e054099587 Author: Yozo Hida Date: Mon Feb 5 00:28:03 2007 -0800 Output correct number of digits in scientific format. When scientific format was specified it was outputting one less digit after the decimal point than specified. commit 827dce46e1a8c099ed998c3621aafc16b9f01d70 Author: Yozo Hida Date: Fri Feb 2 16:37:41 2007 -0800 Reorder compiler search order for Apple systems. Since their HFS+ filesystem is case insensitive, it sometimes confuses between cc and CC. [Bug reported for ARPREC by Jacques Vernin.] commit 951386f36a58bf7fdae0b97b7fc65869c8b8cb08 Author: Yozo Hida Date: Thu Feb 1 01:56:26 2007 -0800 Update README to reflect dd.h to dd_real.h change. commit 41b50bbc93df6d2521930b9de38a7d3b8465cda5 Author: Yozo Hida Date: Thu Feb 1 00:39:13 2007 -0800 Updated NEWS for 2.2.0. commit 7de3918029bfd9d9bf5bf9161a8059ffd4a5ada2 Author: Yozo Hida Date: Wed Jan 31 23:31:18 2007 -0800 Use std:: prefix where appropriate. Some routines in std namespace were being used without std:: prefix. commit 4b5ffa362b3e6d4dcc5f0fa7afa6e7b693d98f1e Author: Yozo Hida Date: Wed Jan 31 22:22:23 2007 -0800 Detect whether copysign is available. Configure script now tries to detect whether copysign is available in std or global namespace. If not found, it uses a macro. commit c85394473b96c3f07375b189e755a0dd6e3dbf7c Author: Yozo Hida Date: Wed Jan 31 23:19:30 2007 -0800 Removed typecast operators double() and int(); added to_int, to_double instead. Removed overloaded typecast operators double() and int(). These allow *automatic* casting of qd_real into double or ints, which is rather dangerous. Instead, added overloaded functions to_int() and to_double(). commit 9eb316ef18d901d340c98fe449b54d5347de3a68 Author: Yozo Hida Date: Wed Jan 31 18:27:55 2007 -0800 Cosmetic changes in dd_real.h and qd_real.h. Update comments and macro names to reflect change in the file name (dd.h to dd_real.h). commit f852c420b455c2d034bbd639fac201df406628bd Author: David H Bailey Date: Wed Jan 31 15:08:42 2007 -0800 Added dd-to-dd and qd-to-qd assignment in F95 interface. commit 97be577fd6dd39be65830d829923ef7301cf29ab Author: David H Bailey Date: Wed Jan 31 03:42:32 2007 -0800 Added Fortran-95 complex support. Applied patch from David Bailey providing support for dd_complex and qd_complex in the Fortran interface. Slight modification to fit the more recent code base. commit 6c8ebc1f136f1b0a019fb7acf3cab667aefcf456 Author: Yozo Hida Date: Tue Oct 17 05:02:17 2006 -0700 Bump version to 2.2. commit ab8a2e8c92c6dad15aff043dae91c15d78e8f042 Author: Yozo Hida Date: Mon Oct 16 01:23:56 2006 -0700 Rename qd.h and dd.h to qd_real.h and dd_real.h, respectively. Apparently qd.h conflicts with QuickDraw headers in Mac OS X. [Bug reported by Michael Rubinstein]. commit 4f2726dda97fd635e0fd3a587c20d08cd7793aa8 Author: Yozo Hida Date: Sat Oct 21 03:01:40 2006 -0700 Update TODO file. commit 7288f679e11cba2a5fa33df8cdc57c6d1688c90d Author: Yozo Hida Date: Tue Oct 17 05:21:44 2006 -0700 Install include/qd/bits.h. commit a66b00e498dd785a757cf553998989c8dbace38e Author: Yozo Hida Date: Tue Oct 17 04:30:24 2006 -0700 Updated NEWS file for 2.1.214 release. commit ccc74de950d914a83dfcc16691a9a3f68ce9127b Author: Yozo Hida Date: Tue Oct 17 02:52:09 2006 -0700 Don't use automake in docs directory. Starting with automake-1.10, "make distcheck" attempts to build qd.pdf from within builddir, which causes a problem since latex assumes things are in the current directory. Updated config/makedist.sh to issue "make doc" before building a distribution. Added necessary files in docs to distribution manually in top-level Makefile.am. commit bf1ac2d68aa33cfcfde06c59139c7a7b12d8dad0 Author: Yozo Hida Date: Mon Oct 16 18:41:51 2006 -0700 Added rules to create docs/qd.pdf, and distribute it. Distribute qd.pdf instead of qd.ps. commit d76b2d3bd395cc8fef959c3b141ae432f00ff6d8 Author: Yozo Hida Date: Mon Jun 20 08:42:50 2005 +0000 Use std::abs where appropriate in src/dd.cpp. commit 764f4fb6759605fded833dd0c8996e20f0b3b179 Author: Yozo Hida Date: Mon Oct 16 04:20:10 2006 -0700 Update help output of qd_timer. commit 1b120a51d9c93941363ceb1bc75969825a3e869c Author: Yozo Hida Date: Mon Oct 16 04:18:16 2006 -0700 Added double timing to qd_timer. - tests/qd_timer.cpp: Added -double option to time the standard double type. Some small cleanups. commit 1a46ff72a3eae0dc30a8bb8a4553ed1afedd76c5 Author: Yozo Hida Date: Mon Oct 16 04:16:48 2006 -0700 Move dd constants to dd_const.cpp. commit 8f86ac9ef1876e132c02b85bdd0f4d719269e25f Author: Yozo Hida Date: Mon Oct 16 04:06:49 2006 -0700 Use more efficient dd_real::sin. - Only compute necessary quantities. - Optimize sincos_taylor. commit 9f3b24a9da40d98bb826c3e58a061877c5ae3884 Author: Yozo Hida Date: Mon Oct 16 03:54:31 2006 -0700 Added fortran timer programs. commit 439b88ae46e58ed0f0e15bd7569f0a0be14cf856 Author: Yozo Hida Date: Mon Oct 16 03:47:04 2006 -0700 Added sin and log timing to qd_timer. commit afb2a09be1801c02c77feed83338cb33341a1df7 Author: Yozo Hida Date: Mon Oct 16 03:33:28 2006 -0700 Update sqrt timing to use result to avoid compiler optimizations. In order to avoid compilers optimizing away the sqrt call in the timing loop, re-use the sqrt result. commit f9d3e564da03fc4fc461f74fbe36107577663a84 Author: Yozo Hida Date: Mon Oct 16 03:08:48 2006 -0700 Change output format of qd_timer. commit 506d8984337ae1604e20c6560ccaa3203a76d84d Author: Yozo Hida Date: Wed Oct 4 14:53:23 2006 -0700 Drop MSVC++ 6.0 support. This old (1998) compiler did not have full support of C++ (such as not supporting std:: namespace in certain places). Since there is now a gratis Visual C++ 2005 compiler which is much more compliant, I am dropping support for the old and broken C++ compiler. Changes include: - use std::abs instead of _QD_STD_ABS which was defined to be fabs for MSVC++ 6.0 compilers. Similar changes for bunch of functions in cmath headers. - removed double abs function supplied for MSVC++ 6.0. This should be in std:: namespace already. - small cleanup of using statements. commit ee965a4d9a84aef557e627400687c866fc4fee08 Author: Yozo Hida Date: Tue Oct 3 22:15:02 2006 -0700 Use std::abs instead of just abs in util.cpp. Also need to include to get integer abs. Alpha cxx compiler seems to be very picky about these things. Reported by Zong-Chao Yan. commit fa4a140f6a9671b965198edda4da942b7e7af081 Author: Yozo Hida Date: Sat Sep 23 02:04:20 2006 -0700 Require autoconf version 2.60. This is required for AC_DEFINE macros with arguments. commit 4599d588146bd4937de8b958b4fee380b0801d31 Author: Yozo Hida Date: Fri Sep 22 17:01:42 2006 -0700 Case integer to string::size_type when using string::insert. This was causing compilation problems with Intel C++ when -cxxlib-icc was specified. commit 2916f9e0461dc8cda6980060c47c4f1dc26393bc Author: Yozo Hida Date: Fri Sep 22 01:14:12 2006 -0700 Use static_cast instead of C-style casts. commit 0a537ebcb706ab5e402504e4ddd4dabd28723a92 Author: Yozo Hida Date: Thu Sep 21 19:20:46 2006 -0700 Added _min_normalized variable to dd/qd_real for underflow threshold. This is set to 2^(-1022 + 53) for dd_real and 2^(-1022 + 3 * 53) for qd_real. commit 5f2b710c3277a489d9e1b7b628ad8324e21a8a06 Author: Yozo Hida Date: Wed Sep 20 07:05:31 2006 -0700 Undef isnan, isfinite and isinf in include/qd/dd.h. Some compilers define isnan, isfinite and isinf as macros, which cause havoc when we try to overload these functions. commit e8b06574d5aaf7aa45a6d12de191c7ec01a3841f Author: Yozo Hida Date: Thu Sep 14 20:31:19 2006 -0700 Output correct macros for QD_ISINF and QD_ISFINITE. It was outputting the same macro for QD_ISNAN. commit af47faf3271cf598084b3f07195d95d2c6ea63d9 Author: Yozo Hida Date: Thu Sep 14 03:42:54 2006 -0700 Use std::printf instead of just printf. IBM xlC compiler on Apple does not like using statements for printf. Similarly, use std::sprintf. commit 3377b1ec6e1c1dc6505e3bf67444ff646b5c9dc9 Author: Yozo Hida Date: Thu Sep 14 02:29:25 2006 -0700 Return with error if max element cannot be found in pslq. This shouldn't really happen unless there is a bug somewhere. It's better to catch it than segfault. commit 1a329df3568dbf51083458531828698e23ef7130 Author: Yozo Hida Date: Thu Sep 14 02:22:23 2006 -0700 Added work around for Sun C++ compiler in pslq_test.cpp. For some reason Sun C++ miscompiles the code if eps argument to pslq_test is set to std::numeric_limits::epsilon(). Work around by creating an overloaded version of pslq_test that just passes std::numeric_limits::epsilon(). commit 6a394af4e0156d3faf7cb36b1ece10eacbd8725e Author: Yozo Hida Date: Wed Sep 13 17:46:51 2006 -0700 Change verbosity to an integer in pslq_test. This way levels of verbosity can be controlled. commit eaa85dbba2b8d56d742e9608989b37a6e6c95ec3 Author: Yozo Hida Date: Wed Sep 13 02:22:44 2006 -0700 Output correct character in to_digits when first digit becomes 10. First and second digits where not set when first digit overflowed to 10. commit c7af059005fc9686272db00341a44dffdd55ae7a Author: Yozo Hida Date: Wed Sep 13 02:20:55 2006 -0700 Added BUGS file, documenting problem with pathCC-2.4. commit 3fcb3a44f43fa599c133180c50143cdd230022b8 Author: Yozo Hida Date: Wed Sep 13 01:55:02 2006 -0700 Output std::string directly to ostream in operator<<. There is no need to output them character by character. commit 2386fa1ce89d1f81115d75862e2a77508f2b8e65 Author: Yozo Hida Date: Wed Sep 13 01:52:27 2006 -0700 Removed conditional compilation of debug routines. These were omitted when QD_DEBUG was defined, but now include them since they are useful and does not affect performance. commit f77b577a268a3e0ec9f63fbe957df7ba7c4bbdf7 Author: Yozo Hida Date: Wed Sep 13 01:14:10 2006 -0700 Added QDMODULE.mod and DDMODULE.mod to fortran/.gitignore. These all-caps files are generated by pathf95 compiler. commit ccda8948a336ef7707bc1cc5adae696755e3c831 Author: Yozo Hida Date: Wed Sep 13 01:11:59 2006 -0700 Print out pslq_test information before pslq is run. This way we know the test values even when pslq crashes in the middle. commit ad42f5dc04430d08668600a44b731790b9ed86d1 Author: Yozo Hida Date: Wed Sep 13 01:09:37 2006 -0700 Remove reference to n in pslq_test. This is no longer used. commit 078e87a4754ad441dd3dcf01dd8744491f5f3c64 Author: Yozo Hida Date: Wed Sep 13 01:01:22 2006 -0700 Make numeric_limits inherit numeric_limits publicly. This way all the numeric_limits constants are also inherited. commit 1d0892513029e9091ca64556cdf337016e4bdaeb Author: Yozo Hida Date: Mon Sep 11 06:29:01 2006 -0700 Use QD_ISNAN and QD_ISINF in bits.cpp. Also removed extraneous defines. commit 0e8e475d2a6c6258a6220241484783bfbcd6a348 Author: Yozo Hida Date: Mon Sep 11 06:18:26 2006 -0700 Update pslq_test. * increase default max iteration count * print out the root r * increased the threshold for residual to 10 times error bound * removed obsolete -n argument * updated p and q values for testing (so that they are within reach of each precision) * print out summary of test results commit 56e3a8d93776501eb50c6846b1203b50e38d35e8 Author: Yozo Hida Date: Mon Sep 11 05:53:55 2006 -0700 Set _ndigits to 31 and 63 (instead of 32 and 64). commit 62d462064b33656186c52ab837aa445757d0cdb3 Author: Yozo Hida Date: Mon Sep 11 05:51:20 2006 -0700 Added constants digits and digits10 to numeric_limits for dd_real/qd_real. commit 4b202990c59d3c9dab693f3d210688b27f0945b5 Author: Yozo Hida Date: Mon Sep 11 04:51:45 2006 -0700 Use ax_cxx_isxxx macros for isinf, isnan, and isfinite. These macros will determine which namespace (if any) these C99 functions are declared in. If it is not found, it defaults to a custom macro. commit dfc92915dd0ef58370468d766ff55303a413cc1f Author: Yozo Hida Date: Mon Sep 11 02:59:07 2006 -0700 Use isnan, isinf, and isfinite in global namespace instead of std namespace. Since these are not C++ functions, they may not be in std namespace. commit 6ca92a72753f7e254461b46e813cc94e4a116986 Author: Yozo Hida Date: Mon Sep 11 02:21:50 2006 -0700 Added isinf, which checks whether the first element is infinite. Modified configure.ac to detect C99 isinf and uses it if available. It defines QD_HAVE_ISINF if it is available. Otherwise it uses the macro ( (x) != 0.0 && (x) == 2.0 * (x) ) commit 41c677c04662be069b85e91001d2ff6da1b691be Author: Yozo Hida Date: Mon Sep 11 02:15:41 2006 -0700 Remove detection of finite() function. This is now replaced by isfinite(), which is a C99 function. commit 9db7bb457443b923ffcc1ba7f7dbda8b37371480 Author: Yozo Hida Date: Mon Sep 11 02:14:35 2006 -0700 Added isfinite, which checkes whether the first element is finite. Modified configure.ac to detect C99 isfinite and uses it if available. It defines QD_HAVE_ISFINITE if it is available. Otherwise it uses the macro ((x) == 0.0) || ((x) != (2.0 * (x))). commit bf18d7a844dc4fe87622a36aaa19e3c773937b11 Author: Yozo Hida Date: Mon Sep 11 02:05:02 2006 -0700 Use QD_HAVE_ISNAN instead of HAVE_ISNAN in bits.cpp. commit 1baf4392475e785e30f05a018becb826a899d9a1 Author: Yozo Hida Date: Mon Sep 11 02:03:04 2006 -0700 Include bits.cpp as source even --enable-debug is set. bits.cpp contain useful debugging functions that should be available (without performance slowdown) even when debugging is disabled. commit b905e191624322e08a9d2903fdfaefddd3726aa4 Author: Yozo Hida Date: Sun Sep 10 23:01:08 2006 -0700 Support output of NaNs. commit a67f54379eb5aec9bb486c7b7852c7c29c9df169 Author: Yozo Hida Date: Sun Sep 10 22:56:18 2006 -0700 Added isnan function. This uses the QD_ISNAN macro, which is defined to be std::isnan if C99 isnan is available. If isnan is not available, it does (x) != (x). commit 8a8e169241e8df8f2014a3691a13c44540cd68ab Author: Yozo Hida Date: Sun Sep 10 21:51:11 2006 -0700 Make pslq_test residual test more lax by factor of 2. commit a60d2bf66e4f4a98f039eb8bd6913fb8e4aebd08 Author: Yozo Hida Date: Sun Sep 10 21:44:11 2006 -0700 Added couple more tests to pslq_test. Test different p, q values as well. commit 37a44582ac537351c997849ae5f25bbc0dd894ba Author: Yozo Hida Date: Sun Sep 10 21:48:44 2006 -0700 Prettify the output of pslq_test. commit 29997b9b4e3dab9efb850bf2ff4ae1f33295dea3 Author: Yozo Hida Date: Sun Sep 10 21:14:22 2006 -0700 Remove unused polyroot template function in pslq_test. commit b5b053a969d074eb84b0e5ccc2f8b04db310ff15 Author: Yozo Hida Date: Sun Sep 10 21:07:34 2006 -0700 Change pslq_test to use 2^(1/p) + 3^(1/q) instead of random polynomial. This removes the randomness of the test and avoids failure of Newton's iteration in polyroot function. commit e3ef2b7df06996dcb157c21cc9d7ec6361cb0746 Author: Yozo Hida Date: Sun Sep 10 20:04:56 2006 -0700 Add running error bound to polyeval in pslq_test. commit 360de7f3aabeabb9050b628e9710feb2ae8f2568 Author: Yozo Hida Date: Sun Sep 10 19:34:12 2006 -0700 Use more sane defaults to pslq_test. Use eps = numeric_limits and max_iter = 10000. commit ac7246a093712fbbb9c04114d1cada05b1e03deb Author: Yozo Hida Date: Sun Sep 10 03:41:19 2006 -0700 polyroot and polyeval does not need to be declared friends. Prototype of polyeval was added. commit 8225b9263e62abd08bc90b36da9652f63baa8eb3 Author: Yozo Hida Date: Sun Sep 10 03:21:22 2006 -0700 Update TODO. commit a1943e93417dca6538c5fd479b1d84805bbf6277 Author: Yozo Hida Date: Sun Sep 10 03:15:31 2006 -0700 Change stopping criteria of polyroot to max(abs(coeff)) * eps. This allows for large or small polynomial coefficients. commit ec2132fcb79c39074a682acb962766d7af798468 Author: Yozo Hida Date: Sun Sep 10 02:32:57 2006 -0700 Update TODO. commit 52dd9fe47ce89d96b1708e7d0e513ebdba902c25 Author: Yozo Hida Date: Sun Sep 10 02:01:00 2006 -0700 Use numeric_limits::epsilon in cpp/pslq_test. commit 1bfadc76ae152c461bf0ebd7c092c00961a2a728 Author: Yozo Hida Date: Sun Sep 10 01:58:02 2006 -0700 First try at implmenting numeric_limits for dd/qd. commit dc0799654ccba30b7101cb599fc0b81eab70560d Author: Yozo Hida Date: Sun Sep 10 07:13:24 2006 -0700 Remove randomness from pslq_test. commit 0461d1f5557eb6b8f54799594121da35b3d54b3d Author: Yozo Hida Date: Sat Sep 9 23:49:17 2006 -0700 Return _nan when polyroot fails to converge. commit b09b2bb8be34c846a97a8009f9c751aefefeb4e7 Author: Yozo Hida Date: Sat Sep 9 23:47:37 2006 -0700 Added max_iter parameter to polyroot. commit e590c35b09293372989be280e445d5644e85a828 Author: Yozo Hida Date: Sat Sep 9 23:42:08 2006 -0700 Use _eps as default threshold parameter to polyroot. commit 513e14169bf5fd1c89dabf74289c9957a97183a5 Author: Yozo Hida Date: Sat Sep 9 23:37:37 2006 -0700 Use static_cast instead of C-style cast in polyroot. commit 0733dc6b65867c5f4d9b403e17d8fa6611b7b6c0 Author: Yozo Hida Date: Sat Sep 9 22:26:45 2006 -0700 Use libqd.a and libqdmod.a directly instead of relying on -llib format. This allows automake to keep track of changes in the library archive and re-link when necessary. commit da29b2da296160105b149a236b31823fc2bfa80d Author: Yozo Hida Date: Sat Sep 9 17:11:41 2006 -0700 Added phony targets to .PHONY in Makefile.am. commit 006d21fe3a4bffa112e707bdf7bbba94f0d3aa4d Author: Yozo Hida Date: Sat Sep 9 17:07:49 2006 -0700 Added cpp-demo and demo targets. cpp-demo target makes all the C++ programs in the tests directory. demo target creates both fortran-demo and cpp-demo. commit 2f1f40db1da24b3d66c7911e0ac4d5e9f6d5dee0 Author: Yozo Hida Date: Sat Sep 9 17:06:57 2006 -0700 Make quadt_test use tictoc.h instead of the old timer.h. commit fa397e66ce9b9440d544bfcf081fe3f24147a1c4 Author: Yozo Hida Date: Wed Aug 30 22:57:40 2006 -0700 Drop libtool use for now. Libtool was causing some problems with Solaris and Apple systems. Shared library is not particularly useful for qd since big portion of the code is inlined to use programs anyways. commit 78905da37d99bfdb2c6cae3be9f4423bae6a8099 Author: Yozo Hida Date: Wed Aug 30 22:25:06 2006 -0700 Updated config.guess and config.sub with latest version (2006-07-02). commit 6de1f531d0a4455f2829d09f7b1be04c339e3460 Author: Yozo Hida Date: Tue Aug 29 06:03:07 2006 -0700 Added x86_64 Intel compiler support. commit 23f25f8410935cf1a12753e399c5ce7171ff8597 Author: Yozo Hida Date: Tue Aug 29 06:02:06 2006 -0700 Combine cases for ia64 and x86 intel compilers in configure.ac. commit 553976f1264b21ea15d90435a49a4db750616c8d Author: Yozo Hida Date: Sat Sep 2 15:54:32 2006 -0700 Update routine name in the error messages in to_digits. It was referring to the old routine name to_str. commit 6124549941f4048aa935404081eba3771d0500c7 Author: Yozo Hida Date: Thu Aug 24 02:45:17 2006 -0700 Updated custom m4 macros to start with AX prefix. commit 4c4b3dedeb4c9edfcc6e84dcda0475eac957d562 Author: Yozo Hida Date: Thu Aug 24 02:20:39 2006 -0700 Added compiler option to --enable-fma. This mode assumes the compiler generates correct code. Few minor cleanups. commit 93043441d62d1dcb6663e2d04f8652355f38acca Author: Yozo Hida Date: Tue Aug 22 21:36:58 2006 -0700 Added --enable-fma=gnu option. This uses GCC's __builtin_fma. commit d0336488d0f873432eda624bcf54d63d1e8830ab Author: Yozo Hida Date: Tue Aug 22 21:30:34 2006 -0700 Only check for IBM __fmadd and gcc __builtin_fma for fma. Using C99 fma with Apple/gcc-3.3 causes some problems. commit 30120363687723a35c685ef8a2c778118ee565c0 Author: Yozo Hida Date: Tue Aug 22 20:44:34 2006 -0700 Look for gcc's __builtin_fma when looking for fma functions. commit 4631339b71c6c7b516e68e284577f6710b2049f6 Author: Yozo Hida Date: Tue Aug 22 16:40:09 2006 -0700 Stop searching for fma at the first available function. commit 69b3a0791511b95e39c9f6c9d8a3b35c0ef92a6f Author: Yozo Hida Date: Tue Aug 22 16:28:18 2006 -0700 Split fma detection in configure.ac into m4/acx_cxx_fma.m4. commit e3502f6036ac4ac2f6f3ba61285fceae7179891e Author: Yozo Hida Date: Tue Aug 22 15:39:21 2006 -0700 Attempt to use C99 fma on powerpc platforms (for xlC use __fmadd). commit 01ce98cebfc3f88edf41a16b28e9753fae3b87fb Author: Yozo Hida Date: Tue Aug 22 15:22:48 2006 -0700 Try to test correct rounding of fused multiply-add/subtract. commit 084b36358403ea670e28540a12d6a7b82792cc31 Author: Yozo Hida Date: Tue Aug 22 00:07:21 2006 -0700 Clean configure output regarding fma and fms. commit 6f2eb6b4f6948aeffea14d66c790e24072d88e2b Author: Yozo Hida Date: Mon Aug 21 23:52:58 2006 -0700 Initialize fms="none" in configure script. commit b8a974e9e6958aa855fd24e88b29b9be93ddc789 Author: Yozo Hida Date: Mon Aug 21 23:01:43 2006 -0700 Added QD_FMS to include/qd/qd_config.h.in. commit 82c8e41755046f5802aa3b394fedb042b81054d1 Author: Yozo Hida Date: Mon Aug 21 22:29:34 2006 -0700 Print out fms macro at the end on configure. commit cbdd2a5176fbe8ed71d8c1ce06d6be9fe3afbb73 Author: Yozo Hida Date: Mon Aug 21 22:23:47 2006 -0700 Use fused-multiply subtract (instead of fma) if available. Using fms is more straightforward than using fma directly. Of course, fma can be used by fma(x, y, -z) if fms is not available. commit a7f86187fd55c77202fc90b7995cc4f73d36adf1 Author: Yozo Hida Date: Mon Aug 21 21:53:50 2006 -0700 Add arguments to the QD_FMA macro. Instead of just declaring QD_FMA, add x, y, z arguments so that QD_FMA(x, y, z) computes fl(x * y + z). commit 35ceb33b80d01e18c0d5c0da8050d4ec42718e00 Author: Yozo Hida Date: Sun Aug 20 05:04:46 2006 -0700 Delete space around assignment in configure.ac. commit a6ac7e70435ff394517255bf01c40c5ed2820a1e Author: Yozo Hida Date: Sun Aug 20 02:43:25 2006 -0700 Take the best time out of 3 in qd_timer. commit e68f8e49a8ca86d581d0029463cfb0c3c997e357 Author: Yozo Hida Date: Sun Aug 20 02:12:42 2006 -0700 Reduce minimum time in qd_timer to 0.05 seconds. commit e6f635239382b9d2e54221af66687d2b694923c2 Author: Yozo Hida Date: Sun Aug 20 02:06:12 2006 -0700 flag_verbose can be declared static in qd_timer.cpp. commit f9e1e027e7cea084c2d4cf22a7c7042a4369f512 Author: Yozo Hida Date: Sun Aug 20 02:00:03 2006 -0700 Use appropriate compiler options for VisualAge compiler on Apple. commit 75b5bf4167c27ccf8ce911dcb9fbf136d8fdc8b4 Author: Yozo Hida Date: Sun Aug 20 01:59:29 2006 -0700 Renamed timer.{h,cpp} to tictoc.{h,cpp}. The struct TimeVal renamed to tictoc as well. commit 13d93e05b22a1855756a86168fd10c088ace8171 Author: Yozo Hida Date: Sun Aug 20 00:30:13 2006 -0700 Update --enable-fma configure option to include c99, none, and auto. auto detects IBM VisualAge C++ builtin __fmadd function. c99 attempts to use C99's fma function. commit 1ec752ad9ce671eb825b9cc027a51b729a285689 Author: Yozo Hida Date: Sat Aug 19 17:24:31 2006 -0700 Move renormalization routine into qd namespace. commit 1e69ce1396d58183e52026d423c65e6d61ff78b1 Author: Yozo Hida Date: Sat Aug 19 16:59:54 2006 -0700 Make both sloppy and accurate versions of div and mul available. Added sloppy_{div,mul} and accurate_{div,mul}. Previously a compile-time define was used to pick one, and the other was not available. Since operator overloaded function is inlined, it can be overridden by the user by re-defining QD_SLOPPY_DIV and QD_SLOPPY_MUL. commit 3e97f5ee36a600f17a410f66abed243a7b34c979 Author: Yozo Hida Date: Fri Aug 18 20:51:57 2006 -0700 Added ieee_add and sloppy_add for additions. Instead of just having one version depending on QD_IEEE_ADD, include both as standard routines. The overloaded operator will choose the appropriate one (at compile time) depending on whether QD_IEEE_ADD is defined. commit 4c67625a428a366620db2d6357b93a1b650d1975 Author: Yozo Hida Date: Sat Jul 15 04:40:21 2006 -0700 Use datarootdir instead of datadir in qd-config.in. commit e5a8f777be583580eb31fb1c2415c292cb6b40e7 Author: Yozo Hida Date: Sat Jul 15 03:32:06 2006 -0700 Updated fortran/.gitignore to include demo programs. commit a44f0018d83eea5715522ee0b249abafa31939ce Author: Yozo Hida Date: Sat Jul 15 03:31:07 2006 -0700 Removed reference to erfc in tquadtsq2d, it is not used. commit 22aedd0723951c81f4e684c3986b71f791a5c659 Author: Yozo Hida Date: Sat Jul 15 02:19:26 2006 -0700 Renamed fortran_test to f_test. commit 0d970ce78d44f24f830c2d899754a7aeb0906f36 Author: Yozo Hida Date: Sat Jul 15 02:12:08 2006 -0700 Emit error message when making f95 programs without f95 compiler. commit 734925596a0a53d6d351ba3d4fc27996d36b38ee Author: Yozo Hida Date: Sat Jul 15 00:56:36 2006 -0700 Added several f95 compilers, re-order fortran compiler list. commit 05d3d714ea287bf35d422e9b27d4bf22a2ab25b8 Author: Yozo Hida Date: Sat Jul 15 00:54:45 2006 -0700 Use default compiler search order for cygwin, added pathCC compiler. commit 95ca56edf04e910679e840e1426b1cbaaecf83cf Author: Yozo Hida Date: Thu Jul 13 07:33:48 2006 -0700 Don't put merges in config/makedist.sh. commit 3db582bbb732a437a1214a2574377f4b46b0c5ab Author: Yozo Hida Date: Thu Jul 13 07:23:23 2006 -0700 Use GetTickCount() for timer in Windows. MSVC++ does not have gettimeofday so use Win32 API GetTickCount to get subsecond accuracy (~10ms resolution). commit 723c421c4b2b6f7cce50ba1a928d8e4f31891ef4 Author: Yozo Hida Date: Thu Jul 13 07:10:42 2006 -0700 Add quadt_test to tests/.gitignore. commit a2c2919670bc920b25a12c3e231ec7600caf415b Author: Yozo Hida Date: Thu Jul 13 07:08:53 2006 -0700 Added time target to the toplevel Makefile. commit 6bb2e8eaac16fe1a95459a1d521e820d97294544 Author: Yozo Hida Date: Thu Jul 13 07:04:14 2006 -0700 Added more .gitigore entries. commit 9f0e2ffdb111104f820a4dc948928336f2f2a961 Author: Yozo Hida Date: Thu Jul 13 13:34:30 2006 -0700 Emit QD_API symbol in include/qd/qd_config.h.in. This makes it more compatible with MSVC++ sources. commit 5b6aee8d8938f203a4577b28d268d37144bf18ab Author: Yozo Hida Date: Thu Jul 13 12:42:48 2006 -0700 Added QD_API prefix to visible routines. This helps create a windows DLL by identifying which routines to export. (cherry picked from 832294f8ebd22593cb743e29cb5ec8e8bfa2f750 commit) commit b3f754ef4ca34d3aed46895d85f2f4cf3c39615d Author: Yozo Hida Date: Thu Jul 13 12:02:05 2006 -0700 Use numeric_limits::quiet_NaN instead of C99 nan() function. This seems to be more widely available among C++ compilers. commit 7c83a6e4fc0f4f9593d44c82d894d7efbdfc60ad Author: Yozo Hida Date: Thu Jul 13 07:22:01 2006 -0700 Added .gitignore files. commit 1cd82e0aca302dbd7d64d96dbae59865ed345dbe Author: Yozo Hida Date: Thu Jul 13 06:54:39 2006 -0700 Create ChangeLog in config/autogen.sh. commit c368186839b28f2c4567f9905dc7263edc984d67 Author: Yozo Hida Date: Sun Jun 18 15:29:35 2006 -0700 Removed gnu-arch related files. commit ea38d63d3558a8e10e14f427b043f4f6723ec80e Author: Yozo Hida Date: Sun Jun 18 05:38:39 2006 -0700 Migrate distribution making process from gnu-arch to git. Use "git log" to generate ChangeLog. Always require patch-level argument to config/makedist.sh. Removed pristine target in Makefile.am. commit f653c8ab9f8264bc70b90930c2d1941f1e4d7b33 Author: Yozo Hida Date: Sun Jun 18 05:28:51 2006 -0700 Don't generate ChangeLog during config/autogen.sh. commit 68051de3294e3da829fb23d7882f958af18ca54e Author: Yozo Hida Date: Sat Jun 10 10:47:08 2006 +0000 Added quadt_test to CLEANFILES in tests/Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-214 commit 08cd8bc1ba9043e0d96228f30175236bf8033dbc Author: Yozo Hida Date: Fri Jun 9 14:42:50 2006 +0000 Update README to reference qd_timer and quadt_test. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-213 commit bab802fa51a66f57933b7ab46d8f9c9c06b925ec Author: Yozo Hida Date: Fri Jun 9 14:40:10 2006 +0000 Added quadt_test as target in tests directory. * Added quadt_test to EXTRA_PROGRAMS in tests/Makefile.am * Renamed quadt.cpp to quadt.h since this is a file that is included by quadt_test.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-212 commit 524f277fb715abc441d568ffffca80d381e1a1c1 Author: Yozo Hida Date: Tue Jun 6 22:30:44 2006 +0000 Updated automake config/ files to 1.9.6. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-211 commit a1bfb7541c637d67bb1d376eb02afc20733cec78 Author: Yozo Hida Date: Tue Jun 6 07:32:14 2006 +0000 Return exponent of zero for 0.0 in to_digits. * src/dd.cpp, src/qd.cpp: Make to_digits set exponent to zero when dealing with zero. Previously it was not set at all. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-210 commit 78d8250ecb6b1ccaa9506017c8d60e69790172ad Author: Yozo Hida Date: Tue Jun 6 07:20:46 2006 +0000 Fixed to_digits to handle unsigned char case. * src/dd.cpp, src/qd.cpp: Function to_digits assumed char to be signed. On some systems / compilers char is unsigned, causing problems when a digit was negative (can happen due to roundoff). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-209 commit 7cacc94dce1f75d7e68f1e8d41c57d088d492115 Author: Yozo Hida Date: Sat Jun 3 04:23:42 2006 +0000 Fix bug in handling of zero in to_digits (dd.cpp and qd.cpp). * dd.cpp, qd.cpp: In to_digits function, fix handling of zero. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-208 commit 7893fe900bb6d70af59b5d18799912dadafefe00 Author: Yozo Hida Date: Fri Jun 2 23:49:43 2006 +0000 Detect all blank lines in qdinpc and ddinpc (in fortran). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-207 commit 2764b8c4bc670f0e505a1028235bb44e997b7750 Author: Yozo Hida Date: Fri Jun 2 23:47:18 2006 +0000 Clean up fortran codes (eliminate most compiler warnings). * Eliminated most compiler warnings from ddmod.f and qdmod.f. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-206 commit 11cf6712240bf8fc152099c06c45407f6df744b2 Author: Yozo Hida Date: Fri Jun 2 23:06:08 2006 +0000 Rename all fortran files with .f suffix (instead of .f90) suffix. * Renamed all fortran files with .f suffix (instead of .f90) suffix. * Appropriate changes in configure.ac and Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-205 commit 26ea6bbf5f6d91c8c53ac3969b6be83da6c70048 Author: Yozo Hida Date: Fri Jun 2 22:28:08 2006 +0000 Pass "0" to nan function, instead of NULL. * include/qd/inline.h: passing NULL as string to nan causes segfaults on some systems. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-204 commit 61567ef469ff19bdbf941462d984924cdc6aa31f Author: Yozo Hida Date: Fri Jun 2 22:21:55 2006 +0000 Use nan() function if available. * include/qd/inline.h: Use nan() function if available instead of 0/0. * configure.ac, include/qd/qd_config.h: Detect whether nan() is available. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-203 commit cab4e380a1688498364c5cd29f4ab578578a84e8 Author: Yozo Hida Date: Sat May 27 06:01:24 2006 +0000 Cast to unsigned int when calling s.insert. * src/dd.cpp, src/qd.cpp: Cast to unsigned int when calling s.insert. Sun SUNWspro 9.0 compilers were complaining about this. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-202 commit 3c1f865cfd5f11c3c793b8f3ed4c4ed528eaedda Author: Yozo Hida Date: Fri Mar 10 09:22:22 2006 +0000 Output offending string during illegal input in qdinpc. * If qdinpc or ddinpc encounters an illegal syntax, output the offending string. Helpful for debugging. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-201 commit 6bd35e58d53fc65432a63f556d8724c9ba6c007e Author: Yozo Hida Date: Wed Feb 22 00:07:26 2006 +0000 Added qd-to-qd copying to qdreal interface (and similar for dd). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-200 commit 3cad2b3189066b088c4598237500905e3630007b Author: Yozo Hida Date: Sat Feb 18 05:01:57 2006 +0000 Change name of constant qd::qd_nan to qd::_d_nan. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-199 commit b719fb312cea7c2f7a148bd9d03b1c04736d18e6 Author: Yozo Hida Date: Sat Feb 18 04:15:44 2006 +0000 Fix routine names in error messages. * dd_real::polyroot routine should use dd_real instead of qd_real as class name. * qd_real::sqrt should use qd_real as class name. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-198 commit ef6b9266f919e2e3da936b2b48f3f5f2af20a37d Author: Yozo Hida Date: Sat Feb 18 04:09:49 2006 +0000 Emit error message for qd_real square root of negative numbers. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-197 commit c09be805500e00b424338d99682cc2d208591c29 Author: Yozo Hida Date: Sat Feb 18 03:54:00 2006 +0000 Added dd_real::_nan and qd_real::_nan. * Currently a rather naive way of just assigning 0.0 / 0.0. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-196 commit 38f2a0313bd44ff43dda9d62619dfb33b69dec04 Author: Yozo Hida Date: Sat Feb 18 03:37:14 2006 +0000 Make abort() do something more sensible than calling exit(). * abort() now prints out the error message but does not call exit. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-195 commit c6961ad09c1687fdbda17f545ae1e8f36dd7f1bb Author: Yozo Hida Date: Sat Feb 18 03:02:49 2006 +0000 Use ax_f90_module_flag macro to figure out the flag to specify module directories. * Instead of relying on $host, actually test what flags to use to specify module directories. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-194 commit f42ddff487707865c5e1e4c3feb237081f5393fe Author: Yozo Hida Date: Sat Feb 18 02:27:56 2006 +0000 configure now supports differing module file names. * Added m4/ax_f90_module_style.m4, which detects module file naming style (currently upper/lower case and the extension). The macro is based on ax_f90_module_extension.m4 found in autoconf-archives. * configure.ac modified to use this macro, extract out the upper/lower case and the extension. * fortran/Makefile.am modified to name DDMOD and QDMOD variables accordingly. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-193 commit 4857d1952197a5b6ec4c27df5f20f2820015dcb7 Author: Yozo Hida Date: Fri Feb 10 11:01:21 2006 +0000 Make qdread and ddread ignore extra characters at the end. * This is more consistent with read statements in fortran. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-192 commit 5ac2ca25a09381dff5c44867487e20be3decfb17 Author: Yozo Hida Date: Thu Feb 2 08:17:38 2006 +0000 Added sign(dd, d) and sign(qd, d) fortran interface. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-191 commit ff70b60fcbf8685f209985d2ff56c606342031ad Author: Yozo Hida Date: Thu Feb 2 08:13:33 2006 +0000 [fix] Fix ddsign and qdsign in fortran module. * In call to sign(a, b), it was comparing b to a, instead it needs to compare b to zero. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-190 commit 9de4717931e7c68c79504d844b07a68598127fae Author: Yozo Hida Date: Wed Jan 25 18:52:17 2006 +0000 Added epsilon, huge, and tiny function to fortran interface. * fortran/ddmod.f90, fortran/qdmod.f90: Added epsilon, huge, and tiny interface. Renamed qdeps to d_qd_eps, the double precision version of epsilon. Added constants qd_huge, qd_tiny, and qd_eps. Similar changes to ddmod.f90. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-189 commit e05b7b9602022b6bd79200d8bf599aff20c7cd4d Author: Yozo Hida Date: Tue Jan 24 21:09:07 2006 +0000 Include call to fpu_fix_start in fortran/main.cpp. * Call fpu_fix_start in fortran/main.cpp so that the fortrain main subroutine (f_main) does not need to explicit call it. This can be overridden by providing one's own main function if desired. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-188 commit 6c395f5392edccf241073df39d4b00c1d4f9c7bb Author: Yozo Hida Date: Sat Jan 21 05:34:54 2006 +0000 Added nint function fortran interface. * fortran/ddmod.f90, fortran/qdmod.f90: Added nint function. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-187 commit d191cb5e15eeceed3ee4aa9c7f045d0f60bd95cb Author: Yozo Hida Date: Sat Jan 21 05:20:25 2006 +0000 Added comparison to integers to fortran interface. * fortran/ddmod.f90, fortran/qdmod.f90: Added comparison to integers. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-186 commit 86e5fce9ec2a1a00af9e8ead5f7f5381dcf613a1 Author: Yozo Hida Date: Fri Jan 20 20:36:13 2006 +0000 Added more general min / max to fortran interface. * fortran/ddmod.f90: Added more general min and max function. qdmin2 computes the min of two dd numbers, while qdmin now accepts up to 9 arguments. * fortran/qdmod.f90: Similar change as above. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-185 commit d970b393f1067e613615164bbbac30d48a685fcc Author: Yozo Hida Date: Fri Jan 20 20:24:26 2006 +0000 Added conversion to integer in fortran interface. * fortran/ddmod.f90: Added conversion to integer to_int_dd. * fortran/qdmod.f90: Added conversion to integer to_int_qd. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-184 commit 6536c46f85727ef39315b7ace90235c0d3416798 Author: Yozo Hida Date: Fri Jan 20 20:20:11 2006 +0000 Added log10 interface to fortran interface. * fortran/ddmod.f90: Added log10 interface to call ddlog10. * fortran/qdmod.f90: Added log10 interface to call qdlog10. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-183 commit 305ad3fc80f2246725711829531a1aabe6dad807 Author: Yozo Hida Date: Fri Jan 20 20:16:05 2006 +0000 Added integer-dd and integer-qd division in fortran interface. * fortran/ddmod.f90: Added integer-dd division div_i_dd and div_dd_i. * fortran/qdmod.f90: Added integer-qd division div_i_qd and div_qd_i. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-182 commit 5ba6f067cc50fd18fe7e66d5a6a8a8d923c9e726 Author: Yozo Hida Date: Fri Jan 20 20:09:55 2006 +0000 Added integer-qd and integer-dd addition for fortran interface. * fortran/ddmod.f90: Added integer-dd additions add_dd_i and add_i_dd. * fortran/qdmod.f90: Aqded integer-qd aqditions aqd_qd_i and aqd_i_qd. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-181 commit 05f3ce7559fd40dbd0392a219354db567987e5f3 Author: Yozo Hida Date: Fri Jan 20 20:04:05 2006 +0000 Make case in fortan/qdmod.f90 and ddmod.f90 consistent. * fortran/qdmod.f90, fortran/ddmod.f90: Use lowercase consistently. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-180 commit 44da77f91eb384ac09382cb2fd0792cdb3563d05 Author: Yozo Hida Date: Fri Jan 20 19:53:17 2006 +0000 Added assignment to and from integers in fortran interface. * fortran/ddmod.f90: added assign_dd_i, assign_i_dd (assignment to and from integers). * fortran/qdmod.f90: aqded assign_qd_i, assign_i_qd (assignment to and from integers). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-179 commit 677320fa3d410fce779f9392f074a6696444b7c1 Author: Yozo Hida Date: Tue Jan 17 08:28:32 2006 +0000 Remove confusion of abs(int) and abs(double). * Some compilers (such as MSVC++ 6.0) do not provide abs(double). Work around this by providing abs(double), or using fabs(double). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-178 commit fc6aa0db318ea1daed5d91deaa0d1a9f757003f5 Author: Yozo Hida Date: Tue Jan 17 08:14:55 2006 +0000 Make bits.cpp use _QD_STD_ABS and similar. * src/bits.cpp: Instead of std::abs, use _QD_STD_ABS (and similar). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-177 commit c97dfc230573f04df8b029d65969efdf0d02ee33 Author: Yozo Hida Date: Tue Jan 17 07:50:50 2006 +0000 Add int-to-bool cast in dd.cpp and qd.cpp. * src/dd.cpp and src/qd.cpp: Added int-to-bool cast where necessary. MSVC++ compiler gave warning about this. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-176 commit 5b07841916a77e629e44b0a2c0b5f48139e7e5bc Author: Yozo Hida Date: Tue Jan 17 07:30:20 2006 +0000 Various changes to make it compatible with MSVC++ 6.0. * MSVC++ 6.0 does not have various C functions in std namespace. (e.g., std::abs, std::exit, std::printf, etc.). These are now declared as macros _QD_STD_ABS, etc., and are conditionally defined to be either abs() or std::abs(). * Need to explicitly cast constant 0 to (int). * MSVC++ 8.0 does not seem to have this problem. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-175 commit 27da6da242135cbcfc9b428c5eb2baf01026b8a5 Author: Yozo Hida Date: Tue Jan 17 07:08:35 2006 +0000 Don't use inline constant initalizer in tests/qd_test.cpp. * tests/qd_test.cpp: some compilers (e.g., VC++ 6.0) does not allow static initializers for class constants. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-174 commit 5551bf2999437b6e1e011addb74497bdb7c3493e Author: Yozo Hida Date: Tue Jan 17 06:48:21 2006 +0000 Use slightly more efficient ldexp at the end of dd_real::exp. * src/dd.cpp: Use mul_pwr2 to multiply by power of two at the end of dd_real::exp(). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-173 commit 1486b861daa189b9d9c63e3e1803d4dd28236e91 Author: Yozo Hida Date: Tue Jan 17 00:30:20 2006 +0000 Don't use inline constant initializer. * include/qd/dd.h and qd.h: some compilers (e.g., VC++ 6.0) does not allow static initializers for class constants. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-172 commit 0c4ca5c6961927ee506448962d10a46be6dbef9d Author: Yozo Hida Date: Tue Jan 17 00:06:48 2006 +0000 Added src/util.h as source for libqd.a. src/Makefile.am: list util.h as a source for libqd.a library. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-171 commit e57735655e4a2a2bb34f4dc989c59d82a1c3ac83 Author: Yozo Hida Date: Mon Jan 16 23:42:36 2006 +0000 Implement fixed format and aligned output. * src/qd.cpp and src/dd.cpp: Added write() routine to C++ routine, now used in operator>>. This now handles fixed format and aligned outputs. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-170 commit e3ebbb89d544b8f1a1109bd55730b51a569545f2 Author: Yozo Hida Date: Sun Jan 15 02:15:20 2006 +0000 Type cast 0 in default parameter. * include/qd/dd.h and include/qd/qd.h: cast 0 into appropriate type in the default parameter. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-169 commit 3dc3a960843dbf9f0284f46f4b9d6d7538208272 Author: Yozo Hida Date: Sat Jan 14 10:14:57 2006 +0000 Added field adjustment to string output. * include/qd/qd.h, include/qd/dd.h, src/qd.cpp src/dd.cpp: write to string routine now correctly aligns the output. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-168 commit aae24e83b6f4095f6b57405df9cd9472ed8c37ba Author: Yozo Hida Date: Sat Jan 14 09:32:05 2006 +0000 Added write to C++ string routines. * include/qd/dd.h, include/qd/qd.h, src/dd.cpp, src/qd.cpp: added write() to C++ string. * Added src/util.cpp and src/util.h that includes append_expn function to add the exponent field in output. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-167 commit b969401a0e4fdad4f9da101106796dc7ff037229 Author: Yozo Hida Date: Sat Jan 14 08:55:22 2006 +0000 Stop using variable sized arrays (non ISO feature). * src/qd.cpp and src/dd.cpp: explicitly allocate and free arrays (instead of variable sized arrays). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-166 commit d1d27439ecc8fdedfade1d89b916c2b4e6daa859 Author: Yozo Hida Date: Sat Jan 14 06:53:35 2006 +0000 Use _ndigits constant instead of 32 or 64. * include/qd/qd.h and include/dd/dd.h: use _ndigits constant instead of hardwiring 32 or 64 in default parameter in output functions. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-165 commit b6ca13b8db1ddcd730c83884a4b62aed32e7c216 Author: Yozo Hida Date: Sat Jan 14 05:44:27 2006 +0000 Added ::to_digits(), restructure ::write(). * Added qd_real::to_digits, dd_real::to_digits. These now return a sequence of digits. * Restructured qd_real::write and dd_real::write to call to_digits, above. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-164 commit 03646227b3a060a672f1af4120d4ea59bac40e20 Author: Yozo Hida Date: Sat Jan 14 03:28:31 2006 +0000 Update qd_test and pslq_test to output different number of digits. * qd_test and pslq_test updated to output different number of digits depending on the precision of the variable. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-163 commit 852719582d9123716f31eae96746a54269ff06cb Author: Yozo Hida Date: Sat Jan 14 03:13:38 2006 +0000 Added ::_ndigits integer constant. * dd::_ndigits and qd::_digits added. These roughly represent the number of digits of accuracy. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-162 commit 346df51ed322142b9e09693f546208472f887e25 Author: Yozo Hida Date: Sat Jan 14 02:58:29 2006 +0000 Added showpos and uppercase options to write(). * Added showpos (show positive sign +) and uppercase (use E instead of e) options to dd::write and qd::write. * cout::operator<< now uses cout format flags (including precision). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-161 commit b1fddc406643058632ec37efebc3ce11b0ca2706 Author: Yozo Hida Date: Fri Jan 13 20:17:15 2006 +0000 Output only required flags for qd-config --cxxflags and --fcflags. * configure.ac: set variable REQ_CXXFLAGS and REQ_FCFLAGS to contain compiler flags required to use the qd package. Don't include optimization flags. * qd-config.in: return only required flags when called with --cxxflags or --fcflags. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-160 commit 36ec400ec2a0f5d14b6ab58e2d3a99c7fd0a7038 Author: Yozo Hida Date: Thu Jan 12 21:13:00 2006 +0000 Added consistent pow interface. * Added pow(a, b) interface, where a and b are both reals (qd_real or dd_real). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-159 commit 33938487a9f718242acb3f565d48aef1bbb5bf7f Author: Yozo Hida Date: Fri Jan 6 20:48:53 2006 +0000 Updated libtool to version 1.5.22. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-158 commit bc70ea1f3c1fbbfc8cde28aa9f3b3fc75da13af4 Author: Yozo Hida Date: Fri Jan 6 20:41:28 2006 +0000 Fix discrepancy in license. * The license is a modified BSD license, but some source had the "commercial use requires a license" blurb. Removed. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-157 commit 2eee7aefd44803f8bb3d82963556325bb223d23a Author: Yozo Hida Date: Thu Dec 15 18:46:31 2005 +0000 Added integer multiplication for fortran interface. * Now integer * qd_real and integer * dd_real are overloaded and should work correctly. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-156 commit 861634392215ea4fd17e3ce707a50d699ad9cc5f Author: Yozo Hida Date: Sun Dec 11 09:00:20 2005 +0000 Added sign function to fortran modules. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-155 commit acb7db731edc43b34d0f4f0ab589cf8c572fe0d3 Author: Yozo Hida Date: Sun Dec 11 08:26:47 2005 +0000 Added qd_one and qd_zero constants (and dd equivalents) to fortran modules. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-154 commit 7efd01cf335a427996aa40999e556703fdd2c4c1 Author: Yozo Hida Date: Fri Dec 2 05:04:14 2005 +0000 Bug fixes in configure.ac to work on older intel compilers. * Added -Vaxlib if intel fortran compiler is detected. * Check for etime after FCFLAGS has been set. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-153 commit 9810066dd5fb21419b9ff38d4af4ec887b49a982 Author: Yozo Hida Date: Thu Dec 1 21:43:40 2005 +0000 Added enable-warnings flag to configure. * Adds -Wall to CXXFLAGS if specified (if using gcc or icc). * Disables several warnings on icc. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-152 commit c3eff80dfd555b17b47899057873100e0338b0c6 Author: Yozo Hida Date: Thu Dec 1 19:42:37 2005 +0000 Removed -wd options from intel compiler. * Older intel compilers does not seem to have these. Ideally we should check whether the compiler accepts them or not. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-151 commit 16899ebfba05a07a2dffff2ee46fe593da4055b1 Author: Yozo Hida Date: Thu Dec 1 06:26:31 2005 +0000 Updated to libtool 1.5.20. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-150 commit a139eb6726a73875da27d6084fc76e08bcbf6246 Author: Yozo Hida Date: Tue Sep 20 05:54:14 2005 +0000 Updated libtool scripts to version 1.5.20. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-149 commit c49e16310ab4a19df2ace972807d9065f877e255 Author: Yozo Hida Date: Sun Sep 18 21:56:10 2005 +0000 Fix abstract in docs/qd.tex. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-148 commit 0a9aa35b0eb6e6c8a5bbfe958dde66e09c918db9 Author: Yozo Hida Date: Thu Aug 25 02:57:28 2005 +0000 Move CC back in compiler search order. * Moved CC towards the end in compiler search order so that on case-insensitive systems it does not pick the C compiler cc (instead of C++ compiler CC). On Sun's this can choose g++ before CC. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-147 commit 57a9c5b4a7c8459660f137d2d642c3b6e581c8c0 Author: Yozo Hida Date: Wed Aug 24 21:13:44 2005 +0000 Restore line accidentally deleted in patch 143. * fortran/ddmod.f90: Restore line 819 that was somehow deleted in patch 143. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-146 commit 7bb459b27f99484a4989cb4ba5fc6b3ac810ea1b Author: Yozo Hida Date: Wed Aug 24 21:03:28 2005 +0000 Updated to latest autotool files (libtool 1.5.18). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-145 commit 171a538a0d920159c61e7bb3303ebbd3c51304e4 Author: Yozo Hida Date: Wed Aug 24 20:59:16 2005 +0000 Fix bug in qdinp in fortran/qdmod.f90. * fortran/qdmod.f90: Fixed small bug in qdinp (merge of DHB's fix.) git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-144 commit 5aa6b3093e9e886dfa64b138ff7962e55eb527a8 Author: Yozo Hida Date: Wed Aug 24 20:55:17 2005 +0000 Added fortran integer-to-qd convertion interface. * fortran/qdmod.f90 fortran/ddmod.f90: added integer-to-qd convertion interface. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-143 commit c765e38418ce837d7dded8a7ea0f641cf79bf350 Author: Yozo Hida Date: Mon May 16 04:59:40 2005 +0000 Add assignment from string to dd. * Added assignment from string to dd dd_real::operator=(const char *). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-142 commit d998c5bb0cf3c87d5a9206ca0b885779707fa0c1 Author: Yozo Hida Date: Mon May 16 04:44:50 2005 +0000 Add assignment from string to qd. * Added assignment from string to qd. Some compilers were complaining about ambiguous conversion. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-141 commit a597d4543dc4b5dd58cc8f27a9a0c2105506e080 Author: Yozo Hida Date: Mon May 16 04:32:26 2005 +0000 Upgrade to libtool-1.5.16. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-140 commit 9140f74b52094805ef527e18c7bd89ec21bb4a92 Author: Yozo Hida Date: Mon May 2 08:23:21 2005 +0000 Update distributed files in config. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-139 commit d4a77bb646cb522231424600039b67e3a91261de Author: Yozo Hida Date: Mon Apr 18 07:55:15 2005 +0000 Fix minor bug in dd_real::sin. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2.2--patch-11 Fix minor bug in dd_real::sin. Fix error checking in dd_real::sin. Should check abs_k > 4 instead of abs_j > 4. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-138 commit d4e95b023ce3a92878e6c5ba47557ea6b550c860 Author: Yozo Hida Date: Mon Apr 18 05:52:30 2005 +0000 Fix comment on default behaviour in qd_test and qd_timer. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2.2--patch-5 Fix comment in qd_test and qd_timer. Fix comment on default behaviour in qd_test and qd_timer. It tests both double-double and quad-double on default. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-137 commit f60369e39eb6ec3a41f1486472703ed40bfc6d9d Author: Yozo Hida Date: Sat Apr 16 01:44:42 2005 +0000 Minor cosmetic changes to README and qd-config.in. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-136 commit e27d25a3befcea523e33835b04d863ef49812a70 Author: Yozo Hida Date: Tue Apr 5 07:12:00 2005 +0000 Add x86_64 as one of platform to enable x86 fpu fix. * Looks like AMD Opteron needs x86 fix, and gets reported as x86_64. * Bug reported by Xuguang Chi. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-135 commit b5f30472e342cab91d5fc8420c627db28b317327 Author: Yozo Hida Date: Wed Mar 30 11:47:44 2005 +0000 Classify autom4te.cache as junk in =tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-134 commit 2fd1a6a0687f6313dc8406977404580d886aedaa Author: Yozo Hida Date: Wed Mar 30 11:44:57 2005 +0000 Rename LICENSE to COPYING. * Follows the recommended GNU practice. * Allows automake to be called without --foreign argument. * Updated config/autogen.sh and README. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-133 commit 63128e7922f35fcf97f21f409fbf45b7178ecd6e Author: Yozo Hida Date: Wed Mar 30 11:39:05 2005 +0000 Make "make clean" remove tests/qd_timer. * Make "make clean" remove tests/qd_timer. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-132 commit 7fd350e78e72e4a32dc121f4122feacd083033a9 Author: Yozo Hida Date: Tue Mar 29 09:58:11 2005 +0000 Get rid or warning in G5 xlC compiler about default parameter. * Get rid or warning in G5 xlC compiler about default parameter. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-131 commit 92e743cbc3779a7f23b4aecae2e6924186ff0b8d Author: Yozo Hida Date: Tue Mar 29 08:44:49 2005 +0000 Don't include fortran/second.f90 in distribution. * Move second.f90 to nodist_xxx_SOURCES so that it is not included in the distribution. This file is generated by configure. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-130 commit b8a4c9d1c6b8129f9f450bab0d5e3a245576fe9b Author: Yozo Hida Date: Tue Mar 29 08:17:15 2005 +0000 Minor tweak in INSTALL file. * Mention fortran-demo target in toplevel Makefile.am. * Mention qd_test and pslq_test is a good demo C++ program. * Fix up duplicate item numbers. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-129 commit 68421cdd707e9d156647c2aa5fee064191ed1294 Author: Yozo Hida Date: Tue Mar 29 07:30:52 2005 +0000 Fix up =tagging-method, add .arch-inventory files. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-128 commit 109b7692c2597c270067c366babba9c23d8b9f1c Author: Yozo Hida Date: Tue Mar 29 06:59:27 2005 +0000 Add fortran-demo target in toplevel Makefile.am. * Added fortran-demo in toplevel Makefile.am. This just goes into fortran directory and calls "make demo". git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-127 commit 66f2164cdb0bf646c1d45ab6692e9149c1222c9a Author: Yozo Hida Date: Tue Mar 29 06:43:44 2005 +0000 Add more blurb about Cygwin problem in INSTALL. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-126 commit 7f739b3bafe390bbd72af3cb963a814198cf8cdc Author: Yozo Hida Date: Sun Mar 20 09:34:28 2005 +0000 [Fix] Set ddeps and qdeps. * qdmod.f90, ddmod.f90: ddeps and qdeps now declared as real*8 and appropriate value assigned. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-125 commit 4683b7923556be6d77dfde0d725a5835fbf62260 Author: Yozo Hida Date: Sat Mar 19 22:05:16 2005 +0000 Fix: use qdreal() for conversion in fortran_test. * fortran_test.f90: use qdreal(x) instead of qd_real(x) to convert double to qd_real type. The latter makes an inconsistent qd_real data for some reason. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-124 commit 22c368f8d53483d7a8ff6c5c9c766337492041af Author: Yozo Hida Date: Fri Mar 18 09:30:15 2005 +0000 Add appropriate flags for icc compiler on ia64. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-123 commit 63c35ef22607171e86dff4aecd80565dc340aadb Author: Yozo Hida Date: Fri Mar 18 08:39:02 2005 +0000 Standardize fortran 2D quadrature program names. * fortran/Makefile.am: Standardize fortran 2D quadrature program names. Use quaderq2d and quadtsq2d. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-122 commit d3023eb14effcbb6507c0659a7ca722d701fc6cd Author: Yozo Hida Date: Fri Mar 18 08:32:50 2005 +0000 Add ACLOCAL_AMFLAGS to toplevel Makefile.am. * Added ACLOCAL_AMFLAGS variable to toplevel Makefile.am. Passes '-I m4' to aclocal if called by automake dependency tracking. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-121 commit ed5e6aedf9d759a0d64a7fb61b50324a4ff1bffd Author: Yozo Hida Date: Fri Mar 18 08:14:15 2005 +0000 Use std::atan2 when calling double precision version. * dd.cpp, qd.cpp: in dd/qd atan2, use std:: prefix when calling the double precision version. This was causing an infinite recursion on alphaev6-unknown-linux-gnu platform with compaq cxx compiler. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-120 commit 8447680d85aa1c0ddd2dfebd42a62dafa3f531d3 Author: Yozo Hida Date: Thu Mar 17 17:33:59 2005 +0000 Don't #include bits.h if QD_DEBUG is not set. * dd.cpp, qd.cpp: #include only if QD_DEBUG is set. * qd_inline.h: remove unneeded #include git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-119 commit 25d115c718f2c34cb359ee701e01990178d2510c Author: Yozo Hida Date: Thu Mar 17 17:15:06 2005 +0000 Backout patch-111 that removed QD_DEBUG. * The file bits.cpp doesn't compile one some platforms, avoid compilation (unless --enable-debug) is specified for now. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-118 commit 86477e2f0c601a5674f3778940fa27f3addcf7fa Author: Yozo Hida Date: Thu Mar 17 10:19:26 2005 +0000 Use correct exe names in fortran/Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-117 commit 512649af1c34ea2f648d82c166624c36f721710b Author: Yozo Hida Date: Thu Mar 17 10:15:38 2005 +0000 Install README to docdir. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-116 commit 6f063daff4fb311317b70a61f4f07bc608a0cdff Author: Yozo Hida Date: Thu Mar 17 10:10:46 2005 +0000 Update docs/Makefile.am to install qd.ps. * Install qd.ps in ${prefix}/share/doc/qd/. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-115 commit af05adf7b423de06bf1e7b6a5adc533a3c568597 Author: Yozo Hida Date: Thu Mar 17 08:04:58 2005 +0000 Classify tests/qd_timer as EXTRA_PROGRAMS. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-114 commit a04e273e1073c6f0b607c1954012e868176c8371 Author: Yozo Hida Date: Thu Mar 17 07:45:14 2005 +0000 Change c_xx_read to accept C-style strings. * Remove the slen parameter to c_xx_read, use the null-terminated C-string. This was a vestige from time when C interface was used for Fortran interface. * This changes the external C interface, but hopefully no one was using the clumsy old one... git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-113 commit 4b776368c0e212af02380d84fcf6fb2e318a445d Author: Yozo Hida Date: Thu Mar 17 07:22:27 2005 +0000 Use std namespace for sprintf and printf. * Use std namespace for sprintf and printf. These are used in debug routines in dd.cpp and qd.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-112 commit 6eba4d7e32def5a8fcb2702a8cd5b720555daadf Author: Yozo Hida Date: Thu Mar 17 07:12:13 2005 +0000 Remove QD_DEBUG ifdefs. * Remove QD_DEBUG ifdefs, since these did not affect performance. This adds various debugging routines. * Remove decision making in Makefile.am based on QD_DEBUG. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-111 commit 6b8a3dc546d92575cf6e208a862cc278931516e0 Author: Yozo Hida Date: Thu Mar 17 06:54:17 2005 +0000 Reverse the logic of QD_DEBUG in include/Makefile.am. * The logic was reversed. Now installs bits.h only if debug is specified. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-110 commit 224f46f9550278e8ea8d9321bd7d6ac20442f935 Author: Yozo Hida Date: Thu Mar 17 06:33:42 2005 +0000 Fix a bug in qdinpc in qdmod.f90; test case in fortran_test. * qdmod.f90: Fix bug (reported by M. Bibby) where a qd_real variable's fourth element was not initialized. * fortran_test.f90: Tests the above bug. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-109 commit 3dfc5e1312c3698b6793fb399b38ef9c15e645a6 Author: Yozo Hida Date: Wed Mar 16 11:02:22 2005 +0000 Use correct module include flags for qd-config. * Use -moddir= for Sun's f90/f95 compiler to include module directories. * Other compilers use -I format. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-107 commit 9283d52d32d3b75361cc3a4c612b5cbca54f16a8 Author: Yozo Hida Date: Wed Mar 16 10:59:39 2005 +0000 Update TODO. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-108 commit 1b700f00ba4a991d50695dc93c2534c0fb765166 Author: Yozo Hida Date: Tue Mar 15 18:45:14 2005 +0000 Update README. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-106 commit 3725f552a41f04558d434b3c9650f935c89d6a76 Author: Yozo Hida Date: Tue Mar 15 18:38:58 2005 +0000 Add fortran/Makefile.sample. * Added fortran/Makefile.sample, a sample Makefile for using quad-double library with Fortran programs. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-105 commit 500fb7a366a7d252d62a61212dc8d5eec66fae75 Author: Yozo Hida Date: Tue Mar 15 17:53:09 2005 +0000 Add --fc option to qd-config. * qd-config --fc outputs the fortran compiler used. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-104 commit 05f490551737e6c0c202accdee4419ac75228397 Author: Yozo Hida Date: Tue Mar 15 17:40:34 2005 +0000 Add --cxxflags output to qd-config. * qd-config --cxxflags outputs C++ compiler flags to be used. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-103 commit ba085ea0806b570bd207b20ea9dc1735ef4fb8bf Author: Yozo Hida Date: Tue Mar 15 17:36:23 2005 +0000 Add module include dirs and -lqdmod to qd-config.in. * qd-config --fclibs now includes -lqdmod. * qd-config --fcflags now includes appropriate module include options. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-102 commit 852dfddcaf18c53bc3a87ea788063aed318f52bc Author: Yozo Hida Date: Tue Mar 15 17:02:11 2005 +0000 Add LDFLAGS to output of qd-config --fclibs. * Add LDFLAGS to qd-config --fclibs output. Before it was trying to output LIBS, which was not defined. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-101 commit bcc071ef47322dd30d99e6a7571a1d65859927a3 Author: Yozo Hida Date: Tue Mar 15 17:00:23 2005 +0000 Update qd-config.in to include --fcflags and --fclibs. * qd-config --fcflags displays any special flags required by the fortran compiler to link. * qd-config --fclibs displays fortran libraries needed during linking. (Note: linking should be done by the C++ compiler). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-100 commit b5c56e5705f3bd0e4c4a1a9942b3eaf2d8b2699c Author: Yozo Hida Date: Tue Mar 15 09:48:31 2005 +0000 Fix namespace issue in test files. * pslq_test.cpp: #include , using std::strcmp, std::rand, std::srand. * qd_test.cpp: using std::strcmp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-99 commit a34e0c30d7f7b78c7ae945f1b7ba7aa9a139631c Author: Yozo Hida Date: Tue Mar 15 09:45:19 2005 +0000 Add sqrt prototype in dd.h and qd.h. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-98 commit 58059c8d20aaf347d672d7d915c2b29e1821fd05 Author: Yozo Hida Date: Tue Mar 15 08:34:13 2005 +0000 Add -tweak flag to alpha linux. * Make all template code produced in the output object file. * Solves the problem of trying to include templated object files into libqd.a (cxx_repository/*.o). * NOTE: not a general solution since this can invite code bloat, but the current automake/libtool is horrible handling external template instantiation. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-97 commit 1b1b35996e9a721b7809f372aa25252d7ca71fd2 Author: Yozo Hida Date: Tue Mar 15 08:03:59 2005 +0000 Update config/makedist.sh to take version argument. * Now can make custom version tar.gz using config/makedist.sh . git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-96 commit 66c85cbd14bac20d276a7c166a31cd2bb49adaff Author: Yozo Hida Date: Tue Mar 15 07:11:12 2005 +0000 Add cygwin notes to INSTALL. * Cygwin may require CXX=g++. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-95 commit 5fd35643c7d901dca2b421b28182b4d1e376fc76 Author: Yozo Hida Date: Tue Mar 15 07:06:47 2005 +0000 Upgrade to automake-1.9.5, libtool-1.5.14. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-94 commit 989bc3a5c298b82c4d9a2796c0309e8116955386 Author: Yozo Hida Date: Tue Mar 15 07:04:12 2005 +0000 Add some function type declaration to ddmod.f90 and qdmod.f90. * For some reason gfortran (cvs-20050307) complains about implicit abs, aint, and dble. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-93 commit ffcca5c2b953c47652660692f974ebc7bdccddb3 Author: Yozo Hida Date: Tue Mar 15 06:58:09 2005 +0000 Use integer exponent in exp function. * Gets rid of double-to-int conversion in ldexp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-92 commit c24642ba32fe5c72992cfddde90864648a6ddac3 Author: Yozo Hida Date: Sat Mar 12 09:22:41 2005 +0000 Update toplevel Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-91 commit 3c2c5d2ef9b96702d5553e7484f45677c4d333e5 Author: Yozo Hida Date: Sat Mar 12 09:10:14 2005 +0000 Update README and INSTALL. * Update README incorporating changes from DHB's version. * Update INSTALL following the lastest installation methods. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-90 commit a68d3c03d7bc04a20f8e460face46c45158a839e Author: Yozo Hida Date: Sat Mar 12 08:54:03 2005 +0000 Merge various DHB changes in fortran code. * Various changes to f90 code. * Polyroot and polyeval was not merged. These require arrays of dd/qd, and is not implemented on C side. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-89 commit 70d3fe1c306f77dfe2c1708073998bfdd7b296c9 Author: Yozo Hida Date: Sat Mar 12 06:17:58 2005 +0000 Fix some icpc comiler warnings. * double-to-dd conversion warning. * unused variable warning. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-88 commit ff8d60697ce7ae6fc0fce043a46e3dfccc8421d8 Author: Yozo Hida Date: Sat Mar 12 06:06:10 2005 +0000 Add qd assignment operators. * Added assignment operators qd_real &operator=(double a); qd_real &operator=(const dd_real &a); git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-87 commit 32c6277c40b8b3e07ba1129539b6a0f7828c0eea Author: Yozo Hida Date: Sat Mar 12 05:52:45 2005 +0000 Fix some icpc warnings. * Remove unused variables. * Use int for x86 control FPU word. * Use double instead of int in some places. * Note not all warnings are removed, some double-to-int conversion is done with the knowledge that it does not lose bits. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-86 commit 1a86c765f8a1fd155a664abd50350b34532e95eb Author: Yozo Hida Date: Sat Mar 12 05:34:25 2005 +0000 Disable few warnings for icpc in configure.ac. * Disables "external declaration without prototype" and "external definition in source file" warnings. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-85 commit 07a03091cfa2e211b6fa40ed759cf71009d00c83 Author: Yozo Hida Date: Sat Mar 12 05:32:31 2005 +0000 Minor fix of dd/qd C interface. * Remove undefined c_dd_npwr_dd_i and c_dd_nroot_dd_i, they are already covered by c_dd_npwr and c_dd_nroot. * Declare input to c_dd_npwr and c_dd_nroot as const double*. * Do the above for c_qd* versions as well. * Add the selfadd/selfsub/selfmul/selfdiv c_qd routines prototypes. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-84 commit 2c6e7c85faeaae890d0a59b0b384525a6040c612 Author: Yozo Hida Date: Sat Mar 12 02:41:16 2005 +0000 Classify second.f90 as precious in {arch}/=tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-83 commit 943eb403e408b5b38ed7b5707f8c5d0c6bc2ef92 Author: Yozo Hida Date: Sat Mar 12 02:39:41 2005 +0000 Update C++ compiler search order. * Search specific names first before searching more general names (like CC). Enables on some systems to pick up vendor compilers first. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-82 commit 7ba7ffc5f3501af3b8879374ede893aa73b85715 Author: Yozo Hida Date: Wed Mar 9 17:30:47 2005 +0000 Add -lm to LIBS. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-81 commit 68b3d9419c55d14c30274b6ad0eb58286a675436 Merge: 96c16c6... 05971cd... Author: Yozo Hida Date: Wed Mar 9 17:02:50 2005 +0000 Merge various autoconf/automake changes. Patches applied: * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--base-0 tag of yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-77 * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-1 Add m4/acx_fc_etime.m4 with appropriate changes. * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-2 Add m4/acx_cxx_fc_lib.m4 and appropriate changes. * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-3 Fix few bugs in m4/acx_cxx_fc_lib.m4. * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-4 Cleanup C++ compiler flag selection in configure.ac. * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-5 More update to compiler flag selection in configure.ac. * yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-6 Use appropriate etime routine. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-80 commit 96c16c6addda94d9e8c5403bc6e601dda986142b Author: Yozo Hida Date: Wed Mar 9 16:55:22 2005 +0000 Use abs instead of fabs, more std:: namespace fix. * pslq.h: Use abs instead of fabs, add using declarations for overloaded double operators. * qd_test.cpp: Use std::exit. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-79 commit 05971cdd1f9c1cfb1fa499bbb3d724cab179b6a5 Author: Yozo Hida Date: Wed Mar 9 09:38:29 2005 +0000 Use appropriate etime routine. * Use appropriate etime routine detected by configure script. * Removed fortran/second.f90. Generated from fortran/second.f90.in. * Added fortran/second.f90.in. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-6 commit 01d70c7b8984c52dddd315997cceec973c39e536 Author: Yozo Hida Date: Wed Mar 9 09:29:48 2005 +0000 More update to compiler flag selection in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-5 commit 68838a3738c22c0502175c476f17a29f75f2c509 Author: Yozo Hida Date: Wed Mar 9 09:17:30 2005 +0000 Cleanup C++ compiler flag selection in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-4 commit 8431dd57a27507cfb8989c68730966175fe0f2ba Author: Yozo Hida Date: Wed Mar 9 08:32:50 2005 +0000 Fix few bugs in m4/acx_cxx_fc_lib.m4. * Fix misspelling of -lompstubs. * Save and restore LIBS. * Add extra library to FCLIBS. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-3 commit c63b5b531a02f0c4d2f9c66d37d7f623760f2f03 Author: Yozo Hida Date: Wed Mar 9 06:15:58 2005 +0000 Add m4/acx_cxx_fc_lib.m4 and appropriate changes. * Added m4/acx_cxx_fc_lib.m4. Detects extra libraries (-lompstubs, -lmtsk) needed too link C++ and Fortran. Needed by some versions of Sun f95/CC. * Call the above macro from configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-2 commit 91987eaf49eed75947bddc39946a371d147e24ca Author: Yozo Hida Date: Wed Mar 9 05:37:13 2005 +0000 Add m4/acx_fc_etime.m4 with appropriate changes. * Added m4/acx_fc_etime.m4, detects the function name (etime or etime_) to call. * config/autogen.sh: aclocal now includes the local m4 directory. * configure.ac: replace inline check for etime by call to ACX_FC_ETIME. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--custom-m4--0--patch-1 commit 028f717c4fa0141457f167688ee0748a977b4338 Author: Yozo Hida Date: Wed Mar 9 03:23:05 2005 +0000 Use std prefix to exit in dd.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-78 commit 1857a14c0b757d9d8d8c9935452792079691a362 Author: Yozo Hida Date: Wed Mar 9 01:38:33 2005 +0000 Fixup std namespace issue in tests/qd_timer.cpp. * Add using std::strcmp. * Use std::exit. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-77 commit b57ed19713ad4c08a62a2bca09e60889530fbf42 Author: Yozo Hida Date: Wed Mar 9 01:32:44 2005 +0000 Add "using std::abs" to pslq_test.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-76 commit 123648437392ec4573dddd4bf20788ff90b13a30 Author: Yozo Hida Date: Wed Mar 9 01:29:55 2005 +0000 Add std:: namespace prefix to f_dd.cpp and f_qd.cpp. * Added are std::memcpy, strlen, cout, and endl. * Removed using clause, use explicit std:: functions. * Thanks to M. Bibby. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-75 commit f293cbd4e4d9168116b0fdd141bb88b537123ec4 Author: Yozo Hida Date: Tue Mar 8 22:05:26 2005 +0000 More std:: prefixes. * Fix integer abs, strcmp, and exit calls. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-74 commit de0fee1858e5d7287b3317e83e07c422079bc49e Author: Yozo Hida Date: Tue Mar 8 18:44:43 2005 +0000 Use std namespace for log, sqrt, exp, cos, etc. * Use std:: version of log, sqrt, and exp for double precision. * Declare using std::xxx for various templated code using math functions. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-73 commit 341d9faebb9a4012b75c5c77ddeba4612e9e21fb Author: Yozo Hida Date: Tue Mar 8 18:23:04 2005 +0000 More extensive use of std:: namespace. * Use abs as the basic definition rather than fabs. * Use abs rather than fabs for double as well. * Make sure abs, log10, floor, ceil are from std:: space if necessary. * Add "using std::abs" for templated code. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-72 commit 5ce84f9560b1d42ec35ae20e06009322daaedfb1 Author: Yozo Hida Date: Tue Mar 8 17:57:04 2005 +0000 Use std::ldexp. * Use std::ldexp(double, int). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-71 commit 7170c05e02751b9bce814a71b39cc46924a68a35 Author: Yozo Hida Date: Tue Mar 8 17:31:45 2005 +0000 Use ACLOCAL_FLAGS in config/augogen.sh. * Allows nonstandard location of aclocal macros. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-70 commit 62c1106cfc22b3234243f0cf843109ea70cd7f71 Author: Yozo Hida Date: Tue Mar 8 05:42:20 2005 +0000 Fix bug in config/makedist.sh. * Was using a constant 66 instead of $PATCH_LEVEL. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-69 commit 7ff7ab73dade49f221e2bde2d756bea11933c42c Author: Yozo Hida Date: Tue Mar 8 04:50:56 2005 +0000 Make it compile with most recent icpc/ifort. * Require autoconf 2.59. * Use specific compiler list for C++ and F90. * Add -wd1572 flag for icpc/icc. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-68 commit 5316ff4c72a116dba35e2a34cd630b0628649909 Author: Yozo Hida Date: Tue Mar 8 03:49:41 2005 +0000 Add config/makedist.sh script. * Creates a distribution qd-2.1.x.tar.gz where x is the current tla patch level. Note all changes should be committed before running this script. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-67 commit 43015cf6be945ead8e1226b95ccc9c6fa38daac6 Author: Yozo Hida Date: Tue Mar 8 00:56:20 2005 +0000 Use std:: prefix for some cmath and cstring routines. * Use std:: prefix for memcpy, strlen, sinh, cosh, floor, and ceil. * Include in inline.h. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-66 commit 7317d3ead9bb6afd36199e8de59bccfb138c53d5 Author: Yozo Hida Date: Wed Dec 22 11:19:13 2004 +0000 Use "tail -n 1" instead of "tail -1" for update-version. * Makefile.am: Use "tail -n 1" instead of "tail -1" in target update-version. The latter has been deprecated in coreutils. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-65 commit 0893957b96730338cc49957f69a204dc88619d1b Author: Yozo Hida Date: Wed Dec 22 11:03:23 2004 +0000 Remove custom compiler lists in configure.ac. * configure.ac: + default compiler list seems to work ok, so remove custom compiler list. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-64 commit 966c399aad717adb945df4af2ae74d593f2d4cf3 Merge: a4fc878... 7745010... Author: Yozo Hida Date: Wed Dec 22 10:50:57 2004 +0000 Import various f90 fixes from qd--f90-fixup--2.1. Patches applied: * yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-1 Use .f90 suffix instead of .f suffix. * yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-2 Append FCFLAGS_f90 to FCFLAGS in configure.ac. * yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-4 For sun f95/CC, add -lmtsk if needed. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-63 commit 7745010899406248a54a5975fc3566c6f5da3204 Author: Yozo Hida Date: Wed Dec 22 10:34:01 2004 +0000 For sun f95/CC, add -lmtsk if needed. * configure.ac: + Determine -lmtsk is needed. + Move AC_FC_WRAPPERS and AC_FC_MAIN to after determining whether -lmtsk is needed. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-4 commit a4fc878ccf64bcea721788b4720e0193b9cd5bbf Author: Yozo Hida Date: Wed Dec 22 09:34:04 2004 +0000 Define TestSuite::base_n outside of class definition. Patches applied: * yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-3 Define TestSuite::base_n outside of class definition. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-62 commit 2fc400cc6b00f860292f448a77143a9bb7d5261d Author: Yozo Hida Date: Wed Dec 22 09:32:29 2004 +0000 Define TestSuite::base_n outside of class definition. * tests/qd_timer.cpp: Define TestSuite::base_n outside of the class definition. This was causing compilation issues with AIX/xlC compiler. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-3 commit a7de5e070b6ca8afe5cee6e8a32f5ac512ce093c Author: Yozo Hida Date: Wed Dec 22 09:30:32 2004 +0000 Append FCFLAGS_f90 to FCFLAGS in configure.ac. * configure.ac: Append FCFLAGS_f90 to FCFLAGS since automake doesn't seem to do it correctly (at least in ver 1.9.3). Technically FCFLAGS_f90 needs to be right before the source file name, but it seems to work ok for most platforms. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-2 commit 25455e8a4cc95f9b6963a0ac3658f6df69ec05ea Author: Yozo Hida Date: Wed Dec 22 07:43:05 2004 +0000 Use .f90 suffix instead of .f suffix. * configure.ac: + Use AC_FC_SRCEXT for extra f90 options, if any. + Remove obsolete F77 constructs. + Print out FCFLAGS + FCFLAGS_f90. * fortran/Makefile.am: + Rename all .f suffix to .f90. * fortran/*.f: renamed to .f90. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--f90-fixup--2.1--patch-1 commit 9ad8e7a568cc1f80e398baabb71849318cb9c50d Author: Yozo Hida Date: Tue Dec 21 22:35:51 2004 +0000 Add "pristine" target to Makefile.am. * Makefile.am: add "pristine" target which deletes all generated files (maintainer-clean + all tla precious files). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-61 commit 85111f57162a1a41f9b1241b6ede92214bdcda15 Author: Yozo Hida Date: Tue Dec 21 22:07:57 2004 +0000 Update various scripts in config dirs to automake-1.9 series. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-60 commit 153b5636d34e89e1b189e0a5fa18382fb60edc1c Author: Yozo Hida Date: Sat May 8 05:56:31 2004 +0000 Add verbose flag to qd_timer. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-59 commit fece3230ffec9ced0b597932cdc0c7fd7f03b9ea Author: Yozo Hida Date: Sat May 8 05:17:01 2004 +0000 Add qd_timer program in tests dir. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-58 commit d903c9183b6d33051cc9ab83630baa21f9642265 Author: Yozo Hida Date: Sat May 8 05:16:00 2004 +0000 Use AM_CONFIG_HEADER in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-57 commit 6af003f79ce99ed8f7c8effe1f9b112dd3656fe6 Author: Yozo Hida Date: Thu Feb 26 22:01:36 2004 +0000 Define patch level version to "devel" in configure.ac. * Define patch level version to "devel" in configure.ac. * Add update-version target in Makefile.am. * "make update-version" must be run (in a clean tree) prior to making a distribution. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-56 commit 0ac54eb5ec139277f047290bdf398cfe57a732e2 Author: Yozo Hida Date: Thu Feb 26 01:34:06 2004 +0000 Fix dist-check failure. * This was being caused by ChangeLog not put into right place. * Update version in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-55 commit c4a9cce57dea00cfe48e9c703a241ba1c0030f5f Author: Yozo Hida Date: Wed Feb 18 21:39:25 2004 +0000 Use a bit more lax bound in qd_test Test 2. * Fixes failures when ieee add is enabled and sloppy mul/div is disabled. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-54 commit d88d72c539a12502caa445da092dab2d3211b0b5 Author: Yozo Hida Date: Wed Feb 18 21:37:31 2004 +0000 Move quick_three_accum into qd namespace. * Fixes compilation error under certain options. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-53 commit 68a8df06b7a0ba7acc7ffc2cfd6a5ebe734362e0 Author: Yozo Hida Date: Sat Jan 24 09:22:45 2004 +0000 Updated qd.tex. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-52 commit 7332438dd36f1094f2468bcf216d1d5ac1e55323 Author: Yozo Hida Date: Wed Jan 21 23:35:55 2004 +0000 Update TODO. * Updated TODO list to include recent items such as integer and complex support. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-51 commit f8e0a8191ab9fd4923cc30a88ac362c43085ab73 Author: Yozo Hida Date: Sat Jan 3 10:52:38 2004 +0000 Added qd-config.in. * Added qd-config.in which becomes qd-config script. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-50 commit 31cc9eff9efe51d5509b9657a52e8b4d52bc424f Author: Yozo Hida Date: Sat Jan 3 06:14:33 2004 +0000 Convert tabs into 8 spaces. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-49 commit 6867a91058edc3f05a4af7a896885493888aa051 Author: Yozo Hida Date: Fri Jan 2 11:05:59 2004 +0000 For MSVC++, use _copysign, _isnan, and _finite. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-48 commit 38c0cee1275fe85660bb545b762dc89470ffb8ba Author: Yozo Hida Date: Fri Jan 2 10:34:46 2004 +0000 Automatically generate ChangeLog during distribution. * ChangeLog is now automatically generated during 'make dist'. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-47 commit 2e94bb36ab814f1c3ad49af30adb35ad01a02749 Author: Yozo Hida Date: Fri Jan 2 10:29:18 2004 +0000 Rename pslq.cpp to pslq.h. * Rename pslq.cpp to pslq.h to avoid build of pslq.o. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-46 commit bb50698571134bf9038d2c5453745b033551b490 Author: Yozo Hida Date: Fri Jan 2 10:22:41 2004 +0000 Build debug code conditionally. * Build debugging code (debug_rand, dump methods) only if specified. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-45 commit 260ec75324ba66bca5fb952c04f21183d86e37e1 Author: Yozo Hida Date: Fri Jan 2 07:26:36 2004 +0000 Include ieeefp.h for Solaris systems. * Added check for ieeefp.h in configure.ac. * Include ieeefp.h in src/bits.cpp if available. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-44 commit c9e5cc696aba76b9f9e453f17b6303b53806a944 Author: Yozo Hida Date: Fri Jan 2 06:53:44 2004 +0000 Use finite() instead of isinf(). * Use finite() instead of isinf() in bits.cpp, as it is more widely available. * Updated configure time checks accordingly. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-43 commit 14edcdc41315ffba59fd2d0144123e7bd8626e7c Author: Yozo Hida Date: Fri Jan 2 06:47:09 2004 +0000 Added checks for isnan, isinf, and copysign. * Added configure checks for isnan, isinf, and copysign. * Updated src/bits.cpp to use the new macros. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-42 commit f4091e6a02a71d031a334024940a7c1641e5bc68 Author: Yozo Hida Date: Fri Jan 2 05:07:32 2004 +0000 Updated patch level to 41. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-41 commit 9c042d9b2d16d26c77a44783dee176b9415c7b6d Author: Yozo Hida Date: Fri Jan 2 05:00:28 2004 +0000 Use time() for system without gettimeofday(). * Updated tests/time.h and tests/time.cpp to use C library time() function when gettimeofday is not available. * Use atoi and time in global namespace (for MSVC++). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-40 commit c8bed9cc27253bc42f97e1a954ef39f6f9def3fb Author: Yozo Hida Date: Fri Jan 2 01:54:30 2004 +0000 Use std::rand(), MSVC++ workarounds. * Use std::rand(). * For MSVC++, use ::rand(), since MSVC++ does not have rand() in std namespace. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-39 commit aff5e5525675575b2940abd03b99a7ead2c1d4cb Author: Yozo Hida Date: Fri Jan 2 01:52:49 2004 +0000 Updated fpu.cpp for Windows compilers. * Updated fpu.cpp for Windows compilers (MSVC++ and Borland C++). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-38 commit 22077336158d50df0af6208bdb65274b72738d66 Author: Yozo Hida Date: Wed Dec 31 22:57:52 2003 +0000 Use C++ headers instead of C headers. * Use C++ headers such as instead of . git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-37 commit d086e511e33892c7829d33a69b2c77aba07c6734 Author: Yozo Hida Date: Wed Dec 31 22:31:45 2003 +0000 Fixes for compilers with old for init statement scope. * Moved loop counter declaration outside of for loop init statements. Some old compilers (e.g., VC++) does not have proper scoping of for init statements. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-36 commit 1c7dae35fd4a6c5a935ce57b19ba6444ade18696 Author: Yozo Hida Date: Wed Dec 31 20:14:30 2003 +0000 Removed qd_config.h from distribution. * Modified include/Makefile.am to not include qd_config.h from the distribution tarball. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-35 commit 5aaec2ed0f5c46025ba82a695c19d2a45044d976 Author: Yozo Hida Date: Wed Dec 31 09:27:43 2003 +0000 Moved internal functions to qd namespace. * Moved internal functions to qd namespace from the global namespace. * Added appropriate qd:: prefix or using statements to use the qd namespace. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-34 commit c97bb95c7459ae37f42be756609f92f2212eb0cc Author: Yozo Hida Date: Wed Dec 31 06:53:40 2003 +0000 Merge from qd-cabernet. Patches applied: * yozo@cs.berkeley.edu--cabernet/qd--cabernet--2.1--patch-1 Updated sample program in qd.tex. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-33 commit 5331ef6102a829b953b9f9eb9312c439cfb6933e Author: Yozo Hida Date: Wed Dec 31 05:40:45 2003 +0000 Merge from qd-zinfandel tree. Patches applied: * yozo@cs.berkeley.edu--qd-zinfandel/qd--zinfandel--2.1--patch-5 Updated README on Fortran usage. * yozo@cs.berkeley.edu--qd-zinfandel/qd--zinfandel--2.1--patch-6 Added using statements to f_dd.cpp and f_qd.cpp. * yozo@cs.berkeley.edu--qd-zinfandel/qd--zinfandel--2.1--patch-7 Update #defines in include file. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-32 commit 8fecbb5e0616fd6de3d99d8a9ae1987f6054e848 Author: Yozo Hida Date: Wed Dec 31 03:28:22 2003 +0000 Cleaned up using declarations. * Removed using declarations from header files. * Cleaned up using declarations in source files and tests programs. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-31 commit 911c08ffe855a398ec3228fa6a2345f2a5203e46 Author: Yozo Hida Date: Wed Dec 31 01:23:32 2003 +0000 Cleanup. * Use [default=yes] instead of (default is yes) in configure.ac. * Update TODO. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-30 commit 0b6ded4c8347ba8a90a7ebfbcb37270715282024 Author: Yozo Hida Date: Wed Dec 31 00:51:27 2003 +0000 Added --enable-debug option. * Added --enable-debug option in configure.ac. * Add -g to CXXFLAGS and FCFLAGS if --enable-debug is selected. * Moved the argument checking in configure near the top. * Added QD_DEBUG flag in include/qd/qd_config.h. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-29 commit 85e0de8c06d8b2df615ce7974980afd7dac1ad10 Author: Yozo Hida Date: Tue Dec 30 22:45:37 2003 +0000 Updated NEWS file for 2.1 series. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-28 commit f31f85c3aaa161d75febcf4563ab8976e8341db5 Author: Yozo Hida Date: Tue Dec 30 22:37:39 2003 +0000 Added TODO file. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-27 commit a85dd1fa59a7c15627e58c506089c5a482bb77b1 Author: Yozo Hida Date: Tue Dec 30 19:57:30 2003 +0000 Updated patch number in configure.ac. * Updated patch number to 26 in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-26 commit 61b0bd068c5e14f8d7eb4ab98072b9354ff9b18e Author: Yozo Hida Date: Tue Dec 30 09:48:05 2003 +0000 Merge from qd-zinfandel tree. Patches applied: * yozo@cs.berkeley.edu--qd-zinfandel/qd--zinfandel--2.1--patch-1 Added icc and ecc to the list of C++ compilers. * yozo@cs.berkeley.edu--qd-zinfandel/qd--zinfandel--2.1--patch-2 Updated README, added INSTALL. * yozo@cs.berkeley.edu--qd-zinfandel/qd--zinfandel--2.1--patch-3 Added C++ main.o to libqdmod.a git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-25 commit 30ba5542f4d147ae3ac5ba9c4f088b422c95de23 Author: Yozo Hida Date: Mon Dec 15 08:55:08 2003 +0000 Fix f_main name in Fortran/main.cpp for various compilers. * Fixed f_main name for various compilers in Fortran/main.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-24 commit 68519b7440993d31881fb73dbe45f85f5b488dba Author: Yozo Hida Date: Mon Dec 15 08:45:06 2003 +0000 Removed unreacheable blocks from Fortran demo programs. * Removed unreacheable blocks from Fortran demo programs. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-23 commit 800c37cd5a76ee200b4adcb42ea7cf804201d7e7 Author: Yozo Hida Date: Mon Dec 15 08:43:49 2003 +0000 Fix pslq_test compilation problems on Sun. * Fixed "new (T *)[x]" to "new T *[x]" in pslq.cpp. * Removed "static" from global variable declarations. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-22 commit 4264150bb0af69174bfeda37278176a6a1407419 Author: Yozo Hida Date: Mon Dec 15 08:40:26 2003 +0000 Install Fortran module files. * Install Fortran module files ddmodule.mod and qdmodule.mod. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-21 commit d6098d5864e7b70bf44d8b43fe9836743fc7a61c Author: Yozo Hida Date: Mon Dec 15 07:46:37 2003 +0000 Disable build of shared library by default. * Disable build of shared library by default. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-20 commit 7b841a96c5049c1f63d9c56293bcc33cb23c84c6 Author: Yozo Hida Date: Mon Dec 15 01:46:49 2003 +0000 Use package version number for shared libraries. * Added -release $(VERSION) to creation of shared library. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-19 commit b06f287e59dc9cc804bff16f159366b515d27a6a Author: Yozo Hida Date: Mon Dec 15 00:16:29 2003 +0000 Fixes to install header files correctly. * Added qd/qd_config.h to the files installed. * Fix Makefile.am to install headers in include/qd directory. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-18 commit ac4f0af615c6533b7b9972be9aa7357055f48f6e Author: Yozo Hida Date: Sun Dec 14 11:35:31 2003 +0000 Merge fix from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-79 Added support for ifort, and modified search list of C++ compilers. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-17 commit ee1606f58fd6a133e2183b9165c357d12255ac7b Author: Yozo Hida Date: Sun Dec 14 11:14:03 2003 +0000 Cleaned up configure.ac. * Moved libtool checks toward the end. * Set F77 varables so libtool macros can use them. * Enable shared library by default. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-16 commit c6d2ceda82cf5605fb7dd0d76688429a19b02965 Author: Yozo Hida Date: Sun Dec 14 11:12:50 2003 +0000 Prevent include/qd/qd_config.h to be deleted in make clean. * Delete include/qd/qd_config.h only when "make distclean" is issued. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-15 commit 544159aebafa3644d3a98654240d6463ebea67bd Author: Yozo Hida Date: Sun Dec 14 10:52:35 2003 +0000 Use libtool to create libraries. * Use libtool to create and use libraries (renamed libqd.a to libqd.la). * Disable shared library by default. * Classified new files as junk in {arch}/=tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-14 commit b05d210f3d3f59be9ffd81a535cbd3d9e250d346 Author: Yozo Hida Date: Sun Dec 14 10:39:13 2003 +0000 Classify libtool as junk in {arch}/=tagging-method. * Classify libtool as junk in {arch}/=tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-13 commit 67af3c0abbb81122012e743045c8f3eb60bd3ba3 Author: Yozo Hida Date: Sun Dec 14 10:37:33 2003 +0000 Fix to make separate directory build possible. * Allows build to happen in different directory from source. * Passes make distcheck. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-12 commit aa8abed5ae10043e671255bf959b975c22f960b2 Author: Yozo Hida Date: Sun Dec 14 10:31:45 2003 +0000 Added libtool support. * Added libtool support in configure.ac. * Removed check for ranlib since it is already checked by libtool. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-11 commit e585fd2f1dd6c2ca0413b0cf7255b9f8eadb8945 Author: Yozo Hida Date: Sun Dec 14 09:32:52 2003 +0000 Classified various generated files for qd.ps as junk/precious. * Classified qd.ps as precious. * Classified any other file generated during making of qd.ps as junk. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-10 commit 34fbc122908b3fe75df438100ef4a2397687ad5a Author: Yozo Hida Date: Sun Dec 14 09:25:43 2003 +0000 Added doc source files. * Added doc source files (*.tex, *.bib, *.eps, *.fig). * Updated docs/Makefile.am to build these. * Removed arith15.ps since they are covered by qd.ps. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-9 commit 882abefde7bf82ac5d525e21260d9865526dc197 Author: Yozo Hida Date: Sun Dec 14 08:04:25 2003 +0000 Merged fix from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-77 Fix pslq_test.cpp underflow constant (again). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-8 commit 614a72e6065c5bf95cb40fb6f69b5484b516dad4 Author: Yozo Hida Date: Sun Dec 14 07:59:55 2003 +0000 Added extra program target to fortran/Makefile.am. * Added extra program target (with the quadrature programs) to fortran/Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-7 commit 518638a505eff0489ebfda833ebe3e12fdef7443 Author: Yozo Hida Date: Sun Dec 14 07:34:35 2003 +0000 Merged fix from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-76 Fixed underflow threshold in pslq_test.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-6 commit 94f373054587dba5740d87838df65981bf8ae045 Author: Yozo Hida Date: Sun Dec 14 07:33:11 2003 +0000 Merged Fortran fixes from qd--mainline--2. * Fixed fortran/Makefile.am for Fortran programs. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-74 Fix ntab uninitialization bug. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-75 Use C++ main program for Fortran sample programs. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-5 commit 1d22371ddcbe5d26863e8ef07fcfa29f38ad167a Author: Yozo Hida Date: Sun Dec 14 07:11:56 2003 +0000 Merge configure fixes from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-72 Added check for etime when using Intel ifc/ifort compiler. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-73 Cleaned up configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-4 commit 34c951fa2cee6cb7fbf001de7e5640ba04c1c328 Author: Yozo Hida Date: Sat Dec 13 17:19:37 2003 +0000 Fixed test programs to return 1 on failure. * Fixed qd_test and pslq_test to return 1 if the tests fail, and return 0 on success. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-3 commit d0cb562e8c9ab9d18a243537e7a351020d4fe5eb Author: Yozo Hida Date: Sat Dec 13 06:45:25 2003 +0000 Make qd_test and pslq_test run both dd and qd by default. * Make qd_test and pslq_test run both dd and qd by default. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-2 commit 55df15cf2bb72e82a2d5496c0c038902059a5221 Author: Yozo Hida Date: Sat Dec 13 06:41:47 2003 +0000 Added pslq_test as a test program. * Updated tests/Makefile.am to include pslq_test as a test program. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2.1--patch-1 commit 4eb8c10b8a0a3e3ed31839f9799de5b748f5acb9 Author: Yozo Hida Date: Sat Dec 13 05:16:08 2003 +0000 Merged fixes from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-66 Removed fortran defines from fpu.h. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-67 Fixed header files so C compilers can use them. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-68 Fixed c_dd_swrite and c_qd_swrite. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-69 Fixed qd_real(double *) constructor to use const double *. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-18 commit d2e803277d4660cfa0b96d23ad9cc9cb687ddfd5 Author: Yozo Hida Date: Wed Dec 10 04:41:06 2003 +0000 Fix default compiler flags. * Set default compiler flag to "-O2". * Remove debug flag. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-17 commit 1c1138aafb56dc00fdfc8723d8711f7b986dccec Author: Yozo Hida Date: Wed Dec 10 01:55:55 2003 +0000 Fixed configure.ac so that enable_fortran is always set to something. * Fixed configure.ac so that enable_fortran is either "yes" or "no" at the end of configure. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-16 commit 27f74fe90c8313667704f7fb8238970399b876a4 Author: Yozo Hida Date: Wed Dec 10 01:37:59 2003 +0000 Added --enable-fortran option to configure.ac. * Added --enable-fortran option to configure.ac. * Added conditional printing of Fortran variables at the end of configure. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-15 commit e2a87af52229cdec442a7ca8b4253fa5b00d7aa7 Author: Yozo Hida Date: Wed Dec 10 01:16:02 2003 +0000 Fixed fortran/Makefile.am. * Added $(FLIBS) to linker. * Added fortran_test as test program. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-14 commit 01a6ed5dcf3f822f81a4758768d51896f0711f38 Author: Yozo Hida Date: Wed Dec 10 01:05:03 2003 +0000 Merged README fixes from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-63 Fixed README to reflect FCLIBS and FCFLAGS change. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-65 Fixed README typo. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-13 commit dab1698bd49ae2c6fbe38352f3580f27922bf626 Author: Yozo Hida Date: Wed Dec 10 00:59:14 2003 +0000 Classified libqdmod.a as junk. * Classified libqdmod.a as junk in {arch}/=tagging-method. * Fixed small typo for libqd.a. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-12 commit 0217d16d29d6c9add9d872c734f6b6a0760d414f Author: Yozo Hida Date: Wed Dec 10 00:56:57 2003 +0000 Merged patch-62 from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-62 Cleanup Fortran check in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-11 commit 36874d717872baa27e034535b8ba633fc2d04ff7 Author: Yozo Hida Date: Wed Dec 10 00:37:37 2003 +0000 Merge several bugfix patch from qd--mainline--2. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-59 Intel ifc compiler needs extra -lPEPCF90 for etime function. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-60 Fixed warnings from ifc compiler. * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-61 Added check for how to compile free-form Fortran source. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-10 commit 250208610a4d45dbbd9765b039660d4eecf53118 Author: Yozo Hida Date: Tue Dec 9 11:54:47 2003 +0000 Added docs/Makefile.am. * Added docs/Makefile.am. * Modified configure.ac and Makefile.am accordingly. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-9 commit f3cca3e5b91ade08541c8f825bd0055e8568bd25 Author: Yozo Hida Date: Tue Dec 9 11:37:10 2003 +0000 Added verbose output at the end of configure.ac. * Added verbose output at the end of configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-8 commit c3e8d6dd5c565da87c5ac583326994d349a20c46 Author: Yozo Hida Date: Tue Dec 9 11:29:47 2003 +0000 Added fortran/Makefile.am. * Added fortran/Makefile.am. * Modified configure.ac to accomodate fortran/Makefile and added fortran to SUBDIRS in Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-7 commit 9b706348eab28ba5b55a016457201f84116a237a Author: Yozo Hida Date: Tue Dec 9 11:10:43 2003 +0000 Added config/Makefile.am. * Added config/Makefile.am. * Modified configure.ac to accomodate config/Makefile and added config to SUBDIRS in Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-6 commit 091afe3a7af9a6028fe9701efad71ff0ff158354 Author: Yozo Hida Date: Tue Dec 9 10:12:00 2003 +0000 Added automake support for tests. * Added tests/Makefile.am and corresponding changes in configure.ac and Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-5 commit 4927408d2781415f7ba43b395ea446e313050244 Author: Yozo Hida Date: Tue Dec 9 09:44:35 2003 +0000 Added include files to distribution. * Added include/Makefile.am and corresponding changes in configure.ac and Makefile.am. * Added nostdinc option to AM_INIT_AUTOMAKE macro. * Added .. and ../include as include directory in src/Makefile.am. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-4 commit 095ea163bf5f357aa002c76d13b0d1b06683d235 Author: Yozo Hida Date: Tue Dec 9 09:08:12 2003 +0000 Fixed configure.ac. * The dist target now makes qd-2.1.x.tar.gz files. * The 'configuring qd-2.1.x...' message now appears at the very beginning. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-3 commit acef400a446b6daba1e941a01d6bcc67591ccc04 Author: Yozo Hida Date: Tue Dec 9 08:24:59 2003 +0000 Initial support of automake. * Added automake support in configure.ac * Updated config/autogen.sh to run automake. * Removed make.inc.in, Makefile, and src/Makefile from source inventory, as they are generated by automake. * Added Makefile.am and src/Makefile.am as source. * Added automake scripts in config directory. * Classified Makefile and Makefile.in as precious, and stamp-* files as junk. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-2 commit f08368ae0fc09398a96e19e205ffaa6b995e3cf2 Merge: fd7f742... f1596c2... Author: Yozo Hida Date: Tue Dec 9 07:49:40 2003 +0000 Merge from mainline tree. Patches applied: * yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-57 Fixed config.h.in to be automatically generated. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--automake--2--patch-1 commit f1596c2cff7c7d777c28d1f5da2223f9a5a008fb Author: Yozo Hida Date: Tue Dec 9 07:44:11 2003 +0000 Fixed config.h.in to be automatically generated. * Removed config.h.in from source. * Fixed autogen.sh to automatically generate config.h.in. * Fixed configure.ac to provide comments to some #defines. * Added #ifndef clauses to include/qd/qd_config.h. * Fixed minor bugs in config.h.in (use #undef instead of #define). * Classified config.h.in as precious in {arch}/=tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-57 commit fd7f742038aa5e59bec8372031a28c1a4a0311d0 Author: Yozo Hida Date: Tue Dec 9 00:44:49 2003 +0000 Updated patch number in configure.ac. * Updated patch number to 56 in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-56 commit 5bae3e02715af9dcae3257acba60c3dc546e6616 Author: Yozo Hida Date: Tue Dec 9 00:37:15 2003 +0000 Updated NEWS for 2.0 release. * Updated NEWS for 2.0 release. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-55 commit eaf2e3c1ca7b0bae4ab95f3974f595ac3cdec291 Author: Yozo Hida Date: Tue Dec 9 00:26:27 2003 +0000 Updated README. * Updated README since version 1.x. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-54 commit f0cca88e0167169e02bd3db5550e6e559d7e5e9d Author: Yozo Hida Date: Tue Dec 9 00:05:47 2003 +0000 Renamed COPYING to LICENSE. * Renamed COPYING to LICENSE. * Updated README accordingly. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-53 commit ca40fa32c5907fbc8f4eca6bd36289839842c3a7 Author: Yozo Hida Date: Mon Dec 8 07:56:38 2003 +0000 Added Fortran interface to fpu_fix_xxx routines. * Added f_fpu_fix_start and f_fpu_fix_end in fpu.cpp. * Fixed fortran program sources in fortran directory to call the new routines. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-52 commit 90ddd4713f4e43c908047385f976de9466bee142 Author: Yozo Hida Date: Mon Dec 8 07:42:28 2003 +0000 Classify ChangeLog as precious and qd.diff as junk. * Classify ChangeLog as precious and qd.diff as junk in {arch}/=tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-51 commit ebaa8924783afbfef37e22225f634f5d85311835 Author: Yozo Hida Date: Mon Dec 8 07:40:09 2003 +0000 Use int instead of short in fpu_fix_xxx routines. * Use unsigned int instead of unsigned short in fpu_fix_start and fpu_fix_end routines. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-50 commit 98cd1d5d545fe53f5be7dd20da138aaaa3cfa5cc Author: Yozo Hida Date: Mon Dec 8 07:09:23 2003 +0000 Support sun fortran compiler. * Added -free to FFLAGS if the compiler is a fortran compiler. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-49 commit 4a103835e3ab38dfdc17c988d1db39a3ba6ac202 Author: Yozo Hida Date: Mon Dec 8 07:06:16 2003 +0000 Use C++ as linker for Fortran programs. * Use $(CXX) as linker for Fortran programs. * Use AC_F77_LIBRARY_LDFLAGS function to detect Fortran libraries. * Drop CXXLIB, use FLIBS instead. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-48 commit 1ded98dc4b5490413cf9314656f37a504673afe5 Author: Yozo Hida Date: Mon Dec 8 05:55:11 2003 +0000 Fix ChangeLog generation bugs. * Removed changelog target from Makefile. * The target "maintainer-clean" now removes ChangeLog. * Add ChangeLog generation in config/autogen.sh git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-47 commit 0ff48b40c2f7921d14721b1f8520c7ed64eb13c4 Author: Yozo Hida Date: Mon Dec 8 05:47:19 2003 +0000 Added changelog target to Makefile. * Removed ChangeLog from source as it is automatically generated. * Added changelog target to Makefile. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-46 commit e578650891434e48efdd0bd64cc0dc0c7b525866 Author: Yozo Hida Date: Mon Dec 8 04:30:06 2003 +0000 Classify .swp as junk file. * Classify .swp as junk file. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-45 commit edabb6905859c869c3cd8da4aa12e76bba6fa059 Author: Yozo Hida Date: Mon Dec 8 04:28:35 2003 +0000 configure.ac now supplies default compiler flags. * Fix configure.ac to supply various default compiler flags. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-44 commit 1946d2d6d4ef010f3a855229705738fa1554f615 Author: Yozo Hida Date: Mon Dec 8 03:26:27 2003 +0000 Cleanup fortran/Makefile. * Use TARGET variable to list all executable targets. * Add .PHONY target. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-43 commit 06df6788e22c35972456036c9b2f3cc064c8065a Author: Yozo Hida Date: Mon Dec 8 03:24:16 2003 +0000 Fix Fortran interface to use pass-by-reference. * Fixed f_dd.cpp and f_qd.cpp to use pass-by-reference. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-42 commit e840884b3cdc271603d21edbc8aa3973b1be2670 Author: Yozo Hida Date: Mon Dec 8 02:44:16 2003 +0000 Added various targets in fortran/Makefile. * Added targets to compile the quadrature programs in fortran directory. * Added fortran/second.f. * Classify the example executables as junk in {arch}/=tagging-method. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-41 commit 18dfcd92d3d5f2be5748a2e597f7031cb8bf358c Author: Yozo Hida Date: Mon Dec 8 02:12:42 2003 +0000 Fixed ddmod.f and qdmod.f. * Use f_xxx routine names instead of c_xxx names. * Remove polyeval and polyroot functions since these no longer have Fortran interfaces. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-40 commit 5604f106148dc167731069765d69b7330532b7ab Author: Yozo Hida Date: Mon Dec 8 02:08:30 2003 +0000 Classify module files as junk. * Classified module files generated by Intel Fortran 95 compiler as junk. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-39 commit 7e3c79895d536883190b92d9b35acb8298eafe67 Author: Yozo Hida Date: Mon Dec 8 02:05:53 2003 +0000 Fixed fortran/Makefile. * Renamed variables in fortran/Makefile to conform to the standard more (e.g., F90 to FC, F90FLAGS to FFLAGS). * Introduced CXXLIB into make.inc.in, fortran/Makefile, and configure.ac. * Cleaned up unused stuff. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-38 commit 34b0c0c522975ff4cb79704580debe0acc6e2617 Author: Yozo Hida Date: Sat Dec 6 12:55:44 2003 +0000 Rename F90 to FC and F90FLAGS to FFLAGS. * Modified configure.ac and make.inc.in to rename F90 to FC and F90FLAGS to FFLAGS. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-37 commit 7a41fd1c7ca33c39bcb06574f131fdbedcff7299 Author: Yozo Hida Date: Sat Dec 6 12:47:55 2003 +0000 Added support for F90 and F90FLAGS. * Added F90 and F90FLAGS variable in make.inc.in. * Added AC_SUBST for F90FLAGS in configure.ac. * Fixed config/autogen.sh to remove autom4te.cache directory. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-36 commit a98843b5d62648a02ce76a3c404ec3d0f12ce097 Author: Yozo Hida Date: Sat Dec 6 12:34:09 2003 +0000 Cleaned up make.inc.in, c_dd.{h, cpp}, c_qd.{h, cpp}. * Removed CC_OPTS and C_QD_OPTS from make.inc.in. * Removed #defines for Fortran compatibility from c_dd.h, c_dd.cpp, c_qd.h, c_qd.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-35 commit 1bcd877f33f2827bd11ba4d5c802c4deab487604 Author: Yozo Hida Date: Sat Dec 6 12:23:49 2003 +0000 Added f_qd.cpp for Fortran interface. * Added f_qd.cpp with f_* routines. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-34 commit af3be67ea9cb668341d310bc307ef3f20ec3ce5c Author: Yozo Hida Date: Sat Dec 6 12:15:03 2003 +0000 Fixed extraneous #defines in f_dd.cpp. * Removed f_poly_eval and f_poly_root #defines from f_dd.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-33 commit bebd767d2fa7601e8c337e72963ba766e1e3f2c9 Author: Yozo Hida Date: Sat Dec 6 12:13:10 2003 +0000 Cleaned up {arch}/=tagging-method. * Classified make.inc as junk. * Classified autom4te/* files as junk. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-32 commit df2498545585ed032607f3b84361135491b86a6e Author: Yozo Hida Date: Sat Dec 6 12:11:32 2003 +0000 Added config/autogen.sh. * Added config/autogen.sh to run aclocal and autoconf, and create dependency information make.dep. * Removed src/make.dep and tests/make.dep as these are now generated by autogen.sh. * Classified make.dep as precious. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-31 commit 985c19f61380566f7bebf81c75a4479ba8da3032 Author: Yozo Hida Date: Sat Dec 6 11:53:37 2003 +0000 Added f_dd.cpp for Fortran interface. * Added f_dd.cpp with f_* routines. * Added HAVE_FORTRAN define in config.h.in. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-30 commit 2725b488e048495133aa1ea196307fad4fb9dff9 Author: Yozo Hida Date: Sat Dec 6 11:27:23 2003 +0000 Added checks for Fortran-90 compilers. * Added checks for Fortran-90 compilers in configure.ac. * Added additional #defines in config.h.in. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-29 commit 2957d1c3e79df4b1bf0f6aa0c29dbabfb348f893 Author: Yozo Hida Date: Sat Dec 6 11:16:08 2003 +0000 Fixed c_qd.h and c_qd.cpp. * Fixed c_qd.h to make into a real C header (use double* instead of qd_real&). * Fixed c_qd.cpp accordingly. * Made qd_real.x field public. * Added qd_real(double *xx) constructor. * Eliminated poly_eval and poly_root from c_qd.h. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-28 commit 8278d34f25eb7346a2bb41f8955d83839c7e6e06 Author: Yozo Hida Date: Sat Dec 6 10:38:41 2003 +0000 Fixed c_dd.h and c_dd.cpp. * Fixed c_dd.h to make into a real C header (use double* instead of dd_real&). * Fixed c_dd.cpp accordingly. * Made dd_real.hi and lo fields public. * Made dd_real(hi, lo) constructor public. * Eliminated poly_eval and poly_root from c_dd.h. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-27 commit a5f4d6889e04bf99f482e39ab68f3dd1f66a753d Author: Yozo Hida Date: Sat Dec 6 10:10:16 2003 +0000 Added "dep" target to the main Makefile. * Added "dep" target to the main Makefile. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-26 commit 53a0561ac847fde90933468e4265f53b228600d6 Author: Yozo Hida Date: Sat Dec 6 08:04:13 2003 +0000 Updated "archive" target in Makefile. * It nows creates an tarball called 'qd-2.0.x.tar.gz' where x is the patch level. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-25 commit ce6d02eb63924de627367b33a02fdc8c28052568 Author: Yozo Hida Date: Sat Dec 6 07:29:43 2003 +0000 Fix to support LDFLAGS variable. * Added @LDFLAGS@ to make.inc.in. * Added $(LDFLAGS) to linking targets in tests/Makefile. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-24 commit e076cb75375c96cd5a6a3cd98351ce40aa67a37c Author: Yozo Hida Date: Sat Dec 6 07:25:53 2003 +0000 Added search for other C++ compilers. * Added search for other C++ compilers (cxx, KCC, CC, c++, xlC, aCC, g++, c++, icc) to configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-23 commit 216c6429e86826c21db9bfd84f6ea26eba0e52b9 Author: Yozo Hida Date: Sat Dec 6 06:49:27 2003 +0000 Split sloppy option into sloppy-mul and sloppy-div. * Split --enable-sloppy option in configure.ac into two parts, --enable-sloppy-mul and --enable-sloppy-div. * The QD_SLOPPY preprocessor define was split into QD_SLOPPY_MUL and QD_SLOPPY_DIV as well. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-22 commit ed37737a238eec66c8eca45d25607c8ddc3cc560 Author: Yozo Hida Date: Sat Dec 6 06:30:57 2003 +0000 Renamed --enable-accurate to --enable-ieee-add. * Renamed --enable-accurate option in configure.ac to --enable-ieee-add. * Renamed QD_ACCURATE preprocessor define to QD_IEEE_ADD. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-21 commit dcff0d895acbbbf40ebf05b32426a42e7550213b Author: Yozo Hida Date: Sat Dec 6 06:18:12 2003 +0000 Fixed typos in configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-20 commit 26ab8adbcd8ff27fec68805478c5df91fd73d501 Author: Yozo Hida Date: Sat Dec 6 06:09:49 2003 +0000 Added .SUFFIXES to make.inc.in git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-19 commit 925746c78952ed75ea4a9c6d34b5175cfac1786d Author: Yozo Hida Date: Sat Dec 6 06:08:31 2003 +0000 Added check for fpu_control.h for x86 linux. * Added check for fpu_control.h for x86 linux systems. * Added #include in fpu.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-18 commit 61f5143ba26ef766ec6a9f38481b4bc2999e1d3d Author: Yozo Hida Date: Sat Dec 6 05:52:33 2003 +0000 Added checks for ranlib in configure.ac. * Added checks for ranlib in configure.ac. * Modified make.inc.in to use the ranlib detected in configure script. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-17 commit 45cc063e1ab9fa51b2aa9a90322f614a59244ed4 Author: Yozo Hida Date: Sat Dec 6 02:23:59 2003 +0000 Added configure check for x86 fpu fix. * Added check in configure.ac for x86 fpu fix. * Changed x86 to X86 in #ifdefs. * Added auxiliary scripts config.guess, config.sub, install-sh into config directory. * Source files now #includes "config.h". * Makefile fixes. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-16 commit 66dc946003eb722555c747af1ff61362293e6209 Author: Yozo Hida Date: Sat Dec 6 01:37:34 2003 +0000 Rename "x86" to "fpu". Renamed x86.h and x86.cpp to fpu.h and fpu.cpp. Renamed x86_xxx routines to fpu_xxx routines. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-15 commit 811724e1a26f140b6e04f0f207cf40546f03b71e Author: Yozo Hida Date: Sat Dec 6 01:25:37 2003 +0000 Clean up configure.ac. * Removed unnecessary tests: AC_C_CONST, AC_C_INLINE, check for strings.h. * Removed redundant check for stdlib.h. * Fix AC_DEFINE so that autoheader is happy. * Fixed to . git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-14 commit da9d7fadadd662118c7bbfb12ed7f70c56fed16c Author: Yozo Hida Date: Fri Dec 5 23:46:49 2003 +0000 Fixed #include directives from "xxx" to . Fixed '#include "xxx.h"' to '#include ' for qd header files. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-13 commit 6cf59972cd16a7494a688065b3a776f9257467e3 Author: Yozo Hida Date: Fri Dec 5 23:39:37 2003 +0000 Fixed names of defines to those used in qd_config.h. * Use QD_SLOPPY instead of SLOPPY. * Use QD_ACCURATE instead of ACCURATE. * Use QD_HAS_FMA instead of HAS_FMA. * Use QD_INLINE instead of NO_INLINE. This reverses the sense so change ifdef to ifndef, and vice versa. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-12 commit d01ec9b225144741e6f99e6f672f57bf568e95f4 Author: Yozo Hida Date: Fri Dec 5 23:23:28 2003 +0000 Removed make.xxx for various architectures. We don't need these anymore since the configure script handles it. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-11 commit 1f34fab30a5c608730dbd95e71fd0e860fc49988 Author: Yozo Hida Date: Fri Dec 5 23:21:08 2003 +0000 Added various --enable-xxx in configure.ac. Added --enable-inline, --enable-fma, --enable-accurate, and --enable-sloppy to configure.ac. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-10 commit 181b975c2d6dfa0ca86c9df305ca309ee7706883 Author: Yozo Hida Date: Fri Dec 5 22:40:29 2003 +0000 Put library configuration defines in qd_config.h * Instead of make.config, put various preprocessor defines in the file qd_config.h.in. * Appropriate #include also added in various file. * Modified configure.ac to process qd_config.h.in. * Modified various Makefile to omit make.config, and use appropriate compiler flag variables. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-9 commit beccf905e48ef65b97ac09d4b50565d31ca4b647 Author: Yozo Hida Date: Fri Dec 5 19:59:58 2003 +0000 Added versioning info in configure.ac Added appropriate defines in config.h.in, and cleaned up unused ones. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-8 commit 27f09363bb60d91c6d566ccf40de74fd6755f680 Author: Yozo Hida Date: Fri Dec 5 19:37:43 2003 +0000 Removed install-sh since it is not needed. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-7 commit 5d29575fff60475e0a8c239634191b485e235481 Author: Yozo Hida Date: Fri Dec 5 19:36:41 2003 +0000 Added contributor section in AUTHORS. Added Yves Renard, who contributed the autoconf, automake, and libtool support. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-6 commit b3e98ea836f9bdeab6dadb09b8abb127328d5a02 Author: Yozo Hida Date: Fri Dec 5 19:08:37 2003 +0000 Added "maintainer-clean" target to Makefile. This removes the configure script generated by autoconf. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-5 commit c4bba33a0d64c1c515ed84722a09f848065f8381 Author: Yozo Hida Date: Fri Dec 5 09:03:12 2003 +0000 Added autoconf scripts. Added autoconf scripts and config header files, as well as make.inc.in file. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-4 commit a240dd74af4d46fe1aae42d17c2bc113a41af1a4 Author: Yozo Hida Date: Fri Dec 5 07:21:54 2003 +0000 Added AUTHORS file. To conform to GNU standards (required by automake). git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-3 commit 78d24a3f5a7a5c97f85afe7b8b8aa810e16b7dbf Author: Yozo Hida Date: Fri Dec 5 07:03:34 2003 +0000 Added "dep" target to tests/Makefile. This generates the file make.dep which lists the dependency among source files. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-2 commit 6b7466d40682e22cca06e838a5023d81ad77a9a6 Author: Yozo Hida Date: Fri Dec 5 07:00:40 2003 +0000 Moved all include files into qd directory. Moved all include files into qd directory. Thus "dd.h" is now "qd/dd.h", etc. This lessens the chances of name clash with other packages such as arprec. Necessary changes in source files (both in src and tests directories were made) and README where made as well. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--2--patch-1 commit b96e89501cbe3921cea59c963c00572c65d99aea Author: Yozo Hida Date: Fri Dec 5 06:06:06 2003 +0000 Updated NEWS for 1.2 release, added ChangeLog Updated NEWS for 1.2 release. Added ChangeLog file, automatically generated form "tla changelog". git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-13 commit 42790e919fea6d29e717b07dbdfa61be30e7d75c Author: Yozo Hida Date: Fri Dec 5 05:57:00 2003 +0000 Fix bug in '-all' flag in qd_test Fixed it so that it runs both dd and qd tests. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-12 commit 8ef95b8c0921fab96cb9e2c817ccb249b9a975b6 Author: Yozo Hida Date: Fri Dec 5 05:42:04 2003 +0000 Added COPYING as source to the inventory. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-11 commit 28999fc7bfca135d2ed1e105be976fc223860592 Author: Yozo Hida Date: Fri Dec 5 05:39:04 2003 +0000 Updated README, COPYING, and NEWS files. The file COPYING now contains the license information, NEWS contains the recent changes, and README was updated. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-10 commit c6933fc31a2d8fa4929d228be1168323ee7572ed Author: Yozo Hida Date: Fri Dec 5 05:26:43 2003 +0000 Changed {arch}/=tagging-method to ignore various files. Modified {arch}/=tagging-method to mark 'make.inc' as precious and mark generated files (.o and executables) as junk. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-9 commit 5549acc369c16d600a0a26340aff138cff53acf6 Author: Yozo Hida Date: Thu Nov 27 10:12:28 2003 +0000 Fixed operator ambiguity bugs in pslq_test.cpp. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-8 commit 10a674b0e4c064ddd7b9ab02e9da3fdfb5b58add Author: Yozo Hida Date: Thu Nov 27 10:03:11 2003 +0000 Changed .cc extension to .cpp extension. Some compilers (such as VC++) does not accept .cc extensions. Corresponding comments, #include directives, and Makefile has been modified. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-7 commit 09fd467c2a1ba6aa566a3599624f5914d98c9b9e Author: Yozo Hida Date: Thu Nov 27 09:51:28 2003 +0000 Increased tolerance for qd/dd tests. The tests where not passing due to tolerances being too small. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-6 commit 4ee9bc3ccf839fc189b038223442d2eb96c4d78c Author: Yozo Hida Date: Thu Nov 27 09:45:20 2003 +0000 Initialize dd and qd variables to zero. Set the fields in dd/qd in the constructor with no arguments. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-5 commit 08ad70b30b754c6427244f37285c802367410191 Author: Yozo Hida Date: Thu Nov 27 09:37:16 2003 +0000 Added dist-clean target in Makefile, cleaned up archive target. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-4 commit dc82fc4b05b8a796a9cad46720a937a70a45588a Author: Yozo Hida Date: Thu Nov 27 09:11:09 2003 +0000 Removed make.inc. Since make.inc needs to be modified for each platform, it was removed. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-3 commit f88fd72029d0dce9f7ce4f58d7bdcd4f746bd0c6 Author: Yozo Hida Date: Mon Nov 24 10:04:09 2003 +0000 Renamed readme-qd to README git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-2 commit ec228a706e259bfb04f596fd78bbbd535102a643 Author: Yozo Hida Date: Mon Nov 24 10:01:56 2003 +0000 Fix spelling errors in readme-qd git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--patch-1 commit b146f1373d8e609e258b31b2c55502048831c3b1 Author: Yozo Hida Date: Mon Nov 24 09:55:14 2003 +0000 Initial import of qd version without configuration files. git-archimport-id: yozo@cs.berkeley.edu--qd/qd--mainline--1.0--base-0