summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rwxr-xr-xsrc/lib/libcrypto/aes/asm/aes-x86_64.pl3
-rw-r--r--src/lib/libcrypto/aes/asm/aesni-x86_64.pl3
-rw-r--r--src/lib/libcrypto/asn1/a_int.c2
-rw-r--r--src/lib/libcrypto/asn1/a_strex.c1
-rw-r--r--src/lib/libcrypto/asn1/asn1_err.c2
-rw-r--r--src/lib/libcrypto/asn1/x_pubkey.c5
-rw-r--r--src/lib/libcrypto/bio/bss_dgram.c91
-rw-r--r--src/lib/libcrypto/bio/bss_log.c2
-rw-r--r--src/lib/libcrypto/bn/bn.h11
-rw-r--r--src/lib/libcrypto/bn/bn_div.c2
-rw-r--r--src/lib/libcrypto/bn/bn_gcd.c1
-rw-r--r--src/lib/libcrypto/bn/bn_lcl.h11
-rw-r--r--src/lib/libcrypto/bn/bn_lib.c52
-rw-r--r--src/lib/libcrypto/bn/bn_nist.c55
-rw-r--r--src/lib/libcrypto/buffer/buffer.c4
-rw-r--r--src/lib/libcrypto/buffer/buffer.h2
-rw-r--r--src/lib/libcrypto/cryptlib.c18
-rw-r--r--src/lib/libcrypto/cryptlib.h2
-rw-r--r--src/lib/libcrypto/crypto-lib.com1516
-rw-r--r--src/lib/libcrypto/crypto.h11
-rw-r--r--src/lib/libcrypto/des/des-lib.com1005
-rw-r--r--src/lib/libcrypto/des/des.h6
-rw-r--r--src/lib/libcrypto/des/des_old.h6
-rw-r--r--src/lib/libcrypto/des/set_key.c3
-rw-r--r--src/lib/libcrypto/des/str2key.c2
-rw-r--r--src/lib/libcrypto/doc/ERR_get_error.pod7
-rw-r--r--src/lib/libcrypto/doc/EVP_BytesToKey.pod2
-rw-r--r--src/lib/libcrypto/doc/EVP_DigestInit.pod6
-rw-r--r--src/lib/libcrypto/doc/EVP_EncryptInit.pod2
-rw-r--r--src/lib/libcrypto/doc/EVP_SignInit.pod8
-rw-r--r--src/lib/libcrypto/doc/dsa.pod3
-rw-r--r--src/lib/libcrypto/dso/dso_dlfcn.c2
-rw-r--r--src/lib/libcrypto/ec/ec.h28
-rw-r--r--src/lib/libcrypto/ec/ec_lib.c10
-rw-r--r--src/lib/libcrypto/ec/ecp_mont.c1
-rw-r--r--src/lib/libcrypto/ec/ectest.c2
-rw-r--r--src/lib/libcrypto/ecdh/Makefile17
-rw-r--r--src/lib/libcrypto/engine/eng_all.c1
-rw-r--r--src/lib/libcrypto/engine/eng_list.c1
-rw-r--r--src/lib/libcrypto/err/err_all.c19
-rw-r--r--src/lib/libcrypto/evp/Makefile51
-rw-r--r--src/lib/libcrypto/evp/bio_b64.c2
-rw-r--r--src/lib/libcrypto/evp/digest.c8
-rw-r--r--src/lib/libcrypto/evp/e_aes.c21
-rw-r--r--src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c5
-rw-r--r--src/lib/libcrypto/evp/e_des3.c6
-rw-r--r--src/lib/libcrypto/evp/evp.h14
-rw-r--r--src/lib/libcrypto/evp/evp_err.c6
-rw-r--r--src/lib/libcrypto/evp/m_dss.c2
-rw-r--r--src/lib/libcrypto/evp/m_dss1.c2
-rw-r--r--src/lib/libcrypto/evp/m_sha1.c2
-rw-r--r--src/lib/libcrypto/evp/p5_crpt2.c40
-rw-r--r--src/lib/libcrypto/evp/p_sign.c2
-rw-r--r--src/lib/libcrypto/evp/p_verify.c2
-rwxr-xr-xsrc/lib/libcrypto/install-crypto.com196
-rw-r--r--src/lib/libcrypto/install.com155
-rw-r--r--src/lib/libcrypto/md4/md4_dgst.c31
-rw-r--r--src/lib/libcrypto/md4/md4_locl.h8
-rw-r--r--src/lib/libcrypto/md5/md5_locl.h8
-rw-r--r--src/lib/libcrypto/mdc2/mdc2dgst.c2
-rw-r--r--src/lib/libcrypto/mem.c2
-rw-r--r--src/lib/libcrypto/modes/Makefile5
-rw-r--r--src/lib/libcrypto/objects/o_names.c2
-rw-r--r--src/lib/libcrypto/ocsp/ocsp_vfy.c1
-rw-r--r--src/lib/libcrypto/opensslv.h6
-rw-r--r--src/lib/libcrypto/pem/pem_all.c161
-rw-r--r--src/lib/libcrypto/pem/pem_info.c1
-rw-r--r--src/lib/libcrypto/pem/pem_lib.c27
-rw-r--r--src/lib/libcrypto/pem/pem_seal.c6
-rw-r--r--src/lib/libcrypto/perlasm/cbc.pl2
-rw-r--r--src/lib/libcrypto/pkcs12/p12_crt.c7
-rw-r--r--src/lib/libcrypto/pkcs12/p12_key.c24
-rw-r--r--src/lib/libcrypto/rand/md_rand.c27
-rw-r--r--src/lib/libcrypto/rand/rand.h1
-rw-r--r--src/lib/libcrypto/rand/rand_err.c1
-rw-r--r--src/lib/libcrypto/rand/rand_lib.c15
-rw-r--r--src/lib/libcrypto/rand/rand_win.c2
-rw-r--r--src/lib/libcrypto/rand/randfile.c2
-rwxr-xr-xsrc/lib/libcrypto/rc4/asm/rc4-x86_64.pl3
-rw-r--r--src/lib/libcrypto/rc4/rc4test.c6
-rw-r--r--src/lib/libcrypto/ripemd/rmd_dgst.c32
-rw-r--r--src/lib/libcrypto/ripemd/rmd_locl.h10
-rw-r--r--src/lib/libcrypto/rsa/rsa.h2
-rw-r--r--src/lib/libcrypto/rsa/rsa_chk.c6
-rw-r--r--src/lib/libcrypto/rsa/rsa_eay.c6
-rw-r--r--src/lib/libcrypto/rsa/rsa_oaep.c2
-rw-r--r--src/lib/libcrypto/sha/Makefile4
-rw-r--r--src/lib/libcrypto/sha/sha1_one.c2
-rw-r--r--src/lib/libcrypto/sha/sha1dgst.c2
-rw-r--r--src/lib/libcrypto/sha/sha_dgst.c2
-rw-r--r--src/lib/libcrypto/sha/sha_locl.h40
-rw-r--r--src/lib/libcrypto/symhacks.h20
-rw-r--r--src/lib/libcrypto/threads/pthreads-vms.com14
-rw-r--r--src/lib/libcrypto/ui/ui_openssl.c10
-rw-r--r--src/lib/libcrypto/util/deltree.com34
-rw-r--r--src/lib/libcrypto/util/libeay.num4
-rw-r--r--src/lib/libcrypto/util/mk1mf.pl2
-rw-r--r--src/lib/libcrypto/util/pl/BC-32.pl8
-rw-r--r--src/lib/libcrypto/util/pl/VC-32.pl9
-rw-r--r--src/lib/libcrypto/x509/by_dir.c6
-rw-r--r--src/lib/libcrypto/x509/x509_cmp.c15
-rw-r--r--src/lib/libcrypto/x509/x509_vfy.c20
-rw-r--r--src/lib/libcrypto/x509/x_all.c2
-rw-r--r--src/lib/libcrypto/x509v3/v3_purp.c4
-rw-r--r--src/lib/libcrypto/x86_64cpuid.pl3
-rw-r--r--src/lib/libssl/d1_both.c8
-rw-r--r--src/lib/libssl/d1_clnt.c36
-rw-r--r--src/lib/libssl/d1_pkt.c11
-rw-r--r--src/lib/libssl/d1_srvr.c29
-rw-r--r--src/lib/libssl/dtls1.h8
-rw-r--r--src/lib/libssl/s23_clnt.c29
-rw-r--r--src/lib/libssl/s3_both.c15
-rw-r--r--src/lib/libssl/s3_clnt.c11
-rw-r--r--src/lib/libssl/s3_lib.c34
-rw-r--r--src/lib/libssl/s3_pkt.c11
-rw-r--r--src/lib/libssl/s3_srvr.c39
-rw-r--r--src/lib/libssl/src/CHANGES237
-rw-r--r--src/lib/libssl/src/Configure22
-rw-r--r--src/lib/libssl/src/FAQ7
-rw-r--r--src/lib/libssl/src/INSTALL.W324
-rw-r--r--src/lib/libssl/src/MacOS/GUSI_Init.cpp62
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.cpp2753
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.hpp104
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.cpp170
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.hpp147
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/GetHTTPS.cpp209
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.cpp1607
-rw-r--r--src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.h103
-rw-r--r--src/lib/libssl/src/MacOS/OpenSSL.mcp.hqx4940
-rw-r--r--src/lib/libssl/src/MacOS/Randomizer.cpp476
-rw-r--r--src/lib/libssl/src/MacOS/Randomizer.h43
-rw-r--r--src/lib/libssl/src/MacOS/TODO18
-rw-r--r--src/lib/libssl/src/MacOS/_MWERKS_GUSI_prefix.h9
-rw-r--r--src/lib/libssl/src/MacOS/_MWERKS_prefix.h9
-rw-r--r--src/lib/libssl/src/MacOS/buildinf.h5
-rw-r--r--src/lib/libssl/src/MacOS/mklinks.as.hqx820
-rw-r--r--src/lib/libssl/src/MacOS/opensslconf.h116
-rw-r--r--src/lib/libssl/src/Makefile9
-rw-r--r--src/lib/libssl/src/Makefile.org7
-rw-r--r--src/lib/libssl/src/NEWS199
-rw-r--r--src/lib/libssl/src/Netware/build.bat235
-rw-r--r--src/lib/libssl/src/Netware/cpy_tests.bat113
-rw-r--r--src/lib/libssl/src/Netware/do_tests.pl624
-rw-r--r--src/lib/libssl/src/Netware/globals.txt254
-rw-r--r--src/lib/libssl/src/Netware/readme.txt19
-rw-r--r--src/lib/libssl/src/Netware/set_env.bat112
-rw-r--r--src/lib/libssl/src/PROBLEMS14
-rw-r--r--src/lib/libssl/src/README4
-rw-r--r--src/lib/libssl/src/VMS/TODO18
-rw-r--r--src/lib/libssl/src/VMS/VMSify-conf.pl34
-rw-r--r--src/lib/libssl/src/VMS/WISHLIST.TXT4
-rwxr-xr-xsrc/lib/libssl/src/VMS/install-vms.com67
-rw-r--r--src/lib/libssl/src/VMS/install.com79
-rw-r--r--src/lib/libssl/src/VMS/mkshared.com476
-rw-r--r--src/lib/libssl/src/VMS/multinet_shr.opt1
-rwxr-xr-xsrc/lib/libssl/src/VMS/openssl_startup.com108
-rwxr-xr-xsrc/lib/libssl/src/VMS/openssl_undo.com20
-rw-r--r--src/lib/libssl/src/VMS/openssl_utils.com46
-rw-r--r--src/lib/libssl/src/VMS/socketshr_shr.opt1
-rw-r--r--src/lib/libssl/src/VMS/tcpip_shr_decc.opt1
-rw-r--r--src/lib/libssl/src/VMS/test-includes.com28
-rw-r--r--src/lib/libssl/src/VMS/ucx_shr_decc.opt1
-rw-r--r--src/lib/libssl/src/VMS/ucx_shr_decc_log.opt1
-rw-r--r--src/lib/libssl/src/VMS/ucx_shr_vaxc.opt1
-rw-r--r--src/lib/libssl/src/apps/CA.com236
-rw-r--r--src/lib/libssl/src/apps/Makefile17
-rw-r--r--src/lib/libssl/src/apps/apps.c11
-rw-r--r--src/lib/libssl/src/apps/apps.h2
-rw-r--r--src/lib/libssl/src/apps/ca.c1
-rw-r--r--src/lib/libssl/src/apps/crl.c18
-rw-r--r--src/lib/libssl/src/apps/dgst.c8
-rw-r--r--src/lib/libssl/src/apps/dhparam.c1
-rw-r--r--src/lib/libssl/src/apps/dsaparam.c9
-rw-r--r--src/lib/libssl/src/apps/genrsa.c2
-rwxr-xr-xsrc/lib/libssl/src/apps/install-apps.com107
-rw-r--r--src/lib/libssl/src/apps/install.com65
-rw-r--r--src/lib/libssl/src/apps/makeapps.com1169
-rw-r--r--src/lib/libssl/src/apps/ocsp.c2
-rw-r--r--src/lib/libssl/src/apps/openssl.c1
-rw-r--r--src/lib/libssl/src/apps/pkcs12.c9
-rw-r--r--src/lib/libssl/src/apps/req.c13
-rw-r--r--src/lib/libssl/src/apps/s_cb.c6
-rw-r--r--src/lib/libssl/src/apps/s_client.c20
-rw-r--r--src/lib/libssl/src/apps/s_server.c63
-rw-r--r--src/lib/libssl/src/apps/speed.c4
-rw-r--r--src/lib/libssl/src/apps/tsget2
-rw-r--r--src/lib/libssl/src/apps/verify.c27
-rw-r--r--src/lib/libssl/src/apps/x509.c4
-rwxr-xr-xsrc/lib/libssl/src/crypto/aes/asm/aes-x86_64.pl3
-rw-r--r--src/lib/libssl/src/crypto/aes/asm/aesni-x86_64.pl3
-rw-r--r--src/lib/libssl/src/crypto/asn1/a_int.c2
-rw-r--r--src/lib/libssl/src/crypto/asn1/a_strex.c1
-rw-r--r--src/lib/libssl/src/crypto/asn1/asn1_err.c2
-rw-r--r--src/lib/libssl/src/crypto/asn1/x_pubkey.c5
-rw-r--r--src/lib/libssl/src/crypto/bio/bss_dgram.c91
-rw-r--r--src/lib/libssl/src/crypto/bio/bss_log.c2
-rw-r--r--src/lib/libssl/src/crypto/bn/bn.h11
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_div.c2
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_gcd.c1
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_lcl.h11
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_lib.c52
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_nist.c55
-rw-r--r--src/lib/libssl/src/crypto/buffer/buffer.c4
-rw-r--r--src/lib/libssl/src/crypto/buffer/buffer.h2
-rw-r--r--src/lib/libssl/src/crypto/cryptlib.c18
-rw-r--r--src/lib/libssl/src/crypto/cryptlib.h2
-rw-r--r--src/lib/libssl/src/crypto/crypto-lib.com1516
-rw-r--r--src/lib/libssl/src/crypto/crypto.h11
-rw-r--r--src/lib/libssl/src/crypto/des/des-lib.com1005
-rw-r--r--src/lib/libssl/src/crypto/des/des.h6
-rw-r--r--src/lib/libssl/src/crypto/des/des_old.h6
-rw-r--r--src/lib/libssl/src/crypto/des/set_key.c3
-rw-r--r--src/lib/libssl/src/crypto/des/str2key.c2
-rw-r--r--src/lib/libssl/src/crypto/dso/dso_dlfcn.c2
-rw-r--r--src/lib/libssl/src/crypto/ec/ec.h28
-rw-r--r--src/lib/libssl/src/crypto/ec/ec_lib.c10
-rw-r--r--src/lib/libssl/src/crypto/ec/ecp_mont.c1
-rw-r--r--src/lib/libssl/src/crypto/ec/ectest.c2
-rw-r--r--src/lib/libssl/src/crypto/ecdh/Makefile17
-rw-r--r--src/lib/libssl/src/crypto/engine/eng_all.c1
-rw-r--r--src/lib/libssl/src/crypto/engine/eng_list.c1
-rw-r--r--src/lib/libssl/src/crypto/err/err_all.c19
-rw-r--r--src/lib/libssl/src/crypto/evp/Makefile51
-rw-r--r--src/lib/libssl/src/crypto/evp/bio_b64.c2
-rw-r--r--src/lib/libssl/src/crypto/evp/digest.c8
-rw-r--r--src/lib/libssl/src/crypto/evp/e_aes.c21
-rw-r--r--src/lib/libssl/src/crypto/evp/e_aes_cbc_hmac_sha1.c5
-rw-r--r--src/lib/libssl/src/crypto/evp/e_des3.c6
-rw-r--r--src/lib/libssl/src/crypto/evp/evp.h14
-rw-r--r--src/lib/libssl/src/crypto/evp/evp_err.c6
-rw-r--r--src/lib/libssl/src/crypto/evp/m_dss.c2
-rw-r--r--src/lib/libssl/src/crypto/evp/m_dss1.c2
-rw-r--r--src/lib/libssl/src/crypto/evp/m_sha1.c2
-rw-r--r--src/lib/libssl/src/crypto/evp/p5_crpt2.c40
-rw-r--r--src/lib/libssl/src/crypto/evp/p_sign.c2
-rw-r--r--src/lib/libssl/src/crypto/evp/p_verify.c2
-rwxr-xr-xsrc/lib/libssl/src/crypto/install-crypto.com196
-rw-r--r--src/lib/libssl/src/crypto/install.com155
-rw-r--r--src/lib/libssl/src/crypto/md4/md4_dgst.c31
-rw-r--r--src/lib/libssl/src/crypto/md4/md4_locl.h8
-rw-r--r--src/lib/libssl/src/crypto/md5/md5_locl.h8
-rw-r--r--src/lib/libssl/src/crypto/mdc2/mdc2dgst.c2
-rw-r--r--src/lib/libssl/src/crypto/mem.c2
-rw-r--r--src/lib/libssl/src/crypto/modes/Makefile5
-rw-r--r--src/lib/libssl/src/crypto/objects/o_names.c2
-rw-r--r--src/lib/libssl/src/crypto/ocsp/ocsp_vfy.c1
-rw-r--r--src/lib/libssl/src/crypto/opensslv.h6
-rw-r--r--src/lib/libssl/src/crypto/pem/pem_all.c161
-rw-r--r--src/lib/libssl/src/crypto/pem/pem_info.c1
-rw-r--r--src/lib/libssl/src/crypto/pem/pem_lib.c27
-rw-r--r--src/lib/libssl/src/crypto/pem/pem_seal.c6
-rw-r--r--src/lib/libssl/src/crypto/perlasm/cbc.pl2
-rw-r--r--src/lib/libssl/src/crypto/pkcs12/p12_crt.c7
-rw-r--r--src/lib/libssl/src/crypto/pkcs12/p12_key.c24
-rw-r--r--src/lib/libssl/src/crypto/rand/md_rand.c27
-rw-r--r--src/lib/libssl/src/crypto/rand/rand.h1
-rw-r--r--src/lib/libssl/src/crypto/rand/rand_err.c1
-rw-r--r--src/lib/libssl/src/crypto/rand/rand_lib.c15
-rw-r--r--src/lib/libssl/src/crypto/rand/rand_win.c2
-rw-r--r--src/lib/libssl/src/crypto/rand/randfile.c2
-rwxr-xr-xsrc/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl3
-rw-r--r--src/lib/libssl/src/crypto/rc4/rc4test.c6
-rw-r--r--src/lib/libssl/src/crypto/ripemd/rmd_dgst.c32
-rw-r--r--src/lib/libssl/src/crypto/ripemd/rmd_locl.h10
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa.h2
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa_chk.c6
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa_eay.c6
-rw-r--r--src/lib/libssl/src/crypto/rsa/rsa_oaep.c2
-rw-r--r--src/lib/libssl/src/crypto/sha/Makefile4
-rw-r--r--src/lib/libssl/src/crypto/sha/sha1_one.c2
-rw-r--r--src/lib/libssl/src/crypto/sha/sha1dgst.c2
-rw-r--r--src/lib/libssl/src/crypto/sha/sha_dgst.c2
-rw-r--r--src/lib/libssl/src/crypto/sha/sha_locl.h40
-rw-r--r--src/lib/libssl/src/crypto/symhacks.h20
-rw-r--r--src/lib/libssl/src/crypto/threads/pthreads-vms.com14
-rw-r--r--src/lib/libssl/src/crypto/ui/ui_openssl.c10
-rw-r--r--src/lib/libssl/src/crypto/x509/by_dir.c6
-rw-r--r--src/lib/libssl/src/crypto/x509/x509_cmp.c15
-rw-r--r--src/lib/libssl/src/crypto/x509/x509_vfy.c20
-rw-r--r--src/lib/libssl/src/crypto/x509/x_all.c2
-rw-r--r--src/lib/libssl/src/crypto/x509v3/v3_purp.c4
-rw-r--r--src/lib/libssl/src/crypto/x86_64cpuid.pl3
-rw-r--r--src/lib/libssl/src/demos/easy_tls/Makefile2
-rw-r--r--src/lib/libssl/src/demos/easy_tls/cacerts.pem2
-rw-r--r--src/lib/libssl/src/demos/easy_tls/cert.pem2
-rw-r--r--src/lib/libssl/src/demos/easy_tls/easy-tls.c4
-rw-r--r--src/lib/libssl/src/demos/easy_tls/easy-tls.h2
-rw-r--r--src/lib/libssl/src/demos/easy_tls/test.c2
-rw-r--r--src/lib/libssl/src/demos/easy_tls/test.h2
-rw-r--r--src/lib/libssl/src/demos/engines/rsaref/build.com105
-rw-r--r--src/lib/libssl/src/demos/x509/mkreq.c5
-rw-r--r--src/lib/libssl/src/doc/apps/CA.pl.pod8
-rw-r--r--src/lib/libssl/src/doc/apps/config.pod2
-rw-r--r--src/lib/libssl/src/doc/apps/crl.pod5
-rw-r--r--src/lib/libssl/src/doc/apps/pkcs12.pod9
-rw-r--r--src/lib/libssl/src/doc/apps/req.pod2
-rw-r--r--src/lib/libssl/src/doc/apps/rsa.pod15
-rw-r--r--src/lib/libssl/src/doc/apps/s_client.pod16
-rw-r--r--src/lib/libssl/src/doc/apps/s_server.pod2
-rw-r--r--src/lib/libssl/src/doc/apps/verify.pod60
-rw-r--r--src/lib/libssl/src/doc/apps/x509.pod5
-rw-r--r--src/lib/libssl/src/doc/crypto/ERR_get_error.pod7
-rw-r--r--src/lib/libssl/src/doc/crypto/EVP_BytesToKey.pod2
-rw-r--r--src/lib/libssl/src/doc/crypto/EVP_DigestInit.pod6
-rw-r--r--src/lib/libssl/src/doc/crypto/EVP_EncryptInit.pod2
-rw-r--r--src/lib/libssl/src/doc/crypto/EVP_PKEY_verifyrecover.pod103
-rw-r--r--src/lib/libssl/src/doc/crypto/EVP_SignInit.pod8
-rw-r--r--src/lib/libssl/src/doc/crypto/des_modes.pod3
-rw-r--r--src/lib/libssl/src/doc/crypto/dsa.pod3
-rw-r--r--src/lib/libssl/src/doc/crypto/hmac.pod2
-rw-r--r--src/lib/libssl/src/doc/crypto/mdc2.pod2
-rw-r--r--src/lib/libssl/src/doc/crypto/pem.pod2
-rw-r--r--src/lib/libssl/src/doc/crypto/ripemd.pod2
-rw-r--r--src/lib/libssl/src/doc/crypto/sha.pod2
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_CTX_set_client_CA_list.pod8
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_CTX_set_options.pod5
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_CTX_set_verify.pod4
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_accept.pod12
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_connect.pod10
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_do_handshake.pod10
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_set_shutdown.pod2
-rw-r--r--src/lib/libssl/src/doc/ssl/SSL_shutdown.pod10
-rw-r--r--src/lib/libssl/src/doc/ssl/ssl.pod2
-rw-r--r--src/lib/libssl/src/e_os.h7
-rw-r--r--src/lib/libssl/src/engines/e_capi.c5
-rw-r--r--src/lib/libssl/src/engines/makeengines.com1125
-rw-r--r--src/lib/libssl/src/engines/vendor_defns/hwcryptohook.h2
-rw-r--r--src/lib/libssl/src/install.com136
-rw-r--r--src/lib/libssl/src/makevms.com1543
-rw-r--r--src/lib/libssl/src/ms/32all.bat20
-rw-r--r--src/lib/libssl/src/ms/README13
-rw-r--r--src/lib/libssl/src/ms/applink.c94
-rw-r--r--src/lib/libssl/src/ms/bcb4.bat6
-rw-r--r--src/lib/libssl/src/ms/certCA.srl1
-rw-r--r--src/lib/libssl/src/ms/certCA.ss10
-rw-r--r--src/lib/libssl/src/ms/certU.ss10
-rw-r--r--src/lib/libssl/src/ms/cmp.pl47
-rw-r--r--src/lib/libssl/src/ms/do_ms.bat11
-rw-r--r--src/lib/libssl/src/ms/do_nasm.bat8
-rw-r--r--src/lib/libssl/src/ms/do_nt.bat7
-rwxr-xr-xsrc/lib/libssl/src/ms/do_win64a.bat19
-rwxr-xr-xsrc/lib/libssl/src/ms/do_win64i.bat9
-rw-r--r--src/lib/libssl/src/ms/keyCA.ss9
-rw-r--r--src/lib/libssl/src/ms/keyU.ss9
-rw-r--r--src/lib/libssl/src/ms/mingw32.bat90
-rw-r--r--src/lib/libssl/src/ms/mw.bat26
-rw-r--r--src/lib/libssl/src/ms/req2CA.ss29
-rw-r--r--src/lib/libssl/src/ms/reqCA.ss8
-rw-r--r--src/lib/libssl/src/ms/reqU.ss8
-rw-r--r--src/lib/libssl/src/ms/speed32.bat37
-rw-r--r--src/lib/libssl/src/ms/tenc.bat14
-rw-r--r--src/lib/libssl/src/ms/tencce.bat19
-rw-r--r--src/lib/libssl/src/ms/test.bat185
-rw-r--r--src/lib/libssl/src/ms/testce.bat234
-rw-r--r--src/lib/libssl/src/ms/testce2.bat2
-rw-r--r--src/lib/libssl/src/ms/testenc.bat94
-rw-r--r--src/lib/libssl/src/ms/testencce.bat97
-rw-r--r--src/lib/libssl/src/ms/testpem.bat32
-rw-r--r--src/lib/libssl/src/ms/testpemce.bat42
-rw-r--r--src/lib/libssl/src/ms/testss.bat98
-rw-r--r--src/lib/libssl/src/ms/testssce.bat104
-rw-r--r--src/lib/libssl/src/ms/tlhelp32.h136
-rw-r--r--src/lib/libssl/src/ms/tpem.bat6
-rw-r--r--src/lib/libssl/src/ms/tpemce.bat8
-rwxr-xr-xsrc/lib/libssl/src/ms/uplink-common.pl22
-rwxr-xr-xsrc/lib/libssl/src/ms/uplink-ia64.pl50
-rwxr-xr-xsrc/lib/libssl/src/ms/uplink-x86.pl33
-rwxr-xr-xsrc/lib/libssl/src/ms/uplink-x86_64.pl64
-rw-r--r--src/lib/libssl/src/ms/uplink.c117
-rw-r--r--src/lib/libssl/src/ms/uplink.h29
-rwxr-xr-xsrc/lib/libssl/src/ms/uplink.pl204
-rw-r--r--src/lib/libssl/src/ms/x86asm.bat57
-rw-r--r--src/lib/libssl/src/openssl.spec9
-rw-r--r--src/lib/libssl/src/os2/OS2-EMX.cmd102
-rw-r--r--src/lib/libssl/src/os2/backwardify.pl32
-rw-r--r--src/lib/libssl/src/ssl/Makefile24
-rw-r--r--src/lib/libssl/src/ssl/d1_both.c8
-rw-r--r--src/lib/libssl/src/ssl/d1_clnt.c36
-rw-r--r--src/lib/libssl/src/ssl/d1_pkt.c11
-rw-r--r--src/lib/libssl/src/ssl/d1_srvr.c29
-rw-r--r--src/lib/libssl/src/ssl/dtls1.h8
-rwxr-xr-xsrc/lib/libssl/src/ssl/install-ssl.com136
-rw-r--r--src/lib/libssl/src/ssl/install.com90
-rw-r--r--src/lib/libssl/src/ssl/kssl.h9
-rw-r--r--src/lib/libssl/src/ssl/s23_clnt.c29
-rw-r--r--src/lib/libssl/src/ssl/s2_clnt.c14
-rw-r--r--src/lib/libssl/src/ssl/s2_pkt.c2
-rw-r--r--src/lib/libssl/src/ssl/s2_srvr.c16
-rw-r--r--src/lib/libssl/src/ssl/s3_both.c15
-rw-r--r--src/lib/libssl/src/ssl/s3_clnt.c11
-rw-r--r--src/lib/libssl/src/ssl/s3_lib.c34
-rw-r--r--src/lib/libssl/src/ssl/s3_pkt.c11
-rw-r--r--src/lib/libssl/src/ssl/s3_srvr.c39
-rw-r--r--src/lib/libssl/src/ssl/ssl-lib.com1214
-rw-r--r--src/lib/libssl/src/ssl/ssl.h21
-rw-r--r--src/lib/libssl/src/ssl/ssl3.h15
-rw-r--r--src/lib/libssl/src/ssl/ssl_algs.c1
-rw-r--r--src/lib/libssl/src/ssl/ssl_cert.c4
-rw-r--r--src/lib/libssl/src/ssl/ssl_ciph.c5
-rw-r--r--src/lib/libssl/src/ssl/ssl_err.c1
-rw-r--r--src/lib/libssl/src/ssl/ssl_lib.c26
-rw-r--r--src/lib/libssl/src/ssl/ssl_locl.h7
-rw-r--r--src/lib/libssl/src/ssl/ssl_rsa.c14
-rw-r--r--src/lib/libssl/src/ssl/ssltest.c12
-rw-r--r--src/lib/libssl/src/ssl/t1_enc.c11
-rw-r--r--src/lib/libssl/src/ssl/t1_lib.c269
-rw-r--r--src/lib/libssl/src/ssl/tls1.h6
-rw-r--r--src/lib/libssl/src/test/Makefile2
-rw-r--r--src/lib/libssl/src/test/bctest.com152
-rw-r--r--src/lib/libssl/src/test/bntest.com76
-rwxr-xr-xsrc/lib/libssl/src/test/clean_test.com35
-rw-r--r--src/lib/libssl/src/test/maketests.com1087
-rw-r--r--src/lib/libssl/src/test/tcrl.com88
-rw-r--r--src/lib/libssl/src/test/testca.com52
-rw-r--r--src/lib/libssl/src/test/testenc.com66
-rw-r--r--src/lib/libssl/src/test/testgen.com58
-rw-r--r--src/lib/libssl/src/test/tests.com375
-rw-r--r--src/lib/libssl/src/test/testss.com123
-rw-r--r--src/lib/libssl/src/test/testssl17
-rw-r--r--src/lib/libssl/src/test/testssl.com208
-rw-r--r--src/lib/libssl/src/test/testtsa.com255
-rw-r--r--src/lib/libssl/src/test/tpkcs7.com59
-rw-r--r--src/lib/libssl/src/test/tpkcs7d.com52
-rw-r--r--src/lib/libssl/src/test/treq.com88
-rw-r--r--src/lib/libssl/src/test/trsa.com99
-rw-r--r--src/lib/libssl/src/test/tsid.com88
-rw-r--r--src/lib/libssl/src/test/tverify.com65
-rw-r--r--src/lib/libssl/src/test/tx509.com88
-rw-r--r--src/lib/libssl/src/util/deltree.com34
-rw-r--r--src/lib/libssl/src/util/libeay.num4
-rw-r--r--src/lib/libssl/src/util/mk1mf.pl2
-rw-r--r--src/lib/libssl/src/util/pl/BC-32.pl8
-rw-r--r--src/lib/libssl/src/util/pl/VC-32.pl9
-rw-r--r--src/lib/libssl/ssl.h21
-rw-r--r--src/lib/libssl/ssl3.h15
-rw-r--r--src/lib/libssl/ssl_algs.c1
-rw-r--r--src/lib/libssl/ssl_cert.c4
-rw-r--r--src/lib/libssl/ssl_ciph.c5
-rw-r--r--src/lib/libssl/ssl_err.c1
-rw-r--r--src/lib/libssl/ssl_lib.c26
-rw-r--r--src/lib/libssl/ssl_locl.h7
-rw-r--r--src/lib/libssl/ssl_rsa.c14
-rw-r--r--src/lib/libssl/t1_enc.c11
-rw-r--r--src/lib/libssl/t1_lib.c269
-rw-r--r--src/lib/libssl/test/Makefile2
-rw-r--r--src/lib/libssl/test/bctest.com152
-rw-r--r--src/lib/libssl/test/bntest.com76
-rwxr-xr-xsrc/lib/libssl/test/clean_test.com35
-rw-r--r--src/lib/libssl/test/maketests.com1087
-rw-r--r--src/lib/libssl/test/tcrl.com88
-rw-r--r--src/lib/libssl/test/testca.com52
-rw-r--r--src/lib/libssl/test/testenc.com66
-rw-r--r--src/lib/libssl/test/testgen.com58
-rw-r--r--src/lib/libssl/test/tests.com375
-rw-r--r--src/lib/libssl/test/testss.com123
-rw-r--r--src/lib/libssl/test/testssl17
-rw-r--r--src/lib/libssl/test/testssl.com208
-rw-r--r--src/lib/libssl/test/testtsa.com255
-rw-r--r--src/lib/libssl/test/tpkcs7.com59
-rw-r--r--src/lib/libssl/test/tpkcs7d.com52
-rw-r--r--src/lib/libssl/test/treq.com88
-rw-r--r--src/lib/libssl/test/trsa.com99
-rw-r--r--src/lib/libssl/test/tsid.com88
-rw-r--r--src/lib/libssl/test/tverify.com65
-rw-r--r--src/lib/libssl/test/tx509.com88
-rw-r--r--src/lib/libssl/tls1.h6
466 files changed, 3284 insertions, 35459 deletions
diff --git a/src/lib/libcrypto/aes/asm/aes-x86_64.pl b/src/lib/libcrypto/aes/asm/aes-x86_64.pl
index 48fa857d5b..34cbb5d844 100755
--- a/src/lib/libcrypto/aes/asm/aes-x86_64.pl
+++ b/src/lib/libcrypto/aes/asm/aes-x86_64.pl
@@ -36,7 +36,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
36( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 36( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
37die "can't locate x86_64-xlate.pl"; 37die "can't locate x86_64-xlate.pl";
38 38
39open STDOUT,"| $^X $xlate $flavour $output"; 39open OUT,"| \"$^X\" $xlate $flavour $output";
40*STDOUT=*OUT;
40 41
41$verticalspin=1; # unlike 32-bit version $verticalspin performs 42$verticalspin=1; # unlike 32-bit version $verticalspin performs
42 # ~15% better on both AMD and Intel cores 43 # ~15% better on both AMD and Intel cores
diff --git a/src/lib/libcrypto/aes/asm/aesni-x86_64.pl b/src/lib/libcrypto/aes/asm/aesni-x86_64.pl
index 499f3b3f42..0dbb194b8d 100644
--- a/src/lib/libcrypto/aes/asm/aesni-x86_64.pl
+++ b/src/lib/libcrypto/aes/asm/aesni-x86_64.pl
@@ -172,7 +172,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
172( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 172( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
173die "can't locate x86_64-xlate.pl"; 173die "can't locate x86_64-xlate.pl";
174 174
175open STDOUT,"| $^X $xlate $flavour $output"; 175open OUT,"| \"$^X\" $xlate $flavour $output";
176*STDOUT=*OUT;
176 177
177$movkey = $PREFIX eq "aesni" ? "movups" : "movups"; 178$movkey = $PREFIX eq "aesni" ? "movups" : "movups";
178@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order 179@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c
index ad0d2506f6..297c45a9ff 100644
--- a/src/lib/libcrypto/asn1/a_int.c
+++ b/src/lib/libcrypto/asn1/a_int.c
@@ -116,7 +116,7 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
116 int pad=0,ret,i,neg; 116 int pad=0,ret,i,neg;
117 unsigned char *p,*n,pb=0; 117 unsigned char *p,*n,pb=0;
118 118
119 if ((a == NULL) || (a->data == NULL)) return(0); 119 if (a == NULL) return(0);
120 neg=a->type & V_ASN1_NEG; 120 neg=a->type & V_ASN1_NEG;
121 if (a->length == 0) 121 if (a->length == 0)
122 ret=1; 122 ret=1;
diff --git a/src/lib/libcrypto/asn1/a_strex.c b/src/lib/libcrypto/asn1/a_strex.c
index 264ebf2393..ead37ac325 100644
--- a/src/lib/libcrypto/asn1/a_strex.c
+++ b/src/lib/libcrypto/asn1/a_strex.c
@@ -567,6 +567,7 @@ int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in)
567 if(mbflag == -1) return -1; 567 if(mbflag == -1) return -1;
568 mbflag |= MBSTRING_FLAG; 568 mbflag |= MBSTRING_FLAG;
569 stmp.data = NULL; 569 stmp.data = NULL;
570 stmp.length = 0;
570 ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING); 571 ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING);
571 if(ret < 0) return ret; 572 if(ret < 0) return ret;
572 *out = stmp.data; 573 *out = stmp.data;
diff --git a/src/lib/libcrypto/asn1/asn1_err.c b/src/lib/libcrypto/asn1/asn1_err.c
index 1a30bf119b..aa60203ba8 100644
--- a/src/lib/libcrypto/asn1/asn1_err.c
+++ b/src/lib/libcrypto/asn1/asn1_err.c
@@ -305,7 +305,7 @@ static ERR_STRING_DATA ASN1_str_reasons[]=
305{ERR_REASON(ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE),"unknown public key type"}, 305{ERR_REASON(ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE),"unknown public key type"},
306{ERR_REASON(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM),"unknown signature algorithm"}, 306{ERR_REASON(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM),"unknown signature algorithm"},
307{ERR_REASON(ASN1_R_UNKNOWN_TAG) ,"unknown tag"}, 307{ERR_REASON(ASN1_R_UNKNOWN_TAG) ,"unknown tag"},
308{ERR_REASON(ASN1_R_UNKOWN_FORMAT) ,"unkown format"}, 308{ERR_REASON(ASN1_R_UNKOWN_FORMAT) ,"unknown format"},
309{ERR_REASON(ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE),"unsupported any defined by type"}, 309{ERR_REASON(ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE),"unsupported any defined by type"},
310{ERR_REASON(ASN1_R_UNSUPPORTED_CIPHER) ,"unsupported cipher"}, 310{ERR_REASON(ASN1_R_UNSUPPORTED_CIPHER) ,"unsupported cipher"},
311{ERR_REASON(ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM),"unsupported encryption algorithm"}, 311{ERR_REASON(ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM),"unsupported encryption algorithm"},
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c
index 627ec87f9f..b649e1fcf9 100644
--- a/src/lib/libcrypto/asn1/x_pubkey.c
+++ b/src/lib/libcrypto/asn1/x_pubkey.c
@@ -175,12 +175,15 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
175 CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY); 175 CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY);
176 if (key->pkey) 176 if (key->pkey)
177 { 177 {
178 CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
178 EVP_PKEY_free(ret); 179 EVP_PKEY_free(ret);
179 ret = key->pkey; 180 ret = key->pkey;
180 } 181 }
181 else 182 else
183 {
182 key->pkey = ret; 184 key->pkey = ret;
183 CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY); 185 CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
186 }
184 CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY); 187 CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
185 188
186 return ret; 189 return ret;
diff --git a/src/lib/libcrypto/bio/bss_dgram.c b/src/lib/libcrypto/bio/bss_dgram.c
index 1b1e4bec81..54c012c47d 100644
--- a/src/lib/libcrypto/bio/bss_dgram.c
+++ b/src/lib/libcrypto/bio/bss_dgram.c
@@ -77,10 +77,20 @@
77#define OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE 0xc0 77#define OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE 0xc0
78#endif 78#endif
79 79
80#ifdef OPENSSL_SYS_LINUX 80#if defined(OPENSSL_SYS_LINUX) && !defined(IP_MTU)
81#define IP_MTU 14 /* linux is lame */ 81#define IP_MTU 14 /* linux is lame */
82#endif 82#endif
83 83
84#if defined(__FreeBSD__) && defined(IN6_IS_ADDR_V4MAPPED)
85/* Standard definition causes type-punning problems. */
86#undef IN6_IS_ADDR_V4MAPPED
87#define s6_addr32 __u6_addr.__u6_addr32
88#define IN6_IS_ADDR_V4MAPPED(a) \
89 (((a)->s6_addr32[0] == 0) && \
90 ((a)->s6_addr32[1] == 0) && \
91 ((a)->s6_addr32[2] == htonl(0x0000ffff)))
92#endif
93
84#ifdef WATT32 94#ifdef WATT32
85#define sock_write SockWrite /* Watt-32 uses same names */ 95#define sock_write SockWrite /* Watt-32 uses same names */
86#define sock_read SockRead 96#define sock_read SockRead
@@ -255,7 +265,7 @@ static void dgram_adjust_rcv_timeout(BIO *b)
255 { 265 {
256#if defined(SO_RCVTIMEO) 266#if defined(SO_RCVTIMEO)
257 bio_dgram_data *data = (bio_dgram_data *)b->ptr; 267 bio_dgram_data *data = (bio_dgram_data *)b->ptr;
258 int sz = sizeof(int); 268 union { size_t s; int i; } sz = {0};
259 269
260 /* Is a timer active? */ 270 /* Is a timer active? */
261 if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) 271 if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0)
@@ -265,8 +275,10 @@ static void dgram_adjust_rcv_timeout(BIO *b)
265 /* Read current socket timeout */ 275 /* Read current socket timeout */
266#ifdef OPENSSL_SYS_WINDOWS 276#ifdef OPENSSL_SYS_WINDOWS
267 int timeout; 277 int timeout;
278
279 sz.i = sizeof(timeout);
268 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 280 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
269 (void*)&timeout, &sz) < 0) 281 (void*)&timeout, &sz.i) < 0)
270 { perror("getsockopt"); } 282 { perror("getsockopt"); }
271 else 283 else
272 { 284 {
@@ -274,9 +286,12 @@ static void dgram_adjust_rcv_timeout(BIO *b)
274 data->socket_timeout.tv_usec = (timeout % 1000) * 1000; 286 data->socket_timeout.tv_usec = (timeout % 1000) * 1000;
275 } 287 }
276#else 288#else
289 sz.i = sizeof(data->socket_timeout);
277 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 290 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
278 &(data->socket_timeout), (void *)&sz) < 0) 291 &(data->socket_timeout), (void *)&sz) < 0)
279 { perror("getsockopt"); } 292 { perror("getsockopt"); }
293 else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0)
294 OPENSSL_assert(sz.s<=sizeof(data->socket_timeout));
280#endif 295#endif
281 296
282 /* Get current time */ 297 /* Get current time */
@@ -445,11 +460,10 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
445 int *ip; 460 int *ip;
446 struct sockaddr *to = NULL; 461 struct sockaddr *to = NULL;
447 bio_dgram_data *data = NULL; 462 bio_dgram_data *data = NULL;
448#if defined(IP_MTU_DISCOVER) || defined(IP_MTU) 463#if defined(OPENSSL_SYS_LINUX) && (defined(IP_MTU_DISCOVER) || defined(IP_MTU))
449 long sockopt_val = 0; 464 int sockopt_val = 0;
450 unsigned int sockopt_len = 0; 465 socklen_t sockopt_len; /* assume that system supporting IP_MTU is
451#endif 466 * modern enough to define socklen_t */
452#ifdef OPENSSL_SYS_LINUX
453 socklen_t addr_len; 467 socklen_t addr_len;
454 union { 468 union {
455 struct sockaddr sa; 469 struct sockaddr sa;
@@ -531,7 +545,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
531 break; 545 break;
532 /* (Linux)kernel sets DF bit on outgoing IP packets */ 546 /* (Linux)kernel sets DF bit on outgoing IP packets */
533 case BIO_CTRL_DGRAM_MTU_DISCOVER: 547 case BIO_CTRL_DGRAM_MTU_DISCOVER:
534#ifdef OPENSSL_SYS_LINUX 548#if defined(OPENSSL_SYS_LINUX) && defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO)
535 addr_len = (socklen_t)sizeof(addr); 549 addr_len = (socklen_t)sizeof(addr);
536 memset((void *)&addr, 0, sizeof(addr)); 550 memset((void *)&addr, 0, sizeof(addr));
537 if (getsockname(b->num, &addr.sa, &addr_len) < 0) 551 if (getsockname(b->num, &addr.sa, &addr_len) < 0)
@@ -539,7 +553,6 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
539 ret = 0; 553 ret = 0;
540 break; 554 break;
541 } 555 }
542 sockopt_len = sizeof(sockopt_val);
543 switch (addr.sa.sa_family) 556 switch (addr.sa.sa_family)
544 { 557 {
545 case AF_INET: 558 case AF_INET:
@@ -548,7 +561,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
548 &sockopt_val, sizeof(sockopt_val))) < 0) 561 &sockopt_val, sizeof(sockopt_val))) < 0)
549 perror("setsockopt"); 562 perror("setsockopt");
550 break; 563 break;
551#if OPENSSL_USE_IPV6 && defined(IPV6_MTU_DISCOVER) 564#if OPENSSL_USE_IPV6 && defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO)
552 case AF_INET6: 565 case AF_INET6:
553 sockopt_val = IPV6_PMTUDISC_DO; 566 sockopt_val = IPV6_PMTUDISC_DO;
554 if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER, 567 if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
@@ -565,7 +578,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
565 break; 578 break;
566#endif 579#endif
567 case BIO_CTRL_DGRAM_QUERY_MTU: 580 case BIO_CTRL_DGRAM_QUERY_MTU:
568#ifdef OPENSSL_SYS_LINUX 581#if defined(OPENSSL_SYS_LINUX) && defined(IP_MTU)
569 addr_len = (socklen_t)sizeof(addr); 582 addr_len = (socklen_t)sizeof(addr);
570 memset((void *)&addr, 0, sizeof(addr)); 583 memset((void *)&addr, 0, sizeof(addr));
571 if (getsockname(b->num, &addr.sa, &addr_len) < 0) 584 if (getsockname(b->num, &addr.sa, &addr_len) < 0)
@@ -727,12 +740,15 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
727#endif 740#endif
728 break; 741 break;
729 case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: 742 case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT:
730#ifdef OPENSSL_SYS_WINDOWS
731 { 743 {
732 int timeout, sz = sizeof(timeout); 744 union { size_t s; int i; } sz = {0};
745#ifdef OPENSSL_SYS_WINDOWS
746 int timeout;
733 struct timeval *tv = (struct timeval *)ptr; 747 struct timeval *tv = (struct timeval *)ptr;
748
749 sz.i = sizeof(timeout);
734 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 750 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
735 (void*)&timeout, &sz) < 0) 751 (void*)&timeout, &sz.i) < 0)
736 { perror("getsockopt"); ret = -1; } 752 { perror("getsockopt"); ret = -1; }
737 else 753 else
738 { 754 {
@@ -740,12 +756,20 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
740 tv->tv_usec = (timeout % 1000) * 1000; 756 tv->tv_usec = (timeout % 1000) * 1000;
741 ret = sizeof(*tv); 757 ret = sizeof(*tv);
742 } 758 }
743 }
744#else 759#else
760 sz.i = sizeof(struct timeval);
745 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 761 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
746 ptr, (void *)&ret) < 0) 762 ptr, (void *)&sz) < 0)
747 { perror("getsockopt"); ret = -1; } 763 { perror("getsockopt"); ret = -1; }
764 else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0)
765 {
766 OPENSSL_assert(sz.s<=sizeof(struct timeval));
767 ret = (int)sz.s;
768 }
769 else
770 ret = sz.i;
748#endif 771#endif
772 }
749 break; 773 break;
750#endif 774#endif
751#if defined(SO_SNDTIMEO) 775#if defined(SO_SNDTIMEO)
@@ -765,12 +789,15 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
765#endif 789#endif
766 break; 790 break;
767 case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: 791 case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT:
768#ifdef OPENSSL_SYS_WINDOWS
769 { 792 {
770 int timeout, sz = sizeof(timeout); 793 union { size_t s; int i; } sz = {0};
794#ifdef OPENSSL_SYS_WINDOWS
795 int timeout;
771 struct timeval *tv = (struct timeval *)ptr; 796 struct timeval *tv = (struct timeval *)ptr;
797
798 sz.i = sizeof(timeout);
772 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, 799 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
773 (void*)&timeout, &sz) < 0) 800 (void*)&timeout, &sz.i) < 0)
774 { perror("getsockopt"); ret = -1; } 801 { perror("getsockopt"); ret = -1; }
775 else 802 else
776 { 803 {
@@ -778,12 +805,20 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
778 tv->tv_usec = (timeout % 1000) * 1000; 805 tv->tv_usec = (timeout % 1000) * 1000;
779 ret = sizeof(*tv); 806 ret = sizeof(*tv);
780 } 807 }
781 }
782#else 808#else
809 sz.i = sizeof(struct timeval);
783 if ( getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, 810 if ( getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
784 ptr, (void *)&ret) < 0) 811 ptr, (void *)&sz) < 0)
785 { perror("getsockopt"); ret = -1; } 812 { perror("getsockopt"); ret = -1; }
813 else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0)
814 {
815 OPENSSL_assert(sz.s<=sizeof(struct timeval));
816 ret = (int)sz.s;
817 }
818 else
819 ret = sz.i;
786#endif 820#endif
821 }
787 break; 822 break;
788#endif 823#endif
789 case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP: 824 case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP:
@@ -871,8 +906,8 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag)
871 memset(authchunks, 0, sizeof(sockopt_len)); 906 memset(authchunks, 0, sizeof(sockopt_len));
872 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len); 907 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len);
873 OPENSSL_assert(ret >= 0); 908 OPENSSL_assert(ret >= 0);
874 909
875 for (p = (unsigned char*) authchunks + sizeof(sctp_assoc_t); 910 for (p = (unsigned char*) authchunks->gauth_chunks;
876 p < (unsigned char*) authchunks + sockopt_len; 911 p < (unsigned char*) authchunks + sockopt_len;
877 p += sizeof(uint8_t)) 912 p += sizeof(uint8_t))
878 { 913 {
@@ -955,7 +990,6 @@ static int dgram_sctp_free(BIO *a)
955#ifdef SCTP_AUTHENTICATION_EVENT 990#ifdef SCTP_AUTHENTICATION_EVENT
956void dgram_sctp_handle_auth_free_key_event(BIO *b, union sctp_notification *snp) 991void dgram_sctp_handle_auth_free_key_event(BIO *b, union sctp_notification *snp)
957 { 992 {
958 unsigned int sockopt_len = 0;
959 int ret; 993 int ret;
960 struct sctp_authkey_event* authkeyevent = &snp->sn_auth_event; 994 struct sctp_authkey_event* authkeyevent = &snp->sn_auth_event;
961 995
@@ -965,9 +999,8 @@ void dgram_sctp_handle_auth_free_key_event(BIO *b, union sctp_notification *snp)
965 999
966 /* delete key */ 1000 /* delete key */
967 authkeyid.scact_keynumber = authkeyevent->auth_keynumber; 1001 authkeyid.scact_keynumber = authkeyevent->auth_keynumber;
968 sockopt_len = sizeof(struct sctp_authkeyid);
969 ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, 1002 ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY,
970 &authkeyid, sockopt_len); 1003 &authkeyid, sizeof(struct sctp_authkeyid));
971 } 1004 }
972 } 1005 }
973#endif 1006#endif
@@ -1164,7 +1197,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
1164 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen); 1197 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen);
1165 OPENSSL_assert(ii >= 0); 1198 OPENSSL_assert(ii >= 0);
1166 1199
1167 for (p = (unsigned char*) authchunks + sizeof(sctp_assoc_t); 1200 for (p = (unsigned char*) authchunks->gauth_chunks;
1168 p < (unsigned char*) authchunks + optlen; 1201 p < (unsigned char*) authchunks + optlen;
1169 p += sizeof(uint8_t)) 1202 p += sizeof(uint8_t))
1170 { 1203 {
@@ -1298,7 +1331,7 @@ static long dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr)
1298 { 1331 {
1299 long ret=1; 1332 long ret=1;
1300 bio_dgram_sctp_data *data = NULL; 1333 bio_dgram_sctp_data *data = NULL;
1301 unsigned int sockopt_len = 0; 1334 socklen_t sockopt_len = 0;
1302 struct sctp_authkeyid authkeyid; 1335 struct sctp_authkeyid authkeyid;
1303 struct sctp_authkey *authkey; 1336 struct sctp_authkey *authkey;
1304 1337
diff --git a/src/lib/libcrypto/bio/bss_log.c b/src/lib/libcrypto/bio/bss_log.c
index b7dce5c1a2..2227b2b52d 100644
--- a/src/lib/libcrypto/bio/bss_log.c
+++ b/src/lib/libcrypto/bio/bss_log.c
@@ -245,7 +245,7 @@ static int MS_CALLBACK slg_puts(BIO *bp, const char *str)
245 245
246static void xopenlog(BIO* bp, char* name, int level) 246static void xopenlog(BIO* bp, char* name, int level)
247{ 247{
248 if (GetVersion() < 0x80000000) 248 if (check_winnt())
249 bp->ptr = RegisterEventSourceA(NULL,name); 249 bp->ptr = RegisterEventSourceA(NULL,name);
250 else 250 else
251 bp->ptr = NULL; 251 bp->ptr = NULL;
diff --git a/src/lib/libcrypto/bn/bn.h b/src/lib/libcrypto/bn/bn.h
index f34248ec4f..21a1a3fe35 100644
--- a/src/lib/libcrypto/bn/bn.h
+++ b/src/lib/libcrypto/bn/bn.h
@@ -538,6 +538,8 @@ BIGNUM *BN_mod_inverse(BIGNUM *ret,
538BIGNUM *BN_mod_sqrt(BIGNUM *ret, 538BIGNUM *BN_mod_sqrt(BIGNUM *ret,
539 const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx); 539 const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
540 540
541void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
542
541/* Deprecated versions */ 543/* Deprecated versions */
542#ifndef OPENSSL_NO_DEPRECATED 544#ifndef OPENSSL_NO_DEPRECATED
543BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe, 545BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,
@@ -774,11 +776,20 @@ int RAND_pseudo_bytes(unsigned char *buf,int num);
774 776
775#define bn_fix_top(a) bn_check_top(a) 777#define bn_fix_top(a) bn_check_top(a)
776 778
779#define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2)
780#define bn_wcheck_size(bn, words) \
781 do { \
782 const BIGNUM *_bnum2 = (bn); \
783 assert(words <= (_bnum2)->dmax && words >= (_bnum2)->top); \
784 } while(0)
785
777#else /* !BN_DEBUG */ 786#else /* !BN_DEBUG */
778 787
779#define bn_pollute(a) 788#define bn_pollute(a)
780#define bn_check_top(a) 789#define bn_check_top(a)
781#define bn_fix_top(a) bn_correct_top(a) 790#define bn_fix_top(a) bn_correct_top(a)
791#define bn_check_size(bn, bits)
792#define bn_wcheck_size(bn, words)
782 793
783#endif 794#endif
784 795
diff --git a/src/lib/libcrypto/bn/bn_div.c b/src/lib/libcrypto/bn/bn_div.c
index 52b3304293..7b2403185e 100644
--- a/src/lib/libcrypto/bn/bn_div.c
+++ b/src/lib/libcrypto/bn/bn_div.c
@@ -141,6 +141,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
141 * 141 *
142 * <appro@fy.chalmers.se> 142 * <appro@fy.chalmers.se>
143 */ 143 */
144#undef bn_div_words
144# define bn_div_words(n0,n1,d0) \ 145# define bn_div_words(n0,n1,d0) \
145 ({ asm volatile ( \ 146 ({ asm volatile ( \
146 "divl %4" \ 147 "divl %4" \
@@ -155,6 +156,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
155 * Same story here, but it's 128-bit by 64-bit division. Wow! 156 * Same story here, but it's 128-bit by 64-bit division. Wow!
156 * <appro@fy.chalmers.se> 157 * <appro@fy.chalmers.se>
157 */ 158 */
159# undef bn_div_words
158# define bn_div_words(n0,n1,d0) \ 160# define bn_div_words(n0,n1,d0) \
159 ({ asm volatile ( \ 161 ({ asm volatile ( \
160 "divq %4" \ 162 "divq %4" \
diff --git a/src/lib/libcrypto/bn/bn_gcd.c b/src/lib/libcrypto/bn/bn_gcd.c
index 4a352119ba..a808f53178 100644
--- a/src/lib/libcrypto/bn/bn_gcd.c
+++ b/src/lib/libcrypto/bn/bn_gcd.c
@@ -205,6 +205,7 @@ err:
205/* solves ax == 1 (mod n) */ 205/* solves ax == 1 (mod n) */
206static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, 206static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
207 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); 207 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
208
208BIGNUM *BN_mod_inverse(BIGNUM *in, 209BIGNUM *BN_mod_inverse(BIGNUM *in,
209 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx) 210 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
210 { 211 {
diff --git a/src/lib/libcrypto/bn/bn_lcl.h b/src/lib/libcrypto/bn/bn_lcl.h
index eecfd8cc99..817c773b65 100644
--- a/src/lib/libcrypto/bn/bn_lcl.h
+++ b/src/lib/libcrypto/bn/bn_lcl.h
@@ -282,16 +282,23 @@ extern "C" {
282# endif 282# endif
283# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)) 283# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
284# if defined(__GNUC__) && __GNUC__>=2 284# if defined(__GNUC__) && __GNUC__>=2
285# define BN_UMULT_HIGH(a,b) ({ \ 285# if __GNUC__>=4 && __GNUC_MINOR__>=4 /* "h" constraint is no more since 4.4 */
286# define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64)
287# define BN_UMULT_LOHI(low,high,a,b) ({ \
288 __uint128_t ret=(__uint128_t)(a)*(b); \
289 (high)=ret>>64; (low)=ret; })
290# else
291# define BN_UMULT_HIGH(a,b) ({ \
286 register BN_ULONG ret; \ 292 register BN_ULONG ret; \
287 asm ("dmultu %1,%2" \ 293 asm ("dmultu %1,%2" \
288 : "=h"(ret) \ 294 : "=h"(ret) \
289 : "r"(a), "r"(b) : "l"); \ 295 : "r"(a), "r"(b) : "l"); \
290 ret; }) 296 ret; })
291# define BN_UMULT_LOHI(low,high,a,b) \ 297# define BN_UMULT_LOHI(low,high,a,b)\
292 asm ("dmultu %2,%3" \ 298 asm ("dmultu %2,%3" \
293 : "=l"(low),"=h"(high) \ 299 : "=l"(low),"=h"(high) \
294 : "r"(a), "r"(b)); 300 : "r"(a), "r"(b));
301# endif
295# endif 302# endif
296# endif /* cpu */ 303# endif /* cpu */
297#endif /* OPENSSL_NO_ASM */ 304#endif /* OPENSSL_NO_ASM */
diff --git a/src/lib/libcrypto/bn/bn_lib.c b/src/lib/libcrypto/bn/bn_lib.c
index 7a5676de69..5461e6ee7d 100644
--- a/src/lib/libcrypto/bn/bn_lib.c
+++ b/src/lib/libcrypto/bn/bn_lib.c
@@ -824,3 +824,55 @@ int bn_cmp_part_words(const BN_ULONG *a, const BN_ULONG *b,
824 } 824 }
825 return bn_cmp_words(a,b,cl); 825 return bn_cmp_words(a,b,cl);
826 } 826 }
827
828/*
829 * Constant-time conditional swap of a and b.
830 * a and b are swapped if condition is not 0. The code assumes that at most one bit of condition is set.
831 * nwords is the number of words to swap. The code assumes that at least nwords are allocated in both a and b,
832 * and that no more than nwords are used by either a or b.
833 * a and b cannot be the same number
834 */
835void BN_consttime_swap(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords)
836 {
837 BN_ULONG t;
838 int i;
839
840 bn_wcheck_size(a, nwords);
841 bn_wcheck_size(b, nwords);
842
843 assert(a != b);
844 assert((condition & (condition - 1)) == 0);
845 assert(sizeof(BN_ULONG) >= sizeof(int));
846
847 condition = ((condition - 1) >> (BN_BITS2 - 1)) - 1;
848
849 t = (a->top^b->top) & condition;
850 a->top ^= t;
851 b->top ^= t;
852
853#define BN_CONSTTIME_SWAP(ind) \
854 do { \
855 t = (a->d[ind] ^ b->d[ind]) & condition; \
856 a->d[ind] ^= t; \
857 b->d[ind] ^= t; \
858 } while (0)
859
860
861 switch (nwords) {
862 default:
863 for (i = 10; i < nwords; i++)
864 BN_CONSTTIME_SWAP(i);
865 /* Fallthrough */
866 case 10: BN_CONSTTIME_SWAP(9); /* Fallthrough */
867 case 9: BN_CONSTTIME_SWAP(8); /* Fallthrough */
868 case 8: BN_CONSTTIME_SWAP(7); /* Fallthrough */
869 case 7: BN_CONSTTIME_SWAP(6); /* Fallthrough */
870 case 6: BN_CONSTTIME_SWAP(5); /* Fallthrough */
871 case 5: BN_CONSTTIME_SWAP(4); /* Fallthrough */
872 case 4: BN_CONSTTIME_SWAP(3); /* Fallthrough */
873 case 3: BN_CONSTTIME_SWAP(2); /* Fallthrough */
874 case 2: BN_CONSTTIME_SWAP(1); /* Fallthrough */
875 case 1: BN_CONSTTIME_SWAP(0);
876 }
877#undef BN_CONSTTIME_SWAP
878}
diff --git a/src/lib/libcrypto/bn/bn_nist.c b/src/lib/libcrypto/bn/bn_nist.c
index 43caee4770..e22968d4a3 100644
--- a/src/lib/libcrypto/bn/bn_nist.c
+++ b/src/lib/libcrypto/bn/bn_nist.c
@@ -286,26 +286,25 @@ const BIGNUM *BN_get0_nist_prime_521(void)
286 } 286 }
287 287
288 288
289static void nist_cp_bn_0(BN_ULONG *buf, BN_ULONG *a, int top, int max) 289static void nist_cp_bn_0(BN_ULONG *dst, const BN_ULONG *src, int top, int max)
290 { 290 {
291 int i; 291 int i;
292 BN_ULONG *_tmp1 = (buf), *_tmp2 = (a);
293 292
294#ifdef BN_DEBUG 293#ifdef BN_DEBUG
295 OPENSSL_assert(top <= max); 294 OPENSSL_assert(top <= max);
296#endif 295#endif
297 for (i = (top); i != 0; i--) 296 for (i = 0; i < top; i++)
298 *_tmp1++ = *_tmp2++; 297 dst[i] = src[i];
299 for (i = (max) - (top); i != 0; i--) 298 for (; i < max; i++)
300 *_tmp1++ = (BN_ULONG) 0; 299 dst[i] = 0;
301 } 300 }
302 301
303static void nist_cp_bn(BN_ULONG *buf, BN_ULONG *a, int top) 302static void nist_cp_bn(BN_ULONG *dst, const BN_ULONG *src, int top)
304 { 303 {
305 int i; 304 int i;
306 BN_ULONG *_tmp1 = (buf), *_tmp2 = (a); 305
307 for (i = (top); i != 0; i--) 306 for (i = 0; i < top; i++)
308 *_tmp1++ = *_tmp2++; 307 dst[i] = src[i];
309 } 308 }
310 309
311#if BN_BITS2 == 64 310#if BN_BITS2 == 64
@@ -451,8 +450,9 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
451 */ 450 */
452 mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); 451 mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP);
453 mask &= 0-(PTR_SIZE_INT)carry; 452 mask &= 0-(PTR_SIZE_INT)carry;
453 res = c_d;
454 res = (BN_ULONG *) 454 res = (BN_ULONG *)
455 (((PTR_SIZE_INT)c_d&~mask) | ((PTR_SIZE_INT)r_d&mask)); 455 (((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask));
456 nist_cp_bn(r_d, res, BN_NIST_192_TOP); 456 nist_cp_bn(r_d, res, BN_NIST_192_TOP);
457 r->top = BN_NIST_192_TOP; 457 r->top = BN_NIST_192_TOP;
458 bn_correct_top(r); 458 bn_correct_top(r);
@@ -479,8 +479,11 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
479 int top = a->top, i; 479 int top = a->top, i;
480 int carry; 480 int carry;
481 BN_ULONG *r_d, *a_d = a->d; 481 BN_ULONG *r_d, *a_d = a->d;
482 BN_ULONG buf[BN_NIST_224_TOP], 482 union {
483 c_d[BN_NIST_224_TOP], 483 BN_ULONG bn[BN_NIST_224_TOP];
484 unsigned int ui[BN_NIST_224_TOP*sizeof(BN_ULONG)/sizeof(unsigned int)];
485 } buf;
486 BN_ULONG c_d[BN_NIST_224_TOP],
484 *res; 487 *res;
485 PTR_SIZE_INT mask; 488 PTR_SIZE_INT mask;
486 union { bn_addsub_f f; PTR_SIZE_INT p; } u; 489 union { bn_addsub_f f; PTR_SIZE_INT p; } u;
@@ -519,18 +522,18 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
519 /* copy upper 256 bits of 448 bit number ... */ 522 /* copy upper 256 bits of 448 bit number ... */
520 nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP-1), top - (BN_NIST_224_TOP-1), BN_NIST_224_TOP); 523 nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP-1), top - (BN_NIST_224_TOP-1), BN_NIST_224_TOP);
521 /* ... and right shift by 32 to obtain upper 224 bits */ 524 /* ... and right shift by 32 to obtain upper 224 bits */
522 nist_set_224(buf, c_d, 14, 13, 12, 11, 10, 9, 8); 525 nist_set_224(buf.bn, c_d, 14, 13, 12, 11, 10, 9, 8);
523 /* truncate lower part to 224 bits too */ 526 /* truncate lower part to 224 bits too */
524 r_d[BN_NIST_224_TOP-1] &= BN_MASK2l; 527 r_d[BN_NIST_224_TOP-1] &= BN_MASK2l;
525#else 528#else
526 nist_cp_bn_0(buf, a_d + BN_NIST_224_TOP, top - BN_NIST_224_TOP, BN_NIST_224_TOP); 529 nist_cp_bn_0(buf.bn, a_d + BN_NIST_224_TOP, top - BN_NIST_224_TOP, BN_NIST_224_TOP);
527#endif 530#endif
528 531
529#if defined(NIST_INT64) && BN_BITS2!=64 532#if defined(NIST_INT64) && BN_BITS2!=64
530 { 533 {
531 NIST_INT64 acc; /* accumulator */ 534 NIST_INT64 acc; /* accumulator */
532 unsigned int *rp=(unsigned int *)r_d; 535 unsigned int *rp=(unsigned int *)r_d;
533 const unsigned int *bp=(const unsigned int *)buf; 536 const unsigned int *bp=(const unsigned int *)buf.ui;
534 537
535 acc = rp[0]; acc -= bp[7-7]; 538 acc = rp[0]; acc -= bp[7-7];
536 acc -= bp[11-7]; rp[0] = (unsigned int)acc; acc >>= 32; 539 acc -= bp[11-7]; rp[0] = (unsigned int)acc; acc >>= 32;
@@ -565,13 +568,13 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
565 { 568 {
566 BN_ULONG t_d[BN_NIST_224_TOP]; 569 BN_ULONG t_d[BN_NIST_224_TOP];
567 570
568 nist_set_224(t_d, buf, 10, 9, 8, 7, 0, 0, 0); 571 nist_set_224(t_d, buf.bn, 10, 9, 8, 7, 0, 0, 0);
569 carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); 572 carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP);
570 nist_set_224(t_d, buf, 0, 13, 12, 11, 0, 0, 0); 573 nist_set_224(t_d, buf.bn, 0, 13, 12, 11, 0, 0, 0);
571 carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); 574 carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP);
572 nist_set_224(t_d, buf, 13, 12, 11, 10, 9, 8, 7); 575 nist_set_224(t_d, buf.bn, 13, 12, 11, 10, 9, 8, 7);
573 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); 576 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP);
574 nist_set_224(t_d, buf, 0, 0, 0, 0, 13, 12, 11); 577 nist_set_224(t_d, buf.bn, 0, 0, 0, 0, 13, 12, 11);
575 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); 578 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP);
576 579
577#if BN_BITS2==64 580#if BN_BITS2==64
@@ -606,7 +609,8 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
606 /* otherwise it's effectively same as in BN_nist_mod_192... */ 609 /* otherwise it's effectively same as in BN_nist_mod_192... */
607 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); 610 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP);
608 mask &= 0-(PTR_SIZE_INT)carry; 611 mask &= 0-(PTR_SIZE_INT)carry;
609 res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | 612 res = c_d;
613 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
610 ((PTR_SIZE_INT)r_d&mask)); 614 ((PTR_SIZE_INT)r_d&mask));
611 nist_cp_bn(r_d, res, BN_NIST_224_TOP); 615 nist_cp_bn(r_d, res, BN_NIST_224_TOP);
612 r->top = BN_NIST_224_TOP; 616 r->top = BN_NIST_224_TOP;
@@ -805,7 +809,8 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
805 809
806 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); 810 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP);
807 mask &= 0-(PTR_SIZE_INT)carry; 811 mask &= 0-(PTR_SIZE_INT)carry;
808 res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | 812 res = c_d;
813 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
809 ((PTR_SIZE_INT)r_d&mask)); 814 ((PTR_SIZE_INT)r_d&mask));
810 nist_cp_bn(r_d, res, BN_NIST_256_TOP); 815 nist_cp_bn(r_d, res, BN_NIST_256_TOP);
811 r->top = BN_NIST_256_TOP; 816 r->top = BN_NIST_256_TOP;
@@ -1026,7 +1031,8 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
1026 1031
1027 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); 1032 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP);
1028 mask &= 0-(PTR_SIZE_INT)carry; 1033 mask &= 0-(PTR_SIZE_INT)carry;
1029 res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | 1034 res = c_d;
1035 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
1030 ((PTR_SIZE_INT)r_d&mask)); 1036 ((PTR_SIZE_INT)r_d&mask));
1031 nist_cp_bn(r_d, res, BN_NIST_384_TOP); 1037 nist_cp_bn(r_d, res, BN_NIST_384_TOP);
1032 r->top = BN_NIST_384_TOP; 1038 r->top = BN_NIST_384_TOP;
@@ -1092,7 +1098,8 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
1092 1098
1093 bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); 1099 bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP);
1094 mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); 1100 mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP);
1095 res = (BN_ULONG *)(((PTR_SIZE_INT)t_d&~mask) | 1101 res = t_d;
1102 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
1096 ((PTR_SIZE_INT)r_d&mask)); 1103 ((PTR_SIZE_INT)r_d&mask));
1097 nist_cp_bn(r_d,res,BN_NIST_521_TOP); 1104 nist_cp_bn(r_d,res,BN_NIST_521_TOP);
1098 r->top = BN_NIST_521_TOP; 1105 r->top = BN_NIST_521_TOP;
diff --git a/src/lib/libcrypto/buffer/buffer.c b/src/lib/libcrypto/buffer/buffer.c
index d7aa79ad7f..d4a4ce43b3 100644
--- a/src/lib/libcrypto/buffer/buffer.c
+++ b/src/lib/libcrypto/buffer/buffer.c
@@ -179,14 +179,14 @@ int BUF_MEM_grow_clean(BUF_MEM *str, size_t len)
179 return(len); 179 return(len);
180 } 180 }
181 181
182void BUF_reverse(unsigned char *out, unsigned char *in, size_t size) 182void BUF_reverse(unsigned char *out, const unsigned char *in, size_t size)
183 { 183 {
184 size_t i; 184 size_t i;
185 if (in) 185 if (in)
186 { 186 {
187 out += size - 1; 187 out += size - 1;
188 for (i = 0; i < size; i++) 188 for (i = 0; i < size; i++)
189 *in++ = *out--; 189 *out-- = *in++;
190 } 190 }
191 else 191 else
192 { 192 {
diff --git a/src/lib/libcrypto/buffer/buffer.h b/src/lib/libcrypto/buffer/buffer.h
index 178e418282..f8da32b485 100644
--- a/src/lib/libcrypto/buffer/buffer.h
+++ b/src/lib/libcrypto/buffer/buffer.h
@@ -88,7 +88,7 @@ int BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
88char * BUF_strdup(const char *str); 88char * BUF_strdup(const char *str);
89char * BUF_strndup(const char *str, size_t siz); 89char * BUF_strndup(const char *str, size_t siz);
90void * BUF_memdup(const void *data, size_t siz); 90void * BUF_memdup(const void *data, size_t siz);
91void BUF_reverse(unsigned char *out, unsigned char *in, size_t siz); 91void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);
92 92
93/* safe string functions */ 93/* safe string functions */
94size_t BUF_strlcpy(char *dst,const char *src,size_t siz); 94size_t BUF_strlcpy(char *dst,const char *src,size_t siz);
diff --git a/src/lib/libcrypto/cryptlib.c b/src/lib/libcrypto/cryptlib.c
index 766ea8cac7..0b77d8b7d0 100644
--- a/src/lib/libcrypto/cryptlib.c
+++ b/src/lib/libcrypto/cryptlib.c
@@ -504,7 +504,7 @@ void CRYPTO_THREADID_current(CRYPTO_THREADID *id)
504 CRYPTO_THREADID_set_numeric(id, (unsigned long)find_thread(NULL)); 504 CRYPTO_THREADID_set_numeric(id, (unsigned long)find_thread(NULL));
505#else 505#else
506 /* For everything else, default to using the address of 'errno' */ 506 /* For everything else, default to using the address of 'errno' */
507 CRYPTO_THREADID_set_pointer(id, &errno); 507 CRYPTO_THREADID_set_pointer(id, (void*)&errno);
508#endif 508#endif
509 } 509 }
510 510
@@ -704,6 +704,7 @@ void OPENSSL_cpuid_setup(void)
704 } 704 }
705 else 705 else
706 vec = OPENSSL_ia32_cpuid(); 706 vec = OPENSSL_ia32_cpuid();
707
707 /* 708 /*
708 * |(1<<10) sets a reserved bit to signal that variable 709 * |(1<<10) sets a reserved bit to signal that variable
709 * was initialized already... This is to avoid interference 710 * was initialized already... This is to avoid interference
@@ -888,7 +889,7 @@ void OPENSSL_showfatal (const char *fmta,...)
888 889
889#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 890#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
890 /* this -------------v--- guards NT-specific calls */ 891 /* this -------------v--- guards NT-specific calls */
891 if (GetVersion() < 0x80000000 && OPENSSL_isservice() > 0) 892 if (check_winnt() && OPENSSL_isservice() > 0)
892 { HANDLE h = RegisterEventSource(0,_T("OPENSSL")); 893 { HANDLE h = RegisterEventSource(0,_T("OPENSSL"));
893 const TCHAR *pmsg=buf; 894 const TCHAR *pmsg=buf;
894 ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0); 895 ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0);
@@ -924,3 +925,16 @@ void OpenSSLDie(const char *file,int line,const char *assertion)
924 } 925 }
925 926
926void *OPENSSL_stderr(void) { return stderr; } 927void *OPENSSL_stderr(void) { return stderr; }
928
929int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)
930 {
931 size_t i;
932 const unsigned char *a = in_a;
933 const unsigned char *b = in_b;
934 unsigned char x = 0;
935
936 for (i = 0; i < len; i++)
937 x |= a[i] ^ b[i];
938
939 return x;
940 }
diff --git a/src/lib/libcrypto/cryptlib.h b/src/lib/libcrypto/cryptlib.h
index 1761f6b668..d26f9630ea 100644
--- a/src/lib/libcrypto/cryptlib.h
+++ b/src/lib/libcrypto/cryptlib.h
@@ -100,7 +100,7 @@ extern "C" {
100 100
101void OPENSSL_cpuid_setup(void); 101void OPENSSL_cpuid_setup(void);
102extern unsigned int OPENSSL_ia32cap_P[]; 102extern unsigned int OPENSSL_ia32cap_P[];
103void OPENSSL_showfatal(const char *,...); 103void OPENSSL_showfatal(const char *fmta,...);
104void *OPENSSL_stderr(void); 104void *OPENSSL_stderr(void);
105extern int OPENSSL_NONPIC_relocated; 105extern int OPENSSL_NONPIC_relocated;
106 106
diff --git a/src/lib/libcrypto/crypto-lib.com b/src/lib/libcrypto/crypto-lib.com
deleted file mode 100644
index c280aa03a8..0000000000
--- a/src/lib/libcrypto/crypto-lib.com
+++ /dev/null
@@ -1,1516 +0,0 @@
1$!
2$! CRYPTO-LIB.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$! Zoltan Arpadffy <arpadffy@polarhome.com>
10$!
11$! This command files compiles and creates the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB"
12$! library for OpenSSL. The "xxx" denotes the machine architecture, ALPHA,
13$! IA64 or VAX.
14$!
15$! It was re-written so it would try to determine what "C" compiler to use
16$! or you can specify which "C" compiler to use.
17$!
18$! Specify the following as P1 to build just that part or ALL to just
19$! build everything.
20$!
21$! LIBRARY To just compile the [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
22$! APPS To just compile the [.xxx.EXE.CRYPTO]*.EXE
23$! ALL To do both LIBRARY and APPS
24$!
25$! Specify DEBUG or NODEBUG as P2 to compile with or without debugger
26$! information.
27$!
28$! Specify which compiler at P3 to try to compile under.
29$!
30$! VAXC For VAX C.
31$! DECC For DEC C.
32$! GNUC For GNU C.
33$!
34$! If you don't specify a compiler, it will try to determine which
35$! "C" compiler to use.
36$!
37$! P4, if defined, sets a TCP/IP library to use, through one of the following
38$! keywords:
39$!
40$! UCX For UCX
41$! TCPIP For TCPIP (post UCX)
42$! SOCKETSHR For SOCKETSHR+NETLIB
43$!
44$! P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
45$!
46$! P6, if defined, sets a choice of crypto methods to compile.
47$! WARNING: this should only be done to recompile some part of an already
48$! fully compiled library.
49$!
50$! P7, if defined, specifies the C pointer size. Ignored on VAX.
51$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
52$! Supported values are:
53$!
54$! "" Compile with default (/NOPOINTER_SIZE)
55$! 32 Compile with /POINTER_SIZE=32 (SHORT)
56$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]).
57$! (Automatically select ARGV if compiler supports it.)
58$! 64= Compile with /POINTER_SIZE=64 (LONG).
59$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
60$!
61$! P8, if defined, specifies a directory where ZLIB files (zlib.h,
62$! libz.olb) may be found. Optionally, a non-default object library
63$! name may be included ("dev:[dir]libz_64.olb", for example).
64$!
65$!
66$! Announce/identify.
67$!
68$ proc = f$environment( "procedure")
69$ write sys$output "@@@ "+ -
70 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
71$!
72$! Define A TCP/IP Library That We Will Need To Link To.
73$! (That Is, If We Need To Link To One.)
74$!
75$ TCPIP_LIB = ""
76$ ZLIB_LIB = ""
77$!
78$! Check Which Architecture We Are Using.
79$!
80$ IF (F$GETSYI("CPU").LT.128)
81$ THEN
82$!
83$! The Architecture Is VAX
84$!
85$ ARCH = "VAX"
86$!
87$! Else...
88$!
89$ ELSE
90$!
91$! The Architecture Is Alpha, IA64 or whatever comes in the future.
92$!
93$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
94$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
95$!
96$! End The Architecture Check.
97$!
98$ ENDIF
99$!
100$ ARCHD = ARCH
101$ LIB32 = "32"
102$ OPT_FILE = ""
103$ POINTER_SIZE = ""
104$!
105$! Define The Different Encryption Types.
106$! NOTE: Some might think this list ugly. However, it's made this way to
107$! reflect the SDIRS variable in [-]Makefile.org as closely as possible,
108$! thereby making it fairly easy to verify that the lists are the same.
109$!
110$ ET_WHIRLPOOL = "WHRLPOOL"
111$ IF ARCH .EQS. "VAX" THEN ET_WHIRLPOOL = ""
112$ ENCRYPT_TYPES = "Basic,"+ -
113 "OBJECTS,"+ -
114 "MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ET_WHIRLPOOL+","+ -
115 "DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,MODES,"+ -
116 "BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,"+ -
117 "BUFFER,BIO,STACK,LHASH,RAND,ERR,"+ -
118 "EVP,EVP_2,EVP_3,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
119 "CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5,"+ -
120 "CMS,PQUEUE,TS,JPAKE,SRP,STORE,CMAC"
121$!
122$! Check To Make Sure We Have Valid Command Line Parameters.
123$!
124$ GOSUB CHECK_OPTIONS
125$!
126$! Define The OBJ and EXE Directories.
127$!
128$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.CRYPTO]
129$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]
130$!
131$! Specify the destination directory in any /MAP option.
132$!
133$ if (LINKMAP .eqs. "MAP")
134$ then
135$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
136$ endif
137$!
138$! Add the location prefix to the linker options file name.
139$!
140$ if (OPT_FILE .nes. "")
141$ then
142$ OPT_FILE = EXE_DIR+ OPT_FILE
143$ endif
144$!
145$! Initialise logical names and such
146$!
147$ GOSUB INITIALISE
148$!
149$! Tell The User What Kind of Machine We Run On.
150$!
151$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
152$!
153$!
154$! Check To See If The Architecture Specific OBJ Directory Exists.
155$!
156$ IF (F$PARSE(OBJ_DIR).EQS."")
157$ THEN
158$!
159$! It Dosen't Exist, So Create It.
160$!
161$ CREATE/DIR 'OBJ_DIR'
162$!
163$! End The Architecture Specific OBJ Directory Check.
164$!
165$ ENDIF
166$!
167$! Check To See If The Architecture Specific Directory Exists.
168$!
169$ IF (F$PARSE(EXE_DIR).EQS."")
170$ THEN
171$!
172$! It Dosen't Exist, So Create It.
173$!
174$ CREATE/DIRECTORY 'EXE_DIR'
175$!
176$! End The Architecture Specific Directory Check.
177$!
178$ ENDIF
179$!
180$! Define The Library Name.
181$!
182$ LIB_NAME := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
183$!
184$! Define The CRYPTO-LIB We Are To Use.
185$!
186$ CRYPTO_LIB := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
187$!
188$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
189$!
190$ IF (F$SEARCH(LIB_NAME).EQS."")
191$ THEN
192$!
193$! Guess Not, Create The Library.
194$!
195$ LIBRARY/CREATE/OBJECT 'LIB_NAME'
196$!
197$! End The Library Check.
198$!
199$ ENDIF
200$!
201$! Build our options file for the application
202$!
203$ GOSUB CHECK_OPT_FILE
204$!
205$! Define The Different Encryption "library" Strings.
206$!
207$ APPS_DES = "DES/DES,CBC3_ENC"
208$ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE"
209$
210$ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,cpt_err,"+ -
211 "ebcdic,uid,o_time,o_str,o_dir,o_fips.c,o_init,fips_ers"
212$ LIB_MD2 = "md2_dgst,md2_one"
213$ LIB_MD4 = "md4_dgst,md4_one"
214$ LIB_MD5 = "md5_dgst,md5_one"
215$ LIB_SHA = "sha_dgst,sha1dgst,sha_one,sha1_one,sha256,sha512"
216$ LIB_MDC2 = "mdc2dgst,mdc2_one"
217$ LIB_HMAC = "hmac,hm_ameth,hm_pmeth"
218$ LIB_RIPEMD = "rmd_dgst,rmd_one"
219$ LIB_WHRLPOOL = "wp_dgst,wp_block"
220$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
221 "ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
222 "enc_read,enc_writ,ofb64enc,"+ -
223 "ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
224 "des_enc,fcrypt_b,"+ -
225 "fcrypt,xcbc_enc,rpc_enc,cbc_cksm,"+ -
226 "ede_cbcm_enc,des_old,des_old2,read2pwd"
227$ LIB_RC2 = "rc2_ecb,rc2_skey,rc2_cbc,rc2cfb64,rc2ofb64"
228$ LIB_RC4 = "rc4_skey,rc4_enc,rc4_utl"
229$ LIB_RC5 = "rc5_skey,rc5_ecb,rc5_enc,rc5cfb64,rc5ofb64"
230$ LIB_IDEA = "i_cbc,i_cfb64,i_ofb64,i_ecb,i_skey"
231$ LIB_BF = "bf_skey,bf_ecb,bf_enc,bf_cfb64,bf_ofb64"
232$ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
233$ LIB_CAMELLIA = "camellia,cmll_misc,cmll_ecb,cmll_cbc,cmll_ofb,"+ -
234 "cmll_cfb,cmll_ctr,cmll_utl"
235$ LIB_SEED = "seed,seed_ecb,seed_cbc,seed_cfb,seed_ofb"
236$ LIB_MODES = "cbc128,ctr128,cts128,cfb128,ofb128,gcm128,"+ -
237 "ccm128,xts128"
238$ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
239$ IF F$TRNLNM("OPENSSL_NO_ASM") .OR. ARCH .NES. "VAX" THEN -
240 LIB_BN_ASM = "bn_asm"
241$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_ctx,bn_mul,bn_mod,"+ -
242 "bn_print,bn_rand,bn_shift,bn_word,bn_blind,"+ -
243 "bn_kron,bn_sqrt,bn_gcd,bn_prime,bn_err,bn_sqr,"+LIB_BN_ASM+","+ -
244 "bn_recp,bn_mont,bn_mpi,bn_exp2,bn_gf2m,bn_nist,"+ -
245 "bn_depr,bn_const,bn_x931p"
246$ LIB_EC = "ec_lib,ecp_smpl,ecp_mont,ecp_nist,ec_cvt,ec_mult,"+ -
247 "ec_err,ec_curve,ec_check,ec_print,ec_asn1,ec_key,"+ -
248 "ec2_smpl,ec2_mult,ec_ameth,ec_pmeth,eck_prn,"+ -
249 "ecp_nistp224,ecp_nistp256,ecp_nistp521,ecp_nistputil,"+ -
250 "ecp_oct,ec2_oct,ec_oct"
251$ LIB_RSA = "rsa_eay,rsa_gen,rsa_lib,rsa_sign,rsa_saos,rsa_err,"+ -
252 "rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null,"+ -
253 "rsa_pss,rsa_x931,rsa_asn1,rsa_depr,rsa_ameth,rsa_prn,"+ -
254 "rsa_pmeth,rsa_crpt"
255$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,"+ -
256 "dsa_err,dsa_ossl,dsa_depr,dsa_ameth,dsa_pmeth,dsa_prn"
257$ LIB_ECDSA = "ecs_lib,ecs_asn1,ecs_ossl,ecs_sign,ecs_vrf,ecs_err"
258$ LIB_DH = "dh_asn1,dh_gen,dh_key,dh_lib,dh_check,dh_err,dh_depr,"+ -
259 "dh_ameth,dh_pmeth,dh_prn"
260$ LIB_ECDH = "ech_lib,ech_ossl,ech_key,ech_err"
261$ LIB_DSO = "dso_dl,dso_dlfcn,dso_err,dso_lib,dso_null,"+ -
262 "dso_openssl,dso_win32,dso_vms,dso_beos"
263$ LIB_ENGINE = "eng_err,eng_lib,eng_list,eng_init,eng_ctrl,"+ -
264 "eng_table,eng_pkey,eng_fat,eng_all,"+ -
265 "tb_rsa,tb_dsa,tb_ecdsa,tb_dh,tb_ecdh,tb_rand,tb_store,"+ -
266 "tb_cipher,tb_digest,tb_pkmeth,tb_asnmth,"+ -
267 "eng_openssl,eng_dyn,eng_cnf,eng_cryptodev,"+ -
268 "eng_rsax,eng_rdrand"
269$ LIB_AES = "aes_core,aes_misc,aes_ecb,aes_cbc,aes_cfb,aes_ofb,aes_ctr,"+ -
270 "aes_ige,aes_wrap"
271$ LIB_BUFFER = "buffer,buf_str,buf_err"
272$ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
273 "bss_mem,bss_null,bss_fd,"+ -
274 "bss_file,bss_sock,bss_conn,"+ -
275 "bf_null,bf_buff,b_print,b_dump,"+ -
276 "b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio,bss_log,"+ -
277 "bss_dgram,"+ -
278 "bf_lbuf"
279$ LIB_STACK = "stack"
280$ LIB_LHASH = "lhash,lh_stats"
281$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,"+ -
282 "rand_vms"
283$ LIB_ERR = "err,err_all,err_prn"
284$ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err,obj_xref"
285$ LIB_EVP = "encode,digest,evp_enc,evp_key,evp_acnf,"+ -
286 "e_des,e_bf,e_idea,e_des3,e_camellia,"+ -
287 "e_rc4,e_aes,names,e_seed,"+ -
288 "e_xcbc_d,e_rc2,e_cast,e_rc5"
289$ LIB_EVP_2 = "m_null,m_md2,m_md4,m_md5,m_sha,m_sha1,m_wp," + -
290 "m_dss,m_dss1,m_mdc2,m_ripemd,m_ecdsa,"+ -
291 "p_open,p_seal,p_sign,p_verify,p_lib,p_enc,p_dec,"+ -
292 "bio_md,bio_b64,bio_enc,evp_err,e_null,"+ -
293 "c_all,c_allc,c_alld,evp_lib,bio_ok,"+-
294 "evp_pkey,evp_pbe,p5_crpt,p5_crpt2"
295$ LIB_EVP_3 = "e_old,pmeth_lib,pmeth_fn,pmeth_gn,m_sigver,evp_fips,"+ -
296 "e_aes_cbc_hmac_sha1,e_rc4_hmac_md5"
297$ LIB_ASN1 = "a_object,a_bitstr,a_utctm,a_gentm,a_time,a_int,a_octet,"+ -
298 "a_print,a_type,a_set,a_dup,a_d2i_fp,a_i2d_fp,"+ -
299 "a_enum,a_utf8,a_sign,a_digest,a_verify,a_mbstr,a_strex,"+ -
300 "x_algor,x_val,x_pubkey,x_sig,x_req,x_attrib,x_bignum,"+ -
301 "x_long,x_name,x_x509,x_x509a,x_crl,x_info,x_spki,nsseq,"+ -
302 "x_nx509,d2i_pu,d2i_pr,i2d_pu,i2d_pr"
303$ LIB_ASN1_2 = "t_req,t_x509,t_x509a,t_crl,t_pkey,t_spki,t_bitst,"+ -
304 "tasn_new,tasn_fre,tasn_enc,tasn_dec,tasn_utl,tasn_typ,"+ -
305 "tasn_prn,ameth_lib,"+ -
306 "f_int,f_string,n_pkey,"+ -
307 "f_enum,x_pkey,a_bool,x_exten,bio_asn1,bio_ndef,asn_mime,"+ -
308 "asn1_gen,asn1_par,asn1_lib,asn1_err,a_bytes,a_strnid,"+ -
309 "evp_asn1,asn_pack,p5_pbe,p5_pbev2,p8_pkey,asn_moid"
310$ LIB_PEM = "pem_sign,pem_seal,pem_info,pem_lib,pem_all,pem_err,"+ -
311 "pem_x509,pem_xaux,pem_oth,pem_pk8,pem_pkey,pvkfmt"
312$ LIB_X509 = "x509_def,x509_d2,x509_r2x,x509_cmp,"+ -
313 "x509_obj,x509_req,x509spki,x509_vfy,"+ -
314 "x509_set,x509cset,x509rset,x509_err,"+ -
315 "x509name,x509_v3,x509_ext,x509_att,"+ -
316 "x509type,x509_lu,x_all,x509_txt,"+ -
317 "x509_trs,by_file,by_dir,x509_vpm"
318$ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ -
319 "v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ -
320 "v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info,"+ -
321 "v3_ocsp,v3_akeya,v3_pmaps,v3_pcons,v3_ncons,v3_pcia,v3_pci,"+ -
322 "pcy_cache,pcy_node,pcy_data,pcy_map,pcy_tree,pcy_lib,"+ -
323 "v3_asid,v3_addr"
324$ LIB_CONF = "conf_err,conf_lib,conf_api,conf_def,conf_mod,conf_mall,conf_sap"
325$ LIB_TXT_DB = "txt_db"
326$ LIB_PKCS7 = "pk7_asn1,pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,"+ -
327 "pk7_mime,bio_pk7"
328$ LIB_PKCS12 = "p12_add,p12_asn,p12_attr,p12_crpt,p12_crt,p12_decr,"+ -
329 "p12_init,p12_key,p12_kiss,p12_mutl,"+ -
330 "p12_utl,p12_npas,pk12err,p12_p8d,p12_p8e"
331$ LIB_COMP = "comp_lib,comp_err,"+ -
332 "c_rle,c_zlib"
333$ LIB_OCSP = "ocsp_asn,ocsp_ext,ocsp_ht,ocsp_lib,ocsp_cl,"+ -
334 "ocsp_srv,ocsp_prn,ocsp_vfy,ocsp_err"
335$ LIB_UI_COMPAT = ",ui_compat"
336$ LIB_UI = "ui_err,ui_lib,ui_openssl,ui_util"+LIB_UI_COMPAT
337$ LIB_KRB5 = "krb5_asn"
338$ LIB_CMS = "cms_lib,cms_asn1,cms_att,cms_io,cms_smime,cms_err,"+ -
339 "cms_sd,cms_dd,cms_cd,cms_env,cms_enc,cms_ess,"+ -
340 "cms_pwri"
341$ LIB_PQUEUE = "pqueue"
342$ LIB_TS = "ts_err,ts_req_utils,ts_req_print,ts_rsp_utils,ts_rsp_print,"+ -
343 "ts_rsp_sign,ts_rsp_verify,ts_verify_ctx,ts_lib,ts_conf,"+ -
344 "ts_asn1"
345$ LIB_JPAKE = "jpake,jpake_err"
346$ LIB_SRP = "srp_lib,srp_vfy"
347$ LIB_STORE = "str_err,str_lib,str_meth,str_mem"
348$ LIB_CMAC = "cmac,cm_ameth.c,cm_pmeth"
349$!
350$! Setup exceptional compilations
351$!
352$ CC3_SHOWN = 0
353$ CC4_SHOWN = 0
354$ CC5_SHOWN = 0
355$ CC6_SHOWN = 0
356$!
357$! The following lists must have leading and trailing commas, and no
358$! embedded spaces. (They are scanned for ",name,".)
359$!
360$ ! Add definitions for no threads on OpenVMS 7.1 and higher.
361$ COMPILEWITH_CC3 = ",bss_rtcp,"
362$ ! Disable the DOLLARID warning. Not needed with /STANDARD=RELAXED.
363$ COMPILEWITH_CC4 = "" !!! ",a_utctm,bss_log,o_time,o_dir,"
364$ ! Disable disjoint optimization on VAX with DECC.
365$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
366 "seed,sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
367$ ! Disable the MIXLINKAGE warning.
368$ COMPILEWITH_CC6 = "" !!! ",enc_read,set_key,"
369$!
370$! Figure Out What Other Modules We Are To Build.
371$!
372$ BUILD_SET:
373$!
374$! Define A Module Counter.
375$!
376$ MODULE_COUNTER = 0
377$!
378$! Top Of The Loop.
379$!
380$ MODULE_NEXT:
381$!
382$! Extract The Module Name From The Encryption List.
383$!
384$ MODULE_NAME = F$ELEMENT(MODULE_COUNTER,",",ENCRYPT_TYPES)
385$ IF MODULE_NAME.EQS."Basic" THEN MODULE_NAME = ""
386$ MODULE_NAME1 = MODULE_NAME
387$!
388$! Check To See If We Are At The End Of The Module List.
389$!
390$ IF (MODULE_NAME.EQS.",")
391$ THEN
392$!
393$! We Are At The End Of The Module List, Go To MODULE_DONE.
394$!
395$ GOTO MODULE_DONE
396$!
397$! End The Module List Check.
398$!
399$ ENDIF
400$!
401$! Increment The Moudle Counter.
402$!
403$ MODULE_COUNTER = MODULE_COUNTER + 1
404$!
405$! Create The Library and Apps Module Names.
406$!
407$ LIB_MODULE = "LIB_" + MODULE_NAME
408$ APPS_MODULE = "APPS_" + MODULE_NAME
409$ IF (F$EXTRACT(0,5,MODULE_NAME).EQS."ASN1_")
410$ THEN
411$ MODULE_NAME = "ASN1"
412$ ENDIF
413$ IF (F$EXTRACT(0,4,MODULE_NAME).EQS."EVP_")
414$ THEN
415$ MODULE_NAME = "EVP"
416$ ENDIF
417$!
418$! Set state (can be LIB and APPS)
419$!
420$ STATE = "LIB"
421$ IF BUILDALL .EQS. "APPS" THEN STATE = "APPS"
422$!
423$! Check if the library module name actually is defined
424$!
425$ IF F$TYPE('LIB_MODULE') .EQS. ""
426$ THEN
427$ WRITE SYS$ERROR ""
428$ WRITE SYS$ERROR "The module ",MODULE_NAME1," does not exist. Continuing..."
429$ WRITE SYS$ERROR ""
430$ GOTO MODULE_NEXT
431$ ENDIF
432$!
433$! Top Of The Module Loop.
434$!
435$ MODULE_AGAIN:
436$!
437$! Tell The User What Module We Are Building.
438$!
439$ IF (MODULE_NAME1.NES."")
440$ THEN
441$ IF STATE .EQS. "LIB"
442$ THEN
443$ WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Library Files. (",BUILDALL,",",STATE,")"
444$ ELSE IF F$TYPE('APPS_MODULE') .NES. ""
445$ THEN
446$ WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Applications. (",BUILDALL,",",STATE,")"
447$ ENDIF
448$ ENDIF
449$ ENDIF
450$!
451$! Define A File Counter And Set It To "0".
452$!
453$ FILE_COUNTER = 0
454$ APPLICATION = ""
455$ APPLICATION_COUNTER = 0
456$!
457$! Top Of The File Loop.
458$!
459$ NEXT_FILE:
460$!
461$! Look in the LIB_MODULE is we're in state LIB
462$!
463$ IF STATE .EQS. "LIB"
464$ THEN
465$!
466$! O.K, Extract The File Name From The File List.
467$!
468$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_MODULE')
469$!
470$! else
471$!
472$ ELSE
473$ FILE_NAME = ","
474$!
475$ IF F$TYPE('APPS_MODULE') .NES. ""
476$ THEN
477$!
478$! Extract The File Name From The File List.
479$! This part is a bit more complicated.
480$!
481$ IF APPLICATION .EQS. ""
482$ THEN
483$ APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
484$ APPLICATION_COUNTER = APPLICATION_COUNTER + 1
485$ APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
486$ APPLICATION = F$ELEMENT(0,"/",APPLICATION)
487$ FILE_COUNTER = 0
488$ ENDIF
489$
490$! WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
491$! SHOW SYMBOL APPLICATION*
492$!
493$ IF APPLICATION .NES. ";"
494$ THEN
495$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",APPLICATION_OBJECTS)
496$ IF FILE_NAME .EQS. ","
497$ THEN
498$ APPLICATION = ""
499$ GOTO NEXT_FILE
500$ ENDIF
501$ ENDIF
502$ ENDIF
503$ ENDIF
504$!
505$! Check To See If We Are At The End Of The File List.
506$!
507$ IF (FILE_NAME.EQS.",")
508$ THEN
509$!
510$! We Are At The End Of The File List, Change State Or Goto FILE_DONE.
511$!
512$ IF STATE .EQS. "LIB" .AND. BUILDALL .NES. "LIBRARY"
513$ THEN
514$ STATE = "APPS"
515$ GOTO MODULE_AGAIN
516$ ELSE
517$ GOTO FILE_DONE
518$ ENDIF
519$!
520$! End The File List Check.
521$!
522$ ENDIF
523$!
524$! Increment The Counter.
525$!
526$ FILE_COUNTER = FILE_COUNTER + 1
527$!
528$! Create The Source File Name.
529$!
530$ TMP_FILE_NAME = F$ELEMENT(1,"]",FILE_NAME)
531$ IF TMP_FILE_NAME .EQS. "]" THEN TMP_FILE_NAME = FILE_NAME
532$ IF F$ELEMENT(0,".",TMP_FILE_NAME) .EQS. TMP_FILE_NAME THEN -
533 FILE_NAME = FILE_NAME + ".c"
534$ IF (MODULE_NAME.NES."")
535$ THEN
536$ SOURCE_FILE = "SYS$DISK:[." + MODULE_NAME+ "]" + FILE_NAME
537$ ELSE
538$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME
539$ ENDIF
540$ SOURCE_FILE = SOURCE_FILE - "]["
541$!
542$! Create The Object File Name.
543$!
544$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
545$ ON WARNING THEN GOTO NEXT_FILE
546$!
547$! Check To See If The File We Want To Compile Is Actually There.
548$!
549$ IF (F$SEARCH(SOURCE_FILE).EQS."")
550$ THEN
551$!
552$! Tell The User That The File Doesn't Exist.
553$!
554$ WRITE SYS$OUTPUT ""
555$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
556$ WRITE SYS$OUTPUT ""
557$!
558$! Exit The Build.
559$!
560$ GOTO EXIT
561$!
562$! End The File Exist Check.
563$!
564$ ENDIF
565$!
566$! Tell The User We Are Compiling The File.
567$!
568$ IF (MODULE_NAME.EQS."")
569$ THEN
570$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME," File. (",BUILDALL,",",STATE,")"
571$ ENDIF
572$ IF (MODULE_NAME.NES."")
573$ THEN
574$ WRITE SYS$OUTPUT " ",FILE_NAME,""
575$ ENDIF
576$!
577$! Compile The File.
578$!
579$ ON ERROR THEN GOTO NEXT_FILE
580$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ ","
581$ IF FILE_NAME - ".mar" .NES. FILE_NAME
582$ THEN
583$ MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
584$ ELSE
585$ IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
586$ THEN
587$ write sys$output " \Using special rule (3)"
588$ if (.not. CC3_SHOWN)
589$ then
590$ CC3_SHOWN = 1
591$ x = " "+ CC3
592$ write /symbol sys$output x
593$ endif
594$ CC3/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
595$ ELSE
596$ IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
597$ THEN
598$ write /symbol sys$output " \Using special rule (4)"
599$ if (.not. CC4_SHOWN)
600$ then
601$ CC4_SHOWN = 1
602$ x = " "+ CC4
603$ write /symbol sys$output x
604$ endif
605$ CC4/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
606$ ELSE
607$ IF CC5_DIFFERENT .AND. -
608 (COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5)
609$ THEN
610$ write sys$output " \Using special rule (5)"
611$ if (.not. CC5_SHOWN)
612$ then
613$ CC5_SHOWN = 1
614$ x = " "+ CC5
615$ write /symbol sys$output x
616$ endif
617$ CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
618$ ELSE
619$ IF COMPILEWITH_CC6 - FILE_NAME0 .NES. COMPILEWITH_CC6
620$ THEN
621$ write sys$output " \Using special rule (6)"
622$ if (.not. CC6_SHOWN)
623$ then
624$ CC6_SHOWN = 1
625$ x = " "+ CC6
626$ write /symbol sys$output x
627$ endif
628$ CC6/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
629$ ELSE
630$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
631$ ENDIF
632$ ENDIF
633$ ENDIF
634$ ENDIF
635$ ENDIF
636$ IF STATE .EQS. "LIB"
637$ THEN
638$!
639$! Add It To The Library.
640$!
641$ LIBRARY/REPLACE 'LIB_NAME' 'OBJECT_FILE'
642$!
643$! Time To Clean Up The Object File.
644$!
645$ DELETE 'OBJECT_FILE';*
646$ ENDIF
647$!
648$! Go Back And Do It Again.
649$!
650$ GOTO NEXT_FILE
651$!
652$! All Done With This Library Part.
653$!
654$ FILE_DONE:
655$!
656$! Time To Build Some Applications
657$!
658$ IF F$TYPE('APPS_MODULE') .NES. "" .AND. BUILDALL .NES. "LIBRARY"
659$ THEN
660$ APPLICATION_COUNTER = 0
661$ NEXT_APPLICATION:
662$ APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
663$ IF APPLICATION .EQS. ";" THEN GOTO APPLICATION_DONE
664$
665$ APPLICATION_COUNTER = APPLICATION_COUNTER + 1
666$ APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
667$ APPLICATION = F$ELEMENT(0,"/",APPLICATION)
668$
669$! WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
670$! SHOW SYMBOL APPLICATION*
671$!
672$! Tell the user what happens
673$!
674$ WRITE SYS$OUTPUT " ",APPLICATION,".exe"
675$!
676$! Link The Program.
677$!
678$ ON ERROR THEN GOTO NEXT_APPLICATION
679$!
680$! Link With A TCP/IP Library.
681$!
682$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' -
683 /EXE='EXE_DIR''APPLICATION'.EXE -
684 'OBJ_DIR''APPLICATION_OBJECTS', -
685 'CRYPTO_LIB'/LIBRARY -
686 'TCPIP_LIB' -
687 'ZLIB_LIB' -
688 ,'OPT_FILE' /OPTIONS
689$!
690$ GOTO NEXT_APPLICATION
691$ APPLICATION_DONE:
692$ ENDIF
693$!
694$! Go Back And Get The Next Module.
695$!
696$ GOTO MODULE_NEXT
697$!
698$! All Done With This Module.
699$!
700$ MODULE_DONE:
701$!
702$! Tell The User That We Are All Done.
703$!
704$ WRITE SYS$OUTPUT "All Done..."
705$ EXIT:
706$ GOSUB CLEANUP
707$ EXIT
708$!
709$! Check For The Link Option FIle.
710$!
711$ CHECK_OPT_FILE:
712$!
713$! Check To See If We Need To Make A VAX C Option File.
714$!
715$ IF (COMPILER.EQS."VAXC")
716$ THEN
717$!
718$! Check To See If We Already Have A VAX C Linker Option File.
719$!
720$ IF (F$SEARCH(OPT_FILE).EQS."")
721$ THEN
722$!
723$! We Need A VAX C Linker Option File.
724$!
725$ CREATE 'OPT_FILE'
726$DECK
727!
728! Default System Options File To Link Against
729! The Sharable VAX C Runtime Library.
730!
731SYS$SHARE:VAXCRTL.EXE/SHARE
732$EOD
733$!
734$! End The Option File Check.
735$!
736$ ENDIF
737$!
738$! End The VAXC Check.
739$!
740$ ENDIF
741$!
742$! Check To See If We Need A GNU C Option File.
743$!
744$ IF (COMPILER.EQS."GNUC")
745$ THEN
746$!
747$! Check To See If We Already Have A GNU C Linker Option File.
748$!
749$ IF (F$SEARCH(OPT_FILE).EQS."")
750$ THEN
751$!
752$! We Need A GNU C Linker Option File.
753$!
754$ CREATE 'OPT_FILE'
755$DECK
756!
757! Default System Options File To Link Against
758! The Sharable C Runtime Library.
759!
760GNU_CC:[000000]GCCLIB/LIBRARY
761SYS$SHARE:VAXCRTL/SHARE
762$EOD
763$!
764$! End The Option File Check.
765$!
766$ ENDIF
767$!
768$! End The GNU C Check.
769$!
770$ ENDIF
771$!
772$! Check To See If We Need A DEC C Option File.
773$!
774$ IF (COMPILER.EQS."DECC")
775$ THEN
776$!
777$! Check To See If We Already Have A DEC C Linker Option File.
778$!
779$ IF (F$SEARCH(OPT_FILE).EQS."")
780$ THEN
781$!
782$! Figure Out If We Need A non-VAX Or A VAX Linker Option File.
783$!
784$ IF ARCH .EQS. "VAX"
785$ THEN
786$!
787$! We Need A DEC C Linker Option File For VAX.
788$!
789$ CREATE 'OPT_FILE'
790$DECK
791!
792! Default System Options File To Link Against
793! The Sharable DEC C Runtime Library.
794!
795SYS$SHARE:DECC$SHR.EXE/SHARE
796$EOD
797$!
798$! Else...
799$!
800$ ELSE
801$!
802$! Create The non-VAX Linker Option File.
803$!
804$ CREATE 'OPT_FILE'
805$DECK
806!
807! Default System Options File For non-VAX To Link Against
808! The Sharable C Runtime Library.
809!
810SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
811SYS$SHARE:CMA$OPEN_RTL/SHARE
812$EOD
813$!
814$! End The DEC C Option File Check.
815$!
816$ ENDIF
817$!
818$! End The Option File Search.
819$!
820$ ENDIF
821$!
822$! End The DEC C Check.
823$!
824$ ENDIF
825$!
826$! Tell The User What Linker Option File We Are Using.
827$!
828$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
829$!
830$! Time To RETURN.
831$!
832$ RETURN
833$!
834$! Check The User's Options.
835$!
836$ CHECK_OPTIONS:
837$!
838$! Check To See If P1 Is Blank.
839$!
840$ IF (P1.EQS."ALL")
841$ THEN
842$!
843$! P1 Is Blank, So Build Everything.
844$!
845$ BUILDALL = "TRUE"
846$!
847$! Else...
848$!
849$ ELSE
850$!
851$! Else, Check To See If P1 Has A Valid Argument.
852$!
853$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."APPS")
854$ THEN
855$!
856$! A Valid Argument.
857$!
858$ BUILDALL = P1
859$!
860$! Else...
861$!
862$ ELSE
863$!
864$! Tell The User We Don't Know What They Want.
865$!
866$ WRITE SYS$OUTPUT ""
867$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
868$ WRITE SYS$OUTPUT ""
869$ WRITE SYS$OUTPUT " ALL : Just Build Everything."
870$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
871$ WRITE SYS$OUTPUT " APPS : To Compile Just The [.xxx.EXE.CRYPTO]*.EXE Programs."
872$ WRITE SYS$OUTPUT ""
873$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
874$ WRITE SYS$OUTPUT ""
875$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture."
876$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture."
877$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
878$ WRITE SYS$OUTPUT ""
879$!
880$! Time To EXIT.
881$!
882$ EXIT
883$!
884$! End The Valid Argument Check.
885$!
886$ ENDIF
887$!
888$! End The P1 Check.
889$!
890$ ENDIF
891$!
892$! Check To See If P2 Is Blank.
893$!
894$ IF (P2.EQS."NODEBUG")
895$ THEN
896$!
897$! P2 Is NODEBUG, So Compile Without The Debugger Information.
898$!
899$ DEBUGGER = "NODEBUG"
900$ LINKMAP = "NOMAP"
901$ TRACEBACK = "NOTRACEBACK"
902$ GCC_OPTIMIZE = "OPTIMIZE"
903$ CC_OPTIMIZE = "OPTIMIZE"
904$ MACRO_OPTIMIZE = "OPTIMIZE"
905$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
906$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
907$ ELSE
908$!
909$! Check To See If We Are To Compile With Debugger Information.
910$!
911$ IF (P2.EQS."DEBUG")
912$ THEN
913$!
914$! Compile With Debugger Information.
915$!
916$ DEBUGGER = "DEBUG"
917$ LINKMAP = "MAP"
918$ TRACEBACK = "TRACEBACK"
919$ GCC_OPTIMIZE = "NOOPTIMIZE"
920$ CC_OPTIMIZE = "NOOPTIMIZE"
921$ MACRO_OPTIMIZE = "NOOPTIMIZE"
922$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
923$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
924$ ELSE
925$!
926$! They Entered An Invalid Option.
927$!
928$ WRITE SYS$OUTPUT ""
929$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
930$ WRITE SYS$OUTPUT ""
931$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
932$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
933$ WRITE SYS$OUTPUT ""
934$!
935$! Time To EXIT.
936$!
937$ EXIT
938$!
939$! End The Valid Argument Check.
940$!
941$ ENDIF
942$!
943$! End The P2 Check.
944$!
945$ ENDIF
946$!
947$! Special Threads For OpenVMS v7.1 Or Later
948$!
949$! Written By: Richard Levitte
950$! richard@levitte.org
951$!
952$!
953$! Check To See If We Have A Option For P5.
954$!
955$ IF (P5.EQS."")
956$ THEN
957$!
958$! Get The Version Of VMS We Are Using.
959$!
960$ ISSEVEN :=
961$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
962$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
963$!
964$! Check To See If The VMS Version Is v7.1 Or Later.
965$!
966$ IF (TMP.GE.71)
967$ THEN
968$!
969$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
970$!
971$ ISSEVEN := ,PTHREAD_USE_D4
972$!
973$! End The VMS Version Check.
974$!
975$ ENDIF
976$!
977$! End The P5 Check.
978$!
979$ ENDIF
980$!
981$! Check P7 (POINTER_SIZE).
982$!
983$ IF (P7 .NES. "") .AND. (ARCH .NES. "VAX")
984$ THEN
985$!
986$ IF (P7 .EQS. "32")
987$ THEN
988$ POINTER_SIZE = " /POINTER_SIZE=32"
989$ ELSE
990$ POINTER_SIZE = F$EDIT( P7, "COLLAPSE, UPCASE")
991$ IF ((POINTER_SIZE .EQS. "64") .OR. -
992 (POINTER_SIZE .EQS. "64=") .OR. -
993 (POINTER_SIZE .EQS. "64=ARGV"))
994$ THEN
995$ ARCHD = ARCH+ "_64"
996$ LIB32 = ""
997$ POINTER_SIZE = " /POINTER_SIZE=64"
998$ ELSE
999$!
1000$! Tell The User Entered An Invalid Option.
1001$!
1002$ WRITE SYS$OUTPUT ""
1003$ WRITE SYS$OUTPUT "The Option ", P7, -
1004 " Is Invalid. The Valid Options Are:"
1005$ WRITE SYS$OUTPUT ""
1006$ WRITE SYS$OUTPUT -
1007 " """" : Compile with default (short) pointers."
1008$ WRITE SYS$OUTPUT -
1009 " 32 : Compile with 32-bit (short) pointers."
1010$ WRITE SYS$OUTPUT -
1011 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
1012$ WRITE SYS$OUTPUT -
1013 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
1014$ WRITE SYS$OUTPUT -
1015 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
1016$ WRITE SYS$OUTPUT ""
1017$!
1018$! Time To EXIT.
1019$!
1020$ EXIT
1021$!
1022$ ENDIF
1023$!
1024$ ENDIF
1025$!
1026$! End The P7 (POINTER_SIZE) Check.
1027$!
1028$ ENDIF
1029$!
1030$! Set basic C compiler /INCLUDE directories.
1031$!
1032$ CC_INCLUDES = "SYS$DISK:[.''ARCHD'],SYS$DISK:[],SYS$DISK:[-],"+ -
1033 "SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.MODES],SYS$DISK:[.ASN1],SYS$DISK:[.EVP]"
1034$!
1035$! Check To See If P3 Is Blank.
1036$!
1037$ IF (P3.EQS."")
1038$ THEN
1039$!
1040$! O.K., The User Didn't Specify A Compiler, Let's Try To
1041$! Find Out Which One To Use.
1042$!
1043$! Check To See If We Have GNU C.
1044$!
1045$ IF (F$TRNLNM("GNU_CC").NES."")
1046$ THEN
1047$!
1048$! Looks Like GNUC, Set To Use GNUC.
1049$!
1050$ P3 = "GNUC"
1051$!
1052$! Else...
1053$!
1054$ ELSE
1055$!
1056$! Check To See If We Have VAXC Or DECC.
1057$!
1058$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
1059$ THEN
1060$!
1061$! Looks Like DECC, Set To Use DECC.
1062$!
1063$ P3 = "DECC"
1064$!
1065$! Else...
1066$!
1067$ ELSE
1068$!
1069$! Looks Like VAXC, Set To Use VAXC.
1070$!
1071$ P3 = "VAXC"
1072$!
1073$! End The VAXC Compiler Check.
1074$!
1075$ ENDIF
1076$!
1077$! End The DECC & VAXC Compiler Check.
1078$!
1079$ ENDIF
1080$!
1081$! End The Compiler Check.
1082$!
1083$ ENDIF
1084$!
1085$! Check To See If We Have A Option For P4.
1086$!
1087$ IF (P4.EQS."")
1088$ THEN
1089$!
1090$! Find out what socket library we have available
1091$!
1092$ IF F$PARSE("SOCKETSHR:") .NES. ""
1093$ THEN
1094$!
1095$! We have SOCKETSHR, and it is my opinion that it's the best to use.
1096$!
1097$ P4 = "SOCKETSHR"
1098$!
1099$! Tell the user
1100$!
1101$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
1102$!
1103$! Else, let's look for something else
1104$!
1105$ ELSE
1106$!
1107$! Like UCX (the reason to do this before Multinet is that the UCX
1108$! emulation is easier to use...)
1109$!
1110$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
1111 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
1112 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
1113$ THEN
1114$!
1115$! Last resort: a UCX or UCX-compatible library
1116$!
1117$ P4 = "UCX"
1118$!
1119$! Tell the user
1120$!
1121$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
1122$!
1123$! That was all...
1124$!
1125$ ENDIF
1126$ ENDIF
1127$ ENDIF
1128$!
1129$! Set Up Initial CC Definitions, Possibly With User Ones
1130$!
1131$ CCDEFS = "TCPIP_TYPE_''P4',DSO_VMS"
1132$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
1133$ CCEXTRAFLAGS = ""
1134$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
1135$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
1136$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
1137 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
1138$!
1139$! Check To See If We Have A ZLIB Option.
1140$!
1141$ ZLIB = P8
1142$ IF (ZLIB .NES. "")
1143$ THEN
1144$!
1145$! Check for expected ZLIB files.
1146$!
1147$ err = 0
1148$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
1149$ if (f$search( file1) .eqs. "")
1150$ then
1151$ WRITE SYS$OUTPUT ""
1152$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
1153$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
1154$ err = 1
1155$ endif
1156$ file1 = f$parse( "A.;", ZLIB)- "A.;"
1157$!
1158$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
1159$ if (f$search( file2) .eqs. "")
1160$ then
1161$ if (err .eq. 0)
1162$ then
1163$ WRITE SYS$OUTPUT ""
1164$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
1165$ endif
1166$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
1167$ WRITE SYS$OUTPUT ""
1168$ err = err+ 2
1169$ endif
1170$ if (err .eq. 1)
1171$ then
1172$ WRITE SYS$OUTPUT ""
1173$ endif
1174$!
1175$ if (err .ne. 0)
1176$ then
1177$ EXIT
1178$ endif
1179$!
1180$ CCDEFS = """ZLIB=1"", "+ CCDEFS
1181$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
1182$ ZLIB_LIB = ", ''file2' /library"
1183$!
1184$! Print info
1185$!
1186$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
1187$!
1188$! End The ZLIB Check.
1189$!
1190$ ENDIF
1191$!
1192$! Check To See If The User Entered A Valid Parameter.
1193$!
1194$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
1195$ THEN
1196$!
1197$! Check To See If The User Wanted DECC.
1198$!
1199$ IF (P3.EQS."DECC")
1200$ THEN
1201$!
1202$! Looks Like DECC, Set To Use DECC.
1203$!
1204$ COMPILER = "DECC"
1205$!
1206$! Tell The User We Are Using DECC.
1207$!
1208$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1209$!
1210$! Use DECC...
1211$!
1212$ CC = "CC"
1213$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
1214 THEN CC = "CC/DECC"
1215$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
1216 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
1217 " /INCLUDE=(''CC_INCLUDES')"+ -
1218 CCEXTRAFLAGS
1219$!
1220$! Define The Linker Options File Name.
1221$!
1222$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
1223$!
1224$! End DECC Check.
1225$!
1226$ ENDIF
1227$!
1228$! Check To See If We Are To Use VAXC.
1229$!
1230$ IF (P3.EQS."VAXC")
1231$ THEN
1232$!
1233$! Looks Like VAXC, Set To Use VAXC.
1234$!
1235$ COMPILER = "VAXC"
1236$!
1237$! Tell The User We Are Using VAX C.
1238$!
1239$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1240$!
1241$! Compile Using VAXC.
1242$!
1243$ CC = "CC"
1244$ IF ARCH.NES."VAX"
1245$ THEN
1246$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
1247$ EXIT
1248$ ENDIF
1249$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
1250$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1251 "/INCLUDE=(''CC_INCLUDES')"+ -
1252 CCEXTRAFLAGS
1253$ CCDEFS = """VAXC""," + CCDEFS
1254$!
1255$! Define <sys> As SYS$COMMON:[SYSLIB]
1256$!
1257$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
1258$!
1259$! Define The Linker Options File Name.
1260$!
1261$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
1262$!
1263$! End VAXC Check
1264$!
1265$ ENDIF
1266$!
1267$! Check To See If We Are To Use GNU C.
1268$!
1269$ IF (P3.EQS."GNUC")
1270$ THEN
1271$!
1272$! Looks Like GNUC, Set To Use GNUC.
1273$!
1274$ COMPILER = "GNUC"
1275$!
1276$! Tell The User We Are Using GNUC.
1277$!
1278$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1279$!
1280$! Use GNU C...
1281$!
1282$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1283 "/INCLUDE=(''CC_INCLUDES')"+ -
1284 CCEXTRAFLAGS
1285$!
1286$! Define The Linker Options File Name.
1287$!
1288$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
1289$!
1290$! End The GNU C Check.
1291$!
1292$ ENDIF
1293$!
1294$! Set up default defines
1295$!
1296$ CCDEFS = """FLAT_INC=1""," + CCDEFS
1297$!
1298$! Finish up the definition of CC.
1299$!
1300$ IF COMPILER .EQS. "DECC"
1301$ THEN
1302$ IF CCDISABLEWARNINGS .EQS. ""
1303$ THEN
1304$ CC4DISABLEWARNINGS = "DOLLARID"
1305$ CC6DISABLEWARNINGS = "MIXLINKAGE"
1306$ ELSE
1307$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
1308$ CC6DISABLEWARNINGS = CCDISABLEWARNINGS + ",MIXLINKAGE"
1309$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
1310$ ENDIF
1311$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
1312$ CC6DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC6DISABLEWARNINGS + "))"
1313$ ELSE
1314$ CCDISABLEWARNINGS = ""
1315$ CC4DISABLEWARNINGS = ""
1316$ CC6DISABLEWARNINGS = ""
1317$ ENDIF
1318$ CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
1319$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
1320$ IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P2 .NES. "DEBUG"
1321$ THEN
1322$ CC5 = CC + " /OPTIMIZE=NODISJOINT"
1323$ CC5_DIFFERENT = 1
1324$ ELSE
1325$ CC5 = CC
1326$ CC5_DIFFERENT = 0
1327$ ENDIF
1328$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1329$ CC6 = CC - CCDISABLEWARNINGS + CC6DISABLEWARNINGS
1330$!
1331$! Show user the result
1332$!
1333$ WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
1334$!
1335$! Else The User Entered An Invalid Argument.
1336$!
1337$ ELSE
1338$!
1339$! Tell The User We Don't Know What They Want.
1340$!
1341$ WRITE SYS$OUTPUT ""
1342$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1343$ WRITE SYS$OUTPUT ""
1344$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
1345$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
1346$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
1347$ WRITE SYS$OUTPUT ""
1348$!
1349$! Time To EXIT.
1350$!
1351$ EXIT
1352$!
1353$! End The Valid Argument Check.
1354$!
1355$ ENDIF
1356$!
1357$! Build a MACRO command for the architecture at hand
1358$!
1359$ IF ARCH .EQS. "VAX" THEN MACRO = "MACRO/''DEBUGGER'"
1360$ IF ARCH .NES. "VAX" THEN MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
1361$!
1362$! Show user the result
1363$!
1364$ WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
1365$!
1366$! Time to check the contents, and to make sure we get the correct library.
1367$!
1368$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
1369 .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
1370$ THEN
1371$!
1372$! Check to see if SOCKETSHR was chosen
1373$!
1374$ IF P4.EQS."SOCKETSHR"
1375$ THEN
1376$!
1377$! Set the library to use SOCKETSHR
1378$!
1379$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
1380$!
1381$! Done with SOCKETSHR
1382$!
1383$ ENDIF
1384$!
1385$! Check to see if MULTINET was chosen
1386$!
1387$ IF P4.EQS."MULTINET"
1388$ THEN
1389$!
1390$! Set the library to use UCX emulation.
1391$!
1392$ P4 = "UCX"
1393$!
1394$! Done with MULTINET
1395$!
1396$ ENDIF
1397$!
1398$! Check to see if UCX was chosen
1399$!
1400$ IF P4.EQS."UCX"
1401$ THEN
1402$!
1403$! Set the library to use UCX.
1404$!
1405$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
1406$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1407$ THEN
1408$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
1409$ ELSE
1410$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1411 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
1412$ ENDIF
1413$!
1414$! Done with UCX
1415$!
1416$ ENDIF
1417$!
1418$! Check to see if TCPIP was chosen
1419$!
1420$ IF P4.EQS."TCPIP"
1421$ THEN
1422$!
1423$! Set the library to use TCPIP (post UCX).
1424$!
1425$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1426$!
1427$! Done with TCPIP
1428$!
1429$ ENDIF
1430$!
1431$! Check to see if NONE was chosen
1432$!
1433$ IF P4.EQS."NONE"
1434$ THEN
1435$!
1436$! Do not use a TCPIP library.
1437$!
1438$ TCPIP_LIB = ""
1439$!
1440$! Done with TCPIP
1441$!
1442$ ENDIF
1443$!
1444$! Print info
1445$!
1446$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
1447$!
1448$! Else The User Entered An Invalid Argument.
1449$!
1450$ ELSE
1451$!
1452$! Tell The User We Don't Know What They Want.
1453$!
1454$ WRITE SYS$OUTPUT ""
1455$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:"
1456$ WRITE SYS$OUTPUT ""
1457$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1458$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1459$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1460$ WRITE SYS$OUTPUT ""
1461$!
1462$! Time To EXIT.
1463$!
1464$ EXIT
1465$!
1466$! Done with TCP/IP libraries
1467$!
1468$ ENDIF
1469$!
1470$! Check if the user wanted to compile just a subset of all the encryption
1471$! methods.
1472$!
1473$ IF P6 .NES. ""
1474$ THEN
1475$ ENCRYPT_TYPES = P6
1476$ ENDIF
1477$!
1478$! Time To RETURN...
1479$!
1480$ RETURN
1481$!
1482$ INITIALISE:
1483$!
1484$! Save old value of the logical name OPENSSL
1485$!
1486$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1487$!
1488$! Save directory information
1489$!
1490$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1491$ __HERE = F$EDIT(__HERE,"UPCASE")
1492$ __TOP = __HERE - "CRYPTO]"
1493$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1494$!
1495$! Set up the logical name OPENSSL to point at the include directory
1496$!
1497$ DEFINE OPENSSL/NOLOG '__INCLUDE'
1498$!
1499$! Done
1500$!
1501$ RETURN
1502$!
1503$ CLEANUP:
1504$!
1505$! Restore the logical name OPENSSL if it had a value
1506$!
1507$ IF __SAVE_OPENSSL .EQS. ""
1508$ THEN
1509$ DEASSIGN OPENSSL
1510$ ELSE
1511$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
1512$ ENDIF
1513$!
1514$! Done
1515$!
1516$ RETURN
diff --git a/src/lib/libcrypto/crypto.h b/src/lib/libcrypto/crypto.h
index 6aeda0a9ac..f92fc5182d 100644
--- a/src/lib/libcrypto/crypto.h
+++ b/src/lib/libcrypto/crypto.h
@@ -488,10 +488,10 @@ void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int),
488 long (**go)(void)); 488 long (**go)(void));
489 489
490void *CRYPTO_malloc_locked(int num, const char *file, int line); 490void *CRYPTO_malloc_locked(int num, const char *file, int line);
491void CRYPTO_free_locked(void *); 491void CRYPTO_free_locked(void *ptr);
492void *CRYPTO_malloc(int num, const char *file, int line); 492void *CRYPTO_malloc(int num, const char *file, int line);
493char *CRYPTO_strdup(const char *str, const char *file, int line); 493char *CRYPTO_strdup(const char *str, const char *file, int line);
494void CRYPTO_free(void *); 494void CRYPTO_free(void *ptr);
495void *CRYPTO_realloc(void *addr,int num, const char *file, int line); 495void *CRYPTO_realloc(void *addr,int num, const char *file, int line);
496void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file, 496void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file,
497 int line); 497 int line);
@@ -574,6 +574,13 @@ void OPENSSL_init(void);
574#define fips_cipher_abort(alg) while(0) 574#define fips_cipher_abort(alg) while(0)
575#endif 575#endif
576 576
577/* CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It
578 * takes an amount of time dependent on |len|, but independent of the contents
579 * of |a| and |b|. Unlike memcmp, it cannot be used to put elements into a
580 * defined order as the return value when a != b is undefined, other than to be
581 * non-zero. */
582int CRYPTO_memcmp(const void *a, const void *b, size_t len);
583
577/* BEGIN ERROR CODES */ 584/* BEGIN ERROR CODES */
578/* The following lines are auto generated by the script mkerr.pl. Any changes 585/* The following lines are auto generated by the script mkerr.pl. Any changes
579 * made after this point may be overwritten when the script is next run. 586 * made after this point may be overwritten when the script is next run.
diff --git a/src/lib/libcrypto/des/des-lib.com b/src/lib/libcrypto/des/des-lib.com
deleted file mode 100644
index 348f1c0470..0000000000
--- a/src/lib/libcrypto/des/des-lib.com
+++ /dev/null
@@ -1,1005 +0,0 @@
1$!
2$! DES-LIB.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$!
10$! This command files compiles and creates the
11$! "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" library. The "xxx" denotes the machine
12$! architecture of ALPHA, IA64 or VAX.
13$!
14$! It was re-written to try to determine which "C" compiler to try to use
15$! or the user can specify a compiler in P3.
16$!
17$! Specify one of the following to build just that part, specify "ALL" to
18$! just build everything.
19$!
20$! ALL To Just Build "Everything".
21$! LIBRARY To Just Build The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library.
22$! DESTEST To Just Build The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program.
23$! SPEED To Just Build The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program.
24$! RPW To Just Build The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program.
25$! DES To Just Build The [.xxx.EXE.CRYPTO.DES]DES.EXE Program.
26$! DES_OPTS To Just Build The [.xxx.EXE.CRYPTO.DES]DES_OPTS.EXE Program.
27$!
28$! Specify either DEBUG or NODEBUG as P2 to compile with or without
29$! debugging information.
30$!
31$! Specify which compiler at P3 to try to compile under.
32$!
33$! VAXC For VAX C.
34$! DECC For DEC C.
35$! GNUC For GNU C.
36$!
37$! If you don't speficy a compiler, it will try to determine which
38$! "C" compiler to try to use.
39$!
40$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
41$!
42$!
43$! Make sure we know what architecture we run on.
44$!
45$!
46$! Check Which Architecture We Are Using.
47$!
48$ IF (F$GETSYI("CPU").LT.128)
49$ THEN
50$!
51$! The Architecture Is VAX
52$!
53$ ARCH := VAX
54$!
55$! Else...
56$!
57$ ELSE
58$!
59$! The Architecture Is Alpha, IA64 or whatever comes in the future.
60$!
61$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
62$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
63$!
64$! End The Architecture Check.
65$!
66$ ENDIF
67$!
68$! Define The OBJ Directory Name.
69$!
70$ OBJ_DIR := SYS$DISK:[--.'ARCH'.OBJ.CRYPTO.DES]
71$!
72$! Define The EXE Directory Name.
73$!
74$ EXE_DIR :== SYS$DISK:[--.'ARCH'.EXE.CRYPTO.DES]
75$!
76$! Check To Make Sure We Have Valid Command Line Parameters.
77$!
78$ GOSUB CHECK_OPTIONS
79$!
80$! Tell The User What Kind of Machine We Run On.
81$!
82$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
83$!
84$! Check To See If The Architecture Specific OBJ Directory Exists.
85$!
86$ IF (F$PARSE(OBJ_DIR).EQS."")
87$ THEN
88$!
89$! It Dosen't Exist, So Create It.
90$!
91$ CREATE/DIR 'OBJ_DIR'
92$!
93$! End The Architecture Specific OBJ Directory Check.
94$!
95$ ENDIF
96$!
97$! Check To See If The Architecture Specific Directory Exists.
98$!
99$ IF (F$PARSE(EXE_DIR).EQS."")
100$ THEN
101$!
102$! It Dosen't Exist, So Create It.
103$!
104$ CREATE/DIR 'EXE_DIR'
105$!
106$! End The Architecture Specific Directory Check.
107$!
108$ ENDIF
109$!
110$! Define The Library Name.
111$!
112$ LIB_NAME := 'EXE_DIR'LIBDES.OLB
113$!
114$! Check To See What We Are To Do.
115$!
116$ IF (BUILDALL.EQS."TRUE")
117$ THEN
118$!
119$! Since Nothing Special Was Specified, Do Everything.
120$!
121$ GOSUB LIBRARY
122$ GOSUB DESTEST
123$ GOSUB SPEED
124$ GOSUB RPW
125$ GOSUB DES
126$ GOSUB DES_OPTS
127$!
128$! Else...
129$!
130$ ELSE
131$!
132$! Build Just What The User Wants Us To Build.
133$!
134$ GOSUB 'BUILDALL'
135$!
136$! End The BUILDALL Check.
137$!
138$ ENDIF
139$!
140$! Time To EXIT.
141$!
142$ EXIT
143$ LIBRARY:
144$!
145$! Tell The User That We Are Compiling.
146$!
147$ WRITE SYS$OUTPUT "Compiling The ",LIB_NAME," Files."
148$!
149$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" Library...
150$!
151$ IF (F$SEARCH(LIB_NAME).EQS."")
152$ THEN
153$!
154$! Guess Not, Create The Library.
155$!
156$ LIBRARY/CREATE/OBJECT 'LIB_NAME'
157$!
158$! End The Library Exist Check.
159$!
160$ ENDIF
161$!
162$! Define The DES Library Files.
163$!
164$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
165 "ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
166 "enc_read,enc_writ,ofb64enc,"+ -
167 "ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
168 "des_enc,fcrypt_b,read2pwd,"+ -
169 "fcrypt,xcbc_enc,read_pwd,rpc_enc,cbc_cksm,supp"
170$!
171$! Define A File Counter And Set It To "0".
172$!
173$ FILE_COUNTER = 0
174$!
175$! Top Of The File Loop.
176$!
177$ NEXT_FILE:
178$!
179$! O.K, Extract The File Name From The File List.
180$!
181$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_DES)
182$!
183$! Check To See If We Are At The End Of The File List.
184$!
185$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
186$!
187$! Increment The Counter.
188$!
189$ FILE_COUNTER = FILE_COUNTER + 1
190$!
191$! Create The Source File Name.
192$!
193$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
194$!
195$! Tell The User We Are Compiling The Source File.
196$!
197$ WRITE SYS$OUTPUT " ",FILE_NAME,".C"
198$!
199$! Create The Object File Name.
200$!
201$ OBJECT_FILE = OBJ_DIR + FILE_NAME + "." + ARCH + "OBJ"
202$ ON WARNING THEN GOTO NEXT_FILE
203$!
204$! Check To See If The File We Want To Compile Actually Exists.
205$!
206$ IF (F$SEARCH(SOURCE_FILE).EQS."")
207$ THEN
208$!
209$! Tell The User That The File Dosen't Exist.
210$!
211$ WRITE SYS$OUTPUT ""
212$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
213$ WRITE SYS$OUTPUT ""
214$!
215$! Exit The Build.
216$!
217$ EXIT
218$!
219$! End The File Exists Check.
220$!
221$ ENDIF
222$!
223$! Compile The File.
224$!
225$ ON ERROR THEN GOTO NEXT_FILE
226$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
227$!
228$! Add It To The Library.
229$!
230$ LIBRARY/REPLACE/OBJECT 'LIB_NAME' 'OBJECT_FILE'
231$!
232$! Time To Clean Up The Object File.
233$!
234$ DELETE 'OBJECT_FILE';*
235$!
236$! Go Back And Do It Again.
237$!
238$ GOTO NEXT_FILE
239$!
240$! All Done With This Library Part.
241$!
242$ FILE_DONE:
243$!
244$! Tell The User That We Are All Done.
245$!
246$ WRITE SYS$OUTPUT "Library ",LIB_NAME," Built."
247$!
248$! All Done, Time To Return.
249$!
250$ RETURN
251$!
252$! Compile The DESTEST Program.
253$!
254$ DESTEST:
255$!
256$! Check To See If We Have The Proper Libraries.
257$!
258$ GOSUB LIB_CHECK
259$!
260$! Check To See If We Have A Linker Option File.
261$!
262$ GOSUB CHECK_OPT_FILE
263$!
264$! Check To See If The File We Want To Compile Actually Exists.
265$!
266$ IF (F$SEARCH("SYS$DISK:[]DESTEST.C").EQS."")
267$ THEN
268$!
269$! Tell The User That The File Dosen't Exist.
270$!
271$ WRITE SYS$OUTPUT ""
272$ WRITE SYS$OUTPUT "The File DESTEST.C Dosen't Exist."
273$ WRITE SYS$OUTPUT ""
274$!
275$! Exit The Build.
276$!
277$ EXIT
278$!
279$! End The DESTEST.C File Check.
280$!
281$ ENDIF
282$!
283$! Tell The User What We Are Building.
284$!
285$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DESTEST.EXE"
286$!
287$! Compile The DESTEST Program.
288$!
289$ CC/OBJECT='OBJ_DIR'DESTEST.OBJ SYS$DISK:[]DESTEST.C
290$!
291$! Link The DESTEST Program.
292$!
293$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DESTEST.EXE -
294 'OBJ_DIR'DESTEST.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
295$!
296$! All Done, Time To Return.
297$!
298$ RETURN
299$!
300$! Compile The SPEED Program.
301$!
302$ SPEED:
303$!
304$! Check To See If We Have The Proper Libraries.
305$!
306$ GOSUB LIB_CHECK
307$!
308$! Check To See If We Have A Linker Option File.
309$!
310$ GOSUB CHECK_OPT_FILE
311$!
312$! Check To See If The File We Want To Compile Actually Exists.
313$!
314$ IF (F$SEARCH("SYS$DISK:[]SPEED.C").EQS."")
315$ THEN
316$!
317$! Tell The User That The File Dosen't Exist.
318$!
319$ WRITE SYS$OUTPUT ""
320$ WRITE SYS$OUTPUT "The File SPEED.C Dosen't Exist."
321$ WRITE SYS$OUTPUT ""
322$!
323$! Exit The Build.
324$!
325$ EXIT
326$!
327$! End The SPEED.C File Check.
328$!
329$ ENDIF
330$!
331$! Tell The User What We Are Building.
332$!
333$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"SPEED.EXE"
334$!
335$! Compile The SPEED Program.
336$!
337$ CC/OBJECT='OBJ_DIR'SPEED.OBJ SYS$DISK:[]SPEED.C
338$!
339$! Link The SPEED Program.
340$!
341$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'SPEED.EXE -
342 'OBJ_DIR'SPEED.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
343$!
344$! All Done, Time To Return.
345$!
346$ RETURN
347$!
348$! Compile The RPW Program.
349$!
350$ RPW:
351$!
352$! Check To See If We Have The Proper Libraries.
353$!
354$ GOSUB LIB_CHECK
355$!
356$! Check To See If We Have A Linker Option File.
357$!
358$ GOSUB CHECK_OPT_FILE
359$!
360$! Check To See If The File We Want To Compile Actually Exists.
361$!
362$ IF (F$SEARCH("SYS$DISK:[]RPW.C").EQS."")
363$ THEN
364$!
365$! Tell The User That The File Dosen't Exist.
366$!
367$ WRITE SYS$OUTPUT ""
368$ WRITE SYS$OUTPUT "The File RPW.C Dosen't Exist."
369$ WRITE SYS$OUTPUT ""
370$!
371$! Exit The Build.
372$!
373$ EXIT
374$!
375$! End The RPW.C File Check.
376$!
377$ ENDIF
378$!
379$! Tell The User What We Are Building.
380$!
381$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"RPW.EXE"
382$!
383$! Compile The RPW Program.
384$!
385$ CC/OBJECT='OBJ_DIR'RPW.OBJ SYS$DISK:[]RPW.C
386$!
387$! Link The RPW Program.
388$!
389$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'RPW.EXE -
390 'OBJ_DIR'RPW.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
391$!
392$! All Done, Time To Return.
393$!
394$ RETURN
395$!
396$! Compile The DES Program.
397$!
398$ DES:
399$!
400$! Check To See If We Have The Proper Libraries.
401$!
402$ GOSUB LIB_CHECK
403$!
404$! Check To See If We Have A Linker Option File.
405$!
406$ GOSUB CHECK_OPT_FILE
407$!
408$! Check To See If The File We Want To Compile Actually Exists.
409$!
410$ IF (F$SEARCH("SYS$DISK:[]DES.C").EQS."")
411$ THEN
412$!
413$! Tell The User That The File Dosen't Exist.
414$!
415$ WRITE SYS$OUTPUT ""
416$ WRITE SYS$OUTPUT "The File DES.C Dosen't Exist."
417$ WRITE SYS$OUTPUT ""
418$!
419$! Exit The Build.
420$!
421$ EXIT
422$!
423$! End The DES.C File Check.
424$!
425$ ENDIF
426$!
427$! Tell The User What We Are Building.
428$!
429$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES.EXE"
430$!
431$! Compile The DES Program.
432$!
433$ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]DES.C
434$ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]CBC3_ENC.C
435$!
436$! Link The DES Program.
437$!
438$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES.EXE -
439 'OBJ_DIR'DES.OBJ,'OBJ_DIR'CBC3_ENC.OBJ,-
440 'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
441$!
442$! All Done, Time To Return.
443$!
444$ RETURN
445$!
446$! Compile The DES_OPTS Program.
447$!
448$ DES_OPTS:
449$!
450$! Check To See If We Have The Proper Libraries.
451$!
452$ GOSUB LIB_CHECK
453$!
454$! Check To See If We Have A Linker Option File.
455$!
456$ GOSUB CHECK_OPT_FILE
457$!
458$! Check To See If The File We Want To Compile Actually Exists.
459$!
460$ IF (F$SEARCH("SYS$DISK:[]DES_OPTS.C").EQS."")
461$ THEN
462$!
463$! Tell The User That The File Dosen't Exist.
464$!
465$ WRITE SYS$OUTPUT ""
466$ WRITE SYS$OUTPUT "The File DES_OPTS.C Dosen't Exist."
467$ WRITE SYS$OUTPUT ""
468$!
469$! Exit The Build.
470$!
471$ EXIT
472$!
473$! End The DES_OPTS.C File Check.
474$!
475$ ENDIF
476$!
477$! Tell The User What We Are Building.
478$!
479$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES_OPTS.EXE"
480$!
481$! Compile The DES_OPTS Program.
482$!
483$ CC/OBJECT='OBJ_DIR'DES_OPTS.OBJ SYS$DISK:[]DES_OPTS.C
484$!
485$! Link The DES_OPTS Program.
486$!
487$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES_OPTS.EXE -
488 'OBJ_DIR'DES_OPTS.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
489$!
490$! All Done, Time To Return.
491$!
492$ RETURN
493$ EXIT
494$!
495$! Check For The Link Option FIle.
496$!
497$ CHECK_OPT_FILE:
498$!
499$! Check To See If We Need To Make A VAX C Option File.
500$!
501$ IF (COMPILER.EQS."VAXC")
502$ THEN
503$!
504$! Check To See If We Already Have A VAX C Linker Option File.
505$!
506$ IF (F$SEARCH(OPT_FILE).EQS."")
507$ THEN
508$!
509$! We Need A VAX C Linker Option File.
510$!
511$ CREATE 'OPT_FILE'
512$DECK
513!
514! Default System Options File To Link Agianst
515! The Sharable VAX C Runtime Library.
516!
517SYS$SHARE:VAXCRTL.EXE/SHARE
518$EOD
519$!
520$! End The Option File Check.
521$!
522$ ENDIF
523$!
524$! End The VAXC Check.
525$!
526$ ENDIF
527$!
528$! Check To See If We Need A GNU C Option File.
529$!
530$ IF (COMPILER.EQS."GNUC")
531$ THEN
532$!
533$! Check To See If We Already Have A GNU C Linker Option File.
534$!
535$ IF (F$SEARCH(OPT_FILE).EQS."")
536$ THEN
537$!
538$! We Need A GNU C Linker Option File.
539$!
540$ CREATE 'OPT_FILE'
541$DECK
542!
543! Default System Options File To Link Agianst
544! The Sharable C Runtime Library.
545!
546GNU_CC:[000000]GCCLIB/LIBRARY
547SYS$SHARE:VAXCRTL/SHARE
548$EOD
549$!
550$! End The Option File Check.
551$!
552$ ENDIF
553$!
554$! End The GNU C Check.
555$!
556$ ENDIF
557$!
558$! Check To See If We Need A DEC C Option File.
559$!
560$ IF (COMPILER.EQS."DECC")
561$ THEN
562$!
563$! Check To See If We Already Have A DEC C Linker Option File.
564$!
565$ IF (F$SEARCH(OPT_FILE).EQS."")
566$ THEN
567$!
568$! Figure Out If We Need An non-VAX Or A VAX Linker Option File.
569$!
570$ IF (F$GETSYI("CPU").LT.128)
571$ THEN
572$!
573$! We Need A DEC C Linker Option File For VAX.
574$!
575$ CREATE 'OPT_FILE'
576$DECK
577!
578! Default System Options File To Link Agianst
579! The Sharable DEC C Runtime Library.
580!
581SYS$SHARE:DECC$SHR.EXE/SHARE
582$EOD
583$!
584$! Else...
585$!
586$ ELSE
587$!
588$! Create The non-VAX Linker Option File.
589$!
590$ CREATE 'OPT_FILE'
591$DECK
592!
593! Default System Options File For non-VAX To Link Agianst
594! The Sharable C Runtime Library.
595!
596SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
597SYS$SHARE:CMA$OPEN_RTL/SHARE
598$EOD
599$!
600$! End The DEC C Option File Check.
601$!
602$ ENDIF
603$!
604$! End The Option File Search.
605$!
606$ ENDIF
607$!
608$! End The DEC C Check.
609$!
610$ ENDIF
611$!
612$! Tell The User What Linker Option File We Are Using.
613$!
614$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
615$!
616$! Time To RETURN.
617$!
618$ RETURN
619$!
620$! Library Check.
621$!
622$ LIB_CHECK:
623$!
624$! Look For The Library LIBDES.OLB.
625$!
626$ IF (F$SEARCH(LIB_NAME).EQS."")
627$ THEN
628$!
629$! Tell The User We Can't Find The [.xxx.CRYPTO.DES]LIBDES.OLB Library.
630$!
631$ WRITE SYS$OUTPUT ""
632$ WRITE SYS$OUTPUT "Can't Find The Library ",LIB_NAME,"."
633$ WRITE SYS$OUTPUT "We Can't Link Without It."
634$ WRITE SYS$OUTPUT ""
635$!
636$! Since We Can't Link Without It, Exit.
637$!
638$ EXIT
639$ ENDIF
640$!
641$! Time To Return.
642$!
643$ RETURN
644$!
645$! Check The User's Options.
646$!
647$ CHECK_OPTIONS:
648$!
649$! Check To See If We Are To "Just Build Everything".
650$!
651$ IF (P1.EQS."ALL")
652$ THEN
653$!
654$! P1 Is "ALL", So Build Everything.
655$!
656$ BUILDALL = "TRUE"
657$!
658$! Else...
659$!
660$ ELSE
661$!
662$! Else, Check To See If P1 Has A Valid Argument.
663$!
664$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."DESTEST").OR.(P1.EQS."SPEED") -
665 .OR.(P1.EQS."RPW").OR.(P1.EQS."DES").OR.(P1.EQS."DES_OPTS")
666$ THEN
667$!
668$! A Valid Argument.
669$!
670$ BUILDALL = P1
671$!
672$! Else...
673$!
674$ ELSE
675$!
676$! Tell The User We Don't Know What They Want.
677$!
678$ WRITE SYS$OUTPUT ""
679$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
680$ WRITE SYS$OUTPUT ""
681$ WRITE SYS$OUTPUT " ALL : Just Build Everything."
682$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library."
683$ WRITE SYS$OUTPUT " DESTEST : To Compile Just The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program."
684$ WRITE SYS$OUTPUT " SPEED : To Compile Just The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program."
685$ WRITE SYS$OUTPUT " RPW : To Compile Just The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program."
686$ WRITE SYS$OUTPUT " DES : To Compile Just The [.xxx.EXE.CRYPTO.DES]DES.EXE Program."
687$ WRITE SYS$OUTPUT " DES_OPTS : To Compile Just The [.xxx.EXE.CRYTPO.DES]DES_OPTS.EXE Program."
688$ WRITE SYS$OUTPUT ""
689$ WRITE SYS$OUTPUT " Where 'xxx' Stands For: "
690$ WRITE SYS$OUTPUT ""
691$ WRITE SYS$OUTPUT " ALPHA : Alpha Architecture."
692$ WRITE SYS$OUTPUT " IA64 : IA64 Architecture."
693$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
694$ WRITE SYS$OUTPUT ""
695$!
696$! Time To EXIT.
697$!
698$ EXIT
699$!
700$! End The Valid Argument Check.
701$!
702$ ENDIF
703$!
704$! End The P1 Check.
705$!
706$ ENDIF
707$!
708$! Check To See If We Are To Compile Without Debugger Information.
709$!
710$ IF (P2.EQS."NODEBUG")
711$ THEN
712$!
713$! P2 Is Blank, So Compile Without Debugger Information.
714$!
715$ DEBUGGER = "NODEBUG"
716$ TRACEBACK = "NOTRACEBACK"
717$ GCC_OPTIMIZE = "OPTIMIZE"
718$ CC_OPTIMIZE = "OPTIMIZE"
719$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
720$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
721$!
722$! Else...
723$!
724$ ELSE
725$!
726$! Check To See If We Are To Compile With Debugger Information.
727$!
728$ IF (P2.EQS."DEBUG")
729$ THEN
730$!
731$! Compile With Debugger Information.
732$!
733$ DEBUGGER = "DEBUG"
734$ TRACEBACK = "TRACEBACK"
735$ GCC_OPTIMIZE = "NOOPTIMIZE"
736$ CC_OPTIMIZE = "NOOPTIMIZE"
737$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
738$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
739$!
740$! Else...
741$!
742$ ELSE
743$!
744$! Tell The User Entered An Invalid Option..
745$!
746$ WRITE SYS$OUTPUT ""
747$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
748$ WRITE SYS$OUTPUT ""
749$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
750$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
751$ WRITE SYS$OUTPUT ""
752$!
753$! Time To EXIT.
754$!
755$ EXIT
756$!
757$! End The Valid Argument Check.
758$!
759$ ENDIF
760$!
761$! End The P2 Check.
762$!
763$ ENDIF
764$!
765$! Special Threads For OpenVMS v7.1 Or Later.
766$!
767$! Written By: Richard Levitte
768$! richard@levitte.org
769$!
770$!
771$! Check To See If We Have A Option For P4.
772$!
773$ IF (P4.EQS."")
774$ THEN
775$!
776$! Get The Version Of VMS We Are Using.
777$!
778$ ISSEVEN := ""
779$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
780$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
781$!
782$! Check To See If The VMS Version Is v7.1 Or Later.
783$!
784$ IF (TMP.GE.71)
785$ THEN
786$!
787$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
788$!
789$ ISSEVEN := ,PTHREAD_USE_D4
790$!
791$! End The VMS Version Check.
792$!
793$ ENDIF
794$!
795$! End The P4 Check.
796$!
797$ ENDIF
798$!
799$! Check To See If P3 Is Blank.
800$!
801$ IF (P3.EQS."")
802$ THEN
803$!
804$! O.K., The User Didn't Specify A Compiler, Let's Try To
805$! Find Out Which One To Use.
806$!
807$! Check To See If We Have GNU C.
808$!
809$ IF (F$TRNLNM("GNU_CC").NES."")
810$ THEN
811$!
812$! Looks Like GNUC, Set To Use GNUC.
813$!
814$ P3 = "GNUC"
815$!
816$! Else...
817$!
818$ ELSE
819$!
820$! Check To See If We Have VAXC Or DECC.
821$!
822$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
823$ THEN
824$!
825$! Looks Like DECC, Set To Use DECC.
826$!
827$ P3 = "DECC"
828$!
829$! Else...
830$!
831$ ELSE
832$!
833$! Looks Like VAXC, Set To Use VAXC.
834$!
835$ P3 = "VAXC"
836$!
837$! End The VAXC Compiler Check.
838$!
839$ ENDIF
840$!
841$! End The DECC & VAXC Compiler Check.
842$!
843$ ENDIF
844$!
845$! End The Compiler Check.
846$!
847$ ENDIF
848$!
849$! Set Up Initial CC Definitions, Possibly With User Ones
850$!
851$ CCDEFS = ""
852$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = USER_CCDEFS
853$ CCEXTRAFLAGS = ""
854$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
855$ CCDISABLEWARNINGS = ""
856$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
857 CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
858$!
859$! Check To See If The User Entered A Valid Paramter.
860$!
861$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
862$ THEN
863$!
864$! Check To See If The User Wanted DECC.
865$!
866$ IF (P3.EQS."DECC")
867$ THEN
868$!
869$! Looks Like DECC, Set To Use DECC.
870$!
871$ COMPILER = "DECC"
872$!
873$! Tell The User We Are Using DECC.
874$!
875$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
876$!
877$! Use DECC...
878$!
879$ CC = "CC"
880$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
881 THEN CC = "CC/DECC"
882$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
883 "/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS
884$!
885$! Define The Linker Options File Name.
886$!
887$ OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
888$!
889$! End DECC Check.
890$!
891$ ENDIF
892$!
893$! Check To See If We Are To Use VAXC.
894$!
895$ IF (P3.EQS."VAXC")
896$ THEN
897$!
898$! Looks Like VAXC, Set To Use VAXC.
899$!
900$ COMPILER = "VAXC"
901$!
902$! Tell The User We Are Using VAX C.
903$!
904$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
905$!
906$! Compile Using VAXC.
907$!
908$ CC = "CC"
909$ IF ARCH.NES."VAX"
910$ THEN
911$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
912$ EXIT
913$ ENDIF
914$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
915$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
916$ CCDEFS = """VAXC""," + CCDEFS
917$!
918$! Define <sys> As SYS$COMMON:[SYSLIB]
919$!
920$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
921$!
922$! Define The Linker Options File Name.
923$!
924$ OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
925$!
926$! End VAXC Check
927$!
928$ ENDIF
929$!
930$! Check To See If We Are To Use GNU C.
931$!
932$ IF (P3.EQS."GNUC")
933$ THEN
934$!
935$! Looks Like GNUC, Set To Use GNUC.
936$!
937$ COMPILER = "GNUC"
938$!
939$! Tell The User We Are Using GNUC.
940$!
941$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
942$!
943$! Use GNU C...
944$!
945$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
946$!
947$! Define The Linker Options File Name.
948$!
949$ OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
950$!
951$! End The GNU C Check.
952$!
953$ ENDIF
954$!
955$! Set up default defines
956$!
957$ CCDEFS = """FLAT_INC=1""," + CCDEFS
958$!
959$! Finish up the definition of CC.
960$!
961$ IF COMPILER .EQS. "DECC"
962$ THEN
963$ IF CCDISABLEWARNINGS .EQS. ""
964$ THEN
965$ CC4DISABLEWARNINGS = "DOLLARID"
966$ ELSE
967$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
968$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
969$ ENDIF
970$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
971$ ELSE
972$ CCDISABLEWARNINGS = ""
973$ CC4DISABLEWARNINGS = ""
974$ ENDIF
975$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
976$!
977$! Show user the result
978$!
979$ WRITE SYS$OUTPUT "Main Compiling Command: ",CC
980$!
981$! Else The User Entered An Invalid Argument.
982$!
983$ ELSE
984$!
985$! Tell The User We Don't Know What They Want.
986$!
987$ WRITE SYS$OUTPUT ""
988$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
989$ WRITE SYS$OUTPUT ""
990$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
991$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
992$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
993$ WRITE SYS$OUTPUT ""
994$!
995$! Time To EXIT.
996$!
997$ EXIT
998$!
999$! End The P3 Check.
1000$!
1001$ ENDIF
1002$!
1003$! Time To RETURN...
1004$!
1005$ RETURN
diff --git a/src/lib/libcrypto/des/des.h b/src/lib/libcrypto/des/des.h
index 23c8cfc901..1eaedcbd24 100644
--- a/src/lib/libcrypto/des/des.h
+++ b/src/lib/libcrypto/des/des.h
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#ifndef HEADER_DES_H 59#ifndef HEADER_NEW_DES_H
60#define HEADER_DES_H 60#define HEADER_NEW_DES_H
61 61
62#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES, 62#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES,
63 DES_LONG (via openssl/opensslconf.h */ 63 DES_LONG (via openssl/opensslconf.h */
@@ -71,8 +71,6 @@
71# define OPENSSL_EXTERN OPENSSL_EXPORT 71# define OPENSSL_EXTERN OPENSSL_EXPORT
72#endif 72#endif
73 73
74#define des_SPtrans DES_SPtrans
75
76#ifdef __cplusplus 74#ifdef __cplusplus
77extern "C" { 75extern "C" {
78#endif 76#endif
diff --git a/src/lib/libcrypto/des/des_old.h b/src/lib/libcrypto/des/des_old.h
index 8665ba4e7e..2b2c372354 100644
--- a/src/lib/libcrypto/des/des_old.h
+++ b/src/lib/libcrypto/des/des_old.h
@@ -88,8 +88,8 @@
88 * 88 *
89 */ 89 */
90 90
91#ifndef HEADER_DES_OLD_H 91#ifndef HEADER_DES_H
92#define HEADER_DES_OLD_H 92#define HEADER_DES_H
93 93
94#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ 94#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */
95 95
@@ -97,7 +97,7 @@
97#error DES is disabled. 97#error DES is disabled.
98#endif 98#endif
99 99
100#ifndef HEADER_DES_H 100#ifndef HEADER_NEW_DES_H
101#error You must include des.h, not des_old.h directly. 101#error You must include des.h, not des_old.h directly.
102#endif 102#endif
103 103
diff --git a/src/lib/libcrypto/des/set_key.c b/src/lib/libcrypto/des/set_key.c
index d3e69ca8b5..da4d62e112 100644
--- a/src/lib/libcrypto/des/set_key.c
+++ b/src/lib/libcrypto/des/set_key.c
@@ -63,9 +63,8 @@
63 * 1.1 added norm_expand_bits 63 * 1.1 added norm_expand_bits
64 * 1.0 First working version 64 * 1.0 First working version
65 */ 65 */
66#include "des_locl.h"
67
68#include <openssl/crypto.h> 66#include <openssl/crypto.h>
67#include "des_locl.h"
69 68
70OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0) /* defaults to false */ 69OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0) /* defaults to false */
71 70
diff --git a/src/lib/libcrypto/des/str2key.c b/src/lib/libcrypto/des/str2key.c
index 9c2054bda6..1077f99d1b 100644
--- a/src/lib/libcrypto/des/str2key.c
+++ b/src/lib/libcrypto/des/str2key.c
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include "des_locl.h"
60#include <openssl/crypto.h> 59#include <openssl/crypto.h>
60#include "des_locl.h"
61 61
62void DES_string_to_key(const char *str, DES_cblock *key) 62void DES_string_to_key(const char *str, DES_cblock *key)
63 { 63 {
diff --git a/src/lib/libcrypto/doc/ERR_get_error.pod b/src/lib/libcrypto/doc/ERR_get_error.pod
index 34443045fc..828ecf529b 100644
--- a/src/lib/libcrypto/doc/ERR_get_error.pod
+++ b/src/lib/libcrypto/doc/ERR_get_error.pod
@@ -52,8 +52,11 @@ ERR_get_error_line_data(), ERR_peek_error_line_data() and
52ERR_get_last_error_line_data() store additional data and flags 52ERR_get_last_error_line_data() store additional data and flags
53associated with the error code in *B<data> 53associated with the error code in *B<data>
54and *B<flags>, unless these are B<NULL>. *B<data> contains a string 54and *B<flags>, unless these are B<NULL>. *B<data> contains a string
55if *B<flags>&B<ERR_TXT_STRING>. If it has been allocated by OPENSSL_malloc(), 55if *B<flags>&B<ERR_TXT_STRING> is true.
56*B<flags>&B<ERR_TXT_MALLOCED> is true. 56
57An application B<MUST NOT> free the *B<data> pointer (or any other pointers
58returned by these functions) with OPENSSL_free() as freeing is handled
59automatically by the error library.
57 60
58=head1 RETURN VALUES 61=head1 RETURN VALUES
59 62
diff --git a/src/lib/libcrypto/doc/EVP_BytesToKey.pod b/src/lib/libcrypto/doc/EVP_BytesToKey.pod
index d375c46e03..0ea7d55c0f 100644
--- a/src/lib/libcrypto/doc/EVP_BytesToKey.pod
+++ b/src/lib/libcrypto/doc/EVP_BytesToKey.pod
@@ -17,7 +17,7 @@ EVP_BytesToKey - password based encryption routine
17 17
18EVP_BytesToKey() derives a key and IV from various parameters. B<type> is 18EVP_BytesToKey() derives a key and IV from various parameters. B<type> is
19the cipher to derive the key and IV for. B<md> is the message digest to use. 19the cipher to derive the key and IV for. B<md> is the message digest to use.
20The B<salt> paramter is used as a salt in the derivation: it should point to 20The B<salt> parameter is used as a salt in the derivation: it should point to
21an 8 byte buffer or NULL if no salt is used. B<data> is a buffer containing 21an 8 byte buffer or NULL if no salt is used. B<data> is a buffer containing
22B<datal> bytes which is used to derive the keying data. B<count> is the 22B<datal> bytes which is used to derive the keying data. B<count> is the
23iteration count to use. The derived key and IV will be written to B<key> 23iteration count to use. The derived key and IV will be written to B<key>
diff --git a/src/lib/libcrypto/doc/EVP_DigestInit.pod b/src/lib/libcrypto/doc/EVP_DigestInit.pod
index 1aa15acb61..367691cc7a 100644
--- a/src/lib/libcrypto/doc/EVP_DigestInit.pod
+++ b/src/lib/libcrypto/doc/EVP_DigestInit.pod
@@ -252,9 +252,9 @@ digest name passed on the command line.
252 252
253=head1 SEE ALSO 253=head1 SEE ALSO
254 254
255L<evp(3)|evp(3)>, L<HMAC(3)|HMAC(3)>, L<MD2(3)|MD2(3)>, 255L<evp(3)|evp(3)>, L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>,
256L<MD5(3)|MD5(3)>, L<MDC2(3)|MDC2(3)>, L<RIPEMD160(3)|RIPEMD160(3)>, 256L<md5(3)|md5(3)>, L<mdc2(3)|mdc2(3)>, L<ripemd(3)|ripemd(3)>,
257L<SHA1(3)|SHA1(3)> 257L<sha(3)|sha(3)>, L<dgst(1)|dgst(1)>
258 258
259=head1 HISTORY 259=head1 HISTORY
260 260
diff --git a/src/lib/libcrypto/doc/EVP_EncryptInit.pod b/src/lib/libcrypto/doc/EVP_EncryptInit.pod
index 8271d3dfc4..1c4bf184a1 100644
--- a/src/lib/libcrypto/doc/EVP_EncryptInit.pod
+++ b/src/lib/libcrypto/doc/EVP_EncryptInit.pod
@@ -152,7 +152,7 @@ does not remain in memory.
152 152
153EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in a 153EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in a
154similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex and 154similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex and
155EVP_CipherInit_ex() except the B<ctx> paramter does not need to be 155EVP_CipherInit_ex() except the B<ctx> parameter does not need to be
156initialized and they always use the default cipher implementation. 156initialized and they always use the default cipher implementation.
157 157
158EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() behave in a 158EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() behave in a
diff --git a/src/lib/libcrypto/doc/EVP_SignInit.pod b/src/lib/libcrypto/doc/EVP_SignInit.pod
index 781d43e401..620a623ab6 100644
--- a/src/lib/libcrypto/doc/EVP_SignInit.pod
+++ b/src/lib/libcrypto/doc/EVP_SignInit.pod
@@ -89,10 +89,10 @@ The previous two bugs are fixed in the newer EVP_SignDigest*() function.
89=head1 SEE ALSO 89=head1 SEE ALSO
90 90
91L<EVP_VerifyInit(3)|EVP_VerifyInit(3)>, 91L<EVP_VerifyInit(3)|EVP_VerifyInit(3)>,
92L<EVP_DigestInit(3)|EVP_DigestInit(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, 92L<EVP_DigestInit(3)|EVP_DigestInit(3)>, L<err(3)|err(3)>,
93L<evp(3)|evp(3)>, L<HMAC(3)|HMAC(3)>, L<MD2(3)|MD2(3)>, 93L<evp(3)|evp(3)>, L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>,
94L<MD5(3)|MD5(3)>, L<MDC2(3)|MDC2(3)>, L<RIPEMD(3)|RIPEMD(3)>, 94L<md5(3)|md5(3)>, L<mdc2(3)|mdc2(3)>, L<ripemd(3)|ripemd(3)>,
95L<SHA1(3)|SHA1(3)>, L<digest(1)|digest(1)> 95L<sha(3)|sha(3)>, L<dgst(1)|dgst(1)>
96 96
97=head1 HISTORY 97=head1 HISTORY
98 98
diff --git a/src/lib/libcrypto/doc/dsa.pod b/src/lib/libcrypto/doc/dsa.pod
index ae2e5d81f9..da07d2b930 100644
--- a/src/lib/libcrypto/doc/dsa.pod
+++ b/src/lib/libcrypto/doc/dsa.pod
@@ -101,7 +101,8 @@ Standard, DSS), ANSI X9.30
101=head1 SEE ALSO 101=head1 SEE ALSO
102 102
103L<bn(3)|bn(3)>, L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>, 103L<bn(3)|bn(3)>, L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
104L<rsa(3)|rsa(3)>, L<SHA1(3)|SHA1(3)>, L<DSA_new(3)|DSA_new(3)>, 104L<rsa(3)|rsa(3)>, L<sha(3)|sha(3)>, L<engine(3)|engine(3)>,
105L<DSA_new(3)|DSA_new(3)>,
105L<DSA_size(3)|DSA_size(3)>, 106L<DSA_size(3)|DSA_size(3)>,
106L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>, 107L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>,
107L<DSA_dup_DH(3)|DSA_dup_DH(3)>, 108L<DSA_dup_DH(3)|DSA_dup_DH(3)>,
diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c
index e21b9f6dbc..5f351b318d 100644
--- a/src/lib/libcrypto/dso/dso_dlfcn.c
+++ b/src/lib/libcrypto/dso/dso_dlfcn.c
@@ -86,7 +86,7 @@ DSO_METHOD *DSO_METHOD_dlfcn(void)
86# if defined(_AIX) || defined(__CYGWIN__) || \ 86# if defined(_AIX) || defined(__CYGWIN__) || \
87 defined(__SCO_VERSION__) || defined(_SCO_ELF) || \ 87 defined(__SCO_VERSION__) || defined(_SCO_ELF) || \
88 (defined(__osf__) && !defined(RTLD_NEXT)) || \ 88 (defined(__osf__) && !defined(RTLD_NEXT)) || \
89 (defined(__OpenBSD__) && (!defined(__ELF__) || !defined(RTLD_SELF))) || \ 89 (defined(__OpenBSD__) && !defined(RTLD_SELF)) || \
90 defined(__ANDROID__) 90 defined(__ANDROID__)
91# undef HAVE_DLINFO 91# undef HAVE_DLINFO
92# endif 92# endif
diff --git a/src/lib/libcrypto/ec/ec.h b/src/lib/libcrypto/ec/ec.h
index 9d01325af3..dfe8710d33 100644
--- a/src/lib/libcrypto/ec/ec.h
+++ b/src/lib/libcrypto/ec/ec.h
@@ -274,10 +274,10 @@ int EC_GROUP_get_curve_name(const EC_GROUP *group);
274void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); 274void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
275int EC_GROUP_get_asn1_flag(const EC_GROUP *group); 275int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
276 276
277void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); 277void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
278point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); 278point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
279 279
280unsigned char *EC_GROUP_get0_seed(const EC_GROUP *); 280unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
281size_t EC_GROUP_get_seed_len(const EC_GROUP *); 281size_t EC_GROUP_get_seed_len(const EC_GROUP *);
282size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); 282size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
283 283
@@ -626,8 +626,8 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *c
626 */ 626 */
627int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); 627int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
628 628
629int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); 629int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
630int EC_POINTs_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); 630int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
631 631
632/** Computes r = generator * n sum_{i=0}^num p[i] * m[i] 632/** Computes r = generator * n sum_{i=0}^num p[i] * m[i]
633 * \param group underlying EC_GROUP object 633 * \param group underlying EC_GROUP object
@@ -800,16 +800,24 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
800int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); 800int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
801 801
802unsigned EC_KEY_get_enc_flags(const EC_KEY *key); 802unsigned EC_KEY_get_enc_flags(const EC_KEY *key);
803void EC_KEY_set_enc_flags(EC_KEY *, unsigned int); 803void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
804point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *); 804point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
805void EC_KEY_set_conv_form(EC_KEY *, point_conversion_form_t); 805void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
806/* functions to set/get method specific data */ 806/* functions to set/get method specific data */
807void *EC_KEY_get_key_method_data(EC_KEY *, 807void *EC_KEY_get_key_method_data(EC_KEY *key,
808 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *)); 808 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
809void EC_KEY_insert_key_method_data(EC_KEY *, void *data, 809/** Sets the key method data of an EC_KEY object, if none has yet been set.
810 * \param key EC_KEY object
811 * \param data opaque data to install.
812 * \param dup_func a function that duplicates |data|.
813 * \param free_func a function that frees |data|.
814 * \param clear_free_func a function that wipes and frees |data|.
815 * \return the previously set data pointer, or NULL if |data| was inserted.
816 */
817void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
810 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *)); 818 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
811/* wrapper functions for the underlying EC_GROUP object */ 819/* wrapper functions for the underlying EC_GROUP object */
812void EC_KEY_set_asn1_flag(EC_KEY *, int); 820void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
813 821
814/** Creates a table of pre-computed multiples of the generator to 822/** Creates a table of pre-computed multiples of the generator to
815 * accelerate further EC_KEY operations. 823 * accelerate further EC_KEY operations.
diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c
index 25247b5803..de9a0cc2b3 100644
--- a/src/lib/libcrypto/ec/ec_lib.c
+++ b/src/lib/libcrypto/ec/ec_lib.c
@@ -480,10 +480,10 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx)
480 if (EC_METHOD_get_field_type(EC_GROUP_method_of(a)) != 480 if (EC_METHOD_get_field_type(EC_GROUP_method_of(a)) !=
481 EC_METHOD_get_field_type(EC_GROUP_method_of(b))) 481 EC_METHOD_get_field_type(EC_GROUP_method_of(b)))
482 return 1; 482 return 1;
483 /* compare the curve name (if present) */ 483 /* compare the curve name (if present in both) */
484 if (EC_GROUP_get_curve_name(a) && EC_GROUP_get_curve_name(b) && 484 if (EC_GROUP_get_curve_name(a) && EC_GROUP_get_curve_name(b) &&
485 EC_GROUP_get_curve_name(a) == EC_GROUP_get_curve_name(b)) 485 EC_GROUP_get_curve_name(a) != EC_GROUP_get_curve_name(b))
486 return 0; 486 return 1;
487 487
488 if (!ctx) 488 if (!ctx)
489 ctx_new = ctx = BN_CTX_new(); 489 ctx_new = ctx = BN_CTX_new();
@@ -993,12 +993,12 @@ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN
993 if (group->meth->point_cmp == 0) 993 if (group->meth->point_cmp == 0)
994 { 994 {
995 ECerr(EC_F_EC_POINT_CMP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 995 ECerr(EC_F_EC_POINT_CMP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
996 return 0; 996 return -1;
997 } 997 }
998 if ((group->meth != a->meth) || (a->meth != b->meth)) 998 if ((group->meth != a->meth) || (a->meth != b->meth))
999 { 999 {
1000 ECerr(EC_F_EC_POINT_CMP, EC_R_INCOMPATIBLE_OBJECTS); 1000 ECerr(EC_F_EC_POINT_CMP, EC_R_INCOMPATIBLE_OBJECTS);
1001 return 0; 1001 return -1;
1002 } 1002 }
1003 return group->meth->point_cmp(group, a, b, ctx); 1003 return group->meth->point_cmp(group, a, b, ctx);
1004 } 1004 }
diff --git a/src/lib/libcrypto/ec/ecp_mont.c b/src/lib/libcrypto/ec/ecp_mont.c
index 079e47431b..f04f132c7a 100644
--- a/src/lib/libcrypto/ec/ecp_mont.c
+++ b/src/lib/libcrypto/ec/ecp_mont.c
@@ -114,7 +114,6 @@ const EC_METHOD *EC_GFp_mont_method(void)
114 ec_GFp_mont_field_decode, 114 ec_GFp_mont_field_decode,
115 ec_GFp_mont_field_set_to_one }; 115 ec_GFp_mont_field_set_to_one };
116 116
117
118 return &ret; 117 return &ret;
119#endif 118#endif
120 } 119 }
diff --git a/src/lib/libcrypto/ec/ectest.c b/src/lib/libcrypto/ec/ectest.c
index f107782de0..102eaa9b23 100644
--- a/src/lib/libcrypto/ec/ectest.c
+++ b/src/lib/libcrypto/ec/ectest.c
@@ -236,7 +236,7 @@ static void group_order_tests(EC_GROUP *group)
236 } 236 }
237 237
238static void prime_field_tests(void) 238static void prime_field_tests(void)
239 { 239 {
240 BN_CTX *ctx = NULL; 240 BN_CTX *ctx = NULL;
241 BIGNUM *p, *a, *b; 241 BIGNUM *p, *a, *b;
242 EC_GROUP *group; 242 EC_GROUP *group;
diff --git a/src/lib/libcrypto/ecdh/Makefile b/src/lib/libcrypto/ecdh/Makefile
index 65d8904ee8..ba05fea05c 100644
--- a/src/lib/libcrypto/ecdh/Makefile
+++ b/src/lib/libcrypto/ecdh/Makefile
@@ -84,17 +84,12 @@ ech_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
84ech_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 84ech_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
85ech_err.o: ech_err.c 85ech_err.o: ech_err.c
86ech_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 86ech_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
87ech_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 87ech_key.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
88ech_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 88ech_key.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
89ech_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 89ech_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
90ech_key.o: ../../include/openssl/engine.h ../../include/openssl/evp.h 90ech_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
91ech_key.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 91ech_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
92ech_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 92ech_key.o: ech_key.c ech_locl.h
93ech_key.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
94ech_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
95ech_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
96ech_key.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
97ech_key.o: ../../include/openssl/x509_vfy.h ech_key.c ech_locl.h
98ech_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 93ech_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
99ech_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 94ech_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
100ech_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 95ech_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
diff --git a/src/lib/libcrypto/engine/eng_all.c b/src/lib/libcrypto/engine/eng_all.c
index 0ae5d672b1..6093376df4 100644
--- a/src/lib/libcrypto/engine/eng_all.c
+++ b/src/lib/libcrypto/engine/eng_all.c
@@ -73,7 +73,6 @@ void ENGINE_load_builtin_engines(void)
73#if !defined(OPENSSL_NO_HW) && (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)) 73#if !defined(OPENSSL_NO_HW) && (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV))
74 ENGINE_load_cryptodev(); 74 ENGINE_load_cryptodev();
75#endif 75#endif
76
77#ifndef OPENSSL_NO_RSAX 76#ifndef OPENSSL_NO_RSAX
78 ENGINE_load_rsax(); 77 ENGINE_load_rsax();
79#endif 78#endif
diff --git a/src/lib/libcrypto/engine/eng_list.c b/src/lib/libcrypto/engine/eng_list.c
index 27846edb1e..95c858960b 100644
--- a/src/lib/libcrypto/engine/eng_list.c
+++ b/src/lib/libcrypto/engine/eng_list.c
@@ -408,6 +408,7 @@ ENGINE *ENGINE_by_id(const char *id)
408 !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) || 408 !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) ||
409 !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD", 409 !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD",
410 load_dir, 0) || 410 load_dir, 0) ||
411 !ENGINE_ctrl_cmd_string(iterator, "LIST_ADD", "1", 0) ||
411 !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0)) 412 !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0))
412 goto notfound; 413 goto notfound;
413 return iterator; 414 return iterator;
diff --git a/src/lib/libcrypto/err/err_all.c b/src/lib/libcrypto/err/err_all.c
index bd8946d8ba..8eb547d98d 100644
--- a/src/lib/libcrypto/err/err_all.c
+++ b/src/lib/libcrypto/err/err_all.c
@@ -64,7 +64,9 @@
64#endif 64#endif
65#include <openssl/buffer.h> 65#include <openssl/buffer.h>
66#include <openssl/bio.h> 66#include <openssl/bio.h>
67#ifndef OPENSSL_NO_COMP
67#include <openssl/comp.h> 68#include <openssl/comp.h>
69#endif
68#ifndef OPENSSL_NO_RSA 70#ifndef OPENSSL_NO_RSA
69#include <openssl/rsa.h> 71#include <openssl/rsa.h>
70#endif 72#endif
@@ -95,6 +97,9 @@
95#include <openssl/ui.h> 97#include <openssl/ui.h>
96#include <openssl/ocsp.h> 98#include <openssl/ocsp.h>
97#include <openssl/err.h> 99#include <openssl/err.h>
100#ifdef OPENSSL_FIPS
101#include <openssl/fips.h>
102#endif
98#include <openssl/ts.h> 103#include <openssl/ts.h>
99#ifndef OPENSSL_NO_CMS 104#ifndef OPENSSL_NO_CMS
100#include <openssl/cms.h> 105#include <openssl/cms.h>
@@ -102,11 +107,6 @@
102#ifndef OPENSSL_NO_JPAKE 107#ifndef OPENSSL_NO_JPAKE
103#include <openssl/jpake.h> 108#include <openssl/jpake.h>
104#endif 109#endif
105#include <openssl/comp.h>
106
107#ifdef OPENSSL_FIPS
108#include <openssl/fips.h>
109#endif
110 110
111void ERR_load_crypto_strings(void) 111void ERR_load_crypto_strings(void)
112 { 112 {
@@ -130,7 +130,9 @@ void ERR_load_crypto_strings(void)
130 ERR_load_ASN1_strings(); 130 ERR_load_ASN1_strings();
131 ERR_load_CONF_strings(); 131 ERR_load_CONF_strings();
132 ERR_load_CRYPTO_strings(); 132 ERR_load_CRYPTO_strings();
133#ifndef OPENSSL_NO_COMP
133 ERR_load_COMP_strings(); 134 ERR_load_COMP_strings();
135#endif
134#ifndef OPENSSL_NO_EC 136#ifndef OPENSSL_NO_EC
135 ERR_load_EC_strings(); 137 ERR_load_EC_strings();
136#endif 138#endif
@@ -153,15 +155,14 @@ void ERR_load_crypto_strings(void)
153#endif 155#endif
154 ERR_load_OCSP_strings(); 156 ERR_load_OCSP_strings();
155 ERR_load_UI_strings(); 157 ERR_load_UI_strings();
158#ifdef OPENSSL_FIPS
159 ERR_load_FIPS_strings();
160#endif
156#ifndef OPENSSL_NO_CMS 161#ifndef OPENSSL_NO_CMS
157 ERR_load_CMS_strings(); 162 ERR_load_CMS_strings();
158#endif 163#endif
159#ifndef OPENSSL_NO_JPAKE 164#ifndef OPENSSL_NO_JPAKE
160 ERR_load_JPAKE_strings(); 165 ERR_load_JPAKE_strings();
161#endif 166#endif
162 ERR_load_COMP_strings();
163#endif
164#ifdef OPENSSL_FIPS
165 ERR_load_FIPS_strings();
166#endif 167#endif
167 } 168 }
diff --git a/src/lib/libcrypto/evp/Makefile b/src/lib/libcrypto/evp/Makefile
index 0fe1b96bff..0447b442bc 100644
--- a/src/lib/libcrypto/evp/Makefile
+++ b/src/lib/libcrypto/evp/Makefile
@@ -67,7 +67,7 @@ files:
67links: 67links:
68 @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) 68 @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
69 @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) 69 @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
70 cp $(TESTDATA) ../../test 70 @[ -f $(TESTDATA) ] && cp $(TESTDATA) ../../test && echo "$(TESTDATA) -> ../../test/$(TESTDATA)"
71 @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) 71 @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
72 72
73install: 73install:
@@ -356,6 +356,20 @@ evp_acnf.o: ../../include/openssl/opensslconf.h
356evp_acnf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 356evp_acnf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
357evp_acnf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 357evp_acnf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
358evp_acnf.o: ../../include/openssl/symhacks.h ../cryptlib.h evp_acnf.c 358evp_acnf.o: ../../include/openssl/symhacks.h ../cryptlib.h evp_acnf.c
359evp_cnf.o: ../../e_os.h ../../include/openssl/asn1.h
360evp_cnf.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
361evp_cnf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
362evp_cnf.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
363evp_cnf.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
364evp_cnf.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
365evp_cnf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
366evp_cnf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
367evp_cnf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
368evp_cnf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
369evp_cnf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
370evp_cnf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
371evp_cnf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
372evp_cnf.o: ../../include/openssl/x509v3.h ../cryptlib.h evp_cnf.c
359evp_enc.o: ../../e_os.h ../../include/openssl/asn1.h 373evp_enc.o: ../../e_os.h ../../include/openssl/asn1.h
360evp_enc.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 374evp_enc.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
361evp_enc.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 375evp_enc.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -437,28 +451,22 @@ evp_pkey.o: ../asn1/asn1_locl.h ../cryptlib.h evp_pkey.c
437m_dss.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 451m_dss.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
438m_dss.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 452m_dss.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
439m_dss.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 453m_dss.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
440m_dss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 454m_dss.o: ../../include/openssl/err.h ../../include/openssl/evp.h
441m_dss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 455m_dss.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
442m_dss.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 456m_dss.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
443m_dss.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 457m_dss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
444m_dss.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
445m_dss.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
446m_dss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 458m_dss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
447m_dss.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 459m_dss.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
448m_dss.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
449m_dss.o: ../cryptlib.h m_dss.c 460m_dss.o: ../cryptlib.h m_dss.c
450m_dss1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 461m_dss1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
451m_dss1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 462m_dss1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
452m_dss1.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 463m_dss1.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
453m_dss1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 464m_dss1.o: ../../include/openssl/err.h ../../include/openssl/evp.h
454m_dss1.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 465m_dss1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
455m_dss1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 466m_dss1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
456m_dss1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 467m_dss1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
457m_dss1.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
458m_dss1.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
459m_dss1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 468m_dss1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
460m_dss1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 469m_dss1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
461m_dss1.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
462m_dss1.o: ../cryptlib.h m_dss1.c 470m_dss1.o: ../cryptlib.h m_dss1.c
463m_ecdsa.o: ../../e_os.h ../../include/openssl/asn1.h 471m_ecdsa.o: ../../e_os.h ../../include/openssl/asn1.h
464m_ecdsa.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 472m_ecdsa.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
@@ -563,16 +571,13 @@ m_sha.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
563m_sha.o: ../cryptlib.h evp_locl.h m_sha.c 571m_sha.o: ../cryptlib.h evp_locl.h m_sha.c
564m_sha1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 572m_sha1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
565m_sha1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 573m_sha1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
566m_sha1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 574m_sha1.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
567m_sha1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 575m_sha1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
568m_sha1.o: ../../include/openssl/err.h ../../include/openssl/evp.h 576m_sha1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
569m_sha1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 577m_sha1.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
570m_sha1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 578m_sha1.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
571m_sha1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
572m_sha1.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
573m_sha1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 579m_sha1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
574m_sha1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 580m_sha1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
575m_sha1.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
576m_sha1.o: ../cryptlib.h m_sha1.c 581m_sha1.o: ../cryptlib.h m_sha1.c
577m_sigver.o: ../../e_os.h ../../include/openssl/asn1.h 582m_sigver.o: ../../e_os.h ../../include/openssl/asn1.h
578m_sigver.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 583m_sigver.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
diff --git a/src/lib/libcrypto/evp/bio_b64.c b/src/lib/libcrypto/evp/bio_b64.c
index 72a2a67277..ac6d441aad 100644
--- a/src/lib/libcrypto/evp/bio_b64.c
+++ b/src/lib/libcrypto/evp/bio_b64.c
@@ -264,7 +264,7 @@ static int b64_read(BIO *b, char *out, int outl)
264 } 264 }
265 265
266 /* we fell off the end without starting */ 266 /* we fell off the end without starting */
267 if (j == i) 267 if ((j == i) && (num == 0))
268 { 268 {
269 /* Is this is one long chunk?, if so, keep on 269 /* Is this is one long chunk?, if so, keep on
270 * reading until a new line. */ 270 * reading until a new line. */
diff --git a/src/lib/libcrypto/evp/digest.c b/src/lib/libcrypto/evp/digest.c
index 467e6b5ae9..d14e8e48d5 100644
--- a/src/lib/libcrypto/evp/digest.c
+++ b/src/lib/libcrypto/evp/digest.c
@@ -267,6 +267,7 @@ int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size)
267 return FIPS_digestfinal(ctx, md, size); 267 return FIPS_digestfinal(ctx, md, size);
268#else 268#else
269 int ret; 269 int ret;
270
270 OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE); 271 OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE);
271 ret=ctx->digest->final(ctx,md); 272 ret=ctx->digest->final(ctx,md);
272 if (size != NULL) 273 if (size != NULL)
@@ -365,8 +366,11 @@ int EVP_Digest(const void *data, size_t count,
365 366
366void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx) 367void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx)
367 { 368 {
368 EVP_MD_CTX_cleanup(ctx); 369 if (ctx)
369 OPENSSL_free(ctx); 370 {
371 EVP_MD_CTX_cleanup(ctx);
372 OPENSSL_free(ctx);
373 }
370 } 374 }
371 375
372/* This call frees resources associated with the context */ 376/* This call frees resources associated with the context */
diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c
index 1e4af0cb75..c7869b69ef 100644
--- a/src/lib/libcrypto/evp/e_aes.c
+++ b/src/lib/libcrypto/evp/e_aes.c
@@ -842,7 +842,10 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
842 gctx->ctr = NULL; 842 gctx->ctr = NULL;
843 break; 843 break;
844 } 844 }
845 else
845#endif 846#endif
847 (void)0; /* terminate potentially open 'else' */
848
846 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks); 849 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks);
847 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)AES_encrypt); 850 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)AES_encrypt);
848#ifdef AES_CTR_ASM 851#ifdef AES_CTR_ASM
@@ -969,8 +972,6 @@ static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
969 972
970 if (!gctx->iv_set) 973 if (!gctx->iv_set)
971 return -1; 974 return -1;
972 if (!ctx->encrypt && gctx->taglen < 0)
973 return -1;
974 if (in) 975 if (in)
975 { 976 {
976 if (out == NULL) 977 if (out == NULL)
@@ -1012,6 +1013,8 @@ static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1012 { 1013 {
1013 if (!ctx->encrypt) 1014 if (!ctx->encrypt)
1014 { 1015 {
1016 if (gctx->taglen < 0)
1017 return -1;
1015 if (CRYPTO_gcm128_finish(&gctx->gcm, 1018 if (CRYPTO_gcm128_finish(&gctx->gcm,
1016 ctx->buf, gctx->taglen) != 0) 1019 ctx->buf, gctx->taglen) != 0)
1017 return -1; 1020 return -1;
@@ -1083,14 +1086,17 @@ static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1083 xctx->xts.block1 = (block128_f)vpaes_decrypt; 1086 xctx->xts.block1 = (block128_f)vpaes_decrypt;
1084 } 1087 }
1085 1088
1086 vpaes_set_encrypt_key(key + ctx->key_len/2, 1089 vpaes_set_encrypt_key(key + ctx->key_len/2,
1087 ctx->key_len * 4, &xctx->ks2); 1090 ctx->key_len * 4, &xctx->ks2);
1088 xctx->xts.block2 = (block128_f)vpaes_encrypt; 1091 xctx->xts.block2 = (block128_f)vpaes_encrypt;
1089 1092
1090 xctx->xts.key1 = &xctx->ks1; 1093 xctx->xts.key1 = &xctx->ks1;
1091 break; 1094 break;
1092 } 1095 }
1096 else
1093#endif 1097#endif
1098 (void)0; /* terminate potentially open 'else' */
1099
1094 if (enc) 1100 if (enc)
1095 { 1101 {
1096 AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1); 1102 AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1);
@@ -1217,6 +1223,7 @@ static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1217 vpaes_set_encrypt_key(key, ctx->key_len*8, &cctx->ks); 1223 vpaes_set_encrypt_key(key, ctx->key_len*8, &cctx->ks);
1218 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 1224 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
1219 &cctx->ks, (block128_f)vpaes_encrypt); 1225 &cctx->ks, (block128_f)vpaes_encrypt);
1226 cctx->str = NULL;
1220 cctx->key_set = 1; 1227 cctx->key_set = 1;
1221 break; 1228 break;
1222 } 1229 }
diff --git a/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c b/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c
index 483e04b605..fb2c884a78 100644
--- a/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c
+++ b/src/lib/libcrypto/evp/e_aes_cbc_hmac_sha1.c
@@ -328,10 +328,11 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
328 328
329 if (res!=SHA_CBLOCK) continue; 329 if (res!=SHA_CBLOCK) continue;
330 330
331 mask = 0-((inp_len+8-j)>>(sizeof(j)*8-1)); 331 /* j is not incremented yet */
332 mask = 0-((inp_len+7-j)>>(sizeof(j)*8-1));
332 data->u[SHA_LBLOCK-1] |= bitlen&mask; 333 data->u[SHA_LBLOCK-1] |= bitlen&mask;
333 sha1_block_data_order(&key->md,data,1); 334 sha1_block_data_order(&key->md,data,1);
334 mask &= 0-((j-inp_len-73)>>(sizeof(j)*8-1)); 335 mask &= 0-((j-inp_len-72)>>(sizeof(j)*8-1));
335 pmac->u[0] |= key->md.h0 & mask; 336 pmac->u[0] |= key->md.h0 & mask;
336 pmac->u[1] |= key->md.h1 & mask; 337 pmac->u[1] |= key->md.h1 & mask;
337 pmac->u[2] |= key->md.h2 & mask; 338 pmac->u[2] |= key->md.h2 & mask;
diff --git a/src/lib/libcrypto/evp/e_des3.c b/src/lib/libcrypto/evp/e_des3.c
index 1e69972662..8d7b7de292 100644
--- a/src/lib/libcrypto/evp/e_des3.c
+++ b/src/lib/libcrypto/evp/e_des3.c
@@ -101,7 +101,7 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
101static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 101static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
102 const unsigned char *in, size_t inl) 102 const unsigned char *in, size_t inl)
103{ 103{
104 if (inl>=EVP_MAXCHUNK) 104 while (inl>=EVP_MAXCHUNK)
105 { 105 {
106 DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, 106 DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK,
107 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 107 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
@@ -132,7 +132,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
132 printf("\n"); 132 printf("\n");
133 } 133 }
134#endif /* KSSL_DEBUG */ 134#endif /* KSSL_DEBUG */
135 if (inl>=EVP_MAXCHUNK) 135 while (inl>=EVP_MAXCHUNK)
136 { 136 {
137 DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, 137 DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK,
138 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 138 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
@@ -151,7 +151,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
151static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 151static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
152 const unsigned char *in, size_t inl) 152 const unsigned char *in, size_t inl)
153{ 153{
154 if (inl>=EVP_MAXCHUNK) 154 while (inl>=EVP_MAXCHUNK)
155 { 155 {
156 DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK, 156 DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK,
157 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 157 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h
index 3b1fa87576..faeb3c24e6 100644
--- a/src/lib/libcrypto/evp/evp.h
+++ b/src/lib/libcrypto/evp/evp.h
@@ -788,8 +788,8 @@ const EVP_CIPHER *EVP_aes_128_cfb128(void);
788# define EVP_aes_128_cfb EVP_aes_128_cfb128 788# define EVP_aes_128_cfb EVP_aes_128_cfb128
789const EVP_CIPHER *EVP_aes_128_ofb(void); 789const EVP_CIPHER *EVP_aes_128_ofb(void);
790const EVP_CIPHER *EVP_aes_128_ctr(void); 790const EVP_CIPHER *EVP_aes_128_ctr(void);
791const EVP_CIPHER *EVP_aes_128_gcm(void);
792const EVP_CIPHER *EVP_aes_128_ccm(void); 791const EVP_CIPHER *EVP_aes_128_ccm(void);
792const EVP_CIPHER *EVP_aes_128_gcm(void);
793const EVP_CIPHER *EVP_aes_128_xts(void); 793const EVP_CIPHER *EVP_aes_128_xts(void);
794const EVP_CIPHER *EVP_aes_192_ecb(void); 794const EVP_CIPHER *EVP_aes_192_ecb(void);
795const EVP_CIPHER *EVP_aes_192_cbc(void); 795const EVP_CIPHER *EVP_aes_192_cbc(void);
@@ -799,8 +799,8 @@ const EVP_CIPHER *EVP_aes_192_cfb128(void);
799# define EVP_aes_192_cfb EVP_aes_192_cfb128 799# define EVP_aes_192_cfb EVP_aes_192_cfb128
800const EVP_CIPHER *EVP_aes_192_ofb(void); 800const EVP_CIPHER *EVP_aes_192_ofb(void);
801const EVP_CIPHER *EVP_aes_192_ctr(void); 801const EVP_CIPHER *EVP_aes_192_ctr(void);
802const EVP_CIPHER *EVP_aes_192_gcm(void);
803const EVP_CIPHER *EVP_aes_192_ccm(void); 802const EVP_CIPHER *EVP_aes_192_ccm(void);
803const EVP_CIPHER *EVP_aes_192_gcm(void);
804const EVP_CIPHER *EVP_aes_256_ecb(void); 804const EVP_CIPHER *EVP_aes_256_ecb(void);
805const EVP_CIPHER *EVP_aes_256_cbc(void); 805const EVP_CIPHER *EVP_aes_256_cbc(void);
806const EVP_CIPHER *EVP_aes_256_cfb1(void); 806const EVP_CIPHER *EVP_aes_256_cfb1(void);
@@ -809,8 +809,8 @@ const EVP_CIPHER *EVP_aes_256_cfb128(void);
809# define EVP_aes_256_cfb EVP_aes_256_cfb128 809# define EVP_aes_256_cfb EVP_aes_256_cfb128
810const EVP_CIPHER *EVP_aes_256_ofb(void); 810const EVP_CIPHER *EVP_aes_256_ofb(void);
811const EVP_CIPHER *EVP_aes_256_ctr(void); 811const EVP_CIPHER *EVP_aes_256_ctr(void);
812const EVP_CIPHER *EVP_aes_256_gcm(void);
813const EVP_CIPHER *EVP_aes_256_ccm(void); 812const EVP_CIPHER *EVP_aes_256_ccm(void);
813const EVP_CIPHER *EVP_aes_256_gcm(void);
814const EVP_CIPHER *EVP_aes_256_xts(void); 814const EVP_CIPHER *EVP_aes_256_xts(void);
815#if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) 815#if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)
816const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); 816const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);
@@ -1242,6 +1242,8 @@ void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
1242 int (*ctrl_str)(EVP_PKEY_CTX *ctx, 1242 int (*ctrl_str)(EVP_PKEY_CTX *ctx,
1243 const char *type, const char *value)); 1243 const char *type, const char *value));
1244 1244
1245void EVP_add_alg_module(void);
1246
1245/* BEGIN ERROR CODES */ 1247/* BEGIN ERROR CODES */
1246/* The following lines are auto generated by the script mkerr.pl. Any changes 1248/* The following lines are auto generated by the script mkerr.pl. Any changes
1247 * made after this point may be overwritten when the script is next run. 1249 * made after this point may be overwritten when the script is next run.
@@ -1256,6 +1258,7 @@ void ERR_load_EVP_strings(void);
1256#define EVP_F_AES_INIT_KEY 133 1258#define EVP_F_AES_INIT_KEY 133
1257#define EVP_F_AES_XTS 172 1259#define EVP_F_AES_XTS 172
1258#define EVP_F_AES_XTS_CIPHER 175 1260#define EVP_F_AES_XTS_CIPHER 175
1261#define EVP_F_ALG_MODULE_INIT 177
1259#define EVP_F_CAMELLIA_INIT_KEY 159 1262#define EVP_F_CAMELLIA_INIT_KEY 159
1260#define EVP_F_CMAC_INIT 173 1263#define EVP_F_CMAC_INIT 173
1261#define EVP_F_D2I_PKEY 100 1264#define EVP_F_D2I_PKEY 100
@@ -1349,15 +1352,19 @@ void ERR_load_EVP_strings(void);
1349#define EVP_R_DIFFERENT_PARAMETERS 153 1352#define EVP_R_DIFFERENT_PARAMETERS 153
1350#define EVP_R_DISABLED_FOR_FIPS 163 1353#define EVP_R_DISABLED_FOR_FIPS 163
1351#define EVP_R_ENCODE_ERROR 115 1354#define EVP_R_ENCODE_ERROR 115
1355#define EVP_R_ERROR_LOADING_SECTION 165
1356#define EVP_R_ERROR_SETTING_FIPS_MODE 166
1352#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 1357#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119
1353#define EVP_R_EXPECTING_AN_RSA_KEY 127 1358#define EVP_R_EXPECTING_AN_RSA_KEY 127
1354#define EVP_R_EXPECTING_A_DH_KEY 128 1359#define EVP_R_EXPECTING_A_DH_KEY 128
1355#define EVP_R_EXPECTING_A_DSA_KEY 129 1360#define EVP_R_EXPECTING_A_DSA_KEY 129
1356#define EVP_R_EXPECTING_A_ECDSA_KEY 141 1361#define EVP_R_EXPECTING_A_ECDSA_KEY 141
1357#define EVP_R_EXPECTING_A_EC_KEY 142 1362#define EVP_R_EXPECTING_A_EC_KEY 142
1363#define EVP_R_FIPS_MODE_NOT_SUPPORTED 167
1358#define EVP_R_INITIALIZATION_ERROR 134 1364#define EVP_R_INITIALIZATION_ERROR 134
1359#define EVP_R_INPUT_NOT_INITIALIZED 111 1365#define EVP_R_INPUT_NOT_INITIALIZED 111
1360#define EVP_R_INVALID_DIGEST 152 1366#define EVP_R_INVALID_DIGEST 152
1367#define EVP_R_INVALID_FIPS_MODE 168
1361#define EVP_R_INVALID_KEY_LENGTH 130 1368#define EVP_R_INVALID_KEY_LENGTH 130
1362#define EVP_R_INVALID_OPERATION 148 1369#define EVP_R_INVALID_OPERATION 148
1363#define EVP_R_IV_TOO_LARGE 102 1370#define EVP_R_IV_TOO_LARGE 102
@@ -1382,6 +1389,7 @@ void ERR_load_EVP_strings(void);
1382#define EVP_R_TOO_LARGE 164 1389#define EVP_R_TOO_LARGE 164
1383#define EVP_R_UNKNOWN_CIPHER 160 1390#define EVP_R_UNKNOWN_CIPHER 160
1384#define EVP_R_UNKNOWN_DIGEST 161 1391#define EVP_R_UNKNOWN_DIGEST 161
1392#define EVP_R_UNKNOWN_OPTION 169
1385#define EVP_R_UNKNOWN_PBE_ALGORITHM 121 1393#define EVP_R_UNKNOWN_PBE_ALGORITHM 121
1386#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 1394#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135
1387#define EVP_R_UNSUPPORTED_ALGORITHM 156 1395#define EVP_R_UNSUPPORTED_ALGORITHM 156
diff --git a/src/lib/libcrypto/evp/evp_err.c b/src/lib/libcrypto/evp/evp_err.c
index db0f76d59b..08eab9882f 100644
--- a/src/lib/libcrypto/evp/evp_err.c
+++ b/src/lib/libcrypto/evp/evp_err.c
@@ -75,6 +75,7 @@ static ERR_STRING_DATA EVP_str_functs[]=
75{ERR_FUNC(EVP_F_AES_INIT_KEY), "AES_INIT_KEY"}, 75{ERR_FUNC(EVP_F_AES_INIT_KEY), "AES_INIT_KEY"},
76{ERR_FUNC(EVP_F_AES_XTS), "AES_XTS"}, 76{ERR_FUNC(EVP_F_AES_XTS), "AES_XTS"},
77{ERR_FUNC(EVP_F_AES_XTS_CIPHER), "AES_XTS_CIPHER"}, 77{ERR_FUNC(EVP_F_AES_XTS_CIPHER), "AES_XTS_CIPHER"},
78{ERR_FUNC(EVP_F_ALG_MODULE_INIT), "ALG_MODULE_INIT"},
78{ERR_FUNC(EVP_F_CAMELLIA_INIT_KEY), "CAMELLIA_INIT_KEY"}, 79{ERR_FUNC(EVP_F_CAMELLIA_INIT_KEY), "CAMELLIA_INIT_KEY"},
79{ERR_FUNC(EVP_F_CMAC_INIT), "CMAC_INIT"}, 80{ERR_FUNC(EVP_F_CMAC_INIT), "CMAC_INIT"},
80{ERR_FUNC(EVP_F_D2I_PKEY), "D2I_PKEY"}, 81{ERR_FUNC(EVP_F_D2I_PKEY), "D2I_PKEY"},
@@ -171,15 +172,19 @@ static ERR_STRING_DATA EVP_str_reasons[]=
171{ERR_REASON(EVP_R_DIFFERENT_PARAMETERS) ,"different parameters"}, 172{ERR_REASON(EVP_R_DIFFERENT_PARAMETERS) ,"different parameters"},
172{ERR_REASON(EVP_R_DISABLED_FOR_FIPS) ,"disabled for fips"}, 173{ERR_REASON(EVP_R_DISABLED_FOR_FIPS) ,"disabled for fips"},
173{ERR_REASON(EVP_R_ENCODE_ERROR) ,"encode error"}, 174{ERR_REASON(EVP_R_ENCODE_ERROR) ,"encode error"},
175{ERR_REASON(EVP_R_ERROR_LOADING_SECTION) ,"error loading section"},
176{ERR_REASON(EVP_R_ERROR_SETTING_FIPS_MODE),"error setting fips mode"},
174{ERR_REASON(EVP_R_EVP_PBE_CIPHERINIT_ERROR),"evp pbe cipherinit error"}, 177{ERR_REASON(EVP_R_EVP_PBE_CIPHERINIT_ERROR),"evp pbe cipherinit error"},
175{ERR_REASON(EVP_R_EXPECTING_AN_RSA_KEY) ,"expecting an rsa key"}, 178{ERR_REASON(EVP_R_EXPECTING_AN_RSA_KEY) ,"expecting an rsa key"},
176{ERR_REASON(EVP_R_EXPECTING_A_DH_KEY) ,"expecting a dh key"}, 179{ERR_REASON(EVP_R_EXPECTING_A_DH_KEY) ,"expecting a dh key"},
177{ERR_REASON(EVP_R_EXPECTING_A_DSA_KEY) ,"expecting a dsa key"}, 180{ERR_REASON(EVP_R_EXPECTING_A_DSA_KEY) ,"expecting a dsa key"},
178{ERR_REASON(EVP_R_EXPECTING_A_ECDSA_KEY) ,"expecting a ecdsa key"}, 181{ERR_REASON(EVP_R_EXPECTING_A_ECDSA_KEY) ,"expecting a ecdsa key"},
179{ERR_REASON(EVP_R_EXPECTING_A_EC_KEY) ,"expecting a ec key"}, 182{ERR_REASON(EVP_R_EXPECTING_A_EC_KEY) ,"expecting a ec key"},
183{ERR_REASON(EVP_R_FIPS_MODE_NOT_SUPPORTED),"fips mode not supported"},
180{ERR_REASON(EVP_R_INITIALIZATION_ERROR) ,"initialization error"}, 184{ERR_REASON(EVP_R_INITIALIZATION_ERROR) ,"initialization error"},
181{ERR_REASON(EVP_R_INPUT_NOT_INITIALIZED) ,"input not initialized"}, 185{ERR_REASON(EVP_R_INPUT_NOT_INITIALIZED) ,"input not initialized"},
182{ERR_REASON(EVP_R_INVALID_DIGEST) ,"invalid digest"}, 186{ERR_REASON(EVP_R_INVALID_DIGEST) ,"invalid digest"},
187{ERR_REASON(EVP_R_INVALID_FIPS_MODE) ,"invalid fips mode"},
183{ERR_REASON(EVP_R_INVALID_KEY_LENGTH) ,"invalid key length"}, 188{ERR_REASON(EVP_R_INVALID_KEY_LENGTH) ,"invalid key length"},
184{ERR_REASON(EVP_R_INVALID_OPERATION) ,"invalid operation"}, 189{ERR_REASON(EVP_R_INVALID_OPERATION) ,"invalid operation"},
185{ERR_REASON(EVP_R_IV_TOO_LARGE) ,"iv too large"}, 190{ERR_REASON(EVP_R_IV_TOO_LARGE) ,"iv too large"},
@@ -204,6 +209,7 @@ static ERR_STRING_DATA EVP_str_reasons[]=
204{ERR_REASON(EVP_R_TOO_LARGE) ,"too large"}, 209{ERR_REASON(EVP_R_TOO_LARGE) ,"too large"},
205{ERR_REASON(EVP_R_UNKNOWN_CIPHER) ,"unknown cipher"}, 210{ERR_REASON(EVP_R_UNKNOWN_CIPHER) ,"unknown cipher"},
206{ERR_REASON(EVP_R_UNKNOWN_DIGEST) ,"unknown digest"}, 211{ERR_REASON(EVP_R_UNKNOWN_DIGEST) ,"unknown digest"},
212{ERR_REASON(EVP_R_UNKNOWN_OPTION) ,"unknown option"},
207{ERR_REASON(EVP_R_UNKNOWN_PBE_ALGORITHM) ,"unknown pbe algorithm"}, 213{ERR_REASON(EVP_R_UNKNOWN_PBE_ALGORITHM) ,"unknown pbe algorithm"},
208{ERR_REASON(EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS),"unsuported number of rounds"}, 214{ERR_REASON(EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS),"unsuported number of rounds"},
209{ERR_REASON(EVP_R_UNSUPPORTED_ALGORITHM) ,"unsupported algorithm"}, 215{ERR_REASON(EVP_R_UNSUPPORTED_ALGORITHM) ,"unsupported algorithm"},
diff --git a/src/lib/libcrypto/evp/m_dss.c b/src/lib/libcrypto/evp/m_dss.c
index 4ad63ada6f..6fb7e9a861 100644
--- a/src/lib/libcrypto/evp/m_dss.c
+++ b/src/lib/libcrypto/evp/m_dss.c
@@ -60,7 +60,7 @@
60#include "cryptlib.h" 60#include "cryptlib.h"
61#include <openssl/evp.h> 61#include <openssl/evp.h>
62#include <openssl/objects.h> 62#include <openssl/objects.h>
63#include <openssl/x509.h> 63#include <openssl/sha.h>
64#ifndef OPENSSL_NO_DSA 64#ifndef OPENSSL_NO_DSA
65#include <openssl/dsa.h> 65#include <openssl/dsa.h>
66#endif 66#endif
diff --git a/src/lib/libcrypto/evp/m_dss1.c b/src/lib/libcrypto/evp/m_dss1.c
index f80170efeb..2df362a670 100644
--- a/src/lib/libcrypto/evp/m_dss1.c
+++ b/src/lib/libcrypto/evp/m_dss1.c
@@ -63,7 +63,7 @@
63 63
64#include <openssl/evp.h> 64#include <openssl/evp.h>
65#include <openssl/objects.h> 65#include <openssl/objects.h>
66#include <openssl/x509.h> 66#include <openssl/sha.h>
67#ifndef OPENSSL_NO_DSA 67#ifndef OPENSSL_NO_DSA
68#include <openssl/dsa.h> 68#include <openssl/dsa.h>
69#endif 69#endif
diff --git a/src/lib/libcrypto/evp/m_sha1.c b/src/lib/libcrypto/evp/m_sha1.c
index 3cb11f1ebb..bd0c01ad3c 100644
--- a/src/lib/libcrypto/evp/m_sha1.c
+++ b/src/lib/libcrypto/evp/m_sha1.c
@@ -65,7 +65,7 @@
65 65
66#include <openssl/evp.h> 66#include <openssl/evp.h>
67#include <openssl/objects.h> 67#include <openssl/objects.h>
68#include <openssl/x509.h> 68#include <openssl/sha.h>
69#ifndef OPENSSL_NO_RSA 69#ifndef OPENSSL_NO_RSA
70#include <openssl/rsa.h> 70#include <openssl/rsa.h>
71#endif 71#endif
diff --git a/src/lib/libcrypto/evp/p5_crpt2.c b/src/lib/libcrypto/evp/p5_crpt2.c
index 975d004df4..fe3c6c8813 100644
--- a/src/lib/libcrypto/evp/p5_crpt2.c
+++ b/src/lib/libcrypto/evp/p5_crpt2.c
@@ -85,19 +85,24 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
85 unsigned char digtmp[EVP_MAX_MD_SIZE], *p, itmp[4]; 85 unsigned char digtmp[EVP_MAX_MD_SIZE], *p, itmp[4];
86 int cplen, j, k, tkeylen, mdlen; 86 int cplen, j, k, tkeylen, mdlen;
87 unsigned long i = 1; 87 unsigned long i = 1;
88 HMAC_CTX hctx; 88 HMAC_CTX hctx_tpl, hctx;
89 89
90 mdlen = EVP_MD_size(digest); 90 mdlen = EVP_MD_size(digest);
91 if (mdlen < 0) 91 if (mdlen < 0)
92 return 0; 92 return 0;
93 93
94 HMAC_CTX_init(&hctx); 94 HMAC_CTX_init(&hctx_tpl);
95 p = out; 95 p = out;
96 tkeylen = keylen; 96 tkeylen = keylen;
97 if(!pass) 97 if(!pass)
98 passlen = 0; 98 passlen = 0;
99 else if(passlen == -1) 99 else if(passlen == -1)
100 passlen = strlen(pass); 100 passlen = strlen(pass);
101 if (!HMAC_Init_ex(&hctx_tpl, pass, passlen, digest, NULL))
102 {
103 HMAC_CTX_cleanup(&hctx_tpl);
104 return 0;
105 }
101 while(tkeylen) 106 while(tkeylen)
102 { 107 {
103 if(tkeylen > mdlen) 108 if(tkeylen > mdlen)
@@ -111,19 +116,36 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
111 itmp[1] = (unsigned char)((i >> 16) & 0xff); 116 itmp[1] = (unsigned char)((i >> 16) & 0xff);
112 itmp[2] = (unsigned char)((i >> 8) & 0xff); 117 itmp[2] = (unsigned char)((i >> 8) & 0xff);
113 itmp[3] = (unsigned char)(i & 0xff); 118 itmp[3] = (unsigned char)(i & 0xff);
114 if (!HMAC_Init_ex(&hctx, pass, passlen, digest, NULL) 119 if (!HMAC_CTX_copy(&hctx, &hctx_tpl))
115 || !HMAC_Update(&hctx, salt, saltlen)
116 || !HMAC_Update(&hctx, itmp, 4)
117 || !HMAC_Final(&hctx, digtmp, NULL))
118 { 120 {
121 HMAC_CTX_cleanup(&hctx_tpl);
122 return 0;
123 }
124 if (!HMAC_Update(&hctx, salt, saltlen)
125 || !HMAC_Update(&hctx, itmp, 4)
126 || !HMAC_Final(&hctx, digtmp, NULL))
127 {
128 HMAC_CTX_cleanup(&hctx_tpl);
119 HMAC_CTX_cleanup(&hctx); 129 HMAC_CTX_cleanup(&hctx);
120 return 0; 130 return 0;
121 } 131 }
132 HMAC_CTX_cleanup(&hctx);
122 memcpy(p, digtmp, cplen); 133 memcpy(p, digtmp, cplen);
123 for(j = 1; j < iter; j++) 134 for(j = 1; j < iter; j++)
124 { 135 {
125 HMAC(digest, pass, passlen, 136 if (!HMAC_CTX_copy(&hctx, &hctx_tpl))
126 digtmp, mdlen, digtmp, NULL); 137 {
138 HMAC_CTX_cleanup(&hctx_tpl);
139 return 0;
140 }
141 if (!HMAC_Update(&hctx, digtmp, mdlen)
142 || !HMAC_Final(&hctx, digtmp, NULL))
143 {
144 HMAC_CTX_cleanup(&hctx_tpl);
145 HMAC_CTX_cleanup(&hctx);
146 return 0;
147 }
148 HMAC_CTX_cleanup(&hctx);
127 for(k = 0; k < cplen; k++) 149 for(k = 0; k < cplen; k++)
128 p[k] ^= digtmp[k]; 150 p[k] ^= digtmp[k];
129 } 151 }
@@ -131,7 +153,7 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
131 i++; 153 i++;
132 p+= cplen; 154 p+= cplen;
133 } 155 }
134 HMAC_CTX_cleanup(&hctx); 156 HMAC_CTX_cleanup(&hctx_tpl);
135#ifdef DEBUG_PKCS5V2 157#ifdef DEBUG_PKCS5V2
136 fprintf(stderr, "Password:\n"); 158 fprintf(stderr, "Password:\n");
137 h__dump (pass, passlen); 159 h__dump (pass, passlen);
diff --git a/src/lib/libcrypto/evp/p_sign.c b/src/lib/libcrypto/evp/p_sign.c
index dfa48c157c..8afb664306 100644
--- a/src/lib/libcrypto/evp/p_sign.c
+++ b/src/lib/libcrypto/evp/p_sign.c
@@ -80,7 +80,7 @@ int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen,
80 { 80 {
81 unsigned char m[EVP_MAX_MD_SIZE]; 81 unsigned char m[EVP_MAX_MD_SIZE];
82 unsigned int m_len; 82 unsigned int m_len;
83 int i=0,ok=0,v; 83 int i = 0,ok = 0,v;
84 EVP_MD_CTX tmp_ctx; 84 EVP_MD_CTX tmp_ctx;
85 EVP_PKEY_CTX *pkctx = NULL; 85 EVP_PKEY_CTX *pkctx = NULL;
86 86
diff --git a/src/lib/libcrypto/evp/p_verify.c b/src/lib/libcrypto/evp/p_verify.c
index 5f5c409f45..c66d63ccf8 100644
--- a/src/lib/libcrypto/evp/p_verify.c
+++ b/src/lib/libcrypto/evp/p_verify.c
@@ -67,7 +67,7 @@ int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
67 { 67 {
68 unsigned char m[EVP_MAX_MD_SIZE]; 68 unsigned char m[EVP_MAX_MD_SIZE];
69 unsigned int m_len; 69 unsigned int m_len;
70 int i=-1,ok=0,v; 70 int i = 0,ok = 0,v;
71 EVP_MD_CTX tmp_ctx; 71 EVP_MD_CTX tmp_ctx;
72 EVP_PKEY_CTX *pkctx = NULL; 72 EVP_PKEY_CTX *pkctx = NULL;
73 73
diff --git a/src/lib/libcrypto/install-crypto.com b/src/lib/libcrypto/install-crypto.com
deleted file mode 100755
index 85b3d583cf..0000000000
--- a/src/lib/libcrypto/install-crypto.com
+++ /dev/null
@@ -1,196 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! Changes by Zoltan Arpadffy <zoli@polarhome.com>
7$!
8$! P1 root of the directory tree
9$! P2 "64" for 64-bit pointers.
10$!
11$!
12$! Announce/identify.
13$!
14$ proc = f$environment( "procedure")
15$ write sys$output "@@@ "+ -
16 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
17$!
18$ on error then goto tidy
19$ on control_c then goto tidy
20$!
21$ if (p1 .eqs. "")
22$ then
23$ write sys$output "First argument missing."
24$ write sys$output -
25 "It should be the directory where you want things installed."
26$ exit
27$ endif
28$!
29$ if (f$getsyi( "cpu") .lt. 128)
30$ then
31$ arch = "VAX"
32$ else
33$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
34$ if (arch .eqs. "") then arch = "UNK"
35$ endif
36$!
37$ archd = arch
38$ lib32 = "32"
39$ shr = "_SHR32"
40$!
41$ if (p2 .nes. "")
42$ then
43$ if (p2 .eqs. "64")
44$ then
45$ archd = arch+ "_64"
46$ lib32 = ""
47$ shr = "_SHR"
48$ else
49$ if (p2 .nes. "32")
50$ then
51$ write sys$output "Second argument invalid."
52$ write sys$output "It should be "32", "64", or nothing."
53$ exit
54$ endif
55$ endif
56$ endif
57$!
58$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
59$ root_dev = f$parse( root, , , "device", "syntax_only")
60$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
61 "[000000." - "][" - "[" - "]"
62$ root = root_dev + "[" + root_dir
63$!
64$ define /nolog wrk_sslroot 'root'.] /trans=conc
65$ define /nolog wrk_sslinclude wrk_sslroot:[include]
66$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
67$!
68$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
69 create /directory /log wrk_sslroot:[000000]
70$ if f$parse("wrk_sslinclude:") .eqs. "" then -
71 create /directory /log wrk_sslinclude:
72$ if f$parse("wrk_sslxlib:") .eqs. "" then -
73 create /directory /log wrk_sslxlib:
74$!
75$ sdirs := , -
76 'archd', -
77 objects, -
78 md2, md4, md5, sha, mdc2, hmac, ripemd, whrlpool, -
79 des, aes, rc2, rc4, rc5, idea, bf, cast, camellia, seed, -
80 bn, ec, rsa, dsa, ecdsa, dh, ecdh, dso, engine, -
81 buffer, bio, stack, lhash, rand, err, -
82 evp, asn1, pem, x509, x509v3, conf, txt_db, pkcs7, pkcs12, comp, ocsp, -
83 ui, krb5, -
84 store, cms, pqueue, ts, jpake
85$!
86$ exheader_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h
87$ exheader_'archd' := opensslconf.h
88$ exheader_objects := objects.h, obj_mac.h
89$ exheader_md2 := md2.h
90$ exheader_md4 := md4.h
91$ exheader_md5 := md5.h
92$ exheader_sha := sha.h
93$ exheader_mdc2 := mdc2.h
94$ exheader_hmac := hmac.h
95$ exheader_ripemd := ripemd.h
96$ exheader_whrlpool := whrlpool.h
97$ exheader_des := des.h, des_old.h
98$ exheader_aes := aes.h
99$ exheader_rc2 := rc2.h
100$ exheader_rc4 := rc4.h
101$ exheader_rc5 := rc5.h
102$ exheader_idea := idea.h
103$ exheader_bf := blowfish.h
104$ exheader_cast := cast.h
105$ exheader_camellia := camellia.h
106$ exheader_seed := seed.h
107$ exheader_modes := modes.h
108$ exheader_bn := bn.h
109$ exheader_ec := ec.h
110$ exheader_rsa := rsa.h
111$ exheader_dsa := dsa.h
112$ exheader_ecdsa := ecdsa.h
113$ exheader_dh := dh.h
114$ exheader_ecdh := ecdh.h
115$ exheader_dso := dso.h
116$ exheader_engine := engine.h
117$ exheader_buffer := buffer.h
118$ exheader_bio := bio.h
119$ exheader_stack := stack.h, safestack.h
120$ exheader_lhash := lhash.h
121$ exheader_rand := rand.h
122$ exheader_err := err.h
123$ exheader_evp := evp.h
124$ exheader_asn1 := asn1.h, asn1_mac.h, asn1t.h
125$ exheader_pem := pem.h, pem2.h
126$ exheader_x509 := x509.h, x509_vfy.h
127$ exheader_x509v3 := x509v3.h
128$ exheader_conf := conf.h, conf_api.h
129$ exheader_txt_db := txt_db.h
130$ exheader_pkcs7 := pkcs7.h
131$ exheader_pkcs12 := pkcs12.h
132$ exheader_comp := comp.h
133$ exheader_ocsp := ocsp.h
134$ exheader_ui := ui.h, ui_compat.h
135$ exheader_krb5 := krb5_asn.h
136$! exheader_store := store.h, str_compat.h
137$ exheader_store := store.h
138$ exheader_cms := cms.h
139$ exheader_pqueue := pqueue.h
140$ exheader_ts := ts.h
141$ exheader_jpake := jpake.h
142$ libs := ssl_libcrypto
143$!
144$ exe_dir := [-.'archd'.exe.crypto]
145$!
146$! Header files.
147$!
148$ i = 0
149$ loop_sdirs:
150$ d = f$edit( f$element( i, ",", sdirs), "trim")
151$ i = i + 1
152$ if d .eqs. "," then goto loop_sdirs_end
153$ tmp = exheader_'d'
154$ if (d .nes. "") then d = "."+ d
155$ copy /protection = w:re ['d']'tmp' wrk_sslinclude: /log
156$ goto loop_sdirs
157$ loop_sdirs_end:
158$!
159$! Object libraries, shareable images.
160$!
161$ i = 0
162$ loop_lib:
163$ e = f$edit( f$element( i, ",", libs), "trim")
164$ i = i + 1
165$ if e .eqs. "," then goto loop_lib_end
166$ set noon
167$ file = exe_dir+ e+ lib32+ ".olb"
168$ if f$search( file) .nes. ""
169$ then
170$ copy /protection = w:re 'file' wrk_sslxlib: /log
171$ endif
172$!
173$ file = exe_dir+ e+ shr+ ".exe"
174$ if f$search( file) .nes. ""
175$ then
176$ copy /protection = w:re 'file' wrk_sslxlib: /log
177$ endif
178$ set on
179$ goto loop_lib
180$ loop_lib_end:
181$!
182$ tidy:
183$!
184$ call deass wrk_sslroot
185$ call deass wrk_sslinclude
186$ call deass wrk_sslxlib
187$!
188$ exit
189$!
190$ deass: subroutine
191$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
192$ then
193$ deassign /process 'p1'
194$ endif
195$ endsubroutine
196$!
diff --git a/src/lib/libcrypto/install.com b/src/lib/libcrypto/install.com
deleted file mode 100644
index ad3e4d48c7..0000000000
--- a/src/lib/libcrypto/install.com
+++ /dev/null
@@ -1,155 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! Changes by Zoltan Arpadffy <zoli@polarhome.com>
7$!
8$! P1 root of the directory tree
9$!
10$ IF P1 .EQS. ""
11$ THEN
12$ WRITE SYS$OUTPUT "First argument missing."
13$ WRITE SYS$OUTPUT -
14 "It should be the directory where you want things installed."
15$ EXIT
16$ ENDIF
17$
18$ IF (F$GETSYI("CPU").LT.128)
19$ THEN
20$ ARCH := VAX
21$ ELSE
22$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
23$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
24$ ENDIF
25$
26$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
27$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
28$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
29 - "[000000." - "][" - "[" - "]"
30$ ROOT = ROOT_DEV + "[" + ROOT_DIR
31$
32$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
33$ DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:['ARCH'_LIB]
34$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
35$
36$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
37 CREATE/DIR/LOG WRK_SSLROOT:[000000]
38$ IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
39 CREATE/DIR/LOG WRK_SSLLIB:
40$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
41 CREATE/DIR/LOG WRK_SSLINCLUDE:
42$
43$ SDIRS := ,-
44 _'ARCH',-
45 OBJECTS,-
46 MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,WHRLPOOL,-
47 DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,-
48 BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,-
49 BUFFER,BIO,STACK,LHASH,RAND,ERR,-
50 EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,-
51 UI,KRB5,-
52 STORE,CMS,PQUEUE,TS,JPAKE
53$ EXHEADER_ := crypto.h,opensslv.h,ebcdic.h,symhacks.h,ossl_typ.h
54$ EXHEADER__'ARCH' := opensslconf.h
55$ EXHEADER_OBJECTS := objects.h,obj_mac.h
56$ EXHEADER_MD2 := md2.h
57$ EXHEADER_MD4 := md4.h
58$ EXHEADER_MD5 := md5.h
59$ EXHEADER_SHA := sha.h
60$ EXHEADER_MDC2 := mdc2.h
61$ EXHEADER_HMAC := hmac.h
62$ EXHEADER_RIPEMD := ripemd.h
63$ EXHEADER_WHRLPOOL := whrlpool.h
64$ EXHEADER_DES := des.h,des_old.h
65$ EXHEADER_AES := aes.h
66$ EXHEADER_RC2 := rc2.h
67$ EXHEADER_RC4 := rc4.h
68$ EXHEADER_RC5 := rc5.h
69$ EXHEADER_IDEA := idea.h
70$ EXHEADER_BF := blowfish.h
71$ EXHEADER_CAST := cast.h
72$ EXHEADER_CAMELLIA := camellia.h
73$ EXHEADER_SEED := seed.h
74$ EXHEADER_MODES := modes.h
75$ EXHEADER_BN := bn.h
76$ EXHEADER_EC := ec.h
77$ EXHEADER_RSA := rsa.h
78$ EXHEADER_DSA := dsa.h
79$ EXHEADER_ECDSA := ecdsa.h
80$ EXHEADER_DH := dh.h
81$ EXHEADER_ECDH := ecdh.h
82$ EXHEADER_DSO := dso.h
83$ EXHEADER_ENGINE := engine.h
84$ EXHEADER_BUFFER := buffer.h
85$ EXHEADER_BIO := bio.h
86$ EXHEADER_STACK := stack.h,safestack.h
87$ EXHEADER_LHASH := lhash.h
88$ EXHEADER_RAND := rand.h
89$ EXHEADER_ERR := err.h
90$ EXHEADER_EVP := evp.h
91$ EXHEADER_ASN1 := asn1.h,asn1_mac.h,asn1t.h
92$ EXHEADER_PEM := pem.h,pem2.h
93$ EXHEADER_X509 := x509.h,x509_vfy.h
94$ EXHEADER_X509V3 := x509v3.h
95$ EXHEADER_CONF := conf.h,conf_api.h
96$ EXHEADER_TXT_DB := txt_db.h
97$ EXHEADER_PKCS7 := pkcs7.h
98$ EXHEADER_PKCS12 := pkcs12.h
99$ EXHEADER_COMP := comp.h
100$ EXHEADER_OCSP := ocsp.h
101$ EXHEADER_UI := ui.h,ui_compat.h
102$ EXHEADER_KRB5 := krb5_asn.h
103$! EXHEADER_STORE := store.h,str_compat.h
104$ EXHEADER_STORE := store.h
105$ EXHEADER_CMS := cms.h
106$ EXHEADER_PQUEUE := pqueue.h
107$ EXHEADER_TS := ts.h
108$ EXHEADER_JPAKE := jpake.h
109$ LIBS := LIBCRYPTO
110$
111$ EXE_DIR := [-.'ARCH'.EXE.CRYPTO]
112$
113$ I = 0
114$ LOOP_SDIRS:
115$ D = F$EDIT(F$ELEMENT(I, ",", SDIRS),"TRIM")
116$ I = I + 1
117$ IF D .EQS. "," THEN GOTO LOOP_SDIRS_END
118$ tmp = EXHEADER_'D'
119$ IF D .EQS. ""
120$ THEN
121$ COPY 'tmp' WRK_SSLINCLUDE: /LOG
122$ ELSE
123$ IF D .EQS. "_''ARCH'"
124$ THEN
125$ COPY [-.'ARCH'.CRYPTO]'tmp' WRK_SSLINCLUDE: /LOG
126$ ELSE
127$ COPY [.'D']'tmp' WRK_SSLINCLUDE: /LOG
128$ ENDIF
129$ ENDIF
130$ SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'tmp'
131$ GOTO LOOP_SDIRS
132$ LOOP_SDIRS_END:
133$
134$ I = 0
135$ LOOP_LIB:
136$ E = F$EDIT(F$ELEMENT(I, ",", LIBS),"TRIM")
137$ I = I + 1
138$ IF E .EQS. "," THEN GOTO LOOP_LIB_END
139$ SET NOON
140$ IF F$SEARCH(EXE_DIR+E+".OLB") .NES. ""
141$ THEN
142$ COPY 'EXE_DIR''E'.OLB WRK_SSLLIB:'E'.OLB/log
143$ SET FILE/PROT=W:RE WRK_SSLLIB:'E'.OLB
144$ ENDIF
145$ ! Preparing for the time when we have shareable images
146$ IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
147$ THEN
148$ COPY 'EXE_DIR''E'.EXE WRK_SSLLIB:'E'.EXE/log
149$ SET FILE/PROT=W:RE WRK_SSLLIB:'E'.EXE
150$ ENDIF
151$ SET ON
152$ GOTO LOOP_LIB
153$ LOOP_LIB_END:
154$
155$ EXIT
diff --git a/src/lib/libcrypto/md4/md4_dgst.c b/src/lib/libcrypto/md4/md4_dgst.c
index 82c2cb2d98..b5b165b052 100644
--- a/src/lib/libcrypto/md4/md4_dgst.c
+++ b/src/lib/libcrypto/md4/md4_dgst.c
@@ -106,22 +106,23 @@ void md4_block_data_order (MD4_CTX *c, const void *data_, size_t num)
106 106
107 for (;num--;) 107 for (;num--;)
108 { 108 {
109 HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 109 (void)HOST_c2l(data,l); X( 0)=l;
110 (void)HOST_c2l(data,l); X( 1)=l;
110 /* Round 0 */ 111 /* Round 0 */
111 R0(A,B,C,D,X( 0), 3,0); HOST_c2l(data,l); X( 2)=l; 112 R0(A,B,C,D,X( 0), 3,0); (void)HOST_c2l(data,l); X( 2)=l;
112 R0(D,A,B,C,X( 1), 7,0); HOST_c2l(data,l); X( 3)=l; 113 R0(D,A,B,C,X( 1), 7,0); (void)HOST_c2l(data,l); X( 3)=l;
113 R0(C,D,A,B,X( 2),11,0); HOST_c2l(data,l); X( 4)=l; 114 R0(C,D,A,B,X( 2),11,0); (void)HOST_c2l(data,l); X( 4)=l;
114 R0(B,C,D,A,X( 3),19,0); HOST_c2l(data,l); X( 5)=l; 115 R0(B,C,D,A,X( 3),19,0); (void)HOST_c2l(data,l); X( 5)=l;
115 R0(A,B,C,D,X( 4), 3,0); HOST_c2l(data,l); X( 6)=l; 116 R0(A,B,C,D,X( 4), 3,0); (void)HOST_c2l(data,l); X( 6)=l;
116 R0(D,A,B,C,X( 5), 7,0); HOST_c2l(data,l); X( 7)=l; 117 R0(D,A,B,C,X( 5), 7,0); (void)HOST_c2l(data,l); X( 7)=l;
117 R0(C,D,A,B,X( 6),11,0); HOST_c2l(data,l); X( 8)=l; 118 R0(C,D,A,B,X( 6),11,0); (void)HOST_c2l(data,l); X( 8)=l;
118 R0(B,C,D,A,X( 7),19,0); HOST_c2l(data,l); X( 9)=l; 119 R0(B,C,D,A,X( 7),19,0); (void)HOST_c2l(data,l); X( 9)=l;
119 R0(A,B,C,D,X( 8), 3,0); HOST_c2l(data,l); X(10)=l; 120 R0(A,B,C,D,X( 8), 3,0); (void)HOST_c2l(data,l); X(10)=l;
120 R0(D,A,B,C,X( 9), 7,0); HOST_c2l(data,l); X(11)=l; 121 R0(D,A,B,C,X( 9), 7,0); (void)HOST_c2l(data,l); X(11)=l;
121 R0(C,D,A,B,X(10),11,0); HOST_c2l(data,l); X(12)=l; 122 R0(C,D,A,B,X(10),11,0); (void)HOST_c2l(data,l); X(12)=l;
122 R0(B,C,D,A,X(11),19,0); HOST_c2l(data,l); X(13)=l; 123 R0(B,C,D,A,X(11),19,0); (void)HOST_c2l(data,l); X(13)=l;
123 R0(A,B,C,D,X(12), 3,0); HOST_c2l(data,l); X(14)=l; 124 R0(A,B,C,D,X(12), 3,0); (void)HOST_c2l(data,l); X(14)=l;
124 R0(D,A,B,C,X(13), 7,0); HOST_c2l(data,l); X(15)=l; 125 R0(D,A,B,C,X(13), 7,0); (void)HOST_c2l(data,l); X(15)=l;
125 R0(C,D,A,B,X(14),11,0); 126 R0(C,D,A,B,X(14),11,0);
126 R0(B,C,D,A,X(15),19,0); 127 R0(B,C,D,A,X(15),19,0);
127 /* Round 1 */ 128 /* Round 1 */
diff --git a/src/lib/libcrypto/md4/md4_locl.h b/src/lib/libcrypto/md4/md4_locl.h
index c8085b0ead..99c3e5004c 100644
--- a/src/lib/libcrypto/md4/md4_locl.h
+++ b/src/lib/libcrypto/md4/md4_locl.h
@@ -77,10 +77,10 @@ void md4_block_data_order (MD4_CTX *c, const void *p,size_t num);
77#define HASH_FINAL MD4_Final 77#define HASH_FINAL MD4_Final
78#define HASH_MAKE_STRING(c,s) do { \ 78#define HASH_MAKE_STRING(c,s) do { \
79 unsigned long ll; \ 79 unsigned long ll; \
80 ll=(c)->A; HOST_l2c(ll,(s)); \ 80 ll=(c)->A; (void)HOST_l2c(ll,(s)); \
81 ll=(c)->B; HOST_l2c(ll,(s)); \ 81 ll=(c)->B; (void)HOST_l2c(ll,(s)); \
82 ll=(c)->C; HOST_l2c(ll,(s)); \ 82 ll=(c)->C; (void)HOST_l2c(ll,(s)); \
83 ll=(c)->D; HOST_l2c(ll,(s)); \ 83 ll=(c)->D; (void)HOST_l2c(ll,(s)); \
84 } while (0) 84 } while (0)
85#define HASH_BLOCK_DATA_ORDER md4_block_data_order 85#define HASH_BLOCK_DATA_ORDER md4_block_data_order
86 86
diff --git a/src/lib/libcrypto/md5/md5_locl.h b/src/lib/libcrypto/md5/md5_locl.h
index 968d577995..74d63d1f9c 100644
--- a/src/lib/libcrypto/md5/md5_locl.h
+++ b/src/lib/libcrypto/md5/md5_locl.h
@@ -86,10 +86,10 @@ void md5_block_data_order (MD5_CTX *c, const void *p,size_t num);
86#define HASH_FINAL MD5_Final 86#define HASH_FINAL MD5_Final
87#define HASH_MAKE_STRING(c,s) do { \ 87#define HASH_MAKE_STRING(c,s) do { \
88 unsigned long ll; \ 88 unsigned long ll; \
89 ll=(c)->A; HOST_l2c(ll,(s)); \ 89 ll=(c)->A; (void)HOST_l2c(ll,(s)); \
90 ll=(c)->B; HOST_l2c(ll,(s)); \ 90 ll=(c)->B; (void)HOST_l2c(ll,(s)); \
91 ll=(c)->C; HOST_l2c(ll,(s)); \ 91 ll=(c)->C; (void)HOST_l2c(ll,(s)); \
92 ll=(c)->D; HOST_l2c(ll,(s)); \ 92 ll=(c)->D; (void)HOST_l2c(ll,(s)); \
93 } while (0) 93 } while (0)
94#define HASH_BLOCK_DATA_ORDER md5_block_data_order 94#define HASH_BLOCK_DATA_ORDER md5_block_data_order
95 95
diff --git a/src/lib/libcrypto/mdc2/mdc2dgst.c b/src/lib/libcrypto/mdc2/mdc2dgst.c
index b74bb1a759..d66ed6a1c6 100644
--- a/src/lib/libcrypto/mdc2/mdc2dgst.c
+++ b/src/lib/libcrypto/mdc2/mdc2dgst.c
@@ -59,9 +59,9 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#include <string.h> 61#include <string.h>
62#include <openssl/crypto.h>
62#include <openssl/des.h> 63#include <openssl/des.h>
63#include <openssl/mdc2.h> 64#include <openssl/mdc2.h>
64#include <openssl/crypto.h>
65 65
66#undef c2l 66#undef c2l
67#define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \ 67#define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \
diff --git a/src/lib/libcrypto/mem.c b/src/lib/libcrypto/mem.c
index 24ccf729ca..55e829dc92 100644
--- a/src/lib/libcrypto/mem.c
+++ b/src/lib/libcrypto/mem.c
@@ -121,10 +121,10 @@ static void (*set_debug_options_func)(long) = NULL;
121static long (*get_debug_options_func)(void) = NULL; 121static long (*get_debug_options_func)(void) = NULL;
122#endif 122#endif
123 123
124
125int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), 124int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t),
126 void (*f)(void *)) 125 void (*f)(void *))
127 { 126 {
127 /* Dummy call just to ensure OPENSSL_init() gets linked in */
128 OPENSSL_init(); 128 OPENSSL_init();
129 if (!allow_customize) 129 if (!allow_customize)
130 return 0; 130 return 0;
diff --git a/src/lib/libcrypto/modes/Makefile b/src/lib/libcrypto/modes/Makefile
index 3d8bafd571..c825b12f25 100644
--- a/src/lib/libcrypto/modes/Makefile
+++ b/src/lib/libcrypto/modes/Makefile
@@ -53,10 +53,7 @@ ghash-x86_64.s: asm/ghash-x86_64.pl
53ghash-sparcv9.s: asm/ghash-sparcv9.pl 53ghash-sparcv9.s: asm/ghash-sparcv9.pl
54 $(PERL) asm/ghash-sparcv9.pl $@ $(CFLAGS) 54 $(PERL) asm/ghash-sparcv9.pl $@ $(CFLAGS)
55ghash-alpha.s: asm/ghash-alpha.pl 55ghash-alpha.s: asm/ghash-alpha.pl
56 (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ 56 $(PERL) $< | $(CC) -E - | tee $@ > /dev/null
57 $(PERL) asm/ghash-alpha.pl > $$preproc && \
58 $(CC) -E $$preproc > $@ && rm $$preproc)
59
60ghash-parisc.s: asm/ghash-parisc.pl 57ghash-parisc.s: asm/ghash-parisc.pl
61 $(PERL) asm/ghash-parisc.pl $(PERLASM_SCHEME) $@ 58 $(PERL) asm/ghash-parisc.pl $(PERLASM_SCHEME) $@
62 59
diff --git a/src/lib/libcrypto/objects/o_names.c b/src/lib/libcrypto/objects/o_names.c
index 84380a96a9..4a548c2ed4 100644
--- a/src/lib/libcrypto/objects/o_names.c
+++ b/src/lib/libcrypto/objects/o_names.c
@@ -73,7 +73,7 @@ int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *),
73 name_funcs_stack=sk_NAME_FUNCS_new_null(); 73 name_funcs_stack=sk_NAME_FUNCS_new_null();
74 MemCheck_on(); 74 MemCheck_on();
75 } 75 }
76 if ((name_funcs_stack == NULL)) 76 if (name_funcs_stack == NULL)
77 { 77 {
78 /* ERROR */ 78 /* ERROR */
79 return(0); 79 return(0);
diff --git a/src/lib/libcrypto/ocsp/ocsp_vfy.c b/src/lib/libcrypto/ocsp/ocsp_vfy.c
index 91a45c9133..276718304d 100644
--- a/src/lib/libcrypto/ocsp/ocsp_vfy.c
+++ b/src/lib/libcrypto/ocsp/ocsp_vfy.c
@@ -111,6 +111,7 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
111 init_res = X509_STORE_CTX_init(&ctx, st, signer, bs->certs); 111 init_res = X509_STORE_CTX_init(&ctx, st, signer, bs->certs);
112 if(!init_res) 112 if(!init_res)
113 { 113 {
114 ret = -1;
114 OCSPerr(OCSP_F_OCSP_BASIC_VERIFY,ERR_R_X509_LIB); 115 OCSPerr(OCSP_F_OCSP_BASIC_VERIFY,ERR_R_X509_LIB);
115 goto end; 116 goto end;
116 } 117 }
diff --git a/src/lib/libcrypto/opensslv.h b/src/lib/libcrypto/opensslv.h
index 71be3590af..ebe7180723 100644
--- a/src/lib/libcrypto/opensslv.h
+++ b/src/lib/libcrypto/opensslv.h
@@ -25,11 +25,11 @@
25 * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for 25 * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
26 * major minor fix final patch/beta) 26 * major minor fix final patch/beta)
27 */ 27 */
28#define OPENSSL_VERSION_NUMBER 0x1000103fL 28#define OPENSSL_VERSION_NUMBER 0x1000107fL
29#ifdef OPENSSL_FIPS 29#ifdef OPENSSL_FIPS
30#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c-fips 10 May 2012" 30#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1g-fips 7 Apr 2014"
31#else 31#else
32#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c 10 May 2012" 32#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1g 7 Apr 2014"
33#endif 33#endif
34#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT 34#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
35 35
diff --git a/src/lib/libcrypto/pem/pem_all.c b/src/lib/libcrypto/pem/pem_all.c
index 3e7a6093ad..eac0460e3e 100644
--- a/src/lib/libcrypto/pem/pem_all.c
+++ b/src/lib/libcrypto/pem/pem_all.c
@@ -193,7 +193,61 @@ RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb,
193 193
194#endif 194#endif
195 195
196#ifdef OPENSSL_FIPS
197
198int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,
199 unsigned char *kstr, int klen,
200 pem_password_cb *cb, void *u)
201{
202 if (FIPS_mode())
203 {
204 EVP_PKEY *k;
205 int ret;
206 k = EVP_PKEY_new();
207 if (!k)
208 return 0;
209 EVP_PKEY_set1_RSA(k, x);
210
211 ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u);
212 EVP_PKEY_free(k);
213 return ret;
214 }
215 else
216 return PEM_ASN1_write_bio((i2d_of_void *)i2d_RSAPrivateKey,
217 PEM_STRING_RSA,bp,x,enc,kstr,klen,cb,u);
218}
219
220#ifndef OPENSSL_NO_FP_API
221int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,
222 unsigned char *kstr, int klen,
223 pem_password_cb *cb, void *u)
224{
225 if (FIPS_mode())
226 {
227 EVP_PKEY *k;
228 int ret;
229 k = EVP_PKEY_new();
230 if (!k)
231 return 0;
232
233 EVP_PKEY_set1_RSA(k, x);
234
235 ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u);
236 EVP_PKEY_free(k);
237 return ret;
238 }
239 else
240 return PEM_ASN1_write((i2d_of_void *)i2d_RSAPrivateKey,
241 PEM_STRING_RSA,fp,x,enc,kstr,klen,cb,u);
242}
243#endif
244
245#else
246
196IMPLEMENT_PEM_write_cb_const(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey) 247IMPLEMENT_PEM_write_cb_const(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey)
248
249#endif
250
197IMPLEMENT_PEM_rw_const(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey) 251IMPLEMENT_PEM_rw_const(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey)
198IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY) 252IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY)
199 253
@@ -223,7 +277,59 @@ DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **dsa, pem_password_cb *cb,
223 return pkey_get_dsa(pktmp, dsa); /* will free pktmp */ 277 return pkey_get_dsa(pktmp, dsa); /* will free pktmp */
224} 278}
225 279
280#ifdef OPENSSL_FIPS
281
282int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc,
283 unsigned char *kstr, int klen,
284 pem_password_cb *cb, void *u)
285{
286 if (FIPS_mode())
287 {
288 EVP_PKEY *k;
289 int ret;
290 k = EVP_PKEY_new();
291 if (!k)
292 return 0;
293 EVP_PKEY_set1_DSA(k, x);
294
295 ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u);
296 EVP_PKEY_free(k);
297 return ret;
298 }
299 else
300 return PEM_ASN1_write_bio((i2d_of_void *)i2d_DSAPrivateKey,
301 PEM_STRING_DSA,bp,x,enc,kstr,klen,cb,u);
302}
303
304#ifndef OPENSSL_NO_FP_API
305int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc,
306 unsigned char *kstr, int klen,
307 pem_password_cb *cb, void *u)
308{
309 if (FIPS_mode())
310 {
311 EVP_PKEY *k;
312 int ret;
313 k = EVP_PKEY_new();
314 if (!k)
315 return 0;
316 EVP_PKEY_set1_DSA(k, x);
317 ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u);
318 EVP_PKEY_free(k);
319 return ret;
320 }
321 else
322 return PEM_ASN1_write((i2d_of_void *)i2d_DSAPrivateKey,
323 PEM_STRING_DSA,fp,x,enc,kstr,klen,cb,u);
324}
325#endif
326
327#else
328
226IMPLEMENT_PEM_write_cb_const(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey) 329IMPLEMENT_PEM_write_cb_const(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey)
330
331#endif
332
227IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY) 333IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY)
228 334
229#ifndef OPENSSL_NO_FP_API 335#ifndef OPENSSL_NO_FP_API
@@ -269,8 +375,63 @@ EC_KEY *PEM_read_bio_ECPrivateKey(BIO *bp, EC_KEY **key, pem_password_cb *cb,
269 375
270IMPLEMENT_PEM_rw_const(ECPKParameters, EC_GROUP, PEM_STRING_ECPARAMETERS, ECPKParameters) 376IMPLEMENT_PEM_rw_const(ECPKParameters, EC_GROUP, PEM_STRING_ECPARAMETERS, ECPKParameters)
271 377
378
379
380#ifdef OPENSSL_FIPS
381
382int PEM_write_bio_ECPrivateKey(BIO *bp, EC_KEY *x, const EVP_CIPHER *enc,
383 unsigned char *kstr, int klen,
384 pem_password_cb *cb, void *u)
385{
386 if (FIPS_mode())
387 {
388 EVP_PKEY *k;
389 int ret;
390 k = EVP_PKEY_new();
391 if (!k)
392 return 0;
393 EVP_PKEY_set1_EC_KEY(k, x);
394
395 ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u);
396 EVP_PKEY_free(k);
397 return ret;
398 }
399 else
400 return PEM_ASN1_write_bio((i2d_of_void *)i2d_ECPrivateKey,
401 PEM_STRING_ECPRIVATEKEY,
402 bp,x,enc,kstr,klen,cb,u);
403}
404
405#ifndef OPENSSL_NO_FP_API
406int PEM_write_ECPrivateKey(FILE *fp, EC_KEY *x, const EVP_CIPHER *enc,
407 unsigned char *kstr, int klen,
408 pem_password_cb *cb, void *u)
409{
410 if (FIPS_mode())
411 {
412 EVP_PKEY *k;
413 int ret;
414 k = EVP_PKEY_new();
415 if (!k)
416 return 0;
417 EVP_PKEY_set1_EC_KEY(k, x);
418 ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u);
419 EVP_PKEY_free(k);
420 return ret;
421 }
422 else
423 return PEM_ASN1_write((i2d_of_void *)i2d_ECPrivateKey,
424 PEM_STRING_ECPRIVATEKEY,
425 fp,x,enc,kstr,klen,cb,u);
426}
427#endif
428
429#else
430
272IMPLEMENT_PEM_write_cb(ECPrivateKey, EC_KEY, PEM_STRING_ECPRIVATEKEY, ECPrivateKey) 431IMPLEMENT_PEM_write_cb(ECPrivateKey, EC_KEY, PEM_STRING_ECPRIVATEKEY, ECPrivateKey)
273 432
433#endif
434
274IMPLEMENT_PEM_rw(EC_PUBKEY, EC_KEY, PEM_STRING_PUBLIC, EC_PUBKEY) 435IMPLEMENT_PEM_rw(EC_PUBKEY, EC_KEY, PEM_STRING_PUBLIC, EC_PUBKEY)
275 436
276#ifndef OPENSSL_NO_FP_API 437#ifndef OPENSSL_NO_FP_API
diff --git a/src/lib/libcrypto/pem/pem_info.c b/src/lib/libcrypto/pem/pem_info.c
index 1b2be527ed..cc7f24a9c1 100644
--- a/src/lib/libcrypto/pem/pem_info.c
+++ b/src/lib/libcrypto/pem/pem_info.c
@@ -167,6 +167,7 @@ start:
167#ifndef OPENSSL_NO_RSA 167#ifndef OPENSSL_NO_RSA
168 if (strcmp(name,PEM_STRING_RSA) == 0) 168 if (strcmp(name,PEM_STRING_RSA) == 0)
169 { 169 {
170 d2i=(D2I_OF(void))d2i_RSAPrivateKey;
170 if (xi->x_pkey != NULL) 171 if (xi->x_pkey != NULL)
171 { 172 {
172 if (!sk_X509_INFO_push(ret,xi)) goto err; 173 if (!sk_X509_INFO_push(ret,xi)) goto err;
diff --git a/src/lib/libcrypto/pem/pem_lib.c b/src/lib/libcrypto/pem/pem_lib.c
index cfc89a9921..5a421fc4b6 100644
--- a/src/lib/libcrypto/pem/pem_lib.c
+++ b/src/lib/libcrypto/pem/pem_lib.c
@@ -394,7 +394,8 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
394 goto err; 394 goto err;
395 /* The 'iv' is used as the iv and as a salt. It is 395 /* The 'iv' is used as the iv and as a salt. It is
396 * NOT taken from the BytesToKey function */ 396 * NOT taken from the BytesToKey function */
397 EVP_BytesToKey(enc,EVP_md5(),iv,kstr,klen,1,key,NULL); 397 if (!EVP_BytesToKey(enc,EVP_md5(),iv,kstr,klen,1,key,NULL))
398 goto err;
398 399
399 if (kstr == (unsigned char *)buf) OPENSSL_cleanse(buf,PEM_BUFSIZE); 400 if (kstr == (unsigned char *)buf) OPENSSL_cleanse(buf,PEM_BUFSIZE);
400 401
@@ -406,12 +407,15 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
406 /* k=strlen(buf); */ 407 /* k=strlen(buf); */
407 408
408 EVP_CIPHER_CTX_init(&ctx); 409 EVP_CIPHER_CTX_init(&ctx);
409 EVP_EncryptInit_ex(&ctx,enc,NULL,key,iv); 410 ret = 1;
410 EVP_EncryptUpdate(&ctx,data,&j,data,i); 411 if (!EVP_EncryptInit_ex(&ctx,enc,NULL,key,iv)
411 EVP_EncryptFinal_ex(&ctx,&(data[j]),&i); 412 || !EVP_EncryptUpdate(&ctx,data,&j,data,i)
413 || !EVP_EncryptFinal_ex(&ctx,&(data[j]),&i))
414 ret = 0;
412 EVP_CIPHER_CTX_cleanup(&ctx); 415 EVP_CIPHER_CTX_cleanup(&ctx);
416 if (ret == 0)
417 goto err;
413 i+=j; 418 i+=j;
414 ret=1;
415 } 419 }
416 else 420 else
417 { 421 {
@@ -459,14 +463,17 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen,
459 ebcdic2ascii(buf, buf, klen); 463 ebcdic2ascii(buf, buf, klen);
460#endif 464#endif
461 465
462 EVP_BytesToKey(cipher->cipher,EVP_md5(),&(cipher->iv[0]), 466 if (!EVP_BytesToKey(cipher->cipher,EVP_md5(),&(cipher->iv[0]),
463 (unsigned char *)buf,klen,1,key,NULL); 467 (unsigned char *)buf,klen,1,key,NULL))
468 return 0;
464 469
465 j=(int)len; 470 j=(int)len;
466 EVP_CIPHER_CTX_init(&ctx); 471 EVP_CIPHER_CTX_init(&ctx);
467 EVP_DecryptInit_ex(&ctx,cipher->cipher,NULL, key,&(cipher->iv[0])); 472 o = EVP_DecryptInit_ex(&ctx,cipher->cipher,NULL, key,&(cipher->iv[0]));
468 EVP_DecryptUpdate(&ctx,data,&i,data,j); 473 if (o)
469 o=EVP_DecryptFinal_ex(&ctx,&(data[i]),&j); 474 o = EVP_DecryptUpdate(&ctx,data,&i,data,j);
475 if (o)
476 o = EVP_DecryptFinal_ex(&ctx,&(data[i]),&j);
470 EVP_CIPHER_CTX_cleanup(&ctx); 477 EVP_CIPHER_CTX_cleanup(&ctx);
471 OPENSSL_cleanse((char *)buf,sizeof(buf)); 478 OPENSSL_cleanse((char *)buf,sizeof(buf));
472 OPENSSL_cleanse((char *)key,sizeof(key)); 479 OPENSSL_cleanse((char *)key,sizeof(key));
diff --git a/src/lib/libcrypto/pem/pem_seal.c b/src/lib/libcrypto/pem/pem_seal.c
index 59690b56ae..b6b4e13498 100644
--- a/src/lib/libcrypto/pem/pem_seal.c
+++ b/src/lib/libcrypto/pem/pem_seal.c
@@ -96,7 +96,8 @@ int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, EVP_MD *md_type,
96 EVP_EncodeInit(&ctx->encode); 96 EVP_EncodeInit(&ctx->encode);
97 97
98 EVP_MD_CTX_init(&ctx->md); 98 EVP_MD_CTX_init(&ctx->md);
99 EVP_SignInit(&ctx->md,md_type); 99 if (!EVP_SignInit(&ctx->md,md_type))
100 goto err;
100 101
101 EVP_CIPHER_CTX_init(&ctx->cipher); 102 EVP_CIPHER_CTX_init(&ctx->cipher);
102 ret=EVP_SealInit(&ctx->cipher,type,ek,ekl,iv,pubk,npubk); 103 ret=EVP_SealInit(&ctx->cipher,type,ek,ekl,iv,pubk,npubk);
@@ -163,7 +164,8 @@ int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl,
163 goto err; 164 goto err;
164 } 165 }
165 166
166 EVP_EncryptFinal_ex(&ctx->cipher,s,(int *)&i); 167 if (!EVP_EncryptFinal_ex(&ctx->cipher,s,(int *)&i))
168 goto err;
167 EVP_EncodeUpdate(&ctx->encode,out,&j,s,i); 169 EVP_EncodeUpdate(&ctx->encode,out,&j,s,i);
168 *outl=j; 170 *outl=j;
169 out+=j; 171 out+=j;
diff --git a/src/lib/libcrypto/perlasm/cbc.pl b/src/lib/libcrypto/perlasm/cbc.pl
index 6fc2510905..24561e759a 100644
--- a/src/lib/libcrypto/perlasm/cbc.pl
+++ b/src/lib/libcrypto/perlasm/cbc.pl
@@ -150,7 +150,7 @@ sub cbc
150&set_label("PIC_point"); 150&set_label("PIC_point");
151 &blindpop("edx"); 151 &blindpop("edx");
152 &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx")); 152 &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx"));
153 &mov($count,&DWP(0,"ecx",$count,4)) 153 &mov($count,&DWP(0,"ecx",$count,4));
154 &add($count,"edx"); 154 &add($count,"edx");
155 &xor("ecx","ecx"); 155 &xor("ecx","ecx");
156 &xor("edx","edx"); 156 &xor("edx","edx");
diff --git a/src/lib/libcrypto/pkcs12/p12_crt.c b/src/lib/libcrypto/pkcs12/p12_crt.c
index 96b131defa..a34915d02d 100644
--- a/src/lib/libcrypto/pkcs12/p12_crt.c
+++ b/src/lib/libcrypto/pkcs12/p12_crt.c
@@ -90,7 +90,14 @@ PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert,
90 90
91 /* Set defaults */ 91 /* Set defaults */
92 if (!nid_cert) 92 if (!nid_cert)
93 {
94#ifdef OPENSSL_FIPS
95 if (FIPS_mode())
96 nid_cert = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
97 else
98#endif
93 nid_cert = NID_pbe_WithSHA1And40BitRC2_CBC; 99 nid_cert = NID_pbe_WithSHA1And40BitRC2_CBC;
100 }
94 if (!nid_key) 101 if (!nid_key)
95 nid_key = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; 102 nid_key = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
96 if (!iter) 103 if (!iter)
diff --git a/src/lib/libcrypto/pkcs12/p12_key.c b/src/lib/libcrypto/pkcs12/p12_key.c
index c55c7b60b3..61d58502fd 100644
--- a/src/lib/libcrypto/pkcs12/p12_key.c
+++ b/src/lib/libcrypto/pkcs12/p12_key.c
@@ -176,24 +176,32 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
176 out += u; 176 out += u;
177 for (j = 0; j < v; j++) B[j] = Ai[j % u]; 177 for (j = 0; j < v; j++) B[j] = Ai[j % u];
178 /* Work out B + 1 first then can use B as tmp space */ 178 /* Work out B + 1 first then can use B as tmp space */
179 if (!BN_bin2bn (B, v, Bpl1)) goto err; 179 if (!BN_bin2bn (B, v, Bpl1))
180 if (!BN_add_word (Bpl1, 1)) goto err; 180 goto err;
181 if (!BN_add_word (Bpl1, 1))
182 goto err;
181 for (j = 0; j < Ilen ; j+=v) { 183 for (j = 0; j < Ilen ; j+=v) {
182 if (!BN_bin2bn (I + j, v, Ij)) goto err; 184 if (!BN_bin2bn(I + j, v, Ij))
183 if (!BN_add (Ij, Ij, Bpl1)) goto err; 185 goto err;
184 BN_bn2bin (Ij, B); 186 if (!BN_add(Ij, Ij, Bpl1))
187 goto err;
188 if (!BN_bn2bin(Ij, B))
189 goto err;
185 Ijlen = BN_num_bytes (Ij); 190 Ijlen = BN_num_bytes (Ij);
186 /* If more than 2^(v*8) - 1 cut off MSB */ 191 /* If more than 2^(v*8) - 1 cut off MSB */
187 if (Ijlen > v) { 192 if (Ijlen > v) {
188 BN_bn2bin (Ij, B); 193 if (!BN_bn2bin (Ij, B))
194 goto err;
189 memcpy (I + j, B + 1, v); 195 memcpy (I + j, B + 1, v);
190#ifndef PKCS12_BROKEN_KEYGEN 196#ifndef PKCS12_BROKEN_KEYGEN
191 /* If less than v bytes pad with zeroes */ 197 /* If less than v bytes pad with zeroes */
192 } else if (Ijlen < v) { 198 } else if (Ijlen < v) {
193 memset(I + j, 0, v - Ijlen); 199 memset(I + j, 0, v - Ijlen);
194 BN_bn2bin(Ij, I + j + v - Ijlen); 200 if (!BN_bn2bin(Ij, I + j + v - Ijlen))
201 goto err;
195#endif 202#endif
196 } else BN_bn2bin (Ij, I + j); 203 } else if (!BN_bn2bin (Ij, I + j))
204 goto err;
197 } 205 }
198 } 206 }
199 207
diff --git a/src/lib/libcrypto/rand/md_rand.c b/src/lib/libcrypto/rand/md_rand.c
index fcdd3f2a84..aee1c30b0a 100644
--- a/src/lib/libcrypto/rand/md_rand.c
+++ b/src/lib/libcrypto/rand/md_rand.c
@@ -123,10 +123,10 @@
123 123
124#include "e_os.h" 124#include "e_os.h"
125 125
126#include <openssl/crypto.h>
126#include <openssl/rand.h> 127#include <openssl/rand.h>
127#include "rand_lcl.h" 128#include "rand_lcl.h"
128 129
129#include <openssl/crypto.h>
130#include <openssl/err.h> 130#include <openssl/err.h>
131 131
132#ifdef BN_DEBUG 132#ifdef BN_DEBUG
@@ -198,6 +198,9 @@ static void ssleay_rand_add(const void *buf, int num, double add)
198 EVP_MD_CTX m; 198 EVP_MD_CTX m;
199 int do_not_lock; 199 int do_not_lock;
200 200
201 if (!num)
202 return;
203
201 /* 204 /*
202 * (Based on the rand(3) manpage) 205 * (Based on the rand(3) manpage)
203 * 206 *
@@ -380,8 +383,11 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
380 * are fed into the hash function and the results are kept in the 383 * are fed into the hash function and the results are kept in the
381 * global 'md'. 384 * global 'md'.
382 */ 385 */
383 386#ifdef OPENSSL_FIPS
384 CRYPTO_w_lock(CRYPTO_LOCK_RAND); 387 /* NB: in FIPS mode we are already under a lock */
388 if (!FIPS_mode())
389#endif
390 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
385 391
386 /* prevent ssleay_rand_bytes() from trying to obtain the lock again */ 392 /* prevent ssleay_rand_bytes() from trying to obtain the lock again */
387 CRYPTO_w_lock(CRYPTO_LOCK_RAND2); 393 CRYPTO_w_lock(CRYPTO_LOCK_RAND2);
@@ -460,7 +466,10 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
460 466
461 /* before unlocking, we must clear 'crypto_lock_rand' */ 467 /* before unlocking, we must clear 'crypto_lock_rand' */
462 crypto_lock_rand = 0; 468 crypto_lock_rand = 0;
463 CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 469#ifdef OPENSSL_FIPS
470 if (!FIPS_mode())
471#endif
472 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
464 473
465 while (num > 0) 474 while (num > 0)
466 { 475 {
@@ -512,10 +521,16 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
512 MD_Init(&m); 521 MD_Init(&m);
513 MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c)); 522 MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c));
514 MD_Update(&m,local_md,MD_DIGEST_LENGTH); 523 MD_Update(&m,local_md,MD_DIGEST_LENGTH);
515 CRYPTO_w_lock(CRYPTO_LOCK_RAND); 524#ifdef OPENSSL_FIPS
525 if (!FIPS_mode())
526#endif
527 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
516 MD_Update(&m,md,MD_DIGEST_LENGTH); 528 MD_Update(&m,md,MD_DIGEST_LENGTH);
517 MD_Final(&m,md); 529 MD_Final(&m,md);
518 CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 530#ifdef OPENSSL_FIPS
531 if (!FIPS_mode())
532#endif
533 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
519 534
520 EVP_MD_CTX_cleanup(&m); 535 EVP_MD_CTX_cleanup(&m);
521 if (ok) 536 if (ok)
diff --git a/src/lib/libcrypto/rand/rand.h b/src/lib/libcrypto/rand/rand.h
index dc8fcf94c5..bb5520e80a 100644
--- a/src/lib/libcrypto/rand/rand.h
+++ b/src/lib/libcrypto/rand/rand.h
@@ -138,6 +138,7 @@ void ERR_load_RAND_strings(void);
138#define RAND_F_SSLEAY_RAND_BYTES 100 138#define RAND_F_SSLEAY_RAND_BYTES 100
139 139
140/* Reason codes. */ 140/* Reason codes. */
141#define RAND_R_DUAL_EC_DRBG_DISABLED 104
141#define RAND_R_ERROR_INITIALISING_DRBG 102 142#define RAND_R_ERROR_INITIALISING_DRBG 102
142#define RAND_R_ERROR_INSTANTIATING_DRBG 103 143#define RAND_R_ERROR_INSTANTIATING_DRBG 103
143#define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 144#define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101
diff --git a/src/lib/libcrypto/rand/rand_err.c b/src/lib/libcrypto/rand/rand_err.c
index b8586c8f4a..c4c80fc8cc 100644
--- a/src/lib/libcrypto/rand/rand_err.c
+++ b/src/lib/libcrypto/rand/rand_err.c
@@ -78,6 +78,7 @@ static ERR_STRING_DATA RAND_str_functs[]=
78 78
79static ERR_STRING_DATA RAND_str_reasons[]= 79static ERR_STRING_DATA RAND_str_reasons[]=
80 { 80 {
81{ERR_REASON(RAND_R_DUAL_EC_DRBG_DISABLED),"dual ec drbg disabled"},
81{ERR_REASON(RAND_R_ERROR_INITIALISING_DRBG),"error initialising drbg"}, 82{ERR_REASON(RAND_R_ERROR_INITIALISING_DRBG),"error initialising drbg"},
82{ERR_REASON(RAND_R_ERROR_INSTANTIATING_DRBG),"error instantiating drbg"}, 83{ERR_REASON(RAND_R_ERROR_INSTANTIATING_DRBG),"error instantiating drbg"},
83{ERR_REASON(RAND_R_NO_FIPS_RANDOM_METHOD_SET),"no fips random method set"}, 84{ERR_REASON(RAND_R_NO_FIPS_RANDOM_METHOD_SET),"no fips random method set"},
diff --git a/src/lib/libcrypto/rand/rand_lib.c b/src/lib/libcrypto/rand/rand_lib.c
index daf1dab973..5ac0e14caf 100644
--- a/src/lib/libcrypto/rand/rand_lib.c
+++ b/src/lib/libcrypto/rand/rand_lib.c
@@ -210,8 +210,11 @@ static size_t drbg_get_entropy(DRBG_CTX *ctx, unsigned char **pout,
210 210
211static void drbg_free_entropy(DRBG_CTX *ctx, unsigned char *out, size_t olen) 211static void drbg_free_entropy(DRBG_CTX *ctx, unsigned char *out, size_t olen)
212 { 212 {
213 OPENSSL_cleanse(out, olen); 213 if (out)
214 OPENSSL_free(out); 214 {
215 OPENSSL_cleanse(out, olen);
216 OPENSSL_free(out);
217 }
215 } 218 }
216 219
217/* Set "additional input" when generating random data. This uses the 220/* Set "additional input" when generating random data. This uses the
@@ -266,6 +269,14 @@ int RAND_init_fips(void)
266 DRBG_CTX *dctx; 269 DRBG_CTX *dctx;
267 size_t plen; 270 size_t plen;
268 unsigned char pers[32], *p; 271 unsigned char pers[32], *p;
272#ifndef OPENSSL_ALLOW_DUAL_EC_DRBG
273 if (fips_drbg_type >> 16)
274 {
275 RANDerr(RAND_F_RAND_INIT_FIPS, RAND_R_DUAL_EC_DRBG_DISABLED);
276 return 0;
277 }
278#endif
279
269 dctx = FIPS_get_default_drbg(); 280 dctx = FIPS_get_default_drbg();
270 if (FIPS_drbg_init(dctx, fips_drbg_type, fips_drbg_flags) <= 0) 281 if (FIPS_drbg_init(dctx, fips_drbg_type, fips_drbg_flags) <= 0)
271 { 282 {
diff --git a/src/lib/libcrypto/rand/rand_win.c b/src/lib/libcrypto/rand/rand_win.c
index 5d134e186b..34ffcd23f9 100644
--- a/src/lib/libcrypto/rand/rand_win.c
+++ b/src/lib/libcrypto/rand/rand_win.c
@@ -750,7 +750,7 @@ static void readscreen(void)
750 int y; /* y-coordinate of screen lines to grab */ 750 int y; /* y-coordinate of screen lines to grab */
751 int n = 16; /* number of screen lines to grab at a time */ 751 int n = 16; /* number of screen lines to grab at a time */
752 752
753 if (GetVersion() < 0x80000000 && OPENSSL_isservice()>0) 753 if (check_winnt() && OPENSSL_isservice()>0)
754 return; 754 return;
755 755
756 /* Create a screen DC and a memory DC compatible to screen DC */ 756 /* Create a screen DC and a memory DC compatible to screen DC */
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c
index 030e07f418..7f1428072d 100644
--- a/src/lib/libcrypto/rand/randfile.c
+++ b/src/lib/libcrypto/rand/randfile.c
@@ -57,7 +57,9 @@
57 */ 57 */
58 58
59/* We need to define this to get macros like S_IFBLK and S_IFCHR */ 59/* We need to define this to get macros like S_IFBLK and S_IFCHR */
60#if !defined(OPENSSL_SYS_VXWORKS)
60#define _XOPEN_SOURCE 500 61#define _XOPEN_SOURCE 500
62#endif
61 63
62#include <errno.h> 64#include <errno.h>
63#include <stdio.h> 65#include <stdio.h>
diff --git a/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl b/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl
index d6eac205e9..75750dbf33 100755
--- a/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl
+++ b/src/lib/libcrypto/rc4/asm/rc4-x86_64.pl
@@ -112,7 +112,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
112( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 112( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
113die "can't locate x86_64-xlate.pl"; 113die "can't locate x86_64-xlate.pl";
114 114
115open STDOUT,"| $^X $xlate $flavour $output"; 115open OUT,"| \"$^X\" $xlate $flavour $output";
116*STDOUT=*OUT;
116 117
117$dat="%rdi"; # arg1 118$dat="%rdi"; # arg1
118$len="%rsi"; # arg2 119$len="%rsi"; # arg2
diff --git a/src/lib/libcrypto/rc4/rc4test.c b/src/lib/libcrypto/rc4/rc4test.c
index 633a79e758..4312605ccb 100644
--- a/src/lib/libcrypto/rc4/rc4test.c
+++ b/src/lib/libcrypto/rc4/rc4test.c
@@ -120,6 +120,12 @@ int main(int argc, char *argv[])
120 RC4_KEY key; 120 RC4_KEY key;
121 unsigned char obuf[512]; 121 unsigned char obuf[512];
122 122
123#if !defined(OPENSSL_PIC)
124 void OPENSSL_cpuid_setup(void);
125
126 OPENSSL_cpuid_setup();
127#endif
128
123 for (i=0; i<6; i++) 129 for (i=0; i<6; i++)
124 { 130 {
125 RC4_set_key(&key,keys[i][0],&(keys[i][1])); 131 RC4_set_key(&key,keys[i][0],&(keys[i][1]));
diff --git a/src/lib/libcrypto/ripemd/rmd_dgst.c b/src/lib/libcrypto/ripemd/rmd_dgst.c
index 9ff1a0705e..d8e72da51b 100644
--- a/src/lib/libcrypto/ripemd/rmd_dgst.c
+++ b/src/lib/libcrypto/ripemd/rmd_dgst.c
@@ -88,7 +88,7 @@ fips_md_init(RIPEMD160)
88void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, size_t num) 88void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, size_t num)
89 { 89 {
90 const unsigned char *data=p; 90 const unsigned char *data=p;
91 register volatile unsigned MD32_REG_T A,B,C,D,E; 91 register unsigned MD32_REG_T A,B,C,D,E;
92 unsigned MD32_REG_T a,b,c,d,e,l; 92 unsigned MD32_REG_T a,b,c,d,e,l;
93#ifndef MD32_XARRAY 93#ifndef MD32_XARRAY
94 /* See comment in crypto/sha/sha_locl.h for details. */ 94 /* See comment in crypto/sha/sha_locl.h for details. */
@@ -105,21 +105,21 @@ void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, size_t num)
105 105
106 A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E; 106 A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
107 107
108 HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 108 (void)HOST_c2l(data,l); X( 0)=l;(void)HOST_c2l(data,l); X( 1)=l;
109 RIP1(A,B,C,D,E,WL00,SL00); HOST_c2l(data,l); X( 2)=l; 109 RIP1(A,B,C,D,E,WL00,SL00); (void)HOST_c2l(data,l); X( 2)=l;
110 RIP1(E,A,B,C,D,WL01,SL01); HOST_c2l(data,l); X( 3)=l; 110 RIP1(E,A,B,C,D,WL01,SL01); (void)HOST_c2l(data,l); X( 3)=l;
111 RIP1(D,E,A,B,C,WL02,SL02); HOST_c2l(data,l); X( 4)=l; 111 RIP1(D,E,A,B,C,WL02,SL02); (void)HOST_c2l(data,l); X( 4)=l;
112 RIP1(C,D,E,A,B,WL03,SL03); HOST_c2l(data,l); X( 5)=l; 112 RIP1(C,D,E,A,B,WL03,SL03); (void)HOST_c2l(data,l); X( 5)=l;
113 RIP1(B,C,D,E,A,WL04,SL04); HOST_c2l(data,l); X( 6)=l; 113 RIP1(B,C,D,E,A,WL04,SL04); (void)HOST_c2l(data,l); X( 6)=l;
114 RIP1(A,B,C,D,E,WL05,SL05); HOST_c2l(data,l); X( 7)=l; 114 RIP1(A,B,C,D,E,WL05,SL05); (void)HOST_c2l(data,l); X( 7)=l;
115 RIP1(E,A,B,C,D,WL06,SL06); HOST_c2l(data,l); X( 8)=l; 115 RIP1(E,A,B,C,D,WL06,SL06); (void)HOST_c2l(data,l); X( 8)=l;
116 RIP1(D,E,A,B,C,WL07,SL07); HOST_c2l(data,l); X( 9)=l; 116 RIP1(D,E,A,B,C,WL07,SL07); (void)HOST_c2l(data,l); X( 9)=l;
117 RIP1(C,D,E,A,B,WL08,SL08); HOST_c2l(data,l); X(10)=l; 117 RIP1(C,D,E,A,B,WL08,SL08); (void)HOST_c2l(data,l); X(10)=l;
118 RIP1(B,C,D,E,A,WL09,SL09); HOST_c2l(data,l); X(11)=l; 118 RIP1(B,C,D,E,A,WL09,SL09); (void)HOST_c2l(data,l); X(11)=l;
119 RIP1(A,B,C,D,E,WL10,SL10); HOST_c2l(data,l); X(12)=l; 119 RIP1(A,B,C,D,E,WL10,SL10); (void)HOST_c2l(data,l); X(12)=l;
120 RIP1(E,A,B,C,D,WL11,SL11); HOST_c2l(data,l); X(13)=l; 120 RIP1(E,A,B,C,D,WL11,SL11); (void)HOST_c2l(data,l); X(13)=l;
121 RIP1(D,E,A,B,C,WL12,SL12); HOST_c2l(data,l); X(14)=l; 121 RIP1(D,E,A,B,C,WL12,SL12); (void)HOST_c2l(data,l); X(14)=l;
122 RIP1(C,D,E,A,B,WL13,SL13); HOST_c2l(data,l); X(15)=l; 122 RIP1(C,D,E,A,B,WL13,SL13); (void)HOST_c2l(data,l); X(15)=l;
123 RIP1(B,C,D,E,A,WL14,SL14); 123 RIP1(B,C,D,E,A,WL14,SL14);
124 RIP1(A,B,C,D,E,WL15,SL15); 124 RIP1(A,B,C,D,E,WL15,SL15);
125 125
diff --git a/src/lib/libcrypto/ripemd/rmd_locl.h b/src/lib/libcrypto/ripemd/rmd_locl.h
index f14b346e66..2bd8957d14 100644
--- a/src/lib/libcrypto/ripemd/rmd_locl.h
+++ b/src/lib/libcrypto/ripemd/rmd_locl.h
@@ -88,11 +88,11 @@ void ripemd160_block_data_order (RIPEMD160_CTX *c, const void *p,size_t num);
88#define HASH_FINAL RIPEMD160_Final 88#define HASH_FINAL RIPEMD160_Final
89#define HASH_MAKE_STRING(c,s) do { \ 89#define HASH_MAKE_STRING(c,s) do { \
90 unsigned long ll; \ 90 unsigned long ll; \
91 ll=(c)->A; HOST_l2c(ll,(s)); \ 91 ll=(c)->A; (void)HOST_l2c(ll,(s)); \
92 ll=(c)->B; HOST_l2c(ll,(s)); \ 92 ll=(c)->B; (void)HOST_l2c(ll,(s)); \
93 ll=(c)->C; HOST_l2c(ll,(s)); \ 93 ll=(c)->C; (void)HOST_l2c(ll,(s)); \
94 ll=(c)->D; HOST_l2c(ll,(s)); \ 94 ll=(c)->D; (void)HOST_l2c(ll,(s)); \
95 ll=(c)->E; HOST_l2c(ll,(s)); \ 95 ll=(c)->E; (void)HOST_l2c(ll,(s)); \
96 } while (0) 96 } while (0)
97#define HASH_BLOCK_DATA_ORDER ripemd160_block_data_order 97#define HASH_BLOCK_DATA_ORDER ripemd160_block_data_order
98 98
diff --git a/src/lib/libcrypto/rsa/rsa.h b/src/lib/libcrypto/rsa/rsa.h
index 4814a2fc15..5f269e577a 100644
--- a/src/lib/libcrypto/rsa/rsa.h
+++ b/src/lib/libcrypto/rsa/rsa.h
@@ -280,7 +280,7 @@ struct rsa_st
280 280
281RSA * RSA_new(void); 281RSA * RSA_new(void);
282RSA * RSA_new_method(ENGINE *engine); 282RSA * RSA_new_method(ENGINE *engine);
283int RSA_size(const RSA *); 283int RSA_size(const RSA *rsa);
284 284
285/* Deprecated version */ 285/* Deprecated version */
286#ifndef OPENSSL_NO_DEPRECATED 286#ifndef OPENSSL_NO_DEPRECATED
diff --git a/src/lib/libcrypto/rsa/rsa_chk.c b/src/lib/libcrypto/rsa/rsa_chk.c
index 9d848db8c6..cc30e77132 100644
--- a/src/lib/libcrypto/rsa/rsa_chk.c
+++ b/src/lib/libcrypto/rsa/rsa_chk.c
@@ -59,6 +59,12 @@ int RSA_check_key(const RSA *key)
59 BN_CTX *ctx; 59 BN_CTX *ctx;
60 int r; 60 int r;
61 int ret=1; 61 int ret=1;
62
63 if (!key->p || !key->q || !key->n || !key->e || !key->d)
64 {
65 RSAerr(RSA_F_RSA_CHECK_KEY, RSA_R_VALUE_MISSING);
66 return 0;
67 }
62 68
63 i = BN_new(); 69 i = BN_new();
64 j = BN_new(); 70 j = BN_new();
diff --git a/src/lib/libcrypto/rsa/rsa_eay.c b/src/lib/libcrypto/rsa/rsa_eay.c
index 2e1ddd48d3..88ee2cb557 100644
--- a/src/lib/libcrypto/rsa/rsa_eay.c
+++ b/src/lib/libcrypto/rsa/rsa_eay.c
@@ -847,12 +847,12 @@ static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
847 if (!BN_mod(r0,pr1,rsa->p,ctx)) goto err; 847 if (!BN_mod(r0,pr1,rsa->p,ctx)) goto err;
848 848
849 /* If p < q it is occasionally possible for the correction of 849 /* If p < q it is occasionally possible for the correction of
850 * adding 'p' if r0 is negative above to leave the result still 850 * adding 'p' if r0 is negative above to leave the result still
851 * negative. This can break the private key operations: the following 851 * negative. This can break the private key operations: the following
852 * second correction should *always* correct this rare occurrence. 852 * second correction should *always* correct this rare occurrence.
853 * This will *never* happen with OpenSSL generated keys because 853 * This will *never* happen with OpenSSL generated keys because
854 * they ensure p > q [steve] 854 * they ensure p > q [steve]
855 */ 855 */
856 if (BN_is_negative(r0)) 856 if (BN_is_negative(r0))
857 if (!BN_add(r0,r0,rsa->p)) goto err; 857 if (!BN_add(r0,r0,rsa->p)) goto err;
858 if (!BN_mul(r1,r0,rsa->q,ctx)) goto err; 858 if (!BN_mul(r1,r0,rsa->q,ctx)) goto err;
diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c
index e08ac151ff..af4d24a56e 100644
--- a/src/lib/libcrypto/rsa/rsa_oaep.c
+++ b/src/lib/libcrypto/rsa/rsa_oaep.c
@@ -149,7 +149,7 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
149 if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL)) 149 if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL))
150 return -1; 150 return -1;
151 151
152 if (timingsafe_bcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad) 152 if (CRYPTO_memcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad)
153 goto decoding_err; 153 goto decoding_err;
154 else 154 else
155 { 155 {
diff --git a/src/lib/libcrypto/sha/Makefile b/src/lib/libcrypto/sha/Makefile
index 2eb2b7af99..6d191d3936 100644
--- a/src/lib/libcrypto/sha/Makefile
+++ b/src/lib/libcrypto/sha/Makefile
@@ -60,9 +60,7 @@ sha256-armv4.S: asm/sha256-armv4.pl
60 $(PERL) $< $(PERLASM_SCHEME) $@ 60 $(PERL) $< $(PERLASM_SCHEME) $@
61 61
62sha1-alpha.s: asm/sha1-alpha.pl 62sha1-alpha.s: asm/sha1-alpha.pl
63 (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ 63 $(PERL) $< | $(CC) -E - | tee $@ > /dev/null
64 $(PERL) asm/sha1-alpha.pl > $$preproc && \
65 $(CC) -E $$preproc > $@ && rm $$preproc)
66 64
67# Solaris make has to be explicitly told 65# Solaris make has to be explicitly told
68sha1-x86_64.s: asm/sha1-x86_64.pl; $(PERL) asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@ 66sha1-x86_64.s: asm/sha1-x86_64.pl; $(PERL) asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@
diff --git a/src/lib/libcrypto/sha/sha1_one.c b/src/lib/libcrypto/sha/sha1_one.c
index 7c65b60276..c56ec94020 100644
--- a/src/lib/libcrypto/sha/sha1_one.c
+++ b/src/lib/libcrypto/sha/sha1_one.c
@@ -58,8 +58,8 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <string.h> 60#include <string.h>
61#include <openssl/sha.h>
62#include <openssl/crypto.h> 61#include <openssl/crypto.h>
62#include <openssl/sha.h>
63 63
64#ifndef OPENSSL_NO_SHA1 64#ifndef OPENSSL_NO_SHA1
65unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md) 65unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md)
diff --git a/src/lib/libcrypto/sha/sha1dgst.c b/src/lib/libcrypto/sha/sha1dgst.c
index 81219af088..a98690225f 100644
--- a/src/lib/libcrypto/sha/sha1dgst.c
+++ b/src/lib/libcrypto/sha/sha1dgst.c
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include <openssl/opensslconf.h>
60#include <openssl/crypto.h> 59#include <openssl/crypto.h>
60#include <openssl/opensslconf.h>
61#if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA) 61#if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA)
62 62
63#undef SHA_0 63#undef SHA_0
diff --git a/src/lib/libcrypto/sha/sha_dgst.c b/src/lib/libcrypto/sha/sha_dgst.c
index c946ad827d..fb63b17ff2 100644
--- a/src/lib/libcrypto/sha/sha_dgst.c
+++ b/src/lib/libcrypto/sha/sha_dgst.c
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include <openssl/opensslconf.h>
60#include <openssl/crypto.h> 59#include <openssl/crypto.h>
60#include <openssl/opensslconf.h>
61#if !defined(OPENSSL_NO_SHA0) && !defined(OPENSSL_NO_SHA) 61#if !defined(OPENSSL_NO_SHA0) && !defined(OPENSSL_NO_SHA)
62 62
63#undef SHA_1 63#undef SHA_1
diff --git a/src/lib/libcrypto/sha/sha_locl.h b/src/lib/libcrypto/sha/sha_locl.h
index 7a0c3ca8d8..d673255f78 100644
--- a/src/lib/libcrypto/sha/sha_locl.h
+++ b/src/lib/libcrypto/sha/sha_locl.h
@@ -69,11 +69,11 @@
69#define HASH_CBLOCK SHA_CBLOCK 69#define HASH_CBLOCK SHA_CBLOCK
70#define HASH_MAKE_STRING(c,s) do { \ 70#define HASH_MAKE_STRING(c,s) do { \
71 unsigned long ll; \ 71 unsigned long ll; \
72 ll=(c)->h0; HOST_l2c(ll,(s)); \ 72 ll=(c)->h0; (void)HOST_l2c(ll,(s)); \
73 ll=(c)->h1; HOST_l2c(ll,(s)); \ 73 ll=(c)->h1; (void)HOST_l2c(ll,(s)); \
74 ll=(c)->h2; HOST_l2c(ll,(s)); \ 74 ll=(c)->h2; (void)HOST_l2c(ll,(s)); \
75 ll=(c)->h3; HOST_l2c(ll,(s)); \ 75 ll=(c)->h3; (void)HOST_l2c(ll,(s)); \
76 ll=(c)->h4; HOST_l2c(ll,(s)); \ 76 ll=(c)->h4; (void)HOST_l2c(ll,(s)); \
77 } while (0) 77 } while (0)
78 78
79#if defined(SHA_0) 79#if defined(SHA_0)
@@ -256,21 +256,21 @@ static void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, size_t num)
256 } 256 }
257 else 257 else
258 { 258 {
259 HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 259 (void)HOST_c2l(data,l); X( 0)=l; (void)HOST_c2l(data,l); X( 1)=l;
260 BODY_00_15( 0,A,B,C,D,E,T,X( 0)); HOST_c2l(data,l); X( 2)=l; 260 BODY_00_15( 0,A,B,C,D,E,T,X( 0)); (void)HOST_c2l(data,l); X( 2)=l;
261 BODY_00_15( 1,T,A,B,C,D,E,X( 1)); HOST_c2l(data,l); X( 3)=l; 261 BODY_00_15( 1,T,A,B,C,D,E,X( 1)); (void)HOST_c2l(data,l); X( 3)=l;
262 BODY_00_15( 2,E,T,A,B,C,D,X( 2)); HOST_c2l(data,l); X( 4)=l; 262 BODY_00_15( 2,E,T,A,B,C,D,X( 2)); (void)HOST_c2l(data,l); X( 4)=l;
263 BODY_00_15( 3,D,E,T,A,B,C,X( 3)); HOST_c2l(data,l); X( 5)=l; 263 BODY_00_15( 3,D,E,T,A,B,C,X( 3)); (void)HOST_c2l(data,l); X( 5)=l;
264 BODY_00_15( 4,C,D,E,T,A,B,X( 4)); HOST_c2l(data,l); X( 6)=l; 264 BODY_00_15( 4,C,D,E,T,A,B,X( 4)); (void)HOST_c2l(data,l); X( 6)=l;
265 BODY_00_15( 5,B,C,D,E,T,A,X( 5)); HOST_c2l(data,l); X( 7)=l; 265 BODY_00_15( 5,B,C,D,E,T,A,X( 5)); (void)HOST_c2l(data,l); X( 7)=l;
266 BODY_00_15( 6,A,B,C,D,E,T,X( 6)); HOST_c2l(data,l); X( 8)=l; 266 BODY_00_15( 6,A,B,C,D,E,T,X( 6)); (void)HOST_c2l(data,l); X( 8)=l;
267 BODY_00_15( 7,T,A,B,C,D,E,X( 7)); HOST_c2l(data,l); X( 9)=l; 267 BODY_00_15( 7,T,A,B,C,D,E,X( 7)); (void)HOST_c2l(data,l); X( 9)=l;
268 BODY_00_15( 8,E,T,A,B,C,D,X( 8)); HOST_c2l(data,l); X(10)=l; 268 BODY_00_15( 8,E,T,A,B,C,D,X( 8)); (void)HOST_c2l(data,l); X(10)=l;
269 BODY_00_15( 9,D,E,T,A,B,C,X( 9)); HOST_c2l(data,l); X(11)=l; 269 BODY_00_15( 9,D,E,T,A,B,C,X( 9)); (void)HOST_c2l(data,l); X(11)=l;
270 BODY_00_15(10,C,D,E,T,A,B,X(10)); HOST_c2l(data,l); X(12)=l; 270 BODY_00_15(10,C,D,E,T,A,B,X(10)); (void)HOST_c2l(data,l); X(12)=l;
271 BODY_00_15(11,B,C,D,E,T,A,X(11)); HOST_c2l(data,l); X(13)=l; 271 BODY_00_15(11,B,C,D,E,T,A,X(11)); (void)HOST_c2l(data,l); X(13)=l;
272 BODY_00_15(12,A,B,C,D,E,T,X(12)); HOST_c2l(data,l); X(14)=l; 272 BODY_00_15(12,A,B,C,D,E,T,X(12)); (void)HOST_c2l(data,l); X(14)=l;
273 BODY_00_15(13,T,A,B,C,D,E,X(13)); HOST_c2l(data,l); X(15)=l; 273 BODY_00_15(13,T,A,B,C,D,E,X(13)); (void)HOST_c2l(data,l); X(15)=l;
274 BODY_00_15(14,E,T,A,B,C,D,X(14)); 274 BODY_00_15(14,E,T,A,B,C,D,X(14));
275 BODY_00_15(15,D,E,T,A,B,C,X(15)); 275 BODY_00_15(15,D,E,T,A,B,C,X(15));
276 } 276 }
diff --git a/src/lib/libcrypto/symhacks.h b/src/lib/libcrypto/symhacks.h
index 403f592dcd..bd2f000d59 100644
--- a/src/lib/libcrypto/symhacks.h
+++ b/src/lib/libcrypto/symhacks.h
@@ -193,17 +193,23 @@
193#undef SSL_CTX_set_srp_username_callback 193#undef SSL_CTX_set_srp_username_callback
194#define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb 194#define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb
195#undef ssl_add_clienthello_use_srtp_ext 195#undef ssl_add_clienthello_use_srtp_ext
196#define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext 196#define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext
197#undef ssl_add_serverhello_use_srtp_ext 197#undef ssl_add_serverhello_use_srtp_ext
198#define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext 198#define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext
199#undef ssl_parse_clienthello_use_srtp_ext 199#undef ssl_parse_clienthello_use_srtp_ext
200#define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext 200#define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext
201#undef ssl_parse_serverhello_use_srtp_ext 201#undef ssl_parse_serverhello_use_srtp_ext
202#define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext 202#define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext
203#undef SSL_CTX_set_next_protos_advertised_cb 203#undef SSL_CTX_set_next_protos_advertised_cb
204#define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb 204#define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb
205#undef SSL_CTX_set_next_proto_select_cb 205#undef SSL_CTX_set_next_proto_select_cb
206#define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb 206#define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb
207#undef ssl3_cbc_record_digest_supported
208#define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support
209#undef ssl_check_clienthello_tlsext_late
210#define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late
211#undef ssl_check_clienthello_tlsext_early
212#define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early
207 213
208/* Hack some long ENGINE names */ 214/* Hack some long ENGINE names */
209#undef ENGINE_get_default_BN_mod_exp_crt 215#undef ENGINE_get_default_BN_mod_exp_crt
@@ -316,8 +322,6 @@
316#define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf 322#define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf
317#undef ec_GFp_simple_points_make_affine 323#undef ec_GFp_simple_points_make_affine
318#define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine 324#define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine
319#undef ec_GFp_simple_group_get_curve_GFp
320#define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp
321#undef ec_GFp_simple_set_Jprojective_coordinates_GFp 325#undef ec_GFp_simple_set_Jprojective_coordinates_GFp
322#define ec_GFp_simple_set_Jprojective_coordinates_GFp \ 326#define ec_GFp_simple_set_Jprojective_coordinates_GFp \
323 ec_GFp_smp_set_Jproj_coords_GFp 327 ec_GFp_smp_set_Jproj_coords_GFp
diff --git a/src/lib/libcrypto/threads/pthreads-vms.com b/src/lib/libcrypto/threads/pthreads-vms.com
deleted file mode 100644
index 1cf92bdf57..0000000000
--- a/src/lib/libcrypto/threads/pthreads-vms.com
+++ /dev/null
@@ -1,14 +0,0 @@
1$! To compile mttest on VMS.
2$!
3$! WARNING: only tested with DEC C so far.
4$
5$ if (f$getsyi("cpu").lt.128)
6$ then
7$ arch := VAX
8$ else
9$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
10$ if (arch .eqs. "") then arch = "UNK"
11$ endif
12$ define/user openssl [--.include.openssl]
13$ cc/def=PTHREADS mttest.c
14$ link mttest,[--.'arch'.exe.ssl]libssl/lib,[--.'arch'.exe.crypto]libcrypto/lib
diff --git a/src/lib/libcrypto/ui/ui_openssl.c b/src/lib/libcrypto/ui/ui_openssl.c
index e319faa47b..a38c7581e6 100644
--- a/src/lib/libcrypto/ui/ui_openssl.c
+++ b/src/lib/libcrypto/ui/ui_openssl.c
@@ -122,9 +122,15 @@
122 * sigaction and fileno included. -pedantic would be more appropriate for 122 * sigaction and fileno included. -pedantic would be more appropriate for
123 * the intended purposes, but we can't prevent users from adding -ansi. 123 * the intended purposes, but we can't prevent users from adding -ansi.
124 */ 124 */
125#if defined(OPENSSL_SYSNAME_VXWORKS)
126#include <sys/types.h>
127#endif
128
125#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) 129#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS)
130#ifndef _POSIX_C_SOURCE
126#define _POSIX_C_SOURCE 2 131#define _POSIX_C_SOURCE 2
127#endif 132#endif
133#endif
128#include <signal.h> 134#include <signal.h>
129#include <stdio.h> 135#include <stdio.h>
130#include <string.h> 136#include <string.h>
@@ -398,8 +404,8 @@ static int read_till_nl(FILE *in)
398 char buf[SIZE+1]; 404 char buf[SIZE+1];
399 405
400 do { 406 do {
401 if (fgets(buf,sizeof(buf),in) == NULL) 407 if (!fgets(buf,SIZE,in))
402 break; 408 return 0;
403 } while (strchr(buf,'\n') == NULL); 409 } while (strchr(buf,'\n') == NULL);
404 return 1; 410 return 1;
405 } 411 }
diff --git a/src/lib/libcrypto/util/deltree.com b/src/lib/libcrypto/util/deltree.com
deleted file mode 100644
index 9f36b1a5e9..0000000000
--- a/src/lib/libcrypto/util/deltree.com
+++ /dev/null
@@ -1,34 +0,0 @@
1$! DELTREE.COM
2$
3$ call deltree 'p1'
4$ exit $status
5$
6$ deltree: subroutine ! P1 is a name of a directory
7$ on control_y then goto dt_STOP
8$ on warning then goto dt_exit
9$ _dt_def = f$trnlnm("SYS$DISK")+f$directory()
10$ if f$parse(p1) .eqs. "" then exit
11$ set default 'f$parse(p1,,,"DEVICE")''f$parse(p1,,,"DIRECTORY")'
12$ p1 = f$parse(p1,,,"NAME") + f$parse(p1,,,"TYPE")
13$ _fp = f$parse(".DIR",p1)
14$ dt_loop:
15$ _f = f$search(_fp)
16$ if _f .eqs. "" then goto dt_loopend
17$ call deltree [.'f$parse(_f,,,"NAME")']*.*
18$ goto dt_loop
19$ dt_loopend:
20$ _fp = f$parse(p1,".;*")
21$ if f$search(_fp) .eqs. "" then goto dt_exit
22$ set noon
23$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) '_fp'
24$ set on
25$ delete/nolog '_fp'
26$ dt_exit:
27$ set default '_dt_def'
28$ goto dt_end
29$ dt_STOP:
30$ set default '_dt_def'
31$ stop/id=""
32$ exit
33$ dt_end:
34$ endsubroutine
diff --git a/src/lib/libcrypto/util/libeay.num b/src/lib/libcrypto/util/libeay.num
index 93f80ba0c6..aa86b2b8b1 100644
--- a/src/lib/libcrypto/util/libeay.num
+++ b/src/lib/libcrypto/util/libeay.num
@@ -3510,6 +3510,8 @@ BIO_get_callback_arg 3902 EXIST::FUNCTION:
3510BIO_set_callback 3903 EXIST::FUNCTION: 3510BIO_set_callback 3903 EXIST::FUNCTION:
3511d2i_ASIdOrRange 3904 EXIST::FUNCTION:RFC3779 3511d2i_ASIdOrRange 3904 EXIST::FUNCTION:RFC3779
3512i2d_ASIdentifiers 3905 EXIST::FUNCTION:RFC3779 3512i2d_ASIdentifiers 3905 EXIST::FUNCTION:RFC3779
3513CRYPTO_memcmp 3906 EXIST::FUNCTION:
3514BN_consttime_swap 3907 EXIST::FUNCTION:
3513SEED_decrypt 3908 EXIST::FUNCTION:SEED 3515SEED_decrypt 3908 EXIST::FUNCTION:SEED
3514SEED_encrypt 3909 EXIST::FUNCTION:SEED 3516SEED_encrypt 3909 EXIST::FUNCTION:SEED
3515SEED_cbc_encrypt 3910 EXIST::FUNCTION:SEED 3517SEED_cbc_encrypt 3910 EXIST::FUNCTION:SEED
@@ -3687,7 +3689,7 @@ FIPS_dh_new 4073 NOEXIST::FUNCTION:
3687FIPS_corrupt_dsa_keygen 4074 NOEXIST::FUNCTION: 3689FIPS_corrupt_dsa_keygen 4074 NOEXIST::FUNCTION:
3688FIPS_dh_free 4075 NOEXIST::FUNCTION: 3690FIPS_dh_free 4075 NOEXIST::FUNCTION:
3689fips_pkey_signature_test 4076 NOEXIST::FUNCTION: 3691fips_pkey_signature_test 4076 NOEXIST::FUNCTION:
3690EVP_add_alg_module 4077 NOEXIST::FUNCTION: 3692EVP_add_alg_module 4077 EXIST::FUNCTION:
3691int_RAND_init_engine_callbacks 4078 NOEXIST::FUNCTION: 3693int_RAND_init_engine_callbacks 4078 NOEXIST::FUNCTION:
3692int_EVP_CIPHER_set_engine_callbacks 4079 NOEXIST::FUNCTION: 3694int_EVP_CIPHER_set_engine_callbacks 4079 NOEXIST::FUNCTION:
3693int_EVP_MD_init_engine_callbacks 4080 NOEXIST::FUNCTION: 3695int_EVP_MD_init_engine_callbacks 4080 NOEXIST::FUNCTION:
diff --git a/src/lib/libcrypto/util/mk1mf.pl b/src/lib/libcrypto/util/mk1mf.pl
index 458f830401..72fa089f6b 100644
--- a/src/lib/libcrypto/util/mk1mf.pl
+++ b/src/lib/libcrypto/util/mk1mf.pl
@@ -1222,7 +1222,7 @@ sub read_options
1222 } 1222 }
1223 } 1223 }
1224 } 1224 }
1225 elsif (/^([^=]*)=(.*)$/ && !/^-D/){ $VARS{$1}=$2; } 1225 elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; }
1226 elsif (/^-[lL].*$/) { $l_flags.="$_ "; } 1226 elsif (/^-[lL].*$/) { $l_flags.="$_ "; }
1227 elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/) 1227 elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/)
1228 { $c_flags.="$_ "; } 1228 { $c_flags.="$_ "; }
diff --git a/src/lib/libcrypto/util/pl/BC-32.pl b/src/lib/libcrypto/util/pl/BC-32.pl
index 1f1e13fb40..b41bb45e82 100644
--- a/src/lib/libcrypto/util/pl/BC-32.pl
+++ b/src/lib/libcrypto/util/pl/BC-32.pl
@@ -18,7 +18,7 @@ $out_def="out32";
18$tmp_def="tmp32"; 18$tmp_def="tmp32";
19$inc_def="inc32"; 19$inc_def="inc32";
20#enable max error messages, disable most common warnings 20#enable max error messages, disable most common warnings
21$cflags="-DWIN32_LEAN_AND_MEAN -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -c -tWC -tWM -DOPENSSL_SYSNAME_WIN32 -DL_ENDIAN -DDSO_WIN32 -D_stricmp=stricmp -D_strnicmp=strnicmp "; 21$cflags="-DWIN32_LEAN_AND_MEAN -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -c -tWC -tWM -DOPENSSL_SYSNAME_WIN32 -DL_ENDIAN -DDSO_WIN32 -D_stricmp=stricmp -D_strnicmp=strnicmp -D_timeb=timeb -D_ftime=ftime ";
22if ($debug) 22if ($debug)
23{ 23{
24 $cflags.="-Od -y -v -vi- -D_DEBUG"; 24 $cflags.="-Od -y -v -vi- -D_DEBUG";
@@ -38,7 +38,7 @@ $efile="";
38$exep='.exe'; 38$exep='.exe';
39if ($no_sock) 39if ($no_sock)
40 { $ex_libs=""; } 40 { $ex_libs=""; }
41else { $ex_libs="cw32mt.lib import32.lib"; } 41else { $ex_libs="cw32mt.lib import32.lib crypt32.lib ws2_32.lib"; }
42 42
43# static library stuff 43# static library stuff
44$mklib='tlib /P64'; 44$mklib='tlib /P64';
@@ -51,8 +51,8 @@ $lfile='';
51$shlib_ex_obj=""; 51$shlib_ex_obj="";
52$app_ex_obj="c0x32.obj"; 52$app_ex_obj="c0x32.obj";
53 53
54$asm='nasmw -f obj -d__omf__'; 54$asm=(`nasm -v 2>NUL` ge `nasmw -v 2>NUL`?"nasm":"nasmw")." -f obj -d__omf__";
55$asm.=" /Zi" if $debug; 55$asm.=" -g" if $debug;
56$afile='-o'; 56$afile='-o';
57 57
58$bn_mulw_obj=''; 58$bn_mulw_obj='';
diff --git a/src/lib/libcrypto/util/pl/VC-32.pl b/src/lib/libcrypto/util/pl/VC-32.pl
index c503bd52b9..3705fc73b7 100644
--- a/src/lib/libcrypto/util/pl/VC-32.pl
+++ b/src/lib/libcrypto/util/pl/VC-32.pl
@@ -27,6 +27,8 @@ $zlib_lib="zlib1.lib";
27$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g; 27$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g;
28$l_flags =~ s/-L(\S+)/\/libpath:$1/g; 28$l_flags =~ s/-L(\S+)/\/libpath:$1/g;
29 29
30my $ff = "";
31
30# C compiler stuff 32# C compiler stuff
31$cc='cl'; 33$cc='cl';
32if ($FLAVOR =~ /WIN64/) 34if ($FLAVOR =~ /WIN64/)
@@ -118,7 +120,7 @@ elsif ($FLAVOR =~ /CE/)
118 $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'})); 120 $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'}));
119 $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'})); 121 $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'}));
120 $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics... 122 $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics...
121 $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG'; 123 $dbg_cflags=' /MC /Od -DDEBUG -D_DEBUG';
122 $lflags="/nologo /opt:ref $wcelflag"; 124 $lflags="/nologo /opt:ref $wcelflag";
123 } 125 }
124else # Win32 126else # Win32
@@ -126,6 +128,7 @@ else # Win32
126 $base_cflags= " $mf_cflag"; 128 $base_cflags= " $mf_cflag";
127 my $f = $shlib || $fips ?' /MD':' /MT'; 129 my $f = $shlib || $fips ?' /MD':' /MT';
128 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib 130 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
131 $ff = "/fixed";
129 $opt_cflags=$f.' /Ox /O2 /Ob2'; 132 $opt_cflags=$f.' /Ox /O2 /Ob2';
130 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; 133 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
131 $lflags="/nologo /subsystem:console /opt:ref"; 134 $lflags="/nologo /subsystem:console /opt:ref";
@@ -318,7 +321,7 @@ sub do_lib_rule
318 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n"; 321 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
319 $ret.="\tSET FIPS_TARGET=$target\n"; 322 $ret.="\tSET FIPS_TARGET=$target\n";
320 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n"; 323 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
321 $ret.="\t\$(FIPSLINK) \$(MLFLAGS) /map $base_arg $efile$target "; 324 $ret.="\t\$(FIPSLINK) \$(MLFLAGS) $ff /map $base_arg $efile$target ";
322 $ret.="$name @<<\n \$(SHLIB_EX_OBJ) $objs \$(EX_LIBS) "; 325 $ret.="$name @<<\n \$(SHLIB_EX_OBJ) $objs \$(EX_LIBS) ";
323 $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n"; 326 $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n";
324 } 327 }
@@ -355,7 +358,7 @@ sub do_link_rule
355 $ret.="\tSET FIPS_TARGET=$target\n"; 358 $ret.="\tSET FIPS_TARGET=$target\n";
356 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n"; 359 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
357 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n"; 360 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
358 $ret.="\t\$(FIPSLINK) \$(LFLAGS) /map $efile$target @<<\n"; 361 $ret.="\t\$(FIPSLINK) \$(LFLAGS) $ff /map $efile$target @<<\n";
359 $ret.="\t\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n"; 362 $ret.="\t\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n";
360 } 363 }
361 else 364 else
diff --git a/src/lib/libcrypto/x509/by_dir.c b/src/lib/libcrypto/x509/by_dir.c
index 27ca5150c1..c6602dae4f 100644
--- a/src/lib/libcrypto/x509/by_dir.c
+++ b/src/lib/libcrypto/x509/by_dir.c
@@ -218,7 +218,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
218 218
219 s=dir; 219 s=dir;
220 p=s; 220 p=s;
221 for (;;p++) 221 do
222 { 222 {
223 if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0')) 223 if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0'))
224 { 224 {
@@ -264,9 +264,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
264 return 0; 264 return 0;
265 } 265 }
266 } 266 }
267 if (*p == '\0') 267 } while (*p++ != '\0');
268 break;
269 }
270 return 1; 268 return 1;
271 } 269 }
272 270
diff --git a/src/lib/libcrypto/x509/x509_cmp.c b/src/lib/libcrypto/x509/x509_cmp.c
index 7c2aaee2e9..352aa37434 100644
--- a/src/lib/libcrypto/x509/x509_cmp.c
+++ b/src/lib/libcrypto/x509/x509_cmp.c
@@ -86,10 +86,9 @@ unsigned long X509_issuer_and_serial_hash(X509 *a)
86 86
87 EVP_MD_CTX_init(&ctx); 87 EVP_MD_CTX_init(&ctx);
88 f=X509_NAME_oneline(a->cert_info->issuer,NULL,0); 88 f=X509_NAME_oneline(a->cert_info->issuer,NULL,0);
89 ret=strlen(f);
90 if (!EVP_DigestInit_ex(&ctx, EVP_md5(), NULL)) 89 if (!EVP_DigestInit_ex(&ctx, EVP_md5(), NULL))
91 goto err; 90 goto err;
92 if (!EVP_DigestUpdate(&ctx,(unsigned char *)f,ret)) 91 if (!EVP_DigestUpdate(&ctx,(unsigned char *)f,strlen(f)))
93 goto err; 92 goto err;
94 OPENSSL_free(f); 93 OPENSSL_free(f);
95 if(!EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data, 94 if(!EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data,
@@ -249,14 +248,14 @@ unsigned long X509_NAME_hash_old(X509_NAME *x)
249 i2d_X509_NAME(x,NULL); 248 i2d_X509_NAME(x,NULL);
250 EVP_MD_CTX_init(&md_ctx); 249 EVP_MD_CTX_init(&md_ctx);
251 EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); 250 EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
252 EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL); 251 if (EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL)
253 EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length); 252 && EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length)
254 EVP_DigestFinal_ex(&md_ctx,md,NULL); 253 && EVP_DigestFinal_ex(&md_ctx,md,NULL))
254 ret=(((unsigned long)md[0] )|((unsigned long)md[1]<<8L)|
255 ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
256 )&0xffffffffL;
255 EVP_MD_CTX_cleanup(&md_ctx); 257 EVP_MD_CTX_cleanup(&md_ctx);
256 258
257 ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)|
258 ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
259 )&0xffffffffL;
260 return(ret); 259 return(ret);
261 } 260 }
262#endif 261#endif
diff --git a/src/lib/libcrypto/x509/x509_vfy.c b/src/lib/libcrypto/x509/x509_vfy.c
index b0779db023..920066aeba 100644
--- a/src/lib/libcrypto/x509/x509_vfy.c
+++ b/src/lib/libcrypto/x509/x509_vfy.c
@@ -694,6 +694,7 @@ static int check_cert(X509_STORE_CTX *ctx)
694 X509_CRL *crl = NULL, *dcrl = NULL; 694 X509_CRL *crl = NULL, *dcrl = NULL;
695 X509 *x; 695 X509 *x;
696 int ok, cnum; 696 int ok, cnum;
697 unsigned int last_reasons;
697 cnum = ctx->error_depth; 698 cnum = ctx->error_depth;
698 x = sk_X509_value(ctx->chain, cnum); 699 x = sk_X509_value(ctx->chain, cnum);
699 ctx->current_cert = x; 700 ctx->current_cert = x;
@@ -702,6 +703,7 @@ static int check_cert(X509_STORE_CTX *ctx)
702 ctx->current_reasons = 0; 703 ctx->current_reasons = 0;
703 while (ctx->current_reasons != CRLDP_ALL_REASONS) 704 while (ctx->current_reasons != CRLDP_ALL_REASONS)
704 { 705 {
706 last_reasons = ctx->current_reasons;
705 /* Try to retrieve relevant CRL */ 707 /* Try to retrieve relevant CRL */
706 if (ctx->get_crl) 708 if (ctx->get_crl)
707 ok = ctx->get_crl(ctx, &crl, x); 709 ok = ctx->get_crl(ctx, &crl, x);
@@ -745,6 +747,15 @@ static int check_cert(X509_STORE_CTX *ctx)
745 X509_CRL_free(dcrl); 747 X509_CRL_free(dcrl);
746 crl = NULL; 748 crl = NULL;
747 dcrl = NULL; 749 dcrl = NULL;
750 /* If reasons not updated we wont get anywhere by
751 * another iteration, so exit loop.
752 */
753 if (last_reasons == ctx->current_reasons)
754 {
755 ctx->error = X509_V_ERR_UNABLE_TO_GET_CRL;
756 ok = ctx->verify_cb(0, ctx);
757 goto err;
758 }
748 } 759 }
749 err: 760 err:
750 X509_CRL_free(crl); 761 X509_CRL_free(crl);
@@ -872,7 +883,7 @@ static int crl_extension_match(X509_CRL *a, X509_CRL *b, int nid)
872 { 883 {
873 ASN1_OCTET_STRING *exta, *extb; 884 ASN1_OCTET_STRING *exta, *extb;
874 int i; 885 int i;
875 i = X509_CRL_get_ext_by_NID(a, nid, 0); 886 i = X509_CRL_get_ext_by_NID(a, nid, -1);
876 if (i >= 0) 887 if (i >= 0)
877 { 888 {
878 /* Can't have multiple occurrences */ 889 /* Can't have multiple occurrences */
@@ -883,7 +894,7 @@ static int crl_extension_match(X509_CRL *a, X509_CRL *b, int nid)
883 else 894 else
884 exta = NULL; 895 exta = NULL;
885 896
886 i = X509_CRL_get_ext_by_NID(b, nid, 0); 897 i = X509_CRL_get_ext_by_NID(b, nid, -1);
887 898
888 if (i >= 0) 899 if (i >= 0)
889 { 900 {
@@ -1451,10 +1462,9 @@ static int cert_crl(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x)
1451 * a certificate was revoked. This has since been changed since 1462 * a certificate was revoked. This has since been changed since
1452 * critical extension can change the meaning of CRL entries. 1463 * critical extension can change the meaning of CRL entries.
1453 */ 1464 */
1454 if (crl->flags & EXFLAG_CRITICAL) 1465 if (!(ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
1466 && (crl->flags & EXFLAG_CRITICAL))
1455 { 1467 {
1456 if (ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
1457 return 1;
1458 ctx->error = X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION; 1468 ctx->error = X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION;
1459 ok = ctx->verify_cb(0, ctx); 1469 ok = ctx->verify_cb(0, ctx);
1460 if(!ok) 1470 if(!ok)
diff --git a/src/lib/libcrypto/x509/x_all.c b/src/lib/libcrypto/x509/x_all.c
index b94aeeb873..e06602d65a 100644
--- a/src/lib/libcrypto/x509/x_all.c
+++ b/src/lib/libcrypto/x509/x_all.c
@@ -97,6 +97,7 @@ int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
97 97
98int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) 98int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx)
99 { 99 {
100 x->cert_info->enc.modified = 1;
100 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), 101 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF),
101 x->cert_info->signature, 102 x->cert_info->signature,
102 x->sig_alg, x->signature, x->cert_info, ctx); 103 x->sig_alg, x->signature, x->cert_info, ctx);
@@ -123,6 +124,7 @@ int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md)
123 124
124int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) 125int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx)
125 { 126 {
127 x->crl->enc.modified = 1;
126 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), 128 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO),
127 x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx); 129 x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx);
128 } 130 }
diff --git a/src/lib/libcrypto/x509v3/v3_purp.c b/src/lib/libcrypto/x509v3/v3_purp.c
index 181bd34979..ad688657e0 100644
--- a/src/lib/libcrypto/x509v3/v3_purp.c
+++ b/src/lib/libcrypto/x509v3/v3_purp.c
@@ -474,11 +474,11 @@ static void x509v3_cache_extensions(X509 *x)
474 for (i = 0; i < X509_get_ext_count(x); i++) 474 for (i = 0; i < X509_get_ext_count(x); i++)
475 { 475 {
476 ex = X509_get_ext(x, i); 476 ex = X509_get_ext(x, i);
477 if (!X509_EXTENSION_get_critical(ex))
478 continue;
479 if (OBJ_obj2nid(X509_EXTENSION_get_object(ex)) 477 if (OBJ_obj2nid(X509_EXTENSION_get_object(ex))
480 == NID_freshest_crl) 478 == NID_freshest_crl)
481 x->ex_flags |= EXFLAG_FRESHEST; 479 x->ex_flags |= EXFLAG_FRESHEST;
480 if (!X509_EXTENSION_get_critical(ex))
481 continue;
482 if (!X509_supported_extension(ex)) 482 if (!X509_supported_extension(ex))
483 { 483 {
484 x->ex_flags |= EXFLAG_CRITICAL; 484 x->ex_flags |= EXFLAG_CRITICAL;
diff --git a/src/lib/libcrypto/x86_64cpuid.pl b/src/lib/libcrypto/x86_64cpuid.pl
index 7b7b93b223..6ebfd017ea 100644
--- a/src/lib/libcrypto/x86_64cpuid.pl
+++ b/src/lib/libcrypto/x86_64cpuid.pl
@@ -11,7 +11,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
11( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or 11( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or
12die "can't locate x86_64-xlate.pl"; 12die "can't locate x86_64-xlate.pl";
13 13
14open STDOUT,"| $^X $xlate $flavour $output"; 14open OUT,"| \"$^X\" $xlate $flavour $output";
15*STDOUT=*OUT;
15 16
16($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order 17($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order
17 ("%rdi","%rsi","%rdx","%rcx"); # Unix order 18 ("%rdi","%rsi","%rdx","%rcx"); # Unix order
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c
index e4b718efa7..2e8cf681ed 100644
--- a/src/lib/libssl/d1_both.c
+++ b/src/lib/libssl/d1_both.c
@@ -220,7 +220,6 @@ dtls1_hm_fragment_free(hm_fragment *frag)
220 EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx); 220 EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx);
221 EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash); 221 EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash);
222 } 222 }
223
224 if (frag->fragment) OPENSSL_free(frag->fragment); 223 if (frag->fragment) OPENSSL_free(frag->fragment);
225 if (frag->reassembly) OPENSSL_free(frag->reassembly); 224 if (frag->reassembly) OPENSSL_free(frag->reassembly);
226 OPENSSL_free(frag); 225 OPENSSL_free(frag);
@@ -320,9 +319,10 @@ int dtls1_do_write(SSL *s, int type)
320 s->init_off -= DTLS1_HM_HEADER_LENGTH; 319 s->init_off -= DTLS1_HM_HEADER_LENGTH;
321 s->init_num += DTLS1_HM_HEADER_LENGTH; 320 s->init_num += DTLS1_HM_HEADER_LENGTH;
322 321
323 /* write atleast DTLS1_HM_HEADER_LENGTH bytes */ 322 if ( s->init_num > curr_mtu)
324 if ( len <= DTLS1_HM_HEADER_LENGTH) 323 len = curr_mtu;
325 len += DTLS1_HM_HEADER_LENGTH; 324 else
325 len = s->init_num;
326 } 326 }
327 327
328 dtls1_fix_message_header(s, frag_off, 328 dtls1_fix_message_header(s, frag_off,
diff --git a/src/lib/libssl/d1_clnt.c b/src/lib/libssl/d1_clnt.c
index a6ed09c51d..48e5e06bde 100644
--- a/src/lib/libssl/d1_clnt.c
+++ b/src/lib/libssl/d1_clnt.c
@@ -538,13 +538,6 @@ int dtls1_connect(SSL *s)
538 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); 538 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
539 if (ret <= 0) goto end; 539 if (ret <= 0) goto end;
540 540
541#ifndef OPENSSL_NO_SCTP
542 /* Change to new shared key of SCTP-Auth,
543 * will be ignored if no SCTP used.
544 */
545 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
546#endif
547
548 s->state=SSL3_ST_CW_FINISHED_A; 541 s->state=SSL3_ST_CW_FINISHED_A;
549 s->init_num=0; 542 s->init_num=0;
550 543
@@ -571,6 +564,16 @@ int dtls1_connect(SSL *s)
571 goto end; 564 goto end;
572 } 565 }
573 566
567#ifndef OPENSSL_NO_SCTP
568 if (s->hit)
569 {
570 /* Change to new shared key of SCTP-Auth,
571 * will be ignored if no SCTP used.
572 */
573 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
574 }
575#endif
576
574 dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); 577 dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
575 break; 578 break;
576 579
@@ -613,6 +616,13 @@ int dtls1_connect(SSL *s)
613 } 616 }
614 else 617 else
615 { 618 {
619#ifndef OPENSSL_NO_SCTP
620 /* Change to new shared key of SCTP-Auth,
621 * will be ignored if no SCTP used.
622 */
623 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
624#endif
625
616#ifndef OPENSSL_NO_TLSEXT 626#ifndef OPENSSL_NO_TLSEXT
617 /* Allow NewSessionTicket if ticket expected */ 627 /* Allow NewSessionTicket if ticket expected */
618 if (s->tlsext_ticket_expected) 628 if (s->tlsext_ticket_expected)
@@ -773,7 +783,7 @@ int dtls1_client_hello(SSL *s)
773 unsigned char *buf; 783 unsigned char *buf;
774 unsigned char *p,*d; 784 unsigned char *p,*d;
775 unsigned int i,j; 785 unsigned int i,j;
776 unsigned long Time,l; 786 unsigned long l;
777 SSL_COMP *comp; 787 SSL_COMP *comp;
778 788
779 buf=(unsigned char *)s->init_buf->data; 789 buf=(unsigned char *)s->init_buf->data;
@@ -798,13 +808,11 @@ int dtls1_client_hello(SSL *s)
798 808
799 /* if client_random is initialized, reuse it, we are 809 /* if client_random is initialized, reuse it, we are
800 * required to use same upon reply to HelloVerify */ 810 * required to use same upon reply to HelloVerify */
801 for (i=0;p[i]=='\0' && i<sizeof(s->s3->client_random);i++) ; 811 for (i=0;p[i]=='\0' && i<sizeof(s->s3->client_random);i++)
812 ;
802 if (i==sizeof(s->s3->client_random)) 813 if (i==sizeof(s->s3->client_random))
803 { 814 ssl_fill_hello_random(s, 0, p,
804 Time=(unsigned long)time(NULL); /* Time */ 815 sizeof(s->s3->client_random));
805 l2n(Time,p);
806 RAND_pseudo_bytes(p,sizeof(s->s3->client_random)-4);
807 }
808 816
809 /* Do the message type and length last */ 817 /* Do the message type and length last */
810 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]); 818 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]);
diff --git a/src/lib/libssl/d1_pkt.c b/src/lib/libssl/d1_pkt.c
index cfe4524553..8186462d4a 100644
--- a/src/lib/libssl/d1_pkt.c
+++ b/src/lib/libssl/d1_pkt.c
@@ -455,7 +455,7 @@ printf("\n");
455 orig_len < mac_size+1)) 455 orig_len < mac_size+1))
456 { 456 {
457 al=SSL_AD_DECODE_ERROR; 457 al=SSL_AD_DECODE_ERROR;
458 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT); 458 SSLerr(SSL_F_DTLS1_PROCESS_RECORD,SSL_R_LENGTH_TOO_SHORT);
459 goto f_err; 459 goto f_err;
460 } 460 }
461 461
@@ -480,7 +480,7 @@ printf("\n");
480 } 480 }
481 481
482 i=s->method->ssl3_enc->mac(s,md,0 /* not send */); 482 i=s->method->ssl3_enc->mac(s,md,0 /* not send */);
483 if (i < 0 || mac == NULL || timingsafe_bcmp(md, mac, (size_t)mac_size) != 0) 483 if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
484 enc_err = -1; 484 enc_err = -1;
485 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+mac_size) 485 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+mac_size)
486 enc_err = -1; 486 enc_err = -1;
@@ -847,6 +847,12 @@ start:
847 } 847 }
848 } 848 }
849 849
850 if (s->d1->listen && rr->type != SSL3_RT_HANDSHAKE)
851 {
852 rr->length = 0;
853 goto start;
854 }
855
850 /* we now have a packet which can be read and processed */ 856 /* we now have a packet which can be read and processed */
851 857
852 if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, 858 if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
@@ -1051,6 +1057,7 @@ start:
1051 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && 1057 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
1052 !s->s3->renegotiate) 1058 !s->s3->renegotiate)
1053 { 1059 {
1060 s->d1->handshake_read_seq++;
1054 s->new_session = 1; 1061 s->new_session = 1;
1055 ssl3_renegotiate(s); 1062 ssl3_renegotiate(s);
1056 if (ssl3_renegotiate_check(s)) 1063 if (ssl3_renegotiate_check(s))
diff --git a/src/lib/libssl/d1_srvr.c b/src/lib/libssl/d1_srvr.c
index 29421da9aa..9975e20873 100644
--- a/src/lib/libssl/d1_srvr.c
+++ b/src/lib/libssl/d1_srvr.c
@@ -276,10 +276,11 @@ int dtls1_accept(SSL *s)
276 case SSL3_ST_SW_HELLO_REQ_B: 276 case SSL3_ST_SW_HELLO_REQ_B:
277 277
278 s->shutdown=0; 278 s->shutdown=0;
279 dtls1_clear_record_buffer(s);
279 dtls1_start_timer(s); 280 dtls1_start_timer(s);
280 ret=dtls1_send_hello_request(s); 281 ret=dtls1_send_hello_request(s);
281 if (ret <= 0) goto end; 282 if (ret <= 0) goto end;
282 s->s3->tmp.next_state=SSL3_ST_SW_HELLO_REQ_C; 283 s->s3->tmp.next_state=SSL3_ST_SR_CLNT_HELLO_A;
283 s->state=SSL3_ST_SW_FLUSH; 284 s->state=SSL3_ST_SW_FLUSH;
284 s->init_num=0; 285 s->init_num=0;
285 286
@@ -721,10 +722,13 @@ int dtls1_accept(SSL *s)
721 if (ret <= 0) goto end; 722 if (ret <= 0) goto end;
722 723
723#ifndef OPENSSL_NO_SCTP 724#ifndef OPENSSL_NO_SCTP
724 /* Change to new shared key of SCTP-Auth, 725 if (!s->hit)
725 * will be ignored if no SCTP used. 726 {
726 */ 727 /* Change to new shared key of SCTP-Auth,
727 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); 728 * will be ignored if no SCTP used.
729 */
730 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
731 }
728#endif 732#endif
729 733
730 s->state=SSL3_ST_SW_FINISHED_A; 734 s->state=SSL3_ST_SW_FINISHED_A;
@@ -749,7 +753,16 @@ int dtls1_accept(SSL *s)
749 if (ret <= 0) goto end; 753 if (ret <= 0) goto end;
750 s->state=SSL3_ST_SW_FLUSH; 754 s->state=SSL3_ST_SW_FLUSH;
751 if (s->hit) 755 if (s->hit)
756 {
752 s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A; 757 s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A;
758
759#ifndef OPENSSL_NO_SCTP
760 /* Change to new shared key of SCTP-Auth,
761 * will be ignored if no SCTP used.
762 */
763 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
764#endif
765 }
753 else 766 else
754 { 767 {
755 s->s3->tmp.next_state=SSL_ST_OK; 768 s->s3->tmp.next_state=SSL_ST_OK;
@@ -912,15 +925,13 @@ int dtls1_send_server_hello(SSL *s)
912 unsigned char *p,*d; 925 unsigned char *p,*d;
913 int i; 926 int i;
914 unsigned int sl; 927 unsigned int sl;
915 unsigned long l,Time; 928 unsigned long l;
916 929
917 if (s->state == SSL3_ST_SW_SRVR_HELLO_A) 930 if (s->state == SSL3_ST_SW_SRVR_HELLO_A)
918 { 931 {
919 buf=(unsigned char *)s->init_buf->data; 932 buf=(unsigned char *)s->init_buf->data;
920 p=s->s3->server_random; 933 p=s->s3->server_random;
921 Time=(unsigned long)time(NULL); /* Time */ 934 ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE);
922 l2n(Time,p);
923 RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4);
924 /* Do the message type and length last */ 935 /* Do the message type and length last */
925 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]); 936 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]);
926 937
diff --git a/src/lib/libssl/dtls1.h b/src/lib/libssl/dtls1.h
index 5008bf6081..e65d501191 100644
--- a/src/lib/libssl/dtls1.h
+++ b/src/lib/libssl/dtls1.h
@@ -57,8 +57,8 @@
57 * 57 *
58 */ 58 */
59 59
60#ifndef HEADER_DTLS1_H 60#ifndef HEADER_DTLS1_H
61#define HEADER_DTLS1_H 61#define HEADER_DTLS1_H
62 62
63#include <openssl/buffer.h> 63#include <openssl/buffer.h>
64#include <openssl/pqueue.h> 64#include <openssl/pqueue.h>
@@ -72,8 +72,12 @@
72#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) 72#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)
73#include <sys/timeval.h> 73#include <sys/timeval.h>
74#else 74#else
75#if defined(OPENSSL_SYS_VXWORKS)
76#include <sys/times.h>
77#else
75#include <sys/time.h> 78#include <sys/time.h>
76#endif 79#endif
80#endif
77 81
78#ifdef __cplusplus 82#ifdef __cplusplus
79extern "C" { 83extern "C" {
diff --git a/src/lib/libssl/s23_clnt.c b/src/lib/libssl/s23_clnt.c
index 47673e740a..2b93c639dd 100644
--- a/src/lib/libssl/s23_clnt.c
+++ b/src/lib/libssl/s23_clnt.c
@@ -269,12 +269,35 @@ static int ssl23_no_ssl2_ciphers(SSL *s)
269 return 1; 269 return 1;
270 } 270 }
271 271
272/* Fill a ClientRandom or ServerRandom field of length len. Returns <= 0
273 * on failure, 1 on success. */
274int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, int len)
275 {
276 int send_time = 0;
277
278 if (len < 4)
279 return 0;
280 if (server)
281 send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
282 else
283 send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
284 if (send_time)
285 {
286 unsigned long Time = (unsigned long)time(NULL);
287 unsigned char *p = result;
288 l2n(Time, p);
289 return RAND_pseudo_bytes(p, len-4);
290 }
291 else
292 return RAND_pseudo_bytes(result, len);
293 }
294
272static int ssl23_client_hello(SSL *s) 295static int ssl23_client_hello(SSL *s)
273 { 296 {
274 unsigned char *buf; 297 unsigned char *buf;
275 unsigned char *p,*d; 298 unsigned char *p,*d;
276 int i,ch_len; 299 int i,ch_len;
277 unsigned long Time,l; 300 unsigned long l;
278 int ssl2_compat; 301 int ssl2_compat;
279 int version = 0, version_major, version_minor; 302 int version = 0, version_major, version_minor;
280#ifndef OPENSSL_NO_COMP 303#ifndef OPENSSL_NO_COMP
@@ -355,9 +378,7 @@ static int ssl23_client_hello(SSL *s)
355#endif 378#endif
356 379
357 p=s->s3->client_random; 380 p=s->s3->client_random;
358 Time=(unsigned long)time(NULL); /* Time */ 381 if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0)
359 l2n(Time,p);
360 if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
361 return -1; 382 return -1;
362 383
363 if (version == TLS1_2_VERSION) 384 if (version == TLS1_2_VERSION)
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c
index ed0fcfc532..53b9390fdd 100644
--- a/src/lib/libssl/s3_both.c
+++ b/src/lib/libssl/s3_both.c
@@ -206,10 +206,10 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
206 206
207#ifndef OPENSSL_NO_NEXTPROTONEG 207#ifndef OPENSSL_NO_NEXTPROTONEG
208/* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ 208/* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */
209static void ssl3_take_mac(SSL *s) { 209static void ssl3_take_mac(SSL *s)
210 {
210 const char *sender; 211 const char *sender;
211 int slen; 212 int slen;
212
213 /* If no new cipher setup return immediately: other functions will 213 /* If no new cipher setup return immediately: other functions will
214 * set the appropriate error. 214 * set the appropriate error.
215 */ 215 */
@@ -228,7 +228,7 @@ static void ssl3_take_mac(SSL *s) {
228 228
229 s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, 229 s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
230 sender,slen,s->s3->tmp.peer_finish_md); 230 sender,slen,s->s3->tmp.peer_finish_md);
231} 231 }
232#endif 232#endif
233 233
234int ssl3_get_finished(SSL *s, int a, int b) 234int ssl3_get_finished(SSL *s, int a, int b)
@@ -238,8 +238,9 @@ int ssl3_get_finished(SSL *s, int a, int b)
238 unsigned char *p; 238 unsigned char *p;
239 239
240#ifdef OPENSSL_NO_NEXTPROTONEG 240#ifdef OPENSSL_NO_NEXTPROTONEG
241 /* the mac has already been generated when we received the change 241 /* the mac has already been generated when we received the
242 * cipher spec message and is in s->s3->tmp.peer_finish_md. */ 242 * change cipher spec message and is in s->s3->tmp.peer_finish_md.
243 */
243#endif 244#endif
244 245
245 n=s->method->ssl_get_message(s, 246 n=s->method->ssl_get_message(s,
@@ -270,7 +271,7 @@ int ssl3_get_finished(SSL *s, int a, int b)
270 goto f_err; 271 goto f_err;
271 } 272 }
272 273
273 if (timingsafe_bcmp(p, s->s3->tmp.peer_finish_md, i) != 0) 274 if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0)
274 { 275 {
275 al=SSL_AD_DECRYPT_ERROR; 276 al=SSL_AD_DECRYPT_ERROR;
276 SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED); 277 SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED);
@@ -544,12 +545,14 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
544 s->init_num += i; 545 s->init_num += i;
545 n -= i; 546 n -= i;
546 } 547 }
548
547#ifndef OPENSSL_NO_NEXTPROTONEG 549#ifndef OPENSSL_NO_NEXTPROTONEG
548 /* If receiving Finished, record MAC of prior handshake messages for 550 /* If receiving Finished, record MAC of prior handshake messages for
549 * Finished verification. */ 551 * Finished verification. */
550 if (*s->init_buf->data == SSL3_MT_FINISHED) 552 if (*s->init_buf->data == SSL3_MT_FINISHED)
551 ssl3_take_mac(s); 553 ssl3_take_mac(s);
552#endif 554#endif
555
553 /* Feed this message into MAC computation. */ 556 /* Feed this message into MAC computation. */
554 ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); 557 ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4);
555 if (s->msg_callback) 558 if (s->msg_callback)
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c
index b80d052e1f..a6b3c01afa 100644
--- a/src/lib/libssl/s3_clnt.c
+++ b/src/lib/libssl/s3_clnt.c
@@ -459,7 +459,6 @@ int ssl3_connect(SSL *s)
459 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); 459 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
460 if (ret <= 0) goto end; 460 if (ret <= 0) goto end;
461 461
462
463#if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG) 462#if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
464 s->state=SSL3_ST_CW_FINISHED_A; 463 s->state=SSL3_ST_CW_FINISHED_A;
465#else 464#else
@@ -656,7 +655,7 @@ int ssl3_client_hello(SSL *s)
656 unsigned char *buf; 655 unsigned char *buf;
657 unsigned char *p,*d; 656 unsigned char *p,*d;
658 int i; 657 int i;
659 unsigned long Time,l; 658 unsigned long l;
660#ifndef OPENSSL_NO_COMP 659#ifndef OPENSSL_NO_COMP
661 int j; 660 int j;
662 SSL_COMP *comp; 661 SSL_COMP *comp;
@@ -681,9 +680,8 @@ int ssl3_client_hello(SSL *s)
681 /* else use the pre-loaded session */ 680 /* else use the pre-loaded session */
682 681
683 p=s->s3->client_random; 682 p=s->s3->client_random;
684 Time=(unsigned long)time(NULL); /* Time */ 683
685 l2n(Time,p); 684 if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0)
686 if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
687 goto err; 685 goto err;
688 686
689 /* Do the message type and length last */ 687 /* Do the message type and length last */
@@ -987,7 +985,10 @@ int ssl3_get_server_hello(SSL *s)
987 * client authentication. 985 * client authentication.
988 */ 986 */
989 if (TLS1_get_version(s) < TLS1_2_VERSION && !ssl3_digest_cached_records(s)) 987 if (TLS1_get_version(s) < TLS1_2_VERSION && !ssl3_digest_cached_records(s))
988 {
989 al = SSL_AD_INTERNAL_ERROR;
990 goto f_err; 990 goto f_err;
991 }
991 /* lets get the compression algorithm */ 992 /* lets get the compression algorithm */
992 /* COMPRESSION */ 993 /* COMPRESSION */
993#ifdef OPENSSL_NO_COMP 994#ifdef OPENSSL_NO_COMP
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index b73b5ac87f..c4ef2738d7 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -1125,7 +1125,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1125 0, /* not implemented (non-ephemeral DH) */ 1125 0, /* not implemented (non-ephemeral DH) */
1126 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, 1126 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
1127 TLS1_CK_DH_DSS_WITH_AES_128_SHA256, 1127 TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
1128 SSL_kDHr, 1128 SSL_kDHd,
1129 SSL_aDH, 1129 SSL_aDH,
1130 SSL_AES128, 1130 SSL_AES128,
1131 SSL_SHA256, 1131 SSL_SHA256,
@@ -1407,7 +1407,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1407 0, /* not implemented (non-ephemeral DH) */ 1407 0, /* not implemented (non-ephemeral DH) */
1408 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, 1408 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
1409 TLS1_CK_DH_DSS_WITH_AES_256_SHA256, 1409 TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
1410 SSL_kDHr, 1410 SSL_kDHd,
1411 SSL_aDH, 1411 SSL_aDH,
1412 SSL_AES256, 1412 SSL_AES256,
1413 SSL_SHA256, 1413 SSL_SHA256,
@@ -1683,7 +1683,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1683 SSL_3DES, 1683 SSL_3DES,
1684 SSL_SHA1, 1684 SSL_SHA1,
1685 SSL_TLSV1, 1685 SSL_TLSV1,
1686 SSL_NOT_EXP|SSL_HIGH, 1686 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1687 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 1687 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1688 168, 1688 168,
1689 168, 1689 168,
@@ -1699,7 +1699,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1699 SSL_AES128, 1699 SSL_AES128,
1700 SSL_SHA1, 1700 SSL_SHA1,
1701 SSL_TLSV1, 1701 SSL_TLSV1,
1702 SSL_NOT_EXP|SSL_HIGH, 1702 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1703 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 1703 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1704 128, 1704 128,
1705 128, 1705 128,
@@ -1715,7 +1715,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1715 SSL_AES256, 1715 SSL_AES256,
1716 SSL_SHA1, 1716 SSL_SHA1,
1717 SSL_TLSV1, 1717 SSL_TLSV1,
1718 SSL_NOT_EXP|SSL_HIGH, 1718 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1719 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 1719 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1720 256, 1720 256,
1721 256, 1721 256,
@@ -1958,7 +1958,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1958 0, 1958 0,
1959 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, 1959 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
1960 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, 1960 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
1961 SSL_kDHr, 1961 SSL_kDHd,
1962 SSL_aDH, 1962 SSL_aDH,
1963 SSL_AES128GCM, 1963 SSL_AES128GCM,
1964 SSL_AEAD, 1964 SSL_AEAD,
@@ -1974,7 +1974,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1974 0, 1974 0,
1975 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, 1975 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
1976 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, 1976 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
1977 SSL_kDHr, 1977 SSL_kDHd,
1978 SSL_aDH, 1978 SSL_aDH,
1979 SSL_AES256GCM, 1979 SSL_AES256GCM,
1980 SSL_AEAD, 1980 SSL_AEAD,
@@ -2669,7 +2669,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2669 1, 2669 1,
2670 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, 2670 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
2671 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, 2671 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
2672 SSL_kECDHe, 2672 SSL_kECDHr,
2673 SSL_aECDH, 2673 SSL_aECDH,
2674 SSL_AES128, 2674 SSL_AES128,
2675 SSL_SHA256, 2675 SSL_SHA256,
@@ -2685,7 +2685,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2685 1, 2685 1,
2686 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, 2686 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
2687 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, 2687 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
2688 SSL_kECDHe, 2688 SSL_kECDHr,
2689 SSL_aECDH, 2689 SSL_aECDH,
2690 SSL_AES256, 2690 SSL_AES256,
2691 SSL_SHA384, 2691 SSL_SHA384,
@@ -2799,7 +2799,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2799 1, 2799 1,
2800 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, 2800 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2801 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, 2801 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2802 SSL_kECDHe, 2802 SSL_kECDHr,
2803 SSL_aECDH, 2803 SSL_aECDH,
2804 SSL_AES128GCM, 2804 SSL_AES128GCM,
2805 SSL_AEAD, 2805 SSL_AEAD,
@@ -2815,7 +2815,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2815 1, 2815 1,
2816 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, 2816 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2817 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, 2817 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2818 SSL_kECDHe, 2818 SSL_kECDHr,
2819 SSL_aECDH, 2819 SSL_aECDH,
2820 SSL_AES256GCM, 2820 SSL_AES256GCM,
2821 SSL_AEAD, 2821 SSL_AEAD,
@@ -3037,6 +3037,11 @@ void ssl3_clear(SSL *s)
3037 s->s3->tmp.ecdh = NULL; 3037 s->s3->tmp.ecdh = NULL;
3038 } 3038 }
3039#endif 3039#endif
3040#ifndef OPENSSL_NO_TLSEXT
3041#ifndef OPENSSL_NO_EC
3042 s->s3->is_probably_safari = 0;
3043#endif /* !OPENSSL_NO_EC */
3044#endif /* !OPENSSL_NO_TLSEXT */
3040 3045
3041 rp = s->s3->rbuf.buf; 3046 rp = s->s3->rbuf.buf;
3042 wp = s->s3->wbuf.buf; 3047 wp = s->s3->wbuf.buf;
@@ -4016,6 +4021,13 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
4016 ii=sk_SSL_CIPHER_find(allow,c); 4021 ii=sk_SSL_CIPHER_find(allow,c);
4017 if (ii >= 0) 4022 if (ii >= 0)
4018 { 4023 {
4024#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT)
4025 if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari)
4026 {
4027 if (!ret) ret=sk_SSL_CIPHER_value(allow,ii);
4028 continue;
4029 }
4030#endif
4019 ret=sk_SSL_CIPHER_value(allow,ii); 4031 ret=sk_SSL_CIPHER_value(allow,ii);
4020 break; 4032 break;
4021 } 4033 }
diff --git a/src/lib/libssl/s3_pkt.c b/src/lib/libssl/s3_pkt.c
index 722ed9a858..96ba63262e 100644
--- a/src/lib/libssl/s3_pkt.c
+++ b/src/lib/libssl/s3_pkt.c
@@ -335,7 +335,7 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length);
335 if (version != s->version) 335 if (version != s->version)
336 { 336 {
337 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); 337 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER);
338 if ((s->version & 0xFF00) == (version & 0xFF00)) 338 if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash)
339 /* Send back error using their minor version number :-) */ 339 /* Send back error using their minor version number :-) */
340 s->version = (unsigned short)version; 340 s->version = (unsigned short)version;
341 al=SSL_AD_PROTOCOL_VERSION; 341 al=SSL_AD_PROTOCOL_VERSION;
@@ -407,7 +407,7 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length);
407 if (enc_err == 0) 407 if (enc_err == 0)
408 { 408 {
409 al=SSL_AD_DECRYPTION_FAILED; 409 al=SSL_AD_DECRYPTION_FAILED;
410 SSLerr(SSL_F_TLS1_ENC,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); 410 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG);
411 goto f_err; 411 goto f_err;
412 } 412 }
413 413
@@ -467,7 +467,7 @@ printf("\n");
467 } 467 }
468 468
469 i=s->method->ssl3_enc->mac(s,md,0 /* not send */); 469 i=s->method->ssl3_enc->mac(s,md,0 /* not send */);
470 if (i < 0 || mac == NULL || timingsafe_bcmp(md, mac, (size_t)mac_size) != 0) 470 if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
471 enc_err = -1; 471 enc_err = -1;
472 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size) 472 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size)
473 enc_err = -1; 473 enc_err = -1;
@@ -748,6 +748,7 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
748 * bytes and record version number > TLS 1.0 748 * bytes and record version number > TLS 1.0
749 */ 749 */
750 if (s->state == SSL3_ST_CW_CLNT_HELLO_B 750 if (s->state == SSL3_ST_CW_CLNT_HELLO_B
751 && !s->renegotiate
751 && TLS1_get_version(s) > TLS1_VERSION) 752 && TLS1_get_version(s) > TLS1_VERSION)
752 *(p++) = 0x1; 753 *(p++) = 0x1;
753 else 754 else
@@ -1054,7 +1055,7 @@ start:
1054 { 1055 {
1055 s->rstate=SSL_ST_READ_HEADER; 1056 s->rstate=SSL_ST_READ_HEADER;
1056 rr->off=0; 1057 rr->off=0;
1057 if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0) 1058 if (s->mode & SSL_MODE_RELEASE_BUFFERS)
1058 ssl3_release_read_buffer(s); 1059 ssl3_release_read_buffer(s);
1059 } 1060 }
1060 } 1061 }
@@ -1242,7 +1243,7 @@ start:
1242 goto f_err; 1243 goto f_err;
1243 } 1244 }
1244#ifdef SSL_AD_MISSING_SRP_USERNAME 1245#ifdef SSL_AD_MISSING_SRP_USERNAME
1245 if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) 1246 else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME)
1246 return(0); 1247 return(0);
1247#endif 1248#endif
1248 } 1249 }
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c
index 118939fabb..9ac19c05f2 100644
--- a/src/lib/libssl/s3_srvr.c
+++ b/src/lib/libssl/s3_srvr.c
@@ -191,7 +191,8 @@ static int ssl_check_srp_ext_ClientHello(SSL *s, int *al)
191 { 191 {
192 if(s->srp_ctx.login == NULL) 192 if(s->srp_ctx.login == NULL)
193 { 193 {
194 /* There isn't any srp login extension !!! */ 194 /* RFC 5054 says SHOULD reject,
195 we do so if There is no srp login name */
195 ret = SSL3_AL_FATAL; 196 ret = SSL3_AL_FATAL;
196 *al = SSL_AD_UNKNOWN_PSK_IDENTITY; 197 *al = SSL_AD_UNKNOWN_PSK_IDENTITY;
197 } 198 }
@@ -378,6 +379,7 @@ int ssl3_accept(SSL *s)
378 } 379 }
379 } 380 }
380#endif 381#endif
382
381 s->renegotiate = 2; 383 s->renegotiate = 2;
382 s->state=SSL3_ST_SW_SRVR_HELLO_A; 384 s->state=SSL3_ST_SW_SRVR_HELLO_A;
383 s->init_num=0; 385 s->init_num=0;
@@ -956,7 +958,8 @@ int ssl3_get_client_hello(SSL *s)
956 (s->version != DTLS1_VERSION && s->client_version < s->version)) 958 (s->version != DTLS1_VERSION && s->client_version < s->version))
957 { 959 {
958 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER); 960 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER);
959 if ((s->client_version>>8) == SSL3_VERSION_MAJOR) 961 if ((s->client_version>>8) == SSL3_VERSION_MAJOR &&
962 !s->enc_write_ctx && !s->write_hash)
960 { 963 {
961 /* similar to ssl3_get_record, send alert using remote version number */ 964 /* similar to ssl3_get_record, send alert using remote version number */
962 s->version = s->client_version; 965 s->version = s->client_version;
@@ -1181,7 +1184,7 @@ int ssl3_get_client_hello(SSL *s)
1181 goto f_err; 1184 goto f_err;
1182 } 1185 }
1183 } 1186 }
1184 if (ssl_check_clienthello_tlsext(s) <= 0) { 1187 if (ssl_check_clienthello_tlsext_early(s) <= 0) {
1185 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); 1188 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT);
1186 goto err; 1189 goto err;
1187 } 1190 }
@@ -1191,12 +1194,9 @@ int ssl3_get_client_hello(SSL *s)
1191 * server_random before calling tls_session_secret_cb in order to allow 1194 * server_random before calling tls_session_secret_cb in order to allow
1192 * SessionTicket processing to use it in key derivation. */ 1195 * SessionTicket processing to use it in key derivation. */
1193 { 1196 {
1194 unsigned long Time;
1195 unsigned char *pos; 1197 unsigned char *pos;
1196 Time=(unsigned long)time(NULL); /* Time */
1197 pos=s->s3->server_random; 1198 pos=s->s3->server_random;
1198 l2n(Time,pos); 1199 if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0)
1199 if (RAND_pseudo_bytes(pos,SSL3_RANDOM_SIZE-4) <= 0)
1200 { 1200 {
1201 al=SSL_AD_INTERNAL_ERROR; 1201 al=SSL_AD_INTERNAL_ERROR;
1202 goto f_err; 1202 goto f_err;
@@ -1389,7 +1389,10 @@ int ssl3_get_client_hello(SSL *s)
1389 if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER)) 1389 if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER))
1390 { 1390 {
1391 if (!ssl3_digest_cached_records(s)) 1391 if (!ssl3_digest_cached_records(s))
1392 {
1393 al = SSL_AD_INTERNAL_ERROR;
1392 goto f_err; 1394 goto f_err;
1395 }
1393 } 1396 }
1394 1397
1395 /* we now have the following setup. 1398 /* we now have the following setup.
@@ -1403,6 +1406,16 @@ int ssl3_get_client_hello(SSL *s)
1403 * s->tmp.new_cipher - the new cipher to use. 1406 * s->tmp.new_cipher - the new cipher to use.
1404 */ 1407 */
1405 1408
1409 /* Handles TLS extensions that we couldn't check earlier */
1410 if (s->version >= SSL3_VERSION)
1411 {
1412 if (ssl_check_clienthello_tlsext_late(s) <= 0)
1413 {
1414 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
1415 goto err;
1416 }
1417 }
1418
1406 if (ret < 0) ret=1; 1419 if (ret < 0) ret=1;
1407 if (0) 1420 if (0)
1408 { 1421 {
@@ -1420,19 +1433,13 @@ int ssl3_send_server_hello(SSL *s)
1420 unsigned char *p,*d; 1433 unsigned char *p,*d;
1421 int i,sl; 1434 int i,sl;
1422 unsigned long l; 1435 unsigned long l;
1423#ifdef OPENSSL_NO_TLSEXT
1424 unsigned long Time;
1425#endif
1426 1436
1427 if (s->state == SSL3_ST_SW_SRVR_HELLO_A) 1437 if (s->state == SSL3_ST_SW_SRVR_HELLO_A)
1428 { 1438 {
1429 buf=(unsigned char *)s->init_buf->data; 1439 buf=(unsigned char *)s->init_buf->data;
1430#ifdef OPENSSL_NO_TLSEXT 1440#ifdef OPENSSL_NO_TLSEXT
1431 p=s->s3->server_random; 1441 p=s->s3->server_random;
1432 /* Generate server_random if it was not needed previously */ 1442 if (ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE) <= 0)
1433 Time=(unsigned long)time(NULL); /* Time */
1434 l2n(Time,p);
1435 if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
1436 return -1; 1443 return -1;
1437#endif 1444#endif
1438 /* Do the message type and length last */ 1445 /* Do the message type and length last */
@@ -1823,7 +1830,7 @@ int ssl3_send_server_key_exchange(SSL *s)
1823 SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); 1830 SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
1824 goto f_err; 1831 goto f_err;
1825 } 1832 }
1826 for (i=0; r[i] != NULL && i<4; i++) 1833 for (i=0; i < 4 && r[i] != NULL; i++)
1827 { 1834 {
1828 nr[i]=BN_num_bytes(r[i]); 1835 nr[i]=BN_num_bytes(r[i]);
1829#ifndef OPENSSL_NO_SRP 1836#ifndef OPENSSL_NO_SRP
@@ -1859,7 +1866,7 @@ int ssl3_send_server_key_exchange(SSL *s)
1859 d=(unsigned char *)s->init_buf->data; 1866 d=(unsigned char *)s->init_buf->data;
1860 p= &(d[4]); 1867 p= &(d[4]);
1861 1868
1862 for (i=0; r[i] != NULL && i<4; i++) 1869 for (i=0; i < 4 && r[i] != NULL; i++)
1863 { 1870 {
1864#ifndef OPENSSL_NO_SRP 1871#ifndef OPENSSL_NO_SRP
1865 if ((i == 2) && (type & SSL_kSRP)) 1872 if ((i == 2) && (type & SSL_kSRP))
diff --git a/src/lib/libssl/src/CHANGES b/src/lib/libssl/src/CHANGES
index 7013e4c12c..4fcfd1d4be 100644
--- a/src/lib/libssl/src/CHANGES
+++ b/src/lib/libssl/src/CHANGES
@@ -2,6 +2,104 @@
2 OpenSSL CHANGES 2 OpenSSL CHANGES
3 _______________ 3 _______________
4 4
5 Changes between 1.0.1f and 1.0.1g [7 Apr 2014]
6
7 *) A missing bounds check in the handling of the TLS heartbeat extension
8 can be used to reveal up to 64k of memory to a connected client or
9 server.
10
11 Thanks for Neel Mehta of Google Security for discovering this bug and to
12 Adam Langley <agl@chromium.org> and Bodo Moeller <bmoeller@acm.org> for
13 preparing the fix (CVE-2014-0160)
14 [Adam Langley, Bodo Moeller]
15
16 *) Fix for the attack described in the paper "Recovering OpenSSL
17 ECDSA Nonces Using the FLUSH+RELOAD Cache Side-channel Attack"
18 by Yuval Yarom and Naomi Benger. Details can be obtained from:
19 http://eprint.iacr.org/2014/140
20
21 Thanks to Yuval Yarom and Naomi Benger for discovering this
22 flaw and to Yuval Yarom for supplying a fix (CVE-2014-0076)
23 [Yuval Yarom and Naomi Benger]
24
25 *) TLS pad extension: draft-agl-tls-padding-03
26
27 Workaround for the "TLS hang bug" (see FAQ and PR#2771): if the
28 TLS client Hello record length value would otherwise be > 255 and
29 less that 512 pad with a dummy extension containing zeroes so it
30 is at least 512 bytes long.
31
32 [Adam Langley, Steve Henson]
33
34 Changes between 1.0.1e and 1.0.1f [6 Jan 2014]
35
36 *) Fix for TLS record tampering bug. A carefully crafted invalid
37 handshake could crash OpenSSL with a NULL pointer exception.
38 Thanks to Anton Johansson for reporting this issues.
39 (CVE-2013-4353)
40
41 *) Keep original DTLS digest and encryption contexts in retransmission
42 structures so we can use the previous session parameters if they need
43 to be resent. (CVE-2013-6450)
44 [Steve Henson]
45
46 *) Add option SSL_OP_SAFARI_ECDHE_ECDSA_BUG (part of SSL_OP_ALL) which
47 avoids preferring ECDHE-ECDSA ciphers when the client appears to be
48 Safari on OS X. Safari on OS X 10.8..10.8.3 advertises support for
49 several ECDHE-ECDSA ciphers, but fails to negotiate them. The bug
50 is fixed in OS X 10.8.4, but Apple have ruled out both hot fixing
51 10.8..10.8.3 and forcing users to upgrade to 10.8.4 or newer.
52 [Rob Stradling, Adam Langley]
53
54 Changes between 1.0.1d and 1.0.1e [11 Feb 2013]
55
56 *) Correct fix for CVE-2013-0169. The original didn't work on AES-NI
57 supporting platforms or when small records were transferred.
58 [Andy Polyakov, Steve Henson]
59
60 Changes between 1.0.1c and 1.0.1d [5 Feb 2013]
61
62 *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time.
63
64 This addresses the flaw in CBC record processing discovered by
65 Nadhem Alfardan and Kenny Paterson. Details of this attack can be found
66 at: http://www.isg.rhul.ac.uk/tls/
67
68 Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
69 Security Group at Royal Holloway, University of London
70 (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and
71 Emilia Käsper for the initial patch.
72 (CVE-2013-0169)
73 [Emilia Käsper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson]
74
75 *) Fix flaw in AESNI handling of TLS 1.2 and 1.1 records for CBC mode
76 ciphersuites which can be exploited in a denial of service attack.
77 Thanks go to and to Adam Langley <agl@chromium.org> for discovering
78 and detecting this bug and to Wolfgang Ettlinger
79 <wolfgang.ettlinger@gmail.com> for independently discovering this issue.
80 (CVE-2012-2686)
81 [Adam Langley]
82
83 *) Return an error when checking OCSP signatures when key is NULL.
84 This fixes a DoS attack. (CVE-2013-0166)
85 [Steve Henson]
86
87 *) Make openssl verify return errors.
88 [Chris Palmer <palmer@google.com> and Ben Laurie]
89
90 *) Call OCSP Stapling callback after ciphersuite has been chosen, so
91 the right response is stapled. Also change SSL_get_certificate()
92 so it returns the certificate actually sent.
93 See http://rt.openssl.org/Ticket/Display.html?id=2836.
94 [Rob Stradling <rob.stradling@comodo.com>]
95
96 *) Fix possible deadlock when decoding public keys.
97 [Steve Henson]
98
99 *) Don't use TLS 1.0 record version number in initial client hello
100 if renegotiating.
101 [Steve Henson]
102
5 Changes between 1.0.1b and 1.0.1c [10 May 2012] 103 Changes between 1.0.1b and 1.0.1c [10 May 2012]
6 104
7 *) Sanity check record length before skipping explicit IV in TLS 105 *) Sanity check record length before skipping explicit IV in TLS
@@ -357,6 +455,63 @@
357 Add command line options to s_client/s_server. 455 Add command line options to s_client/s_server.
358 [Steve Henson] 456 [Steve Henson]
359 457
458 Changes between 1.0.0j and 1.0.0k [5 Feb 2013]
459
460 *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time.
461
462 This addresses the flaw in CBC record processing discovered by
463 Nadhem Alfardan and Kenny Paterson. Details of this attack can be found
464 at: http://www.isg.rhul.ac.uk/tls/
465
466 Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
467 Security Group at Royal Holloway, University of London
468 (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and
469 Emilia Käsper for the initial patch.
470 (CVE-2013-0169)
471 [Emilia Käsper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson]
472
473 *) Return an error when checking OCSP signatures when key is NULL.
474 This fixes a DoS attack. (CVE-2013-0166)
475 [Steve Henson]
476
477 *) Call OCSP Stapling callback after ciphersuite has been chosen, so
478 the right response is stapled. Also change SSL_get_certificate()
479 so it returns the certificate actually sent.
480 See http://rt.openssl.org/Ticket/Display.html?id=2836.
481 (This is a backport)
482 [Rob Stradling <rob.stradling@comodo.com>]
483
484 *) Fix possible deadlock when decoding public keys.
485 [Steve Henson]
486
487 Changes between 1.0.0i and 1.0.0j [10 May 2012]
488
489 [NB: OpenSSL 1.0.0i and later 1.0.0 patch levels were released after
490 OpenSSL 1.0.1.]
491
492 *) Sanity check record length before skipping explicit IV in DTLS
493 to fix DoS attack.
494
495 Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic
496 fuzzing as a service testing platform.
497 (CVE-2012-2333)
498 [Steve Henson]
499
500 *) Initialise tkeylen properly when encrypting CMS messages.
501 Thanks to Solar Designer of Openwall for reporting this issue.
502 [Steve Henson]
503
504 Changes between 1.0.0h and 1.0.0i [19 Apr 2012]
505
506 *) Check for potentially exploitable overflows in asn1_d2i_read_bio
507 BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer
508 in CRYPTO_realloc_clean.
509
510 Thanks to Tavis Ormandy, Google Security Team, for discovering this
511 issue and to Adam Langley <agl@chromium.org> for fixing it.
512 (CVE-2012-2110)
513 [Adam Langley (Google), Tavis Ormandy, Google Security Team]
514
360 Changes between 1.0.0g and 1.0.0h [12 Mar 2012] 515 Changes between 1.0.0g and 1.0.0h [12 Mar 2012]
361 516
362 *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness 517 *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness
@@ -1347,6 +1502,86 @@
1347 *) Change 'Configure' script to enable Camellia by default. 1502 *) Change 'Configure' script to enable Camellia by default.
1348 [NTT] 1503 [NTT]
1349 1504
1505 Changes between 0.9.8x and 0.9.8y [5 Feb 2013]
1506
1507 *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time.
1508
1509 This addresses the flaw in CBC record processing discovered by
1510 Nadhem Alfardan and Kenny Paterson. Details of this attack can be found
1511 at: http://www.isg.rhul.ac.uk/tls/
1512
1513 Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
1514 Security Group at Royal Holloway, University of London
1515 (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and
1516 Emilia Käsper for the initial patch.
1517 (CVE-2013-0169)
1518 [Emilia Käsper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson]
1519
1520 *) Return an error when checking OCSP signatures when key is NULL.
1521 This fixes a DoS attack. (CVE-2013-0166)
1522 [Steve Henson]
1523
1524 *) Call OCSP Stapling callback after ciphersuite has been chosen, so
1525 the right response is stapled. Also change SSL_get_certificate()
1526 so it returns the certificate actually sent.
1527 See http://rt.openssl.org/Ticket/Display.html?id=2836.
1528 (This is a backport)
1529 [Rob Stradling <rob.stradling@comodo.com>]
1530
1531 *) Fix possible deadlock when decoding public keys.
1532 [Steve Henson]
1533
1534 Changes between 0.9.8w and 0.9.8x [10 May 2012]
1535
1536 *) Sanity check record length before skipping explicit IV in DTLS
1537 to fix DoS attack.
1538
1539 Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic
1540 fuzzing as a service testing platform.
1541 (CVE-2012-2333)
1542 [Steve Henson]
1543
1544 *) Initialise tkeylen properly when encrypting CMS messages.
1545 Thanks to Solar Designer of Openwall for reporting this issue.
1546 [Steve Henson]
1547
1548 Changes between 0.9.8v and 0.9.8w [23 Apr 2012]
1549
1550 *) The fix for CVE-2012-2110 did not take into account that the
1551 'len' argument to BUF_MEM_grow and BUF_MEM_grow_clean is an
1552 int in OpenSSL 0.9.8, making it still vulnerable. Fix by
1553 rejecting negative len parameter. (CVE-2012-2131)
1554 [Tomas Hoger <thoger@redhat.com>]
1555
1556 Changes between 0.9.8u and 0.9.8v [19 Apr 2012]
1557
1558 *) Check for potentially exploitable overflows in asn1_d2i_read_bio
1559 BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer
1560 in CRYPTO_realloc_clean.
1561
1562 Thanks to Tavis Ormandy, Google Security Team, for discovering this
1563 issue and to Adam Langley <agl@chromium.org> for fixing it.
1564 (CVE-2012-2110)
1565 [Adam Langley (Google), Tavis Ormandy, Google Security Team]
1566
1567 Changes between 0.9.8t and 0.9.8u [12 Mar 2012]
1568
1569 *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness
1570 in CMS and PKCS7 code. When RSA decryption fails use a random key for
1571 content decryption and always return the same error. Note: this attack
1572 needs on average 2^20 messages so it only affects automated senders. The
1573 old behaviour can be reenabled in the CMS code by setting the
1574 CMS_DEBUG_DECRYPT flag: this is useful for debugging and testing where
1575 an MMA defence is not necessary.
1576 Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for discovering
1577 this issue. (CVE-2012-0884)
1578 [Steve Henson]
1579
1580 *) Fix CVE-2011-4619: make sure we really are receiving a
1581 client hello before rejecting multiple SGC restarts. Thanks to
1582 Ivan Nestlerode <inestlerode@us.ibm.com> for discovering this bug.
1583 [Steve Henson]
1584
1350 Changes between 0.9.8s and 0.9.8t [18 Jan 2012] 1585 Changes between 0.9.8s and 0.9.8t [18 Jan 2012]
1351 1586
1352 *) Fix for DTLS DoS issue introduced by fix for CVE-2011-4109. 1587 *) Fix for DTLS DoS issue introduced by fix for CVE-2011-4109.
@@ -1354,7 +1589,7 @@
1354 Development, Cisco Systems, Inc. for discovering this bug and 1589 Development, Cisco Systems, Inc. for discovering this bug and
1355 preparing a fix. (CVE-2012-0050) 1590 preparing a fix. (CVE-2012-0050)
1356 [Antonio Martin] 1591 [Antonio Martin]
1357 1592
1358 Changes between 0.9.8r and 0.9.8s [4 Jan 2012] 1593 Changes between 0.9.8r and 0.9.8s [4 Jan 2012]
1359 1594
1360 *) Nadhem Alfardan and Kenny Paterson have discovered an extension 1595 *) Nadhem Alfardan and Kenny Paterson have discovered an extension
diff --git a/src/lib/libssl/src/Configure b/src/lib/libssl/src/Configure
index cbbf4de8b2..de78469b9f 100644
--- a/src/lib/libssl/src/Configure
+++ b/src/lib/libssl/src/Configure
@@ -171,20 +171,22 @@ my %table=(
171"debug-ben-openbsd","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::", 171"debug-ben-openbsd","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
172"debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::", 172"debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
173"debug-ben-debug", "gcc44:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O2 -pipe::(unknown)::::::", 173"debug-ben-debug", "gcc44:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O2 -pipe::(unknown)::::::",
174"debug-ben-debug-64", "gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
174"debug-ben-macos", "cc:$gcc_devteam_warn -arch i386 -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::-Wl,-search_paths_first::::", 175"debug-ben-macos", "cc:$gcc_devteam_warn -arch i386 -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::-Wl,-search_paths_first::::",
175"debug-ben-macos-gcc46", "gcc-mp-4.6:$gcc_devteam_warn -Wconversion -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::::::", 176"debug-ben-macos-gcc46", "gcc-mp-4.6:$gcc_devteam_warn -Wconversion -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::::::",
177"debug-ben-darwin64","cc:$gcc_devteam_warn -Wno-language-extension-token -Wno-extended-offsetof -arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
176"debug-ben-no-opt", "gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::", 178"debug-ben-no-opt", "gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::",
177"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::", 179"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
178"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}", 180"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
179"debug-bodo", "gcc:$gcc_devteam_warn -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64", 181"debug-bodo", "gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
180"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll", 182"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
181"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 183"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
182"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 184"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
183"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 185"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
184"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 186"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
185"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 187"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
186"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 188"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
187"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 189"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
188"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 190"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
189"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 191"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
190"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn", 192"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
@@ -243,7 +245,7 @@ my %table=(
243"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 245"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
244"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 246"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
245"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 247"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
246"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs::/64", 248"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
247#### 249####
248"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 250"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
249"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 251"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -464,8 +466,8 @@ my %table=(
464"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64", 466"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
465# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE 467# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
466# at build time. $OBJECT_MODE is respected at ./config stage! 468# at build time. $OBJECT_MODE is respected at ./config stage!
467"aix-cc", "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32", 469"aix-cc", "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
468"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64", 470"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
469 471
470# 472#
471# Cray T90 and similar (SDSC) 473# Cray T90 and similar (SDSC)
@@ -524,7 +526,7 @@ my %table=(
524# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE' 526# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
525"VC-WIN32","cl:-W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32", 527"VC-WIN32","cl:-W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
526# Unified CE target 528# Unified CE target
527"debug-VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32", 529"debug-VC-WIN32","cl:-W3 -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
528"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${no_asm}:win32", 530"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${no_asm}:win32",
529 531
530# Borland C++ 4.5 532# Borland C++ 4.5
diff --git a/src/lib/libssl/src/FAQ b/src/lib/libssl/src/FAQ
index bb6f7e2d29..59d135396e 100644
--- a/src/lib/libssl/src/FAQ
+++ b/src/lib/libssl/src/FAQ
@@ -83,11 +83,11 @@ OpenSSL - Frequently Asked Questions
83* Which is the current version of OpenSSL? 83* Which is the current version of OpenSSL?
84 84
85The current version is available from <URL: http://www.openssl.org>. 85The current version is available from <URL: http://www.openssl.org>.
86OpenSSL 1.0.1c was released on May 10th, 2012. 86OpenSSL 1.0.1e was released on Feb 11th, 2013.
87 87
88In addition to the current stable release, you can also access daily 88In addition to the current stable release, you can also access daily
89snapshots of the OpenSSL development version at <URL: 89snapshots of the OpenSSL development version at <URL:
90ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access. 90ftp://ftp.openssl.org/snapshot/>, or get it by anonymous Git access.
91 91
92 92
93* Where is the documentation? 93* Where is the documentation?
@@ -768,6 +768,9 @@ openssl-security@openssl.org if you don't get a prompt reply at least
768acknowledging receipt then resend or mail it directly to one of the 768acknowledging receipt then resend or mail it directly to one of the
769more active team members (e.g. Steve). 769more active team members (e.g. Steve).
770 770
771Note that bugs only present in the openssl utility are not in general
772considered to be security issues.
773
771[PROG] ======================================================================== 774[PROG] ========================================================================
772 775
773* Is OpenSSL thread-safe? 776* Is OpenSSL thread-safe?
diff --git a/src/lib/libssl/src/INSTALL.W32 b/src/lib/libssl/src/INSTALL.W32
index d23c4baf62..80e538273e 100644
--- a/src/lib/libssl/src/INSTALL.W32
+++ b/src/lib/libssl/src/INSTALL.W32
@@ -29,7 +29,7 @@
29 is required if you intend to utilize assembler modules. Note that NASM 29 is required if you intend to utilize assembler modules. Note that NASM
30 is now the only supported assembler. 30 is now the only supported assembler.
31 31
32 If you are compiling from a tarball or a CVS snapshot then the Win32 files 32 If you are compiling from a tarball or a Git snapshot then the Win32 files
33 may well be not up to date. This may mean that some "tweaking" is required to 33 may well be not up to date. This may mean that some "tweaking" is required to
34 get it all to work. See the trouble shooting section later on for if (when?) 34 get it all to work. See the trouble shooting section later on for if (when?)
35 it goes wrong. 35 it goes wrong.
@@ -257,7 +257,7 @@
257 257
258 then ms\do_XXX should not give a warning any more. However the numbers that 258 then ms\do_XXX should not give a warning any more. However the numbers that
259 get assigned by this technique may not match those that eventually get 259 get assigned by this technique may not match those that eventually get
260 assigned in the CVS tree: so anything linked against this version of the 260 assigned in the Git tree: so anything linked against this version of the
261 library may need to be recompiled. 261 library may need to be recompiled.
262 262
263 If you get errors about unresolved symbols there are several possible 263 If you get errors about unresolved symbols there are several possible
diff --git a/src/lib/libssl/src/MacOS/GUSI_Init.cpp b/src/lib/libssl/src/MacOS/GUSI_Init.cpp
deleted file mode 100644
index d8223dba2c..0000000000
--- a/src/lib/libssl/src/MacOS/GUSI_Init.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
1/**************** BEGIN GUSI CONFIGURATION ****************************
2 *
3 * GUSI Configuration section generated by GUSI Configurator
4 * last modified: Wed Jan 5 20:33:51 2000
5 *
6 * This section will be overwritten by the next run of Configurator.
7 */
8
9#define GUSI_SOURCE
10#include <GUSIConfig.h>
11#include <sys/cdefs.h>
12
13/* Declarations of Socket Factories */
14
15__BEGIN_DECLS
16void GUSIwithInetSockets();
17void GUSIwithLocalSockets();
18void GUSIwithMTInetSockets();
19void GUSIwithMTTcpSockets();
20void GUSIwithMTUdpSockets();
21void GUSIwithOTInetSockets();
22void GUSIwithOTTcpSockets();
23void GUSIwithOTUdpSockets();
24void GUSIwithPPCSockets();
25void GUSISetupFactories();
26__END_DECLS
27
28/* Configure Socket Factories */
29
30void GUSISetupFactories()
31{
32#ifdef GUSISetupFactories_BeginHook
33 GUSISetupFactories_BeginHook
34#endif
35 GUSIwithInetSockets();
36#ifdef GUSISetupFactories_EndHook
37 GUSISetupFactories_EndHook
38#endif
39}
40
41/* Declarations of File Devices */
42
43__BEGIN_DECLS
44void GUSIwithDConSockets();
45void GUSIwithNullSockets();
46void GUSISetupDevices();
47__END_DECLS
48
49/* Configure File Devices */
50
51void GUSISetupDevices()
52{
53#ifdef GUSISetupDevices_BeginHook
54 GUSISetupDevices_BeginHook
55#endif
56 GUSIwithNullSockets();
57#ifdef GUSISetupDevices_EndHook
58 GUSISetupDevices_EndHook
59#endif
60}
61
62/**************** END GUSI CONFIGURATION *************************/
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.cpp b/src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.cpp
deleted file mode 100644
index 617aae2c70..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.cpp
+++ /dev/null
@@ -1,2753 +0,0 @@
1/* ====================================================================
2 * Copyright (c) 1998-1999 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This product includes cryptographic software written by Eric Young
50 * (eay@cryptsoft.com). This product includes software written by Tim
51 * Hudson (tjh@cryptsoft.com).
52 *
53 */
54
55
56
57 #include "CPStringUtils.hpp"
58#include "ErrorHandling.hpp"
59
60
61
62#define kNumberFormatString "\p########0.00#######;-########0.00#######"
63
64
65
66// Useful utility functions which could be optimized a whole lot
67
68
69void CopyPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength)
70{
71int i,numPChars;
72
73
74 if (thePStr != nil && theCStr != nil && maxCStrLength > 0)
75 {
76 numPChars = thePStr[0];
77
78 for (i = 0;;i++)
79 {
80 if (i >= numPChars || i >= maxCStrLength - 1)
81 {
82 theCStr[i] = 0;
83
84 break;
85 }
86
87 else
88 {
89 theCStr[i] = thePStr[i + 1];
90 }
91 }
92 }
93}
94
95
96void CopyPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength)
97{
98int theMaxDstStrLength;
99
100
101 theMaxDstStrLength = maxDstStrLength;
102
103
104 if (theDstPStr != nil && theSrcPStr != nil && theMaxDstStrLength > 0)
105 {
106 if (theMaxDstStrLength > 255)
107 {
108 theMaxDstStrLength = 255;
109 }
110
111
112 if (theMaxDstStrLength - 1 < theSrcPStr[0])
113 {
114 BlockMove(theSrcPStr + 1,theDstPStr + 1,theMaxDstStrLength - 1);
115
116 theDstPStr[0] = theMaxDstStrLength - 1;
117 }
118
119 else
120 {
121 BlockMove(theSrcPStr,theDstPStr,theSrcPStr[0] + 1);
122 }
123 }
124}
125
126
127void CopyCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxDstStrLength)
128{
129int i;
130
131
132 if (theDstCStr != nil && theSrcCStr != nil && maxDstStrLength > 0)
133 {
134 for (i = 0;;i++)
135 {
136 if (theSrcCStr[i] == 0 || i >= maxDstStrLength - 1)
137 {
138 theDstCStr[i] = 0;
139
140 break;
141 }
142
143 else
144 {
145 theDstCStr[i] = theSrcCStr[i];
146 }
147 }
148 }
149}
150
151
152
153void CopyCSubstrToCStr(const char *theSrcCStr,const int maxCharsToCopy,char *theDstCStr,const int maxDstStrLength)
154{
155int i;
156
157
158 if (theDstCStr != nil && theSrcCStr != nil && maxDstStrLength > 0)
159 {
160 for (i = 0;;i++)
161 {
162 if (theSrcCStr[i] == 0 || i >= maxDstStrLength - 1 || i >= maxCharsToCopy)
163 {
164 theDstCStr[i] = 0;
165
166 break;
167 }
168
169 else
170 {
171 theDstCStr[i] = theSrcCStr[i];
172 }
173 }
174 }
175}
176
177
178
179void CopyCSubstrToPStr(const char *theSrcCStr,const int maxCharsToCopy,unsigned char *theDstPStr,const int maxDstStrLength)
180{
181int i;
182int theMaxDstStrLength;
183
184
185 theMaxDstStrLength = maxDstStrLength;
186
187 if (theDstPStr != nil && theSrcCStr != nil && theMaxDstStrLength > 0)
188 {
189 if (theMaxDstStrLength > 255)
190 {
191 theMaxDstStrLength = 255;
192 }
193
194
195 for (i = 0;;i++)
196 {
197 if (theSrcCStr[i] == 0 || i >= theMaxDstStrLength - 1 || i >= maxCharsToCopy)
198 {
199 theDstPStr[0] = i;
200
201 break;
202 }
203
204 else
205 {
206 theDstPStr[i + 1] = theSrcCStr[i];
207 }
208 }
209 }
210}
211
212
213
214void CopyCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength)
215{
216int i;
217int theMaxDstStrLength;
218
219
220 theMaxDstStrLength = maxDstStrLength;
221
222 if (theDstPStr != nil && theSrcCStr != nil && theMaxDstStrLength > 0)
223 {
224 if (theMaxDstStrLength > 255)
225 {
226 theMaxDstStrLength = 255;
227 }
228
229
230 for (i = 0;;i++)
231 {
232 if (i >= theMaxDstStrLength - 1 || theSrcCStr[i] == 0)
233 {
234 theDstPStr[0] = i;
235
236 break;
237 }
238
239 else
240 {
241 theDstPStr[i + 1] = theSrcCStr[i];
242 }
243 }
244 }
245}
246
247
248void ConcatPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength)
249{
250int i,numPChars,cStrLength;
251
252
253 if (thePStr != nil && theCStr != nil && maxCStrLength > 0)
254 {
255 for (cStrLength = 0;theCStr[cStrLength] != 0;cStrLength++)
256 {
257
258 }
259
260
261 numPChars = thePStr[0];
262
263
264 for (i = 0;;i++)
265 {
266 if (i >= numPChars || cStrLength >= maxCStrLength - 1)
267 {
268 theCStr[cStrLength++] = 0;
269
270 break;
271 }
272
273 else
274 {
275 theCStr[cStrLength++] = thePStr[i + 1];
276 }
277 }
278 }
279}
280
281
282
283void ConcatPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength)
284{
285int theMaxDstStrLength;
286
287
288 theMaxDstStrLength = maxDstStrLength;
289
290 if (theSrcPStr != nil && theDstPStr != nil && theMaxDstStrLength > 0)
291 {
292 if (theMaxDstStrLength > 255)
293 {
294 theMaxDstStrLength = 255;
295 }
296
297
298 if (theMaxDstStrLength - theDstPStr[0] - 1 < theSrcPStr[0])
299 {
300 BlockMove(theSrcPStr + 1,theDstPStr + theDstPStr[0] + 1,theMaxDstStrLength - 1 - theDstPStr[0]);
301
302 theDstPStr[0] = theMaxDstStrLength - 1;
303 }
304
305 else
306 {
307 BlockMove(theSrcPStr + 1,theDstPStr + theDstPStr[0] + 1,theSrcPStr[0]);
308
309 theDstPStr[0] += theSrcPStr[0];
310 }
311 }
312}
313
314
315
316void ConcatCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength)
317{
318int i,thePStrLength;
319int theMaxDstStrLength;
320
321
322 theMaxDstStrLength = maxDstStrLength;
323
324 if (theSrcCStr != nil && theDstPStr != nil && theMaxDstStrLength > 0)
325 {
326 if (theMaxDstStrLength > 255)
327 {
328 theMaxDstStrLength = 255;
329 }
330
331
332 thePStrLength = theDstPStr[0];
333
334 for (i = 0;;i++)
335 {
336 if (theSrcCStr[i] == 0 || thePStrLength >= theMaxDstStrLength - 1)
337 {
338 theDstPStr[0] = thePStrLength;
339
340 break;
341 }
342
343 else
344 {
345 theDstPStr[thePStrLength + 1] = theSrcCStr[i];
346
347 thePStrLength++;
348 }
349 }
350 }
351}
352
353
354
355void ConcatCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxCStrLength)
356{
357int cStrLength;
358
359
360 if (theSrcCStr != nil && theDstCStr != nil && maxCStrLength > 0)
361 {
362 for (cStrLength = 0;theDstCStr[cStrLength] != 0;cStrLength++)
363 {
364
365 }
366
367
368 for (;;)
369 {
370 if (*theSrcCStr == 0 || cStrLength >= maxCStrLength - 1)
371 {
372 theDstCStr[cStrLength++] = 0;
373
374 break;
375 }
376
377 else
378 {
379 theDstCStr[cStrLength++] = *theSrcCStr++;
380 }
381 }
382 }
383}
384
385
386
387void ConcatCharToCStr(const char theChar,char *theDstCStr,const int maxCStrLength)
388{
389int cStrLength;
390
391
392 if (theDstCStr != nil && maxCStrLength > 0)
393 {
394 cStrLength = CStrLength(theDstCStr);
395
396 if (cStrLength < maxCStrLength - 1)
397 {
398 theDstCStr[cStrLength++] = theChar;
399 theDstCStr[cStrLength++] = '\0';
400 }
401 }
402}
403
404
405
406void ConcatCharToPStr(const char theChar,unsigned char *theDstPStr,const int maxPStrLength)
407{
408int pStrLength;
409
410
411 if (theDstPStr != nil && maxPStrLength > 0)
412 {
413 pStrLength = PStrLength(theDstPStr);
414
415 if (pStrLength < maxPStrLength - 1 && pStrLength < 255)
416 {
417 theDstPStr[pStrLength + 1] = theChar;
418 theDstPStr[0] += 1;
419 }
420 }
421}
422
423
424
425
426int CompareCStrs(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase)
427{
428int returnValue;
429char firstChar,secondChar;
430
431
432 returnValue = 0;
433
434
435 if (theFirstCStr != nil && theSecondCStr != nil)
436 {
437 for (;;)
438 {
439 firstChar = *theFirstCStr;
440 secondChar = *theSecondCStr;
441
442 if (ignoreCase == true)
443 {
444 if (firstChar >= 'A' && firstChar <= 'Z')
445 {
446 firstChar = 'a' + (firstChar - 'A');
447 }
448
449 if (secondChar >= 'A' && secondChar <= 'Z')
450 {
451 secondChar = 'a' + (secondChar - 'A');
452 }
453 }
454
455
456 if (firstChar == 0 && secondChar != 0)
457 {
458 returnValue = -1;
459
460 break;
461 }
462
463 else if (firstChar != 0 && secondChar == 0)
464 {
465 returnValue = 1;
466
467 break;
468 }
469
470 else if (firstChar == 0 && secondChar == 0)
471 {
472 returnValue = 0;
473
474 break;
475 }
476
477 else if (firstChar < secondChar)
478 {
479 returnValue = -1;
480
481 break;
482 }
483
484 else if (firstChar > secondChar)
485 {
486 returnValue = 1;
487
488 break;
489 }
490
491 theFirstCStr++;
492 theSecondCStr++;
493 }
494 }
495
496
497 return(returnValue);
498}
499
500
501
502Boolean CStrsAreEqual(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase)
503{
504 if (CompareCStrs(theFirstCStr,theSecondCStr,ignoreCase) == 0)
505 {
506 return true;
507 }
508
509 else
510 {
511 return false;
512 }
513}
514
515
516Boolean PStrsAreEqual(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase)
517{
518 if (ComparePStrs(theFirstPStr,theSecondPStr,ignoreCase) == 0)
519 {
520 return true;
521 }
522
523 else
524 {
525 return false;
526 }
527}
528
529
530
531int ComparePStrs(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase)
532{
533int i,returnValue;
534char firstChar,secondChar;
535
536
537 returnValue = 0;
538
539
540 if (theFirstPStr != nil && theSecondPStr != nil)
541 {
542 for (i = 1;;i++)
543 {
544 firstChar = theFirstPStr[i];
545 secondChar = theSecondPStr[i];
546
547 if (ignoreCase == true)
548 {
549 if (firstChar >= 'A' && firstChar <= 'Z')
550 {
551 firstChar = 'a' + (firstChar - 'A');
552 }
553
554 if (secondChar >= 'A' && secondChar <= 'Z')
555 {
556 secondChar = 'a' + (secondChar - 'A');
557 }
558 }
559
560
561 if (theFirstPStr[0] < i && theSecondPStr[0] >= i)
562 {
563 returnValue = -1;
564
565 break;
566 }
567
568 else if (theFirstPStr[0] >= i && theSecondPStr[0] < i)
569 {
570 returnValue = 1;
571
572 break;
573 }
574
575 else if (theFirstPStr[0] < i && theSecondPStr[0] < i)
576 {
577 returnValue = 0;
578
579 break;
580 }
581
582 else if (firstChar < secondChar)
583 {
584 returnValue = -1;
585
586 break;
587 }
588
589 else if (firstChar > secondChar)
590 {
591 returnValue = 1;
592
593 break;
594 }
595 }
596 }
597
598
599 return(returnValue);
600}
601
602
603
604int CompareCStrToPStr(const char *theCStr,const unsigned char *thePStr,const Boolean ignoreCase)
605{
606int returnValue;
607char tempString[256];
608
609
610 returnValue = 0;
611
612 if (theCStr != nil && thePStr != nil)
613 {
614 CopyPStrToCStr(thePStr,tempString,sizeof(tempString));
615
616 returnValue = CompareCStrs(theCStr,tempString,ignoreCase);
617 }
618
619
620 return(returnValue);
621}
622
623
624
625void ConcatLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits)
626{
627Str255 theStr255;
628
629
630 NumToString(theNum,theStr255);
631
632
633 if (numDigits > 0)
634 {
635 int charsToInsert;
636
637
638 charsToInsert = numDigits - PStrLength(theStr255);
639
640 if (charsToInsert > 0)
641 {
642 char tempString[256];
643
644 CopyCStrToCStr("",tempString,sizeof(tempString));
645
646 for (;charsToInsert > 0;charsToInsert--)
647 {
648 ConcatCStrToCStr("0",tempString,sizeof(tempString));
649 }
650
651 ConcatPStrToCStr(theStr255,tempString,sizeof(tempString));
652
653 CopyCStrToPStr(tempString,theStr255,sizeof(theStr255));
654 }
655 }
656
657
658 ConcatPStrToCStr(theStr255,theCStr,maxCStrLength);
659}
660
661
662
663
664void ConcatLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits)
665{
666Str255 theStr255;
667
668
669 NumToString(theNum,theStr255);
670
671
672 if (numDigits > 0)
673 {
674 int charsToInsert;
675
676
677 charsToInsert = numDigits - PStrLength(theStr255);
678
679 if (charsToInsert > 0)
680 {
681 char tempString[256];
682
683 CopyCStrToCStr("",tempString,sizeof(tempString));
684
685 for (;charsToInsert > 0;charsToInsert--)
686 {
687 ConcatCStrToCStr("0",tempString,sizeof(tempString));
688 }
689
690 ConcatPStrToCStr(theStr255,tempString,sizeof(tempString));
691
692 CopyCStrToPStr(tempString,theStr255,sizeof(theStr255));
693 }
694 }
695
696
697 ConcatPStrToPStr(theStr255,thePStr,maxPStrLength);
698}
699
700
701
702void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength)
703{
704 CopyCStrToCStr(theSrcCStr,theDstCStr,maxDstStrLength);
705
706 ConcatLongIntToCStr(theNum,theDstCStr,maxDstStrLength);
707}
708
709
710
711void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits)
712{
713Str255 theStr255;
714
715
716 NumToString(theNum,theStr255);
717
718
719 if (numDigits > 0)
720 {
721 int charsToInsert;
722
723
724 charsToInsert = numDigits - PStrLength(theStr255);
725
726 if (charsToInsert > 0)
727 {
728 char tempString[256];
729
730 CopyCStrToCStr("",tempString,sizeof(tempString));
731
732 for (;charsToInsert > 0;charsToInsert--)
733 {
734 ConcatCStrToCStr("0",tempString,sizeof(tempString));
735 }
736
737 ConcatPStrToCStr(theStr255,tempString,sizeof(tempString));
738
739 CopyCStrToPStr(tempString,theStr255,sizeof(theStr255));
740 }
741 }
742
743
744 CopyPStrToCStr(theStr255,theCStr,maxCStrLength);
745}
746
747
748
749
750
751void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength)
752{
753char tempString[256];
754int srcCharIndex,dstCharIndex;
755unsigned long tempNum,quotient,remainder;
756
757
758 if (theNum == 0)
759 {
760 CopyCStrToCStr("0",theCStr,maxCStrLength);
761 }
762
763 else
764 {
765 srcCharIndex = 0;
766
767 tempNum = theNum;
768
769 for (;;)
770 {
771 if (srcCharIndex >= sizeof(tempString) - 1 || tempNum == 0)
772 {
773 for (dstCharIndex = 0;;)
774 {
775 if (dstCharIndex >= maxCStrLength - 1 || srcCharIndex <= 0)
776 {
777 theCStr[dstCharIndex] = 0;
778
779 break;
780 }
781
782 theCStr[dstCharIndex++] = tempString[--srcCharIndex];
783 }
784
785 break;
786 }
787
788
789 quotient = tempNum / 10;
790
791 remainder = tempNum - (quotient * 10);
792
793 tempString[srcCharIndex] = '0' + remainder;
794
795 srcCharIndex++;
796
797 tempNum = quotient;
798 }
799 }
800}
801
802
803
804
805void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits)
806{
807char tempString[256];
808
809
810 CopyLongIntToCStr(theNum,tempString,sizeof(tempString),numDigits);
811
812 CopyCStrToPStr(tempString,thePStr,maxPStrLength);
813}
814
815
816
817OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle)
818{
819OSErr errCode = noErr;
820char tempString[32];
821
822
823 CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString));
824
825 errCode = CopyCStrToNewHandle(tempString,theHandle);
826
827 return(errCode);
828}
829
830
831OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle)
832{
833OSErr errCode = noErr;
834char tempString[32];
835
836
837 CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString));
838
839 errCode = CopyCStrToExistingHandle(tempString,theHandle);
840
841 return(errCode);
842}
843
844
845
846
847OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle)
848{
849OSErr errCode = noErr;
850long stringLength;
851
852
853 if (theCString == nil)
854 {
855 SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, theCString == nil"));
856 }
857
858 if (theHandle == nil)
859 {
860 SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, theHandle == nil"));
861 }
862
863 if (*theHandle == nil)
864 {
865 SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, *theHandle == nil"));
866 }
867
868
869
870 stringLength = CStrLength(theCString) + 1;
871
872 SetHandleSize(theHandle,stringLength);
873
874 if (GetHandleSize(theHandle) < stringLength)
875 {
876 SetErrorMessageAndLongIntAndBail("CopyCStrToExistingHandle: Can't set Handle size, MemError() = ",MemError());
877 }
878
879
880 ::BlockMove(theCString,*theHandle,stringLength);
881
882
883EXITPOINT:
884
885 return(errCode);
886}
887
888
889
890
891
892OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle)
893{
894OSErr errCode = noErr;
895long stringLength;
896
897
898 if (theCString == nil)
899 {
900 SetErrorMessageAndBail(("CopyCStrToNewHandle: Bad parameter, theCString == nil"));
901 }
902
903 if (theHandle == nil)
904 {
905 SetErrorMessageAndBail(("CopyCStrToNewHandle: Bad parameter, theHandle == nil"));
906 }
907
908
909
910 stringLength = CStrLength(theCString) + 1;
911
912 *theHandle = NewHandle(stringLength);
913
914 if (*theHandle == nil)
915 {
916 SetErrorMessageAndLongIntAndBail("CopyCStrToNewHandle: Can't allocate Handle, MemError() = ",MemError());
917 }
918
919
920 ::BlockMove(theCString,**theHandle,stringLength);
921
922
923EXITPOINT:
924
925 return(errCode);
926}
927
928
929
930OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle)
931{
932OSErr errCode = noErr;
933long stringLength;
934
935
936 if (thePString == nil)
937 {
938 SetErrorMessageAndBail(("CopyPStrToNewHandle: Bad parameter, thePString == nil"));
939 }
940
941 if (theHandle == nil)
942 {
943 SetErrorMessageAndBail(("CopyPStrToNewHandle: Bad parameter, theHandle == nil"));
944 }
945
946
947
948 stringLength = PStrLength(thePString) + 1;
949
950 *theHandle = NewHandle(stringLength);
951
952 if (*theHandle == nil)
953 {
954 SetErrorMessageAndLongIntAndBail("CopyPStrToNewHandle: Can't allocate Handle, MemError() = ",MemError());
955 }
956
957
958 if (stringLength > 1)
959 {
960 BlockMove(thePString + 1,**theHandle,stringLength - 1);
961 }
962
963 (**theHandle)[stringLength - 1] = 0;
964
965
966EXITPOINT:
967
968 return(errCode);
969}
970
971
972OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength)
973{
974OSErr errCode = noErr;
975char tempString[256];
976
977
978 CopyPStrToCStr(thePString,tempString,sizeof(tempString));
979
980 errCode = AppendCStrToHandle(tempString,theHandle,currentLength);
981
982
983EXITPOINT:
984
985 return(errCode);
986}
987
988
989
990OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength,long *maxLength)
991{
992OSErr errCode = noErr;
993long handleMaxLength,handleCurrentLength,stringLength,byteCount;
994
995
996 if (theCString == nil)
997 {
998 SetErrorMessageAndBail(("AppendCStrToHandle: Bad parameter, theCString == nil"));
999 }
1000
1001 if (theHandle == nil)
1002 {
1003 SetErrorMessageAndBail(("AppendCStrToHandle: Bad parameter, theHandle == nil"));
1004 }
1005
1006
1007 if (maxLength != nil)
1008 {
1009 handleMaxLength = *maxLength;
1010 }
1011
1012 else
1013 {
1014 handleMaxLength = GetHandleSize(theHandle);
1015 }
1016
1017
1018 if (currentLength != nil && *currentLength >= 0)
1019 {
1020 handleCurrentLength = *currentLength;
1021 }
1022
1023 else
1024 {
1025 handleCurrentLength = CStrLength(*theHandle);
1026 }
1027
1028
1029 stringLength = CStrLength(theCString);
1030
1031 byteCount = handleCurrentLength + stringLength + 1;
1032
1033 if (byteCount > handleMaxLength)
1034 {
1035 SetHandleSize(theHandle,handleCurrentLength + stringLength + 1);
1036
1037 if (maxLength != nil)
1038 {
1039 *maxLength = GetHandleSize(theHandle);
1040
1041 handleMaxLength = *maxLength;
1042 }
1043
1044 else
1045 {
1046 handleMaxLength = GetHandleSize(theHandle);
1047 }
1048
1049 if (byteCount > handleMaxLength)
1050 {
1051 SetErrorMessageAndLongIntAndBail("AppendCStrToHandle: Can't increase Handle allocation, MemError() = ",MemError());
1052 }
1053 }
1054
1055
1056 BlockMove(theCString,*theHandle + handleCurrentLength,stringLength + 1);
1057
1058
1059 if (currentLength != nil)
1060 {
1061 *currentLength += stringLength;
1062 }
1063
1064
1065 errCode = noErr;
1066
1067
1068EXITPOINT:
1069
1070 return(errCode);
1071}
1072
1073
1074
1075OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength,long *maxLength)
1076{
1077OSErr errCode = noErr;
1078long handleMaxLength,handleCurrentLength,byteCount;
1079
1080
1081 if (theChars == nil)
1082 {
1083 SetErrorMessageAndBail(("AppendCharsToHandle: Bad parameter, theChars == nil"));
1084 }
1085
1086 if (theHandle == nil)
1087 {
1088 SetErrorMessageAndBail(("AppendCharsToHandle: Bad parameter, theHandle == nil"));
1089 }
1090
1091
1092 if (maxLength != nil)
1093 {
1094 handleMaxLength = *maxLength;
1095 }
1096
1097 else
1098 {
1099 handleMaxLength = GetHandleSize(theHandle);
1100 }
1101
1102
1103 if (currentLength != nil && *currentLength >= 0)
1104 {
1105 handleCurrentLength = *currentLength;
1106 }
1107
1108 else
1109 {
1110 handleCurrentLength = CStrLength(*theHandle);
1111 }
1112
1113
1114 byteCount = handleCurrentLength + numChars + 1;
1115
1116 if (byteCount > handleMaxLength)
1117 {
1118 SetHandleSize(theHandle,handleCurrentLength + numChars + 1);
1119
1120 if (maxLength != nil)
1121 {
1122 *maxLength = GetHandleSize(theHandle);
1123
1124 handleMaxLength = *maxLength;
1125 }
1126
1127 else
1128 {
1129 handleMaxLength = GetHandleSize(theHandle);
1130 }
1131
1132 if (byteCount > handleMaxLength)
1133 {
1134 SetErrorMessageAndLongIntAndBail("AppendCharsToHandle: Can't increase Handle allocation, MemError() = ",MemError());
1135 }
1136 }
1137
1138
1139 BlockMove(theChars,*theHandle + handleCurrentLength,numChars);
1140
1141 (*theHandle)[handleCurrentLength + numChars] = '\0';
1142
1143 if (currentLength != nil)
1144 {
1145 *currentLength += numChars;
1146 }
1147
1148
1149 errCode = noErr;
1150
1151
1152EXITPOINT:
1153
1154 return(errCode);
1155}
1156
1157
1158
1159OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength)
1160{
1161OSErr errCode = noErr;
1162char tempString[32];
1163
1164
1165 CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString));
1166
1167 errCode = AppendCStrToHandle(tempString,theHandle,currentLength);
1168
1169 return(errCode);
1170}
1171
1172
1173
1174
1175long CStrLength(const char *theCString)
1176{
1177long cStrLength = 0;
1178
1179
1180 if (theCString != nil)
1181 {
1182 for (cStrLength = 0;theCString[cStrLength] != 0;cStrLength++)
1183 {
1184
1185 }
1186 }
1187
1188
1189 return(cStrLength);
1190}
1191
1192
1193
1194long PStrLength(const unsigned char *thePString)
1195{
1196long pStrLength = 0;
1197
1198
1199 if (thePString != nil)
1200 {
1201 pStrLength = thePString[0];
1202 }
1203
1204
1205 return(pStrLength);
1206}
1207
1208
1209
1210
1211
1212void ZeroMem(void *theMemPtr,const unsigned long numBytes)
1213{
1214unsigned char *theBytePtr;
1215unsigned long *theLongPtr;
1216unsigned long numSingleBytes;
1217unsigned long theNumBytes;
1218
1219
1220 theNumBytes = numBytes;
1221
1222 if (theMemPtr != nil && theNumBytes > 0)
1223 {
1224 theBytePtr = (unsigned char *) theMemPtr;
1225
1226 numSingleBytes = (unsigned long) theBytePtr & 0x0003;
1227
1228 while (numSingleBytes > 0)
1229 {
1230 *theBytePtr++ = 0;
1231
1232 theNumBytes--;
1233 numSingleBytes--;
1234 }
1235
1236
1237 theLongPtr = (unsigned long *) theBytePtr;
1238
1239 while (theNumBytes >= 4)
1240 {
1241 *theLongPtr++ = 0;
1242
1243 theNumBytes -= 4;
1244 }
1245
1246
1247 theBytePtr = (unsigned char *) theLongPtr;
1248
1249 while (theNumBytes > 0)
1250 {
1251 *theBytePtr++ = 0;
1252
1253 theNumBytes--;
1254 }
1255 }
1256}
1257
1258
1259
1260
1261char *FindCharInCStr(const char theChar,const char *theCString)
1262{
1263char *theStringSearchPtr;
1264
1265
1266 theStringSearchPtr = (char *) theCString;
1267
1268 if (theStringSearchPtr != nil)
1269 {
1270 while (*theStringSearchPtr != '\0' && *theStringSearchPtr != theChar)
1271 {
1272 theStringSearchPtr++;
1273 }
1274
1275 if (*theStringSearchPtr == '\0')
1276 {
1277 theStringSearchPtr = nil;
1278 }
1279 }
1280
1281 return(theStringSearchPtr);
1282}
1283
1284
1285
1286long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase)
1287{
1288long theOffset = -1;
1289
1290
1291 if (theCString != nil)
1292 {
1293 theOffset = 0;
1294
1295
1296 if (inIgnoreCase)
1297 {
1298 char searchChar = theChar;
1299
1300 if (searchChar >= 'a' && searchChar <= 'z')
1301 {
1302 searchChar = searchChar - 'a' + 'A';
1303 }
1304
1305
1306 while (*theCString != 0)
1307 {
1308 char currentChar = *theCString;
1309
1310 if (currentChar >= 'a' && currentChar <= 'z')
1311 {
1312 currentChar = currentChar - 'a' + 'A';
1313 }
1314
1315 if (currentChar == searchChar)
1316 {
1317 break;
1318 }
1319
1320 theCString++;
1321 theOffset++;
1322 }
1323 }
1324
1325 else
1326 {
1327 while (*theCString != 0 && *theCString != theChar)
1328 {
1329 theCString++;
1330 theOffset++;
1331 }
1332 }
1333
1334 if (*theCString == 0)
1335 {
1336 theOffset = -1;
1337 }
1338 }
1339
1340 return(theOffset);
1341}
1342
1343
1344long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase)
1345{
1346long theOffset = -1;
1347
1348
1349 if (theCSubstring != nil && theCString != nil)
1350 {
1351 for (theOffset = 0;;theOffset++)
1352 {
1353 if (theCString[theOffset] == 0)
1354 {
1355 theOffset = -1;
1356
1357 goto EXITPOINT;
1358 }
1359
1360
1361 for (const char *tempSubstringPtr = theCSubstring,*tempCStringPtr = theCString + theOffset;;tempSubstringPtr++,tempCStringPtr++)
1362 {
1363 if (*tempSubstringPtr == 0)
1364 {
1365 goto EXITPOINT;
1366 }
1367
1368 else if (*tempCStringPtr == 0)
1369 {
1370 break;
1371 }
1372
1373 char searchChar = *tempSubstringPtr;
1374 char currentChar = *tempCStringPtr;
1375
1376 if (inIgnoreCase && searchChar >= 'a' && searchChar <= 'z')
1377 {
1378 searchChar = searchChar - 'a' + 'A';
1379 }
1380
1381 if (inIgnoreCase && currentChar >= 'a' && currentChar <= 'z')
1382 {
1383 currentChar = currentChar - 'a' + 'A';
1384 }
1385
1386 if (currentChar != searchChar)
1387 {
1388 break;
1389 }
1390 }
1391 }
1392
1393 theOffset = -1;
1394 }
1395
1396
1397EXITPOINT:
1398
1399 return(theOffset);
1400}
1401
1402
1403
1404void InsertCStrIntoCStr(const char *theSrcCStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength)
1405{
1406int currentLength;
1407int insertLength;
1408int numCharsToInsert;
1409int numCharsToShift;
1410
1411
1412 if (theDstCStr != nil && theSrcCStr != nil && maxDstStrLength > 0 && theInsertionOffset < maxDstStrLength - 1)
1413 {
1414 currentLength = CStrLength(theDstCStr);
1415
1416 insertLength = CStrLength(theSrcCStr);
1417
1418
1419 if (theInsertionOffset + insertLength < maxDstStrLength - 1)
1420 {
1421 numCharsToInsert = insertLength;
1422 }
1423
1424 else
1425 {
1426 numCharsToInsert = maxDstStrLength - 1 - theInsertionOffset;
1427 }
1428
1429
1430 if (numCharsToInsert + currentLength < maxDstStrLength - 1)
1431 {
1432 numCharsToShift = currentLength - theInsertionOffset;
1433 }
1434
1435 else
1436 {
1437 numCharsToShift = maxDstStrLength - 1 - theInsertionOffset - numCharsToInsert;
1438 }
1439
1440
1441 if (numCharsToShift > 0)
1442 {
1443 BlockMove(theDstCStr + theInsertionOffset,theDstCStr + theInsertionOffset + numCharsToInsert,numCharsToShift);
1444 }
1445
1446 if (numCharsToInsert > 0)
1447 {
1448 BlockMove(theSrcCStr,theDstCStr + theInsertionOffset,numCharsToInsert);
1449 }
1450
1451 theDstCStr[theInsertionOffset + numCharsToInsert + numCharsToShift] = 0;
1452 }
1453}
1454
1455
1456
1457void InsertPStrIntoCStr(const unsigned char *theSrcPStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength)
1458{
1459int currentLength;
1460int insertLength;
1461int numCharsToInsert;
1462int numCharsToShift;
1463
1464
1465 if (theDstCStr != nil && theSrcPStr != nil && maxDstStrLength > 0 && theInsertionOffset < maxDstStrLength - 1)
1466 {
1467 currentLength = CStrLength(theDstCStr);
1468
1469 insertLength = PStrLength(theSrcPStr);
1470
1471
1472 if (theInsertionOffset + insertLength < maxDstStrLength - 1)
1473 {
1474 numCharsToInsert = insertLength;
1475 }
1476
1477 else
1478 {
1479 numCharsToInsert = maxDstStrLength - 1 - theInsertionOffset;
1480 }
1481
1482
1483 if (numCharsToInsert + currentLength < maxDstStrLength - 1)
1484 {
1485 numCharsToShift = currentLength - theInsertionOffset;
1486 }
1487
1488 else
1489 {
1490 numCharsToShift = maxDstStrLength - 1 - theInsertionOffset - numCharsToInsert;
1491 }
1492
1493
1494 if (numCharsToShift > 0)
1495 {
1496 BlockMove(theDstCStr + theInsertionOffset,theDstCStr + theInsertionOffset + numCharsToInsert,numCharsToShift);
1497 }
1498
1499 if (numCharsToInsert > 0)
1500 {
1501 BlockMove(theSrcPStr + 1,theDstCStr + theInsertionOffset,numCharsToInsert);
1502 }
1503
1504 theDstCStr[theInsertionOffset + numCharsToInsert + numCharsToShift] = 0;
1505 }
1506}
1507
1508
1509
1510OSErr InsertCStrIntoHandle(const char *theCString,Handle theHandle,const long inInsertOffset)
1511{
1512OSErr errCode;
1513int currentLength;
1514int insertLength;
1515
1516
1517 SetErrorMessageAndBailIfNil(theCString,"InsertCStrIntoHandle: Bad parameter, theCString == nil");
1518
1519 SetErrorMessageAndBailIfNil(theHandle,"InsertCStrIntoHandle: Bad parameter, theHandle == nil");
1520
1521 currentLength = CStrLength(*theHandle);
1522
1523 if (currentLength + 1 > ::GetHandleSize(theHandle))
1524 {
1525 SetErrorMessageAndBail("InsertCStrIntoHandle: Handle has been overflowed");
1526 }
1527
1528 if (inInsertOffset > currentLength)
1529 {
1530 SetErrorMessageAndBail("InsertCStrIntoHandle: Insertion offset is greater than string length");
1531 }
1532
1533 insertLength = CStrLength(theCString);
1534
1535 ::SetHandleSize(theHandle,currentLength + 1 + insertLength);
1536
1537 if (::GetHandleSize(theHandle) < currentLength + 1 + insertLength)
1538 {
1539 SetErrorMessageAndLongIntAndBail("InsertCStrIntoHandle: Can't expand storage for Handle, MemError() = ",MemError());
1540 }
1541
1542 ::BlockMove(*theHandle + inInsertOffset,*theHandle + inInsertOffset + insertLength,currentLength - inInsertOffset + 1);
1543
1544 ::BlockMove(theCString,*theHandle + inInsertOffset,insertLength);
1545
1546
1547 errCode = noErr;
1548
1549
1550EXITPOINT:
1551
1552 return(errCode);
1553}
1554
1555
1556
1557
1558void CopyCStrAndInsert1LongIntIntoCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength)
1559{
1560 CopyCStrAndInsertCStrLongIntIntoCStr(theSrcCStr,nil,theNum,theDstCStr,maxDstStrLength);
1561}
1562
1563
1564void CopyCStrAndInsert2LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,char *theDstCStr,const int maxDstStrLength)
1565{
1566const long theLongInts[] = { long1,long2 };
1567
1568 CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,nil,theLongInts,theDstCStr,maxDstStrLength);
1569}
1570
1571
1572void CopyCStrAndInsert3LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,const long long3,char *theDstCStr,const int maxDstStrLength)
1573{
1574const long theLongInts[] = { long1,long2,long3 };
1575
1576 CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,nil,theLongInts,theDstCStr,maxDstStrLength);
1577}
1578
1579
1580void CopyCStrAndInsertCStrIntoCStr(const char *theSrcCStr,const char *theInsertCStr,char *theDstCStr,const int maxDstStrLength)
1581{
1582const char *theCStrs[2] = { theInsertCStr,nil };
1583
1584 CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,theCStrs,nil,theDstCStr,maxDstStrLength);
1585}
1586
1587
1588
1589void CopyCStrAndInsertCStrLongIntIntoCStr(const char *theSrcCStr,const char *theInsertCStr,const long theNum,char *theDstCStr,const int maxDstStrLength)
1590{
1591const char *theCStrs[2] = { theInsertCStr,nil };
1592const long theLongInts[1] = { theNum };
1593
1594 CopyCStrAndInsertCStrsLongIntsIntoCStr(theSrcCStr,theCStrs,theLongInts,theDstCStr,maxDstStrLength);
1595}
1596
1597
1598
1599void CopyCStrAndInsertCStrsLongIntsIntoCStr(const char *theSrcCStr,const char **theInsertCStrs,const long *theLongInts,char *theDstCStr,const int maxDstStrLength)
1600{
1601int dstCharIndex,srcCharIndex,theMaxDstStrLength;
1602int theCStrIndex = 0;
1603int theLongIntIndex = 0;
1604
1605
1606 theMaxDstStrLength = maxDstStrLength;
1607
1608 if (theDstCStr != nil && theSrcCStr != nil && theMaxDstStrLength > 0)
1609 {
1610 dstCharIndex = 0;
1611
1612 srcCharIndex = 0;
1613
1614
1615 // Allow room for NULL at end of string
1616
1617 theMaxDstStrLength--;
1618
1619
1620 for (;;)
1621 {
1622 // Hit end of buffer?
1623
1624 if (dstCharIndex >= theMaxDstStrLength)
1625 {
1626 theDstCStr[dstCharIndex++] = 0;
1627
1628 goto EXITPOINT;
1629 }
1630
1631 // End of source string?
1632
1633 else if (theSrcCStr[srcCharIndex] == 0)
1634 {
1635 theDstCStr[dstCharIndex++] = 0;
1636
1637 goto EXITPOINT;
1638 }
1639
1640 // Did we find a '%s'?
1641
1642 else if (theInsertCStrs != nil && theInsertCStrs[theCStrIndex] != nil && theSrcCStr[srcCharIndex] == '%' && theSrcCStr[srcCharIndex + 1] == 's')
1643 {
1644 // Skip over the '%s'
1645
1646 srcCharIndex += 2;
1647
1648
1649 // Terminate the dest string and then concat the string
1650
1651 theDstCStr[dstCharIndex] = 0;
1652
1653 ConcatCStrToCStr(theInsertCStrs[theCStrIndex],theDstCStr,theMaxDstStrLength);
1654
1655 dstCharIndex = CStrLength(theDstCStr);
1656
1657 theCStrIndex++;
1658 }
1659
1660 // Did we find a '%ld'?
1661
1662 else if (theLongInts != nil && theSrcCStr[srcCharIndex] == '%' && theSrcCStr[srcCharIndex + 1] == 'l' && theSrcCStr[srcCharIndex + 2] == 'd')
1663 {
1664 // Skip over the '%ld'
1665
1666 srcCharIndex += 3;
1667
1668
1669 // Terminate the dest string and then concat the number
1670
1671 theDstCStr[dstCharIndex] = 0;
1672
1673 ConcatLongIntToCStr(theLongInts[theLongIntIndex],theDstCStr,theMaxDstStrLength);
1674
1675 theLongIntIndex++;
1676
1677 dstCharIndex = CStrLength(theDstCStr);
1678 }
1679
1680 else
1681 {
1682 theDstCStr[dstCharIndex++] = theSrcCStr[srcCharIndex++];
1683 }
1684 }
1685 }
1686
1687
1688
1689EXITPOINT:
1690
1691 return;
1692}
1693
1694
1695
1696
1697
1698OSErr CopyCStrAndInsertCStrLongIntIntoHandle(const char *theSrcCStr,const char *theInsertCStr,const long theNum,Handle *theHandle)
1699{
1700OSErr errCode;
1701long byteCount;
1702
1703
1704 if (theHandle != nil)
1705 {
1706 byteCount = CStrLength(theSrcCStr) + CStrLength(theInsertCStr) + 32;
1707
1708 *theHandle = NewHandle(byteCount);
1709
1710 if (*theHandle == nil)
1711 {
1712 SetErrorMessageAndLongIntAndBail("CopyCStrAndInsertCStrLongIntIntoHandle: Can't allocate Handle, MemError() = ",MemError());
1713 }
1714
1715
1716 HLock(*theHandle);
1717
1718 CopyCStrAndInsertCStrLongIntIntoCStr(theSrcCStr,theInsertCStr,theNum,**theHandle,byteCount);
1719
1720 HUnlock(*theHandle);
1721 }
1722
1723 errCode = noErr;
1724
1725
1726EXITPOINT:
1727
1728 return(errCode);
1729}
1730
1731
1732
1733
1734
1735OSErr CopyIndexedWordToCStr(char *theSrcCStr,int whichWord,char *theDstCStr,int maxDstCStrLength)
1736{
1737OSErr errCode;
1738char *srcCharPtr,*dstCharPtr;
1739int wordCount;
1740int byteCount;
1741
1742
1743 if (theSrcCStr == nil)
1744 {
1745 SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, theSrcCStr == nil"));
1746 }
1747
1748 if (theDstCStr == nil)
1749 {
1750 SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, theDstCStr == nil"));
1751 }
1752
1753 if (whichWord < 0)
1754 {
1755 SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, whichWord < 0"));
1756 }
1757
1758 if (maxDstCStrLength <= 0)
1759 {
1760 SetErrorMessageAndBail(("CopyIndexedWordToCStr: Bad parameter, maxDstCStrLength <= 0"));
1761 }
1762
1763
1764 *theDstCStr = '\0';
1765
1766 srcCharPtr = theSrcCStr;
1767
1768 while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1769 {
1770 srcCharPtr++;
1771 }
1772
1773
1774 for (wordCount = 0;wordCount < whichWord;wordCount++)
1775 {
1776 while (*srcCharPtr != ' ' && *srcCharPtr != '\t' && *srcCharPtr != '\r' && *srcCharPtr != '\n' && *srcCharPtr != '\0')
1777 {
1778 srcCharPtr++;
1779 }
1780
1781 if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1782 {
1783 errCode = noErr;
1784
1785 goto EXITPOINT;
1786 }
1787
1788 while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1789 {
1790 srcCharPtr++;
1791 }
1792
1793 if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1794 {
1795 errCode = noErr;
1796
1797 goto EXITPOINT;
1798 }
1799 }
1800
1801
1802 dstCharPtr = theDstCStr;
1803 byteCount = 0;
1804
1805
1806 for(;;)
1807 {
1808 if (byteCount >= maxDstCStrLength - 1 || *srcCharPtr == '\0' || *srcCharPtr == ' ' || *srcCharPtr == '\t' || *srcCharPtr == '\r' || *srcCharPtr == '\n')
1809 {
1810 *dstCharPtr = '\0';
1811 break;
1812 }
1813
1814 *dstCharPtr++ = *srcCharPtr++;
1815
1816 byteCount++;
1817 }
1818
1819
1820 errCode = noErr;
1821
1822
1823EXITPOINT:
1824
1825 return(errCode);
1826}
1827
1828
1829
1830
1831
1832OSErr CopyIndexedWordToNewHandle(char *theSrcCStr,int whichWord,Handle *outTheHandle)
1833{
1834OSErr errCode;
1835char *srcCharPtr;
1836int wordCount;
1837int byteCount;
1838
1839
1840 if (theSrcCStr == nil)
1841 {
1842 SetErrorMessageAndBail(("CopyIndexedWordToNewHandle: Bad parameter, theSrcCStr == nil"));
1843 }
1844
1845 if (outTheHandle == nil)
1846 {
1847 SetErrorMessageAndBail(("CopyIndexedWordToNewHandle: Bad parameter, outTheHandle == nil"));
1848 }
1849
1850 if (whichWord < 0)
1851 {
1852 SetErrorMessageAndBail(("CopyIndexedWordToNewHandle: Bad parameter, whichWord < 0"));
1853 }
1854
1855
1856 *outTheHandle = nil;
1857
1858
1859 srcCharPtr = theSrcCStr;
1860
1861 while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1862 {
1863 srcCharPtr++;
1864 }
1865
1866
1867 for (wordCount = 0;wordCount < whichWord;wordCount++)
1868 {
1869 while (*srcCharPtr != ' ' && *srcCharPtr != '\t' && *srcCharPtr != '\r' && *srcCharPtr != '\n' && *srcCharPtr != '\0')
1870 {
1871 srcCharPtr++;
1872 }
1873
1874 if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1875 {
1876 break;
1877 }
1878
1879 while (*srcCharPtr == ' ' || *srcCharPtr == '\t')
1880 {
1881 srcCharPtr++;
1882 }
1883
1884 if (*srcCharPtr == '\r' || *srcCharPtr == '\n' || *srcCharPtr == '\0')
1885 {
1886 break;
1887 }
1888 }
1889
1890
1891 for (byteCount = 0;;byteCount++)
1892 {
1893 if (srcCharPtr[byteCount] == ' ' || srcCharPtr[byteCount] == '\t' || srcCharPtr[byteCount] == '\r' || srcCharPtr[byteCount] == '\n' || srcCharPtr[byteCount] == '\0')
1894 {
1895 break;
1896 }
1897 }
1898
1899
1900 *outTheHandle = NewHandle(byteCount + 1);
1901
1902 if (*outTheHandle == nil)
1903 {
1904 SetErrorMessageAndLongIntAndBail("CopyIndexedWordToNewHandle: Can't allocate Handle, MemError() = ",MemError());
1905 }
1906
1907
1908 ::BlockMove(srcCharPtr,**outTheHandle,byteCount);
1909
1910 (**outTheHandle)[byteCount] = '\0';
1911
1912 errCode = noErr;
1913
1914
1915EXITPOINT:
1916
1917 return(errCode);
1918}
1919
1920
1921
1922OSErr CopyIndexedLineToCStr(const char *theSrcCStr,int inWhichLine,int *lineEndIndex,Boolean *gotLastLine,char *theDstCStr,const int maxDstCStrLength)
1923{
1924OSErr errCode;
1925int theCurrentLine;
1926int theCurrentLineOffset;
1927int theEOSOffset;
1928
1929
1930 if (theSrcCStr == nil)
1931 {
1932 SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, theSrcCStr == nil"));
1933 }
1934
1935 if (theDstCStr == nil)
1936 {
1937 SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, theDstCStr == nil"));
1938 }
1939
1940 if (inWhichLine < 0)
1941 {
1942 SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, inWhichLine < 0"));
1943 }
1944
1945 if (maxDstCStrLength <= 0)
1946 {
1947 SetErrorMessageAndBail(("CopyIndexedLineToCStr: Bad parameter, maxDstCStrLength <= 0"));
1948 }
1949
1950
1951 if (gotLastLine != nil)
1952 {
1953 *gotLastLine = false;
1954 }
1955
1956
1957 *theDstCStr = 0;
1958
1959 theCurrentLineOffset = 0;
1960
1961 theCurrentLine = 0;
1962
1963
1964 while (theCurrentLine < inWhichLine)
1965 {
1966 while (theSrcCStr[theCurrentLineOffset] != '\r' && theSrcCStr[theCurrentLineOffset] != 0)
1967 {
1968 theCurrentLineOffset++;
1969 }
1970
1971 if (theSrcCStr[theCurrentLineOffset] == 0)
1972 {
1973 break;
1974 }
1975
1976 theCurrentLineOffset++;
1977 theCurrentLine++;
1978 }
1979
1980 if (theSrcCStr[theCurrentLineOffset] == 0)
1981 {
1982 SetErrorMessageAndLongIntAndBail("CopyIndexedLineToCStr: Too few lines in source text, can't get line ",inWhichLine);
1983 }
1984
1985
1986 theEOSOffset = FindCharOffsetInCStr('\r',theSrcCStr + theCurrentLineOffset);
1987
1988 if (theEOSOffset >= 0)
1989 {
1990 CopyCSubstrToCStr(theSrcCStr + theCurrentLineOffset,theEOSOffset,theDstCStr,maxDstCStrLength);
1991
1992 if (gotLastLine != nil)
1993 {
1994 *gotLastLine = false;
1995 }
1996
1997 if (lineEndIndex != nil)
1998 {
1999 *lineEndIndex = theEOSOffset;
2000 }
2001 }
2002
2003 else
2004 {
2005 theEOSOffset = CStrLength(theSrcCStr + theCurrentLineOffset);
2006
2007 CopyCSubstrToCStr(theSrcCStr + theCurrentLineOffset,theEOSOffset,theDstCStr,maxDstCStrLength);
2008
2009 if (gotLastLine != nil)
2010 {
2011 *gotLastLine = true;
2012 }
2013
2014 if (lineEndIndex != nil)
2015 {
2016 *lineEndIndex = theEOSOffset;
2017 }
2018 }
2019
2020
2021 errCode = noErr;
2022
2023
2024EXITPOINT:
2025
2026 return(errCode);
2027}
2028
2029
2030
2031OSErr CopyIndexedLineToNewHandle(const char *theSrcCStr,int inWhichLine,Handle *outNewHandle)
2032{
2033OSErr errCode;
2034int theCurrentLine;
2035int theCurrentLineOffset;
2036int byteCount;
2037
2038
2039 SetErrorMessageAndBailIfNil(theSrcCStr,"CopyIndexedLineToNewHandle: Bad parameter, theSrcCStr == nil");
2040 SetErrorMessageAndBailIfNil(outNewHandle,"CopyIndexedLineToNewHandle: Bad parameter, outNewHandle == nil");
2041
2042 if (inWhichLine < 0)
2043 {
2044 SetErrorMessageAndBail(("CopyIndexedLineToNewHandle: Bad parameter, inWhichLine < 0"));
2045 }
2046
2047
2048 theCurrentLineOffset = 0;
2049
2050 theCurrentLine = 0;
2051
2052
2053 while (theCurrentLine < inWhichLine)
2054 {
2055 while (theSrcCStr[theCurrentLineOffset] != '\r' && theSrcCStr[theCurrentLineOffset] != '\0')
2056 {
2057 theCurrentLineOffset++;
2058 }
2059
2060 if (theSrcCStr[theCurrentLineOffset] == '\0')
2061 {
2062 break;
2063 }
2064
2065 theCurrentLineOffset++;
2066 theCurrentLine++;
2067 }
2068
2069 if (theSrcCStr[theCurrentLineOffset] == '\0')
2070 {
2071 SetErrorMessageAndLongIntAndBail("CopyIndexedLineToNewHandle: Too few lines in source text, can't get line #",inWhichLine);
2072 }
2073
2074
2075 byteCount = 0;
2076
2077 while (theSrcCStr[theCurrentLineOffset + byteCount] != '\r' && theSrcCStr[theCurrentLineOffset + byteCount] != '\0')
2078 {
2079 byteCount++;
2080 }
2081
2082
2083 *outNewHandle = NewHandle(byteCount + 1);
2084
2085 if (*outNewHandle == nil)
2086 {
2087 SetErrorMessageAndLongIntAndBail("CopyIndexedLineToNewHandle: Can't allocate Handle, MemError() = ",MemError());
2088 }
2089
2090 ::BlockMove(theSrcCStr + theCurrentLineOffset,**outNewHandle,byteCount);
2091
2092 (**outNewHandle)[byteCount] = '\0';
2093
2094 errCode = noErr;
2095
2096
2097EXITPOINT:
2098
2099 return(errCode);
2100}
2101
2102
2103
2104
2105OSErr CountDigits(const char *inCStr,int *outNumIntegerDigits,int *outNumFractDigits)
2106{
2107OSErr errCode = noErr;
2108int numIntDigits = 0;
2109int numFractDigits = 0;
2110int digitIndex = 0;
2111
2112
2113 SetErrorMessageAndBailIfNil(inCStr,"CountDigits: Bad parameter, theSrcCStr == nil");
2114 SetErrorMessageAndBailIfNil(outNumIntegerDigits,"CountDigits: Bad parameter, outNumIntegerDigits == nil");
2115 SetErrorMessageAndBailIfNil(outNumFractDigits,"CountDigits: Bad parameter, outNumFractDigits == nil");
2116
2117 digitIndex = 0;
2118
2119 while (inCStr[digitIndex] >= '0' && inCStr[digitIndex] <= '9')
2120 {
2121 digitIndex++;
2122 numIntDigits++;
2123 }
2124
2125 if (inCStr[digitIndex] == '.')
2126 {
2127 digitIndex++;
2128
2129 while (inCStr[digitIndex] >= '0' && inCStr[digitIndex] <= '9')
2130 {
2131 digitIndex++;
2132 numFractDigits++;
2133 }
2134 }
2135
2136 *outNumIntegerDigits = numIntDigits;
2137
2138 *outNumFractDigits = numFractDigits;
2139
2140 errCode = noErr;
2141
2142EXITPOINT:
2143
2144 return(errCode);
2145}
2146
2147
2148
2149OSErr ExtractIntFromCStr(const char *theSrcCStr,int *outInt,Boolean skipLeadingSpaces)
2150{
2151OSErr errCode;
2152int theCharIndex;
2153
2154
2155 if (theSrcCStr == nil)
2156 {
2157 SetErrorMessageAndBail(("ExtractIntFromCStr: Bad parameter, theSrcCStr == nil"));
2158 }
2159
2160 if (outInt == nil)
2161 {
2162 SetErrorMessageAndBail(("ExtractIntFromCStr: Bad parameter, outInt == nil"));
2163 }
2164
2165
2166 *outInt = 0;
2167
2168 theCharIndex = 0;
2169
2170 if (skipLeadingSpaces == true)
2171 {
2172 while (theSrcCStr[theCharIndex] == ' ')
2173 {
2174 theCharIndex++;
2175 }
2176 }
2177
2178 if (theSrcCStr[theCharIndex] < '0' || theSrcCStr[theCharIndex] > '9')
2179 {
2180 SetErrorMessageAndBail(("ExtractIntFromCStr: Bad parameter, theSrcCStr contains a bogus numeric representation"));
2181 }
2182
2183
2184 while (theSrcCStr[theCharIndex] >= '0' && theSrcCStr[theCharIndex] <= '9')
2185 {
2186 *outInt = (*outInt * 10) + (theSrcCStr[theCharIndex] - '0');
2187
2188 theCharIndex++;
2189 }
2190
2191
2192 errCode = noErr;
2193
2194
2195EXITPOINT:
2196
2197 return(errCode);
2198}
2199
2200
2201
2202OSErr ExtractIntFromPStr(const unsigned char *theSrcPStr,int *outInt,Boolean skipLeadingSpaces)
2203{
2204OSErr errCode;
2205char theCStr[256];
2206
2207
2208 if (theSrcPStr == nil)
2209 {
2210 SetErrorMessageAndBail(("ExtractIntFromPStr: Bad parameter, theSrcPStr == nil"));
2211 }
2212
2213 if (outInt == nil)
2214 {
2215 SetErrorMessageAndBail(("ExtractIntFromPStr: Bad parameter, outInt == nil"));
2216 }
2217
2218
2219 CopyPStrToCStr(theSrcPStr,theCStr,sizeof(theCStr));
2220
2221
2222 errCode = ExtractIntFromCStr(theCStr,outInt,skipLeadingSpaces);
2223
2224
2225EXITPOINT:
2226
2227 return(errCode);
2228}
2229
2230
2231
2232int CountOccurencesOfCharInCStr(const char inChar,const char *inSrcCStr)
2233{
2234int theSrcCharIndex;
2235int numOccurrences = -1;
2236
2237
2238 if (inSrcCStr != nil && inChar != '\0')
2239 {
2240 numOccurrences = 0;
2241
2242 for (theSrcCharIndex = 0;inSrcCStr[theSrcCharIndex] != '\0';theSrcCharIndex++)
2243 {
2244 if (inSrcCStr[theSrcCharIndex] == inChar)
2245 {
2246 numOccurrences++;
2247 }
2248 }
2249 }
2250
2251 return(numOccurrences);
2252}
2253
2254
2255int CountWordsInCStr(const char *inSrcCStr)
2256{
2257int numWords = -1;
2258
2259
2260 if (inSrcCStr != nil)
2261 {
2262 numWords = 0;
2263
2264 // Skip lead spaces
2265
2266 while (*inSrcCStr == ' ')
2267 {
2268 inSrcCStr++;
2269 }
2270
2271 while (*inSrcCStr != '\0')
2272 {
2273 numWords++;
2274
2275 while (*inSrcCStr != ' ' && *inSrcCStr != '\0')
2276 {
2277 inSrcCStr++;
2278 }
2279
2280 while (*inSrcCStr == ' ')
2281 {
2282 inSrcCStr++;
2283 }
2284 }
2285 }
2286
2287 return(numWords);
2288}
2289
2290
2291
2292
2293void ConvertCStrToUpperCase(char *theSrcCStr)
2294{
2295char *theCharPtr;
2296
2297
2298 if (theSrcCStr != nil)
2299 {
2300 theCharPtr = theSrcCStr;
2301
2302 while (*theCharPtr != 0)
2303 {
2304 if (*theCharPtr >= 'a' && *theCharPtr <= 'z')
2305 {
2306 *theCharPtr = *theCharPtr - 'a' + 'A';
2307 }
2308
2309 theCharPtr++;
2310 }
2311 }
2312}
2313
2314
2315
2316
2317
2318
2319
2320void ExtractCStrItemFromCStr(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,char *outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim)
2321{
2322int theItem;
2323int theSrcCharIndex;
2324int theDstCharIndex;
2325
2326
2327 if (foundItem != nil)
2328 {
2329 *foundItem = false;
2330 }
2331
2332
2333 if (outDstCharPtr != nil && inDstCharPtrMaxLength > 0 && inItemNumber >= 0 && inItemDelimiter != 0)
2334 {
2335 *outDstCharPtr = 0;
2336
2337
2338 theSrcCharIndex = 0;
2339
2340 for (theItem = 0;theItem < inItemNumber;theItem++)
2341 {
2342 while (inSrcCStr[theSrcCharIndex] != inItemDelimiter && inSrcCStr[theSrcCharIndex] != '\0')
2343 {
2344 theSrcCharIndex++;
2345 }
2346
2347 if (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2348 {
2349 theSrcCharIndex++;
2350
2351 if (inTreatMultipleDelimsAsSingleDelim)
2352 {
2353 while (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2354 {
2355 theSrcCharIndex++;
2356 }
2357 }
2358 }
2359
2360
2361 if (inSrcCStr[theSrcCharIndex] == '\0')
2362 {
2363 goto EXITPOINT;
2364 }
2365 }
2366
2367
2368 if (foundItem != nil)
2369 {
2370 *foundItem = true;
2371 }
2372
2373
2374 theDstCharIndex = 0;
2375
2376 for (;;)
2377 {
2378 if (inSrcCStr[theSrcCharIndex] == 0 || inSrcCStr[theSrcCharIndex] == inItemDelimiter || theDstCharIndex >= inDstCharPtrMaxLength - 1)
2379 {
2380 outDstCharPtr[theDstCharIndex] = 0;
2381
2382 break;
2383 }
2384
2385 outDstCharPtr[theDstCharIndex++] = inSrcCStr[theSrcCharIndex++];
2386 }
2387 }
2388
2389
2390EXITPOINT:
2391
2392 return;
2393}
2394
2395
2396
2397OSErr ExtractCStrItemFromCStrIntoNewHandle(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,Handle *outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim)
2398{
2399OSErr errCode;
2400int theItem;
2401int theSrcCharIndex;
2402int theItemLength;
2403
2404
2405 if (inSrcCStr == nil)
2406 {
2407 SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, inSrcCStr == nil");
2408 errCode = kGenericError;
2409 goto EXITPOINT;
2410 }
2411
2412 if (outNewHandle == nil)
2413 {
2414 SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, outNewHandle == nil");
2415 errCode = kGenericError;
2416 goto EXITPOINT;
2417 }
2418
2419 if (foundItem == nil)
2420 {
2421 SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, foundItem == nil");
2422 errCode = kGenericError;
2423 goto EXITPOINT;
2424 }
2425
2426 if (inItemNumber < 0)
2427 {
2428 SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, inItemNumber < 0");
2429 errCode = kGenericError;
2430 goto EXITPOINT;
2431 }
2432
2433 if (inItemDelimiter == 0)
2434 {
2435 SetErrorMessage("ExtractCStrItemFromCStrIntoNewHandle: Bad parameter, inItemDelimiter == 0");
2436 errCode = kGenericError;
2437 goto EXITPOINT;
2438 }
2439
2440
2441 *foundItem = false;
2442
2443 theSrcCharIndex = 0;
2444
2445 for (theItem = 0;theItem < inItemNumber;theItem++)
2446 {
2447 while (inSrcCStr[theSrcCharIndex] != inItemDelimiter && inSrcCStr[theSrcCharIndex] != '\0')
2448 {
2449 theSrcCharIndex++;
2450 }
2451
2452 if (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2453 {
2454 theSrcCharIndex++;
2455
2456 if (inTreatMultipleDelimsAsSingleDelim)
2457 {
2458 while (inSrcCStr[theSrcCharIndex] == inItemDelimiter)
2459 {
2460 theSrcCharIndex++;
2461 }
2462 }
2463 }
2464
2465
2466 if (inSrcCStr[theSrcCharIndex] == '\0')
2467 {
2468 errCode = noErr;
2469
2470 goto EXITPOINT;
2471 }
2472 }
2473
2474
2475 *foundItem = true;
2476
2477
2478 for (theItemLength = 0;;theItemLength++)
2479 {
2480 if (inSrcCStr[theSrcCharIndex + theItemLength] == 0 || inSrcCStr[theSrcCharIndex + theItemLength] == inItemDelimiter)
2481 {
2482 break;
2483 }
2484 }
2485
2486
2487 *outNewHandle = NewHandle(theItemLength + 1);
2488
2489 if (*outNewHandle == nil)
2490 {
2491 SetErrorMessageAndLongIntAndBail("ExtractCStrItemFromCStrIntoNewHandle: Can't allocate Handle, MemError() = ",MemError());
2492 }
2493
2494
2495 BlockMove(inSrcCStr + theSrcCharIndex,**outNewHandle,theItemLength);
2496
2497 (**outNewHandle)[theItemLength] = 0;
2498
2499 errCode = noErr;
2500
2501
2502EXITPOINT:
2503
2504 return(errCode);
2505}
2506
2507
2508
2509
2510
2511
2512OSErr ExtractFloatFromCStr(const char *inCString,extended80 *outFloat)
2513{
2514OSErr errCode;
2515Str255 theStr255;
2516Handle theNumberPartsTableHandle = nil;
2517long theNumberPartsOffset,theNumberPartsLength;
2518FormatResultType theFormatResultType;
2519NumberParts theNumberPartsTable;
2520NumFormatStringRec theNumFormatStringRec;
2521
2522
2523 if (inCString == nil)
2524 {
2525 SetErrorMessage("ExtractFloatFromCStr: Bad parameter, inCString == nil");
2526 errCode = kGenericError;
2527 goto EXITPOINT;
2528 }
2529
2530 if (outFloat == nil)
2531 {
2532 SetErrorMessage("ExtractFloatFromCStr: Bad parameter, outFloat == nil");
2533 errCode = kGenericError;
2534 goto EXITPOINT;
2535 }
2536
2537
2538// GetIntlResourceTable(smRoman,smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2539
2540 GetIntlResourceTable(GetScriptManagerVariable(smSysScript),smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2541
2542 if (theNumberPartsTableHandle == nil)
2543 {
2544 SetErrorMessage("ExtractFloatFromCStr: Can't get number parts table for converting string representations to/from numeric representations");
2545 errCode = kGenericError;
2546 goto EXITPOINT;
2547 }
2548
2549 if (theNumberPartsLength > sizeof(theNumberPartsTable))
2550 {
2551 SetErrorMessage("ExtractFloatFromCStr: Number parts table has bad length");
2552 errCode = kGenericError;
2553 goto EXITPOINT;
2554 }
2555
2556
2557 BlockMove(*theNumberPartsTableHandle + theNumberPartsOffset,&theNumberPartsTable,theNumberPartsLength);
2558
2559
2560 theFormatResultType = (FormatResultType) StringToFormatRec(kNumberFormatString,&theNumberPartsTable,&theNumFormatStringRec);
2561
2562 if (theFormatResultType != fFormatOK)
2563 {
2564 SetErrorMessage("ExtractFloatFromCStr: StringToFormatRec() != fFormatOK");
2565 errCode = kGenericError;
2566 goto EXITPOINT;
2567 }
2568
2569
2570 CopyCStrToPStr(inCString,theStr255,sizeof(theStr255));
2571
2572
2573 theFormatResultType = (FormatResultType) StringToExtended(theStr255,&theNumFormatStringRec,&theNumberPartsTable,outFloat);
2574
2575 if (theFormatResultType != fFormatOK && theFormatResultType != fBestGuess)
2576 {
2577 SetErrorMessageAndLongIntAndBail("ExtractFloatFromCStr: StringToExtended() = ",theFormatResultType);
2578 }
2579
2580
2581 errCode = noErr;
2582
2583
2584EXITPOINT:
2585
2586 return(errCode);
2587}
2588
2589
2590
2591OSErr CopyFloatToCStr(const extended80 *theFloat,char *theCStr,const int maxCStrLength,const int inMaxNumIntDigits,const int inMaxNumFractDigits)
2592{
2593OSErr errCode;
2594Str255 theStr255;
2595Handle theNumberPartsTableHandle = nil;
2596long theNumberPartsOffset,theNumberPartsLength;
2597FormatResultType theFormatResultType;
2598NumberParts theNumberPartsTable;
2599NumFormatStringRec theNumFormatStringRec;
2600
2601
2602 if (theCStr == nil)
2603 {
2604 SetErrorMessage("CopyFloatToCStr: Bad parameter, theCStr == nil");
2605 errCode = kGenericError;
2606 goto EXITPOINT;
2607 }
2608
2609 if (theFloat == nil)
2610 {
2611 SetErrorMessage("CopyFloatToCStr: Bad parameter, theFloat == nil");
2612 errCode = kGenericError;
2613 goto EXITPOINT;
2614 }
2615
2616
2617// GetIntlResourceTable(smRoman,smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2618
2619 GetIntlResourceTable(GetScriptManagerVariable(smSysScript),smNumberPartsTable,&theNumberPartsTableHandle,&theNumberPartsOffset,&theNumberPartsLength);
2620
2621 if (theNumberPartsTableHandle == nil)
2622 {
2623 SetErrorMessage("CopyFloatToCStr: Can't get number parts table for converting string representations to/from numeric representations");
2624 errCode = kGenericError;
2625 goto EXITPOINT;
2626 }
2627
2628 if (theNumberPartsLength > sizeof(theNumberPartsTable))
2629 {
2630 SetErrorMessage("CopyFloatToCStr: Number parts table has bad length");
2631 errCode = kGenericError;
2632 goto EXITPOINT;
2633 }
2634
2635
2636 BlockMove(*theNumberPartsTableHandle + theNumberPartsOffset,&theNumberPartsTable,theNumberPartsLength);
2637
2638
2639 if (inMaxNumIntDigits >= 0 || inMaxNumFractDigits >= 0)
2640 {
2641 char numberFormat[64];
2642 int numberFormatLength = 0;
2643
2644 for (int i = 0;i < inMaxNumIntDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2645 {
2646 numberFormat[numberFormatLength++] = '0';
2647 }
2648
2649 if (inMaxNumFractDigits > 0 && numberFormatLength < sizeof(numberFormat) - 1)
2650 {
2651 numberFormat[numberFormatLength++] = '.';
2652
2653 for (int i = 0;i < inMaxNumFractDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2654 {
2655 numberFormat[numberFormatLength++] = '0';
2656 }
2657 }
2658
2659
2660 if (numberFormatLength < sizeof(numberFormat) - 1)
2661 {
2662 numberFormat[numberFormatLength++] = ';';
2663 }
2664
2665 if (numberFormatLength < sizeof(numberFormat) - 1)
2666 {
2667 numberFormat[numberFormatLength++] = '-';
2668 }
2669
2670
2671 for (int i = 0;i < inMaxNumIntDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2672 {
2673 numberFormat[numberFormatLength++] = '0';
2674 }
2675
2676 if (inMaxNumFractDigits > 0 && numberFormatLength < sizeof(numberFormat) - 1)
2677 {
2678 numberFormat[numberFormatLength++] = '.';
2679
2680 for (int i = 0;i < inMaxNumFractDigits && numberFormatLength < sizeof(numberFormat) - 1;i++)
2681 {
2682 numberFormat[numberFormatLength++] = '0';
2683 }
2684 }
2685
2686 numberFormat[numberFormatLength] = '\0';
2687
2688
2689 Str255 tempStr255;
2690
2691 CopyCStrToPStr(numberFormat,tempStr255,sizeof(tempStr255));
2692
2693 theFormatResultType = (FormatResultType) StringToFormatRec(tempStr255,&theNumberPartsTable,&theNumFormatStringRec);
2694 }
2695
2696 else
2697 {
2698 theFormatResultType = (FormatResultType) StringToFormatRec(kNumberFormatString,&theNumberPartsTable,&theNumFormatStringRec);
2699 }
2700
2701 if (theFormatResultType != fFormatOK)
2702 {
2703 SetErrorMessage("CopyFloatToCStr: StringToFormatRec() != fFormatOK");
2704 errCode = kGenericError;
2705 goto EXITPOINT;
2706 }
2707
2708
2709 theFormatResultType = (FormatResultType) ExtendedToString(theFloat,&theNumFormatStringRec,&theNumberPartsTable,theStr255);
2710
2711 if (theFormatResultType != fFormatOK)
2712 {
2713 SetErrorMessage("CopyFloatToCStr: ExtendedToString() != fFormatOK");
2714 errCode = kGenericError;
2715 goto EXITPOINT;
2716 }
2717
2718
2719 CopyPStrToCStr(theStr255,theCStr,maxCStrLength);
2720
2721 errCode = noErr;
2722
2723
2724EXITPOINT:
2725
2726 return(errCode);
2727}
2728
2729
2730
2731
2732
2733void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL)
2734{
2735 if (ioSrcCharPtr != nil && *ioSrcCharPtr != nil)
2736 {
2737 if (inStopAtEOL)
2738 {
2739 while ((**ioSrcCharPtr == ' ' || **ioSrcCharPtr == '\t') && **ioSrcCharPtr != '\r' && **ioSrcCharPtr != '\n')
2740 {
2741 *ioSrcCharPtr++;
2742 }
2743 }
2744
2745 else
2746 {
2747 while (**ioSrcCharPtr == ' ' || **ioSrcCharPtr == '\t')
2748 {
2749 *ioSrcCharPtr++;
2750 }
2751 }
2752 }
2753}
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.hpp b/src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.hpp
deleted file mode 100644
index 5045c41019..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/CPStringUtils.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
1#pragma once
2
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7void CopyPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
8void CopyPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
9void CopyCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxDstStrLength);
10void CopyCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
11void ConcatPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
12void ConcatPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
13void ConcatCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
14void ConcatCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxCStrLength);
15
16void ConcatCharToCStr(const char theChar,char *theDstCStr,const int maxCStrLength);
17void ConcatCharToPStr(const char theChar,unsigned char *theDstPStr,const int maxPStrLength);
18
19int ComparePStrs(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase = true);
20int CompareCStrs(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
21int CompareCStrToPStr(const char *theCStr,const unsigned char *thePStr,const Boolean ignoreCase = true);
22
23Boolean CStrsAreEqual(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
24Boolean PStrsAreEqual(const unsigned char *theFirstCStr,const unsigned char *theSecondCStr,const Boolean ignoreCase = true);
25
26void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
27void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength);
28void ConcatLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
29void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
30
31void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
32void ConcatLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
33
34long CStrLength(const char *theCString);
35long PStrLength(const unsigned char *thePString);
36
37OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle);
38OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle);
39
40OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle);
41OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle);
42OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle);
43
44OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
45OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
46OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength = nil);
47OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength = nil);
48
49void ZeroMem(void *theMemPtr,const unsigned long numBytes);
50
51char *FindCharInCStr(const char theChar,const char *theCString);
52long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase = false);
53long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase = false);
54
55void CopyCSubstrToCStr(const char *theSrcCStr,const int maxCharsToCopy,char *theDstCStr,const int maxDstStrLength);
56void CopyCSubstrToPStr(const char *theSrcCStr,const int maxCharsToCopy,unsigned char *theDstPStr,const int maxDstStrLength);
57
58void InsertCStrIntoCStr(const char *theSrcCStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
59void InsertPStrIntoCStr(const unsigned char *theSrcPStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
60OSErr InsertCStrIntoHandle(const char *theCString,Handle theHandle,const long inInsertOffset);
61
62void CopyCStrAndInsertCStrIntoCStr(const char *theSrcCStr,const char *theInsertCStr,char *theDstCStr,const int maxDstStrLength);
63
64void CopyCStrAndInsertCStrsLongIntsIntoCStr(const char *theSrcCStr,const char **theInsertCStrs,const long *theLongInts,char *theDstCStr,const int maxDstStrLength);
65
66void CopyCStrAndInsert1LongIntIntoCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
67void CopyCStrAndInsert2LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,char *theDstCStr,const int maxDstStrLength);
68void CopyCStrAndInsert3LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,const long long3,char *theDstCStr,const int maxDstStrLength);
69
70void CopyCStrAndInsertCStrLongIntIntoCStr(const char *theSrcCStr,const char *theInsertCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
71OSErr CopyCStrAndInsertCStrLongIntIntoHandle(const char *theSrcCStr,const char *theInsertCStr,const long theNum,Handle *theHandle);
72
73
74OSErr CopyIndexedWordToCStr(char *theSrcCStr,int whichWord,char *theDstCStr,int maxDstCStrLength);
75OSErr CopyIndexedWordToNewHandle(char *theSrcCStr,int whichWord,Handle *outTheHandle);
76
77OSErr CopyIndexedLineToCStr(const char *theSrcCStr,int inWhichLine,int *lineEndIndex,Boolean *gotLastLine,char *theDstCStr,const int maxDstCStrLength);
78OSErr CopyIndexedLineToNewHandle(const char *theSrcCStr,int inWhichLine,Handle *outNewHandle);
79
80OSErr ExtractIntFromCStr(const char *theSrcCStr,int *outInt,Boolean skipLeadingSpaces = true);
81OSErr ExtractIntFromPStr(const unsigned char *theSrcPStr,int *outInt,Boolean skipLeadingSpaces = true);
82
83
84void ConvertCStrToUpperCase(char *theSrcCStr);
85
86
87int CountOccurencesOfCharInCStr(const char inChar,const char *inSrcCStr);
88int CountWordsInCStr(const char *inSrcCStr);
89
90OSErr CountDigits(const char *inCStr,int *outNumIntegerDigits,int *outNumFractDigits);
91
92void ExtractCStrItemFromCStr(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,char *outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
93OSErr ExtractCStrItemFromCStrIntoNewHandle(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,Handle *outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
94
95
96OSErr ExtractFloatFromCStr(const char *inCString,extended80 *outFloat);
97OSErr CopyFloatToCStr(const extended80 *theFloat,char *theCStr,const int maxCStrLength,const int inMaxNumIntDigits = -1,const int inMaxNumFractDigits = -1);
98
99void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL = false);
100
101
102#ifdef __cplusplus
103}
104#endif
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.cpp b/src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.cpp
deleted file mode 100644
index 80b6a675f4..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
1/* ====================================================================
2 * Copyright (c) 1998-1999 The OpenSSL Project. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. All advertising materials mentioning features or use of this
17 * software must display the following acknowledgment:
18 * "This product includes software developed by the OpenSSL Project
19 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20 *
21 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22 * endorse or promote products derived from this software without
23 * prior written permission. For written permission, please contact
24 * openssl-core@openssl.org.
25 *
26 * 5. Products derived from this software may not be called "OpenSSL"
27 * nor may "OpenSSL" appear in their names without prior written
28 * permission of the OpenSSL Project.
29 *
30 * 6. Redistributions of any form whatsoever must retain the following
31 * acknowledgment:
32 * "This product includes software developed by the OpenSSL Project
33 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34 *
35 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46 * OF THE POSSIBILITY OF SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This product includes cryptographic software written by Eric Young
50 * (eay@cryptsoft.com). This product includes software written by Tim
51 * Hudson (tjh@cryptsoft.com).
52 *
53 */
54
55
56
57 #include "ErrorHandling.hpp"
58#include "CPStringUtils.hpp"
59
60#ifdef __EXCEPTIONS_ENABLED__
61 #include "CMyException.hpp"
62#endif
63
64
65static char gErrorMessageBuffer[512];
66
67char *gErrorMessage = gErrorMessageBuffer;
68int gErrorMessageMaxLength = sizeof(gErrorMessageBuffer);
69
70
71
72void SetErrorMessage(const char *theErrorMessage)
73{
74 if (theErrorMessage != nil)
75 {
76 CopyCStrToCStr(theErrorMessage,gErrorMessage,gErrorMessageMaxLength);
77 }
78}
79
80
81void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt)
82{
83 if (theErrorMessage != nil)
84 {
85 CopyCStrAndConcatLongIntToCStr(theErrorMessage,theLongInt,gErrorMessage,gErrorMessageMaxLength);
86 }
87}
88
89void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt)
90{
91 if (theErrorMessage != nil)
92 {
93 CopyCStrAndInsertCStrLongIntIntoCStr(theErrorMessage,theCStr,theLongInt,gErrorMessage,gErrorMessageMaxLength);
94 }
95
96}
97
98void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr)
99{
100 if (theErrorMessage != nil)
101 {
102 CopyCStrAndInsertCStrLongIntIntoCStr(theErrorMessage,theCStr,-1,gErrorMessage,gErrorMessageMaxLength);
103 }
104}
105
106
107void AppendCStrToErrorMessage(const char *theErrorMessage)
108{
109 if (theErrorMessage != nil)
110 {
111 ConcatCStrToCStr(theErrorMessage,gErrorMessage,gErrorMessageMaxLength);
112 }
113}
114
115
116void AppendLongIntToErrorMessage(const long theLongInt)
117{
118 ConcatLongIntToCStr(theLongInt,gErrorMessage,gErrorMessageMaxLength);
119}
120
121
122
123char *GetErrorMessage(void)
124{
125 return gErrorMessage;
126}
127
128
129OSErr GetErrorMessageInNewHandle(Handle *inoutHandle)
130{
131OSErr errCode;
132
133
134 errCode = CopyCStrToNewHandle(gErrorMessage,inoutHandle);
135
136 return(errCode);
137}
138
139
140OSErr GetErrorMessageInExistingHandle(Handle inoutHandle)
141{
142OSErr errCode;
143
144
145 errCode = CopyCStrToExistingHandle(gErrorMessage,inoutHandle);
146
147 return(errCode);
148}
149
150
151
152OSErr AppendErrorMessageToHandle(Handle inoutHandle)
153{
154OSErr errCode;
155
156
157 errCode = AppendCStrToHandle(gErrorMessage,inoutHandle,nil);
158
159 return(errCode);
160}
161
162
163#ifdef __EXCEPTIONS_ENABLED__
164
165void ThrowErrorMessageException(void)
166{
167 ThrowDescriptiveException(gErrorMessage);
168}
169
170#endif
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.hpp b/src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.hpp
deleted file mode 100644
index fbfbe786b7..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/ErrorHandling.hpp
+++ /dev/null
@@ -1,147 +0,0 @@
1#ifdef __cplusplus
2extern "C" {
3#endif
4
5#ifndef kGenericError
6 #define kGenericError -1
7#endif
8
9extern char *gErrorMessage;
10
11
12void SetErrorMessage(const char *theErrorMessage);
13void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt);
14void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt);
15void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr);
16void AppendCStrToErrorMessage(const char *theErrorMessage);
17void AppendLongIntToErrorMessage(const long theLongInt);
18
19
20char *GetErrorMessage(void);
21OSErr GetErrorMessageInNewHandle(Handle *inoutHandle);
22OSErr GetErrorMessageInExistingHandle(Handle inoutHandle);
23OSErr AppendErrorMessageToHandle(Handle inoutHandle);
24
25
26#ifdef __EXCEPTIONS_ENABLED__
27 void ThrowErrorMessageException(void);
28#endif
29
30
31
32// A bunch of evil macros that would be unnecessary if I were always using C++ !
33
34#define SetErrorMessageAndBailIfNil(theArg,theMessage) \
35{ \
36 if (theArg == nil) \
37 { \
38 SetErrorMessage(theMessage); \
39 errCode = kGenericError; \
40 goto EXITPOINT; \
41 } \
42}
43
44
45#define SetErrorMessageAndBail(theMessage) \
46{ \
47 SetErrorMessage(theMessage); \
48 errCode = kGenericError; \
49 goto EXITPOINT; \
50}
51
52
53#define SetErrorMessageAndLongIntAndBail(theMessage,theLongInt) \
54{ \
55 SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
56 errCode = kGenericError; \
57 goto EXITPOINT; \
58}
59
60
61#define SetErrorMessageAndLongIntAndBailIfError(theErrCode,theMessage,theLongInt) \
62{ \
63 if (theErrCode != noErr) \
64 { \
65 SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
66 errCode = theErrCode; \
67 goto EXITPOINT; \
68 } \
69}
70
71
72#define SetErrorMessageCStrLongIntAndBailIfError(theErrCode,theMessage,theCStr,theLongInt) \
73{ \
74 if (theErrCode != noErr) \
75 { \
76 SetErrorMessageAndCStrAndLongInt(theMessage,theCStr,theLongInt); \
77 errCode = theErrCode; \
78 goto EXITPOINT; \
79 } \
80}
81
82
83#define SetErrorMessageAndCStrAndBail(theMessage,theCStr) \
84{ \
85 SetErrorMessageAndCStr(theMessage,theCStr); \
86 errCode = kGenericError; \
87 goto EXITPOINT; \
88}
89
90
91#define SetErrorMessageAndBailIfError(theErrCode,theMessage) \
92{ \
93 if (theErrCode != noErr) \
94 { \
95 SetErrorMessage(theMessage); \
96 errCode = theErrCode; \
97 goto EXITPOINT; \
98 } \
99}
100
101
102#define SetErrorMessageAndLongIntAndBailIfNil(theArg,theMessage,theLongInt) \
103{ \
104 if (theArg == nil) \
105 { \
106 SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
107 errCode = kGenericError; \
108 goto EXITPOINT; \
109 } \
110}
111
112
113#define BailIfError(theErrCode) \
114{ \
115 if ((theErrCode) != noErr) \
116 { \
117 goto EXITPOINT; \
118 } \
119}
120
121
122#define SetErrCodeAndBail(theErrCode) \
123{ \
124 errCode = theErrCode; \
125 \
126 goto EXITPOINT; \
127}
128
129
130#define SetErrorCodeAndMessageAndBail(theErrCode,theMessage) \
131{ \
132 SetErrorMessage(theMessage); \
133 errCode = theErrCode; \
134 goto EXITPOINT; \
135}
136
137
138#define BailNow() \
139{ \
140 errCode = kGenericError; \
141 goto EXITPOINT; \
142}
143
144
145#ifdef __cplusplus
146}
147#endif
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/GetHTTPS.cpp b/src/lib/libssl/src/MacOS/GetHTTPS.src/GetHTTPS.cpp
deleted file mode 100644
index 3a5e3f0186..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/GetHTTPS.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
1/*
2 * An demo illustrating how to retrieve a URI from a secure HTTP server.
3 *
4 * Author: Roy Wood
5 * Date: September 7, 1999
6 * Comments: This relies heavily on my MacSockets library.
7 * This project is also set up so that it expects the OpenSSL source folder (0.9.4 as I write this)
8 * to live in a folder called "OpenSSL-0.9.4" in this project's parent folder. For example:
9 *
10 * Macintosh HD:
11 * Development:
12 * OpenSSL-0.9.4:
13 * (OpenSSL sources here)
14 * OpenSSL Example:
15 * (OpenSSL example junk here)
16 *
17 *
18 * Also-- before attempting to compile this, make sure the aliases in "OpenSSL-0.9.4:include:openssl"
19 * are installed! Use the AppleScript applet in the "openssl-0.9.4" folder to do this!
20 */
21/* modified to seed the PRNG */
22/* modified to use CRandomizer for seeding */
23
24
25// Include some funky libs I've developed over time
26
27#include "CPStringUtils.hpp"
28#include "ErrorHandling.hpp"
29#include "MacSocket.h"
30#include "Randomizer.h"
31
32// We use the OpenSSL implementation of SSL....
33// This was a lot of work to finally get going, though you wouldn't know it by the results!
34
35#include <openssl/ssl.h>
36#include <openssl/err.h>
37
38#include <timer.h>
39
40// Let's try grabbing some data from here:
41
42#define kHTTPS_DNS "www.apache-ssl.org"
43#define kHTTPS_Port 443
44#define kHTTPS_URI "/"
45
46
47// Forward-declare this
48
49OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr);
50
51// My idle-wait callback. Doesn't do much, does it? Silly cooperative multitasking.
52
53OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr)
54{
55#pragma unused(inUserRefPtr)
56
57EventRecord theEvent;
58 ::EventAvail(everyEvent,&theEvent);
59
60 CRandomizer *randomizer = (CRandomizer*)inUserRefPtr;
61 if (randomizer)
62 randomizer->PeriodicAction();
63
64 return(noErr);
65}
66
67
68// Finally!
69
70void main(void)
71{
72 OSErr errCode;
73 int theSocket = -1;
74 int theTimeout = 30;
75
76 SSL_CTX *ssl_ctx = nil;
77 SSL *ssl = nil;
78
79 char tempString[256];
80 UnsignedWide microTickCount;
81
82
83 CRandomizer randomizer;
84
85 printf("OpenSSL Demo by Roy Wood, roy@centricsystems.ca\n\n");
86
87 BailIfError(errCode = MacSocket_Startup());
88
89
90
91 // Create a socket-like object
92
93 BailIfError(errCode = MacSocket_socket(&theSocket,false,theTimeout * 60,MyMacSocket_IdleWaitCallback,&randomizer));
94
95
96 // Set up the connect string and try to connect
97
98 CopyCStrAndInsertCStrLongIntIntoCStr("%s:%ld",kHTTPS_DNS,kHTTPS_Port,tempString,sizeof(tempString));
99
100 printf("Connecting to %s....\n",tempString);
101
102 BailIfError(errCode = MacSocket_connect(theSocket,tempString));
103
104
105 // Init SSL stuff
106
107 SSL_load_error_strings();
108
109 SSLeay_add_ssl_algorithms();
110
111
112 // Pick the SSL method
113
114// ssl_ctx = SSL_CTX_new(SSLv2_client_method());
115 ssl_ctx = SSL_CTX_new(SSLv23_client_method());
116// ssl_ctx = SSL_CTX_new(SSLv3_client_method());
117
118
119 // Create an SSL thingey and try to negotiate the connection
120
121 ssl = SSL_new(ssl_ctx);
122
123 SSL_set_fd(ssl,theSocket);
124
125 errCode = SSL_connect(ssl);
126
127 if (errCode < 0)
128 {
129 SetErrorMessageAndLongIntAndBail("OpenSSL: Can't initiate SSL connection, SSL_connect() = ",errCode);
130 }
131
132 // Request the URI from the host
133
134 CopyCStrToCStr("GET ",tempString,sizeof(tempString));
135 ConcatCStrToCStr(kHTTPS_URI,tempString,sizeof(tempString));
136 ConcatCStrToCStr(" HTTP/1.0\r\n\r\n",tempString,sizeof(tempString));
137
138
139 errCode = SSL_write(ssl,tempString,CStrLength(tempString));
140
141 if (errCode < 0)
142 {
143 SetErrorMessageAndLongIntAndBail("OpenSSL: Error writing data via ssl, SSL_write() = ",errCode);
144 }
145
146
147 for (;;)
148 {
149 char tempString[256];
150 int bytesRead;
151
152
153 // Read some bytes and dump them to the console
154
155 bytesRead = SSL_read(ssl,tempString,sizeof(tempString) - 1);
156
157 if (bytesRead == 0 && MacSocket_RemoteEndIsClosing(theSocket))
158 {
159 break;
160 }
161
162 else if (bytesRead < 0)
163 {
164 SetErrorMessageAndLongIntAndBail("OpenSSL: Error reading data via ssl, SSL_read() = ",bytesRead);
165 }
166
167
168 tempString[bytesRead] = '\0';
169
170 printf("%s", tempString);
171 }
172
173 printf("\n\n\n");
174
175 // All done!
176
177 errCode = noErr;
178
179
180EXITPOINT:
181
182 // Clean up and go home
183
184 if (theSocket >= 0)
185 {
186 MacSocket_close(theSocket);
187 }
188
189 if (ssl != nil)
190 {
191 SSL_free(ssl);
192 }
193
194 if (ssl_ctx != nil)
195 {
196 SSL_CTX_free(ssl_ctx);
197 }
198
199
200 if (errCode != noErr)
201 {
202 printf("An error occurred:\n");
203
204 printf("%s",GetErrorMessage());
205 }
206
207
208 MacSocket_Shutdown();
209}
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.cpp b/src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.cpp
deleted file mode 100644
index c95d804d5d..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.cpp
+++ /dev/null
@@ -1,1607 +0,0 @@
1/*
2 * A simple socket-like package.
3 * This could undoubtedly be improved, since it does polling and busy-waiting.
4 * At least it uses asynch I/O and implements timeouts!
5 *
6 * Other funkiness includes the use of my own (possibly brain-damaged) error-handling infrastructure.
7 *
8 * -Roy Wood (roy@centricsystems.ca)
9 *
10 */
11
12
13/* ====================================================================
14 * Copyright (c) 1998-1999 The OpenSSL Project. All rights reserved.
15 *
16 * Redistribution and use in source and binary forms, with or without
17 * modification, are permitted provided that the following conditions
18 * are met:
19 *
20 * 1. Redistributions of source code must retain the above copyright
21 * notice, this list of conditions and the following disclaimer.
22 *
23 * 2. Redistributions in binary form must reproduce the above copyright
24 * notice, this list of conditions and the following disclaimer in
25 * the documentation and/or other materials provided with the
26 * distribution.
27 *
28 * 3. All advertising materials mentioning features or use of this
29 * software must display the following acknowledgment:
30 * "This product includes software developed by the OpenSSL Project
31 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
32 *
33 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
34 * endorse or promote products derived from this software without
35 * prior written permission. For written permission, please contact
36 * openssl-core@openssl.org.
37 *
38 * 5. Products derived from this software may not be called "OpenSSL"
39 * nor may "OpenSSL" appear in their names without prior written
40 * permission of the OpenSSL Project.
41 *
42 * 6. Redistributions of any form whatsoever must retain the following
43 * acknowledgment:
44 * "This product includes software developed by the OpenSSL Project
45 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
48 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
50 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
51 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
52 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
53 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
54 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
56 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
57 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
58 * OF THE POSSIBILITY OF SUCH DAMAGE.
59 * ====================================================================
60 *
61 * This product includes cryptographic software written by Eric Young
62 * (eay@cryptsoft.com). This product includes software written by Tim
63 * Hudson (tjh@cryptsoft.com).
64 *
65 */
66
67
68
69
70
71#include "MacSocket.h"
72
73#include <Threads.h>
74
75#include <OpenTransport.h>
76#include <OpenTpTInternet.h>
77#include <OpenTptClient.h>
78
79
80
81#include "CPStringUtils.hpp"
82#include "ErrorHandling.hpp"
83
84
85// #define MACSOCKET_DEBUG 1
86
87#ifdef MACSOCKET_DEBUG
88 #include <stdio.h>
89#endif
90
91
92
93extern int errno;
94
95
96#define kMaxNumSockets 4
97
98
99struct SocketStruct
100{
101 Boolean mIsInUse;
102
103 Boolean mEndpointIsBound;
104
105 Boolean mLocalEndIsConnected;
106 Boolean mRemoteEndIsConnected;
107
108 Boolean mReceivedTOpenComplete;
109 Boolean mReceivedTBindComplete;
110 Boolean mReceivedTConnect;
111 Boolean mReceivedTListen;
112 Boolean mReceivedTPassCon;
113 Boolean mReceivedTDisconnect;
114 Boolean mReceivedTOrdRel;
115 Boolean mReceivedTDisconnectComplete;
116
117 long mTimeoutTicks;
118 long mOperationStartTicks;
119
120 MacSocket_IdleWaitCallback mIdleWaitCallback;
121 void *mUserRefPtr;
122
123 OTEventCode mExpectedCode;
124 OTResult mAsyncOperationResult;
125
126 EndpointRef mEndPointRef;
127 TBind *mBindRequestedAddrInfo;
128 TBind *mAssignedAddrInfo;
129 TCall *mRemoteAddrInfo;
130
131 Boolean mReadyToReadData;
132 Boolean mReadyToWriteData;
133
134 Ptr mReadBuffer;
135 Ptr mWriteBuffer;
136
137 int mLastError;
138 char mErrMessage[256];
139};
140
141typedef struct SocketStruct SocketStruct;
142
143
144static SocketStruct sSockets[kMaxNumSockets];
145static Boolean sSocketsSetup = false;
146
147
148
149
150static OSErr MyBusyWait(SocketStruct *ioSocket,Boolean returnImmediatelyOnError,OTResult *outOTResult,Boolean *inAsyncOperationCompleteFlag);
151
152static pascal void OTNonYieldingNotifier(void *contextPtr,OTEventCode code,OTResult result,void *cookie);
153
154static Boolean SocketIndexIsValid(const int inSocketNum);
155
156static void InitSocket(SocketStruct *ioSocket);
157
158static void PrepareForAsyncOperation(SocketStruct *ioSocket,const OTEventCode inExpectedCode);
159
160static Boolean TimeoutElapsed(const SocketStruct *inSocket);
161
162static OSStatus NegotiateIPReuseAddrOption(EndpointRef inEndpoint,const Boolean inEnableReuseIP);
163
164
165
166void MacSocket_GetSocketErrorInfo(const int inSocketNum,int *outSocketErrCode,char *outSocketErrString,const int inSocketErrStringMaxLength)
167{
168 if (outSocketErrCode != nil)
169 {
170 *outSocketErrCode = -1;
171 }
172
173 if (outSocketErrString != nil)
174 {
175 CopyCStrToCStr("",outSocketErrString,inSocketErrStringMaxLength);
176 }
177
178
179 if (SocketIndexIsValid(inSocketNum))
180 {
181 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
182
183
184 if (outSocketErrCode != nil)
185 {
186 *outSocketErrCode = theSocketStruct->mLastError;
187 }
188
189 if (outSocketErrString != nil)
190 {
191 CopyCStrToCStr(theSocketStruct->mErrMessage,outSocketErrString,inSocketErrStringMaxLength);
192 }
193 }
194}
195
196
197void MacSocket_SetUserRefPtr(const int inSocketNum,void *inNewRefPtr)
198{
199 if (SocketIndexIsValid(inSocketNum))
200 {
201 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
202
203 theSocketStruct->mUserRefPtr = inNewRefPtr;
204 }
205}
206
207
208
209void MacSocket_GetLocalIPAndPort(const int inSocketNum,char *outIPAndPort,const int inIPAndPortLength)
210{
211 if (outIPAndPort != nil && SocketIndexIsValid(inSocketNum))
212 {
213 char tempString[256];
214 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
215
216
217 CopyCStrToCStr("",tempString,sizeof(tempString));
218
219 if (theSocketStruct->mAssignedAddrInfo != nil)
220 {
221 InetAddress *theInetAddress = (InetAddress *) theSocketStruct->mAssignedAddrInfo->addr.buf;
222 InetHost theInetHost = theInetAddress->fHost;
223
224 if (theInetHost == 0)
225 {
226 InetInterfaceInfo theInetInterfaceInfo;
227
228 if (::OTInetGetInterfaceInfo(&theInetInterfaceInfo,kDefaultInetInterface) == noErr)
229 {
230 theInetHost = theInetInterfaceInfo.fAddress;
231 }
232 }
233
234 ::OTInetHostToString(theInetHost,tempString);
235
236 ConcatCStrToCStr(":",tempString,sizeof(tempString));
237 ConcatLongIntToCStr(theInetAddress->fPort,tempString,sizeof(tempString));
238 }
239
240 CopyCStrToCStr(tempString,outIPAndPort,inIPAndPortLength);
241 }
242}
243
244
245
246void MacSocket_GetRemoteIPAndPort(const int inSocketNum,char *outIPAndPort,const int inIPAndPortLength)
247{
248 if (outIPAndPort != nil && SocketIndexIsValid(inSocketNum))
249 {
250 char tempString[256];
251 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
252
253
254 CopyCStrToCStr("",tempString,sizeof(tempString));
255
256 if (theSocketStruct->mRemoteAddrInfo != nil)
257 {
258 InetAddress *theInetAddress = (InetAddress *) theSocketStruct->mRemoteAddrInfo->addr.buf;
259 InetHost theInetHost = theInetAddress->fHost;
260
261 if (theInetHost == 0)
262 {
263 InetInterfaceInfo theInetInterfaceInfo;
264
265 if (::OTInetGetInterfaceInfo(&theInetInterfaceInfo,kDefaultInetInterface) == noErr)
266 {
267 theInetHost = theInetInterfaceInfo.fAddress;
268 }
269 }
270
271 ::OTInetHostToString(theInetHost,tempString);
272
273 ConcatCStrToCStr(":",tempString,sizeof(tempString));
274 ConcatLongIntToCStr(theInetAddress->fPort,tempString,sizeof(tempString));
275 }
276
277 CopyCStrToCStr(tempString,outIPAndPort,inIPAndPortLength);
278 }
279}
280
281
282
283Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum)
284{
285Boolean theResult = false;
286
287 if (SocketIndexIsValid(inSocketNum))
288 {
289 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
290
291 theResult = theSocketStruct->mReceivedTOrdRel;
292 }
293
294 return(theResult);
295}
296
297
298
299Boolean MacSocket_ListenCompleted(const int inSocketNum)
300{
301Boolean theResult = false;
302
303 if (SocketIndexIsValid(inSocketNum))
304 {
305 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
306
307 theResult = theSocketStruct->mReceivedTPassCon;
308 }
309
310 return(theResult);
311}
312
313
314
315Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum)
316{
317 if (SocketIndexIsValid(inSocketNum))
318 {
319 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
320
321 return(theSocketStruct->mRemoteEndIsConnected);
322 }
323
324 else
325 {
326 return(false);
327 }
328}
329
330
331
332Boolean MacSocket_LocalEndIsOpen(const int inSocketNum)
333{
334 if (SocketIndexIsValid(inSocketNum))
335 {
336 SocketStruct *theSocketStruct = &(sSockets[inSocketNum]);
337
338 return(theSocketStruct->mLocalEndIsConnected);
339 }
340
341 else
342 {
343 return(false);
344 }
345}
346
347
348
349static Boolean TimeoutElapsed(const SocketStruct *inSocket)
350{
351Boolean timeIsUp = false;
352
353 if (inSocket != nil && inSocket->mTimeoutTicks > 0 && ::TickCount() > inSocket->mOperationStartTicks + inSocket->mTimeoutTicks)
354 {
355 timeIsUp = true;
356 }
357
358
359 return(timeIsUp);
360}
361
362
363
364static Boolean SocketIndexIsValid(const int inSocketNum)
365{
366 if (inSocketNum >= 0 && inSocketNum < kMaxNumSockets && sSockets[inSocketNum].mEndPointRef != kOTInvalidEndpointRef)
367 {
368 return(true);
369 }
370
371 else
372 {
373 return(false);
374 }
375}
376
377
378
379static void InitSocket(SocketStruct *ioSocket)
380{
381 ioSocket->mIsInUse = false;
382
383 ioSocket->mEndpointIsBound = false;
384
385 ioSocket->mLocalEndIsConnected = false;
386 ioSocket->mRemoteEndIsConnected = false;
387
388 ioSocket->mReceivedTOpenComplete = false;
389 ioSocket->mReceivedTBindComplete = false;
390 ioSocket->mReceivedTConnect = false;
391 ioSocket->mReceivedTListen = false;
392 ioSocket->mReceivedTPassCon = false;
393 ioSocket->mReceivedTDisconnect = false;
394 ioSocket->mReceivedTOrdRel = false;
395 ioSocket->mReceivedTDisconnectComplete = false;
396
397 ioSocket->mTimeoutTicks = 30 * 60;
398 ioSocket->mOperationStartTicks = -1;
399
400 ioSocket->mIdleWaitCallback = nil;
401 ioSocket->mUserRefPtr = nil;
402
403 ioSocket->mExpectedCode = 0;
404 ioSocket->mAsyncOperationResult = noErr;
405
406 ioSocket->mEndPointRef = kOTInvalidEndpointRef;
407
408 ioSocket->mBindRequestedAddrInfo = nil;
409 ioSocket->mAssignedAddrInfo = nil;
410 ioSocket->mRemoteAddrInfo = nil;
411
412 ioSocket->mReadyToReadData = false;
413 ioSocket->mReadyToWriteData = true;
414
415 ioSocket->mReadBuffer = nil;
416 ioSocket->mWriteBuffer = nil;
417
418 ioSocket->mLastError = noErr;
419 CopyCStrToCStr("",ioSocket->mErrMessage,sizeof(ioSocket->mErrMessage));
420}
421
422
423
424static void PrepareForAsyncOperation(SocketStruct *ioSocket,const OTEventCode inExpectedCode)
425{
426 ioSocket->mOperationStartTicks = ::TickCount();
427
428 ioSocket->mAsyncOperationResult = noErr;
429
430 ioSocket->mExpectedCode = inExpectedCode;
431}
432
433
434// The wait function....
435
436static OSErr MyBusyWait(SocketStruct *ioSocket,Boolean returnImmediatelyOnError,OTResult *outOTResult,Boolean *inAsyncOperationCompleteFlag)
437{
438OSErr errCode = noErr;
439OTResult theOTResult = noErr;
440
441
442 SetErrorMessageAndBailIfNil(ioSocket,"MyBusyWait: Bad parameter, ioSocket = nil");
443 SetErrorMessageAndBailIfNil(inAsyncOperationCompleteFlag,"MyBusyWait: Bad parameter, inAsyncOperationCompleteFlag = nil");
444
445 for (;;)
446 {
447 if (*inAsyncOperationCompleteFlag)
448 {
449 theOTResult = ioSocket->mAsyncOperationResult;
450
451 break;
452 }
453
454 if (ioSocket->mIdleWaitCallback != nil)
455 {
456 theOTResult = (*(ioSocket->mIdleWaitCallback))(ioSocket->mUserRefPtr);
457
458 if (theOTResult != noErr && returnImmediatelyOnError)
459 {
460 break;
461 }
462 }
463
464 if (TimeoutElapsed(ioSocket))
465 {
466 theOTResult = kMacSocket_TimeoutErr;
467
468 break;
469 }
470 }
471
472
473EXITPOINT:
474
475 if (outOTResult != nil)
476 {
477 *outOTResult = theOTResult;
478 }
479
480 return(errCode);
481}
482
483
484
485// I used to do thread switching, but stopped. It could easily be rolled back in though....
486
487static pascal void OTNonYieldingNotifier(void *contextPtr,OTEventCode code,OTResult result,void *cookie)
488{
489SocketStruct *theSocketStruct = (SocketStruct *) contextPtr;
490
491 if (theSocketStruct != nil)
492 {
493 if (theSocketStruct->mExpectedCode != 0 && code == theSocketStruct->mExpectedCode)
494 {
495 theSocketStruct->mAsyncOperationResult = result;
496
497 theSocketStruct->mExpectedCode = 0;
498 }
499
500
501 switch (code)
502 {
503 case T_OPENCOMPLETE:
504 {
505 theSocketStruct->mReceivedTOpenComplete = true;
506
507 theSocketStruct->mEndPointRef = (EndpointRef) cookie;
508
509 break;
510 }
511
512
513 case T_BINDCOMPLETE:
514 {
515 theSocketStruct->mReceivedTBindComplete = true;
516
517 break;
518 }
519
520
521 case T_CONNECT:
522 {
523 theSocketStruct->mReceivedTConnect = true;
524
525 theSocketStruct->mLocalEndIsConnected = true;
526
527 theSocketStruct->mRemoteEndIsConnected = true;
528
529 break;
530 }
531
532
533 case T_LISTEN:
534 {
535 theSocketStruct->mReceivedTListen = true;
536
537 break;
538 }
539
540
541 case T_PASSCON:
542 {
543 theSocketStruct->mReceivedTPassCon = true;
544
545 theSocketStruct->mLocalEndIsConnected = true;
546
547 theSocketStruct->mRemoteEndIsConnected = true;
548
549 break;
550 }
551
552
553 case T_DATA:
554 {
555 theSocketStruct->mReadyToReadData = true;
556
557 break;
558 }
559
560 case T_GODATA:
561 {
562 theSocketStruct->mReadyToWriteData = true;
563
564 break;
565 }
566
567 case T_DISCONNECT:
568 {
569 theSocketStruct->mReceivedTDisconnect = true;
570
571 theSocketStruct->mRemoteEndIsConnected = false;
572
573 theSocketStruct->mLocalEndIsConnected = false;
574
575 ::OTRcvDisconnect(theSocketStruct->mEndPointRef,nil);
576
577 break;
578 }
579
580 case T_ORDREL:
581 {
582 theSocketStruct->mReceivedTOrdRel = true;
583
584 // We can still write data, so don't clear mRemoteEndIsConnected
585
586 ::OTRcvOrderlyDisconnect(theSocketStruct->mEndPointRef);
587
588 break;
589 }
590
591 case T_DISCONNECTCOMPLETE:
592 {
593 theSocketStruct->mReceivedTDisconnectComplete = true;
594
595 theSocketStruct->mRemoteEndIsConnected = false;
596
597 theSocketStruct->mLocalEndIsConnected = false;
598
599 break;
600 }
601 }
602 }
603/*
604T_LISTEN OTListen
605T_CONNECT OTRcvConnect
606T_DATA OTRcv, OTRcvUData
607T_DISCONNECT OTRcvDisconnect
608T_ORDREL OTRcvOrderlyDisconnect
609T_GODATA OTSnd, OTSndUData, OTLook
610T_PASSCON none
611
612T_EXDATA OTRcv
613T_GOEXDATA OTSnd, OTLook
614T_UDERR OTRcvUDErr
615*/
616}
617
618
619
620// Initialize the main socket data structure
621
622OSErr MacSocket_Startup(void)
623{
624 if (!sSocketsSetup)
625 {
626 for (int i = 0;i < kMaxNumSockets;i++)
627 {
628 InitSocket(&(sSockets[i]));
629 }
630
631 ::InitOpenTransport();
632
633 sSocketsSetup = true;
634 }
635
636
637 return(noErr);
638}
639
640
641
642// Cleanup before exiting
643
644OSErr MacSocket_Shutdown(void)
645{
646 if (sSocketsSetup)
647 {
648 for (int i = 0;i < kMaxNumSockets;i++)
649 {
650 SocketStruct *theSocketStruct = &(sSockets[i]);
651
652 if (theSocketStruct->mIsInUse)
653 {
654 if (theSocketStruct->mEndPointRef != kOTInvalidEndpointRef)
655 {
656 OTResult theOTResult;
657
658
659 // Since we're killing the endpoint, I don't bother to send the disconnect (sorry!)
660
661/*
662 if (theSocketStruct->mLocalEndIsConnected)
663 {
664 // This is an abortive action, so we do a hard disconnect instead of an OTSndOrderlyDisconnect
665
666 theOTResult = ::OTSndDisconnect(theSocketStruct->mEndPointRef, nil);
667
668 // Now we have to watch for T_DISCONNECTCOMPLETE event
669
670 theSocketStruct->mLocalEndIsConnected = false;
671 }
672*/
673
674 theOTResult = ::OTCloseProvider(theSocketStruct->mEndPointRef);
675
676
677 theSocketStruct->mEndPointRef = kOTInvalidEndpointRef;
678 }
679
680 if (theSocketStruct->mBindRequestedAddrInfo != nil)
681 {
682 ::OTFree((void *) theSocketStruct->mBindRequestedAddrInfo,T_BIND);
683
684 theSocketStruct->mBindRequestedAddrInfo = nil;
685 }
686
687 if (theSocketStruct->mAssignedAddrInfo != nil)
688 {
689 ::OTFree((void *) theSocketStruct->mAssignedAddrInfo,T_BIND);
690
691 theSocketStruct->mAssignedAddrInfo = nil;
692 }
693
694 if (theSocketStruct->mRemoteAddrInfo != nil)
695 {
696 ::OTFree((void *) theSocketStruct->mRemoteAddrInfo,T_CALL);
697
698 theSocketStruct->mRemoteAddrInfo = nil;
699 }
700
701
702 }
703 }
704
705 ::CloseOpenTransport();
706
707 sSocketsSetup = false;
708 }
709
710 return(noErr);
711}
712
713
714
715
716
717
718// Allocate a socket
719
720OSErr MacSocket_socket(int *outSocketNum,const Boolean inDoThreadSwitching,const long inTimeoutTicks,MacSocket_IdleWaitCallback inIdleWaitCallback,void *inUserRefPtr)
721{
722// Gotta roll support back in for threads eventually.....
723
724#pragma unused(inDoThreadSwitching)
725
726
727OSErr errCode = noErr;
728
729
730 SetErrorMessageAndBailIfNil(outSocketNum,"MacSocket_socket: Bad parameter, outSocketNum == nil");
731
732 *outSocketNum = -1;
733
734
735 // Find an unused socket
736
737 for (int i = 0;i < kMaxNumSockets;i++)
738 {
739 if (sSockets[i].mIsInUse == false)
740 {
741 OTResult theOTResult;
742 SocketStruct *theSocketStruct = &(sSockets[i]);
743
744
745 InitSocket(theSocketStruct);
746
747 theSocketStruct->mIdleWaitCallback = inIdleWaitCallback;
748 theSocketStruct->mUserRefPtr = inUserRefPtr;
749
750 theSocketStruct->mTimeoutTicks = inTimeoutTicks;
751
752
753 // Set up OT endpoint
754
755 PrepareForAsyncOperation(theSocketStruct,T_OPENCOMPLETE);
756
757 theOTResult = ::OTAsyncOpenEndpoint(OTCreateConfiguration(kTCPName),0,nil,OTNonYieldingNotifier,(void *) theSocketStruct);
758
759 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_socket: Can't create OT endpoint, OTAsyncOpenEndpoint() = ",theOTResult);
760
761 BailIfError(MyBusyWait(theSocketStruct,false,&theOTResult,&(theSocketStruct->mReceivedTOpenComplete)));
762
763 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_socket: Can't create OT endpoint, OTAsyncOpenEndpoint() = ",theOTResult);
764
765
766 *outSocketNum = i;
767
768 errCode = noErr;
769
770 theSocketStruct->mIsInUse = true;
771
772 break;
773 }
774
775 else if (i == kMaxNumSockets - 1)
776 {
777 SetErrorMessageAndBail("MacSocket_socket: No sockets available");
778 }
779 }
780
781
782EXITPOINT:
783
784 errno = errCode;
785
786 return(errCode);
787}
788
789
790
791
792OSErr MacSocket_listen(const int inSocketNum,const int inPortNum)
793{
794OSErr errCode = noErr;
795SocketStruct *theSocketStruct = nil;
796
797
798 if (!SocketIndexIsValid(inSocketNum))
799 {
800 SetErrorMessageAndBail("MacSocket_listen: Invalid socket number specified");
801 }
802
803
804 theSocketStruct = &(sSockets[inSocketNum]);
805
806
807OTResult theOTResult;
808
809
810 if (theSocketStruct->mBindRequestedAddrInfo == nil)
811 {
812 theSocketStruct->mBindRequestedAddrInfo = (TBind *) ::OTAlloc(theSocketStruct->mEndPointRef,T_BIND,T_ADDR,&theOTResult);
813
814 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't allocate OT T_BIND structure, OTAlloc() = ",theOTResult);
815 SetErrorMessageAndBailIfNil(theSocketStruct->mBindRequestedAddrInfo,"MacSocket_listen: Can't allocate OT T_BIND structure, OTAlloc() returned nil");
816 }
817
818 if (theSocketStruct->mAssignedAddrInfo == nil)
819 {
820 theSocketStruct->mAssignedAddrInfo = (TBind *) ::OTAlloc(theSocketStruct->mEndPointRef,T_BIND,T_ADDR,&theOTResult);
821
822 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't allocate OT T_BIND structure, OTAlloc() = ",theOTResult);
823 SetErrorMessageAndBailIfNil(theSocketStruct->mAssignedAddrInfo,"MacSocket_listen: Can't allocate OT T_BIND structure, OTAlloc() returned nil");
824 }
825
826 if (theSocketStruct->mRemoteAddrInfo == nil)
827 {
828 theSocketStruct->mRemoteAddrInfo = (TCall *) ::OTAlloc(theSocketStruct->mEndPointRef,T_CALL,T_ADDR,&theOTResult);
829
830 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't allocate OT T_CALL structure, OTAlloc() = ",theOTResult);
831 SetErrorMessageAndBailIfNil(theSocketStruct->mRemoteAddrInfo,"MacSocket_listen: Can't allocate OT T_CALL structure, OTAlloc() returned nil");
832 }
833
834
835 if (!theSocketStruct->mEndpointIsBound)
836 {
837 InetInterfaceInfo theInetInterfaceInfo;
838
839 theOTResult = ::OTInetGetInterfaceInfo(&theInetInterfaceInfo,kDefaultInetInterface);
840
841 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't determine OT interface info, OTInetGetInterfaceInfo() = ",theOTResult);
842
843
844 InetAddress *theInetAddress = (InetAddress *) theSocketStruct->mBindRequestedAddrInfo->addr.buf;
845
846// theInetAddress->fAddressType = AF_INET;
847// theInetAddress->fPort = inPortNum;
848// theInetAddress->fHost = theInetInterfaceInfo.fAddress;
849
850 ::OTInitInetAddress(theInetAddress,inPortNum,theInetInterfaceInfo.fAddress);
851
852 theSocketStruct->mBindRequestedAddrInfo->addr.len = sizeof(InetAddress);
853
854 theSocketStruct->mBindRequestedAddrInfo->qlen = 1;
855
856
857 theOTResult = ::OTSetSynchronous(theSocketStruct->mEndPointRef);
858
859 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't set OT endpoint mode, OTSetSynchronous() = ",theOTResult);
860
861 theOTResult = NegotiateIPReuseAddrOption(theSocketStruct->mEndPointRef,true);
862
863 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't set OT IP address reuse flag, NegotiateIPReuseAddrOption() = ",theOTResult);
864
865 theOTResult = ::OTSetAsynchronous(theSocketStruct->mEndPointRef);
866
867 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't set OT endpoint mode, OTSetAsynchronous() = ",theOTResult);
868
869
870 PrepareForAsyncOperation(theSocketStruct,T_BINDCOMPLETE);
871
872 theOTResult = ::OTBind(theSocketStruct->mEndPointRef,theSocketStruct->mBindRequestedAddrInfo,theSocketStruct->mAssignedAddrInfo);
873
874 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't bind OT endpoint, OTBind() = ",theOTResult);
875
876 BailIfError(MyBusyWait(theSocketStruct,false,&theOTResult,&(theSocketStruct->mReceivedTBindComplete)));
877
878 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't bind OT endpoint, OTBind() = ",theOTResult);
879
880
881 theSocketStruct->mEndpointIsBound = true;
882 }
883
884
885 PrepareForAsyncOperation(theSocketStruct,T_LISTEN);
886
887 theOTResult = ::OTListen(theSocketStruct->mEndPointRef,theSocketStruct->mRemoteAddrInfo);
888
889 if (theOTResult == noErr)
890 {
891 PrepareForAsyncOperation(theSocketStruct,T_PASSCON);
892
893 theOTResult = ::OTAccept(theSocketStruct->mEndPointRef,theSocketStruct->mEndPointRef,theSocketStruct->mRemoteAddrInfo);
894
895 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't begin OT accept, OTAccept() = ",theOTResult);
896
897 BailIfError(MyBusyWait(theSocketStruct,false,&theOTResult,&(theSocketStruct->mReceivedTPassCon)));
898
899 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_listen: Can't accept OT connection, OTAccept() = ",theOTResult);
900 }
901
902 else if (theOTResult == kOTNoDataErr)
903 {
904 theOTResult = noErr;
905 }
906
907 else
908 {
909 SetErrorMessageAndLongIntAndBail("MacSocket_listen: Can't begin OT listen, OTListen() = ",theOTResult);
910 }
911
912
913 errCode = noErr;
914
915
916EXITPOINT:
917
918 if (theSocketStruct != nil)
919 {
920 theSocketStruct->mLastError = noErr;
921
922 CopyCStrToCStr("",theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
923
924 if (errCode != noErr)
925 {
926 theSocketStruct->mLastError = errCode;
927
928 CopyCStrToCStr(GetErrorMessage(),theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
929 }
930 }
931
932 errno = errCode;
933
934 return(errCode);
935}
936
937
938
939
940OSErr MacSocket_connect(const int inSocketNum,char *inTargetAddressAndPort)
941{
942OSErr errCode = noErr;
943SocketStruct *theSocketStruct = nil;
944
945
946 if (!SocketIndexIsValid(inSocketNum))
947 {
948 SetErrorMessageAndBail("MacSocket_connect: Invalid socket number specified");
949 }
950
951 theSocketStruct = &(sSockets[inSocketNum]);
952
953 if (theSocketStruct->mEndpointIsBound)
954 {
955 SetErrorMessageAndBail("MacSocket_connect: Socket previously bound");
956 }
957
958
959OTResult theOTResult;
960
961 theSocketStruct->mBindRequestedAddrInfo = (TBind *) ::OTAlloc(theSocketStruct->mEndPointRef,T_BIND,T_ADDR,&theOTResult);
962
963 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't allocate OT T_BIND structure, OTAlloc() = ",theOTResult);
964 SetErrorMessageAndBailIfNil(theSocketStruct->mBindRequestedAddrInfo,"MacSocket_connect: Can't allocate OT T_BIND structure, OTAlloc() returned nil");
965
966
967 theSocketStruct->mAssignedAddrInfo = (TBind *) ::OTAlloc(theSocketStruct->mEndPointRef,T_BIND,T_ADDR,&theOTResult);
968
969 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't allocate OT T_BIND structure, OTAlloc() = ",theOTResult);
970 SetErrorMessageAndBailIfNil(theSocketStruct->mAssignedAddrInfo,"MacSocket_connect: Can't allocate OT T_BIND structure, OTAlloc() returned nil");
971
972
973 theSocketStruct->mRemoteAddrInfo = (TCall *) ::OTAlloc(theSocketStruct->mEndPointRef,T_CALL,T_ADDR,&theOTResult);
974
975 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't allocate OT T_CALL structure, OTAlloc() = ",theOTResult);
976 SetErrorMessageAndBailIfNil(theSocketStruct->mRemoteAddrInfo,"MacSocket_connect: Can't allocate OT T_CALL structure, OTAlloc() returned nil");
977
978
979 PrepareForAsyncOperation(theSocketStruct,T_BINDCOMPLETE);
980
981 theOTResult = ::OTBind(theSocketStruct->mEndPointRef,nil,theSocketStruct->mAssignedAddrInfo);
982
983 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't bind OT endpoint, OTBind() = ",theOTResult);
984
985 BailIfError(MyBusyWait(theSocketStruct,false,&theOTResult,&(theSocketStruct->mReceivedTBindComplete)));
986
987 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't bind OT endpoint, OTBind() = ",theOTResult);
988
989 theSocketStruct->mEndpointIsBound = true;
990
991
992TCall sndCall;
993DNSAddress hostDNSAddress;
994
995 // Set up target address
996
997 sndCall.addr.buf = (UInt8 *) &hostDNSAddress;
998 sndCall.addr.len = ::OTInitDNSAddress(&hostDNSAddress,inTargetAddressAndPort);
999 sndCall.opt.buf = nil;
1000 sndCall.opt.len = 0;
1001 sndCall.udata.buf = nil;
1002 sndCall.udata.len = 0;
1003 sndCall.sequence = 0;
1004
1005 // Connect!
1006
1007 PrepareForAsyncOperation(theSocketStruct,T_CONNECT);
1008
1009 theOTResult = ::OTConnect(theSocketStruct->mEndPointRef,&sndCall,nil);
1010
1011 if (theOTResult == kOTNoDataErr)
1012 {
1013 theOTResult = noErr;
1014 }
1015
1016 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't connect OT endpoint, OTConnect() = ",theOTResult);
1017
1018 BailIfError(MyBusyWait(theSocketStruct,false,&theOTResult,&(theSocketStruct->mReceivedTConnect)));
1019
1020 if (theOTResult == kMacSocket_TimeoutErr)
1021 {
1022 SetErrorMessageAndBail("MacSocket_connect: Can't connect OT endpoint, OTConnect() = kMacSocket_TimeoutErr");
1023 }
1024
1025 else
1026 {
1027 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't connect OT endpoint, OTConnect() = ",theOTResult);
1028 }
1029
1030 theOTResult = ::OTRcvConnect(theSocketStruct->mEndPointRef,nil);
1031
1032 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_connect: Can't complete connect on OT endpoint, OTRcvConnect() = ",theOTResult);
1033
1034
1035 errCode = noErr;
1036
1037
1038#ifdef MACSOCKET_DEBUG
1039 printf("MacSocket_connect: connect completed\n");
1040#endif
1041
1042EXITPOINT:
1043
1044 if (theSocketStruct != nil)
1045 {
1046 theSocketStruct->mLastError = noErr;
1047
1048 CopyCStrToCStr("",theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1049
1050 if (errCode != noErr)
1051 {
1052 theSocketStruct->mLastError = errCode;
1053
1054 CopyCStrToCStr(GetErrorMessage(),theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1055 }
1056 }
1057
1058 errno = errCode;
1059
1060 return(errCode);
1061}
1062
1063
1064
1065
1066// Close a connection
1067
1068OSErr MacSocket_close(const int inSocketNum)
1069{
1070OSErr errCode = noErr;
1071SocketStruct *theSocketStruct = nil;
1072
1073
1074 if (!SocketIndexIsValid(inSocketNum))
1075 {
1076 SetErrorMessageAndBail("MacSocket_close: Invalid socket number specified");
1077 }
1078
1079
1080 theSocketStruct = &(sSockets[inSocketNum]);
1081
1082 if (theSocketStruct->mEndPointRef != kOTInvalidEndpointRef)
1083 {
1084 OTResult theOTResult = noErr;
1085
1086 // Try to play nice
1087
1088 if (theSocketStruct->mReceivedTOrdRel)
1089 {
1090 // Already did an OTRcvOrderlyDisconnect() in the notifier
1091
1092 if (theSocketStruct->mLocalEndIsConnected)
1093 {
1094 theOTResult = ::OTSndOrderlyDisconnect(theSocketStruct->mEndPointRef);
1095
1096 theSocketStruct->mLocalEndIsConnected = false;
1097 }
1098 }
1099
1100 else if (theSocketStruct->mLocalEndIsConnected)
1101 {
1102 theOTResult = ::OTSndOrderlyDisconnect(theSocketStruct->mEndPointRef);
1103
1104 theSocketStruct->mLocalEndIsConnected = false;
1105
1106 // Wait for other end to hang up too!
1107
1108// PrepareForAsyncOperation(theSocketStruct,T_ORDREL);
1109//
1110// errCode = MyBusyWait(theSocketStruct,false,&theOTResult,&(theSocketStruct->mReceivedTOrdRel));
1111 }
1112
1113
1114 if (theOTResult != noErr)
1115 {
1116 ::OTCloseProvider(theSocketStruct->mEndPointRef);
1117 }
1118
1119 else
1120 {
1121 theOTResult = ::OTCloseProvider(theSocketStruct->mEndPointRef);
1122 }
1123
1124 theSocketStruct->mEndPointRef = kOTInvalidEndpointRef;
1125
1126 errCode = theOTResult;
1127 }
1128
1129
1130 theSocketStruct->mIsInUse = false;
1131
1132
1133EXITPOINT:
1134
1135 if (theSocketStruct != nil)
1136 {
1137 theSocketStruct->mLastError = noErr;
1138
1139 CopyCStrToCStr("",theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1140
1141 if (errCode != noErr)
1142 {
1143 theSocketStruct->mLastError = errCode;
1144
1145 CopyCStrToCStr(GetErrorMessage(),theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1146 }
1147 }
1148
1149 errno = errCode;
1150
1151 return(errCode);
1152}
1153
1154
1155
1156
1157// Receive some bytes
1158
1159int MacSocket_recv(const int inSocketNum,void *outBuff,int outBuffLength,const Boolean inBlock)
1160{
1161OSErr errCode = noErr;
1162int totalBytesRead = 0;
1163SocketStruct *theSocketStruct = nil;
1164
1165
1166 SetErrorMessageAndBailIfNil(outBuff,"MacSocket_recv: Bad parameter, outBuff = nil");
1167
1168 if (outBuffLength <= 0)
1169 {
1170 SetErrorMessageAndBail("MacSocket_recv: Bad parameter, outBuffLength <= 0");
1171 }
1172
1173 if (!SocketIndexIsValid(inSocketNum))
1174 {
1175 SetErrorMessageAndBail("MacSocket_recv: Invalid socket number specified");
1176 }
1177
1178 theSocketStruct = &(sSockets[inSocketNum]);
1179
1180 if (!theSocketStruct->mLocalEndIsConnected)
1181 {
1182 SetErrorMessageAndBail("MacSocket_recv: Socket not connected");
1183 }
1184
1185 if (theSocketStruct->mReceivedTOrdRel)
1186 {
1187 totalBytesRead = 0;
1188
1189 goto EXITPOINT;
1190 }
1191
1192
1193 PrepareForAsyncOperation(theSocketStruct,0);
1194
1195 for (;;)
1196 {
1197 int bytesRead;
1198 OTResult theOTResult;
1199
1200
1201 theOTResult = ::OTRcv(theSocketStruct->mEndPointRef,(void *) ((unsigned long) outBuff + (unsigned long) totalBytesRead),outBuffLength - totalBytesRead,nil);
1202
1203 if (theOTResult >= 0)
1204 {
1205 bytesRead = theOTResult;
1206
1207#ifdef MACSOCKET_DEBUG
1208 printf("MacSocket_recv: read %d bytes in part\n",bytesRead);
1209#endif
1210 }
1211
1212 else if (theOTResult == kOTNoDataErr)
1213 {
1214 bytesRead = 0;
1215 }
1216
1217 else
1218 {
1219 SetErrorMessageAndLongIntAndBail("MacSocket_recv: Can't receive OT data, OTRcv() = ",theOTResult);
1220 }
1221
1222
1223 totalBytesRead += bytesRead;
1224
1225
1226 if (totalBytesRead <= 0)
1227 {
1228 if (theSocketStruct->mReceivedTOrdRel)
1229 {
1230 break;
1231 }
1232
1233 // This seems pretty stupid to me now. Maybe I'll delete this blocking garbage.
1234
1235 if (inBlock)
1236 {
1237 if (TimeoutElapsed(theSocketStruct))
1238 {
1239 SetErrorCodeAndMessageAndBail(kMacSocket_TimeoutErr,"MacSocket_recv: Receive operation timed-out");
1240 }
1241
1242 if (theSocketStruct->mIdleWaitCallback != nil)
1243 {
1244 theOTResult = (*(theSocketStruct->mIdleWaitCallback))(theSocketStruct->mUserRefPtr);
1245
1246 SetErrorMessageAndBailIfError(theOTResult,"MacSocket_recv: User cancelled operation");
1247 }
1248
1249 continue;
1250 }
1251 }
1252
1253
1254 break;
1255 }
1256
1257 errCode = noErr;
1258
1259
1260#ifdef MACSOCKET_DEBUG
1261 printf("MacSocket_recv: read %d bytes in total\n",totalBytesRead);
1262#endif
1263
1264
1265EXITPOINT:
1266
1267 if (theSocketStruct != nil)
1268 {
1269 theSocketStruct->mLastError = noErr;
1270
1271 CopyCStrToCStr("",theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1272
1273 if (errCode != noErr)
1274 {
1275 theSocketStruct->mLastError = errCode;
1276
1277 CopyCStrToCStr(GetErrorMessage(),theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1278 }
1279 }
1280
1281 errno = errCode;
1282
1283 return(totalBytesRead);
1284}
1285
1286
1287
1288// Send some bytes
1289
1290int MacSocket_send(const int inSocketNum,const void *inBuff,int inBuffLength)
1291{
1292OSErr errCode = noErr;
1293int bytesSent = 0;
1294SocketStruct *theSocketStruct = nil;
1295
1296
1297 SetErrorMessageAndBailIfNil(inBuff,"MacSocket_send: Bad parameter, inBuff = nil");
1298
1299 if (inBuffLength <= 0)
1300 {
1301 SetErrorMessageAndBail("MacSocket_send: Bad parameter, inBuffLength <= 0");
1302 }
1303
1304 if (!SocketIndexIsValid(inSocketNum))
1305 {
1306 SetErrorMessageAndBail("MacSocket_send: Invalid socket number specified");
1307 }
1308
1309
1310 theSocketStruct = &(sSockets[inSocketNum]);
1311
1312 if (!theSocketStruct->mLocalEndIsConnected)
1313 {
1314 SetErrorMessageAndBail("MacSocket_send: Socket not connected");
1315 }
1316
1317
1318OTResult theOTResult;
1319
1320
1321 PrepareForAsyncOperation(theSocketStruct,0);
1322
1323 while (bytesSent < inBuffLength)
1324 {
1325 if (theSocketStruct->mIdleWaitCallback != nil)
1326 {
1327 theOTResult = (*(theSocketStruct->mIdleWaitCallback))(theSocketStruct->mUserRefPtr);
1328
1329 SetErrorMessageAndBailIfError(theOTResult,"MacSocket_send: User cancelled");
1330 }
1331
1332
1333 theOTResult = ::OTSnd(theSocketStruct->mEndPointRef,(void *) ((unsigned long) inBuff + bytesSent),inBuffLength - bytesSent,0);
1334
1335 if (theOTResult >= 0)
1336 {
1337 bytesSent += theOTResult;
1338
1339 theOTResult = noErr;
1340
1341 // Reset timer....
1342
1343 PrepareForAsyncOperation(theSocketStruct,0);
1344 }
1345
1346 if (theOTResult == kOTFlowErr)
1347 {
1348 if (TimeoutElapsed(theSocketStruct))
1349 {
1350 SetErrorCodeAndMessageAndBail(kMacSocket_TimeoutErr,"MacSocket_send: Send timed-out")
1351 }
1352
1353 theOTResult = noErr;
1354 }
1355
1356 SetErrorMessageAndLongIntAndBailIfError(theOTResult,"MacSocket_send: Can't send OT data, OTSnd() = ",theOTResult);
1357 }
1358
1359
1360 errCode = noErr;
1361
1362#ifdef MACSOCKET_DEBUG
1363 printf("MacSocket_send: sent %d bytes\n",bytesSent);
1364#endif
1365
1366
1367EXITPOINT:
1368
1369 if (theSocketStruct != nil)
1370 {
1371 theSocketStruct->mLastError = noErr;
1372
1373 CopyCStrToCStr("",theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1374
1375 if (errCode != noErr)
1376 {
1377 theSocketStruct->mLastError = errCode;
1378
1379 CopyCStrToCStr(GetErrorMessage(),theSocketStruct->mErrMessage,sizeof(theSocketStruct->mErrMessage));
1380 }
1381 }
1382
1383 if (errCode != noErr)
1384 {
1385 ::SysBeep(1);
1386 }
1387
1388 errno = errCode;
1389
1390 return(bytesSent);
1391}
1392
1393
1394
1395
1396
1397static OSStatus NegotiateIPReuseAddrOption(EndpointRef inEndpoint,const Boolean inEnableReuseIP)
1398{
1399OSStatus errCode;
1400UInt8 buf[kOTFourByteOptionSize];
1401TOption* theOTOption;
1402TOptMgmt theOTRequest;
1403TOptMgmt theOTResult;
1404
1405
1406 if (!OTIsSynchronous(inEndpoint))
1407 {
1408 SetErrorMessageAndBail("NegotiateIPReuseAddrOption: Open Transport endpoint is not synchronous");
1409 }
1410
1411 theOTRequest.opt.buf = buf;
1412 theOTRequest.opt.len = sizeof(buf);
1413 theOTRequest.flags = T_NEGOTIATE;
1414
1415 theOTResult.opt.buf = buf;
1416 theOTResult.opt.maxlen = kOTFourByteOptionSize;
1417
1418
1419 theOTOption = (TOption *) buf;
1420
1421 theOTOption->level = INET_IP;
1422 theOTOption->name = IP_REUSEADDR;
1423 theOTOption->len = kOTFourByteOptionSize;
1424 theOTOption->status = 0;
1425 *((UInt32 *) (theOTOption->value)) = inEnableReuseIP;
1426
1427 errCode = ::OTOptionManagement(inEndpoint,&theOTRequest,&theOTResult);
1428
1429 if (errCode == kOTNoError)
1430 {
1431 if (theOTOption->status != T_SUCCESS)
1432 {
1433 errCode = theOTOption->status;
1434 }
1435
1436 else
1437 {
1438 errCode = kOTNoError;
1439 }
1440 }
1441
1442
1443EXITPOINT:
1444
1445 errno = errCode;
1446
1447 return(errCode);
1448}
1449
1450
1451
1452
1453
1454// Some rough notes....
1455
1456
1457
1458// OTAckSends(ep);
1459// OTAckSends(ep) // enable AckSend option
1460// ......
1461// buf = OTAllocMem( nbytes); // Allocate nbytes of memory from OT
1462// OTSnd(ep, buf, nbytes, 0); // send a packet
1463// ......
1464// NotifyProc( .... void* theParam) // Notifier Proc
1465// case T_MEMORYRELEASED: // process event
1466// OTFreeMem( theParam); // free up memory
1467// break;
1468
1469
1470
1471/*
1472struct InetInterfaceInfo
1473{
1474 InetHost fAddress;
1475 InetHost fNetmask;
1476 InetHost fBroadcastAddr;
1477 InetHost fDefaultGatewayAddr;
1478 InetHost fDNSAddr;
1479 UInt16 fVersion;
1480 UInt16 fHWAddrLen;
1481 UInt8* fHWAddr;
1482 UInt32 fIfMTU;
1483 UInt8* fReservedPtrs[2];
1484 InetDomainName fDomainName;
1485 UInt32 fIPSecondaryCount;
1486 UInt8 fReserved[252];
1487};
1488typedef struct InetInterfaceInfo InetInterfaceInfo;
1489
1490
1491
1492((InetAddress *) addr.buf)->fHost
1493
1494struct TBind
1495{
1496 TNetbuf addr;
1497 OTQLen qlen;
1498};
1499
1500typedef struct TBind TBind;
1501
1502struct TNetbuf
1503{
1504 size_t maxlen;
1505 size_t len;
1506 UInt8* buf;
1507};
1508
1509typedef struct TNetbuf TNetbuf;
1510
1511
1512 struct InetAddress
1513{
1514 OTAddressType fAddressType; // always AF_INET
1515 InetPort fPort; // Port number
1516 InetHost fHost; // Host address in net byte order
1517 UInt8 fUnused[8]; // Traditional unused bytes
1518};
1519typedef struct InetAddress InetAddress;
1520*/
1521
1522
1523
1524/*
1525static pascal void Notifier(void* context, OTEventCode event, OTResult result, void* cookie)
1526{
1527EPInfo* epi = (EPInfo*) context;
1528
1529 switch (event)
1530 {
1531 case T_LISTEN:
1532 {
1533 DoListenAccept();
1534 return;
1535 }
1536
1537 case T_ACCEPTCOMPLETE:
1538 {
1539 if (result != kOTNoError)
1540 DBAlert1("Notifier: T_ACCEPTCOMPLETE - result %d",result);
1541 return;
1542 }
1543
1544 case T_PASSCON:
1545 {
1546 if (result != kOTNoError)
1547 {
1548 DBAlert1("Notifier: T_PASSCON result %d", result);
1549 return;
1550 }
1551
1552 OTAtomicAdd32(1, &gCntrConnections);
1553 OTAtomicAdd32(1, &gCntrTotalConnections);
1554 OTAtomicAdd32(1, &gCntrIntervalConnects);
1555
1556 if ( OTAtomicSetBit(&epi->stateFlags, kPassconBit) != 0 )
1557 {
1558 ReadData(epi);
1559 }
1560
1561 return;
1562 }
1563
1564 case T_DATA:
1565 {
1566 if ( OTAtomicSetBit(&epi->stateFlags, kPassconBit) != 0 )
1567 {
1568 ReadData(epi);
1569 }
1570
1571 return;
1572 }
1573
1574 case T_GODATA:
1575 {
1576 SendData(epi);
1577 return;
1578 }
1579
1580 case T_DISCONNECT:
1581 {
1582 DoRcvDisconnect(epi);
1583 return;
1584 }
1585
1586 case T_DISCONNECTCOMPLETE:
1587 {
1588 if (result != kOTNoError)
1589 DBAlert1("Notifier: T_DISCONNECT_COMPLETE result %d",result);
1590
1591 return;
1592 }
1593
1594 case T_MEMORYRELEASED:
1595 {
1596 OTAtomicAdd32(-1, &epi->outstandingSends);
1597 return;
1598 }
1599
1600 default:
1601 {
1602 DBAlert1("Notifier: unknown event <%x>", event);
1603 return;
1604 }
1605 }
1606}
1607*/
diff --git a/src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.h b/src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.h
deleted file mode 100644
index ad59dc9e4f..0000000000
--- a/src/lib/libssl/src/MacOS/GetHTTPS.src/MacSocket.h
+++ /dev/null
@@ -1,103 +0,0 @@
1#pragma once
2
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8
9
10enum
11{
12 kMacSocket_TimeoutErr = -2
13};
14
15
16// Since MacSocket does busy waiting, I do a callback while waiting
17
18typedef OSErr (*MacSocket_IdleWaitCallback)(void *);
19
20
21// Call this before anything else!
22
23OSErr MacSocket_Startup(void);
24
25
26// Call this to cleanup before quitting
27
28OSErr MacSocket_Shutdown(void);
29
30
31// Call this to allocate a "socket" (reference number is returned in outSocketNum)
32// Note that inDoThreadSwitching is pretty much irrelevant right now, since I ignore it
33// The inTimeoutTicks parameter is applied during reads/writes of data
34// The inIdleWaitCallback parameter specifies a callback which is called during busy-waiting periods
35// The inUserRefPtr parameter is passed back to the idle-wait callback
36
37OSErr MacSocket_socket(int *outSocketNum,const Boolean inDoThreadSwitching,const long inTimeoutTicks,MacSocket_IdleWaitCallback inIdleWaitCallback,void *inUserRefPtr);
38
39
40// Call this to connect to an IP/DNS address
41// Note that inTargetAddressAndPort is in "IP:port" format-- e.g. 10.1.1.1:123
42
43OSErr MacSocket_connect(const int inSocketNum,char *inTargetAddressAndPort);
44
45
46// Call this to listen on a port
47// Since this a low-performance implementation, I allow a maximum of 1 (one!) incoming request when I listen
48
49OSErr MacSocket_listen(const int inSocketNum,const int inPortNum);
50
51
52// Call this to close a socket
53
54OSErr MacSocket_close(const int inSocketNum);
55
56
57// Call this to receive data on a socket
58// Most parameters' purpose are obvious-- except maybe "inBlock" which controls whether I wait for data or return immediately
59
60int MacSocket_recv(const int inSocketNum,void *outBuff,int outBuffLength,const Boolean inBlock);
61
62
63// Call this to send data on a socket
64
65int MacSocket_send(const int inSocketNum,const void *inBuff,int inBuffLength);
66
67
68// If zero bytes were read in a call to MacSocket_recv(), it may be that the remote end has done a half-close
69// This function will let you check whether that's true or not
70
71Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum);
72
73
74// Call this to see if the listen has completed after a call to MacSocket_listen()
75
76Boolean MacSocket_ListenCompleted(const int inSocketNum);
77
78
79// These really aren't very useful anymore
80
81Boolean MacSocket_LocalEndIsOpen(const int inSocketNum);
82Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum);
83
84
85// You may wish to change the userRefPtr for a socket callback-- use this to do it
86
87void MacSocket_SetUserRefPtr(const int inSocketNum,void *inNewRefPtr);
88
89
90// Call these to get the socket's IP:port descriptor
91
92void MacSocket_GetLocalIPAndPort(const int inSocketNum,char *outIPAndPort,const int inIPAndPortLength);
93void MacSocket_GetRemoteIPAndPort(const int inSocketNum,char *outIPAndPort,const int inIPAndPortLength);
94
95
96// Call this to get error info from a socket
97
98void MacSocket_GetSocketErrorInfo(const int inSocketNum,int *outSocketErrCode,char *outSocketErrString,const int inSocketErrStringMaxLength);
99
100
101#ifdef __cplusplus
102}
103#endif
diff --git a/src/lib/libssl/src/MacOS/OpenSSL.mcp.hqx b/src/lib/libssl/src/MacOS/OpenSSL.mcp.hqx
deleted file mode 100644
index c357ea5af9..0000000000
--- a/src/lib/libssl/src/MacOS/OpenSSL.mcp.hqx
+++ /dev/null
@@ -1,4940 +0,0 @@
1(This file must be converted with BinHex 4.0)
2
3:#dp`C@j68d`ZE@0`!%e08(*$9dP&!!!!!jeU!!!!!0U2Bfp[E!!!!!-!!!%S!!1
4%3J!$K@S!!"J!!!!"!!%#!3!!!!!!!!!!!%0[C'9ABA*bD@pb)&"bEfTPBh3!!!!
5!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"(CA4)9&4
1038b"38%-k4'9LG@GRCA)J8R9ZG'PYC3"(CA4)9&438b"38%-k8fpeFQ0P)&4bC@9
11c!%GPG%K89&"6)&"33cT$GA0dEfdJ5f9jGfpbC(-!4f9d5&488&-J8&"$1N&MBf9
12cFb"3BA4SF`"(CA4)9&438b"38%-k9'&bCf9d)&0PG(4TEQGc!%GPG%K89&"6)&"
1333cT'D@aP)%eKF("TEQGc!%GPG%K89&"6)&"33cT#G@PXC#"&H(4bBA-!4f9d5&4
1488&-J8&"$1N4PBR9RCf9b)&4KFQGPG!"(CA4)9&438b"38%-k0MK,)%0[C'9(C@i
15!4f9d5&488&-J8&"$1MBi5b"%DA0KFh0PE@*XCA)!4f9d5&488&-J8&"$1MBi5b"
16(E'pLB@`J6h"dD@eTHQ9b!%GPG%K89&"6)&"33cSf1%XJ6'PZDf9b!%GPG%K89&"
176)&"33cSf1%XJ8(*[DQ9MG!"(CA4)9&438b"38%-k3bp$+bXJ3fpYF'PXCA)!4f9
18d5&488&-J8&"$1N-[3bXV)&GKFQjTEQGc!%GPG%K89&"6)&"33cT$4Ndf1%X!4f9
19d5&488&-J8&"$1NeKBdp6)%ePFQGP)&"KEQ9X!%GPG%K89&"6)&"33cT38%-J3fp
20NC8GPEJ"(CA4)9&438b"38%-k8&"$)%4TFf&cFf9YBQaPFJ"(CA4)9&438b"38%-
21k8&"$)%GXEf*KE#"2F(4TE@PkCA)!4f9d5&488&-J8&"$1P"33b"-D@jVCA)!4f9
22d5&488&-J8&"$1P"33b"348B!4f9d5&488&-J8&"$1P"33b"3FQpUC@0d!%GPG%K
2389&"6)&"33cT38%0"FfdJ8'&ZC@`!4f9d5&488&-J8&"$1P*PHL"$Efe`D@aPFJ"
242F'9Z8e0-)&"33cT%C@*eCfGPFL"5G@jdD@eP!%p`C@j68d`J8&"$1P0[GA*MC5"
258FQ9PF`"2F'9Z8e0-)&"33cT$GA0dEfdJ5f9jGfpbC(-!6h"PEP066#"38%-k3@0
26MCA0c)&"KG'Kc!%p`C@j68d`J8&"$1P4KFQGPG#"6CA4dD@jRF`"2F'9Z8e0-)&"
2733cT'D@aP)%eKF("TEQGc!%p`C@j68d`J8&"$1N*eD@aN)%9iG(*KF`"2F'9Z8e0
28-)&"33cT%C@*eCfGPFL"8BA*RCA3!6h"PEP066#"38%-k0MK,)%0[C'9(C@i!6h"
29PEP066#"38%-k0MK,)%4TFf&cFf9YBQaPFJ"2F'9Z8e0-)&"33cSf1%XJ4fa[BQ&
30X)%p`G'PYDATPFJ"2F'9Z8e0-)&"33cSf1%XJ6'PZDf9b!%p`C@j68d`J8&"$1MB
31i5b"3FQpUC@0d!%p`C@j68d`J8&"$1N-[3bXV)%0[EA"TE'9b!%p`C@j68d`J8&"
32$1N-[3bXV)&GKFQjTEQGc!%p`C@j68d`J8&"$1N0'66Bi5`"2F'9Z8e0-)&"33cT
330B@028b"0CA*RC5"3B@jPE!"2F'9Z8e0-)&"33cT38%-J3fpNC8GPEJ"2F'9Z8e0
34-)&"33cT38%-J4'PcBA0cC@eLE'9b!%p`C@j68d`J8&"$1P"33b"(E'pLB@`J6h"
35dD@eTHQ9b!%p`C@j68d`J8&"$1P"33b"-D@jVCA)!6h"PEP066#"38%-k8&"$)&"
36&4J"2F'9Z8e0-)&"33cT38%-J8(*[DQ9MG!"2F'9Z8e0-)&"33cT38%0"FfdJ8'&
37ZC@`!6h"PEP066#"38%-k8Q9k)%0[EA"TE'9b!%GPG%K89&"6)$Bi5cT%C@*eCfG
38PFL"5G@jdD@eP!%GPG%K89&"6)$Bi5cT6Eh9bBf8J9(*PCA-!4f9d5&488&-J0MK
39,1N0eFh4[E5",CAPhEh*NF`"(CA4)9&438b!f1%Xk3@0MCA0c)&"KG'Kc!%GPG%K
4089&"6)$Bi5cT8BA*RCA3J8f9dG'PZCh-!4f9d5&488&-J0MK,1NCTE'8J6@&`F'P
41ZCh-!4f9d5&488&-J0MK,1N*eD@aN)%9iG(*KF`"(CA4)9&438b!f1%Xk4'9LG@G
42RCA)J9'&bCf9d!%GPG%K89&"6)$Bi5cSf1%XJ3fpNC8GPEJ"(CA4)9&438b!f1%X
43k0MK,)%4TFf&cFf9YBQaPFJ"(CA4)9&438b!f1%Xk0MK,)%GXEf*KE#"2F(4TE@P
44kCA)!4f9d5&488&-J0MK,1MBi5b"-D@jVCA)!4f9d5&488&-J0MK,1MBi5b"3FQp
45UC@0d!%GPG%K89&"6)$Bi5cT$,d-V+b"$Efe`D@aPFJ"(CA4)9&438b!f1%Xk3bp
46$+bXJ9f&bEQPZCh-!4f9d5&488&-J0MK,1N0'66Bi5`"(CA4)9&438b!f1%Xk6@&
47M6e-J6@9bCf8J8'&ZC@`!4f9d5&488&-J0MK,1P"33b"$Ef4P4f9Z!%GPG%K89&"
486)$Bi5cT38%-J4'PcBA0cC@eLE'9b!%GPG%K89&"6)$Bi5cT38%-J4fa[BQ&X)%p
49`G'PYDATPFJ"(CA4)9&438b!f1%Xk8&"$)%aTEQYPFJ"(CA4)9&438b!f1%Xk8&"
50$)&"&4J"(CA4)9&438b!f1%Xk8&"$)&"bEfTPBh3!4f9d5&488&-J0MK,1P"33d&
51cE5"3B@jPE!"(CA4)9&438b!f1%Xk8Q9k)%0[EA"TE'9b!%aTBP066#!f1%Xk4'9
52LG@GRCA)J8R9ZG'PYC3"-D@*68d`J0MK,1P0[GA*MC5"8FQ9PF`"-D@*68d`J0MK
53,1N0eFh4[E5",CAPhEh*NF`"-D@*68d`J0MK,1N&MBf9cFb"3BA4SF`"-D@*68d`
54J0MK,1P4KFQGPG#"6CA4dD@jRF`"-D@*68d`J0MK,1NCTE'8J6@&`F'PZCh-!6'P
55L8e0-)$Bi5cT#G@PXC#"&H(4bBA-!6'PL8e0-)$Bi5cT%C@*eCfGPFL"8BA*RCA3
56!6'PL8e0-)$Bi5cSf1%XJ3fpNC8GPEJ"-D@*68d`J0MK,1MBi5b"%DA0KFh0PE@*
57XCA)!6'PL8e0-)$Bi5cSf1%XJ4fa[BQ&X)%p`G'PYDATPFJ"-D@*68d`J0MK,1MB
58i5b"-D@jVCA)!6'PL8e0-)$Bi5cSf1%XJ8(*[DQ9MG!"-D@*68d`J0MK,1N-[3bX
59V)%0[EA"TE'9b!%aTBP066#!f1%Xk3bp$+bXJ9f&bEQPZCh-!6'PL8e0-)$Bi5cT
60$4Ndf1%X!6'PL8e0-)$Bi5cT0B@028b"0CA*RC5"3B@jPE!"-D@*68d`J0MK,1P"
6133b"$Ef4P4f9Z!%aTBP066#!f1%Xk8&"$)%4TFf&cFf9YBQaPFJ"-D@*68d`J0MK
62,1P"33b"(E'pLB@`J6h"dD@eTHQ9b!%aTBP066#!f1%Xk8&"$)%aTEQYPFJ"-D@*
6368d`J0MK,1P"33b"348B!6'PL8e0-)$Bi5cT38%-J8(*[DQ9MG!"-D@*68d`J0MK
64,1P"33d&cE5"3B@jPE!"-D@*68d`J0MK,1P*PHL"$Efe`D@aPFJ"2F'9Z8e0-)$B
65iDcT%C@*eCfGPFL"5G@jdD@eP!%p`C@j68d`J0MKV1P0[GA*MC5"8FQ9PF`"2F'9
66Z8e0-)$BiDcT$GA0dEfdJ5f9jGfpbC(-!6h"PEP066#!f1'Xk3@0MCA0c)&"KG'K
67c!%p`C@j68d`J0MKV1P4KFQGPG#"6CA4dD@jRF`"2F'9Z8e0-)$BiDcT'D@aP)%e
68KF("TEQGc!%p`C@j68d`J0MKV1N*eD@aN)%9iG(*KF`"2F'9Z8e0-)$BiDcT%C@*
69eCfGPFL"8BA*RCA3!6h"PEP066#!f1'Xk0MK,)%0[C'9(C@i!6h"PEP066#!f1'X
70k0MK,)%4TFf&cFf9YBQaPFJ"2F'9Z8e0-)$BiDcSf1%XJ4fa[BQ&X)%p`G'PYDAT
71PFJ"2F'9Z8e0-)$BiDcSf1%XJ6'PZDf9b!%p`C@j68d`J0MKV1MBi5b"3FQpUC@0
72d!%p`C@j68d`J0MKV1N-[3bXV)%0[EA"TE'9b!%p`C@j68d`J0MKV1N-[3bXV)&G
73KFQjTEQGc!%p`C@j68d`J0MKV1N0'66Bi5`"2F'9Z8e0-)$BiDcT0B@028b"0CA*
74RC5"3B@jPE!"2F'9Z8e0-)$BiDcT38%-J3fpNC8GPEJ"2F'9Z8e0-)$BiDcT38%-
75J4'PcBA0cC@eLE'9b!%p`C@j68d`J0MKV1P"33b"(E'pLB@`J6h"dD@eTHQ9b!%p
76`C@j68d`J0MKV1P"33b"-D@jVCA)!6h"PEP066#!f1'Xk8&"$)&"&4J"2F'9Z8e0
77-)$BiDcT38%-J8(*[DQ9MG!"2F'9Z8e0-)$BiDcT38%0"FfdJ8'&ZC@`!6h"PEP0
7866#!f1'Xk8Q9k)%0[EA"TE'9b!%aTBP066#"38%-k4'9LG@GRCA)J8R9ZG'PYC3"
79-D@*68d`J8&"$1P0[GA*MC5"8FQ9PF`"-D@*68d`J8&"$1N0eFh4[E5",CAPhEh*
80NF`"-D@*68d`J8&"$1N&MBf9cFb"3BA4SF`"-D@*68d`J8&"$1P4KFQGPG#"6CA4
81dD@jRF`"-D@*68d`J8&"$1NCTE'8J6@&`F'PZCh-!6'PL8e0-)&"33cT#G@PXC#"
82&H(4bBA-!6'PL8e0-)&"33cT%C@*eCfGPFL"8BA*RCA3!6'PL8e0-)&"33cSf1%X
83J3fpNC8GPEJ"-D@*68d`J8&"$1MBi5b"%DA0KFh0PE@*XCA)!6'PL8e0-)&"33cS
84f1%XJ4fa[BQ&X)%p`G'PYDATPFJ"-D@*68d`J8&"$1MBi5b"-D@jVCA)!6'PL8e0
85-)&"33cSf1%XJ8(*[DQ9MG!"-D@*68d`J8&"$1N-[3bXV)%0[EA"TE'9b!%aTBP0
8666#"38%-k3bp$+bXJ9f&bEQPZCh-!6'PL8e0-)&"33cT$4Ndf1%X!6'PL8e0-)&"
8733cT0B@028b"0CA*RC5"3B@jPE!"-D@*68d`J8&"$1P"33b"$Ef4P4f9Z!%aTBP0
8866#"38%-k8&"$)%4TFf&cFf9YBQaPFJ"-D@*68d`J8&"$1P"33b"(E'pLB@`J6h"
89dD@eTHQ9b!%aTBP066#"38%-k8&"$)%aTEQYPFJ"-D@*68d`J8&"$1P"33b"348B
90!6'PL8e0-)&"33cT38%-J8(*[DQ9MG!"-D@*68d`J8&"$1P"33d&cE5"3B@jPE!"
91-D@*68d`J8&"$1P*PHL"$Efe`D@aPFJ"-D@*$FRP`G'mJ8&"$1N4PBR9RCf9b)&*
92eER4TE@8!6'PL3h*jF(4[)&"33cT6Eh9bBf8J9(*PCA-!6'PL3h*jF(4[)&"33cT
93$GA0dEfdJ5f9jGfpbC(-!6'PL3h*jF(4[)&"33cT"Bf0PFh-J8'&dD(-!6'PL3h*
94jF(4[)&"33cT8BA*RCA3J8f9dG'PZCh-!6'PL3h*jF(4[)&"33cT'D@aP)%eKF("
95TEQGc!%aTBN0bHA"dEb"38%-k3R9TE'3J4AKdFQ&c!%aTBN0bHA"dEb"38%-k4'9
96LG@GRCA)J9'&bCf9d!%aTBN0bHA"dEb"38%-k0MK,)%0[C'9(C@i!6'PL3h*jF(4
97[)&"33cSf1%XJ4'PcBA0cC@eLE'9b!%aTBN0bHA"dEb"38%-k0MK,)%GXEf*KE#"
982F(4TE@PkCA)!6'PL3h*jF(4[)&"33cSf1%XJ6'PZDf9b!%aTBN0bHA"dEb"38%-
99k0MK,)&"bEfTPBh3!6'PL3h*jF(4[)&"33cT$,d-V+b"$Efe`D@aPFJ"-D@*$FRP
100`G'mJ8&"$1N-[3bXV)&GKFQjTEQGc!%aTBN0bHA"dEb"38%-k3dC00MK,!%aTBN0
101bHA"dEb"38%-k6@&M6e-J6@9bCf8J8'&ZC@`!6'PL3h*jF(4[)&"33cT38%-J3fp
102NC8GPEJ"-D@*$FRP`G'mJ8&"$1P"33b"%DA0KFh0PE@*XCA)!6'PL3h*jF(4[)&"
10333cT38%-J4fa[BQ&X)%p`G'PYDATPFJ"-D@*$FRP`G'mJ8&"$1P"33b"-D@jVCA)
104!6'PL3h*jF(4[)&"33cT38%-J8%9'!%aTBN0bHA"dEb"38%-k8&"$)&"bEfTPBh3
105!6'PL3h*jF(4[)&"33cT38%0"FfdJ8'&ZC@`!6'PL3h*jF(4[)&"33cT5CASJ3fp
106YF'PXCA)!6'PL3h*jF(4[)$Bi5cT%C@*eCfGPFL"5G@jdD@eP!%aTBN0bHA"dEb!
107f1%Xk8fpeFQ0P)&4bC@9c!%aTBN0bHA"dEb!f1%Xk3h9cG'pY)%YPHAG[FQ4c!%a
108TBN0bHA"dEb!f1%Xk3@0MCA0c)&"KG'Kc!%aTBN0bHA"dEb!f1%Xk9'&bCf9d)&0
109PG(4TEQGc!%aTBN0bHA"dEb!f1%Xk4QPXC5"0BA"`D@jRF`"-D@*$FRP`G'mJ0MK
110,1N*eD@aN)%9iG(*KF`"-D@*$FRP`G'mJ0MK,1N4PBR9RCf9b)&4KFQGPG!"-D@*
111$FRP`G'mJ0MK,1MBi5b"$Ef4P4f9Z!%aTBN0bHA"dEb!f1%Xk0MK,)%4TFf&cFf9
112YBQaPFJ"-D@*$FRP`G'mJ0MK,1MBi5b"(E'pLB@`J6h"dD@eTHQ9b!%aTBN0bHA"
113dEb!f1%Xk0MK,)%aTEQYPFJ"-D@*$FRP`G'mJ0MK,1MBi5b"3FQpUC@0d!%aTBN0
114bHA"dEb!f1%Xk3bp$+bXJ3fpYF'PXCA)!6'PL3h*jF(4[)$Bi5cT$,d-V+b"ABA*
115ZD@jRF`"-D@*$FRP`G'mJ0MK,1N0'66Bi5`"-D@*$FRP`G'mJ0MK,1NeKBdp6)%e
116PFQGP)&"KEQ9X!%aTBN0bHA"dEb!f1%Xk8&"$)%0[C'9(C@i!6'PL3h*jF(4[)$B
117i5cT38%-J4'PcBA0cC@eLE'9b!%aTBN0bHA"dEb!f1%Xk8&"$)%GXEf*KE#"2F(4
118TE@PkCA)!6'PL3h*jF(4[)$Bi5cT38%-J6'PZDf9b!%aTBN0bHA"dEb!f1%Xk8&"
119$)&"&4J"-D@*$FRP`G'mJ0MK,1P"33b"3FQpUC@0d!%aTBN0bHA"dEb!f1%Xk8&"
120$3A0Y)&"KEQ9X!%aTBN0bHA"dEb!f1%Xk8Q9k)%0[EA"TE'9b!&"bEfTPBh3J4QP
121XC5"-DA0d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
122!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
123!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
124!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
125!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
126!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
127!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
128!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
129!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
130!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
131!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
132!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
133!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
134!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
135!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
136!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
137!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
138!!3!!!!!!!!!H!!!!!J!!!!!!!!!i!!!!!`!!!!!!!!"9!!!!"!!!!!!!!!"[!!!
139!"3!!!!!!!!#-!!!!"J!!!!!!!!#R!!!!"`!!!!!!!!$"!!!!#!!!!!!!!!$H!!!
140!#3!!!!!!!!$h!!!!#J!!!!!!!!%9!!!!#`!!!!!!!!%h!!!!$!!!!!!!!!&2!!!
141!$3!!!!!!!!&S!!!!$J!!!!!!!!'%!!!!$`!!!!!!!!'J!!!!%!!!!!!!!!'d!!!
142!%3!!!!!!!!(6!!!!%J!!!!!!!!(X!!!!%`!!!!!!!!)+!!!!&!!!!!!!!!)X!!!
143!&3!!!!!!!!*%!!!!&J!!!!!!!!*C!!!!&`!!!!!!!!*b!!!!'!!!!!!!!!+-!!!
144!'3!!!!!!!!+Q!!!!'J!!!!!!!!,$!!!!'`!!!!!!!!,F!!!!(!!!!!!!!!,i!!!
145!(3!!!!!!!!-4!!!!(J!!!!!!!!-Y!!!!(`!!!!!!!!0(!!!!)!!!!!!!!!0J!!!
146!)3!!!!!!!!0m!!!!)J!!!!!!!!18!!!!)`!!!!!!!!1a!!!!*!!!!!!!!!25!!!
147!*3!!!!!!!!2T!!!!*J!!!!!!!!3"!!!!*`!!!!!!!!3F!!!!+!!!!!!!!!3h!!!
148!+3!!!!!!!!4+!!!!+J!!!!!!!!4S!!!!+`!!!!!!!!5!!!!!,!!!!!!!!!5G!!!
149!,3!!!!!!!!5q!!!!,J!!!!!!!!69!!!!,`!!!!!!!!6T!!!!-!!!!!!!!!8"!!!
150!-3!!!!!!!!8D!!!!-J!!!!!!!!8c!!!!-`!!!!!!!!94!!!!0!!!!!!!!!9V!!!
151!03!!!!!!!!@)!!!!0J!!!!!!!!@L!!!!0`!!!!!!!!@r!!!!1!!!!!!!!!AD!!!
152!13!!!!!!!!Ad!!!!1J!!!!!!!!B4!!!!1`!!!!!!!!BU!!!!2!!!!!!!!!C)!!!
153!23!!!!!!!!CU!!!!2J!!!!!!!!D#!!!!2`!!!!!!!!DE!!!!3!!!!!!!!!Dh!!!
154!33!!!!!!!!E6!!!!3J!!!!!!!!ER!!!!3`!!!!!!!!F'!!!!4!!!!!!!!!FI!!!
155!43!!!!!!!!Fp!!!!4J!!!!!!!!GI!!!!4`!!!!!!!!Gh!!!!5!!!!!!!!!H-!!!
156!53!!!!!!!!HP!!!!5J!!!!!!!!Hr!!!!5`!!!!!!!!IC!!!!6!!!!!!!!!Ie!!!
157!63!!!!!!!!J0!!!!6J!!!!!!!!JS!!!!6`!!!!!!!!K!!!!!8!!!!!!!!!KE!!!
158!83!!!!!!!!Kd!!!!8J!!!!!!!!L-!!!!8`!!!!!!!!LR!!!!9!!!!!!!!!Lq!!!
159!93!!!!!!!!MD!!!!9J!!!!!!!!Mk!!!!9`!!!!!!!!N3!!!!@!!!!!!!!!NR!!!
160!@3!!!!!!!!P"!!!!@J!!!!!!!!PE!!!!@`!!!!!!!!PY!!!!A!!!!!!!!!Q+!!!
161!A3!!!!!!!!QK!!!!AJ!!!!!!!!Qp!!!!A`!!!!!!!!RG!!!!B!!!!!!!!!Rc!!!
162!B3!!!!!!!!S'!!!!BJ!!!!!!!!SG!!!!B`!!!!!!!!Se!!!!C!!!!!!!!!T0!!!
163!C3!!!!!!!!TU!!!!CJ!!!!!!!!U$!!!!C`!!!!!!!!UI!!!!D!!!!!!!!!Ui!!!
164!D3!!!!!!!!V8!!!!DJ!!!!!!!!VZ!!!!D`!!!!!!!!X(!!!!E!!!!!!!!!XM!!!
165!E3!!!!!!!!Xl!!!!EJ!!!!!!!!YB!!!!E`!!!!!!!!Yj!!!!F!!!!!!!!!Z3!!!
166!!(%!!!!!!!!,U!!!!()!!!!!!!!,``!!!(-!!!!!!!!,hJ!!!(3!!!!!!!!,m3!
167!!(8!!!!!!!!-$`!!!(B!!!!!!!!-*`!!!(F!!!!!!!!-4!!!!(J!!!!!!!!-C3!
168!!(N!!!!!!!!-I!!!!(S!!!!!!!!-N!!!!!"l!!!!!!!!$+J!!!"m!!!!!!!!$-%
169!!!"p!!!!!!!!$0S!!!"q!!!!!!!!$2B!!!"r!!!!!!!!$3i!!!#!!!!!!!!!$5N
170!!!#"!!!!!!!!$8%!!!##!!!!!!!!$9`!!!#$!!!!!!!!$A8!!!#%!!!!!!!!$Bd
171!!!#&!!!!!!!!$DJ!!!#'!!!!!!!!$Em!!!#(!!!!!!!!$GX!!!#)!!!!!!!!$IX
172!!!#*!!!!!!!!$K%!!!#+!!!!!!!!$LJ!!!#,!!!!!!!!$N)!!!#-!!!!!!!!$P`
173!!!#0!!!!!!!!$Qi!!!#1!!!!!!!!$SX!!!#2!!!!!!!!$U)!!!#3!!!!!!!!!!k
174q!!!!N3!!!!!!!!lH!!!!NJ!!!!!!!!ld!!!!N`!!!!!!!!m(!!!!P!!!!!!!!!m
175H!!!!P3!!!!!!!!mf!!!!PJ!!!!!!!!p1!!!!P`!!!!!!!!pY!!!!Q!!!!!!!!!q
176)!!!!Q3!!!!!!!!qQ!!!!QJ!!!!!!!!r"!!!!Q`!!!!!!!!rI!!!!R!!!!!!!!!r
177l!!!!R3!!!!!!!"!@!!!!RJ!!!!!!!"!d!!!!R`!!!!!!!""1!!!!S!!!!!!!!""
178Y!!!!S3!!!!!!!"#3!!!!!+)!!!!!!!!3U3!!!+-!!!!!!!!3``!!!+3!!!!!!!!
1793i!!!!+8!!!!!!!!3r3!!!+B!!!!!!!!4%J!!!+F!!!!!!!!4-J!!!+J!!!!!!!!
18046!!!!+N!!!!!!!!4D`!!!+S!!!!!!!!4MJ!!!+X!!!!!!!!4T`!!!+`!!!!!!!!
1814[3!!!+d!!!!!!!!4e`!!!+i!!!!!!!!4mJ!!!+m!!!!!!!!5$3!!!,!!!!!!!!!
1825,!!!!,%!!!!!!!!54`!!!,)!!!!!!!!5C3!!!,-!!!!!!!!5J!!!!,3!!!!!!!!
1835RJ!!!,8!!!!!!!!5ZJ!!!,B!!!!!!!!5e3!!!,F!!!!!!!!5m`!!!,J!!!!!!!!
1846$3!!!,N!!!!!!!!6,!!!!,S!!!!!!!!66`!!!,X!!!!!!!!6D!!!!,`!!!!!!!!
1856JJ!!!,d!!!!!!!!6R`!!!,i!!!!!!!!6[!!!!,m!!!!!!!!6d3!!!-!!!!!!!!!
1866m3!!!-%!!!!!!!!8#`!!!-)!!!!!!!!8+J!!!--!!!!!!!!863!!!-3!!!!!!!!
1878CJ!!!-8!!!!!!!!8I!!!!-B!!!!!!!!8PJ!!!-F!!!!!!!!8X3!!!-J!!!!!!!!
1888c!!!!-N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
189!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
190!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
191!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
192!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
193!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
194!1J!!!$X!!!!m!!!!23!!!$i!!!!e!!!!1!!!!$m!!!"!!!!!33!!!$3!!!!b!!!
195!13!!!$F!!!"#!!!!3`!!!%3!!!"&!!!!4J!!!%F!!!")!!!!53!!!%S!!!!c!!!
196!0J!!!!J!!!!*!!!!#J!!!!X!!!!-!!!!!`!!!!B!!!!0!!!!$J!!!!m!!!!#!!!
197!!!!!!!F!!!!&!!!!%!!!!"%!!!!5!!!!%`!!!"3!!!!9!!!!&J!!!"F!!!!B!!!
198!!3!!!!3!!!#h!!!!Z!!!!,N!!!#k!!!!Z`!!!,)!!!#e!!!![!!!!,d!!!#q!!!
199!X3!!!+m!!!#f!!!!Y!!!!,m!!!$!!!!!`3!!!-)!!!$$!!!!a!!!!-8!!!$'!!!
200!a`!!!,!!!!#c!!!!RJ!!!*m!!!#J!!!!S3!!!+)!!!#C!!!!R!!!!+-!!!#N!!!
201!T3!!!*J!!!#@!!!!R3!!!*X!!!#Q!!!!T`!!!+J!!!#T!!!!UJ!!!+X!!!#X!!!
202!V3!!!+i!!!#A!!!!QJ!!!&-!!!"8!!!!93!!!&B!!!"A!!!!6J!!!&%!!!"B!!!
203!@3!!!&S!!!"0!!!!5`!!!&)!!!"3!!!!@`!!!&`!!!"G!!!!AJ!!!&m!!!"J!!!
204!B3!!!')!!!"M!!!!6!!!!%m!!!#&!!!!KJ!!!)F!!!#)!!!!L3!!!)!!!!#$!!!
205!LJ!!!)X!!!#-!!!!I`!!!(d!!!#%!!!!JJ!!!)d!!!#1!!!!M`!!!*!!!!!!N3!
206!!*)!!!#6!!!!P!!!!*8!!!"q!!!!J3!!!'`!!!"Y!!!!EJ!!!'m!!!"`!!!!C`!
207!!'S!!!"a!!!!FJ!!!(-!!!"Q!!!!C!!!!'X!!!"T!!!!G!!!!(8!!!"f!!!!G`!
208!!(J!!!"j!!!!HJ!!!(X!!!"m!!!!C3!!!'J!!!!K!!!!)J!!!#-!!!!N!!!!*3!
209!!"`!!!!I!!!!*J!!!#F!!!!S!!!!'`!!!"N!!!!J!!!!(J!!!#N!!!!U!!!!+`!
210!!#`!!!!Y!!!!,J!!!#m!!!!`!!!!-3!!!"S!!!!G!!!!b!!!!!!!!!!!!!!!!!!
211!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
212!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!690-)%-Z8&"$,NaTBJ"*ER4
213PFQCKBf9-D@)!6@&dD%aTBJ"08d`J8R9ZG'PYC9"33bj-D@)!6h"PEP4`G%PZCA4
21438%-ZE`"2F'9Z9("d5@jdCA*ZCA4-D@)!6h"PEP4bB@jcF'pbG%9iG'j38%-ZE`"
2152F'9Z9(*KER0`Eh*d6'PL!&4SFQ9KC(0-D@)!BQP[Ah0cE#jM!(-b-epME'jd,Q-
216!Fc)cAfaTBLjM!(-b-epYCA4S,Q-!Fc)cAh"VG#jM!(-b-epcFRCb,Q-!Fc*IBfa
217ZG#jM!(-bAf9ZBbjM!(-bAfaTBLjM!(-bAfePG'JZB`"c-Pp`Dh3ZB`"c-PpcFRC
218b,Q-!Fc0IBQpdD#jM!(-cAf0XER3ZB`"c-epPEQ-ZB`"c-epXD@)ZB`"c-epYCA4
219S,Q-!Fc0IF'Yd,Q-!Fc0IFh*fFLjM!(0cE&pKE'Gc,Q-!Fh0XAf&cEM%ZB`"cFfa
220IBf9bG#jM!(0cE&pMDA"S,Q-!Fh0XAf9bFLjM!(0cE&pPFR)b,Q-!Fh0XAfaTBLj
221M!(0cE&pbFf%ZB`"cFfaIFf9cFbjM!(0cE&pcG'&d,Q-!Fh0XAh4iG#jM!(3aAf0
222XER3ZB`"d-9pPEQ-ZB`"d-9pXD@)ZB`"d-9pYCA4S,Q-!G$&IFh*fFLjM!'&cEM&
223ICA*b,Q-!BA0Z-9pXD@)ZB`"KFfiaAh"KFLjM!'&cEPp`B@0V,Q-!B9pLDA4cG()
224ZB`"KAf*YF#jM!'&IBQp[E#jM!'&IBRPdCA-ZB`"KAf3bD9pQF#jM!'&IC'PRCA0
225d,Q-!B9pNGA!ZB`"KAf9ZG@dZB`"KAfGPER4Y,Q-!B9pSC()ZB`"KAfNbC&pQF#j
226M!'&ID@jd,Q-!B9pYCA4S,Q-!B9p[BQTPBh3ZB`"KAfpMG'9d,Q-!B9p`FQPZG#j
227M!'&IFf9d,Q-!B9pcD@GZ,Q-!B9pdD@eP,Q-!B9pdHA"P,Q-!B9peG'0dE5jM!'&
228IGA4Q1#jM!'&IGQ9bD@Cj,Q-!B9pfDA-ZB`"N-QPIC'K`,Q-!C$*TAf4cBA!ZB`"
229N-QPIF()ZB`"N-QPIF(8ZB`"N-QPIFPp`FLjM!'3bD9pbAh"e,Q-!C$*TAh0IF()
230ZB`"N-QPIFep`G5jM!'9fF&pKFfia,Q-!CPpPER9Y,Q-!CPpTER3ZB`"QAh0dFQP
231ZCbjM!'NbC&pND(!ZB`"T-Q4IC(0KF#jM!'NbC&p`FLjM!'NbC&p`G5jM!'NbC&p
232bAh"b,Q-!D6*NAh*IF(8ZB`"T-Q4IFep`FLjM!'NbC&pcAh"e,Q-!ER0cCA%ZB`"
233ZAh"VCANZB`"`09p`BQ8ZB`"`09p`BQ9f-LjM!(!hAf4RFh3ZB`"`0epPEQ-ZB`"
234`0epPEQ0IBbjM!(!hAf9fF#jM!(!hAfPIFbjM!(!hAfaTBLjM!(!hAh*PBfP`,Q-
235!F$GIFfPREQ3ZB`"`0epcD@GZD5jM!(!hAh0IC5jM!(!iAh"VCANZB`"dAf0bE#j
236M!(4IF'YPH5jM!(4IFQ9a,Q-!G&pi06!j,Q-!H&pKE'G[FLjM!(KIBA4dFQPL,Q-
237!H&pMD@jQ,Q-!H&pMFQ`ZB`"iAf9iG'9Z,Q-!H&pTEQC[,Q-!H&pZB@eP,Q-!H&p
238`Df9j,Q-!H&p`G@*VCANZB`"iAh*PF5jM!(KIFfPR,Q-!H&pcF'YT,Q-!H&pfB@`
239ZB`"iAhJe-$NZB`"LCPpMCQ)f0#jM!'*QAf9MBLjM!'*QAf9ZBbjM!'*QAfpQBMB
240d,Q-!BQCIFfYPH5jM!'*TEepPFR)ZB`"LD@pIE'PL,Q-!BR0cAh0[BfXZB`"LEPp
241KC'3ZB`"LEPpKFfdZB`"LEPpLE'PZC#jM!'*ZAf4TGLjM!'*ZAf9bFLjM!'*ZAf9
242iF#jM!'*ZAf9iF$)ZB`"LEPpRBf3ZB`"LEPpXD@)ZB`"LEPpYEfjd,Q-!BQjIEA"
243T,Q-!BQjIEA9X,Q-!BQjIF(*TE@8ZB`"LEPp`FQPZG#jM!'*ZAh*KEQ3ZB`"LEPp
244bC@0`,Q-!BQjIFfKTCR3ZB`"LEPpcFA)ZB`"LEPphEh*N,Q-!BR9QCQ9b,Q-!BR9
245QAf9bFLjM!'0IBfCL0M3ZB`"MAf9MBLjM!'0IC@jM,Q-!Bep[CQ)f0#jM!'0IFfY
246PH5jM!'0[EA"IE'PL,Q-!BepbE'8ZB`"MAhTXD@)ZB`"MEfjQ,Q-!BfpZCPpPFR)
247ZB`"MBQ0IBfYcE5jM!'0LBepPEQ-ZB`"MCQ)f0'9NC5jM!'0QBMBdC@jM,Q-!BfC
248LAf9ZBbjM!'4PFepPEQ-ZB`"PBf)cAf9ZBbjM!'9MBPpPEQ-ZB`"PC'9IBf*ME9p
249PEQ-ZB`"PEQ0IFQ9KC#jM!'CMFRP`G#jM!'CMFRP`G&pL,Q-!EfCL0M4PC'8ZB`"
250[CQ)f0'9ZBbjM!'pQBPpPEQ-ZB`"`Bf*MAf9ZBbjM!(&eC&pMDh0Y,Q-!FQ&ZC&p
251VCANZB`"bC@&N-R"hC#jM!(*PB@4IF(GN,Q-!FR"MAf9ZBbjM!(0PG&pVCANZB`"
252cG()bDf9j,Q-!Fh9`F#jM!(KMBQ0IC@jM,Q-!C'KIBfKPBfXZB`"ND&pPFR)ZB`"
253ND&pRC@iZB`"ND&pVCANZB`"ND&pXD@)ZB`"NFf&IBA0Z-5jM!'4cB9pPFR)ZB`"
254NFf&ICf9Z,Q-!C(0KAfYPH5jM!'4cB9pXD@)ZB`"NFf&IFfPRELjM!'4cB9pfFQB
255ZB`"PFR)ZB`"PFR*IB@aX,Q-!CA*bAh"bELjM!'*TEepL0M3ZB`"LD@pIC@jM,Q-
256!BQP[AfeN,Q-!BQP[AfpV,Q-!BepKE'`ZB`"ND@GPFh3ZB`"PEQ0[C'8ZB`"PGR"
257IC@jM,Q-!CAC`Af9bFLjM!'9fF&pVCANZB`"PGR"IE'PL,Q-!CAC`Ah"LC5jM!'9
258fF&p`Df9j,Q-!C9pMBQ0I-f3ZB`"PAf0LBepLCLjM!'9IBf*MAf-ZB`"PAf0LBep
259N,Q-!C9pMBQ0ID5jM!'9IBf*MAh)b,Q-!C9pMBQ0IFM8ZB`"PAf0QBPmcC#jM!'9
260IBfCLAf*Q,Q-!C9pMCQ*IBbjM!'9IBfCLAf3ZB`"PAf0QBPpT,Q-!C9pMCQ*IFM)
261ZB`"PAf0QBPpb05jM!'9IC@0LAc0N,Q-!C9pPBf*IBQBZB`"PAf9MBPpM,Q-!C9p
262PBf*IC#jM!'9IC@0LAfNZB`"PAf9MBPpb-LjM!'9IC@0LAh)e,Q-!C9pZG@aX,Q-
263!C9p[CQ*I-f3ZB`"PAfpQBPpLCLjM!'9IEfCLAf-ZB`"PAfpQBPpN,Q-!C9p[CQ*
264ID5jM!'9IEfCLAh)b,Q-!C9p[CQ*IFM8ZB`"PAh*M0#jM!'9IH'0LBepN,Q-!E9p
265NFh-ZB`"YAf4cFc%ZB`"YAfeN-LjM!'eIE@3e,Q-!E9pYC'-b,Q-!E9pZG@aX,Q-
266!E9pbDA"PE@3ZB`"YAh0SB5jM!'eIFfKK-5jM!'jKE@9c,Q-!F&pNC@-ZB`"`Af9
267ZBbjM!("IE'PL,Q-!F&p[F'9Z,Q-!F&pcC@&X,Q-!F&pcD@GZ,Q-!F&pfCA*TCRN
268ZB`"SE@&M,Q-!D9pMBQ-ZB`"TAf0QBMBd,Q-!D9pPBf)ZB`"TAfpQBMBd,Q-!D9p
269cDf9j,Q-!E'KKFfJZB`"XD&pcG'&dFbjM!'eN-PpNCh0d,Q-!E@3bAfpZC5jM!'e
270N09pNCh0d,Q-!E@3eAfpZC5jM!'eNBc*NCh0d,Q-!E@4M-Pp[EQ8ZB`"[BQTIC'&
271d,Q-!Ef*UAf9bFLjM!'pLDPpXD@)ZB`"[AfjKE@9c,Q-!F'9YAf&XE#jM!("PE9p
272PFR)ZB`"`C@eID@jQEbjM!("PE9pXD@)ZB`"`C@eIFf9KE#jM!("PE9pcD@GZ,Q-
273!F$%bAf&NC#jM!(!a-PpKG(4b,Q-!F$%bAf*KCh-ZB`"`-6*IBh*`G#jM!(!a-Pp
274MFR3ZB`"`-6*IC'9MFLjM!(!a-PpTEQPd,Q-!F$%bAfYPH5jM!(!a-PpVDA0c,Q-
275!F$%bAfaTBLjM!(!a-PpYB@-ZB`"`-6*IEA9dE#jM!(!a-PpcBQ&R,Q-!F$%bAh9
276dE#jM!("V-6*PFR)ZB`"`DcGIC'pTG#jM!("V0epXD@)ZB`"`Df0c0f9bFLjM!'e
277NAh*KEQ3ZB`"bB@jNCQPXC5jM!(*KEQ4IE'PL,Q-!FQ-bBfCL0M3ZB`"bBc*[CQ)
278f0#jM!(*M-PpMBQ-ZB`"bBc*IC@0L,Q-!FQ-bAh0VCANZB`"bBc4IC@jM,Q-!FQ-
279dAh0VCANZB`"bBc9MCQ)f0#jM!(*M0@pQBMBd,Q-!FQ-eAf9MBLjM!(*M09pPEQ-
280ZB`"bBc9IFfYPH5jM!(*YC&pNCh0d,Q-!FQeNAfpZC5jM!(*cB9pPBANZB`"bFf&
281ICA*b,Q-!FR0KAfGPELjM!(*cB9pXD@)ZB`"bFf&IEQpZC5jM!(*cB9p[B@9`,Q-
282!FR0KAh"V-5jM!(*cB9pcB@pc,Q-!FR0KAh0TCfiZB`"bFf&IFh0X,Q-!FfKK-@4
283RFh3ZB`"cD'%aAfpZC5jM!(0SB9pNCh0d,Q-!FfKKAfpZC5jM!(0dB@0V,Q-!G(K
284dAf4L,Q-!BRPIC'Pb,Q-!BRPICQPXC5jM!(Je-$PZB@eP,Q-!H$8`1A*cCA3ZB`"
285i06!jG(P`C5jM!(Je-$PIBfe`,Q-!H$8`19pN-LjM!(Je-$PIC'9Q,Q-!H$8`19p
286PFR)ZB`"i06!jAf9iG#jM!(Je-$PIE(8ZB`"i06!jAfpLDLjM!(Je-$PIFM*i,Q-
287!H$8`19pbCA%ZB`"i06!jAh0PG#jM!(Je-$PIG(Kd,Q-!H$8`19pf-bjM!(Je-$P
288IGQCj,Q-!H&pKE'`ZB`"f-f9bFLjM!(BcAf&VCANZB`"f-epKE(3ZB`"f-epLBfp
289ZFbjM!(BcAf*TG(0d,Q-!GM0IBfpZCLjM!(BcAf0`Efac,Q-!GM0IBh*XC#jM!(B
290cAf9ZG@dZB`"f-epPH(4VG5jM!(BcAfGPEQiZB`"f-epTB68ZB`"f-epTER3ZB`"
291f-epXD@)ZB`"f-ep`Dh8ZB`"f-ep`FQiZB`"f-epcDf9j,Q-!GM0IFhKZCA3ZB`"
292f-epeG'`ZB`"MF(4ICA*b,Q-!Bh*jF(4XD@)ZB`"PH&pNBA4K,Q-!E@9Y,Q-!690
293-)&0*6e9B,P"33bj-D@)!BQCIBR9QCLjM!(KIH$8`1@%ZB`"NFf&IEh0cE#jM!(J
294e-$PcF'YT,Q-!H$8`19pdFR-ZB`"f-ep`GA*`,Q-!GM0ID@jQEbjM!'*IF(*TER3
295ZB`"KAfeLFh4b,Q-!G&pcF'YT,Q-!G&pi06!jB5jM!(4IBQPdFh3ZB`"KAh0dFQj
296TC#jM!'*TEepMBLjM!'*cFepYC@dZB`"LFh0ICQ3ZB`"LFh0ICQPXC5jM!'*cFep
297ZG@aX,Q-!BQCIER9XE#jM!'*QAfjLD@mZB`"LFh0IBQP[,Q-!BPpNG@e`,Q-!C@j
298MAhGbDA3ZB`"`09pMFR"d,Q-!F$9IBh*`G$)ZB`"`-6*IER"KFbjM!("V0epKG(4
299b,Q-!F'XhAfeTE@8ZB`"`DcGIFfeTE@8ZB`"bFf&IBfKV,Q-!FR0KAfjeE'`ZB`"
300MGQ9bFfP[ELjM!%038h4bD@jR9A4TE(-ZBh"`!%9bFQpb5'&ZC'aTEQFZBh"`!%G
301PG%K89&"6,Q0`F!"0B@06Ef0VCA3ZBh"`!'ePE9pNBQFZB`"36&0dFQPZCdCeEQ0
302c8&"$,QaTBJ"LEPpMG(JZB`"bB@jNAf9bFLjM!&*KEQ4[E@PkCA)ZBh"`!(J!BA"
303`FbjM!'&`F&pbB@jN,Q-!BA0Z-A"KFR-ZB`"MB5jM!'0TF'KPFR-ZB`"MFQ`ZB`"
304MFQ`bF$FZB`"NCh0d,Q-!C'JZB`"NFf%ZB`"NFf&`BA*KE5jM!'9ZBbjM!'9bFR0
305dFLjM!'GPEQ4S,Q-!Cf9ZC(0K,Q-!Cf9ZFR0K,Q-!ER0PF5jM!'p`C@jcFf`ZB`"
306`Df0c-6)ZB`"`Df0c0bjM!("VBh-i,Q-!FQ9a,Q-!FR0K,Q-!Ff9cFepTC#jM!(0
307YD@eP,Q-!Fh"PC@3ZB`"cF'YKBbjM!(0IBf)ZB`"cAf0XD@9ZG#jM!(0IFf9bGQ9
308b,Q-!FepcEf0VCA3ZB`"fCA*TCRNZB`"fCA*cD@pZ,Q-!H$8`15jM!(0IG'PYC5j
309M!%G98dPI5@jTG#jMF(!!4e9659p$Eh*P,P"33bj-D@)!4e9659p08d`Z8&"$,Na
310TBJ"(990*Ae0*6e9B,P"33bj-D@)!1NaTBP066#j38%-Z6'PL!$T-D@*$FRP`G'm
311Z8&"$,NaTBJ"0B@028bjXD@)!690-)&*eER4TE@8f1%XZ6'PL!%p`C@j8F(4*EQ9
312d,Qm!6h"PEP4bB@jcF'pbG#j[!%p`C@j8FQ&ZFh"[FR4"F(!ZE`"08d`J8dP299J
313Z0MK,,NaTBJ"08d`J3bif1%XJ4Q%S0'PI1'3T,NaTBJ"0BA4S6'PL0MK,)%CK+$4
314TAcKN+5j-D@)!4QPbFh3J8f9RE@9ZG!"(990*Ad0[FQ8Z0MK,,NaTBJ"(990*Ade
31566#if1%XZ6'PL!%G98dPI8dP299JZ0MK,,NaTBJ!k6'PL3h*jF(4[,MBiDb"'B5J
316dD9miC#NZ6'PL!%aTBP066#if1%XJ4Q%S0'PI1'3T,NaTBJ"(CA4)9&438b"38%-
317!6h"PEP066#"38%-!4f9d5&488&-J0MK,!%aTBP066#!f1%X!6h"PEP066#!f1'X
318!6'PL8e0-)&"33`"-D@*$FRP`G'mJ8&"$!%aTBN0bHA"dEb!f1%X!1NGPG%K89&"
3196+&"33bN!6'PL)%PYF'pbG#"38%-!3Q&XE'p[EL")C@a`!%eA)%-[3bXV)&"33`"
320(B@eP3fpNC5"$EfjfCA*dCA)!4QaPH#"3FQ9`FQpMCA0cEh)!69FJ8'&cBf&X)&"
32133`"5CAS!8&"$3A0Y!%*TFfpZ)&"bCA"bEf0PFh0[FJ"B3dp'4L"*EA"[FR3J8&"
322$!&"&4L"*EA"[FR3J8&"$!$T2F'9Z8e0-!$T(CA4)9&438bJf1%XT!%aTBL"*EA"
323[FR3J0MK,!%e39b"*EA"[FR3J0MK,!%eA)%-[3bXV)$Bi5`"09b"3BA0MB@`J0MK
324,!&"&4L"*EA"[FR3J0MK,!$T-D@*68d`Z0MK,)%CK+$4TAcKN+5j-D@)!1Np`C@j
32568d`S0MKV+3"0B@028b"38%-J6'PZDf9b!%eKBdp6)$Bi5b"-D@jVCA)!8fpeFQ0
326P)&4bC@9c!%0eFh4[E5",CAPhEh*NF`""Bf0PFh-J8'&dD(-!9'&bCf9d)&0PG(4
327TEQGc!%CTE'8J6@&`F'PZCh-!3R9TE'3J4AKdFQ&c!%4PBR9RCf9b)&*eER4TE@8
328!4'9LG@GRCA)J9'&bCf9d!%-[3bXV)%0[EA"TE'9b!%-[3bXV)&GKFQjTEQGc!&"
32933b"$Ef4P4f9Z!&"33b"%DA0KFh0PE@*XCA)!8&"$)%GXEf*KE#"2F(4TE@PkCA)
330!8&"$)%aTEQYPFJ"38%-J8%9'!&"33b"3FQpUC@0d!&"33d&cE5"3B@jPE!"5CAS
331J3fpYF'PXCA)!0MK,)%0[C'9(C@i!0MK,)%4TFf&cFf9YBQaPFJ!f1%XJ4fa[BQ&
332X)%p`G'PYDATPFJ!f1%XJ6'PZDf9b!$Bi5b"3FQpUC@0d!%0'66Bi5`!!!!!!!!!
333!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
334!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
335!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
336!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
337!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
338!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
339!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
340!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!!$J!
341!!!)!!!!!!!!!'`!!!!-!!!!!!!!!)`!!!!3!!!!!!!!!0J!!!!8!!!!!!!!!4`!
342!!!B!!!!!!!!!@J!!!!F!!!!!!!!!F3!!!!J!!!!!!!!!JJ!!!!N!!!!!!!!!M3!
343!!!S!!!!!!!!!P`!!!!X!!!!!!!!!SJ!!!!`!!!!!!!!!V!!!!!d!!!!!!!!!Y`!
344!!!i!!!!!!!!!`3!!!!m!!!!!!!!!c!!!!"!!!!!!!!!!eJ!!!"%!!!!!!!!!h`!
345!!")!!!!!!!!!k!!!!"-!!!!!!!!!mJ!!!"3!!!!!!!!!q`!!!"8!!!!!!!!""3!
346!!"B!!!!!!!!"$`!!!"F!!!!!!!!"'3!!!"J!!!!!!!!")J!!!"N!!!!!!!!"+`!
347!!"S!!!!!!!!"03!!!"X!!!!!!!!"2J!!!"`!!!!!!!!"5!!!!"d!!!!!!!!"8`!
348!!"i!!!!!!!!"AJ!!!"m!!!!!!!!"D3!!!#!!!!!!!!!"G!!!!#%!!!!!!!!"IJ!
349!!#)!!!!!!!!"L3!!!#-!!!!!!!!"N`!!!#3!!!!!!!!"R3!!!#8!!!!!!!!"U!!
350!!#B!!!!!!!!"X`!!!#F!!!!!!!!"[3!!!#J!!!!!!!!"a`!!!#N!!!!!!!!"d!!
351!!#S!!!!!!!!"f3!!!#X!!!!!!!!"i`!!!#`!!!!!!!!"l3!!!#d!!!!!!!!"q!!
352!!#i!!!!!!!!#!`!!!#m!!!!!!!!#$J!!!$!!!!!!!!!#'3!!!$%!!!!!!!!#*!!
353!!$)!!!!!!!!#,!!!!$-!!!!!!!!#03!!!$3!!!!!!!!#2`!!!$8!!!!!!!!#5J!
354!!$B!!!!!!!!#93!!!$F!!!!!!!!#A3!!!$J!!!!!!!!#CJ!!!$N!!!!!!!!#F!!
355!!$S!!!!!!!!#H!!!!$X!!!!!!!!#J`!!!$`!!!!!!!!#L`!!!$d!!!!!!!!#P!!
356!!$i!!!!!!!!#R`!!!$m!!!!!!!!#U3!!!%!!!!!!!!!#X`!!!%%!!!!!!!!#Z`!
357!!%)!!!!!!!!#a!!!!%-!!!!!!!!#c3!!!%3!!!!!!!!#eJ!!!%8!!!!!!!!#i!!
358!!%B!!!!!!!!#k3!!!%F!!!!!!!!#p!!!!%J!!!!!!!!#r!!!!%N!!!!!!!!$"J!
359!!%S!!!!!!!!$%3!!!%X!!!!!!!!$'J!!!%`!!!!!!!!$)`!!!%d!!!!!!!!$,J!
360!!%i!!!!!!!!$13!!!%m!!!!!!!!$4!!!!&!!!!!!!!!$6`!!!&%!!!!!!!!$@J!
361!!&)!!!!!!!!$B`!!!&-!!!!!!!!$D`!!!&3!!!!!!!!$GJ!!!&8!!!!!!!!$J!!
362!!&B!!!!!!!!$L`!!!&F!!!!!!!!$P!!!!&J!!!!!!!!$R3!!!&N!!!!!!!!$U!!
363!!&S!!!!!!!!$X`!!!&X!!!!!!!!$[J!!!&`!!!!!!!!$b3!!!&d!!!!!!!!$d3!
364!!&i!!!!!!!!$fJ!!!&m!!!!!!!!$i`!!!'!!!!!!!!!$lJ!!!'%!!!!!!!!$q!!
365!!')!!!!!!!!%!3!!!'-!!!!!!!!%$!!!!'3!!!!!!!!%&3!!!'8!!!!!!!!%(J!
366!!'B!!!!!!!!%*`!!!'F!!!!!!!!%-J!!!'J!!!!!!!!%23!!!'N!!!!!!!!%5!!
367!!'S!!!!!!!!%83!!!'X!!!!!!!!%@`!!!'`!!!!!!!!%B`!!!'d!!!!!!!!%E!!
368!!'i!!!!!!!!%G!!!!'m!!!!!!!!%I3!!!(!!!!!!!!!%K`!!!(%!!!!!!!!%NJ!
369!!()!!!!!!!!%Q`!!!(-!!!!!!!!%S`!!!(3!!!!!!!!%V3!!!(8!!!!!!!!%YJ!
370!!(B!!!!!!!!%[`!!!(F!!!!!!!!%b!!!!(J!!!!!!!!%d`!!!(N!!!!!!!!%f`!
371!!(S!!!!!!!!%i`!!!(X!!!!!!!!%l!!!!(`!!!!!!!!%p!!!!(d!!!!!!!!%r3!
372!!(i!!!!!!!!&#!!!!(m!!!!!!!!&%3!!!)!!!!!!!!!&'J!!!)%!!!!!!!!&*3!
373!!))!!!!!!!!&,`!!!)-!!!!!!!!&13!!!)3!!!!!!!!&3`!!!)8!!!!!!!!&6J!
374!!)B!!!!!!!!&9`!!!)F!!!!!!!!&B!!!!)J!!!!!!!!&D`!!!)N!!!!!!!!&G!!
375!!)S!!!!!!!!&I3!!!)X!!!!!!!!&KJ!!!)`!!!!!!!!&N!!!!!#0!!!!!!!!"CN
376!!!#1!!!!!!!!"D)!!!#2!!!!!!!!"D`!!!#3!!!!!!!!!!@e!!!!N3!!!!!!!!@
377q!!!!NJ!!!!!!!!A*!!!!N`!!!!!!!!A8!!!!P!!!!!!!!!AH!!!!P3!!!!!!!!A
378S!!!!PJ!!!!!!!!Ac!!!!P`!!!!!!!!Am!!!!Q!!!!!!!!!B'!!!!Q3!!!!!!!!B
3792!!!!QJ!!!!!!!!BC!!!!Q`!!!!!!!!BM!!!!R!!!!!!!!!BV!!!!R3!!!!!!!!B
380c!!!!RJ!!!!!!!!Bp!!!!R`!!!!!!!!C'!!!!S!!!!!!!!!C4!!!!S3!!!!!!!!C
381C!!!!SJ!!!!!!!!CL!!!!S`!!!!!!!!CT!!!!T!!!!!!!!!Cd!!!!T3!!!!!!!!C
382r!!!!TJ!!!!!!!!D*!!!!T`!!!!!!!!D8!!!!U!!!!!!!!!DI!!!!U3!!!!!!!!D
383T!!!!UJ!!!!!!!!Dc!!!!U`!!!!!!!!Dq!!!!V!!!!!!!!!E)!!!!V3!!!!!!!!E
384A!!!!VJ!!!!!!!!EL!!!!V`!!!!!!!!EV!!!!X!!!!!!!!!Ef!!!!X3!!!!!!!!F
385"!!!!XJ!!!!!!!!F-!!!!X`!!!!!!!!F@!!!!Y!!!!!!!!!FK!!!!Y3!!!!!!!!F
386X!!!!YJ!!!!!!!!Fh!!!!Y`!!!!!!!!G#!!!!Z!!!!!!!!!G0!!!!Z3!!!!!!!!G
387A!!!!ZJ!!!!!!!!GK!!!!Z`!!!!!!!!GV!!!![!!!!!!!!!Gb!!!![3!!!!!!!!G
388p!!!![J!!!!!!!!H)!!!![`!!!!!!!!H4!!!!`!!!!!!!!!HD!!!!`3!!!!!!!!H
389M!!!!`J!!!!!!!!HX!!!!``!!!!!!!!Hh!!!!a!!!!!!!!!I"!!!!a3!!!!!!!!I
390,!!!!aJ!!!!!!!!I9!!!!a`!!!!!!!!II!!!!b!!!!!!!!!IU!!!!b3!!!!!!!!I
391d!!!!bJ!!!!!!!!Ik!!!!b`!!!!!!!!J%!!!!c!!!!!!!!!J1!!!!c3!!!!!!!!J
392B!!!!cJ!!!!!!!!JL!!!!c`!!!!!!!!JV!!!!d!!!!!!!!!Jd!!!!d3!!!!!!!!J
393m!!!!dJ!!!!!!!!K&!!!!d`!!!!!!!!K1!!!!e!!!!!!!!!KB!!!!e3!!!!!!!!K
394L!!!!eJ!!!!!!!!KX!!!!e`!!!!!!!!Kf!!!!f!!!!!!!!!L!!!!!f3!!!!!!!!L
395,!!!!fJ!!!!!!!!L@!!!!f`!!!!!!!!LK!!!!h!!!!!!!!!LV!!!!h3!!!!!!!!L
396e!!!!hJ!!!!!!!!Lr!!!!h`!!!!!!!!M+!!!!i!!!!!!!!!M9!!!!i3!!!!!!!!M
397J!!!!iJ!!!!!!!!MV!!!!i`!!!!!!!!Me!!!!j!!!!!!!!!Mr!!!!j3!!!!!!!!N
398*!!!!jJ!!!!!!!!N8!!!!j`!!!!!!!!NI!!!!k!!!!!!!!!NU!!!!k3!!!!!!!!N
399e!!!!kJ!!!!!!!!Nr!!!!k`!!!!!!!!P*!!!!l!!!!!!!!!P6!!!!l3!!!!!!!!P
400H!!!!lJ!!!!!!!!PT!!!!l`!!!!!!!!Pb!!!!m!!!!!!!!!Pp!!!!m3!!!!!!!!Q
401)!!!!mJ!!!!!!!!Q5!!!!m`!!!!!!!!QF!!!!p!!!!!!!!!QQ!!!!p3!!!!!!!!Q
402a!!!!pJ!!!!!!!!Qm!!!!p`!!!!!!!!R%!!!!q!!!!!!!!!R2!!!!q3!!!!!!!!R
403A!!!!qJ!!!!!!!!RJ!!!!q`!!!!!!!!RS!!!!r!!!!!!!!!R`!!!!r3!!!!!!!!R
404j!!!!rJ!!!!!!!!S#!!!!r`!!!!!!!!S0!!!"!!!!!!!!!!S9!!!"!3!!!!!!!!S
405H!!!"!J!!!!!!!!SQ!!!"!`!!!!!!!!SZ!!!""!!!!!!!!!Sf!!!""3!!!!!!!!S
406q!!!""J!!!!!!!!T(!!!""`!!!!!!!!T3!!!"#!!!!!!!!!TC!!!"#3!!!!!!!!T
407N!!!"#J!!!!!!!!TV!!!"#`!!!!!!!!Tc!!!"$!!!!!!!!!Tp!!!"$3!!!!!!!!U
408&!!!"$J!!!!!!!!U2!!!"$`!!!!!!!!UB!!!"%!!!!!!!!!UJ!!!"%3!!!!!!!!U
409V!!!"%J!!!!!!!!Uf!!!"%`!!!!!!!!V!!!!"&!!!!!!!!!V,!!!"&3!!!!!!!!V
4109!!!"&J!!!!!!!!VJ!!!"&`!!!!!!!!VV!!!"'!!!!!!!!!Ve!!!"'3!!!!!!!!V
411r!!!"'J!!!!!!!!X*!!!"'`!!!!!!!!X6!!!"(!!!!!!!!!XG!!!"(3!!!!!!!!X
412R!!!"(J!!!!!!!!Xb!!!"(`!!!!!!!!Xm!!!")!!!!!!!!!Y(!!!")3!!!!!!!!Y
4135!!!")J!!!!!!!!YF!!!")`!!!!!!!!YR!!!"*!!!!!!!!!Yb!!!"*3!!!!!!!!Y
414p!!!"*J!!!!!!!!Z(!!!"*`!!!!!!!!Z5!!!"+!!!!!!!!!ZG!!!"+3!!!!!!!!Z
415R!!!"+J!!!!!!!!Zb!!!"+`!!!!!!!!Zm!!!",!!!!!!!!!['!!!",3!!!!!!!![
4164!!!",J!!!!!!!![F!!!",`!!!!!!!![Q!!!"-!!!!!!!!![`!!!"-3!!!!!!!![
417l!!!"-J!!!!!!!!`&!!!"-`!!!!!!!!`3!!!"0!!!!!!!!!`D!!!"03!!!!!!!!`
418P!!!"0J!!!!!!!!``!!!"0`!!!!!!!!`l!!!"1!!!!!!!!!a'!!!"13!!!!!!!!a
4193!!!"1J!!!!!!!!aD!!!"1`!!!!!!!!aP!!!"2!!!!!!!!!a[!!!"23!!!!!!!!a
420k!!!"2J!!!!!!!!b&!!!"2`!!!!!!!!b3!!!!!8!!!!!!!!!-QJ!!!8%!!!!!!!!
421-T!!!!8)!!!!!!!!-V`!!!8-!!!!!!!!-ZJ!!!83!!!!!!!!-a!!!!88!!!!!!!!
422-cJ!!!8B!!!!!!!!-f!!!!8F!!!!!!!!-iJ!!!8J!!!!!!!!-l!!!!8N!!!!!!!!
423-p`!!!8S!!!!!!!!0!J!!!8X!!!!!!!!0$!!!!8`!!!!!!!!0&`!!!8d!!!!!!!!
4240)J!!!8i!!!!!!!!0,!!!!8m!!!!!!!!00`!!!9!!!!!!!!!03J!!!9%!!!!!!!!
425063!!!9)!!!!!!!!09`!!!9-!!!!!!!!0A`!!!93!!!!!!!!0D!!!!98!!!!!!!!
4260F3!!!9B!!!!!!!!0H`!!!9F!!!!!!!!0KJ!!!9J!!!!!!!!0N3!!!9N!!!!!!!!
4270R!!!!9S!!!!!!!!0T`!!!9X!!!!!!!!0X3!!!9`!!!!!!!!0[!!!!9d!!!!!!!!
4280a`!!!9i!!!!!!!!0dJ!!!9m!!!!!!!!0h!!!!@!!!!!!!!!0j`!!!@%!!!!!!!!
4290mJ!!!@)!!!!!!!!0r3!!!@-!!!!!!!!1#!!!!@3!!!!!!!!1%`!!!@8!!!!!!!!
4301(3!!!@B!!!!!!!!1+!!!!@F!!!!!!!!1-!!!!@J!!!!!!!!11!!!!@N!!!!!!!!
43113J!!!@S!!!!!!!!15`!!!@X!!!!!!!!19J!!!@`!!!!!!!!1B3!!!@d!!!!!!!!
4321D`!!!@i!!!!!!!!1GJ!!!@m!!!!!!!!1J!!!!A!!!!!!!!!1LJ!!!A%!!!!!!!!
4331P3!!!A)!!!!!!!!1R`!!!A-!!!!!!!!1U!!!!A3!!!!!!!!1X3!!!A8!!!!!!!!
4341ZJ!!!AB!!!!!!!!1``!!!AF!!!!!!!!1c!!!!AJ!!!!!!!!1eJ!!!AN!!!!!!!!
4351i3!!!AS!!!!!!!!1kJ!!!AX!!!!!!!!1p!!!!A`!!!!!!!!1r`!!!Ad!!!!!!!!
4362#3!!!Ai!!!!!!!!2$`!!!Am!!!!!!!!2)3!!!B!!!!!!!!!2+`!!!B%!!!!!!!!
437203!!!B)!!!!!!!!23!!!!B-!!!!!!!!25`!!!B3!!!!!!!!29J!!!B8!!!!!!!!
4382B!!!!BB!!!!!!!!2DJ!!!BF!!!!!!!!2G!!!!BJ!!!!!!!!2IJ!!!BN!!!!!!!!
4392K`!!!BS!!!!!!!!2N3!!!BX!!!!!!!!2Q`!!!B`!!!!!!!!2TJ!!!Bd!!!!!!!!
4402V`!!!Bi!!!!!!!!2Z3!!!Bm!!!!!!!!2`J!!!C!!!!!!!!!!$md!!!'4!!!!!!!
441!$pJ!!!'5!!!!!!!!$q)!!!'6!!!!!!!!$q`!!!'8!!!!!!!!$rB!!!'9!!!!!!!
442!$rm!!!'@!!!!!!!!%!S!!!'A!!!!!!!!%"3!!!'B!!!!!!!!%"m!!!'C!!!!!!!
443!%#S!!!'D!!!!!!!!%$8!!!'E!!!!!!!!%%!!!!'F!!!!!!!!%%`!!!'G!!!!!!!
444!%&B!!!'H!!!!!!!!%'%!!!'I!!!!!!!!%'`!!!'J!!!!!!!!%(i!!!'K!!!!!!!
445!%*!!!!!"SJ!!!!!!!"#G!!!"S`!!!!!!!"#V!!!"T!!!!!!!!"#e!!!"T3!!!!!
446!!"$+!!!"TJ!!!!!!!"$6!!!"T`!!!!!!!"$H!!!"U!!!!!!!!"$Y!!!"U3!!!!!
447!!"$[!!!"UJ!!!!!!!"$f!!!"U`!!!!!!!"%"!!!"V!!!!!!!!"%-!!!"V3!!!!!
448!!"%4!!!"VJ!!!!!!!"%E!!!"V`!!!!!!!"%K!!!"X!!!!!!!!"%U!!!"X3!!!!!
449!!"%a!!!"XJ!!!!!!!"%f!!!"X`!!!!!!!"%m!!!"Y!!!!!!!!"&(!!!"Y3!!!!!
450!!"&0!!!"YJ!!!!!!!"&@!!!"Y`!!!!!!!"&H!!!"Z!!!!!!!!"&R!!!"Z3!!!!!
451!!"&`!!!"ZJ!!!!!!!"&h!!!"Z`!!!!!!!"'"!!!"[!!!!!!!!"'+!!!"[3!!!!!
452!!"'5!!!"[J!!!!!!!"'D!!!"[`!!!!!!!"'J!!!"`!!!!!!!!"'Q!!!"`3!!!!!
453!!"'`!!!"`J!!!!!!!"'i!!!"``!!!!!!!"(!!!!"a!!!!!!!!"()!!!"a3!!!!!
454!!"(2!!!"aJ!!!!!!!"(D!!!"a`!!!!!!!"(P!!!"b!!!!!!!!"(`!!!"b3!!!!!
455!!"(j!!!"bJ!!!!!!!")$!!!"b`!!!!!!!")+!!!"c!!!!!!!!")6!!!"c3!!!!!
456!!")K!!!"cJ!!!!!!!")c!!!"c`!!!!!!!"*%!!!"d!!!!!!!!"*A!!!"d3!!!!!
457!!"*R!!!"dJ!!!!!!!"*k!!!"d`!!!!!!!"+%!!!"e!!!!!!!!"+A!!!"e3!!!!!
458!!"+P!!!"eJ!!!!!!!"+e!!!"e`!!!!!!!",)!!!"f!!!!!!!!",D!!!"f3!!!!!
459!!",b!!!"fJ!!!!!!!"-,!!!"f`!!!!!!!"-C!!!"h!!!!!!!!"-V!!!"h3!!!!!
460!!"-m!!!"hJ!!!!!!!"02!!!"h`!!!!!!!"0X!!!"i!!!!!!!!"1&!!!"i3!!!!!
461!!"15!!!"iJ!!!!!!!"1H!!!"i`!!!!!!!"1V!!!"j!!!!!!!!"1f!!!"j3!!!!!
462!!"2#!!!"jJ!!!!!!!"20!!!"j`!!!!!!!"2E!!!"k!!!!!!!!"2T!!!"k3!!!!!
463!!"2i!!!"kJ!!!!!!!"3(!!!"k`!!!!!!!"38!!!"l!!!!!!!!"3K!!!"l3!!!!!
464!!"3d!!!"lJ!!!!!!!"4'!!!"l`!!!!!!!"48!!!"m!!!!!!!!"4B!!!"m3!!!!!
465!!"4I!!!"mJ!!!!!!!"4b!!!"m`!!!!!!!"5$!!!"p!!!!!!!!"55!!!"p3!!!!!
466!!"5E!!!"pJ!!!!!!!"5U!!!"p`!!!!!!!"5j!!!"q!!!!!!!!"6)!!!"q3!!!!!
467!!"69!!!"qJ!!!!!!!"6M!!!"q`!!!!!!!"6b!!!"r!!!!!!!!"8-!!!"r3!!!!!
468!!"8D!!!"rJ!!!!!!!"8V!!!"r`!!!!!!!"8m!!!#!!!!!!!!!"9*!!!#!3!!!!!
469!!"9C!!!#!J!!!!!!!"9Q!!!#!`!!!!!!!"9f!!!#"!!!!!!!!"@%!!!#"3!!!!!
470!!"@4!!!#"J!!!!!!!"@L!!!#"`!!!!!!!"@b!!!##!!!!!!!!"A"!!!##3!!!!!
471!!"A3!!!##J!!!!!!!"AF!!!##`!!!!!!!"AY!!!#$!!!!!!!!"B#!!!#$3!!!!!
472!!"B0!!!#$J!!!!!!!"B9!!!#$`!!!!!!!"BK!!!#%!!!!!!!!"BZ!!!#%3!!!!!
473!!"Bl!!!#%J!!!!!!!"C(!!!#%`!!!!!!!"CB!!!#&!!!!!!!!"CY!!!#&3!!!!!
474!!"Ci!!!#&J!!!!!!!"D%!!!#&`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
475!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
476!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$!!!!$!!!!!-
477!!!!-Y0ifDrrrqUS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
478!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
479!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
480!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
481!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
482!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
483!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
484!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
485!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
486!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
487!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
488!!!!!!!!!!!!!!!!!!!!!!!!#&`!!!L!!!"D,!!!B!!!!!KF!!!!!!!!!!!!!!!!
489!!!!!9%9B9!!!!!)!!!(q!!!"r`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
490!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
491!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
492!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
493!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
494!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
495!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
496!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
497!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
498!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
499!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
500!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
501!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
502!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
503!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
504!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
505!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
506!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
507!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
508!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
509!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
510!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
511!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#`MlJ!!!!!!!!!3!
512#`NI`!!)!!!!!!!!!!!!!!X)fJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
513!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
514!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
515!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
516!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
517!!!!!!!)!!!%!!!!!"3!!Irm!!!!!Irm!!!!!Irm!!!!!Irm!!!!-!!%!!J!%!!!
518!"8!!!!B!!3!"1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
519!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
520!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
521!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
522!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
523!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
524!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
525!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
526!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
527!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
528!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
529!!!%!!!$rrrrr!!!!!`!"!!%k1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
530!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
531!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
532!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
533!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
534!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
535!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
536!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
537!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
538!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
539!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
540!!!!!!!!!!!!!!3!!!2rrrrm!!!!%!!%!!6SkD@jME(9NC6S!!!!!!!!!!!!!!!!
541!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
542!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
543!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
544!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
545!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
546!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
547!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
548!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
549!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
550!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
551!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrd!!!!)!!3!"1J!!!!!!!!!!!!!!!!!
552!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
553!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
554!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
555!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
556!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
557!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
558!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
559!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
560!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
561!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
562!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!!`!#!!%k6@&M6e-
563J8h9`F'pbG$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
564!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
565!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
566!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
567!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
568!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
569!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
570!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
571!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
572!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
573!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrp!!!!%!!)
574!!6T08d`k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
575!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
576!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
577!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
578!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
579!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
580!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
581!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
582!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
583!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
584!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!rrr
585rrd!!!!8!#J!!6@&M6e-J8&"$)%aTEQYPFJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
586!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
587!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
588!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
589!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
590!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
591!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
592!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
593!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
594!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
595!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
596!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
597!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
598!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
599!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
600!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
601!!!!!!!!!!!!!4f9d5&488&-J8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
602!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
603!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
604!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
605!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
606!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%k!!!!!!!!!!!!!!!!!!!!!!!
607!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
608!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
609!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
610!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
611!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
612!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
613!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
614!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
615!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
616!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
617!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!&0B@028b"38%-J6'PZDf9b!!!
618!!!!!!!!!!!!!!!!!!!!H39"36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
619!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!3A"`E!!!!!!
620!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
621!!!!!!!!!!!!!!!"J!!!!68e-3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
622!!!!!6'PL)%PYF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"-4J!!!!!
623!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#"38%-!!!!!!!!
624!!!!!!!!!!!!!!!!!!!!!69G$4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
625!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!8P053`!!!!!
626!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
627!!!!!!!!!!!!!!!"J!!!!9%9B9#jLD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
628!!!!!3Q&XE'p[EL")C@a`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jM!!!
629!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!
630!!!!!!!!!!!!!!!!!!!!!9%9B9#jM+bX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
631!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMB`!
632!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!
633!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
634!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF(!
635!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!
636!!!!!!!!!!!!!!!!!!!!!9%9B9#jPH(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
637!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jRB`!
638!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4f&YC80[C'8J3fpZGQ9bG'9b!!!
639!!!!!!!!!!!!!!!"!!!!!9%9B9#jS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
640!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!9%9B9#jX!!!
641!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QaPH#"3FQ9`FQpMCA0cEh)!!!!
642!!!!!!!!!!!!!!!#!!!!!9%9B9#j`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
643!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BA-
644!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!
645!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BfJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
646!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`BfJ
647V+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!
648!!!!!!!!!!!!!!!#!!!!!9%9B9#j`F(8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
649!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#jb!!!
650!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8Q9k!!!!!!!!!!!!!!!!!!!!!!!
651!!!!!!!!!!!!!!!!!!!!!9%9B9#jc!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
652!!!!!8&"$3A0Y!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jj!!!
653!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3QPcEfiJ8(*PF(*[Bf9cFfpb!!!
654!!!!!!!!!!!!!!!#!!!!!@%024J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
655!!!!!@%024NBJ5@e`Eh*d)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!C'pMG3!!!!!
656!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
657!!!!!!!!!!!!!!!"J!!!!FR0bB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
658!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FfKXBJ!!!!!
659!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#"38%-!!!!!!!!
660!!!!!!!!!!!!!!!!!!!!!Fh4eBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
661!!!!!8%9')%PYF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#jNEf-
662!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
663!!!!!!!!!!!!!!!"3!!!!!!8"!3!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
664!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
665!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
666!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
667!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
668!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!"!!!
669!!!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
670!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
671!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
672!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
673!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
674!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
675!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
676!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
677!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
678!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
679!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
680!!!!"!3!!E@&TEJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
681!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
682!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
683!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
684!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
685!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!3!"!!!!!3%"!3%!!3%!!!!!!!%"!!!
686"!3!"!!!"!!%!!!!!!!!!!!!)!3!"!3!"!3!!!!%!!!N!!"G0B@028b"8EfpXBQp
687i)%4&3P9()$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
688!!!!r2cmr39"36!!!!B"B`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
689!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$mr2cm!!!!!!!!!!!!
690!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
691!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
692!!!!!!!!0!!%!!!!!!""I69G&8NY6Ah"bC@CTH#jS!!!!!!!!!!!!!!!!!!!!!!!
693"!!!"!!!!!!!"!!!!!!!!!!!!!!8"!3%!!!%"!!%!!!!!"!!!!!!!!!!!!!!!!!!
694!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
695!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
696!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
697!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
698!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
699!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
700!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"IAh0dBA*d!!!
701!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
702!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
703!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!!#8ePFQGP)%peG!!!!!!!!!!
704!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$m
705r2cp"8&"-!!%"!!!%)#!J)!1ARe!$GYpi!`@Z%!!&!J%!!3%!!3%"!!!"!!!!!!!
706!!!%"!3%!!3%!!3!""!!!!!!!!!!!!!!(!3%!!3!!!3!!!!!!!!!!!!!!!!!!!!!
707!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
708IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
709!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
710!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!
711!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
712!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
713!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
714!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
715!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
716!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8!!!e(CA4)9&438bK38%-T!!!!!!!
717!!!!!!!!!!!!!!!!!2cmr2d&38%`!!!3!!!!%!!!!!%!!!&M!!!!!!!!!!!!!!!!
718!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
719!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%r2cmr!!!!!!!
720!!!)!!!!#!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
721#!&!!!3!"!!%!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
722!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
723!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
724!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
725!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
726!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8*d024%8R)#G%394"*b!R8%P$9#F
727!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
728!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
729!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
730!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
731!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!3!
732!!!%#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!)!!!!#!J%!!!!
733!!!%!!3-!!!!!!!!!!!!!!!!%!!!!!!!!!!!"!!!$!!!!!`)"!!!!!!!"!!%$!!!
734!!!!!!!!!!!!!"!!!!!!!!!!!!3!!"!!!!!3#!3!!!!!!!3!"!`!!!!!!!!!!!!!
735!!!!!!!!!!!!!!!%!!!8!!!!&!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!"!!!!!!!
736!!!!"!!!'!!!!"J)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!"3!!!!!!!!!!!3!!"`!
737!!!F#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!!J!!!!)!J%!!!!
738!!!%!!3-!!!!!!!!!!!!!!!!&!!!!!!!!!!!"!!!*!!!!#3)"!!!!!!!"!!%$!!!
739!!!!!!!!!!!!!"3!!!!!!!!!!!3!!#J!!!!S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
740!!!%!!!!!!!!!!!%!!!X!!!!,!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
741!!!!"!!!-!!!!$!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!$3!
742!!!d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!!i!!!!1!J%!!!!
743!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!2!!!!$`)"!!!!!!!"!!%"!!!
744!!!!!!!!!!!!!!3!!!!!!!!!!!3!!%!!!!"!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
745!!!%!!!!!!!!!!!%!!"%!!!!4!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
746!!!!"!!!5!!!!%J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!%`!
747!!"-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!"3!!!!8!J%!!!!
748!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!9!!!!&3)"!!!!!!!"!!%"!!!
749!!!!!!!!!!!!!!3!!!!!!!!!!!3!!&J!!!"B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
750!!!%!!!!!!!!!!!%!!"F!!!!A!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
751!!!!"!!!B!!!!'!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!'3!
752!!"N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!"S!!!!D!J%!!!!
753!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!E!!!!'`)"!!!!!!!"!!%"!!!
754!!!!!!!!!!!!!!3!!!!!!!!!!!3!!(!!!!"`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
755!!!%!!!!!!!!!!!%!!"d!!!!G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
756!!!!"!!!H!!!!(J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!(`!
757!!"m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!#!!!!!J!J%!!!!
758!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!K!!!!)3)"!!!!!!!"!!%"!!!
759!!!!!!!!!!!!!!3!!!!!!!!!!!3!!)J!!!#)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
760!!!%!!!!!!!!!!!%!!#-!!!!M!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
761!!!!"!!!N!!!!*!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!*3!
762!!#8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!#B!!!!Q!J%!!!!
763!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!R!!!!*`)"!!!!!!!"!!%"!!!
764!!!!!!!!!!!!!!3!!!!!!!!!!!3!!+!!!!#J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
765!!!%!!!!!!!!!!!%!!#N!!!!T!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
766!!!!"!!!U!!!!+J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!+`!
767!!#X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!#`!!!!X!J%!!!!
768!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!Y!!!!,3)"!!!!!!!"!!%"!!!
769!!!!!!!!!!!!!!3!!!!!!!!!!!3!!,J!!!#i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
770!!!%!!!!!!!!!!!%!!#m!!!![!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
771!!!!"!!!`!!!!-!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!-3!
772!!$%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!$)!!!!b!J%!!!!
773!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!c!!!!-`)"!!!!!!!"!!%"!!!
774!!!!!!!!!!!!!!3!!!!!!!!!!!3!!0!!!!$3#!3!!!!!!!3!"!3!!!!!!!!!!!!!
775!!!%!!!!!!!!!!!%!!$8!!!!e!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
776!!!!"!!!f!!!!0J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!0`!
777!!$F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!$J!!!!i!J%!!!!
778!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!j!!!!13)"!!!!!!!"!!%"!!!
779!!!!!!!!!!!!!!3!!!!!!!!!!!3!!1J!!!$S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
780!!!%!!!!!!!!!!!%!!$X!!!!l!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
781!!!!"!!!m!!!!2!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!23!
782!!$d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!$i!!!!q!J%!!!!
783!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!!r!!!!2`)"!!!!!!!"!!%"!!!
784!!!!!!!!!!!!!!3!!!!!!!!!!!3!!3!!!!%!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
785!!!%!!!!!!!!!!!%!!%%!!!""!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
786!!!!"!!"#!!!!3J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!3`!
787!!%-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!%3!!!"%!J%!!!!
788!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"&!!!!43)"!!!!!!!"!!%"!!!
789!!!!!!!!!!!!!!3!!!!!!!!!!!3!!4J!!!%B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
790!!!%!!!!!!!!!!!%!!%F!!!"(!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
791!!!!"!!")!!!!5!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!53!
792!!%N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!%S!!!"+!J%!!!!
793!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!",!!!!5`)"!!!!!!!"!!%"!!!
794!!!!!!!!!!!!!!3!!!!!!!!!!!3!!6!!!!%`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
795!!!%!!!!!!!!!!!%!!%d!!!"0!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
796!!!!"!!"1!!!!6J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!6`!
797!!%m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!&!!!!"3!J%!!!!
798!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"4!!!!83)"!!!!!!!"!!%"!!!
799!!!!!!!!!!!!!!3!!!!!!!!!!!3!!8J!!!&)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
800!!!%!!!!!!!!!!!%!!&-!!!"6!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
801!!!!"!!"8!!!!9!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!93!
802!!&8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!&B!!!"@!J%!!!!
803!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"A!!!!9`)"!!!!!!!"!!%"!!!
804!!!!!!!!!!!!!!3!!!!!!!!!!!3!!@!!!!&J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
805!!!%!!!!!!!!!!!%!!&N!!!"C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
806!!!!"!!"D!!!!@J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!@`!
807!!&X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!&`!!!"F!J%!!!!
808!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"G!!!!A3)"!!!!!!!"!!%"!!!
809!!!!!!!!!!!!!!3!!!!!!!!!!!3!!AJ!!!&i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
810!!!%!!!!!!!!!!!%!!&m!!!"I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
811!!!!"!!"J!!!!B!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!B3!
812!!'%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!')!!!"L!J%!!!!
813!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"M!!!!B`)"!!!!!!!"!!%"!!!
814!!!!!!!!!!!!!!3!!!!!!!!!!!3!!C!!!!'3#!3!!!!!!!3!"!3!!!!!!!!!!!!!
815!!!%!!!!!!!!!!!%!!'8!!!"P!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
816!!!!"!!"Q!!!!CJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!C`!
817!!'F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!'J!!!"S!J%!!!!
818!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"T!!!!D3)"!!!!!!!"!!%"!!!
819!!!!!!!!!!!!!!3!!!!!!!!!!!3!!DJ!!!'S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
820!!!%!!!!!!!!!!!%!!'X!!!"V!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
821!!!!"!!"X!!!!E!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!E3!
822!!'d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!'i!!!"Z!J%!!!!
823!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"[!!!!E`)"!!!!!!!"!!%"!!!
824!!!!!!!!!!!!!!3!!!!!!!!!!!3!!F!!!!(!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
825!!!%!!!!!!!!!!!%!!(%!!!"a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
826!!!!"!!"b!!!!FJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!F`!
827!!(-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!(3!!!"d!J%!!!!
828!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"e!!!!G3)"!!!!!!!"!!%"!!!
829!!!!!!!!!!!!!!3!!!!!!!!!!!3!!GJ!!!(B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
830!!!%!!!!!!!!!!!%!!(F!!!"h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
831!!!!"!!"i!!!!H!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!H3!
832!!(N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!(S!!!"k!J%!!!!
833!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!"l!!!!H`)"!!!!!!!"!!%"!!!
834!!!!!!!!!!!!!!3!!!!!!!!!!!3!!I!!!!(`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
835!!!%!!!!!!!!!!!%!!(d!!!"p!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
836!!!!"!!"q!!!!IJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!I`!
837!!(m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!)!!!!#!!J%!!!!
838!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#"!!!!J3)"!!!!!!!"!!%"!!!
839!!!!!!!!!!!!!!3!!!!!!!!!!!3!!JJ!!!))#!3!!!!!!!3!"!3!!!!!!!!!!!!!
840!!!%!!!!!!!!!!!%!!)-!!!#$!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
841!!!!"!!#%!!!!K!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!K3!
842!!)8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!)B!!!#'!J%!!!!
843!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#(!!!!K`)"!!!!!!!"!!%"!!!
844!!!!!!!!!!!!!!3!!!!!!!!!!!3!!L!!!!)J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
845!!!%!!!!!!!!!!!%!!)N!!!#*!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
846!!!!"!!#+!!!!LJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!L`!
847!!)X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!)`!!!#-!J%!!!!
848!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#0!!!!M3)"!!!!!!!"!!%"!!!
849!!!!!!!!!!!!!!3!!!!!!!!!!!3!!MJ!!!)i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
850!!!%!!!!!!!!!!!%!!)m!!!#2!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
851!!!!"!!#3!!!!!*!!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
8524!!!!N3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!NJ!!!*)#!3!
853!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!*-!!!#6!J%!!!!!!!%!!3%
854!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#8!!!!P!)"!!!!!!!"!!%"!!!!!!!!!!!
855!!!!!!3!!!!!!!!!!!3!!P3!!!*8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
856!!!!!!!%!!*B!!!#@!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
857A!!!!P`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!Q!!!!*J#!3!
858!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!*N!!!#C!J%!!!!!!!%!!3%
859!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#D!!!!QJ)"!!!!!!!"!!%"!!!!!!!!!!!
860!!!!!!3!!!!!!!!!!!3!!Q`!!!*X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
861!!!!!!!%!!*`!!!#F!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
862G!!!!R3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!RJ!!!*i#!3!
863!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!*m!!!#I!J%!!!!!!!%!!3%
864!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#J!!!!S!)"!!!!!!!"!!%"!!!!!!!!!!!
865!!!!!!3!!!!!!!!!!!3!!S3!!!+%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
866!!!!!!!%!!+)!!!#L!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
867M!!!!S`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!T!!!!+3#!3!
868!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!+8!!!#P!J%!!!!!!!%!!3%
869!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#Q!!!!TJ)"!!!!!!!"!!%"!!!!!!!!!!!
870!!!!!!3!!!!!!!!!!!3!!T`!!!+F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
871!!!!!!!%!!+J!!!#S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
872T!!!!U3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!UJ!!!+S#!3!
873!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!+X!!!#V!J%!!!!!!!%!!3%
874!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#X!!!!V!)"!!!!!!!"!!%"!!!!!!!!!!!
875!!!!!!3!!!!!!!!!!!3!!V3!!!+d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
876!!!!!!!%!!+i!!!#Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
877[!!!!V`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!X!!!!,!#!3!
878!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!,%!!!#a!J%!!!!!!!%!!3%
879!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#b!!!!XJ)"!!!!!!!"!!%"!!!!!!!!!!!
880!!!!!!3!!!!!!!!!!!3!!X`!!!,-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
881!!!!!!!%!!,3!!!#d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
882e!!!!Y3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!YJ!!!,B#!3!
883!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!,F!!!#h!J%!!!!!!!%!!3%
884!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#i!!!!Z!)"!!!!!!!"!!%"!!!!!!!!!!!
885!!!!!!3!!!!!!!!!!!3!!Z3!!!,N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
886!!!!!!!%!!,S!!!#k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#
887l!!!!Z`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!![!!!!,`#!3!
888!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!,d!!!#p!J%!!!!!!!%!!3%
889!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!#q!!!![J)"!!!!!!!"!!%"!!!!!!!!!!!
890!!!!!!3!!!!!!!!!!!3!![`!!!,m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
891!!!!!!!%!!-!!!!$!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
892"!!!!`3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!`J!!!-)#!3!
893!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!--!!!$$!J%!!!!!!!%!!3%
894!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$%!!!!a!)"!!!!!!!"!!%"!!!!!!!!!!!
895!!!!!!3!!!!!!!!!!!3!!a3!!!-8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
896!!!!!!!%!!-B!!!$'!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
897(!!!!a`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!b!!!!-J#!3!
898!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!-N!!!$*!J%!!!!!!!%!!3%
899!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$+!!!!bJ)"!!!!!!!"!!%"!!!!!!!!!!!
900!!!!!!3!!!!!!!!!!!3!!b`!!!-X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
901!!!!!!!%!!-`!!!$-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
9020!!!!c3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!cJ!!!-i#!3!
903!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!-m!!!$2!J%!!!!!!!%!!3%
904!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$3!!!!d!)"!!!!!!!"!!%"!!!!!!!!!!!
905!!!!!!3!!!!!!!!!!!3!!d3!!!0%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
906!!!!!!!%!!0)!!!$5!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
9076!!!!d`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!e!!!!03#!3!
908!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!08!!!$9!J%!!!!!!!%!!3%
909!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$@!!!!eJ)"!!!!!!!"!!%"!!!!!!!!!!!
910!!!!!!3!!!!!!!!!!!3!!e`!!!0F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
911!!!!!!!%!!0J!!!$B!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
912C!!!!f3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!fJ!!!0S#!3!
913!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!0X!!!$E!J%!!!!!!!%!!3%
914!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$F!!!!h!)"!!!!!!!"!!%"!!!!!!!!!!!
915!!!!!!3!!!!!!!!!!!3!!h3!!!0d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
916!!!!!!!%!!0i!!!$H!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
917I!!!!h`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!i!!!!1!#!3!
918!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!1%!!!$K!J%!!!!!!!%!!3%
919!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$L!!!!iJ)"!!!!!!!"!!%"!!!!!!!!!!!
920!!!!!!3!!!!!!!!!!!3!!i`!!!1-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
921!!!!!!!%!!13!!!$N!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
922P!!!!j3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!jJ!!!1B#!3!
923!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!1F!!!$R!J%!!!!!!!%!!3%
924!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$S!!!!k!)"!!!!!!!"!!%"!!!!!!!!!!!
925!!!!!!3!!!!!!!!!!!3!!k3!!!1N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
926!!!!!!!%!!1S!!!$U!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
927V!!!!k`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!l!!!!1`#!3!
928!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!1d!!!$Y!J%!!!!!!!%!!3%
929!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$Z!!!!lJ)"!!!!!!!"!!%"!!!!!!!!!!!
930!!!!!!3!!!!!!!!!!!3!!l`!!!1m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
931!!!!!!!%!!2!!!!$`!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
932a!!!!m3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!mJ!!!2)#!3!
933!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!2-!!!$c!J%!!!!!!!%!!3%
934!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$d!!!!p!)"!!!!!!!"!!%"!!!!!!!!!!!
935!!!!!!3!!!!!!!!!!!3!!p3!!!28#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
936!!!!!!!%!!2B!!!$f!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
937h!!!!p`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!q!!!!2J#!3!
938!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!2N!!!$j!J%!!!!!!!%!!3%
939!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$k!!!!qJ)"!!!!!!!"!!%"!!!!!!!!!!!
940!!!!!!3!!!!!!!!!!!3!!q`!!!2X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
941!!!!!!!%!!2`!!!$m!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!$
942p!!!!r3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!!rJ!!!2i#!3!
943!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!2m!!!$r!J%!!!!!!!%!!3%
944!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%!!!!"!!)"!!!!!!!"!!%"!!!!!!!!!!!
945!!!!!!3!!!!!!!!!!!3!"!3!!!3%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
946!!!!!!!%!!3)!!!%#!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
947$!!!"!`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!""!!!!33#!3!
948!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!38!!!%&!J%!!!!!!!%!!3%
949!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%'!!!""J)"!!!!!!!"!!%"!!!!!!!!!!!
950!!!!!!3!!!!!!!!!!!3!""`!!!3F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
951!!!!!!!%!!3J!!!%)!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
952*!!!"#3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"#J!!!3S#!3!
953!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!3X!!!%,!J%!!!!!!!%!!3%
954!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%-!!!"$!)"!!!!!!!"!!%"!!!!!!!!!!!
955!!!!!!3!!!!!!!!!!!3!"$3!!!3d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
956!!!!!!!%!!3i!!!%1!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
9572!!!"$`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"%!!!!4!#!3!
958!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!4%!!!%4!J%!!!!!!!%!!3%
959!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%5!!!"%J)"!!!!!!!"!!%"!!!!!!!!!!!
960!!!!!!3!!!!!!!!!!!3!"%`!!!4-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
961!!!!!!!%!!43!!!%8!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
9629!!!"&3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"&J!!!4B#!3!
963!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!4F!!!%A!J%!!!!!!!%!!3%
964!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%B!!!"'!)"!!!!!!!"!!%"!!!!!!!!!!!
965!!!!!!3!!!!!!!!!!!3!"'3!!!4N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
966!!!!!!!%!!4S!!!%D!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
967E!!!"'`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"(!!!!4`#!3!
968!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!4d!!!%G!J%!!!!!!!%!!3%
969!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%H!!!"(J)"!!!!!!!"!!%"!!!!!!!!!!!
970!!!!!!3!!!!!!!!!!!3!"(`!!!4m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
971!!!!!!!%!!5!!!!%J!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
972K!!!")3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!")J!!!5)#!3!
973!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!5-!!!%M!J%!!!!!!!%!!3%
974!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%N!!!"*!)"!!!!!!!"!!%"!!!!!!!!!!!
975!!!!!!3!!!!!!!!!!!3!"*3!!!58#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
976!!!!!!!%!!5B!!!%Q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
977R!!!"*`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"+!!!!5J#!3!
978!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!5N!!!%T!J%!!!!!!!%!!3%
979!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%U!!!"+J)"!!!!!!!"!!%"!!!!!!!!!!!
980!!!!!!3!!!!!!!!!!!3!"+`!!!5X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
981!!!!!!!%!!5`!!!%X!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
982Y!!!",3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!",J!!!5i#!3!
983!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!5m!!!%[!J%!!!!!!!%!!3%
984!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%`!!!"-!)"!!!!!!!"!!%"!!!!!!!!!!!
985!!!!!!3!!!!!!!!!!!3!"-3!!!6%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
986!!!!!!!%!!6)!!!%b!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
987c!!!"-`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"0!!!!63#!3!
988!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!68!!!%e!J%!!!!!!!%!!3%
989!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%f!!!"0J)"!!!!!!!"!!%"!!!!!!!!!!!
990!!!!!!3!!!!!!!!!!!3!"0`!!!6F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
991!!!!!!!%!!6J!!!%i!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
992j!!!"13)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"1J!!!6S#!3!
993!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!6X!!!%l!J%!!!!!!!%!!3%
994!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%m!!!"2!)"!!!!!!!"!!%"!!!!!!!!!!!
995!!!!!!3!!!!!!!!!!!3!"23!!!6d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
996!!!!!!!%!!6i!!!%q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!%
997r!!!"2`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"3!!!!8!#!3!
998!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!8%!!!&"!J%!!!!!!!%!!3%
999!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&#!!!"3J)"!!!!!!!"!!%"!!!!!!!!!!!
1000!!!!!!3!!!!!!!!!!!3!"3`!!!8-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1001!!!!!!!%!!83!!!&%!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1002&!!!"43)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"4J!!!8B#!3!
1003!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!8F!!!&(!J%!!!!!!!%!!3%
1004!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&)!!!"5!)"!!!!!!!"!!%"!!!!!!!!!!!
1005!!!!!!3!!!!!!!!!!!3!"53!!!8N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1006!!!!!!!%!!8S!!!&+!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1007,!!!"5`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"6!!!!8`#!3!
1008!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!8d!!!&0!J%!!!!!!!%!!3%
1009!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&1!!!"6J)"!!!!!!!"!!%"!!!!!!!!!!!
1010!!!!!!3!!!!!!!!!!!3!"6`!!!8m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1011!!!!!!!%!!9!!!!&3!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
10124!!!"83)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"8J!!!9)#!3!
1013!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!9-!!!&6!J%!!!!!!!%!!3%
1014!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&8!!!"9!)"!!!!!!!"!!%"!!!!!!!!!!!
1015!!!!!!3!!!!!!!!!!!3!"93!!!98#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1016!!!!!!!%!!9B!!!&@!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1017A!!!"9`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"@!!!!9J#!3!
1018!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!9N!!!&C!J%!!!!!!!%!!3%
1019!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&D!!!"@J)"!!!!!!!"!!%"!!!!!!!!!!!
1020!!!!!!3!!!!!!!!!!!3!"@`!!!9X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1021!!!!!!!%!!9`!!!&F!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1022G!!!"A3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"AJ!!!9i#!3!
1023!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!9m!!!&I!J%!!!!!!!%!!3%
1024!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&J!!!"B!)"!!!!!!!"!!%"!!!!!!!!!!!
1025!!!!!!3!!!!!!!!!!!3!"B3!!!@%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1026!!!!!!!%!!@)!!!&L!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1027M!!!"B`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"C!!!!@3#!3!
1028!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!@8!!!&P!J%!!!!!!!%!!3%
1029!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&Q!!!"CJ)"!!!!!!!"!!%"!!!!!!!!!!!
1030!!!!!!3!!!!!!!!!!!3!"C`!!!@F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1031!!!!!!!%!!@J!!!&S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1032T!!!"D3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"DJ!!!@S#!3!
1033!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!@X!!!&V!J%!!!!!!!%!!3%
1034!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&X!!!"E!)"!!!!!!!"!!%"!!!!!!!!!!!
1035!!!!!!3!!!!!!!!!!!3!"E3!!!@d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1036!!!!!!!%!!@i!!!&Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1037[!!!"E`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"F!!!!A!#!3!
1038!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!A%!!!&a!J%!!!!!!!%!!3%
1039!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&b!!!"FJ)"!!!!!!!"!!%"!!!!!!!!!!!
1040!!!!!!3!!!!!!!!!!!3!"F`!!!A-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1041!!!!!!!%!!A3!!!&d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1042e!!!"G3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"GJ!!!AB#!3!
1043!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!AF!!!&h!J%!!!!!!!%!!3%
1044!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&i!!!"H!)"!!!!!!!"!!%"!!!!!!!!!!!
1045!!!!!!3!!!!!!!!!!!3!"H3!!!AN#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1046!!!!!!!%!!AS!!!&k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&
1047l!!!"H`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"I!!!!A`#!3!
1048!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!Ad!!!&p!J%!!!!!!!%!!3%
1049!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!&q!!!"IJ)"!!!!!!!"!!%"!!!!!!!!!!!
1050!!!!!!3!!!!!!!!!!!3!"I`!!!Am#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!
1051!!!!!!!%!!B!!!!'!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'
1052"!!!"J3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"JJ!!!B)#!3!
1053!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!B-!!!'$!J%!!!!!!!%!!3%
1054!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'%!!!"K!)"!!!!!!!"!!%"!!!!!!!!!!!
1055!!!!!!3!!!!!!!!!!!3!"K3!!!B8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1056!!!!!!!%!!BB!!!''!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'
1057(!!!"K`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"L!!!!BJ#!3!
1058!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!BN!!!'*!J%!!!!!!!%!!3%
1059!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'+!!!"LJ)"!!!!!!!"!!%"!!!!!!!!!!!
1060!!!!!!3!!!!!!!!!!!3!"L`!!!BX#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
1061!!!!!!!%!!B`!!!'-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'
10620!!!"M3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"MJ!!!Bi#!3!
1063!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!Bm!!!'2!J%!!!!!!!%!!3%
1064!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'3!!!!!C!!!J%!!!!!!!%!!3%!!!!!!!!
1065!!!!!!!!"!!!!!!!!!!!"!!'4!!!"N3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
1066!!!!!!!!!!3!"NJ!!!C)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%
1067!!C-!!!'6!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'8!!!"P!)
1068"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"P3!!!C8#!3!!!!!!!3!
1069"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!CB!!!'@!J%!!!!!!!%!!3%!!!!!!!!
1070!!!!!!!!"!!!!!!!!!!!"!!'A!!!"P`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
1071!!!!!!!!!!3!"Q!!!!CJ#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%
1072!!CN!!!'C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'D!!!"QJ)
1073"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"Q`!!!CX#!3!!!!!!!3!
1074"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!C`!!!'F!J%!!!!!!!%!!3%!!!!!!!!
1075!!!!!!!!"!!!!!!!!!!!"!!'G!!!"R3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
1076!!!!!!!!!!3!"RJ!!!Ci#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%
1077!!Cm!!!'I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'J!!!"S!)
1078"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"S3!!!D%#!3!!!!!!!3!
1079"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!D)!!!'L!J%!!!!!!!%!!3%!!!!!!!!
1080!!!!!!!!"!!!!!!!!!!!"!!'M!!!"S`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
1081!!!!!!!!!!3!"T!!!!D3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%
1082!!D8!!!'P!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!"!!!!!!!!!!!"!!'Q!!!"TJ)
1083"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!3!"T`!!!DF#!3!!!!!!!3!
1084"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!%!!DJ!!!'S!J%!!!!!!!%!!3%!!!!!!!!
1085!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1086!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1087!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1088!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1089!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1090!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1091!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1092!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1093!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1094!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1095!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1096!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1097!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1098!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1099!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1100!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1101!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1102!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1103!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1104!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1105!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!)!!!!$!!!!"!!!!!8!!!!'!!!!"`!
1106!!!J!!!!*!!!!#J!!!!X!!!!-!!!!$3!!!!i!!!!2!!!!%!!!!"%!!!!5!!!!%`!
1107!!"3!!!!9!!!!&J!!!"F!!!!B!!!!'3!!!"S!!!!E!!!!(!!!!"d!!!!H!!!!(`!
1108!!#!!!!!K!!!!)J!!!#-!!!!N!!!!*3!!!#B!!!!R!!!!+!!!!#N!!!!U!!!!+`!
1109!!#`!!!!Y!!!!,J!!!#m!!!!`!!!!-3!!!$)!!!!c!!!!0!!!!$8!!!!f!!!!0`!
1110!!$J!!!!j!!!!1J!!!$X!!!!m!!!!23!!!$i!!!!r!!!!3!!!!%%!!!"#!!!!3`!
1111!!%3!!!"&!!!!4J!!!%F!!!")!!!!53!!!%S!!!",!!!!6!!!!%d!!!"1!!!!6`!
1112!!&!!!!"4!!!!8J!!!&-!!!"8!!!!93!!!&B!!!"A!!!!@!!!!&N!!!"D!!!!@`!
1113!!&`!!!"G!!!!AJ!!!&m!!!"J!!!!B3!!!')!!!"M!!!!C!!!!'8!!!"Q!!!!C`!
1114!!'J!!!"T!!!!DJ!!!'X!!!"X!!!!E3!!!'i!!!"[!!!!F!!!!(%!!!"b!!!!F`!
1115!!(3!!!"e!!!!GJ!!!(F!!!"i!!!!H3!!!(S!!!"l!!!!I!!!!(d!!!"q!!!!I`!
1116!!)!!!!#"!!!!JJ!!!)-!!!#%!!!!K3!!!)B!!!#(!!!!L!!!!)N!!!#+!!!!L`!
1117!!)`!!!#0!!!!MJ!!!)m!!!#3!!!!!*%!!!#5!!!!N`!!!*3!!!#9!!!!PJ!!!*F
1118!!!#B!!!!Q3!!!*S!!!#E!!!!R!!!!*d!!!#H!!!!R`!!!+!!!!#K!!!!SJ!!!+-
1119!!!#N!!!!T3!!!+B!!!#R!!!!U!!!!+N!!!#U!!!!U`!!!+`!!!#Y!!!!VJ!!!+m
1120!!!#`!!!!X3!!!,)!!!#c!!!!Y!!!!,8!!!#f!!!!Y`!!!,J!!!#j!!!!ZJ!!!,X
1121!!!#m!!!![3!!!,i!!!#r!!!!`!!!!-%!!!$#!!!!``!!!-3!!!$&!!!!aJ!!!-F
1122!!!$)!!!!b3!!!-S!!!$,!!!!c!!!!-d!!!$1!!!!c`!!!0!!!!$4!!!!dJ!!!0-
1123!!!$8!!!!e3!!!0B!!!$A!!!!f!!!!0N!!!$D!!!!f`!!!0`!!!$G!!!!hJ!!!0m
1124!!!$J!!!!i3!!!1)!!!$M!!!!j!!!!18!!!$Q!!!!j`!!!1J!!!$T!!!!kJ!!!1X
1125!!!$X!!!!l3!!!1i!!!$[!!!!m!!!!2%!!!$b!!!!m`!!!23!!!$e!!!!pJ!!!2F
1126!!!$i!!!!q3!!!2S!!!$l!!!!r!!!!2d!!!$q!!!!r`!!!3!!!!%"!!!"!J!!!3-
1127!!!%%!!!""3!!!3B!!!%(!!!"#!!!!3N!!!%+!!!"#`!!!3`!!!%0!!!"$J!!!3m
1128!!!%3!!!"%3!!!4)!!!%6!!!"&!!!!48!!!%@!!!"&`!!!4J!!!%C!!!"'J!!!4X
1129!!!%F!!!"(3!!!4i!!!%I!!!")!!!!5%!!!%L!!!")`!!!53!!!%P!!!"*J!!!5F
1130!!!%S!!!"+3!!!5S!!!%V!!!",!!!!5d!!!%Z!!!",`!!!6!!!!%a!!!"-J!!!6-
1131!!!%d!!!"03!!!6B!!!%h!!!"1!!!!6N!!!%k!!!"1`!!!6`!!!%p!!!"2J!!!6m
1132!!!&!!!!"33!!!8)!!!&$!!!"4!!!!88!!!&'!!!"4`!!!8J!!!&*!!!"5J!!!8X
1133!!!&-!!!"63!!!8i!!!&2!!!"8!!!!9%!!!&5!!!"8`!!!93!!!&9!!!"9J!!!9F
1134!!!&B!!!"@3!!!9S!!!&E!!!"A!!!!9d!!!&H!!!"A`!!!@!!!!&K!!!"BJ!!!@-
1135!!!&N!!!"C3!!!@B!!!&R!!!"D!!!!@N!!!&U!!!"D`!!!@`!!!&Y!!!"EJ!!!@m
1136!!!&`!!!"F3!!!A)!!!&c!!!"G!!!!A8!!!&f!!!"G`!!!AJ!!!&j!!!"HJ!!!AX
1137!!!&m!!!"I3!!!Ai!!!&r!!!"J!!!!B%!!!'#!!!"J`!!!B3!!!'&!!!"KJ!!!BF
1138!!!')!!!"L3!!!BS!!!',!!!"M!!!!Bd!!!'1!!!"M`!!!C!!!!!"N3!!!C)!!!'
11396!!!"P!!!!C8!!!'@!!!"P`!!!CJ!!!'C!!!"QJ!!!CX!!!'F!!!"R3!!!Ci!!!'
1140I!!!"S!!!!D%!!!'L!!!"S`!!!D3!!!'P!!!"TJ!!!DF!!!!!!!!!!!!!!!!!!!!
1141!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1142!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'S!!!"`!%!!!!"!!'
1143S!3!"SJ%!!D-"!!'S!3!"S3%!!D!"!!!,!3!!$!%!!!S"!!!0!3!!$J%!!!m"!!!
11443!3!!%3%!!")"!!!6!3!!&!%!!"8"!!!@!3!!&`%!!"J"!!!C!3!!'J%!!"X"!!!
1145F!3!!(3%!!"i"!!!I!3!!)!%!!#%"!!!L!3!!)`%!!#3"!!!P!3!!*J%!!#F"!!!
1146S!3!!+3%!!#S"!!!V!3!!,!%!!#d"!!!Z!3!!,`%!!$!"!!!a!3!!-J%!!$-"!!!
1147d!3!!03%!!$B"!!!h!3!!1!%!!$N"!!!k!3!!1`%!!$`"!!!p!3!!2J%!!$m"!!"
1148!!3!!33%!!%)"!!"$!3!!4!%!!%8"!!"'!3!!4`%!!%J"!!"*!3!!5J%!!%X"!!"
1149-!3!!63%!!%i"!!"2!3!!8!%!!&%"!!"5!3!!8`%!!&3"!!"9!3!!9J%!!&F"!!"
1150B!3!!@3%!!&S"!!"E!3!!A!%!!&d"!!"H!3!!A`%!!'!"!!"K!3!!BJ%!!'-"!!"
1151N!3!!C3%!!'B"!!"R!3!!D!%!!'N"!!"U!3!!D`%!!'`"!!"Y!3!!EJ%!!'m"!!"
1152`!3!!F3%!!()"!!"c!3!!G!%!!(8"!!"f!3!!G`%!!(J"!!"j!3!!HJ%!!(X"!!"
1153m!3!!I3%!!(i"!!"r!3!!J!%!!)%"!!##!3!!J`%!!)3"!!#&!3!!KJ%!!)F"!!#
1154)!3!!L3%!!)S"!!#,!3!!M!%!!)d"!!#1!3!!M`%!!*!!!3!"TJ%!!*%"!!#5!3!
1155!N`%!!*3"!!#9!3!!PJ%!!*F"!!#B!3!!Q3%!!*S"!!#E!3!!R!%!!*d"!!#H!3!
1156!R`%!!+!"!!#K!3!!SJ%!!+-"!!#N!3!!T3%!!+B"!!#R!3!!U!%!!+N"!!#U!3!
1157!U`%!!+`"!!#Y!3!!VJ%!!+m"!!#`!3!!X3%!!,)"!!#c!3!!Y!%!!,8"!!#f!3!
1158!Y`%!!,J"!!#j!3!!ZJ%!!,X"!!#m!3!![3%!!,i"!!#r!3!!`!%!!-%"!!$#!3!
1159!``%!!-3"!!$&!3!!aJ%!!-F"!!$)!3!!b3%!!-S"!!$,!3!!c!%!!-d"!!$1!3!
1160!c`%!!0!"!!$4!3!!dJ%!!0-"!!$8!3!!e3%!!0B"!!$A!3!!f!%!!0N"!!$D!3!
1161!f`%!!0`"!!$G!3!!hJ%!!0m"!!$J!3!!i3%!!1)"!!$M!3!!j!%!!18"!!$Q!3!
1162!j`%!!1J"!!$T!3!!kJ%!!1X"!!$X!3!!l3%!!1i"!!$[!3!!m!%!!2%"!!$b!3!
1163!m`%!!23"!!$e!3!!pJ%!!2F"!!$i!3!!q3%!!2S"!!$l!3!!r!%!!2d"!!$q!3!
1164!r`%!!3!"!!%"!3!"!J%!!3-"!!%%!3!""3%!!3B"!!%(!3!"#!%!!3N"!!%+!3!
1165"#`%!!3`"!!%0!3!"$J%!!3m"!!%3!3!"%3%!!4)"!!%6!3!"&!%!!48"!!%@!3!
1166"&`%!!4J"!!%C!3!"'J%!!4X"!!%F!3!"(3%!!4i"!!%I!3!")!%!!5%"!!%L!3!
1167")`%!!53"!!%P!3!"*J%!!5F"!!%S!3!"+3%!!5S"!!%V!3!",!%!!5d"!!%Z!3!
1168",`%!!6!"!!%a!3!"-J%!!6-"!!%d!3!"03%!!6B"!!'R!3!"0`%!!6J"!!%j!3!
1169"1J%!!6X"!!%m!3!"23%!!6i"!!%r!3!"3!%!!8%"!!&#!3!"3`%!!83"!!&&!3!
1170"4J%!!8F"!!&)!3!"53%!!8S"!!&,!3!"6!%!!8d"!!&1!3!"6`%!!9!"!!&4!3!
1171"8J%!!9-"!!&8!3!"93%!!9B"!!&A!3!"@!%!!9N"!!&D!3!"@`%!!9`"!!&G!3!
1172"AJ%!!9m"!!&J!3!"B3%!!@)"!!&M!3!"C!%!!@8"!!&Q!3!"C`%!!@J"!!&T!3!
1173"DJ%!!@X"!!&X!3!"E3%!!@i"!!&[!3!"F!%!!A%"!!&b!3!"F`%!!A3"!!&e!3!
1174"GJ%!!AF"!!&i!3!"H3%!!AS"!!&l!3!"I!%!!Ad"!!&q!3!"J!%!!B%"!!'#!3!
1175"J`%!!B3"!!'&!3!"KJ%!!BF"!!')!3!"L3%!!BS"!!',!3!"M!%!!Bd"!!'1!3!
1176"M`%!!C!!!3!"N3%!!C)"!!'6!3!"P!%!!C8"!!'@!3!"P`%!!CJ"!!'C!3!"QJ%
1177!!CX"!!'F!3!"R3%!!Ci"!!'I!3!"T!%!!Am"!!!"!3!!"!%!!!-"!!!#!3!!#3%
1178!!!8"!!!'!3!!"`%!!!J"!!'P!!!"U3!"!#J!!!!JrrrjT!!""!!!!!!!!!!!!!!
1179!!!!!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1180!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1181!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1182!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1183!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1184!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1185!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1186!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1187!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1188!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1189!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!"1NKjF'9
1190b3f&bC!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1191!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1192!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1193!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1194!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1195!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1196!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1197!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1198!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1199!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1200!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,#2Z!!!!!!!!!"!!,
1201#4r!!!J!!!!!!!!!!!!!#`MD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1202!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1203!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1204!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1205!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1206!!!!!!J!!!3!!!!!&!!"rr`!!!!"rr`!!!!"rr`!!!!"rr`!!!!`!!3!#!!B!!!!
1207&3!!!#!!"!!%k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1208!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1209!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1210!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1211!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1212!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1213!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1214!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1215!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1216!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1217!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1218!!3!!!2rrrrm!!!!$!!%!!6Sk!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1219!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1220!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1221!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1222!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1223!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1224!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1225!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1226!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1227!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1228!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1229!!!!!!!!!!!!"!!!!rrrrr`!!!!3!!3!"1MTTEQ0XG@4P1J!!!!!!!!!!!!!!!!!
1230!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1231!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1232!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1233!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1234!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1235!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1236!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1237!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1238!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1239!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1240!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!!J!"!!%k!!!!!!!!!!!!!!!!!!!
1241!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1242!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1243!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1244!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1245!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1246!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1247!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1248!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1249!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1250!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1251!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrp!!!!$!!%!!6Sk1NG98dN
1252kD@jME(9NC6S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1253!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1254!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1255!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1256!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1257!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1258!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1259!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1260!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1261!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1262!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrd!!!!3!!3!
1263"1MSk4e9656TXD@)k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1264!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1265!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1266!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1267!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1268!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1269!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1270!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1271!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1272!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1273!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrr
1274r3!!!"3!#!!%k6@&M6e-J8h9`F'pbG$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1275!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1276!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1277!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1278!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1279!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1280!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1281!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1282!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1283!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1284!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1285!!3!!!2rrrrp!!!!'!!)!!6T08d`k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1286!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1287!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1288!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1289!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1290!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1291!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1292!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1293!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1294!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1295!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1296!!!!!!!!!!!!"!!!!rrrrrd!!!!F!#J!!6@&M6e-J8&"$)%aTEQYPFJ!!!!!!!!!
1297!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1298!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1299!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1300!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1301!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1302!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1303!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1304!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1305!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1306!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1307!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1308!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1309!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1310!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1311!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1312!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6h"PEP066#"38%-!!!!!!!!!!!!!!!!
1313!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1314!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1315!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1316!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1317!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%k!!!
1318!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1319!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1320!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1321!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1322!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1323!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1324!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1325!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1326!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1327!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1328!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!&0B@0
132928b"38%-J6'PZDf9b!!!!!!!!!!!!!!!!!!!!!!!H39"36!!!!!!!!!!!!!!!!!!
1330!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1331!!!"J!!!!3A"`E!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1332!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!68e-3J!!!!!!!!!!!!!!!!!
1333!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!
1334!!!!!!!!!69"-4J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%P
1335YF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69G$4!!!!!!!!!!!!!!!!!!
1336!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1337!!!"J!!!!8P053`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1338!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!9%9B9#jLD!!!!!!!!!!!!!!
1339!!!!!!!!!!!!!!!!!!!!!!!!!3Q&XE'p[EL")C@a`!!!!!!!!!!!!!!!!!!!!!!!
1340!!!!!!!!!9%9B9#jM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp
1341$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jM+bX!!!!!!!!!!!!
1342!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!
1343!!!!!!!!!9%9B9#jMB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp
1344$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF!!!!!!!!!!!!!!
1345!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!
1346!!!!!!!!!9%9B9#jMF(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp
1347$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jPH(!!!!!!!!!!!!!
1348!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1349!!!!!!!!!9%9B9#jRB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4f&YC80
1350[C'8J3fpZGQ9bG'9b!!!!!!!!!!!!!!!!!!"!!!!!9%9B9#jS!!!!!!!!!!!!!!!
1351!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!
1352!!!!3!!!!9%9B9#jX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QaPH#"
13533FQ9`FQpMCA0cEh)!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`!!!!!!!!!!!!!!!
1354!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!
1355!!!!!!!!!9%9B9#j`BA-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&
1356cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BfJ!!!!!!!!!!!!
1357!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!
1358!!!#!!!!!9%9B9#j`BfJV+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp
1359$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`F(8!!!!!!!!!!!!
1360!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!
1361!!!#!!!!!9%9B9#jb!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8Q9k!!!
1362!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jc!!!!!!!!!!!!!!!
1363!!!!!!!!!!!!!!!!!!!!!!!!!8&"$3A0Y!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1364!!!!!!!!!9%9B9#jj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3QPcEfi
1365J8(*PF(*[Bf9cFfpb!!!!!!!!!!!!!!!!!!#!!!!!@%024J!!!!!!!!!!!!!!!!!
1366!!!!!!!!!!!!!!!!!!!!!!!!!@%024NBJ5@e`Eh*d)&"33`!!!!!!!!!!!!!!!!!
1367!!!!!!!!!C'pMG3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1368!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FR0bB`!!!!!!!!!!!!!!!!!
1369!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1370!!!"J!!!!FfKXBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%P
1371YF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Fh4eBJ!!!!!!!!!!!!!!!!!
1372!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!
1373!!!!!!!!!!!!!!#jNEf-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1374!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"3!!!!!!8"!3!"!!!!!!!!!!!!!!!
1375!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1376!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1377!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1378!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1379!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1380!!!!!!!!!"J!!!!!"!!!!!!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1381!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1382!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1383!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1384!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1385!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1386!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1387!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1388!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1389!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1390!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1391!!!!!!!!!!!!!!!!!!!!!!!!"!3!!E@&TEJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1392!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1393!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1394!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1395!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1396!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!3!"!!!!!3%
1397"!3%!!3%!!!!!!!%"!!!"!3!"!!!"!!%!!!!!!!!!!!!)!3!"!3!"!3!!!!%!!!N
1398!!"G0B@028b"8EfpXBQpi)%4&3P9()$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1399!!!!!!!!!!!!!!!!!!!!!!!!r2cmr39"36!!!!B"B`!!!!!!!!!!!!!!!!!!!!!!
1400!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1401!!$mr2cm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!!!!!!!!!!
1402!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1403!!!!!!!!!!!!!!!!!!!!!!!!!!!!0!!%!!!!!!"9I69G&8NY6AdG98dPIF(*PCQP
1404i,QJ!!!!!!!!!!!!!!!!"!!!"!!!!!!!"!!!!!!!!!!!!!!8"!3%!!!%"!!%!!!!
1405!"!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1406!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1407!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1408!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1409!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1410!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1411!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1412!!!!!!!"IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1413!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1414!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!!#8e
1415PFQGP)%peG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1416!!!!!!!!!!!!!!!!!!$mr2cp"8&"-!!%"!!!%)#!J)!1ARe!$GYpi!`@Z%!!&!J%
1417!!3%!!3%"!!!"!!!!!!!!!!%"!3%!!3%!!3!""!!!!!!!!!!!!!!(!3%!!3!!!3!
1418!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1419!!!!!!!!!!!!!!!!!!!"IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1420!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1421!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1422!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1423!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1424!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1425!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1426!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1427!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8!!!G2F'9
1428Z8e0-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2d&38%`!!!3!!!!%!!!!!%!
1429!!&M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1430!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1431!!!!!!!%r2cmr!!!!!!!!!!)!!!!#!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1432!!!!!!!!!!!!!!!!!!!!#!&!!!3!"!!%!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1433!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1434!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1435!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1436!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1437!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8*d024%8
1438R)#G%394"*b!R8%P$9#F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1439!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1440!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1441!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1442!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1443!!!!!!!!!!!!!!J!!!3!!!!%#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!!!!!!!!!!
1444!!!)!!!)!!!!#!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!%!!!!!!!!!!!#!!!$!!!
1445!!`)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!"!!!!!!!!!!!!J!!"!!!!!3#!3!!!!!
1446!!3!"!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!8!!!!&!J%!!!!!!!%!!3-!!!!
1447!!!!!!!!!!!!"!!!!!!!!!!!#!!!'!!!!"J)"!!!!!!!"!!%$!!!!!!!!!!!!!!!
1448!"3!!!!!!!!!!!J!!"`!!!!F#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!
1449!!!)!!!J!!!!)!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!&!!!!!!!!!!!#!!!*!!!
1450!#3)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!"3!!!!!!!!!!!J!!#J!!!Am#!3!!!!!
1451!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!!X!!!'U!J%!!!!!!!%!!3%!!!!
1452!!!!!!!!!!!!"!!!!!!!!!!!#!!!-!!!"U`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1453!!3!!!!!!!!!!!J!!$3!!!D`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1454!!!)!!!i!!!'Y!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!2!!!
1455"VJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!J!!%!!!!Dm#!3!!!!!
1456!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!"%!!!'`!J%!!!!!!!%!!3%!!!!
1457!!!!!!!!!!!!"!!!!!!!!!!!#!!!5!!!"X3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1458!!3!!!!!!!!!!!J!!%`!!!E)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1459!!!)!!"3!!!'c!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!9!!!
1460"Y!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!J!!&J!!!E8#!3!!!!!
1461!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!"F!!!'f!J%!!!!!!!%!!3%!!!!
1462!!!!!!!!!!!!"!!!!!!!!!!!#!!!B!!!"Y`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1463!!3!!!!!!!!!!!J!!'3!!!EJ#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1464!!!)!!"S!!!'j!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!E!!!
1465"ZJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!J!!(!!!!EX#!3!!!!!
1466!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!"d!!!'m!J%!!!!!!!%!!3%!!!!
1467!!!!!!!!!!!!"!!!!!!!!!!!#!!!H!!!"[3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1468!!3!!!!!!!!!!!J!!(`!!!Ei#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1469!!!)!!#!!!!'r!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!K!!!
1470"`!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!J!!)J!!!F%#!3!!!!!
1471!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!#-!!!(#!J%!!!!!!!%!!3%!!!!
1472!!!!!!!!!!!!"!!!!!!!!!!!#!!!N!!!"``)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1473!!3!!!!!!!!!!!J!!*3!!!F3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1474!!!)!!#B!!!(&!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!R!!!
1475"aJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!J!!+!!!!FF#!3!!!!!
1476!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!#N!!!()!J%!!!!!!!%!!3%!!!!
1477!!!!!!!!!!!!"!!!!!!!!!!!#!!!U!!!"b3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1478!!3!!!!!!!!!!!J!!+`!!!FS#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1479!!!)!!#`!!!(,!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!Y!!!
1480"c!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!J!!,J!!!D8#!3!!!!!
1481!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!)!!#m!!!(0!J%!!!!!!!%!!3%!!!!
1482!!!!!!!!!!!!"!!!!!!!!!!!#!!!`!!!"cJ)"!!!!!!!"!!%$!!!!!!!!!!!!!!!
1483!!3!!!!!!!!!!!J!!-3!!!Fm#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!
1484!!!)!!$)!!!(3!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!"!!!!!!!!!!!#!!!c!!!
1485"d33"!!!!!!!!!!%$!!!!!!!!!!!!!!!!J3!!!!!!!!!!!J!!0!!!!G)%!3!!!!!
1486!!!!"!`!!!!!!!!!!!!!!!)%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1487!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1488!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1489!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1490!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1491!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1492!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1493!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1494!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1495!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1496!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!J!!!!-!!!!%!!!
1497!"3!!!!B!!!!(!!!!#!!!!!N!!!!Y!!!!#J!!!!X!!!!-!!!!$3!!!!i!!!!2!!!
1498!%!!!!"%!!!!5!!!!%`!!!"3!!!!9!!!!&J!!!"F!!!!B!!!!'3!!!"S!!!!E!!!
1499!(!!!!"d!!!!H!!!!(`!!!#!!!!!K!!!!)J!!!#-!!!!N!!!!*3!!!#B!!!!R!!!
1500!+!!!!#N!!!!U!!!!+`!!!#`!!!!Z!!!!,`!!!$!!!!!a!!!!-J!!!$-!!!!!!!!
1501!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!d!!!
1502!3!)!!!!#!!!d!J!!(!)!!"d#!!!H!J!!(`)!!#!#!!!K!J!!)J)!!#-#!!!N!J!
1503!*3)!!#B#!!!R!J!!+!)!!#N#!!!U!J!!+`)!!#`#!!!Y!J!!#`)!!!`#!!!0!J!
1504!$J)!!!m#!!!3!J!!%3)!!")#!!!6!J!!&!)!!"8#!!!@!J!!&`)!!"J#!!!C!J!
1505!'J)!!"X#!!!c!J!!0!)!!#m#!!!`!J!!-J)!!$%#!!!+!J!!!3)!!!3#!!!$!J!
1506!!J)!!!N#!!!&!J!!"J)!!!F#!!!)!J!!,J!!!DN!!3!S!J!!%`)!!"3#!!!9!J!
1507!&J)!!"F#!!!B!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1508!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1509!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1510!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1511!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1512!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1513!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1514!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1515!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1516!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1517!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1518!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1519!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1520!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1521!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1522!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1523!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1524!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1525!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1526!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1527!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1528!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#`MlJ!!!
1529!!!!!!3!#`NI`!!)!!!!!!!!!!!!!!X)fJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1530!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1531!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1532!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1533!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1534!!!!!!!!!!!!!!!)!!!%!!!!!"3!!Irm!!!!!Irm!!!!!Irm!!!!!Irm!!!!-!!%
1535!!J!%!!!!"8!!!!B!!3!"1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1536!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1537!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1538!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1539!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1540!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1541!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1542!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1543!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1544!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1545!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1546!!!!!!!!!!!%!!!$rrrrr!!!!!`!"!!%k1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1547!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1548!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1549!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1550!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1551!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1552!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1553!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1554!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1555!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1556!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1557!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrm!!!!%!!%!!6SkD@jME(9NC6S!!!!!!!!
1558!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1559!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1560!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1561!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1562!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1563!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1564!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1565!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1566!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1567!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1568!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrd!!!!)!!3!"1J!!!!!!!!!
1569!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1570!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1571!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1572!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1573!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1574!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1575!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1576!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1577!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1578!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1579!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!!`!#!!%
1580k6@&M6e-J8h9`F'pbG$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1581!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1582!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1583!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1584!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1585!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1586!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1587!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1588!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1589!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1590!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrp
1591!!!!%!!)!!6T08d`k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1592!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1593!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1594!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1595!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1596!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1597!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1598!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1599!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1600!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1601!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1602"!!!!rrrrrd!!!!8!#J!!6@&M6e-J0MK,)%aTEQYPFJ!!!!!!!!!!!!!!!!!!!!!
1603!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1604!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1605!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1606!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1607!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1608!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1609!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1610!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1611!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1612!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1613!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1614!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1615!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1616!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1617!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1618!!!!!!!!!!!!!!!!!!!!!4f9d5&488&-J0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!
1619!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1620!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1621!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1622!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1623!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%k!!!!!!!!!!!!!!!
1624!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1625!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1626!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1627!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1628!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1629!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1630!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1631!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1632!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1633!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1634!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!&0B@028b!f1%XJ6'P
1635ZDf9b!!!!!!!!!!!!!!!!!!!!!!!J39"36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1636!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!3A"
1637`E!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1638!!!!!!!!!!!!!!!!!!!!!!!"J!!!!68e-3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1639!!!!!!!!!!!!!6'PL)%PYF'pbG#!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"
1640-4J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#!f1%X
1641!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69G$4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1642!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!6d*
1643+)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"A)%PYF'pbG#!f1%X
1644!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%a[BJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1645!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!8P0
164653`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1647!!!!!!!!!!!!!!!!!!!!!!!"J!!!!9%9B9#jLD!!!!!!!!!!!!!!!!!!!!!!!!!!
1648!!!!!!!!!!!!!3Q&XE'p[EL")C@a`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
1649B9#jM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
1650!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jM+bX!!!!!!!!!!!!!!!!!!!!!!!!
1651!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
1652B9#jMB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
1653!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF!!!!!!!!!!!!!!!!!!!!!!!!!!
1654!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
1655B9#jMF(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
1656!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jPH(!!!!!!!!!!!!!!!!!!!!!!!!!
1657!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
1658B9#jRB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4f&YC80[C'8J3fpZGQ9
1659bG'9b!!!!!!!!!!!!!!!!!!"!!!!!9%9B9#jS!!!!!!!!!!!!!!!!!!!!!!!!!!!
1660!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!9%9
1661B9#jX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QaPH#"3FQ9`FQpMCA0
1662cEh)!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`!!!!!!!!!!!!!!!!!!!!!!!!!!!
1663!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
1664B9#j`BA-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!
1665!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BfJ!!!!!!!!!!!!!!!!!!!!!!!!
1666!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9
1667B9#j`BfJV+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
1668!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`F(8!!!!!!!!!!!!!!!!!!!!!!!!
1669!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9
1670B9#jb!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8Q9k!!!!!!!!!!!!!!!
1671!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jcC@F!!!!!!!!!!!!!!!!!!!!!!!!
1672!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
1673B9#jj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3QPcEfiJ8(*PF(*[Bf9
1674cFfpb!!!!!!!!!!!!!!!!!!#!!!!!C'pMG3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1675!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FR0
1676bB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1677!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FfKXBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1678!!!!!!!!!!!!!8%9')%PYF'pbG#!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Fh4
1679eBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#!f1%X
1680!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#jNEf-!!!!!!!!!!!!!!!!!!!!!!!!
1681!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"3!!!!!!!
1682!!#jbFh*M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1683!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!!8"!3!"!!!!!!!!!!!!!!!!!!!!!!!!!!!
1684!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1685!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1686!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1687!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1688!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!
1689!!!!"!!!!!!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1690!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1691!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1692!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1693!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1694!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1695!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1696!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1697!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1698!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1699!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1700!!!!!!!!!!!!"!3!!E@&TEJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1701!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1702!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1703!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1704!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1705!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!3%"!!!!!3%"!!!"!3%!!!!
1706!!!%"!!!"!3!"!!!""!!!!!!!!!!!!!!)!3!"!3!"!3!!!!%!!!N!!!e(CA4)9&4
170738bJf1%XT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1708!!!!!!!!!!!!r2cmr39"36!!!!J"B`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1709!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$mr2cm!!!!
1710!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!
1711!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1712!!!!!!!!!!!!!!!!0!!%!!!!!!""I69G&8NY6Ah"bC@CTH#jS!!!!!!!!!!!!!!!
1713!!!!!!!!"!!!!!!!!!!!"!!!!!!!!!!!!!!8"!3%!!!%"!!%!!!!!"!!!!!!!!!!
1714!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1715!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1716!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1717!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1718!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1719!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1720!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"IAh0
1721dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1722!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1723!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!!#8ePFQGP)%peG!!
1724!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1725!!!!!!$mr2cp"8&"-!!%"!!!%)#!J)!1ARe!$GYpi!`@Z%!!&!J%!!3%!!3%"!!!
1726"!!!!!!!!!!%"!3%!!3%!!3!""!!!!!!!!!!!!!!(!3%!!3!!!3!!!!!!!!!!!!!
1727!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1728!!!!!!!"IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1729!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1730!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!
1731!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1732!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1733!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1734!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1735!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1736!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8!!!K(CA4)9&438`!!!!!
1737!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2d&38%`!!!3!!!!%!!!!!%!!!&M!!!!!!!!
1738!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1739!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%r2cm
1740r!!!!!!!!!!)!!!!#!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1741!!!!!!!!#!&!!!3!"!!%!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1742!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1743!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1744!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1745!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1746!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8*d024%8R)#G%394"*b!
1747R8%P$9#F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1748!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1749!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1750!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1751!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1752!!`!!!3!!!!S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!!)!!!!
1753,!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!$!!!!$!)"!!!!!!!
1754"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!"!!!!!d#!3!!!!!!!3!"!3!!!!!
1755!!!!!!!!!!!%!!!!!!!!!!!-!!!8!!!!1!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1756"!!!!!!!!!!!$!!!'!!!!$`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1757!!`!!"`!!!"!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!!J!!!!
17584!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!*!!!!%J)"!!!!!!!
1759"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!#J!!!"-#!3!!!!!!!3!"!3!!!!!
1760!!!!!!!!!!!%!!!!!!!!!!!-!!!X!!!!8!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1761"!!!!!!!!!!!$!!!-!!!!&3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1762!!`!!$3!!!"B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!!i!!!!
1763A!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!2!!!!'!)"!!!!!!!
1764"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!%!!!!"N#!3!!!!!!!3!"!3!!!!!
1765!!!!!!!!!!!%!!!!!!!!!!!-!!"%!!!!D!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1766"!!!!!!!!!!!$!!!5!!!!'`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1767!!`!!%`!!!"`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!"3!!!!
1768G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!9!!!!(J)"!!!!!!!
1769"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!&J!!!"m#!3!!!!!!!3!"!3!!!!!
1770!!!!!!!!!!!%!!!!!!!!!!!-!!"F!!!!J!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1771"!!!!!!!!!!!$!!!B!!!!)3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1772!!`!!'3!!!#)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!"S!!!!
1773M!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!E!!!!*!)"!!!!!!!
1774"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!(!!!!#8#!3!!!!!!!3!"!3!!!!!
1775!!!!!!!!!!!%!!!!!!!!!!!-!!"d!!!!Q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1776"!!!!!!!!!!!$!!!H!!!!*`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1777!!`!!(`!!!#J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!#!!!!!
1778T!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!K!!!!+J)"!!!!!!!
1779"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!)J!!!#X#!3!!!!!!!3!"!3!!!!!
1780!!!!!!!!!!!%!!!!!!!!!!!-!!#-!!!!X!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1781"!!!!!!!!!!!$!!!N!!!!,3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1782!!`!!*3!!!#i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!#B!!!!
1783[!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!R!!!!-!)"!!!!!!!
1784"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!+!!!!$%#!3!!!!!!!3!"!3!!!!!
1785!!!!!!!!!!!%!!!!!!!!!!!-!!#N!!!!b!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1786"!!!!!!!!!!!$!!!U!!!!-`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1787!!`!!+`!!!$3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!#`!!!!
1788e!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!Y!!!!0J)"!!!!!!!
1789"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!,J!!!$F#!3!!!!!!!3!"!3!!!!!
1790!!!!!!!!!!!%!!!!!!!!!!!-!!#m!!!!i!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1791"!!!!!!!!!!!$!!!`!!!!13)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1792!!`!!-3!!!$S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!$)!!!!
1793l!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!c!!!!2!)"!!!!!!!
1794"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!0!!!!$d#!3!!!!!!!3!"!3!!!!!
1795!!!!!!!!!!!%!!!!!!!!!!!-!!$8!!!!q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1796"!!!!!!!!!!!$!!!f!!!!2`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1797!!`!!0`!!!%!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!$J!!!"
1798"!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!j!!!!3J)"!!!!!!!
1799"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!1J!!!%-#!3!!!!!!!3!"!3!!!!!
1800!!!!!!!!!!!%!!!!!!!!!!!-!!$X!!!"%!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1801"!!!!!!!!!!!$!!!m!!!!43)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1802!!`!!23!!!%B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!$i!!!"
1803(!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!!r!!!!5!)"!!!!!!!
1804"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!3!!!!%N#!3!!!!!!!3!"!3!!!!!
1805!!!!!!!!!!!%!!!!!!!!!!!-!!%%!!!"+!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1806"!!!!!!!!!!!$!!"#!!!!5`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1807!!`!!3`!!!%`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!%3!!!"
18080!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"&!!!!6J)"!!!!!!!
1809"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!4J!!!%m#!3!!!!!!!3!"!3!!!!!
1810!!!!!!!!!!!%!!!!!!!!!!!-!!%F!!!"3!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1811"!!!!!!!!!!!$!!")!!!!83)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1812!!`!!53!!!&)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!%S!!!"
18136!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!",!!!!9!)"!!!!!!!
1814"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!6!!!!&8#!3!!!!!!!3!"!3!!!!!
1815!!!!!!!!!!!%!!!!!!!!!!!-!!%d!!!"@!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1816"!!!!!!!!!!!$!!"1!!!!9`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1817!!`!!6`!!!&J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!&!!!!"
1818C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"4!!!!@J)"!!!!!!!
1819"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!8J!!!&X#!3!!!!!!!3!"!3!!!!!
1820!!!!!!!!!!!%!!!!!!!!!!!-!!&-!!!"F!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1821"!!!!!!!!!!!$!!"8!!!!A3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1822!!`!!93!!!&i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!&B!!!"
1823I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"A!!!!B!)"!!!!!!!
1824"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!@!!!!'%#!3!!!!!!!3!"!3!!!!!
1825!!!!!!!!!!!%!!!!!!!!!!!-!!&N!!!"L!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1826"!!!!!!!!!!!$!!"D!!!!B`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1827!!`!!@`!!!'3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!&`!!!"
1828P!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"G!!!!CJ)"!!!!!!!
1829"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!AJ!!!'F#!3!!!!!!!3!"!3!!!!!
1830!!!!!!!!!!!%!!!!!!!!!!!-!!&m!!!"S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1831"!!!!!!!!!!!$!!"J!!!!D3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1832!!`!!B3!!!'S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!')!!!"
1833V!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"M!!!!E!)"!!!!!!!
1834"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!C!!!!'d#!3!!!!!!!3!"!3!!!!!
1835!!!!!!!!!!!%!!!!!!!!!!!-!!'8!!!"Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1836"!!!!!!!!!!!$!!"Q!!!!E`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1837!!`!!C`!!!(!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!'J!!!"
1838a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"T!!!!FJ)"!!!!!!!
1839"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!DJ!!!(-#!3!!!!!!!3!"!3!!!!!
1840!!!!!!!!!!!%!!!!!!!!!!!-!!'X!!!"d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1841"!!!!!!!!!!!$!!"X!!!!G3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1842!!`!!E3!!!(B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!'i!!!"
1843h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"[!!!!H!)"!!!!!!!
1844"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!F!!!!(N#!3!!!!!!!3!"!3!!!!!
1845!!!!!!!!!!!%!!!!!!!!!!!-!!(%!!!"k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1846"!!!!!!!!!!!$!!"b!!!!H`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1847!!`!!F`!!!(`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!(3!!!"
1848p!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"e!!!!IJ)"!!!!!!!
1849"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!GJ!!!(m#!3!!!!!!!3!"!3!!!!!
1850!!!!!!!!!!!%!!!!!!!!!!!-!!(F!!!#!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1851"!!!!!!!!!!!$!!"i!!!!J3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1852!!`!!H3!!!))#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!(S!!!#
1853$!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!"l!!!!K!)"!!!!!!!
1854"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!I!!!!)8#!3!!!!!!!3!"!3!!!!!
1855!!!!!!!!!!!%!!!!!!!!!!!-!!(d!!!#'!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1856"!!!!!!!!!!!$!!"q!!!!K`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1857!!`!!I`!!!)J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!)!!!!#
1858*!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#"!!!!LJ)"!!!!!!!
1859"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!JJ!!!)X#!3!!!!!!!3!"!3!!!!!
1860!!!!!!!!!!!%!!!!!!!!!!!-!!)-!!!#-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
1861"!!!!!!!!!!!$!!#%!!!!M3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
1862!!`!!K3!!!)i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!)B!!!#
18632!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#(!!!!N!!#!3!!!!!
1864!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!)J!!!#4!J%!!!!!!!%!!3%!!!!
1865!!!!!!!!!!!!"!!!!!!!!!!!$!!#*!!!!NJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1866!!3!!!!!!!!!!!`!!LJ!!!*-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
1867!!!-!!)X!!!#8!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#-!!!
1868!P3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!M3!!!*B#!3!!!!!
1869!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!)i!!!#A!J%!!!!!!!%!!3%!!!!
1870!!!!!!!!!!!!"!!!!!!!!!!!$!!#2!!!!Q!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
1871!!3!!!!!!!!!!!`!!N!!!!!#C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1872!!!!$!!#4!!!!QJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!NJ!
1873!!*X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!*-!!!#F!J%!!!!
1874!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#8!!!!R3)"!!!!!!!"!!%"!!!
1875!!!!!!!!!!!!!!3!!!!!!!!!!!`!!P3!!!*i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1876!!!%!!!!!!!!!!!-!!*B!!!#I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1877!!!!$!!#A!!!!S!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!Q!!
1878!!+%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!*N!!!#L!J%!!!!
1879!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#D!!!!S`)"!!!!!!!"!!%"!!!
1880!!!!!!!!!!!!!!3!!!!!!!!!!!`!!Q`!!!+3#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1881!!!%!!!!!!!!!!!-!!*`!!!#P!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1882!!!!$!!#G!!!!TJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!RJ!
1883!!+F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!*m!!!#S!J%!!!!
1884!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#J!!!!U3)"!!!!!!!"!!%"!!!
1885!!!!!!!!!!!!!!3!!!!!!!!!!!`!!S3!!!+S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1886!!!%!!!!!!!!!!!-!!+)!!!#V!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1887!!!!$!!#M!!!!V!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!T!!
1888!!+d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!+8!!!#Z!J%!!!!
1889!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#Q!!!!V`)"!!!!!!!"!!%"!!!
1890!!!!!!!!!!!!!!3!!!!!!!!!!!`!!T`!!!,!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1891!!!%!!!!!!!!!!!-!!+J!!!#a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1892!!!!$!!#T!!!!XJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!UJ!
1893!!,-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!+X!!!#d!J%!!!!
1894!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#X!!!!Y3)"!!!!!!!"!!%"!!!
1895!!!!!!!!!!!!!!3!!!!!!!!!!!`!!V3!!!,B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1896!!!%!!!!!!!!!!!-!!+i!!!#h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1897!!!!$!!#[!!!!Z!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!X!!
1898!!,N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!,%!!!#k!J%!!!!
1899!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#b!!!!Z`)"!!!!!!!"!!%"!!!
1900!!!!!!!!!!!!!!3!!!!!!!!!!!`!!X`!!!,`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1901!!!%!!!!!!!!!!!-!!,3!!!#p!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1902!!!!$!!#e!!!![J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!YJ!
1903!!,m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!,F!!!$!!J%!!!!
1904!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#i!!!!`3)"!!!!!!!"!!%"!!!
1905!!!!!!!!!!!!!!3!!!!!!!!!!!`!!Z3!!!-)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1906!!!%!!!!!!!!!!!-!!,S!!!$$!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1907!!!!$!!#l!!!!a!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!![!!
1908!!-8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!,d!!!$'!J%!!!!
1909!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!#q!!!!a`)"!!!!!!!"!!%"!!!
1910!!!!!!!!!!!!!!3!!!!!!!!!!!`!![`!!!-J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1911!!!%!!!!!!!!!!!-!!-!!!!$*!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1912!!!!$!!$"!!!!bJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!`J!
1913!!-X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!--!!!$-!J%!!!!
1914!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$%!!!!c3)"!!!!!!!"!!%"!!!
1915!!!!!!!!!!!!!!3!!!!!!!!!!!`!!a3!!!-i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1916!!!%!!!!!!!!!!!-!!-B!!!$2!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1917!!!!$!!$(!!!!d!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!b!!
1918!!0%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!-N!!!$5!J%!!!!
1919!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$+!!!!d`)"!!!!!!!"!!%"!!!
1920!!!!!!!!!!!!!!3!!!!!!!!!!!`!!b`!!!03#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1921!!!%!!!!!!!!!!!-!!-`!!!$9!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1922!!!!$!!$0!!!!eJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!cJ!
1923!!0F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!-m!!!$B!J%!!!!
1924!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$3!!!!f3)"!!!!!!!"!!%"!!!
1925!!!!!!!!!!!!!!3!!!!!!!!!!!`!!d3!!!0S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1926!!!%!!!!!!!!!!!-!!0)!!!$E!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1927!!!!$!!$6!!!!h!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!e!!
1928!!0d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!08!!!$H!J%!!!!
1929!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$@!!!!h`)"!!!!!!!"!!%"!!!
1930!!!!!!!!!!!!!!3!!!!!!!!!!!`!!e`!!!1!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1931!!!%!!!!!!!!!!!-!!0J!!!$K!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1932!!!!$!!$C!!!!iJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!fJ!
1933!!1-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!0X!!!$N!J%!!!!
1934!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$F!!!!j3)"!!!!!!!"!!%"!!!
1935!!!!!!!!!!!!!!3!!!!!!!!!!!`!!h3!!!1B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1936!!!%!!!!!!!!!!!-!!0i!!!$R!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1937!!!!$!!$I!!!!k!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!i!!
1938!!1N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!1%!!!$U!J%!!!!
1939!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$L!!!!k`)"!!!!!!!"!!%"!!!
1940!!!!!!!!!!!!!!3!!!!!!!!!!!`!!i`!!!1`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1941!!!%!!!!!!!!!!!-!!13!!!$Y!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1942!!!!$!!$P!!!!lJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!jJ!
1943!!1m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!1F!!!$`!J%!!!!
1944!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$S!!!!m3)"!!!!!!!"!!%"!!!
1945!!!!!!!!!!!!!!3!!!!!!!!!!!`!!k3!!!2)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1946!!!%!!!!!!!!!!!-!!1S!!!$c!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1947!!!!$!!$V!!!!p!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!l!!
1948!!28#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!1d!!!$f!J%!!!!
1949!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$Z!!!!p`)"!!!!!!!"!!%"!!!
1950!!!!!!!!!!!!!!3!!!!!!!!!!!`!!l`!!!2J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1951!!!%!!!!!!!!!!!-!!2!!!!$j!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1952!!!!$!!$a!!!!qJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!mJ!
1953!!2X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!2-!!!$m!J%!!!!
1954!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$d!!!!r3)"!!!!!!!"!!%"!!!
1955!!!!!!!!!!!!!!3!!!!!!!!!!!`!!p3!!!2i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1956!!!%!!!!!!!!!!!-!!2B!!!$r!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1957!!!!$!!$h!!!"!!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!q!!
1958!!3%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!2N!!!%#!J%!!!!
1959!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!$k!!!"!`)"!!!!!!!"!!%"!!!
1960!!!!!!!!!!!!!!3!!!!!!!!!!!`!!q`!!!33#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1961!!!%!!!!!!!!!!!-!!2`!!!%&!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1962!!!!$!!$p!!!""J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!!rJ!
1963!!3F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!2m!!!%)!J%!!!!
1964!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%!!!!"#3)"!!!!!!!"!!%"!!!
1965!!!!!!!!!!!!!!3!!!!!!!!!!!`!"!3!!!3S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1966!!!%!!!!!!!!!!!-!!3)!!!%,!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1967!!!!$!!%$!!!"$!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!""!!
1968!!3d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!38!!!%1!J%!!!!
1969!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%'!!!"$`)"!!!!!!!"!!%"!!!
1970!!!!!!!!!!!!!!3!!!!!!!!!!!`!""`!!!4!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1971!!!%!!!!!!!!!!!-!!3J!!!%4!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1972!!!!$!!%*!!!"%J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"#J!
1973!!4-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!3X!!!%8!J%!!!!
1974!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%-!!!"&3)"!!!!!!!"!!%"!!!
1975!!!!!!!!!!!!!!3!!!!!!!!!!!`!"$3!!!4B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1976!!!%!!!!!!!!!!!-!!3i!!!%A!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1977!!!!$!!%2!!!"'!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"%!!
1978!!4N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!4%!!!%D!J%!!!!
1979!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%5!!!"'`)"!!!!!!!"!!%"!!!
1980!!!!!!!!!!!!!!3!!!!!!!!!!!`!"%`!!!4`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1981!!!%!!!!!!!!!!!-!!43!!!%G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1982!!!!$!!%9!!!"(J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"&J!
1983!!4m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!4F!!!%J!J%!!!!
1984!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%B!!!")3)"!!!!!!!"!!%"!!!
1985!!!!!!!!!!!!!!3!!!!!!!!!!!`!"'3!!!5)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1986!!!%!!!!!!!!!!!-!!4S!!!%M!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1987!!!!$!!%E!!!"*!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"(!!
1988!!58#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!4d!!!%Q!J%!!!!
1989!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%H!!!"*`)"!!!!!!!"!!%"!!!
1990!!!!!!!!!!!!!!3!!!!!!!!!!!`!"(`!!!5J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1991!!!%!!!!!!!!!!!-!!5!!!!%T!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1992!!!!$!!%K!!!"+J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!")J!
1993!!5X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!5-!!!%X!J%!!!!
1994!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%N!!!",3)"!!!!!!!"!!%"!!!
1995!!!!!!!!!!!!!!3!!!!!!!!!!!`!"*3!!!5i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
1996!!!%!!!!!!!!!!!-!!5B!!!%[!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
1997!!!!$!!%R!!!"-!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"+!!
1998!!6%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!5N!!!%b!J%!!!!
1999!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%U!!!"-`)"!!!!!!!"!!%"!!!
2000!!!!!!!!!!!!!!3!!!!!!!!!!!`!"+`!!!63#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2001!!!%!!!!!!!!!!!-!!5`!!!%e!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2002!!!!$!!%Y!!!"0J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!",J!
2003!!6F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!5m!!!%i!J%!!!!
2004!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%`!!!"13)"!!!!!!!"!!%"!!!
2005!!!!!!!!!!!!!!3!!!!!!!!!!!`!"-3!!!6S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2006!!!%!!!!!!!!!!!-!!6)!!!%l!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2007!!!!$!!%c!!!"2!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"0!!
2008!!6d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!68!!!%q!J%!!!!
2009!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%f!!!"2`)"!!!!!!!"!!%"!!!
2010!!!!!!!!!!!!!!3!!!!!!!!!!!`!"0`!!!8!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2011!!!%!!!!!!!!!!!-!!6J!!!&"!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2012!!!!$!!%j!!!"3J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"1J!
2013!!8-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!6X!!!&%!J%!!!!
2014!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!%m!!!"43)"!!!!!!!"!!%"!!!
2015!!!!!!!!!!!!!!3!!!!!!!!!!!`!"23!!!8B#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2016!!!%!!!!!!!!!!!-!!6i!!!&(!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2017!!!!$!!%r!!!"5!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"3!!
2018!!8N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!8%!!!&+!J%!!!!
2019!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&#!!!"5`)"!!!!!!!"!!%"!!!
2020!!!!!!!!!!!!!!3!!!!!!!!!!!`!"3`!!!8`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2021!!!%!!!!!!!!!!!-!!83!!!&0!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2022!!!!$!!&&!!!"6J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"4J!
2023!!8m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!8F!!!&3!J%!!!!
2024!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&)!!!"83)"!!!!!!!"!!%"!!!
2025!!!!!!!!!!!!!!3!!!!!!!!!!!`!"53!!!9)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2026!!!%!!!!!!!!!!!-!!8S!!!&6!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2027!!!!$!!&,!!!"9!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"6!!
2028!!98#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!8d!!!&@!J%!!!!
2029!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&1!!!"9`)"!!!!!!!"!!%"!!!
2030!!!!!!!!!!!!!!3!!!!!!!!!!!`!"6`!!!9J#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2031!!!%!!!!!!!!!!!-!!9!!!!&C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2032!!!!$!!&4!!!"@J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"8J!
2033!!9X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!9-!!!&F!J%!!!!
2034!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&8!!!"A3)"!!!!!!!"!!%"!!!
2035!!!!!!!!!!!!!!3!!!!!!!!!!!`!"93!!!9i#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2036!!!%!!!!!!!!!!!-!!9B!!!&I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2037!!!!$!!&A!!!"B!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"@!!
2038!!@%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!9N!!!&L!J%!!!!
2039!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&D!!!"B`)"!!!!!!!"!!%"!!!
2040!!!!!!!!!!!!!!3!!!!!!!!!!!`!"@`!!!@3#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2041!!!%!!!!!!!!!!!-!!9`!!!&P!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2042!!!!$!!&G!!!"CJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"AJ!
2043!!@F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!9m!!!&S!J%!!!!
2044!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&J!!!"D3)"!!!!!!!"!!%"!!!
2045!!!!!!!!!!!!!!3!!!!!!!!!!!`!"B3!!!@S#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2046!!!%!!!!!!!!!!!-!!@)!!!&V!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2047!!!!$!!&M!!!"E!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"C!!
2048!!@d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!@8!!!&Z!J%!!!!
2049!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&Q!!!"E`)"!!!!!!!"!!%"!!!
2050!!!!!!!!!!!!!!3!!!!!!!!!!!`!"C`!!!A!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2051!!!%!!!!!!!!!!!-!!@J!!!&a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2052!!!!$!!&T!!!"FJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"DJ!
2053!!A-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!@X!!!&d!J%!!!!
2054!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&X!!!"G3)"!!!!!!!"!!%"!!!
2055!!!!!!!!!!!!!!3!!!!!!!!!!!`!"E3!!!AB#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2056!!!%!!!!!!!!!!!-!!@i!!!&h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2057!!!!$!!&[!!!"H!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"F!!
2058!!AN#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!A%!!!&k!J%!!!!
2059!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&b!!!"H`)"!!!!!!!"!!%"!!!
2060!!!!!!!!!!!!!!3!!!!!!!!!!!`!"F`!!!A`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2061!!!%!!!!!!!!!!!-!!A3!!!&p!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2062!!!!$!!&e!!!"IJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"GJ!
2063!!B!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!AF!!!'"!J%!!!!
2064!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&i!!!"JJ)"!!!!!!!"!!%"!!!
2065!!!!!!!!!!!!!!3!!!!!!!!!!!`!"H3!!!B-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2066!!!%!!!!!!!!!!!-!!AS!!!'%!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2067!!!!$!!&l!!!"K3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"I!!
2068!!BB#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!Ad!!!'(!J%!!!!
2069!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!&q!!!"L!)"!!!!!!!"!!%"!!!
2070!!!!!!!!!!!!!!3!!!!!!!!!!!`!"I`!!!BN#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2071!!!%!!!!!!!!!!!-!!B!!!!'+!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
2072!!!!$!!'"!!!"L`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"JJ!
2073!!B`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!B-!!!'0!J%!!!!
2074!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'%!!!"MJ)"!!!!!!!"!!%"!!!
2075!!!!!!!!!!!!!!3!!!!!!!!!!!`!"K3!!!Bm#!3!!!!!!!3!"!3!!!!!!!!!!!!!
2076!!!%!!!!!!!!!!!-!!BB!!!'3!!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2077!!!!!!`!"K`!!!C%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!BJ
2078!!!'5!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'*!!!"N`)"!!!
2079!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"LJ!!!C3#!3!!!!!!!3!"!3!
2080!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!BX!!!'9!J%!!!!!!!%!!3%!!!!!!!!!!!!
2081!!!!"!!!!!!!!!!!$!!'-!!!"PJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2082!!!!!!`!"M3!!!CF#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!Bi
2083!!!'B!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'2!!!"Q3)"!!!
2084!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"N!!!!!'D!J%!!!!!!!%!!3%
2085!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'4!!!"Q`)"!!!!!!!"!!%"!!!!!!!!!!!
2086!!!!!!3!!!!!!!!!!!`!"NJ!!!C`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
2087!!!!!!!-!!C-!!!'G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'
20888!!!"RJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"P3!!!Cm#!3!
2089!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!CB!!!'J!J%!!!!!!!%!!3%
2090!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'A!!!"S3)"!!!!!!!"!!%"!!!!!!!!!!!
2091!!!!!!3!!!!!!!!!!!`!"Q!!!!D)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
2092!!!!!!!-!!CN!!!'M!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'
2093D!!!"d`)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"Q`!!!G3#!3!
2094!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!C`!!!(9!J%!!!!!!!%!!3-
2095!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'G!!!"eJ)"!!!!!!!"!!%$!!!!!!!!!!!
2096!!!!!!3!!!!!!!!!!!`!"RJ!!!D3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
2097!!!!!!!-!!Cm!!!(A!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'
2098J!!!"f!)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!!3!!!!!!!!!!!`!"S3!!!GN#!3!
2099!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!-!!D)!!!(D!J%!!!!!!!%!!3-
2100!!!!!!!!!!!!!!!!"!!!!!!!!!!!$!!'M!!!"TJ)"!!!!!!!"!!%"!!!!!!!!!!!
2101!!!!!!3!!!!!!!!!!!`!"T!!!!DF#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!
2102!!!!!!!-!!D8!!!'S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!
2103!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2104!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2105!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2106!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2107!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2108!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2109!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2110!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2111!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2112!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2113!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2114!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2115!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2116!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2117!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2118!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2119!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2120!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2121!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2122!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2123!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2124!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2125!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!)!!!!$!!!!"!!!!!8!!!!
2126'!!!!"`!!!!J!!!!*!!!!#J!!!!X!!!!-!!!!$3!!!!i!!!!2!!!!%!!!!"%!!!!
21275!!!!%`!!!"3!!!!9!!!!&J!!!"F!!!!B!!!!'3!!!"S!!!!E!!!!(!!!!"d!!!!
2128H!!!!(`!!!#!!!!!K!!!!)J!!!#-!!!!N!!!!*3!!!#B!!!!R!!!!+!!!!#N!!!!
2129U!!!!+`!!!#`!!!!Y!!!!,J!!!#m!!!!`!!!!-3!!!$)!!!!c!!!!0!!!!$8!!!!
2130f!!!!0`!!!$J!!!!j!!!!1J!!!$X!!!!m!!!!23!!!$i!!!!r!!!!3!!!!%%!!!"
2131#!!!!3`!!!%3!!!"&!!!!4J!!!%F!!!")!!!!53!!!%S!!!",!!!!6!!!!%d!!!"
21321!!!!6`!!!&!!!!"4!!!!8J!!!&-!!!"8!!!!93!!!&B!!!"A!!!!@!!!!&N!!!"
2133D!!!!@`!!!&`!!!"G!!!!AJ!!!&m!!!"J!!!!B3!!!')!!!"M!!!!C!!!!'8!!!"
2134Q!!!!C`!!!'J!!!"T!!!!DJ!!!'X!!!"X!!!!E3!!!'i!!!"[!!!!F!!!!(%!!!"
2135b!!!!F`!!!(3!!!"e!!!!GJ!!!(F!!!"i!!!!H3!!!(S!!!"l!!!!I!!!!(d!!!"
2136q!!!!I`!!!)!!!!#"!!!!JJ!!!)-!!!#%!!!!K3!!!)B!!!#(!!!!L!!!!)N!!!#
2137+!!!!L`!!!)`!!!#0!!!!MJ!!!)m!!!#3!!!!!*%!!!#5!!!!N`!!!*3!!!#9!!!
2138!PJ!!!*F!!!#B!!!!Q3!!!*S!!!#E!!!!R!!!!*d!!!#H!!!!R`!!!+!!!!#K!!!
2139!SJ!!!+-!!!#N!!!!T3!!!+B!!!#R!!!!U!!!!+N!!!#U!!!!U`!!!+`!!!#Y!!!
2140!VJ!!!+m!!!#`!!!!X3!!!,)!!!#c!!!!Y!!!!,8!!!#f!!!!Y`!!!,J!!!#j!!!
2141!ZJ!!!,X!!!#m!!!![3!!!,i!!!#r!!!!`!!!!-%!!!$#!!!!``!!!-3!!!$&!!!
2142!aJ!!!-F!!!$)!!!!b3!!!-S!!!$,!!!!c!!!!-d!!!$1!!!!c`!!!0!!!!$4!!!
2143!dJ!!!0-!!!$8!!!!e3!!!0B!!!$A!!!!f!!!!0N!!!$D!!!!f`!!!0`!!!$G!!!
2144!hJ!!!0m!!!$J!!!!i3!!!1)!!!$M!!!!j!!!!18!!!$Q!!!!j`!!!1J!!!$T!!!
2145!kJ!!!1X!!!$X!!!!l3!!!1i!!!$[!!!!m!!!!2%!!!$b!!!!m`!!!23!!!$e!!!
2146!pJ!!!2F!!!$i!!!!q3!!!2S!!!$l!!!!r!!!!2d!!!$q!!!!r`!!!3!!!!%"!!!
2147"!J!!!3-!!!%%!!!""3!!!3B!!!%(!!!"#!!!!3N!!!%+!!!"#`!!!3`!!!%0!!!
2148"$J!!!3m!!!%3!!!"%3!!!4)!!!%6!!!"&!!!!48!!!%@!!!"&`!!!4J!!!%C!!!
2149"'J!!!4X!!!%F!!!"(3!!!4i!!!%I!!!")!!!!5%!!!%L!!!")`!!!53!!!%P!!!
2150"*J!!!5F!!!%S!!!"+3!!!5S!!!%V!!!",!!!!5d!!!%Z!!!",`!!!6!!!!%a!!!
2151"-J!!!6-!!!%d!!!"03!!!6B!!!%h!!!"1!!!!6N!!!%k!!!"1`!!!6`!!!%p!!!
2152"2J!!!6m!!!&!!!!"33!!!8)!!!&$!!!"4!!!!88!!!&'!!!"4`!!!8J!!!&*!!!
2153"5J!!!8X!!!&-!!!"63!!!8i!!!&2!!!"8!!!!9%!!!&5!!!"8`!!!93!!!&9!!!
2154"9J!!!9F!!!&B!!!"@3!!!9S!!!&E!!!"A!!!!9d!!!&H!!!"A`!!!@!!!!&K!!!
2155"BJ!!!@-!!!&N!!!"C3!!!@B!!!&R!!!"D!!!!@N!!!&U!!!"D`!!!@`!!!&Y!!!
2156"EJ!!!@m!!!&`!!!"F3!!!A)!!!&c!!!"G!!!!A8!!!&f!!!"G`!!!AJ!!!&j!!!
2157"HJ!!!AX!!!&m!!!"I3!!!Ai!!!&r!!!"J!!!!B%!!!'#!!!"J`!!!B3!!!'&!!!
2158"KJ!!!BF!!!')!!!"L3!!!BS!!!',!!!"M!!!!Bd!!!'1!!!"M`!!!C!!!!!"N3!
2159!!C)!!!'6!!!"P!!!!C8!!!'@!!!"P`!!!CJ!!!'G!!!"SJ!!!D-!!!'N!!!"Q3!
2160!!CS!!!'E!!!"R!!!!Ci!!!'I!!!"S!!!!D%!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2161!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2162!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'P!!!"`!-
2163!!!!$!!'P!!!"f`!"!"`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$!!'B!`!"Q3-
2164!!D8$!!'A!`!"PJ-!!!)$!!!$!`!!!3-!!!3$!!!&!`!!"J-!!!F$!!!)!`!!#3-
2165!!!S$!!!,!`!!$!-!!!d$!!!1!`!!$`-!!"!$!!!4!`!!%J-!!"-$!!!8!`!!&3-
2166!!"B$!!!A!`!!'!-!!"N$!!!D!`!!'`-!!"`$!!!G!`!!(J-!!"m$!!!J!`!!)3-
2167!!#)$!!!M!`!!*!-!!#8$!!!Q!`!!*`-!!#J$!!!T!`!!+J-!!#X$!!!X!`!!,3-
2168!!#i$!!![!`!!-!-!!$%$!!!b!`!!-`-!!$3$!!!e!`!!0J-!!$F$!!!i!`!!13-
2169!!$S$!!!l!`!!2!-!!$d$!!!q!`!!2`-!!%!$!!""!`!!3J-!!%-$!!"%!`!!43-
2170!!%B$!!"(!`!!5!-!!%N$!!"+!`!!5`-!!%`$!!"0!`!!6J-!!%m$!!"3!`!!83-
2171!!&)$!!"6!`!!9!-!!&8$!!"@!`!!9`-!!&J$!!"C!`!!@J-!!&X$!!"F!`!!A3-
2172!!&i$!!"I!`!!B!-!!'%$!!"L!`!!B`-!!'3$!!"P!`!!CJ-!!'F$!!"S!`!!D3-
2173!!'S$!!"V!`!!E!-!!'d$!!"Z!`!!E`-!!(!$!!"a!`!!FJ-!!(-$!!"d!`!!G3-
2174!!(B$!!"h!`!!H!-!!(N$!!"k!`!!H`-!!(`$!!"p!`!!IJ-!!(m$!!#!!`!!J3-
2175!!))$!!#$!`!!K!-!!)8$!!'M!`!!KJ-!!)F$!!#)!`!!L3-!!)S$!!#,!`!!M!-
2176!!)d$!!#1!`!!M`-!!*!!!`!!N3-!!*)$!!#6!`!!P!-!!*8$!!#@!`!!P`-!!*J
2177$!!#C!`!!QJ-!!*X$!!#F!`!!R3-!!*i$!!#I!`!!S!-!!+%$!!#L!`!!S`-!!+3
2178$!!#P!`!!TJ-!!+F$!!#S!`!!U3-!!+S$!!#V!`!!V!-!!+d$!!#Z!`!!V`-!!,!
2179$!!#a!`!!XJ-!!,-$!!#d!`!!Y3-!!,B$!!#h!`!!Z!-!!,N$!!#k!`!!Z`-!!,`
2180$!!#p!`!![J-!!,m$!!$!!`!!`3-!!-)$!!$$!`!!a!-!!-8$!!$'!`!!a`-!!-J
2181$!!$*!`!!bJ-!!-X$!!$-!`!!c3-!!-i$!!$2!`!!d!-!!0%$!!$5!`!!d`-!!03
2182$!!$9!`!!eJ-!!0F$!!$B!`!!f3-!!0S$!!$E!`!!h!-!!0d$!!$H!`!!h`-!!1!
2183$!!$K!`!!iJ-!!1-$!!$N!`!!j3-!!1B$!!$R!`!!k!-!!1N$!!$U!`!!k`-!!1`
2184$!!$Y!`!!lJ-!!1m$!!$`!`!!m3-!!2)$!!$c!`!!p!-!!28$!!$f!`!!p`-!!2J
2185$!!$j!`!!qJ-!!2X$!!$m!`!!r3-!!2i$!!$r!`!"!!-!!3%$!!%#!`!"!`-!!33
2186$!!%&!`!""J-!!3F$!!%)!`!"#3-!!3S$!!%,!`!"$!-!!3d$!!%1!`!"$`-!!4!
2187$!!%4!`!"%J-!!4-$!!%8!`!"&3-!!4B$!!%A!`!"'!-!!4N$!!%D!`!"'`-!!4`
2188$!!%G!`!"(J-!!4m$!!%J!`!")3-!!5)$!!%M!`!"*!-!!58$!!%Q!`!"*`-!!5J
2189$!!%T!`!"+J-!!5X$!!%X!`!",3-!!D3$!!%Z!`!",`-!!6!$!!%a!`!"-J-!!6-
2190$!!%d!`!"03-!!6B$!!%h!`!"1!-!!6N$!!%k!`!"1`-!!6`$!!%p!`!"2J-!!6m
2191$!!&!!`!"33-!!8)$!!&$!`!"4!-!!88$!!&'!`!"4`-!!8J$!!&*!`!"5J-!!8X
2192$!!&-!`!"63-!!8i$!!&2!`!"8!-!!9%$!!&5!`!"8`-!!93$!!&9!`!"9J-!!9F
2193$!!&B!`!"@3-!!9S$!!&E!`!"A!-!!9d$!!&H!`!"A`-!!@!$!!&K!`!"BJ-!!@-
2194$!!&N!`!"C3-!!@B$!!&R!`!"D!-!!@N$!!&U!`!"D`-!!@`$!!&Y!`!"EJ-!!@m
2195$!!&`!`!"F3-!!A)$!!&c!`!"G!-!!A8$!!&f!`!"G`-!!AJ$!!&j!`!"HJ-!!AX
2196$!!&m!`!"I3-!!Ai$!!&r!`!"J!-!!B%$!!'#!`!"J`-!!B3$!!'&!`!"KJ-!!BF
2197$!!')!`!"L3-!!BS$!!',!`!"M!-!!Bd$!!'1!`!"M`-!!C!!!`!"N3-!!C)$!!'
21986!`!"P!-!!C8$!!'H!`!"S!-!!D%$!!'E!`!"SJ-!!CS$!!'F!`!"R3-!!Cm!!J!
2199!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2200!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2201!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2202!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2203!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2204!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2205!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2206!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2207!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2208!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2209!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2210!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2211!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2212!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2213!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2214!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2215!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2216!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2217!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2218!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2219!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2220!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,#2Z!!!!!!!!!"!!,#4r!!!J!
2221!!!!!!!!!!!!#`MD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2222!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2223!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2224!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2225!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J!
2226!!3!!!!!&!!"rr`!!!!"rr`!!!!"rr`!!!!"rr`!!!!`!!3!#!!B!!!!&3!!!#!!
2227"!!%k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2228!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2229!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2230!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2231!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2232!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2233!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2234!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2235!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2236!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2237!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2r
2238rrrm!!!!$!!%!!6Sk!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2239!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2240!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2241!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2242!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2243!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2244!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2245!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2246!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2247!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2248!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2249!!!!"!!!!rrrrr`!!!!3!!3!"1MTTEQ0XG@4P1J!!!!!!!!!!!!!!!!!!!!!!!!!
2250!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2251!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2252!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2253!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2254!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2255!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2256!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2257!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2258!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2259!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2260!!!!!!!!!!!!!!!!!!!$rrrrr3!!!!J!"!!%k!!!!!!!!!!!!!!!!!!!!!!!!!!!
2261!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2262!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2263!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2264!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2265!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2266!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2267!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2268!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2269!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2270!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2271!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrp!!!!$!!%!!6Sk1NG98dNkD@jME(9
2272NC6S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2273!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2274!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2275!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2276!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2277!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2278!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2279!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2280!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2281!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2282!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrd!!!!3!!3!"1MSk4e9
2283656TXD@)k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2284!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2285!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2286!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2287!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2288!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2289!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2290!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2291!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2292!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2293!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!"3!
2294#!!%k6@&M6e-J8h9`F'pbG$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2295!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2296!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2297!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2298!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2299!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2300!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2301!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2302!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2303!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2304!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2r
2305rrrp!!!!'!!)!!6T08d`k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2306!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2307!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2308!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2309!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2310!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2311!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2312!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2313!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2314!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2315!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2316!!!!"!!!!rrrrrd!!!!F!#J!!6@&M6e-J0MK,)%aTEQYPFJ!!!!!!!!!!!!!!!!!
2317!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2318!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2319!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2320!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2321!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2322!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2323!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2324!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2325!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2326!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2327!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2328!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2329!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2330!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2331!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2332!!!!!!!!!!!!!!!!!!!!!!!!!6'PL8e0-)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!
2333!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2334!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2335!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2336!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2337!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%k!!!!!!!!!!!
2338!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2339!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2340!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2341!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2342!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2343!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2344!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2345!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2346!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2347!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2348!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!&0B@028b!f1%X
2349J6'PZDf9b!!!!!!!!!!!!!!!!!!!!!!!J39"36!!!!!!!!!!!!!!!!!!!!!!!!!!
2350!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!
2351!3A"`E!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2352!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!68e-3J!!!!!!!!!!!!!!!!!!!!!!!!!
2353!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2354!69"-4J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#!
2355f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69G$4!!!!!!!!!!!!!!!!!!!!!!!!!!
2356!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!
2357!6d*+)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"A)%PYF'pbG#!
2358f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%a[BJ!!!!!!!!!!!!!!!!!!!!!!!!!
2359!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!
2360!8P053`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2361!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!9%9B9#jLD!!!!!!!!!!!!!!!!!!!!!!
2362!!!!!!!!!!!!!!!!!3Q&XE'p[EL")C@a`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2363!9%9B9#jM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK
2364,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jM+bX!!!!!!!!!!!!!!!!!!!!
2365!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2366!9%9B9#jMB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK
2367,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF!!!!!!!!!!!!!!!!!!!!!!
2368!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2369!9%9B9#jMF(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK
2370,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jPH(!!!!!!!!!!!!!!!!!!!!!
2371!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2372!9%9B9#jRB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4f&YC80[C'8J3fp
2373ZGQ9bG'9b!!!!!!!!!!!!!!!!!!"!!!!!9%9B9#jS!!!!!!!!!!!!!!!!!!!!!!!
2374!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!
2375!9%9B9#jX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QaPH#"3FQ9`FQp
2376MCA0cEh)!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`!!!!!!!!!!!!!!!!!!!!!!!
2377!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2378!9%9B9#j`BA-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)$B
2379i5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BfJ!!!!!!!!!!!!!!!!!!!!
2380!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!
2381!9%9B9#j`BfJV+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK
2382,!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`F(8!!!!!!!!!!!!!!!!!!!!
2383!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!#!!!!
2384!9%9B9#jb!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8Q9k!!!!!!!!!!!
2385!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jcC@F!!!!!!!!!!!!!!!!!!!!
2386!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2387!9%9B9#jj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3QPcEfiJ8(*PF(*
2388[Bf9cFfpb!!!!!!!!!!!!!!!!!!#!!!!!C'pMG3!!!!!!!!!!!!!!!!!!!!!!!!!
2389!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!
2390!FR0bB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2391!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FfKXBJ!!!!!!!!!!!!!!!!!!!!!!!!!
2392!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2393!Fh4eBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#!
2394f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#jNEf-!!!!!!!!!!!!!!!!!!!!
2395!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"3!!!
2396!!!!!!#jbFh*M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2397!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!!8"!3!"!!!!!!!!!!!!!!!!!!!!!!!
2398!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2399!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2400!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2401!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2402!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2403!"J!!!!!"!!!!!!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2404!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2405!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2406!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2407!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2408!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2409!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2410!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2411!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2412!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2413!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2414!!!!!!!!!!!!!!!!"!3!!E@&TEJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2415!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2416!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2417!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2418!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2419!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!3%"!!!!!3%"!!!"!3%
2420!!!!!!!%"!!!"!3!"!!!""!!!!!!!!!!!!!!)!3!"!3!"!3!!!!%!!!N!!aK-D@*
242168d`Z0MK,)%CK+$4TAcKN+5j-D@)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2422!!!!!!!!!!!!!!!!r2cmr2cmr2`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2423!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$mr2cm
2424!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2425!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2426!!!!!!!!!!!!!!!!!!!!0!!%!!!!!!"9I69G&8NY6AdG98dPIF(*PCQPi,QJ!!!!
2427!!!!!!!!!!!!"!!!!!!!!!!!"!!!!!!!!!!!!!!8"!3%!!!%"!!%!!!!!"!!!!!!
2428!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2429!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2430!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2431!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2432!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2433!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2434!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
2435IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2436!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2437!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!!#8ePFQGP)%p
2438eG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2439!!!!!!!!!!$mr2cp"8&"-!!%"!!!%)#!J)!1ARe!$GYpi!`@Z%!!&!J%!!3%!!3%
2440"!!!"!!!!!!!!!!%"!3%!!3%!!3!""!!!!!!!!!!!!!!(!3%!!3!!!3!!!!!!!!!
2441!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2442!!!!!!!!!!!"IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2443!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2444!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!
2445!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2446!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2447!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2448!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2449!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2450!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8!!!K(CA4)9&438`!
2451!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2d&38%`!!!3!!!!%!!!!!%!!!&M!!!!
2452!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2453!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
2454r2cmr!!!!!!!!!!)!!!!#!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2455!!!!!!!!!!!!#!&!!!3!"!!%!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2456!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2457!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2458!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2459!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2460!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8*d024%8R)#G%394
2461"*b!R8%P$9#F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2462!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2463!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2464!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2465!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2466!!!!!"!!!!3!!!!S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!!)
2467!!!!,!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!%!!!$!!!!$!)"!!!
2468!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"!!!"!!!!!d#!3!!!!!!!3!"!3!
2469!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!!8!!!!1!J%!!!!!!!%!!3%!!!!!!!!!!!!
2470!!!!"!!!!!!!!!!!%!!!'!!!!$`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2471!!!!!"!!!"`!!!"!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!!J
2472!!!!4!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!%!!!*!!!!%J)"!!!
2473!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"!!!#J!!!"-#!3!!!!!!!3!"!3!
2474!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!!X!!!!8!J%!!!!!!!%!!3%!!!!!!!!!!!!
2475!!!!"!!!!!!!!!!!%!!!-!!!!&3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2476!!!!!"!!!$3!!!"B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!!i
2477!!!!A!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!%!!!2!!!!'!)"!!!
2478!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"!!!%!!!!"N#!3!!!!!!!3!"!3!
2479!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!"%!!!!D!J%!!!!!!!%!!3%!!!!!!!!!!!!
2480!!!!"!!!!!!!!!!!%!!!5!!!!'`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2481!!!!!"!!!%`!!!"`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!"3
2482!!!!G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!%!!!9!!!!(J)"!!!
2483!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"!!!&J!!!"m#!3!!!!!!!3!"!3!
2484!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!"F!!!!J!J%!!!!!!!%!!3%!!!!!!!!!!!!
2485!!!!"!!!!!!!!!!!%!!!B!!!!)3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2486!!!!!"!!!'3!!!#)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!"S
2487!!!!M!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!%!!!E!!!!*!)"!!!
2488!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"!!!(!!!!#8#!3!!!!!!!3!"!3!
2489!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!"d!!!!Q!J%!!!!!!!%!!3%!!!!!!!!!!!!
2490!!!!"!!!!!!!!!!!%!!!H!!!!*`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
2491!!!!!"!!!(`!!!#J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!#!
2492!!!!T!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!%!!!K!!!!+J)"!!!
2493!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"!!!)J!!!#X#!3!!!!!!!3!"!3!
2494!!!!!!!!!!!!!!!%!!!!!!!!!!!3!!#-!!!!X!J%!!!!!!!%!!3%!!!!!!!!!!!!
2495!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2496!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2497!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2498!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2499!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2500!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2501!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2502!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2503!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2504!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2505!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2506!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2507!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2508!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2509!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2510!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2511!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2512!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2513!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2514!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2515!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2516!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2517!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2518!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2519!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!J!!!!-!!!!%!!!!"3!!!!B
2520!!!!(!!!!#!!!!!N!!!!+!!!!#`!!!!`!!!!0!!!!$J!!!!m!!!!3!!!!%3!!!")
2521!!!!6!!!!&!!!!"8!!!!@!!!!&`!!!"J!!!!C!!!!'J!!!"X!!!!F!!!!(3!!!"i
2522!!!!I!!!!)!!!!#%!!!!L!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2523!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2524!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!M!!!!3!3!!!!
2525%!!!M!!!"f`!"!"`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!&"!!!"!3!!!-
2526%!!!#"!!!"J3!!!X%!!!+"!!!#33!!!J%!!!("!!!$!3!!")%!!!4"!!!%!3!!!m
2527%!!!0"!!!$J3!!"-%!!!L"!!!)33!!#!%!!!I"!!!)`3!!!%%!!!8"!!!&33!!"B
2528%!!!A"!!!'!3!!"N%!!!D"!!!'`3!!"`%!!!G"!!!(J!#!!!!!!!!!!!!!!!!!!!
2529!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2530!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2531!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2532!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2533!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2534!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2535!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2536!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2537!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2538!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2539!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2540!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2541!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2542!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2543!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2544!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2545!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2546!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2547!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2548!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2549!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2550!!!!!!!!!!!!!!!!!!!!!!X)qi!!!!!!!!!%!!X*(m!!#!!!!!!!!!!!!!!,#0S!
2551!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2552!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2553!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2554!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2555!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!"!!!!!!8!!(rr!!!
2556!!(rr!!!!!(rr!!!!!(rr!!!!$!!"!!)!"J!!!!9!!!!)!!%!!6S!!!!!!!!!!!!
2557!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2558!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2559!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2560!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2561!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2562!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2563!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2564!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2565!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2566!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2567!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!rrrrr`!!!!-!!3!"1MS
2568!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2569!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2570!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2571!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2572!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2573!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2574!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2575!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2576!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2577!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2578!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!$rrrrr!!!
2579!"!!"!!%k1QPZBfaeC'8k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2580!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2581!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2582!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2583!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2584!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2585!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2586!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2587!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2588!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2589!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2590!!2rrrrp!!!!#!!%!!6S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2591!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2592!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2593!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2594!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2595!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2596!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2597!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2598!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2599!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2600!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2601!!!!!!!!!!!!!rrrrrd!!!!-!!3!"1MSk4e9656TTEQ0XG@4P1J!!!!!!!!!!!!!
2602!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2603!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2604!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2605!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2606!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2607!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2608!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2609!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2610!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2611!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2612!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!"!!"!!%k1MT(990*1QaTBMS!!!!!!!!
2613!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2614!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2615!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2616!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2617!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2618!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2619!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2620!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2621!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2622!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2623!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrp!!!!&!!)!!6T0B@028b"6GA"
2624`Eh*d1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2625!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2626!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2627!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2628!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2629!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2630!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2631!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2632!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2633!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2634!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!rrrrrd!!!!B!!J!"1Ne
263566$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2636!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2637!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2638!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2639!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2640!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2641!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2642!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2643!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2644!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2645!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!$rrrrr3!!
2646!"`!+!!"0B@028b!f1%XJ6'PZDf9b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2647!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2648!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2649!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2650!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2651!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2652!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2653!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2654!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2655!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2656!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2657!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2658!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2659!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2660!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2661!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2662!!!!!!!"2F'9Z8e0-)$BiD`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2663!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2664!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2665!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2666!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2667!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!6S!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2668!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2669!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2670!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2671!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2672!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2673!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2674!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2675!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2676!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2677!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2678!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!!8eKBdp6)$Bi5b"-D@jVCA)!!!!!!!!
2679!!!!!!!!!!!!!!#""8&"-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2680!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!""F("X!!!!!!!!!!!
2681!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2682!!!!!!!!!!'!!!!"068a#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
2683-D@)J5@e`Eh*d)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!"08%a'!!!!!!!!!!!
2684!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"-D@)J5@e`Eh*d)$Bi5`!!!!!!!!!!!!!
2685!!!!!!!!!!!!!!!"09d0%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2686!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!"23NSJ!!!!!!!!!!!
2687!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"08&FJ5@e`Eh*d)$Bi5`!!!!!!!!!!!!!
2688!!!!!!!!!!!!!!!"36'pL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2689!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!"58e*$!!!!!!!!!!!
2690!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2691!!!!!!!!!!'!!!!"849K8,Q*S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
2692#B@aXEfpZ)%KPE(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,Q-!!!!!!!!
2693!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!
2694!!!!!!!!!!!!!!!"849K8,Q-V+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
269509b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,Q0M!!!!!!!
2696!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!
2697!!!!!!!!!!!!!!!"849K8,Q0`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
269809b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,Q0`F!!!!!!
2699!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!
2700!!!!!!!!!!!!!!!"849K8,Q9iF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2701!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,QGM!!!!!!!
2702!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"(B@eP3fpNC5"$EfjfCA*dCA)!!!!!!!!
2703!!!!!!!!!!%!!!!"849K8,QJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
270409b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!"849K8,Q`!!!!!!!!
2705!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"'E'9i)&"bCA"bEf0PFh0[FJ!!!!!!!!!
2706!!!!!!!!!!)!!!!"849K8,R!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
270709b"3BA0MB@`J0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,R"KF`!!!!!
2708!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"3BA0MB@`J0MK,!!!!!!!!!!!!!!!
2709!!!!!!!!!!!!!!!"849K8,R"MD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
271009b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!"849K8,R"MD#XV!!!
2711!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b!f1%X!!!!!!!!!!!!!!!!
2712!!!!!!!!!!)!!!!"849K8,R"`G3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
271309b"3BA0MB@`J0MK,!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!"849K8,R)!!!!!!!!
2714!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"5CAS!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2715!!!!!!!!!!!!!!!"849K8,R0PC`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2716!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,RN!!!!!!!!
2717!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#DA0[EL"3FQ9`FQpMCA0cEh)!!!!!!!!
2718!!!!!!!!!!)!!!!"NEf0e!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2719!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!"bFh*M!!!!!!!!!!!
2720!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2721!!!!!!!!!!'!!!!"cD'aL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
2722348BJ5@e`Eh*d)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!"cG(9L!!!!!!!!!!!
2723!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"348BJ5@e`Eh*d)$Bi5`!!!!!!!!!!!!!
2724!!!!!!!!!!!!!!!!!!!!!,Q4[B`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2725!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&!!!!!!!!!!,R*cFQ-!!!!
2726!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2727!!!!!!!!!!'!!!!!!"3%"!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2728!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2729!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2730!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2731!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2732!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!!!%!!!!!"3!
2733!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2734!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2735!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2736!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2737!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2738!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2739!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2740!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2741!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2742!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2743!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
2744"!!"YB@PZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2745!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2746!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2747!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2748!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2749!!!!!!!!!!!!!!!!!!!!!!!!!!!J"!!%!!!!"!3%!!!%"!3!!!!!!!3%!!!%"!!%
2750!!!%%!!!!!!!!!!!!!!J"!!%"!!%"!!!!!3!!#3!!$%p`C@j68d`S0MKV+3!!!!!
2751!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$m
2752r2cp"8&"-!!!#!&M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2753!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2`!!!!!!!!!!!!!!!!!
2754!!!!!!!!!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2755!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2756!!!d!!3!!!!!!&9p09d955e0I4e9659p`FQ9QDAJZD!!!!!!!!!!!!!!!!!%!!!!
2757!!!!!!!%!!!!!!!!!!!!!"3%"!3!!!3%!!3!!!!!%!!!!!!!!!!!!!!!!!!!!!!%
2758!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2759!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2760!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2761!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2762!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2763!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2764!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&pIFh4KFR3!!!!!!!!
2765!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2766!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2767!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!"!!!*6@9bCf8J6h9d!!!!!!!!!!!!!!!
2768!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2d&
276938%`!!3%!!!3J)#!J!jHI8!0fhhJ$"Di3!!8#!3!"!3!"!3%!!!%!!!!!!!!!!3%
2770"!3!"!3!"!!%%!!!!!!!!!!!!!!F"!3!"!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!
2771!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&pIFh4
2772KFR3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2773!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2774!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!
2775!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2776!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2777!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2778!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2779!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2780!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"3!!"dp`C@j68d`!!!!!!!!!!!!!!!!!!!!
2781!!!!!!!!!!!!r2cmr39"36!!!"!!!!!3!!!!!3!!!@-!!!!!!!!!!!!!!!!!!!!!
2782!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2783!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6mr2cm!!!!!!!!!!J!
2784!!!)!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!8!!
2785"!!%!!3!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2786!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2787!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2788!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2789!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2790!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"3R3dp%45FJ*d4"9%%R)#G35808*`!!!!!
2791!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2792!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2793!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2794!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2795!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&!!!"!!!"Z`)
2796"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"3!!!J!!!E`#!3!!!!!!!3!
2797"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!8!!!-!!!'p!J%!!!!!!!%!!3%!!!!!!!!
2798!!!!!!!!"!!!!!!!!!!!&!!!%!!!"[J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
2799!!!!!!!!!"3!!"3!!!Em#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!8
2800!!!B!!!(!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!&!!!(!!!"`3)
2801"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"3!!#!!!!F)#!3!!!!!!!3!
2802"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!8!!!N!!!($!J%!!!!!!!%!!3%!!!!!!!!
2803!!!!!!!!"!!!!!!!!!!!&!!!+!!!"a!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
2804!!!!!!!!!"3!!#`!!!F8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!8
2805!!!`!!!('!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!&!!!0!!!"a`)
2806"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"3!!$J!!!FJ#!3!!!!!!!3!
2807"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!8!!!m!!!(*!J%!!!!!!!%!!3%!!!!!!!!
2808!!!!!!!!"!!!!!!!!!!!&!!!3!!!"bJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!
2809!!!!!!!!!"3!!%3!!!FX#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!8
2810!!")!!!(-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!&!!!6!!!"c3)
2811"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"3!!&!!!!G`#!3!!!!!!!3!
2812"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!8!!"8!!!(G!J%!!!!!!!%!!3-!!!!!!!!
2813!!!!!!!!"!!!!!!!!!!!&!!!@!!!"hJ)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!!3!
2814!!!!!!!!!"3!!&`!!!G-#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!8
2815!!"J!!!(D!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!"!!!!!!!!!!!&!!!C!!!"e3)
2816"!!!!!!!"!!%$!!!!!!!!!!!!!!!!!3!!!!!!!!!!"3!!'J!!!GB#!3!!!!!!!3!
2817"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!8!!"X!!!(A!J%!!!!!!!%!!3-!!!!!!!!
2818!!!!!!!!"!!!!!!!!!!!&!!!F!!!"e!)"!!!!!!!"!!%$!!!!!!!!!!!!!!!!!3!
2819!!!!!!!!!"3!!(3!!!GJ#!3!!!!!!!3!"!`!!!!!!!!!!!!!!!!%!!!!!!!!!!!8
2820!!"i!!!(C!J%!!!!!!!%!!3-!!!!!!!!!!!!!!!!"!!!!!!!!!!!&!!!I!!!"h`3
2821"!!!!!!!!!!%$!!!!!!!!!!!!!!!!J3!!!!!!!!!!"3!!)!!!!H!#!3!!!!!!!3!
2822"!`!!!!!!!!!!!!!!!)%!!!!!!!!!!!!!!!!!!!!"!!!!!J!!!!-!!!!%!!!!"3!
2823!!!B!!!!(!!!!#!!!!!N!!!!+!!!!#`!!!!`!!!!0!!!!$J!!!!m!!!!3!!!!%3!
2824!!")!!!!@!!!!'`!!!"J!!!!C!!!!'J!!!"`!!!!G!!!!&`!!!"-!!!!8!!!!&3!
2825!!"i!!!!I!!!!)!!!!#!&!!!!"3!!)!!!!GX!!3!F!!!!!!!!!!!!!!!!!!!!!!!
2826!!!!!!!!!"3!!!38!!!)&!!!$"3!!"!8!!!8&!!!'"3!!"`8!!!J&!!!*"3!!#J8
2827!!!X&!!!-"3!!$38!!!i&!!!2"3!!%!8!!"%&!!!5"3!!)!8!!"m&!!!6"3!!&!8
2828!!"8&!!!@"3!!(38!!"i&!!!F"3!!'!8!!"F&!!!C"3!!'J8!!"X!!J!!!!!!!!!
2829!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2830!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2831!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2832!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2833!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2834!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2835!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2836!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2837!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2838!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2839!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2840!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2841!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2842!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2843!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2844!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2845!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2846!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2847!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2848!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2849!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2850!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,#2Z!!!!!!!!!"!!,#4r!!!J!!!!!!!!!
2851!!!!#`MD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2852!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2853!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2854!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2855!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J!!!3!!!!!
2856&!!"rr`!!!!"rr`!!!!"rr`!!!!"rr`!!!!`!!3!#!!B!!!!&3!!!#!!"!!%k!!!
2857!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2858!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2859!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2860!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2861!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2862!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2863!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2864!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2865!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2866!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2867!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrm!!!!
2868$!!%!!6Sk!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2869!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2870!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2871!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2872!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2873!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2874!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2875!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2876!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2877!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2878!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!
2879!rrrrr`!!!!3!!3!"1MTTEQ0XG@4P1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2880!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2881!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2882!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2883!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2884!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2885!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2886!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2887!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2888!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2889!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2890!!!!!!!!!!!$rrrrr3!!!!J!"!!%k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2891!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2892!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2893!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2894!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2895!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2896!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2897!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2898!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2899!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2900!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2901!!!!!!!!!!!!!!!!!!!!!!2rrrrp!!!!$!!%!!6Sk1NG98dNkD@jME(9NC6S!!!!
2902!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2903!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2904!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2905!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2906!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2907!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2908!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2909!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2910!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2911!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2912!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrd!!!!3!!3!"1MSk4e9656TXD@)
2913k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2914!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2915!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2916!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2917!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2918!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2919!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2920!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2921!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2922!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2923!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!"3!#!!%k6@&
2924M6e-J8h9`F'pbG$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2925!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2926!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2927!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2928!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2929!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2930!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2931!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2932!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2933!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2934!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrp!!!!
2935'!!)!!6T08d`k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2936!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2937!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2938!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2939!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2940!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2941!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2942!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2943!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2944!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2945!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!
2946!rrrrrd!!!!F!#J!!6@&M6e-J8&"$)%aTEQYPFJ!!!!!!!!!!!!!!!!!!!!!!!!!
2947!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2948!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2949!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2950!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2951!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2952!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2953!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2954!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2955!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2956!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2957!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2958!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2959!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2960!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2961!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2962!!!!!!!!!!!!!!!!!6'PL8e0-)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2963!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2964!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2965!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2966!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2967!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%k!!!!!!!!!!!!!!!!!!!
2968!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2969!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2970!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2971!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2972!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2973!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2974!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2975!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2976!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2977!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2978!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!&0B@028b"38%-J6'PZDf9
2979b!!!!!!!!!!!!!!!!!!!!!!!H39"36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2980!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!3A"`E!!
2981!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2982!!!!!!!!!!!!!!!!!!!"J!!!!68e-3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2983!!!!!!!!!6'PL)%PYF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"-4J!
2984!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#"38%-!!!!
2985!!!!!!!!!!!!!!!!!!!!!!!!!69G$4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2986!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!8P053`!
2987!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2988!!!!!!!!!!!!!!!!!!!"J!!!!9%9B9#jLD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2989!!!!!!!!!3Q&XE'p[EL")C@a`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j
2990M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!
2991!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jM+bX!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2992!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j
2993MB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!
2994!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2995!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j
2996MF(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!
2997!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jPH(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2998!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j
2999RB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4f&YC80[C'8J3fpZGQ9bG'9
3000b!!!!!!!!!!!!!!!!!!"!!!!!9%9B9#jS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3001!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!9%9B9#j
3002X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QaPH#"3FQ9`FQpMCA0cEh)
3003!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3004!!!!!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j
3005`BA-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)&"33`!!!!!
3006!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BfJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3007!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j
3008`BfJV+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ8&"$!!!!!!!
3009!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`F(8!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3010!!!!!!!!!69FJ8'&cBf&X)&"33`!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j
3011b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8Q9k!!!!!!!!!!!!!!!!!!!
3012!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jc!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3013!!!!!!!!!8&"$3A0Y!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j
3014j!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3QPcEfiJ8(*PF(*[Bf9cFfp
3015b!!!!!!!!!!!!!!!!!!#!!!!!@%024J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3016!!!!!!!!!@%024NBJ5@e`Eh*d)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!C'pMG3!
3017!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3018!!!!!!!!!!!!!!!!!!!"J!!!!FR0bB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3019!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FfKXBJ!
3020!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#"38%-!!!!
3021!!!!!!!!!!!!!!!!!!!!!!!!!Fh4eBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3022!!!!!!!!!8%9')%PYF'pbG#"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#j
3023NEf-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3024!!!!!!!!!!!!!!!!!!!"3!!!!!!8"!3!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3025!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3026!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3027!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3028!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3029!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!
3030"!!!!!!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3031!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3032!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3033!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3034!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3035!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3036!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3037!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3038!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3039!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3040!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3041!!!!!!!!"!3!!E@&TEJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3042!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3043!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3044!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3045!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3046!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!3%"!!!!!3%"!!!"!3%!!!!!!!%
3047"!!!"!3!"!!!""!!!!!!!!!!!!!!)!3!"!3!"!3!!!!%!!!N!!aK-D@*68d`Z0MK
3048,)%CK+$KTAc4N+5j-D@)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3049!!!!!!!!r2cmr2cmr2`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3050!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$mr2cm!!!!!!!!
3051!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3052!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3053!!!!!!!!!!!!0!!%!!!!!!"9I69G&8NY6AdG98dPIF(*PCQPi,QJ!!!!!!!!!!!!
3054!!!!"!!!"!!!!!!!"!!!!!!!!!!!!!!8"!3%!!!%"!!%!!!!!"!!!!!!!!!!!!!!
3055!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3056!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3057!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3058!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3059!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3060!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3061!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"IAh0dBA*
3062d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3063!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3064!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!!#8ePFQGP)%peG!!!!!!
3065!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3066!!$mr2cp"8&"-!!%"!!!%)#!J)!1ARe!$GYpi!`@Z%!!&!J%!!3%!!3%"!!!"!!!
3067!!!!!!!%"!3%!!3%!!3!""!!!!!!!!!!!!!!(!3%!!3!!!3!!!!!!!!!!!!!!!!!
3068!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3069!!!"IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3070!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3071!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!
3072!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3073!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3074!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3075!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3076!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3077!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8!!`j-D@*68d`Z8&"$,NaTBJ!
3078!!!!!!!!!!!!!!!!!!!!!2cmr2cmr2cm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3079!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3080!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%r2cmr!!!
3081!!!!!!!)!!!!#!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3082!!!!#!&!!!3!"!!%!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3083!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3084!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3085!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3086!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3087!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8*d024%8R)#G%394"*b!R8%P
3088$9#F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3089!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3090!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3091!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3092!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!
3093!!3!!!!S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!B!!!)!!!!,!J%
3094!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!'!!!$!!!!$!)"!!!!!!!"!!%
3095"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!!"!!!!!d#!3!!!!!!!3!"!3!!!!!!!!!
3096!!!!!!!%!!!!!!!!!!!B!!!8!!!!1!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!
3097!!!!!!!!'!!!'!!!!$`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!
3098!"`!!!"!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!B!!!J!!!!4!J%
3099!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!'!!!*!!!!%J)"!!!!!!!"!!%
3100"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!!#J!!!"-#!3!!!!!!!3!"!3!!!!!!!!!
3101!!!!!!!%!!!!!!!!!!!B!!!X!!!!8!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!
3102!!!!!!!!'!!!-!!!!&3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!
3103!$3!!!"B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!B!!!i!!!!A!J%
3104!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!'!!!2!!!!'!)"!!!!!!!"!!%
3105"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!!%!!!!"N#!3!!!!!!!3!"!3!!!!!!!!!
3106!!!!!!!%!!!!!!!!!!!B!!"%!!!!D!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!
3107!!!!!!!!'!!!5!!!!'`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!
3108!%`!!!"`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!B!!"3!!!!G!J%
3109!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!'!!!9!!!!(J)"!!!!!!!"!!%
3110"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!!&J!!!"m#!3!!!!!!!3!"!3!!!!!!!!!
3111!!!!!!!%!!!!!!!!!!!B!!"F!!!!J!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!
3112!!!!!!!!'!!!B!!!!)3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!
3113!'3!!!#)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!B!!"S!!!!M!J%
3114!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!'!!!E!!!!*!)"!!!!!!!"!!%
3115"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!!(!!!!#8#!3!!!!!!!3!"!3!!!!!!!!!
3116!!!!!!!%!!!!!!!!!!!B!!"d!!!!Q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!
3117!!!!!!!!'!!!H!!!!*`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!
3118!(`!!!#J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!B!!#!!!!!T!J%
3119!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!'!!!K!!!!+J)"!!!!!!!"!!%
3120"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"J!!)J!!!#X#!3!!!!!!!3!"!3!!!!!!!!!
3121!!!!!!!%!!!!!!!!!!!B!!#-!!!!X!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!
3122!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3123!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3124!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3125!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3126!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3127!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3128!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3129!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3130!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3131!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3132!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3133!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3134!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3135!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3136!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3137!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3138!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3139!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3140!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3141!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3142!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3143!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3144!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3145!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3146!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!J!!!!-!!!!%!!!!"3!!!!B!!!!(!!!
3147!#!!!!!N!!!!+!!!!#`!!!!`!!!!0!!!!$J!!!!m!!!!3!!!!%3!!!")!!!!6!!!
3148!&!!!!"8!!!!@!!!!&`!!!"J!!!!C!!!!'J!!!"X!!!!F!!!!(3!!!"i!!!!I!!!
3149!)!!!!#%!!!!L!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3150!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3151!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!M!!!!3!B!!!!'!!!M"J!
3152!"3B!!!3'!!!$"J!!!JB!!!B'!!!,"J!!#JB!!!N'!!!)"J!!"`B!!!`'!!!5"J!
3153!%3B!!"!'!!!2"J!!$3B!!!i'!!!6"J!!)JB!!#%'!!!J"J!!(`B!!#-'!!!""J!
3154!&!B!!"8'!!!@"J!!&`B!!"J'!!!C"J!!'JB!!"X'!!!F"J!!(3B!!"i!!!'T!!%
3155!+!!!!!!$Pj@!!!!!!!!!Irm!!!%!!!"j`!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!
3156!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3157!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3158!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3159!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3160!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3161!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3162!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3163!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3164!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3165!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3166!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3167!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3168!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3169!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3170!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3171!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3172!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3173!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3174!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3175!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3176!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3177!!!!!!!!!!!!!!X)qi!!!!!!!!!%!!X*(m!!#!!!!!!!!!!!!!!,#0S!!!!!!!!!
3178!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3179!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3180!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3181!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3182!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!"!!!!!!8!!(rr!!!!!(rr!!!
3183!!(rr!!!!!(rr!!!!$!!"!!)!"J!!!!9!!!!)!!%!!6S!!!!!!!!!!!!!!!!!!!!
3184!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3185!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3186!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3187!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3188!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3189!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3190!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3191!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3192!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3193!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3194!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!rrrrr`!!!!-!!3!"1MS!!!!!!!!
3195!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3196!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3197!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3198!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3199!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3200!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3201!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3202!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3203!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3204!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3205!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!$rrrrr!!!!"!!"!!%
3206k1QPZBfaeC'8k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3207!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3208!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3209!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3210!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3211!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3212!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3213!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3214!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3215!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3216!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrp
3217!!!!#!!%!!6S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3218!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3219!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3220!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3221!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3222!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3223!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3224!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3225!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3226!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3227!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3228!!!!!rrrrrd!!!!-!!3!"1MSk4e9656TTEQ0XG@4P1J!!!!!!!!!!!!!!!!!!!!!
3229!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3230!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3231!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3232!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3233!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3234!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3235!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3236!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3237!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3238!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3239!!!!!!!!!!!!!!!$rrrrr3!!!"!!"!!%k1MT(990*1QaTBMS!!!!!!!!!!!!!!!!
3240!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3241!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3242!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3243!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3244!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3245!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3246!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3247!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3248!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3249!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3250!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrp!!!!&!!)!!6T0B@028b"6GA"`Eh*d1J!
3251!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3252!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3253!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3254!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3255!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3256!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3257!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3258!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3259!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3260!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3261!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!rrrrrd!!!!B!!J!"1Ne66$S!!!!
3262!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3263!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3264!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3265!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3266!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3267!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3268!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3269!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3270!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3271!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3272!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!$rrrrr3!!!"`!+!!"
32730B@028b"38%-J6'PZDf9b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3274!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3275!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3276!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3277!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3278!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3279!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3280!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3281!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3282!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3283!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3284!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3285!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3286!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3287!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3288!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
3289-D@*$FRP`G'mJ8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3290!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3291!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3292!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3293!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3294!!!!!!!!!!!!!!!!!!!!!!!%!!6S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3295!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3296!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3297!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3298!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3299!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3300!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3301!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3302!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3303!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3304!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3305!!!!!!!!!!!!!!!!!!!!!!!)!!8eKBdp6)&"33b"-D@jVCA)!!!!!!!!!!!!!!!!
3306!!!!!!"j"8&"-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3307!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!""F("X!!!!!!!!!!!!!!!!!!!
3308!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3309!!'!!!!"068a#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"-D@)J5@e
3310`Eh*d)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!!!"08%a'!!!!!!!!!!!!!!!!!!!
3311!!!!!!!!!!!!!!!!!!!!!!!"-D@)J5@e`Eh*d)&"33`!!!!!!!!!!!!!!!!!!!!!
3312!!!!!!!"09d0%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3313!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!"58e*$!!!!!!!!!!!!!!!!!!!
3314!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3315!!'!!!!"849K8,Q*S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#B@aXEfp
3316Z)%KPE(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,Q-!!!!!!!!!!!!!!!!
3317!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!
3318!!!!!!!"849K8,Q-V+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-
3319V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,Q0M!!!!!!!!!!!!!!!
3320!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!
3321!!!!!!!"849K8,Q0`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-
3322V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,Q0`F!!!!!!!!!!!!!!
3323!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!
3324!!!!!!!"849K8,Q9iF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3325!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,QGM!!!!!!!!!!!!!!!
3326!!!!!!!!!!!!!!!!!!!!!!!"(B@eP3fpNC5"$EfjfCA*dCA)!!!!!!!!!!!!!!!!
3327!!%!!!!"849K8,QJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-
3328V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!"849K8,Q`!!!!!!!!!!!!!!!!
3329!!!!!!!!!!!!!!!!!!!!!!!"'E'9i)&"bCA"bEf0PFh0[FJ!!!!!!!!!!!!!!!!!
3330!!)!!!!"849K8,R!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"3BA0
3331MB@`J8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,R"KF`!!!!!!!!!!!!!
3332!!!!!!!!!!!!!!!!!!!!!!!"09b"3BA0MB@`J8&"$!!!!!!!!!!!!!!!!!!!!!!!
3333!!!!!!!"849K8,R"MD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-
3334V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!"849K8,R"MD#XV!!!!!!!!!!!
3335!!!!!!!!!!!!!!!!!!!!!!!"09b"$,d-V+b"38%-!!!!!!!!!!!!!!!!!!!!!!!!
3336!!)!!!!"849K8,R"`G3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"09b"3BA0
3337MB@`J8&"$!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!"849K8,R)!!!!!!!!!!!!!!!!
3338!!!!!!!!!!!!!!!!!!!!!!!"5CAS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3339!!!!!!!"849K8,R-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"38%0"Ffd
3340!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"849K8,RN!!!!!!!!!!!!!!!!
3341!!!!!!!!!!!!!!!!!!!!!!!"#DA0[EL"3FQ9`FQpMCA0cEh)!!!!!!!!!!!!!!!!
3342!!)!!!!"B3dp'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"B3dp'4L"
3343*EA"[FR3J8&"$!!!!!!!!!!!!!!!!!!!!!!!!!!"NEf0e!!!!!!!!!!!!!!!!!!!
3344!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3345!!'!!!!"bFh*M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3346!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!"cD'aL!!!!!!!!!!!!!!!!!!!
3347!!!!!!!!!!!!!!!!!!!!!!!"348BJ5@e`Eh*d)&"33`!!!!!!!!!!!!!!!!!!!!!
3348!!!!!!!"cG(9L!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"348BJ5@e
3349`Eh*d)&"33`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,Q4[B`!!!!!!!!!!!!!
3350!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3351!!&!!!!!!"3%"!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3352!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3353!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3354!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3355!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3356!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!!!!!%!!!!!"3!!!!!!!!!
3357!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3358!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3359!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3360!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3361!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3362!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3363!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3364!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3365!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3366!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3367!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%"!!"YB@P
3368Z!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3369!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3370!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3371!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3372!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3373!!!!!!!!!!!!!!!!!!!J"!!%!!!!"!3%"!3!"!3!!!!!!!3%!!!%"!!%!!!%!!3!
3374!!!!!!!!!!!J"!!%"!!%"!!!!!3!!#3!!&deKBdp6)&4[EfaLEhJJ4%9#98FJ0MK
3375,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$mr2cp"8&"
3376-!!!"J&M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3377!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2`!!!!!!!!!!!!!!!!!!!!!!!!!
3378!!!!!!!!!!!!!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3379!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!d!!3!
3380!!!!!&9p09d955e0I4e9659p`FQ9QDAJZD!!!!!!!!!!!!!!!!!%!!!%!!!!!!!%
3381!!!!!!!!!!!!!"3%"!3!!!3%!!3!!!!!%!!!!!!!!!!!!!!!!!!!!!!%!!!!!!!!
3382!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3383!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3384!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3385!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3386!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3387!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3388!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&pIFh4KFR3!!!!!!!!!!!!!!!!
3389!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3390!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3391!!!!!!!!!!!!!!!!!!!!!!3!"!!!*6@9bCf8J6h9d!!!!!!!!!!!!!!!!!!!!!!!
3392!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2d&38%`!!3%
3393!!!3J)#!J!jHI8!0fhhJ$"Di3!!8#!3!"!3!"!3%!!!%!!!!!!!!!!3%"!3!"!3!
3394"!!%%!!!!!!!!!!!!!!F"!3!"!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3395!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&pIFh4KFR3!!!!
3396!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3397!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3398!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3399!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3400!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3401!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3402!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3403!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3404!!!!!!!!!!!!!!!!!!!!!"3!$%8aTBN0bHA"dEbj38%-Z6'PL!!!!!!!!!!!!!!!
3405!!!!r2cmr2cmr2`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3406!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3407!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6mr2cm!!!!!!!!!!J!!!!)!!J!
3408!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!8!!"!!%!!3!
3409"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3410!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3411!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3412!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3413!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3414!!!!!!!!!!!!!!!!!!!!!!"3R3dp%45FJ*d4"9%%R)#G35808*`!!!!!!!!!!!!!
3415!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3416!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3417!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3418!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3419!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(!!!"!!!!,3)"!!!!!!!
3420"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!!J!!!#i#!3!!!!!!!3!"!3!!!!!
3421!!!!!!!!!!!%!!!!!!!!!!!F!!!-!!!![!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3422"!!!!!!!!!!!(!!!%!!!!-!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3423!"`!!"3!!!$%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!!B!!!!
3424b!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!(!!!!-`)"!!!!!!!
3425"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!#!!!!$3#!3!!!!!!!3!"!3!!!!!
3426!!!!!!!!!!!%!!!!!!!!!!!F!!!N!!!!e!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3427"!!!!!!!!!!!(!!!+!!!!0J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3428!"`!!#`!!!$F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!!`!!!!
3429i!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!0!!!!13)"!!!!!!!
3430"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!$J!!!$S#!3!!!!!!!3!"!3!!!!!
3431!!!!!!!!!!!%!!!!!!!!!!!F!!!m!!!!l!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3432"!!!!!!!!!!!(!!!3!!!!2!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3433!"`!!%3!!!$d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!")!!!!
3434q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!6!!!!2`)"!!!!!!!
3435"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!&!!!!%!#!3!!!!!!!3!"!3!!!!!
3436!!!!!!!!!!!%!!!!!!!!!!!F!!"8!!!""!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3437"!!!!!!!!!!!(!!!@!!!!3J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3438!"`!!&`!!!%-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!"J!!!"
3439%!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!C!!!!43)"!!!!!!!
3440"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!'J!!!%B#!3!!!!!!!3!"!3!!!!!
3441!!!!!!!!!!!%!!!!!!!!!!!F!!"X!!!"(!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3442"!!!!!!!!!!!(!!!F!!!!5!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3443!"`!!(3!!!%N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!"i!!!"
3444+!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!I!!!!5`)"!!!!!!!
3445"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!)!!!!%`#!3!!!!!!!3!"!3!!!!!
3446!!!!!!!!!!!%!!!!!!!!!!!F!!#%!!!"0!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3447"!!!!!!!!!!!(!!!L!!!!6J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3448!"`!!)`!!!%m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!#3!!!"
34493!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!P!!!!83)"!!!!!!!
3450"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!*J!!!&)#!3!!!!!!!3!"!3!!!!!
3451!!!!!!!!!!!%!!!!!!!!!!!F!!#F!!!"6!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3452"!!!!!!!!!!!(!!!S!!!!9!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3453!"`!!+3!!!&8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!#S!!!"
3454@!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!V!!!!9`)"!!!!!!!
3455"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!,!!!!&J#!3!!!!!!!3!"!3!!!!!
3456!!!!!!!!!!!%!!!!!!!!!!!F!!#d!!!"C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3457"!!!!!!!!!!!(!!!Z!!!!@J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3458!"`!!,`!!!&X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!$!!!!"
3459F!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!a!!!!A3)"!!!!!!!
3460"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!-J!!!&i#!3!!!!!!!3!"!3!!!!!
3461!!!!!!!!!!!%!!!!!!!!!!!F!!$-!!!"I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3462"!!!!!!!!!!!(!!!d!!!!B!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3463!"`!!03!!!'%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!$B!!!"
3464L!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!h!!!!B`)"!!!!!!!
3465"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!1!!!!'3#!3!!!!!!!3!"!3!!!!!
3466!!!!!!!!!!!%!!!!!!!!!!!F!!$N!!!"P!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3467"!!!!!!!!!!!(!!!k!!!!CJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3468!"`!!1`!!!'F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!$`!!!"
3469S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!!p!!!!D3)"!!!!!!!
3470"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!2J!!!'S#!3!!!!!!!3!"!3!!!!!
3471!!!!!!!!!!!%!!!!!!!!!!!F!!$m!!!"V!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3472"!!!!!!!!!!!(!!"!!!!!E!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3473!"`!!33!!!'d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!%)!!!"
3474Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"$!!!!E`)"!!!!!!!
3475"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!4!!!!(!#!3!!!!!!!3!"!3!!!!!
3476!!!!!!!!!!!%!!!!!!!!!!!F!!%8!!!"a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3477"!!!!!!!!!!!(!!"'!!!!FJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3478!"`!!4`!!!(-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!%J!!!"
3479d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"*!!!!G3)"!!!!!!!
3480"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!5J!!!(B#!3!!!!!!!3!"!3!!!!!
3481!!!!!!!!!!!%!!!!!!!!!!!F!!%X!!!"h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3482"!!!!!!!!!!!(!!"-!!!!H!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3483!"`!!63!!!(N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!%i!!!"
3484k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"2!!!!H`)"!!!!!!!
3485"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!8!!!!(`#!3!!!!!!!3!"!3!!!!!
3486!!!!!!!!!!!%!!!!!!!!!!!F!!&%!!!"p!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3487"!!!!!!!!!!!(!!"5!!!!IJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3488!"`!!8`!!!(m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!&3!!!#
3489!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"9!!!!J3)"!!!!!!!
3490"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!9J!!!))#!3!!!!!!!3!"!3!!!!!
3491!!!!!!!!!!!%!!!!!!!!!!!F!!&F!!!#$!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3492"!!!!!!!!!!!(!!"B!!!!K!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3493!"`!!@3!!!)8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!&S!!!#
3494'!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"E!!!!K`)"!!!!!!!
3495"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!A!!!!)J#!3!!!!!!!3!"!3!!!!!
3496!!!!!!!!!!!%!!!!!!!!!!!F!!&d!!!#*!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3497"!!!!!!!!!!!(!!"H!!!!LJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
3498!"`!!A`!!!)X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!'!!!!#
3499-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"K!!!!M3)"!!!!!!!
3500"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!BJ!!!)i#!3!!!!!!!3!"!3!!!!!
3501!!!!!!!!!!!%!!!!!!!!!!!F!!'-!!!#2!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
3502"!!!!!!!!!!!(!!"N!!!!N!!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3503!!!F!!'8!!!#4!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"Q!!!
3504!NJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!C`!!!*-#!3!!!!!
3505!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!'J!!!#8!J%!!!!!!!%!!3%!!!!
3506!!!!!!!!!!!!"!!!!!!!!!!!(!!"T!!!!P3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3507!!3!!!!!!!!!!"`!!DJ!!!*B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3508!!!F!!'X!!!#A!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"X!!!
3509!Q!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!E3!!!*N#!3!!!!!
3510!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!'i!!!#D!J%!!!!!!!%!!3%!!!!
3511!!!!!!!!!!!!"!!!!!!!!!!!(!!"[!!!!Q`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3512!!3!!!!!!!!!!"`!!F!!!!*`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3513!!!F!!(%!!!#G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"b!!!
3514!RJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!F`!!!*m#!3!!!!!
3515!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!(3!!!#J!J%!!!!!!!%!!3%!!!!
3516!!!!!!!!!!!!"!!!!!!!!!!!(!!"e!!!!S3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3517!!3!!!!!!!!!!"`!!GJ!!!+)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3518!!!F!!(F!!!#M!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"i!!!
3519!T!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!H3!!!+8#!3!!!!!
3520!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!(S!!!#Q!J%!!!!!!!%!!3%!!!!
3521!!!!!!!!!!!!"!!!!!!!!!!!(!!"l!!!!T`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3522!!3!!!!!!!!!!"`!!I!!!!+J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3523!!!F!!(d!!!#T!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!"q!!!
3524!UJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!I`!!!+X#!3!!!!!
3525!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!)!!!!#X!J%!!!!!!!%!!3%!!!!
3526!!!!!!!!!!!!"!!!!!!!!!!!(!!#"!!!!V3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3527!!3!!!!!!!!!!"`!!JJ!!!+i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3528!!!F!!)-!!!#[!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#%!!!
3529!X!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!K3!!!,%#!3!!!!!
3530!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!)B!!!#b!J%!!!!!!!%!!3%!!!!
3531!!!!!!!!!!!!"!!!!!!!!!!!(!!#(!!!!X`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3532!!3!!!!!!!!!!"`!!L!!!!,3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3533!!!F!!)N!!!#e!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#+!!!
3534!YJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!L`!!!,F#!3!!!!!
3535!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!)`!!!#i!J%!!!!!!!%!!3%!!!!
3536!!!!!!!!!!!!"!!!!!!!!!!!(!!#0!!!!Z3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
3537!!3!!!!!!!!!!"`!!MJ!!!,S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
3538!!!F!!)m!!!#l!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#3!!!
3539!!,`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!*%!!!#p!J%!!!!
3540!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#5!!!![J)"!!!!!!!"!!%"!!!
3541!!!!!!!!!!!!!!3!!!!!!!!!!"`!!N`!!!,m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3542!!!%!!!!!!!!!!!F!!*3!!!$!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3543!!!!(!!#9!!!!`3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!PJ!
3544!!-)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!*F!!!$$!J%!!!!
3545!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#B!!!!a!)"!!!!!!!"!!%"!!!
3546!!!!!!!!!!!!!!3!!!!!!!!!!"`!!Q3!!!-8#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3547!!!%!!!!!!!!!!!F!!*S!!!$'!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3548!!!!(!!#E!!!!a`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!R!!
3549!!-J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!*d!!!$*!J%!!!!
3550!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#H!!!!bJ)"!!!!!!!"!!%"!!!
3551!!!!!!!!!!!!!!3!!!!!!!!!!"`!!R`!!!-X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3552!!!%!!!!!!!!!!!F!!+!!!!$-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3553!!!!(!!#K!!!!c3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!SJ!
3554!!-i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!+-!!!$2!J%!!!!
3555!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#N!!!!d!)"!!!!!!!"!!%"!!!
3556!!!!!!!!!!!!!!3!!!!!!!!!!"`!!T3!!!0%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3557!!!%!!!!!!!!!!!F!!+B!!!$5!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3558!!!!(!!#R!!!!d`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!U!!
3559!!03#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!+N!!!$9!J%!!!!
3560!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#U!!!!eJ)"!!!!!!!"!!%"!!!
3561!!!!!!!!!!!!!!3!!!!!!!!!!"`!!U`!!!0F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3562!!!%!!!!!!!!!!!F!!+`!!!$B!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3563!!!!(!!#Y!!!!f3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!VJ!
3564!!0S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!+m!!!$E!J%!!!!
3565!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#`!!!!h!)"!!!!!!!"!!%"!!!
3566!!!!!!!!!!!!!!3!!!!!!!!!!"`!!X3!!!0d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3567!!!%!!!!!!!!!!!F!!,)!!!$H!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3568!!!!(!!#c!!!!h`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!Y!!
3569!!1!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!,8!!!$K!J%!!!!
3570!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#f!!!!iJ)"!!!!!!!"!!%"!!!
3571!!!!!!!!!!!!!!3!!!!!!!!!!"`!!Y`!!!1-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3572!!!%!!!!!!!!!!!F!!,J!!!$N!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3573!!!!(!!#j!!!!j3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!ZJ!
3574!!1B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!,X!!!$R!J%!!!!
3575!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!#m!!!!k!)"!!!!!!!"!!%"!!!
3576!!!!!!!!!!!!!!3!!!!!!!!!!"`!![3!!!1N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3577!!!%!!!!!!!!!!!F!!,i!!!$U!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3578!!!!(!!#r!!!!k`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!`!!
3579!!1`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!-%!!!$Y!J%!!!!
3580!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$#!!!!lJ)"!!!!!!!"!!%"!!!
3581!!!!!!!!!!!!!!3!!!!!!!!!!"`!!``!!!1m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3582!!!%!!!!!!!!!!!F!!-3!!!$`!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3583!!!!(!!$&!!!!m3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!aJ!
3584!!2)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!-F!!!$c!J%!!!!
3585!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$)!!!!p!)"!!!!!!!"!!%"!!!
3586!!!!!!!!!!!!!!3!!!!!!!!!!"`!!b3!!!28#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3587!!!%!!!!!!!!!!!F!!-S!!!$f!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3588!!!!(!!$,!!!!p`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!c!!
3589!!2J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!-d!!!$j!J%!!!!
3590!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$1!!!!qJ)"!!!!!!!"!!%"!!!
3591!!!!!!!!!!!!!!3!!!!!!!!!!"`!!c`!!!2X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3592!!!%!!!!!!!!!!!F!!0!!!!$m!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3593!!!!(!!$4!!!!r3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!dJ!
3594!!2i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!0-!!!$r!J%!!!!
3595!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$8!!!"!!)"!!!!!!!"!!%"!!!
3596!!!!!!!!!!!!!!3!!!!!!!!!!"`!!e3!!!3%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3597!!!%!!!!!!!!!!!F!!0B!!!%#!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3598!!!!(!!$A!!!"!`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!f!!
3599!!33#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!0N!!!%&!J%!!!!
3600!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$D!!!""J)"!!!!!!!"!!%"!!!
3601!!!!!!!!!!!!!!3!!!!!!!!!!"`!!f`!!!3F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3602!!!%!!!!!!!!!!!F!!0`!!!%)!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3603!!!!(!!$G!!!"#3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!hJ!
3604!!3S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!0m!!!%,!J%!!!!
3605!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$J!!!"$!)"!!!!!!!"!!%"!!!
3606!!!!!!!!!!!!!!3!!!!!!!!!!"`!!i3!!!3d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3607!!!%!!!!!!!!!!!F!!1)!!!%1!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3608!!!!(!!$M!!!"$`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!j!!
3609!!4!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!18!!!%4!J%!!!!
3610!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$Q!!!"%J)"!!!!!!!"!!%"!!!
3611!!!!!!!!!!!!!!3!!!!!!!!!!"`!!j`!!!4-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3612!!!%!!!!!!!!!!!F!!1J!!!%8!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3613!!!!(!!$T!!!"&3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!kJ!
3614!!4B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!1X!!!%A!J%!!!!
3615!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$X!!!"'!)"!!!!!!!"!!%"!!!
3616!!!!!!!!!!!!!!3!!!!!!!!!!"`!!l3!!!4N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3617!!!%!!!!!!!!!!!F!!1i!!!%D!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3618!!!!(!!$[!!!"'`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!m!!
3619!!4`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!2%!!!%G!J%!!!!
3620!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$b!!!"(J)"!!!!!!!"!!%"!!!
3621!!!!!!!!!!!!!!3!!!!!!!!!!"`!!m`!!!4m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3622!!!%!!!!!!!!!!!F!!23!!!%J!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3623!!!!(!!$e!!!")3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!pJ!
3624!!5)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!2F!!!%M!J%!!!!
3625!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$i!!!"*!)"!!!!!!!"!!%"!!!
3626!!!!!!!!!!!!!!3!!!!!!!!!!"`!!q3!!!58#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3627!!!%!!!!!!!!!!!F!!2S!!!%Q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3628!!!!(!!$l!!!"*`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!!r!!
3629!!5J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!2d!!!%T!J%!!!!
3630!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!$q!!!"+J)"!!!!!!!"!!%"!!!
3631!!!!!!!!!!!!!!3!!!!!!!!!!"`!!r`!!!5X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3632!!!%!!!!!!!!!!!F!!3!!!!%X!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3633!!!!(!!%"!!!",3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"!J!
3634!!5i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!3-!!!%[!J%!!!!
3635!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%%!!!"-!)"!!!!!!!"!!%"!!!
3636!!!!!!!!!!!!!!3!!!!!!!!!!"`!""3!!!6%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3637!!!%!!!!!!!!!!!F!!3B!!!%b!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3638!!!!(!!%(!!!"-`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"#!!
3639!!63#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!3N!!!%e!J%!!!!
3640!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%+!!!"0J)"!!!!!!!"!!%"!!!
3641!!!!!!!!!!!!!!3!!!!!!!!!!"`!"#`!!!6F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3642!!!%!!!!!!!!!!!F!!3`!!!%i!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3643!!!!(!!%0!!!"13)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"$J!
3644!!6S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!3m!!!%l!J%!!!!
3645!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%3!!!"2!)"!!!!!!!"!!%"!!!
3646!!!!!!!!!!!!!!3!!!!!!!!!!"`!"%3!!!6d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3647!!!%!!!!!!!!!!!F!!4)!!!%q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3648!!!!(!!%6!!!"2`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"&!!
3649!!8!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!48!!!&"!J%!!!!
3650!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%@!!!"3J)"!!!!!!!"!!%"!!!
3651!!!!!!!!!!!!!!3!!!!!!!!!!"`!"&`!!!8-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3652!!!%!!!!!!!!!!!F!!4J!!!&%!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3653!!!!(!!%C!!!"43)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"'J!
3654!!8B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!4X!!!&(!J%!!!!
3655!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%F!!!"5!)"!!!!!!!"!!%"!!!
3656!!!!!!!!!!!!!!3!!!!!!!!!!"`!"(3!!!8N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3657!!!%!!!!!!!!!!!F!!4i!!!&+!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3658!!!!(!!%I!!!"5`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!")!!
3659!!8`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!5%!!!&0!J%!!!!
3660!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%L!!!"6J)"!!!!!!!"!!%"!!!
3661!!!!!!!!!!!!!!3!!!!!!!!!!"`!")`!!!8m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3662!!!%!!!!!!!!!!!F!!53!!!&3!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3663!!!!(!!%P!!!"83)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"*J!
3664!!9)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!5F!!!&6!J%!!!!
3665!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%S!!!"9!)"!!!!!!!"!!%"!!!
3666!!!!!!!!!!!!!!3!!!!!!!!!!"`!"+3!!!98#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3667!!!%!!!!!!!!!!!F!!5S!!!&@!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3668!!!!(!!%V!!!"9`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!",!!
3669!!9J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!5d!!!&C!J%!!!!
3670!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%Z!!!"@J)"!!!!!!!"!!%"!!!
3671!!!!!!!!!!!!!!3!!!!!!!!!!"`!",`!!!9X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3672!!!%!!!!!!!!!!!F!!6!!!!&F!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3673!!!!(!!%a!!!"A3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"-J!
3674!!9i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!6-!!!&I!J%!!!!
3675!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%d!!!"B!)"!!!!!!!"!!%"!!!
3676!!!!!!!!!!!!!!3!!!!!!!!!!"`!"03!!!@%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3677!!!%!!!!!!!!!!!F!!6B!!!&L!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3678!!!!(!!%h!!!"B`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"1!!
3679!!@3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!6N!!!&P!J%!!!!
3680!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!%k!!!"CJ)"!!!!!!!"!!%"!!!
3681!!!!!!!!!!!!!!3!!!!!!!!!!"`!"1`!!!@F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3682!!!%!!!!!!!!!!!F!!6`!!!&S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3683!!!!(!!%p!!!"D3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"2J!
3684!!@S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!6m!!!&V!J%!!!!
3685!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&!!!!"E!)"!!!!!!!"!!%"!!!
3686!!!!!!!!!!!!!!3!!!!!!!!!!"`!"33!!!@d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3687!!!%!!!!!!!!!!!F!!8)!!!&Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3688!!!!(!!&$!!!"E`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"4!!
3689!!A!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!88!!!&a!J%!!!!
3690!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&'!!!"FJ)"!!!!!!!"!!%"!!!
3691!!!!!!!!!!!!!!3!!!!!!!!!!"`!"4`!!!A-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3692!!!%!!!!!!!!!!!F!!8J!!!&d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3693!!!!(!!&*!!!"G3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"5J!
3694!!AB#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!8X!!!&h!J%!!!!
3695!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&-!!!"H!)"!!!!!!!"!!%"!!!
3696!!!!!!!!!!!!!!3!!!!!!!!!!"`!"63!!!AN#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3697!!!%!!!!!!!!!!!F!!8i!!!&k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3698!!!!(!!&2!!!"H`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"8!!
3699!!A`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!9%!!!&p!J%!!!!
3700!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&5!!!"IJ)"!!!!!!!"!!%"!!!
3701!!!!!!!!!!!!!!3!!!!!!!!!!"`!"8`!!!B!#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3702!!!%!!!!!!!!!!!F!!93!!!'"!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3703!!!!(!!&9!!!"JJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"9J!
3704!!B-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!9F!!!'%!J%!!!!
3705!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&B!!!"K3)"!!!!!!!"!!%"!!!
3706!!!!!!!!!!!!!!3!!!!!!!!!!"`!"@3!!!BB#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3707!!!%!!!!!!!!!!!F!!9S!!!'(!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3708!!!!(!!&E!!!"L!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"A!!
3709!!BN#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!9d!!!'+!J%!!!!
3710!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&H!!!"L`)"!!!!!!!"!!%"!!!
3711!!!!!!!!!!!!!!3!!!!!!!!!!"`!"A`!!!B`#!3!!!!!!!3!"!3!!!!!!!!!!!!!
3712!!!%!!!!!!!!!!!F!!@!!!!'0!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
3713!!!!(!!&K!!!"MJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"BJ!
3714!!Bm#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!@-!!!'3!!)"!!!
3715!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"C!!!!C%#!3!!!!!!!3!"!3!
3716!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!@8!!!'5!J%!!!!!!!%!!3%!!!!!!!!!!!!
3717!!!!"!!!!!!!!!!!(!!&Q!!!"N`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
3718!!!!!"`!"C`!!!C3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!@J
3719!!!'9!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&T!!!"PJ)"!!!
3720!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"DJ!!!CF#!3!!!!!!!3!"!3!
3721!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!@X!!!'B!J%!!!!!!!%!!3%!!!!!!!!!!!!
3722!!!!"!!!!!!!!!!!(!!&X!!!"Q3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
3723!!!!!"`!"E3!!!CS#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!@i
3724!!!'E!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&[!!!"R!)"!!!
3725!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!"`!"F!!!!Cd#!3!!!!!!!3!"!3!
3726!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!A%!!!'H!J%!!!!!!!%!!3%!!!!!!!!!!!!
3727!!!!"!!!!!!!!!!!(!!&b!!!"R`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
3728!!!!!"`!"F`!!!D3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!F!!A3
3729!!!'Q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!(!!&e!!!"T`)"!!!
3730!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3731!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3732!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3733!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3734!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3735!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3736!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3737!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3738!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3739!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!)
3740!!!!$!!!!"!!!!!8!!!!'!!!!"`!!!!J!!!!*!!!!#J!!!!X!!!!-!!!!$3!!!!i
3741!!!!2!!!!%!!!!"%!!!!5!!!!%`!!!"3!!!!9!!!!&J!!!"F!!!!B!!!!'3!!!"S
3742!!!!E!!!!(!!!!"d!!!!H!!!!(`!!!#!!!!!K!!!!)J!!!#-!!!!N!!!!*3!!!#B
3743!!!!R!!!!+!!!!#N!!!!U!!!!+`!!!#`!!!!Y!!!!,J!!!#m!!!!`!!!!-3!!!$)
3744!!!!c!!!!0!!!!$8!!!!f!!!!0`!!!$J!!!!j!!!!1J!!!$X!!!!m!!!!23!!!$i
3745!!!!r!!!!3!!!!%%!!!"#!!!!3`!!!%3!!!"&!!!!4J!!!%F!!!")!!!!53!!!%S
3746!!!",!!!!6!!!!%d!!!"1!!!!6`!!!&!!!!"4!!!!8J!!!&-!!!"8!!!!93!!!&B
3747!!!"A!!!!@!!!!&N!!!"D!!!!@`!!!&`!!!"G!!!!AJ!!!&m!!!"J!!!!B3!!!')
3748!!!"M!!!!C!!!!'8!!!"Q!!!!C`!!!'J!!!"T!!!!DJ!!!'X!!!"X!!!!E3!!!'i
3749!!!"[!!!!F!!!!(%!!!"b!!!!F`!!!(3!!!"e!!!!GJ!!!(F!!!"i!!!!H3!!!(S
3750!!!"l!!!!I!!!!(d!!!"q!!!!I`!!!)!!!!#"!!!!JJ!!!)-!!!#%!!!!K3!!!)B
3751!!!#(!!!!L!!!!)N!!!#+!!!!L`!!!)`!!!#0!!!!MJ!!!)m!!!#3!!!!!*%!!!#
37525!!!!N`!!!*3!!!#9!!!!PJ!!!*F!!!#B!!!!Q3!!!*S!!!#E!!!!R!!!!*d!!!#
3753H!!!!R`!!!+!!!!#K!!!!SJ!!!+-!!!#N!!!!T3!!!+B!!!#R!!!!U!!!!+N!!!#
3754U!!!!U`!!!+`!!!#Y!!!!VJ!!!+m!!!#`!!!!X3!!!,)!!!#c!!!!Y!!!!,8!!!#
3755f!!!!Y`!!!,J!!!#j!!!!ZJ!!!,X!!!#m!!!![3!!!,i!!!#r!!!!`!!!!-%!!!$
3756#!!!!``!!!-3!!!$&!!!!aJ!!!-F!!!$)!!!!b3!!!-S!!!$,!!!!c!!!!-d!!!$
37571!!!!c`!!!0!!!!$4!!!!dJ!!!0-!!!$8!!!!e3!!!0B!!!$A!!!!f!!!!0N!!!$
3758D!!!!f`!!!0`!!!$G!!!!hJ!!!0m!!!$J!!!!i3!!!1)!!!$M!!!!j!!!!18!!!$
3759Q!!!!j`!!!1J!!!$T!!!!kJ!!!1X!!!$X!!!!l3!!!1i!!!$[!!!!m!!!!2%!!!$
3760b!!!!m`!!!23!!!$e!!!!pJ!!!2F!!!$i!!!!q3!!!2S!!!$l!!!!r!!!!2d!!!$
3761q!!!!r`!!!3!!!!%"!!!"!J!!!3-!!!%%!!!""3!!!3B!!!%(!!!"#!!!!3N!!!%
3762+!!!"#`!!!3`!!!%0!!!"$J!!!3m!!!%3!!!"%3!!!4)!!!%6!!!"&!!!!48!!!%
3763@!!!"&`!!!4J!!!%C!!!"'J!!!4X!!!%F!!!"(3!!!4i!!!%I!!!")!!!!5%!!!%
3764L!!!")`!!!53!!!%P!!!"*J!!!5F!!!%S!!!"+3!!!5S!!!%V!!!",!!!!5d!!!%
3765Z!!!",`!!!6!!!!%a!!!"-J!!!6-!!!%d!!!"03!!!6B!!!%h!!!"1!!!!6N!!!%
3766k!!!"1`!!!6`!!!%p!!!"2J!!!6m!!!&!!!!"33!!!8)!!!&$!!!"4!!!!88!!!&
3767'!!!"4`!!!8J!!!&*!!!"5J!!!8X!!!&-!!!"63!!!8i!!!&2!!!"8!!!!9%!!!&
37685!!!"8`!!!93!!!&9!!!"9J!!!9F!!!&B!!!"@3!!!9S!!!&E!!!"A!!!!9d!!!&
3769H!!!"A`!!!@!!!!&K!!!"BJ!!!@-!!!&N!!!"C3!!!@B!!!&R!!!"D!!!!@N!!!&
3770U!!!"D`!!!@`!!!&Y!!!"EJ!!!@m!!!&`!!!"F3!!!A)!!!&c!!!"G!!!!!!!!!!
3771!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"G3!!!B!(!!!
3772!"`!"G3F!!!%(!!!#"`!!!`F!!!3(!!!&"`!!"JF!!!F(!!!)"`!!#3F!!!S(!!!
3773,"`!!$!F!!!d(!!!1"`!!$`F!!"!(!!!4"`!!%JF!!"-(!!!8"`!!&3F!!"B(!!!
3774A"`!!'!F!!"N(!!!D"`!!'`F!!"`(!!!G"`!!(JF!!"m(!!!J"`!!)3F!!#)(!!!
3775M"`!!*!F!!#8(!!!Q"`!!*`F!!#J(!!!T"`!!+JF!!#X(!!!X"`!!,3F!!#i(!!!
3776["`!!-!F!!$%(!!!b"`!!-`F!!$3(!!!e"`!!0JF!!$F(!!!i"`!!13F!!$S(!!!
3777l"`!!2!F!!$d(!!!q"`!!2`F!!%!(!!"""`!!3JF!!%-(!!"%"`!!43F!!%B(!!"
3778("`!!5!F!!%N(!!"+"`!!5`F!!%`(!!"0"`!!6JF!!%m(!!"3"`!!83F!!&)(!!"
37796"`!!9!F!!&8(!!"@"`!!9`F!!&J(!!"C"`!!@JF!!&X(!!"F"`!!A3F!!&i(!!"
3780I"`!!B!F!!'%(!!"L"`!"G!F!!'-(!!"N"`!!C3F!!'B(!!"R"`!!D!F!!'N(!!"
3781U"`!!D`F!!'`(!!"Y"`!!EJF!!'m(!!"`"`!!F3F!!()(!!"c"`!!G!F!!(8(!!"
3782f"`!!G`F!!(J(!!"j"`!!HJF!!(X(!!"m"`!!I3F!!(i(!!"r"`!!J!F!!)%(!!#
3783#"`!!J`F!!)3(!!#&"`!!KJF!!)F(!!#)"`!!L3F!!)S(!!#,"`!!M!F!!)d(!!#
37841"`!!M`F!!*!!"`!!N3F!!*)(!!#6"`!!P!F!!*8(!!#@"`!!P`F!!*J(!!#C"`!
3785!QJF!!*X(!!#F"`!!R3F!!*i(!!#I"`!!S!F!!+%(!!#L"`!!S`F!!+3(!!#P"`!
3786!TJF!!+F(!!#S"`!!U3F!!+S(!!#V"`!!V!F!!+d(!!#Z"`!!V`F!!,!(!!#a"`!
3787!XJF!!,-(!!#d"`!!Y3F!!,B(!!#h"`!!Z!F!!,N(!!#k"`!!Z`F!!,`(!!#p"`!
3788![JF!!,m(!!$!"`!!`3F!!-)(!!$$"`!!a!F!!-8(!!$'"`!!a`F!!-J(!!$*"`!
3789!bJF!!-X(!!$-"`!!c3F!!-i(!!$2"`!!d!F!!0%(!!$5"`!!d`F!!03(!!$9"`!
3790!eJF!!0F(!!$B"`!!f3F!!0S(!!$E"`!!h!F!!0d(!!$H"`!!h`F!!1!(!!$K"`!
3791!iJF!!1-(!!$N"`!!j3F!!1B(!!$R"`!!k!F!!1N(!!$U"`!!k`F!!1`(!!$Y"`!
3792!lJF!!1m(!!$`"`!!m3F!!2)(!!$c"`!!p!F!!28(!!$f"`!!p`F!!2J(!!$j"`!
3793!qJF!!2X(!!$m"`!!r3F!!2i(!!$r"`!"!!F!!3%(!!%#"`!"!`F!!33(!!%&"`!
3794""JF!!3F(!!%)"`!"#3F!!3S(!!&e"`!"#`F!!3`(!!%0"`!"$JF!!3m(!!%3"`!
3795"%3F!!4)(!!%6"`!"&!F!!48(!!%@"`!"&`F!!4J(!!%C"`!"'JF!!4X(!!%F"`!
3796"(3F!!4i(!!%I"`!")!F!!5%(!!%L"`!")`F!!53(!!%P"`!"*JF!!5F(!!%S"`!
3797"+3F!!5S(!!%V"`!",!F!!5d(!!%Z"`!",`F!!6!(!!%a"`!"-JF!!6-(!!%d"`!
3798"03F!!6B(!!%h"`!"1!F!!6N(!!%k"`!"1`F!!6`(!!%p"`!"2JF!!6m(!!&!"`!
3799"33F!!8)(!!&$"`!"4!F!!88(!!&'"`!"4`F!!8J(!!&*"`!"5JF!!8X(!!&-"`!
3800"63F!!8i(!!&2"`!"8!F!!9%(!!&5"`!"8`F!!93(!!&9"`!"9JF!!9F(!!&B"`!
3801"@3F!!9S(!!&E"`!"A!F!!9d(!!&H"`!"A`F!!@!(!!&K"`!"BJF!!@-(!!&N"`!
3802"C3F!!@B(!!&R"`!"D!F!!@N(!!&U"`!"D`F!!@`(!!&Y"`!"EJF!!@m(!!&`"`!
3803"F3F!!A)(!!&c!!!"U3!"!#J!!!!!!jH9J!!!!!!!!(rr!!!"!!!!HF!!!J!!!!!
3804!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3805!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3806!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3807!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3808!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3809!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3810!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3811!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3812!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3813!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3814!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3815!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3816!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3817!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3818!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3819!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3820!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3821!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3822!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3823!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3824!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3825!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,#2Z!!!!!!!!!"!!,#4r!!!J!!!!!
3826!!!!!!!!#`MD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3827!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3828!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3829!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3830!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J!!!3!
3831!!!!&!!"rr`!!!!"rr`!!!!"rr`!!!!"rr`!!!!`!!3!#!!B!!!!&3!!!#!!"!!%
3832k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3833!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3834!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3835!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3836!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3837!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3838!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3839!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3840!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3841!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3842!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrm
3843!!!!$!!%!!6Sk!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3844!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3845!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3846!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3847!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3848!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3849!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3850!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3851!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3852!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3853!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3854"!!!!rrrrr`!!!!3!!3!"1MTTEQ0XG@4P1J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3855!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3856!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3857!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3858!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3859!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3860!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3861!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3862!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3863!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3864!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3865!!!!!!!!!!!!!!!$rrrrr3!!!!J!"!!%k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3866!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3867!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3868!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3869!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3870!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3871!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3872!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3873!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3874!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3875!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3876!!!!!!!!!!!!!!!!!!!!!!!!!!2rrrrp!!!!$!!%!!6Sk1NG98dNkD@jME(9NC6S
3877!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3878!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3879!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3880!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3881!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3882!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3883!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3884!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3885!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3886!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3887!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!rrrrrd!!!!3!!3!"1MSk4e9656T
3888XD@)k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3889!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3890!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3891!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3892!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3893!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3894!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3895!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3896!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3897!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3898!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrrrr3!!!"3!#!!%
3899k6@&M6e-J8h9`F'pbG$S!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3900!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3901!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3902!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3903!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3904!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3905!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3906!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3907!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3908!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3909!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!2rrrrp
3910!!!!'!!)!!6T08d`k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3911!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3912!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3913!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3914!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3915!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3916!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3917!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3918!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3919!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3920!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3921"!!!!rrrrrd!!!!F!#J!!6@&M6e-J0MK,)%aTEQYPFJ!!!!!!!!!!!!!!!!!!!!!
3922!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3923!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3924!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3925!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3926!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3927!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3928!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3929!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3930!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3931!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3932!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3933!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3934!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3935!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3936!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3937!!!!!!!!!!!!!!!!!!!!!6'PL3h*jF(4[)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!
3938!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3939!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3940!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3941!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3942!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%k!!!!!!!!!!!!!!!
3943!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3944!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3945!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3946!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3947!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3948!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3949!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3950!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3951!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3952!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3953!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!&0B@028b!f1%XJ6'P
3954ZDf9b!!!!!!!!!!!!!!!!!!!!!!!J39"36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3955!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!3A"
3956`E!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3957!!!!!!!!!!!!!!!!!!!!!!!"J!!!!68e-3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3958!!!!!!!!!!!!!6'PL)%PYF'pbG#!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"
3959-4J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6'PL)%PYF'pbG#!f1%X
3960!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69G$4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3961!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!6d*
3962+)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69"A)%PYF'pbG#!f1%X
3963!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%a[BJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3964!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!8P0
396553`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3966!!!!!!!!!!!!!!!!!!!!!!!"J!!!!9%9B9#jLD!!!!!!!!!!!!!!!!!!!!!!!!!!
3967!!!!!!!!!!!!!3Q&XE'p[EL")C@a`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
3968B9#jM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
3969!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jM+bX!!!!!!!!!!!!!!!!!!!!!!!!
3970!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
3971B9#jMB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
3972!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jMF!!!!!!!!!!!!!!!!!!!!!!!!!!
3973!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
3974B9#jMF(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
3975!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jPH(!!!!!!!!!!!!!!!!!!!!!!!!!
3976!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
3977B9#jRB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4f&YC80[C'8J3fpZGQ9
3978bG'9b!!!!!!!!!!!!!!!!!!"!!!!!9%9B9#jS!!!!!!!!!!!!!!!!!!!!!!!!!!!
3979!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!!3!!!!9%9
3980B9#jX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4QaPH#"3FQ9`FQpMCA0
3981cEh)!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`!!!!!!!!!!!!!!!!!!!!!!!!!!!
3982!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
3983B9#j`BA-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!
3984!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#j`BfJ!!!!!!!!!!!!!!!!!!!!!!!!
3985!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9
3986B9#j`BfJV+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!69FJ3bp$+bXJ0MK,!!!
3987!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9B9#j`F(8!!!!!!!!!!!!!!!!!!!!!!!!
3988!!!!!!!!!!!!!69FJ8'&cBf&X)$Bi5`!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!9%9
3989B9#jb!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8Q9k!!!!!!!!!!!!!!!
3990!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9B9#jcC@F!!!!!!!!!!!!!!!!!!!!!!!!
3991!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9%9
3992B9#jj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3QPcEfiJ8(*PF(*[Bf9
3993cFfpb!!!!!!!!!!!!!!!!!!#!!!!!C'pMG3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3994!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FR0
3995bB`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3996!!!!!!!!!!!!!!!!!!!!!!!"J!!!!FfKXBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3997!!!!!!!!!!!!!8%9')%PYF'pbG#!f1%X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Fh4
3998eBJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8%9')%PYF'pbG#!f1%X
3999!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#jNEf-!!!!!!!!!!!!!!!!!!!!!!!!
4000!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"3!!!!!!!
4001!!#jbFh*M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4002!!!!!!!!!!!!!!!!!!!!!!!"J!!!!!!8"!3!"!!!!!!!!!!!!!!!!!!!!!!!!!!!
4003!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4004!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4005!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4006!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4007!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J!
4008!!!!"!!!!!!8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4009!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4010!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4011!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4012!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4013!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4014!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4015!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4016!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4017!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4018!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4019!!!!!!!!!!!!"!3!!E@&TEJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4020!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4021!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4022!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4023!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4024!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!3!"!!!!!3%"!!!"!3%!!!!
4025!!!%"!!!"!3!"!!!""!!!!!!!!!!!!!!)!3!"!3!"!3!!!!%!!!N!!aY-D@*$FRP
4026`G'mZ0MKV)%CK+$4TAcKN+5j-D@)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4027!!!!!!!!!!!!r2cmr2cmr2`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4028!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$mr2cm!!!!
4029!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4030!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4031!!!!!!!!!!!!!!!!0!!%!!!!!!"9I69G&8NY6AdG98dPIF(*PCQPi,QJ!!!!!!!!
4032!!!!!!!!"!!!!!!!!!!!"!!!!!!!!!!!!!!8"!3%!!!%"!!%!!!!!"!!!!!!!!!!
4033!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4034!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4035!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4036!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4037!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4038!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4039!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"IAh0
4040dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4041!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4042!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!!#8ePFQGP)%peG!!
4043!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4044!!!!!!$mr2cp"8&"-!!%"!!!%)#!J)!1ARe!$GYpi!`@Z%!!&!J%!!3%!!3%"!!!
4045"!!!!!!!!!!%"!3%!!3%!!3!""!!!!!!!!!!!!!!(!3%!!3!!!3!!!!!!!!!!!!!
4046!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4047!!!!!!!"IAh0dBA*d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4048!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4049!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!
4050!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4051!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4052!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4053!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4054!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4055!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8!!!G2F'9Z8e0-!!!!!!!
4056!!!!!!!!!!!!!!!!!!!!!!!!!2cmr2d&38%`!!!3!!!!%!!!!!%!!!&M!!!!!!!!
4057!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4058!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%r2cm
4059r!!!!!!!!!!)!!!!#!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4060!!!!!!!!#!&!!!3!"!!%!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4061!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4062!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4063!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4064!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4065!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8*d024%8R)#G%394"*b!
4066R8%P$9#F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4067!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4068!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4069!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4070!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4071!#!!!!3!!!#d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!!)!!!!
4072Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!$!!!!,`)"!!!!!!!
4073"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!"!!!!$!#!3!!!!!!!3!"!3!!!!!
4074!!!!!!!!!!!%!!!!!!!!!!!J!!!8!!!!a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4075"!!!!!!!!!!!)!!!'!!!!-J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4076!#!!!"`!!!$-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!!J!!!!
4077d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!*!!!!03)"!!!!!!!
4078"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!#J!!!$B#!3!!!!!!!3!"!3!!!!!
4079!!!!!!!!!!!%!!!!!!!!!!!J!!!X!!!!h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4080"!!!!!!!!!!!)!!!-!!!!1!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4081!#!!!$3!!!$N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!!i!!!!
4082k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!2!!!!1`)"!!!!!!!
4083"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!%!!!!$`#!3!!!!!!!3!"!3!!!!!
4084!!!!!!!!!!!%!!!!!!!!!!!J!!"%!!!!p!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4085"!!!!!!!!!!!)!!!5!!!!2J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4086!#!!!%`!!!$m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!"3!!!"
4087!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!9!!!!33)"!!!!!!!
4088"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!&J!!!%)#!3!!!!!!!3!"!3!!!!!
4089!!!!!!!!!!!%!!!!!!!!!!!J!!"F!!!"$!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4090"!!!!!!!!!!!)!!!B!!!!4!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4091!#!!!'3!!!%8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!"S!!!"
4092'!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!E!!!!4`)"!!!!!!!
4093"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!(!!!!%J#!3!!!!!!!3!"!3!!!!!
4094!!!!!!!!!!!%!!!!!!!!!!!J!!"d!!!"*!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4095"!!!!!!!!!!!)!!!H!!!!5J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4096!#!!!(`!!!%X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!#!!!!"
4097-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!K!!!!63)"!!!!!!!
4098"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!)J!!!%i#!3!!!!!!!3!"!3!!!!!
4099!!!!!!!!!!!%!!!!!!!!!!!J!!#-!!!"2!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4100"!!!!!!!!!!!)!!!N!!!!8!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4101!#!!!*3!!!&%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!#B!!!"
41025!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!R!!!!8`)"!!!!!!!
4103"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!+!!!!&3#!3!!!!!!!3!"!3!!!!!
4104!!!!!!!!!!!%!!!!!!!!!!!J!!#N!!!"9!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4105"!!!!!!!!!!!)!!!U!!!!9J)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4106!#!!!+`!!!&F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!#`!!!"
4107B!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!Y!!!!@3)"!!!!!!!
4108"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!,J!!!&S#!3!!!!!!!3!"!3!!!!!
4109!!!!!!!!!!!%!!!!!!!!!!!J!!#m!!!"E!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4110"!!!!!!!!!!!)!!!`!!!!A!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4111!#!!!-3!!!&d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!$)!!!"
4112H!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!c!!!!A`)"!!!!!!!
4113"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!0!!!!'!#!3!!!!!!!3!"!3!!!!!
4114!!!!!!!!!!!%!!!!!!!!!!!J!!$8!!!"K!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4115"!!!!!!!!!!!)!!!f!!!!BJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4116!#!!!0`!!!'-#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!$J!!!"
4117N!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!j!!!!C3)"!!!!!!!
4118"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!1J!!!'B#!3!!!!!!!3!"!3!!!!!
4119!!!!!!!!!!!%!!!!!!!!!!!J!!$X!!!"R!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4120"!!!!!!!!!!!)!!!m!!!!D!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4121!#!!!23!!!'N#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!$i!!!"
4122U!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!!r!!!!D`)"!!!!!!!
4123"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!3!!!!'`#!3!!!!!!!3!"!3!!!!!
4124!!!!!!!!!!!%!!!!!!!!!!!J!!%%!!!"Y!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4125"!!!!!!!!!!!)!!"#!!!!EJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4126!#!!!3`!!!'m#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!%3!!!"
4127`!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"&!!!!F3)"!!!!!!!
4128"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!4J!!!()#!3!!!!!!!3!"!3!!!!!
4129!!!!!!!!!!!%!!!!!!!!!!!J!!%F!!!"c!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4130"!!!!!!!!!!!)!!")!!!!G!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4131!#!!!53!!!(8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!%S!!!"
4132f!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!",!!!!G`)"!!!!!!!
4133"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!6!!!!(J#!3!!!!!!!3!"!3!!!!!
4134!!!!!!!!!!!%!!!!!!!!!!!J!!%d!!!"j!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4135"!!!!!!!!!!!)!!"1!!!!HJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4136!#!!!6`!!!(X#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!&!!!!"
4137m!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"4!!!!I3)"!!!!!!!
4138"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!8J!!!(i#!3!!!!!!!3!"!3!!!!!
4139!!!!!!!!!!!%!!!!!!!!!!!J!!&-!!!"r!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4140"!!!!!!!!!!!)!!"8!!!!J!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4141!#!!!93!!!)%#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!&B!!!#
4142#!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"A!!!!J`)"!!!!!!!
4143"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!@!!!!)3#!3!!!!!!!3!"!3!!!!!
4144!!!!!!!!!!!%!!!!!!!!!!!J!!&N!!!#&!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4145"!!!!!!!!!!!)!!"D!!!!KJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4146!#!!!@`!!!)F#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!&`!!!#
4147)!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"G!!!!L3)"!!!!!!!
4148"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!AJ!!!)S#!3!!!!!!!3!"!3!!!!!
4149!!!!!!!!!!!%!!!!!!!!!!!J!!&m!!!#,!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!
4150"!!!!!!!!!!!)!!"J!!!!M!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!
4151!#!!!B3!!!)d#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!')!!!#
41521!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"M!!!!M`)"!!!!!!!
4153"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!C!!!!*!!!J%!!!!!!!%!!3%!!!!
4154!!!!!!!!!!!!"!!!!!!!!!!!)!!"P!!!!N3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4155!!3!!!!!!!!!!#!!!CJ!!!*)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4156!!!J!!'F!!!#6!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"S!!!
4157!P!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!D3!!!*8#!3!!!!!
4158!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!'S!!!#@!J%!!!!!!!%!!3%!!!!
4159!!!!!!!!!!!!"!!!!!!!!!!!)!!"V!!!!P`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4160!!3!!!!!!!!!!#!!!E!!!!*J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4161!!!J!!'d!!!#C!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"Z!!!
4162!QJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!E`!!!*X#!3!!!!!
4163!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!(!!!!#F!J%!!!!!!!%!!3%!!!!
4164!!!!!!!!!!!!"!!!!!!!!!!!)!!"a!!!!R3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4165!!3!!!!!!!!!!#!!!FJ!!!*i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4166!!!J!!(-!!!#I!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"d!!!
4167!S!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!G3!!!+%#!3!!!!!
4168!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!(B!!!#L!J%!!!!!!!%!!3%!!!!
4169!!!!!!!!!!!!"!!!!!!!!!!!)!!"h!!!!S`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4170!!3!!!!!!!!!!#!!!H!!!!+3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4171!!!J!!(N!!!#P!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!"k!!!
4172!TJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!H`!!!+F#!3!!!!!
4173!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!(`!!!#S!J%!!!!!!!%!!3%!!!!
4174!!!!!!!!!!!!"!!!!!!!!!!!)!!"p!!!!U3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4175!!3!!!!!!!!!!#!!!IJ!!!+S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4176!!!J!!(m!!!#V!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#!!!!
4177!V!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!J3!!!+d#!3!!!!!
4178!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!))!!!#Z!J%!!!!!!!%!!3%!!!!
4179!!!!!!!!!!!!"!!!!!!!!!!!)!!#$!!!!V`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4180!!3!!!!!!!!!!#!!!K!!!!,!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4181!!!J!!)8!!!#a!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#'!!!
4182!XJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!K`!!!,-#!3!!!!!
4183!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!)J!!!#d!J%!!!!!!!%!!3%!!!!
4184!!!!!!!!!!!!"!!!!!!!!!!!)!!#*!!!!Y3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4185!!3!!!!!!!!!!#!!!LJ!!!,B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!
4186!!!J!!)X!!!#h!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#-!!!
4187!Z!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!M3!!!,N#!3!!!!!
4188!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!)i!!!#k!J%!!!!!!!%!!3%!!!!
4189!!!!!!!!!!!!"!!!!!!!!!!!)!!#2!!!!Z`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!
4190!!3!!!!!!!!!!#!!!N!!!!!#m!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4191!!!!)!!#4!!!![3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!NJ!
4192!!,i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!*-!!!#r!J%!!!!
4193!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#8!!!!`!)"!!!!!!!"!!%"!!!
4194!!!!!!!!!!!!!!3!!!!!!!!!!#!!!P3!!!-%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4195!!!%!!!!!!!!!!!J!!*B!!!$#!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4196!!!!)!!#A!!!!``)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!Q!!
4197!!-3#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!*N!!!$&!J%!!!!
4198!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#D!!!!aJ)"!!!!!!!"!!%"!!!
4199!!!!!!!!!!!!!!3!!!!!!!!!!#!!!Q`!!!-F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4200!!!%!!!!!!!!!!!J!!*`!!!$)!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4201!!!!)!!#G!!!!b3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!RJ!
4202!!-S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!*m!!!$,!J%!!!!
4203!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#J!!!!c!)"!!!!!!!"!!%"!!!
4204!!!!!!!!!!!!!!3!!!!!!!!!!#!!!S3!!!-d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4205!!!%!!!!!!!!!!!J!!+)!!!$1!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4206!!!!)!!#M!!!!c`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!T!!
4207!!0!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!+8!!!$4!J%!!!!
4208!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#Q!!!!dJ)"!!!!!!!"!!%"!!!
4209!!!!!!!!!!!!!!3!!!!!!!!!!#!!!T`!!!0-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4210!!!%!!!!!!!!!!!J!!+J!!!$8!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4211!!!!)!!#T!!!!e3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!UJ!
4212!!0B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!+X!!!$A!J%!!!!
4213!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#X!!!!f!)"!!!!!!!"!!%"!!!
4214!!!!!!!!!!!!!!3!!!!!!!!!!#!!!V3!!!0N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4215!!!%!!!!!!!!!!!J!!+i!!!$D!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4216!!!!)!!#[!!!!f`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!X!!
4217!!0`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!,%!!!$G!J%!!!!
4218!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#b!!!!hJ)"!!!!!!!"!!%"!!!
4219!!!!!!!!!!!!!!3!!!!!!!!!!#!!!X`!!!0m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4220!!!%!!!!!!!!!!!J!!,3!!!$J!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4221!!!!)!!#e!!!!i3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!YJ!
4222!!1)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!,F!!!$M!J%!!!!
4223!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#i!!!!j!)"!!!!!!!"!!%"!!!
4224!!!!!!!!!!!!!!3!!!!!!!!!!#!!!Z3!!!18#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4225!!!%!!!!!!!!!!!J!!,S!!!$Q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4226!!!!)!!#l!!!!j`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!![!!
4227!!1J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!,d!!!$T!J%!!!!
4228!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!#q!!!!kJ)"!!!!!!!"!!%"!!!
4229!!!!!!!!!!!!!!3!!!!!!!!!!#!!![`!!!1X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4230!!!%!!!!!!!!!!!J!!-!!!!$X!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4231!!!!)!!$"!!!!l3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!`J!
4232!!1i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!--!!!$[!J%!!!!
4233!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$%!!!!m!)"!!!!!!!"!!%"!!!
4234!!!!!!!!!!!!!!3!!!!!!!!!!#!!!a3!!!2%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4235!!!%!!!!!!!!!!!J!!-B!!!$b!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4236!!!!)!!$(!!!!m`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!b!!
4237!!23#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!-N!!!$e!J%!!!!
4238!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$+!!!!pJ)"!!!!!!!"!!%"!!!
4239!!!!!!!!!!!!!!3!!!!!!!!!!#!!!b`!!!2F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4240!!!%!!!!!!!!!!!J!!-`!!!$i!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4241!!!!)!!$0!!!!q3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!cJ!
4242!!2S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!-m!!!$l!J%!!!!
4243!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$3!!!!r!)"!!!!!!!"!!%"!!!
4244!!!!!!!!!!!!!!3!!!!!!!!!!#!!!d3!!!2d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4245!!!%!!!!!!!!!!!J!!0)!!!$q!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4246!!!!)!!$6!!!!r`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!e!!
4247!!3!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!08!!!%"!J%!!!!
4248!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$@!!!"!J)"!!!!!!!"!!%"!!!
4249!!!!!!!!!!!!!!3!!!!!!!!!!#!!!e`!!!3-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4250!!!%!!!!!!!!!!!J!!0J!!!%%!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4251!!!!)!!$C!!!""3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!fJ!
4252!!3B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!0X!!!%(!J%!!!!
4253!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$F!!!"#!)"!!!!!!!"!!%"!!!
4254!!!!!!!!!!!!!!3!!!!!!!!!!#!!!h3!!!3N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4255!!!%!!!!!!!!!!!J!!0i!!!%+!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4256!!!!)!!$I!!!"#`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!i!!
4257!!3`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!1%!!!%0!J%!!!!
4258!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$L!!!"$J)"!!!!!!!"!!%"!!!
4259!!!!!!!!!!!!!!3!!!!!!!!!!#!!!i`!!!3m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4260!!!%!!!!!!!!!!!J!!13!!!%3!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4261!!!!)!!$P!!!"%3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!jJ!
4262!!4)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!1F!!!%6!J%!!!!
4263!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$S!!!"&!)"!!!!!!!"!!%"!!!
4264!!!!!!!!!!!!!!3!!!!!!!!!!#!!!k3!!!48#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4265!!!%!!!!!!!!!!!J!!1S!!!%@!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4266!!!!)!!$V!!!"&`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!l!!
4267!!4J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!1d!!!%C!J%!!!!
4268!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$Z!!!"'J)"!!!!!!!"!!%"!!!
4269!!!!!!!!!!!!!!3!!!!!!!!!!#!!!l`!!!4X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4270!!!%!!!!!!!!!!!J!!2!!!!%F!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4271!!!!)!!$a!!!"(3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!mJ!
4272!!4i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!2-!!!%I!J%!!!!
4273!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$d!!!")!)"!!!!!!!"!!%"!!!
4274!!!!!!!!!!!!!!3!!!!!!!!!!#!!!p3!!!5%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4275!!!%!!!!!!!!!!!J!!2B!!!%L!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4276!!!!)!!$h!!!")`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!q!!
4277!!53#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!2N!!!%P!J%!!!!
4278!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!$k!!!"*J)"!!!!!!!"!!%"!!!
4279!!!!!!!!!!!!!!3!!!!!!!!!!#!!!q`!!!5F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4280!!!%!!!!!!!!!!!J!!2`!!!%S!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4281!!!!)!!$p!!!"+3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!!rJ!
4282!!5S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!2m!!!%V!J%!!!!
4283!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%!!!!",!)"!!!!!!!"!!%"!!!
4284!!!!!!!!!!!!!!3!!!!!!!!!!#!!"!3!!!5d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4285!!!%!!!!!!!!!!!J!!3)!!!%Z!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4286!!!!)!!%$!!!",`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!""!!
4287!!6!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!38!!!%a!J%!!!!
4288!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%'!!!"-J)"!!!!!!!"!!%"!!!
4289!!!!!!!!!!!!!!3!!!!!!!!!!#!!""`!!!6-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4290!!!%!!!!!!!!!!!J!!3J!!!%d!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4291!!!!)!!%*!!!"03)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"#J!
4292!!6B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!3X!!!%h!J%!!!!
4293!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%-!!!"1!)"!!!!!!!"!!%"!!!
4294!!!!!!!!!!!!!!3!!!!!!!!!!#!!"$3!!!6N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4295!!!%!!!!!!!!!!!J!!3i!!!%k!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4296!!!!)!!%2!!!"1`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"%!!
4297!!6`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!4%!!!%p!J%!!!!
4298!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%5!!!"2J)"!!!!!!!"!!%"!!!
4299!!!!!!!!!!!!!!3!!!!!!!!!!#!!"%`!!!6m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4300!!!%!!!!!!!!!!!J!!43!!!&!!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4301!!!!)!!%9!!!"33)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"&J!
4302!!8)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!4F!!!&$!J%!!!!
4303!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%B!!!"4!)"!!!!!!!"!!%"!!!
4304!!!!!!!!!!!!!!3!!!!!!!!!!#!!"'3!!!88#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4305!!!%!!!!!!!!!!!J!!4S!!!&'!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4306!!!!)!!%E!!!"4`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"(!!
4307!!8J#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!4d!!!&*!J%!!!!
4308!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%H!!!"5J)"!!!!!!!"!!%"!!!
4309!!!!!!!!!!!!!!3!!!!!!!!!!#!!"(`!!!8X#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4310!!!%!!!!!!!!!!!J!!5!!!!&-!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4311!!!!)!!%K!!!"63)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!")J!
4312!!8i#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!5-!!!&2!J%!!!!
4313!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%N!!!"8!)"!!!!!!!"!!%"!!!
4314!!!!!!!!!!!!!!3!!!!!!!!!!#!!"*3!!!9%#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4315!!!%!!!!!!!!!!!J!!5B!!!&5!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4316!!!!)!!%R!!!"8`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"+!!
4317!!93#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!5N!!!&9!J%!!!!
4318!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%U!!!"9J)"!!!!!!!"!!%"!!!
4319!!!!!!!!!!!!!!3!!!!!!!!!!#!!"+`!!!9F#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4320!!!%!!!!!!!!!!!J!!5`!!!&B!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4321!!!!)!!%Y!!!"@3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!",J!
4322!!9S#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!5m!!!&E!J%!!!!
4323!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%`!!!"A!)"!!!!!!!"!!%"!!!
4324!!!!!!!!!!!!!!3!!!!!!!!!!#!!"-3!!!9d#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4325!!!%!!!!!!!!!!!J!!6)!!!&H!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4326!!!!)!!%c!!!"A`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"0!!
4327!!@!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!68!!!&K!J%!!!!
4328!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%f!!!"BJ)"!!!!!!!"!!%"!!!
4329!!!!!!!!!!!!!!3!!!!!!!!!!#!!"0`!!!@-#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4330!!!%!!!!!!!!!!!J!!6J!!!&N!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4331!!!!)!!%j!!!"C3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"1J!
4332!!@B#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!6X!!!&R!J%!!!!
4333!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!%m!!!"D!)"!!!!!!!"!!%"!!!
4334!!!!!!!!!!!!!!3!!!!!!!!!!#!!"23!!!@N#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4335!!!%!!!!!!!!!!!J!!6i!!!&U!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4336!!!!)!!%r!!!"D`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"3!!
4337!!@`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!8%!!!&Y!J%!!!!
4338!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&#!!!"EJ)"!!!!!!!"!!%"!!!
4339!!!!!!!!!!!!!!3!!!!!!!!!!#!!"3`!!!@m#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4340!!!%!!!!!!!!!!!J!!83!!!&`!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4341!!!!)!!&&!!!"F3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"4J!
4342!!A)#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!8F!!!&c!J%!!!!
4343!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&)!!!"G!)"!!!!!!!"!!%"!!!
4344!!!!!!!!!!!!!!3!!!!!!!!!!#!!"53!!!A8#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4345!!!%!!!!!!!!!!!J!!8S!!!&f!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4346!!!!)!!&,!!!"G`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"6!!
4347!!AJ#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!8d!!!&j!J%!!!!
4348!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&1!!!"HJ)"!!!!!!!"!!%"!!!
4349!!!!!!!!!!!!!!3!!!!!!!!!!#!!"6`!!!AX#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4350!!!%!!!!!!!!!!!J!!9!!!!&m!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4351!!!!)!!&4!!!"I3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"8J!
4352!!Ai#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!9-!!!'!!J%!!!!
4353!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&8!!!"J3)"!!!!!!!"!!%"!!!
4354!!!!!!!!!!!!!!3!!!!!!!!!!#!!"93!!!B)#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4355!!!%!!!!!!!!!!!J!!9B!!!'$!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4356!!!!)!!&A!!!"K!)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"@!!
4357!!B8#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!9N!!!''!J%!!!!
4358!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&D!!!"K`)"!!!!!!!"!!%"!!!
4359!!!!!!!!!!!!!!3!!!!!!!!!!#!!"@`!!!BJ#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4360!!!%!!!!!!!!!!!J!!9`!!!'*!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4361!!!!)!!&G!!!"LJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"AJ!
4362!!BX#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!9m!!!'-!J%!!!!
4363!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&J!!!"M3)"!!!!!!!"!!%"!!!
4364!!!!!!!!!!!!!!3!!!!!!!!!!#!!"B3!!!Bi#!3!!!!!!!3!"!3!!!!!!!!!!!!!
4365!!!%!!!!!!!!!!!J!!@)!!!'2!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!
4366!!!!)!!&M!!!"N!!#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!@3
4367!!!'4!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&P!!!"NJ)"!!!
4368!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"CJ!!!C-#!3!!!!!!!3!"!3!
4369!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!@F!!!'8!J%!!!!!!!%!!3%!!!!!!!!!!!!
4370!!!!"!!!!!!!!!!!)!!&S!!!"P3)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
4371!!!!!#!!"D3!!!CB#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!@S
4372!!!'A!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&V!!!"Q!)"!!!
4373!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"E!!!!CN#!3!!!!!!!3!"!3!
4374!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!@d!!!'D!J%!!!!!!!%!!3%!!!!!!!!!!!!
4375!!!!"!!!!!!!!!!!)!!&Z!!!"Q`)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
4376!!!!!#!!"E`!!!C`#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!A!
4377!!!'G!J%!!!!!!!%!!3%!!!!!!!!!!!!!!!!"!!!!!!!!!!!)!!&a!!!"RJ)"!!!
4378!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!!!!!!#!!"FJ!!!Cm#!3!!!!!!!3!"!3!
4379!!!!!!!!!!!!!!!%!!!!!!!!!!!J!!A-!!!'N!J%!!!!!!!%!!3%!!!!!!!!!!!!
4380!!!!"!!!!!!!!!!!)!!&d!!!"TJ)"!!!!!!!"!!%"!!!!!!!!!!!!!!!!!3!!!!!
4381!!!!!#!!"G3!!!DF#!3!!!!!!!3!"!3!!!!!!!!!!!!!!!!%!!!!!!!!!!!!!!!!
4382!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4383!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4384!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4385!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4386!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4387!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4388!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4389!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4390!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4391!!!!!!!!!!!!!!!%!!!!#!!!!!`!!!!3!!!!&!!!!"J!!!!F!!!!)!!!!#3!!!!S
4392!!!!,!!!!$!!!!!d!!!!1!!!!$`!!!"!!!!!4!!!!%J!!!"-!!!!8!!!!&3!!!"B
4393!!!!A!!!!'!!!!"N!!!!D!!!!'`!!!"`!!!!G!!!!(J!!!"m!!!!J!!!!)3!!!#)
4394!!!!M!!!!*!!!!#8!!!!Q!!!!*`!!!#J!!!!T!!!!+J!!!#X!!!!X!!!!,3!!!#i
4395!!!![!!!!-!!!!$%!!!!b!!!!-`!!!$3!!!!e!!!!0J!!!$F!!!!i!!!!13!!!$S
4396!!!!l!!!!2!!!!$d!!!!q!!!!2`!!!%!!!!""!!!!3J!!!%-!!!"%!!!!43!!!%B
4397!!!"(!!!!5!!!!%N!!!"+!!!!5`!!!%`!!!"0!!!!6J!!!%m!!!"3!!!!83!!!&)
4398!!!"6!!!!9!!!!&8!!!"@!!!!9`!!!&J!!!"C!!!!@J!!!&X!!!"F!!!!A3!!!&i
4399!!!"I!!!!B!!!!'%!!!"L!!!!B`!!!'3!!!"P!!!!CJ!!!'F!!!"S!!!!D3!!!'S
4400!!!"V!!!!E!!!!'d!!!"Z!!!!E`!!!(!!!!"a!!!!FJ!!!(-!!!"d!!!!G3!!!(B
4401!!!"h!!!!H!!!!(N!!!"k!!!!H`!!!(`!!!"p!!!!IJ!!!(m!!!#!!!!!J3!!!))
4402!!!#$!!!!K!!!!)8!!!#'!!!!K`!!!)J!!!#*!!!!LJ!!!)X!!!#-!!!!M3!!!)i
4403!!!#2!!!!N!!!!!#4!!!!NJ!!!*-!!!#8!!!!P3!!!*B!!!#A!!!!Q!!!!*N!!!#
4404D!!!!Q`!!!*`!!!#G!!!!RJ!!!*m!!!#J!!!!S3!!!+)!!!#M!!!!T!!!!+8!!!#
4405Q!!!!T`!!!+J!!!#T!!!!UJ!!!+X!!!#X!!!!V3!!!+i!!!#[!!!!X!!!!,%!!!#
4406b!!!!X`!!!,3!!!#e!!!!YJ!!!,F!!!#i!!!!Z3!!!,S!!!#l!!!![!!!!,d!!!#
4407q!!!![`!!!-!!!!$"!!!!`J!!!--!!!$%!!!!a3!!!-B!!!$(!!!!b!!!!-N!!!$
4408+!!!!b`!!!-`!!!$0!!!!cJ!!!-m!!!$3!!!!d3!!!0)!!!$6!!!!e!!!!08!!!$
4409@!!!!e`!!!0J!!!$C!!!!fJ!!!0X!!!$F!!!!h3!!!0i!!!$I!!!!i!!!!1%!!!$
4410L!!!!i`!!!13!!!$P!!!!jJ!!!1F!!!$S!!!!k3!!!1S!!!$V!!!!l!!!!1d!!!$
4411Z!!!!l`!!!2!!!!$a!!!!mJ!!!2-!!!$d!!!!p3!!!2B!!!$h!!!!q!!!!2N!!!$
4412k!!!!q`!!!2`!!!$p!!!!rJ!!!2m!!!%!!!!"!3!!!3)!!!%$!!!""!!!!38!!!%
4413'!!!""`!!!3J!!!%*!!!"#J!!!3X!!!%-!!!"$3!!!3i!!!%2!!!"%!!!!4%!!!%
44145!!!"%`!!!43!!!%9!!!"&J!!!4F!!!%B!!!"'3!!!4S!!!%E!!!"(!!!!4d!!!%
4415H!!!"(`!!!5!!!!%K!!!")J!!!5-!!!%N!!!"*3!!!5B!!!%R!!!"+!!!!5N!!!%
4416U!!!"+`!!!5`!!!%Y!!!",J!!!5m!!!%`!!!"-3!!!6)!!!%c!!!"0!!!!68!!!%
4417f!!!"0`!!!6J!!!%j!!!"1J!!!6X!!!%m!!!"23!!!6i!!!%r!!!"3!!!!8%!!!&
4418#!!!"3`!!!83!!!&&!!!"4J!!!8F!!!&)!!!"53!!!8S!!!&,!!!"6!!!!8d!!!&
44191!!!"6`!!!9!!!!&4!!!"8J!!!9-!!!&8!!!"93!!!9B!!!&A!!!"@!!!!9N!!!&
4420D!!!"@`!!!9`!!!&G!!!"AJ!!!9m!!!&J!!!"B3!!!@)!!!&M!!!"C!!!!@8!!!&
4421Q!!!"C`!!!@J!!!&T!!!"DJ!!!@X!!!&X!!!"E3!!!@i!!!&[!!!"F!!!!A%!!!&
4422b!!!"F`!!!A3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4423!!!!!!!!!!A8!!!'!#!!!!!J!!A8!!!(E!!%!(!!!!!!!!!!!!!!!!!!!!!!!!!!
4424!!!!!!!J!!!%)!!!##!!!!`J!!!3)!!!&#!!!"JJ!!!F)!!!)#!!!#3J!!!S)!!!
4425,#!!!$!J!!!d)!!!1#!!!$`J!!"!)!!!4#!!!%JJ!!"-)!!!8#!!!&3J!!"B)!!!
4426A#!!!'!J!!"N)!!!D#!!!'`J!!"`)!!!G#!!!(JJ!!"m)!!!J#!!!)3J!!#))!!!
4427M#!!!*!J!!#8)!!!Q#!!!*`J!!#J)!!!T#!!!+JJ!!#X)!!!X#!!!,3J!!#i)!!!
4428[#!!!-!J!!$%)!!!b#!!!-`J!!$3)!!!e#!!!0JJ!!$F)!!!i#!!!13J!!$S)!!!
4429l#!!!2!J!!$d)!!!q#!!!2`J!!%!)!!""#!!!3JJ!!%-)!!"%#!!!43J!!%B)!!"
4430(#!!!5!J!!%N)!!"+#!!!5`J!!%`)!!"0#!!!6JJ!!%m)!!"3#!!!83J!!&))!!"
44316#!!!9!J!!&8)!!"@#!!!9`J!!&J)!!"C#!!!@JJ!!&X)!!"F#!!!A3J!!&i)!!"
4432I#!!!B!J!!'%)!!"L#!!"G!J!!'-)!!"N#!!!C3J!!'B)!!"R#!!!D!J!!'N)!!"
4433U#!!!D`J!!'`)!!"Y#!!!EJJ!!'m)!!"`#!!!F3J!!())!!"c#!!!G!J!!(8)!!"
4434f#!!!G`J!!(J)!!"j#!!!HJJ!!(X)!!"m#!!!I3J!!(i)!!"r#!!!J!J!!)%)!!#
4435##!!!J`J!!)3)!!#&#!!!KJJ!!)F)!!#)#!!!L3J!!)S)!!#,#!!!M!J!!)d)!!#
44361#!!!M`J!!*!!#!!!N3J!!*))!!#6#!!!P!J!!*8)!!#@#!!!P`J!!*J)!!#C#!!
4437!QJJ!!*X)!!#F#!!!R3J!!*i)!!#I#!!!S!J!!+%)!!#L#!!!S`J!!+3)!!#P#!!
4438!TJJ!!+F)!!#S#!!!U3J!!+S)!!#V#!!!V!J!!+d)!!#Z#!!!V`J!!,!)!!#a#!!
4439!XJJ!!,-)!!#d#!!!Y3J!!,B)!!#h#!!!Z!J!!,N)!!#k#!!!Z`J!!,`)!!#p#!!
4440![JJ!!,m)!!$!#!!!`3J!!-))!!$$#!!!a!J!!-8)!!$'#!!!a`J!!-J)!!$*#!!
4441!bJJ!!-X)!!$-#!!!c3J!!-i)!!$2#!!!d!J!!0%)!!$5#!!!d`J!!03)!!$9#!!
4442!eJJ!!0F)!!$B#!!!f3J!!0S)!!$E#!!!h!J!!0d)!!$H#!!!h`J!!1!)!!$K#!!
4443!iJJ!!1-)!!$N#!!!j3J!!1B)!!$R#!!!k!J!!1N)!!$U#!!!k`J!!1`)!!$Y#!!
4444!lJJ!!1m)!!$`#!!!m3J!!2))!!$c#!!!p!J!!28)!!$f#!!!p`J!!2J)!!$j#!!
4445!qJJ!!2X)!!$m#!!!r3J!!2i)!!$r#!!"!!J!!3%)!!%##!!"!`J!!33)!!%&#!!
4446""JJ!!3F)!!%)#!!"#3J!!3S)!!&e#!!"#`J!!3`)!!%0#!!"$JJ!!3m)!!%3#!!
4447"%3J!!4))!!%6#!!"&!J!!48)!!%@#!!"&`J!!4J)!!%C#!!"'JJ!!4X)!!%F#!!
4448"(3J!!4i)!!%I#!!")!J!!5%)!!%L#!!")`J!!53)!!%P#!!"*JJ!!5F)!!%S#!!
4449"+3J!!5S)!!%V#!!",!J!!5d)!!%Z#!!",`J!!6!)!!%a#!!"-JJ!!6-)!!%d#!!
4450"03J!!6B)!!%h#!!"1!J!!6N)!!%k#!!"1`J!!6`)!!%p#!!"2JJ!!6m)!!&!#!!
4451"33J!!8))!!&$#!!"4!J!!88)!!&'#!!"4`J!!8J)!!&*#!!"5JJ!!8X)!!&-#!!
4452"63J!!8i)!!&2#!!"8!J!!9%)!!&5#!!"8`J!!93)!!&9#!!"9JJ!!9F)!!&B#!!
4453"@3J!!9S)!!&E#!!"A!J!!9d)!!&H#!!"A`J!!@!)!!&K#!!"BJJ!!@-)!!&N#!!
4454"C3J!!@B)!!&R#!!"D!J!!@N)!!&U#!!"D`J!!@`)!!&Y#!!"EJJ!!@m)!!&`#!!
4455"F3J!!A))!!&c!!!!#!!!!H%"!!!"!!!!!!!!!!!!"!!"!!!"kE6H0L[rrmA@!!!
4456!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4457!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4458!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4459!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4460!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4461!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4462!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4463!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4464!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4465!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4466!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"iJ)!!!%!!!!!!!!!!!!%!!%!!!(eY0i
4467f,!!!IZ)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4468!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4469!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4470!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4471!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4472!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4473!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4474!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4475!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4476!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4477!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(M!`!!!3!!!!!!!!!!!!3
4478!!3!!!IDdhMBX!!!f%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4479!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4480!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4481!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4482!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4483!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4484!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4485!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4486!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4487!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4488!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!H3%!!!"!!!
4489!!!!!!!!!"!!"!!!"r,6H0L`!!&C*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4490!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4491!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4492!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4493!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4494!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4495!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4496!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4497!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4498!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4499!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4500"j38!!!%!!!!!!!!!!!!%!!%!!!(pY0if,2rrp2N!!!!!!!!!!!!!!!!!!!!!!!!
4501!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4502!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4503!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4504!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4505!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4506!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4507!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4508!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4509!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4510!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4511!!!!!!!!!!!(Q"J!!!3!!!!!!!!!!!!3!!3!!!G'dhMBX!!!Si3!!!!!!!!!!!!!
4512!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4513!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4514!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4515!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4516!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4517!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4518!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4519!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4520!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4521!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4522!!!!!!!!!!!!!!!!!!!!!!HF(!!!"!!!!!!!!!!!!"!!"!!!"dV6H0L`!!!ca!!!
4523!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4524!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4525!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4526!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4527!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4528!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4529!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4530!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4531!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4532!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4533!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"k!J!!!%!!!!!!!!!!!!%!!%!!!(IY0i
4534f,2rr[fi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4535!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4536!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4537!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4538!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4539!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4540!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4541!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4542!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4543!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4544!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)!!!!!H%!!!!"i`!!!!(
4545L!!!!!H8!!!!"jJ!!!!(N!!!!!HF!!!!"k!!"!!!!!&*26e3!!!!!!!!!!!!!!!!
4546'4e*98!!!!!!!!!!!$P*[H5Gc)%GPG%K89&"6!!!!"8C*6%8"!!'L4NP-43%!!D0
4547'58a&!3!"U%C*6%8"!!'K4NP-43%!!D"(8P93!!!!!!!!!!!66h"PEP066#""F("
4548XD@0KG'P[EJ!!!#0'58a&!J!!(%C*6%8#!!!U4NP-43)!!!e'58a&!J!!)%C*6%8
4549#!!!54NP-43)!!"0'58a&!J!!&NC*6%8#!!!B4NP-43)!!"G'58a&!J!!$NC*6%8
4550#!!!H4NP-43)!!"&'58a&!J!!%%C*6%8#!!!K4NP-43)!!"4'58a&!J!!&8C*6%8
4551#!!!X4NP-43)!!"T'58a&!J!!'8C*6%8#!!!S4NP-43)!!#G'58a&!J!!*%C*6%8
4552#!!!Y4NP-43)!!!Y'58a&!J!!*NC*6%8#!!!T4NP-43)!!!a'58a&!J!!+dC*6%8
4553#!!!L4NP-43)!!!p'58a&!J!!'dC*6%8#!!!G4NP-43)!!"p'58a&!J!!*8C*6%8
4554#!!!M4e*98!!!!!!!!!!!%8p`C@j68d`J6'PLFQ&bD@9c!!!!"%G599!!!!!!!!!
4555!!!038%-!!!!#4NP-43)!!$0'58a&!J!!0%G599!!!!!!!!!!!!-f1'X!!!!#4NP
4556-438!!#"'58a&"3!!(dG599!!!!!!!!!!!!CMFRP`G'm!!!!S4NP-43%!!Aa'58a
4557&!3!"INC*6%8"!!'N4NP-43%!!Cp'58a&!3!"I8C*6%8"!!&l4e*98!!!!!!!!!!
4558!"'&cEM%!!!"A4NP-43%!!$j'58a&!3!!-8C*6%8"!!"&4NP-43%!!$P'58a&!3!
4559!3dC*6%8"!!!m4NP-43%!!$p'58a&!3!!3%C*6%8"!!"%4NP-43%!!%&'58a&!3!
4560!0dC*6%8"!!!e4NP-43%!!$Y'58a&!3!!-NC*6%8"!!!i4NP-43%!!%K'58a&!3!
4561!4NC*6%8"!!"#4NP-43%!!$C'58a&!3!!4dC*6%8"!!')4NP-43%!!("'58a&!3!
4562!I%C*6%8"!!"i4NP-43%!!(T'58a&!3!!H8C*6%8"!!"a4NP-43%!!(C'58a&!3!
4563!FNC*6%8"!!"p4NP-43%!!B&'58a&!3!!FdC*6%8"!!"e4NP-43%!!(Y'58a&!3!
4564!A8C*6%8"!!"04NP-43%!!&P'58a&!3!!6NC*6%8"!!"D4NP-43%!!%p'58a&!3!
4565!@dC*6%8"!!"34NP-43%!!&a'58a&!3!!5dC*6%8"!!"A4NP-43%!!%a'58a&!3!
4566!@%C*6%8"!!"Z4NP-43%!!'p'58a&!3!"LNC*6%8"!!"X4NP-43%!!'e'58a&!3!
4567"L8C*6%8"!!',4NP-43%!!'9'58a&!3!!D8C*6%8"!!"S4NP-43%!!'G'58a&!3!
4568!BdC*6%8"!!"N4NP-43%!!'&'58a&!3!!DNC*6%8"!!"L4NP-43%!!'C'58a&!3!
4569!8dC*6%8"!!"84NP-43%!!&9'58a&!3!!9NC*6%8"!!"*4NP-43%!!%T'58a&!3!
4570!ANC*6%8"!!"54NP-43%!!$T'58a&!3!!GdC*6%8"!!!c4NP-43%!!(4'58a&!3!
4571!,dC*6%8"!!!Z4NP-43%!!#e'58a&!3!!28C*6%8"!!!d4NP-43%!!Ba'58a&!3!
4572!88C*6%8"!!!`4NP-43%!!&p'58a&!3!!B%C*6%8"!!"V4e*98!!!!!!!!!!!!Q*
4573Q!!!!"8C*6%8"!!##4NP-43%!!(p'58a&!3!!J%C*6%8"!!"q4NP-43%!!)&(8P9
45743!!!!!!!!!!!$BQP[!!!!$NC*6%8"!!#%4NP-43%!!Be'58a&!3!!JdC*6%8"!!'
457514NP-43%!!C&'58a&!3!"MdC*6%8"!!'3!%C*6%8"!!#&4NP-43%!!C*'58a&!3!
4576"J%C*6%8"!!'(4NP-43%!!C9'58a&!3!"NdC*6%8"!!'84e*98!!!!!!!!!!!!Q*
4577Z!!!!&%C*6%8"!!#'4NP-43%!!)P'58a&!3!!LdC*6%8"!!#14NP-43%!!DC'58a
4578&!3!!N8C*6%8"!!#64NP-43%!!*4'58a&!3!!PNC*6%8"!!#B4NP-43%!!)K'58a
4579&!3!!M8C*6%8"!!#54NP-43%!!)T'58a&!3!!PdC*6%8"!!#(4NP-43%!!*9'58a
4580&!3!!MdC*6%8"!!#3!%C*6%8"!!#-4e*98!!!!!!!!!!!"Q*eCQCPFJ!!!!*'58a
4581&!3!!Q8C*6%8"!!#D4e*98!!!!!!!!!!!"'0KFh3!!!!&4NP-43%!!*p'58a&!3!
4582!R%C*6%8"!!#G4NP-43%!!*Y'58a&!3!!RNG599!!!!!!!!!!!!4MEfe`!!!!!dC
4583*6%8"!!#J4NP-43%!!+&'58a&!3!!SNG599!!!!!!!!!!!!4MEfjQ!!!!!NC*6%8
4584"!!#M4NP-43%!!+4(8P93!!!!!!!!!!!$C'9c!!!!'NC*6%8"!!#P4NP-43%!!+C
4585'58a&!3!!U%C*6%8"!!#T4NP-43%!!+Y'58a&!3!!V%C*6%8"!!#Z4NP-43%!!CC
4586'58a&!3!!VdC*6%8"!!#b4NP-43%!!,0'58a&!3!!Y%C*6%8"!!#e4NP-43%!!,C
4587'58a&!3!!Z%C*6%8"!!#j4NP-43%!!,T'58a&!3!!UNC*6%8"!!#`4NP-43%!!,G
4588'58a&!3!![8C*6%8"!!#l4NP-43%!!+G'58a&!3!!X8C*6%8"!!#m4NP-43%!!+e
4589(8P93!!!!!!!!!!!#C'J!!!!&4NP-43%!!-"'58a&!3!!`8C*6%8"!!$#4NP-43%
4590!!,j'58a&!3!![dG599!!!!!!!!!!!!0NFf%!!!!)4NP-43%!!-9'58a&!3!!aNC
4591*6%8"!!$(4NP-43%!!-0'58a&!3!!b8C*6%8"!!$)4NP-43%!!-4'58a&!3!"JNG
4592599!!!!!!!!!!!!0PFR)!!!!$4NP-43%!!-T'58a&!3!!bdC*6%8"!!$-4e*98!!
4593!!!!!!!!!!f9fF!!!!$p'58a&!3!!ddC*6%8"!!$54NP-43%!!04'58a&!3!!eNC
4594*6%8"!!$V4NP-43%!!0e'58a&!3!!j%C*6%8"!!$c4NP-43%!!1a'58a&!3!!hNC
4595*6%8"!!$P4NP-43%!!24'58a&!3!!k%C*6%8"!!$D4NP-43%!!2G'58a&!3!"!NC
4596*6%8"!!$K4NP-43%!!2"'58a&!3!!q%C*6%8"!!$Y4NP-43%!!0p'58a&!3!!jNC
4597*6%8"!!$e4NP-43%!!1P'58a&!3!!fdC*6%8"!!$L4NP-43%!!2&'58a&!3!!kNC
4598*6%8"!!$F4NP-43%!!10'58a&!3!!mNC*6%8"!!$Z4NP-43%!!1"'58a&!3!!jdC
4599*6%8"!!$f4NP-43%!!2j'58a&!3!!qdC*6%8"!!$m4NP-43%!!3"'58a&!3!"!8C
4600*6%8"!!$j4NP-43%!!2T'58a&!3!!r8C*6%8"!!$r4NP-43%!!3C'58a&!3!""dC
4601*6%8"!!%)4NP-43%!!3P'58a&!3!""8C*6%8"!!%%4NP-43%!!30'58a&!3!!cdC
4602*6%8"!!$04NP-43%!!-j'58a&!3!!e8C*6%8"!!$[4NP-43%!!0&'58a&!3!!edC
4603*6%8"!!$34NP-43%!!0P'58a&!3!!f%C*6%8"!!'A4NP-43%!!CK(8P93!!!!!!!
4604!!!!%D'eKB`!!!!&'58a&!3!"#NG599!!!!!!!!!!!!4TC'9K!!!!"8C*6%8"!!%
4605,4NP-43%!!3a'58a&!3!"$NC*6%8"!!%04NP-43%!!3p(8P93!!!!!!!!!!!&E'K
4606KFfJ!!!!#4NP-43%!!4"'58a&!3!"%8G599!!!!!!!!!!!!0YC$)!!!!#4NP-43%
4607!!4*'58a&!3!"%dG599!!!!!!!!!!!!0YC$8!!!!#4NP-43%!!44'58a&!3!"&8G
4608599!!!!!!!!!!!!4YC'-b!!!!!NC*6%8"!!%@4NP-43%!!4G(8P93!!!!!!!!!!!
4609(Ef*UC@0dF`!!!!4'58a&!3!"'dC*6%8"!!%B4NP-43%!!4T'58a&!3!"'8G599!
4610!!!!!!!!!!!0`C@d!!!!'4NP-43%!!5&'58a&!3!")%C*6%8"!!%H4NP-43%!!4p
4611'58a&!3!"(%C*6%8"!!%G4e*98!!!!!!!!!!!"R"VBh-a-J!!!""'58a&!3!")NC
4612*6%8"!!%M4NP-43%!!54'58a&!3!"*8C*6%8"!!%Q4NP-43%!!5G'58a&!3!"+%C
4613*6%8"!!%T4NP-43%!!5T'58a&!3!"+dC*6%8"!!%X4NP-43%!!5e'58a&!3!",NC
4614*6%8"!!%[4NP-43%!!CP'58a&!3!"-%G599!!!!!!!!!!!!9`Df0c0`!!!!C'58a
4615&!3!"-NC*6%8"!!%c4NP-43%!!6&'58a&!3!"R%C*6%8"!!'D4NP-43%!!CY(8P9
46163!!!!!!!!!!!%FQ&ZC!!!!!4'58a&!3!"0%C*6%8"!!%e4NP-43%!!6C'58a&!3!
4617"TdG599!!!!!!!!!!!!0bBc)!!!!&4NP-43%!!6T'58a&!3!"1dC*6%8"!!%j4NP
4618-43%!!6G'58a&!3!"1%G599!!!!!!!!!!!!0bBc3!!!!#4NP-43%!!6e'58a&!3!
4619"2%G599!!!!!!!!!!!!0bBc8!!!!&4NP-43%!!8*'58a&!3!"3%C*6%8"!!&"4NP
4620-43%!!6j'58a&!3!"2dG599!!!!!!!!!!!!CbDA"PE@3!!!!#4NP-43%!!80'58a
4621&!3!"4%G599!!!!!!!!!!!!0bFf%!!!!-4NP-43%!!89'58a&!3!"4dC*6%8"!!&
4622)4NP-43%!!8e'58a&!3!"6%C*6%8"!!&'4NP-43%!!8Y'58a&!3!"6NC*6%8"!!&
4623*4NP-43%!!8T'58a&!3!"R8C*6%8"!!'H4e*98!!!!!!!!!!!!h0SB3!!!!4'58a
4624&!3!"88C*6%8"!!&24NP-43%!!9*'58a&!3!"8%G599!!!!!!!!!!!!9cG'&MD`!
4625!!!&'58a&!3!"8dG599!!!!!!!!!!!!CdH(4IC')!!!!"4NP-43%!!94(8P93!!!
4626!!!!!!!!%H$8`13!!!"9'58a&!3!"A%C*6%8"!!&E4NP-43%!!@&'58a&!3!"@NC
4627*6%8"!!&J4NP-43%!!@*'58a&!3!"JdC*6%8"!!&Q4NP-43%!!@0'58a&!3!"@%C
4628*6%8"!!&G4NP-43%!!9G'58a&!3!"C8C*6%8"!!&H4NP-43%!!9P'58a&!3!"AdC
4629*6%8"!!&R4NP-43%!!@4'58a&!3!"K%C*6%8"!!&94NP-43%!!9C(8P93!!!!!!!
4630!!!!'H$8`1ABc!!!!&8C*6%8"!!&V4NP-43%!!@a'58a&!3!"E8C*6%8"!!&a4NP
4631-43%!!A0'58a&!3!"G8C*6%8"!!&h4NP-43%!!AT'58a&!3!"D%C*6%8"!!&b4NP
4632-43%!!@T'58a&!3!"H%C*6%8"!!&T4NP-43%!!AC'58a&!3!"G%C*6%8"!!&`4NP
4633-43%!!AP'58a&!3!"ENC*6%8"!!&[4NP-43%!!B9'58a&!3!"KNG599!!!!!!!!!
4634!!!0cFf`!!!!M4NP-43%!!"0'58a&!3!!&8C*6%8"!!!34NP-43%!!"*'58a&!3!
4635!%8C*6%8"!!!84NP-43%!!"T'58a&!3!!(%C*6%8"!!!A4NP-43%!!"P'58a&!3!
4636!'%C*6%8"!!!E4NP-43%!!"C'58a&!3!!$8C*6%8"!!!24NP-43%!!!Y'58a&!3!
4637!$%C*6%8"!!!14NP-43%!!#Y'58a&!3!!,%C*6%8"!!!S4NP-43%!!#T'58a&!3!
4638!+8C*6%8"!!!M4NP-43%!!#*'58a&!3!!(dC*6%8"!!!P4NP-43%!!#"'58a&!3!
4639!*NC*6%8"!!!N4NP-43%!!"j'58a&!3!!*dC*6%8"!!!G4NP-43%!!!T'58a&!3!
4640!)8G599!!!!!!!!!!!!j(990*)%aTBR*KFQPPF`!!!!0'58a&!J!!,dG599!!!!!
4641!!!!!!!038%-!!!!$4NP-43)!!$"'58a&!J!!-8C*6%8#!!!b4e*98!!!!!!!!!!
4642!!cBiD`!!!!0'58a&"3!!&%C*6%8&!!!94NP-438!!"C(8P93!!!!!!!!!!!138j
4643655"-D@*bBA*TCA-!!!!#4e*98!!!!!!!!!!!!e"33`!!!!*'58a&!3!!!8C*6%8
4644"!!&r4e*98!!!!!!!!!!!!cBiD`!!!!*'58a&!`!"S%C*6%8$!!'K4e*98!!!!!!
4645!!!!!$8eKBb"-D@*bBA*TCA-!!!!#4e*98!!!!!!!!!!!!e"33`!!!!P'58a&!3!
4646!"%C*6%8"!!!#4NP-43%!!!0'58a&!3!!#8C*6%8"!!!)4NP-43%!!!G'58a&!3!
4647!"NC*6%8"!!!&4NP-43%!!D9(8P93!!!!!!!!!!!$0MKV!!!!"NC*6%8$!!'D4NP
4648-43-!!D*'58a&!`!"R%C*6%8$!!'G4NP-43-!!Cp'58a&!`!"Q`!!!"J!!!)!!!)
4649!!!!!!J%!"3!!!!!#!J!-!!!!!!)$!!S!!!!!!J3!!J!!!!!#"3!&!!!!!!)'!!)
4650!!!!!!JF!"J!!!!!##!!0!!!!!!)*!!8!!!!!!JS!"3!!!!!##`!"!!!!!!)-!!%
4651!!!!!!Jd!"`!!!!!#$J!)!!!!!!)2!!8!!!!!!K!!!J!!!!!#%3!#!!!!!!)5!!J
4652!!!!!!K-!!3!!!!!#&!!"!!!!!!)9!!J!!!!!!KB!#3!!!!!#&`!%!!!!!!!!!!!
4653!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4654!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4655!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4656!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4657!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4658!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4659!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4660!!!!!!!!!!!!!!!!!!!!!!!!!!!!#"J%#!!!c"`%#!!!d!!!!!J3""3!!)!J""3!
4661!(`!!!HJ!!!)!!!!6k3!!&!!!!!(S!&j1G!!-6PB!!#m+,`-NEJ!35Ui!!!$*!!!
4662!i!!!&0i!!"J!!!!!b3!-,bi!##"U!-JJD!"i6T!!-"mf!!!!!K%!!!)5!!!#%`!
4663!!K3!!!)9!!!"p3!!!HJ!!!(H!!!"d3!!!IX!!!(3!!!"p!!!!I`!!!)"!!!"U3!
4664!!DS!!!'V!!!!,!!!!#d!!!!Z!!!!,`!!!$!!!!!a!!!!-J!!!$-!!!!d!!!!03!
4665!!$B!!!!h!!!!1!!!!$N!!!!k!!!!1`!!!BF!!!!m!!!!23!!!$i!!!!r!!!!3!!
4666!!%%!!!',!!!!3J!!!%-!!!"%!!!!43!!!%B!!!"(!!!"kJ!!!Am!!!"p!!!!IJ!
4667!!(m!!!'5!!!"N3!!!)!!!!#"!!!!c!!!!B`!!!$0!!!!JJ!!!)-!!!$1!!!!c`!
4668!!!N!!!(a!!!!K3!!!)B!!!#(!!!"T3!!!)J!!!#*!!!!LJ!!!)X!!!#-!!!!M3!
4669!!)i!!!#2!!!!N!!!!!#4!!!!NJ!!!*-!!!#8!!!!P3!!!*B!!!#A!!!"N`!!!Bi
4670!!!'2!!!"M3!!!C!!!!!!K!!!!*J!!!#C!!!#"!!!!93!!!&9!!!"P!!!!BB!!!)
4671(!!!##!!!!D`!!!#N!!!!T3!!!+B!!!#R!!!!U!!!!KB!!!'Y!!!!R`!!!+)!!!#
4672M!!!"R`!!!AS!!!'Z!!!"V`!!!AX!!!)!!!!"RJ!!!0!!!!#D!!!!Q`!!!*`!!!#
4673G!!!!S!!!!*i!!!#K!!!!5!!!!%N!!!"+!!!!5`!!!%`!!!"0!!!!6J!!!%m!!!)
4674&!!!#"J!!!+N!!!'`!!!"X3!!!,d!!!#q!!!![`!!!-!!!!$"!!!!d3!!!E)!!!'
4675c!!!!`J!!!--!!!$%!!!!a3!!!-B!!!'"!!!!a`!!!-J!!!#U!!!!U`!!!+`!!!'
4676d!!!!dJ!!!+d!!!'9!!!!b3!!!D!!!!'e!!!!bJ!!!-X!!!"3!!!!d`!!!03!!!$
46779!!!!eJ!!!0F!!!$B!!!"I!!!!0N!!!$D!!!!f`!!!0`!!!$G!!!!hJ!!!0m!!!$
4678J!!!!i3!!!1)!!!$M!!!!j!!!!18!!!$Q!!!!j`!!!1J!!!$T!!!!kJ!!!1X!!!$
4679X!!!!l3!!!1i!!!$[!!!!m!!!!2%!!!$b!!!!m`!!!23!!!$e!!!!pJ!!!2F!!!#
4680Z!!!!V`!!!J-!!!(D!!!"l3!!!&%!!!"5!!!!8`!!!H`!!!'f!!!"Y`!!!EJ!!!(
4681L!!!"i!!!!D%!!!(E!!!"c3!!!F`!!!(F!!!"cJ!!!Gd!!!(2!!!"#3!!!&3!!!"
46829!!!!9J!!!&F!!!"B!!!!@3!!!&S!!!"E!!!!!3!!!3S!!!%,!!!"$!!!!3d!!!%
46831!!!"$`!!!4!!!!(f!!!"k3!!!HF!!!(Q!!!"i`!!!H8!!!(I!!!"rJ!!!Id!!!(
46845!!!"SJ!!!!)!!!(C!!!"%3!!!4)!!!%6!!!"&!!!!48!!!%@!!!"-`!!!Ad!!!'
4685M!!!"p`!!!GJ!!!!!!!!"d`!!!!-!!!(A!!!"IJ!!!IJ!!!(V!!!"q3!!!Hi!!!$
4686i!!!!q3!!!2S!!!$l!!!!r!!!!2d!!!$q!!!!r`!!!3!!!!%"!!!"Z3!!!&`!!!"
4687G!!!"&`!!!4J!!!%C!!!!X!!!!,%!!!#b!!!"j!!!!H%!!!'k!!!"e!!!!!3!!!!
4688&!!!"e3!!!GB!!!!'!!!!"`!!!4S!!!%K!!!")J!!!5-!!!%N!!!"*3!!!5B!!!%
4689R!!!"+!!!!5N!!!%U!!!"+`!!!5`!!!'B!!!",3!!!5i!!!'@!!!"P`!!!&i!!!"
4690I!!!!B!!!!'%!!!"L!!!!B`!!!'3!!!"P!!!!CJ!!!'F!!!"S!!!!D3!!!'S!!!#
4691c!!!"qJ!!!I-!!!%E!!!"(!!!!4d!!!%H!!!"(`!!!5!!!!%[!!!"Q3!!!6!!!!%
4692a!!!"QJ!!!CX!!!'l!!!"[!!!!6)!!!'p!!!"T!!!!JN!!!)+!!!##`!!!J`!!!)
46930!!!#$J!!!I!!!!)2!!!"!J!!!3-!!!%%!!!""3!!!3B!!!%(!!!"#!!!!,3!!!%
4694d!!!"T`!!!DB!!!#e!!!"03!!!6B!!!%h!!!"1!!!!6N!!!%k!!!"1`!!!6`!!!%
4695p!!!"2J!!!6m!!!&!!!!"33!!!,B!!!#h!!!"[J!!!Hm!!!)3!!!"3J!!!8-!!!#
4696i!!!"[`!!!C`!!!&%!!!"43!!!8B!!!&(!!!"5!!!!Cd!!!&*!!!"5J!!!8X!!!&
4697-!!!"63!!!!S!!!!,!!!!$!!!!!d!!!!1!!!!$`!!!"!!!!!4!!!!%J!!!"-!!!!
46988!!!!&3!!!"B!!!!A!!!!'!!!!"N!!!!D!!!!'`!!!F!!!!#j!!!"6J!!!8m!!!&
46993!!!"83!!!F%!!!(r!!!"`J!!!F-!!!!F!!!!(3!!!"i!!!!I!!!!)!!!!#%!!!!
4700L!!!!)`!!!#3!!!!P!!!!*J!!!9)!!!#k!!!!Z`!!!F3!!!(&!!!"aJ!!!FF!!!(
4701,!!!!*`!!!#J!!!!T!!!!+J!!!#X!!!)#!!!!#!!!!9-!!!'+!!!!D`!!!'`!!!"
4702Y!!!"L!!!!'i!!!'*!!!"C`!!!@J!!!&T!!!"DJ!!!@X!!!&X!!!"E3!!!@i!!!&
4703[!!!"F!!!!A%!!!&b!!!"K3!!!A-!!!&d!!!"G3!!!AB!!!'%!!!"G`!!!AJ!!!&
4704j!!!"b!!!!FN!!!'S!!!"bJ!!!9B!!!&A!!!"JJ!!!9J!!!&C!!!"@J!!!9X!!!&
4705F!!!"A3!!!9i!!!&I!!!"B!!!!@%!!!&L!!!"J`!!!@-!!!&N!!!"C3!!!,`!!!(
4706b!!!!E`!!!@B!!!"`!!!!F3!!!()!!!"c!!!!G!!!!(8!!!"f!!!!G`!!!(J!!!"
4707j!!!!HJ!!!(X!!!"m!!!"J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4708!!!!!!!!"!!!!-P*26e3!!!!!!!!!!!!!!!!'4e*98!!!!!!!!!!"$P*[H5Gc)%G
4709PG%K89&"6!!!!"8C*6%8"!!'L4NP-43%!!D0'58a&!3!"U%C*6%8"!!'K4NP-43%
4710!!D"(8P93!!!!!!!!!!)66h"PEP066#""F("XD@0KG'P[EJ!!!#0'58a&!J!!(%C
4711*6%8#!!!U4NP-43)!!!e'58a&!J!!)%C*6%8#!!!54NP-43)!!"0'58a&!J!!&NC
4712*6%8#!!!B4NP-43)!!"G'58a&!J!!$NC*6%8#!!!H4NP-43)!!"&'58a&!J!!%%C
4713*6%8#!!!K4NP-43)!!"4'58a&!J!!&8C*6%8#!!!X4NP-43)!!"T'58a&!J!!'8C
4714*6%8#!!!S4NP-43)!!#G'58a&!J!!*%C*6%8#!!!Y4NP-43)!!!Y'58a&!J!!*NC
4715*6%8#!!!T4NP-43)!!!a'58a&!J!!+dC*6%8#!!!L4NP-43)!!!p'58a&!J!!'dC
4716*6%8#!!!G4NP-43)!!"p'58a&!J!!*8C*6%8#!!!M4e*98!!!!!!!!!!$%8p`C@j
471768d`J6'PLFQ&bD@9c!!!!"%G599!!!!!!!!!!"!038%-!!!!#4NP-43)!!$0'58a
4718&!J!!0%G599!!!!!!!!!!"3-f1'X!!!!#4NP-438!!#"'58a&"3!!(dG599!!!!!
4719!!!!!"JCMFRP`G'm!!!!S4NP-43%!!Aa'58a&!3!"INC*6%8"!!'N4NP-43%!!Cp
4720'58a&!3!"I8C*6%8"!!&l4e*98!!!!!!!!!!("'&cEM%!!!"A4NP-43%!!$j'58a
4721&!3!!-8C*6%8"!!"&4NP-43%!!$P'58a&!3!!3dC*6%8"!!!m4NP-43%!!$p'58a
4722&!3!!3%C*6%8"!!"%4NP-43%!!%&'58a&!3!!0dC*6%8"!!!e4NP-43%!!$Y'58a
4723&!3!!-NC*6%8"!!!i4NP-43%!!%K'58a&!3!!4NC*6%8"!!"#4NP-43%!!$C'58a
4724&!3!!4dC*6%8"!!')4NP-43%!!("'58a&!3!!I%C*6%8"!!"i4NP-43%!!(T'58a
4725&!3!!H8C*6%8"!!"a4NP-43%!!(C'58a&!3!!FNC*6%8"!!"p4NP-43%!!B&'58a
4726&!3!!FdC*6%8"!!"e4NP-43%!!(Y'58a&!3!!A8C*6%8"!!"04NP-43%!!&P'58a
4727&!3!!6NC*6%8"!!"D4NP-43%!!%p'58a&!3!!@dC*6%8"!!"34NP-43%!!&a'58a
4728&!3!!5dC*6%8"!!"A4NP-43%!!%a'58a&!3!!@%C*6%8"!!"Z4NP-43%!!'p'58a
4729&!3!"LNC*6%8"!!"X4NP-43%!!'e'58a&!3!"L8C*6%8"!!',4NP-43%!!'9'58a
4730&!3!!D8C*6%8"!!"S4NP-43%!!'G'58a&!3!!BdC*6%8"!!"N4NP-43%!!'&'58a
4731&!3!!DNC*6%8"!!"L4NP-43%!!'C'58a&!3!!8dC*6%8"!!"84NP-43%!!&9'58a
4732&!3!!9NC*6%8"!!"*4NP-43%!!%T'58a&!3!!ANC*6%8"!!"54NP-43%!!$T'58a
4733&!3!!GdC*6%8"!!!c4NP-43%!!(4'58a&!3!!,dC*6%8"!!!Z4NP-43%!!#e'58a
4734&!3!!28C*6%8"!!!d4NP-43%!!Ba'58a&!3!!88C*6%8"!!!`4NP-43%!!&p'58a
4735&!3!!B%C*6%8"!!"V4e*98!!!!!!!!!!)!Q*Q!!!!"8C*6%8"!!##4NP-43%!!(p
4736'58a&!3!!J%C*6%8"!!"q4NP-43%!!)&(8P93!!!!!!!!!!N$BQP[!!!!$NC*6%8
4737"!!#%4NP-43%!!Be'58a&!3!!JdC*6%8"!!'14NP-43%!!C&'58a&!3!"MdC*6%8
4738"!!'3!%C*6%8"!!#&4NP-43%!!C*'58a&!3!"J%C*6%8"!!'(4NP-43%!!C9'58a
4739&!3!"NdC*6%8"!!'84e*98!!!!!!!!!!+!Q*Z!!!!&%C*6%8"!!#'4NP-43%!!)P
4740'58a&!3!!LdC*6%8"!!#14NP-43%!!DC'58a&!3!!N8C*6%8"!!#64NP-43%!!*4
4741'58a&!3!!PNC*6%8"!!#B4NP-43%!!)K'58a&!3!!M8C*6%8"!!#54NP-43%!!)T
4742'58a&!3!!PdC*6%8"!!#(4NP-43%!!*9'58a&!3!!MdC*6%8"!!#3!%C*6%8"!!#
4743-4e*98!!!!!!!!!!,"Q*eCQCPFJ!!!!*'58a&!3!!Q8C*6%8"!!#D4e*98!!!!!!
4744!!!!-"'0KFh3!!!!&4NP-43%!!*p'58a&!3!!R%C*6%8"!!#G4NP-43%!!*Y'58a
4745&!3!!RNG599!!!!!!!!!!$34MEfe`!!!!!dC*6%8"!!#J4NP-43%!!+&'58a&!3!
4746!SNG599!!!!!!!!!!$J4MEfjQ!!!!!NC*6%8"!!#M4NP-43%!!+4(8P93!!!!!!!
4747!!!m$C'9c!!!!'NC*6%8"!!#P4NP-43%!!+C'58a&!3!!U%C*6%8"!!#T4NP-43%
4748!!+Y'58a&!3!!V%C*6%8"!!#Z4NP-43%!!CC'58a&!3!!VdC*6%8"!!#b4NP-43%
4749!!,0'58a&!3!!Y%C*6%8"!!#e4NP-43%!!,C'58a&!3!!Z%C*6%8"!!#j4NP-43%
4750!!,T'58a&!3!!UNC*6%8"!!#`4NP-43%!!,G'58a&!3!![8C*6%8"!!#l4NP-43%
4751!!+G'58a&!3!!X8C*6%8"!!#m4NP-43%!!+e(8P93!!!!!!!!!"!#C'J!!!!&4NP
4752-43%!!-"'58a&!3!!`8C*6%8"!!$#4NP-43%!!,j'58a&!3!![dG599!!!!!!!!!
4753!%30NFf%!!!!)4NP-43%!!-9'58a&!3!!aNC*6%8"!!$(4NP-43%!!-0'58a&!3!
4754!b8C*6%8"!!$)4NP-43%!!-4'58a&!3!"JNG599!!!!!!!!!!%J0PFR)!!!!$4NP
4755-43%!!-T'58a&!3!!bdC*6%8"!!$-4e*98!!!!!!!!!!6!f9fF!!!!$p'58a&!3!
4756!ddC*6%8"!!$54NP-43%!!04'58a&!3!!eNC*6%8"!!$V4NP-43%!!0e'58a&!3!
4757!j%C*6%8"!!$c4NP-43%!!1a'58a&!3!!hNC*6%8"!!$P4NP-43%!!24'58a&!3!
4758!k%C*6%8"!!$D4NP-43%!!2G'58a&!3!"!NC*6%8"!!$K4NP-43%!!2"'58a&!3!
4759!q%C*6%8"!!$Y4NP-43%!!0p'58a&!3!!jNC*6%8"!!$e4NP-43%!!1P'58a&!3!
4760!fdC*6%8"!!$L4NP-43%!!2&'58a&!3!!kNC*6%8"!!$F4NP-43%!!10'58a&!3!
4761!mNC*6%8"!!$Z4NP-43%!!1"'58a&!3!!jdC*6%8"!!$f4NP-43%!!2j'58a&!3!
4762!qdC*6%8"!!$m4NP-43%!!3"'58a&!3!"!8C*6%8"!!$j4NP-43%!!2T'58a&!3!
4763!r8C*6%8"!!$r4NP-43%!!3C'58a&!3!""dC*6%8"!!%)4NP-43%!!3P'58a&!3!
4764""8C*6%8"!!%%4NP-43%!!30'58a&!3!!cdC*6%8"!!$04NP-43%!!-j'58a&!3!
4765!e8C*6%8"!!$[4NP-43%!!0&'58a&!3!!edC*6%8"!!$34NP-43%!!0P'58a&!3!
4766!f%C*6%8"!!'A4NP-43%!!CK(8P93!!!!!!!!!"3%D'eKB`!!!!&'58a&!3!"#NG
4767599!!!!!!!!!!&34TC'9K!!!!"8C*6%8"!!%,4NP-43%!!3a'58a&!3!"$NC*6%8
4768"!!%04NP-43%!!3p(8P93!!!!!!!!!"B&E'KKFfJ!!!!#4NP-43%!!4"'58a&!3!
4769"%8G599!!!!!!!!!!&`0YC$)!!!!#4NP-43%!!4*'58a&!3!"%dG599!!!!!!!!!
4770!'!0YC$8!!!!#4NP-43%!!44'58a&!3!"&8G599!!!!!!!!!!'34YC'-b!!!!!NC
4771*6%8"!!%@4NP-43%!!4G(8P93!!!!!!!!!"S(Ef*UC@0dF`!!!!4'58a&!3!"'dC
4772*6%8"!!%B4NP-43%!!4T'58a&!3!"'8G599!!!!!!!!!!'`0`C@d!!!!'4NP-43%
4773!!5&'58a&!3!")%C*6%8"!!%H4NP-43%!!4p'58a&!3!"(%C*6%8"!!%G4e*98!!
4774!!!!!!!!F"R"VBh-a-J!!!""'58a&!3!")NC*6%8"!!%M4NP-43%!!54'58a&!3!
4775"*8C*6%8"!!%Q4NP-43%!!5G'58a&!3!"+%C*6%8"!!%T4NP-43%!!5T'58a&!3!
4776"+dC*6%8"!!%X4NP-43%!!5e'58a&!3!",NC*6%8"!!%[4NP-43%!!CP'58a&!3!
4777"-%G599!!!!!!!!!!(39`Df0c0`!!!!C'58a&!3!"-NC*6%8"!!%c4NP-43%!!6&
4778'58a&!3!"R%C*6%8"!!'D4NP-43%!!CY(8P93!!!!!!!!!"i%FQ&ZC!!!!!4'58a
4779&!3!"0%C*6%8"!!%e4NP-43%!!6C'58a&!3!"TdG599!!!!!!!!!!(`0bBc)!!!!
4780&4NP-43%!!6T'58a&!3!"1dC*6%8"!!%j4NP-43%!!6G'58a&!3!"1%G599!!!!!
4781!!!!!)!0bBc3!!!!#4NP-43%!!6e'58a&!3!"2%G599!!!!!!!!!!)30bBc8!!!!
4782&4NP-43%!!8*'58a&!3!"3%C*6%8"!!&"4NP-43%!!6j'58a&!3!"2dG599!!!!!
4783!!!!!)JCbDA"PE@3!!!!#4NP-43%!!80'58a&!3!"4%G599!!!!!!!!!!)`0bFf%
4784!!!!-4NP-43%!!89'58a&!3!"4dC*6%8"!!&)4NP-43%!!8e'58a&!3!"6%C*6%8
4785"!!&'4NP-43%!!8Y'58a&!3!"6NC*6%8"!!&*4NP-43%!!8T'58a&!3!"R8C*6%8
4786"!!'H4e*98!!!!!!!!!!N!h0SB3!!!!4'58a&!3!"88C*6%8"!!&24NP-43%!!9*
4787'58a&!3!"8%G599!!!!!!!!!!*39cG'&MD`!!!!&'58a&!3!"8dG599!!!!!!!!!
4788!*JCdH(4IC')!!!!"4NP-43%!!94(8P93!!!!!!!!!#F%H$8`13!!!"9'58a&!3!
4789"A%C*6%8"!!&E4NP-43%!!@&'58a&!3!"@NC*6%8"!!&J4NP-43%!!@*'58a&!3!
4790"JdC*6%8"!!&Q4NP-43%!!@0'58a&!3!"@%C*6%8"!!&G4NP-43%!!9G'58a&!3!
4791"C8C*6%8"!!&H4NP-43%!!9P'58a&!3!"AdC*6%8"!!&R4NP-43%!!@4'58a&!3!
4792"K%C*6%8"!!&94NP-43%!!9C(8P93!!!!!!!!!#J'H$8`1ABc!!!!&8C*6%8"!!&
4793V4NP-43%!!@a'58a&!3!"E8C*6%8"!!&a4NP-43%!!A0'58a&!3!"G8C*6%8"!!&
4794h4NP-43%!!AT'58a&!3!"D%C*6%8"!!&b4NP-43%!!@T'58a&!3!"H%C*6%8"!!&
4795T4NP-43%!!AC'58a&!3!"G%C*6%8"!!&`4NP-43%!!AP'58a&!3!"ENC*6%8"!!&
4796[4NP-43%!!B9'58a&!3!"KNG599!!!!!!!!!!+30cFf`!!!!M4NP-43%!!"0'58a
4797&!3!!&8C*6%8"!!!34NP-43%!!"*'58a&!3!!%8C*6%8"!!!84NP-43%!!"T'58a
4798&!3!!(%C*6%8"!!!A4NP-43%!!"P'58a&!3!!'%C*6%8"!!!E4NP-43%!!"C'58a
4799&!3!!$8C*6%8"!!!24NP-43%!!!Y'58a&!3!!$%C*6%8"!!!14NP-43%!!#Y'58a
4800&!3!!,%C*6%8"!!!S4NP-43%!!#T'58a&!3!!+8C*6%8"!!!M4NP-43%!!#*'58a
4801&!3!!(dC*6%8"!!!P4NP-43%!!#"'58a&!3!!*NC*6%8"!!!N4NP-43%!!"j'58a
4802&!3!!*dC*6%8"!!!G4NP-43%!!!T'58a&!3!!)8G599!!!!!!!!!!+Jj(990*)%a
4803TBR*KFQPPF`!!!!0'58a&!J!!,dG599!!!!!!!!!!+`038%-!!!!$4NP-43)!!$"
4804'58a&!J!!-8C*6%8#!!!b4e*98!!!!!!!!!!X!cBiD`!!!!0'58a&"3!!&%C*6%8
4805&!!!94NP-438!!"C(8P93!!!!!!!!!#d138j655"-D@*bBA*TCA-!!!!#4e*98!!
4806!!!!!!!!Z!e"33`!!!!*'58a&!3!!!8C*6%8"!!&r4e*98!!!!!!!!!![!cBiD`!
4807!!!*'58a&!`!"S%C*6%8$!!'K4e*98!!!!!!!!!!`$8eKBb"-D@*bBA*TCA-!!!!
4808#4e*98!!!!!!!!!!a!e"33`!!!!P'58a&!3!!"%C*6%8"!!!#4NP-43%!!!0'58a
4809&!3!!#8C*6%8"!!!)4NP-43%!!!G'58a&!3!!"NC*6%8"!!!&4NP-43%!!D9(8P9
48103!!!!!!!!!$)$0MKV!!!!"NC*6%8$!!'D4NP-43-!!D*'58a&!`!"R%C*6%8$!!'
4811G4NP-43-!!Cp'58a&!`!"Q`!!!4#V3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4812!!!!!!!!!!!!"+!!!'!"YFh4b!!!!!!!!!!!!!!!!!!!C+!!!#S"YFh4X!!!!!!!
4813!!!!!!!!!!!!MU!!!!i"YFh4Z!!!!!!!!!!!!!!!!!!!R+!!!'!"YFh4b!!!$k!!
4814!!!!!!!!!!!!r+!!!'B"YFh4X!!!$k!!!!!!!!!!!!!0TDJ!!#)"YFh4Z!!!$k!!
4815!!!!!!!!!!!"E+!!!"4"`FQ9Q!!P'eJ!!!!%!!!!!!!"J1!!!!!K`FQ9Q!!L`,3!
4816!!!)!!!!!!!"J3!!!!"T`FQ9Q!!PX2!!!!!-!!!!!!!"J@J!!$+"`FQ9Q!!MrS3!
4817!!!3!!!!!!!"XqJ!!"K4`FQ9Q!!L+i3!!!!8!!!!!!!"c$J!!#*C`FQ9Q!!P5m!!
4818!!!B!!!!!!!"lT!!!!3G`FQ9Q!!Le63!!!!F!!!!!!!"mU`!!!b"`FQ9Q!!N!,`!
4819!!!J!!!!!!!"rb`!!!"4`FQ9Q!!NR4!!!!!N!!!!!!!"rh`!!!!T`FQ9Q!!M`UJ!
4820!!!S!!!!!!!"rk3!!!!a`FQ9Q!!L"hJ!!!!X!!!!!!!"rp3!!!!j`FQ9Q!!M0!!!
4821!!!`!!!!!!!#!!`!!!3C`FQ9Q!!Kpf3!!!!d!!!!!!!#"#3!!!$j`FQ9Q!!N#K!!
4822!!!i!!!!!!!#"4`!!!!j`FQ9Q!!PRC3!!!!m!!!!!!!#"93!!!GT`FQ9Q!!MG@`!
4823!!"!!!!!!!!#$,`!!!'*`FQ9Q!!M*!3!!!"%!!!!!!!#$N3!!!"4`FQ9Q!!MP"`!
4824!!")!!!!!!!#$T3!!!!T`FQ9Q!!LpV!!!!"-!!!!!!!#$V`!!!!a`FQ9Q!!PJK`!
4825!!"3!!!!!!!#$Z`!!!-T`FQ9Q!!L(e!!!!"8!!!!!!!#%K3!!!4K`FQ9Q!!LAh3!
4826!!"B!!!!!!!#&R3!!!+K`FQ9Q!!LpP!!!!"F!!!!!!!#'43!!!#j`FQ9Q!!PBJJ!
4827!!"J!!!!!!!#'F`!!!Ja`FQ9Q!!N()3!!!"N!!!!!!!#)I`!!4J"YG("X!!!!!3!
4828!!!!!!!!!!!$1I`!!"`"YG("c!!!!!3!!!!!!!!!!!!$9I`!!!""YG("T!!!!!3!
4829!!!!!!!!!!!$9M`!!"U"YG'a[!!!!!3!!!!!!!!!!!!$F,`!!!#"YG(0X!!!!!3!
4830!!!!!!!!!!!$F6`!!"4"`FQ9Q!!NN23!!!"S!!!!!!!$KA`!!!!K`FQ9Q!!M6`J!
4831!!"X!!!!!!!$KC`!!!"T`FQ9Q!!KkI3!!!"`!!!!!!!$KJ3!!%0"`FQ9Q!!LKD`!
4832!!"d!!!!!!!$b83!!"K4`FQ9Q!!PS2J!!!"i!!!!!!!$iC3!!#*C`FQ9Q!!M14`!
4833!!"m!!!!!!!%!q`!!!3G`FQ9Q!!P,IJ!!!#!!!!!!!!%#!J!!!b"`FQ9Q!!Mle3!
4834!!#%!!!!!!!%&)J!!!"4`FQ9Q!!NP93!!!#)!!!!!!!%&0J!!!!T`FQ9Q!!LIJJ!
4835!!#-!!!!!!!%&3!!!!!a`FQ9Q!!L8Z!!!!#3!!!!!!!%&6!!!!!j`FQ9Q!!P54!!
4836!!#8!!!!!!!%&@J!!!3C`FQ9Q!!P'2`!!!#B!!!!!!!%'B!!!!$j`FQ9Q!!N63!!
4837!!#F!!!!!!!%'RJ!!!!j`FQ9Q!!MZ(3!!!#J!!!!!!!%'V!!!!GT`FQ9Q!!Lmf!!
4838!!#N!!!!!!!%)KJ!!!'*`FQ9Q!!LrK!!!!#S!!!!!!!%)k!!!!"4`FQ9Q!!NchJ!
4839!!#X!!!!!!!%)r!!!!!T`FQ9Q!!M,S!!!!#`!!!!!!!%*"J!!!!a`FQ9Q!!N%'3!
4840!!#d!!!!!!!%*%J!!!-T`FQ9Q!!NJ2!!!!#i!!!!!!!%*h!!!!4K`FQ9Q!!PIl3!
4841!!#m!!!!!!!%+p!!!!+K`FQ9Q!!Lq%J!!!$!!!!!!!!%,R!!!!#j`FQ9Q!!LM0`!
4842!!$%!!!!!!!%,bJ!!!Ja`FQ9Q!!NG#`!!!$)!!!!!!!%0eJ!!#J"YG("X!!!!!J!
4843!!!!!!!!!!!%AeJ!!!3"YG("c!!!!!J!!!!!!!!!!!!%BeJ!!!""YG("T!!!!!J!
4844!!!!!!!!!!!%BjJ!!!0"YG'a[!!!!!J!!!!!!!!!!!!%CYJ!!!#"YG(0X!!!!!J!
4845!!!!!!!!!!!%CeJ!!"4"`FQ9Q!!PDj!!!!$-!!!!!!!%HjJ!!!!K`FQ9Q!!NN$!!
4846!!$3!!!!!!!%HlJ!!!"T`FQ9Q!!MT*`!!!$8!!!!!!!%I#!!!$+"`FQ9Q!!P`ZJ!
4847!!$B!!!!!!!%VU!!!"K4`FQ9Q!!N$-3!!!$F!!!!!!!%a[!!!#5C`FQ9Q!!L9f`!
4848!!$J!!!!!!!%kiJ!!!3G`FQ9Q!!LI%`!!!$N!!!!!!!%lk3!!!b"`FQ9Q!!Lj$!!
4849!!$S!!!!!!!%r#3!!!"4`FQ9Q!!MhR`!!!$X!!!!!!!%r(3!!!!T`FQ9Q!!M-hJ!
4850!!$`!!!!!!!%r*`!!!!a`FQ9Q!!N&m!!!!$d!!!!!!!%r-`!!!!j`FQ9Q!!P[``!
4851!!$i!!!!!!!%r33!!!3C`FQ9Q!!MmQ!!!!$m!!!!!!!&!4`!!!$j`FQ9Q!!MK!J!
4852!!%!!!!!!!!&!K3!!!!j`FQ9Q!!LfY`!!!%%!!!!!!!&!N`!!!GT`FQ9Q!!MPM!!
4853!!%)!!!!!!!&#E3!!!'*`FQ9Q!!PS+!!!!%-!!!!!!!&#c`!!!"4`FQ9Q!!MH03!
4854!!%3!!!!!!!&#i`!!!!T`FQ9Q!!PH+3!!!%8!!!!!!!&#l3!!!!a`FQ9Q!!L*a3!
4855!!%B!!!!!!!&#q3!!!-T`FQ9Q!!L*,!!!!%F!!!!!!!&$``!!!4K`FQ9Q!!MZ"!!
4856!!%J!!!!!!!&%f`!!!+K`FQ9Q!!L@Q`!!!%N!!!!!!!&&J`!!!#j`FQ9Q!!M8&3!
4857!!%S!!!!!!!&&X3!!!Ja`FQ9Q!!Lj"J!!!%X!!!!!!!&([3!!4J"YG("X!!!!!`!
4858!!!!!!!!!!!'0[3!!"`"YG("c!!!!!`!!!!!!!!!!!!'8[3!!!""YG("T!!!!!`!
4859!!!!!!!!!!!'8c3!!!#"YG(0X!!!!!`!!!!!!!!!!!!'8l3!!"T4YG'a[!!!!!`!
4860!!!!!!!!!!!'EJ3!!"4"`FQ9Q!!N*[!!!!%`!!!!!!!'JN3!!!!K`FQ9Q!!Kq93!
4861!!%d!!!!!!!'JQ3!!!"T`FQ9Q!!M+H`!!!%i!!!!!!!'JX`!!%0"`FQ9Q!!N6p!!
4862!!%m!!!!!!!'aJ`!!"K4`FQ9Q!!M$+3!!!&!!!!!!!!'hP`!!#5C`FQ9Q!!L!9`!
4863!!&%!!!!!!!(![3!!!3G`FQ9Q!!N`BJ!!!&)!!!!!!!("a!!!!b"`FQ9Q!!M3)3!
4864!!&-!!!!!!!(%j!!!!"4`FQ9Q!!L4H3!!!&3!!!!!!!(%q!!!!!T`FQ9Q!!NR0J!
4865!!&8!!!!!!!(&!J!!!!a`FQ9Q!!L'$3!!!&B!!!!!!!(&$J!!!!j`FQ9Q!!MR53!
4866!!&F!!!!!!!(&(!!!!3C`FQ9Q!!PEH!!!!&J!!!!!!!(')J!!!$j`FQ9Q!!MfA3!
4867!!&N!!!!!!!('B!!!!!j`FQ9Q!!N&53!!!&S!!!!!!!('EJ!!!GT`FQ9Q!!LB-`!
4868!!&X!!!!!!!()5!!!!'*`FQ9Q!!L6[3!!!&`!!!!!!!()UJ!!!"4`FQ9Q!!LeT`!
4869!!&d!!!!!!!()[J!!!!T`FQ9Q!!N,D`!!!&i!!!!!!!()b!!!!!a`FQ9Q!!LcY`!
4870!!&m!!!!!!!()e!!!!-T`FQ9Q!!LFj`!!!'!!!!!!!!(*RJ!!!4K`FQ9Q!!N!V3!
4871!!'%!!!!!!!(+YJ!!!+K`FQ9Q!!N(2!!!!')!!!!!!!(,AJ!!!#j`FQ9Q!!LQY!!
4872!!'-!!!!!!!(,M!!!!Ja`FQ9Q!!M053!!!'3!!!!!!!(0Q!!!#J"YG("X!!!!"!!
4873!!!!!!!!!!!(AQ!!!!3"YG("c!!!!"!!!!!!!!!!!!!(BQ!!!!""YG("T!!!!"!!
4874!!!!!!!!!!!(BU!!!!#"YG(0X!!!!"!!!!!!!!!!!!!(Bb!!!!)aYG'a[!!!!"!!
4875!!!!!!!!!!!(C9!!!"4"`FQ9Q!!MM#`!!!'8!!!!!!!(HC!!!!!K`FQ9Q!!M"$!!
4876!!'B!!!!!!!(HE!!!!"T`FQ9Q!!MYHJ!!!'F!!!!!!!(HKJ!!%0"`FQ9Q!!MKm`!
4877!!'J!!!!!!!([9J!!"K4`FQ9Q!!Nre3!!!'N!!!!!!!(eDJ!!#5C`FQ9Q!!LZ3J!
4878!!'S!!!!!!!(qN!!!!!%(F(*PCJ!)KRi!!!"V!!!!!!!"rjF!!!-JF(*PCJ!)PD8
4879!!!"X!!!!!!!#!VF!!!!8F(*PCJ!*0m)!!!"Y!!!!!!!#!XX!!!!+F(*PCJ!*AZd
4880!!!"Z!!!!!!!#!Y8!!!!-F(*PCJ!)Vii!!!"[!!!!!!!#!Z%!!!!1F(*PCJ!*,[d
4881!!!"`!!!!!!!#!Zm!!!%'F(*PCJ!*'EB!!!"a!!!!!!!#!r8!!!!qF(*PCJ!*0P8
4882!!!"b!!!!!!!#"$-!!!!1F(*PCJ!*-D%!!!"c!!!!!!!#"%%!!!(DF(*PCJ!*0"i
4883!!!"d!!!!!!!#"KX!!!"LF(*PCJ!)GH!!!!"e!!!!!!!#"Rd!!!!8F(*PCJ!)Q)S
4884!!!"f!!!!!!!#"T%!!!!+F(*PCJ!*!Pd!!!"h!!!!!!!#"TX!!!!-F(*PCJ!)PR-
4885!!!"i!!!!!!!#"UF!!!$+F(*PCJ!)TC!!!!!!H3!!!!!!!JGa!!!"'("bC@B!#-A
48869!!!!HJ!!!!!!!JL*!!!!U("bC@B!#86U!!!!H`!!!!!!!JNa!!!!,R"bC@B!#@@
48878!!!!I!!!!!!!!JPI!!!#$("bC@B!#(ep!!!!I3!!!!!!!JYV!!!&!'edF'`!!!!
4888&!!!!!!!!!!!!!K"V!!!!J'edF(-!!!!&!!!!!!!!!!!!!K$V!!!!%'edF'N!!!!
4889&!!!!!!!!!!!!!K$l!!!!)'edFf`!!!!&!!!!!!!!!!!!!K%E!!!!J'edE'm!!!!
4890&!!!!!!!!!!!!!K'E!!!&%("bC@B!#8UQ!!!!IJ!!!!!!!KDV!!!!#("bC@B!#22
4891(!!!!I`!!!!!!!KDc!!!!'R"bC@B!#3#p!!!!J!!!!!!!!KE0!!!3d("bC@B!#2`
4892[!!!!J3!!!!!!!LHG!!!'&("bC@B!#1[4!!!!JJ!!!!!!!Lfa!!!)PR"bC@B!#(,
48939!!!!J`!!!!!!!MC(!!!""h"bC@B!#@rk!!!!K!!!!!!!!MG1!!!$)("bC@B!#1G
4894'!!!!K3!!!!!!!MTZ!!!!&("bC@B!#128!!!!KJ!!!!!!!MU#!!!!#R"bC@B!#,1
4895q!!!!K`!!!!!!!MU-!!!!$("bC@B!#)c'!!!!L!!!!!!!!MUB!!!!$R"bC@B!#4S
4896,!!!!L3!!!!!!!MUQ!!!""R"bC@B!#-iX!!!!LJ!!!!!!!MZX!!!!2R"bC@B!#(C
4897#!!!!L`!!!!!!!M[U!!!!$R"bC@B!#@+F!!!!M!!!!!!!!M[i!!!"fR"bC@B!#8(
4898h!!!!M3!!!!!!!Mh5!!!!BR"bC@B!#2!L!!!!MJ!!!!!!!Mid!!!!&("bC@B!#(d
4899@!!!!M`!!!!!!!Mj)!!!!#R"bC@B!#2iC!!!!N!!!!!!!!!)q8J!!!!a`FQ9Q!!M
4900YZ!!!!*%!!!!!!!)qAJ!!!-T`FQ9Q!!Pb83!!!*)!!!!!!!)r+!!!!4K`FQ9Q!!L
4901a"3!!!*-!!!!!!!*!3!!!!+K`FQ9Q!!NZf`!!!*3!!!!!!!*!k!!!!#j`FQ9Q!!K
4902j[`!!!*8!!!!!!!*"&J!!!Ja`FQ9Q!!Mi,3!!!*B!!!!!!!*$)J!!#J"YG("X!!!
4903!"J!!!!!!!!!!!!*0)J!!!3"YG("c!!!!"J!!!!!!!!!!!!*1)J!!!""YG("T!!!
4904!"J!!!!!!!!!!!!*1-J!!!)aYG'a[!!!!"J!!!!!!!!!!!!*1[J!!!#"YG(0X!!!
4905!"J!!!!!!!!!!!!*1hJ!!"4"`FQ9Q!!Kf)J!!!*F!!!!!!!*6lJ!!!!K`FQ9Q!!N
4906bh`!!!*J!!!!!!!*6pJ!!!"T`FQ9Q!!MZB3!!!*N!!!!!!!*8%!!!%0"`FQ9Q!!M
4907[m`!!!*S!!!!!!!*Ni!!!"K4`FQ9Q!!NVZ`!!!*X!!!!!!!*Up!!!#*C`FQ9Q!!M
4908b!J!!!*`!!!!!!!*cLJ!!!3G`FQ9Q!!P083!!!*d!!!!!!!*dN3!!!b"`FQ9Q!!M
4909a13!!!*i!!!!!!!*hX3!!!"4`FQ9Q!!P9h3!!!*m!!!!!!!*ha3!!!!T`FQ9Q!!M
4910+,3!!!+!!!!!!!!*hc`!!!!a`FQ9Q!!L6T`!!!+%!!!!!!!*hf`!!!!j`FQ9Q!!M
4911jB3!!!+)!!!!!!!*hk3!!!3C`FQ9Q!!L0Z`!!!+-!!!!!!!*il`!!!$j`FQ9Q!!M
4912P3J!!!+3!!!!!!!*j,3!!!!j`FQ9Q!!N6hJ!!!+8!!!!!!!*j1`!!!GT`FQ9Q!!N
4913kJ`!!!+B!!!!!!!*l&3!!!'*`FQ9Q!!N&H!!!!+F!!!!!!!*lG`!!!"4`FQ9Q!!L
4914,iJ!!!+J!!!!!!!*lL`!!!!T`FQ9Q!!MDI3!!!+N!!!!!!!*lP3!!!!a`FQ9Q!!K
4915l33!!!+S!!!!!!!*lS3!!!-T`FQ9Q!!MlG3!!!+X!!!!!!!*mD`!!!4K`FQ9Q!!L
4916e&!!!!+`!!!!!!!*pJ`!!!+K`FQ9Q!!MK1`!!!+d!!!!!!!*q+`!!!#j`FQ9Q!!L
4917Y#!!!!+i!!!!!!!*q@3!!!Ja`FQ9Q!!L42`!!!+m!!!!!!!+!C3!!2!"YG("X!!!
4918!"`!!!!!!!!!!!!+mC3!!"J"YG("c!!!!"`!!!!!!!!!!!!,#C3!!!""YG("T!!!
4919!"`!!!!!!!!!!!!,#G3!!"G4YG'a[!!!!"`!!!!!!!!!!!!,)53!!!#"YG(0X!!!
4920!"`!!!!!!!!!!!!,)D3!!"4"`FQ9Q!!NXL3!!!,!!!!!!!!,0H3!!!!K`FQ9Q!!P
4921%U3!!!,%!!!!!!!,0J3!!!"T`FQ9Q!!LT(!!!!,)!!!!!!!,0Q`!!%0"`FQ9Q!!N
4922(M3!!!,-!!!!!!!,HD`!!"K4`FQ9Q!!PH[`!!!,3!!!!!!!,NI`!!#5C`FQ9Q!!M
4923Hh!!!!,8!!!!!!!,YT3!!!3G`FQ9Q!!M`h!!!!,B!!!!!!!,ZV!!!!b"`FQ9Q!!L
4924N03!!!,F!!!!!!!,ac!!!!"4`FQ9Q!!Mb6J!!!,J!!!!!!!,ai!!!!!T`FQ9Q!!N
4925a@!!!!,N!!!!!!!,akJ!!!!a`FQ9Q!!LH1J!!!,S!!!!!!!,apJ!!!!j`FQ9Q!!N
4926"f3!!!,X!!!!!!!,b"!!!!3C`FQ9Q!!P`p!!!!,`!!!!!!!,c#J!!!$j`FQ9Q!!P
4927Qf!!!!,d!!!!!!!,c5!!!!!j`FQ9Q!!PYDJ!!!,i!!!!!!!,c9J!!!GT`FQ9Q!!N
4928#-!!!!,m!!!!!!!,e-!!!!'*`FQ9Q!!ME@!!!!-!!!!!!!!,eNJ!!!"4`FQ9Q!!L
4929j4`!!!-%!!!!!!!,eTJ!!!!T`FQ9Q!!Mf$3!!!-)!!!!!!!,eX!!!!!a`FQ9Q!!M
4930eDJ!!!--!!!!!!!,e[!!!!-T`FQ9Q!!MfF3!!!-3!!!!!!!,fKJ!!!4K`FQ9Q!!N
4931`R`!!!-8!!!!!!!,hRJ!!!+K`FQ9Q!!LqH3!!!-B!!!!!!!,i4J!!!#j`FQ9Q!!L
49323!*S!!!$(!!!!!!!#q(3!!!)-F(*PCJ!)d'B!!!$)!!!!!!!#qS!!!$`!EA4`E!!
4933!!!J!!!!!!!!!!!!$0S!!!!B!EA4`F`!!!!J!!!!!!!!!!!!$2)!!!!!3EA4`D3!
4934!!!J!!!!!!!!!!!!$2*!!!!!!)'edFf`!!!!)!!!!!!!!!!!!!cb`!!!&e'edE'm
4935!!!!)!!!!!!!!!!!!!d+%!!!3a'edCf`!!!2S!!!!!!!!!!!!!e0)!!!!,'e[G'N
4936!!!!!!!!!!!!!!!!!!h(U!!!6J&"-Fh3!#,"V!!!!b3!!!!!!!&LS!!!#,'e`FfN
4937!!!2S!!!!!!!!!!!!!fMk!!!!%'ecG(!!!!!#!!!!!!!!!!!!!fN+!!!!%'ecG(!
4938!!!!&!!!!!!!!!!!!!&V8!!!!+'ecG'N!!!2S!!!!!!!!!!!!!fP#!!!!+'ecG'N
4939!!!!!!!!!!!!!!!!!!&Vm!!!!$'eKE'`!!!!!!!!!!!!!!!!!!fE1!!!!a'eKF'`
4940!!!!!!!!!!!!!!!$B03!!:
diff --git a/src/lib/libssl/src/MacOS/Randomizer.cpp b/src/lib/libssl/src/MacOS/Randomizer.cpp
deleted file mode 100644
index cceb6bde44..0000000000
--- a/src/lib/libssl/src/MacOS/Randomizer.cpp
+++ /dev/null
@@ -1,476 +0,0 @@
1/*
2------- Strong random data generation on a Macintosh (pre - OS X) ------
3
4-- GENERAL: We aim to generate unpredictable bits without explicit
5 user interaction. A general review of the problem may be found
6 in RFC 1750, "Randomness Recommendations for Security", and some
7 more discussion, of general and Mac-specific issues has appeared
8 in "Using and Creating Cryptographic- Quality Random Numbers" by
9 Jon Callas (www.merrymeet.com/jon/usingrandom.html).
10
11 The data and entropy estimates provided below are based on my
12 limited experimentation and estimates, rather than by any
13 rigorous study, and the entropy estimates tend to be optimistic.
14 They should not be considered absolute.
15
16 Some of the information being collected may be correlated in
17 subtle ways. That includes mouse positions, timings, and disk
18 size measurements. Some obvious correlations will be eliminated
19 by the programmer, but other, weaker ones may remain. The
20 reliability of the code depends on such correlations being
21 poorly understood, both by us and by potential interceptors.
22
23 This package has been planned to be used with OpenSSL, v. 0.9.5.
24 It requires the OpenSSL function RAND_add.
25
26-- OTHER WORK: Some source code and other details have been
27 published elsewhere, but I haven't found any to be satisfactory
28 for the Mac per se:
29
30 * The Linux random number generator (by Theodore Ts'o, in
31 drivers/char/random.c), is a carefully designed open-source
32 crypto random number package. It collects data from a variety
33 of sources, including mouse, keyboard and other interrupts.
34 One nice feature is that it explicitly estimates the entropy
35 of the data it collects. Some of its features (e.g. interrupt
36 timing) cannot be reliably exported to the Mac without using
37 undocumented APIs.
38
39 * Truerand by Don P. Mitchell and Matt Blaze uses variations
40 between different timing mechanisms on the same system. This
41 has not been tested on the Mac, but requires preemptive
42 multitasking, and is hardware-dependent, and can't be relied
43 on to work well if only one oscillator is present.
44
45 * Cryptlib's RNG for the Mac (RNDMAC.C by Peter Gutmann),
46 gathers a lot of information about the machine and system
47 environment. Unfortunately, much of it is constant from one
48 startup to the next. In other words, the random seed could be
49 the same from one day to the next. Some of the APIs are
50 hardware-dependent, and not all are compatible with Carbon (OS
51 X). Incidentally, the EGD library is based on the UNIX entropy
52 gathering methods in cryptlib, and isn't suitable for MacOS
53 either.
54
55 * Mozilla (and perhaps earlier versions of Netscape) uses the
56 time of day (in seconds) and an uninitialized local variable
57 to seed the random number generator. The time of day is known
58 to an outside interceptor (to within the accuracy of the
59 system clock). The uninitialized variable could easily be
60 identical between subsequent launches of an application, if it
61 is reached through the same path.
62
63 * OpenSSL provides the function RAND_screen(), by G. van
64 Oosten, which hashes the contents of the screen to generate a
65 seed. This is not useful for an extension or for an
66 application which launches at startup time, since the screen
67 is likely to look identical from one launch to the next. This
68 method is also rather slow.
69
70 * Using variations in disk drive seek times has been proposed
71 (Davis, Ihaka and Fenstermacher, world.std.com/~dtd/;
72 Jakobsson, Shriver, Hillyer and Juels,
73 www.bell-labs.com/user/shriver/random.html). These variations
74 appear to be due to air turbulence inside the disk drive
75 mechanism, and are very strongly unpredictable. Unfortunately
76 this technique is slow, and some implementations of it may be
77 patented (see Shriver's page above.) It of course cannot be
78 used with a RAM disk.
79
80-- TIMING: On the 601 PowerPC the time base register is guaranteed
81 to change at least once every 10 addi instructions, i.e. 10
82 cycles. On a 60 MHz machine (slowest PowerPC) this translates to
83 a resolution of 1/6 usec. Newer machines seem to be using a 10
84 cycle resolution as well.
85
86 For 68K Macs, the Microseconds() call may be used. See Develop
87 issue 29 on the Apple developer site
88 (developer.apple.com/dev/techsupport/develop/issue29/minow.html)
89 for information on its accuracy and resolution. The code below
90 has been tested only on PowerPC based machines.
91
92 The time from machine startup to the launch of an application in
93 the startup folder has a variance of about 1.6 msec on a new G4
94 machine with a defragmented and optimized disk, most extensions
95 off and no icons on the desktop. This can be reasonably taken as
96 a lower bound on the variance. Most of this variation is likely
97 due to disk seek time variability. The distribution of startup
98 times is probably not entirely even or uncorrelated. This needs
99 to be investigated, but I am guessing that it not a majpor
100 problem. Entropy = log2 (1600/0.166) ~= 13 bits on a 60 MHz
101 machine, ~16 bits for a 450 MHz machine.
102
103 User-launched application startup times will have a variance of
104 a second or more relative to machine startup time. Entropy >~22
105 bits.
106
107 Machine startup time is available with a 1-second resolution. It
108 is predictable to no better a minute or two, in the case of
109 people who show up punctually to work at the same time and
110 immediately start their computer. Using the scheduled startup
111 feature (when available) will cause the machine to start up at
112 the same time every day, making the value predictable. Entropy
113 >~7 bits, or 0 bits with scheduled startup.
114
115 The time of day is of course known to an outsider and thus has 0
116 entropy if the system clock is regularly calibrated.
117
118-- KEY TIMING: A very fast typist (120 wpm) will have a typical
119 inter-key timing interval of 100 msec. We can assume a variance
120 of no less than 2 msec -- maybe. Do good typists have a constant
121 rhythm, like drummers? Since what we measure is not the
122 key-generated interrupt but the time at which the key event was
123 taken off the event queue, our resolution is roughly the time
124 between process switches, at best 1 tick (17 msec). I therefore
125 consider this technique questionable and not very useful for
126 obtaining high entropy data on the Mac.
127
128-- MOUSE POSITION AND TIMING: The high bits of the mouse position
129 are far from arbitrary, since the mouse tends to stay in a few
130 limited areas of the screen. I am guessing that the position of
131 the mouse is arbitrary within a 6 pixel square. Since the mouse
132 stays still for long periods of time, it should be sampled only
133 after it was moved, to avoid correlated data. This gives an
134 entropy of log2(6*6) ~= 5 bits per measurement.
135
136 The time during which the mouse stays still can vary from zero
137 to, say, 5 seconds (occasionally longer). If the still time is
138 measured by sampling the mouse during null events, and null
139 events are received once per tick, its resolution is 1/60th of a
140 second, giving an entropy of log2 (60*5) ~= 8 bits per
141 measurement. Since the distribution of still times is uneven,
142 this estimate is on the high side.
143
144 For simplicity and compatibility across system versions, the
145 mouse is to be sampled explicitly (e.g. in the event loop),
146 rather than in a time manager task.
147
148-- STARTUP DISK TOTAL FILE SIZE: Varies typically by at least 20k
149 from one startup to the next, with 'minimal' computer use. Won't
150 vary at all if machine is started again immediately after
151 startup (unless virtual memory is on), but any application which
152 uses the web and caches information to disk is likely to cause
153 this much variation or more. The variation is probably not
154 random, but I don't know in what way. File sizes tend to be
155 divisible by 4 bytes since file format fields are often
156 long-aligned. Entropy > log2 (20000/4) ~= 12 bits.
157
158-- STARTUP DISK FIRST AVAILABLE ALLOCATION BLOCK: As the volume
159 gets fragmented this could be anywhere in principle. In a
160 perfectly unfragmented volume this will be strongly correlated
161 with the total file size on the disk. With more fragmentation
162 comes less certainty. I took the variation in this value to be
163 1/8 of the total file size on the volume.
164
165-- SYSTEM REQUIREMENTS: The code here requires System 7.0 and above
166 (for Gestalt and Microseconds calls). All the calls used are
167 Carbon-compatible.
168*/
169
170/*------------------------------ Includes ----------------------------*/
171
172#include "Randomizer.h"
173
174// Mac OS API
175#include <Files.h>
176#include <Folders.h>
177#include <Events.h>
178#include <Processes.h>
179#include <Gestalt.h>
180#include <Resources.h>
181#include <LowMem.h>
182
183// Standard C library
184#include <stdlib.h>
185#include <math.h>
186
187/*---------------------- Function declarations -----------------------*/
188
189// declared in OpenSSL/crypto/rand/rand.h
190extern "C" void RAND_add (const void *buf, int num, double entropy);
191
192unsigned long GetPPCTimer (bool is601); // Make it global if needed
193 // elsewhere
194
195/*---------------------------- Constants -----------------------------*/
196
197#define kMouseResolution 6 // Mouse position has to differ
198 // from the last one by this
199 // much to be entered
200#define kMousePositionEntropy 5.16 // log2 (kMouseResolution**2)
201#define kTypicalMouseIdleTicks 300.0 // I am guessing that a typical
202 // amount of time between mouse
203 // moves is 5 seconds
204#define kVolumeBytesEntropy 12.0 // about log2 (20000/4),
205 // assuming a variation of 20K
206 // in total file size and
207 // long-aligned file formats.
208#define kApplicationUpTimeEntropy 6.0 // Variance > 1 second, uptime
209 // in ticks
210#define kSysStartupEntropy 7.0 // Entropy for machine startup
211 // time
212
213
214/*------------------------ Function definitions ----------------------*/
215
216CRandomizer::CRandomizer (void)
217{
218 long result;
219
220 mSupportsLargeVolumes =
221 (Gestalt(gestaltFSAttr, &result) == noErr) &&
222 ((result & (1L << gestaltFSSupports2TBVols)) != 0);
223
224 if (Gestalt (gestaltNativeCPUtype, &result) != noErr)
225 {
226 mIsPowerPC = false;
227 mIs601 = false;
228 }
229 else
230 {
231 mIs601 = (result == gestaltCPU601);
232 mIsPowerPC = (result >= gestaltCPU601);
233 }
234 mLastMouse.h = mLastMouse.v = -10; // First mouse will
235 // always be recorded
236 mLastPeriodicTicks = TickCount();
237 GetTimeBaseResolution ();
238
239 // Add initial entropy
240 AddTimeSinceMachineStartup ();
241 AddAbsoluteSystemStartupTime ();
242 AddStartupVolumeInfo ();
243 AddFiller ();
244}
245
246void CRandomizer::PeriodicAction (void)
247{
248 AddCurrentMouse ();
249 AddNow (0.0); // Should have a better entropy estimate here
250 mLastPeriodicTicks = TickCount();
251}
252
253/*------------------------- Private Methods --------------------------*/
254
255void CRandomizer::AddCurrentMouse (void)
256{
257 Point mouseLoc;
258 unsigned long lastCheck; // Ticks since mouse was last
259 // sampled
260
261#if TARGET_API_MAC_CARBON
262 GetGlobalMouse (&mouseLoc);
263#else
264 mouseLoc = LMGetMouseLocation();
265#endif
266
267 if (labs (mLastMouse.h - mouseLoc.h) > kMouseResolution/2 &&
268 labs (mLastMouse.v - mouseLoc.v) > kMouseResolution/2)
269 AddBytes (&mouseLoc, sizeof (mouseLoc),
270 kMousePositionEntropy);
271
272 if (mLastMouse.h == mouseLoc.h && mLastMouse.v == mouseLoc.v)
273 mMouseStill ++;
274 else
275 {
276 double entropy;
277
278 // Mouse has moved. Add the number of measurements for
279 // which it's been still. If the resolution is too
280 // coarse, assume the entropy is 0.
281
282 lastCheck = TickCount() - mLastPeriodicTicks;
283 if (lastCheck <= 0)
284 lastCheck = 1;
285 entropy = log2l
286 (kTypicalMouseIdleTicks/(double)lastCheck);
287 if (entropy < 0.0)
288 entropy = 0.0;
289 AddBytes (&mMouseStill, sizeof (mMouseStill), entropy);
290 mMouseStill = 0;
291 }
292 mLastMouse = mouseLoc;
293}
294
295void CRandomizer::AddAbsoluteSystemStartupTime (void)
296{
297 unsigned long now; // Time in seconds since
298 // 1/1/1904
299 GetDateTime (&now);
300 now -= TickCount() / 60; // Time in ticks since machine
301 // startup
302 AddBytes (&now, sizeof (now), kSysStartupEntropy);
303}
304
305void CRandomizer::AddTimeSinceMachineStartup (void)
306{
307 AddNow (1.5); // Uncertainty in app startup
308 // time is > 1.5 msec (for
309 // automated app startup).
310}
311
312void CRandomizer::AddAppRunningTime (void)
313{
314 ProcessSerialNumber PSN;
315 ProcessInfoRec ProcessInfo;
316
317 ProcessInfo.processInfoLength = sizeof (ProcessInfoRec);
318 ProcessInfo.processName = nil;
319 ProcessInfo.processAppSpec = nil;
320
321 GetCurrentProcess (&PSN);
322 GetProcessInformation (&PSN, &ProcessInfo);
323
324 // Now add the amount of time in ticks that the current process
325 // has been active
326
327 AddBytes (&ProcessInfo, sizeof (ProcessInfoRec),
328 kApplicationUpTimeEntropy);
329}
330
331void CRandomizer::AddStartupVolumeInfo (void)
332{
333 short vRefNum;
334 long dirID;
335 XVolumeParam pb;
336 OSErr err;
337
338 if (!mSupportsLargeVolumes)
339 return;
340
341 FindFolder (kOnSystemDisk, kSystemFolderType, kDontCreateFolder,
342 &vRefNum, &dirID);
343 pb.ioVRefNum = vRefNum;
344 pb.ioCompletion = 0;
345 pb.ioNamePtr = 0;
346 pb.ioVolIndex = 0;
347 err = PBXGetVolInfoSync (&pb);
348 if (err != noErr)
349 return;
350
351 // Base the entropy on the amount of space used on the disk and
352 // on the next available allocation block. A lot else might be
353 // unpredictable, so might as well toss the whole block in. See
354 // comments for entropy estimate justifications.
355
356 AddBytes (&pb, sizeof (pb),
357 kVolumeBytesEntropy +
358 log2l (((pb.ioVTotalBytes.hi - pb.ioVFreeBytes.hi)
359 * 4294967296.0D +
360 (pb.ioVTotalBytes.lo - pb.ioVFreeBytes.lo))
361 / pb.ioVAlBlkSiz - 3.0));
362}
363
364/*
365 On a typical startup CRandomizer will come up with about 60
366 bits of good, unpredictable data. Assuming no more input will
367 be available, we'll need some more lower-quality data to give
368 OpenSSL the 128 bits of entropy it desires. AddFiller adds some
369 relatively predictable data into the soup.
370*/
371
372void CRandomizer::AddFiller (void)
373{
374 struct
375 {
376 ProcessSerialNumber psn; // Front process serial
377 // number
378 RGBColor hiliteRGBValue; // User-selected
379 // highlight color
380 long processCount; // Number of active
381 // processes
382 long cpuSpeed; // Processor speed
383 long totalMemory; // Total logical memory
384 // (incl. virtual one)
385 long systemVersion; // OS version
386 short resFile; // Current resource file
387 } data;
388
389 GetNextProcess ((ProcessSerialNumber*) kNoProcess);
390 while (GetNextProcess (&data.psn) == noErr)
391 data.processCount++;
392 GetFrontProcess (&data.psn);
393 LMGetHiliteRGB (&data.hiliteRGBValue);
394 Gestalt (gestaltProcClkSpeed, &data.cpuSpeed);
395 Gestalt (gestaltLogicalRAMSize, &data.totalMemory);
396 Gestalt (gestaltSystemVersion, &data.systemVersion);
397 data.resFile = CurResFile ();
398
399 // Here we pretend to feed the PRNG completely random data. This
400 // is of course false, as much of the above data is predictable
401 // by an outsider. At this point we don't have any more
402 // randomness to add, but with OpenSSL we must have a 128 bit
403 // seed before we can start. We just add what we can, without a
404 // real entropy estimate, and hope for the best.
405
406 AddBytes (&data, sizeof(data), 8.0 * sizeof(data));
407 AddCurrentMouse ();
408 AddNow (1.0);
409}
410
411//------------------- LOW LEVEL ---------------------
412
413void CRandomizer::AddBytes (void *data, long size, double entropy)
414{
415 RAND_add (data, size, entropy * 0.125); // Convert entropy bits
416 // to bytes
417}
418
419void CRandomizer::AddNow (double millisecondUncertainty)
420{
421 long time = SysTimer();
422 AddBytes (&time, sizeof (time), log2l (millisecondUncertainty *
423 mTimebaseTicksPerMillisec));
424}
425
426//----------------- TIMING SUPPORT ------------------
427
428void CRandomizer::GetTimeBaseResolution (void)
429{
430#ifdef __powerc
431 long speed;
432
433 // gestaltProcClkSpeed available on System 7.5.2 and above
434 if (Gestalt (gestaltProcClkSpeed, &speed) != noErr)
435 // Only PowerPCs running pre-7.5.2 are 60-80 MHz
436 // machines.
437 mTimebaseTicksPerMillisec = 6000.0D;
438 // Assume 10 cycles per clock update, as in 601 spec. Seems true
439 // for later chips as well.
440 mTimebaseTicksPerMillisec = speed / 1.0e4D;
441#else
442 // 68K VIA-based machines (see Develop Magazine no. 29)
443 mTimebaseTicksPerMillisec = 783.360D;
444#endif
445}
446
447unsigned long CRandomizer::SysTimer (void) // returns the lower 32
448 // bit of the chip timer
449{
450#ifdef __powerc
451 return GetPPCTimer (mIs601);
452#else
453 UnsignedWide usec;
454 Microseconds (&usec);
455 return usec.lo;
456#endif
457}
458
459#ifdef __powerc
460// The timebase is available through mfspr on 601, mftb on later chips.
461// Motorola recommends that an 601 implementation map mftb to mfspr
462// through an exception, but I haven't tested to see if MacOS actually
463// does this. We only sample the lower 32 bits of the timer (i.e. a
464// few minutes of resolution)
465
466asm unsigned long GetPPCTimer (register bool is601)
467{
468 cmplwi is601, 0 // Check if 601
469 bne _601 // if non-zero goto _601
470 mftb r3 // Available on 603 and later.
471 blr // return with result in r3
472_601:
473 mfspr r3, spr5 // Available on 601 only.
474 // blr inserted automatically
475}
476#endif
diff --git a/src/lib/libssl/src/MacOS/Randomizer.h b/src/lib/libssl/src/MacOS/Randomizer.h
deleted file mode 100644
index 565537b15d..0000000000
--- a/src/lib/libssl/src/MacOS/Randomizer.h
+++ /dev/null
@@ -1,43 +0,0 @@
1
2// Gathers unpredictable system data to be used for generating
3// random bits
4
5#include <MacTypes.h>
6
7class CRandomizer
8{
9public:
10 CRandomizer (void);
11 void PeriodicAction (void);
12
13private:
14
15 // Private calls
16
17 void AddTimeSinceMachineStartup (void);
18 void AddAbsoluteSystemStartupTime (void);
19 void AddAppRunningTime (void);
20 void AddStartupVolumeInfo (void);
21 void AddFiller (void);
22
23 void AddCurrentMouse (void);
24 void AddNow (double millisecondUncertainty);
25 void AddBytes (void *data, long size, double entropy);
26
27 void GetTimeBaseResolution (void);
28 unsigned long SysTimer (void);
29
30 // System Info
31 bool mSupportsLargeVolumes;
32 bool mIsPowerPC;
33 bool mIs601;
34
35 // Time info
36 double mTimebaseTicksPerMillisec;
37 unsigned long mLastPeriodicTicks;
38
39 // Mouse info
40 long mSamplePeriod;
41 Point mLastMouse;
42 long mMouseStill;
43};
diff --git a/src/lib/libssl/src/MacOS/TODO b/src/lib/libssl/src/MacOS/TODO
deleted file mode 100644
index 903eb133de..0000000000
--- a/src/lib/libssl/src/MacOS/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
1-------------------------------------------------------------------
2Verify server certificate
3-------------------------------------------------------------------
4Currently omitted from the project:
5
6 crypto/tmdiff.c
7 crypto/bio/bss_conn.c
8 crypto/bio/b_sock.c
9 crypto/bio/bss_acpt.c
10 crypto/bio/bss_log.h
11
12-------------------------------------------------------------------
13Build libraries to link with...
14-------------------------------------------------------------------
15Port openssl application.
16-------------------------------------------------------------------
17BN optimizations (currently PPC version is compiled with BN_LLONG)
18-------------------------------------------------------------------
diff --git a/src/lib/libssl/src/MacOS/_MWERKS_GUSI_prefix.h b/src/lib/libssl/src/MacOS/_MWERKS_GUSI_prefix.h
deleted file mode 100644
index fe6b5387d6..0000000000
--- a/src/lib/libssl/src/MacOS/_MWERKS_GUSI_prefix.h
+++ /dev/null
@@ -1,9 +0,0 @@
1#include <MacHeaders.h>
2#define B_ENDIAN
3#ifdef __POWERPC__
4#pragma longlong on
5#endif
6#if 1
7#define MAC_OS_GUSI_SOURCE
8#endif
9#define MONOLITH
diff --git a/src/lib/libssl/src/MacOS/_MWERKS_prefix.h b/src/lib/libssl/src/MacOS/_MWERKS_prefix.h
deleted file mode 100644
index 2189da753b..0000000000
--- a/src/lib/libssl/src/MacOS/_MWERKS_prefix.h
+++ /dev/null
@@ -1,9 +0,0 @@
1#include <MacHeaders.h>
2#define B_ENDIAN
3#ifdef __POWERPC__
4#pragma longlong on
5#endif
6#if 0
7#define MAC_OS_GUSI_SOURCE
8#endif
9#define MONOLITH
diff --git a/src/lib/libssl/src/MacOS/buildinf.h b/src/lib/libssl/src/MacOS/buildinf.h
deleted file mode 100644
index 90875b6e2f..0000000000
--- a/src/lib/libssl/src/MacOS/buildinf.h
+++ /dev/null
@@ -1,5 +0,0 @@
1#ifndef MK1MF_BUILD
2# define CFLAGS "-DB_ENDIAN"
3# define PLATFORM "macos"
4# define DATE "Sun Feb 27 19:44:16 MET 2000"
5#endif
diff --git a/src/lib/libssl/src/MacOS/mklinks.as.hqx b/src/lib/libssl/src/MacOS/mklinks.as.hqx
deleted file mode 100644
index fe3e7d53da..0000000000
--- a/src/lib/libssl/src/MacOS/mklinks.as.hqx
+++ /dev/null
@@ -1,820 +0,0 @@
1(This file must be converted with BinHex 4.0)
2
3:#QeVE'PZDh-ZBA-!39"36'&`E(3J!!!!!!!!!*LiI6m!!!!!!3!!!*G#!!#@3J!
4!!AChFQPd!!!!K3)"!3m(Fh9`F'pbG!!!!)B#!3%$"(0eFQ8!!!#(!J-%"!3("3C
5cGfPdBfJ!!!#)!J%"#39cH@jMD!!!!)N#"J%$!`-&"3-'FhPcG'9Y!!!!LJ)&"3)
6%!J8("!-#!`4dB@*X!!!!L`))!3-$!`-$!`-$"(4PE'`!!!#-!J)"#38$G'KP!!!
7!M3))(J)@!Ki#!J))!K)#!`)B!Kd%G'KPE3!!!)i#!J%&#`4dD'9j!!!!M`)#!J)
8#$3TdD(*[G@GSEh9d!!!!N!!#!3%&"(4TCQB!!!#4!J%"!`4dD@eP!!!!NJ)"!JS
9#!h4T!!!!'N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!H!!!!!!!#!!!!!!
10!!!!!!!!!!!!!rrrrr`!!!$3!!!!N!!!!!#"[!!5JAb"[!!5K++!M6R9$9'mJFR9
11Z)(4SDA-JFf0bDA"d)'&`F'aTBf&dD@pZ,#"jEh8JEA9cG#"QDA*cG#"TER0dB@a
12X)%&`F'aP8f0bDA"d,J!!!)C8D'Pc)(0MFQP`G#"MFQ9KG'9c)#iZ,fPZBfaeC'8
13[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@aTBA0PFbi0$8P
14d)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9KFf8JBQ8JF'&
15dD@9ZG$SY+3!!!#S!!J!!!!!!$3!+!"!!!!!-!!!!!!!!!!!!63!0!!S!%!%!!!`
16!!!!!!!!!!!!B!!!!+!!!!!!!!!!)!!!!)!#N2c`!!DR`!!!!l!!!!!&19[ri,`0
17f!#m$-$bKVDG'*KmY52ri,`-`2+LITdBQ(b!ZrrLa`'FJ,`-J2'0`ER4"l[rm)NL
18KV5+)*Kp+3'B)5Ulrr'F#GJ%3!bBZrr41ANje6PB!!#m-@Bm[2%j29%Nr2!#!U"m
19SAb!-CJK`!cm!UFKJ+#m-UC)J9#!)d+J!'#&!!"JJ9#!)d+J!(#&!!"a9Mbm8)&q
20JAMk!9%mSE[rm6Pj1G8j@!!![$%kkre4+!'FU@Bm[2'&`E(3[2(0MF(4`)DJU+&m
21J$'F5@Bm[$#mm!!!!!A!!U#UTp&K26VVrG#KZrra1ANje!!!!('&`E(3!!!!"4P*
22&4J!!!!!!J%P$6L-!!!!!!*B!!!!"!!!!!!G"8&"-!!!!!!!"!!!"!!!!!S!!!!4
23!!!"i)!!!K"!!!3))!!)#"!!%"!)!#!J"!"!8!)!J)J"!3%%!)2#!J"#*!%!)KJ!
24J")3!)!*!!"!")!!3!K!!%!3)!"!)"!!J%!)!3#!"!)"!!S%!J!5#!3!)4!)!#%J
25%!!KB#!!%C"!!!m)J!!!"3!!!!)!!!!%!!!!$J!!!"m!!!(rJ!!$rm!!"rrJ!!rr
26m!!IrrJ!2rrm!(rrrJ$rrrm"rrrrJrrrrm2rrrrMrrrrmrrrrrRrrrrmrrrrq(rr
27rr!rrrrJ(rrr`!rrri!(rrm!$rrq!"rrr!!rrrJ!2rr`!$rri!!IRm!!$`q!!!!(
28!!!!!J!!!!!)!!!!!!!!!!!m!!!!!!!!!!!!!!!!!!!$`m!!!!!!!!!!!!!!!!!!
292!!m!!!!!!!!!!!!!!!rrm!!!m!!!!!!!!!!!!!$`c0m!!!m!!!!!!!!!!!!2!!c
30-m!!!m!!!!!!!!!!!m!$-cI!!!!m!!!!!!!!!$`!-c0m!!!!!m!!!!!!!!2!!c-h
31`!!!!!!m!!!!!!!m!$-cIh`!!!!!!m!!!!!$`!-c0rGh`!!!!!!m!!!!2!!c-hph
32-h`!!!!!!m!!!rrr-cIhF`-h`!!!!!!m!!2lFr0rGc!`-h`!!!!!!m!$pc-rph-$
33!`-h`!!!!!!m!r-`2cF`-$!!-r3!!!!!!m!m!`-c!`-!!$0m!!!!!$-m!m!`-$!`
34!!-cI!!!!!-c`!!m!`-$!!!`-h`!!!!c2!!!!m!`-!!$!c0m!!!$-m!!!!!m!`!!
35-$-hm!!!-c`!!!!!!m!!!`-cIc!!!c2!!!!!!!!m!$!c0r-`!$-m!!!!!!!$pm-$
36-hmc!!-c`!!!!!!!2hI`-cIc-!!c2!!!!!!!!rGc2c0r-`!$-m!!!!!!!!2h-cmh
37mc!!-c`!!!!!!!!$mc!rIr-!!c2!!!!!!!!!!$m$2m!r-$-m!!!!!!!!!!!$rr`!
38!r-c`!!!!!!!!!!!!!!!!!!r2!!!!!!!!!!!!!!!!!!!!m!!!!!!!!!!!!!"!!B!
3913"%J)4"##18%Q)+3!%&!)5!L%%3BL#83*L!G3!#!!B!2`"rJ2r"rq2rmrrlrrhr
40r2riIr"ri2r!ri"h!!)!!!!#!!!!!$r!!!!!!!2r`$`!!!!!2$!m!m!!!!2$!c`!
412!!!2$!c`!!$`!2r`cpm!!!m!rGrpc2!!!2$p$p`-c`!!$`m!`-$0m!$2!2!-$-h
42`$2!!$`$-hm$2!!!2m-hm$2!!!2h2hm$2!!!!r-rm$2!!!!!2r`r2!!!!!!!!!2!
43!!!!!!!#D8f0bDA"d)%&`F'aTBf&dD@pZ$3e8D'Pc)(0MFQP`G#"MFQ9KG'9c)#i
44Z,fPZBfaeC'8[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@a
45TBA0PFbi0$8Pd)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9
46KFf8JBQ8JF'&dD@9ZG$SY+3!!!")!!J!!!!!!!!!!!!%!"J!'%iN!!!!+@1!!!b!
47!!!-J!!!!!"3!+`!(!Cm#@!!V!!F"f!*B!!!!!3!!M`C'BA0N98&6)$%Z-6!a,M%
48`$J!!!!32rrm!!3!#!!-"rrm!!!d!!3!"D`!!!!!!!!!%!J!%!!)!"3!'$3!&!!*
49X!!)!!!U`!!IrrJd!"`!#6`!!!!!+X!!)!!N0!!J!!@X!!!!%#Um!#J)!#J!#!!X
50!$!d!#`!#E!!#!!3!"2rprr`"rrd!!!(rr!!!!J!-!!)!$3!1$3!0!!*X!!%!"!!
51%rrX!$`(rq`!!$!!2!&N!8b"(CA3JF'&dD#"dEb"dD'Pc)%&`F'aP8f0bDA"d)'&
52`F'aPG$XJGA0P)'Pd)(4[)'C[FQdJG'KP)("KG'JJG'mJG'KP)'PZBfaeC'8JCQp
53XC'9b!!)!!!)!$J!#!"!!%3d!%!!#E!!"!!3!"2rk!")"rrS!!!`!%J!Q!#!JB@j
54N)(4SC5"[G'KPFL"bC@aPGQ&ZG#"QEfaNCA*c,J!#!!!#!"%!!J!6!"30!"-!!R-
55!!!!%!"%!&3!@$3!9!!*M!!!!"!!1!"F!'!d!&`!#E!!&!!3!$!!CrrN0!"N!!Qi
56!!!!%!!`!'J!E$3!D!!)d!!!!"3!-rrJ!(!Vrq!!%#Q0[BQS0!"`!!Q`!"3!'!!X
57!(Irh$3!G!!0*!!)!"J!,rrB!([re#[rf!"JZC@&bFfCQC(*KE'Pc!!!!!!!!)!"
58KCQ4b$3!H!!"Q!!!!"J!(![re!!!"rrF!!!d!'`!"E3!!!!3!"3!I$`!I!6J)ER9
59XE!!!!!!!!Gq!rrm!!!!A"NCTEQ4PFJ!!(`*[Me!!ASfm!Qq,i!"HA[!!I&M!!!!
60!!!!!'mi!!JN#!Qq-1!!!Kb%#Ei`J!!!!!%C14&*038e"3e-!!"%!B@aTF`!!!!!
61!fJ!#!!!-6@&MD@jdEh0S)%K%!!!!!!!!!!!!!!!!!!!!XSA5h%*%!!!!!!!A"NC
62TEQ4PFJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
63!!!!!!!!!!!!!!!!!!!!!3rLc#@a!4Nj%8Ne"3e2rrrrr!!!!!!!!!!!!!!!!!!!
64!!!!!!!e6HA0dC@dJ4QpXC'9b!!!"!!3!!!!A!!)!)8eKBfPZG'pcD#")4$T6HA0
65dC@dJ4QpXC'9b1NCTEQ4PFJ$rr`!!!Irj!!!0!"J!!@d!!!!-!!hrp!Vrp!!%#Q0
66dH(30!"B!!@m!!!!!!!$rm`[rm`!5-!!(G'KPF'&dD!!(G'KP8'&dD!)!&!!#!#!
67!)3d!)!!#E!!#!")!%[rbrr%"rr)!!!(rm3!!!J!K!!)!)J!M$3!L!!*b!!!!%J!
68A!#3!*3d!*!!#EJ!$!")!&3!Q!#F0!#B!!6%!!!!6!"Arm!Vrm!!%#R4iC'`0!#F
69!!6%!!!!5!"2rl`Vrl`!%#Q&cBh)0!#8!!@m!!!!!!!$rlJ[rlJ!F-!!-G'KPEfa
70NC'9XD@ec!!adD'92E'4%C@aTEA-#!#-!!J!S!#N0!#J!!R)!!!!B!"d!+J!V$3!
71U!!&Y!!!!'!!C!#`-!#`!"`!"1J!#!!!0!#X!!Qi!!`!!!!!!,3!Z$3!Y!!%a!!!
72!'J!Frqd+rqd!"!TdH'4X$3!Z!!%a!!!!'3!Drq`+rq`!"!TKFf0b!J!T!!)!,`!
73`$3![!!*X!!)!(J!Hrq[rkJ(rk`!!!IrU!!!#!$!!!J!a!$)0!$%!!R)!!!!H!#X
74!-`!d$3!c!!*X!!8!(J!T!$Ark3d!03!#EJ!!!"i!+3!f!$F0!$B!!cF"!!!I!#R
75rk!!i!$N+rqJ!"!TMDA4Y$3!i!!&Y!!!!)`!PrqF$rqF!!3d!13!"E3!!!#B!+2r
76Q!rrQrrd0!$F!!@m!!!!H!"rrj3[rj3!5-!!(G'KPF'&dD!!(G'KP8'&dD!(rk3!
77!$3!d!!&[!!!!!!!!rq3,rq3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0
78d8'&dD!)!-J!#!$S!1`d!1J!#FJ!!!#`!1`!m!$d0!$`!!Q-!!!!X!$N!2J!r$3!
79q!!*X!!8!,!!h!%$ri`d!3!!#EJ!!!#`!0`""!%)0!%%!!cF"!!!Y!$IriJ"$!%3
80+rq)!"!TMDA4Y$3"$!!&Y!!!!-3!crq%$rq%!!3d!4!!"E3!!!$3!0[rJ!rrJrri
810!%)!!@m!!!!X!#hrh`[rh`!5-!!(G'KPF'&dD!!(G'KP8'&dD!(ri`!!$3!r!!&
82Y!!!!0`!irpi+rpi!"!T849K8$3!p!!&[!!!!!!!!rpd,rpd!&M!!#A4SC@ePF'&
83dD!!*G'KP6@93BA4S!J!l!!)!43"'$3"&!!*X!!)!2!!mrpcrf`(rh!!!!IrE!!!
84#!%B!!J"(!%J0!%F!!R)!!!!m!%8!53"+$3"*!!*M!!!!2!""!%X!6!d!5`!#BJ!
85!!$`!2`"0!%i0!%d!!@m!!!!m!$hrfJ[rfJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4
86SC9"bEfTPBh43BA4S$3"1!!&Y!!!!23!q!%m-!%m!$3!(D@jME(9NC3!#!!!0!%`
87!!@d!!!!r!%$rf3Vrf3!%#P4&@&30!%S!!@m!!!!!!!$rf![rf!!Q-!!4D@jME(9
88NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S!J")!!)!8!"4$3"3!!*b!!!
89!4J"9!&)!8`d!8J!#B`!!!%B!83"8!&80!&3!!Q)!!!"'!%m!9J"A$3"@!!*L!!!
90!4J",!&J!@3d!@!!"E`!!!%B!4rrA#rrA!#!`!!jdD'9`FQpUC@0dF'&dD!!1G'K
91P8(*[DQ9MG&"KG'J0!&N!!@d!!!"(!%S!@J`!@J!0!!GTEQ0XG@4P!!)!!!d!9`!
92"E3!!!%X!6J"E$!"E!!d!"fp`C@jcFf`!!J!!$3"9!!&Y!!!!6`"3rpB+rpB!"!T
93849K8$3"6!!&[!!!!!!!!rp8,rp8!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
94dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S!J"4!!)!A!"G$3"F!!*b!!!!9J"
95K!&i!A`d!AJ!#B`!!!&B!A3"J!'%0!'!!!Q)!!!"@!&X!BJ"M$3"L!!&[!!!!9J"
96Arp3,rp3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0d8'&dD!d!B`!"E3!
97!!&F!@J"N$!"N!!`!"Q0bHA"dE`!#!!!0!'%!!@d!!!"E!&crd`Vrd`!%#P4&@&3
980!&m!!@m!!!!!!!$rdJ[rdJ!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
99XC'9b8'&dD!)!A3!#!'8!CJd!C3!#FJ!!!')!E3"R!'J0!'F!!Q-!!!"L!'N!D3"
100U$3"T!!*L!!!!BJ"R!'X!E!d!D`!"E`!!!')!Brr4#rr4!#!`!!jdD'9`FQpUC@0
101dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!'`!!@d!!!"M!'B!E3`!E3!*!!0cFf`!!J!
102!$3"U!!&Y!!!!C`"Srp!+rp!!"!T849K8$3"S!!&[!!!!!!!!rmm,rmm!(M!!$A0
103cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J#!'B!!J"Z!'m0!'i!!R)!!!"Z!(8
104!F!"a$3"`!!*M!!!!EJ"a!()!F`d!FJ!"E`!!!'i!Err1#rr1!#!`!!jdD'9`FQp
105UC@0dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!(-!!@d!!!"[!($rc3Vrc3!%#P4&@&3
1060!(%!!@m!!!!!!!$rc![rc!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p`C@jcFfa
107'EfaNCA*3BA4S!J"[!!)!G!"e$3"d!!*X!!)!GJ"frm[rbJ(rb`!!!Ir+!!!#!(8
108!!J"f!(F0!(B!!R)!!!"f!(X!H!"j$3"i!!&[!!!!GJ"hrmN,rmN!($!!$(4SC@p
109XC'4PE'PYF`!-G'KP6faN4'9XD@ec$3"j!!*Z!!-!!!!!!(S!H`d!HJ!"-3!!!(J
110!H[r)#[r)!!3+G(KNE!d!H`!"-3!!!(F!H2r(#[r(!!3+BA0MFJ)!G`!#!(`!I3d
111!I!!#E!!#!(`!I2r'rm8"rmB!!!(ra3!!!J"p!!)!IJ"r$3"q!!*X!!%!I!"mrm3
112!J!(ra!!!$!#!!%!!1L"NC@aPG'8JEfaN)'PZBfaeC'8kEh"PER0cE#"QEfaNCA)
113JB@jN)(*PBh*PBA4P)'Pd)'0XC@&ZE(N!!J!!!J"r!!)!J3##$3#"!!*X!!)!I!"
114mrm2r`J(r``!!!Ir#!!!#!))!!J#$!)30!)-!!e%!!!"m!+8!K3#'!)F0!)8!!@X
115!!!"r!*`!L!)!L!!#!)N!LJd!L3!$53!#!(m!N[r"!)[r`!Vr`3!B,QeTFf0cE'0
116d+LSU+J!!!!!!!*!!!#SU+LS0!)X!!Qi!!!"r!)i!M!#0$3#-!!)d!!!!K`#1rlm
117!MJVr[`!%#Q0QEf`0!)i!!@d!!!#+!)d!M``!M`!0!!G[F'9ZFh0X!!)!!!d!M3!
118#0!!!!(m!Krqq!*!!#[qq!!3+BfC[E!d!N!!!!@m!!!#$!)Er[3[r[3!Q-!!4D@j
119ME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S![r!!!!#!)S!!J#4rl`
1200!*%!!dN!!J#6!*crZ`#5rlS+rlX!'#jMEh*PC'9XEbSU+LS!!!!!!!#3!!!U+LS
121U$3#5!!%a!!!!N`#BrlN+rlN!"!TcC@aP![qk!!!#rl`!!!d!KJ!$8J!!!!!!!2q
122irlIrYJVrZ!!B,Q&cBh*PFR)J+LSU+J!!!!!!!*!!!#SU+LS"rlF!!!,rYJ!!$3#
123(!!*X!!%!T!#Nrl8!N`(rY3!!$!#6!"-!$5"TCfj[FQ8JCA*bEh)!!J!!!J#%!!)
124!P!#9$3#8!!*X!!)!TJ#Qrl6rX`(rY!!!!Iqc!!!#!*8!!J#@!*F0!*B!!dN!!J#
125Q!,lrX[qa!*J+rl)!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Iqa!!!'!*J
126!!rq`!*N!QJVrX!!%#QY[Bf`0!*N!!@d!!!#U!+hrV`VrV`!%#Q0QEf`'!*S!!rq
127Z!*[rV3VrVJ!%#QPZFfJ0!*X!!M3!!!#`!,MrV!#F#[qX!!3+BfC[E!d!R!!"E`!
128!!,3!YrqV#rqV!#B`!"&TEQ0XG@4PCQpXC'9bF'&dD!!4D@jME(9NC8C[E'4PFP"
129KG'J'rkd!!!)!P`!#!*d!RJd!R3!#FJ!!!,m!aJ#I!+!0!*m!!Q`"!!#r!-)!SIq
130U$3#K!!%a!!!![`$#rkN+rkN!"!TbFfad!IqU!!!0!+!!!@m!!!!!!!$rU![rU!!
131Z-!!9G'KPEQ9hCQpXC'9bFQ9QCA*PEQ0P!"9dD'91CAG'EfaNCA*5C@CPFQ9ZBf8
132#!*i!!J#L!+-0!+)!!dN!!J$(!-lrT`#NrkB+rkF!'#jYDA0MFfaMG#SU+LS!!!!
133!!!#3!!!U+LSU$3#N!!&[!!!!a`$+rk8,rk8!,M!!&A4SC@jPGfC[E'4PFR*PCQ9
134bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P![qQ!!!#!+-!!J#P!+B0!+8!!R)
135!!!$2!0`!T`#S$3#R!!&Y!!!!c`$5!+N-!+N!$3!(Eh"PER0cE!!#!!!0!+J!!Qi
136!!!!!!!!!UJ#V$3#U!!%a!!!!e`$Erk3+rk3!"!T`EQ&Y$3#V!!%a!!!!dJ$Ark-
137+rk-!"!TcC@aP!J#Q!!)!V!#Y$3#X!!*X!!)!h3$Grk,rS3(rSJ!!!IqK!!!#!+d
138!!J#Z!+m0!+i!!Q`!!3$G!0hrS!#`!IqJ!!!-!,!!(`!C)&0dBA*d)'eKDfPZCb"
139dD'8JB@aTBA0PF`!#!!!#!+m!!J#a!,)0!,%!!dN!!J$G!3ArRrqH!,-+rjm!'#j
140MEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!IqH!!!'!,-!!rqG!,3!Y3VrR3!%#QY
141[Bf`0!,3!!@d!!!$K!16rR!VrR!!%#Q&XD@%'!,8!!rqE!,B!Y`VrQ`!%#QPZFfJ
1420!,B!!M3!!!$R!1rrQJ#i#[qD!!3+BfC[E!d!Z!!"E`!!!1X!l[qC#rqC!$3`!"K
143[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
144dD!B!Y`!$rjJ!ZIqA#[qB!!3+G'mJ)!d!Z3!#EJ!!!2)!r`#k!,X0!,S!!M3!!!$
145i!2rrPJ#m#[q@!!3+CQPXC3d![!!"E3!!!2X!rJ#p$!#p!"-!$@p`C@jcFfaMEfj
146Q,QJ!!J!!$3#l!!)d!!!!mJ$irj8![JVrP3!%#Q0QEf`0!,i!!@m!!!$f!2IrP![
147rP!!@-!!*G'KPE@9`BA4S!!PdD'90C9"KG'J'rjF!!!)!XJ!#!,m!`!d![`!#E!!
148#!3B""[q6rj)"rj-!!!(rNJ!!!J$!!!)!`3$#$3$"!!*b!!!""J%4!--!a!d!``!
149#BJ!!!3B"$3$&!-B0!-8!!@m!!!%'!3RrN3[rN3!N-!!3Bh*jF(4[CQpXC'9bF'&
150dD!!3Bh*jF(4[4QpXC'9b8'&dD!d!aJ!"E3!!!3N"$!$($!$(!!X!"6TKFfia!!)
151!!!d!a!!"E`!!!!!!!2q3!![rN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!`J!
152#!-J!b3d!b!!$53!#!4)"22q2rii!bJVrM`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!
153!!'jeE'`"rii!!!B!bJ!$rid!b`$-#[q0!!3+DfpME!d!b`!"E3!!!4B"'Iq-#[q
154-!!3+B@aTB3B!c!!$riX!c3$1#[q,!!3+D@jcD!d!c3!#0!!!!4`"*2q+!-m+riS
155!"!TMCQpX$3$2!!&[!!!")!%MriN,riN!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9
156bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J$1!!2rL!$3riF+riJ!"!T
157dEb!J$3$3!!*Z!!!"*`%f!0%!dJd!d3!#0!!!!5m"0[q'!0-+riB!"!TQD@aP$3$
1586!!&Y!!!"-J%e!03-!03!$!!'BA0Z-5jS!!)!!!d!dJ!#0!!!!5F",rq&!08+ri8
159!"!TMCQpX$3$9!!&[!!!"+`%Zri3,ri3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!E
160rK`!!!J$*!!)!eJ$A$3$@!!0*!!)"23&Rri2rJJ$B#[q$!"JZBfpbC@0bC@`U+LS
161U!!!!!!!!N!!!ER9XE!(rJJ!!"J$B!!2rJ3$C!0S+ri%!"!TVEf0X$3$C!!&Y!!!
162"33&%ri!+ri!!"!TKE'PK"J$D!!2rI`$E!0`+rhm!"!TTER0S$3$E!!)d!!!"4`&
1632rhi!h3VrIJ!%#Q0QEf`0!0d!!@m!!!&,!8lrI3[rI3!d-!!BEh"PER0cE'PZBfa
164eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!0`!!rpm!0l
165rH`VrI!!%#R4[)#!0!0i!!Qi!!!&5!@%!h`$J$3$I!!)d!!!"@J&KrhS!i3VrHJ!
166%#QCTE'80!1%!!@d!!!&G!@!!iJ`!iJ!3!!TKFfiaAfeKBbjS!!)!!!d!i!!#0!!
167!!9)"@[pj!1-+rhN!"!TMCQpX$3$M!!&[!!!"9J&CrhJ,rhJ!&$!!#(4PEA"`BA4
168S!!KdC@e`8'&dD!ErH`!!!J$A!!)!j!$P$3$N!!*X!!)"D!&SrhIrGJ(rG`!!!Ip
169f!!!#!18!!J$Q!1F0!1B!!R)!!!&S!A-!k!$T$3$S!!*L!!!"D!&[!1S!k`d!kJ!
170"E`!!!@J"Drpe#rpe!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*
1713BA4S$3$V!!&Y!!!"D`&Z!1`-!1`!#J!%1Q*TE`!#!!!0!1N!!@m!!!!!!!$rG![
172rG!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J$R!!)!l3$Z$3$Y!!0*!!)"G!'Hrh2
173rFJ$[#[pc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(rFJ!!"J$[!!2rF3$
174`!2%+rh%!"!TVEf0X$3$`!!&Y!!!"H!&lrh!+rh!!"!TKE'PK"J$a!!2rE`$b!2-
175+rfm!"!TTER0S$3$b!!)d!!!"IJ''rfi!p!VrEJ!%#Q0QEf`0!23!!@m!!!'#!BA
176rE3[rE3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
177NC8C[E'4PFP"KG'J'!2-!!rpX!2ArD`VrE!!%#R4[)#!0!28!!Qi!!!'*!CJ!pJ$
178h$3$f!!)d!!!"N3'BrfS!q!VrDJ!%#QCTE'80!2J!!@d!!!'8!CF!q3`!q3!,!!9
179LD@mZD!!#!!!0!2F!!M3!!!'*!C(rD3$k#[pT!!3+BfC[E!d!qJ!"E`!!!Bd"N!$
180rD![rD!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[pV!!!#!1i!!J$l!2`0!2X!!Q`
181!!J'I!CrrCrpQ!IpR!!!"rfB!!!)!r!!#!2d!rJd!r3!#FJ!!!Cm"UJ$r!3!0!2m
182!!Q)!!!'I!DB"!3%#$3%"!!&[!!!"R`'Lrf8,rf8!*$!!%'0bHA"dEfC[E'4PFR"
183KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!3)!!@d!!!'L!D8"!``"!`!*!!-kBQB!!J!
184!$3%!!!&[!!!!!!!!rf3,rf3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!rJ!#!33
185""3d""!!$53!#!DX"eIpMrf)""JVrB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
186eE'`"rf)!!!B""J!$rf%""`%)#[pK!!3+DfpME!d""`!"E3!!!Dm"X[pJ#[pJ!!3
187+B@aTB3B"#!!$rem"#3%+#[pI!!3+D@jcD!d"#3!#0!!!!E8"[IpH!3X+rei!"!T
188MCQpX$3%,!!&[!!!"Z3'mred,red!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
189dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J%+!!2rA!%-reX+re`!"!TdEb!
190J$3%-!!*Z!!!"`!(2!3d"$Jd"$3!#0!!!!FJ"crpD!3m+reS!"!TQD@aP$3%2!!&
191Y!!!"b`(1!4!-!4!!%!!+BQa[GfCTFfJZD!!#!!!0!3i!!M3!!!(!!FMr@3%4#[p
192C!!3+BfC[E!d"%3!"E`!!!F3"arpB#rpB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J
193'reX!!!)""3!#!4)"%`d"%J!#E!!#!GB"e[pAreB"reF!!!(r9J!!!J%6!!)"&!%
1949$3%8!!*b!!!"eJ(K!4B"&`d"&J!#BJ!!!GB"h3%B!4N0!4J!!@m!!!(@!GRr93[
195r93!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"'3!"E3!
196!!GN"h!%D$!%D!!N!!cTLEJ!#!!!0!4F!!@m!!!!!!!$r9![r9!!8-!!)G'9YF("
197KG'J!#(4PEA"3BA4S!J%9!!)"'`%F$3%E!!0*!!)"iJ)-re2r8J%G#[p6!"JZBfp
198bC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r8J!!"J%G!!2r83%H!4m+re%!"!TVEf0
199X$3%H!!&Y!!!"jJ(Tre!+re!!"!TKE'PK"J%I!!2r6`%J!5%+rdm!"!TTER0S$3%
200J!!)d!!!"l!(drdi")JVr6J!%#Q0QEf`0!5)!!@m!!!(`!I2r63[r63!d-!!BEh"
201PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J
202'!5%!!rp-!52r5`Vr6!!%#R4[)#!0!5-!!Qi!!!(h!JB"*!%P$3%N!!)d!!!"r`)
203'rdS"*JVr5J!%#QCTE'80!5B!!@d!!!)#!J8"*``"*`!+!!4LELjS!!)!!!d"*3!
204#0!!!!IF"rrp*!5J+rdN!"!TMCQpX$3%S!!&[!!!"q`(qrdJ,rdJ!&$!!#(4PEA"
205`BA4S!!KdC@e`8'&dD!Er5`!!!J%F!!)"+3%U$3%T!!*X!!)#$3)0rdIr4J(r4`!
206!!Ip'!!!#!5S!!J%V!5`0!5X!!R)!!!)0!KJ",3%Z$3%Y!!*L!!!#$3)8!5m"-!d
207",`!"E`!!!Jd#%2p&#rp&!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
208NCA*3BA4S$3%`!!&Y!!!#%!)6!6%-!6%!$3!(1Q*eCQCPFJ!#!!!0!5i!!@m!!!!
209!!!$r4![r4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J%X!!)"-J%c$3%b!!0*!!)
210#'3*$rd2r3J%d#[p$!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r3J!!"J%
211d!!2r33%e!6B+rd%!"!TVEf0X$3%e!!&Y!!!#(3)Jrd!+rd!!"!TKE'PK"J%f!!2
212r2`%h!6J+rcm!"!TTER0S$3%h!!)d!!!#)`)Vrci"13Vr2J!%#Q0QEf`0!6N!!@m
213!!!)R!LVr23[r23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
214-5@jME(9NC8C[E'4PFP"KG'J'!6J!!rmm!6Vr1`Vr2!!%#R4[)#!0!6S!!Qi!!!)
215Z!Md"1`%m$3%l!!)d!!!#0J)prcS"23Vr1J!%#QCTE'80!6d!!@d!!!)j!M`"2J`
216"2J!1!!KLG@CQCA)ZD!!#!!!0!6`!!M3!!!)Z!MEr13%r#[mj!!3+BfC[E!d"2`!
217"E`!!!M)#0Imi#rmi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rcX!!!)"-`!#!8!
218"33d"3!!#E!!#!N3#42mhrcB"rcF!!!(r0J!!!J&"!!)"3J&$$3&#!!*b!!!#4!*
2192!83"43d"4!!#BJ!!!N3#5`&'!8F0!8B!!@m!!!*%!NIr03[r03!N-!!3Bh*jF(4
220[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"4`!"E3!!!NF#5J&)$!&)!!X
221!"6TMBA0d!!)!!!d"43!"E`!!!!!!!2md#rmd!"3`!!KdC@e`F'&dD!!)G'9YF&"
222KG'J#!8-!!J&*!8S0!8N!!dN!!J*3!RVr-rmb!8X+rc-!'#jMEh*PBh*PE#SU+LS
223!!!!!!!#3!!"ZG@aX!Imb!!!'!8X!!rma!8`"63Vr-3!%#QY[Bf`0!8`!!@d!!!*
2248!PIr-!Vr-!!%#Q&XD@%'!8d!!rm[!8i"6`Vr,`!%#QPZFfJ0!8i!!M3!!!*D!Q,
225r,J&3#[mZ!!3+BfC[E!d"8!!"E`!!!Pi#BImY#rmY!$3`!"K[F'9ZFh0XD@jME(9
226NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"6`!$rb`"8Im
227V#[mX!!3+G'mJ)!d"83!#EJ!!!Q8#G!&5!9-0!9)!!M3!!!*Y!R6r+J&8#[mU!!3
228+CQPXC3d"9!!"E3!!!R!#F`&9$!&9!!`!"Q0KFh3ZD!!#!!!0!9-!!M3!!!*P!Qh
229r+3&@#[mT!!3+BfC[E!d"9J!"E`!!!QN#E2mS#rmS!"3`!!KdC@e`F'&dD!!)G'9
230YF&"KG'J'rbX!!!)"5J!#!9F"@!d"9`!#E!!#!RX#HrmRrbB"rbF!!!(r*J!!!J&
231B!!)"@3&D$3&C!!*b!!!#H`+'!9X"A!d"@`!#BJ!!!RX#JJ&G!9i0!9d!!@m!!!*
232l!Rlr*3[r*3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
233"AJ!"E3!!!Ri#J3&I$!&I!!X!"6TMEfe`!!)!!!d"A!!"E`!!!!!!!2mN#rmN!"3
234`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!9S!!J&J!@%0!@!!!dN!!J+(!V(r)rmL!@)
235+rb-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!ImL!!!'!@)!!rmK!@-"C!V
236r)3!%#QY[Bf`0!@-!!@d!!!+,!Slr)!Vr)!!%#Q&XD@%'!@3!!rmI!@8"CJVr(`!
237%#QPZFfJ0!@8!!M3!!!+4!TRr(J&R#[mH!!3+BfC[E!d"C`!"E`!!!T8#Q2mG#rm
238G!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4Qp
239XC'9b8'&dD!B"CJ!$ra`"D2mE#[mF!!3+G'mJ)!d"D!!#EJ!!!T`#U`&T!@S0!@N
240!!M3!!!+N!U[r'J&V#[mD!!3+CQPXC3d"D`!"E3!!!UF#UJ&X$!&X!!`!"Q0[EA!
241ZD!!#!!!0!@S!!M3!!!+F!U6r'3&Y#[mC!!3+BfC[E!d"E3!"E`!!!U!#SrmB#rm
242B!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'raX!!!)"B3!#!@i"E`d"EJ!#E!!#!V)
243#X[mAraB"raF!!!(r&J!!!J&[!!)"F!&a$3&`!!*b!!!#XJ+p!A)"F`d"FJ!#BJ!
244!!V)#Z3&d!A80!A3!!@m!!!+b!VAr&3[r&3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!
2453Bh*jF(4[4QpXC'9b8'&dD!d"G3!"E3!!!V8#Z!&f$!&f!!X!"6TMEfjQ!!)!!!d
246"F`!"E`!!!!!!!2m8#rm8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!A%!!J&h!AJ
2470!AF!!dN!!J+q!ZMr%rm5!AN+ra-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@a
248X!Im5!!!'!AN!!rm4!AS"H`Vr%3!%#QY[Bf`0!AS!!@d!!!,#!XAr%!Vr%!!%#Q&
249XD@%'!AX!!rm2!A`"I3Vr$`!%#QPZFfJ0!A`!!M3!!!,)!Y$r$J&q#[m1!!3+BfC
250[E!d"IJ!"E`!!!X`#crm0#rm0!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J
251!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"I3!$r``"Irm,#[m-!!3+G'mJ)!d
252"I`!#EJ!!!Y-#iJ'!!B%0!B!!!M3!!!,E!Z,r#J'##[m+!!3+CQPXC3d"JJ!"E3!
253!!Yi#i3'$$!'$!!`!"Q0[EQBZD!!#!!!0!B%!!M3!!!,6!Y[r#3'%#[m*!!3+BfC
254[E!d"K!!"E`!!!YF#f[m)#rm)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r`X!!!)
255"H!!#!B8"KJd"K3!#E!!#!ZN#kIm(r`B"r`F!!!(r"J!!!J''!!)"K`')$3'(!!*
256b!!!#k3,d!BN"LJd"L3!#BJ!!!ZN#m!',!B`0!BX!!@m!!!,T!Zcr"3[r"3!N-!!
2573Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"M!!"E3!!!Z`#l`'
2580$!'0!!S!"$TNCA-!!J!!$3'+!!&[!!!!!!!!r`3,r`3!&$!!#(4PEA"`BA4S!!K
259dC@e`8'&dD!)"L!!#!Bi"M`d"MJ!$53!#![8$(rm$r`)"N!!+r`-!'#jMEh*PBh*
260PE#SU+LS!!!!!!!#3!!"ZG@aX!Im#!!!'!C!!!!2r!3'4!C)+r`%!"!TVEf0X$3'
2614!!&Y!!!#q3,mr`!+r`!!"!TKE'PK"J'5!!2qr`'6!C3+r[m!"!TTER0S$3'6!!)
262d!!!#r`-(r[i"P3VqrJ!%#Q0QEf`0!C8!!@m!!!-$!`Eqr3[qr3!d-!!BEh"PER0
263cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!C3
264!!rlm!CEqq`Vqr!!%#R4[)#!0!CB!!Qi!!!-+!aN"P`'B$3'A!!)d!!!$%J-Cr[S
265"Q3VqqJ!%#QCTE'80!CN!!@d!!!-9!aJ"QJ`"QJ!,!!9NCA-ZD!!#!!!0!CJ!!M3
266!!!-+!a,qq3'E#[lj!!3+BfC[E!d"Q`!"E`!!!`i$%Ili#rli!"3`!!KdC@e`F'&
267dD!!)G'9YF&"KG'J'r[X!!!)"M`!#!C`"R3d"R!!#E!!#!b!$)2lhr[B"r[F!!!(
268qpJ!!!J'G!!)"RJ'I$3'H!!*b!!!$)!-V!D!"S3d"S!!#BJ!!!b!$*`'L!D-0!D)
269!!@m!!!-J!b2qp3[qp3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9
270b8'&dD!d"S`!"E3!!!b-$*J'N$!'N!!N!!cTND!!#!!!0!D%!!@m!!!!!!!$qp![
271qp!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'I!!)"T3'Q$3'P!!0*!!)$,!0@r[2
272qmJ'R#[lc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(qmJ!!"J'R!!2qm3'
273S!DN+r[%!"!TVEf0X$3'S!!&Y!!!$-!-cr[!+r[!!"!TKE'PK"J'T!!2ql`'U!DX
274+rZm!"!TTER0S$3'U!!)d!!!$0J-qrZi"V!VqlJ!%#Q0QEf`0!D`!!@m!!!-k!ch
275ql3[ql3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
276NC8C[E'4PFP"KG'J'!DX!!rlX!Dhqk`Vql!!%#R4[)#!0!Dd!!Qi!!!0"!e!"VJ'
277[$3'Z!!)d!!!$5303rZS"X!VqkJ!%#QCTE'80!E!!!@d!!!0-!dm"X3`"X3!+!!4
278ND#jS!!)!!!d"V`!#0!!!!d%$5IlT!E)+rZN!"!TMCQpX$3'b!!&[!!!$430)rZJ
279,rZJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eqk`!!!J'Q!!)"X`'d$3'c!!*X!!)
280$9`0ArZIqjJ(qj`!!!IlQ!!!#!E3!!J'e!EB0!E8!!R)!!!0A!f)"Y`'i$3'h!!*
281L!!!$9`0H!EN"ZJd"Z3!"E`!!!eF$@[lP#rlP!#3`!""MFRP`G'pQEfaNCA*`BA4
282S!""MFRP`G'p'EfaNCA*3BA4S$3'k!!&Y!!!$@J0G!EX-!EX!#J!%1Q4cB3!#!!!
2830!EJ!!@m!!!!!!!$qj![qj!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'f!!)"[!'
284p$3'm!!0*!!)$B`10rZ2qiJ'q#[lM!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
285XE!(qiJ!!"J'q!!2qi3'r!F!+rZ%!"!TVEf0X$3'r!!&Y!!!$C`0UrZ!+rZ!!"!T
286KE'PK"J(!!!2qh`("!F)+rYm!"!TTER0S$3("!!)d!!!$E30erYi"``VqhJ!%#Q0
287QEf`0!F-!!@m!!!0a!h6qh3[qh3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
288S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!F)!!rlF!F6qf`Vqh!!%#R4[)#!
2890!F3!!Qi!!!0i!iF"a3('$3(&!!)d!!!$J!1(rYS"a`VqfJ!%#QCTE'80!FF!!@d
290!!!1$!iB"b!`"b!!,!!9NFf%ZD!!#!!!0!FB!!M3!!!0i!i$qf3(*#[lC!!3+BfC
291[E!d"b3!"E`!!!h`$IrlB#rlB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rYX!!!)
292"[3!#!FS"b`d"bJ!#E!!#!ii$M[lArYB"rYF!!!(qeJ!!!J(,!!)"c!(0$3(-!!*
293b!!!$MJ1C!Fi"c`d"cJ!#BJ!!!ii$P3(3!G%0!G!!!@m!!!11!j(qe3[qe3!N-!!
2943Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"d3!"E3!!!j%$P!(
2955$!(5!!S!"$TPFR)!!J!!$3(2!!&[!!!!!!!!rY3,rY3!&$!!#(4PEA"`BA4S!!K
296dC@e`8'&dD!)"c3!#!G-"e!d"d`!$53!#!jS$a2l6rY)"e3Vqd`!B,Q0[FQ9MFQ9
297X+LSU+J!!!!!!!*!!!'jeE'`"rY)!!!B"e3!$rY%"eJ(A#[l4!!3+DfpME!d"eJ!
298"E3!!!ji$SIl3#[l3!!3+B@aTB3B"e`!$rXm"f!(C#[l2!!3+D@jcD!d"f!!#0!!
299!!k3$V2l1!GS+rXi!"!TMCQpX$3(D!!&[!!!$U!1VrXd,rXd!0$!!''p`C@jcFfa
300TEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J(C!!2
301qc!(ErXX+rX`!"!TdEb!J$3(E!!*Z!!!$V`1q!G`"h3d"h!!#0!!!!lF$[[l+!Gi
302+rXS!"!TQD@aP$3(H!!&Y!!!$ZJ1p!Gm-!Gm!#`!&CA*b,QJ!!J!!$3(G!!)d!!!
303$V`1hrXN"i!Vqb3!%#Q0QEf`0!H!!!@m!!!1c!lEqb![qb!!8-!!)G'9YF("KG'J
304!#(4PEA"3BA4S"[l,!!!#!G3!!J(K!H)0!H%!!Q`!!J2&!mAqarl'!Il(!!!"rXB
305!!!)"iJ!#!H-"j!d"i`!#FJ!!!m8$d!(P!HB0!H8!!Q)!!!2&!m`"j`(S$3(R!!&
306[!!!$a32)rX8,rX8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"
307KG'J0!HJ!!@d!!!2)!mX"k3`"k3!+!!3kCAC`!!)!!!d"jJ!"E`!!!!!!!2l%#rl
308%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!H3!!J(U!HX0!HS!!dN!!J24!r[q`rl
309#!H`+rX-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Il#!!!'!H`!!rl"!Hd
310"lJVq`3!%#QY[Bf`0!Hd!!@d!!!29!pMq`!Vq`!!%#Q&XD@%'!Hi!!rkr!Hm"m!V
311q[`!%#QPZFfJ0!Hm!!M3!!!2E!q2q[J(a#[kq!!3+BfC[E!d"m3!"E`!!!pm$i[k
312p#rkp!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4
313P4QpXC'9b8'&dD!B"m!!$rV`"m[kl#[km!!3+G'mJ)!d"mJ!#EJ!!!qB$p3(c!I3
3140!I-!!M3!!!2Z!rAqZJ(e#[kk!!3+CQPXC3d"p3!"E3!!!r%$p!(f$!(f!!X!"@9
315fF#jS!!)!!!d"p!!#0!!!!qB$l[kj!IF+rVN!"!TMCQpX$3(h!!&[!!!$kJ2YrVJ
316,rVJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqZ`!!!J(V!!)"q!(j$3(i!!*X!!)
317$r!2mrVIqYJ(qY`!!!Ikf!!!#!IN!!J(k!IX0!IS!!R)!!!2m"!F"r!(p$3(m!!*
318L!!!$r!3$!Ii"r`d"rJ!"E`!!!r`$rrke#rke!#3`!""MFRP`G'pQEfaNCA*`BA4
319S!""MFRP`G'p'EfaNCA*3BA4S$3(r!!&Y!!!$r`3#!J!-!J!!#`!&1QKYB@-!!J!
320!$3(p!!&[!!!!!!!!rV3,rV3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)"q`!#!J%
321#!Jd#!3!$53!#"!J%-[kcrV)#!`VqX`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
322eE'`"rV)!!!B#!`!$rV%#"!)&#[ka!!3+DfpME!d#"!!"E3!!"!`%$rk`#[k`!!3
323+B@aTB3B#"3!$rUm#"J)(#[k[!!3+D@jcD!d#"J!#0!!!"")%'[kZ!JJ+rUi!"!T
324MCQpX$3))!!&[!!!%&J3CrUd,rUd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
325dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)(!!2qV!)*rUX+rU`!"!TdEb!
326J$3)*!!*Z!!!%(33X!JS##`d##J!#0!!!"#8%,2kU!J`+rUS!"!TQD@aP$3)-!!&
327Y!!!%+!3V!Jd-!Jd!$!!'D'eKBbjS!!)!!!d##`!#0!!!""d%*IkT!Ji+rUN!"!T
328MCQpX$3)1!!&[!!!%)33NrUJ,rUJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqU`!
329!!J)#!!)#$`)3$3)2!!*X!!)%-`3crUIqTJ(qT`!!!IkQ!!!#!K!!!J)4!K)0!K%
330!!R)!!!3c"$i#%`)8$3)6!!*L!!!%-`3k!K8#&Jd#&3!"E`!!"$-%0[kP#rkP!#3
331`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3)@!!&Y!!!%0J3
332j!KF-!KF!#`!&1QPNC@%!!J!!$3)8!!&[!!!!!!!!rU3,rU3!&$!!#(4PEA"`BA4
333S!!KdC@e`8'&dD!)#%J!#!KJ#'3d#'!!$53!#"$m%DIkMrU)#'JVqS`!B,Q0[FQ9
334MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rU)!!!B#'J!$rU%#'`)F#[kK!!3+DfpME!d
335#'`!"E3!!"%-%4[kJ#[kJ!!3+B@aTB3B#(!!$rTm#(3)H#[kI!!3+D@jcD!d#(3!
336#0!!!"%N%8IkH!Km+rTi!"!TMCQpX$3)I!!&[!!!%6343rTd,rTd!0$!!''p`C@j
337cFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)
338H!!2qR!)JrTX+rT`!"!TdEb!J$3)J!!*Z!!!%9!4M!L%#)Jd#)3!#0!!!"&`%Brk
339D!L-+rTS!"!TQD@aP$3)M!!&Y!!!%A`4L!L3-!L3!$!!'D@4PB5jS!!)!!!d#)J!
340#0!!!"&3%A2kC!L8+rTN!"!TMCQpX$3)P!!&[!!!%@!4ErTJ,rTJ!&$!!#(4PEA"
341`BA4S!!KdC@e`8'&dD!EqQ`!!!J)C!!)#*J)R$3)Q!!*X!!)%DJ4UrTIqPJ(qP`!
342!!Ik@!!!#!LF!!J)S!LN0!LJ!!R)!!!4U"(8#+J)V$3)U!!*L!!!%DJ4a!L`#,3d
343#,!!"E`!!"'S%EIk9#rk9!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
344NCA*3BA4S$3)Y!!&Y!!!%E34`!Li-!Li!$!!'1QaSBA0S!!)!!!d#+`!"E`!!!!!
345!!2k8#rk8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!LN!!J)[!M!0!Lm!!dN!!J4
346f"+$qNrk5!M%+rT-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ik5!!!'!M%
347!!rk4!M)#-`VqN3!%#QY[Bf`0!M)!!@d!!!4k"(hqN!!+rT!!!!3+B@aTB3B#-`!
348$rSm#0!)e#[k2!!3+D@jcD!d#0!!#0!!!")!%L2k1!MB+rSi!"!TMCQpX$3)f!!&
349[!!!%K!5(rSd,rSd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP0
35066%PZBfaeC'9'EfaNCA*3BA4S"J)e!!2qM!)hrSX+rS`!"!TdEb!J$3)h!!*Z!!!
351%L`5D!MJ#13d#1!!#0!!!"*-%Q[k+!MS+rSS!"!TQD@aP$3)k!!&Y!!!%PJ5C!MX
352-!MX!$3!(E'KKFfJZD!!#!!!0!MN!!M3!!!5,"*2qL3)m#[k*!!3+BfC[E!d#2!!
353"E`!!")m%N[k)#rk)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rSX!!!)#-!!#!Md
354#2Jd#23!#E!!#"+%%SIk(rSB"rSF!!!(qKJ!!!J)q!!)#2`*!$3)r!!*b!!!%S35
355X!N%#3Jd#33!#BJ!!"+%%U!*$!N30!N-!!@m!!!5K"+6qK3[qK3!N-!!3Bh*jF(4
356[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d#4!!"E3!!"+3%T`*&$!*&!!S
357!"$TYC$)!!J!!$3*#!!&[!!!!!!!!rS3,rS3!&$!!#(4PEA"`BA4S!!KdC@e`8'&
358dD!)#3!!#!NB#4`d#4J!$53!#"+d%erk$rS)#5!VqJ`!B,Q0[FQ9MFQ9X+LSU+J!
359!!!!!!*!!!'jeE'`"rS)!!!B#5!!$rS%#53*+#[k"!!3+DfpME!d#53!"E3!!",%
360%Y2k!#[k!!!3+B@aTB3B#5J!$rRm#5`*-#[jr!!3+D@jcD!d#5`!#0!!!",F%[rj
361q!Nd+rRi!"!TMCQpX$3*0!!&[!!!%Z`5qrRd,rRd!0$!!''p`C@jcFfaTEQ0XG@4
362PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*-!!2qI!*1rRX
363+rR`!"!TdEb!J$3*1!!*Z!!!%`J64!Nm#8!d#6`!#0!!!"-S%dIjk!P%+rRS!"!T
364QD@aP$3*4!!&Y!!!%c363!P)-!P)!#`!&E@3b,QJ!!J!!$3*3!!)d!!!%`J6+rRN
365#8`VqH3!%#Q0QEf`0!P-!!@m!!!6'"-RqH![qH!!8-!!)G'9YF("KG'J!#(4PEA"
3663BA4S"[jl!!!#!NF!!J*8!P80!P3!!Q`!!J6B"0MqGrjf!Ijh!!!"rRB!!!)#93!
367#!PB#9`d#9J!#FJ!!"0J%i`*B!PN0!PJ!!Q)!!!6B"0m#@J*E$3*D!!&[!!!%f!6
368ErR8,rR8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!PX
369!!@d!!!6E"0i#A!`#A!!+!!3kE@3e!!)!!!d#@3!"E`!!!!!!!2jd#rjd!"3`!!K
370dC@e`F'&dD!!)G'9YF&"KG'J#!PF!!J*G!Pi0!Pd!!dN!!J6N"3lqFrjb!Pm+rR-
371!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ijb!!!'!Pm!!rja!Q!#B3VqF3!
372%#QY[Bf`0!Q!!!@d!!!6S"1[qF!VqF!!%#Q&XD@%'!Q%!!rj[!Q)#B`VqE`!%#QP
373ZFfJ0!Q)!!M3!!!6Z"2EqEJ*N#[jZ!!3+BfC[E!d#C!!"E`!!"2)%pIjY#rjY!$3
374`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9
375b8'&dD!B#B`!$rQ`#CIjV#[jX!!3+G'mJ)!d#C3!#EJ!!"2N&#!*Q!QF0!QB!!M3
376!!!8""3MqDJ*S#[jU!!3+CQPXC3d#D!!"E3!!"33&"`*T$!*T!!X!"@eN05jS!!)
377!!!d#C`!#0!!!"2N&!IjT!QS+rQN!"!TMCQpX$3*U!!&[!!!%r38!rQJ,rQJ!&$!
378!#(4PEA"`BA4S!!KdC@e`8'&dD!EqD`!!!J*H!!)#D`*X$3*V!!*X!!)&$`82rQI
379qCJ(qC`!!!IjQ!!!#!Q`!!J*Y!Qi0!Qd!!R)!!!82"4S#E`*`$3*[!!*L!!!&$`8
380@!R%#FJd#F3!"E`!!"3m&%[jP#rjP!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP
381`G'p'EfaNCA*3BA4S$3*b!!&Y!!!&%J89!R--!R-!#`!&1QeNBc)!!J!!$3*`!!&
382[!!!!!!!!rQ3,rQ3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)#EJ!#!R3#G3d#G!!
383$53!#"4X&4IjMrQ)#GJVqB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rQ)
384!!!B#GJ!$rQ%#G`*i#[jK!!3+DfpME!d#G`!"E3!!"4m&)[jJ#[jJ!!3+B@aTB3B
385#H!!$rPm#H3*k#[jI!!3+D@jcD!d#H3!#0!!!"58&,IjH!RX+rPi!"!TMCQpX$3*
386l!!&[!!!&+38XrPd,rPd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"
387PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*k!!2qA!*mrPX+rP`!"!TdEb!J$3*m!!*
388Z!!!&-!8r!Rd#IJd#I3!#0!!!"6J&2rjD!Rm+rPS!"!TQD@aP$3*r!!&Y!!!&1`8
389q!S!-!S!!$!!'E@4M-LjS!!)!!!d#IJ!#0!!!"6!&12jC!S%+rPN!"!TMCQpX$3+
390"!!&[!!!&0!8hrPJ,rPJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq@`!!!J*e!!)
391#JJ+$$3+#!!*X!!)&4J9'rPIq9J(q9`!!!Ij@!!!#!S-!!J+%!S80!S3!!R)!!!9
392'"9%#KJ+($3+'!!*L!!!&4J90!SJ#L3d#L!!"E`!!"8B&5Ij9#rj9!#3`!""MFRP
393`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3+*!!&Y!!!&539-!SS-!SS
394!$J!)1QpLDQ9MG(-!!J!!$3+(!!&[!!!!!!!!rP3,rP3!&$!!#(4PEA"`BA4S!!K
395dC@e`8'&dD!)#K3!#!SX#M!d#L`!$53!#"9)&I2j6rP)#M3Vq8`!B,Q0[FQ9MFQ9
396X+LSU+J!!!!!!!*!!!'jeE'`"rP)!!!B#M3!$rP%#MJ+2#[j4!!3+DfpME!d#MJ!
397"E3!!"9B&@Ij3#[j3!!3+B@aTB3B#M`!$rNm#N!!#N3Vq6`!%#QPZFfJ0!T!!!!)
398d!!!&A!9NrNi#NJVq6J!%#Q0QEf`0!T)!!@m!!!9J"@2q63[q63!d-!!BEh"PER0
399cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!T%
400!!rj-!T2q5`Vq6!!%#R4[)#!0!T-!!Qi!!!9R"AB#P!+9$3+8!!)d!!!&E`9frNS
401#PJVq5J!%#QCTE'80!TB!!@d!!!9b"A8#P``#P`!2!!P[BQTPBh4c,QJ!!J!!$3+
4029!!)d!!!&C`9[rNN#Q!Vq53!%#Q0QEf`0!TJ!!@m!!!9V"@lq5![q5!!8-!!)G'9
403YF("KG'J!#(4PEA"3BA4S"[j,!!!#!S`!!J+C!TS0!TN!!Q`!!J9p"Ahq4rj'!Ij
404(!!!"rNB!!!)#QJ!#!TX#R!d#Q`!#FJ!!"Ad&L!+G!Ti0!Td!!Q)!!!9p"B3#R`+
405J$3+I!!&[!!!&I3@!rN8,rN8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC
406[E'4PFP"KG'J0!U!!!@d!!!@!"B-#S3`#S3!+!!3kF'9Y!!)!!!d#RJ!"E`!!!!!
407!!2j%#rj%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!T`!!J+L!U-0!U)!!dN!!J@
408*"E2q3rj#!U3+rN-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ij#!!!'!U3
409!!rj"!U8#TJVq33!%#QY[Bf`0!U8!!@d!!!@0"C!!rN!+rN!!"!TKE'PK"J+Q!!2
410q2`+R!UJ+rMm!"!TTER0S$3+R!!)d!!!&N`@ErMi#U3Vq2J!%#Q0QEf`0!UN!!@m
411!!!@A"CVq23[q23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
412-5@jME(9NC8C[E'4PFP"KG'J'!UJ!!rim!UVq1`Vq2!!%#R4[)#!0!US!!Qi!!!@
413H"Dd#U`+X$3+V!!)d!!!&TJ@YrMS#V3Vq1J!%#QCTE'80!Ud!!@d!!!@T"D`#VJ`
414#VJ!,!!9`C@dZD!!#!!!0!U`!!M3!!!@H"DEq13+[#[ij!!3+BfC[E!d#V`!"E`!
415!"D)&TIii#rii!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rMX!!!)#S`!#!V!#X3d
416#X!!$53!#"E3&h[ihrMB#XJVq0`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`
417"rMB!!!B#XJ!$rM8#X`+d#[ie!!3+DfpME!d#X`!"E3!!"EJ&Zrid#[id!!3+B@a
418TB3B#Y!!$rM-#Y3+f#[ic!!3+D@jcD!d#Y3!#0!!!"Ei&a[ib!VF+rM)!"!TMCQp
419X$3+h!!&[!!!&`JA&rM%,rM%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!
420BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J+f!!2q-!+irLm+rM!!"!TdEb!J$3+
421i!!*Z!!!&b3AB!VN#ZJd#Z3!#0!!!"G%&f2iZ!VX+rLi!"!TQD@aP$3+l!!&Y!!!
422&e!AA!V`-!V`!$!!'F'9Y-LjS!!)!!!d#ZJ!#0!!!"FN&dIiY!Vd+rLd!"!TMCQp
423X$3+p!!&[!!!&c3A3rL`,rL`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq,`!!!J+
424a!!)#[J+r$3+q!!*X!!)&h`AIrL[q+J(q+`!!!IiU!!!#!Vm!!J,!!X%0!X!!!R)
425!!!AI"HS#`J,$$3,#!!*L!!!&h`AQ!X3#a3d#a!!"E`!!"Gm&i[iT#riT!#3`!""
426MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,&!!&Y!!!&iJAP!XB
427-!XB!$3!(1R"VBh-a-J!#!!!0!X-!!@m!!!!!!!$q+![q+!!8-!!)G'9YF("KG'J
428!#(4PEA"3BA4S!J,"!!)#a`,)$3,(!!0*!!)&k`B9rLIq*J,*#[iR!"JZBfpbC@0
429bC@`U+LSU!!!!!!!!N!!!ER9XE!(q*J!!"J,*!!2q*3,+!XX+rL8!"!TVEf0X$3,
430+!!&Y!!!&l`AbrL3+rL3!"!TKE'PK"J,,!!2q)`,-!Xd+rL-!"!TTER0S$3,-!!)
431d!!!&p3AprL)#cJVq)J!%#Q0QEf`0!Xi!!@m!!!Aj"Icq)3[q)3!d-!!BEh"PER0
432cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!Xd
433!!riJ!Xrq(`Vq)!!%#R4[)#!0!Xm!!Qi!!!B!"Jm#d!,4$3,3!!)d!!!'#!B2rKi
434#dJVq(J!%#QCTE'80!Y)!!@d!!!B,"Ji#d``#d`!1!!K`Df0c-6)ZD!!#!!!0!Y%
435!!M3!!!B!"JMq(3,8#[iG!!3+BfC[E!d#e!!"E`!!"J3'"riF#riF!"3`!!KdC@e
436`F'&dD!!)G'9YF&"KG'J'rKm!!!)#b!!#!Y8#eJd#e3!#E!!#"KB'&[iErKS"rKX
437!!!(q'J!!!J,@!!)#e`,B$3,A!!*b!!!'&JBK!YN#fJd#f3!#BJ!!"KB'(3,E!Y`
4380!YX!!@m!!!B@"KRq'3[q'3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
439XC'9b8'&dD!d#h!!"E3!!"KN'(!,G$!,G!!`!"MT`Df0c0`!#!!!0!YS!!@m!!!!
440!!!$q'![q'!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J,B!!)#hJ,I$3,H!!0*!!)
441')JC-rKIq&J,J#[iA!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(q&J!!"J,
442J!!2q&3,K!Z)+rK8!"!TVEf0X$3,K!!&Y!!!'*JBTrK3+rK3!"!TKE'PK"J,L!!2
443q%`,M!Z3+rK-!"!TTER0S$3,M!!)d!!!',!BdrK)#j3Vq%J!%#Q0QEf`0!Z8!!@m
444!!!B`"M2q%3[q%3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
445-5@jME(9NC8C[E'4PFP"KG'J'!Z3!!ri3!ZEq$`Vq%!!%#R4[)#!0!ZB!!Qi!!!B
446h"NB#j`,S$3,R!!)d!!!'2`C'rJi#k3Vq$J!%#QCTE'80!ZN!!@d!!!C#"N8#kJ`
447#kJ!0!!G`Df0c0bjS!!)!!!d#k!!#0!!!"MF'2ri0!ZX+rJd!"!TMCQpX$3,V!!&
448[!!!'1`BqrJ`,rJ`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq$`!!!J,I!!)#l!,
449Y$3,X!!*X!!)'63C0rJ[q#J(q#`!!!Ii+!!!#!Zd!!J,Z!Zm0!Zi!!R)!!!C0"PJ
450#m!,a$3,`!!*L!!!'63C8![)#m`d#mJ!"E`!!"Nd'82i*#ri*!#3`!""MFRP`G'p
451QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,c!!&Y!!!'8!C6![3-![3!#`!
452&1R*KEQ3!!J!!$3,a!!&[!!!!!!!!rJJ,rJJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&
453dD!)#l`!#![8#pJd#p3!$53!#"PN'Jri(rJB#p`Vq"`!B,Q0[FQ9MFQ9X+LSU+J!
454!!!!!!*!!!'jeE'`"rJB!!!B#p`!$rJ8#q!,j#[i&!!3+DfpME!d#q!!"E3!!"Pd
455'B2i%#[i%!!3+B@aTB3B#q3!$rJ-#qJ,l#[i$!!3+D@jcD!d#qJ!#0!!!"Q-'Dri
456#![`+rJ)!"!TMCQpX$3,m!!&[!!!'C`CUrJ%,rJ%!0$!!''p`C@jcFfaTEQ0XG@4
457PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J,l!!2q!!,prIm
458+rJ!!"!TdEb!J$3,p!!*Z!!!'EJCp![i#r`d#rJ!#0!!!"RB'IIhq!`!+rIi!"!T
459QD@aP$3-!!!&Y!!!'H3Cm!`%-!`%!$!!'FQ&ZC#jS!!)!!!d#r`!#0!!!"Qi'G[h
460p!`)+rId!"!TMCQpX$3-#!!&[!!!'FJCerI`,rI`!&$!!#(4PEA"`BA4S!!KdC@e
461`8'&dD!Epr`!!!J,f!!)$!`-%$3-$!!*X!!)'K!D%rI[pqJ(pq`!!!Ihk!!!#!`3
462!!J-&!`B0!`8!!R)!!!D%"Sm$"`-)$3-(!!*L!!!'K!D,!`N$#Jd$#3!"E`!!"S3
463'Krhj#rhj!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-
464+!!&Y!!!'K`D+!`X-!`X!#J!%1R*M-J!#!!!0!`J!!@m!!!!!!!$pq![pq!!8-!!
465)G'9YF("KG'J!#(4PEA"3BA4S!J-'!!)$$!-0$3--!!0*!!)'N!!'Z[hhrIB$$JV
466pp`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rIB!!!B$$J!$rI8$$`-3#[h
467e!!3+DfpME!d$$`!"E3!!"T3'Prhd#[hd!!3+B@aTB3B$%!!$rI-$%3-5#[hc!!3
468+D@jcD!d$%3!#0!!!"TS'S[hb!a-+rI)!"!TMCQpX$3-6!!&[!!!'RJDKrI%,rI%
469!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
470NCA*3BA4S"J-5!!2pm!-8rHm+rI!!"!TdEb!J$3-8!!*Z!!!'T3Dd!a8$&Jd$&3!
471#0!!!"Ud'Y2hZ!aF+rHi!"!TQD@aP$3-A!!&Y!!!'X!Dc!aJ-!aJ!#`!&FQ-b,QJ
472!!J!!$3-@!!)d!!!'T3DYrHd$'3Vpl3!%#Q0QEf`0!aN!!@m!!!DT"Ucpl![pl!!
4738-!!)G'9YF("KG'J!#(4PEA"3BA4S"[h[!!!#!`d!!J-D!aX0!aS!!Q`!!JDl"V[
474pkrhU!IhV!!!"rHS!!!)$'`!#!a`$(3d$(!!#FJ!!"VX'aJ-H!am0!ai!!Q)!!!D
475l"X)$)!-K$3-J!!&[!!!'Z`DqrHN,rHN!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0
476bHA"dEdC[E'4PFP"KG'J0!b%!!@d!!!Dq"X%$)J`$)J!+!!3kFQ-d!!)!!!d$(`!
477"E`!!!!!!!2hS#rhS!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!ad!!J-M!b30!b-
478!!dN!!JE("[(pjrhQ!b8+rHF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ih
479Q!!!'!b8!!rhP!bB$*`Vpj3!%#QY[Bf`0!bB!!@d!!!E,"Xlpj!Vpj!!%#Q&XD@%
480'!bF!!rhM!bJ$+3Vpi`!%#QPZFfJ0!bJ!!M3!!!E4"YRpiJ-U#[hL!!3+BfC[E!d
481$+J!"E`!!"Y8'f2hK#rhK!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p
482`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$+3!$rH!$+rhI#[hJ!!3+G'mJ)!d$+`!
483#EJ!!"Y`'k`-X!bd0!b`!!M3!!!EN"Z[phJ-Z#[hH!!3+CQPXC3d$,J!"E3!!"ZF
484'kJ-[$!-[!!X!"A*M0#jS!!)!!!d$,3!#0!!!"Y`'j2hG!c!+rGd!"!TMCQpX$3-
485`!!&[!!!'i!EMrG`,rG`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eph`!!!J-N!!)
486$-3-b$3-a!!*X!!)'mJEbrG[pfJ(pf`!!!IhD!!!#!c)!!J-c!c30!c-!!R)!!!E
487b"[d$03-f$3-e!!*L!!!'mJEj!cF$1!d$0`!"E`!!"[)'pIhC#rhC!#3`!""MFRP
488`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-i!!&Y!!!'p3Ei!cN-!cN
489!#J!%1R*M03!#!!!0!cB!!@m!!!!!!!$pf![pf!!8-!!)G'9YF("KG'J!#(4PEA"
4903BA4S!J-d!!)$1J-l$3-k!!0*!!)'rJFSrGIpeJ-m#[hA!"JZBfpbC@0bC@`U+LS
491U!!!!!!!!N!!!ER9XE!(peJ!!"J-m!!2pe3-p!ci+rG8!"!TVEf0X$3-p!!&Y!!!
492(!JF&rG3+rG3!"!TKE'PK"J-q!!2pd`-r!d!+rG-!"!TTER0S$3-r!!)d!!!(#!F
4933rG)$33VpdJ!%#Q0QEf`0!d%!!@m!!!F-"`rpd3[pd3!d-!!BEh"PER0cE'PZBfa
494eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!d!!!rh3!d,
495pc`Vpd!!%#R4[)#!0!d)!!Qi!!!F6"b)$3`0%$30$!!)d!!!('`FLrFi$43VpcJ!
496%#QCTE'80!d8!!@d!!!FH"b%$4J`$4J!,!!9bBc8ZD!!#!!!0!d3!!M3!!!F6"a[
497pc30(#[h0!!3+BfC[E!d$4`!"E`!!"aF('[h-#rh-!"3`!!KdC@e`F'&dD!!)G'9
498YF&"KG'J'rFm!!!)$1`!#!dJ$53d$5!!#E!!#"bN(+Ih,rFS"rFX!!!(pbJ!!!J0
499*!!)$5J0,$30+!!*b!!!(+3Fd!d`$63d$6!!#BJ!!"bN(-!01!dm0!di!!@m!!!F
500T"bcpb3[pb3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
501$6`!"E3!!"b`(,`03$!03!!d!"cTbDA"PE@3!!J!!$300!!&[!!!!!!!!rFJ,rFJ
502!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$5`!#!e%$8Jd$83!$53!#"c8(Arh(rFB
503$8`Vpa`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rFB!!!B$8`!$rF8$9!0
5049#[h&!!3+DfpME!d$9!!"E3!!"cN(22h%#[h%!!3+B@aTB3B$93!$rF-$9J0A#[h
505$!!3+D@jcD!d$9J!#0!!!"cm(4rh#!eJ+rF)!"!TMCQpX$30B!!&[!!!(3`G'rF%
506,rF%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
507'EfaNCA*3BA4S"J0A!!2p`!0CrEm+rF!!"!TdEb!J$30C!!*Z!!!(5JGC!eS$@`d
508$@J!#0!!!"e)(@Ifq!e`+rEi!"!TQD@aP$30F!!&Y!!!(93GB!ed-!ed!$J!)FQP
509`C@eN,QJ!!J!!$30E!!)d!!!(5JG5rEd$AJVp[3!%#Q0QEf`0!ei!!@m!!!G1"e(
510p[![p[!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[fr!!!#!e)!!J0I!f!0!em!!Q`
511!!JGJ"f$pZrfk!Ifl!!!"rES!!!)$B!!#!f%$BJd$B3!#FJ!!"f!(D`0M!f30!f-
512!!Q)!!!GJ"fF$C30Q$30P!!&[!!!(B!GMrEN,rEN!*$!!%'0bHA"dEfC[E'4PFR"
513KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!fB!!@d!!!GM"fB$C``$C`!+!!3kFR0K!!)
514!!!d$C!!"E`!!!!!!!2fi#rfi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!f)!!J0
515S!fN0!fJ!!dN!!JGX"jEpYrff!fS+rEF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"
516ZG@aX!Iff!!!'!fS!!rfe!fX$E!VpY3!%#QY[Bf`0!fX!!@d!!!G`"h2pY!VpY!!
517%#Q&XD@%'!f`!!rfc!fd$EJVpX`!%#QPZFfJ0!fd!!M3!!!Gf"hlpXJ0[#[fb!!3
518+BfC[E!d$E`!"E`!!"hS(IIfa#rfa!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"
519KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$EJ!$rE!$F2f[#[f`!!3+G'm
520J)!d$F!!#EJ!!"i%(N!!$F30b$30a!!)d!!!(L3H3!2fZ!h-+rDi!"!TQD@aP$30
521c!!&Y!!!(M!H2!h3-!h3!#`!&FR0K,QJ!!J!!$30b!!)d!!!(J3H*rDd$G3VpV3!
522%#Q0QEf`0!h8!!@m!!!H&"iMpV![pV!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[f
523[!!!#!fN!!J0f!hF0!hB!!Q`!!JHA"jIpUrfU!IfV!!!"rDS!!!)$G`!#!hJ$H3d
524$H!!#FJ!!"jF(SJ0k!hX0!hS!!Q)!!!HA"ji$I!0p$30m!!&[!!!(P`HDrDN,rDN
525!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!hd!!@d!!!H
526D"jd$IJ`$IJ!-!!BkFh4KBfX!!J!!$30l!!&[!!!!!!!!rDJ,rDJ!&$!!#(4PEA"
527`BA4S!!KdC@e`8'&dD!)$H3!#!hm$J!d$I`!$53!#"k-(cIfRrDB$J3VpT`!B,Q0
528[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rDB!!!B$J3!$rD8$JJ1$#[fP!!3+Dfp
529ME!d$JJ!"E3!!"kF(U[fN#[fN!!3+B@aTB3B$J`!$rD-$K!1&#[fM!!3+D@jcD!d
530$K!!#0!!!"kd(YIfL!iB+rD)!"!TMCQpX$31'!!&[!!!(X3HdrD%,rD%!0$!!''p
531`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4
532S"J1&!!2pS!1(rCm+rD!!"!TdEb!J$31(!!*Z!!!(Z!I(!iJ$L3d$L!!#0!!!"m!
533(arfH!iS+rCi!"!TQD@aP$31+!!&Y!!!(``I'!iX-!iX!$3!(Fh4KBfXZD!!#!!!
5340!iN!!M3!!!Hi"m$pR31-#[fG!!3+BfC[E!d$M!!"E`!!"l`([rfF#rfF!"3`!!K
535dC@e`F'&dD!!)G'9YF&"KG'J'rCm!!!)$J!!#!id$MJd$M3!$53!#"mi(q2fErCS
536$M`VpQ`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rCS!!!B$M`!$rCN$N!!
537$N3VpQ3!%#QY[Bf`0!j!!!!&Y!!!(dJI9rCJ+rCJ!"!TKE'PK"J14!!2pP`15!j-
538+rCF!"!TTER0S$315!!)d!!!(f!IJrCB$P!VpPJ!%#Q0QEf`0!j3!!@m!!!IF"pr
539pP3[pP3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
540NC8C[E'4PFP"KG'J'!j-!!rf8!jApN`VpP!!%#R4[)#!0!j8!!Qi!!!IM"r)$PJ1
541A$31@!!)d!!!(k`IbrC)$Q!VpNJ!%#QCTE'80!jJ!!@d!!!IZ"r%$Q3`$Q3!4!!Y
542cB@CPFh4KBfXZD!!#!!!0!jF!!M3!!!IM"q[pN31D#[f4!!3+BfC[E!d$QJ!"E`!
543!"qF(k[f3!![pN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EpN`!!!J11!!)$Q`1
544F$31E!!*X!!)(q3IjrBrpMJ(pM`!!!If1!!!#!j`!!J1G!ji0!jd!!R)!!!Ij#!3
545$R`1J$31I!!*L!!!(q3J!!k%$SJd$S3!"E`!!"rN(r2f0#rf0!#3`!""MFRP`G'p
546QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$31L!!&Y!!!(r!Ir!k--!k-!#J!
547%1R0SB3!#!!!0!k!!!@m!!!!!!!$pM![pM!!8-!!)G'9YF("KG'J!#(4PEA"3BA4
548S!J1H!!)$T!1P$31N!!0*!!))"3J[rB[pLJ1Q#[f,!"JZBfpbC@0bC@`U+LSU!!!
549!!!!!N!!!ER9XE!(pLJ!!"J1Q!!2pL31R!kJ+rBN!"!TVEf0X$31R!!&Y!!!)#3J
550-rBJ+rBJ!"!TKE'PK"J1S!!2pK`1T!kS+rBF!"!TTER0S$31T!!)d!!!)$`JArBB
551$U`VpKJ!%#Q0QEf`0!kX!!@m!!!J6#"EpK3[pK3!d-!!BEh"PER0cE'PZBfaeC'9
552QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!kS!!rf%!kcpJ`V
553pK!!%#R4[)#!0!k`!!Qi!!!JD##N$V31Z$31Y!!)d!!!))JJTrB)$V`VpJJ!%#QC
554TE'80!km!!@d!!!JP##J$X!`$X!!,!!9cD'%ZD!!#!!!0!ki!!M3!!!JD##,pJ31
555a#[f"!!3+BfC[E!d$X3!"E`!!#"i))If!#rf!!"3`!!KdC@e`F'&dD!!)G'9YF&"
556KG'J'rB-!!!)$T3!#!l)$X`d$XJ!#E!!##$!)-2errAi"rAm!!!(pIJ!!!J1c!!)
557$Y!1e$31d!!*b!!!)-!Jl!lB$Y`d$YJ!#BJ!!#$!)0`1i!lN0!lJ!!@m!!!J`#$2
558pI3[pI3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d$Z3!
559"E3!!#$-)0J1k$!1k!!d!"cTdH(4IC')!!J!!$31h!!&[!!!!!!!!rA`,rA`!&$!
560!#(4PEA"`BA4S!!KdC@e`8'&dD!)$Y3!#!lX$[!d$Z`!$53!##$`)C[elrAS$[3V
561pH`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rAS!!!B$[3!$rAN$[J1r#[e
562j!!3+DfpME!d$[J!"E3!!#%!)3rei#[ei!!3+B@aTB3B$[`!$rAF$`!2"#[eh!!3
563+D@jcD!d$`!!#0!!!#%B)6[ef!m)+rAB!"!TMCQpX$32#!!&[!!!)5JK0rA8,rA8
564!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
565NCA*3BA4S"J2"!!2pG!2$rA-+rA3!"!TdEb!J$32$!!*Z!!!)83KJ!m3$a3d$a!!
566#0!!!#&N)B2eb!mB+rA)!"!TQD@aP$32'!!&Y!!!)A!KI!mF-!mF!$J!)G(KdAf4
567L,QJ!!J!!$32&!!)d!!!)83KCrA%$b!VpF3!%#Q0QEf`0!mJ!!@m!!!K9#&MpF![
568pF!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[ec!!!#!l`!!J2*!mS0!mN!!Q`!!JK
569R#'IpEreZ!Ie[!!!"r@i!!!)$bJ!#!mX$c!d$b`!#FJ!!#'F)FJ20!mi0!md!!Q)
570!!!KR#'i$c`23$322!!&[!!!)C`KUr@d,r@d!*$!!%'0bHA"dEfC[E'4PFR"KG'J
571!%'0bHA"dEdC[E'4PFP"KG'J0!p!!!@d!!!KU#'d$d3`$d3!,!!8kH$8`13!#!!!
5720!mi!!@m!!!!!!!$pE![pE!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J2-!!)$dJ2
5736$325!!0*!!))F`LGr@[pDJ28#[eV!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
574XE!(pDJ!!"J28!!2pD329!pB+r@N!"!TVEf0X$329!!&Y!!!)G`Kkr@J+r@J!"!T
575KE'PK"J2@!!2pC`2A!pJ+r@F!"!TTER0S$32A!!)d!!!)I3L&r@B$f3VpCJ!%#Q0
576QEf`0!pN!!@m!!!L"#)6pC3[pC3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
577S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!pJ!!reN!pVpB`VpC!!%#R4[)#!
5780!pS!!Qi!!!L)#*F$f`2F$32E!!)d!!!)N!!)PreL!pd+r@)!"!TQD@aP$32G!!&
579Y!!!)N`L@!pi-!pi!$!!'H$8`15jS!!)!!!d$h!!#0!!!#)J)N!$pB32I#[eK!!3
580+BfC[E!d$h`!"E`!!#)`)MreJ#reJ!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r@-
581!!!)$d`!#!q!$i3d$i!!$53!##*i)b2eIr9i$iJVpA`!B,Q0[FQ9MFQ9X+LSU+J!
582!!!!!!*!!!'jeE'`"r9i!!!B$iJ!$r9d$i`2N#[eG!!3+DfpME!d$i`!"E3!!#+)
583)TIeF#[eF!!3+B@aTB3B$j!!$r9X$j32Q#[eE!!3+D@jcD!d$j3!#0!!!#+J)X2e
584D!qF+r9S!"!TMCQpX$32R!!&[!!!)V!L[r9N,r9N!0$!!''p`C@jcFfaTEQ0XG@4
585PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J2Q!!2p@!2Sr9F
586+r9J!"!TdEb!J$32S!!*Z!!!)X`M#!qN$kJd$k3!#0!!!#,X)`[e@!qX+r9B!"!T
587QD@aP$32V!!&Y!!!)[JM"!q`-!q`!%!!+H$8`19pfCRNZD!!#!!!0!qS!!M3!!!L
588c#,[p932Y#[e9!!3+BfC[E!d$l3!"E`!!#,F)Z[e8#re8!"3`!!KdC@e`F'&dD!!
589)G'9YF&"KG'J'r9F!!!)$i3!#!qi$l`d$lJ!#E!!##-N)bIe6r9)"r9-!!!(p8J!
590!!J2[!!)$m!2a$32`!!*b!!!)b3M8!r)$m`d$mJ!#BJ!!#-N)d!2d!r80!r3!!@m
591!!!M*#-cp83[p83!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&
592dD!d$p3!"E3!!#-`)c`2f$!2f!!d!"cTi06!jGM-!!J!!$32c!!&[!!!!!!!!r9!
593,r9!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$m3!#!rF$q!d$p`!$53!##08)rre
5942r8i$q3Vp6`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8i!!!B$q3!$r8d
595$qJ2l#[e0!!3+DfpME!d$qJ!"E3!!#0N)h2e-#[e-!!3+B@aTB3B$q`!$r8X$r!2
596p#[e,!!3+D@jcD!d$r!!#0!!!#0m)jre+!ri+r8S!"!TMCQpX$32q!!&[!!!)i`M
597Qr8N,r8N!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfa
598eC'9'EfaNCA*3BA4S"J2p!!2p5!2rr8F+r8J!"!TdEb!J$32r!!*Z!!!)kJMj"!!
599%!3d%!!!#0!!!#2))qIe'"!)+r8B!"!TQD@aP$33#!!&Y!!!)p3Mi"!--"!-!$J!
600)H$8`1ABc,QJ!!J!!$33"!!)d!!!)kJMbr88%"!Vp43!%#Q0QEf`0"!3!!@m!!!M
601Z#2(p4![p4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[e(!!!#!rJ!!J3&"!B0"!8
602!!Q`!!JN!#3$p3re#!Ie$!!!"r8)!!!)%"J!#"!F%#!d%"`!$53!##3!*+[e"r8!
603%#3Vp33!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8!!!!B%#3!$r6m%#J3
604,#[dr!!3+DfpME!d%#J!"E3!!#33*"rdq#[dq!!3+B@aTB3B%#`!$r6d%$!30#[d
605p!!3+D@jcD!d%$!!#0!!!#3S*%[dm"!i+r6`!"!TMCQpX$331!!&[!!!*$JN4r6X
606,r6X!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
607'EfaNCA*3BA4S"J30!!2p1J32r6N+r6S!"!TdEb!J$332!!*Z!!!*&3NN""!%%3d
608%%!!#0!!!#4d**2di"")+r6J!"!TQD@aP$335!!&Y!!!*)!NM""--""-!#`!&Fh0
609X,QJ!!J!!$334!!)d!!!*&3NGr6F%&!Vp0`!%#Q0QEf`0""3!!@m!!!NC#4cp0J[
610p0J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD!Ep13!!!J3)!!)%&33
611@$339!!0*!!)*+`P9r6Ap0!3A#[de!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
612XE!(p0!!!"J3A!!2p-`3B""N+r6-!"!TVEf0X$33B!!&Y!!!*,`Nbr6)+r6)!"!T
613KE'PK"J3C!!2p-33D""X+r6%!"!TTER0S$33D!!)d!!!*03Npr6!%(!Vp-!!%#Q0
614QEf`0""`!!@m!!!Nj#6cp,`[p,`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
615S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'""X!!rdZ""hp,3Vp,J!%#R4[)#!
6160""d!!Qi!!!P!#8m%(J3I$33H!!)d!!!*5!P2r5`%)!Vp,!!%#QCTE'80"#!!!@d
617!!!P,#8i%)3`%)3!-!!CcFf`b,QJ!!J!!$33I!!)d!!!*3!P)r5X%)JVp+`!%#Q0
618QEf`0"#)!!@m!!!P%#8Ip+J[p+J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9
619b8'&dD!Ep,3!!!J3@!!)%)`3N$33M!!0*!!)*9JQ!r5Rp+!3P#[dT!"JZBfpbC@0
620bC@`U+LSU!!!!!!!!N!!!ER9XE!(p+!!!"J3P!!2p*`3Q"#F+r5F!"!TVEf0X$33
621Q!!&Y!!!*@JPGr5B+r5B!"!TKE'PK"J3R!!2p*33S"#N+r58!"!TTER0S$33S!!)
622d!!!*B!PSr53%+JVp*!!%#Q0QEf`0"#S!!@m!!!PN#@Ip)`[p)`!d-!!BEh"PER0
623cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"#N
624!!rdL"#[p)3Vp)J!%#R4[)#!0"#X!!Qi!!!PV#AS%,!3Y$33X!!)d!!!*F`Pkr5!
625%,JVp)!!%#QCTE'80"#i!!@d!!!Pf#AN%,``%,`!0!!GcFf`b-bjS!!)!!!d%,3!
626#0!!!#@X*FrdI"$!+r4m!"!TMCQpX$33`!!&[!!!*E`Pbr4i,r4i!(M!!$A0cE'C
627[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r5%!!!)%*!!#"$%%-Jd%-3!$53!##B%
628*UrdGr4`%-`Vp(3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r4`!!!B%-`!
629$r4X%0!3e#[dE!!3+DfpME!d%0!!"E3!!#B8*L2dD#[dD!!3+B@aTB3B%03!$r4N
630%0J3h#[dC!!3+D@jcD!d%0J!#0!!!#BX*NrdB"$J+r4J!"!TMCQpX$33i!!&[!!!
631*M`Q5r4F,r4F!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%P
632ZBfaeC'9'EfaNCA*3BA4S"J3h!!2p&J3jr48+r4B!"!TdEb!J$33j!!*Z!!!*PJQ
633P"$S%1`d%1J!#0!!!#Ci*TId8"$`+r43!"!TQD@aP$33m!!&Y!!!*S3QN"$d-"$d
634!$!!'Fh0X-bjS!!)!!!d%1`!#0!!!#CB*R[d6"$i+r4-!"!TMCQpX$33q!!&[!!!
635*QJQGr4),r4)!(M!!$A0cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r48!!!)
636%-J!#"$m%3!d%2`!$53!##D`*e[d4r4!%33Vp%3!B,Q0[FQ9MFQ9X+LSU+J!!!!!
637!!*!!!'jeE'`"r4!!!!B%33!$r3m%3J4$#[d2!!3+DfpME!d%3J!"E3!!#E!*Xrd
6381#[d1!!3+B@aTB3B%3`!$r3d%4!4&#[d0!!3+D@jcD!d%4!!#0!!!#EB*[[d-"%B
639+r3`!"!TMCQpX$34'!!&[!!!*ZJQpr3X,r3X!0$!!''p`C@jcFfaTEQ0XG@4PCQp
640XC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J4&!!2p#J4(r3N+r3S
641!"!TdEb!J$34(!!*Z!!!*`3R3"%J%53d%5!!#0!!!#FN*d2d)"%S+r3J!"!TQD@a
642P$34+!!&Y!!!*c!R2"%X-"%X!$!!'G'ac-5jS!!)!!!d%53!#0!!!#F%*bId("%`
643+r3F!"!TMCQpX$34-!!&[!!!*a3R)r3B,r3B!(M!!$A0cE'C[E'4PFR"KG'J!$A0
644cE%C[E'4PFP"KG'J'r3N!!!)%3!!#"%d%6Jd%63!#E!!##GF*erd&r33"r38!!!(
645p"!!!!J41!!)%6`43$342!!0*!!)*e`S"r32p!J44#[d$!"JZBfpbC@0bC@`U+LS
646U!!!!!!!!N!!!ER9XE!(p!J!!"J44!!2p!345"&-+r3%!"!TVEf0X$345!!&Y!!!
647*f`RHr3!+r3!!"!TKE'PK"J46!!2mr`48"&8+r2m!"!TTER0S$348!!)d!!!*i3R
648Tr2i%9JVmrJ!%#Q0QEf`0"&B!!@m!!!RP#HMmr3[mr3!d-!!BEh"PER0cE'PZBfa
649eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"&8!!rcm"&I
650mq`Vmr!!%#R4[)#!0"&F!!Qi!!!RX#IX%@!4C$34B!!)d!!!*p!Rlr2S%@JVmqJ!
651%#QCTE'80"&S!!@d!!!Rh#IS%@``%@`!1!!KMFRP`G'mZD!!#!!!0"&N!!M3!!!R
652X#I6mq34F#[cj!!3+BfC[E!d%A!!"E`!!#I!*mrci#rci!#3`!""MFRP`G'pQEfa
653NCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cl!!!#"&!!!J4G"&i0"&d!!Q`!!JS
654##J,mprcf!Ich!!!"r2B!!!)%AJ!#"&m%B!d%A`!$53!##J)+,2cer23%B3Vmp3!
655B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r23!!!B%B3!$r2-%BJ4M#[cc!!3
656+DfpME!d%BJ!"E3!!#JB+#Icb#[cb!!3+B@aTB3B%B`!$r2%%C!4P#[ca!!3+D@j
657cD!d%C!!#0!!!#J`+&2c`"'B+r2!!"!TMCQpX$34Q!!&[!!!+%!S6r1m,r1m!0$!
658!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*
6593BA4S"J4P!!2mlJ4Rr1d+r1i!"!TdEb!J$34R!!*Z!!!+&`SQ"'J%D3d%D!!#0!!
660!#Km+*[cX"'S+r1`!"!TQD@aP$34U!!&Y!!!+)JSP"'X-"'X!%!!+Eh"PER0cE(B
661ZD!!#!!!0"'N!!M3!!!SA#Krmk`4X#[cV!!3+BfC[E!d%E!!"E`!!#KX+([cU#rc
662U!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cY!!!#"'!
663!!J4Y"'i0"'d!!dN!!JSY#PImkIcS"'m+r1N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
6643!!"ZG@aX!IcS!!!'"'m!!rcR"(!%F3Vmj`!%#QY[Bf`0"(!!!@d!!!Sa#M6mjJV
665mjJ!%#Q&XD@%'"(%!!rcP"()%F`Vmj3!%#QPZFfJ0"()!!M3!!!Sh#Mrmj!4d#[c
666N!!3+BfC[E!d%G!!"E`!!#MX+2[cM#rcM!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
667PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%F`!$r1)%GIcK#[cL!!3
668+G'mJ)!d%G3!#EJ!!#N)+834f"(F0"(B!!M3!!!T+#P(mi!4i#[cJ!!3+CQPXC3d
669%H!!"E3!!#Nd+8!4j$!4j!!i!#(4YC'PQCLjS!!)!!!d%G`!#0!!!#N)+5[cI"(S
670+r0m!"!TMCQpX$34k!!&[!!!+4JT*r0i,r0i!*$!!%'0bHA"dEfC[E'4PFR"KG'J
671!%'0bHA"dEdC[E'4PFP"KG'J'r1%!!!)%EJ!#"(X%I!d%H`!#E!!##PJ+@2cGr0`
672"r0d!!!(mh!!!!J4m!!)%I34q$34p!!*X!!)+@!TBr0[mfJ(mf`!!!IcD!!!#"(i
673!!J4r")!0"(m!!dN!!JTB#S,mfIcB")%+r0N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
6743!!"ZG@aX!IcB!!!'")%!!rcA"))%J`Vme`!%#QY[Bf`0"))!!@d!!!TF#PrmeJV
675meJ!%#Q&XD@%'")-!!rc9")3%K3Vme3!%#QPZFfJ0")3!!M3!!!TL#QVme!5'#[c
6768!!3+BfC[E!d%KJ!"E`!!#QB+DIc6#rc6!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
677PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%K3!$r0)%Krc4#[c5!!3
678+G'mJ)!d%K`!#EJ!!#Qd+I!5)")N0")J!!M3!!!Te#Rcmd!5+#[c3!!3+CQPXC3d
679%LJ!"E3!!#RJ+H`5,$!5,!!`!"Q9IEh-ZD!!#!!!0")N!!M3!!!TY#RAmc`5-#[c
6802!!3+BfC[E!d%M!!"E`!!#R%+G2c1#rc1!#B`!"&[F'9ZFh0XCQpXC'9bF'&dD!!
6814Eh"PER0cE%C[E'4PFP"KG'J'r0%!!!)%J!!#")d%MJd%M3!$53!##S-+VIc0r-`
682%M`Vmc3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r-`!!!B%M`!$r-X%N!!
683%N3Vmb`!%#QY[Bf`0"*!!!!&Y!!!+K`U+r-S+r-S!"!TKE'PK"J54!!2mb355"*-
684+r-N!"!TTER0S$355!!)d!!!+M3U9r-J%P!Vmb!!%#Q0QEf`0"*3!!@m!!!U4#T6
685ma`[ma`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
686NC8C[E'4PFP"KG'J'"*-!!rc'"*Ama3VmaJ!%#R4[)#!0"*8!!Qi!!!UB#UF%PJ5
687A$35@!!)d!!!+S!URr-3%Q!Vma!!%#QCTE'80"*J!!@d!!!UM#UB%Q3`%Q3!0!!G
688PAfpc-LjS!!)!!!d%P`!#0!!!#TJ+S2c$"*S+r--!"!TMCQpX$35D!!&[!!!+R!U
689Ir-),r-)!*M!!%@p`C@jcFfaQEfaNCA*`BA4S!"&[F'9ZFh0X4QpXC'9b8'&dD!E
690ma3!!!J51!!)%Qrc"$35E!!*X!!)+VJUZr-$m[`(m`!!!!Ibr!!!#r-%!!!d!#3!
691"E3!!!!!!!3!I!Irq!!!#!!B!!J5F"*d0"*`!!Q`!!J!!!!$m[[bp!Ibq!!!"r,d
692!!!)%R3!#"*i%R`d%RJ!#E!!##V%+b!5Jr,`0"+!!!dN!!JUa#XMmZ`5K"+)+r,X
693!'#jcHA0[C'a[Cf&cDh)!!!!!!!!!!&4&@&30"+%!!@d!!!Ua#V3%S``%S`!'!!!
694!!J!!"J5L!!2mZJ5N"+8+r,S!"!TLG'jc$35N!!&+!!!+Y`Um"+B#"+B!!J5Rr,N
6950"+F!!@d!!!Uh#VS%U!`%U!!+!!4%EfjP!!)!!!,mZ3!!"J5P!!2mZ!5Tr,F+r,J
696!"!TRDACe$35T!!&Y!!!+[`V#r,B$r,B!"3EmY`!!!Ibm!!!#"*m!!J5Ur,80"+S
697!!Q`!!J!!!!$mY2bc!Ibd!!!"r,-!!!,mY3!!$J!#!!!2%!!$!",mXJ5V"+`%V35
698Z"+m%X!5a",)%X`5d",8%YJ5hr,(mX2b[r+i"r,)!!"!%U`!3r+hmV2bVr+VmUIb
699Sr+ImT[bPr+6mSrbLr+(mS2bIr*i+r+d!'#jKCACdEf&`F'jeE'`!!)!!!!#3!!!
700U+LSU#rbX!")`!!GdD'9`BA4S!!GdD'93BA4S#rbV!"``!!adD'9[E'4NC@aTEA-
701!$(4SC8pXC%4PE'PYF`[mUJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh4
7023BA4S#rbT!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mU!!Q-!!4D@jME(9NC@C
703[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rbR!$3`!"K[F'9ZFh0XD@jME(9
704NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD![mTJ!N-!!3Bh*
705jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mT3!H-!!0Fh0XCQpXC'9
706bF'&dD!!0Fh0X4QpXC'9b8'&dD![mT!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p
707`C@jcFfa'EfaNCA*3BA4S#rbM!#i`!"9dD'9ZCAGQEfaNCA*bC@CPFQ9ZBf8!&A4
708SC8jPGdC[E'4PFP*PCQ9bC@jMC3[mSJ!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!Ib
709K!!!"r+!!!!(mR`!!!IbH!!!1"+`!"a$mR35ir*cmQ`5j",VmQJVmR3!B,Q&PGR4
710[BA"`ER9XE!!!J!!!!*!!!#SU+LS0",J!!@X!!!!!#XJ%Z`)%Z`!#!!8%[!)%[!!
711#"*lmQ3,mQ3!!!IbF!!!#r*X!!"!%Z3!!%!5k!)B!(rbBr*ImP[b9r*6mNrb5!#c
712mNIb3!2b2r)lmMIb-!%rmL`"D!&[mLJ"Nr)N!EIb)r)ImKJ#2r)AmK2b$r),mJIb
713!r(rmI[apr(cmH`#Tr(VmHIair(F![Iaf!-ImG3$8!1)!l!$j!3-"%!%D!5F"-3%
714q!8J"93&I!@`"GJ'$!Bd"QJ'N!E%"Z`()!G)"h`(T!IB#!!)0!KF#*!)Z!MX#43*
7155!P`#D3*c!S!#LJ+A!U%#VJ+m!XB#d`,G!ZS#p!-"!`X$'!-L!bm$130'!e!$A30
716R!h3$IJ1,!jN$S`1`!lS$a`24!pi$l!2f"!-%%`3K"#m%234,"&X%D`4j")X%Q35
717Mr(3%U2acr(,mF3VmQ!!%#Q0[BQS+r*F!'#jPBA*cCQCNFQ&XDA-!!!!!!!!J!'&
718QC()+r*B!"!TMG(Kd#rb9!")`!!GdD'9`BA4S!!GdD'93BA4S#[b8!!3+BA0MFJV
719mN`!%#R4iC'`,r*)!($!!$(4SC@pXC'4PE'PYF`!-G'KP6faN4'9XD@ec#[b4!!3
720+BfPdE32mN!$rr3[mM`!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh43BA4
721S!rb1rri+r)d!"!T849K8#rb-!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mL`!
722Q-!!4D@jME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rb+!$3`!"K
723[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
724dD![mL3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mL!!
725H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD![mK`!Q-!!4Eh"PER0cE'C
726[E'4PFR"KG'J!%@p`C@jcFfa'EfaNCA*3BA4S#[b'!!3+BfC[E!VmK3!B,QeTFf0
727cE'0d+LSU+J!!!!!!!*!!!#SU+LS+r)3!"!TcC@aP#[b$!"JZBfpbC@4PE'mU+LS
728U!!!!!!!!N!!!+LSU+J(mJJ!!![b"!!!+r)!!"!TVEf0X#[ar!!3+D@jcD!2mIJ!
729%#[ap!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!VmI!!%#R*cE(3,r(X!,M!
730!&A4SC@jPGfC[E'4PFR*PCQ9bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P#[a
731k!!3+F'jKE3VmH3!%#Q&XD@%+r(J!"!TdEb!J#[ah!!3+CQPXC32mGJ!'#rae!"3
732`!!KdC@e`F'&dD!!)G'9YF&"KG'J+r(3!"!TLG'jc#[ac!!3+CfPfG32mFJ!&#[a
733a!"JZFhPcEf4XEfGKFfYb!!!!!!!!!!"849K8%IbD#XRJ%JUYi1%TDJ`!!LrM*N9
7344e%r&jLa&edrSaHBX4Nr%@qPF@eTVA&VU-NAE6m4Ek9aE@QYF@Z`bl5C&hNr,lbA
735Y*N9J!""2bf%!%59K!")Pl5C&B!!66mYK!"3Pl5C&B!!96mYK!"BPl5C&B!!A6m[
736Y*N9J!"K2amAQ,%C2&!!L+Q%!'9m!%#pK!"PK!"S[DJ`!'dmUB3!F,'S-!"eA!!K
737B!"i!(fK2+Q%!)'%!'@%!)5TK!"PI!"![B3!L$!!M6em!*%9J!#92A`!PDJ`!'dp
738K!#BUB3!F,'%!*ba'6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"R1,f%!+Q%!+bp
739K!#`-!#02A`!9B3!Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
740K!#TK!#m[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!
741`,f%!,!`!)dpI!"9K!$%P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!
742Z,f%!+Q%!-LpK!#`-!#02A`!9B3!c*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!
743T+Q%!'9m!,LpK!#TK!$3[B3!X$!!M6em!&@%!059&B!!Z6bTK!#"K!#KK!#%UB3!
744CA`!6,f%!+5TK!"PI!#i[B3!UB3!f,f%!,!`!)dpI!"9K!$FP4@!!,NmUB3!JB3!
745SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!1#pK!#`-!#02A`!9B3!j*89J!#j
7462+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!$S[B3!X$!!M6em!&@%
747!1b9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!m,f%!,!`
748!)dpI!"9K!$dP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
749!2LpK!#`-!#02A`!9B3!r*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
750!,LpK!#TK!%![B3!X$!!M6em!&@%!359&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
751!+5TK!"PI!#i[B3!UB3"#,f%!,!`!)dpI!"9K!%-P4@!!,NmUB3!JB3!SB3!K+Q%
752!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!4#pK!#`-!#02A`!9B3"&*89J!#j2+Q%!)'%
753!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!%B[B3!X$!!M6em!&@%!4b9&B!!
754Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"),f%!,!`!)dpI!"9
755K!%NP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!5LpK!#`
756-!#02A`!9B3",*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#T
757K!%`[B3!X$!!M6em!&@%!659&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
758I!#i[B3!UB3"1,f%!,!`!)dpI!"9K!%mP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bp
759K!#NUB3!CA`!Z,f%!+Q%!8#pK!#`-!#02A`!9B3"4*89J!#j2+Q%!)'%!+'%!)5T
760K!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&)[B3!X$!!M6em!&@%!8b9&B!!Z6bTK!#"
761K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"8,f%!,!`!)dpI!"9K!&8P4@!
762!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!9LpK!#`-!#02A`!
7639B3"A*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&J[B3!
764X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"C,f%!,!`!)dp
765I!"9K!&SP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!@bp
766K!#`-!#02A`!9B3"F*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
767K!#TK!&d[B3!X$!!M6em!&@%!AL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5T
768K!"PI!#i[B3!UB3"I,f%!,!`!)dpI!"9K!'!P4@!!,NmUB3!JB3!SB3!K+Q%!'9m
769!%bpK!#NUB3!CA`!Z,f%!+Q%!B5pK!#`-!#02A`!9B3"L*89J!#j2+Q%!)'%!+'%
770!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'-[B3!X$!!M6em!&@%!C#9&B!!Z6bT
771K!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"P,f%!,!`!)dpI!"9K!'B
772P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!CbpK!#`-!#0
7732A`!9B3"S*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'N
774[B3!X$!!M6em!&@%!DL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i
775[B3!UB3"V,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
776!E#pK!#`-!#02A`!9B3"Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
777!,LpK!#TK!'i[B3!X$!!M6em!&@%!Eb9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
778!+5TK!"PI!#i[B3!UB3"`,f%!,!`!)dpI!"9K!(%P4@!!,NmUB3!JB3!SB3!K+Q%
779!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!FLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-
780[B3!T+Q%!'9m!,LpK!#TK!(-[B3!X$!!M6em!&@%!G#9&B!!Z6bTK!#"K!#KK!#%
781UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"e,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m
782!%bpK!#NUB3!CA`!A,f%!+Q%!GLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!
783T+Q%!'9m!&bpK!#TK!(F[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
784I!"F[B3!UB3"i,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!A,f%
785!+Q%!H5pK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&bpK!#TK!(S
786[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!"8[B3!UB3"l,f%!,!`
787!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!9,f%!+Q%!I#pK!#`-!#02+Q%
788!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&5pK!#TK!(d[B3!X$!!M6bTK!#"K!#K
789K!#%UB3!CA`!6,f%!+5TK!"PI!"J[B3!UB3"q,f%!,!`!)dmUB3!JB3!SB3!K+Q%
790!'9m!%bpK!#NUB3!CA`!B,f%!+Q%!IbpK!#`-!#028&92B3#!B3#"B3##DhCK!)0
791K!)4K!#)-!)82$!5Y!&%!5deKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0
792[E@PZCcT[F'9ZFh0X,90139!Y-6Nj16%b-6%k6@&M6e-kE@YXD@jVFbjKF`!#!!!
7931"+i!!J6mF!5p!ra`!!%1",d!!3!%[J`%[J!'!!!!!J!!$J5[!!)%r'm%[`2mE`!
794%$J5r!!3!"-!%`36#"---"-!!%J!-6@&MD@jdEh0S)%K%!!)!!!`%`3!8!!j%CA0
795VG'p`)%C[E'4PFJ!#!!!-"-)!$J!)5@jMEfeTEQF!!J!!$!6$!"X!&@p`C@jcFf`
796Y8dj"8#da16Nj-6)a-3!#!!!-",!!4J"!6@&MD@jdEh0S)%K%1N4PFfYdEh!J4Qp
797XC'9b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6T0B@028`!#!!!-",%
798!5!"#6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9b1NPZBfpYD@jR1Qp`C@jcFf`
799Y8dj"8#da16Nj-6)a-6TTEQ0XG@4P!!)!!!`%XJ"3!%T0B@0TER4[FfJJ5%3k4'9
800cDh4[F#"'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a1QPZBfa
801eC'8kEh"PER0cE!!#!!!-",-!4`""6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9
802b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6TMFRP`G'm!!J!!$!5d!%3
803!2NeKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90
804139!Y-6Nj16%b-6%kFh0X!!)!!!`%Y3"!!$T0B@0TER4[FfJJ5%3k4'9cDh4[F#"
805'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a!!)!!!i%YJ!"&!6
806%$J6%!!-B"-AmEJ6'$J6&!!-B"-ImE36)$J6(!!-B"-RmE!6+$J6*!!-B!"rmD`6
807,#[aV!!3+BfC[E!`%b`!1!!K*EQ0[E@PZC`!#!!!+r'`!"!TMCQpX$!6+!"X!&@p
808`C@jcFf`Y8dj"8#da16Nj-6)a-3!#!!!+r'd!"!TMCQpX$!6)!!d!"fPZBfaeC'8
809!!J!!#[aZ!!3+BfC[E!`%aJ!9!!peER4TG'aPC#"QEfaNCA)!!J!!$!5h!%i!5%e
810KBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90139!
811Y-6Nj16%b-6%kBh*jF(4[1RJe-$Pf-`!#!!!"r,%!!!(mX!!!!Ib[!!!"r+i!!'&
812cBh)!!3!-qYlHV3!!!3!!!*G#!!#@3J!!!AB!!$-8-0J!!!!F!AB!$h0MFhS!!!#
813#6Np853!!!)jcBh"d!!!!QP4&@&3!!3#QFh4jE!!!!,j$6d4&!!%!bN*14%`!!!$
814LBA"XG!!!!1j'8N9'!!!!qNP$6L-!!!%'D@0X0!!!!4*TBh-M!!!"(QPMFc3!!!%
815UD'CNFJ!!!6C659T&!!!"3PG3Eh-!!!&1!!$rr`!!!!!!!!!!!)$rre!!!"i!!!!
816!!)$rr`!!"cJ#DH#m"'Mrr`!!!*S!!!!!%iRrr`!!"Pi!!!!!"'Mrr`!!!53!!!!
817!!!$rrb!!!9)!!!!!!!(rra3!!@i#DG`%!)$rr`!!!Pi#DH"X!!$rr`!!!Ri!!!!
818!!)$rr`!!!S-#DH"d!*Err`!!!Si!!!!!!*Err`!!!j)!!!!!!*Err`!!"CB#DH%
819i!*Err`!!"GS#DH%dkF$rr`!!"[`!!!!!rrrrr`!!"a)!!!!!!)$rr`!!"b!!!!!
820!*4S:
diff --git a/src/lib/libssl/src/MacOS/opensslconf.h b/src/lib/libssl/src/MacOS/opensslconf.h
deleted file mode 100644
index ad557cc06a..0000000000
--- a/src/lib/libssl/src/MacOS/opensslconf.h
+++ /dev/null
@@ -1,116 +0,0 @@
1/* MacOS/opensslconf.h */
2
3#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
4#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
5#define OPENSSLDIR "/usr/local/ssl"
6#endif
7#endif
8
9#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
10#define IDEA_INT unsigned int
11#endif
12
13#if defined(HEADER_MD2_H) && !defined(MD2_INT)
14#define MD2_INT unsigned int
15#endif
16
17#if defined(HEADER_RC2_H) && !defined(RC2_INT)
18/* I need to put in a mod for the alpha - eay */
19#define RC2_INT unsigned int
20#endif
21
22#if defined(HEADER_RC4_H)
23#if !defined(RC4_INT)
24/* using int types make the structure larger but make the code faster
25 * on most boxes I have tested - up to %20 faster. */
26/*
27 * I don't know what does "most" mean, but declaring "int" is a must on:
28 * - Intel P6 because partial register stalls are very expensive;
29 * - elder Alpha because it lacks byte load/store instructions;
30 */
31#define RC4_INT unsigned char
32#endif
33#if !defined(RC4_CHUNK)
34/*
35 * This enables code handling data aligned at natural CPU word
36 * boundary. See crypto/rc4/rc4_enc.c for further details.
37 */
38#define RC4_CHUNK unsigned long
39#endif
40#endif
41
42#if defined(HEADER_DES_H) && !defined(DES_LONG)
43/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
44 * %20 speed up (longs are 8 bytes, int's are 4). */
45#ifndef DES_LONG
46#define DES_LONG unsigned long
47#endif
48#endif
49
50#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
51#define CONFIG_HEADER_BN_H
52#if __option(longlong)
53# define BN_LLONG
54#else
55# undef BN_LLONG
56#endif
57
58/* Should we define BN_DIV2W here? */
59
60/* Only one for the following should be defined */
61/* The prime number generation stuff may not work when
62 * EIGHT_BIT but I don't care since I've only used this mode
63 * for debuging the bignum libraries */
64#undef SIXTY_FOUR_BIT_LONG
65#undef SIXTY_FOUR_BIT
66#define THIRTY_TWO_BIT
67#undef SIXTEEN_BIT
68#undef EIGHT_BIT
69#endif
70
71#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
72#define CONFIG_HEADER_RC4_LOCL_H
73/* if this is defined data[i] is used instead of *data, this is a %20
74 * speedup on x86 */
75#undef RC4_INDEX
76#endif
77
78#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
79#define CONFIG_HEADER_BF_LOCL_H
80#define BF_PTR
81#endif /* HEADER_BF_LOCL_H */
82
83#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
84#define CONFIG_HEADER_DES_LOCL_H
85/* the following is tweaked from a config script, that is why it is a
86 * protected undef/define */
87#ifndef DES_PTR
88#define DES_PTR
89#endif
90
91/* This helps C compiler generate the correct code for multiple functional
92 * units. It reduces register dependancies at the expense of 2 more
93 * registers */
94#ifndef DES_RISC1
95#define DES_RISC1
96#endif
97
98#ifndef DES_RISC2
99#undef DES_RISC2
100#endif
101
102#if defined(DES_RISC1) && defined(DES_RISC2)
103YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
104#endif
105
106/* Unroll the inner loop, this sometimes helps, sometimes hinders.
107 * Very mucy CPU dependant */
108#ifndef DES_UNROLL
109#define DES_UNROLL
110#endif
111
112#endif /* HEADER_DES_LOCL_H */
113
114#ifndef __POWERPC__
115#define MD32_XARRAY
116#endif
diff --git a/src/lib/libssl/src/Makefile b/src/lib/libssl/src/Makefile
index d5db11b417..4a40b701d9 100644
--- a/src/lib/libssl/src/Makefile
+++ b/src/lib/libssl/src/Makefile
@@ -4,7 +4,7 @@
4## Makefile for OpenSSL 4## Makefile for OpenSSL
5## 5##
6 6
7VERSION=1.0.1c 7VERSION=1.0.1g
8MAJOR=1 8MAJOR=1
9MINOR=0.1 9MINOR=0.1
10SHLIB_VERSION_NUMBER=1.0.0 10SHLIB_VERSION_NUMBER=1.0.0
@@ -71,7 +71,7 @@ RANLIB= /usr/bin/ranlib
71NM= nm 71NM= nm
72PERL= /usr/bin/perl 72PERL= /usr/bin/perl
73TAR= tar 73TAR= tar
74TARFLAGS= --no-recursion 74TARFLAGS= --no-recursion --record-size=10240
75MAKEDEPPROG=makedepend 75MAKEDEPPROG=makedepend
76LIBDIR=lib 76LIBDIR=lib
77 77
@@ -304,7 +304,8 @@ libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
304 FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \ 304 FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \
305 export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \ 305 export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \
306 fi; \ 306 fi; \
307 $(MAKE) -e SHLIBDIRS=crypto build-shared; \ 307 $(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared && \
308 (touch -c fips_premain_dso$(EXE_EXT) || :); \
308 else \ 309 else \
309 echo "There's no support for shared libraries on this platform" >&2; \ 310 echo "There's no support for shared libraries on this platform" >&2; \
310 exit 1; \ 311 exit 1; \
@@ -446,7 +447,7 @@ rehash.time: certs apps
446 [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \ 447 [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
447 OPENSSL_DEBUG_MEMORY=on; \ 448 OPENSSL_DEBUG_MEMORY=on; \
448 export OPENSSL OPENSSL_DEBUG_MEMORY; \ 449 export OPENSSL OPENSSL_DEBUG_MEMORY; \
449 $(PERL) tools/c_rehash certs) && \ 450 $(PERL) tools/c_rehash certs/demo) && \
450 touch rehash.time; \ 451 touch rehash.time; \
451 else :; fi 452 else :; fi
452 453
diff --git a/src/lib/libssl/src/Makefile.org b/src/lib/libssl/src/Makefile.org
index 55273ea364..c92806f920 100644
--- a/src/lib/libssl/src/Makefile.org
+++ b/src/lib/libssl/src/Makefile.org
@@ -69,7 +69,7 @@ RANLIB= ranlib
69NM= nm 69NM= nm
70PERL= perl 70PERL= perl
71TAR= tar 71TAR= tar
72TARFLAGS= --no-recursion 72TARFLAGS= --no-recursion --record-size=10240
73MAKEDEPPROG=makedepend 73MAKEDEPPROG=makedepend
74LIBDIR=lib 74LIBDIR=lib
75 75
@@ -302,7 +302,8 @@ libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
302 FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \ 302 FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \
303 export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \ 303 export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \
304 fi; \ 304 fi; \
305 $(MAKE) -e SHLIBDIRS=crypto build-shared; \ 305 $(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared && \
306 (touch -c fips_premain_dso$(EXE_EXT) || :); \
306 else \ 307 else \
307 echo "There's no support for shared libraries on this platform" >&2; \ 308 echo "There's no support for shared libraries on this platform" >&2; \
308 exit 1; \ 309 exit 1; \
@@ -444,7 +445,7 @@ rehash.time: certs apps
444 [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \ 445 [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
445 OPENSSL_DEBUG_MEMORY=on; \ 446 OPENSSL_DEBUG_MEMORY=on; \
446 export OPENSSL OPENSSL_DEBUG_MEMORY; \ 447 export OPENSSL OPENSSL_DEBUG_MEMORY; \
447 $(PERL) tools/c_rehash certs) && \ 448 $(PERL) tools/c_rehash certs/demo) && \
448 touch rehash.time; \ 449 touch rehash.time; \
449 else :; fi 450 else :; fi
450 451
diff --git a/src/lib/libssl/src/NEWS b/src/lib/libssl/src/NEWS
index 4f069cbd14..ed486d146d 100644
--- a/src/lib/libssl/src/NEWS
+++ b/src/lib/libssl/src/NEWS
@@ -5,24 +5,49 @@
5 This file gives a brief overview of the major changes between each OpenSSL 5 This file gives a brief overview of the major changes between each OpenSSL
6 release. For more details please read the CHANGES file. 6 release. For more details please read the CHANGES file.
7 7
8 Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c: 8 Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]
9
10 o Fix for CVE-2014-0160
11 o Add TLS padding extension workaround for broken servers.
12 o Fix for CVE-2014-0076
13
14 Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
15
16 o Don't include gmt_unix_time in TLS server and client random values
17 o Fix for TLS record tampering bug CVE-2013-4353
18 o Fix for TLS version checking bug CVE-2013-6449
19 o Fix for DTLS retransmission bug CVE-2013-6450
20
21 Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]:
22
23 o Corrected fix for CVE-2013-0169
24
25 Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]:
26
27 o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version.
28 o Include the fips configuration module.
29 o Fix OCSP bad key DoS attack CVE-2013-0166
30 o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
31 o Fix for TLS AESNI record handling flaw CVE-2012-2686
32
33 Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]:
9 34
10 o Fix TLS/DTLS record length checking bug CVE-2012-2333 35 o Fix TLS/DTLS record length checking bug CVE-2012-2333
11 o Don't attempt to use non-FIPS composite ciphers in FIPS mode. 36 o Don't attempt to use non-FIPS composite ciphers in FIPS mode.
12 37
13 Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b: 38 Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]:
14 39
15 o Fix compilation error on non-x86 platforms. 40 o Fix compilation error on non-x86 platforms.
16 o Make FIPS capable OpenSSL ciphers work in non-FIPS mode. 41 o Make FIPS capable OpenSSL ciphers work in non-FIPS mode.
17 o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0 42 o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0
18 43
19 Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a: 44 Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]:
20 45
21 o Fix for ASN1 overflow bug CVE-2012-2110 46 o Fix for ASN1 overflow bug CVE-2012-2110
22 o Workarounds for some servers that hang on long client hellos. 47 o Workarounds for some servers that hang on long client hellos.
23 o Fix SEGV in AES code. 48 o Fix SEGV in AES code.
24 49
25 Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1: 50 Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]:
26 51
27 o TLS/DTLS heartbeat support. 52 o TLS/DTLS heartbeat support.
28 o SCTP support. 53 o SCTP support.
@@ -35,17 +60,30 @@
35 o Preliminary FIPS capability for unvalidated 2.0 FIPS module. 60 o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
36 o SRP support. 61 o SRP support.
37 62
38 Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h: 63 Major changes between OpenSSL 1.0.0j and OpenSSL 1.0.0k [5 Feb 2013]:
64
65 o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
66 o Fix OCSP bad key DoS attack CVE-2013-0166
67
68 Major changes between OpenSSL 1.0.0i and OpenSSL 1.0.0j [10 May 2012]:
69
70 o Fix DTLS record length checking bug CVE-2012-2333
71
72 Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.0i [19 Apr 2012]:
73
74 o Fix for ASN1 overflow bug CVE-2012-2110
75
76 Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
39 77
40 o Fix for CMS/PKCS#7 MMA CVE-2012-0884 78 o Fix for CMS/PKCS#7 MMA CVE-2012-0884
41 o Corrected fix for CVE-2011-4619 79 o Corrected fix for CVE-2011-4619
42 o Various DTLS fixes. 80 o Various DTLS fixes.
43 81
44 Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g: 82 Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g [18 Jan 2012]:
45 83
46 o Fix for DTLS DoS issue CVE-2012-0050 84 o Fix for DTLS DoS issue CVE-2012-0050
47 85
48 Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f: 86 Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f [4 Jan 2012]:
49 87
50 o Fix for DTLS plaintext recovery attack CVE-2011-4108 88 o Fix for DTLS plaintext recovery attack CVE-2011-4108
51 o Clear block padding bytes of SSL 3.0 records CVE-2011-4576 89 o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
@@ -53,7 +91,7 @@
53 o Check parameters are not NULL in GOST ENGINE CVE-2012-0027 91 o Check parameters are not NULL in GOST ENGINE CVE-2012-0027
54 o Check for malformed RFC3779 data CVE-2011-4577 92 o Check for malformed RFC3779 data CVE-2011-4577
55 93
56 Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e: 94 Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e [6 Sep 2011]:
57 95
58 o Fix for CRL vulnerability issue CVE-2011-3207 96 o Fix for CRL vulnerability issue CVE-2011-3207
59 o Fix for ECDH crashes CVE-2011-3210 97 o Fix for ECDH crashes CVE-2011-3210
@@ -61,11 +99,11 @@
61 o Support ECDH ciphersuites for certificates using SHA2 algorithms. 99 o Support ECDH ciphersuites for certificates using SHA2 algorithms.
62 o Various DTLS fixes. 100 o Various DTLS fixes.
63 101
64 Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d: 102 Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d [8 Feb 2011]:
65 103
66 o Fix for security issue CVE-2011-0014 104 o Fix for security issue CVE-2011-0014
67 105
68 Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c: 106 Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]:
69 107
70 o Fix for security issue CVE-2010-4180 108 o Fix for security issue CVE-2010-4180
71 o Fix for CVE-2010-4252 109 o Fix for CVE-2010-4252
@@ -73,18 +111,18 @@
73 o Fix various platform compilation issues. 111 o Fix various platform compilation issues.
74 o Corrected fix for security issue CVE-2010-3864. 112 o Corrected fix for security issue CVE-2010-3864.
75 113
76 Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b: 114 Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b [16 Nov 2010]:
77 115
78 o Fix for security issue CVE-2010-3864. 116 o Fix for security issue CVE-2010-3864.
79 o Fix for CVE-2010-2939 117 o Fix for CVE-2010-2939
80 o Fix WIN32 build system for GOST ENGINE. 118 o Fix WIN32 build system for GOST ENGINE.
81 119
82 Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a: 120 Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]:
83 121
84 o Fix for security issue CVE-2010-1633. 122 o Fix for security issue CVE-2010-1633.
85 o GOST MAC and CFB fixes. 123 o GOST MAC and CFB fixes.
86 124
87 Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0: 125 Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0 [29 Mar 2010]:
88 126
89 o RFC3280 path validation: sufficient to process PKITS tests. 127 o RFC3280 path validation: sufficient to process PKITS tests.
90 o Integrated support for PVK files and keyblobs. 128 o Integrated support for PVK files and keyblobs.
@@ -107,20 +145,55 @@
107 o Opaque PRF Input TLS extension support. 145 o Opaque PRF Input TLS extension support.
108 o Updated time routines to avoid OS limitations. 146 o Updated time routines to avoid OS limitations.
109 147
110 Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r: 148 Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]:
149
150 o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
151 o Fix OCSP bad key DoS attack CVE-2013-0166
152
153 Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]:
154
155 o Fix DTLS record length checking bug CVE-2012-2333
156
157 Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]:
158
159 o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110)
160
161 Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]:
162
163 o Fix for ASN1 overflow bug CVE-2012-2110
164
165 Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [12 Mar 2012]:
166
167 o Fix for CMS/PKCS#7 MMA CVE-2012-0884
168 o Corrected fix for CVE-2011-4619
169 o Various DTLS fixes.
170
171 Major changes between OpenSSL 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]:
172
173 o Fix for DTLS DoS issue CVE-2012-0050
174
175 Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]:
176
177 o Fix for DTLS plaintext recovery attack CVE-2011-4108
178 o Fix policy check double free error CVE-2011-4109
179 o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
180 o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
181 o Check for malformed RFC3779 data CVE-2011-4577
182
183 Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]:
111 184
112 o Fix for security issue CVE-2011-0014 185 o Fix for security issue CVE-2011-0014
113 186
114 Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q: 187 Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]:
115 188
116 o Fix for security issue CVE-2010-4180 189 o Fix for security issue CVE-2010-4180
117 o Fix for CVE-2010-4252 190 o Fix for CVE-2010-4252
118 191
119 Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p: 192 Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p [16 Nov 2010]:
120 193
121 o Fix for security issue CVE-2010-3864. 194 o Fix for security issue CVE-2010-3864.
122 195
123 Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o: 196 Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]:
124 197
125 o Fix for security issue CVE-2010-0742. 198 o Fix for security issue CVE-2010-0742.
126 o Various DTLS fixes. 199 o Various DTLS fixes.
@@ -128,12 +201,12 @@
128 o Fix for no-rc4 compilation. 201 o Fix for no-rc4 compilation.
129 o Chil ENGINE unload workaround. 202 o Chil ENGINE unload workaround.
130 203
131 Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n: 204 Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
132 205
133 o CFB cipher definition fixes. 206 o CFB cipher definition fixes.
134 o Fix security issues CVE-2010-0740 and CVE-2010-0433. 207 o Fix security issues CVE-2010-0740 and CVE-2010-0433.
135 208
136 Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m: 209 Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
137 210
138 o Cipher definition fixes. 211 o Cipher definition fixes.
139 o Workaround for slow RAND_poll() on some WIN32 versions. 212 o Workaround for slow RAND_poll() on some WIN32 versions.
@@ -145,33 +218,33 @@
145 o Ticket and SNI coexistence fixes. 218 o Ticket and SNI coexistence fixes.
146 o Many fixes to DTLS handling. 219 o Many fixes to DTLS handling.
147 220
148 Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l: 221 Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]:
149 222
150 o Temporary work around for CVE-2009-3555: disable renegotiation. 223 o Temporary work around for CVE-2009-3555: disable renegotiation.
151 224
152 Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k: 225 Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
153 226
154 o Fix various build issues. 227 o Fix various build issues.
155 o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789) 228 o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
156 229
157 Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j: 230 Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]:
158 231
159 o Fix security issue (CVE-2008-5077) 232 o Fix security issue (CVE-2008-5077)
160 o Merge FIPS 140-2 branch code. 233 o Merge FIPS 140-2 branch code.
161 234
162 Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h: 235 Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
163 236
164 o CryptoAPI ENGINE support. 237 o CryptoAPI ENGINE support.
165 o Various precautionary measures. 238 o Various precautionary measures.
166 o Fix for bugs affecting certificate request creation. 239 o Fix for bugs affecting certificate request creation.
167 o Support for local machine keyset attribute in PKCS#12 files. 240 o Support for local machine keyset attribute in PKCS#12 files.
168 241
169 Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g: 242 Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]:
170 243
171 o Backport of CMS functionality to 0.9.8. 244 o Backport of CMS functionality to 0.9.8.
172 o Fixes for bugs introduced with 0.9.8f. 245 o Fixes for bugs introduced with 0.9.8f.
173 246
174 Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f: 247 Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]:
175 248
176 o Add gcc 4.2 support. 249 o Add gcc 4.2 support.
177 o Add support for AES and SSE2 assembly lanugauge optimization 250 o Add support for AES and SSE2 assembly lanugauge optimization
@@ -182,23 +255,23 @@
182 o RFC4507bis support. 255 o RFC4507bis support.
183 o TLS Extensions support. 256 o TLS Extensions support.
184 257
185 Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e: 258 Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
186 259
187 o Various ciphersuite selection fixes. 260 o Various ciphersuite selection fixes.
188 o RFC3779 support. 261 o RFC3779 support.
189 262
190 Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d: 263 Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]:
191 264
192 o Introduce limits to prevent malicious key DoS (CVE-2006-2940) 265 o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
193 o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343) 266 o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
194 o Changes to ciphersuite selection algorithm 267 o Changes to ciphersuite selection algorithm
195 268
196 Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c: 269 Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]:
197 270
198 o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339 271 o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
199 o New cipher Camellia 272 o New cipher Camellia
200 273
201 Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b: 274 Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]:
202 275
203 o Cipher string fixes. 276 o Cipher string fixes.
204 o Fixes for VC++ 2005. 277 o Fixes for VC++ 2005.
@@ -208,12 +281,12 @@
208 o Built in dynamic engine compilation support on Win32. 281 o Built in dynamic engine compilation support on Win32.
209 o Fixes auto dynamic engine loading in Win32. 282 o Fixes auto dynamic engine loading in Win32.
210 283
211 Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a: 284 Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]:
212 285
213 o Fix potential SSL 2.0 rollback, CVE-2005-2969 286 o Fix potential SSL 2.0 rollback, CVE-2005-2969
214 o Extended Windows CE support 287 o Extended Windows CE support
215 288
216 Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8: 289 Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]:
217 290
218 o Major work on the BIGNUM library for higher efficiency and to 291 o Major work on the BIGNUM library for higher efficiency and to
219 make operations more streamlined and less contradictory. This 292 make operations more streamlined and less contradictory. This
@@ -287,36 +360,36 @@
287 o Added initial support for Win64. 360 o Added initial support for Win64.
288 o Added alternate pkg-config files. 361 o Added alternate pkg-config files.
289 362
290 Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m: 363 Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]:
291 364
292 o FIPS 1.1.1 module linking. 365 o FIPS 1.1.1 module linking.
293 o Various ciphersuite selection fixes. 366 o Various ciphersuite selection fixes.
294 367
295 Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l: 368 Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]:
296 369
297 o Introduce limits to prevent malicious key DoS (CVE-2006-2940) 370 o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
298 o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343) 371 o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
299 372
300 Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k: 373 Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]:
301 374
302 o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339 375 o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
303 376
304 Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j: 377 Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]:
305 378
306 o Visual C++ 2005 fixes. 379 o Visual C++ 2005 fixes.
307 o Update Windows build system for FIPS. 380 o Update Windows build system for FIPS.
308 381
309 Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i: 382 Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]:
310 383
311 o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build. 384 o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
312 385
313 Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h: 386 Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h [11 Oct 2005]:
314 387
315 o Fix SSL 2.0 Rollback, CVE-2005-2969 388 o Fix SSL 2.0 Rollback, CVE-2005-2969
316 o Allow use of fixed-length exponent on DSA signing 389 o Allow use of fixed-length exponent on DSA signing
317 o Default fixed-window RSA, DSA, DH private-key operations 390 o Default fixed-window RSA, DSA, DH private-key operations
318 391
319 Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g: 392 Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]:
320 393
321 o More compilation issues fixed. 394 o More compilation issues fixed.
322 o Adaptation to more modern Kerberos API. 395 o Adaptation to more modern Kerberos API.
@@ -325,7 +398,7 @@
325 o More constification. 398 o More constification.
326 o Added processing of proxy certificates (RFC 3820). 399 o Added processing of proxy certificates (RFC 3820).
327 400
328 Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f: 401 Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]:
329 402
330 o Several compilation issues fixed. 403 o Several compilation issues fixed.
331 o Many memory allocation failure checks added. 404 o Many memory allocation failure checks added.
@@ -333,12 +406,12 @@
333 o Mandatory basic checks on certificates. 406 o Mandatory basic checks on certificates.
334 o Performance improvements. 407 o Performance improvements.
335 408
336 Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e: 409 Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
337 410
338 o Fix race condition in CRL checking code. 411 o Fix race condition in CRL checking code.
339 o Fixes to PKCS#7 (S/MIME) code. 412 o Fixes to PKCS#7 (S/MIME) code.
340 413
341 Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d: 414 Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]:
342 415
343 o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug 416 o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
344 o Security: Fix null-pointer assignment in do_change_cipher_spec() 417 o Security: Fix null-pointer assignment in do_change_cipher_spec()
@@ -346,14 +419,14 @@
346 o Multiple X509 verification fixes 419 o Multiple X509 verification fixes
347 o Speed up HMAC and other operations 420 o Speed up HMAC and other operations
348 421
349 Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c: 422 Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]:
350 423
351 o Security: fix various ASN1 parsing bugs. 424 o Security: fix various ASN1 parsing bugs.
352 o New -ignore_err option to OCSP utility. 425 o New -ignore_err option to OCSP utility.
353 o Various interop and bug fixes in S/MIME code. 426 o Various interop and bug fixes in S/MIME code.
354 o SSL/TLS protocol fix for unrequested client certificates. 427 o SSL/TLS protocol fix for unrequested client certificates.
355 428
356 Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b: 429 Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]:
357 430
358 o Security: counter the Klima-Pokorny-Rosa extension of 431 o Security: counter the Klima-Pokorny-Rosa extension of
359 Bleichbacher's attack 432 Bleichbacher's attack
@@ -364,7 +437,7 @@
364 o ASN.1: treat domainComponent correctly. 437 o ASN.1: treat domainComponent correctly.
365 o Documentation: fixes and additions. 438 o Documentation: fixes and additions.
366 439
367 Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a: 440 Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]:
368 441
369 o Security: Important security related bugfixes. 442 o Security: Important security related bugfixes.
370 o Enhanced compatibility with MIT Kerberos. 443 o Enhanced compatibility with MIT Kerberos.
@@ -375,7 +448,7 @@
375 o SSL/TLS: now handles manual certificate chain building. 448 o SSL/TLS: now handles manual certificate chain building.
376 o SSL/TLS: certain session ID malfunctions corrected. 449 o SSL/TLS: certain session ID malfunctions corrected.
377 450
378 Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7: 451 Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]:
379 452
380 o New library section OCSP. 453 o New library section OCSP.
381 o Complete rewrite of ASN1 code. 454 o Complete rewrite of ASN1 code.
@@ -421,23 +494,23 @@
421 o SSL/TLS: add callback to retrieve SSL/TLS messages. 494 o SSL/TLS: add callback to retrieve SSL/TLS messages.
422 o SSL/TLS: support AES cipher suites (RFC3268). 495 o SSL/TLS: support AES cipher suites (RFC3268).
423 496
424 Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k: 497 Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]:
425 498
426 o Security: fix various ASN1 parsing bugs. 499 o Security: fix various ASN1 parsing bugs.
427 o SSL/TLS protocol fix for unrequested client certificates. 500 o SSL/TLS protocol fix for unrequested client certificates.
428 501
429 Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j: 502 Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]:
430 503
431 o Security: counter the Klima-Pokorny-Rosa extension of 504 o Security: counter the Klima-Pokorny-Rosa extension of
432 Bleichbacher's attack 505 Bleichbacher's attack
433 o Security: make RSA blinding default. 506 o Security: make RSA blinding default.
434 o Build: shared library support fixes. 507 o Build: shared library support fixes.
435 508
436 Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i: 509 Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]:
437 510
438 o Important security related bugfixes. 511 o Important security related bugfixes.
439 512
440 Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h: 513 Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]:
441 514
442 o New configuration targets for Tandem OSS and A/UX. 515 o New configuration targets for Tandem OSS and A/UX.
443 o New OIDs for Microsoft attributes. 516 o New OIDs for Microsoft attributes.
@@ -451,25 +524,25 @@
451 o Fixes for smaller building problems. 524 o Fixes for smaller building problems.
452 o Updates of manuals, FAQ and other instructive documents. 525 o Updates of manuals, FAQ and other instructive documents.
453 526
454 Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g: 527 Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]:
455 528
456 o Important building fixes on Unix. 529 o Important building fixes on Unix.
457 530
458 Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f: 531 Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]:
459 532
460 o Various important bugfixes. 533 o Various important bugfixes.
461 534
462 Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e: 535 Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]:
463 536
464 o Important security related bugfixes. 537 o Important security related bugfixes.
465 o Various SSL/TLS library bugfixes. 538 o Various SSL/TLS library bugfixes.
466 539
467 Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d: 540 Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]:
468 541
469 o Various SSL/TLS library bugfixes. 542 o Various SSL/TLS library bugfixes.
470 o Fix DH parameter generation for 'non-standard' generators. 543 o Fix DH parameter generation for 'non-standard' generators.
471 544
472 Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c: 545 Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]:
473 546
474 o Various SSL/TLS library bugfixes. 547 o Various SSL/TLS library bugfixes.
475 o BIGNUM library fixes. 548 o BIGNUM library fixes.
@@ -482,7 +555,7 @@
482 Broadcom and Cryptographic Appliance's keyserver 555 Broadcom and Cryptographic Appliance's keyserver
483 [in 0.9.6c-engine release]. 556 [in 0.9.6c-engine release].
484 557
485 Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b: 558 Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]:
486 559
487 o Security fix: PRNG improvements. 560 o Security fix: PRNG improvements.
488 o Security fix: RSA OAEP check. 561 o Security fix: RSA OAEP check.
@@ -499,7 +572,7 @@
499 o Increase default size for BIO buffering filter. 572 o Increase default size for BIO buffering filter.
500 o Compatibility fixes in some scripts. 573 o Compatibility fixes in some scripts.
501 574
502 Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a: 575 Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]:
503 576
504 o Security fix: change behavior of OpenSSL to avoid using 577 o Security fix: change behavior of OpenSSL to avoid using
505 environment variables when running as root. 578 environment variables when running as root.
@@ -524,7 +597,7 @@
524 o New function BN_rand_range(). 597 o New function BN_rand_range().
525 o Add "-rand" option to openssl s_client and s_server. 598 o Add "-rand" option to openssl s_client and s_server.
526 599
527 Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6: 600 Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]:
528 601
529 o Some documentation for BIO and SSL libraries. 602 o Some documentation for BIO and SSL libraries.
530 o Enhanced chain verification using key identifiers. 603 o Enhanced chain verification using key identifiers.
@@ -539,7 +612,7 @@
539 [1] The support for external crypto devices is currently a separate 612 [1] The support for external crypto devices is currently a separate
540 distribution. See the file README.ENGINE. 613 distribution. See the file README.ENGINE.
541 614
542 Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a: 615 Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]:
543 616
544 o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 617 o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8
545 o Shared library support for HPUX and Solaris-gcc 618 o Shared library support for HPUX and Solaris-gcc
@@ -548,7 +621,7 @@
548 o New 'rand' application 621 o New 'rand' application
549 o New way to check for existence of algorithms from scripts 622 o New way to check for existence of algorithms from scripts
550 623
551 Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5: 624 Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]:
552 625
553 o S/MIME support in new 'smime' command 626 o S/MIME support in new 'smime' command
554 o Documentation for the OpenSSL command line application 627 o Documentation for the OpenSSL command line application
@@ -584,7 +657,7 @@
584 o Enhanced support for Alpha Linux 657 o Enhanced support for Alpha Linux
585 o Experimental MacOS support 658 o Experimental MacOS support
586 659
587 Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4: 660 Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]:
588 661
589 o Transparent support for PKCS#8 format private keys: these are used 662 o Transparent support for PKCS#8 format private keys: these are used
590 by several software packages and are more secure than the standard 663 by several software packages and are more secure than the standard
@@ -595,7 +668,7 @@
595 o New pipe-like BIO that allows using the SSL library when actual I/O 668 o New pipe-like BIO that allows using the SSL library when actual I/O
596 must be handled by the application (BIO pair) 669 must be handled by the application (BIO pair)
597 670
598 Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3: 671 Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]:
599 o Lots of enhancements and cleanups to the Configuration mechanism 672 o Lots of enhancements and cleanups to the Configuration mechanism
600 o RSA OEAP related fixes 673 o RSA OEAP related fixes
601 o Added `openssl ca -revoke' option for revoking a certificate 674 o Added `openssl ca -revoke' option for revoking a certificate
@@ -609,7 +682,7 @@
609 o Sparc assembler bignum implementation, optimized hash functions 682 o Sparc assembler bignum implementation, optimized hash functions
610 o Option to disable selected ciphers 683 o Option to disable selected ciphers
611 684
612 Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b: 685 Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]:
613 o Fixed a security hole related to session resumption 686 o Fixed a security hole related to session resumption
614 o Fixed RSA encryption routines for the p < q case 687 o Fixed RSA encryption routines for the p < q case
615 o "ALL" in cipher lists now means "everything except NULL ciphers" 688 o "ALL" in cipher lists now means "everything except NULL ciphers"
@@ -631,7 +704,7 @@
631 o Lots of memory leak fixes. 704 o Lots of memory leak fixes.
632 o Lots of bug fixes. 705 o Lots of bug fixes.
633 706
634 Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c: 707 Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]:
635 o Integration of the popular NO_RSA/NO_DSA patches 708 o Integration of the popular NO_RSA/NO_DSA patches
636 o Initial support for compression inside the SSL record layer 709 o Initial support for compression inside the SSL record layer
637 o Added BIO proxy and filtering functionality 710 o Added BIO proxy and filtering functionality
diff --git a/src/lib/libssl/src/Netware/build.bat b/src/lib/libssl/src/Netware/build.bat
deleted file mode 100644
index 3125c2a487..0000000000
--- a/src/lib/libssl/src/Netware/build.bat
+++ /dev/null
@@ -1,235 +0,0 @@
1@echo off
2
3rem ========================================================================
4rem Batch file to automate building OpenSSL for NetWare.
5rem
6rem usage:
7rem build [target] [debug opts] [assembly opts] [configure opts]
8rem
9rem target - "netware-clib" - CLib NetWare build (WinSock Sockets)
10rem - "netware-clib-bsdsock" - CLib NetWare build (BSD Sockets)
11rem - "netware-libc" - LibC NetWare build (WinSock Sockets)
12rem - "netware-libc-bsdsock" - LibC NetWare build (BSD Sockets)
13rem
14rem debug opts - "debug" - build debug
15rem
16rem assembly opts - "nw-mwasm" - use Metrowerks assembler
17rem - "nw-nasm" - use NASM assembler
18rem - "no-asm" - don't use assembly
19rem
20rem configure opts- all unrecognized arguments are passed to the
21rem perl configure script
22rem
23rem If no arguments are specified the default is to build non-debug with
24rem no assembly. NOTE: there is no default BLD_TARGET.
25rem
26
27
28
29rem No assembly is the default - Uncomment section below to change
30rem the assembler default
31set ASM_MODE=
32set ASSEMBLER=
33set NO_ASM=no-asm
34
35rem Uncomment to default to the Metrowerks assembler
36rem set ASM_MODE=nw-mwasm
37rem set ASSEMBLER=Metrowerks
38rem set NO_ASM=
39
40rem Uncomment to default to the NASM assembler
41rem set ASM_MODE=nw-nasm
42rem set ASSEMBLER=NASM
43rem set NO_ASM=
44
45rem No default Bld target
46set BLD_TARGET=no_target
47rem set BLD_TARGET=netware-clib
48rem set BLD_TARGET=netware-libc
49
50
51rem Default to build non-debug
52set DEBUG=
53
54rem Uncomment to default to debug build
55rem set DEBUG=debug
56
57
58set CONFIG_OPTS=
59set ARG_PROCESSED=NO
60
61
62rem Process command line args
63:opts
64if "a%1" == "a" goto endopt
65if "%1" == "no-asm" set NO_ASM=no-asm
66if "%1" == "no-asm" set ARG_PROCESSED=YES
67if "%1" == "debug" set DEBUG=debug
68if "%1" == "debug" set ARG_PROCESSED=YES
69if "%1" == "nw-nasm" set ASM_MODE=nw-nasm
70if "%1" == "nw-nasm" set ASSEMBLER=NASM
71if "%1" == "nw-nasm" set NO_ASM=
72if "%1" == "nw-nasm" set ARG_PROCESSED=YES
73if "%1" == "nw-mwasm" set ASM_MODE=nw-mwasm
74if "%1" == "nw-mwasm" set ASSEMBLER=Metrowerks
75if "%1" == "nw-mwasm" set NO_ASM=
76if "%1" == "nw-mwasm" set ARG_PROCESSED=YES
77if "%1" == "netware-clib" set BLD_TARGET=netware-clib
78if "%1" == "netware-clib" set ARG_PROCESSED=YES
79if "%1" == "netware-clib-bsdsock" set BLD_TARGET=netware-clib-bsdsock
80if "%1" == "netware-clib-bsdsock" set ARG_PROCESSED=YES
81if "%1" == "netware-libc" set BLD_TARGET=netware-libc
82if "%1" == "netware-libc" set ARG_PROCESSED=YES
83if "%1" == "netware-libc-bsdsock" set BLD_TARGET=netware-libc-bsdsock
84if "%1" == "netware-libc-bsdsock" set ARG_PROCESSED=YES
85
86rem If we didn't recognize the argument, consider it an option for config
87if "%ARG_PROCESSED%" == "NO" set CONFIG_OPTS=%CONFIG_OPTS% %1
88if "%ARG_PROCESSED%" == "YES" set ARG_PROCESSED=NO
89
90shift
91goto opts
92:endopt
93
94rem make sure a valid BLD_TARGET was specified
95if "%BLD_TARGET%" == "no_target" goto no_target
96
97rem build the nlm make file name which includes target and debug info
98set NLM_MAKE=
99if "%BLD_TARGET%" == "netware-clib" set NLM_MAKE=netware\nlm_clib
100if "%BLD_TARGET%" == "netware-clib-bsdsock" set NLM_MAKE=netware\nlm_clib_bsdsock
101if "%BLD_TARGET%" == "netware-libc" set NLM_MAKE=netware\nlm_libc
102if "%BLD_TARGET%" == "netware-libc-bsdsock" set NLM_MAKE=netware\nlm_libc_bsdsock
103if "%DEBUG%" == "" set NLM_MAKE=%NLM_MAKE%.mak
104if "%DEBUG%" == "debug" set NLM_MAKE=%NLM_MAKE%_dbg.mak
105
106if "%NO_ASM%" == "no-asm" set ASM_MODE=
107if "%NO_ASM%" == "no-asm" set ASSEMBLER=
108if "%NO_ASM%" == "no-asm" set CONFIG_OPTS=%CONFIG_OPTS% no-asm
109if "%NO_ASM%" == "no-asm" goto do_config
110
111
112rem ==================================================
113echo Generating x86 for %ASSEMBLER% assembler
114
115echo Bignum
116cd crypto\bn\asm
117rem perl x86.pl %ASM_MODE% > bn-nw.asm
118perl bn-586.pl %ASM_MODE% > bn-nw.asm
119perl co-586.pl %ASM_MODE% > co-nw.asm
120cd ..\..\..
121
122echo AES
123cd crypto\aes\asm
124perl aes-586.pl %ASM_MODE% > a-nw.asm
125cd ..\..\..
126
127echo DES
128cd crypto\des\asm
129perl des-586.pl %ASM_MODE% > d-nw.asm
130cd ..\..\..
131
132echo "crypt(3)"
133
134cd crypto\des\asm
135perl crypt586.pl %ASM_MODE% > y-nw.asm
136cd ..\..\..
137
138echo Blowfish
139
140cd crypto\bf\asm
141perl bf-586.pl %ASM_MODE% > b-nw.asm
142cd ..\..\..
143
144echo CAST5
145cd crypto\cast\asm
146perl cast-586.pl %ASM_MODE% > c-nw.asm
147cd ..\..\..
148
149echo RC4
150cd crypto\rc4\asm
151perl rc4-586.pl %ASM_MODE% > r4-nw.asm
152cd ..\..\..
153
154echo MD5
155cd crypto\md5\asm
156perl md5-586.pl %ASM_MODE% > m5-nw.asm
157cd ..\..\..
158
159echo SHA1
160cd crypto\sha\asm
161perl sha1-586.pl %ASM_MODE% > s1-nw.asm
162perl sha256-586.pl %ASM_MODE% > sha256-nw.asm
163perl sha512-586.pl %ASM_MODE% > sha512-nw.asm
164cd ..\..\..
165
166echo RIPEMD160
167cd crypto\ripemd\asm
168perl rmd-586.pl %ASM_MODE% > rm-nw.asm
169cd ..\..\..
170
171echo RC5\32
172cd crypto\rc5\asm
173perl rc5-586.pl %ASM_MODE% > r5-nw.asm
174cd ..\..\..
175
176echo WHIRLPOOL
177cd crypto\whrlpool\asm
178perl wp-mmx.pl %ASM_MODE% > wp-nw.asm
179cd ..\..\..
180
181echo CPUID
182cd crypto
183perl x86cpuid.pl %ASM_MODE% > x86cpuid-nw.asm
184cd ..\
185
186rem ===============================================================
187rem
188:do_config
189
190echo .
191echo configure options: %CONFIG_OPTS% %BLD_TARGET%
192echo .
193perl configure %CONFIG_OPTS% %BLD_TARGET%
194
195perl util\mkfiles.pl >MINFO
196
197echo .
198echo mk1mf.pl options: %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET%
199echo .
200perl util\mk1mf.pl %DEBUG% %ASM_MODE% %CONFIG_OPTS% %BLD_TARGET% >%NLM_MAKE%
201
202make -f %NLM_MAKE% vclean
203echo .
204echo The makefile "%NLM_MAKE%" has been created use your maketool to
205echo build (ex: make -f %NLM_MAKE%)
206goto end
207
208rem ===============================================================
209rem
210:no_target
211echo .
212echo . No build target specified!!!
213echo .
214echo . usage: build [target] [debug opts] [assembly opts] [configure opts]
215echo .
216echo . target - "netware-clib" - CLib NetWare build (WinSock Sockets)
217echo . - "netware-clib-bsdsock" - CLib NetWare build (BSD Sockets)
218echo . - "netware-libc" - LibC NetWare build (WinSock Sockets)
219echo . - "netware-libc-bsdsock" - LibC NetWare build (BSD Sockets)
220echo .
221echo . debug opts - "debug" - build debug
222echo .
223echo . assembly opts - "nw-mwasm" - use Metrowerks assembler
224echo . "nw-nasm" - use NASM assembler
225echo . "no-asm" - don't use assembly
226echo .
227echo . configure opts- all unrecognized arguments are passed to the
228echo . perl configure script
229echo .
230echo . If no debug or assembly opts are specified the default is to build
231echo . non-debug without assembly
232echo .
233
234
235:end
diff --git a/src/lib/libssl/src/Netware/cpy_tests.bat b/src/lib/libssl/src/Netware/cpy_tests.bat
deleted file mode 100644
index 1583f28067..0000000000
--- a/src/lib/libssl/src/Netware/cpy_tests.bat
+++ /dev/null
@@ -1,113 +0,0 @@
1@echo off
2
3rem Batch file to copy OpenSSL stuff to a NetWare server for testing
4
5rem This batch file will create an "opensssl" directory at the root of the
6rem specified NetWare drive and copy the required files to run the tests.
7rem It should be run from inside the "openssl\netware" subdirectory.
8
9rem Usage:
10rem cpy_tests.bat <test subdirectory> <NetWare drive>
11rem <test subdirectory> - out_nw.dbg | out_nw
12rem <NetWare drive> - any mapped drive letter
13rem
14rem example ( copy from debug build to m: dirve ):
15rem cpy_tests.bat out_nw.dbg m:
16rem
17rem CAUTION: If a directory named OpenSSL exists on the target drive
18rem it will be deleted first.
19
20
21if "%1" == "" goto usage
22if "%2" == "" goto usage
23
24rem Assume running in \openssl directory unless cpy_tests.bat exists then
25rem it must be the \openssl\netware directory
26set loc=.
27if exist cpy_tests.bat set loc=..
28
29rem make sure the local build subdirectory specified is valid
30if not exist %loc%\%1\NUL goto invalid_dir
31
32rem make sure target drive is valid
33if not exist %2\NUL goto invalid_drive
34
35rem If an OpenSSL directory exists on the target drive, remove it
36if exist %2\openssl\NUL goto remove_openssl
37goto do_copy
38
39:remove_openssl
40echo .
41echo OpenSSL directory exists on %2 - it will be removed!
42pause
43rmdir %2\openssl /s /q
44
45:do_copy
46rem make an "openssl" directory and others at the root of the NetWare drive
47mkdir %2\openssl
48mkdir %2\openssl\test_out
49mkdir %2\openssl\apps
50mkdir %2\openssl\certs
51mkdir %2\openssl\test
52
53
54rem copy the test nlms
55copy %loc%\%1\*.nlm %2\openssl\
56
57rem copy the test perl script
58copy %loc%\netware\do_tests.pl %2\openssl\
59
60rem copy the certs directory stuff
61xcopy %loc%\certs\*.* %2\openssl\certs\ /s
62
63rem copy the test directory stuff
64copy %loc%\test\CAss.cnf %2\openssl\test\
65copy %loc%\test\Uss.cnf %2\openssl\test\
66copy %loc%\test\pkcs7.pem %2\openssl\test\
67copy %loc%\test\pkcs7-1.pem %2\openssl\test\
68copy %loc%\test\testcrl.pem %2\openssl\test\
69copy %loc%\test\testp7.pem %2\openssl\test\
70copy %loc%\test\testreq2.pem %2\openssl\test\
71copy %loc%\test\testrsa.pem %2\openssl\test\
72copy %loc%\test\testsid.pem %2\openssl\test\
73copy %loc%\test\testx509.pem %2\openssl\test\
74copy %loc%\test\v3-cert1.pem %2\openssl\test\
75copy %loc%\test\v3-cert2.pem %2\openssl\test\
76copy %loc%\crypto\evp\evptests.txt %2\openssl\test\
77
78rem copy the apps directory stuff
79copy %loc%\apps\client.pem %2\openssl\apps\
80copy %loc%\apps\server.pem %2\openssl\apps\
81copy %loc%\apps\openssl.cnf %2\openssl\apps\
82
83echo .
84echo Tests copied
85echo Run the test script at the console by typing:
86echo "Perl \openssl\do_tests.pl"
87echo .
88echo Make sure the Search path includes the OpenSSL subdirectory
89
90goto end
91
92:invalid_dir
93echo.
94echo Invalid build directory specified: %1
95echo.
96goto usage
97
98:invalid_drive
99echo.
100echo Invalid drive: %2
101echo.
102goto usage
103
104:usage
105echo.
106echo usage: cpy_tests.bat [test subdirectory] [NetWare drive]
107echo [test subdirectory] - out_nw_clib.dbg, out_nw_libc.dbg, etc.
108echo [NetWare drive] - any mapped drive letter
109echo.
110echo example: cpy_test out_nw_clib.dbg M:
111echo (copy from clib debug build area to M: drive)
112
113:end
diff --git a/src/lib/libssl/src/Netware/do_tests.pl b/src/lib/libssl/src/Netware/do_tests.pl
deleted file mode 100644
index ac482dbe2b..0000000000
--- a/src/lib/libssl/src/Netware/do_tests.pl
+++ /dev/null
@@ -1,624 +0,0 @@
1# perl script to run OpenSSL tests
2
3
4my $base_path = "\\openssl";
5
6my $output_path = "$base_path\\test_out";
7my $cert_path = "$base_path\\certs";
8my $test_path = "$base_path\\test";
9my $app_path = "$base_path\\apps";
10
11my $tmp_cert = "$output_path\\cert.tmp";
12my $OpenSSL_config = "$app_path\\openssl.cnf";
13my $log_file = "$output_path\\tests.log";
14
15my $pause = 0;
16
17
18# process the command line args to see if they wanted us to pause
19# between executing each command
20foreach $i (@ARGV)
21{
22 if ($i =~ /^-p$/)
23 { $pause=1; }
24}
25
26
27
28main();
29
30
31############################################################################
32sub main()
33{
34 # delete all the output files in the output directory
35 unlink <$output_path\\*.*>;
36
37 # open the main log file
38 open(OUT, ">$log_file") || die "unable to open $log_file\n";
39
40 print( OUT "========================================================\n");
41 my $outFile = "$output_path\\version.out";
42 system("openssl2 version (CLIB_OPT)/>$outFile");
43 log_output("CHECKING FOR OPENSSL VERSION:", $outFile);
44
45 algorithm_tests();
46 encryption_tests();
47 evp_tests();
48 pem_tests();
49 verify_tests();
50 ca_tests();
51 ssl_tests();
52
53 close(OUT);
54
55 print("\nCompleted running tests.\n\n");
56 print("Check log file for errors: $log_file\n");
57}
58
59############################################################################
60sub algorithm_tests
61{
62 my $i;
63 my $outFile;
64 my @tests = ( rsa_test, destest, ideatest, bftest, bntest, shatest, sha1test,
65 sha256t, sha512t, dsatest, md2test, md4test, md5test, mdc2test,
66 rc2test, rc4test, rc5test, randtest, rmdtest, dhtest, ecdhtest,
67 ecdsatest, ectest, exptest, casttest, hmactest );
68
69 print( "\nRUNNING CRYPTO ALGORITHM TESTS:\n\n");
70
71 print( OUT "\n========================================================\n");
72 print( OUT "CRYPTO ALGORITHM TESTS:\n\n");
73
74 foreach $i (@tests)
75 {
76 if (-e "$base_path\\$i.nlm")
77 {
78 $outFile = "$output_path\\$i.out";
79 system("$i (CLIB_OPT)/>$outFile");
80 log_desc("Test: $i\.nlm:");
81 log_output("", $outFile );
82 }
83 else
84 {
85 log_desc("Test: $i\.nlm: file not found");
86 }
87 }
88}
89
90############################################################################
91sub encryption_tests
92{
93 my $i;
94 my $outFile;
95 my @enc_tests = ( "enc", "rc4", "des-cfb", "des-ede-cfb", "des-ede3-cfb",
96 "des-ofb", "des-ede-ofb", "des-ede3-ofb",
97 "des-ecb", "des-ede", "des-ede3", "des-cbc",
98 "des-ede-cbc", "des-ede3-cbc", "idea-ecb", "idea-cfb",
99 "idea-ofb", "idea-cbc", "rc2-ecb", "rc2-cfb",
100 "rc2-ofb", "rc2-cbc", "bf-ecb", "bf-cfb",
101 "bf-ofb", "bf-cbc" );
102
103 my $input = "$base_path\\do_tests.pl";
104 my $cipher = "$output_path\\cipher.out";
105 my $clear = "$output_path\\clear.out";
106
107 print( "\nRUNNING ENCRYPTION & DECRYPTION TESTS:\n\n");
108
109 print( OUT "\n========================================================\n");
110 print( OUT "FILE ENCRYPTION & DECRYPTION TESTS:\n\n");
111
112 foreach $i (@enc_tests)
113 {
114 log_desc("Testing: $i");
115
116 # do encryption
117 $outFile = "$output_path\\enc.out";
118 system("openssl2 $i -e -bufsize 113 -k test -in $input -out $cipher (CLIB_OPT)/>$outFile" );
119 log_output("Encrypting: $input --> $cipher", $outFile);
120
121 # do decryption
122 $outFile = "$output_path\\dec.out";
123 system("openssl2 $i -d -bufsize 157 -k test -in $cipher -out $clear (CLIB_OPT)/>$outFile");
124 log_output("Decrypting: $cipher --> $clear", $outFile);
125
126 # compare files
127 $x = compare_files( $input, $clear, 1);
128 if ( $x == 0 )
129 {
130 print( "\rSUCCESS - files match: $input, $clear\n");
131 print( OUT "SUCCESS - files match: $input, $clear\n");
132 }
133 else
134 {
135 print( "\rERROR: files don't match\n");
136 print( OUT "ERROR: files don't match\n");
137 }
138
139 do_wait();
140
141 # Now do the same encryption but use Base64
142
143 # do encryption B64
144 $outFile = "$output_path\\B64enc.out";
145 system("openssl2 $i -a -e -bufsize 113 -k test -in $input -out $cipher (CLIB_OPT)/>$outFile");
146 log_output("Encrypting(B64): $cipher --> $clear", $outFile);
147
148 # do decryption B64
149 $outFile = "$output_path\\B64dec.out";
150 system("openssl2 $i -a -d -bufsize 157 -k test -in $cipher -out $clear (CLIB_OPT)/>$outFile");
151 log_output("Decrypting(B64): $cipher --> $clear", $outFile);
152
153 # compare files
154 $x = compare_files( $input, $clear, 1);
155 if ( $x == 0 )
156 {
157 print( "\rSUCCESS - files match: $input, $clear\n");
158 print( OUT "SUCCESS - files match: $input, $clear\n");
159 }
160 else
161 {
162 print( "\rERROR: files don't match\n");
163 print( OUT "ERROR: files don't match\n");
164 }
165
166 do_wait();
167
168 } # end foreach
169
170 # delete the temporary files
171 unlink($cipher);
172 unlink($clear);
173}
174
175
176############################################################################
177sub pem_tests
178{
179 my $i;
180 my $tmp_out;
181 my $outFile = "$output_path\\pem.out";
182
183 my %pem_tests = (
184 "crl" => "testcrl.pem",
185 "pkcs7" => "testp7.pem",
186 "req" => "testreq2.pem",
187 "rsa" => "testrsa.pem",
188 "x509" => "testx509.pem",
189 "x509" => "v3-cert1.pem",
190 "sess_id" => "testsid.pem" );
191
192
193 print( "\nRUNNING PEM TESTS:\n\n");
194
195 print( OUT "\n========================================================\n");
196 print( OUT "PEM TESTS:\n\n");
197
198 foreach $i (keys(%pem_tests))
199 {
200 log_desc( "Testing: $i");
201
202 my $input = "$test_path\\$pem_tests{$i}";
203
204 $tmp_out = "$output_path\\$pem_tests{$i}";
205
206 if ($i ne "req" )
207 {
208 system("openssl2 $i -in $input -out $tmp_out (CLIB_OPT)/>$outFile");
209 log_output( "openssl2 $i -in $input -out $tmp_out", $outFile);
210 }
211 else
212 {
213 system("openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config (CLIB_OPT)/>$outFile");
214 log_output( "openssl2 $i -in $input -out $tmp_out -config $OpenSSL_config", $outFile );
215 }
216
217 $x = compare_files( $input, $tmp_out);
218 if ( $x == 0 )
219 {
220 print( "\rSUCCESS - files match: $input, $tmp_out\n");
221 print( OUT "SUCCESS - files match: $input, $tmp_out\n");
222 }
223 else
224 {
225 print( "\rERROR: files don't match\n");
226 print( OUT "ERROR: files don't match\n");
227 }
228 do_wait();
229
230 } # end foreach
231}
232
233
234############################################################################
235sub verify_tests
236{
237 my $i;
238 my $outFile = "$output_path\\verify.out";
239
240 $cert_path =~ s/\\/\//g;
241 my @cert_files = <$cert_path/*.pem>;
242
243 print( "\nRUNNING VERIFY TESTS:\n\n");
244
245 print( OUT "\n========================================================\n");
246 print( OUT "VERIFY TESTS:\n\n");
247
248 make_tmp_cert_file();
249
250 foreach $i (@cert_files)
251 {
252 system("openssl2 verify -CAfile $tmp_cert $i (CLIB_OPT)/>$outFile");
253 log_desc("Verifying cert: $i");
254 log_output("openssl2 verify -CAfile $tmp_cert $i", $outFile);
255 }
256}
257
258
259############################################################################
260sub ssl_tests
261{
262 my $outFile = "$output_path\\ssl_tst.out";
263 my($CAcert) = "$output_path\\certCA.ss";
264 my($Ukey) = "$output_path\\keyU.ss";
265 my($Ucert) = "$output_path\\certU.ss";
266 my($ssltest)= "ssltest -key $Ukey -cert $Ucert -c_key $Ukey -c_cert $Ucert -CAfile $CAcert";
267
268 print( "\nRUNNING SSL TESTS:\n\n");
269
270 print( OUT "\n========================================================\n");
271 print( OUT "SSL TESTS:\n\n");
272
273 system("ssltest -ssl2 (CLIB_OPT)/>$outFile");
274 log_desc("Testing sslv2:");
275 log_output("ssltest -ssl2", $outFile);
276
277 system("$ssltest -ssl2 -server_auth (CLIB_OPT)/>$outFile");
278 log_desc("Testing sslv2 with server authentication:");
279 log_output("$ssltest -ssl2 -server_auth", $outFile);
280
281 system("$ssltest -ssl2 -client_auth (CLIB_OPT)/>$outFile");
282 log_desc("Testing sslv2 with client authentication:");
283 log_output("$ssltest -ssl2 -client_auth", $outFile);
284
285 system("$ssltest -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
286 log_desc("Testing sslv2 with both client and server authentication:");
287 log_output("$ssltest -ssl2 -server_auth -client_auth", $outFile);
288
289 system("ssltest -ssl3 (CLIB_OPT)/>$outFile");
290 log_desc("Testing sslv3:");
291 log_output("ssltest -ssl3", $outFile);
292
293 system("$ssltest -ssl3 -server_auth (CLIB_OPT)/>$outFile");
294 log_desc("Testing sslv3 with server authentication:");
295 log_output("$ssltest -ssl3 -server_auth", $outFile);
296
297 system("$ssltest -ssl3 -client_auth (CLIB_OPT)/>$outFile");
298 log_desc("Testing sslv3 with client authentication:");
299 log_output("$ssltest -ssl3 -client_auth", $outFile);
300
301 system("$ssltest -ssl3 -server_auth -client_auth (CLIB_OPT)/>$outFile");
302 log_desc("Testing sslv3 with both client and server authentication:");
303 log_output("$ssltest -ssl3 -server_auth -client_auth", $outFile);
304
305 system("ssltest (CLIB_OPT)/>$outFile");
306 log_desc("Testing sslv2/sslv3:");
307 log_output("ssltest", $outFile);
308
309 system("$ssltest -server_auth (CLIB_OPT)/>$outFile");
310 log_desc("Testing sslv2/sslv3 with server authentication:");
311 log_output("$ssltest -server_auth", $outFile);
312
313 system("$ssltest -client_auth (CLIB_OPT)/>$outFile");
314 log_desc("Testing sslv2/sslv3 with client authentication:");
315 log_output("$ssltest -client_auth ", $outFile);
316
317 system("$ssltest -server_auth -client_auth (CLIB_OPT)/>$outFile");
318 log_desc("Testing sslv2/sslv3 with both client and server authentication:");
319 log_output("$ssltest -server_auth -client_auth", $outFile);
320
321 system("ssltest -bio_pair -ssl2 (CLIB_OPT)/>$outFile");
322 log_desc("Testing sslv2 via BIO pair:");
323 log_output("ssltest -bio_pair -ssl2", $outFile);
324
325 system("ssltest -bio_pair -dhe1024dsa -v (CLIB_OPT)/>$outFile");
326 log_desc("Testing sslv2/sslv3 with 1024 bit DHE via BIO pair:");
327 log_output("ssltest -bio_pair -dhe1024dsa -v", $outFile);
328
329 system("$ssltest -bio_pair -ssl2 -server_auth (CLIB_OPT)/>$outFile");
330 log_desc("Testing sslv2 with server authentication via BIO pair:");
331 log_output("$ssltest -bio_pair -ssl2 -server_auth", $outFile);
332
333 system("$ssltest -bio_pair -ssl2 -client_auth (CLIB_OPT)/>$outFile");
334 log_desc("Testing sslv2 with client authentication via BIO pair:");
335 log_output("$ssltest -bio_pair -ssl2 -client_auth", $outFile);
336
337 system("$ssltest -bio_pair -ssl2 -server_auth -client_auth (CLIB_OPT)/>$outFile");
338 log_desc("Testing sslv2 with both client and server authentication via BIO pair:");
339 log_output("$ssltest -bio_pair -ssl2 -server_auth -client_auth", $outFile);
340
341 system("ssltest -bio_pair -ssl3 (CLIB_OPT)/>$outFile");
342 log_desc("Testing sslv3 via BIO pair:");
343 log_output("ssltest -bio_pair -ssl3", $outFile);
344
345 system("$ssltest -bio_pair -ssl3 -server_auth (CLIB_OPT)/>$outFile");
346 log_desc("Testing sslv3 with server authentication via BIO pair:");
347 log_output("$ssltest -bio_pair -ssl3 -server_auth", $outFile);
348
349 system("$ssltest -bio_pair -ssl3 -client_auth (CLIB_OPT)/>$outFile");
350 log_desc("Testing sslv3 with client authentication via BIO pair:");
351 log_output("$ssltest -bio_pair -ssl3 -client_auth", $outFile);
352
353 system("$ssltest -bio_pair -ssl3 -server_auth -client_auth (CLIB_OPT)/>$outFile");
354 log_desc("Testing sslv3 with both client and server authentication via BIO pair:");
355 log_output("$ssltest -bio_pair -ssl3 -server_auth -client_auth", $outFile);
356
357 system("ssltest -bio_pair (CLIB_OPT)/>$outFile");
358 log_desc("Testing sslv2/sslv3 via BIO pair:");
359 log_output("ssltest -bio_pair", $outFile);
360
361 system("$ssltest -bio_pair -server_auth (CLIB_OPT)/>$outFile");
362 log_desc("Testing sslv2/sslv3 with server authentication via BIO pair:");
363 log_output("$ssltest -bio_pair -server_auth", $outFile);
364
365 system("$ssltest -bio_pair -client_auth (CLIB_OPT)/>$outFile");
366 log_desc("Testing sslv2/sslv3 with client authentication via BIO pair:");
367 log_output("$ssltest -bio_pair -client_auth", $outFile);
368
369 system("$ssltest -bio_pair -server_auth -client_auth (CLIB_OPT)/>$outFile");
370 log_desc("Testing sslv2/sslv3 with both client and server authentication via BIO pair:");
371 log_output("$ssltest -bio_pair -server_auth -client_auth", $outFile);
372}
373
374
375############################################################################
376sub ca_tests
377{
378 my $outFile = "$output_path\\ca_tst.out";
379
380 my($CAkey) = "$output_path\\keyCA.ss";
381 my($CAcert) = "$output_path\\certCA.ss";
382 my($CAserial) = "$output_path\\certCA.srl";
383 my($CAreq) = "$output_path\\reqCA.ss";
384 my($CAreq2) = "$output_path\\req2CA.ss";
385
386 my($CAconf) = "$test_path\\CAss.cnf";
387
388 my($Uconf) = "$test_path\\Uss.cnf";
389
390 my($Ukey) = "$output_path\\keyU.ss";
391 my($Ureq) = "$output_path\\reqU.ss";
392 my($Ucert) = "$output_path\\certU.ss";
393
394 print( "\nRUNNING CA TESTS:\n\n");
395
396 print( OUT "\n========================================================\n");
397 print( OUT "CA TESTS:\n");
398
399 system("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new (CLIB_OPT)/>$outFile");
400 log_desc("Make a certificate request using req:");
401 log_output("openssl2 req -config $CAconf -out $CAreq -keyout $CAkey -new", $outFile);
402
403 system("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey (CLIB_OPT)/>$outFile");
404 log_desc("Convert the certificate request into a self signed certificate using x509:");
405 log_output("openssl2 x509 -CAcreateserial -in $CAreq -days 30 -req -out $CAcert -signkey $CAkey", $outFile);
406
407 system("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2 (CLIB_OPT)/>$outFile");
408 log_desc("Convert a certificate into a certificate request using 'x509':");
409 log_output("openssl2 x509 -in $CAcert -x509toreq -signkey $CAkey -out $CAreq2", $outFile);
410
411 system("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout (CLIB_OPT)/>$outFile");
412 log_output("openssl2 req -config $OpenSSL_config -verify -in $CAreq -noout", $outFile);
413
414 system("openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout (CLIB_OPT)/>$outFile");
415 log_output( "openssl2 req -config $OpenSSL_config -verify -in $CAreq2 -noout", $outFile);
416
417 system("openssl2 verify -CAfile $CAcert $CAcert (CLIB_OPT)/>$outFile");
418 log_output("openssl2 verify -CAfile $CAcert $CAcert", $outFile);
419
420 system("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new (CLIB_OPT)/>$outFile");
421 log_desc("Make another certificate request using req:");
422 log_output("openssl2 req -config $Uconf -out $Ureq -keyout $Ukey -new", $outFile);
423
424 system("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial (CLIB_OPT)/>$outFile");
425 log_desc("Sign certificate request with the just created CA via x509:");
426 log_output("openssl2 x509 -CAcreateserial -in $Ureq -days 30 -req -out $Ucert -CA $CAcert -CAkey $CAkey -CAserial $CAserial", $outFile);
427
428 system("openssl2 verify -CAfile $CAcert $Ucert (CLIB_OPT)/>$outFile");
429 log_output("openssl2 verify -CAfile $CAcert $Ucert", $outFile);
430
431 system("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert (CLIB_OPT)/>$outFile");
432 log_desc("Certificate details");
433 log_output("openssl2 x509 -subject -issuer -startdate -enddate -noout -in $Ucert", $outFile);
434
435 print(OUT "--\n");
436 print(OUT "The generated CA certificate is $CAcert\n");
437 print(OUT "The generated CA private key is $CAkey\n");
438 print(OUT "The current CA signing serial number is in $CAserial\n");
439
440 print(OUT "The generated user certificate is $Ucert\n");
441 print(OUT "The generated user private key is $Ukey\n");
442 print(OUT "--\n");
443}
444
445############################################################################
446sub evp_tests
447{
448 my $i = 'evp_test';
449
450 print( "\nRUNNING EVP TESTS:\n\n");
451
452 print( OUT "\n========================================================\n");
453 print( OUT "EVP TESTS:\n\n");
454
455 if (-e "$base_path\\$i.nlm")
456 {
457 my $outFile = "$output_path\\$i.out";
458 system("$i $test_path\\evptests.txt (CLIB_OPT)/>$outFile");
459 log_desc("Test: $i\.nlm:");
460 log_output("", $outFile );
461 }
462 else
463 {
464 log_desc("Test: $i\.nlm: file not found");
465 }
466}
467
468############################################################################
469sub log_output( $ $ )
470{
471 my( $desc, $file ) = @_;
472 my($error) = 0;
473 my($key);
474 my($msg);
475
476 if ($desc)
477 {
478 print("\r$desc\n");
479 print(OUT "$desc\n");
480 }
481
482 # loop waiting for test program to complete
483 while ( stat($file) == 0)
484 { print(". "); sleep(1); }
485
486
487 # copy test output to log file
488 open(IN, "<$file");
489 while (<IN>)
490 {
491 print(OUT $_);
492 if ( $_ =~ /ERROR/ )
493 {
494 $error = 1;
495 }
496 }
497 # close and delete the temporary test output file
498 close(IN);
499 unlink($file);
500
501 if ( $error == 0 )
502 {
503 $msg = "Test Succeeded";
504 }
505 else
506 {
507 $msg = "Test Failed";
508 }
509
510 print(OUT "$msg\n");
511
512 if ($pause)
513 {
514 print("$msg - press ENTER to continue...");
515 $key = getc;
516 print("\n");
517 }
518
519 # Several of the testing scripts run a loop loading the
520 # same NLM with different options.
521 # On slow NetWare machines there appears to be some delay in the
522 # OS actually unloading the test nlms and the OS complains about.
523 # the NLM already being loaded. This additional pause is to
524 # to help provide a little more time for unloading before trying to
525 # load again.
526 sleep(1);
527}
528
529
530############################################################################
531sub log_desc( $ )
532{
533 my( $desc ) = @_;
534
535 print("\n");
536 print("$desc\n");
537
538 print(OUT "\n");
539 print(OUT "$desc\n");
540 print(OUT "======================================\n");
541}
542
543############################################################################
544sub compare_files( $ $ $ )
545{
546 my( $file1, $file2, $binary ) = @_;
547 my( $n1, $n2, $b1, $b2 );
548 my($ret) = 1;
549
550 open(IN0, $file1) || die "\nunable to open $file1\n";
551 open(IN1, $file2) || die "\nunable to open $file2\n";
552
553 if ($binary)
554 {
555 binmode IN0;
556 binmode IN1;
557 }
558
559 for (;;)
560 {
561 $n1 = read(IN0, $b1, 512);
562 $n2 = read(IN1, $b2, 512);
563
564 if ($n1 != $n2) {last;}
565 if ($b1 != $b2) {last;}
566
567 if ($n1 == 0)
568 {
569 $ret = 0;
570 last;
571 }
572 }
573 close(IN0);
574 close(IN1);
575 return($ret);
576}
577
578############################################################################
579sub do_wait()
580{
581 my($key);
582
583 if ($pause)
584 {
585 print("Press ENTER to continue...");
586 $key = getc;
587 print("\n");
588 }
589}
590
591
592############################################################################
593sub make_tmp_cert_file()
594{
595 my @cert_files = <$cert_path/*.pem>;
596
597 # delete the file if it already exists
598 unlink($tmp_cert);
599
600 open( TMP_CERT, ">$tmp_cert") || die "\nunable to open $tmp_cert\n";
601
602 print("building temporary cert file\n");
603
604 # create a temporary cert file that contains all the certs
605 foreach $i (@cert_files)
606 {
607 open( IN_CERT, $i ) || die "\nunable to open $i\n";
608
609 for(;;)
610 {
611 $n = sysread(IN_CERT, $data, 1024);
612
613 if ($n == 0)
614 {
615 close(IN_CERT);
616 last;
617 };
618
619 syswrite(TMP_CERT, $data, $n);
620 }
621 }
622
623 close( TMP_CERT );
624}
diff --git a/src/lib/libssl/src/Netware/globals.txt b/src/lib/libssl/src/Netware/globals.txt
deleted file mode 100644
index fe05d390cf..0000000000
--- a/src/lib/libssl/src/Netware/globals.txt
+++ /dev/null
@@ -1,254 +0,0 @@
1An initial review of the OpenSSL code was done to determine how many
2global variables where present. The idea was to determine the amount of
3work required to pull the globals into an instance data structure in
4order to build a Library NLM for NetWare. This file contains the results
5of the review. Each file is listed along with the globals in the file.
6The initial review was done very quickly so this list is probably
7not a comprehensive list.
8
9
10cryptlib.c
11===========================================
12
13static STACK *app_locks=NULL;
14
15static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
16
17static void (MS_FAR *locking_callback)(int mode,int type,
18 const char *file,int line)=NULL;
19static int (MS_FAR *add_lock_callback)(int *pointer,int amount,
20 int type,const char *file,int line)=NULL;
21static unsigned long (MS_FAR *id_callback)(void)=NULL;
22static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
23 (const char *file,int line)=NULL;
24static void (MS_FAR *dynlock_lock_callback)(int mode,
25 struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
26static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
27 const char *file,int line)=NULL;
28
29
30mem.c
31===========================================
32static int allow_customize = 1; /* we provide flexible functions for */
33static int allow_customize_debug = 1;/* exchanging memory-related functions at
34
35/* may be changed as long as `allow_customize' is set */
36static void *(*malloc_locked_func)(size_t) = malloc;
37static void (*free_locked_func)(void *) = free;
38static void *(*malloc_func)(size_t) = malloc;
39static void *(*realloc_func)(void *, size_t)= realloc;
40static void (*free_func)(void *) = free;
41
42/* use default functions from mem_dbg.c */
43static void (*malloc_debug_func)(void *,int,const char *,int,int)
44 = CRYPTO_dbg_malloc;
45static void (*realloc_debug_func)(void *,void *,int,const char *,int,int)
46 = CRYPTO_dbg_realloc;
47static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free;
48static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options;
49static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options;
50
51
52mem_dbg.c
53===========================================
54static int mh_mode=CRYPTO_MEM_CHECK_OFF;
55static unsigned long order = 0; /* number of memory requests */
56static LHASH *mh=NULL; /* hash-table of memory requests (address as key) */
57
58static LHASH *amih=NULL; /* hash-table with those app_mem_info_st's */
59static long options = /* extra information to be recorded */
60static unsigned long disabling_thread = 0;
61
62
63err.c
64===========================================
65static LHASH *error_hash=NULL;
66static LHASH *thread_hash=NULL;
67
68several files have routines with static "init" to track if error strings
69 have been loaded ( may not want seperate error strings for each process )
70 The "init" variable can't be left "global" because the error has is a ptr
71 that is malloc'ed. The malloc'ed error has is dependant on the "init"
72 vars.
73
74 files:
75 pem_err.c
76 cpt_err.c
77 pk12err.c
78 asn1_err.c
79 bio_err.c
80 bn_err.c
81 buf_err.c
82 comp_err.c
83 conf_err.c
84 cpt_err.c
85 dh_err.c
86 dsa_err.c
87 dso_err.c
88 evp_err.c
89 obj_err.c
90 pkcs7err.c
91 rand_err.c
92 rsa_err.c
93 rsar_err.c
94 ssl_err.c
95 x509_err.c
96 v3err.c
97 err.c
98
99These file have similar "init" globals but they are for other stuff not
100error strings:
101
102 bn_lib.c
103 ecc_enc.c
104 s23_clnt.c
105 s23_meth.c
106 s23_srvr.c
107 s2_clnt.c
108 s2_lib.c
109 s2_meth.c
110 s2_srvr.c
111 s3_clnt.c
112 s3_lib.c
113 s3_srvr.c
114 t1_clnt.c
115 t1_meth.c
116 t1_srvr.c
117
118rand_lib.c
119===========================================
120static RAND_METHOD *rand_meth= &rand_ssleay_meth;
121
122md_rand.c
123===========================================
124static int state_num=0,state_index=0;
125static unsigned char state[STATE_SIZE+MD_DIGEST_LENGTH];
126static unsigned char md[MD_DIGEST_LENGTH];
127static long md_count[2]={0,0};
128static double entropy=0;
129static int initialized=0;
130
131/* This should be set to 1 only when ssleay_rand_add() is called inside
132 an already locked state, so it doesn't try to lock and thereby cause
133 a hang. And it should always be reset back to 0 before unlocking. */
134static int add_do_not_lock=0;
135
136obj_dat.c
137============================================
138static int new_nid=NUM_NID;
139static LHASH *added=NULL;
140
141b_sock.c
142===========================================
143static unsigned long BIO_ghbn_hits=0L;
144static unsigned long BIO_ghbn_miss=0L;
145static struct ghbn_cache_st
146 {
147 char name[129];
148 struct hostent *ent;
149 unsigned long order;
150 } ghbn_cache[GHBN_NUM];
151
152static int wsa_init_done=0;
153
154
155bio_lib.c
156===========================================
157static STACK_OF(CRYPTO_EX_DATA_FUNCS) *bio_meth=NULL;
158static int bio_meth_num=0;
159
160
161bn_lib.c
162========================================
163static int bn_limit_bits=0;
164static int bn_limit_num=8; /* (1<<bn_limit_bits) */
165static int bn_limit_bits_low=0;
166static int bn_limit_num_low=8; /* (1<<bn_limit_bits_low) */
167static int bn_limit_bits_high=0;
168static int bn_limit_num_high=8; /* (1<<bn_limit_bits_high) */
169static int bn_limit_bits_mont=0;
170static int bn_limit_num_mont=8; /* (1<<bn_limit_bits_mont) */
171
172conf_lib.c
173========================================
174static CONF_METHOD *default_CONF_method=NULL;
175
176dh_lib.c
177========================================
178static DH_METHOD *default_DH_method;
179static int dh_meth_num = 0;
180static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
181
182dsa_lib.c
183========================================
184static DSA_METHOD *default_DSA_method;
185static int dsa_meth_num = 0;
186static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
187
188dso_lib.c
189========================================
190static DSO_METHOD *default_DSO_meth = NULL;
191
192rsa_lib.c
193========================================
194static RSA_METHOD *default_RSA_meth=NULL;
195static int rsa_meth_num=0;
196static STACK_OF(CRYPTO_EX_DATA_FUNCS) *rsa_meth=NULL;
197
198x509_trs.c
199=======================================
200static int (*default_trust)(int id, X509 *x, int flags) = obj_trust;
201static STACK_OF(X509_TRUST) *trtable = NULL;
202
203x509_req.c
204=======================================
205static int *ext_nids = ext_nid_list;
206
207o_names.c
208======================================
209static LHASH *names_lh=NULL;
210static STACK_OF(NAME_FUNCS) *name_funcs_stack;
211static int free_type;
212static int names_type_num=OBJ_NAME_TYPE_NUM;
213
214
215th-lock.c - NEED to add support for locking for NetWare
216==============================================
217static long *lock_count;
218(other platform specific globals)
219
220x_x509.c
221==============================================
222static int x509_meth_num = 0;
223static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_meth = NULL;
224
225
226evp_pbe.c
227============================================
228static STACK *pbe_algs;
229
230evp_key.c
231============================================
232static char prompt_string[80];
233
234ssl_ciph.c
235============================================
236static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL;
237
238ssl_lib.c
239=============================================
240static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_meth=NULL;
241static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_ctx_meth=NULL;
242static int ssl_meth_num=0;
243static int ssl_ctx_meth_num=0;
244
245ssl_sess.c
246=============================================
247static int ssl_session_num=0;
248static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_session_meth=NULL;
249
250x509_vfy.c
251============================================
252static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_ctx_method=NULL;
253static int x509_store_ctx_num=0;
254
diff --git a/src/lib/libssl/src/Netware/readme.txt b/src/lib/libssl/src/Netware/readme.txt
deleted file mode 100644
index a5b5faae33..0000000000
--- a/src/lib/libssl/src/Netware/readme.txt
+++ /dev/null
@@ -1,19 +0,0 @@
1
2Contents of the openssl\netware directory
3==========================================
4
5Regular files:
6
7readme.txt - this file
8do_tests.pl - perl script used to run the OpenSSL tests on NetWare
9cpy_tests.bat - batch to to copy test stuff to NetWare server
10build.bat - batch file to help with builds
11set_env.bat - batch file to help setup build environments
12globals.txt - results of initial code review to identify OpenSSL global variables
13
14
15The following files are generated by the various scripts. They are
16recreated each time and it is okay to delete them.
17
18*.def - command files used by Metrowerks linker
19*.mak - make files generated by mk1mf.pl
diff --git a/src/lib/libssl/src/Netware/set_env.bat b/src/lib/libssl/src/Netware/set_env.bat
deleted file mode 100644
index ace024e529..0000000000
--- a/src/lib/libssl/src/Netware/set_env.bat
+++ /dev/null
@@ -1,112 +0,0 @@
1@echo off
2
3rem ========================================================================
4rem Batch file to assist in setting up the necessary enviroment for
5rem building OpenSSL for NetWare.
6rem
7rem usage:
8rem set_env [target]
9rem
10rem target - "netware-clib" - Clib build
11rem - "netware-libc" - LibC build
12rem
13rem
14
15if "a%1" == "a" goto usage
16
17set LIBC_BUILD=
18set CLIB_BUILD=
19set GNUC=
20
21if "%1" == "netware-clib" set CLIB_BUILD=Y
22if "%1" == "netware-clib" set LIBC_BUILD=
23
24if "%1" == "netware-libc" set LIBC_BUILD=Y
25if "%1" == "netware-libc" set CLIB_BUILD=
26
27if "%2" == "gnuc" set GNUC=Y
28if "%2" == "codewarrior" set GNUC=
29
30rem Location of tools (compiler, linker, etc)
31if "%NDKBASE%" == "" set NDKBASE=c:\Novell
32
33rem If Perl for Win32 is not already in your path, add it here
34set PERL_PATH=
35
36rem Define path to the Metrowerks command line tools
37rem or GNU Crosscompiler gcc / nlmconv
38rem ( compiler, assembler, linker)
39if "%GNUC%" == "Y" set COMPILER_PATH=c:\usr\i586-netware\bin;c:\usr\bin
40if "%GNUC%" == "" set COMPILER_PATH=c:\prg\cwcmdl40
41
42rem If using gnu make define path to utility
43rem set GNU_MAKE_PATH=%NDKBASE%\gnu
44set GNU_MAKE_PATH=c:\prg\tools
45
46rem If using ms nmake define path to nmake
47rem set MS_NMAKE_PATH=%NDKBASE%\msvc\600\bin
48
49rem If using NASM assembler define path
50rem set NASM_PATH=%NDKBASE%\nasm
51set NASM_PATH=c:\prg\tools
52
53rem Update path to include tool paths
54set path=%path%;%COMPILER_PATH%
55if not "%GNU_MAKE_PATH%" == "" set path=%path%;%GNU_MAKE_PATH%
56if not "%MS_NMAKE_PATH%" == "" set path=%path%;%MS_NMAKE_PATH%
57if not "%NASM_PATH%" == "" set path=%path%;%NASM_PATH%
58if not "%PERL_PATH%" == "" set path=%path%;%PERL_PATH%
59
60rem Set INCLUDES to location of Novell NDK includes
61if "%LIBC_BUILD%" == "Y" set INCLUDE=%NDKBASE%\ndk\libc\include;%NDKBASE%\ndk\libc\include\winsock
62if "%CLIB_BUILD%" == "Y" set INCLUDE=%NDKBASE%\ndk\nwsdk\include\nlm;%NDKBASE%\ws295sdk\include
63
64rem Set Imports to location of Novell NDK import files
65if "%LIBC_BUILD%" == "Y" set IMPORTS=%NDKBASE%\ndk\libc\imports
66if "%CLIB_BUILD%" == "Y" set IMPORTS=%NDKBASE%\ndk\nwsdk\imports
67
68rem Set PRELUDE to the absolute path of the prelude object to link with in
69rem the Metrowerks NetWare PDK - NOTE: for Clib builds "clibpre.o" is
70rem recommended, for LibC NKS builds libcpre.o must be used
71if "%GNUC%" == "Y" goto gnuc
72if "%LIBC_BUILD%" == "Y" set PRELUDE=%IMPORTS%\libcpre.o
73rem if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\clibpre.o
74if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\prelude.o
75echo using MetroWerks CodeWarrior
76goto info
77
78:gnuc
79if "%LIBC_BUILD%" == "Y" set PRELUDE=%IMPORTS%\libcpre.gcc.o
80rem if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\clibpre.gcc.o
81if "%CLIB_BUILD%" == "Y" set PRELUDE=%IMPORTS%\prelude.gcc.o
82echo using GNU GCC Compiler
83
84:info
85echo.
86
87if "%LIBC_BUILD%" == "Y" echo Enviroment configured for LibC build
88if "%LIBC_BUILD%" == "Y" echo use "netware\build.bat netware-libc ..."
89
90if "%CLIB_BUILD%" == "Y" echo Enviroment configured for CLib build
91if "%CLIB_BUILD%" == "Y" echo use "netware\build.bat netware-clib ..."
92
93goto end
94
95:usage
96rem ===============================================================
97echo.
98echo No target build specified!
99echo.
100echo usage: set_env [target] [compiler]
101echo.
102echo target - "netware-clib" - Clib build
103echo - "netware-libc" - LibC build
104echo.
105echo compiler - "gnuc" - GNU GCC Compiler
106echo - "codewarrior" - MetroWerks CodeWarrior (default)
107echo.
108
109:end
110echo.
111
112
diff --git a/src/lib/libssl/src/PROBLEMS b/src/lib/libssl/src/PROBLEMS
index d247470f06..3eaab01f2c 100644
--- a/src/lib/libssl/src/PROBLEMS
+++ b/src/lib/libssl/src/PROBLEMS
@@ -197,3 +197,17 @@ reconfigure with additional no-sse2 [or 386] option passed to ./config.
197We don't have framework to associate -ldl with no-dso, therefore the only 197We don't have framework to associate -ldl with no-dso, therefore the only
198way is to edit Makefile right after ./config no-dso and remove -ldl from 198way is to edit Makefile right after ./config no-dso and remove -ldl from
199EX_LIBS line. 199EX_LIBS line.
200
201* hpux-parisc2-cc no-asm build fails with SEGV in ECDSA/DH.
202
203Compiler bug, presumably at particular patch level. Remaining
204hpux*-parisc*-cc configurations can be affected too. Drop optimization
205level to +O2 when compiling bn_nist.o.
206
207* solaris64-sparcv9-cc link failure
208
209Solaris 8 ar can fail to maintain symbol table in .a, which results in
210link failures. Apply 109147-09 or later or modify Makefile generated
211by ./Configure solaris64-sparcv9-cc and replace RANLIB assignment with
212
213 RANLIB= /usr/ccs/bin/ar rs
diff --git a/src/lib/libssl/src/README b/src/lib/libssl/src/README
index de51583a6f..10b74d19d2 100644
--- a/src/lib/libssl/src/README
+++ b/src/lib/libssl/src/README
@@ -1,5 +1,5 @@
1 1
2 OpenSSL 1.0.1c 10 May 2012 2 OpenSSL 1.0.1g 7 Apr 2014
3 3
4 Copyright (c) 1998-2011 The OpenSSL Project 4 Copyright (c) 1998-2011 The OpenSSL Project
5 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson 5 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
@@ -190,7 +190,7 @@
190 reason as to why that feature isn't implemented. 190 reason as to why that feature isn't implemented.
191 191
192 Patches should be as up to date as possible, preferably relative to the 192 Patches should be as up to date as possible, preferably relative to the
193 current CVS or the last snapshot. They should follow the coding style of 193 current Git or the last snapshot. They should follow the coding style of
194 OpenSSL and compile without warnings. Some of the core team developer targets 194 OpenSSL and compile without warnings. Some of the core team developer targets
195 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL 195 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
196 compiles on many varied platforms: try to ensure you only use portable 196 compiles on many varied platforms: try to ensure you only use portable
diff --git a/src/lib/libssl/src/VMS/TODO b/src/lib/libssl/src/VMS/TODO
deleted file mode 100644
index 359e069191..0000000000
--- a/src/lib/libssl/src/VMS/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
1TODO:
2=====
3
4There are a few things that need to be worked out in the VMS version of
5OpenSSL, still:
6
7- Description files. ("Makefile's" :-))
8- Script code to link an already compiled build tree.
9- A VMSINSTALlable version (way in the future, unless someone else hacks).
10- shareable images (DLL for you Windows folks).
11
12There may be other things that I have missed and that may be desirable.
13Please send mail to <openssl-users@openssl.org> or to me directly if you
14have any ideas.
15
16--
17Richard Levitte <richard@levitte.org>
181999-05-24
diff --git a/src/lib/libssl/src/VMS/VMSify-conf.pl b/src/lib/libssl/src/VMS/VMSify-conf.pl
deleted file mode 100644
index d3be6a29e7..0000000000
--- a/src/lib/libssl/src/VMS/VMSify-conf.pl
+++ /dev/null
@@ -1,34 +0,0 @@
1#! /usr/bin/perl
2
3use strict;
4use warnings;
5
6my @directory_vars = ( "dir", "certs", "crl_dir", "new_certs_dir" );
7my @file_vars = ( "database", "certificate", "serial", "crlnumber",
8 "crl", "private_key", "RANDFILE" );
9while(<STDIN>) {
10 chomp;
11 foreach my $d (@directory_vars) {
12 if (/^(\s*\#?\s*${d}\s*=\s*)\.\/([^\s\#]*)([\s\#].*)$/) {
13 $_ = "$1sys\\\$disk:\[.$2$3";
14 } elsif (/^(\s*\#?\s*${d}\s*=\s*)(\w[^\s\#]*)([\s\#].*)$/) {
15 $_ = "$1sys\\\$disk:\[.$2$3";
16 }
17 s/^(\s*\#?\s*${d}\s*=\s*\$\w+)\/([^\s\#]*)([\s\#].*)$/$1.$2\]$3/;
18 while(/^(\s*\#?\s*${d}\s*=\s*(\$\w+\.|sys\\\$disk:\[\.)[\w\.]+)\/([^\]]*)\](.*)$/) {
19 $_ = "$1.$3]$4";
20 }
21 }
22 foreach my $f (@file_vars) {
23 s/^(\s*\#?\s*${f}\s*=\s*)\.\/(.*)$/$1sys\\\$disk:\[\/$2/;
24 while(/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+\/[^\s\#]*)([\s\#].*)$/) {
25 $_ = "$1.$3$4";
26 }
27 if (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/(\w+)([\s\#].*)$/) {
28 $_ = "$1]$3.$4";
29 } elsif (/^(\s*\#?\s*${f}\s*=\s*(\$\w+|sys\\\$disk:\[)[^\/]*)\/([^\s\#]*)([\s\#].*)$/) {
30 $_ = "$1]$3$4";
31 }
32 }
33 print $_,"\n";
34}
diff --git a/src/lib/libssl/src/VMS/WISHLIST.TXT b/src/lib/libssl/src/VMS/WISHLIST.TXT
deleted file mode 100644
index c151fc8ea7..0000000000
--- a/src/lib/libssl/src/VMS/WISHLIST.TXT
+++ /dev/null
@@ -1,4 +0,0 @@
1* Have the building procedure contain a LINK-only possibility.
2 Wished by Mark Daniel <mark.daniel@dsto.defence.gov.au>
3
4 One way to enable that is also to go over to DESCRIP.MMS files.
diff --git a/src/lib/libssl/src/VMS/install-vms.com b/src/lib/libssl/src/VMS/install-vms.com
deleted file mode 100755
index 7da8b2153b..0000000000
--- a/src/lib/libssl/src/VMS/install-vms.com
+++ /dev/null
@@ -1,67 +0,0 @@
1$! install-vms.com -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 23-MAY-1998 19:22
5$!
6$! P1 root of the directory tree
7$!
8$!
9$! Announce/identify.
10$!
11$ proc = f$environment( "procedure")
12$ write sys$output "@@@ "+ -
13 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
14$!
15$ on error then goto tidy
16$ on control_c then goto tidy
17$!
18$ if p1 .eqs. ""
19$ then
20$ write sys$output "First argument missing."
21$ write sys$output -
22 "Should be the directory where you want things installed."
23$ exit
24$ endif
25$
26$ if (f$getsyi( "cpu") .lt. 128)
27$ then
28$ arch = "VAX"
29$ else
30$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
31$ if (arch .eqs. "") then arch = "UNK"
32$ endif
33$
34$ root = f$parse( P1, "[]A.;0", , , "SYNTAX_ONLY, NO_CONCEAL")- "A.;0"
35$ root_dev = f$parse( root, , , "device", "syntax_only")
36$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
37 "[000000." - "][" - "[" - "]"
38$ root = root_dev + "[" + root_dir
39$
40$ define /nolog wrk_sslroot 'root'.] /translation_attributes = concealed
41$ define /nolog wrk_sslinclude wrk_sslroot:[include]
42$
43$ if f$parse( "wrk_sslroot:[000000]") .eqs. "" then -
44 create /directory /log wrk_sslroot:[000000]
45$ if f$parse( "wrk_sslinclude:") .eqs. "" then -
46 create /directory /log wrk_sslinclude:
47$ if f$parse( "wrk_sslroot:[vms]") .eqs. "" then -
48 create /directory /log wrk_sslroot:[vms]
49$!
50$ copy /log /protection = world:re openssl_startup.com wrk_sslroot:[vms]
51$ copy /log /protection = world:re openssl_undo.com wrk_sslroot:[vms]
52$ copy /log /protection = world:re openssl_utils.com wrk_sslroot:[vms]
53$!
54$ tidy:
55$!
56$ call deass wrk_sslroot
57$ call deass wrk_sslinclude
58$!
59$ exit
60$!
61$ deass: subroutine
62$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
63$ then
64$ deassign /process 'p1'
65$ endif
66$ endsubroutine
67$!
diff --git a/src/lib/libssl/src/VMS/install.com b/src/lib/libssl/src/VMS/install.com
deleted file mode 100644
index 9c9c0e1e27..0000000000
--- a/src/lib/libssl/src/VMS/install.com
+++ /dev/null
@@ -1,79 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 23-MAY-1998 19:22
5$!
6$! P1 root of the directory tree
7$!
8$ IF P1 .EQS. ""
9$ THEN
10$ WRITE SYS$OUTPUT "First argument missing."
11$ WRITE SYS$OUTPUT "Should be the directory where you want things installed."
12$ EXIT
13$ ENDIF
14$
15$ IF (F$GETSYI("CPU").LT.128)
16$ THEN
17$ ARCH := VAX
18$ ELSE
19$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
20$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
21$ ENDIF
22$
23$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
24$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
25$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
26 - "[000000." - "][" - "[" - "]"
27$ ROOT = ROOT_DEV + "[" + ROOT_DIR
28$
29$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
30$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
31$
32$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
33 CREATE/DIR/LOG WRK_SSLROOT:[000000]
34$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
35 CREATE/DIR/LOG WRK_SSLINCLUDE:
36$ IF F$PARSE("WRK_SSLROOT:[VMS]") .EQS. "" THEN -
37 CREATE/DIR/LOG WRK_SSLROOT:[VMS]
38$
39$ IF F$SEARCH("WRK_SSLINCLUDE:vms_idhacks.h") .NES. "" THEN -
40 DELETE WRK_SSLINCLUDE:vms_idhacks.h;*
41$
42$ OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
43$ WRITE SYS$OUTPUT "%OPEN-I-CREATED, ",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
44$ WRITE SF "$! Startup file for Openssl"
45$ WRITE SF "$!"
46$ WRITE SF "$! Do not edit this file, as it will be regenerated during next installation."
47$ WRITE SF "$! Instead, add or change SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
48$ WRITE SF "$!"
49$ WRITE SF "$! P1 a qualifier to DEFINE. For example ""/SYSTEM"" to get the logical names"
50$ WRITE SF "$! defined in the system logical name table."
51$ WRITE SF "$!"
52$ WRITE SF "$ IF (F$GETSYI(""CPU"").LT.128)"
53$ WRITE SF "$ THEN"
54$ WRITE SF "$ ARCH := VAX"
55$ WRITE SF "$ ELSE"
56$ WRITE SF "$ ARCH = F$EDIT( F$GETSYI( ""ARCH_NAME""), ""UPCASE"")"
57$ WRITE SF "$ IF (ARCH .EQS. """") THEN ARCH = ""UNK"""
58$ WRITE SF "$ ENDIF"
59$ WRITE SF "$ DEFINE/NOLOG'P1 SSLROOT ",ROOT,".] /TRANS=CONC"
60$ WRITE SF "$ DEFINE/NOLOG'P1 SSLLIB SSLROOT:['ARCH'_LIB]"
61$ WRITE SF "$ DEFINE/NOLOG'P1 SSLINCLUDE SSLROOT:[INCLUDE]"
62$ WRITE SF "$ DEFINE/NOLOG'P1 SSLEXE SSLROOT:['ARCH'_EXE]"
63$ WRITE SF "$ DEFINE/NOLOG'P1 SSLCERTS SSLROOT:[CERTS]"
64$ WRITE SF "$ DEFINE/NOLOG'P1 SSLPRIVATE SSLROOT:[PRIVATE]"
65$ WRITE SF "$"
66$ WRITE SF "$! This is program can include <openssl/{foo}.h>"
67$ WRITE SF "$ DEFINE/NOLOG'P1 OPENSSL SSLINCLUDE:"
68$ WRITE SF "$"
69$ WRITE SF "$ IF F$SEARCH(""SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"") .NES."""" THEN -"
70$ WRITE SF " @SSLROOT:[VMS]OPENSSL_SYSTARTUP.COM"
71$ WRITE SF "$"
72$ WRITE SF "$ EXIT"
73$ CLOSE SF
74$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
75$
76$ COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
77$ SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
78$
79$ EXIT
diff --git a/src/lib/libssl/src/VMS/mkshared.com b/src/lib/libssl/src/VMS/mkshared.com
deleted file mode 100644
index b0d1fdaac3..0000000000
--- a/src/lib/libssl/src/VMS/mkshared.com
+++ /dev/null
@@ -1,476 +0,0 @@
1$! MKSHARED.COM -- Create shareable images.
2$!
3$! P1: "64" for 64-bit pointers.
4$!
5$! P2: Zlib object library path (optional).
6$!
7$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
8$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
9$! [.CRYPTO.xxx]OPENSSLCONF.H
10$! Output: [.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
11$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
12$!
13$! So far, tests have only been made on VMS for Alpha. VAX will come in time.
14$! ===========================================================================
15$!
16$! Announce/identify.
17$!
18$ proc = f$environment( "procedure")
19$ write sys$output "@@@ "+ -
20 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
21$!
22$! Save the original default device:[directory].
23$!
24$ def_orig = f$environment( "default")
25$ on error then goto tidy
26$ on control_c then goto tidy
27$!
28$! SET DEFAULT to the main kit directory.
29$!
30$ proc = f$environment("procedure")
31$ proc = f$parse( "A.;", proc)- "A.;"
32$ set default 'proc'
33$ set default [-]
34$!
35$! ----- Prepare info for processing: version number and file info
36$ gosub read_version_info
37$ if libver .eqs. ""
38$ then
39$ write sys$error "ERROR: Couldn't find any library version info..."
40$ go to tidy:
41$ endif
42$
43$ if (f$getsyi("cpu") .lt. 128)
44$ then
45$ arch_vax = 1
46$ arch = "VAX"
47$ else
48$ arch_vax = 0
49$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
50$ if (arch .eqs. "") then arch = "UNK"
51$ endif
52$!
53$ archd = arch
54$ lib32 = "32"
55$ shr = "SHR32"
56$!
57$ if (p1 .nes. "")
58$ then
59$ if (p1 .eqs. "64")
60$ then
61$ archd = arch+ "_64"
62$ lib32 = ""
63$ shr = "SHR"
64$ else
65$ if (p1 .nes. "32")
66$ then
67$ write sys$output "Second argument invalid."
68$ write sys$output "It should be "32", "64", or nothing."
69$ exit
70$ endif
71$ endif
72$ endif
73$!
74$! ----- Prepare info for processing: disabled algorithms info
75$ gosub read_disabled_algorithms_info
76$!
77$ ZLIB = p2
78$ zlib_lib = ""
79$ if (ZLIB .nes. "")
80$ then
81$ file2 = f$parse( ZLIB, "libz.olb", , , "syntax_only")
82$ if (f$search( file2) .eqs. "")
83$ then
84$ write sys$output ""
85$ write sys$output "The Option ", ZLIB, " Is Invalid."
86$ write sys$output " Can't find library: ''file2'"
87$ write sys$output ""
88$ goto tidy
89$ endif
90$ zlib_lib = ", ''file2' /library"
91$ endif
92$!
93$ if (arch_vax)
94$ then
95$ libtit = "CRYPTO_TRANSFER_VECTOR"
96$ libid = "Crypto"
97$ libnum = "[.UTIL]LIBEAY.NUM"
98$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
99$ libmar = "''libdir'SSL_LIBCRYPTO_''shr'.MAR"
100$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
101$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
102$ libobj = "''libdir'SSL_LIBCRYPTO_''shr'.OBJ"
103$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
104$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
105$ libref = ""
106$ libvec = "LIBCRYPTO"
107$ if f$search( libolb) .nes. "" then gosub create_vax_shr
108$ libtit = "SSL_TRANSFER_VECTOR"
109$ libid = "SSL"
110$ libnum = "[.UTIL]SSLEAY.NUM"
111$ libdir = "[.''ARCHD'.EXE.SSL]"
112$ libmar = "''libdir'SSL_LIBSSL_''shr'.MAR"
113$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
114$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
115$ libobj = "''libdir'SSL_LIBSSL_''shr'.OBJ"
116$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
117$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
118$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
119$ libvec = "LIBSSL"
120$ if f$search( libolb) .nes. "" then gosub create_vax_shr
121$ else
122$ libid = "Crypto"
123$ libnum = "[.UTIL]LIBEAY.NUM"
124$ libdir = "[.''ARCHD'.EXE.CRYPTO]"
125$ libolb = "''libdir'SSL_LIBCRYPTO''lib32'.OLB"
126$ libopt = "''libdir'SSL_LIBCRYPTO_''shr'.OPT"
127$ libmap = "''libdir'SSL_LIBCRYPTO_''shr'.MAP"
128$ libgoal= "''libdir'SSL_LIBCRYPTO_''shr'.EXE"
129$ libref = ""
130$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
131$ libid = "SSL"
132$ libnum = "[.UTIL]SSLEAY.NUM"
133$ libdir = "[.''ARCHD'.EXE.SSL]"
134$ libolb = "''libdir'SSL_LIBSSL''lib32'.OLB"
135$ libopt = "''libdir'SSL_LIBSSL_''shr'.OPT"
136$ libmap = "''libdir'SSL_LIBSSL_''shr'.MAP"
137$ libgoal= "''libdir'SSL_LIBSSL_''shr'.EXE"
138$ libref = "[.''ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO_''shr'.EXE"
139$ if f$search( libolb) .nes. "" then gosub create_nonvax_shr
140$ endif
141$!
142$ tidy:
143$!
144$! Close any open files.
145$!
146$ if (f$trnlnm( "libnum", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
147 close libnum
148$!
149$ if (f$trnlnm( "mar", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
150 close mar
151$!
152$ if (f$trnlnm( "opt", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
153 close opt
154$!
155$ if (f$trnlnm( "vf", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
156 close vf
157$!
158$! Restore the original default device:[directory].
159$!
160$ set default 'def_orig'
161$ exit
162$
163$! ----- Subroutines to build the shareable libraries
164$! For each supported architecture, there's a main shareable library
165$! creator, which is called from the main code above.
166$! The creator will define a number of variables to tell the next levels of
167$! subroutines what routines to use to write to the option files, call the
168$! main processor, read_func_num, and when that is done, it will write version
169$! data at the end of the .opt file, close it, and link the library.
170$!
171$! read_func_num reads through a .num file and calls the writer routine for
172$! each line. It's also responsible for checking that order is properly kept
173$! in the .num file, check that each line applies to VMS and the architecture,
174$! and to fill in "holes" with dummy entries.
175$!
176$! The creator routines depend on the following variables:
177$! libnum The name of the .num file to use as input
178$! libolb The name of the object library to build from
179$! libid The identification string of the shareable library
180$! libopt The name of the .opt file to write
181$! libtit The title of the assembler transfer vector file (VAX only)
182$! libmar The name of the assembler transfer vector file (VAX only)
183$! libmap The name of the map file to write
184$! libgoal The name of the shareable library to write
185$! libref The name of a shareable library to link in
186$!
187$! read_func_num depends on the following variables from the creator:
188$! libwriter The name of the writer routine to call for each .num file line
189$! -----
190$
191$! ----- Subroutines for non-VAX
192$! -----
193$! The creator routine
194$ create_nonvax_shr:
195$ open /write opt 'libopt'
196$ write opt "identification=""",libid," ",libverstr,""""
197$ write opt libolb, " /library"
198$ if libref .nes. "" then write opt libref,"/SHARE"
199$ write opt "SYMBOL_VECTOR=(-"
200$ libfirstentry := true
201$ libwrch := opt
202$ libwriter := write_nonvax_transfer_entry
203$ textcount = 0
204$ gosub read_func_num
205$ write opt ")"
206$ write opt "GSMATCH=",libvmatch,",",libver
207$ close opt
208$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
209 'zlib_lib'
210$ return
211$
212$! The record writer routine
213$ write_nonvax_transfer_entry:
214$ if libentry .eqs. ".dummy" then return
215$ if info_kind .eqs. "VARIABLE"
216$ then
217$ pr:=DATA
218$ else
219$ pr:=PROCEDURE
220$ endif
221$ textcount_this = f$length(pr) + f$length(libentry) + 5
222$ if textcount + textcount_this .gt. 1024
223$ then
224$ write opt ")"
225$ write opt "SYMBOL_VECTOR=(-"
226$ textcount = 16
227$ libfirstentry := true
228$ endif
229$ if libfirstentry
230$ then
231$ write 'libwrch' " ",libentry,"=",pr," -"
232$ else
233$ write 'libwrch' " ,",libentry,"=",pr," -"
234$ endif
235$ libfirstentry := false
236$ textcount = textcount + textcount_this
237$ return
238$
239$! ----- Subroutines for VAX
240$! -----
241$! The creator routine
242$ create_vax_shr:
243$ open /write mar 'libmar'
244$ type sys$input:/out=mar:
245;
246; Transfer vector for VAX shareable image
247;
248$ write mar " .TITLE ",libtit
249$ write mar " .IDENT /",libid,"/"
250$ type sys$input:/out=mar:
251;
252; Define macro to assist in building transfer vector entries. Each entry
253; should take no more than 8 bytes.
254;
255 .MACRO FTRANSFER_ENTRY routine
256 .ALIGN QUAD
257 .TRANSFER routine
258 .MASK routine
259 JMP routine+2
260 .ENDM FTRANSFER_ENTRY
261;
262; Place entries in own program section.
263;
264$ write mar " .PSECT $$",libvec,",QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT"
265$ write mar libvec,"_xfer:"
266$ libwrch := mar
267$ libwriter := write_vax_ftransfer_entry
268$ gosub read_func_num
269$ type sys$input:/out=mar:
270;
271; Allocate extra storage at end of vector to allow for expansion.
272;
273$ write mar " .BLKB 32768-<.-",libvec,"_xfer> ; 64 pages total."
274$! libwriter := write_vax_vtransfer_entry
275$! gosub read_func_num
276$ write mar " .END"
277$ close mar
278$ open /write opt 'libopt'
279$ write opt "identification=""",libid," ",libverstr,""""
280$ write opt libobj
281$ write opt libolb, " /library"
282$ if libref .nes. "" then write opt libref,"/SHARE"
283$ type sys$input:/out=opt:
284!
285! Ensure transfer vector is at beginning of image
286!
287CLUSTER=FIRST
288$ write opt "COLLECT=FIRST,$$",libvec
289$ write opt "GSMATCH=",libvmatch,",",libver
290$ type sys$input:/out=opt:
291!
292! make psects nonshareable so image can be installed.
293!
294PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
295$ libwrch := opt
296$ libwriter := write_vax_psect_attr
297$ gosub read_func_num
298$ close opt
299$ macro/obj='libobj' 'libmar'
300$ link /map = 'libmap' /full /share = 'libgoal' 'libopt' /options -
301 'zlib_lib'
302$ return
303$
304$! The record writer routine for VAX functions
305$ write_vax_ftransfer_entry:
306$ if info_kind .nes. "FUNCTION" then return
307$ if libentry .eqs ".dummy"
308$ then
309$ write 'libwrch' " .BLKB 8" ! Dummy is zeroes...
310$ else
311$ write 'libwrch' " FTRANSFER_ENTRY ",libentry
312$ endif
313$ return
314$! The record writer routine for VAX variables (should never happen!)
315$ write_vax_psect_attr:
316$ if info_kind .nes. "VARIABLE" then return
317$ if libentry .eqs ".dummy" then return
318$ write 'libwrch' "PSECT_ATTR=",libentry,",NOSHR"
319$ return
320$
321$! ----- Common subroutines
322$! -----
323$! The .num file reader. This one has great responsibility.
324$ read_func_num:
325$ open /read libnum 'libnum'
326$ goto read_nums
327$
328$ read_nums:
329$ libentrynum=0
330$ liblastentry:=false
331$ entrycount=0
332$ loop:
333$ read /end=loop_end /err=loop_end libnum line
334$ lin = f$edit( line, "COMPRESS,TRIM")
335$! Skip a "#" comment line.
336$ if (f$extract( 0, 1, lin) .eqs. "#") then goto loop
337$ entrynum = f$int(f$element( 1, " ", lin))
338$ entryinfo = f$element( 2, " ", lin)
339$ curentry = f$element( 0, " ", lin)
340$ info_exist = f$element( 0, ":", entryinfo)
341$ info_platforms = ","+ f$element(1, ":", entryinfo)+ ","
342$ info_kind = f$element( 2, ":", entryinfo)
343$ info_algorithms = ","+ f$element( 3, ":", entryinfo)+ ","
344$ if info_exist .eqs. "NOEXIST" then goto loop
345$ truesum = 0
346$ falsesum = 0
347$ negatives = 1
348$ plat_i = 0
349$ loop1:
350$ plat_entry = f$element( plat_i, ",", info_platforms)
351$ plat_i = plat_i + 1
352$ if plat_entry .eqs. "" then goto loop1
353$ if plat_entry .nes. ","
354$ then
355$ if f$extract(0,1,plat_entry) .nes. "!" then negatives = 0
356$ if (arch_vax)
357$ then
358$ if plat_entry .eqs. "EXPORT_VAR_AS_FUNCTION" then -
359$ truesum = truesum + 1
360$ if plat_entry .eqs. "!EXPORT_VAR_AS_FUNCTION" then -
361$ falsesum = falsesum + 1
362$ endif
363$!
364$ if ((plat_entry .eqs. "VMS") .or. -
365 ((plat_entry .eqs. "ZLIB") .and. (ZLIB .nes. "")) .or. -
366 (arch_vax .and. (plat_entry .eqs. "VMSVAX"))) then -
367 truesum = truesum + 1
368$!
369$ if ((plat_entry .eqs. "!VMS") .or. -
370 (arch_vax .and. (plat_entry .eqs. "!VMSVAX"))) then -
371 falsesum = falsesum + 1
372$!
373$ goto loop1
374$ endif
375$ endloop1:
376$!DEBUG!$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
377$!DEBUG!$ then
378$!DEBUG!$ write sys$output line
379$!DEBUG!$ write sys$output " truesum = ",truesum,-
380$!DEBUG! ", negatives = ",negatives,", falsesum = ",falsesum
381$!DEBUG!$ endif
382$ if falsesum .ne. 0 then goto loop
383$ if truesum+negatives .eq. 0 then goto loop
384$ alg_i = 0
385$ loop2:
386$ alg_entry = f$element(alg_i,",",info_algorithms)
387$ alg_i = alg_i + 1
388$ if alg_entry .eqs. "" then goto loop2
389$ if alg_entry .nes. ","
390$ then
391$ if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
392$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
393$ goto loop2
394$ endif
395$ endloop2:
396$ if info_platforms - "EXPORT_VAR_AS_FUNCTION" .nes. info_platforms
397$ then
398$!DEBUG!$ write sys$output curentry," ; ",entrynum," ; ",entryinfo
399$ endif
400$ redo:
401$ next:=loop
402$ tolibentry=curentry
403$ if libentrynum .ne. entrynum
404$ then
405$ entrycount=entrycount+1
406$ if entrycount .lt. entrynum
407$ then
408$!DEBUG!$ write sys$output "Info: entrycount: ''entrycount', entrynum: ''entrynum' => 0"
409$ tolibentry=".dummy"
410$ next:=redo
411$ endif
412$ if entrycount .gt. entrynum
413$ then
414$ write sys$error "Decreasing library entry numbers! Can't continue"
415$ write sys$error """",line,""""
416$ close libnum
417$ return
418$ endif
419$ libentry=tolibentry
420$!DEBUG!$ write sys$output entrycount," ",libentry," ",entryinfo
421$ if libentry .nes. "" .and. libwriter .nes. "" then gosub 'libwriter'
422$ else
423$ write sys$error "Info: ""''curentry'"" is an alias for ""''libentry'"". Overriding..."
424$ endif
425$ libentrynum=entrycount
426$ goto 'next'
427$ loop_end:
428$ close libnum
429$ return
430$
431$! The version number reader
432$ read_version_info:
433$ libver = ""
434$ open /read vf [.CRYPTO]OPENSSLV.H
435$ loop_rvi:
436$ read/err=endloop_rvi/end=endloop_rvi vf rvi_line
437$ if rvi_line - "SHLIB_VERSION_NUMBER """ .eqs. rvi_line then -
438 goto loop_rvi
439$ libverstr = f$element(1,"""",rvi_line)
440$ libvmajor = f$element(0,".",libverstr)
441$ libvminor = f$element(1,".",libverstr)
442$ libvedit = f$element(2,".",libverstr)
443$ libvpatch = f$cvui(0,8,f$extract(1,1,libvedit)+"@")-f$cvui(0,8,"@")
444$ libvedit = f$extract(0,1,libvedit)
445$ libver = f$string(f$int(libvmajor)*100)+","+-
446 f$string(f$int(libvminor)*100+f$int(libvedit)*10+f$int(libvpatch))
447$ if libvmajor .eqs. "0"
448$ then
449$ libvmatch = "EQUAL"
450$ else
451$ ! Starting with the 1.0 release, backward compatibility should be
452$ ! kept, so switch over to the following
453$ libvmatch = "LEQUAL"
454$ endif
455$ endloop_rvi:
456$ close vf
457$ return
458$
459$! The disabled algorithms reader
460$ read_disabled_algorithms_info:
461$ disabled_algorithms = ","
462$ open /read cf [.CRYPTO.'ARCH']OPENSSLCONF.H
463$ loop_rci:
464$ read/err=endloop_rci/end=endloop_rci cf rci_line
465$ rci_line = f$edit(rci_line,"TRIM,COMPRESS")
466$ rci_ei = 0
467$ if f$extract(0,9,rci_line) .eqs. "# define " then rci_ei = 2
468$ if f$extract(0,8,rci_line) .eqs. "#define " then rci_ei = 1
469$ if rci_ei .eq. 0 then goto loop_rci
470$ rci_e = f$element(rci_ei," ",rci_line)
471$ if f$extract(0,11,rci_e) .nes. "OPENSSL_NO_" then goto loop_rci
472$ disabled_algorithms = disabled_algorithms + f$extract(11,999,rci_e) + ","
473$ goto loop_rci
474$ endloop_rci:
475$ close cf
476$ return
diff --git a/src/lib/libssl/src/VMS/multinet_shr.opt b/src/lib/libssl/src/VMS/multinet_shr.opt
deleted file mode 100644
index 610f42dddb..0000000000
--- a/src/lib/libssl/src/VMS/multinet_shr.opt
+++ /dev/null
@@ -1 +0,0 @@
1multinet:multinet_socket_library.exe/share
diff --git a/src/lib/libssl/src/VMS/openssl_startup.com b/src/lib/libssl/src/VMS/openssl_startup.com
deleted file mode 100755
index 04bbbde886..0000000000
--- a/src/lib/libssl/src/VMS/openssl_startup.com
+++ /dev/null
@@ -1,108 +0,0 @@
1$!
2$! Startup file for OpenSSL 1.x.
3$!
4$! 2011-03-05 SMS.
5$!
6$! This procedure must reside in the OpenSSL installation directory.
7$! It will fail if it is copied to a different location.
8$!
9$! P1 qualifier(s) for DEFINE. For example, "/SYSTEM" to get the
10$! logical names defined in the system logical name table.
11$!
12$! P2 "64", to use executables which were built with 64-bit pointers.
13$!
14$! Good (default) and bad status values.
15$!
16$ status = %x00010001 ! RMS$_NORMAL, normal successful completion.
17$ rms_e_fnf = %x00018292 ! RMS$_FNF, file not found.
18$!
19$! Prepare for problems.
20$!
21$ orig_dev_dir = f$environment( "DEFAULT")
22$ on control_y then goto clean_up
23$ on error then goto clean_up
24$!
25$! Determine hardware architecture.
26$!
27$ if (f$getsyi( "cpu") .lt. 128)
28$ then
29$ arch_name = "VAX"
30$ else
31$ arch_name = f$edit( f$getsyi( "arch_name"), "upcase")
32$ if (arch_name .eqs. "") then arch_name = "UNK"
33$ endif
34$!
35$ if (p2 .eqs. "64")
36$ then
37$ arch_name_exe = arch_name+ "_64"
38$ else
39$ arch_name_exe = arch_name
40$ endif
41$!
42$! Derive the OpenSSL installation device:[directory] from the location
43$! of this command procedure.
44$!
45$ proc = f$environment( "procedure")
46$ proc_dev_dir = f$parse( "A.;", proc, , , "no_conceal") - "A.;"
47$ proc_dev = f$parse( proc_dev_dir, , , "device", "syntax_only")
48$ proc_dir = f$parse( proc_dev_dir, , , "directory", "syntax_only") - -
49 ".][000000"- "[000000."- "]["- "["- "]"
50$ proc_dev_dir = proc_dev+ "["+ proc_dir+ "]"
51$ set default 'proc_dev_dir'
52$ set default [-]
53$ ossl_dev_dir = f$environment( "default")
54$!
55$! Check existence of expected directories (to see if this procedure has
56$! been moved away from its proper place).
57$!
58$ if ((f$search( "certs.dir;1") .eqs. "") .or. -
59 (f$search( "include.dir;1") .eqs. "") .or. -
60 (f$search( "private.dir;1") .eqs. "") .or. -
61 (f$search( "vms.dir;1") .eqs. ""))
62$ then
63$ write sys$output -
64 " Can't find expected common OpenSSL directories in:"
65$ write sys$output " ''ossl_dev_dir'"
66$ status = rms_e_fnf
67$ goto clean_up
68$ endif
69$!
70$ if ((f$search( "''arch_name_exe'_exe.dir;1") .eqs. "") .or. -
71 (f$search( "''arch_name'_lib.dir;1") .eqs. ""))
72$ then
73$ write sys$output -
74 " Can't find expected architecture-specific OpenSSL directories in:"
75$ write sys$output " ''ossl_dev_dir'"
76$ status = rms_e_fnf
77$ goto clean_up
78$ endif
79$!
80$! All seems well (enough). Define the OpenSSL logical names.
81$!
82$ ossl_root = ossl_dev_dir- "]"+ ".]"
83$ define /translation_attributes = concealed /nolog'p1 SSLROOT 'ossl_root'
84$ define /nolog 'p1' SSLCERTS sslroot:[certs]
85$ define /nolog 'p1' SSLINCLUDE sslroot:[include]
86$ define /nolog 'p1' SSLPRIVATE sslroot:[private]
87$ define /nolog 'p1' SSLEXE sslroot:['arch_name_exe'_exe]
88$ define /nolog 'p1' SSLLIB sslroot:['arch_name'_lib]
89$!
90$! Defining OPENSSL lets a C program use "#include <openssl/{foo}.h>":
91$ define /nolog 'p1' OPENSSL SSLINCLUDE:
92$!
93$! Run a site-specific procedure, if it exists.
94$!
95$ if f$search( "sslroot:[vms]openssl_systartup.com") .nes."" then -
96 @ sslroot:[vms]openssl_systartup.com
97$!
98$! Restore the original default dev:[dir] (if known).
99$!
100$ clean_up:
101$!
102$ if (f$type( orig_dev_dir) .nes. "")
103$ then
104$ set default 'orig_dev_dir'
105$ endif
106$!
107$ EXIT 'status'
108$!
diff --git a/src/lib/libssl/src/VMS/openssl_undo.com b/src/lib/libssl/src/VMS/openssl_undo.com
deleted file mode 100755
index d1623a3160..0000000000
--- a/src/lib/libssl/src/VMS/openssl_undo.com
+++ /dev/null
@@ -1,20 +0,0 @@
1$!
2$! Deassign OpenSSL logical names.
3$!
4$ call deass "OPENSSL" "''p1'"
5$ call deass "SSLCERTS" "''p1'"
6$ call deass "SSLEXE" "''p1'"
7$ call deass "SSLINCLUDE" "''p1'"
8$ call deass "SSLLIB" "''p1'"
9$ call deass "SSLPRIVATE" "''p1'"
10$ call deass "SSLROOT" "''p1'"
11$!
12$ exit
13$!
14$deass: subroutine
15$ if (f$trnlnm( p1) .nes. "")
16$ then
17$ deassign 'p2' 'p1'
18$ endif
19$ endsubroutine
20$!
diff --git a/src/lib/libssl/src/VMS/openssl_utils.com b/src/lib/libssl/src/VMS/openssl_utils.com
deleted file mode 100644
index 64f4915104..0000000000
--- a/src/lib/libssl/src/VMS/openssl_utils.com
+++ /dev/null
@@ -1,46 +0,0 @@
1$!
2$! APPS.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$!
9$! Slightly modified by Richard Levitte <richard@levitte.org>
10$!
11$!
12$! Always define OPENSSL. Others are optional (non-null P1).
13$!
14$ OPENSSL :== $SSLEXE:OPENSSL
15$
16$ IF (P1 .NES. "")
17$ THEN
18$ VERIFY :== $SSLEXE:OPENSSL VERIFY
19$ ASN1PARSE:== $SSLEXE:OPENSSL ASN1PARS
20$! REQ could conflict with REQUEST.
21$ OREQ :== $SSLEXE:OPENSSL REQ
22$ DGST :== $SSLEXE:OPENSSL DGST
23$ DH :== $SSLEXE:OPENSSL DH
24$ ENC :== $SSLEXE:OPENSSL ENC
25$ GENDH :== $SSLEXE:OPENSSL GENDH
26$ ERRSTR :== $SSLEXE:OPENSSL ERRSTR
27$ CA :== $SSLEXE:OPENSSL CA
28$ CRL :== $SSLEXE:OPENSSL CRL
29$ RSA :== $SSLEXE:OPENSSL RSA
30$ DSA :== $SSLEXE:OPENSSL DSA
31$ DSAPARAM :== $SSLEXE:OPENSSL DSAPARAM
32$ X509 :== $SSLEXE:OPENSSL X509
33$ GENRSA :== $SSLEXE:OPENSSL GENRSA
34$ GENDSA :== $SSLEXE:OPENSSL GENDSA
35$ S_SERVER :== $SSLEXE:OPENSSL S_SERVER
36$ S_CLIENT :== $SSLEXE:OPENSSL S_CLIENT
37$ SPEED :== $SSLEXE:OPENSSL SPEED
38$ S_TIME :== $SSLEXE:OPENSSL S_TIME
39$ VERSION :== $SSLEXE:OPENSSL VERSION
40$ PKCS7 :== $SSLEXE:OPENSSL PKCS7
41$ CRL2PKCS7:== $SSLEXE:OPENSSL CRL2P7
42$ SESS_ID :== $SSLEXE:OPENSSL SESS_ID
43$ CIPHERS :== $SSLEXE:OPENSSL CIPHERS
44$ NSEQ :== $SSLEXE:OPENSSL NSEQ
45$ PKCS12 :== $SSLEXE:OPENSSL PKCS12
46$ ENDIF
diff --git a/src/lib/libssl/src/VMS/socketshr_shr.opt b/src/lib/libssl/src/VMS/socketshr_shr.opt
deleted file mode 100644
index f6e3131626..0000000000
--- a/src/lib/libssl/src/VMS/socketshr_shr.opt
+++ /dev/null
@@ -1 +0,0 @@
1socketshr/share
diff --git a/src/lib/libssl/src/VMS/tcpip_shr_decc.opt b/src/lib/libssl/src/VMS/tcpip_shr_decc.opt
deleted file mode 100644
index 33b159e5f5..0000000000
--- a/src/lib/libssl/src/VMS/tcpip_shr_decc.opt
+++ /dev/null
@@ -1 +0,0 @@
1sys$share:tcpip$ipc_shr.exe/share
diff --git a/src/lib/libssl/src/VMS/test-includes.com b/src/lib/libssl/src/VMS/test-includes.com
deleted file mode 100644
index c1d7ccd0ee..0000000000
--- a/src/lib/libssl/src/VMS/test-includes.com
+++ /dev/null
@@ -1,28 +0,0 @@
1$! Quick script to check how well including individual header files works
2$! on VMS, even when the VMS macro isn't defined.
3$
4$ sav_def = f$env("DEFAULT")
5$ here = f$parse("A.;0",f$ENV("PROCEDURE")) - "A.;0"
6$ set default 'here'
7$ set default [-.include.openssl]
8$ define openssl 'f$env("DEFAULT")'
9$ set default [--]
10$
11$ loop:
12$ f = f$search("openssl:*.h")
13$ if f .eqs. "" then goto loop_end
14$ write sys$output "Checking ",f
15$ open/write foo foo.c
16$ write foo "#undef VMS"
17$ write foo "#include <stdio.h>"
18$ write foo "#include <openssl/",f$parse(f,,,"NAME"),".h>"
19$ write foo "main()"
20$ write foo "{printf(""foo\n"");}"
21$ close foo
22$ cc/STANDARD=ANSI89/NOLIST/PREFIX=ALL foo.c
23$ delete foo.c;
24$ goto loop
25$ loop_end:
26$ set default 'save_def'
27$ exit
28
diff --git a/src/lib/libssl/src/VMS/ucx_shr_decc.opt b/src/lib/libssl/src/VMS/ucx_shr_decc.opt
deleted file mode 100644
index 28d84f4af6..0000000000
--- a/src/lib/libssl/src/VMS/ucx_shr_decc.opt
+++ /dev/null
@@ -1 +0,0 @@
1sys$share:ucx$ipc_shr.exe/share
diff --git a/src/lib/libssl/src/VMS/ucx_shr_decc_log.opt b/src/lib/libssl/src/VMS/ucx_shr_decc_log.opt
deleted file mode 100644
index c9d9a96d09..0000000000
--- a/src/lib/libssl/src/VMS/ucx_shr_decc_log.opt
+++ /dev/null
@@ -1 +0,0 @@
1ucx$ipc_shr/share
diff --git a/src/lib/libssl/src/VMS/ucx_shr_vaxc.opt b/src/lib/libssl/src/VMS/ucx_shr_vaxc.opt
deleted file mode 100644
index 86bfaf0d07..0000000000
--- a/src/lib/libssl/src/VMS/ucx_shr_vaxc.opt
+++ /dev/null
@@ -1 +0,0 @@
1sys$library:ucx$ipc.olb/library
diff --git a/src/lib/libssl/src/apps/CA.com b/src/lib/libssl/src/apps/CA.com
deleted file mode 100644
index 2c0d465274..0000000000
--- a/src/lib/libssl/src/apps/CA.com
+++ /dev/null
@@ -1,236 +0,0 @@
1$! CA - wrapper around ca to make it easier to use ... basically ca requires
2$! some setup stuff to be done before you can use it and this makes
3$! things easier between now and when Eric is convinced to fix it :-)
4$!
5$! CA -newca ... will setup the right stuff
6$! CA -newreq ... will generate a certificate request
7$! CA -sign ... will sign the generated request and output
8$!
9$! At the end of that grab newreq.pem and newcert.pem (one has the key
10$! and the other the certificate) and cat them together and that is what
11$! you want/need ... I'll make even this a little cleaner later.
12$!
13$!
14$! 12-Jan-96 tjh Added more things ... including CA -signcert which
15$! converts a certificate to a request and then signs it.
16$! 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG
17$! environment variable so this can be driven from
18$! a script.
19$! 25-Jul-96 eay Cleaned up filenames some more.
20$! 11-Jun-96 eay Fixed a few filename missmatches.
21$! 03-May-96 eay Modified to use 'openssl cmd' instead of 'cmd'.
22$! 18-Apr-96 tjh Original hacking
23$!
24$! Tim Hudson
25$! tjh@cryptsoft.com
26$!
27$!
28$! default ssleay.cnf file has setup as per the following
29$! demoCA ... where everything is stored
30$
31$ IF F$TYPE(SSLEAY_CONFIG) .EQS. "" THEN SSLEAY_CONFIG := SSLLIB:SSLEAY.CNF
32$
33$ DAYS = "-days 365"
34$ REQ = openssl + " req " + SSLEAY_CONFIG
35$ CA = openssl + " ca " + SSLEAY_CONFIG
36$ VERIFY = openssl + " verify"
37$ X509 = openssl + " x509"
38$ PKCS12 = openssl + " pkcs12"
39$ echo = "write sys$Output"
40$ RET = 1
41$!
42$! 2010-12-20 SMS.
43$! Use a concealed logical name to reduce command line lengths, to
44$! avoid DCL errors on VAX:
45$! %DCL-W-TKNOVF, command element is too long - shorten
46$! (Path segments like "openssl-1_0_1-stable-SNAP-20101217" accumulate
47$! quickly.)
48$!
49$ CATOP = F$PARSE( F$ENVIRONMENT( "DEFAULT"), "[]")- "].;"+ ".demoCA.]"
50$ define /translation_attributes = concealed CATOP 'CATOP'
51$!
52$ on error then goto clean_up
53$ on control_y then goto clean_up
54$!
55$ CAKEY = "CATOP:[private]cakey.pem"
56$ CACERT = "CATOP:[000000]cacert.pem"
57$
58$ __INPUT := SYS$COMMAND
59$!
60$ i = 1
61$opt_loop:
62$ if i .gt. 8 then goto opt_loop_end
63$
64$ prog_opt = F$EDIT(P'i',"lowercase")
65$
66$ IF (prog_opt .EQS. "?" .OR. prog_opt .EQS. "-h" .OR. prog_opt .EQS. "-help")
67$ THEN
68$ echo "usage: CA -newcert|-newreq|-newca|-sign|-verify"
69$ goto clean_up
70$ ENDIF
71$!
72$ IF (prog_opt .EQS. "-input")
73$ THEN
74$ ! Get input from somewhere other than SYS$COMMAND
75$ i = i + 1
76$ __INPUT = P'i'
77$ GOTO opt_loop_continue
78$ ENDIF
79$!
80$ IF (prog_opt .EQS. "-newcert")
81$ THEN
82$ ! Create a certificate.
83$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
84$ REQ -new -x509 -keyout newreq.pem -out newreq.pem 'DAYS'
85$ RET=$STATUS
86$ echo "Certificate (and private key) is in newreq.pem"
87$ GOTO opt_loop_continue
88$ ENDIF
89$!
90$ IF (prog_opt .EQS. "-newreq")
91$ THEN
92$ ! Create a certificate request
93$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
94$ REQ -new -keyout newreq.pem -out newreq.pem 'DAYS'
95$ RET=$STATUS
96$ echo "Request (and private key) is in newreq.pem"
97$ GOTO opt_loop_continue
98$ ENDIF
99$!
100$ IF (prog_opt .EQS. "-newca")
101$ THEN
102$ ! If explicitly asked for or it doesn't exist then setup the directory
103$ ! structure that Eric likes to manage things.
104$ IF F$SEARCH( "CATOP:[000000]serial.") .EQS. ""
105$ THEN
106$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[000000]
107$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[certs]
108$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[crl]
109$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[newcerts]
110$ CREATE /DIRECTORY /PROTECTION=OWNER:RWED CATOP:[private]
111$
112$ OPEN /WRITE ser_file CATOP:[000000]serial.
113$ WRITE ser_file "01"
114$ CLOSE ser_file
115$ APPEND /NEW_VERSION NL: CATOP:[000000]index.txt
116$
117$ ! The following is to make sure access() doesn't get confused. It
118$ ! really needs one file in the directory to give correct answers...
119$ COPY NLA0: CATOP:[certs].;
120$ COPY NLA0: CATOP:[crl].;
121$ COPY NLA0: CATOP:[newcerts].;
122$ COPY NLA0: CATOP:[private].;
123$ ENDIF
124$!
125$ IF F$SEARCH( CAKEY) .EQS. ""
126$ THEN
127$ READ '__INPUT' FILE -
128 /PROMPT="CA certificate filename (or enter to create): "
129$ IF (FILE .NES. "") .AND. (F$SEARCH(FILE) .NES. "")
130$ THEN
131$ COPY 'FILE' 'CAKEY'
132$ RET=$STATUS
133$ ELSE
134$ echo "Making CA certificate ..."
135$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
136$ REQ -new -x509 -keyout 'CAKEY' -out 'CACERT' 'DAYS'
137$ RET=$STATUS
138$ ENDIF
139$ ENDIF
140$ GOTO opt_loop_continue
141$ ENDIF
142$!
143$ IF (prog_opt .EQS. "-pkcs12")
144$ THEN
145$ i = i + 1
146$ cname = P'i'
147$ IF cname .EQS. "" THEN cname = "My certificate"
148$ PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CACERT' -
149 -out newcert.p12 -export -name "''cname'"
150$ RET=$STATUS
151$ goto clean_up
152$ ENDIF
153$!
154$ IF (prog_opt .EQS. "-xsign")
155$ THEN
156$!
157$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
158$ CA -policy policy_anything -infiles newreq.pem
159$ RET=$STATUS
160$ GOTO opt_loop_continue
161$ ENDIF
162$!
163$ IF ((prog_opt .EQS. "-sign") .OR. (prog_opt .EQS. "-signreq"))
164$ THEN
165$!
166$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
167$ CA -policy policy_anything -out newcert.pem -infiles newreq.pem
168$ RET=$STATUS
169$ type newcert.pem
170$ echo "Signed certificate is in newcert.pem"
171$ GOTO opt_loop_continue
172$ ENDIF
173$!
174$ IF (prog_opt .EQS. "-signcert")
175$ THEN
176$!
177$ echo "Cert passphrase will be requested twice - bug?"
178$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
179$ X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem
180$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
181$ CA -policy policy_anything -out newcert.pem -infiles tmp.pem
182y
183y
184$ type newcert.pem
185$ echo "Signed certificate is in newcert.pem"
186$ GOTO opt_loop_continue
187$ ENDIF
188$!
189$ IF (prog_opt .EQS. "-verify")
190$ THEN
191$!
192$ i = i + 1
193$ IF (p'i' .EQS. "")
194$ THEN
195$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
196$ VERIFY "-CAfile" 'CACERT' newcert.pem
197$ ELSE
198$ j = i
199$ verify_opt_loop:
200$ IF j .GT. 8 THEN GOTO verify_opt_loop_end
201$ IF p'j' .NES. ""
202$ THEN
203$ DEFINE /USER_MODE SYS$INPUT '__INPUT'
204$ __tmp = p'j'
205$ VERIFY "-CAfile" 'CACERT' '__tmp'
206$ tmp=$STATUS
207$ IF tmp .NE. 0 THEN RET=tmp
208$ ENDIF
209$ j = j + 1
210$ GOTO verify_opt_loop
211$ verify_opt_loop_end:
212$ ENDIF
213$
214$ GOTO opt_loop_end
215$ ENDIF
216$!
217$ IF (prog_opt .NES. "")
218$ THEN
219$!
220$ echo "Unknown argument ''prog_opt'"
221$ RET = 3
222$ goto clean_up
223$ ENDIF
224$
225$opt_loop_continue:
226$ i = i + 1
227$ GOTO opt_loop
228$
229$opt_loop_end:
230$!
231$clean_up:
232$!
233$ if f$trnlnm( "CATOP", "LNM$PROCESS") .nes. "" then -
234 deassign /process CATOP
235$!
236$ EXIT 'RET'
diff --git a/src/lib/libssl/src/apps/Makefile b/src/lib/libssl/src/apps/Makefile
index 95f499e330..72657ea658 100644
--- a/src/lib/libssl/src/apps/Makefile
+++ b/src/lib/libssl/src/apps/Makefile
@@ -577,14 +577,15 @@ openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
577openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h 577openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
578openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h 578openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
579openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h 579openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
580openssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h 580openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
581openssl.o: ../include/openssl/sha.h ../include/openssl/srtp.h 581openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
582openssl.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h 582openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
583openssl.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h 583openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
584openssl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h 584openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
585openssl.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h 585openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
586openssl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h 586openssl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
587openssl.o: ../include/openssl/x509v3.h apps.h openssl.c progs.h s_apps.h 587openssl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
588openssl.o: openssl.c progs.h s_apps.h
588passwd.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h 589passwd.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
589passwd.o: ../include/openssl/buffer.h ../include/openssl/conf.h 590passwd.o: ../include/openssl/buffer.h ../include/openssl/conf.h
590passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h 591passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h
diff --git a/src/lib/libssl/src/apps/apps.c b/src/lib/libssl/src/apps/apps.c
index 4e11915b02..b76db10a5e 100644
--- a/src/lib/libssl/src/apps/apps.c
+++ b/src/lib/libssl/src/apps/apps.c
@@ -586,12 +586,12 @@ int password_callback(char *buf, int bufsiz, int verify,
586 586
587 if (ok >= 0) 587 if (ok >= 0)
588 ok = UI_add_input_string(ui,prompt,ui_flags,buf, 588 ok = UI_add_input_string(ui,prompt,ui_flags,buf,
589 PW_MIN_LENGTH,BUFSIZ-1); 589 PW_MIN_LENGTH,bufsiz-1);
590 if (ok >= 0 && verify) 590 if (ok >= 0 && verify)
591 { 591 {
592 buff = (char *)OPENSSL_malloc(bufsiz); 592 buff = (char *)OPENSSL_malloc(bufsiz);
593 ok = UI_add_verify_string(ui,prompt,ui_flags,buff, 593 ok = UI_add_verify_string(ui,prompt,ui_flags,buff,
594 PW_MIN_LENGTH,BUFSIZ-1, buf); 594 PW_MIN_LENGTH,bufsiz-1, buf);
595 } 595 }
596 if (ok >= 0) 596 if (ok >= 0)
597 do 597 do
@@ -2132,7 +2132,7 @@ X509_NAME *parse_name(char *subject, long chtype, int multirdn)
2132 X509_NAME *n = NULL; 2132 X509_NAME *n = NULL;
2133 int nid; 2133 int nid;
2134 2134
2135 if (!buf || !ne_types || !ne_values) 2135 if (!buf || !ne_types || !ne_values || !mval)
2136 { 2136 {
2137 BIO_printf(bio_err, "malloc error\n"); 2137 BIO_printf(bio_err, "malloc error\n");
2138 goto error; 2138 goto error;
@@ -2236,6 +2236,7 @@ X509_NAME *parse_name(char *subject, long chtype, int multirdn)
2236 OPENSSL_free(ne_values); 2236 OPENSSL_free(ne_values);
2237 OPENSSL_free(ne_types); 2237 OPENSSL_free(ne_types);
2238 OPENSSL_free(buf); 2238 OPENSSL_free(buf);
2239 OPENSSL_free(mval);
2239 return n; 2240 return n;
2240 2241
2241error: 2242error:
@@ -2244,6 +2245,8 @@ error:
2244 OPENSSL_free(ne_values); 2245 OPENSSL_free(ne_values);
2245 if (ne_types) 2246 if (ne_types)
2246 OPENSSL_free(ne_types); 2247 OPENSSL_free(ne_types);
2248 if (mval)
2249 OPENSSL_free(mval);
2247 if (buf) 2250 if (buf)
2248 OPENSSL_free(buf); 2251 OPENSSL_free(buf);
2249 return NULL; 2252 return NULL;
@@ -2838,7 +2841,7 @@ double app_tminterval(int stop,int usertime)
2838 2841
2839 if (proc==NULL) 2842 if (proc==NULL)
2840 { 2843 {
2841 if (GetVersion() < 0x80000000) 2844 if (check_winnt())
2842 proc = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE, 2845 proc = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,
2843 GetCurrentProcessId()); 2846 GetCurrentProcessId());
2844 if (proc==NULL) proc = (HANDLE)-1; 2847 if (proc==NULL) proc = (HANDLE)-1;
diff --git a/src/lib/libssl/src/apps/apps.h b/src/lib/libssl/src/apps/apps.h
index c1ca99da12..3aeb46c4e2 100644
--- a/src/lib/libssl/src/apps/apps.h
+++ b/src/lib/libssl/src/apps/apps.h
@@ -188,6 +188,7 @@ extern BIO *bio_err;
188 do { CONF_modules_unload(1); destroy_ui_method(); \ 188 do { CONF_modules_unload(1); destroy_ui_method(); \
189 OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \ 189 OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
190 CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \ 190 CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
191 RAND_cleanup(); \
191 ERR_free_strings(); zlib_cleanup();} while(0) 192 ERR_free_strings(); zlib_cleanup();} while(0)
192# else 193# else
193# define apps_startup() \ 194# define apps_startup() \
@@ -198,6 +199,7 @@ extern BIO *bio_err;
198 do { CONF_modules_unload(1); destroy_ui_method(); \ 199 do { CONF_modules_unload(1); destroy_ui_method(); \
199 OBJ_cleanup(); EVP_cleanup(); \ 200 OBJ_cleanup(); EVP_cleanup(); \
200 CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \ 201 CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
202 RAND_cleanup(); \
201 ERR_free_strings(); zlib_cleanup(); } while(0) 203 ERR_free_strings(); zlib_cleanup(); } while(0)
202# endif 204# endif
203#endif 205#endif
diff --git a/src/lib/libssl/src/apps/ca.c b/src/lib/libssl/src/apps/ca.c
index a548f4eeb0..55dea95ac1 100644
--- a/src/lib/libssl/src/apps/ca.c
+++ b/src/lib/libssl/src/apps/ca.c
@@ -1408,6 +1408,7 @@ bad:
1408 if (!NCONF_get_number(conf,section, 1408 if (!NCONF_get_number(conf,section,
1409 ENV_DEFAULT_CRL_HOURS, &crlhours)) 1409 ENV_DEFAULT_CRL_HOURS, &crlhours))
1410 crlhours = 0; 1410 crlhours = 0;
1411 ERR_clear_error();
1411 } 1412 }
1412 if ((crldays == 0) && (crlhours == 0) && (crlsec == 0)) 1413 if ((crldays == 0) && (crlhours == 0) && (crlsec == 0))
1413 { 1414 {
diff --git a/src/lib/libssl/src/apps/crl.c b/src/lib/libssl/src/apps/crl.c
index c395b2afd5..8797d300cf 100644
--- a/src/lib/libssl/src/apps/crl.c
+++ b/src/lib/libssl/src/apps/crl.c
@@ -81,6 +81,9 @@ static const char *crl_usage[]={
81" -in arg - input file - default stdin\n", 81" -in arg - input file - default stdin\n",
82" -out arg - output file - default stdout\n", 82" -out arg - output file - default stdout\n",
83" -hash - print hash value\n", 83" -hash - print hash value\n",
84#ifndef OPENSSL_NO_MD5
85" -hash_old - print old-style (MD5) hash value\n",
86#endif
84" -fingerprint - print the crl fingerprint\n", 87" -fingerprint - print the crl fingerprint\n",
85" -issuer - print issuer DN\n", 88" -issuer - print issuer DN\n",
86" -lastupdate - lastUpdate field\n", 89" -lastupdate - lastUpdate field\n",
@@ -108,6 +111,9 @@ int MAIN(int argc, char **argv)
108 int informat,outformat; 111 int informat,outformat;
109 char *infile=NULL,*outfile=NULL; 112 char *infile=NULL,*outfile=NULL;
110 int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0; 113 int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
114#ifndef OPENSSL_NO_MD5
115 int hash_old=0;
116#endif
111 int fingerprint = 0, crlnumber = 0; 117 int fingerprint = 0, crlnumber = 0;
112 const char **pp; 118 const char **pp;
113 X509_STORE *store = NULL; 119 X509_STORE *store = NULL;
@@ -192,6 +198,10 @@ int MAIN(int argc, char **argv)
192 text = 1; 198 text = 1;
193 else if (strcmp(*argv,"-hash") == 0) 199 else if (strcmp(*argv,"-hash") == 0)
194 hash= ++num; 200 hash= ++num;
201#ifndef OPENSSL_NO_MD5
202 else if (strcmp(*argv,"-hash_old") == 0)
203 hash_old= ++num;
204#endif
195 else if (strcmp(*argv,"-nameopt") == 0) 205 else if (strcmp(*argv,"-nameopt") == 0)
196 { 206 {
197 if (--argc < 1) goto bad; 207 if (--argc < 1) goto bad;
@@ -304,6 +314,14 @@ bad:
304 BIO_printf(bio_out,"%08lx\n", 314 BIO_printf(bio_out,"%08lx\n",
305 X509_NAME_hash(X509_CRL_get_issuer(x))); 315 X509_NAME_hash(X509_CRL_get_issuer(x)));
306 } 316 }
317#ifndef OPENSSL_NO_MD5
318 if (hash_old == i)
319 {
320 BIO_printf(bio_out,"%08lx\n",
321 X509_NAME_hash_old(
322 X509_CRL_get_issuer(x)));
323 }
324#endif
307 if (lastupdate == i) 325 if (lastupdate == i)
308 { 326 {
309 BIO_printf(bio_out,"lastUpdate="); 327 BIO_printf(bio_out,"lastUpdate=");
diff --git a/src/lib/libssl/src/apps/dgst.c b/src/lib/libssl/src/apps/dgst.c
index b08e9a7c78..f4aec779c1 100644
--- a/src/lib/libssl/src/apps/dgst.c
+++ b/src/lib/libssl/src/apps/dgst.c
@@ -216,10 +216,10 @@ int MAIN(int argc, char **argv)
216 out_bin = 1; 216 out_bin = 1;
217 else if (strcmp(*argv,"-d") == 0) 217 else if (strcmp(*argv,"-d") == 0)
218 debug=1; 218 debug=1;
219 else if (strcmp(*argv,"-non-fips-allow") == 0)
220 non_fips_allow=1;
221 else if (!strcmp(*argv,"-fips-fingerprint")) 219 else if (!strcmp(*argv,"-fips-fingerprint"))
222 hmac_key = "etaonrishdlcupfm"; 220 hmac_key = "etaonrishdlcupfm";
221 else if (strcmp(*argv,"-non-fips-allow") == 0)
222 non_fips_allow=1;
223 else if (!strcmp(*argv,"-hmac")) 223 else if (!strcmp(*argv,"-hmac"))
224 { 224 {
225 if (--argc < 1) 225 if (--argc < 1)
@@ -427,9 +427,9 @@ int MAIN(int argc, char **argv)
427 goto end; 427 goto end;
428 } 428 }
429 if (do_verify) 429 if (do_verify)
430 r = EVP_DigestVerifyInit(mctx, &pctx, md, e, sigkey); 430 r = EVP_DigestVerifyInit(mctx, &pctx, md, NULL, sigkey);
431 else 431 else
432 r = EVP_DigestSignInit(mctx, &pctx, md, e, sigkey); 432 r = EVP_DigestSignInit(mctx, &pctx, md, NULL, sigkey);
433 if (!r) 433 if (!r)
434 { 434 {
435 BIO_printf(bio_err, "Error setting context\n"); 435 BIO_printf(bio_err, "Error setting context\n");
diff --git a/src/lib/libssl/src/apps/dhparam.c b/src/lib/libssl/src/apps/dhparam.c
index b47097cbb2..1297d6fb5e 100644
--- a/src/lib/libssl/src/apps/dhparam.c
+++ b/src/lib/libssl/src/apps/dhparam.c
@@ -332,7 +332,6 @@ bad:
332 BIO_printf(bio_err,"This is going to take a long time\n"); 332 BIO_printf(bio_err,"This is going to take a long time\n");
333 if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) 333 if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
334 { 334 {
335 if(dh) DH_free(dh);
336 ERR_print_errors(bio_err); 335 ERR_print_errors(bio_err);
337 goto end; 336 goto end;
338 } 337 }
diff --git a/src/lib/libssl/src/apps/dsaparam.c b/src/lib/libssl/src/apps/dsaparam.c
index fe72c1d3df..683d51391b 100644
--- a/src/lib/libssl/src/apps/dsaparam.c
+++ b/src/lib/libssl/src/apps/dsaparam.c
@@ -326,6 +326,7 @@ bad:
326 goto end; 326 goto end;
327 } 327 }
328#endif 328#endif
329 ERR_print_errors(bio_err);
329 BIO_printf(bio_err,"Error, DSA key generation failed\n"); 330 BIO_printf(bio_err,"Error, DSA key generation failed\n");
330 goto end; 331 goto end;
331 } 332 }
@@ -429,13 +430,19 @@ bad:
429 430
430 assert(need_rand); 431 assert(need_rand);
431 if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end; 432 if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
432 if (!DSA_generate_key(dsakey)) goto end; 433 if (!DSA_generate_key(dsakey))
434 {
435 ERR_print_errors(bio_err);
436 DSA_free(dsakey);
437 goto end;
438 }
433 if (outformat == FORMAT_ASN1) 439 if (outformat == FORMAT_ASN1)
434 i=i2d_DSAPrivateKey_bio(out,dsakey); 440 i=i2d_DSAPrivateKey_bio(out,dsakey);
435 else if (outformat == FORMAT_PEM) 441 else if (outformat == FORMAT_PEM)
436 i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL); 442 i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);
437 else { 443 else {
438 BIO_printf(bio_err,"bad output format specified for outfile\n"); 444 BIO_printf(bio_err,"bad output format specified for outfile\n");
445 DSA_free(dsakey);
439 goto end; 446 goto end;
440 } 447 }
441 DSA_free(dsakey); 448 DSA_free(dsakey);
diff --git a/src/lib/libssl/src/apps/genrsa.c b/src/lib/libssl/src/apps/genrsa.c
index 37e9310910..ece114c876 100644
--- a/src/lib/libssl/src/apps/genrsa.c
+++ b/src/lib/libssl/src/apps/genrsa.c
@@ -78,7 +78,7 @@
78#include <openssl/pem.h> 78#include <openssl/pem.h>
79#include <openssl/rand.h> 79#include <openssl/rand.h>
80 80
81#define DEFBITS 512 81#define DEFBITS 1024
82#undef PROG 82#undef PROG
83#define PROG genrsa_main 83#define PROG genrsa_main
84 84
diff --git a/src/lib/libssl/src/apps/install-apps.com b/src/lib/libssl/src/apps/install-apps.com
deleted file mode 100755
index 7a553aa12e..0000000000
--- a/src/lib/libssl/src/apps/install-apps.com
+++ /dev/null
@@ -1,107 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! P1 root of the directory tree
7$! P2 "64" for 64-bit pointers.
8$!
9$!
10$! Announce/identify.
11$!
12$ proc = f$environment( "procedure")
13$ write sys$output "@@@ "+ -
14 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
15$!
16$ on error then goto tidy
17$ on control_c then goto tidy
18$!
19$ if (p1 .eqs. "")
20$ then
21$ write sys$output "First argument missing."
22$ write sys$output -
23 "It should be the directory where you want things installed."
24$ exit
25$ endif
26$!
27$ if (f$getsyi("cpu") .lt. 128)
28$ then
29$ arch = "VAX"
30$ else
31$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
32$ if (arch .eqs. "") then arch = "UNK"
33$ endif
34$!
35$ archd = arch
36$!
37$ if (p2 .nes. "")
38$ then
39$ if (p2 .eqs. "64")
40$ then
41$ archd = arch+ "_64"
42$ else
43$ if (p2 .nes. "32")
44$ then
45$ write sys$output "Second argument invalid."
46$ write sys$output "It should be "32", "64", or nothing."
47$ exit
48$ endif
49$ endif
50$ endif
51$!
52$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
53$ root_dev = f$parse(root,,,"device","syntax_only")
54$ root_dir = f$parse(root,,,"directory","syntax_only") - -
55 "[000000." - "][" - "[" - "]"
56$ root = root_dev + "[" + root_dir
57$!
58$ define /nolog wrk_sslroot 'root'.] /trans=conc
59$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
60$!
61$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
62 create /directory /log wrk_sslroot:[000000]
63$ if f$parse("wrk_sslxexe:") .eqs. "" then -
64 create /directory /log wrk_sslxexe:
65$!
66$ exe := openssl
67$!
68$ exe_dir := [-.'archd'.exe.apps]
69$!
70$! Executables.
71$!
72$ i = 0
73$ loop_exe:
74$ e = f$edit(f$element( i, ",", exe), "trim")
75$ i = i + 1
76$ if e .eqs. "," then goto loop_exe_end
77$ set noon
78$ file = exe_dir+ e+ ".exe"
79$ if f$search( file) .nes. ""
80$ then
81$ copy /protection = w:re 'file' wrk_sslxexe: /log
82$ endif
83$ set on
84$ goto loop_exe
85$ loop_exe_end:
86$!
87$! Miscellaneous.
88$!
89$ set noon
90$ copy /protection = w:re ca.com wrk_sslxexe:ca.com /log
91$ copy /protection = w:re openssl-vms.cnf wrk_sslroot:[000000]openssl.cnf /log
92$ set on
93$!
94$ tidy:
95$!
96$ call deass wrk_sslroot
97$ call deass wrk_sslxexe
98$!
99$ exit
100$!
101$ deass: subroutine
102$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
103$ then
104$ deassign /process 'p1'
105$ endif
106$ endsubroutine
107$!
diff --git a/src/lib/libssl/src/apps/install.com b/src/lib/libssl/src/apps/install.com
deleted file mode 100644
index c5821b40e3..0000000000
--- a/src/lib/libssl/src/apps/install.com
+++ /dev/null
@@ -1,65 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! P1 root of the directory tree
7$!
8$
9$ IF P1 .EQS. ""
10$ THEN
11$ WRITE SYS$OUTPUT "First argument missing."
12$ WRITE SYS$OUTPUT -
13 "Should be the directory where you want things installed."
14$ EXIT
15$ ENDIF
16$
17$ IF (F$GETSYI("CPU").LT.128)
18$ THEN
19$ ARCH := VAX
20$ ELSE
21$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
22$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
23$ ENDIF
24$
25$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
26$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
27$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
28 - "[000000." - "][" - "[" - "]"
29$ ROOT = ROOT_DEV + "[" + ROOT_DIR
30$
31$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
32$ DEFINE/NOLOG WRK_SSLEXE WRK_SSLROOT:['ARCH'_EXE]
33$
34$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
35 CREATE/DIR/LOG WRK_SSLROOT:[000000]
36$ IF F$PARSE("WRK_SSLEXE:") .EQS. "" THEN -
37 CREATE/DIR/LOG WRK_SSLEXE:
38$
39$ EXE := openssl
40$
41$ EXE_DIR := [-.'ARCH'.EXE.APPS]
42$
43$ I = 0
44$ LOOP_EXE:
45$ E = F$EDIT(F$ELEMENT(I, ",", EXE),"TRIM")
46$ I = I + 1
47$ IF E .EQS. "," THEN GOTO LOOP_EXE_END
48$ SET NOON
49$ IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
50$ THEN
51$ COPY 'EXE_DIR''E'.EXE WRK_SSLEXE:'E'.EXE/log
52$ SET FILE/PROT=W:RE WRK_SSLEXE:'E'.EXE
53$ ENDIF
54$ SET ON
55$ GOTO LOOP_EXE
56$ LOOP_EXE_END:
57$
58$ SET NOON
59$ COPY CA.COM WRK_SSLEXE:CA.COM/LOG
60$ SET FILE/PROT=W:RE WRK_SSLEXE:CA.COM
61$ COPY OPENSSL-VMS.CNF WRK_SSLROOT:[000000]OPENSSL.CNF/LOG
62$ SET FILE/PROT=W:R WRK_SSLROOT:[000000]OPENSSL.CNF
63$ SET ON
64$
65$ EXIT
diff --git a/src/lib/libssl/src/apps/makeapps.com b/src/lib/libssl/src/apps/makeapps.com
deleted file mode 100644
index efc213c8ee..0000000000
--- a/src/lib/libssl/src/apps/makeapps.com
+++ /dev/null
@@ -1,1169 +0,0 @@
1$!
2$! MAKEAPPS.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$! Zoltan Arpadffy <zoli@polarhome.com>
10$!
11$! This command files compiles and creates all the various different
12$! "application" programs for the different types of encryption for OpenSSL.
13$! The EXE's are placed in the directory [.xxx.EXE.APPS] where "xxx" denotes
14$! ALPHA, IA64 or VAX, depending on your machine architecture.
15$!
16$! It was written so it would try to determine what "C" compiler to
17$! use or you can specify which "C" compiler to use.
18$!
19$! Specify DEBUG or NODEBUG as P1 to compile with or without debugger
20$! information.
21$!
22$! Specify which compiler at P2 to try to compile under.
23$!
24$! VAXC For VAX C.
25$! DECC For DEC C.
26$! GNUC For GNU C.
27$!
28$! If you don't specify a compiler, it will try to determine which
29$! "C" compiler to use.
30$!
31$! P3, if defined, sets a TCP/IP library to use, through one of the following
32$! keywords:
33$!
34$! UCX for UCX
35$! SOCKETSHR for SOCKETSHR+NETLIB
36$! TCPIP for TCPIP (post UCX)
37$!
38$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
39$!
40$! P5, if defined, sets a choice of programs to compile.
41$!
42$! P6, if defined, specifies the C pointer size. Ignored on VAX.
43$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
44$! Supported values are:
45$!
46$! "" Compile with default (/NOPOINTER_SIZE)
47$! 32 Compile with /POINTER_SIZE=32 (SHORT)
48$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
49$! (Automatically select ARGV if compiler supports it.)
50$! 64= Compile with /POINTER_SIZE=64 (LONG).
51$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
52$!
53$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
54$! libz.olb) may be found. Optionally, a non-default object library
55$! name may be included ("dev:[dir]libz_64.olb", for example).
56$!
57$!
58$! Announce/identify.
59$!
60$ proc = f$environment( "procedure")
61$ write sys$output "@@@ "+ -
62 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
63$!
64$ on control_c then goto exit
65$!
66$! Define A TCP/IP Library That We Will Need To Link To.
67$! (That Is, If We Need To Link To One.)
68$!
69$ TCPIP_LIB = ""
70$ ZLIB_LIB = ""
71$!
72$! Check What Architecture We Are Using.
73$!
74$ IF (F$GETSYI("CPU").LT.128)
75$ THEN
76$!
77$! The Architecture Is VAX.
78$!
79$ ARCH = "VAX"
80$!
81$! Else...
82$!
83$ ELSE
84$!
85$! The Architecture Is Alpha, IA64 or whatever comes in the future.
86$!
87$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
88$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
89$!
90$! End The Architecture Check.
91$!
92$ ENDIF
93$!
94$ ARCHD = ARCH
95$ LIB32 = "32"
96$ OPT_FILE = ""
97$ POINTER_SIZE = ""
98$!
99$! Define what programs should be compiled
100$!
101$ PROGRAMS := OPENSSL
102$!
103$! Check To Make Sure We Have Valid Command Line Parameters.
104$!
105$ GOSUB CHECK_OPTIONS
106$!
107$! Define The CRYPTO Library.
108$!
109$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
110$!
111$! Define The SSL Library.
112$!
113$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
114$!
115$! Define The OBJ and EXE Directories.
116$!
117$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.APPS]
118$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.APPS]
119$!
120$! Specify the destination directory in any /MAP option.
121$!
122$ if (LINKMAP .eqs. "MAP")
123$ then
124$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
125$ endif
126$!
127$! Add the location prefix to the linker options file name.
128$!
129$ if (OPT_FILE .nes. "")
130$ then
131$ OPT_FILE = EXE_DIR+ OPT_FILE
132$ endif
133$!
134$! Initialise logical names and such
135$!
136$ GOSUB INITIALISE
137$!
138$! Tell The User What Kind of Machine We Run On.
139$!
140$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
141$!
142$! Check To See If The OBJ Directory Exists.
143$!
144$ IF (F$PARSE(OBJ_DIR).EQS."")
145$ THEN
146$!
147$! It Dosen't Exist, So Create It.
148$!
149$ CREATE/DIRECTORY 'OBJ_DIR'
150$!
151$! End The OBJ Directory Check.
152$!
153$ ENDIF
154$!
155$! Check To See If The EXE Directory Exists.
156$!
157$ IF (F$PARSE(EXE_DIR).EQS."")
158$ THEN
159$!
160$! It Dosen't Exist, So Create It.
161$!
162$ CREATE/DIRECTORY 'EXE_DIR'
163$!
164$! End The EXE Directory Check.
165$!
166$ ENDIF
167$!
168$! Check To See If We Have The Proper Libraries.
169$!
170$ GOSUB LIB_CHECK
171$!
172$! Check To See If We Have A Linker Option File.
173$!
174$ GOSUB CHECK_OPT_FILE
175$!
176$! Define The Application Files.
177$! NOTE: Some might think this list ugly. However, it's made this way to
178$! reflect the E_OBJ variable in Makefile as closely as possible, thereby
179$! making it fairly easy to verify that the lists are the same.
180$!
181$ LIB_OPENSSL = "VERIFY,ASN1PARS,REQ,DGST,DH,DHPARAM,ENC,PASSWD,GENDH,ERRSTR,"+-
182 "CA,PKCS7,CRL2P7,CRL,"+-
183 "RSA,RSAUTL,DSA,DSAPARAM,EC,ECPARAM,"+-
184 "X509,GENRSA,GENDSA,GENPKEY,S_SERVER,S_CLIENT,SPEED,"+-
185 "S_TIME,APPS,S_CB,S_SOCKET,APP_RAND,VERSION,SESS_ID,"+-
186 "CIPHERS,NSEQ,PKCS12,PKCS8,PKEY,PKEYPARAM,PKEYUTL,"+ -
187 "SPKAC,SMIME,CMS,RAND,ENGINE,OCSP,PRIME,TS,SRP"
188$!
189$ LIB_OPENSSL = LIB_OPENSSL+ ",VMS_DECC_INIT"
190$!
191$ TCPIP_PROGRAMS = ",,"
192$ IF COMPILER .EQS. "VAXC" THEN -
193 TCPIP_PROGRAMS = ",OPENSSL,"
194$!
195$! Setup exceptional compilations
196$!
197$ COMPILEWITH_CC2 = ",S_SOCKET,S_SERVER,S_CLIENT,"
198$!
199$ PHASE := LIB
200$!
201$ RESTART:
202$!
203$! Define An App Counter And Set It To "0".
204$!
205$ APP_COUNTER = 0
206$!
207$! Top Of The App Loop.
208$!
209$ NEXT_APP:
210$!
211$! Make The Application File Name
212$!
213$ CURRENT_APP = F$EDIT(F$ELEMENT(APP_COUNTER,",",PROGRAMS),"TRIM")
214$!
215$! Create The Executable File Name.
216$!
217$ EXE_FILE = EXE_DIR + CURRENT_APP + ".EXE"
218$!
219$! Check To See If We Are At The End Of The File List.
220$!
221$ IF (CURRENT_APP.EQS.",")
222$ THEN
223$ IF (PHASE.EQS."LIB")
224$ THEN
225$ PHASE := APP
226$ GOTO RESTART
227$ ELSE
228$ GOTO APP_DONE
229$ ENDIF
230$ ENDIF
231$!
232$! Increment The Counter.
233$!
234$ APP_COUNTER = APP_COUNTER + 1
235$!
236$! Decide if we're building the object files or not.
237$!
238$ IF (PHASE.EQS."LIB")
239$ THEN
240$!
241$! Define A Library File Counter And Set It To "-1".
242$! -1 Means The Application File Name Is To Be Used.
243$!
244$ LIB_COUNTER = -1
245$!
246$! Create a .OPT file for the object files
247$!
248$ OPEN /WRITE OBJECTS 'EXE_DIR''CURRENT_APP'.OPT
249$!
250$! Top Of The File Loop.
251$!
252$ NEXT_LIB:
253$!
254$! O.K, Extract The File Name From The File List.
255$!
256$ IF LIB_COUNTER .GE. 0
257$ THEN
258$ FILE_NAME = F$EDIT(F$ELEMENT(LIB_COUNTER,",",LIB_'CURRENT_APP'),"TRIM")
259$ ELSE
260$ FILE_NAME = CURRENT_APP
261$ ENDIF
262$!
263$! Check To See If We Are At The End Of The File List.
264$!
265$ IF (FILE_NAME.EQS.",")
266$ THEN
267$ CLOSE OBJECTS
268$ GOTO NEXT_APP
269$ ENDIF
270$!
271$! Increment The Counter.
272$!
273$ LIB_COUNTER = LIB_COUNTER + 1
274$!
275$! Create The Source File Name.
276$!
277$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
278$!
279$! Create The Object File Name.
280$!
281$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
282$ ON WARNING THEN GOTO NEXT_LIB
283$!
284$! Check To See If The File We Want To Compile Actually Exists.
285$!
286$ IF (F$SEARCH(SOURCE_FILE).EQS."")
287$ THEN
288$!
289$! Tell The User That The File Dosen't Exist.
290$!
291$ WRITE SYS$OUTPUT ""
292$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
293$ WRITE SYS$OUTPUT ""
294$!
295$! Exit The Build.
296$!
297$ GOTO EXIT
298$!
299$! End The File Exist Check.
300$!
301$ ENDIF
302$!
303$! Tell The User What We Are Building.
304$!
305$ IF (PHASE.EQS."LIB")
306$ THEN
307$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME,".C File."
308$ ELSE
309$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Application Program."
310$ ENDIF
311$!
312$! Compile The File.
313$!
314$ ON ERROR THEN GOTO NEXT_LIB
315$ IF COMPILEWITH_CC2 - FILE_NAME .NES. COMPILEWITH_CC2
316$ THEN
317$ CC2/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
318$ ELSE
319$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
320$ ENDIF
321$ WRITE OBJECTS OBJECT_FILE
322$!
323$ GOTO NEXT_LIB
324$ ENDIF
325$!
326$! Check if this program works well without a TCPIP library
327$!
328$ IF TCPIP_LIB .EQS. "" .AND. TCPIP_PROGRAMS - CURRENT_APP .NES. TCPIP_PROGRAMS
329$ THEN
330$ WRITE SYS$OUTPUT CURRENT_APP," needs a TCP/IP library. Can't link. Skipping..."
331$ GOTO NEXT_APP
332$ ENDIF
333$!
334$! Link The Program.
335$!
336$ ON WARNING THEN GOTO NEXT_APP
337$!
338$! Don't Link With The RSAREF Routines And TCP/IP Library.
339$!
340$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_FILE' -
341 'EXE_DIR''CURRENT_APP'.OPT /OPTIONS, -
342 'SSL_LIB' /LIBRARY, -
343 'CRYPTO_LIB' /LIBRARY -
344 'TCPIP_LIB' -
345 'ZLIB_LIB' -
346 ,'OPT_FILE' /OPTIONS
347$!
348$! Go Back And Do It Again.
349$!
350$ GOTO NEXT_APP
351$!
352$! All Done With This File.
353$!
354$ APP_DONE:
355$ EXIT:
356$!
357$! All Done, Time To Clean Up And Exit.
358$!
359$ GOSUB CLEANUP
360$ EXIT
361$!
362$! Check For The Link Option FIle.
363$!
364$ CHECK_OPT_FILE:
365$!
366$! Check To See If We Need To Make A VAX C Option File.
367$!
368$ IF (COMPILER.EQS."VAXC")
369$ THEN
370$!
371$! Check To See If We Already Have A VAX C Linker Option File.
372$!
373$ IF (F$SEARCH(OPT_FILE).EQS."")
374$ THEN
375$!
376$! We Need A VAX C Linker Option File.
377$!
378$ CREATE 'OPT_FILE'
379$DECK
380!
381! Default System Options File To Link Against
382! The Sharable VAX C Runtime Library.
383!
384SYS$SHARE:VAXCRTL.EXE/SHARE
385$EOD
386$!
387$! End The Option File Check.
388$!
389$ ENDIF
390$!
391$! End The VAXC Check.
392$!
393$ ENDIF
394$!
395$! Check To See If We Need A GNU C Option File.
396$!
397$ IF (COMPILER.EQS."GNUC")
398$ THEN
399$!
400$! Check To See If We Already Have A GNU C Linker Option File.
401$!
402$ IF (F$SEARCH(OPT_FILE).EQS."")
403$ THEN
404$!
405$! We Need A GNU C Linker Option File.
406$!
407$ CREATE 'OPT_FILE'
408$DECK
409!
410! Default System Options File To Link Against
411! The Sharable C Runtime Library.
412!
413GNU_CC:[000000]GCCLIB/LIBRARY
414SYS$SHARE:VAXCRTL/SHARE
415$EOD
416$!
417$! End The Option File Check.
418$!
419$ ENDIF
420$!
421$! End The GNU C Check.
422$!
423$ ENDIF
424$!
425$! Check To See If We Need A DEC C Option File.
426$!
427$ IF (COMPILER.EQS."DECC")
428$ THEN
429$!
430$! Check To See If We Already Have A DEC C Linker Option File.
431$!
432$ IF (F$SEARCH(OPT_FILE).EQS."")
433$ THEN
434$!
435$! Figure Out If We Need An AXP Or A VAX Linker Option File.
436$!
437$ IF ARCH.EQS."VAX"
438$ THEN
439$!
440$! We Need A DEC C Linker Option File For VAX.
441$!
442$ CREATE 'OPT_FILE'
443$DECK
444!
445! Default System Options File To Link Against
446! The Sharable DEC C Runtime Library.
447!
448SYS$SHARE:DECC$SHR.EXE/SHARE
449$EOD
450$!
451$! Else...
452$!
453$ ELSE
454$!
455$! Create The non-VAX Linker Option File.
456$!
457$ CREATE 'OPT_FILE'
458$DECK
459!
460! Default System Options File For non-VAX To Link Against
461! The Sharable C Runtime Library.
462!
463SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
464SYS$SHARE:CMA$OPEN_RTL/SHARE
465$EOD
466$!
467$! End The DEC C Option File Check.
468$!
469$ ENDIF
470$!
471$! End The Option File Search.
472$!
473$ ENDIF
474$!
475$! End The DEC C Check.
476$!
477$ ENDIF
478$!
479$! Tell The User What Linker Option File We Are Using.
480$!
481$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
482$!
483$! Time To RETURN.
484$!
485$ RETURN
486$!
487$! Check To See If We Have The Appropiate Libraries.
488$!
489$ LIB_CHECK:
490$!
491$! Look For The Library LIBCRYPTO.OLB.
492$!
493$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
494$ THEN
495$!
496$! Tell The User We Can't Find The LIBCRYPTO.OLB Library.
497$!
498$ WRITE SYS$OUTPUT ""
499$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
500$ WRITE SYS$OUTPUT "We Can't Link Without It."
501$ WRITE SYS$OUTPUT ""
502$!
503$! Since We Can't Link Without It, Exit.
504$!
505$ EXIT
506$!
507$! End The Crypto Library Check.
508$!
509$ ENDIF
510$!
511$! Look For The Library LIBSSL.OLB.
512$!
513$ IF (F$SEARCH(SSL_LIB).EQS."")
514$ THEN
515$!
516$! Tell The User We Can't Find The LIBSSL.OLB Library.
517$!
518$ WRITE SYS$OUTPUT ""
519$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
520$ WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
521$ WRITE SYS$OUTPUT ""
522$!
523$! Since We Can't Link Without It, Exit.
524$!
525$ EXIT
526$!
527$! End The SSL Library Check.
528$!
529$ ENDIF
530$!
531$! Time To Return.
532$!
533$ RETURN
534$!
535$! Check The User's Options.
536$!
537$ CHECK_OPTIONS:
538$!
539$! Check To See If P1 Is Blank.
540$!
541$ IF (P1.EQS."NODEBUG")
542$ THEN
543$!
544$! P1 Is NODEBUG, So Compile Without Debugger Information.
545$!
546$ DEBUGGER = "NODEBUG"
547$ LINKMAP = "NOMAP"
548$ TRACEBACK = "NOTRACEBACK"
549$ GCC_OPTIMIZE = "OPTIMIZE"
550$ CC_OPTIMIZE = "OPTIMIZE"
551$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
552$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
553$!
554$! Else...
555$!
556$ ELSE
557$!
558$! Check To See If We Are To Compile With Debugger Information.
559$!
560$ IF (P1.EQS."DEBUG")
561$ THEN
562$!
563$! Compile With Debugger Information.
564$!
565$ DEBUGGER = "DEBUG"
566$ LINKMAP = "MAP"
567$ TRACEBACK = "TRACEBACK"
568$ GCC_OPTIMIZE = "NOOPTIMIZE"
569$ CC_OPTIMIZE = "NOOPTIMIZE"
570$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
571$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
572$ ELSE
573$!
574$! Tell The User Entered An Invalid Option.
575$!
576$ WRITE SYS$OUTPUT ""
577$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
578$ WRITE SYS$OUTPUT ""
579$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
580$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
581$ WRITE SYS$OUTPUT ""
582$!
583$! Time To EXIT.
584$!
585$ EXIT
586$!
587$! End The Valid Argument Check.
588$!
589$ ENDIF
590$!
591$! End The P1 Check.
592$!
593$ ENDIF
594$!
595$! Check P6 (POINTER_SIZE).
596$!
597$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
598$ THEN
599$!
600$ IF (P6 .EQS. "32")
601$ THEN
602$ POINTER_SIZE = " /POINTER_SIZE=32"
603$ ELSE
604$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
605$ IF ((POINTER_SIZE .EQS. "64") .OR. -
606 (POINTER_SIZE .EQS. "64=") .OR. -
607 (POINTER_SIZE .EQS. "64=ARGV"))
608$ THEN
609$ ARCHD = ARCH+ "_64"
610$ LIB32 = ""
611$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
612$ THEN
613$! Explicit user choice: "64" or "64=ARGV".
614$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
615$ ELSE
616$ SET NOON
617$ DEFINE /USER_MODE SYS$OUTPUT NL:
618$ DEFINE /USER_MODE SYS$ERROR NL:
619$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
620$ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
621$ THEN
622$ ! If we got here, it means DCL complained like this:
623$ ! %DCL-W-NOVALU, value not allowed - remove value specification
624$ ! \64=\
625$ !
626$ ! If the compiler was run, logicals defined in /USER would
627$ ! have been deassigned automatically. However, when DCL
628$ ! complains, they aren't, so we do it here (it might be
629$ ! unnecessary, but just in case there will be another error
630$ ! message further on that we don't want to miss)
631$ DEASSIGN /USER_MODE SYS$ERROR
632$ DEASSIGN /USER_MODE SYS$OUTPUT
633$ ELSE
634$ POINTER_SIZE = POINTER_SIZE + "=ARGV"
635$ ENDIF
636$ SET ON
637$ ENDIF
638$ POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
639$!
640$ ELSE
641$!
642$! Tell The User Entered An Invalid Option.
643$!
644$ WRITE SYS$OUTPUT ""
645$ WRITE SYS$OUTPUT "The Option ", P6, -
646 " Is Invalid. The Valid Options Are:"
647$ WRITE SYS$OUTPUT ""
648$ WRITE SYS$OUTPUT -
649 " """" : Compile with default (short) pointers."
650$ WRITE SYS$OUTPUT -
651 " 32 : Compile with 32-bit (short) pointers."
652$ WRITE SYS$OUTPUT -
653 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
654$ WRITE SYS$OUTPUT -
655 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
656$ WRITE SYS$OUTPUT -
657 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
658$ WRITE SYS$OUTPUT ""
659$!
660$! Time To EXIT.
661$!
662$ EXIT
663$!
664$ ENDIF
665$!
666$ ENDIF
667$!
668$! End The P6 (POINTER_SIZE) Check.
669$!
670$ ENDIF
671$!
672$! Set basic C compiler /INCLUDE directories.
673$!
674$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
675$!
676$! Check To See If P2 Is Blank.
677$!
678$ IF (P2.EQS."")
679$ THEN
680$!
681$! O.K., The User Didn't Specify A Compiler, Let's Try To
682$! Find Out Which One To Use.
683$!
684$! Check To See If We Have GNU C.
685$!
686$ IF (F$TRNLNM("GNU_CC").NES."")
687$ THEN
688$!
689$! Looks Like GNUC, Set To Use GNUC.
690$!
691$ P2 = "GNUC"
692$!
693$! Else...
694$!
695$ ELSE
696$!
697$! Check To See If We Have VAXC Or DECC.
698$!
699$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
700$ THEN
701$!
702$! Looks Like DECC, Set To Use DECC.
703$!
704$ P2 = "DECC"
705$!
706$! Else...
707$!
708$ ELSE
709$!
710$! Looks Like VAXC, Set To Use VAXC.
711$!
712$ P2 = "VAXC"
713$!
714$! End The VAXC Compiler Check.
715$!
716$ ENDIF
717$!
718$! End The DECC & VAXC Compiler Check.
719$!
720$ ENDIF
721$!
722$! End The Compiler Check.
723$!
724$ ENDIF
725$!
726$! Check To See If We Have A Option For P3.
727$!
728$ IF (P3.EQS."")
729$ THEN
730$!
731$! Find out what socket library we have available
732$!
733$ IF F$PARSE("SOCKETSHR:") .NES. ""
734$ THEN
735$!
736$! We have SOCKETSHR, and it is my opinion that it's the best to use.
737$!
738$ P3 = "SOCKETSHR"
739$!
740$! Tell the user
741$!
742$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
743$!
744$! Else, let's look for something else
745$!
746$ ELSE
747$!
748$! Like UCX (the reason to do this before Multinet is that the UCX
749$! emulation is easier to use...)
750$!
751$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
752 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
753 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
754$ THEN
755$!
756$! Last resort: a UCX or UCX-compatible library
757$!
758$ P3 = "UCX"
759$!
760$! Tell the user
761$!
762$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
763$!
764$! That was all...
765$!
766$ ENDIF
767$ ENDIF
768$ ENDIF
769$!
770$! Set Up Initial CC Definitions, Possibly With User Ones
771$!
772$ CCDEFS = "MONOLITH"
773$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
774$ CCEXTRAFLAGS = ""
775$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
776$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
777$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
778 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
779$!
780$! Check To See If We Have A ZLIB Option.
781$!
782$ ZLIB = P7
783$ IF (ZLIB .NES. "")
784$ THEN
785$!
786$! Check for expected ZLIB files.
787$!
788$ err = 0
789$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
790$ if (f$search( file1) .eqs. "")
791$ then
792$ WRITE SYS$OUTPUT ""
793$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
794$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
795$ err = 1
796$ endif
797$ file1 = f$parse( "A.;", ZLIB)- "A.;"
798$!
799$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
800$ if (f$search( file2) .eqs. "")
801$ then
802$ if (err .eq. 0)
803$ then
804$ WRITE SYS$OUTPUT ""
805$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
806$ endif
807$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
808$ WRITE SYS$OUTPUT ""
809$ err = err+ 2
810$ endif
811$ if (err .eq. 1)
812$ then
813$ WRITE SYS$OUTPUT ""
814$ endif
815$!
816$ if (err .ne. 0)
817$ then
818$ EXIT
819$ endif
820$!
821$ CCDEFS = """ZLIB=1"", "+ CCDEFS
822$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
823$ ZLIB_LIB = ", ''file2' /library"
824$!
825$! Print info
826$!
827$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
828$!
829$! End The ZLIB Check.
830$!
831$ ENDIF
832$!
833$! Check To See If The User Entered A Valid Parameter.
834$!
835$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
836$ THEN
837$!
838$! Check To See If The User Wanted DECC.
839$!
840$ IF (P2.EQS."DECC")
841$ THEN
842$!
843$! Looks Like DECC, Set To Use DECC.
844$!
845$ COMPILER = "DECC"
846$!
847$! Tell The User We Are Using DECC.
848$!
849$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
850$!
851$! Use DECC...
852$!
853$ CC = "CC"
854$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
855 THEN CC = "CC/DECC"
856$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
857 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
858 " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
859$!
860$! Define The Linker Options File Name.
861$!
862$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
863$!
864$! End DECC Check.
865$!
866$ ENDIF
867$!
868$! Check To See If We Are To Use VAXC.
869$!
870$ IF (P2.EQS."VAXC")
871$ THEN
872$!
873$! Looks Like VAXC, Set To Use VAXC.
874$!
875$ COMPILER = "VAXC"
876$!
877$! Tell The User We Are Using VAX C.
878$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
879$!
880$! Compile Using VAXC.
881$!
882$ CC = "CC"
883$ IF ARCH.NES."VAX"
884$ THEN
885$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
886$ EXIT
887$ ENDIF
888$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
889$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
890 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
891$ CCDEFS = CCDEFS + ",""VAXC"""
892$!
893$! Define <sys> As SYS$COMMON:[SYSLIB]
894$!
895$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
896$!
897$! Define The Linker Options File Name.
898$!
899$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
900$!
901$! End VAXC Check
902$!
903$ ENDIF
904$!
905$! Check To See If We Are To Use GNU C.
906$!
907$ IF (P2.EQS."GNUC")
908$ THEN
909$!
910$! Looks Like GNUC, Set To Use GNUC.
911$!
912$ COMPILER = "GNUC"
913$!
914$! Tell The User We Are Using GNUC.
915$!
916$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
917$!
918$! Use GNU C...
919$!
920$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
921$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
922 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
923$!
924$! Define The Linker Options File Name.
925$!
926$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
927$!
928$! End The GNU C Check.
929$!
930$ ENDIF
931$!
932$! Set up default defines
933$!
934$ CCDEFS = """FLAT_INC=1""," + CCDEFS
935$!
936$! Else The User Entered An Invalid Argument.
937$!
938$ ELSE
939$!
940$! Tell The User We Don't Know What They Want.
941$!
942$ WRITE SYS$OUTPUT ""
943$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
944$ WRITE SYS$OUTPUT ""
945$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
946$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
947$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
948$ WRITE SYS$OUTPUT ""
949$!
950$! Time To EXIT.
951$!
952$ EXIT
953$ ENDIF
954$!
955$! Time to check the contents, and to make sure we get the correct library.
956$!
957$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
958 .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
959$ THEN
960$!
961$! Check to see if SOCKETSHR was chosen
962$!
963$ IF P3.EQS."SOCKETSHR"
964$ THEN
965$!
966$! Set the library to use SOCKETSHR
967$!
968$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
969$!
970$! Done with SOCKETSHR
971$!
972$ ENDIF
973$!
974$! Check to see if MULTINET was chosen
975$!
976$ IF P3.EQS."MULTINET"
977$ THEN
978$!
979$! Set the library to use UCX emulation.
980$!
981$ P3 = "UCX"
982$!
983$! Done with MULTINET
984$!
985$ ENDIF
986$!
987$! Check to see if UCX was chosen
988$!
989$ IF P3.EQS."UCX"
990$ THEN
991$!
992$! Set the library to use UCX.
993$!
994$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
995$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
996$ THEN
997$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
998$ ELSE
999$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1000 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
1001$ ENDIF
1002$!
1003$! Done with UCX
1004$!
1005$ ENDIF
1006$!
1007$! Check to see if TCPIP (post UCX) was chosen
1008$!
1009$ IF P3.EQS."TCPIP"
1010$ THEN
1011$!
1012$! Set the library to use TCPIP.
1013$!
1014$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1015$!
1016$! Done with TCPIP
1017$!
1018$ ENDIF
1019$!
1020$! Check to see if NONE was chosen
1021$!
1022$ IF P3.EQS."NONE"
1023$ THEN
1024$!
1025$! Do not use TCPIP.
1026$!
1027$ TCPIP_LIB = ""
1028$!
1029$! Done with TCPIP
1030$!
1031$ ENDIF
1032$!
1033$! Add TCP/IP type to CC definitions.
1034$!
1035$ CCDEFS = CCDEFS + ",TCPIP_TYPE_''P3'"
1036$!
1037$! Print info
1038$!
1039$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
1040$!
1041$! Else The User Entered An Invalid Argument.
1042$!
1043$ ELSE
1044$!
1045$! Tell The User We Don't Know What They Want.
1046$!
1047$ WRITE SYS$OUTPUT ""
1048$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1049$ WRITE SYS$OUTPUT ""
1050$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1051$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1052$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1053$ WRITE SYS$OUTPUT ""
1054$!
1055$! Time To EXIT.
1056$!
1057$ EXIT
1058$!
1059$! Done with TCP/IP libraries
1060$!
1061$ ENDIF
1062$!
1063$! Finish up the definition of CC.
1064$!
1065$ IF COMPILER .EQS. "DECC"
1066$ THEN
1067$ IF CCDISABLEWARNINGS .NES. ""
1068$ THEN
1069$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
1070$ ENDIF
1071$ ELSE
1072$ CCDISABLEWARNINGS = ""
1073$ ENDIF
1074$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
1075$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
1076$!
1077$! Show user the result
1078$!
1079$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
1080$!
1081$! Special Threads For OpenVMS v7.1 Or Later
1082$!
1083$! Written By: Richard Levitte
1084$! richard@levitte.org
1085$!
1086$!
1087$! Check To See If We Have A Option For P4.
1088$!
1089$ IF (P4.EQS."")
1090$ THEN
1091$!
1092$! Get The Version Of VMS We Are Using.
1093$!
1094$ ISSEVEN :=
1095$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
1096$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
1097$!
1098$! Check To See If The VMS Version Is v7.1 Or Later.
1099$!
1100$ IF (TMP.GE.71)
1101$ THEN
1102$!
1103$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
1104$!
1105$ ISSEVEN := ,PTHREAD_USE_D4
1106$!
1107$! End The VMS Version Check.
1108$!
1109$ ENDIF
1110$!
1111$! End The P4 Check.
1112$!
1113$ ENDIF
1114$!
1115$! Check if the user wanted to compile just a subset of all the programs.
1116$!
1117$ IF P5 .NES. ""
1118$ THEN
1119$ PROGRAMS = P5
1120$ ENDIF
1121$!
1122$! Time To RETURN...
1123$!
1124$ RETURN
1125$!
1126$ INITIALISE:
1127$!
1128$! Save old value of the logical name OPENSSL
1129$!
1130$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1131$!
1132$! Save directory information
1133$!
1134$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1135$ __HERE = F$EDIT(__HERE,"UPCASE")
1136$ __TOP = __HERE - "APPS]"
1137$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1138$!
1139$! Set up the logical name OPENSSL to point at the include directory
1140$!
1141$ DEFINE OPENSSL /NOLOG '__INCLUDE'
1142$!
1143$! Done
1144$!
1145$ RETURN
1146$!
1147$ CLEANUP:
1148$!
1149$! Restore the saved logical name OPENSSL, if it had a value.
1150$!
1151$ if (f$type( __SAVE_OPENSSL) .nes. "")
1152$ then
1153$ IF __SAVE_OPENSSL .EQS. ""
1154$ THEN
1155$ DEASSIGN OPENSSL
1156$ ELSE
1157$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
1158$ ENDIF
1159$ endif
1160$!
1161$! Close any open files.
1162$!
1163$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
1164 close objects
1165$!
1166$! Done
1167$!
1168$ RETURN
1169$!
diff --git a/src/lib/libssl/src/apps/ocsp.c b/src/lib/libssl/src/apps/ocsp.c
index 01847dfad7..83c5a76700 100644
--- a/src/lib/libssl/src/apps/ocsp.c
+++ b/src/lib/libssl/src/apps/ocsp.c
@@ -617,7 +617,7 @@ int MAIN(int argc, char **argv)
617 BIO_printf (bio_err, "-ndays n number of days before next update\n"); 617 BIO_printf (bio_err, "-ndays n number of days before next update\n");
618 BIO_printf (bio_err, "-resp_key_id identify reponse by signing certificate key ID\n"); 618 BIO_printf (bio_err, "-resp_key_id identify reponse by signing certificate key ID\n");
619 BIO_printf (bio_err, "-nrequest n number of requests to accept (default unlimited)\n"); 619 BIO_printf (bio_err, "-nrequest n number of requests to accept (default unlimited)\n");
620 BIO_printf (bio_err, "-<dgst alg> use specified digest in the request"); 620 BIO_printf (bio_err, "-<dgst alg> use specified digest in the request\n");
621 goto end; 621 goto end;
622 } 622 }
623 623
diff --git a/src/lib/libssl/src/apps/openssl.c b/src/lib/libssl/src/apps/openssl.c
index 1c880d90ba..71e1e48ece 100644
--- a/src/lib/libssl/src/apps/openssl.c
+++ b/src/lib/libssl/src/apps/openssl.c
@@ -117,6 +117,7 @@
117#include "apps.h" 117#include "apps.h"
118#include <openssl/bio.h> 118#include <openssl/bio.h>
119#include <openssl/crypto.h> 119#include <openssl/crypto.h>
120#include <openssl/rand.h>
120#include <openssl/lhash.h> 121#include <openssl/lhash.h>
121#include <openssl/conf.h> 122#include <openssl/conf.h>
122#include <openssl/x509.h> 123#include <openssl/x509.h>
diff --git a/src/lib/libssl/src/apps/pkcs12.c b/src/lib/libssl/src/apps/pkcs12.c
index b54c6f84a4..4d62a7b8ca 100644
--- a/src/lib/libssl/src/apps/pkcs12.c
+++ b/src/lib/libssl/src/apps/pkcs12.c
@@ -112,7 +112,7 @@ int MAIN(int argc, char **argv)
112 int maciter = PKCS12_DEFAULT_ITER; 112 int maciter = PKCS12_DEFAULT_ITER;
113 int twopass = 0; 113 int twopass = 0;
114 int keytype = 0; 114 int keytype = 0;
115 int cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; 115 int cert_pbe;
116 int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; 116 int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
117 int ret = 1; 117 int ret = 1;
118 int macver = 1; 118 int macver = 1;
@@ -130,6 +130,13 @@ int MAIN(int argc, char **argv)
130 130
131 apps_startup(); 131 apps_startup();
132 132
133#ifdef OPENSSL_FIPS
134 if (FIPS_mode())
135 cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
136 else
137#endif
138 cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
139
133 enc = EVP_des_ede3_cbc(); 140 enc = EVP_des_ede3_cbc();
134 if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); 141 if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
135 142
diff --git a/src/lib/libssl/src/apps/req.c b/src/lib/libssl/src/apps/req.c
index 85526581ce..5e034a85e8 100644
--- a/src/lib/libssl/src/apps/req.c
+++ b/src/lib/libssl/src/apps/req.c
@@ -644,6 +644,11 @@ bad:
644 if (inrand) 644 if (inrand)
645 app_RAND_load_files(inrand); 645 app_RAND_load_files(inrand);
646 646
647 if (!NCONF_get_number(req_conf,SECTION,BITS, &newkey))
648 {
649 newkey=DEFAULT_KEY_LENGTH;
650 }
651
647 if (keyalg) 652 if (keyalg)
648 { 653 {
649 genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey, 654 genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey,
@@ -652,12 +657,6 @@ bad:
652 goto end; 657 goto end;
653 } 658 }
654 659
655 if (newkey <= 0)
656 {
657 if (!NCONF_get_number(req_conf,SECTION,BITS, &newkey))
658 newkey=DEFAULT_KEY_LENGTH;
659 }
660
661 if (newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA)) 660 if (newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA))
662 { 661 {
663 BIO_printf(bio_err,"private key length is too short,\n"); 662 BIO_printf(bio_err,"private key length is too short,\n");
@@ -1649,6 +1648,8 @@ static EVP_PKEY_CTX *set_keygen_ctx(BIO *err, const char *gstr, int *pkey_type,
1649 keylen = atol(p + 1); 1648 keylen = atol(p + 1);
1650 *pkeylen = keylen; 1649 *pkeylen = keylen;
1651 } 1650 }
1651 else
1652 keylen = *pkeylen;
1652 } 1653 }
1653 else if (p) 1654 else if (p)
1654 paramfile = p + 1; 1655 paramfile = p + 1;
diff --git a/src/lib/libssl/src/apps/s_cb.c b/src/lib/libssl/src/apps/s_cb.c
index 2cd73376df..84c3b447c2 100644
--- a/src/lib/libssl/src/apps/s_cb.c
+++ b/src/lib/libssl/src/apps/s_cb.c
@@ -237,8 +237,8 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
237 237
238 /* If we are using DSA, we can copy the parameters from 238 /* If we are using DSA, we can copy the parameters from
239 * the private key */ 239 * the private key */
240 240
241 241
242 /* Now we know that a key and cert have been set against 242 /* Now we know that a key and cert have been set against
243 * the SSL context */ 243 * the SSL context */
244 if (!SSL_CTX_check_private_key(ctx)) 244 if (!SSL_CTX_check_private_key(ctx))
@@ -436,6 +436,8 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
436 436
437 if (version == SSL3_VERSION || 437 if (version == SSL3_VERSION ||
438 version == TLS1_VERSION || 438 version == TLS1_VERSION ||
439 version == TLS1_1_VERSION ||
440 version == TLS1_2_VERSION ||
439 version == DTLS1_VERSION || 441 version == DTLS1_VERSION ||
440 version == DTLS1_BAD_VER) 442 version == DTLS1_BAD_VER)
441 { 443 {
diff --git a/src/lib/libssl/src/apps/s_client.c b/src/lib/libssl/src/apps/s_client.c
index 5e60c8371b..eb8b8eef67 100644
--- a/src/lib/libssl/src/apps/s_client.c
+++ b/src/lib/libssl/src/apps/s_client.c
@@ -365,12 +365,14 @@ static void sc_usage(void)
365 BIO_printf(bio_err," -tlsextdebug - hex dump of all TLS extensions received\n"); 365 BIO_printf(bio_err," -tlsextdebug - hex dump of all TLS extensions received\n");
366 BIO_printf(bio_err," -status - request certificate status from server\n"); 366 BIO_printf(bio_err," -status - request certificate status from server\n");
367 BIO_printf(bio_err," -no_ticket - disable use of RFC4507bis session tickets\n"); 367 BIO_printf(bio_err," -no_ticket - disable use of RFC4507bis session tickets\n");
368# if !defined(OPENSSL_NO_NEXTPROTONEG) 368# ifndef OPENSSL_NO_NEXTPROTONEG
369 BIO_printf(bio_err," -nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)\n"); 369 BIO_printf(bio_err," -nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)\n");
370# endif 370# endif
371#endif 371#endif
372 BIO_printf(bio_err," -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n"); 372 BIO_printf(bio_err," -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n");
373#ifndef OPENSSL_NO_SRTP
373 BIO_printf(bio_err," -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); 374 BIO_printf(bio_err," -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n");
375#endif
374 BIO_printf(bio_err," -keymatexport label - Export keying material using label\n"); 376 BIO_printf(bio_err," -keymatexport label - Export keying material using label\n");
375 BIO_printf(bio_err," -keymatexportlen len - Export len bytes of keying material (default 20)\n"); 377 BIO_printf(bio_err," -keymatexportlen len - Export len bytes of keying material (default 20)\n");
376 } 378 }
@@ -510,7 +512,9 @@ static char * MS_CALLBACK ssl_give_srp_client_pwd_cb(SSL *s, void *arg)
510 } 512 }
511 513
512#endif 514#endif
515#ifndef OPENSSL_NO_SRTP
513 char *srtp_profiles = NULL; 516 char *srtp_profiles = NULL;
517#endif
514 518
515# ifndef OPENSSL_NO_NEXTPROTONEG 519# ifndef OPENSSL_NO_NEXTPROTONEG
516/* This the context that we pass to next_proto_cb */ 520/* This the context that we pass to next_proto_cb */
@@ -544,7 +548,7 @@ static int next_proto_cb(SSL *s, unsigned char **out, unsigned char *outlen, con
544 ctx->status = SSL_select_next_proto(out, outlen, in, inlen, ctx->data, ctx->len); 548 ctx->status = SSL_select_next_proto(out, outlen, in, inlen, ctx->data, ctx->len);
545 return SSL_TLSEXT_ERR_OK; 549 return SSL_TLSEXT_ERR_OK;
546 } 550 }
547# endif 551# endif /* ndef OPENSSL_NO_NEXTPROTONEG */
548#endif 552#endif
549 553
550enum 554enum
@@ -955,11 +959,13 @@ int MAIN(int argc, char **argv)
955 jpake_secret = *++argv; 959 jpake_secret = *++argv;
956 } 960 }
957#endif 961#endif
962#ifndef OPENSSL_NO_SRTP
958 else if (strcmp(*argv,"-use_srtp") == 0) 963 else if (strcmp(*argv,"-use_srtp") == 0)
959 { 964 {
960 if (--argc < 1) goto bad; 965 if (--argc < 1) goto bad;
961 srtp_profiles = *(++argv); 966 srtp_profiles = *(++argv);
962 } 967 }
968#endif
963 else if (strcmp(*argv,"-keymatexport") == 0) 969 else if (strcmp(*argv,"-keymatexport") == 0)
964 { 970 {
965 if (--argc < 1) goto bad; 971 if (--argc < 1) goto bad;
@@ -1140,6 +1146,8 @@ bad:
1140 BIO_printf(bio_c_out, "PSK key given or JPAKE in use, setting client callback\n"); 1146 BIO_printf(bio_c_out, "PSK key given or JPAKE in use, setting client callback\n");
1141 SSL_CTX_set_psk_client_callback(ctx, psk_client_cb); 1147 SSL_CTX_set_psk_client_callback(ctx, psk_client_cb);
1142 } 1148 }
1149#endif
1150#ifndef OPENSSL_NO_SRTP
1143 if (srtp_profiles != NULL) 1151 if (srtp_profiles != NULL)
1144 SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles); 1152 SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles);
1145#endif 1153#endif
@@ -1905,6 +1913,10 @@ end:
1905 print_stuff(bio_c_out,con,1); 1913 print_stuff(bio_c_out,con,1);
1906 SSL_free(con); 1914 SSL_free(con);
1907 } 1915 }
1916#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
1917 if (next_proto.data)
1918 OPENSSL_free(next_proto.data);
1919#endif
1908 if (ctx != NULL) SSL_CTX_free(ctx); 1920 if (ctx != NULL) SSL_CTX_free(ctx);
1909 if (cert) 1921 if (cert)
1910 X509_free(cert); 1922 X509_free(cert);
@@ -1912,6 +1924,8 @@ end:
1912 EVP_PKEY_free(key); 1924 EVP_PKEY_free(key);
1913 if (pass) 1925 if (pass)
1914 OPENSSL_free(pass); 1926 OPENSSL_free(pass);
1927 if (vpm)
1928 X509_VERIFY_PARAM_free(vpm);
1915 if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); } 1929 if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); OPENSSL_free(cbuf); }
1916 if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); OPENSSL_free(sbuf); } 1930 if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); OPENSSL_free(sbuf); }
1917 if (mbuf != NULL) { OPENSSL_cleanse(mbuf,BUFSIZZ); OPENSSL_free(mbuf); } 1931 if (mbuf != NULL) { OPENSSL_cleanse(mbuf,BUFSIZZ); OPENSSL_free(mbuf); }
@@ -2076,6 +2090,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
2076 } 2090 }
2077#endif 2091#endif
2078 2092
2093#ifndef OPENSSL_NO_SRTP
2079 { 2094 {
2080 SRTP_PROTECTION_PROFILE *srtp_profile=SSL_get_selected_srtp_profile(s); 2095 SRTP_PROTECTION_PROFILE *srtp_profile=SSL_get_selected_srtp_profile(s);
2081 2096
@@ -2083,6 +2098,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
2083 BIO_printf(bio,"SRTP Extension negotiated, profile=%s\n", 2098 BIO_printf(bio,"SRTP Extension negotiated, profile=%s\n",
2084 srtp_profile->name); 2099 srtp_profile->name);
2085 } 2100 }
2101#endif
2086 2102
2087 SSL_SESSION_print(bio,SSL_get_session(s)); 2103 SSL_SESSION_print(bio,SSL_get_session(s));
2088 if (keymatexportlabel != NULL) 2104 if (keymatexportlabel != NULL)
diff --git a/src/lib/libssl/src/apps/s_server.c b/src/lib/libssl/src/apps/s_server.c
index 3f9b3704c6..8198d7f065 100644
--- a/src/lib/libssl/src/apps/s_server.c
+++ b/src/lib/libssl/src/apps/s_server.c
@@ -556,7 +556,9 @@ static void sv_usage(void)
556# ifndef OPENSSL_NO_NEXTPROTONEG 556# ifndef OPENSSL_NO_NEXTPROTONEG
557 BIO_printf(bio_err," -nextprotoneg arg - set the advertised protocols for the NPN extension (comma-separated list)\n"); 557 BIO_printf(bio_err," -nextprotoneg arg - set the advertised protocols for the NPN extension (comma-separated list)\n");
558# endif 558# endif
559# ifndef OPENSSL_NO_SRTP
559 BIO_printf(bio_err," -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); 560 BIO_printf(bio_err," -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n");
561# endif
560#endif 562#endif
561 BIO_printf(bio_err," -keymatexport label - Export keying material using label\n"); 563 BIO_printf(bio_err," -keymatexport label - Export keying material using label\n");
562 BIO_printf(bio_err," -keymatexportlen len - Export len bytes of keying material (default 20)\n"); 564 BIO_printf(bio_err," -keymatexportlen len - Export len bytes of keying material (default 20)\n");
@@ -923,7 +925,9 @@ static char *jpake_secret = NULL;
923#ifndef OPENSSL_NO_SRP 925#ifndef OPENSSL_NO_SRP
924 static srpsrvparm srp_callback_parm; 926 static srpsrvparm srp_callback_parm;
925#endif 927#endif
928#ifndef OPENSSL_NO_SRTP
926static char *srtp_profiles = NULL; 929static char *srtp_profiles = NULL;
930#endif
927 931
928int MAIN(int argc, char *argv[]) 932int MAIN(int argc, char *argv[])
929 { 933 {
@@ -1206,13 +1210,13 @@ int MAIN(int argc, char *argv[])
1206 { 1210 {
1207 if (--argc < 1) goto bad; 1211 if (--argc < 1) goto bad;
1208 srp_verifier_file = *(++argv); 1212 srp_verifier_file = *(++argv);
1209 meth=TLSv1_server_method(); 1213 meth = TLSv1_server_method();
1210 } 1214 }
1211 else if (strcmp(*argv, "-srpuserseed") == 0) 1215 else if (strcmp(*argv, "-srpuserseed") == 0)
1212 { 1216 {
1213 if (--argc < 1) goto bad; 1217 if (--argc < 1) goto bad;
1214 srpuserseed = *(++argv); 1218 srpuserseed = *(++argv);
1215 meth=TLSv1_server_method(); 1219 meth = TLSv1_server_method();
1216 } 1220 }
1217#endif 1221#endif
1218 else if (strcmp(*argv,"-www") == 0) 1222 else if (strcmp(*argv,"-www") == 0)
@@ -1319,11 +1323,13 @@ int MAIN(int argc, char *argv[])
1319 jpake_secret = *(++argv); 1323 jpake_secret = *(++argv);
1320 } 1324 }
1321#endif 1325#endif
1326#ifndef OPENSSL_NO_SRTP
1322 else if (strcmp(*argv,"-use_srtp") == 0) 1327 else if (strcmp(*argv,"-use_srtp") == 0)
1323 { 1328 {
1324 if (--argc < 1) goto bad; 1329 if (--argc < 1) goto bad;
1325 srtp_profiles = *(++argv); 1330 srtp_profiles = *(++argv);
1326 } 1331 }
1332#endif
1327 else if (strcmp(*argv,"-keymatexport") == 0) 1333 else if (strcmp(*argv,"-keymatexport") == 0)
1328 { 1334 {
1329 if (--argc < 1) goto bad; 1335 if (--argc < 1) goto bad;
@@ -1431,25 +1437,24 @@ bad:
1431 goto end; 1437 goto end;
1432 } 1438 }
1433 } 1439 }
1434
1435# ifndef OPENSSL_NO_NEXTPROTONEG
1436 if (next_proto_neg_in)
1437 {
1438 unsigned short len;
1439 next_proto.data = next_protos_parse(&len,
1440 next_proto_neg_in);
1441 if (next_proto.data == NULL)
1442 goto end;
1443 next_proto.len = len;
1444 }
1445 else
1446 {
1447 next_proto.data = NULL;
1448 }
1449# endif
1450#endif 1440#endif
1451 } 1441 }
1452 1442
1443#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
1444 if (next_proto_neg_in)
1445 {
1446 unsigned short len;
1447 next_proto.data = next_protos_parse(&len, next_proto_neg_in);
1448 if (next_proto.data == NULL)
1449 goto end;
1450 next_proto.len = len;
1451 }
1452 else
1453 {
1454 next_proto.data = NULL;
1455 }
1456#endif
1457
1453 1458
1454 if (s_dcert_file) 1459 if (s_dcert_file)
1455 { 1460 {
@@ -1550,8 +1555,10 @@ bad:
1550 else 1555 else
1551 SSL_CTX_sess_set_cache_size(ctx,128); 1556 SSL_CTX_sess_set_cache_size(ctx,128);
1552 1557
1558#ifndef OPENSSL_NO_SRTP
1553 if (srtp_profiles != NULL) 1559 if (srtp_profiles != NULL)
1554 SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles); 1560 SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles);
1561#endif
1555 1562
1556#if 0 1563#if 0
1557 if (cipher == NULL) cipher=getenv("SSL_CIPHER"); 1564 if (cipher == NULL) cipher=getenv("SSL_CIPHER");
@@ -1730,7 +1737,7 @@ bad:
1730 } 1737 }
1731#endif 1738#endif
1732 1739
1733 if (!set_cert_key_stuff(ctx,s_cert,s_key)) 1740 if (!set_cert_key_stuff(ctx, s_cert, s_key))
1734 goto end; 1741 goto end;
1735#ifndef OPENSSL_NO_TLSEXT 1742#ifndef OPENSSL_NO_TLSEXT
1736 if (ctx2 && !set_cert_key_stuff(ctx2,s_cert2,s_key2)) 1743 if (ctx2 && !set_cert_key_stuff(ctx2,s_cert2,s_key2))
@@ -1738,7 +1745,7 @@ bad:
1738#endif 1745#endif
1739 if (s_dcert != NULL) 1746 if (s_dcert != NULL)
1740 { 1747 {
1741 if (!set_cert_key_stuff(ctx,s_dcert,s_dkey)) 1748 if (!set_cert_key_stuff(ctx, s_dcert, s_dkey))
1742 goto end; 1749 goto end;
1743 } 1750 }
1744 1751
@@ -1893,7 +1900,15 @@ end:
1893 OPENSSL_free(pass); 1900 OPENSSL_free(pass);
1894 if (dpass) 1901 if (dpass)
1895 OPENSSL_free(dpass); 1902 OPENSSL_free(dpass);
1903 if (vpm)
1904 X509_VERIFY_PARAM_free(vpm);
1896#ifndef OPENSSL_NO_TLSEXT 1905#ifndef OPENSSL_NO_TLSEXT
1906 if (tlscstatp.host)
1907 OPENSSL_free(tlscstatp.host);
1908 if (tlscstatp.port)
1909 OPENSSL_free(tlscstatp.port);
1910 if (tlscstatp.path)
1911 OPENSSL_free(tlscstatp.path);
1897 if (ctx2 != NULL) SSL_CTX_free(ctx2); 1912 if (ctx2 != NULL) SSL_CTX_free(ctx2);
1898 if (s_cert2) 1913 if (s_cert2)
1899 X509_free(s_cert2); 1914 X509_free(s_cert2);
@@ -2433,6 +2448,7 @@ static int init_ssl_connection(SSL *con)
2433 BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf); 2448 BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf);
2434 str=SSL_CIPHER_get_name(SSL_get_current_cipher(con)); 2449 str=SSL_CIPHER_get_name(SSL_get_current_cipher(con));
2435 BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)"); 2450 BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)");
2451
2436#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) 2452#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
2437 SSL_get0_next_proto_negotiated(con, &next_proto_neg, &next_proto_neg_len); 2453 SSL_get0_next_proto_negotiated(con, &next_proto_neg, &next_proto_neg_len);
2438 if (next_proto_neg) 2454 if (next_proto_neg)
@@ -2442,6 +2458,7 @@ static int init_ssl_connection(SSL *con)
2442 BIO_printf(bio_s_out, "\n"); 2458 BIO_printf(bio_s_out, "\n");
2443 } 2459 }
2444#endif 2460#endif
2461#ifndef OPENSSL_NO_SRTP
2445 { 2462 {
2446 SRTP_PROTECTION_PROFILE *srtp_profile 2463 SRTP_PROTECTION_PROFILE *srtp_profile
2447 = SSL_get_selected_srtp_profile(con); 2464 = SSL_get_selected_srtp_profile(con);
@@ -2450,6 +2467,7 @@ static int init_ssl_connection(SSL *con)
2450 BIO_printf(bio_s_out,"SRTP Extension negotiated, profile=%s\n", 2467 BIO_printf(bio_s_out,"SRTP Extension negotiated, profile=%s\n",
2451 srtp_profile->name); 2468 srtp_profile->name);
2452 } 2469 }
2470#endif
2453 if (SSL_cache_hit(con)) BIO_printf(bio_s_out,"Reused session-id\n"); 2471 if (SSL_cache_hit(con)) BIO_printf(bio_s_out,"Reused session-id\n");
2454 if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) & 2472 if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) &
2455 TLS1_FLAGS_TLS_PADDING_BUG) 2473 TLS1_FLAGS_TLS_PADDING_BUG)
@@ -2701,6 +2719,11 @@ static int www_body(char *hostname, int s, unsigned char *context)
2701 } 2719 }
2702 BIO_puts(io,"\n"); 2720 BIO_puts(io,"\n");
2703 2721
2722 BIO_printf(io,
2723 "Secure Renegotiation IS%s supported\n",
2724 SSL_get_secure_renegotiation_support(con) ?
2725 "" : " NOT");
2726
2704 /* The following is evil and should not really 2727 /* The following is evil and should not really
2705 * be done */ 2728 * be done */
2706 BIO_printf(io,"Ciphers supported in s_server binary\n"); 2729 BIO_printf(io,"Ciphers supported in s_server binary\n");
diff --git a/src/lib/libssl/src/apps/speed.c b/src/lib/libssl/src/apps/speed.c
index 8358b12fdd..9886ca3766 100644
--- a/src/lib/libssl/src/apps/speed.c
+++ b/src/lib/libssl/src/apps/speed.c
@@ -254,7 +254,7 @@ static const char *names[ALGOR_NUM]={
254 "aes-128 cbc","aes-192 cbc","aes-256 cbc", 254 "aes-128 cbc","aes-192 cbc","aes-256 cbc",
255 "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc", 255 "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc",
256 "evp","sha256","sha512","whirlpool", 256 "evp","sha256","sha512","whirlpool",
257 "aes-128 ige","aes-192 ige","aes-256 ige","ghash"}; 257 "aes-128 ige","aes-192 ige","aes-256 ige","ghash" };
258static double results[ALGOR_NUM][SIZE_NUM]; 258static double results[ALGOR_NUM][SIZE_NUM];
259static int lengths[SIZE_NUM]={16,64,256,1024,8*1024}; 259static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
260#ifndef OPENSSL_NO_RSA 260#ifndef OPENSSL_NO_RSA
@@ -299,7 +299,7 @@ static SIGRETTYPE sig_done(int sig)
299#if defined(_WIN32) 299#if defined(_WIN32)
300 300
301#if !defined(SIGALRM) 301#if !defined(SIGALRM)
302#define SIGALRM 302# define SIGALRM
303#endif 303#endif
304static unsigned int lapse,schlock; 304static unsigned int lapse,schlock;
305static void alarm_win32(unsigned int secs) { lapse = secs*1000; } 305static void alarm_win32(unsigned int secs) { lapse = secs*1000; }
diff --git a/src/lib/libssl/src/apps/tsget b/src/lib/libssl/src/apps/tsget
index 482b8cae3f..c8ad4b8338 100644
--- a/src/lib/libssl/src/apps/tsget
+++ b/src/lib/libssl/src/apps/tsget
@@ -1,7 +1,7 @@
1#!/usr/bin/perl -w 1#!/usr/bin/perl -w
2# Written by Zoltan Glozik <zglozik@stones.com>. 2# Written by Zoltan Glozik <zglozik@stones.com>.
3# Copyright (c) 2002 The OpenTSA Project. All rights reserved. 3# Copyright (c) 2002 The OpenTSA Project. All rights reserved.
4$::version = '$Id: tsget,v 1.2 2010/10/01 22:58:51 djm Exp $'; 4$::version = '$Id: tsget,v 1.3 2014/04/13 15:25:28 miod Exp $';
5 5
6use strict; 6use strict;
7use IO::Handle; 7use IO::Handle;
diff --git a/src/lib/libssl/src/apps/verify.c b/src/lib/libssl/src/apps/verify.c
index b9749dcd36..893670ff41 100644
--- a/src/lib/libssl/src/apps/verify.c
+++ b/src/lib/libssl/src/apps/verify.c
@@ -222,11 +222,19 @@ int MAIN(int argc, char **argv)
222 goto end; 222 goto end;
223 } 223 }
224 224
225 if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, crls, e); 225 ret = 0;
226 if (argc < 1)
227 {
228 if (1 != check(cert_ctx, NULL, untrusted, trusted, crls, e))
229 ret = -1;
230 }
226 else 231 else
232 {
227 for (i=0; i<argc; i++) 233 for (i=0; i<argc; i++)
228 check(cert_ctx,argv[i], untrusted, trusted, crls, e); 234 if (1 != check(cert_ctx,argv[i], untrusted, trusted, crls, e))
229 ret=0; 235 ret = -1;
236 }
237
230end: 238end:
231 if (ret == 1) { 239 if (ret == 1) {
232 BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]"); 240 BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
@@ -235,13 +243,16 @@ end:
235 BIO_printf(bio_err," [-engine e]"); 243 BIO_printf(bio_err," [-engine e]");
236#endif 244#endif
237 BIO_printf(bio_err," cert1 cert2 ...\n"); 245 BIO_printf(bio_err," cert1 cert2 ...\n");
246
238 BIO_printf(bio_err,"recognized usages:\n"); 247 BIO_printf(bio_err,"recognized usages:\n");
239 for(i = 0; i < X509_PURPOSE_get_count(); i++) { 248 for(i = 0; i < X509_PURPOSE_get_count(); i++)
249 {
240 X509_PURPOSE *ptmp; 250 X509_PURPOSE *ptmp;
241 ptmp = X509_PURPOSE_get0(i); 251 ptmp = X509_PURPOSE_get0(i);
242 BIO_printf(bio_err, "\t%-10s\t%s\n", X509_PURPOSE_get0_sname(ptmp), 252 BIO_printf(bio_err, "\t%-10s\t%s\n",
243 X509_PURPOSE_get0_name(ptmp)); 253 X509_PURPOSE_get0_sname(ptmp),
244 } 254 X509_PURPOSE_get0_name(ptmp));
255 }
245 } 256 }
246 if (vpm) X509_VERIFY_PARAM_free(vpm); 257 if (vpm) X509_VERIFY_PARAM_free(vpm);
247 if (cert_ctx != NULL) X509_STORE_free(cert_ctx); 258 if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
@@ -249,7 +260,7 @@ end:
249 sk_X509_pop_free(trusted, X509_free); 260 sk_X509_pop_free(trusted, X509_free);
250 sk_X509_CRL_pop_free(crls, X509_CRL_free); 261 sk_X509_CRL_pop_free(crls, X509_CRL_free);
251 apps_shutdown(); 262 apps_shutdown();
252 OPENSSL_EXIT(ret); 263 OPENSSL_EXIT(ret < 0 ? 2 : ret);
253 } 264 }
254 265
255static int check(X509_STORE *ctx, char *file, 266static int check(X509_STORE *ctx, char *file,
diff --git a/src/lib/libssl/src/apps/x509.c b/src/lib/libssl/src/apps/x509.c
index e6e5e0d4e5..3863ab968d 100644
--- a/src/lib/libssl/src/apps/x509.c
+++ b/src/lib/libssl/src/apps/x509.c
@@ -288,7 +288,7 @@ int MAIN(int argc, char **argv)
288 days=atoi(*(++argv)); 288 days=atoi(*(++argv));
289 if (days == 0) 289 if (days == 0)
290 { 290 {
291 BIO_printf(STDout,"bad number of days\n"); 291 BIO_printf(bio_err,"bad number of days\n");
292 goto bad; 292 goto bad;
293 } 293 }
294 } 294 }
@@ -912,7 +912,7 @@ bad:
912 } 912 }
913 else if (text == i) 913 else if (text == i)
914 { 914 {
915 X509_print_ex(out,x,nmflag, certflag); 915 X509_print_ex(STDout,x,nmflag, certflag);
916 } 916 }
917 else if (startdate == i) 917 else if (startdate == i)
918 { 918 {
diff --git a/src/lib/libssl/src/crypto/aes/asm/aes-x86_64.pl b/src/lib/libssl/src/crypto/aes/asm/aes-x86_64.pl
index 48fa857d5b..34cbb5d844 100755
--- a/src/lib/libssl/src/crypto/aes/asm/aes-x86_64.pl
+++ b/src/lib/libssl/src/crypto/aes/asm/aes-x86_64.pl
@@ -36,7 +36,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
36( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 36( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
37die "can't locate x86_64-xlate.pl"; 37die "can't locate x86_64-xlate.pl";
38 38
39open STDOUT,"| $^X $xlate $flavour $output"; 39open OUT,"| \"$^X\" $xlate $flavour $output";
40*STDOUT=*OUT;
40 41
41$verticalspin=1; # unlike 32-bit version $verticalspin performs 42$verticalspin=1; # unlike 32-bit version $verticalspin performs
42 # ~15% better on both AMD and Intel cores 43 # ~15% better on both AMD and Intel cores
diff --git a/src/lib/libssl/src/crypto/aes/asm/aesni-x86_64.pl b/src/lib/libssl/src/crypto/aes/asm/aesni-x86_64.pl
index 499f3b3f42..0dbb194b8d 100644
--- a/src/lib/libssl/src/crypto/aes/asm/aesni-x86_64.pl
+++ b/src/lib/libssl/src/crypto/aes/asm/aesni-x86_64.pl
@@ -172,7 +172,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
172( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 172( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
173die "can't locate x86_64-xlate.pl"; 173die "can't locate x86_64-xlate.pl";
174 174
175open STDOUT,"| $^X $xlate $flavour $output"; 175open OUT,"| \"$^X\" $xlate $flavour $output";
176*STDOUT=*OUT;
176 177
177$movkey = $PREFIX eq "aesni" ? "movups" : "movups"; 178$movkey = $PREFIX eq "aesni" ? "movups" : "movups";
178@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order 179@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order
diff --git a/src/lib/libssl/src/crypto/asn1/a_int.c b/src/lib/libssl/src/crypto/asn1/a_int.c
index ad0d2506f6..297c45a9ff 100644
--- a/src/lib/libssl/src/crypto/asn1/a_int.c
+++ b/src/lib/libssl/src/crypto/asn1/a_int.c
@@ -116,7 +116,7 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
116 int pad=0,ret,i,neg; 116 int pad=0,ret,i,neg;
117 unsigned char *p,*n,pb=0; 117 unsigned char *p,*n,pb=0;
118 118
119 if ((a == NULL) || (a->data == NULL)) return(0); 119 if (a == NULL) return(0);
120 neg=a->type & V_ASN1_NEG; 120 neg=a->type & V_ASN1_NEG;
121 if (a->length == 0) 121 if (a->length == 0)
122 ret=1; 122 ret=1;
diff --git a/src/lib/libssl/src/crypto/asn1/a_strex.c b/src/lib/libssl/src/crypto/asn1/a_strex.c
index 264ebf2393..ead37ac325 100644
--- a/src/lib/libssl/src/crypto/asn1/a_strex.c
+++ b/src/lib/libssl/src/crypto/asn1/a_strex.c
@@ -567,6 +567,7 @@ int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in)
567 if(mbflag == -1) return -1; 567 if(mbflag == -1) return -1;
568 mbflag |= MBSTRING_FLAG; 568 mbflag |= MBSTRING_FLAG;
569 stmp.data = NULL; 569 stmp.data = NULL;
570 stmp.length = 0;
570 ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING); 571 ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING);
571 if(ret < 0) return ret; 572 if(ret < 0) return ret;
572 *out = stmp.data; 573 *out = stmp.data;
diff --git a/src/lib/libssl/src/crypto/asn1/asn1_err.c b/src/lib/libssl/src/crypto/asn1/asn1_err.c
index 1a30bf119b..aa60203ba8 100644
--- a/src/lib/libssl/src/crypto/asn1/asn1_err.c
+++ b/src/lib/libssl/src/crypto/asn1/asn1_err.c
@@ -305,7 +305,7 @@ static ERR_STRING_DATA ASN1_str_reasons[]=
305{ERR_REASON(ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE),"unknown public key type"}, 305{ERR_REASON(ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE),"unknown public key type"},
306{ERR_REASON(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM),"unknown signature algorithm"}, 306{ERR_REASON(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM),"unknown signature algorithm"},
307{ERR_REASON(ASN1_R_UNKNOWN_TAG) ,"unknown tag"}, 307{ERR_REASON(ASN1_R_UNKNOWN_TAG) ,"unknown tag"},
308{ERR_REASON(ASN1_R_UNKOWN_FORMAT) ,"unkown format"}, 308{ERR_REASON(ASN1_R_UNKOWN_FORMAT) ,"unknown format"},
309{ERR_REASON(ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE),"unsupported any defined by type"}, 309{ERR_REASON(ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE),"unsupported any defined by type"},
310{ERR_REASON(ASN1_R_UNSUPPORTED_CIPHER) ,"unsupported cipher"}, 310{ERR_REASON(ASN1_R_UNSUPPORTED_CIPHER) ,"unsupported cipher"},
311{ERR_REASON(ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM),"unsupported encryption algorithm"}, 311{ERR_REASON(ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM),"unsupported encryption algorithm"},
diff --git a/src/lib/libssl/src/crypto/asn1/x_pubkey.c b/src/lib/libssl/src/crypto/asn1/x_pubkey.c
index 627ec87f9f..b649e1fcf9 100644
--- a/src/lib/libssl/src/crypto/asn1/x_pubkey.c
+++ b/src/lib/libssl/src/crypto/asn1/x_pubkey.c
@@ -175,12 +175,15 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
175 CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY); 175 CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY);
176 if (key->pkey) 176 if (key->pkey)
177 { 177 {
178 CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
178 EVP_PKEY_free(ret); 179 EVP_PKEY_free(ret);
179 ret = key->pkey; 180 ret = key->pkey;
180 } 181 }
181 else 182 else
183 {
182 key->pkey = ret; 184 key->pkey = ret;
183 CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY); 185 CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
186 }
184 CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY); 187 CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
185 188
186 return ret; 189 return ret;
diff --git a/src/lib/libssl/src/crypto/bio/bss_dgram.c b/src/lib/libssl/src/crypto/bio/bss_dgram.c
index 1b1e4bec81..54c012c47d 100644
--- a/src/lib/libssl/src/crypto/bio/bss_dgram.c
+++ b/src/lib/libssl/src/crypto/bio/bss_dgram.c
@@ -77,10 +77,20 @@
77#define OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE 0xc0 77#define OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE 0xc0
78#endif 78#endif
79 79
80#ifdef OPENSSL_SYS_LINUX 80#if defined(OPENSSL_SYS_LINUX) && !defined(IP_MTU)
81#define IP_MTU 14 /* linux is lame */ 81#define IP_MTU 14 /* linux is lame */
82#endif 82#endif
83 83
84#if defined(__FreeBSD__) && defined(IN6_IS_ADDR_V4MAPPED)
85/* Standard definition causes type-punning problems. */
86#undef IN6_IS_ADDR_V4MAPPED
87#define s6_addr32 __u6_addr.__u6_addr32
88#define IN6_IS_ADDR_V4MAPPED(a) \
89 (((a)->s6_addr32[0] == 0) && \
90 ((a)->s6_addr32[1] == 0) && \
91 ((a)->s6_addr32[2] == htonl(0x0000ffff)))
92#endif
93
84#ifdef WATT32 94#ifdef WATT32
85#define sock_write SockWrite /* Watt-32 uses same names */ 95#define sock_write SockWrite /* Watt-32 uses same names */
86#define sock_read SockRead 96#define sock_read SockRead
@@ -255,7 +265,7 @@ static void dgram_adjust_rcv_timeout(BIO *b)
255 { 265 {
256#if defined(SO_RCVTIMEO) 266#if defined(SO_RCVTIMEO)
257 bio_dgram_data *data = (bio_dgram_data *)b->ptr; 267 bio_dgram_data *data = (bio_dgram_data *)b->ptr;
258 int sz = sizeof(int); 268 union { size_t s; int i; } sz = {0};
259 269
260 /* Is a timer active? */ 270 /* Is a timer active? */
261 if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) 271 if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0)
@@ -265,8 +275,10 @@ static void dgram_adjust_rcv_timeout(BIO *b)
265 /* Read current socket timeout */ 275 /* Read current socket timeout */
266#ifdef OPENSSL_SYS_WINDOWS 276#ifdef OPENSSL_SYS_WINDOWS
267 int timeout; 277 int timeout;
278
279 sz.i = sizeof(timeout);
268 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 280 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
269 (void*)&timeout, &sz) < 0) 281 (void*)&timeout, &sz.i) < 0)
270 { perror("getsockopt"); } 282 { perror("getsockopt"); }
271 else 283 else
272 { 284 {
@@ -274,9 +286,12 @@ static void dgram_adjust_rcv_timeout(BIO *b)
274 data->socket_timeout.tv_usec = (timeout % 1000) * 1000; 286 data->socket_timeout.tv_usec = (timeout % 1000) * 1000;
275 } 287 }
276#else 288#else
289 sz.i = sizeof(data->socket_timeout);
277 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 290 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
278 &(data->socket_timeout), (void *)&sz) < 0) 291 &(data->socket_timeout), (void *)&sz) < 0)
279 { perror("getsockopt"); } 292 { perror("getsockopt"); }
293 else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0)
294 OPENSSL_assert(sz.s<=sizeof(data->socket_timeout));
280#endif 295#endif
281 296
282 /* Get current time */ 297 /* Get current time */
@@ -445,11 +460,10 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
445 int *ip; 460 int *ip;
446 struct sockaddr *to = NULL; 461 struct sockaddr *to = NULL;
447 bio_dgram_data *data = NULL; 462 bio_dgram_data *data = NULL;
448#if defined(IP_MTU_DISCOVER) || defined(IP_MTU) 463#if defined(OPENSSL_SYS_LINUX) && (defined(IP_MTU_DISCOVER) || defined(IP_MTU))
449 long sockopt_val = 0; 464 int sockopt_val = 0;
450 unsigned int sockopt_len = 0; 465 socklen_t sockopt_len; /* assume that system supporting IP_MTU is
451#endif 466 * modern enough to define socklen_t */
452#ifdef OPENSSL_SYS_LINUX
453 socklen_t addr_len; 467 socklen_t addr_len;
454 union { 468 union {
455 struct sockaddr sa; 469 struct sockaddr sa;
@@ -531,7 +545,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
531 break; 545 break;
532 /* (Linux)kernel sets DF bit on outgoing IP packets */ 546 /* (Linux)kernel sets DF bit on outgoing IP packets */
533 case BIO_CTRL_DGRAM_MTU_DISCOVER: 547 case BIO_CTRL_DGRAM_MTU_DISCOVER:
534#ifdef OPENSSL_SYS_LINUX 548#if defined(OPENSSL_SYS_LINUX) && defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO)
535 addr_len = (socklen_t)sizeof(addr); 549 addr_len = (socklen_t)sizeof(addr);
536 memset((void *)&addr, 0, sizeof(addr)); 550 memset((void *)&addr, 0, sizeof(addr));
537 if (getsockname(b->num, &addr.sa, &addr_len) < 0) 551 if (getsockname(b->num, &addr.sa, &addr_len) < 0)
@@ -539,7 +553,6 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
539 ret = 0; 553 ret = 0;
540 break; 554 break;
541 } 555 }
542 sockopt_len = sizeof(sockopt_val);
543 switch (addr.sa.sa_family) 556 switch (addr.sa.sa_family)
544 { 557 {
545 case AF_INET: 558 case AF_INET:
@@ -548,7 +561,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
548 &sockopt_val, sizeof(sockopt_val))) < 0) 561 &sockopt_val, sizeof(sockopt_val))) < 0)
549 perror("setsockopt"); 562 perror("setsockopt");
550 break; 563 break;
551#if OPENSSL_USE_IPV6 && defined(IPV6_MTU_DISCOVER) 564#if OPENSSL_USE_IPV6 && defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO)
552 case AF_INET6: 565 case AF_INET6:
553 sockopt_val = IPV6_PMTUDISC_DO; 566 sockopt_val = IPV6_PMTUDISC_DO;
554 if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER, 567 if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
@@ -565,7 +578,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
565 break; 578 break;
566#endif 579#endif
567 case BIO_CTRL_DGRAM_QUERY_MTU: 580 case BIO_CTRL_DGRAM_QUERY_MTU:
568#ifdef OPENSSL_SYS_LINUX 581#if defined(OPENSSL_SYS_LINUX) && defined(IP_MTU)
569 addr_len = (socklen_t)sizeof(addr); 582 addr_len = (socklen_t)sizeof(addr);
570 memset((void *)&addr, 0, sizeof(addr)); 583 memset((void *)&addr, 0, sizeof(addr));
571 if (getsockname(b->num, &addr.sa, &addr_len) < 0) 584 if (getsockname(b->num, &addr.sa, &addr_len) < 0)
@@ -727,12 +740,15 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
727#endif 740#endif
728 break; 741 break;
729 case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: 742 case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT:
730#ifdef OPENSSL_SYS_WINDOWS
731 { 743 {
732 int timeout, sz = sizeof(timeout); 744 union { size_t s; int i; } sz = {0};
745#ifdef OPENSSL_SYS_WINDOWS
746 int timeout;
733 struct timeval *tv = (struct timeval *)ptr; 747 struct timeval *tv = (struct timeval *)ptr;
748
749 sz.i = sizeof(timeout);
734 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 750 if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
735 (void*)&timeout, &sz) < 0) 751 (void*)&timeout, &sz.i) < 0)
736 { perror("getsockopt"); ret = -1; } 752 { perror("getsockopt"); ret = -1; }
737 else 753 else
738 { 754 {
@@ -740,12 +756,20 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
740 tv->tv_usec = (timeout % 1000) * 1000; 756 tv->tv_usec = (timeout % 1000) * 1000;
741 ret = sizeof(*tv); 757 ret = sizeof(*tv);
742 } 758 }
743 }
744#else 759#else
760 sz.i = sizeof(struct timeval);
745 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, 761 if ( getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO,
746 ptr, (void *)&ret) < 0) 762 ptr, (void *)&sz) < 0)
747 { perror("getsockopt"); ret = -1; } 763 { perror("getsockopt"); ret = -1; }
764 else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0)
765 {
766 OPENSSL_assert(sz.s<=sizeof(struct timeval));
767 ret = (int)sz.s;
768 }
769 else
770 ret = sz.i;
748#endif 771#endif
772 }
749 break; 773 break;
750#endif 774#endif
751#if defined(SO_SNDTIMEO) 775#if defined(SO_SNDTIMEO)
@@ -765,12 +789,15 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
765#endif 789#endif
766 break; 790 break;
767 case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: 791 case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT:
768#ifdef OPENSSL_SYS_WINDOWS
769 { 792 {
770 int timeout, sz = sizeof(timeout); 793 union { size_t s; int i; } sz = {0};
794#ifdef OPENSSL_SYS_WINDOWS
795 int timeout;
771 struct timeval *tv = (struct timeval *)ptr; 796 struct timeval *tv = (struct timeval *)ptr;
797
798 sz.i = sizeof(timeout);
772 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, 799 if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
773 (void*)&timeout, &sz) < 0) 800 (void*)&timeout, &sz.i) < 0)
774 { perror("getsockopt"); ret = -1; } 801 { perror("getsockopt"); ret = -1; }
775 else 802 else
776 { 803 {
@@ -778,12 +805,20 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
778 tv->tv_usec = (timeout % 1000) * 1000; 805 tv->tv_usec = (timeout % 1000) * 1000;
779 ret = sizeof(*tv); 806 ret = sizeof(*tv);
780 } 807 }
781 }
782#else 808#else
809 sz.i = sizeof(struct timeval);
783 if ( getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, 810 if ( getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO,
784 ptr, (void *)&ret) < 0) 811 ptr, (void *)&sz) < 0)
785 { perror("getsockopt"); ret = -1; } 812 { perror("getsockopt"); ret = -1; }
813 else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0)
814 {
815 OPENSSL_assert(sz.s<=sizeof(struct timeval));
816 ret = (int)sz.s;
817 }
818 else
819 ret = sz.i;
786#endif 820#endif
821 }
787 break; 822 break;
788#endif 823#endif
789 case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP: 824 case BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP:
@@ -871,8 +906,8 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag)
871 memset(authchunks, 0, sizeof(sockopt_len)); 906 memset(authchunks, 0, sizeof(sockopt_len));
872 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len); 907 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len);
873 OPENSSL_assert(ret >= 0); 908 OPENSSL_assert(ret >= 0);
874 909
875 for (p = (unsigned char*) authchunks + sizeof(sctp_assoc_t); 910 for (p = (unsigned char*) authchunks->gauth_chunks;
876 p < (unsigned char*) authchunks + sockopt_len; 911 p < (unsigned char*) authchunks + sockopt_len;
877 p += sizeof(uint8_t)) 912 p += sizeof(uint8_t))
878 { 913 {
@@ -955,7 +990,6 @@ static int dgram_sctp_free(BIO *a)
955#ifdef SCTP_AUTHENTICATION_EVENT 990#ifdef SCTP_AUTHENTICATION_EVENT
956void dgram_sctp_handle_auth_free_key_event(BIO *b, union sctp_notification *snp) 991void dgram_sctp_handle_auth_free_key_event(BIO *b, union sctp_notification *snp)
957 { 992 {
958 unsigned int sockopt_len = 0;
959 int ret; 993 int ret;
960 struct sctp_authkey_event* authkeyevent = &snp->sn_auth_event; 994 struct sctp_authkey_event* authkeyevent = &snp->sn_auth_event;
961 995
@@ -965,9 +999,8 @@ void dgram_sctp_handle_auth_free_key_event(BIO *b, union sctp_notification *snp)
965 999
966 /* delete key */ 1000 /* delete key */
967 authkeyid.scact_keynumber = authkeyevent->auth_keynumber; 1001 authkeyid.scact_keynumber = authkeyevent->auth_keynumber;
968 sockopt_len = sizeof(struct sctp_authkeyid);
969 ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, 1002 ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY,
970 &authkeyid, sockopt_len); 1003 &authkeyid, sizeof(struct sctp_authkeyid));
971 } 1004 }
972 } 1005 }
973#endif 1006#endif
@@ -1164,7 +1197,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
1164 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen); 1197 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen);
1165 OPENSSL_assert(ii >= 0); 1198 OPENSSL_assert(ii >= 0);
1166 1199
1167 for (p = (unsigned char*) authchunks + sizeof(sctp_assoc_t); 1200 for (p = (unsigned char*) authchunks->gauth_chunks;
1168 p < (unsigned char*) authchunks + optlen; 1201 p < (unsigned char*) authchunks + optlen;
1169 p += sizeof(uint8_t)) 1202 p += sizeof(uint8_t))
1170 { 1203 {
@@ -1298,7 +1331,7 @@ static long dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr)
1298 { 1331 {
1299 long ret=1; 1332 long ret=1;
1300 bio_dgram_sctp_data *data = NULL; 1333 bio_dgram_sctp_data *data = NULL;
1301 unsigned int sockopt_len = 0; 1334 socklen_t sockopt_len = 0;
1302 struct sctp_authkeyid authkeyid; 1335 struct sctp_authkeyid authkeyid;
1303 struct sctp_authkey *authkey; 1336 struct sctp_authkey *authkey;
1304 1337
diff --git a/src/lib/libssl/src/crypto/bio/bss_log.c b/src/lib/libssl/src/crypto/bio/bss_log.c
index b7dce5c1a2..2227b2b52d 100644
--- a/src/lib/libssl/src/crypto/bio/bss_log.c
+++ b/src/lib/libssl/src/crypto/bio/bss_log.c
@@ -245,7 +245,7 @@ static int MS_CALLBACK slg_puts(BIO *bp, const char *str)
245 245
246static void xopenlog(BIO* bp, char* name, int level) 246static void xopenlog(BIO* bp, char* name, int level)
247{ 247{
248 if (GetVersion() < 0x80000000) 248 if (check_winnt())
249 bp->ptr = RegisterEventSourceA(NULL,name); 249 bp->ptr = RegisterEventSourceA(NULL,name);
250 else 250 else
251 bp->ptr = NULL; 251 bp->ptr = NULL;
diff --git a/src/lib/libssl/src/crypto/bn/bn.h b/src/lib/libssl/src/crypto/bn/bn.h
index f34248ec4f..21a1a3fe35 100644
--- a/src/lib/libssl/src/crypto/bn/bn.h
+++ b/src/lib/libssl/src/crypto/bn/bn.h
@@ -538,6 +538,8 @@ BIGNUM *BN_mod_inverse(BIGNUM *ret,
538BIGNUM *BN_mod_sqrt(BIGNUM *ret, 538BIGNUM *BN_mod_sqrt(BIGNUM *ret,
539 const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx); 539 const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
540 540
541void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
542
541/* Deprecated versions */ 543/* Deprecated versions */
542#ifndef OPENSSL_NO_DEPRECATED 544#ifndef OPENSSL_NO_DEPRECATED
543BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe, 545BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,
@@ -774,11 +776,20 @@ int RAND_pseudo_bytes(unsigned char *buf,int num);
774 776
775#define bn_fix_top(a) bn_check_top(a) 777#define bn_fix_top(a) bn_check_top(a)
776 778
779#define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2)
780#define bn_wcheck_size(bn, words) \
781 do { \
782 const BIGNUM *_bnum2 = (bn); \
783 assert(words <= (_bnum2)->dmax && words >= (_bnum2)->top); \
784 } while(0)
785
777#else /* !BN_DEBUG */ 786#else /* !BN_DEBUG */
778 787
779#define bn_pollute(a) 788#define bn_pollute(a)
780#define bn_check_top(a) 789#define bn_check_top(a)
781#define bn_fix_top(a) bn_correct_top(a) 790#define bn_fix_top(a) bn_correct_top(a)
791#define bn_check_size(bn, bits)
792#define bn_wcheck_size(bn, words)
782 793
783#endif 794#endif
784 795
diff --git a/src/lib/libssl/src/crypto/bn/bn_div.c b/src/lib/libssl/src/crypto/bn/bn_div.c
index 52b3304293..7b2403185e 100644
--- a/src/lib/libssl/src/crypto/bn/bn_div.c
+++ b/src/lib/libssl/src/crypto/bn/bn_div.c
@@ -141,6 +141,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
141 * 141 *
142 * <appro@fy.chalmers.se> 142 * <appro@fy.chalmers.se>
143 */ 143 */
144#undef bn_div_words
144# define bn_div_words(n0,n1,d0) \ 145# define bn_div_words(n0,n1,d0) \
145 ({ asm volatile ( \ 146 ({ asm volatile ( \
146 "divl %4" \ 147 "divl %4" \
@@ -155,6 +156,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
155 * Same story here, but it's 128-bit by 64-bit division. Wow! 156 * Same story here, but it's 128-bit by 64-bit division. Wow!
156 * <appro@fy.chalmers.se> 157 * <appro@fy.chalmers.se>
157 */ 158 */
159# undef bn_div_words
158# define bn_div_words(n0,n1,d0) \ 160# define bn_div_words(n0,n1,d0) \
159 ({ asm volatile ( \ 161 ({ asm volatile ( \
160 "divq %4" \ 162 "divq %4" \
diff --git a/src/lib/libssl/src/crypto/bn/bn_gcd.c b/src/lib/libssl/src/crypto/bn/bn_gcd.c
index 4a352119ba..a808f53178 100644
--- a/src/lib/libssl/src/crypto/bn/bn_gcd.c
+++ b/src/lib/libssl/src/crypto/bn/bn_gcd.c
@@ -205,6 +205,7 @@ err:
205/* solves ax == 1 (mod n) */ 205/* solves ax == 1 (mod n) */
206static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, 206static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
207 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); 207 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
208
208BIGNUM *BN_mod_inverse(BIGNUM *in, 209BIGNUM *BN_mod_inverse(BIGNUM *in,
209 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx) 210 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
210 { 211 {
diff --git a/src/lib/libssl/src/crypto/bn/bn_lcl.h b/src/lib/libssl/src/crypto/bn/bn_lcl.h
index eecfd8cc99..817c773b65 100644
--- a/src/lib/libssl/src/crypto/bn/bn_lcl.h
+++ b/src/lib/libssl/src/crypto/bn/bn_lcl.h
@@ -282,16 +282,23 @@ extern "C" {
282# endif 282# endif
283# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)) 283# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
284# if defined(__GNUC__) && __GNUC__>=2 284# if defined(__GNUC__) && __GNUC__>=2
285# define BN_UMULT_HIGH(a,b) ({ \ 285# if __GNUC__>=4 && __GNUC_MINOR__>=4 /* "h" constraint is no more since 4.4 */
286# define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64)
287# define BN_UMULT_LOHI(low,high,a,b) ({ \
288 __uint128_t ret=(__uint128_t)(a)*(b); \
289 (high)=ret>>64; (low)=ret; })
290# else
291# define BN_UMULT_HIGH(a,b) ({ \
286 register BN_ULONG ret; \ 292 register BN_ULONG ret; \
287 asm ("dmultu %1,%2" \ 293 asm ("dmultu %1,%2" \
288 : "=h"(ret) \ 294 : "=h"(ret) \
289 : "r"(a), "r"(b) : "l"); \ 295 : "r"(a), "r"(b) : "l"); \
290 ret; }) 296 ret; })
291# define BN_UMULT_LOHI(low,high,a,b) \ 297# define BN_UMULT_LOHI(low,high,a,b)\
292 asm ("dmultu %2,%3" \ 298 asm ("dmultu %2,%3" \
293 : "=l"(low),"=h"(high) \ 299 : "=l"(low),"=h"(high) \
294 : "r"(a), "r"(b)); 300 : "r"(a), "r"(b));
301# endif
295# endif 302# endif
296# endif /* cpu */ 303# endif /* cpu */
297#endif /* OPENSSL_NO_ASM */ 304#endif /* OPENSSL_NO_ASM */
diff --git a/src/lib/libssl/src/crypto/bn/bn_lib.c b/src/lib/libssl/src/crypto/bn/bn_lib.c
index 7a5676de69..5461e6ee7d 100644
--- a/src/lib/libssl/src/crypto/bn/bn_lib.c
+++ b/src/lib/libssl/src/crypto/bn/bn_lib.c
@@ -824,3 +824,55 @@ int bn_cmp_part_words(const BN_ULONG *a, const BN_ULONG *b,
824 } 824 }
825 return bn_cmp_words(a,b,cl); 825 return bn_cmp_words(a,b,cl);
826 } 826 }
827
828/*
829 * Constant-time conditional swap of a and b.
830 * a and b are swapped if condition is not 0. The code assumes that at most one bit of condition is set.
831 * nwords is the number of words to swap. The code assumes that at least nwords are allocated in both a and b,
832 * and that no more than nwords are used by either a or b.
833 * a and b cannot be the same number
834 */
835void BN_consttime_swap(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords)
836 {
837 BN_ULONG t;
838 int i;
839
840 bn_wcheck_size(a, nwords);
841 bn_wcheck_size(b, nwords);
842
843 assert(a != b);
844 assert((condition & (condition - 1)) == 0);
845 assert(sizeof(BN_ULONG) >= sizeof(int));
846
847 condition = ((condition - 1) >> (BN_BITS2 - 1)) - 1;
848
849 t = (a->top^b->top) & condition;
850 a->top ^= t;
851 b->top ^= t;
852
853#define BN_CONSTTIME_SWAP(ind) \
854 do { \
855 t = (a->d[ind] ^ b->d[ind]) & condition; \
856 a->d[ind] ^= t; \
857 b->d[ind] ^= t; \
858 } while (0)
859
860
861 switch (nwords) {
862 default:
863 for (i = 10; i < nwords; i++)
864 BN_CONSTTIME_SWAP(i);
865 /* Fallthrough */
866 case 10: BN_CONSTTIME_SWAP(9); /* Fallthrough */
867 case 9: BN_CONSTTIME_SWAP(8); /* Fallthrough */
868 case 8: BN_CONSTTIME_SWAP(7); /* Fallthrough */
869 case 7: BN_CONSTTIME_SWAP(6); /* Fallthrough */
870 case 6: BN_CONSTTIME_SWAP(5); /* Fallthrough */
871 case 5: BN_CONSTTIME_SWAP(4); /* Fallthrough */
872 case 4: BN_CONSTTIME_SWAP(3); /* Fallthrough */
873 case 3: BN_CONSTTIME_SWAP(2); /* Fallthrough */
874 case 2: BN_CONSTTIME_SWAP(1); /* Fallthrough */
875 case 1: BN_CONSTTIME_SWAP(0);
876 }
877#undef BN_CONSTTIME_SWAP
878}
diff --git a/src/lib/libssl/src/crypto/bn/bn_nist.c b/src/lib/libssl/src/crypto/bn/bn_nist.c
index 43caee4770..e22968d4a3 100644
--- a/src/lib/libssl/src/crypto/bn/bn_nist.c
+++ b/src/lib/libssl/src/crypto/bn/bn_nist.c
@@ -286,26 +286,25 @@ const BIGNUM *BN_get0_nist_prime_521(void)
286 } 286 }
287 287
288 288
289static void nist_cp_bn_0(BN_ULONG *buf, BN_ULONG *a, int top, int max) 289static void nist_cp_bn_0(BN_ULONG *dst, const BN_ULONG *src, int top, int max)
290 { 290 {
291 int i; 291 int i;
292 BN_ULONG *_tmp1 = (buf), *_tmp2 = (a);
293 292
294#ifdef BN_DEBUG 293#ifdef BN_DEBUG
295 OPENSSL_assert(top <= max); 294 OPENSSL_assert(top <= max);
296#endif 295#endif
297 for (i = (top); i != 0; i--) 296 for (i = 0; i < top; i++)
298 *_tmp1++ = *_tmp2++; 297 dst[i] = src[i];
299 for (i = (max) - (top); i != 0; i--) 298 for (; i < max; i++)
300 *_tmp1++ = (BN_ULONG) 0; 299 dst[i] = 0;
301 } 300 }
302 301
303static void nist_cp_bn(BN_ULONG *buf, BN_ULONG *a, int top) 302static void nist_cp_bn(BN_ULONG *dst, const BN_ULONG *src, int top)
304 { 303 {
305 int i; 304 int i;
306 BN_ULONG *_tmp1 = (buf), *_tmp2 = (a); 305
307 for (i = (top); i != 0; i--) 306 for (i = 0; i < top; i++)
308 *_tmp1++ = *_tmp2++; 307 dst[i] = src[i];
309 } 308 }
310 309
311#if BN_BITS2 == 64 310#if BN_BITS2 == 64
@@ -451,8 +450,9 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
451 */ 450 */
452 mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); 451 mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP);
453 mask &= 0-(PTR_SIZE_INT)carry; 452 mask &= 0-(PTR_SIZE_INT)carry;
453 res = c_d;
454 res = (BN_ULONG *) 454 res = (BN_ULONG *)
455 (((PTR_SIZE_INT)c_d&~mask) | ((PTR_SIZE_INT)r_d&mask)); 455 (((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask));
456 nist_cp_bn(r_d, res, BN_NIST_192_TOP); 456 nist_cp_bn(r_d, res, BN_NIST_192_TOP);
457 r->top = BN_NIST_192_TOP; 457 r->top = BN_NIST_192_TOP;
458 bn_correct_top(r); 458 bn_correct_top(r);
@@ -479,8 +479,11 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
479 int top = a->top, i; 479 int top = a->top, i;
480 int carry; 480 int carry;
481 BN_ULONG *r_d, *a_d = a->d; 481 BN_ULONG *r_d, *a_d = a->d;
482 BN_ULONG buf[BN_NIST_224_TOP], 482 union {
483 c_d[BN_NIST_224_TOP], 483 BN_ULONG bn[BN_NIST_224_TOP];
484 unsigned int ui[BN_NIST_224_TOP*sizeof(BN_ULONG)/sizeof(unsigned int)];
485 } buf;
486 BN_ULONG c_d[BN_NIST_224_TOP],
484 *res; 487 *res;
485 PTR_SIZE_INT mask; 488 PTR_SIZE_INT mask;
486 union { bn_addsub_f f; PTR_SIZE_INT p; } u; 489 union { bn_addsub_f f; PTR_SIZE_INT p; } u;
@@ -519,18 +522,18 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
519 /* copy upper 256 bits of 448 bit number ... */ 522 /* copy upper 256 bits of 448 bit number ... */
520 nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP-1), top - (BN_NIST_224_TOP-1), BN_NIST_224_TOP); 523 nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP-1), top - (BN_NIST_224_TOP-1), BN_NIST_224_TOP);
521 /* ... and right shift by 32 to obtain upper 224 bits */ 524 /* ... and right shift by 32 to obtain upper 224 bits */
522 nist_set_224(buf, c_d, 14, 13, 12, 11, 10, 9, 8); 525 nist_set_224(buf.bn, c_d, 14, 13, 12, 11, 10, 9, 8);
523 /* truncate lower part to 224 bits too */ 526 /* truncate lower part to 224 bits too */
524 r_d[BN_NIST_224_TOP-1] &= BN_MASK2l; 527 r_d[BN_NIST_224_TOP-1] &= BN_MASK2l;
525#else 528#else
526 nist_cp_bn_0(buf, a_d + BN_NIST_224_TOP, top - BN_NIST_224_TOP, BN_NIST_224_TOP); 529 nist_cp_bn_0(buf.bn, a_d + BN_NIST_224_TOP, top - BN_NIST_224_TOP, BN_NIST_224_TOP);
527#endif 530#endif
528 531
529#if defined(NIST_INT64) && BN_BITS2!=64 532#if defined(NIST_INT64) && BN_BITS2!=64
530 { 533 {
531 NIST_INT64 acc; /* accumulator */ 534 NIST_INT64 acc; /* accumulator */
532 unsigned int *rp=(unsigned int *)r_d; 535 unsigned int *rp=(unsigned int *)r_d;
533 const unsigned int *bp=(const unsigned int *)buf; 536 const unsigned int *bp=(const unsigned int *)buf.ui;
534 537
535 acc = rp[0]; acc -= bp[7-7]; 538 acc = rp[0]; acc -= bp[7-7];
536 acc -= bp[11-7]; rp[0] = (unsigned int)acc; acc >>= 32; 539 acc -= bp[11-7]; rp[0] = (unsigned int)acc; acc >>= 32;
@@ -565,13 +568,13 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
565 { 568 {
566 BN_ULONG t_d[BN_NIST_224_TOP]; 569 BN_ULONG t_d[BN_NIST_224_TOP];
567 570
568 nist_set_224(t_d, buf, 10, 9, 8, 7, 0, 0, 0); 571 nist_set_224(t_d, buf.bn, 10, 9, 8, 7, 0, 0, 0);
569 carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); 572 carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP);
570 nist_set_224(t_d, buf, 0, 13, 12, 11, 0, 0, 0); 573 nist_set_224(t_d, buf.bn, 0, 13, 12, 11, 0, 0, 0);
571 carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); 574 carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP);
572 nist_set_224(t_d, buf, 13, 12, 11, 10, 9, 8, 7); 575 nist_set_224(t_d, buf.bn, 13, 12, 11, 10, 9, 8, 7);
573 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); 576 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP);
574 nist_set_224(t_d, buf, 0, 0, 0, 0, 13, 12, 11); 577 nist_set_224(t_d, buf.bn, 0, 0, 0, 0, 13, 12, 11);
575 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); 578 carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP);
576 579
577#if BN_BITS2==64 580#if BN_BITS2==64
@@ -606,7 +609,8 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
606 /* otherwise it's effectively same as in BN_nist_mod_192... */ 609 /* otherwise it's effectively same as in BN_nist_mod_192... */
607 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); 610 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP);
608 mask &= 0-(PTR_SIZE_INT)carry; 611 mask &= 0-(PTR_SIZE_INT)carry;
609 res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | 612 res = c_d;
613 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
610 ((PTR_SIZE_INT)r_d&mask)); 614 ((PTR_SIZE_INT)r_d&mask));
611 nist_cp_bn(r_d, res, BN_NIST_224_TOP); 615 nist_cp_bn(r_d, res, BN_NIST_224_TOP);
612 r->top = BN_NIST_224_TOP; 616 r->top = BN_NIST_224_TOP;
@@ -805,7 +809,8 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
805 809
806 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); 810 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP);
807 mask &= 0-(PTR_SIZE_INT)carry; 811 mask &= 0-(PTR_SIZE_INT)carry;
808 res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | 812 res = c_d;
813 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
809 ((PTR_SIZE_INT)r_d&mask)); 814 ((PTR_SIZE_INT)r_d&mask));
810 nist_cp_bn(r_d, res, BN_NIST_256_TOP); 815 nist_cp_bn(r_d, res, BN_NIST_256_TOP);
811 r->top = BN_NIST_256_TOP; 816 r->top = BN_NIST_256_TOP;
@@ -1026,7 +1031,8 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
1026 1031
1027 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); 1032 mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP);
1028 mask &= 0-(PTR_SIZE_INT)carry; 1033 mask &= 0-(PTR_SIZE_INT)carry;
1029 res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | 1034 res = c_d;
1035 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
1030 ((PTR_SIZE_INT)r_d&mask)); 1036 ((PTR_SIZE_INT)r_d&mask));
1031 nist_cp_bn(r_d, res, BN_NIST_384_TOP); 1037 nist_cp_bn(r_d, res, BN_NIST_384_TOP);
1032 r->top = BN_NIST_384_TOP; 1038 r->top = BN_NIST_384_TOP;
@@ -1092,7 +1098,8 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
1092 1098
1093 bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); 1099 bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP);
1094 mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); 1100 mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP);
1095 res = (BN_ULONG *)(((PTR_SIZE_INT)t_d&~mask) | 1101 res = t_d;
1102 res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) |
1096 ((PTR_SIZE_INT)r_d&mask)); 1103 ((PTR_SIZE_INT)r_d&mask));
1097 nist_cp_bn(r_d,res,BN_NIST_521_TOP); 1104 nist_cp_bn(r_d,res,BN_NIST_521_TOP);
1098 r->top = BN_NIST_521_TOP; 1105 r->top = BN_NIST_521_TOP;
diff --git a/src/lib/libssl/src/crypto/buffer/buffer.c b/src/lib/libssl/src/crypto/buffer/buffer.c
index d7aa79ad7f..d4a4ce43b3 100644
--- a/src/lib/libssl/src/crypto/buffer/buffer.c
+++ b/src/lib/libssl/src/crypto/buffer/buffer.c
@@ -179,14 +179,14 @@ int BUF_MEM_grow_clean(BUF_MEM *str, size_t len)
179 return(len); 179 return(len);
180 } 180 }
181 181
182void BUF_reverse(unsigned char *out, unsigned char *in, size_t size) 182void BUF_reverse(unsigned char *out, const unsigned char *in, size_t size)
183 { 183 {
184 size_t i; 184 size_t i;
185 if (in) 185 if (in)
186 { 186 {
187 out += size - 1; 187 out += size - 1;
188 for (i = 0; i < size; i++) 188 for (i = 0; i < size; i++)
189 *in++ = *out--; 189 *out-- = *in++;
190 } 190 }
191 else 191 else
192 { 192 {
diff --git a/src/lib/libssl/src/crypto/buffer/buffer.h b/src/lib/libssl/src/crypto/buffer/buffer.h
index 178e418282..f8da32b485 100644
--- a/src/lib/libssl/src/crypto/buffer/buffer.h
+++ b/src/lib/libssl/src/crypto/buffer/buffer.h
@@ -88,7 +88,7 @@ int BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
88char * BUF_strdup(const char *str); 88char * BUF_strdup(const char *str);
89char * BUF_strndup(const char *str, size_t siz); 89char * BUF_strndup(const char *str, size_t siz);
90void * BUF_memdup(const void *data, size_t siz); 90void * BUF_memdup(const void *data, size_t siz);
91void BUF_reverse(unsigned char *out, unsigned char *in, size_t siz); 91void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);
92 92
93/* safe string functions */ 93/* safe string functions */
94size_t BUF_strlcpy(char *dst,const char *src,size_t siz); 94size_t BUF_strlcpy(char *dst,const char *src,size_t siz);
diff --git a/src/lib/libssl/src/crypto/cryptlib.c b/src/lib/libssl/src/crypto/cryptlib.c
index 766ea8cac7..0b77d8b7d0 100644
--- a/src/lib/libssl/src/crypto/cryptlib.c
+++ b/src/lib/libssl/src/crypto/cryptlib.c
@@ -504,7 +504,7 @@ void CRYPTO_THREADID_current(CRYPTO_THREADID *id)
504 CRYPTO_THREADID_set_numeric(id, (unsigned long)find_thread(NULL)); 504 CRYPTO_THREADID_set_numeric(id, (unsigned long)find_thread(NULL));
505#else 505#else
506 /* For everything else, default to using the address of 'errno' */ 506 /* For everything else, default to using the address of 'errno' */
507 CRYPTO_THREADID_set_pointer(id, &errno); 507 CRYPTO_THREADID_set_pointer(id, (void*)&errno);
508#endif 508#endif
509 } 509 }
510 510
@@ -704,6 +704,7 @@ void OPENSSL_cpuid_setup(void)
704 } 704 }
705 else 705 else
706 vec = OPENSSL_ia32_cpuid(); 706 vec = OPENSSL_ia32_cpuid();
707
707 /* 708 /*
708 * |(1<<10) sets a reserved bit to signal that variable 709 * |(1<<10) sets a reserved bit to signal that variable
709 * was initialized already... This is to avoid interference 710 * was initialized already... This is to avoid interference
@@ -888,7 +889,7 @@ void OPENSSL_showfatal (const char *fmta,...)
888 889
889#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 890#if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
890 /* this -------------v--- guards NT-specific calls */ 891 /* this -------------v--- guards NT-specific calls */
891 if (GetVersion() < 0x80000000 && OPENSSL_isservice() > 0) 892 if (check_winnt() && OPENSSL_isservice() > 0)
892 { HANDLE h = RegisterEventSource(0,_T("OPENSSL")); 893 { HANDLE h = RegisterEventSource(0,_T("OPENSSL"));
893 const TCHAR *pmsg=buf; 894 const TCHAR *pmsg=buf;
894 ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0); 895 ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0);
@@ -924,3 +925,16 @@ void OpenSSLDie(const char *file,int line,const char *assertion)
924 } 925 }
925 926
926void *OPENSSL_stderr(void) { return stderr; } 927void *OPENSSL_stderr(void) { return stderr; }
928
929int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)
930 {
931 size_t i;
932 const unsigned char *a = in_a;
933 const unsigned char *b = in_b;
934 unsigned char x = 0;
935
936 for (i = 0; i < len; i++)
937 x |= a[i] ^ b[i];
938
939 return x;
940 }
diff --git a/src/lib/libssl/src/crypto/cryptlib.h b/src/lib/libssl/src/crypto/cryptlib.h
index 1761f6b668..d26f9630ea 100644
--- a/src/lib/libssl/src/crypto/cryptlib.h
+++ b/src/lib/libssl/src/crypto/cryptlib.h
@@ -100,7 +100,7 @@ extern "C" {
100 100
101void OPENSSL_cpuid_setup(void); 101void OPENSSL_cpuid_setup(void);
102extern unsigned int OPENSSL_ia32cap_P[]; 102extern unsigned int OPENSSL_ia32cap_P[];
103void OPENSSL_showfatal(const char *,...); 103void OPENSSL_showfatal(const char *fmta,...);
104void *OPENSSL_stderr(void); 104void *OPENSSL_stderr(void);
105extern int OPENSSL_NONPIC_relocated; 105extern int OPENSSL_NONPIC_relocated;
106 106
diff --git a/src/lib/libssl/src/crypto/crypto-lib.com b/src/lib/libssl/src/crypto/crypto-lib.com
deleted file mode 100644
index c280aa03a8..0000000000
--- a/src/lib/libssl/src/crypto/crypto-lib.com
+++ /dev/null
@@ -1,1516 +0,0 @@
1$!
2$! CRYPTO-LIB.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$! Zoltan Arpadffy <arpadffy@polarhome.com>
10$!
11$! This command files compiles and creates the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB"
12$! library for OpenSSL. The "xxx" denotes the machine architecture, ALPHA,
13$! IA64 or VAX.
14$!
15$! It was re-written so it would try to determine what "C" compiler to use
16$! or you can specify which "C" compiler to use.
17$!
18$! Specify the following as P1 to build just that part or ALL to just
19$! build everything.
20$!
21$! LIBRARY To just compile the [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
22$! APPS To just compile the [.xxx.EXE.CRYPTO]*.EXE
23$! ALL To do both LIBRARY and APPS
24$!
25$! Specify DEBUG or NODEBUG as P2 to compile with or without debugger
26$! information.
27$!
28$! Specify which compiler at P3 to try to compile under.
29$!
30$! VAXC For VAX C.
31$! DECC For DEC C.
32$! GNUC For GNU C.
33$!
34$! If you don't specify a compiler, it will try to determine which
35$! "C" compiler to use.
36$!
37$! P4, if defined, sets a TCP/IP library to use, through one of the following
38$! keywords:
39$!
40$! UCX For UCX
41$! TCPIP For TCPIP (post UCX)
42$! SOCKETSHR For SOCKETSHR+NETLIB
43$!
44$! P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
45$!
46$! P6, if defined, sets a choice of crypto methods to compile.
47$! WARNING: this should only be done to recompile some part of an already
48$! fully compiled library.
49$!
50$! P7, if defined, specifies the C pointer size. Ignored on VAX.
51$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
52$! Supported values are:
53$!
54$! "" Compile with default (/NOPOINTER_SIZE)
55$! 32 Compile with /POINTER_SIZE=32 (SHORT)
56$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]).
57$! (Automatically select ARGV if compiler supports it.)
58$! 64= Compile with /POINTER_SIZE=64 (LONG).
59$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
60$!
61$! P8, if defined, specifies a directory where ZLIB files (zlib.h,
62$! libz.olb) may be found. Optionally, a non-default object library
63$! name may be included ("dev:[dir]libz_64.olb", for example).
64$!
65$!
66$! Announce/identify.
67$!
68$ proc = f$environment( "procedure")
69$ write sys$output "@@@ "+ -
70 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
71$!
72$! Define A TCP/IP Library That We Will Need To Link To.
73$! (That Is, If We Need To Link To One.)
74$!
75$ TCPIP_LIB = ""
76$ ZLIB_LIB = ""
77$!
78$! Check Which Architecture We Are Using.
79$!
80$ IF (F$GETSYI("CPU").LT.128)
81$ THEN
82$!
83$! The Architecture Is VAX
84$!
85$ ARCH = "VAX"
86$!
87$! Else...
88$!
89$ ELSE
90$!
91$! The Architecture Is Alpha, IA64 or whatever comes in the future.
92$!
93$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
94$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
95$!
96$! End The Architecture Check.
97$!
98$ ENDIF
99$!
100$ ARCHD = ARCH
101$ LIB32 = "32"
102$ OPT_FILE = ""
103$ POINTER_SIZE = ""
104$!
105$! Define The Different Encryption Types.
106$! NOTE: Some might think this list ugly. However, it's made this way to
107$! reflect the SDIRS variable in [-]Makefile.org as closely as possible,
108$! thereby making it fairly easy to verify that the lists are the same.
109$!
110$ ET_WHIRLPOOL = "WHRLPOOL"
111$ IF ARCH .EQS. "VAX" THEN ET_WHIRLPOOL = ""
112$ ENCRYPT_TYPES = "Basic,"+ -
113 "OBJECTS,"+ -
114 "MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ET_WHIRLPOOL+","+ -
115 "DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,MODES,"+ -
116 "BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,"+ -
117 "BUFFER,BIO,STACK,LHASH,RAND,ERR,"+ -
118 "EVP,EVP_2,EVP_3,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
119 "CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,UI,KRB5,"+ -
120 "CMS,PQUEUE,TS,JPAKE,SRP,STORE,CMAC"
121$!
122$! Check To Make Sure We Have Valid Command Line Parameters.
123$!
124$ GOSUB CHECK_OPTIONS
125$!
126$! Define The OBJ and EXE Directories.
127$!
128$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.CRYPTO]
129$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]
130$!
131$! Specify the destination directory in any /MAP option.
132$!
133$ if (LINKMAP .eqs. "MAP")
134$ then
135$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
136$ endif
137$!
138$! Add the location prefix to the linker options file name.
139$!
140$ if (OPT_FILE .nes. "")
141$ then
142$ OPT_FILE = EXE_DIR+ OPT_FILE
143$ endif
144$!
145$! Initialise logical names and such
146$!
147$ GOSUB INITIALISE
148$!
149$! Tell The User What Kind of Machine We Run On.
150$!
151$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
152$!
153$!
154$! Check To See If The Architecture Specific OBJ Directory Exists.
155$!
156$ IF (F$PARSE(OBJ_DIR).EQS."")
157$ THEN
158$!
159$! It Dosen't Exist, So Create It.
160$!
161$ CREATE/DIR 'OBJ_DIR'
162$!
163$! End The Architecture Specific OBJ Directory Check.
164$!
165$ ENDIF
166$!
167$! Check To See If The Architecture Specific Directory Exists.
168$!
169$ IF (F$PARSE(EXE_DIR).EQS."")
170$ THEN
171$!
172$! It Dosen't Exist, So Create It.
173$!
174$ CREATE/DIRECTORY 'EXE_DIR'
175$!
176$! End The Architecture Specific Directory Check.
177$!
178$ ENDIF
179$!
180$! Define The Library Name.
181$!
182$ LIB_NAME := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
183$!
184$! Define The CRYPTO-LIB We Are To Use.
185$!
186$ CRYPTO_LIB := 'EXE_DIR'SSL_LIBCRYPTO'LIB32'.OLB
187$!
188$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
189$!
190$ IF (F$SEARCH(LIB_NAME).EQS."")
191$ THEN
192$!
193$! Guess Not, Create The Library.
194$!
195$ LIBRARY/CREATE/OBJECT 'LIB_NAME'
196$!
197$! End The Library Check.
198$!
199$ ENDIF
200$!
201$! Build our options file for the application
202$!
203$ GOSUB CHECK_OPT_FILE
204$!
205$! Define The Different Encryption "library" Strings.
206$!
207$ APPS_DES = "DES/DES,CBC3_ENC"
208$ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE"
209$
210$ LIB_ = "cryptlib,mem,mem_clr,mem_dbg,cversion,ex_data,cpt_err,"+ -
211 "ebcdic,uid,o_time,o_str,o_dir,o_fips.c,o_init,fips_ers"
212$ LIB_MD2 = "md2_dgst,md2_one"
213$ LIB_MD4 = "md4_dgst,md4_one"
214$ LIB_MD5 = "md5_dgst,md5_one"
215$ LIB_SHA = "sha_dgst,sha1dgst,sha_one,sha1_one,sha256,sha512"
216$ LIB_MDC2 = "mdc2dgst,mdc2_one"
217$ LIB_HMAC = "hmac,hm_ameth,hm_pmeth"
218$ LIB_RIPEMD = "rmd_dgst,rmd_one"
219$ LIB_WHRLPOOL = "wp_dgst,wp_block"
220$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
221 "ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
222 "enc_read,enc_writ,ofb64enc,"+ -
223 "ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
224 "des_enc,fcrypt_b,"+ -
225 "fcrypt,xcbc_enc,rpc_enc,cbc_cksm,"+ -
226 "ede_cbcm_enc,des_old,des_old2,read2pwd"
227$ LIB_RC2 = "rc2_ecb,rc2_skey,rc2_cbc,rc2cfb64,rc2ofb64"
228$ LIB_RC4 = "rc4_skey,rc4_enc,rc4_utl"
229$ LIB_RC5 = "rc5_skey,rc5_ecb,rc5_enc,rc5cfb64,rc5ofb64"
230$ LIB_IDEA = "i_cbc,i_cfb64,i_ofb64,i_ecb,i_skey"
231$ LIB_BF = "bf_skey,bf_ecb,bf_enc,bf_cfb64,bf_ofb64"
232$ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
233$ LIB_CAMELLIA = "camellia,cmll_misc,cmll_ecb,cmll_cbc,cmll_ofb,"+ -
234 "cmll_cfb,cmll_ctr,cmll_utl"
235$ LIB_SEED = "seed,seed_ecb,seed_cbc,seed_cfb,seed_ofb"
236$ LIB_MODES = "cbc128,ctr128,cts128,cfb128,ofb128,gcm128,"+ -
237 "ccm128,xts128"
238$ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
239$ IF F$TRNLNM("OPENSSL_NO_ASM") .OR. ARCH .NES. "VAX" THEN -
240 LIB_BN_ASM = "bn_asm"
241$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_ctx,bn_mul,bn_mod,"+ -
242 "bn_print,bn_rand,bn_shift,bn_word,bn_blind,"+ -
243 "bn_kron,bn_sqrt,bn_gcd,bn_prime,bn_err,bn_sqr,"+LIB_BN_ASM+","+ -
244 "bn_recp,bn_mont,bn_mpi,bn_exp2,bn_gf2m,bn_nist,"+ -
245 "bn_depr,bn_const,bn_x931p"
246$ LIB_EC = "ec_lib,ecp_smpl,ecp_mont,ecp_nist,ec_cvt,ec_mult,"+ -
247 "ec_err,ec_curve,ec_check,ec_print,ec_asn1,ec_key,"+ -
248 "ec2_smpl,ec2_mult,ec_ameth,ec_pmeth,eck_prn,"+ -
249 "ecp_nistp224,ecp_nistp256,ecp_nistp521,ecp_nistputil,"+ -
250 "ecp_oct,ec2_oct,ec_oct"
251$ LIB_RSA = "rsa_eay,rsa_gen,rsa_lib,rsa_sign,rsa_saos,rsa_err,"+ -
252 "rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null,"+ -
253 "rsa_pss,rsa_x931,rsa_asn1,rsa_depr,rsa_ameth,rsa_prn,"+ -
254 "rsa_pmeth,rsa_crpt"
255$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,"+ -
256 "dsa_err,dsa_ossl,dsa_depr,dsa_ameth,dsa_pmeth,dsa_prn"
257$ LIB_ECDSA = "ecs_lib,ecs_asn1,ecs_ossl,ecs_sign,ecs_vrf,ecs_err"
258$ LIB_DH = "dh_asn1,dh_gen,dh_key,dh_lib,dh_check,dh_err,dh_depr,"+ -
259 "dh_ameth,dh_pmeth,dh_prn"
260$ LIB_ECDH = "ech_lib,ech_ossl,ech_key,ech_err"
261$ LIB_DSO = "dso_dl,dso_dlfcn,dso_err,dso_lib,dso_null,"+ -
262 "dso_openssl,dso_win32,dso_vms,dso_beos"
263$ LIB_ENGINE = "eng_err,eng_lib,eng_list,eng_init,eng_ctrl,"+ -
264 "eng_table,eng_pkey,eng_fat,eng_all,"+ -
265 "tb_rsa,tb_dsa,tb_ecdsa,tb_dh,tb_ecdh,tb_rand,tb_store,"+ -
266 "tb_cipher,tb_digest,tb_pkmeth,tb_asnmth,"+ -
267 "eng_openssl,eng_dyn,eng_cnf,eng_cryptodev,"+ -
268 "eng_rsax,eng_rdrand"
269$ LIB_AES = "aes_core,aes_misc,aes_ecb,aes_cbc,aes_cfb,aes_ofb,aes_ctr,"+ -
270 "aes_ige,aes_wrap"
271$ LIB_BUFFER = "buffer,buf_str,buf_err"
272$ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
273 "bss_mem,bss_null,bss_fd,"+ -
274 "bss_file,bss_sock,bss_conn,"+ -
275 "bf_null,bf_buff,b_print,b_dump,"+ -
276 "b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio,bss_log,"+ -
277 "bss_dgram,"+ -
278 "bf_lbuf"
279$ LIB_STACK = "stack"
280$ LIB_LHASH = "lhash,lh_stats"
281$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,"+ -
282 "rand_vms"
283$ LIB_ERR = "err,err_all,err_prn"
284$ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err,obj_xref"
285$ LIB_EVP = "encode,digest,evp_enc,evp_key,evp_acnf,"+ -
286 "e_des,e_bf,e_idea,e_des3,e_camellia,"+ -
287 "e_rc4,e_aes,names,e_seed,"+ -
288 "e_xcbc_d,e_rc2,e_cast,e_rc5"
289$ LIB_EVP_2 = "m_null,m_md2,m_md4,m_md5,m_sha,m_sha1,m_wp," + -
290 "m_dss,m_dss1,m_mdc2,m_ripemd,m_ecdsa,"+ -
291 "p_open,p_seal,p_sign,p_verify,p_lib,p_enc,p_dec,"+ -
292 "bio_md,bio_b64,bio_enc,evp_err,e_null,"+ -
293 "c_all,c_allc,c_alld,evp_lib,bio_ok,"+-
294 "evp_pkey,evp_pbe,p5_crpt,p5_crpt2"
295$ LIB_EVP_3 = "e_old,pmeth_lib,pmeth_fn,pmeth_gn,m_sigver,evp_fips,"+ -
296 "e_aes_cbc_hmac_sha1,e_rc4_hmac_md5"
297$ LIB_ASN1 = "a_object,a_bitstr,a_utctm,a_gentm,a_time,a_int,a_octet,"+ -
298 "a_print,a_type,a_set,a_dup,a_d2i_fp,a_i2d_fp,"+ -
299 "a_enum,a_utf8,a_sign,a_digest,a_verify,a_mbstr,a_strex,"+ -
300 "x_algor,x_val,x_pubkey,x_sig,x_req,x_attrib,x_bignum,"+ -
301 "x_long,x_name,x_x509,x_x509a,x_crl,x_info,x_spki,nsseq,"+ -
302 "x_nx509,d2i_pu,d2i_pr,i2d_pu,i2d_pr"
303$ LIB_ASN1_2 = "t_req,t_x509,t_x509a,t_crl,t_pkey,t_spki,t_bitst,"+ -
304 "tasn_new,tasn_fre,tasn_enc,tasn_dec,tasn_utl,tasn_typ,"+ -
305 "tasn_prn,ameth_lib,"+ -
306 "f_int,f_string,n_pkey,"+ -
307 "f_enum,x_pkey,a_bool,x_exten,bio_asn1,bio_ndef,asn_mime,"+ -
308 "asn1_gen,asn1_par,asn1_lib,asn1_err,a_bytes,a_strnid,"+ -
309 "evp_asn1,asn_pack,p5_pbe,p5_pbev2,p8_pkey,asn_moid"
310$ LIB_PEM = "pem_sign,pem_seal,pem_info,pem_lib,pem_all,pem_err,"+ -
311 "pem_x509,pem_xaux,pem_oth,pem_pk8,pem_pkey,pvkfmt"
312$ LIB_X509 = "x509_def,x509_d2,x509_r2x,x509_cmp,"+ -
313 "x509_obj,x509_req,x509spki,x509_vfy,"+ -
314 "x509_set,x509cset,x509rset,x509_err,"+ -
315 "x509name,x509_v3,x509_ext,x509_att,"+ -
316 "x509type,x509_lu,x_all,x509_txt,"+ -
317 "x509_trs,by_file,by_dir,x509_vpm"
318$ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ -
319 "v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ -
320 "v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info,"+ -
321 "v3_ocsp,v3_akeya,v3_pmaps,v3_pcons,v3_ncons,v3_pcia,v3_pci,"+ -
322 "pcy_cache,pcy_node,pcy_data,pcy_map,pcy_tree,pcy_lib,"+ -
323 "v3_asid,v3_addr"
324$ LIB_CONF = "conf_err,conf_lib,conf_api,conf_def,conf_mod,conf_mall,conf_sap"
325$ LIB_TXT_DB = "txt_db"
326$ LIB_PKCS7 = "pk7_asn1,pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,"+ -
327 "pk7_mime,bio_pk7"
328$ LIB_PKCS12 = "p12_add,p12_asn,p12_attr,p12_crpt,p12_crt,p12_decr,"+ -
329 "p12_init,p12_key,p12_kiss,p12_mutl,"+ -
330 "p12_utl,p12_npas,pk12err,p12_p8d,p12_p8e"
331$ LIB_COMP = "comp_lib,comp_err,"+ -
332 "c_rle,c_zlib"
333$ LIB_OCSP = "ocsp_asn,ocsp_ext,ocsp_ht,ocsp_lib,ocsp_cl,"+ -
334 "ocsp_srv,ocsp_prn,ocsp_vfy,ocsp_err"
335$ LIB_UI_COMPAT = ",ui_compat"
336$ LIB_UI = "ui_err,ui_lib,ui_openssl,ui_util"+LIB_UI_COMPAT
337$ LIB_KRB5 = "krb5_asn"
338$ LIB_CMS = "cms_lib,cms_asn1,cms_att,cms_io,cms_smime,cms_err,"+ -
339 "cms_sd,cms_dd,cms_cd,cms_env,cms_enc,cms_ess,"+ -
340 "cms_pwri"
341$ LIB_PQUEUE = "pqueue"
342$ LIB_TS = "ts_err,ts_req_utils,ts_req_print,ts_rsp_utils,ts_rsp_print,"+ -
343 "ts_rsp_sign,ts_rsp_verify,ts_verify_ctx,ts_lib,ts_conf,"+ -
344 "ts_asn1"
345$ LIB_JPAKE = "jpake,jpake_err"
346$ LIB_SRP = "srp_lib,srp_vfy"
347$ LIB_STORE = "str_err,str_lib,str_meth,str_mem"
348$ LIB_CMAC = "cmac,cm_ameth.c,cm_pmeth"
349$!
350$! Setup exceptional compilations
351$!
352$ CC3_SHOWN = 0
353$ CC4_SHOWN = 0
354$ CC5_SHOWN = 0
355$ CC6_SHOWN = 0
356$!
357$! The following lists must have leading and trailing commas, and no
358$! embedded spaces. (They are scanned for ",name,".)
359$!
360$ ! Add definitions for no threads on OpenVMS 7.1 and higher.
361$ COMPILEWITH_CC3 = ",bss_rtcp,"
362$ ! Disable the DOLLARID warning. Not needed with /STANDARD=RELAXED.
363$ COMPILEWITH_CC4 = "" !!! ",a_utctm,bss_log,o_time,o_dir,"
364$ ! Disable disjoint optimization on VAX with DECC.
365$ COMPILEWITH_CC5 = ",md2_dgst,md4_dgst,md5_dgst,mdc2dgst," + -
366 "seed,sha_dgst,sha1dgst,rmd_dgst,bf_enc,"
367$ ! Disable the MIXLINKAGE warning.
368$ COMPILEWITH_CC6 = "" !!! ",enc_read,set_key,"
369$!
370$! Figure Out What Other Modules We Are To Build.
371$!
372$ BUILD_SET:
373$!
374$! Define A Module Counter.
375$!
376$ MODULE_COUNTER = 0
377$!
378$! Top Of The Loop.
379$!
380$ MODULE_NEXT:
381$!
382$! Extract The Module Name From The Encryption List.
383$!
384$ MODULE_NAME = F$ELEMENT(MODULE_COUNTER,",",ENCRYPT_TYPES)
385$ IF MODULE_NAME.EQS."Basic" THEN MODULE_NAME = ""
386$ MODULE_NAME1 = MODULE_NAME
387$!
388$! Check To See If We Are At The End Of The Module List.
389$!
390$ IF (MODULE_NAME.EQS.",")
391$ THEN
392$!
393$! We Are At The End Of The Module List, Go To MODULE_DONE.
394$!
395$ GOTO MODULE_DONE
396$!
397$! End The Module List Check.
398$!
399$ ENDIF
400$!
401$! Increment The Moudle Counter.
402$!
403$ MODULE_COUNTER = MODULE_COUNTER + 1
404$!
405$! Create The Library and Apps Module Names.
406$!
407$ LIB_MODULE = "LIB_" + MODULE_NAME
408$ APPS_MODULE = "APPS_" + MODULE_NAME
409$ IF (F$EXTRACT(0,5,MODULE_NAME).EQS."ASN1_")
410$ THEN
411$ MODULE_NAME = "ASN1"
412$ ENDIF
413$ IF (F$EXTRACT(0,4,MODULE_NAME).EQS."EVP_")
414$ THEN
415$ MODULE_NAME = "EVP"
416$ ENDIF
417$!
418$! Set state (can be LIB and APPS)
419$!
420$ STATE = "LIB"
421$ IF BUILDALL .EQS. "APPS" THEN STATE = "APPS"
422$!
423$! Check if the library module name actually is defined
424$!
425$ IF F$TYPE('LIB_MODULE') .EQS. ""
426$ THEN
427$ WRITE SYS$ERROR ""
428$ WRITE SYS$ERROR "The module ",MODULE_NAME1," does not exist. Continuing..."
429$ WRITE SYS$ERROR ""
430$ GOTO MODULE_NEXT
431$ ENDIF
432$!
433$! Top Of The Module Loop.
434$!
435$ MODULE_AGAIN:
436$!
437$! Tell The User What Module We Are Building.
438$!
439$ IF (MODULE_NAME1.NES."")
440$ THEN
441$ IF STATE .EQS. "LIB"
442$ THEN
443$ WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Library Files. (",BUILDALL,",",STATE,")"
444$ ELSE IF F$TYPE('APPS_MODULE') .NES. ""
445$ THEN
446$ WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Applications. (",BUILDALL,",",STATE,")"
447$ ENDIF
448$ ENDIF
449$ ENDIF
450$!
451$! Define A File Counter And Set It To "0".
452$!
453$ FILE_COUNTER = 0
454$ APPLICATION = ""
455$ APPLICATION_COUNTER = 0
456$!
457$! Top Of The File Loop.
458$!
459$ NEXT_FILE:
460$!
461$! Look in the LIB_MODULE is we're in state LIB
462$!
463$ IF STATE .EQS. "LIB"
464$ THEN
465$!
466$! O.K, Extract The File Name From The File List.
467$!
468$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_MODULE')
469$!
470$! else
471$!
472$ ELSE
473$ FILE_NAME = ","
474$!
475$ IF F$TYPE('APPS_MODULE') .NES. ""
476$ THEN
477$!
478$! Extract The File Name From The File List.
479$! This part is a bit more complicated.
480$!
481$ IF APPLICATION .EQS. ""
482$ THEN
483$ APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
484$ APPLICATION_COUNTER = APPLICATION_COUNTER + 1
485$ APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
486$ APPLICATION = F$ELEMENT(0,"/",APPLICATION)
487$ FILE_COUNTER = 0
488$ ENDIF
489$
490$! WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
491$! SHOW SYMBOL APPLICATION*
492$!
493$ IF APPLICATION .NES. ";"
494$ THEN
495$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",APPLICATION_OBJECTS)
496$ IF FILE_NAME .EQS. ","
497$ THEN
498$ APPLICATION = ""
499$ GOTO NEXT_FILE
500$ ENDIF
501$ ENDIF
502$ ENDIF
503$ ENDIF
504$!
505$! Check To See If We Are At The End Of The File List.
506$!
507$ IF (FILE_NAME.EQS.",")
508$ THEN
509$!
510$! We Are At The End Of The File List, Change State Or Goto FILE_DONE.
511$!
512$ IF STATE .EQS. "LIB" .AND. BUILDALL .NES. "LIBRARY"
513$ THEN
514$ STATE = "APPS"
515$ GOTO MODULE_AGAIN
516$ ELSE
517$ GOTO FILE_DONE
518$ ENDIF
519$!
520$! End The File List Check.
521$!
522$ ENDIF
523$!
524$! Increment The Counter.
525$!
526$ FILE_COUNTER = FILE_COUNTER + 1
527$!
528$! Create The Source File Name.
529$!
530$ TMP_FILE_NAME = F$ELEMENT(1,"]",FILE_NAME)
531$ IF TMP_FILE_NAME .EQS. "]" THEN TMP_FILE_NAME = FILE_NAME
532$ IF F$ELEMENT(0,".",TMP_FILE_NAME) .EQS. TMP_FILE_NAME THEN -
533 FILE_NAME = FILE_NAME + ".c"
534$ IF (MODULE_NAME.NES."")
535$ THEN
536$ SOURCE_FILE = "SYS$DISK:[." + MODULE_NAME+ "]" + FILE_NAME
537$ ELSE
538$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME
539$ ENDIF
540$ SOURCE_FILE = SOURCE_FILE - "]["
541$!
542$! Create The Object File Name.
543$!
544$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
545$ ON WARNING THEN GOTO NEXT_FILE
546$!
547$! Check To See If The File We Want To Compile Is Actually There.
548$!
549$ IF (F$SEARCH(SOURCE_FILE).EQS."")
550$ THEN
551$!
552$! Tell The User That The File Doesn't Exist.
553$!
554$ WRITE SYS$OUTPUT ""
555$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
556$ WRITE SYS$OUTPUT ""
557$!
558$! Exit The Build.
559$!
560$ GOTO EXIT
561$!
562$! End The File Exist Check.
563$!
564$ ENDIF
565$!
566$! Tell The User We Are Compiling The File.
567$!
568$ IF (MODULE_NAME.EQS."")
569$ THEN
570$ WRITE SYS$OUTPUT "Compiling The ",FILE_NAME," File. (",BUILDALL,",",STATE,")"
571$ ENDIF
572$ IF (MODULE_NAME.NES."")
573$ THEN
574$ WRITE SYS$OUTPUT " ",FILE_NAME,""
575$ ENDIF
576$!
577$! Compile The File.
578$!
579$ ON ERROR THEN GOTO NEXT_FILE
580$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ ","
581$ IF FILE_NAME - ".mar" .NES. FILE_NAME
582$ THEN
583$ MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
584$ ELSE
585$ IF COMPILEWITH_CC3 - FILE_NAME0 .NES. COMPILEWITH_CC3
586$ THEN
587$ write sys$output " \Using special rule (3)"
588$ if (.not. CC3_SHOWN)
589$ then
590$ CC3_SHOWN = 1
591$ x = " "+ CC3
592$ write /symbol sys$output x
593$ endif
594$ CC3/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
595$ ELSE
596$ IF COMPILEWITH_CC4 - FILE_NAME0 .NES. COMPILEWITH_CC4
597$ THEN
598$ write /symbol sys$output " \Using special rule (4)"
599$ if (.not. CC4_SHOWN)
600$ then
601$ CC4_SHOWN = 1
602$ x = " "+ CC4
603$ write /symbol sys$output x
604$ endif
605$ CC4/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
606$ ELSE
607$ IF CC5_DIFFERENT .AND. -
608 (COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5)
609$ THEN
610$ write sys$output " \Using special rule (5)"
611$ if (.not. CC5_SHOWN)
612$ then
613$ CC5_SHOWN = 1
614$ x = " "+ CC5
615$ write /symbol sys$output x
616$ endif
617$ CC5/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
618$ ELSE
619$ IF COMPILEWITH_CC6 - FILE_NAME0 .NES. COMPILEWITH_CC6
620$ THEN
621$ write sys$output " \Using special rule (6)"
622$ if (.not. CC6_SHOWN)
623$ then
624$ CC6_SHOWN = 1
625$ x = " "+ CC6
626$ write /symbol sys$output x
627$ endif
628$ CC6/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
629$ ELSE
630$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
631$ ENDIF
632$ ENDIF
633$ ENDIF
634$ ENDIF
635$ ENDIF
636$ IF STATE .EQS. "LIB"
637$ THEN
638$!
639$! Add It To The Library.
640$!
641$ LIBRARY/REPLACE 'LIB_NAME' 'OBJECT_FILE'
642$!
643$! Time To Clean Up The Object File.
644$!
645$ DELETE 'OBJECT_FILE';*
646$ ENDIF
647$!
648$! Go Back And Do It Again.
649$!
650$ GOTO NEXT_FILE
651$!
652$! All Done With This Library Part.
653$!
654$ FILE_DONE:
655$!
656$! Time To Build Some Applications
657$!
658$ IF F$TYPE('APPS_MODULE') .NES. "" .AND. BUILDALL .NES. "LIBRARY"
659$ THEN
660$ APPLICATION_COUNTER = 0
661$ NEXT_APPLICATION:
662$ APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
663$ IF APPLICATION .EQS. ";" THEN GOTO APPLICATION_DONE
664$
665$ APPLICATION_COUNTER = APPLICATION_COUNTER + 1
666$ APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
667$ APPLICATION = F$ELEMENT(0,"/",APPLICATION)
668$
669$! WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
670$! SHOW SYMBOL APPLICATION*
671$!
672$! Tell the user what happens
673$!
674$ WRITE SYS$OUTPUT " ",APPLICATION,".exe"
675$!
676$! Link The Program.
677$!
678$ ON ERROR THEN GOTO NEXT_APPLICATION
679$!
680$! Link With A TCP/IP Library.
681$!
682$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' -
683 /EXE='EXE_DIR''APPLICATION'.EXE -
684 'OBJ_DIR''APPLICATION_OBJECTS', -
685 'CRYPTO_LIB'/LIBRARY -
686 'TCPIP_LIB' -
687 'ZLIB_LIB' -
688 ,'OPT_FILE' /OPTIONS
689$!
690$ GOTO NEXT_APPLICATION
691$ APPLICATION_DONE:
692$ ENDIF
693$!
694$! Go Back And Get The Next Module.
695$!
696$ GOTO MODULE_NEXT
697$!
698$! All Done With This Module.
699$!
700$ MODULE_DONE:
701$!
702$! Tell The User That We Are All Done.
703$!
704$ WRITE SYS$OUTPUT "All Done..."
705$ EXIT:
706$ GOSUB CLEANUP
707$ EXIT
708$!
709$! Check For The Link Option FIle.
710$!
711$ CHECK_OPT_FILE:
712$!
713$! Check To See If We Need To Make A VAX C Option File.
714$!
715$ IF (COMPILER.EQS."VAXC")
716$ THEN
717$!
718$! Check To See If We Already Have A VAX C Linker Option File.
719$!
720$ IF (F$SEARCH(OPT_FILE).EQS."")
721$ THEN
722$!
723$! We Need A VAX C Linker Option File.
724$!
725$ CREATE 'OPT_FILE'
726$DECK
727!
728! Default System Options File To Link Against
729! The Sharable VAX C Runtime Library.
730!
731SYS$SHARE:VAXCRTL.EXE/SHARE
732$EOD
733$!
734$! End The Option File Check.
735$!
736$ ENDIF
737$!
738$! End The VAXC Check.
739$!
740$ ENDIF
741$!
742$! Check To See If We Need A GNU C Option File.
743$!
744$ IF (COMPILER.EQS."GNUC")
745$ THEN
746$!
747$! Check To See If We Already Have A GNU C Linker Option File.
748$!
749$ IF (F$SEARCH(OPT_FILE).EQS."")
750$ THEN
751$!
752$! We Need A GNU C Linker Option File.
753$!
754$ CREATE 'OPT_FILE'
755$DECK
756!
757! Default System Options File To Link Against
758! The Sharable C Runtime Library.
759!
760GNU_CC:[000000]GCCLIB/LIBRARY
761SYS$SHARE:VAXCRTL/SHARE
762$EOD
763$!
764$! End The Option File Check.
765$!
766$ ENDIF
767$!
768$! End The GNU C Check.
769$!
770$ ENDIF
771$!
772$! Check To See If We Need A DEC C Option File.
773$!
774$ IF (COMPILER.EQS."DECC")
775$ THEN
776$!
777$! Check To See If We Already Have A DEC C Linker Option File.
778$!
779$ IF (F$SEARCH(OPT_FILE).EQS."")
780$ THEN
781$!
782$! Figure Out If We Need A non-VAX Or A VAX Linker Option File.
783$!
784$ IF ARCH .EQS. "VAX"
785$ THEN
786$!
787$! We Need A DEC C Linker Option File For VAX.
788$!
789$ CREATE 'OPT_FILE'
790$DECK
791!
792! Default System Options File To Link Against
793! The Sharable DEC C Runtime Library.
794!
795SYS$SHARE:DECC$SHR.EXE/SHARE
796$EOD
797$!
798$! Else...
799$!
800$ ELSE
801$!
802$! Create The non-VAX Linker Option File.
803$!
804$ CREATE 'OPT_FILE'
805$DECK
806!
807! Default System Options File For non-VAX To Link Against
808! The Sharable C Runtime Library.
809!
810SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
811SYS$SHARE:CMA$OPEN_RTL/SHARE
812$EOD
813$!
814$! End The DEC C Option File Check.
815$!
816$ ENDIF
817$!
818$! End The Option File Search.
819$!
820$ ENDIF
821$!
822$! End The DEC C Check.
823$!
824$ ENDIF
825$!
826$! Tell The User What Linker Option File We Are Using.
827$!
828$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
829$!
830$! Time To RETURN.
831$!
832$ RETURN
833$!
834$! Check The User's Options.
835$!
836$ CHECK_OPTIONS:
837$!
838$! Check To See If P1 Is Blank.
839$!
840$ IF (P1.EQS."ALL")
841$ THEN
842$!
843$! P1 Is Blank, So Build Everything.
844$!
845$ BUILDALL = "TRUE"
846$!
847$! Else...
848$!
849$ ELSE
850$!
851$! Else, Check To See If P1 Has A Valid Argument.
852$!
853$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."APPS")
854$ THEN
855$!
856$! A Valid Argument.
857$!
858$ BUILDALL = P1
859$!
860$! Else...
861$!
862$ ELSE
863$!
864$! Tell The User We Don't Know What They Want.
865$!
866$ WRITE SYS$OUTPUT ""
867$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
868$ WRITE SYS$OUTPUT ""
869$ WRITE SYS$OUTPUT " ALL : Just Build Everything."
870$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
871$ WRITE SYS$OUTPUT " APPS : To Compile Just The [.xxx.EXE.CRYPTO]*.EXE Programs."
872$ WRITE SYS$OUTPUT ""
873$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
874$ WRITE SYS$OUTPUT ""
875$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture."
876$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture."
877$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
878$ WRITE SYS$OUTPUT ""
879$!
880$! Time To EXIT.
881$!
882$ EXIT
883$!
884$! End The Valid Argument Check.
885$!
886$ ENDIF
887$!
888$! End The P1 Check.
889$!
890$ ENDIF
891$!
892$! Check To See If P2 Is Blank.
893$!
894$ IF (P2.EQS."NODEBUG")
895$ THEN
896$!
897$! P2 Is NODEBUG, So Compile Without The Debugger Information.
898$!
899$ DEBUGGER = "NODEBUG"
900$ LINKMAP = "NOMAP"
901$ TRACEBACK = "NOTRACEBACK"
902$ GCC_OPTIMIZE = "OPTIMIZE"
903$ CC_OPTIMIZE = "OPTIMIZE"
904$ MACRO_OPTIMIZE = "OPTIMIZE"
905$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
906$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
907$ ELSE
908$!
909$! Check To See If We Are To Compile With Debugger Information.
910$!
911$ IF (P2.EQS."DEBUG")
912$ THEN
913$!
914$! Compile With Debugger Information.
915$!
916$ DEBUGGER = "DEBUG"
917$ LINKMAP = "MAP"
918$ TRACEBACK = "TRACEBACK"
919$ GCC_OPTIMIZE = "NOOPTIMIZE"
920$ CC_OPTIMIZE = "NOOPTIMIZE"
921$ MACRO_OPTIMIZE = "NOOPTIMIZE"
922$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
923$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
924$ ELSE
925$!
926$! They Entered An Invalid Option.
927$!
928$ WRITE SYS$OUTPUT ""
929$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
930$ WRITE SYS$OUTPUT ""
931$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
932$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
933$ WRITE SYS$OUTPUT ""
934$!
935$! Time To EXIT.
936$!
937$ EXIT
938$!
939$! End The Valid Argument Check.
940$!
941$ ENDIF
942$!
943$! End The P2 Check.
944$!
945$ ENDIF
946$!
947$! Special Threads For OpenVMS v7.1 Or Later
948$!
949$! Written By: Richard Levitte
950$! richard@levitte.org
951$!
952$!
953$! Check To See If We Have A Option For P5.
954$!
955$ IF (P5.EQS."")
956$ THEN
957$!
958$! Get The Version Of VMS We Are Using.
959$!
960$ ISSEVEN :=
961$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
962$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
963$!
964$! Check To See If The VMS Version Is v7.1 Or Later.
965$!
966$ IF (TMP.GE.71)
967$ THEN
968$!
969$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
970$!
971$ ISSEVEN := ,PTHREAD_USE_D4
972$!
973$! End The VMS Version Check.
974$!
975$ ENDIF
976$!
977$! End The P5 Check.
978$!
979$ ENDIF
980$!
981$! Check P7 (POINTER_SIZE).
982$!
983$ IF (P7 .NES. "") .AND. (ARCH .NES. "VAX")
984$ THEN
985$!
986$ IF (P7 .EQS. "32")
987$ THEN
988$ POINTER_SIZE = " /POINTER_SIZE=32"
989$ ELSE
990$ POINTER_SIZE = F$EDIT( P7, "COLLAPSE, UPCASE")
991$ IF ((POINTER_SIZE .EQS. "64") .OR. -
992 (POINTER_SIZE .EQS. "64=") .OR. -
993 (POINTER_SIZE .EQS. "64=ARGV"))
994$ THEN
995$ ARCHD = ARCH+ "_64"
996$ LIB32 = ""
997$ POINTER_SIZE = " /POINTER_SIZE=64"
998$ ELSE
999$!
1000$! Tell The User Entered An Invalid Option.
1001$!
1002$ WRITE SYS$OUTPUT ""
1003$ WRITE SYS$OUTPUT "The Option ", P7, -
1004 " Is Invalid. The Valid Options Are:"
1005$ WRITE SYS$OUTPUT ""
1006$ WRITE SYS$OUTPUT -
1007 " """" : Compile with default (short) pointers."
1008$ WRITE SYS$OUTPUT -
1009 " 32 : Compile with 32-bit (short) pointers."
1010$ WRITE SYS$OUTPUT -
1011 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
1012$ WRITE SYS$OUTPUT -
1013 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
1014$ WRITE SYS$OUTPUT -
1015 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
1016$ WRITE SYS$OUTPUT ""
1017$!
1018$! Time To EXIT.
1019$!
1020$ EXIT
1021$!
1022$ ENDIF
1023$!
1024$ ENDIF
1025$!
1026$! End The P7 (POINTER_SIZE) Check.
1027$!
1028$ ENDIF
1029$!
1030$! Set basic C compiler /INCLUDE directories.
1031$!
1032$ CC_INCLUDES = "SYS$DISK:[.''ARCHD'],SYS$DISK:[],SYS$DISK:[-],"+ -
1033 "SYS$DISK:[.ENGINE.VENDOR_DEFNS],SYS$DISK:[.MODES],SYS$DISK:[.ASN1],SYS$DISK:[.EVP]"
1034$!
1035$! Check To See If P3 Is Blank.
1036$!
1037$ IF (P3.EQS."")
1038$ THEN
1039$!
1040$! O.K., The User Didn't Specify A Compiler, Let's Try To
1041$! Find Out Which One To Use.
1042$!
1043$! Check To See If We Have GNU C.
1044$!
1045$ IF (F$TRNLNM("GNU_CC").NES."")
1046$ THEN
1047$!
1048$! Looks Like GNUC, Set To Use GNUC.
1049$!
1050$ P3 = "GNUC"
1051$!
1052$! Else...
1053$!
1054$ ELSE
1055$!
1056$! Check To See If We Have VAXC Or DECC.
1057$!
1058$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
1059$ THEN
1060$!
1061$! Looks Like DECC, Set To Use DECC.
1062$!
1063$ P3 = "DECC"
1064$!
1065$! Else...
1066$!
1067$ ELSE
1068$!
1069$! Looks Like VAXC, Set To Use VAXC.
1070$!
1071$ P3 = "VAXC"
1072$!
1073$! End The VAXC Compiler Check.
1074$!
1075$ ENDIF
1076$!
1077$! End The DECC & VAXC Compiler Check.
1078$!
1079$ ENDIF
1080$!
1081$! End The Compiler Check.
1082$!
1083$ ENDIF
1084$!
1085$! Check To See If We Have A Option For P4.
1086$!
1087$ IF (P4.EQS."")
1088$ THEN
1089$!
1090$! Find out what socket library we have available
1091$!
1092$ IF F$PARSE("SOCKETSHR:") .NES. ""
1093$ THEN
1094$!
1095$! We have SOCKETSHR, and it is my opinion that it's the best to use.
1096$!
1097$ P4 = "SOCKETSHR"
1098$!
1099$! Tell the user
1100$!
1101$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
1102$!
1103$! Else, let's look for something else
1104$!
1105$ ELSE
1106$!
1107$! Like UCX (the reason to do this before Multinet is that the UCX
1108$! emulation is easier to use...)
1109$!
1110$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
1111 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
1112 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
1113$ THEN
1114$!
1115$! Last resort: a UCX or UCX-compatible library
1116$!
1117$ P4 = "UCX"
1118$!
1119$! Tell the user
1120$!
1121$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
1122$!
1123$! That was all...
1124$!
1125$ ENDIF
1126$ ENDIF
1127$ ENDIF
1128$!
1129$! Set Up Initial CC Definitions, Possibly With User Ones
1130$!
1131$ CCDEFS = "TCPIP_TYPE_''P4',DSO_VMS"
1132$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
1133$ CCEXTRAFLAGS = ""
1134$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
1135$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
1136$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
1137 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
1138$!
1139$! Check To See If We Have A ZLIB Option.
1140$!
1141$ ZLIB = P8
1142$ IF (ZLIB .NES. "")
1143$ THEN
1144$!
1145$! Check for expected ZLIB files.
1146$!
1147$ err = 0
1148$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
1149$ if (f$search( file1) .eqs. "")
1150$ then
1151$ WRITE SYS$OUTPUT ""
1152$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
1153$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
1154$ err = 1
1155$ endif
1156$ file1 = f$parse( "A.;", ZLIB)- "A.;"
1157$!
1158$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
1159$ if (f$search( file2) .eqs. "")
1160$ then
1161$ if (err .eq. 0)
1162$ then
1163$ WRITE SYS$OUTPUT ""
1164$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
1165$ endif
1166$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
1167$ WRITE SYS$OUTPUT ""
1168$ err = err+ 2
1169$ endif
1170$ if (err .eq. 1)
1171$ then
1172$ WRITE SYS$OUTPUT ""
1173$ endif
1174$!
1175$ if (err .ne. 0)
1176$ then
1177$ EXIT
1178$ endif
1179$!
1180$ CCDEFS = """ZLIB=1"", "+ CCDEFS
1181$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
1182$ ZLIB_LIB = ", ''file2' /library"
1183$!
1184$! Print info
1185$!
1186$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
1187$!
1188$! End The ZLIB Check.
1189$!
1190$ ENDIF
1191$!
1192$! Check To See If The User Entered A Valid Parameter.
1193$!
1194$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
1195$ THEN
1196$!
1197$! Check To See If The User Wanted DECC.
1198$!
1199$ IF (P3.EQS."DECC")
1200$ THEN
1201$!
1202$! Looks Like DECC, Set To Use DECC.
1203$!
1204$ COMPILER = "DECC"
1205$!
1206$! Tell The User We Are Using DECC.
1207$!
1208$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1209$!
1210$! Use DECC...
1211$!
1212$ CC = "CC"
1213$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
1214 THEN CC = "CC/DECC"
1215$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
1216 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
1217 " /INCLUDE=(''CC_INCLUDES')"+ -
1218 CCEXTRAFLAGS
1219$!
1220$! Define The Linker Options File Name.
1221$!
1222$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
1223$!
1224$! End DECC Check.
1225$!
1226$ ENDIF
1227$!
1228$! Check To See If We Are To Use VAXC.
1229$!
1230$ IF (P3.EQS."VAXC")
1231$ THEN
1232$!
1233$! Looks Like VAXC, Set To Use VAXC.
1234$!
1235$ COMPILER = "VAXC"
1236$!
1237$! Tell The User We Are Using VAX C.
1238$!
1239$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1240$!
1241$! Compile Using VAXC.
1242$!
1243$ CC = "CC"
1244$ IF ARCH.NES."VAX"
1245$ THEN
1246$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
1247$ EXIT
1248$ ENDIF
1249$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
1250$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1251 "/INCLUDE=(''CC_INCLUDES')"+ -
1252 CCEXTRAFLAGS
1253$ CCDEFS = """VAXC""," + CCDEFS
1254$!
1255$! Define <sys> As SYS$COMMON:[SYSLIB]
1256$!
1257$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
1258$!
1259$! Define The Linker Options File Name.
1260$!
1261$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
1262$!
1263$! End VAXC Check
1264$!
1265$ ENDIF
1266$!
1267$! Check To See If We Are To Use GNU C.
1268$!
1269$ IF (P3.EQS."GNUC")
1270$ THEN
1271$!
1272$! Looks Like GNUC, Set To Use GNUC.
1273$!
1274$ COMPILER = "GNUC"
1275$!
1276$! Tell The User We Are Using GNUC.
1277$!
1278$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1279$!
1280$! Use GNU C...
1281$!
1282$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1283 "/INCLUDE=(''CC_INCLUDES')"+ -
1284 CCEXTRAFLAGS
1285$!
1286$! Define The Linker Options File Name.
1287$!
1288$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
1289$!
1290$! End The GNU C Check.
1291$!
1292$ ENDIF
1293$!
1294$! Set up default defines
1295$!
1296$ CCDEFS = """FLAT_INC=1""," + CCDEFS
1297$!
1298$! Finish up the definition of CC.
1299$!
1300$ IF COMPILER .EQS. "DECC"
1301$ THEN
1302$ IF CCDISABLEWARNINGS .EQS. ""
1303$ THEN
1304$ CC4DISABLEWARNINGS = "DOLLARID"
1305$ CC6DISABLEWARNINGS = "MIXLINKAGE"
1306$ ELSE
1307$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
1308$ CC6DISABLEWARNINGS = CCDISABLEWARNINGS + ",MIXLINKAGE"
1309$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
1310$ ENDIF
1311$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
1312$ CC6DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC6DISABLEWARNINGS + "))"
1313$ ELSE
1314$ CCDISABLEWARNINGS = ""
1315$ CC4DISABLEWARNINGS = ""
1316$ CC6DISABLEWARNINGS = ""
1317$ ENDIF
1318$ CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
1319$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
1320$ IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P2 .NES. "DEBUG"
1321$ THEN
1322$ CC5 = CC + " /OPTIMIZE=NODISJOINT"
1323$ CC5_DIFFERENT = 1
1324$ ELSE
1325$ CC5 = CC
1326$ CC5_DIFFERENT = 0
1327$ ENDIF
1328$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1329$ CC6 = CC - CCDISABLEWARNINGS + CC6DISABLEWARNINGS
1330$!
1331$! Show user the result
1332$!
1333$ WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
1334$!
1335$! Else The User Entered An Invalid Argument.
1336$!
1337$ ELSE
1338$!
1339$! Tell The User We Don't Know What They Want.
1340$!
1341$ WRITE SYS$OUTPUT ""
1342$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1343$ WRITE SYS$OUTPUT ""
1344$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
1345$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
1346$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
1347$ WRITE SYS$OUTPUT ""
1348$!
1349$! Time To EXIT.
1350$!
1351$ EXIT
1352$!
1353$! End The Valid Argument Check.
1354$!
1355$ ENDIF
1356$!
1357$! Build a MACRO command for the architecture at hand
1358$!
1359$ IF ARCH .EQS. "VAX" THEN MACRO = "MACRO/''DEBUGGER'"
1360$ IF ARCH .NES. "VAX" THEN MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
1361$!
1362$! Show user the result
1363$!
1364$ WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
1365$!
1366$! Time to check the contents, and to make sure we get the correct library.
1367$!
1368$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
1369 .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
1370$ THEN
1371$!
1372$! Check to see if SOCKETSHR was chosen
1373$!
1374$ IF P4.EQS."SOCKETSHR"
1375$ THEN
1376$!
1377$! Set the library to use SOCKETSHR
1378$!
1379$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
1380$!
1381$! Done with SOCKETSHR
1382$!
1383$ ENDIF
1384$!
1385$! Check to see if MULTINET was chosen
1386$!
1387$ IF P4.EQS."MULTINET"
1388$ THEN
1389$!
1390$! Set the library to use UCX emulation.
1391$!
1392$ P4 = "UCX"
1393$!
1394$! Done with MULTINET
1395$!
1396$ ENDIF
1397$!
1398$! Check to see if UCX was chosen
1399$!
1400$ IF P4.EQS."UCX"
1401$ THEN
1402$!
1403$! Set the library to use UCX.
1404$!
1405$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
1406$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1407$ THEN
1408$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
1409$ ELSE
1410$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1411 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
1412$ ENDIF
1413$!
1414$! Done with UCX
1415$!
1416$ ENDIF
1417$!
1418$! Check to see if TCPIP was chosen
1419$!
1420$ IF P4.EQS."TCPIP"
1421$ THEN
1422$!
1423$! Set the library to use TCPIP (post UCX).
1424$!
1425$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1426$!
1427$! Done with TCPIP
1428$!
1429$ ENDIF
1430$!
1431$! Check to see if NONE was chosen
1432$!
1433$ IF P4.EQS."NONE"
1434$ THEN
1435$!
1436$! Do not use a TCPIP library.
1437$!
1438$ TCPIP_LIB = ""
1439$!
1440$! Done with TCPIP
1441$!
1442$ ENDIF
1443$!
1444$! Print info
1445$!
1446$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
1447$!
1448$! Else The User Entered An Invalid Argument.
1449$!
1450$ ELSE
1451$!
1452$! Tell The User We Don't Know What They Want.
1453$!
1454$ WRITE SYS$OUTPUT ""
1455$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:"
1456$ WRITE SYS$OUTPUT ""
1457$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1458$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1459$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1460$ WRITE SYS$OUTPUT ""
1461$!
1462$! Time To EXIT.
1463$!
1464$ EXIT
1465$!
1466$! Done with TCP/IP libraries
1467$!
1468$ ENDIF
1469$!
1470$! Check if the user wanted to compile just a subset of all the encryption
1471$! methods.
1472$!
1473$ IF P6 .NES. ""
1474$ THEN
1475$ ENCRYPT_TYPES = P6
1476$ ENDIF
1477$!
1478$! Time To RETURN...
1479$!
1480$ RETURN
1481$!
1482$ INITIALISE:
1483$!
1484$! Save old value of the logical name OPENSSL
1485$!
1486$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1487$!
1488$! Save directory information
1489$!
1490$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1491$ __HERE = F$EDIT(__HERE,"UPCASE")
1492$ __TOP = __HERE - "CRYPTO]"
1493$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1494$!
1495$! Set up the logical name OPENSSL to point at the include directory
1496$!
1497$ DEFINE OPENSSL/NOLOG '__INCLUDE'
1498$!
1499$! Done
1500$!
1501$ RETURN
1502$!
1503$ CLEANUP:
1504$!
1505$! Restore the logical name OPENSSL if it had a value
1506$!
1507$ IF __SAVE_OPENSSL .EQS. ""
1508$ THEN
1509$ DEASSIGN OPENSSL
1510$ ELSE
1511$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
1512$ ENDIF
1513$!
1514$! Done
1515$!
1516$ RETURN
diff --git a/src/lib/libssl/src/crypto/crypto.h b/src/lib/libssl/src/crypto/crypto.h
index 6aeda0a9ac..f92fc5182d 100644
--- a/src/lib/libssl/src/crypto/crypto.h
+++ b/src/lib/libssl/src/crypto/crypto.h
@@ -488,10 +488,10 @@ void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int),
488 long (**go)(void)); 488 long (**go)(void));
489 489
490void *CRYPTO_malloc_locked(int num, const char *file, int line); 490void *CRYPTO_malloc_locked(int num, const char *file, int line);
491void CRYPTO_free_locked(void *); 491void CRYPTO_free_locked(void *ptr);
492void *CRYPTO_malloc(int num, const char *file, int line); 492void *CRYPTO_malloc(int num, const char *file, int line);
493char *CRYPTO_strdup(const char *str, const char *file, int line); 493char *CRYPTO_strdup(const char *str, const char *file, int line);
494void CRYPTO_free(void *); 494void CRYPTO_free(void *ptr);
495void *CRYPTO_realloc(void *addr,int num, const char *file, int line); 495void *CRYPTO_realloc(void *addr,int num, const char *file, int line);
496void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file, 496void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file,
497 int line); 497 int line);
@@ -574,6 +574,13 @@ void OPENSSL_init(void);
574#define fips_cipher_abort(alg) while(0) 574#define fips_cipher_abort(alg) while(0)
575#endif 575#endif
576 576
577/* CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It
578 * takes an amount of time dependent on |len|, but independent of the contents
579 * of |a| and |b|. Unlike memcmp, it cannot be used to put elements into a
580 * defined order as the return value when a != b is undefined, other than to be
581 * non-zero. */
582int CRYPTO_memcmp(const void *a, const void *b, size_t len);
583
577/* BEGIN ERROR CODES */ 584/* BEGIN ERROR CODES */
578/* The following lines are auto generated by the script mkerr.pl. Any changes 585/* The following lines are auto generated by the script mkerr.pl. Any changes
579 * made after this point may be overwritten when the script is next run. 586 * made after this point may be overwritten when the script is next run.
diff --git a/src/lib/libssl/src/crypto/des/des-lib.com b/src/lib/libssl/src/crypto/des/des-lib.com
deleted file mode 100644
index 348f1c0470..0000000000
--- a/src/lib/libssl/src/crypto/des/des-lib.com
+++ /dev/null
@@ -1,1005 +0,0 @@
1$!
2$! DES-LIB.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$!
10$! This command files compiles and creates the
11$! "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" library. The "xxx" denotes the machine
12$! architecture of ALPHA, IA64 or VAX.
13$!
14$! It was re-written to try to determine which "C" compiler to try to use
15$! or the user can specify a compiler in P3.
16$!
17$! Specify one of the following to build just that part, specify "ALL" to
18$! just build everything.
19$!
20$! ALL To Just Build "Everything".
21$! LIBRARY To Just Build The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library.
22$! DESTEST To Just Build The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program.
23$! SPEED To Just Build The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program.
24$! RPW To Just Build The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program.
25$! DES To Just Build The [.xxx.EXE.CRYPTO.DES]DES.EXE Program.
26$! DES_OPTS To Just Build The [.xxx.EXE.CRYPTO.DES]DES_OPTS.EXE Program.
27$!
28$! Specify either DEBUG or NODEBUG as P2 to compile with or without
29$! debugging information.
30$!
31$! Specify which compiler at P3 to try to compile under.
32$!
33$! VAXC For VAX C.
34$! DECC For DEC C.
35$! GNUC For GNU C.
36$!
37$! If you don't speficy a compiler, it will try to determine which
38$! "C" compiler to try to use.
39$!
40$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
41$!
42$!
43$! Make sure we know what architecture we run on.
44$!
45$!
46$! Check Which Architecture We Are Using.
47$!
48$ IF (F$GETSYI("CPU").LT.128)
49$ THEN
50$!
51$! The Architecture Is VAX
52$!
53$ ARCH := VAX
54$!
55$! Else...
56$!
57$ ELSE
58$!
59$! The Architecture Is Alpha, IA64 or whatever comes in the future.
60$!
61$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
62$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
63$!
64$! End The Architecture Check.
65$!
66$ ENDIF
67$!
68$! Define The OBJ Directory Name.
69$!
70$ OBJ_DIR := SYS$DISK:[--.'ARCH'.OBJ.CRYPTO.DES]
71$!
72$! Define The EXE Directory Name.
73$!
74$ EXE_DIR :== SYS$DISK:[--.'ARCH'.EXE.CRYPTO.DES]
75$!
76$! Check To Make Sure We Have Valid Command Line Parameters.
77$!
78$ GOSUB CHECK_OPTIONS
79$!
80$! Tell The User What Kind of Machine We Run On.
81$!
82$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
83$!
84$! Check To See If The Architecture Specific OBJ Directory Exists.
85$!
86$ IF (F$PARSE(OBJ_DIR).EQS."")
87$ THEN
88$!
89$! It Dosen't Exist, So Create It.
90$!
91$ CREATE/DIR 'OBJ_DIR'
92$!
93$! End The Architecture Specific OBJ Directory Check.
94$!
95$ ENDIF
96$!
97$! Check To See If The Architecture Specific Directory Exists.
98$!
99$ IF (F$PARSE(EXE_DIR).EQS."")
100$ THEN
101$!
102$! It Dosen't Exist, So Create It.
103$!
104$ CREATE/DIR 'EXE_DIR'
105$!
106$! End The Architecture Specific Directory Check.
107$!
108$ ENDIF
109$!
110$! Define The Library Name.
111$!
112$ LIB_NAME := 'EXE_DIR'LIBDES.OLB
113$!
114$! Check To See What We Are To Do.
115$!
116$ IF (BUILDALL.EQS."TRUE")
117$ THEN
118$!
119$! Since Nothing Special Was Specified, Do Everything.
120$!
121$ GOSUB LIBRARY
122$ GOSUB DESTEST
123$ GOSUB SPEED
124$ GOSUB RPW
125$ GOSUB DES
126$ GOSUB DES_OPTS
127$!
128$! Else...
129$!
130$ ELSE
131$!
132$! Build Just What The User Wants Us To Build.
133$!
134$ GOSUB 'BUILDALL'
135$!
136$! End The BUILDALL Check.
137$!
138$ ENDIF
139$!
140$! Time To EXIT.
141$!
142$ EXIT
143$ LIBRARY:
144$!
145$! Tell The User That We Are Compiling.
146$!
147$ WRITE SYS$OUTPUT "Compiling The ",LIB_NAME," Files."
148$!
149$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" Library...
150$!
151$ IF (F$SEARCH(LIB_NAME).EQS."")
152$ THEN
153$!
154$! Guess Not, Create The Library.
155$!
156$ LIBRARY/CREATE/OBJECT 'LIB_NAME'
157$!
158$! End The Library Exist Check.
159$!
160$ ENDIF
161$!
162$! Define The DES Library Files.
163$!
164$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ -
165 "ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ -
166 "enc_read,enc_writ,ofb64enc,"+ -
167 "ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ -
168 "des_enc,fcrypt_b,read2pwd,"+ -
169 "fcrypt,xcbc_enc,read_pwd,rpc_enc,cbc_cksm,supp"
170$!
171$! Define A File Counter And Set It To "0".
172$!
173$ FILE_COUNTER = 0
174$!
175$! Top Of The File Loop.
176$!
177$ NEXT_FILE:
178$!
179$! O.K, Extract The File Name From The File List.
180$!
181$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_DES)
182$!
183$! Check To See If We Are At The End Of The File List.
184$!
185$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
186$!
187$! Increment The Counter.
188$!
189$ FILE_COUNTER = FILE_COUNTER + 1
190$!
191$! Create The Source File Name.
192$!
193$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
194$!
195$! Tell The User We Are Compiling The Source File.
196$!
197$ WRITE SYS$OUTPUT " ",FILE_NAME,".C"
198$!
199$! Create The Object File Name.
200$!
201$ OBJECT_FILE = OBJ_DIR + FILE_NAME + "." + ARCH + "OBJ"
202$ ON WARNING THEN GOTO NEXT_FILE
203$!
204$! Check To See If The File We Want To Compile Actually Exists.
205$!
206$ IF (F$SEARCH(SOURCE_FILE).EQS."")
207$ THEN
208$!
209$! Tell The User That The File Dosen't Exist.
210$!
211$ WRITE SYS$OUTPUT ""
212$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
213$ WRITE SYS$OUTPUT ""
214$!
215$! Exit The Build.
216$!
217$ EXIT
218$!
219$! End The File Exists Check.
220$!
221$ ENDIF
222$!
223$! Compile The File.
224$!
225$ ON ERROR THEN GOTO NEXT_FILE
226$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
227$!
228$! Add It To The Library.
229$!
230$ LIBRARY/REPLACE/OBJECT 'LIB_NAME' 'OBJECT_FILE'
231$!
232$! Time To Clean Up The Object File.
233$!
234$ DELETE 'OBJECT_FILE';*
235$!
236$! Go Back And Do It Again.
237$!
238$ GOTO NEXT_FILE
239$!
240$! All Done With This Library Part.
241$!
242$ FILE_DONE:
243$!
244$! Tell The User That We Are All Done.
245$!
246$ WRITE SYS$OUTPUT "Library ",LIB_NAME," Built."
247$!
248$! All Done, Time To Return.
249$!
250$ RETURN
251$!
252$! Compile The DESTEST Program.
253$!
254$ DESTEST:
255$!
256$! Check To See If We Have The Proper Libraries.
257$!
258$ GOSUB LIB_CHECK
259$!
260$! Check To See If We Have A Linker Option File.
261$!
262$ GOSUB CHECK_OPT_FILE
263$!
264$! Check To See If The File We Want To Compile Actually Exists.
265$!
266$ IF (F$SEARCH("SYS$DISK:[]DESTEST.C").EQS."")
267$ THEN
268$!
269$! Tell The User That The File Dosen't Exist.
270$!
271$ WRITE SYS$OUTPUT ""
272$ WRITE SYS$OUTPUT "The File DESTEST.C Dosen't Exist."
273$ WRITE SYS$OUTPUT ""
274$!
275$! Exit The Build.
276$!
277$ EXIT
278$!
279$! End The DESTEST.C File Check.
280$!
281$ ENDIF
282$!
283$! Tell The User What We Are Building.
284$!
285$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DESTEST.EXE"
286$!
287$! Compile The DESTEST Program.
288$!
289$ CC/OBJECT='OBJ_DIR'DESTEST.OBJ SYS$DISK:[]DESTEST.C
290$!
291$! Link The DESTEST Program.
292$!
293$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DESTEST.EXE -
294 'OBJ_DIR'DESTEST.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
295$!
296$! All Done, Time To Return.
297$!
298$ RETURN
299$!
300$! Compile The SPEED Program.
301$!
302$ SPEED:
303$!
304$! Check To See If We Have The Proper Libraries.
305$!
306$ GOSUB LIB_CHECK
307$!
308$! Check To See If We Have A Linker Option File.
309$!
310$ GOSUB CHECK_OPT_FILE
311$!
312$! Check To See If The File We Want To Compile Actually Exists.
313$!
314$ IF (F$SEARCH("SYS$DISK:[]SPEED.C").EQS."")
315$ THEN
316$!
317$! Tell The User That The File Dosen't Exist.
318$!
319$ WRITE SYS$OUTPUT ""
320$ WRITE SYS$OUTPUT "The File SPEED.C Dosen't Exist."
321$ WRITE SYS$OUTPUT ""
322$!
323$! Exit The Build.
324$!
325$ EXIT
326$!
327$! End The SPEED.C File Check.
328$!
329$ ENDIF
330$!
331$! Tell The User What We Are Building.
332$!
333$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"SPEED.EXE"
334$!
335$! Compile The SPEED Program.
336$!
337$ CC/OBJECT='OBJ_DIR'SPEED.OBJ SYS$DISK:[]SPEED.C
338$!
339$! Link The SPEED Program.
340$!
341$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'SPEED.EXE -
342 'OBJ_DIR'SPEED.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
343$!
344$! All Done, Time To Return.
345$!
346$ RETURN
347$!
348$! Compile The RPW Program.
349$!
350$ RPW:
351$!
352$! Check To See If We Have The Proper Libraries.
353$!
354$ GOSUB LIB_CHECK
355$!
356$! Check To See If We Have A Linker Option File.
357$!
358$ GOSUB CHECK_OPT_FILE
359$!
360$! Check To See If The File We Want To Compile Actually Exists.
361$!
362$ IF (F$SEARCH("SYS$DISK:[]RPW.C").EQS."")
363$ THEN
364$!
365$! Tell The User That The File Dosen't Exist.
366$!
367$ WRITE SYS$OUTPUT ""
368$ WRITE SYS$OUTPUT "The File RPW.C Dosen't Exist."
369$ WRITE SYS$OUTPUT ""
370$!
371$! Exit The Build.
372$!
373$ EXIT
374$!
375$! End The RPW.C File Check.
376$!
377$ ENDIF
378$!
379$! Tell The User What We Are Building.
380$!
381$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"RPW.EXE"
382$!
383$! Compile The RPW Program.
384$!
385$ CC/OBJECT='OBJ_DIR'RPW.OBJ SYS$DISK:[]RPW.C
386$!
387$! Link The RPW Program.
388$!
389$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'RPW.EXE -
390 'OBJ_DIR'RPW.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
391$!
392$! All Done, Time To Return.
393$!
394$ RETURN
395$!
396$! Compile The DES Program.
397$!
398$ DES:
399$!
400$! Check To See If We Have The Proper Libraries.
401$!
402$ GOSUB LIB_CHECK
403$!
404$! Check To See If We Have A Linker Option File.
405$!
406$ GOSUB CHECK_OPT_FILE
407$!
408$! Check To See If The File We Want To Compile Actually Exists.
409$!
410$ IF (F$SEARCH("SYS$DISK:[]DES.C").EQS."")
411$ THEN
412$!
413$! Tell The User That The File Dosen't Exist.
414$!
415$ WRITE SYS$OUTPUT ""
416$ WRITE SYS$OUTPUT "The File DES.C Dosen't Exist."
417$ WRITE SYS$OUTPUT ""
418$!
419$! Exit The Build.
420$!
421$ EXIT
422$!
423$! End The DES.C File Check.
424$!
425$ ENDIF
426$!
427$! Tell The User What We Are Building.
428$!
429$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES.EXE"
430$!
431$! Compile The DES Program.
432$!
433$ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]DES.C
434$ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]CBC3_ENC.C
435$!
436$! Link The DES Program.
437$!
438$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES.EXE -
439 'OBJ_DIR'DES.OBJ,'OBJ_DIR'CBC3_ENC.OBJ,-
440 'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
441$!
442$! All Done, Time To Return.
443$!
444$ RETURN
445$!
446$! Compile The DES_OPTS Program.
447$!
448$ DES_OPTS:
449$!
450$! Check To See If We Have The Proper Libraries.
451$!
452$ GOSUB LIB_CHECK
453$!
454$! Check To See If We Have A Linker Option File.
455$!
456$ GOSUB CHECK_OPT_FILE
457$!
458$! Check To See If The File We Want To Compile Actually Exists.
459$!
460$ IF (F$SEARCH("SYS$DISK:[]DES_OPTS.C").EQS."")
461$ THEN
462$!
463$! Tell The User That The File Dosen't Exist.
464$!
465$ WRITE SYS$OUTPUT ""
466$ WRITE SYS$OUTPUT "The File DES_OPTS.C Dosen't Exist."
467$ WRITE SYS$OUTPUT ""
468$!
469$! Exit The Build.
470$!
471$ EXIT
472$!
473$! End The DES_OPTS.C File Check.
474$!
475$ ENDIF
476$!
477$! Tell The User What We Are Building.
478$!
479$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES_OPTS.EXE"
480$!
481$! Compile The DES_OPTS Program.
482$!
483$ CC/OBJECT='OBJ_DIR'DES_OPTS.OBJ SYS$DISK:[]DES_OPTS.C
484$!
485$! Link The DES_OPTS Program.
486$!
487$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES_OPTS.EXE -
488 'OBJ_DIR'DES_OPTS.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
489$!
490$! All Done, Time To Return.
491$!
492$ RETURN
493$ EXIT
494$!
495$! Check For The Link Option FIle.
496$!
497$ CHECK_OPT_FILE:
498$!
499$! Check To See If We Need To Make A VAX C Option File.
500$!
501$ IF (COMPILER.EQS."VAXC")
502$ THEN
503$!
504$! Check To See If We Already Have A VAX C Linker Option File.
505$!
506$ IF (F$SEARCH(OPT_FILE).EQS."")
507$ THEN
508$!
509$! We Need A VAX C Linker Option File.
510$!
511$ CREATE 'OPT_FILE'
512$DECK
513!
514! Default System Options File To Link Agianst
515! The Sharable VAX C Runtime Library.
516!
517SYS$SHARE:VAXCRTL.EXE/SHARE
518$EOD
519$!
520$! End The Option File Check.
521$!
522$ ENDIF
523$!
524$! End The VAXC Check.
525$!
526$ ENDIF
527$!
528$! Check To See If We Need A GNU C Option File.
529$!
530$ IF (COMPILER.EQS."GNUC")
531$ THEN
532$!
533$! Check To See If We Already Have A GNU C Linker Option File.
534$!
535$ IF (F$SEARCH(OPT_FILE).EQS."")
536$ THEN
537$!
538$! We Need A GNU C Linker Option File.
539$!
540$ CREATE 'OPT_FILE'
541$DECK
542!
543! Default System Options File To Link Agianst
544! The Sharable C Runtime Library.
545!
546GNU_CC:[000000]GCCLIB/LIBRARY
547SYS$SHARE:VAXCRTL/SHARE
548$EOD
549$!
550$! End The Option File Check.
551$!
552$ ENDIF
553$!
554$! End The GNU C Check.
555$!
556$ ENDIF
557$!
558$! Check To See If We Need A DEC C Option File.
559$!
560$ IF (COMPILER.EQS."DECC")
561$ THEN
562$!
563$! Check To See If We Already Have A DEC C Linker Option File.
564$!
565$ IF (F$SEARCH(OPT_FILE).EQS."")
566$ THEN
567$!
568$! Figure Out If We Need An non-VAX Or A VAX Linker Option File.
569$!
570$ IF (F$GETSYI("CPU").LT.128)
571$ THEN
572$!
573$! We Need A DEC C Linker Option File For VAX.
574$!
575$ CREATE 'OPT_FILE'
576$DECK
577!
578! Default System Options File To Link Agianst
579! The Sharable DEC C Runtime Library.
580!
581SYS$SHARE:DECC$SHR.EXE/SHARE
582$EOD
583$!
584$! Else...
585$!
586$ ELSE
587$!
588$! Create The non-VAX Linker Option File.
589$!
590$ CREATE 'OPT_FILE'
591$DECK
592!
593! Default System Options File For non-VAX To Link Agianst
594! The Sharable C Runtime Library.
595!
596SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
597SYS$SHARE:CMA$OPEN_RTL/SHARE
598$EOD
599$!
600$! End The DEC C Option File Check.
601$!
602$ ENDIF
603$!
604$! End The Option File Search.
605$!
606$ ENDIF
607$!
608$! End The DEC C Check.
609$!
610$ ENDIF
611$!
612$! Tell The User What Linker Option File We Are Using.
613$!
614$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
615$!
616$! Time To RETURN.
617$!
618$ RETURN
619$!
620$! Library Check.
621$!
622$ LIB_CHECK:
623$!
624$! Look For The Library LIBDES.OLB.
625$!
626$ IF (F$SEARCH(LIB_NAME).EQS."")
627$ THEN
628$!
629$! Tell The User We Can't Find The [.xxx.CRYPTO.DES]LIBDES.OLB Library.
630$!
631$ WRITE SYS$OUTPUT ""
632$ WRITE SYS$OUTPUT "Can't Find The Library ",LIB_NAME,"."
633$ WRITE SYS$OUTPUT "We Can't Link Without It."
634$ WRITE SYS$OUTPUT ""
635$!
636$! Since We Can't Link Without It, Exit.
637$!
638$ EXIT
639$ ENDIF
640$!
641$! Time To Return.
642$!
643$ RETURN
644$!
645$! Check The User's Options.
646$!
647$ CHECK_OPTIONS:
648$!
649$! Check To See If We Are To "Just Build Everything".
650$!
651$ IF (P1.EQS."ALL")
652$ THEN
653$!
654$! P1 Is "ALL", So Build Everything.
655$!
656$ BUILDALL = "TRUE"
657$!
658$! Else...
659$!
660$ ELSE
661$!
662$! Else, Check To See If P1 Has A Valid Argument.
663$!
664$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."DESTEST").OR.(P1.EQS."SPEED") -
665 .OR.(P1.EQS."RPW").OR.(P1.EQS."DES").OR.(P1.EQS."DES_OPTS")
666$ THEN
667$!
668$! A Valid Argument.
669$!
670$ BUILDALL = P1
671$!
672$! Else...
673$!
674$ ELSE
675$!
676$! Tell The User We Don't Know What They Want.
677$!
678$ WRITE SYS$OUTPUT ""
679$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
680$ WRITE SYS$OUTPUT ""
681$ WRITE SYS$OUTPUT " ALL : Just Build Everything."
682$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library."
683$ WRITE SYS$OUTPUT " DESTEST : To Compile Just The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program."
684$ WRITE SYS$OUTPUT " SPEED : To Compile Just The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program."
685$ WRITE SYS$OUTPUT " RPW : To Compile Just The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program."
686$ WRITE SYS$OUTPUT " DES : To Compile Just The [.xxx.EXE.CRYPTO.DES]DES.EXE Program."
687$ WRITE SYS$OUTPUT " DES_OPTS : To Compile Just The [.xxx.EXE.CRYTPO.DES]DES_OPTS.EXE Program."
688$ WRITE SYS$OUTPUT ""
689$ WRITE SYS$OUTPUT " Where 'xxx' Stands For: "
690$ WRITE SYS$OUTPUT ""
691$ WRITE SYS$OUTPUT " ALPHA : Alpha Architecture."
692$ WRITE SYS$OUTPUT " IA64 : IA64 Architecture."
693$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
694$ WRITE SYS$OUTPUT ""
695$!
696$! Time To EXIT.
697$!
698$ EXIT
699$!
700$! End The Valid Argument Check.
701$!
702$ ENDIF
703$!
704$! End The P1 Check.
705$!
706$ ENDIF
707$!
708$! Check To See If We Are To Compile Without Debugger Information.
709$!
710$ IF (P2.EQS."NODEBUG")
711$ THEN
712$!
713$! P2 Is Blank, So Compile Without Debugger Information.
714$!
715$ DEBUGGER = "NODEBUG"
716$ TRACEBACK = "NOTRACEBACK"
717$ GCC_OPTIMIZE = "OPTIMIZE"
718$ CC_OPTIMIZE = "OPTIMIZE"
719$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
720$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
721$!
722$! Else...
723$!
724$ ELSE
725$!
726$! Check To See If We Are To Compile With Debugger Information.
727$!
728$ IF (P2.EQS."DEBUG")
729$ THEN
730$!
731$! Compile With Debugger Information.
732$!
733$ DEBUGGER = "DEBUG"
734$ TRACEBACK = "TRACEBACK"
735$ GCC_OPTIMIZE = "NOOPTIMIZE"
736$ CC_OPTIMIZE = "NOOPTIMIZE"
737$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
738$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
739$!
740$! Else...
741$!
742$ ELSE
743$!
744$! Tell The User Entered An Invalid Option..
745$!
746$ WRITE SYS$OUTPUT ""
747$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
748$ WRITE SYS$OUTPUT ""
749$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
750$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
751$ WRITE SYS$OUTPUT ""
752$!
753$! Time To EXIT.
754$!
755$ EXIT
756$!
757$! End The Valid Argument Check.
758$!
759$ ENDIF
760$!
761$! End The P2 Check.
762$!
763$ ENDIF
764$!
765$! Special Threads For OpenVMS v7.1 Or Later.
766$!
767$! Written By: Richard Levitte
768$! richard@levitte.org
769$!
770$!
771$! Check To See If We Have A Option For P4.
772$!
773$ IF (P4.EQS."")
774$ THEN
775$!
776$! Get The Version Of VMS We Are Using.
777$!
778$ ISSEVEN := ""
779$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
780$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
781$!
782$! Check To See If The VMS Version Is v7.1 Or Later.
783$!
784$ IF (TMP.GE.71)
785$ THEN
786$!
787$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
788$!
789$ ISSEVEN := ,PTHREAD_USE_D4
790$!
791$! End The VMS Version Check.
792$!
793$ ENDIF
794$!
795$! End The P4 Check.
796$!
797$ ENDIF
798$!
799$! Check To See If P3 Is Blank.
800$!
801$ IF (P3.EQS."")
802$ THEN
803$!
804$! O.K., The User Didn't Specify A Compiler, Let's Try To
805$! Find Out Which One To Use.
806$!
807$! Check To See If We Have GNU C.
808$!
809$ IF (F$TRNLNM("GNU_CC").NES."")
810$ THEN
811$!
812$! Looks Like GNUC, Set To Use GNUC.
813$!
814$ P3 = "GNUC"
815$!
816$! Else...
817$!
818$ ELSE
819$!
820$! Check To See If We Have VAXC Or DECC.
821$!
822$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
823$ THEN
824$!
825$! Looks Like DECC, Set To Use DECC.
826$!
827$ P3 = "DECC"
828$!
829$! Else...
830$!
831$ ELSE
832$!
833$! Looks Like VAXC, Set To Use VAXC.
834$!
835$ P3 = "VAXC"
836$!
837$! End The VAXC Compiler Check.
838$!
839$ ENDIF
840$!
841$! End The DECC & VAXC Compiler Check.
842$!
843$ ENDIF
844$!
845$! End The Compiler Check.
846$!
847$ ENDIF
848$!
849$! Set Up Initial CC Definitions, Possibly With User Ones
850$!
851$ CCDEFS = ""
852$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = USER_CCDEFS
853$ CCEXTRAFLAGS = ""
854$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
855$ CCDISABLEWARNINGS = ""
856$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
857 CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
858$!
859$! Check To See If The User Entered A Valid Paramter.
860$!
861$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
862$ THEN
863$!
864$! Check To See If The User Wanted DECC.
865$!
866$ IF (P3.EQS."DECC")
867$ THEN
868$!
869$! Looks Like DECC, Set To Use DECC.
870$!
871$ COMPILER = "DECC"
872$!
873$! Tell The User We Are Using DECC.
874$!
875$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
876$!
877$! Use DECC...
878$!
879$ CC = "CC"
880$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
881 THEN CC = "CC/DECC"
882$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
883 "/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS
884$!
885$! Define The Linker Options File Name.
886$!
887$ OPT_FILE = "''EXE_DIR'VAX_DECC_OPTIONS.OPT"
888$!
889$! End DECC Check.
890$!
891$ ENDIF
892$!
893$! Check To See If We Are To Use VAXC.
894$!
895$ IF (P3.EQS."VAXC")
896$ THEN
897$!
898$! Looks Like VAXC, Set To Use VAXC.
899$!
900$ COMPILER = "VAXC"
901$!
902$! Tell The User We Are Using VAX C.
903$!
904$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
905$!
906$! Compile Using VAXC.
907$!
908$ CC = "CC"
909$ IF ARCH.NES."VAX"
910$ THEN
911$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
912$ EXIT
913$ ENDIF
914$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
915$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
916$ CCDEFS = """VAXC""," + CCDEFS
917$!
918$! Define <sys> As SYS$COMMON:[SYSLIB]
919$!
920$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
921$!
922$! Define The Linker Options File Name.
923$!
924$ OPT_FILE = "''EXE_DIR'VAX_VAXC_OPTIONS.OPT"
925$!
926$! End VAXC Check
927$!
928$ ENDIF
929$!
930$! Check To See If We Are To Use GNU C.
931$!
932$ IF (P3.EQS."GNUC")
933$ THEN
934$!
935$! Looks Like GNUC, Set To Use GNUC.
936$!
937$ COMPILER = "GNUC"
938$!
939$! Tell The User We Are Using GNUC.
940$!
941$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
942$!
943$! Use GNU C...
944$!
945$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS
946$!
947$! Define The Linker Options File Name.
948$!
949$ OPT_FILE = "''EXE_DIR'VAX_GNUC_OPTIONS.OPT"
950$!
951$! End The GNU C Check.
952$!
953$ ENDIF
954$!
955$! Set up default defines
956$!
957$ CCDEFS = """FLAT_INC=1""," + CCDEFS
958$!
959$! Finish up the definition of CC.
960$!
961$ IF COMPILER .EQS. "DECC"
962$ THEN
963$ IF CCDISABLEWARNINGS .EQS. ""
964$ THEN
965$ CC4DISABLEWARNINGS = "DOLLARID"
966$ ELSE
967$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
968$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
969$ ENDIF
970$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
971$ ELSE
972$ CCDISABLEWARNINGS = ""
973$ CC4DISABLEWARNINGS = ""
974$ ENDIF
975$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
976$!
977$! Show user the result
978$!
979$ WRITE SYS$OUTPUT "Main Compiling Command: ",CC
980$!
981$! Else The User Entered An Invalid Argument.
982$!
983$ ELSE
984$!
985$! Tell The User We Don't Know What They Want.
986$!
987$ WRITE SYS$OUTPUT ""
988$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
989$ WRITE SYS$OUTPUT ""
990$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
991$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
992$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
993$ WRITE SYS$OUTPUT ""
994$!
995$! Time To EXIT.
996$!
997$ EXIT
998$!
999$! End The P3 Check.
1000$!
1001$ ENDIF
1002$!
1003$! Time To RETURN...
1004$!
1005$ RETURN
diff --git a/src/lib/libssl/src/crypto/des/des.h b/src/lib/libssl/src/crypto/des/des.h
index 23c8cfc901..1eaedcbd24 100644
--- a/src/lib/libssl/src/crypto/des/des.h
+++ b/src/lib/libssl/src/crypto/des/des.h
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#ifndef HEADER_DES_H 59#ifndef HEADER_NEW_DES_H
60#define HEADER_DES_H 60#define HEADER_NEW_DES_H
61 61
62#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES, 62#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES,
63 DES_LONG (via openssl/opensslconf.h */ 63 DES_LONG (via openssl/opensslconf.h */
@@ -71,8 +71,6 @@
71# define OPENSSL_EXTERN OPENSSL_EXPORT 71# define OPENSSL_EXTERN OPENSSL_EXPORT
72#endif 72#endif
73 73
74#define des_SPtrans DES_SPtrans
75
76#ifdef __cplusplus 74#ifdef __cplusplus
77extern "C" { 75extern "C" {
78#endif 76#endif
diff --git a/src/lib/libssl/src/crypto/des/des_old.h b/src/lib/libssl/src/crypto/des/des_old.h
index 8665ba4e7e..2b2c372354 100644
--- a/src/lib/libssl/src/crypto/des/des_old.h
+++ b/src/lib/libssl/src/crypto/des/des_old.h
@@ -88,8 +88,8 @@
88 * 88 *
89 */ 89 */
90 90
91#ifndef HEADER_DES_OLD_H 91#ifndef HEADER_DES_H
92#define HEADER_DES_OLD_H 92#define HEADER_DES_H
93 93
94#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ 94#include <openssl/e_os2.h> /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */
95 95
@@ -97,7 +97,7 @@
97#error DES is disabled. 97#error DES is disabled.
98#endif 98#endif
99 99
100#ifndef HEADER_DES_H 100#ifndef HEADER_NEW_DES_H
101#error You must include des.h, not des_old.h directly. 101#error You must include des.h, not des_old.h directly.
102#endif 102#endif
103 103
diff --git a/src/lib/libssl/src/crypto/des/set_key.c b/src/lib/libssl/src/crypto/des/set_key.c
index d3e69ca8b5..da4d62e112 100644
--- a/src/lib/libssl/src/crypto/des/set_key.c
+++ b/src/lib/libssl/src/crypto/des/set_key.c
@@ -63,9 +63,8 @@
63 * 1.1 added norm_expand_bits 63 * 1.1 added norm_expand_bits
64 * 1.0 First working version 64 * 1.0 First working version
65 */ 65 */
66#include "des_locl.h"
67
68#include <openssl/crypto.h> 66#include <openssl/crypto.h>
67#include "des_locl.h"
69 68
70OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0) /* defaults to false */ 69OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0) /* defaults to false */
71 70
diff --git a/src/lib/libssl/src/crypto/des/str2key.c b/src/lib/libssl/src/crypto/des/str2key.c
index 9c2054bda6..1077f99d1b 100644
--- a/src/lib/libssl/src/crypto/des/str2key.c
+++ b/src/lib/libssl/src/crypto/des/str2key.c
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include "des_locl.h"
60#include <openssl/crypto.h> 59#include <openssl/crypto.h>
60#include "des_locl.h"
61 61
62void DES_string_to_key(const char *str, DES_cblock *key) 62void DES_string_to_key(const char *str, DES_cblock *key)
63 { 63 {
diff --git a/src/lib/libssl/src/crypto/dso/dso_dlfcn.c b/src/lib/libssl/src/crypto/dso/dso_dlfcn.c
index e21b9f6dbc..5f351b318d 100644
--- a/src/lib/libssl/src/crypto/dso/dso_dlfcn.c
+++ b/src/lib/libssl/src/crypto/dso/dso_dlfcn.c
@@ -86,7 +86,7 @@ DSO_METHOD *DSO_METHOD_dlfcn(void)
86# if defined(_AIX) || defined(__CYGWIN__) || \ 86# if defined(_AIX) || defined(__CYGWIN__) || \
87 defined(__SCO_VERSION__) || defined(_SCO_ELF) || \ 87 defined(__SCO_VERSION__) || defined(_SCO_ELF) || \
88 (defined(__osf__) && !defined(RTLD_NEXT)) || \ 88 (defined(__osf__) && !defined(RTLD_NEXT)) || \
89 (defined(__OpenBSD__) && (!defined(__ELF__) || !defined(RTLD_SELF))) || \ 89 (defined(__OpenBSD__) && !defined(RTLD_SELF)) || \
90 defined(__ANDROID__) 90 defined(__ANDROID__)
91# undef HAVE_DLINFO 91# undef HAVE_DLINFO
92# endif 92# endif
diff --git a/src/lib/libssl/src/crypto/ec/ec.h b/src/lib/libssl/src/crypto/ec/ec.h
index 9d01325af3..dfe8710d33 100644
--- a/src/lib/libssl/src/crypto/ec/ec.h
+++ b/src/lib/libssl/src/crypto/ec/ec.h
@@ -274,10 +274,10 @@ int EC_GROUP_get_curve_name(const EC_GROUP *group);
274void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); 274void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
275int EC_GROUP_get_asn1_flag(const EC_GROUP *group); 275int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
276 276
277void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); 277void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
278point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); 278point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
279 279
280unsigned char *EC_GROUP_get0_seed(const EC_GROUP *); 280unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
281size_t EC_GROUP_get_seed_len(const EC_GROUP *); 281size_t EC_GROUP_get_seed_len(const EC_GROUP *);
282size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); 282size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
283 283
@@ -626,8 +626,8 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *c
626 */ 626 */
627int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); 627int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
628 628
629int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *); 629int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
630int EC_POINTs_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *); 630int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
631 631
632/** Computes r = generator * n sum_{i=0}^num p[i] * m[i] 632/** Computes r = generator * n sum_{i=0}^num p[i] * m[i]
633 * \param group underlying EC_GROUP object 633 * \param group underlying EC_GROUP object
@@ -800,16 +800,24 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
800int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); 800int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
801 801
802unsigned EC_KEY_get_enc_flags(const EC_KEY *key); 802unsigned EC_KEY_get_enc_flags(const EC_KEY *key);
803void EC_KEY_set_enc_flags(EC_KEY *, unsigned int); 803void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
804point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *); 804point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
805void EC_KEY_set_conv_form(EC_KEY *, point_conversion_form_t); 805void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
806/* functions to set/get method specific data */ 806/* functions to set/get method specific data */
807void *EC_KEY_get_key_method_data(EC_KEY *, 807void *EC_KEY_get_key_method_data(EC_KEY *key,
808 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *)); 808 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
809void EC_KEY_insert_key_method_data(EC_KEY *, void *data, 809/** Sets the key method data of an EC_KEY object, if none has yet been set.
810 * \param key EC_KEY object
811 * \param data opaque data to install.
812 * \param dup_func a function that duplicates |data|.
813 * \param free_func a function that frees |data|.
814 * \param clear_free_func a function that wipes and frees |data|.
815 * \return the previously set data pointer, or NULL if |data| was inserted.
816 */
817void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
810 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *)); 818 void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
811/* wrapper functions for the underlying EC_GROUP object */ 819/* wrapper functions for the underlying EC_GROUP object */
812void EC_KEY_set_asn1_flag(EC_KEY *, int); 820void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
813 821
814/** Creates a table of pre-computed multiples of the generator to 822/** Creates a table of pre-computed multiples of the generator to
815 * accelerate further EC_KEY operations. 823 * accelerate further EC_KEY operations.
diff --git a/src/lib/libssl/src/crypto/ec/ec_lib.c b/src/lib/libssl/src/crypto/ec/ec_lib.c
index 25247b5803..de9a0cc2b3 100644
--- a/src/lib/libssl/src/crypto/ec/ec_lib.c
+++ b/src/lib/libssl/src/crypto/ec/ec_lib.c
@@ -480,10 +480,10 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx)
480 if (EC_METHOD_get_field_type(EC_GROUP_method_of(a)) != 480 if (EC_METHOD_get_field_type(EC_GROUP_method_of(a)) !=
481 EC_METHOD_get_field_type(EC_GROUP_method_of(b))) 481 EC_METHOD_get_field_type(EC_GROUP_method_of(b)))
482 return 1; 482 return 1;
483 /* compare the curve name (if present) */ 483 /* compare the curve name (if present in both) */
484 if (EC_GROUP_get_curve_name(a) && EC_GROUP_get_curve_name(b) && 484 if (EC_GROUP_get_curve_name(a) && EC_GROUP_get_curve_name(b) &&
485 EC_GROUP_get_curve_name(a) == EC_GROUP_get_curve_name(b)) 485 EC_GROUP_get_curve_name(a) != EC_GROUP_get_curve_name(b))
486 return 0; 486 return 1;
487 487
488 if (!ctx) 488 if (!ctx)
489 ctx_new = ctx = BN_CTX_new(); 489 ctx_new = ctx = BN_CTX_new();
@@ -993,12 +993,12 @@ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN
993 if (group->meth->point_cmp == 0) 993 if (group->meth->point_cmp == 0)
994 { 994 {
995 ECerr(EC_F_EC_POINT_CMP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); 995 ECerr(EC_F_EC_POINT_CMP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
996 return 0; 996 return -1;
997 } 997 }
998 if ((group->meth != a->meth) || (a->meth != b->meth)) 998 if ((group->meth != a->meth) || (a->meth != b->meth))
999 { 999 {
1000 ECerr(EC_F_EC_POINT_CMP, EC_R_INCOMPATIBLE_OBJECTS); 1000 ECerr(EC_F_EC_POINT_CMP, EC_R_INCOMPATIBLE_OBJECTS);
1001 return 0; 1001 return -1;
1002 } 1002 }
1003 return group->meth->point_cmp(group, a, b, ctx); 1003 return group->meth->point_cmp(group, a, b, ctx);
1004 } 1004 }
diff --git a/src/lib/libssl/src/crypto/ec/ecp_mont.c b/src/lib/libssl/src/crypto/ec/ecp_mont.c
index 079e47431b..f04f132c7a 100644
--- a/src/lib/libssl/src/crypto/ec/ecp_mont.c
+++ b/src/lib/libssl/src/crypto/ec/ecp_mont.c
@@ -114,7 +114,6 @@ const EC_METHOD *EC_GFp_mont_method(void)
114 ec_GFp_mont_field_decode, 114 ec_GFp_mont_field_decode,
115 ec_GFp_mont_field_set_to_one }; 115 ec_GFp_mont_field_set_to_one };
116 116
117
118 return &ret; 117 return &ret;
119#endif 118#endif
120 } 119 }
diff --git a/src/lib/libssl/src/crypto/ec/ectest.c b/src/lib/libssl/src/crypto/ec/ectest.c
index f107782de0..102eaa9b23 100644
--- a/src/lib/libssl/src/crypto/ec/ectest.c
+++ b/src/lib/libssl/src/crypto/ec/ectest.c
@@ -236,7 +236,7 @@ static void group_order_tests(EC_GROUP *group)
236 } 236 }
237 237
238static void prime_field_tests(void) 238static void prime_field_tests(void)
239 { 239 {
240 BN_CTX *ctx = NULL; 240 BN_CTX *ctx = NULL;
241 BIGNUM *p, *a, *b; 241 BIGNUM *p, *a, *b;
242 EC_GROUP *group; 242 EC_GROUP *group;
diff --git a/src/lib/libssl/src/crypto/ecdh/Makefile b/src/lib/libssl/src/crypto/ecdh/Makefile
index 65d8904ee8..ba05fea05c 100644
--- a/src/lib/libssl/src/crypto/ecdh/Makefile
+++ b/src/lib/libssl/src/crypto/ecdh/Makefile
@@ -84,17 +84,12 @@ ech_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
84ech_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 84ech_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
85ech_err.o: ech_err.c 85ech_err.o: ech_err.c
86ech_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 86ech_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
87ech_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 87ech_key.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
88ech_key.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 88ech_key.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
89ech_key.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 89ech_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
90ech_key.o: ../../include/openssl/engine.h ../../include/openssl/evp.h 90ech_key.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
91ech_key.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 91ech_key.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
92ech_key.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 92ech_key.o: ech_key.c ech_locl.h
93ech_key.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
94ech_key.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
95ech_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
96ech_key.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
97ech_key.o: ../../include/openssl/x509_vfy.h ech_key.c ech_locl.h
98ech_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 93ech_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
99ech_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 94ech_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
100ech_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 95ech_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
diff --git a/src/lib/libssl/src/crypto/engine/eng_all.c b/src/lib/libssl/src/crypto/engine/eng_all.c
index 0ae5d672b1..6093376df4 100644
--- a/src/lib/libssl/src/crypto/engine/eng_all.c
+++ b/src/lib/libssl/src/crypto/engine/eng_all.c
@@ -73,7 +73,6 @@ void ENGINE_load_builtin_engines(void)
73#if !defined(OPENSSL_NO_HW) && (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)) 73#if !defined(OPENSSL_NO_HW) && (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV))
74 ENGINE_load_cryptodev(); 74 ENGINE_load_cryptodev();
75#endif 75#endif
76
77#ifndef OPENSSL_NO_RSAX 76#ifndef OPENSSL_NO_RSAX
78 ENGINE_load_rsax(); 77 ENGINE_load_rsax();
79#endif 78#endif
diff --git a/src/lib/libssl/src/crypto/engine/eng_list.c b/src/lib/libssl/src/crypto/engine/eng_list.c
index 27846edb1e..95c858960b 100644
--- a/src/lib/libssl/src/crypto/engine/eng_list.c
+++ b/src/lib/libssl/src/crypto/engine/eng_list.c
@@ -408,6 +408,7 @@ ENGINE *ENGINE_by_id(const char *id)
408 !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) || 408 !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) ||
409 !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD", 409 !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD",
410 load_dir, 0) || 410 load_dir, 0) ||
411 !ENGINE_ctrl_cmd_string(iterator, "LIST_ADD", "1", 0) ||
411 !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0)) 412 !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0))
412 goto notfound; 413 goto notfound;
413 return iterator; 414 return iterator;
diff --git a/src/lib/libssl/src/crypto/err/err_all.c b/src/lib/libssl/src/crypto/err/err_all.c
index bd8946d8ba..8eb547d98d 100644
--- a/src/lib/libssl/src/crypto/err/err_all.c
+++ b/src/lib/libssl/src/crypto/err/err_all.c
@@ -64,7 +64,9 @@
64#endif 64#endif
65#include <openssl/buffer.h> 65#include <openssl/buffer.h>
66#include <openssl/bio.h> 66#include <openssl/bio.h>
67#ifndef OPENSSL_NO_COMP
67#include <openssl/comp.h> 68#include <openssl/comp.h>
69#endif
68#ifndef OPENSSL_NO_RSA 70#ifndef OPENSSL_NO_RSA
69#include <openssl/rsa.h> 71#include <openssl/rsa.h>
70#endif 72#endif
@@ -95,6 +97,9 @@
95#include <openssl/ui.h> 97#include <openssl/ui.h>
96#include <openssl/ocsp.h> 98#include <openssl/ocsp.h>
97#include <openssl/err.h> 99#include <openssl/err.h>
100#ifdef OPENSSL_FIPS
101#include <openssl/fips.h>
102#endif
98#include <openssl/ts.h> 103#include <openssl/ts.h>
99#ifndef OPENSSL_NO_CMS 104#ifndef OPENSSL_NO_CMS
100#include <openssl/cms.h> 105#include <openssl/cms.h>
@@ -102,11 +107,6 @@
102#ifndef OPENSSL_NO_JPAKE 107#ifndef OPENSSL_NO_JPAKE
103#include <openssl/jpake.h> 108#include <openssl/jpake.h>
104#endif 109#endif
105#include <openssl/comp.h>
106
107#ifdef OPENSSL_FIPS
108#include <openssl/fips.h>
109#endif
110 110
111void ERR_load_crypto_strings(void) 111void ERR_load_crypto_strings(void)
112 { 112 {
@@ -130,7 +130,9 @@ void ERR_load_crypto_strings(void)
130 ERR_load_ASN1_strings(); 130 ERR_load_ASN1_strings();
131 ERR_load_CONF_strings(); 131 ERR_load_CONF_strings();
132 ERR_load_CRYPTO_strings(); 132 ERR_load_CRYPTO_strings();
133#ifndef OPENSSL_NO_COMP
133 ERR_load_COMP_strings(); 134 ERR_load_COMP_strings();
135#endif
134#ifndef OPENSSL_NO_EC 136#ifndef OPENSSL_NO_EC
135 ERR_load_EC_strings(); 137 ERR_load_EC_strings();
136#endif 138#endif
@@ -153,15 +155,14 @@ void ERR_load_crypto_strings(void)
153#endif 155#endif
154 ERR_load_OCSP_strings(); 156 ERR_load_OCSP_strings();
155 ERR_load_UI_strings(); 157 ERR_load_UI_strings();
158#ifdef OPENSSL_FIPS
159 ERR_load_FIPS_strings();
160#endif
156#ifndef OPENSSL_NO_CMS 161#ifndef OPENSSL_NO_CMS
157 ERR_load_CMS_strings(); 162 ERR_load_CMS_strings();
158#endif 163#endif
159#ifndef OPENSSL_NO_JPAKE 164#ifndef OPENSSL_NO_JPAKE
160 ERR_load_JPAKE_strings(); 165 ERR_load_JPAKE_strings();
161#endif 166#endif
162 ERR_load_COMP_strings();
163#endif
164#ifdef OPENSSL_FIPS
165 ERR_load_FIPS_strings();
166#endif 167#endif
167 } 168 }
diff --git a/src/lib/libssl/src/crypto/evp/Makefile b/src/lib/libssl/src/crypto/evp/Makefile
index 0fe1b96bff..0447b442bc 100644
--- a/src/lib/libssl/src/crypto/evp/Makefile
+++ b/src/lib/libssl/src/crypto/evp/Makefile
@@ -67,7 +67,7 @@ files:
67links: 67links:
68 @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) 68 @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
69 @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) 69 @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
70 cp $(TESTDATA) ../../test 70 @[ -f $(TESTDATA) ] && cp $(TESTDATA) ../../test && echo "$(TESTDATA) -> ../../test/$(TESTDATA)"
71 @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) 71 @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
72 72
73install: 73install:
@@ -356,6 +356,20 @@ evp_acnf.o: ../../include/openssl/opensslconf.h
356evp_acnf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h 356evp_acnf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
357evp_acnf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 357evp_acnf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
358evp_acnf.o: ../../include/openssl/symhacks.h ../cryptlib.h evp_acnf.c 358evp_acnf.o: ../../include/openssl/symhacks.h ../cryptlib.h evp_acnf.c
359evp_cnf.o: ../../e_os.h ../../include/openssl/asn1.h
360evp_cnf.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
361evp_cnf.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
362evp_cnf.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
363evp_cnf.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
364evp_cnf.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
365evp_cnf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
366evp_cnf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
367evp_cnf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
368evp_cnf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
369evp_cnf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
370evp_cnf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
371evp_cnf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
372evp_cnf.o: ../../include/openssl/x509v3.h ../cryptlib.h evp_cnf.c
359evp_enc.o: ../../e_os.h ../../include/openssl/asn1.h 373evp_enc.o: ../../e_os.h ../../include/openssl/asn1.h
360evp_enc.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 374evp_enc.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
361evp_enc.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h 375evp_enc.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -437,28 +451,22 @@ evp_pkey.o: ../asn1/asn1_locl.h ../cryptlib.h evp_pkey.c
437m_dss.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 451m_dss.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
438m_dss.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 452m_dss.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
439m_dss.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 453m_dss.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
440m_dss.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 454m_dss.o: ../../include/openssl/err.h ../../include/openssl/evp.h
441m_dss.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 455m_dss.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
442m_dss.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 456m_dss.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
443m_dss.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 457m_dss.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
444m_dss.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
445m_dss.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
446m_dss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 458m_dss.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
447m_dss.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 459m_dss.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
448m_dss.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
449m_dss.o: ../cryptlib.h m_dss.c 460m_dss.o: ../cryptlib.h m_dss.c
450m_dss1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 461m_dss1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
451m_dss1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 462m_dss1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
452m_dss1.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h 463m_dss1.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
453m_dss1.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h 464m_dss1.o: ../../include/openssl/err.h ../../include/openssl/evp.h
454m_dss1.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h 465m_dss1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
455m_dss1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h 466m_dss1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
456m_dss1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h 467m_dss1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
457m_dss1.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
458m_dss1.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
459m_dss1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 468m_dss1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
460m_dss1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 469m_dss1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
461m_dss1.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
462m_dss1.o: ../cryptlib.h m_dss1.c 470m_dss1.o: ../cryptlib.h m_dss1.c
463m_ecdsa.o: ../../e_os.h ../../include/openssl/asn1.h 471m_ecdsa.o: ../../e_os.h ../../include/openssl/asn1.h
464m_ecdsa.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 472m_ecdsa.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
@@ -563,16 +571,13 @@ m_sha.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
563m_sha.o: ../cryptlib.h evp_locl.h m_sha.c 571m_sha.o: ../cryptlib.h evp_locl.h m_sha.c
564m_sha1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h 572m_sha1.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
565m_sha1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h 573m_sha1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
566m_sha1.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h 574m_sha1.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
567m_sha1.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h 575m_sha1.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
568m_sha1.o: ../../include/openssl/err.h ../../include/openssl/evp.h 576m_sha1.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
569m_sha1.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h 577m_sha1.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
570m_sha1.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 578m_sha1.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
571m_sha1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
572m_sha1.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
573m_sha1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h 579m_sha1.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
574m_sha1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h 580m_sha1.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
575m_sha1.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
576m_sha1.o: ../cryptlib.h m_sha1.c 581m_sha1.o: ../cryptlib.h m_sha1.c
577m_sigver.o: ../../e_os.h ../../include/openssl/asn1.h 582m_sigver.o: ../../e_os.h ../../include/openssl/asn1.h
578m_sigver.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 583m_sigver.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
diff --git a/src/lib/libssl/src/crypto/evp/bio_b64.c b/src/lib/libssl/src/crypto/evp/bio_b64.c
index 72a2a67277..ac6d441aad 100644
--- a/src/lib/libssl/src/crypto/evp/bio_b64.c
+++ b/src/lib/libssl/src/crypto/evp/bio_b64.c
@@ -264,7 +264,7 @@ static int b64_read(BIO *b, char *out, int outl)
264 } 264 }
265 265
266 /* we fell off the end without starting */ 266 /* we fell off the end without starting */
267 if (j == i) 267 if ((j == i) && (num == 0))
268 { 268 {
269 /* Is this is one long chunk?, if so, keep on 269 /* Is this is one long chunk?, if so, keep on
270 * reading until a new line. */ 270 * reading until a new line. */
diff --git a/src/lib/libssl/src/crypto/evp/digest.c b/src/lib/libssl/src/crypto/evp/digest.c
index 467e6b5ae9..d14e8e48d5 100644
--- a/src/lib/libssl/src/crypto/evp/digest.c
+++ b/src/lib/libssl/src/crypto/evp/digest.c
@@ -267,6 +267,7 @@ int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size)
267 return FIPS_digestfinal(ctx, md, size); 267 return FIPS_digestfinal(ctx, md, size);
268#else 268#else
269 int ret; 269 int ret;
270
270 OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE); 271 OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE);
271 ret=ctx->digest->final(ctx,md); 272 ret=ctx->digest->final(ctx,md);
272 if (size != NULL) 273 if (size != NULL)
@@ -365,8 +366,11 @@ int EVP_Digest(const void *data, size_t count,
365 366
366void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx) 367void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx)
367 { 368 {
368 EVP_MD_CTX_cleanup(ctx); 369 if (ctx)
369 OPENSSL_free(ctx); 370 {
371 EVP_MD_CTX_cleanup(ctx);
372 OPENSSL_free(ctx);
373 }
370 } 374 }
371 375
372/* This call frees resources associated with the context */ 376/* This call frees resources associated with the context */
diff --git a/src/lib/libssl/src/crypto/evp/e_aes.c b/src/lib/libssl/src/crypto/evp/e_aes.c
index 1e4af0cb75..c7869b69ef 100644
--- a/src/lib/libssl/src/crypto/evp/e_aes.c
+++ b/src/lib/libssl/src/crypto/evp/e_aes.c
@@ -842,7 +842,10 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
842 gctx->ctr = NULL; 842 gctx->ctr = NULL;
843 break; 843 break;
844 } 844 }
845 else
845#endif 846#endif
847 (void)0; /* terminate potentially open 'else' */
848
846 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks); 849 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks);
847 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)AES_encrypt); 850 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)AES_encrypt);
848#ifdef AES_CTR_ASM 851#ifdef AES_CTR_ASM
@@ -969,8 +972,6 @@ static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
969 972
970 if (!gctx->iv_set) 973 if (!gctx->iv_set)
971 return -1; 974 return -1;
972 if (!ctx->encrypt && gctx->taglen < 0)
973 return -1;
974 if (in) 975 if (in)
975 { 976 {
976 if (out == NULL) 977 if (out == NULL)
@@ -1012,6 +1013,8 @@ static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1012 { 1013 {
1013 if (!ctx->encrypt) 1014 if (!ctx->encrypt)
1014 { 1015 {
1016 if (gctx->taglen < 0)
1017 return -1;
1015 if (CRYPTO_gcm128_finish(&gctx->gcm, 1018 if (CRYPTO_gcm128_finish(&gctx->gcm,
1016 ctx->buf, gctx->taglen) != 0) 1019 ctx->buf, gctx->taglen) != 0)
1017 return -1; 1020 return -1;
@@ -1083,14 +1086,17 @@ static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1083 xctx->xts.block1 = (block128_f)vpaes_decrypt; 1086 xctx->xts.block1 = (block128_f)vpaes_decrypt;
1084 } 1087 }
1085 1088
1086 vpaes_set_encrypt_key(key + ctx->key_len/2, 1089 vpaes_set_encrypt_key(key + ctx->key_len/2,
1087 ctx->key_len * 4, &xctx->ks2); 1090 ctx->key_len * 4, &xctx->ks2);
1088 xctx->xts.block2 = (block128_f)vpaes_encrypt; 1091 xctx->xts.block2 = (block128_f)vpaes_encrypt;
1089 1092
1090 xctx->xts.key1 = &xctx->ks1; 1093 xctx->xts.key1 = &xctx->ks1;
1091 break; 1094 break;
1092 } 1095 }
1096 else
1093#endif 1097#endif
1098 (void)0; /* terminate potentially open 'else' */
1099
1094 if (enc) 1100 if (enc)
1095 { 1101 {
1096 AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1); 1102 AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1);
@@ -1217,6 +1223,7 @@ static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1217 vpaes_set_encrypt_key(key, ctx->key_len*8, &cctx->ks); 1223 vpaes_set_encrypt_key(key, ctx->key_len*8, &cctx->ks);
1218 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 1224 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
1219 &cctx->ks, (block128_f)vpaes_encrypt); 1225 &cctx->ks, (block128_f)vpaes_encrypt);
1226 cctx->str = NULL;
1220 cctx->key_set = 1; 1227 cctx->key_set = 1;
1221 break; 1228 break;
1222 } 1229 }
diff --git a/src/lib/libssl/src/crypto/evp/e_aes_cbc_hmac_sha1.c b/src/lib/libssl/src/crypto/evp/e_aes_cbc_hmac_sha1.c
index 483e04b605..fb2c884a78 100644
--- a/src/lib/libssl/src/crypto/evp/e_aes_cbc_hmac_sha1.c
+++ b/src/lib/libssl/src/crypto/evp/e_aes_cbc_hmac_sha1.c
@@ -328,10 +328,11 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
328 328
329 if (res!=SHA_CBLOCK) continue; 329 if (res!=SHA_CBLOCK) continue;
330 330
331 mask = 0-((inp_len+8-j)>>(sizeof(j)*8-1)); 331 /* j is not incremented yet */
332 mask = 0-((inp_len+7-j)>>(sizeof(j)*8-1));
332 data->u[SHA_LBLOCK-1] |= bitlen&mask; 333 data->u[SHA_LBLOCK-1] |= bitlen&mask;
333 sha1_block_data_order(&key->md,data,1); 334 sha1_block_data_order(&key->md,data,1);
334 mask &= 0-((j-inp_len-73)>>(sizeof(j)*8-1)); 335 mask &= 0-((j-inp_len-72)>>(sizeof(j)*8-1));
335 pmac->u[0] |= key->md.h0 & mask; 336 pmac->u[0] |= key->md.h0 & mask;
336 pmac->u[1] |= key->md.h1 & mask; 337 pmac->u[1] |= key->md.h1 & mask;
337 pmac->u[2] |= key->md.h2 & mask; 338 pmac->u[2] |= key->md.h2 & mask;
diff --git a/src/lib/libssl/src/crypto/evp/e_des3.c b/src/lib/libssl/src/crypto/evp/e_des3.c
index 1e69972662..8d7b7de292 100644
--- a/src/lib/libssl/src/crypto/evp/e_des3.c
+++ b/src/lib/libssl/src/crypto/evp/e_des3.c
@@ -101,7 +101,7 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
101static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 101static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
102 const unsigned char *in, size_t inl) 102 const unsigned char *in, size_t inl)
103{ 103{
104 if (inl>=EVP_MAXCHUNK) 104 while (inl>=EVP_MAXCHUNK)
105 { 105 {
106 DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, 106 DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK,
107 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 107 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
@@ -132,7 +132,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
132 printf("\n"); 132 printf("\n");
133 } 133 }
134#endif /* KSSL_DEBUG */ 134#endif /* KSSL_DEBUG */
135 if (inl>=EVP_MAXCHUNK) 135 while (inl>=EVP_MAXCHUNK)
136 { 136 {
137 DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, 137 DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK,
138 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 138 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
@@ -151,7 +151,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
151static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 151static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
152 const unsigned char *in, size_t inl) 152 const unsigned char *in, size_t inl)
153{ 153{
154 if (inl>=EVP_MAXCHUNK) 154 while (inl>=EVP_MAXCHUNK)
155 { 155 {
156 DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK, 156 DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK,
157 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 157 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
diff --git a/src/lib/libssl/src/crypto/evp/evp.h b/src/lib/libssl/src/crypto/evp/evp.h
index 3b1fa87576..faeb3c24e6 100644
--- a/src/lib/libssl/src/crypto/evp/evp.h
+++ b/src/lib/libssl/src/crypto/evp/evp.h
@@ -788,8 +788,8 @@ const EVP_CIPHER *EVP_aes_128_cfb128(void);
788# define EVP_aes_128_cfb EVP_aes_128_cfb128 788# define EVP_aes_128_cfb EVP_aes_128_cfb128
789const EVP_CIPHER *EVP_aes_128_ofb(void); 789const EVP_CIPHER *EVP_aes_128_ofb(void);
790const EVP_CIPHER *EVP_aes_128_ctr(void); 790const EVP_CIPHER *EVP_aes_128_ctr(void);
791const EVP_CIPHER *EVP_aes_128_gcm(void);
792const EVP_CIPHER *EVP_aes_128_ccm(void); 791const EVP_CIPHER *EVP_aes_128_ccm(void);
792const EVP_CIPHER *EVP_aes_128_gcm(void);
793const EVP_CIPHER *EVP_aes_128_xts(void); 793const EVP_CIPHER *EVP_aes_128_xts(void);
794const EVP_CIPHER *EVP_aes_192_ecb(void); 794const EVP_CIPHER *EVP_aes_192_ecb(void);
795const EVP_CIPHER *EVP_aes_192_cbc(void); 795const EVP_CIPHER *EVP_aes_192_cbc(void);
@@ -799,8 +799,8 @@ const EVP_CIPHER *EVP_aes_192_cfb128(void);
799# define EVP_aes_192_cfb EVP_aes_192_cfb128 799# define EVP_aes_192_cfb EVP_aes_192_cfb128
800const EVP_CIPHER *EVP_aes_192_ofb(void); 800const EVP_CIPHER *EVP_aes_192_ofb(void);
801const EVP_CIPHER *EVP_aes_192_ctr(void); 801const EVP_CIPHER *EVP_aes_192_ctr(void);
802const EVP_CIPHER *EVP_aes_192_gcm(void);
803const EVP_CIPHER *EVP_aes_192_ccm(void); 802const EVP_CIPHER *EVP_aes_192_ccm(void);
803const EVP_CIPHER *EVP_aes_192_gcm(void);
804const EVP_CIPHER *EVP_aes_256_ecb(void); 804const EVP_CIPHER *EVP_aes_256_ecb(void);
805const EVP_CIPHER *EVP_aes_256_cbc(void); 805const EVP_CIPHER *EVP_aes_256_cbc(void);
806const EVP_CIPHER *EVP_aes_256_cfb1(void); 806const EVP_CIPHER *EVP_aes_256_cfb1(void);
@@ -809,8 +809,8 @@ const EVP_CIPHER *EVP_aes_256_cfb128(void);
809# define EVP_aes_256_cfb EVP_aes_256_cfb128 809# define EVP_aes_256_cfb EVP_aes_256_cfb128
810const EVP_CIPHER *EVP_aes_256_ofb(void); 810const EVP_CIPHER *EVP_aes_256_ofb(void);
811const EVP_CIPHER *EVP_aes_256_ctr(void); 811const EVP_CIPHER *EVP_aes_256_ctr(void);
812const EVP_CIPHER *EVP_aes_256_gcm(void);
813const EVP_CIPHER *EVP_aes_256_ccm(void); 812const EVP_CIPHER *EVP_aes_256_ccm(void);
813const EVP_CIPHER *EVP_aes_256_gcm(void);
814const EVP_CIPHER *EVP_aes_256_xts(void); 814const EVP_CIPHER *EVP_aes_256_xts(void);
815#if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) 815#if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)
816const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); 816const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);
@@ -1242,6 +1242,8 @@ void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
1242 int (*ctrl_str)(EVP_PKEY_CTX *ctx, 1242 int (*ctrl_str)(EVP_PKEY_CTX *ctx,
1243 const char *type, const char *value)); 1243 const char *type, const char *value));
1244 1244
1245void EVP_add_alg_module(void);
1246
1245/* BEGIN ERROR CODES */ 1247/* BEGIN ERROR CODES */
1246/* The following lines are auto generated by the script mkerr.pl. Any changes 1248/* The following lines are auto generated by the script mkerr.pl. Any changes
1247 * made after this point may be overwritten when the script is next run. 1249 * made after this point may be overwritten when the script is next run.
@@ -1256,6 +1258,7 @@ void ERR_load_EVP_strings(void);
1256#define EVP_F_AES_INIT_KEY 133 1258#define EVP_F_AES_INIT_KEY 133
1257#define EVP_F_AES_XTS 172 1259#define EVP_F_AES_XTS 172
1258#define EVP_F_AES_XTS_CIPHER 175 1260#define EVP_F_AES_XTS_CIPHER 175
1261#define EVP_F_ALG_MODULE_INIT 177
1259#define EVP_F_CAMELLIA_INIT_KEY 159 1262#define EVP_F_CAMELLIA_INIT_KEY 159
1260#define EVP_F_CMAC_INIT 173 1263#define EVP_F_CMAC_INIT 173
1261#define EVP_F_D2I_PKEY 100 1264#define EVP_F_D2I_PKEY 100
@@ -1349,15 +1352,19 @@ void ERR_load_EVP_strings(void);
1349#define EVP_R_DIFFERENT_PARAMETERS 153 1352#define EVP_R_DIFFERENT_PARAMETERS 153
1350#define EVP_R_DISABLED_FOR_FIPS 163 1353#define EVP_R_DISABLED_FOR_FIPS 163
1351#define EVP_R_ENCODE_ERROR 115 1354#define EVP_R_ENCODE_ERROR 115
1355#define EVP_R_ERROR_LOADING_SECTION 165
1356#define EVP_R_ERROR_SETTING_FIPS_MODE 166
1352#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 1357#define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119
1353#define EVP_R_EXPECTING_AN_RSA_KEY 127 1358#define EVP_R_EXPECTING_AN_RSA_KEY 127
1354#define EVP_R_EXPECTING_A_DH_KEY 128 1359#define EVP_R_EXPECTING_A_DH_KEY 128
1355#define EVP_R_EXPECTING_A_DSA_KEY 129 1360#define EVP_R_EXPECTING_A_DSA_KEY 129
1356#define EVP_R_EXPECTING_A_ECDSA_KEY 141 1361#define EVP_R_EXPECTING_A_ECDSA_KEY 141
1357#define EVP_R_EXPECTING_A_EC_KEY 142 1362#define EVP_R_EXPECTING_A_EC_KEY 142
1363#define EVP_R_FIPS_MODE_NOT_SUPPORTED 167
1358#define EVP_R_INITIALIZATION_ERROR 134 1364#define EVP_R_INITIALIZATION_ERROR 134
1359#define EVP_R_INPUT_NOT_INITIALIZED 111 1365#define EVP_R_INPUT_NOT_INITIALIZED 111
1360#define EVP_R_INVALID_DIGEST 152 1366#define EVP_R_INVALID_DIGEST 152
1367#define EVP_R_INVALID_FIPS_MODE 168
1361#define EVP_R_INVALID_KEY_LENGTH 130 1368#define EVP_R_INVALID_KEY_LENGTH 130
1362#define EVP_R_INVALID_OPERATION 148 1369#define EVP_R_INVALID_OPERATION 148
1363#define EVP_R_IV_TOO_LARGE 102 1370#define EVP_R_IV_TOO_LARGE 102
@@ -1382,6 +1389,7 @@ void ERR_load_EVP_strings(void);
1382#define EVP_R_TOO_LARGE 164 1389#define EVP_R_TOO_LARGE 164
1383#define EVP_R_UNKNOWN_CIPHER 160 1390#define EVP_R_UNKNOWN_CIPHER 160
1384#define EVP_R_UNKNOWN_DIGEST 161 1391#define EVP_R_UNKNOWN_DIGEST 161
1392#define EVP_R_UNKNOWN_OPTION 169
1385#define EVP_R_UNKNOWN_PBE_ALGORITHM 121 1393#define EVP_R_UNKNOWN_PBE_ALGORITHM 121
1386#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 1394#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135
1387#define EVP_R_UNSUPPORTED_ALGORITHM 156 1395#define EVP_R_UNSUPPORTED_ALGORITHM 156
diff --git a/src/lib/libssl/src/crypto/evp/evp_err.c b/src/lib/libssl/src/crypto/evp/evp_err.c
index db0f76d59b..08eab9882f 100644
--- a/src/lib/libssl/src/crypto/evp/evp_err.c
+++ b/src/lib/libssl/src/crypto/evp/evp_err.c
@@ -75,6 +75,7 @@ static ERR_STRING_DATA EVP_str_functs[]=
75{ERR_FUNC(EVP_F_AES_INIT_KEY), "AES_INIT_KEY"}, 75{ERR_FUNC(EVP_F_AES_INIT_KEY), "AES_INIT_KEY"},
76{ERR_FUNC(EVP_F_AES_XTS), "AES_XTS"}, 76{ERR_FUNC(EVP_F_AES_XTS), "AES_XTS"},
77{ERR_FUNC(EVP_F_AES_XTS_CIPHER), "AES_XTS_CIPHER"}, 77{ERR_FUNC(EVP_F_AES_XTS_CIPHER), "AES_XTS_CIPHER"},
78{ERR_FUNC(EVP_F_ALG_MODULE_INIT), "ALG_MODULE_INIT"},
78{ERR_FUNC(EVP_F_CAMELLIA_INIT_KEY), "CAMELLIA_INIT_KEY"}, 79{ERR_FUNC(EVP_F_CAMELLIA_INIT_KEY), "CAMELLIA_INIT_KEY"},
79{ERR_FUNC(EVP_F_CMAC_INIT), "CMAC_INIT"}, 80{ERR_FUNC(EVP_F_CMAC_INIT), "CMAC_INIT"},
80{ERR_FUNC(EVP_F_D2I_PKEY), "D2I_PKEY"}, 81{ERR_FUNC(EVP_F_D2I_PKEY), "D2I_PKEY"},
@@ -171,15 +172,19 @@ static ERR_STRING_DATA EVP_str_reasons[]=
171{ERR_REASON(EVP_R_DIFFERENT_PARAMETERS) ,"different parameters"}, 172{ERR_REASON(EVP_R_DIFFERENT_PARAMETERS) ,"different parameters"},
172{ERR_REASON(EVP_R_DISABLED_FOR_FIPS) ,"disabled for fips"}, 173{ERR_REASON(EVP_R_DISABLED_FOR_FIPS) ,"disabled for fips"},
173{ERR_REASON(EVP_R_ENCODE_ERROR) ,"encode error"}, 174{ERR_REASON(EVP_R_ENCODE_ERROR) ,"encode error"},
175{ERR_REASON(EVP_R_ERROR_LOADING_SECTION) ,"error loading section"},
176{ERR_REASON(EVP_R_ERROR_SETTING_FIPS_MODE),"error setting fips mode"},
174{ERR_REASON(EVP_R_EVP_PBE_CIPHERINIT_ERROR),"evp pbe cipherinit error"}, 177{ERR_REASON(EVP_R_EVP_PBE_CIPHERINIT_ERROR),"evp pbe cipherinit error"},
175{ERR_REASON(EVP_R_EXPECTING_AN_RSA_KEY) ,"expecting an rsa key"}, 178{ERR_REASON(EVP_R_EXPECTING_AN_RSA_KEY) ,"expecting an rsa key"},
176{ERR_REASON(EVP_R_EXPECTING_A_DH_KEY) ,"expecting a dh key"}, 179{ERR_REASON(EVP_R_EXPECTING_A_DH_KEY) ,"expecting a dh key"},
177{ERR_REASON(EVP_R_EXPECTING_A_DSA_KEY) ,"expecting a dsa key"}, 180{ERR_REASON(EVP_R_EXPECTING_A_DSA_KEY) ,"expecting a dsa key"},
178{ERR_REASON(EVP_R_EXPECTING_A_ECDSA_KEY) ,"expecting a ecdsa key"}, 181{ERR_REASON(EVP_R_EXPECTING_A_ECDSA_KEY) ,"expecting a ecdsa key"},
179{ERR_REASON(EVP_R_EXPECTING_A_EC_KEY) ,"expecting a ec key"}, 182{ERR_REASON(EVP_R_EXPECTING_A_EC_KEY) ,"expecting a ec key"},
183{ERR_REASON(EVP_R_FIPS_MODE_NOT_SUPPORTED),"fips mode not supported"},
180{ERR_REASON(EVP_R_INITIALIZATION_ERROR) ,"initialization error"}, 184{ERR_REASON(EVP_R_INITIALIZATION_ERROR) ,"initialization error"},
181{ERR_REASON(EVP_R_INPUT_NOT_INITIALIZED) ,"input not initialized"}, 185{ERR_REASON(EVP_R_INPUT_NOT_INITIALIZED) ,"input not initialized"},
182{ERR_REASON(EVP_R_INVALID_DIGEST) ,"invalid digest"}, 186{ERR_REASON(EVP_R_INVALID_DIGEST) ,"invalid digest"},
187{ERR_REASON(EVP_R_INVALID_FIPS_MODE) ,"invalid fips mode"},
183{ERR_REASON(EVP_R_INVALID_KEY_LENGTH) ,"invalid key length"}, 188{ERR_REASON(EVP_R_INVALID_KEY_LENGTH) ,"invalid key length"},
184{ERR_REASON(EVP_R_INVALID_OPERATION) ,"invalid operation"}, 189{ERR_REASON(EVP_R_INVALID_OPERATION) ,"invalid operation"},
185{ERR_REASON(EVP_R_IV_TOO_LARGE) ,"iv too large"}, 190{ERR_REASON(EVP_R_IV_TOO_LARGE) ,"iv too large"},
@@ -204,6 +209,7 @@ static ERR_STRING_DATA EVP_str_reasons[]=
204{ERR_REASON(EVP_R_TOO_LARGE) ,"too large"}, 209{ERR_REASON(EVP_R_TOO_LARGE) ,"too large"},
205{ERR_REASON(EVP_R_UNKNOWN_CIPHER) ,"unknown cipher"}, 210{ERR_REASON(EVP_R_UNKNOWN_CIPHER) ,"unknown cipher"},
206{ERR_REASON(EVP_R_UNKNOWN_DIGEST) ,"unknown digest"}, 211{ERR_REASON(EVP_R_UNKNOWN_DIGEST) ,"unknown digest"},
212{ERR_REASON(EVP_R_UNKNOWN_OPTION) ,"unknown option"},
207{ERR_REASON(EVP_R_UNKNOWN_PBE_ALGORITHM) ,"unknown pbe algorithm"}, 213{ERR_REASON(EVP_R_UNKNOWN_PBE_ALGORITHM) ,"unknown pbe algorithm"},
208{ERR_REASON(EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS),"unsuported number of rounds"}, 214{ERR_REASON(EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS),"unsuported number of rounds"},
209{ERR_REASON(EVP_R_UNSUPPORTED_ALGORITHM) ,"unsupported algorithm"}, 215{ERR_REASON(EVP_R_UNSUPPORTED_ALGORITHM) ,"unsupported algorithm"},
diff --git a/src/lib/libssl/src/crypto/evp/m_dss.c b/src/lib/libssl/src/crypto/evp/m_dss.c
index 4ad63ada6f..6fb7e9a861 100644
--- a/src/lib/libssl/src/crypto/evp/m_dss.c
+++ b/src/lib/libssl/src/crypto/evp/m_dss.c
@@ -60,7 +60,7 @@
60#include "cryptlib.h" 60#include "cryptlib.h"
61#include <openssl/evp.h> 61#include <openssl/evp.h>
62#include <openssl/objects.h> 62#include <openssl/objects.h>
63#include <openssl/x509.h> 63#include <openssl/sha.h>
64#ifndef OPENSSL_NO_DSA 64#ifndef OPENSSL_NO_DSA
65#include <openssl/dsa.h> 65#include <openssl/dsa.h>
66#endif 66#endif
diff --git a/src/lib/libssl/src/crypto/evp/m_dss1.c b/src/lib/libssl/src/crypto/evp/m_dss1.c
index f80170efeb..2df362a670 100644
--- a/src/lib/libssl/src/crypto/evp/m_dss1.c
+++ b/src/lib/libssl/src/crypto/evp/m_dss1.c
@@ -63,7 +63,7 @@
63 63
64#include <openssl/evp.h> 64#include <openssl/evp.h>
65#include <openssl/objects.h> 65#include <openssl/objects.h>
66#include <openssl/x509.h> 66#include <openssl/sha.h>
67#ifndef OPENSSL_NO_DSA 67#ifndef OPENSSL_NO_DSA
68#include <openssl/dsa.h> 68#include <openssl/dsa.h>
69#endif 69#endif
diff --git a/src/lib/libssl/src/crypto/evp/m_sha1.c b/src/lib/libssl/src/crypto/evp/m_sha1.c
index 3cb11f1ebb..bd0c01ad3c 100644
--- a/src/lib/libssl/src/crypto/evp/m_sha1.c
+++ b/src/lib/libssl/src/crypto/evp/m_sha1.c
@@ -65,7 +65,7 @@
65 65
66#include <openssl/evp.h> 66#include <openssl/evp.h>
67#include <openssl/objects.h> 67#include <openssl/objects.h>
68#include <openssl/x509.h> 68#include <openssl/sha.h>
69#ifndef OPENSSL_NO_RSA 69#ifndef OPENSSL_NO_RSA
70#include <openssl/rsa.h> 70#include <openssl/rsa.h>
71#endif 71#endif
diff --git a/src/lib/libssl/src/crypto/evp/p5_crpt2.c b/src/lib/libssl/src/crypto/evp/p5_crpt2.c
index 975d004df4..fe3c6c8813 100644
--- a/src/lib/libssl/src/crypto/evp/p5_crpt2.c
+++ b/src/lib/libssl/src/crypto/evp/p5_crpt2.c
@@ -85,19 +85,24 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
85 unsigned char digtmp[EVP_MAX_MD_SIZE], *p, itmp[4]; 85 unsigned char digtmp[EVP_MAX_MD_SIZE], *p, itmp[4];
86 int cplen, j, k, tkeylen, mdlen; 86 int cplen, j, k, tkeylen, mdlen;
87 unsigned long i = 1; 87 unsigned long i = 1;
88 HMAC_CTX hctx; 88 HMAC_CTX hctx_tpl, hctx;
89 89
90 mdlen = EVP_MD_size(digest); 90 mdlen = EVP_MD_size(digest);
91 if (mdlen < 0) 91 if (mdlen < 0)
92 return 0; 92 return 0;
93 93
94 HMAC_CTX_init(&hctx); 94 HMAC_CTX_init(&hctx_tpl);
95 p = out; 95 p = out;
96 tkeylen = keylen; 96 tkeylen = keylen;
97 if(!pass) 97 if(!pass)
98 passlen = 0; 98 passlen = 0;
99 else if(passlen == -1) 99 else if(passlen == -1)
100 passlen = strlen(pass); 100 passlen = strlen(pass);
101 if (!HMAC_Init_ex(&hctx_tpl, pass, passlen, digest, NULL))
102 {
103 HMAC_CTX_cleanup(&hctx_tpl);
104 return 0;
105 }
101 while(tkeylen) 106 while(tkeylen)
102 { 107 {
103 if(tkeylen > mdlen) 108 if(tkeylen > mdlen)
@@ -111,19 +116,36 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
111 itmp[1] = (unsigned char)((i >> 16) & 0xff); 116 itmp[1] = (unsigned char)((i >> 16) & 0xff);
112 itmp[2] = (unsigned char)((i >> 8) & 0xff); 117 itmp[2] = (unsigned char)((i >> 8) & 0xff);
113 itmp[3] = (unsigned char)(i & 0xff); 118 itmp[3] = (unsigned char)(i & 0xff);
114 if (!HMAC_Init_ex(&hctx, pass, passlen, digest, NULL) 119 if (!HMAC_CTX_copy(&hctx, &hctx_tpl))
115 || !HMAC_Update(&hctx, salt, saltlen)
116 || !HMAC_Update(&hctx, itmp, 4)
117 || !HMAC_Final(&hctx, digtmp, NULL))
118 { 120 {
121 HMAC_CTX_cleanup(&hctx_tpl);
122 return 0;
123 }
124 if (!HMAC_Update(&hctx, salt, saltlen)
125 || !HMAC_Update(&hctx, itmp, 4)
126 || !HMAC_Final(&hctx, digtmp, NULL))
127 {
128 HMAC_CTX_cleanup(&hctx_tpl);
119 HMAC_CTX_cleanup(&hctx); 129 HMAC_CTX_cleanup(&hctx);
120 return 0; 130 return 0;
121 } 131 }
132 HMAC_CTX_cleanup(&hctx);
122 memcpy(p, digtmp, cplen); 133 memcpy(p, digtmp, cplen);
123 for(j = 1; j < iter; j++) 134 for(j = 1; j < iter; j++)
124 { 135 {
125 HMAC(digest, pass, passlen, 136 if (!HMAC_CTX_copy(&hctx, &hctx_tpl))
126 digtmp, mdlen, digtmp, NULL); 137 {
138 HMAC_CTX_cleanup(&hctx_tpl);
139 return 0;
140 }
141 if (!HMAC_Update(&hctx, digtmp, mdlen)
142 || !HMAC_Final(&hctx, digtmp, NULL))
143 {
144 HMAC_CTX_cleanup(&hctx_tpl);
145 HMAC_CTX_cleanup(&hctx);
146 return 0;
147 }
148 HMAC_CTX_cleanup(&hctx);
127 for(k = 0; k < cplen; k++) 149 for(k = 0; k < cplen; k++)
128 p[k] ^= digtmp[k]; 150 p[k] ^= digtmp[k];
129 } 151 }
@@ -131,7 +153,7 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
131 i++; 153 i++;
132 p+= cplen; 154 p+= cplen;
133 } 155 }
134 HMAC_CTX_cleanup(&hctx); 156 HMAC_CTX_cleanup(&hctx_tpl);
135#ifdef DEBUG_PKCS5V2 157#ifdef DEBUG_PKCS5V2
136 fprintf(stderr, "Password:\n"); 158 fprintf(stderr, "Password:\n");
137 h__dump (pass, passlen); 159 h__dump (pass, passlen);
diff --git a/src/lib/libssl/src/crypto/evp/p_sign.c b/src/lib/libssl/src/crypto/evp/p_sign.c
index dfa48c157c..8afb664306 100644
--- a/src/lib/libssl/src/crypto/evp/p_sign.c
+++ b/src/lib/libssl/src/crypto/evp/p_sign.c
@@ -80,7 +80,7 @@ int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen,
80 { 80 {
81 unsigned char m[EVP_MAX_MD_SIZE]; 81 unsigned char m[EVP_MAX_MD_SIZE];
82 unsigned int m_len; 82 unsigned int m_len;
83 int i=0,ok=0,v; 83 int i = 0,ok = 0,v;
84 EVP_MD_CTX tmp_ctx; 84 EVP_MD_CTX tmp_ctx;
85 EVP_PKEY_CTX *pkctx = NULL; 85 EVP_PKEY_CTX *pkctx = NULL;
86 86
diff --git a/src/lib/libssl/src/crypto/evp/p_verify.c b/src/lib/libssl/src/crypto/evp/p_verify.c
index 5f5c409f45..c66d63ccf8 100644
--- a/src/lib/libssl/src/crypto/evp/p_verify.c
+++ b/src/lib/libssl/src/crypto/evp/p_verify.c
@@ -67,7 +67,7 @@ int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
67 { 67 {
68 unsigned char m[EVP_MAX_MD_SIZE]; 68 unsigned char m[EVP_MAX_MD_SIZE];
69 unsigned int m_len; 69 unsigned int m_len;
70 int i=-1,ok=0,v; 70 int i = 0,ok = 0,v;
71 EVP_MD_CTX tmp_ctx; 71 EVP_MD_CTX tmp_ctx;
72 EVP_PKEY_CTX *pkctx = NULL; 72 EVP_PKEY_CTX *pkctx = NULL;
73 73
diff --git a/src/lib/libssl/src/crypto/install-crypto.com b/src/lib/libssl/src/crypto/install-crypto.com
deleted file mode 100755
index 85b3d583cf..0000000000
--- a/src/lib/libssl/src/crypto/install-crypto.com
+++ /dev/null
@@ -1,196 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! Changes by Zoltan Arpadffy <zoli@polarhome.com>
7$!
8$! P1 root of the directory tree
9$! P2 "64" for 64-bit pointers.
10$!
11$!
12$! Announce/identify.
13$!
14$ proc = f$environment( "procedure")
15$ write sys$output "@@@ "+ -
16 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
17$!
18$ on error then goto tidy
19$ on control_c then goto tidy
20$!
21$ if (p1 .eqs. "")
22$ then
23$ write sys$output "First argument missing."
24$ write sys$output -
25 "It should be the directory where you want things installed."
26$ exit
27$ endif
28$!
29$ if (f$getsyi( "cpu") .lt. 128)
30$ then
31$ arch = "VAX"
32$ else
33$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
34$ if (arch .eqs. "") then arch = "UNK"
35$ endif
36$!
37$ archd = arch
38$ lib32 = "32"
39$ shr = "_SHR32"
40$!
41$ if (p2 .nes. "")
42$ then
43$ if (p2 .eqs. "64")
44$ then
45$ archd = arch+ "_64"
46$ lib32 = ""
47$ shr = "_SHR"
48$ else
49$ if (p2 .nes. "32")
50$ then
51$ write sys$output "Second argument invalid."
52$ write sys$output "It should be "32", "64", or nothing."
53$ exit
54$ endif
55$ endif
56$ endif
57$!
58$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
59$ root_dev = f$parse( root, , , "device", "syntax_only")
60$ root_dir = f$parse( root, , , "directory", "syntax_only") - -
61 "[000000." - "][" - "[" - "]"
62$ root = root_dev + "[" + root_dir
63$!
64$ define /nolog wrk_sslroot 'root'.] /trans=conc
65$ define /nolog wrk_sslinclude wrk_sslroot:[include]
66$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
67$!
68$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
69 create /directory /log wrk_sslroot:[000000]
70$ if f$parse("wrk_sslinclude:") .eqs. "" then -
71 create /directory /log wrk_sslinclude:
72$ if f$parse("wrk_sslxlib:") .eqs. "" then -
73 create /directory /log wrk_sslxlib:
74$!
75$ sdirs := , -
76 'archd', -
77 objects, -
78 md2, md4, md5, sha, mdc2, hmac, ripemd, whrlpool, -
79 des, aes, rc2, rc4, rc5, idea, bf, cast, camellia, seed, -
80 bn, ec, rsa, dsa, ecdsa, dh, ecdh, dso, engine, -
81 buffer, bio, stack, lhash, rand, err, -
82 evp, asn1, pem, x509, x509v3, conf, txt_db, pkcs7, pkcs12, comp, ocsp, -
83 ui, krb5, -
84 store, cms, pqueue, ts, jpake
85$!
86$ exheader_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h
87$ exheader_'archd' := opensslconf.h
88$ exheader_objects := objects.h, obj_mac.h
89$ exheader_md2 := md2.h
90$ exheader_md4 := md4.h
91$ exheader_md5 := md5.h
92$ exheader_sha := sha.h
93$ exheader_mdc2 := mdc2.h
94$ exheader_hmac := hmac.h
95$ exheader_ripemd := ripemd.h
96$ exheader_whrlpool := whrlpool.h
97$ exheader_des := des.h, des_old.h
98$ exheader_aes := aes.h
99$ exheader_rc2 := rc2.h
100$ exheader_rc4 := rc4.h
101$ exheader_rc5 := rc5.h
102$ exheader_idea := idea.h
103$ exheader_bf := blowfish.h
104$ exheader_cast := cast.h
105$ exheader_camellia := camellia.h
106$ exheader_seed := seed.h
107$ exheader_modes := modes.h
108$ exheader_bn := bn.h
109$ exheader_ec := ec.h
110$ exheader_rsa := rsa.h
111$ exheader_dsa := dsa.h
112$ exheader_ecdsa := ecdsa.h
113$ exheader_dh := dh.h
114$ exheader_ecdh := ecdh.h
115$ exheader_dso := dso.h
116$ exheader_engine := engine.h
117$ exheader_buffer := buffer.h
118$ exheader_bio := bio.h
119$ exheader_stack := stack.h, safestack.h
120$ exheader_lhash := lhash.h
121$ exheader_rand := rand.h
122$ exheader_err := err.h
123$ exheader_evp := evp.h
124$ exheader_asn1 := asn1.h, asn1_mac.h, asn1t.h
125$ exheader_pem := pem.h, pem2.h
126$ exheader_x509 := x509.h, x509_vfy.h
127$ exheader_x509v3 := x509v3.h
128$ exheader_conf := conf.h, conf_api.h
129$ exheader_txt_db := txt_db.h
130$ exheader_pkcs7 := pkcs7.h
131$ exheader_pkcs12 := pkcs12.h
132$ exheader_comp := comp.h
133$ exheader_ocsp := ocsp.h
134$ exheader_ui := ui.h, ui_compat.h
135$ exheader_krb5 := krb5_asn.h
136$! exheader_store := store.h, str_compat.h
137$ exheader_store := store.h
138$ exheader_cms := cms.h
139$ exheader_pqueue := pqueue.h
140$ exheader_ts := ts.h
141$ exheader_jpake := jpake.h
142$ libs := ssl_libcrypto
143$!
144$ exe_dir := [-.'archd'.exe.crypto]
145$!
146$! Header files.
147$!
148$ i = 0
149$ loop_sdirs:
150$ d = f$edit( f$element( i, ",", sdirs), "trim")
151$ i = i + 1
152$ if d .eqs. "," then goto loop_sdirs_end
153$ tmp = exheader_'d'
154$ if (d .nes. "") then d = "."+ d
155$ copy /protection = w:re ['d']'tmp' wrk_sslinclude: /log
156$ goto loop_sdirs
157$ loop_sdirs_end:
158$!
159$! Object libraries, shareable images.
160$!
161$ i = 0
162$ loop_lib:
163$ e = f$edit( f$element( i, ",", libs), "trim")
164$ i = i + 1
165$ if e .eqs. "," then goto loop_lib_end
166$ set noon
167$ file = exe_dir+ e+ lib32+ ".olb"
168$ if f$search( file) .nes. ""
169$ then
170$ copy /protection = w:re 'file' wrk_sslxlib: /log
171$ endif
172$!
173$ file = exe_dir+ e+ shr+ ".exe"
174$ if f$search( file) .nes. ""
175$ then
176$ copy /protection = w:re 'file' wrk_sslxlib: /log
177$ endif
178$ set on
179$ goto loop_lib
180$ loop_lib_end:
181$!
182$ tidy:
183$!
184$ call deass wrk_sslroot
185$ call deass wrk_sslinclude
186$ call deass wrk_sslxlib
187$!
188$ exit
189$!
190$ deass: subroutine
191$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
192$ then
193$ deassign /process 'p1'
194$ endif
195$ endsubroutine
196$!
diff --git a/src/lib/libssl/src/crypto/install.com b/src/lib/libssl/src/crypto/install.com
deleted file mode 100644
index ad3e4d48c7..0000000000
--- a/src/lib/libssl/src/crypto/install.com
+++ /dev/null
@@ -1,155 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! Changes by Zoltan Arpadffy <zoli@polarhome.com>
7$!
8$! P1 root of the directory tree
9$!
10$ IF P1 .EQS. ""
11$ THEN
12$ WRITE SYS$OUTPUT "First argument missing."
13$ WRITE SYS$OUTPUT -
14 "It should be the directory where you want things installed."
15$ EXIT
16$ ENDIF
17$
18$ IF (F$GETSYI("CPU").LT.128)
19$ THEN
20$ ARCH := VAX
21$ ELSE
22$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
23$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
24$ ENDIF
25$
26$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
27$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
28$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
29 - "[000000." - "][" - "[" - "]"
30$ ROOT = ROOT_DEV + "[" + ROOT_DIR
31$
32$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
33$ DEFINE/NOLOG WRK_SSLLIB WRK_SSLROOT:['ARCH'_LIB]
34$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
35$
36$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
37 CREATE/DIR/LOG WRK_SSLROOT:[000000]
38$ IF F$PARSE("WRK_SSLLIB:") .EQS. "" THEN -
39 CREATE/DIR/LOG WRK_SSLLIB:
40$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
41 CREATE/DIR/LOG WRK_SSLINCLUDE:
42$
43$ SDIRS := ,-
44 _'ARCH',-
45 OBJECTS,-
46 MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,WHRLPOOL,-
47 DES,AES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,-
48 BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,-
49 BUFFER,BIO,STACK,LHASH,RAND,ERR,-
50 EVP,ASN1,PEM,X509,X509V3,CONF,TXT_DB,PKCS7,PKCS12,COMP,OCSP,-
51 UI,KRB5,-
52 STORE,CMS,PQUEUE,TS,JPAKE
53$ EXHEADER_ := crypto.h,opensslv.h,ebcdic.h,symhacks.h,ossl_typ.h
54$ EXHEADER__'ARCH' := opensslconf.h
55$ EXHEADER_OBJECTS := objects.h,obj_mac.h
56$ EXHEADER_MD2 := md2.h
57$ EXHEADER_MD4 := md4.h
58$ EXHEADER_MD5 := md5.h
59$ EXHEADER_SHA := sha.h
60$ EXHEADER_MDC2 := mdc2.h
61$ EXHEADER_HMAC := hmac.h
62$ EXHEADER_RIPEMD := ripemd.h
63$ EXHEADER_WHRLPOOL := whrlpool.h
64$ EXHEADER_DES := des.h,des_old.h
65$ EXHEADER_AES := aes.h
66$ EXHEADER_RC2 := rc2.h
67$ EXHEADER_RC4 := rc4.h
68$ EXHEADER_RC5 := rc5.h
69$ EXHEADER_IDEA := idea.h
70$ EXHEADER_BF := blowfish.h
71$ EXHEADER_CAST := cast.h
72$ EXHEADER_CAMELLIA := camellia.h
73$ EXHEADER_SEED := seed.h
74$ EXHEADER_MODES := modes.h
75$ EXHEADER_BN := bn.h
76$ EXHEADER_EC := ec.h
77$ EXHEADER_RSA := rsa.h
78$ EXHEADER_DSA := dsa.h
79$ EXHEADER_ECDSA := ecdsa.h
80$ EXHEADER_DH := dh.h
81$ EXHEADER_ECDH := ecdh.h
82$ EXHEADER_DSO := dso.h
83$ EXHEADER_ENGINE := engine.h
84$ EXHEADER_BUFFER := buffer.h
85$ EXHEADER_BIO := bio.h
86$ EXHEADER_STACK := stack.h,safestack.h
87$ EXHEADER_LHASH := lhash.h
88$ EXHEADER_RAND := rand.h
89$ EXHEADER_ERR := err.h
90$ EXHEADER_EVP := evp.h
91$ EXHEADER_ASN1 := asn1.h,asn1_mac.h,asn1t.h
92$ EXHEADER_PEM := pem.h,pem2.h
93$ EXHEADER_X509 := x509.h,x509_vfy.h
94$ EXHEADER_X509V3 := x509v3.h
95$ EXHEADER_CONF := conf.h,conf_api.h
96$ EXHEADER_TXT_DB := txt_db.h
97$ EXHEADER_PKCS7 := pkcs7.h
98$ EXHEADER_PKCS12 := pkcs12.h
99$ EXHEADER_COMP := comp.h
100$ EXHEADER_OCSP := ocsp.h
101$ EXHEADER_UI := ui.h,ui_compat.h
102$ EXHEADER_KRB5 := krb5_asn.h
103$! EXHEADER_STORE := store.h,str_compat.h
104$ EXHEADER_STORE := store.h
105$ EXHEADER_CMS := cms.h
106$ EXHEADER_PQUEUE := pqueue.h
107$ EXHEADER_TS := ts.h
108$ EXHEADER_JPAKE := jpake.h
109$ LIBS := LIBCRYPTO
110$
111$ EXE_DIR := [-.'ARCH'.EXE.CRYPTO]
112$
113$ I = 0
114$ LOOP_SDIRS:
115$ D = F$EDIT(F$ELEMENT(I, ",", SDIRS),"TRIM")
116$ I = I + 1
117$ IF D .EQS. "," THEN GOTO LOOP_SDIRS_END
118$ tmp = EXHEADER_'D'
119$ IF D .EQS. ""
120$ THEN
121$ COPY 'tmp' WRK_SSLINCLUDE: /LOG
122$ ELSE
123$ IF D .EQS. "_''ARCH'"
124$ THEN
125$ COPY [-.'ARCH'.CRYPTO]'tmp' WRK_SSLINCLUDE: /LOG
126$ ELSE
127$ COPY [.'D']'tmp' WRK_SSLINCLUDE: /LOG
128$ ENDIF
129$ ENDIF
130$ SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'tmp'
131$ GOTO LOOP_SDIRS
132$ LOOP_SDIRS_END:
133$
134$ I = 0
135$ LOOP_LIB:
136$ E = F$EDIT(F$ELEMENT(I, ",", LIBS),"TRIM")
137$ I = I + 1
138$ IF E .EQS. "," THEN GOTO LOOP_LIB_END
139$ SET NOON
140$ IF F$SEARCH(EXE_DIR+E+".OLB") .NES. ""
141$ THEN
142$ COPY 'EXE_DIR''E'.OLB WRK_SSLLIB:'E'.OLB/log
143$ SET FILE/PROT=W:RE WRK_SSLLIB:'E'.OLB
144$ ENDIF
145$ ! Preparing for the time when we have shareable images
146$ IF F$SEARCH(EXE_DIR+E+".EXE") .NES. ""
147$ THEN
148$ COPY 'EXE_DIR''E'.EXE WRK_SSLLIB:'E'.EXE/log
149$ SET FILE/PROT=W:RE WRK_SSLLIB:'E'.EXE
150$ ENDIF
151$ SET ON
152$ GOTO LOOP_LIB
153$ LOOP_LIB_END:
154$
155$ EXIT
diff --git a/src/lib/libssl/src/crypto/md4/md4_dgst.c b/src/lib/libssl/src/crypto/md4/md4_dgst.c
index 82c2cb2d98..b5b165b052 100644
--- a/src/lib/libssl/src/crypto/md4/md4_dgst.c
+++ b/src/lib/libssl/src/crypto/md4/md4_dgst.c
@@ -106,22 +106,23 @@ void md4_block_data_order (MD4_CTX *c, const void *data_, size_t num)
106 106
107 for (;num--;) 107 for (;num--;)
108 { 108 {
109 HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 109 (void)HOST_c2l(data,l); X( 0)=l;
110 (void)HOST_c2l(data,l); X( 1)=l;
110 /* Round 0 */ 111 /* Round 0 */
111 R0(A,B,C,D,X( 0), 3,0); HOST_c2l(data,l); X( 2)=l; 112 R0(A,B,C,D,X( 0), 3,0); (void)HOST_c2l(data,l); X( 2)=l;
112 R0(D,A,B,C,X( 1), 7,0); HOST_c2l(data,l); X( 3)=l; 113 R0(D,A,B,C,X( 1), 7,0); (void)HOST_c2l(data,l); X( 3)=l;
113 R0(C,D,A,B,X( 2),11,0); HOST_c2l(data,l); X( 4)=l; 114 R0(C,D,A,B,X( 2),11,0); (void)HOST_c2l(data,l); X( 4)=l;
114 R0(B,C,D,A,X( 3),19,0); HOST_c2l(data,l); X( 5)=l; 115 R0(B,C,D,A,X( 3),19,0); (void)HOST_c2l(data,l); X( 5)=l;
115 R0(A,B,C,D,X( 4), 3,0); HOST_c2l(data,l); X( 6)=l; 116 R0(A,B,C,D,X( 4), 3,0); (void)HOST_c2l(data,l); X( 6)=l;
116 R0(D,A,B,C,X( 5), 7,0); HOST_c2l(data,l); X( 7)=l; 117 R0(D,A,B,C,X( 5), 7,0); (void)HOST_c2l(data,l); X( 7)=l;
117 R0(C,D,A,B,X( 6),11,0); HOST_c2l(data,l); X( 8)=l; 118 R0(C,D,A,B,X( 6),11,0); (void)HOST_c2l(data,l); X( 8)=l;
118 R0(B,C,D,A,X( 7),19,0); HOST_c2l(data,l); X( 9)=l; 119 R0(B,C,D,A,X( 7),19,0); (void)HOST_c2l(data,l); X( 9)=l;
119 R0(A,B,C,D,X( 8), 3,0); HOST_c2l(data,l); X(10)=l; 120 R0(A,B,C,D,X( 8), 3,0); (void)HOST_c2l(data,l); X(10)=l;
120 R0(D,A,B,C,X( 9), 7,0); HOST_c2l(data,l); X(11)=l; 121 R0(D,A,B,C,X( 9), 7,0); (void)HOST_c2l(data,l); X(11)=l;
121 R0(C,D,A,B,X(10),11,0); HOST_c2l(data,l); X(12)=l; 122 R0(C,D,A,B,X(10),11,0); (void)HOST_c2l(data,l); X(12)=l;
122 R0(B,C,D,A,X(11),19,0); HOST_c2l(data,l); X(13)=l; 123 R0(B,C,D,A,X(11),19,0); (void)HOST_c2l(data,l); X(13)=l;
123 R0(A,B,C,D,X(12), 3,0); HOST_c2l(data,l); X(14)=l; 124 R0(A,B,C,D,X(12), 3,0); (void)HOST_c2l(data,l); X(14)=l;
124 R0(D,A,B,C,X(13), 7,0); HOST_c2l(data,l); X(15)=l; 125 R0(D,A,B,C,X(13), 7,0); (void)HOST_c2l(data,l); X(15)=l;
125 R0(C,D,A,B,X(14),11,0); 126 R0(C,D,A,B,X(14),11,0);
126 R0(B,C,D,A,X(15),19,0); 127 R0(B,C,D,A,X(15),19,0);
127 /* Round 1 */ 128 /* Round 1 */
diff --git a/src/lib/libssl/src/crypto/md4/md4_locl.h b/src/lib/libssl/src/crypto/md4/md4_locl.h
index c8085b0ead..99c3e5004c 100644
--- a/src/lib/libssl/src/crypto/md4/md4_locl.h
+++ b/src/lib/libssl/src/crypto/md4/md4_locl.h
@@ -77,10 +77,10 @@ void md4_block_data_order (MD4_CTX *c, const void *p,size_t num);
77#define HASH_FINAL MD4_Final 77#define HASH_FINAL MD4_Final
78#define HASH_MAKE_STRING(c,s) do { \ 78#define HASH_MAKE_STRING(c,s) do { \
79 unsigned long ll; \ 79 unsigned long ll; \
80 ll=(c)->A; HOST_l2c(ll,(s)); \ 80 ll=(c)->A; (void)HOST_l2c(ll,(s)); \
81 ll=(c)->B; HOST_l2c(ll,(s)); \ 81 ll=(c)->B; (void)HOST_l2c(ll,(s)); \
82 ll=(c)->C; HOST_l2c(ll,(s)); \ 82 ll=(c)->C; (void)HOST_l2c(ll,(s)); \
83 ll=(c)->D; HOST_l2c(ll,(s)); \ 83 ll=(c)->D; (void)HOST_l2c(ll,(s)); \
84 } while (0) 84 } while (0)
85#define HASH_BLOCK_DATA_ORDER md4_block_data_order 85#define HASH_BLOCK_DATA_ORDER md4_block_data_order
86 86
diff --git a/src/lib/libssl/src/crypto/md5/md5_locl.h b/src/lib/libssl/src/crypto/md5/md5_locl.h
index 968d577995..74d63d1f9c 100644
--- a/src/lib/libssl/src/crypto/md5/md5_locl.h
+++ b/src/lib/libssl/src/crypto/md5/md5_locl.h
@@ -86,10 +86,10 @@ void md5_block_data_order (MD5_CTX *c, const void *p,size_t num);
86#define HASH_FINAL MD5_Final 86#define HASH_FINAL MD5_Final
87#define HASH_MAKE_STRING(c,s) do { \ 87#define HASH_MAKE_STRING(c,s) do { \
88 unsigned long ll; \ 88 unsigned long ll; \
89 ll=(c)->A; HOST_l2c(ll,(s)); \ 89 ll=(c)->A; (void)HOST_l2c(ll,(s)); \
90 ll=(c)->B; HOST_l2c(ll,(s)); \ 90 ll=(c)->B; (void)HOST_l2c(ll,(s)); \
91 ll=(c)->C; HOST_l2c(ll,(s)); \ 91 ll=(c)->C; (void)HOST_l2c(ll,(s)); \
92 ll=(c)->D; HOST_l2c(ll,(s)); \ 92 ll=(c)->D; (void)HOST_l2c(ll,(s)); \
93 } while (0) 93 } while (0)
94#define HASH_BLOCK_DATA_ORDER md5_block_data_order 94#define HASH_BLOCK_DATA_ORDER md5_block_data_order
95 95
diff --git a/src/lib/libssl/src/crypto/mdc2/mdc2dgst.c b/src/lib/libssl/src/crypto/mdc2/mdc2dgst.c
index b74bb1a759..d66ed6a1c6 100644
--- a/src/lib/libssl/src/crypto/mdc2/mdc2dgst.c
+++ b/src/lib/libssl/src/crypto/mdc2/mdc2dgst.c
@@ -59,9 +59,9 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#include <string.h> 61#include <string.h>
62#include <openssl/crypto.h>
62#include <openssl/des.h> 63#include <openssl/des.h>
63#include <openssl/mdc2.h> 64#include <openssl/mdc2.h>
64#include <openssl/crypto.h>
65 65
66#undef c2l 66#undef c2l
67#define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \ 67#define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \
diff --git a/src/lib/libssl/src/crypto/mem.c b/src/lib/libssl/src/crypto/mem.c
index 24ccf729ca..55e829dc92 100644
--- a/src/lib/libssl/src/crypto/mem.c
+++ b/src/lib/libssl/src/crypto/mem.c
@@ -121,10 +121,10 @@ static void (*set_debug_options_func)(long) = NULL;
121static long (*get_debug_options_func)(void) = NULL; 121static long (*get_debug_options_func)(void) = NULL;
122#endif 122#endif
123 123
124
125int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), 124int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t),
126 void (*f)(void *)) 125 void (*f)(void *))
127 { 126 {
127 /* Dummy call just to ensure OPENSSL_init() gets linked in */
128 OPENSSL_init(); 128 OPENSSL_init();
129 if (!allow_customize) 129 if (!allow_customize)
130 return 0; 130 return 0;
diff --git a/src/lib/libssl/src/crypto/modes/Makefile b/src/lib/libssl/src/crypto/modes/Makefile
index 3d8bafd571..c825b12f25 100644
--- a/src/lib/libssl/src/crypto/modes/Makefile
+++ b/src/lib/libssl/src/crypto/modes/Makefile
@@ -53,10 +53,7 @@ ghash-x86_64.s: asm/ghash-x86_64.pl
53ghash-sparcv9.s: asm/ghash-sparcv9.pl 53ghash-sparcv9.s: asm/ghash-sparcv9.pl
54 $(PERL) asm/ghash-sparcv9.pl $@ $(CFLAGS) 54 $(PERL) asm/ghash-sparcv9.pl $@ $(CFLAGS)
55ghash-alpha.s: asm/ghash-alpha.pl 55ghash-alpha.s: asm/ghash-alpha.pl
56 (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ 56 $(PERL) $< | $(CC) -E - | tee $@ > /dev/null
57 $(PERL) asm/ghash-alpha.pl > $$preproc && \
58 $(CC) -E $$preproc > $@ && rm $$preproc)
59
60ghash-parisc.s: asm/ghash-parisc.pl 57ghash-parisc.s: asm/ghash-parisc.pl
61 $(PERL) asm/ghash-parisc.pl $(PERLASM_SCHEME) $@ 58 $(PERL) asm/ghash-parisc.pl $(PERLASM_SCHEME) $@
62 59
diff --git a/src/lib/libssl/src/crypto/objects/o_names.c b/src/lib/libssl/src/crypto/objects/o_names.c
index 84380a96a9..4a548c2ed4 100644
--- a/src/lib/libssl/src/crypto/objects/o_names.c
+++ b/src/lib/libssl/src/crypto/objects/o_names.c
@@ -73,7 +73,7 @@ int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *),
73 name_funcs_stack=sk_NAME_FUNCS_new_null(); 73 name_funcs_stack=sk_NAME_FUNCS_new_null();
74 MemCheck_on(); 74 MemCheck_on();
75 } 75 }
76 if ((name_funcs_stack == NULL)) 76 if (name_funcs_stack == NULL)
77 { 77 {
78 /* ERROR */ 78 /* ERROR */
79 return(0); 79 return(0);
diff --git a/src/lib/libssl/src/crypto/ocsp/ocsp_vfy.c b/src/lib/libssl/src/crypto/ocsp/ocsp_vfy.c
index 91a45c9133..276718304d 100644
--- a/src/lib/libssl/src/crypto/ocsp/ocsp_vfy.c
+++ b/src/lib/libssl/src/crypto/ocsp/ocsp_vfy.c
@@ -111,6 +111,7 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
111 init_res = X509_STORE_CTX_init(&ctx, st, signer, bs->certs); 111 init_res = X509_STORE_CTX_init(&ctx, st, signer, bs->certs);
112 if(!init_res) 112 if(!init_res)
113 { 113 {
114 ret = -1;
114 OCSPerr(OCSP_F_OCSP_BASIC_VERIFY,ERR_R_X509_LIB); 115 OCSPerr(OCSP_F_OCSP_BASIC_VERIFY,ERR_R_X509_LIB);
115 goto end; 116 goto end;
116 } 117 }
diff --git a/src/lib/libssl/src/crypto/opensslv.h b/src/lib/libssl/src/crypto/opensslv.h
index 71be3590af..ebe7180723 100644
--- a/src/lib/libssl/src/crypto/opensslv.h
+++ b/src/lib/libssl/src/crypto/opensslv.h
@@ -25,11 +25,11 @@
25 * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for 25 * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
26 * major minor fix final patch/beta) 26 * major minor fix final patch/beta)
27 */ 27 */
28#define OPENSSL_VERSION_NUMBER 0x1000103fL 28#define OPENSSL_VERSION_NUMBER 0x1000107fL
29#ifdef OPENSSL_FIPS 29#ifdef OPENSSL_FIPS
30#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c-fips 10 May 2012" 30#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1g-fips 7 Apr 2014"
31#else 31#else
32#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c 10 May 2012" 32#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1g 7 Apr 2014"
33#endif 33#endif
34#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT 34#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
35 35
diff --git a/src/lib/libssl/src/crypto/pem/pem_all.c b/src/lib/libssl/src/crypto/pem/pem_all.c
index 3e7a6093ad..eac0460e3e 100644
--- a/src/lib/libssl/src/crypto/pem/pem_all.c
+++ b/src/lib/libssl/src/crypto/pem/pem_all.c
@@ -193,7 +193,61 @@ RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb,
193 193
194#endif 194#endif
195 195
196#ifdef OPENSSL_FIPS
197
198int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,
199 unsigned char *kstr, int klen,
200 pem_password_cb *cb, void *u)
201{
202 if (FIPS_mode())
203 {
204 EVP_PKEY *k;
205 int ret;
206 k = EVP_PKEY_new();
207 if (!k)
208 return 0;
209 EVP_PKEY_set1_RSA(k, x);
210
211 ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u);
212 EVP_PKEY_free(k);
213 return ret;
214 }
215 else
216 return PEM_ASN1_write_bio((i2d_of_void *)i2d_RSAPrivateKey,
217 PEM_STRING_RSA,bp,x,enc,kstr,klen,cb,u);
218}
219
220#ifndef OPENSSL_NO_FP_API
221int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,
222 unsigned char *kstr, int klen,
223 pem_password_cb *cb, void *u)
224{
225 if (FIPS_mode())
226 {
227 EVP_PKEY *k;
228 int ret;
229 k = EVP_PKEY_new();
230 if (!k)
231 return 0;
232
233 EVP_PKEY_set1_RSA(k, x);
234
235 ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u);
236 EVP_PKEY_free(k);
237 return ret;
238 }
239 else
240 return PEM_ASN1_write((i2d_of_void *)i2d_RSAPrivateKey,
241 PEM_STRING_RSA,fp,x,enc,kstr,klen,cb,u);
242}
243#endif
244
245#else
246
196IMPLEMENT_PEM_write_cb_const(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey) 247IMPLEMENT_PEM_write_cb_const(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey)
248
249#endif
250
197IMPLEMENT_PEM_rw_const(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey) 251IMPLEMENT_PEM_rw_const(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey)
198IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY) 252IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY)
199 253
@@ -223,7 +277,59 @@ DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **dsa, pem_password_cb *cb,
223 return pkey_get_dsa(pktmp, dsa); /* will free pktmp */ 277 return pkey_get_dsa(pktmp, dsa); /* will free pktmp */
224} 278}
225 279
280#ifdef OPENSSL_FIPS
281
282int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc,
283 unsigned char *kstr, int klen,
284 pem_password_cb *cb, void *u)
285{
286 if (FIPS_mode())
287 {
288 EVP_PKEY *k;
289 int ret;
290 k = EVP_PKEY_new();
291 if (!k)
292 return 0;
293 EVP_PKEY_set1_DSA(k, x);
294
295 ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u);
296 EVP_PKEY_free(k);
297 return ret;
298 }
299 else
300 return PEM_ASN1_write_bio((i2d_of_void *)i2d_DSAPrivateKey,
301 PEM_STRING_DSA,bp,x,enc,kstr,klen,cb,u);
302}
303
304#ifndef OPENSSL_NO_FP_API
305int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc,
306 unsigned char *kstr, int klen,
307 pem_password_cb *cb, void *u)
308{
309 if (FIPS_mode())
310 {
311 EVP_PKEY *k;
312 int ret;
313 k = EVP_PKEY_new();
314 if (!k)
315 return 0;
316 EVP_PKEY_set1_DSA(k, x);
317 ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u);
318 EVP_PKEY_free(k);
319 return ret;
320 }
321 else
322 return PEM_ASN1_write((i2d_of_void *)i2d_DSAPrivateKey,
323 PEM_STRING_DSA,fp,x,enc,kstr,klen,cb,u);
324}
325#endif
326
327#else
328
226IMPLEMENT_PEM_write_cb_const(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey) 329IMPLEMENT_PEM_write_cb_const(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey)
330
331#endif
332
227IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY) 333IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY)
228 334
229#ifndef OPENSSL_NO_FP_API 335#ifndef OPENSSL_NO_FP_API
@@ -269,8 +375,63 @@ EC_KEY *PEM_read_bio_ECPrivateKey(BIO *bp, EC_KEY **key, pem_password_cb *cb,
269 375
270IMPLEMENT_PEM_rw_const(ECPKParameters, EC_GROUP, PEM_STRING_ECPARAMETERS, ECPKParameters) 376IMPLEMENT_PEM_rw_const(ECPKParameters, EC_GROUP, PEM_STRING_ECPARAMETERS, ECPKParameters)
271 377
378
379
380#ifdef OPENSSL_FIPS
381
382int PEM_write_bio_ECPrivateKey(BIO *bp, EC_KEY *x, const EVP_CIPHER *enc,
383 unsigned char *kstr, int klen,
384 pem_password_cb *cb, void *u)
385{
386 if (FIPS_mode())
387 {
388 EVP_PKEY *k;
389 int ret;
390 k = EVP_PKEY_new();
391 if (!k)
392 return 0;
393 EVP_PKEY_set1_EC_KEY(k, x);
394
395 ret = PEM_write_bio_PrivateKey(bp, k, enc, kstr, klen, cb, u);
396 EVP_PKEY_free(k);
397 return ret;
398 }
399 else
400 return PEM_ASN1_write_bio((i2d_of_void *)i2d_ECPrivateKey,
401 PEM_STRING_ECPRIVATEKEY,
402 bp,x,enc,kstr,klen,cb,u);
403}
404
405#ifndef OPENSSL_NO_FP_API
406int PEM_write_ECPrivateKey(FILE *fp, EC_KEY *x, const EVP_CIPHER *enc,
407 unsigned char *kstr, int klen,
408 pem_password_cb *cb, void *u)
409{
410 if (FIPS_mode())
411 {
412 EVP_PKEY *k;
413 int ret;
414 k = EVP_PKEY_new();
415 if (!k)
416 return 0;
417 EVP_PKEY_set1_EC_KEY(k, x);
418 ret = PEM_write_PrivateKey(fp, k, enc, kstr, klen, cb, u);
419 EVP_PKEY_free(k);
420 return ret;
421 }
422 else
423 return PEM_ASN1_write((i2d_of_void *)i2d_ECPrivateKey,
424 PEM_STRING_ECPRIVATEKEY,
425 fp,x,enc,kstr,klen,cb,u);
426}
427#endif
428
429#else
430
272IMPLEMENT_PEM_write_cb(ECPrivateKey, EC_KEY, PEM_STRING_ECPRIVATEKEY, ECPrivateKey) 431IMPLEMENT_PEM_write_cb(ECPrivateKey, EC_KEY, PEM_STRING_ECPRIVATEKEY, ECPrivateKey)
273 432
433#endif
434
274IMPLEMENT_PEM_rw(EC_PUBKEY, EC_KEY, PEM_STRING_PUBLIC, EC_PUBKEY) 435IMPLEMENT_PEM_rw(EC_PUBKEY, EC_KEY, PEM_STRING_PUBLIC, EC_PUBKEY)
275 436
276#ifndef OPENSSL_NO_FP_API 437#ifndef OPENSSL_NO_FP_API
diff --git a/src/lib/libssl/src/crypto/pem/pem_info.c b/src/lib/libssl/src/crypto/pem/pem_info.c
index 1b2be527ed..cc7f24a9c1 100644
--- a/src/lib/libssl/src/crypto/pem/pem_info.c
+++ b/src/lib/libssl/src/crypto/pem/pem_info.c
@@ -167,6 +167,7 @@ start:
167#ifndef OPENSSL_NO_RSA 167#ifndef OPENSSL_NO_RSA
168 if (strcmp(name,PEM_STRING_RSA) == 0) 168 if (strcmp(name,PEM_STRING_RSA) == 0)
169 { 169 {
170 d2i=(D2I_OF(void))d2i_RSAPrivateKey;
170 if (xi->x_pkey != NULL) 171 if (xi->x_pkey != NULL)
171 { 172 {
172 if (!sk_X509_INFO_push(ret,xi)) goto err; 173 if (!sk_X509_INFO_push(ret,xi)) goto err;
diff --git a/src/lib/libssl/src/crypto/pem/pem_lib.c b/src/lib/libssl/src/crypto/pem/pem_lib.c
index cfc89a9921..5a421fc4b6 100644
--- a/src/lib/libssl/src/crypto/pem/pem_lib.c
+++ b/src/lib/libssl/src/crypto/pem/pem_lib.c
@@ -394,7 +394,8 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
394 goto err; 394 goto err;
395 /* The 'iv' is used as the iv and as a salt. It is 395 /* The 'iv' is used as the iv and as a salt. It is
396 * NOT taken from the BytesToKey function */ 396 * NOT taken from the BytesToKey function */
397 EVP_BytesToKey(enc,EVP_md5(),iv,kstr,klen,1,key,NULL); 397 if (!EVP_BytesToKey(enc,EVP_md5(),iv,kstr,klen,1,key,NULL))
398 goto err;
398 399
399 if (kstr == (unsigned char *)buf) OPENSSL_cleanse(buf,PEM_BUFSIZE); 400 if (kstr == (unsigned char *)buf) OPENSSL_cleanse(buf,PEM_BUFSIZE);
400 401
@@ -406,12 +407,15 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
406 /* k=strlen(buf); */ 407 /* k=strlen(buf); */
407 408
408 EVP_CIPHER_CTX_init(&ctx); 409 EVP_CIPHER_CTX_init(&ctx);
409 EVP_EncryptInit_ex(&ctx,enc,NULL,key,iv); 410 ret = 1;
410 EVP_EncryptUpdate(&ctx,data,&j,data,i); 411 if (!EVP_EncryptInit_ex(&ctx,enc,NULL,key,iv)
411 EVP_EncryptFinal_ex(&ctx,&(data[j]),&i); 412 || !EVP_EncryptUpdate(&ctx,data,&j,data,i)
413 || !EVP_EncryptFinal_ex(&ctx,&(data[j]),&i))
414 ret = 0;
412 EVP_CIPHER_CTX_cleanup(&ctx); 415 EVP_CIPHER_CTX_cleanup(&ctx);
416 if (ret == 0)
417 goto err;
413 i+=j; 418 i+=j;
414 ret=1;
415 } 419 }
416 else 420 else
417 { 421 {
@@ -459,14 +463,17 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen,
459 ebcdic2ascii(buf, buf, klen); 463 ebcdic2ascii(buf, buf, klen);
460#endif 464#endif
461 465
462 EVP_BytesToKey(cipher->cipher,EVP_md5(),&(cipher->iv[0]), 466 if (!EVP_BytesToKey(cipher->cipher,EVP_md5(),&(cipher->iv[0]),
463 (unsigned char *)buf,klen,1,key,NULL); 467 (unsigned char *)buf,klen,1,key,NULL))
468 return 0;
464 469
465 j=(int)len; 470 j=(int)len;
466 EVP_CIPHER_CTX_init(&ctx); 471 EVP_CIPHER_CTX_init(&ctx);
467 EVP_DecryptInit_ex(&ctx,cipher->cipher,NULL, key,&(cipher->iv[0])); 472 o = EVP_DecryptInit_ex(&ctx,cipher->cipher,NULL, key,&(cipher->iv[0]));
468 EVP_DecryptUpdate(&ctx,data,&i,data,j); 473 if (o)
469 o=EVP_DecryptFinal_ex(&ctx,&(data[i]),&j); 474 o = EVP_DecryptUpdate(&ctx,data,&i,data,j);
475 if (o)
476 o = EVP_DecryptFinal_ex(&ctx,&(data[i]),&j);
470 EVP_CIPHER_CTX_cleanup(&ctx); 477 EVP_CIPHER_CTX_cleanup(&ctx);
471 OPENSSL_cleanse((char *)buf,sizeof(buf)); 478 OPENSSL_cleanse((char *)buf,sizeof(buf));
472 OPENSSL_cleanse((char *)key,sizeof(key)); 479 OPENSSL_cleanse((char *)key,sizeof(key));
diff --git a/src/lib/libssl/src/crypto/pem/pem_seal.c b/src/lib/libssl/src/crypto/pem/pem_seal.c
index 59690b56ae..b6b4e13498 100644
--- a/src/lib/libssl/src/crypto/pem/pem_seal.c
+++ b/src/lib/libssl/src/crypto/pem/pem_seal.c
@@ -96,7 +96,8 @@ int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, EVP_MD *md_type,
96 EVP_EncodeInit(&ctx->encode); 96 EVP_EncodeInit(&ctx->encode);
97 97
98 EVP_MD_CTX_init(&ctx->md); 98 EVP_MD_CTX_init(&ctx->md);
99 EVP_SignInit(&ctx->md,md_type); 99 if (!EVP_SignInit(&ctx->md,md_type))
100 goto err;
100 101
101 EVP_CIPHER_CTX_init(&ctx->cipher); 102 EVP_CIPHER_CTX_init(&ctx->cipher);
102 ret=EVP_SealInit(&ctx->cipher,type,ek,ekl,iv,pubk,npubk); 103 ret=EVP_SealInit(&ctx->cipher,type,ek,ekl,iv,pubk,npubk);
@@ -163,7 +164,8 @@ int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl,
163 goto err; 164 goto err;
164 } 165 }
165 166
166 EVP_EncryptFinal_ex(&ctx->cipher,s,(int *)&i); 167 if (!EVP_EncryptFinal_ex(&ctx->cipher,s,(int *)&i))
168 goto err;
167 EVP_EncodeUpdate(&ctx->encode,out,&j,s,i); 169 EVP_EncodeUpdate(&ctx->encode,out,&j,s,i);
168 *outl=j; 170 *outl=j;
169 out+=j; 171 out+=j;
diff --git a/src/lib/libssl/src/crypto/perlasm/cbc.pl b/src/lib/libssl/src/crypto/perlasm/cbc.pl
index 6fc2510905..24561e759a 100644
--- a/src/lib/libssl/src/crypto/perlasm/cbc.pl
+++ b/src/lib/libssl/src/crypto/perlasm/cbc.pl
@@ -150,7 +150,7 @@ sub cbc
150&set_label("PIC_point"); 150&set_label("PIC_point");
151 &blindpop("edx"); 151 &blindpop("edx");
152 &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx")); 152 &lea("ecx",&DWP(&label("cbc_enc_jmp_table")."-".&label("PIC_point"),"edx"));
153 &mov($count,&DWP(0,"ecx",$count,4)) 153 &mov($count,&DWP(0,"ecx",$count,4));
154 &add($count,"edx"); 154 &add($count,"edx");
155 &xor("ecx","ecx"); 155 &xor("ecx","ecx");
156 &xor("edx","edx"); 156 &xor("edx","edx");
diff --git a/src/lib/libssl/src/crypto/pkcs12/p12_crt.c b/src/lib/libssl/src/crypto/pkcs12/p12_crt.c
index 96b131defa..a34915d02d 100644
--- a/src/lib/libssl/src/crypto/pkcs12/p12_crt.c
+++ b/src/lib/libssl/src/crypto/pkcs12/p12_crt.c
@@ -90,7 +90,14 @@ PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert,
90 90
91 /* Set defaults */ 91 /* Set defaults */
92 if (!nid_cert) 92 if (!nid_cert)
93 {
94#ifdef OPENSSL_FIPS
95 if (FIPS_mode())
96 nid_cert = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
97 else
98#endif
93 nid_cert = NID_pbe_WithSHA1And40BitRC2_CBC; 99 nid_cert = NID_pbe_WithSHA1And40BitRC2_CBC;
100 }
94 if (!nid_key) 101 if (!nid_key)
95 nid_key = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; 102 nid_key = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
96 if (!iter) 103 if (!iter)
diff --git a/src/lib/libssl/src/crypto/pkcs12/p12_key.c b/src/lib/libssl/src/crypto/pkcs12/p12_key.c
index c55c7b60b3..61d58502fd 100644
--- a/src/lib/libssl/src/crypto/pkcs12/p12_key.c
+++ b/src/lib/libssl/src/crypto/pkcs12/p12_key.c
@@ -176,24 +176,32 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
176 out += u; 176 out += u;
177 for (j = 0; j < v; j++) B[j] = Ai[j % u]; 177 for (j = 0; j < v; j++) B[j] = Ai[j % u];
178 /* Work out B + 1 first then can use B as tmp space */ 178 /* Work out B + 1 first then can use B as tmp space */
179 if (!BN_bin2bn (B, v, Bpl1)) goto err; 179 if (!BN_bin2bn (B, v, Bpl1))
180 if (!BN_add_word (Bpl1, 1)) goto err; 180 goto err;
181 if (!BN_add_word (Bpl1, 1))
182 goto err;
181 for (j = 0; j < Ilen ; j+=v) { 183 for (j = 0; j < Ilen ; j+=v) {
182 if (!BN_bin2bn (I + j, v, Ij)) goto err; 184 if (!BN_bin2bn(I + j, v, Ij))
183 if (!BN_add (Ij, Ij, Bpl1)) goto err; 185 goto err;
184 BN_bn2bin (Ij, B); 186 if (!BN_add(Ij, Ij, Bpl1))
187 goto err;
188 if (!BN_bn2bin(Ij, B))
189 goto err;
185 Ijlen = BN_num_bytes (Ij); 190 Ijlen = BN_num_bytes (Ij);
186 /* If more than 2^(v*8) - 1 cut off MSB */ 191 /* If more than 2^(v*8) - 1 cut off MSB */
187 if (Ijlen > v) { 192 if (Ijlen > v) {
188 BN_bn2bin (Ij, B); 193 if (!BN_bn2bin (Ij, B))
194 goto err;
189 memcpy (I + j, B + 1, v); 195 memcpy (I + j, B + 1, v);
190#ifndef PKCS12_BROKEN_KEYGEN 196#ifndef PKCS12_BROKEN_KEYGEN
191 /* If less than v bytes pad with zeroes */ 197 /* If less than v bytes pad with zeroes */
192 } else if (Ijlen < v) { 198 } else if (Ijlen < v) {
193 memset(I + j, 0, v - Ijlen); 199 memset(I + j, 0, v - Ijlen);
194 BN_bn2bin(Ij, I + j + v - Ijlen); 200 if (!BN_bn2bin(Ij, I + j + v - Ijlen))
201 goto err;
195#endif 202#endif
196 } else BN_bn2bin (Ij, I + j); 203 } else if (!BN_bn2bin (Ij, I + j))
204 goto err;
197 } 205 }
198 } 206 }
199 207
diff --git a/src/lib/libssl/src/crypto/rand/md_rand.c b/src/lib/libssl/src/crypto/rand/md_rand.c
index fcdd3f2a84..aee1c30b0a 100644
--- a/src/lib/libssl/src/crypto/rand/md_rand.c
+++ b/src/lib/libssl/src/crypto/rand/md_rand.c
@@ -123,10 +123,10 @@
123 123
124#include "e_os.h" 124#include "e_os.h"
125 125
126#include <openssl/crypto.h>
126#include <openssl/rand.h> 127#include <openssl/rand.h>
127#include "rand_lcl.h" 128#include "rand_lcl.h"
128 129
129#include <openssl/crypto.h>
130#include <openssl/err.h> 130#include <openssl/err.h>
131 131
132#ifdef BN_DEBUG 132#ifdef BN_DEBUG
@@ -198,6 +198,9 @@ static void ssleay_rand_add(const void *buf, int num, double add)
198 EVP_MD_CTX m; 198 EVP_MD_CTX m;
199 int do_not_lock; 199 int do_not_lock;
200 200
201 if (!num)
202 return;
203
201 /* 204 /*
202 * (Based on the rand(3) manpage) 205 * (Based on the rand(3) manpage)
203 * 206 *
@@ -380,8 +383,11 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
380 * are fed into the hash function and the results are kept in the 383 * are fed into the hash function and the results are kept in the
381 * global 'md'. 384 * global 'md'.
382 */ 385 */
383 386#ifdef OPENSSL_FIPS
384 CRYPTO_w_lock(CRYPTO_LOCK_RAND); 387 /* NB: in FIPS mode we are already under a lock */
388 if (!FIPS_mode())
389#endif
390 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
385 391
386 /* prevent ssleay_rand_bytes() from trying to obtain the lock again */ 392 /* prevent ssleay_rand_bytes() from trying to obtain the lock again */
387 CRYPTO_w_lock(CRYPTO_LOCK_RAND2); 393 CRYPTO_w_lock(CRYPTO_LOCK_RAND2);
@@ -460,7 +466,10 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
460 466
461 /* before unlocking, we must clear 'crypto_lock_rand' */ 467 /* before unlocking, we must clear 'crypto_lock_rand' */
462 crypto_lock_rand = 0; 468 crypto_lock_rand = 0;
463 CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 469#ifdef OPENSSL_FIPS
470 if (!FIPS_mode())
471#endif
472 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
464 473
465 while (num > 0) 474 while (num > 0)
466 { 475 {
@@ -512,10 +521,16 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo)
512 MD_Init(&m); 521 MD_Init(&m);
513 MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c)); 522 MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c));
514 MD_Update(&m,local_md,MD_DIGEST_LENGTH); 523 MD_Update(&m,local_md,MD_DIGEST_LENGTH);
515 CRYPTO_w_lock(CRYPTO_LOCK_RAND); 524#ifdef OPENSSL_FIPS
525 if (!FIPS_mode())
526#endif
527 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
516 MD_Update(&m,md,MD_DIGEST_LENGTH); 528 MD_Update(&m,md,MD_DIGEST_LENGTH);
517 MD_Final(&m,md); 529 MD_Final(&m,md);
518 CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 530#ifdef OPENSSL_FIPS
531 if (!FIPS_mode())
532#endif
533 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
519 534
520 EVP_MD_CTX_cleanup(&m); 535 EVP_MD_CTX_cleanup(&m);
521 if (ok) 536 if (ok)
diff --git a/src/lib/libssl/src/crypto/rand/rand.h b/src/lib/libssl/src/crypto/rand/rand.h
index dc8fcf94c5..bb5520e80a 100644
--- a/src/lib/libssl/src/crypto/rand/rand.h
+++ b/src/lib/libssl/src/crypto/rand/rand.h
@@ -138,6 +138,7 @@ void ERR_load_RAND_strings(void);
138#define RAND_F_SSLEAY_RAND_BYTES 100 138#define RAND_F_SSLEAY_RAND_BYTES 100
139 139
140/* Reason codes. */ 140/* Reason codes. */
141#define RAND_R_DUAL_EC_DRBG_DISABLED 104
141#define RAND_R_ERROR_INITIALISING_DRBG 102 142#define RAND_R_ERROR_INITIALISING_DRBG 102
142#define RAND_R_ERROR_INSTANTIATING_DRBG 103 143#define RAND_R_ERROR_INSTANTIATING_DRBG 103
143#define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 144#define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101
diff --git a/src/lib/libssl/src/crypto/rand/rand_err.c b/src/lib/libssl/src/crypto/rand/rand_err.c
index b8586c8f4a..c4c80fc8cc 100644
--- a/src/lib/libssl/src/crypto/rand/rand_err.c
+++ b/src/lib/libssl/src/crypto/rand/rand_err.c
@@ -78,6 +78,7 @@ static ERR_STRING_DATA RAND_str_functs[]=
78 78
79static ERR_STRING_DATA RAND_str_reasons[]= 79static ERR_STRING_DATA RAND_str_reasons[]=
80 { 80 {
81{ERR_REASON(RAND_R_DUAL_EC_DRBG_DISABLED),"dual ec drbg disabled"},
81{ERR_REASON(RAND_R_ERROR_INITIALISING_DRBG),"error initialising drbg"}, 82{ERR_REASON(RAND_R_ERROR_INITIALISING_DRBG),"error initialising drbg"},
82{ERR_REASON(RAND_R_ERROR_INSTANTIATING_DRBG),"error instantiating drbg"}, 83{ERR_REASON(RAND_R_ERROR_INSTANTIATING_DRBG),"error instantiating drbg"},
83{ERR_REASON(RAND_R_NO_FIPS_RANDOM_METHOD_SET),"no fips random method set"}, 84{ERR_REASON(RAND_R_NO_FIPS_RANDOM_METHOD_SET),"no fips random method set"},
diff --git a/src/lib/libssl/src/crypto/rand/rand_lib.c b/src/lib/libssl/src/crypto/rand/rand_lib.c
index daf1dab973..5ac0e14caf 100644
--- a/src/lib/libssl/src/crypto/rand/rand_lib.c
+++ b/src/lib/libssl/src/crypto/rand/rand_lib.c
@@ -210,8 +210,11 @@ static size_t drbg_get_entropy(DRBG_CTX *ctx, unsigned char **pout,
210 210
211static void drbg_free_entropy(DRBG_CTX *ctx, unsigned char *out, size_t olen) 211static void drbg_free_entropy(DRBG_CTX *ctx, unsigned char *out, size_t olen)
212 { 212 {
213 OPENSSL_cleanse(out, olen); 213 if (out)
214 OPENSSL_free(out); 214 {
215 OPENSSL_cleanse(out, olen);
216 OPENSSL_free(out);
217 }
215 } 218 }
216 219
217/* Set "additional input" when generating random data. This uses the 220/* Set "additional input" when generating random data. This uses the
@@ -266,6 +269,14 @@ int RAND_init_fips(void)
266 DRBG_CTX *dctx; 269 DRBG_CTX *dctx;
267 size_t plen; 270 size_t plen;
268 unsigned char pers[32], *p; 271 unsigned char pers[32], *p;
272#ifndef OPENSSL_ALLOW_DUAL_EC_DRBG
273 if (fips_drbg_type >> 16)
274 {
275 RANDerr(RAND_F_RAND_INIT_FIPS, RAND_R_DUAL_EC_DRBG_DISABLED);
276 return 0;
277 }
278#endif
279
269 dctx = FIPS_get_default_drbg(); 280 dctx = FIPS_get_default_drbg();
270 if (FIPS_drbg_init(dctx, fips_drbg_type, fips_drbg_flags) <= 0) 281 if (FIPS_drbg_init(dctx, fips_drbg_type, fips_drbg_flags) <= 0)
271 { 282 {
diff --git a/src/lib/libssl/src/crypto/rand/rand_win.c b/src/lib/libssl/src/crypto/rand/rand_win.c
index 5d134e186b..34ffcd23f9 100644
--- a/src/lib/libssl/src/crypto/rand/rand_win.c
+++ b/src/lib/libssl/src/crypto/rand/rand_win.c
@@ -750,7 +750,7 @@ static void readscreen(void)
750 int y; /* y-coordinate of screen lines to grab */ 750 int y; /* y-coordinate of screen lines to grab */
751 int n = 16; /* number of screen lines to grab at a time */ 751 int n = 16; /* number of screen lines to grab at a time */
752 752
753 if (GetVersion() < 0x80000000 && OPENSSL_isservice()>0) 753 if (check_winnt() && OPENSSL_isservice()>0)
754 return; 754 return;
755 755
756 /* Create a screen DC and a memory DC compatible to screen DC */ 756 /* Create a screen DC and a memory DC compatible to screen DC */
diff --git a/src/lib/libssl/src/crypto/rand/randfile.c b/src/lib/libssl/src/crypto/rand/randfile.c
index 030e07f418..7f1428072d 100644
--- a/src/lib/libssl/src/crypto/rand/randfile.c
+++ b/src/lib/libssl/src/crypto/rand/randfile.c
@@ -57,7 +57,9 @@
57 */ 57 */
58 58
59/* We need to define this to get macros like S_IFBLK and S_IFCHR */ 59/* We need to define this to get macros like S_IFBLK and S_IFCHR */
60#if !defined(OPENSSL_SYS_VXWORKS)
60#define _XOPEN_SOURCE 500 61#define _XOPEN_SOURCE 500
62#endif
61 63
62#include <errno.h> 64#include <errno.h>
63#include <stdio.h> 65#include <stdio.h>
diff --git a/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl b/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl
index d6eac205e9..75750dbf33 100755
--- a/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl
+++ b/src/lib/libssl/src/crypto/rc4/asm/rc4-x86_64.pl
@@ -112,7 +112,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
112( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or 112( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
113die "can't locate x86_64-xlate.pl"; 113die "can't locate x86_64-xlate.pl";
114 114
115open STDOUT,"| $^X $xlate $flavour $output"; 115open OUT,"| \"$^X\" $xlate $flavour $output";
116*STDOUT=*OUT;
116 117
117$dat="%rdi"; # arg1 118$dat="%rdi"; # arg1
118$len="%rsi"; # arg2 119$len="%rsi"; # arg2
diff --git a/src/lib/libssl/src/crypto/rc4/rc4test.c b/src/lib/libssl/src/crypto/rc4/rc4test.c
index 633a79e758..4312605ccb 100644
--- a/src/lib/libssl/src/crypto/rc4/rc4test.c
+++ b/src/lib/libssl/src/crypto/rc4/rc4test.c
@@ -120,6 +120,12 @@ int main(int argc, char *argv[])
120 RC4_KEY key; 120 RC4_KEY key;
121 unsigned char obuf[512]; 121 unsigned char obuf[512];
122 122
123#if !defined(OPENSSL_PIC)
124 void OPENSSL_cpuid_setup(void);
125
126 OPENSSL_cpuid_setup();
127#endif
128
123 for (i=0; i<6; i++) 129 for (i=0; i<6; i++)
124 { 130 {
125 RC4_set_key(&key,keys[i][0],&(keys[i][1])); 131 RC4_set_key(&key,keys[i][0],&(keys[i][1]));
diff --git a/src/lib/libssl/src/crypto/ripemd/rmd_dgst.c b/src/lib/libssl/src/crypto/ripemd/rmd_dgst.c
index 9ff1a0705e..d8e72da51b 100644
--- a/src/lib/libssl/src/crypto/ripemd/rmd_dgst.c
+++ b/src/lib/libssl/src/crypto/ripemd/rmd_dgst.c
@@ -88,7 +88,7 @@ fips_md_init(RIPEMD160)
88void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, size_t num) 88void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, size_t num)
89 { 89 {
90 const unsigned char *data=p; 90 const unsigned char *data=p;
91 register volatile unsigned MD32_REG_T A,B,C,D,E; 91 register unsigned MD32_REG_T A,B,C,D,E;
92 unsigned MD32_REG_T a,b,c,d,e,l; 92 unsigned MD32_REG_T a,b,c,d,e,l;
93#ifndef MD32_XARRAY 93#ifndef MD32_XARRAY
94 /* See comment in crypto/sha/sha_locl.h for details. */ 94 /* See comment in crypto/sha/sha_locl.h for details. */
@@ -105,21 +105,21 @@ void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, size_t num)
105 105
106 A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E; 106 A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
107 107
108 HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 108 (void)HOST_c2l(data,l); X( 0)=l;(void)HOST_c2l(data,l); X( 1)=l;
109 RIP1(A,B,C,D,E,WL00,SL00); HOST_c2l(data,l); X( 2)=l; 109 RIP1(A,B,C,D,E,WL00,SL00); (void)HOST_c2l(data,l); X( 2)=l;
110 RIP1(E,A,B,C,D,WL01,SL01); HOST_c2l(data,l); X( 3)=l; 110 RIP1(E,A,B,C,D,WL01,SL01); (void)HOST_c2l(data,l); X( 3)=l;
111 RIP1(D,E,A,B,C,WL02,SL02); HOST_c2l(data,l); X( 4)=l; 111 RIP1(D,E,A,B,C,WL02,SL02); (void)HOST_c2l(data,l); X( 4)=l;
112 RIP1(C,D,E,A,B,WL03,SL03); HOST_c2l(data,l); X( 5)=l; 112 RIP1(C,D,E,A,B,WL03,SL03); (void)HOST_c2l(data,l); X( 5)=l;
113 RIP1(B,C,D,E,A,WL04,SL04); HOST_c2l(data,l); X( 6)=l; 113 RIP1(B,C,D,E,A,WL04,SL04); (void)HOST_c2l(data,l); X( 6)=l;
114 RIP1(A,B,C,D,E,WL05,SL05); HOST_c2l(data,l); X( 7)=l; 114 RIP1(A,B,C,D,E,WL05,SL05); (void)HOST_c2l(data,l); X( 7)=l;
115 RIP1(E,A,B,C,D,WL06,SL06); HOST_c2l(data,l); X( 8)=l; 115 RIP1(E,A,B,C,D,WL06,SL06); (void)HOST_c2l(data,l); X( 8)=l;
116 RIP1(D,E,A,B,C,WL07,SL07); HOST_c2l(data,l); X( 9)=l; 116 RIP1(D,E,A,B,C,WL07,SL07); (void)HOST_c2l(data,l); X( 9)=l;
117 RIP1(C,D,E,A,B,WL08,SL08); HOST_c2l(data,l); X(10)=l; 117 RIP1(C,D,E,A,B,WL08,SL08); (void)HOST_c2l(data,l); X(10)=l;
118 RIP1(B,C,D,E,A,WL09,SL09); HOST_c2l(data,l); X(11)=l; 118 RIP1(B,C,D,E,A,WL09,SL09); (void)HOST_c2l(data,l); X(11)=l;
119 RIP1(A,B,C,D,E,WL10,SL10); HOST_c2l(data,l); X(12)=l; 119 RIP1(A,B,C,D,E,WL10,SL10); (void)HOST_c2l(data,l); X(12)=l;
120 RIP1(E,A,B,C,D,WL11,SL11); HOST_c2l(data,l); X(13)=l; 120 RIP1(E,A,B,C,D,WL11,SL11); (void)HOST_c2l(data,l); X(13)=l;
121 RIP1(D,E,A,B,C,WL12,SL12); HOST_c2l(data,l); X(14)=l; 121 RIP1(D,E,A,B,C,WL12,SL12); (void)HOST_c2l(data,l); X(14)=l;
122 RIP1(C,D,E,A,B,WL13,SL13); HOST_c2l(data,l); X(15)=l; 122 RIP1(C,D,E,A,B,WL13,SL13); (void)HOST_c2l(data,l); X(15)=l;
123 RIP1(B,C,D,E,A,WL14,SL14); 123 RIP1(B,C,D,E,A,WL14,SL14);
124 RIP1(A,B,C,D,E,WL15,SL15); 124 RIP1(A,B,C,D,E,WL15,SL15);
125 125
diff --git a/src/lib/libssl/src/crypto/ripemd/rmd_locl.h b/src/lib/libssl/src/crypto/ripemd/rmd_locl.h
index f14b346e66..2bd8957d14 100644
--- a/src/lib/libssl/src/crypto/ripemd/rmd_locl.h
+++ b/src/lib/libssl/src/crypto/ripemd/rmd_locl.h
@@ -88,11 +88,11 @@ void ripemd160_block_data_order (RIPEMD160_CTX *c, const void *p,size_t num);
88#define HASH_FINAL RIPEMD160_Final 88#define HASH_FINAL RIPEMD160_Final
89#define HASH_MAKE_STRING(c,s) do { \ 89#define HASH_MAKE_STRING(c,s) do { \
90 unsigned long ll; \ 90 unsigned long ll; \
91 ll=(c)->A; HOST_l2c(ll,(s)); \ 91 ll=(c)->A; (void)HOST_l2c(ll,(s)); \
92 ll=(c)->B; HOST_l2c(ll,(s)); \ 92 ll=(c)->B; (void)HOST_l2c(ll,(s)); \
93 ll=(c)->C; HOST_l2c(ll,(s)); \ 93 ll=(c)->C; (void)HOST_l2c(ll,(s)); \
94 ll=(c)->D; HOST_l2c(ll,(s)); \ 94 ll=(c)->D; (void)HOST_l2c(ll,(s)); \
95 ll=(c)->E; HOST_l2c(ll,(s)); \ 95 ll=(c)->E; (void)HOST_l2c(ll,(s)); \
96 } while (0) 96 } while (0)
97#define HASH_BLOCK_DATA_ORDER ripemd160_block_data_order 97#define HASH_BLOCK_DATA_ORDER ripemd160_block_data_order
98 98
diff --git a/src/lib/libssl/src/crypto/rsa/rsa.h b/src/lib/libssl/src/crypto/rsa/rsa.h
index 4814a2fc15..5f269e577a 100644
--- a/src/lib/libssl/src/crypto/rsa/rsa.h
+++ b/src/lib/libssl/src/crypto/rsa/rsa.h
@@ -280,7 +280,7 @@ struct rsa_st
280 280
281RSA * RSA_new(void); 281RSA * RSA_new(void);
282RSA * RSA_new_method(ENGINE *engine); 282RSA * RSA_new_method(ENGINE *engine);
283int RSA_size(const RSA *); 283int RSA_size(const RSA *rsa);
284 284
285/* Deprecated version */ 285/* Deprecated version */
286#ifndef OPENSSL_NO_DEPRECATED 286#ifndef OPENSSL_NO_DEPRECATED
diff --git a/src/lib/libssl/src/crypto/rsa/rsa_chk.c b/src/lib/libssl/src/crypto/rsa/rsa_chk.c
index 9d848db8c6..cc30e77132 100644
--- a/src/lib/libssl/src/crypto/rsa/rsa_chk.c
+++ b/src/lib/libssl/src/crypto/rsa/rsa_chk.c
@@ -59,6 +59,12 @@ int RSA_check_key(const RSA *key)
59 BN_CTX *ctx; 59 BN_CTX *ctx;
60 int r; 60 int r;
61 int ret=1; 61 int ret=1;
62
63 if (!key->p || !key->q || !key->n || !key->e || !key->d)
64 {
65 RSAerr(RSA_F_RSA_CHECK_KEY, RSA_R_VALUE_MISSING);
66 return 0;
67 }
62 68
63 i = BN_new(); 69 i = BN_new();
64 j = BN_new(); 70 j = BN_new();
diff --git a/src/lib/libssl/src/crypto/rsa/rsa_eay.c b/src/lib/libssl/src/crypto/rsa/rsa_eay.c
index 2e1ddd48d3..88ee2cb557 100644
--- a/src/lib/libssl/src/crypto/rsa/rsa_eay.c
+++ b/src/lib/libssl/src/crypto/rsa/rsa_eay.c
@@ -847,12 +847,12 @@ static int RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
847 if (!BN_mod(r0,pr1,rsa->p,ctx)) goto err; 847 if (!BN_mod(r0,pr1,rsa->p,ctx)) goto err;
848 848
849 /* If p < q it is occasionally possible for the correction of 849 /* If p < q it is occasionally possible for the correction of
850 * adding 'p' if r0 is negative above to leave the result still 850 * adding 'p' if r0 is negative above to leave the result still
851 * negative. This can break the private key operations: the following 851 * negative. This can break the private key operations: the following
852 * second correction should *always* correct this rare occurrence. 852 * second correction should *always* correct this rare occurrence.
853 * This will *never* happen with OpenSSL generated keys because 853 * This will *never* happen with OpenSSL generated keys because
854 * they ensure p > q [steve] 854 * they ensure p > q [steve]
855 */ 855 */
856 if (BN_is_negative(r0)) 856 if (BN_is_negative(r0))
857 if (!BN_add(r0,r0,rsa->p)) goto err; 857 if (!BN_add(r0,r0,rsa->p)) goto err;
858 if (!BN_mul(r1,r0,rsa->q,ctx)) goto err; 858 if (!BN_mul(r1,r0,rsa->q,ctx)) goto err;
diff --git a/src/lib/libssl/src/crypto/rsa/rsa_oaep.c b/src/lib/libssl/src/crypto/rsa/rsa_oaep.c
index e08ac151ff..af4d24a56e 100644
--- a/src/lib/libssl/src/crypto/rsa/rsa_oaep.c
+++ b/src/lib/libssl/src/crypto/rsa/rsa_oaep.c
@@ -149,7 +149,7 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
149 if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL)) 149 if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL))
150 return -1; 150 return -1;
151 151
152 if (timingsafe_bcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad) 152 if (CRYPTO_memcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad)
153 goto decoding_err; 153 goto decoding_err;
154 else 154 else
155 { 155 {
diff --git a/src/lib/libssl/src/crypto/sha/Makefile b/src/lib/libssl/src/crypto/sha/Makefile
index 2eb2b7af99..6d191d3936 100644
--- a/src/lib/libssl/src/crypto/sha/Makefile
+++ b/src/lib/libssl/src/crypto/sha/Makefile
@@ -60,9 +60,7 @@ sha256-armv4.S: asm/sha256-armv4.pl
60 $(PERL) $< $(PERLASM_SCHEME) $@ 60 $(PERL) $< $(PERLASM_SCHEME) $@
61 61
62sha1-alpha.s: asm/sha1-alpha.pl 62sha1-alpha.s: asm/sha1-alpha.pl
63 (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ 63 $(PERL) $< | $(CC) -E - | tee $@ > /dev/null
64 $(PERL) asm/sha1-alpha.pl > $$preproc && \
65 $(CC) -E $$preproc > $@ && rm $$preproc)
66 64
67# Solaris make has to be explicitly told 65# Solaris make has to be explicitly told
68sha1-x86_64.s: asm/sha1-x86_64.pl; $(PERL) asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@ 66sha1-x86_64.s: asm/sha1-x86_64.pl; $(PERL) asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@
diff --git a/src/lib/libssl/src/crypto/sha/sha1_one.c b/src/lib/libssl/src/crypto/sha/sha1_one.c
index 7c65b60276..c56ec94020 100644
--- a/src/lib/libssl/src/crypto/sha/sha1_one.c
+++ b/src/lib/libssl/src/crypto/sha/sha1_one.c
@@ -58,8 +58,8 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <string.h> 60#include <string.h>
61#include <openssl/sha.h>
62#include <openssl/crypto.h> 61#include <openssl/crypto.h>
62#include <openssl/sha.h>
63 63
64#ifndef OPENSSL_NO_SHA1 64#ifndef OPENSSL_NO_SHA1
65unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md) 65unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md)
diff --git a/src/lib/libssl/src/crypto/sha/sha1dgst.c b/src/lib/libssl/src/crypto/sha/sha1dgst.c
index 81219af088..a98690225f 100644
--- a/src/lib/libssl/src/crypto/sha/sha1dgst.c
+++ b/src/lib/libssl/src/crypto/sha/sha1dgst.c
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include <openssl/opensslconf.h>
60#include <openssl/crypto.h> 59#include <openssl/crypto.h>
60#include <openssl/opensslconf.h>
61#if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA) 61#if !defined(OPENSSL_NO_SHA1) && !defined(OPENSSL_NO_SHA)
62 62
63#undef SHA_0 63#undef SHA_0
diff --git a/src/lib/libssl/src/crypto/sha/sha_dgst.c b/src/lib/libssl/src/crypto/sha/sha_dgst.c
index c946ad827d..fb63b17ff2 100644
--- a/src/lib/libssl/src/crypto/sha/sha_dgst.c
+++ b/src/lib/libssl/src/crypto/sha/sha_dgst.c
@@ -56,8 +56,8 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include <openssl/opensslconf.h>
60#include <openssl/crypto.h> 59#include <openssl/crypto.h>
60#include <openssl/opensslconf.h>
61#if !defined(OPENSSL_NO_SHA0) && !defined(OPENSSL_NO_SHA) 61#if !defined(OPENSSL_NO_SHA0) && !defined(OPENSSL_NO_SHA)
62 62
63#undef SHA_1 63#undef SHA_1
diff --git a/src/lib/libssl/src/crypto/sha/sha_locl.h b/src/lib/libssl/src/crypto/sha/sha_locl.h
index 7a0c3ca8d8..d673255f78 100644
--- a/src/lib/libssl/src/crypto/sha/sha_locl.h
+++ b/src/lib/libssl/src/crypto/sha/sha_locl.h
@@ -69,11 +69,11 @@
69#define HASH_CBLOCK SHA_CBLOCK 69#define HASH_CBLOCK SHA_CBLOCK
70#define HASH_MAKE_STRING(c,s) do { \ 70#define HASH_MAKE_STRING(c,s) do { \
71 unsigned long ll; \ 71 unsigned long ll; \
72 ll=(c)->h0; HOST_l2c(ll,(s)); \ 72 ll=(c)->h0; (void)HOST_l2c(ll,(s)); \
73 ll=(c)->h1; HOST_l2c(ll,(s)); \ 73 ll=(c)->h1; (void)HOST_l2c(ll,(s)); \
74 ll=(c)->h2; HOST_l2c(ll,(s)); \ 74 ll=(c)->h2; (void)HOST_l2c(ll,(s)); \
75 ll=(c)->h3; HOST_l2c(ll,(s)); \ 75 ll=(c)->h3; (void)HOST_l2c(ll,(s)); \
76 ll=(c)->h4; HOST_l2c(ll,(s)); \ 76 ll=(c)->h4; (void)HOST_l2c(ll,(s)); \
77 } while (0) 77 } while (0)
78 78
79#if defined(SHA_0) 79#if defined(SHA_0)
@@ -256,21 +256,21 @@ static void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, size_t num)
256 } 256 }
257 else 257 else
258 { 258 {
259 HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l; 259 (void)HOST_c2l(data,l); X( 0)=l; (void)HOST_c2l(data,l); X( 1)=l;
260 BODY_00_15( 0,A,B,C,D,E,T,X( 0)); HOST_c2l(data,l); X( 2)=l; 260 BODY_00_15( 0,A,B,C,D,E,T,X( 0)); (void)HOST_c2l(data,l); X( 2)=l;
261 BODY_00_15( 1,T,A,B,C,D,E,X( 1)); HOST_c2l(data,l); X( 3)=l; 261 BODY_00_15( 1,T,A,B,C,D,E,X( 1)); (void)HOST_c2l(data,l); X( 3)=l;
262 BODY_00_15( 2,E,T,A,B,C,D,X( 2)); HOST_c2l(data,l); X( 4)=l; 262 BODY_00_15( 2,E,T,A,B,C,D,X( 2)); (void)HOST_c2l(data,l); X( 4)=l;
263 BODY_00_15( 3,D,E,T,A,B,C,X( 3)); HOST_c2l(data,l); X( 5)=l; 263 BODY_00_15( 3,D,E,T,A,B,C,X( 3)); (void)HOST_c2l(data,l); X( 5)=l;
264 BODY_00_15( 4,C,D,E,T,A,B,X( 4)); HOST_c2l(data,l); X( 6)=l; 264 BODY_00_15( 4,C,D,E,T,A,B,X( 4)); (void)HOST_c2l(data,l); X( 6)=l;
265 BODY_00_15( 5,B,C,D,E,T,A,X( 5)); HOST_c2l(data,l); X( 7)=l; 265 BODY_00_15( 5,B,C,D,E,T,A,X( 5)); (void)HOST_c2l(data,l); X( 7)=l;
266 BODY_00_15( 6,A,B,C,D,E,T,X( 6)); HOST_c2l(data,l); X( 8)=l; 266 BODY_00_15( 6,A,B,C,D,E,T,X( 6)); (void)HOST_c2l(data,l); X( 8)=l;
267 BODY_00_15( 7,T,A,B,C,D,E,X( 7)); HOST_c2l(data,l); X( 9)=l; 267 BODY_00_15( 7,T,A,B,C,D,E,X( 7)); (void)HOST_c2l(data,l); X( 9)=l;
268 BODY_00_15( 8,E,T,A,B,C,D,X( 8)); HOST_c2l(data,l); X(10)=l; 268 BODY_00_15( 8,E,T,A,B,C,D,X( 8)); (void)HOST_c2l(data,l); X(10)=l;
269 BODY_00_15( 9,D,E,T,A,B,C,X( 9)); HOST_c2l(data,l); X(11)=l; 269 BODY_00_15( 9,D,E,T,A,B,C,X( 9)); (void)HOST_c2l(data,l); X(11)=l;
270 BODY_00_15(10,C,D,E,T,A,B,X(10)); HOST_c2l(data,l); X(12)=l; 270 BODY_00_15(10,C,D,E,T,A,B,X(10)); (void)HOST_c2l(data,l); X(12)=l;
271 BODY_00_15(11,B,C,D,E,T,A,X(11)); HOST_c2l(data,l); X(13)=l; 271 BODY_00_15(11,B,C,D,E,T,A,X(11)); (void)HOST_c2l(data,l); X(13)=l;
272 BODY_00_15(12,A,B,C,D,E,T,X(12)); HOST_c2l(data,l); X(14)=l; 272 BODY_00_15(12,A,B,C,D,E,T,X(12)); (void)HOST_c2l(data,l); X(14)=l;
273 BODY_00_15(13,T,A,B,C,D,E,X(13)); HOST_c2l(data,l); X(15)=l; 273 BODY_00_15(13,T,A,B,C,D,E,X(13)); (void)HOST_c2l(data,l); X(15)=l;
274 BODY_00_15(14,E,T,A,B,C,D,X(14)); 274 BODY_00_15(14,E,T,A,B,C,D,X(14));
275 BODY_00_15(15,D,E,T,A,B,C,X(15)); 275 BODY_00_15(15,D,E,T,A,B,C,X(15));
276 } 276 }
diff --git a/src/lib/libssl/src/crypto/symhacks.h b/src/lib/libssl/src/crypto/symhacks.h
index 403f592dcd..bd2f000d59 100644
--- a/src/lib/libssl/src/crypto/symhacks.h
+++ b/src/lib/libssl/src/crypto/symhacks.h
@@ -193,17 +193,23 @@
193#undef SSL_CTX_set_srp_username_callback 193#undef SSL_CTX_set_srp_username_callback
194#define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb 194#define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb
195#undef ssl_add_clienthello_use_srtp_ext 195#undef ssl_add_clienthello_use_srtp_ext
196#define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext 196#define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext
197#undef ssl_add_serverhello_use_srtp_ext 197#undef ssl_add_serverhello_use_srtp_ext
198#define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext 198#define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext
199#undef ssl_parse_clienthello_use_srtp_ext 199#undef ssl_parse_clienthello_use_srtp_ext
200#define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext 200#define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext
201#undef ssl_parse_serverhello_use_srtp_ext 201#undef ssl_parse_serverhello_use_srtp_ext
202#define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext 202#define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext
203#undef SSL_CTX_set_next_protos_advertised_cb 203#undef SSL_CTX_set_next_protos_advertised_cb
204#define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb 204#define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb
205#undef SSL_CTX_set_next_proto_select_cb 205#undef SSL_CTX_set_next_proto_select_cb
206#define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb 206#define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb
207#undef ssl3_cbc_record_digest_supported
208#define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support
209#undef ssl_check_clienthello_tlsext_late
210#define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late
211#undef ssl_check_clienthello_tlsext_early
212#define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early
207 213
208/* Hack some long ENGINE names */ 214/* Hack some long ENGINE names */
209#undef ENGINE_get_default_BN_mod_exp_crt 215#undef ENGINE_get_default_BN_mod_exp_crt
@@ -316,8 +322,6 @@
316#define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf 322#define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf
317#undef ec_GFp_simple_points_make_affine 323#undef ec_GFp_simple_points_make_affine
318#define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine 324#define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine
319#undef ec_GFp_simple_group_get_curve_GFp
320#define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp
321#undef ec_GFp_simple_set_Jprojective_coordinates_GFp 325#undef ec_GFp_simple_set_Jprojective_coordinates_GFp
322#define ec_GFp_simple_set_Jprojective_coordinates_GFp \ 326#define ec_GFp_simple_set_Jprojective_coordinates_GFp \
323 ec_GFp_smp_set_Jproj_coords_GFp 327 ec_GFp_smp_set_Jproj_coords_GFp
diff --git a/src/lib/libssl/src/crypto/threads/pthreads-vms.com b/src/lib/libssl/src/crypto/threads/pthreads-vms.com
deleted file mode 100644
index 1cf92bdf57..0000000000
--- a/src/lib/libssl/src/crypto/threads/pthreads-vms.com
+++ /dev/null
@@ -1,14 +0,0 @@
1$! To compile mttest on VMS.
2$!
3$! WARNING: only tested with DEC C so far.
4$
5$ if (f$getsyi("cpu").lt.128)
6$ then
7$ arch := VAX
8$ else
9$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
10$ if (arch .eqs. "") then arch = "UNK"
11$ endif
12$ define/user openssl [--.include.openssl]
13$ cc/def=PTHREADS mttest.c
14$ link mttest,[--.'arch'.exe.ssl]libssl/lib,[--.'arch'.exe.crypto]libcrypto/lib
diff --git a/src/lib/libssl/src/crypto/ui/ui_openssl.c b/src/lib/libssl/src/crypto/ui/ui_openssl.c
index e319faa47b..a38c7581e6 100644
--- a/src/lib/libssl/src/crypto/ui/ui_openssl.c
+++ b/src/lib/libssl/src/crypto/ui/ui_openssl.c
@@ -122,9 +122,15 @@
122 * sigaction and fileno included. -pedantic would be more appropriate for 122 * sigaction and fileno included. -pedantic would be more appropriate for
123 * the intended purposes, but we can't prevent users from adding -ansi. 123 * the intended purposes, but we can't prevent users from adding -ansi.
124 */ 124 */
125#if defined(OPENSSL_SYSNAME_VXWORKS)
126#include <sys/types.h>
127#endif
128
125#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) 129#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS)
130#ifndef _POSIX_C_SOURCE
126#define _POSIX_C_SOURCE 2 131#define _POSIX_C_SOURCE 2
127#endif 132#endif
133#endif
128#include <signal.h> 134#include <signal.h>
129#include <stdio.h> 135#include <stdio.h>
130#include <string.h> 136#include <string.h>
@@ -398,8 +404,8 @@ static int read_till_nl(FILE *in)
398 char buf[SIZE+1]; 404 char buf[SIZE+1];
399 405
400 do { 406 do {
401 if (fgets(buf,sizeof(buf),in) == NULL) 407 if (!fgets(buf,SIZE,in))
402 break; 408 return 0;
403 } while (strchr(buf,'\n') == NULL); 409 } while (strchr(buf,'\n') == NULL);
404 return 1; 410 return 1;
405 } 411 }
diff --git a/src/lib/libssl/src/crypto/x509/by_dir.c b/src/lib/libssl/src/crypto/x509/by_dir.c
index 27ca5150c1..c6602dae4f 100644
--- a/src/lib/libssl/src/crypto/x509/by_dir.c
+++ b/src/lib/libssl/src/crypto/x509/by_dir.c
@@ -218,7 +218,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
218 218
219 s=dir; 219 s=dir;
220 p=s; 220 p=s;
221 for (;;p++) 221 do
222 { 222 {
223 if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0')) 223 if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0'))
224 { 224 {
@@ -264,9 +264,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
264 return 0; 264 return 0;
265 } 265 }
266 } 266 }
267 if (*p == '\0') 267 } while (*p++ != '\0');
268 break;
269 }
270 return 1; 268 return 1;
271 } 269 }
272 270
diff --git a/src/lib/libssl/src/crypto/x509/x509_cmp.c b/src/lib/libssl/src/crypto/x509/x509_cmp.c
index 7c2aaee2e9..352aa37434 100644
--- a/src/lib/libssl/src/crypto/x509/x509_cmp.c
+++ b/src/lib/libssl/src/crypto/x509/x509_cmp.c
@@ -86,10 +86,9 @@ unsigned long X509_issuer_and_serial_hash(X509 *a)
86 86
87 EVP_MD_CTX_init(&ctx); 87 EVP_MD_CTX_init(&ctx);
88 f=X509_NAME_oneline(a->cert_info->issuer,NULL,0); 88 f=X509_NAME_oneline(a->cert_info->issuer,NULL,0);
89 ret=strlen(f);
90 if (!EVP_DigestInit_ex(&ctx, EVP_md5(), NULL)) 89 if (!EVP_DigestInit_ex(&ctx, EVP_md5(), NULL))
91 goto err; 90 goto err;
92 if (!EVP_DigestUpdate(&ctx,(unsigned char *)f,ret)) 91 if (!EVP_DigestUpdate(&ctx,(unsigned char *)f,strlen(f)))
93 goto err; 92 goto err;
94 OPENSSL_free(f); 93 OPENSSL_free(f);
95 if(!EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data, 94 if(!EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data,
@@ -249,14 +248,14 @@ unsigned long X509_NAME_hash_old(X509_NAME *x)
249 i2d_X509_NAME(x,NULL); 248 i2d_X509_NAME(x,NULL);
250 EVP_MD_CTX_init(&md_ctx); 249 EVP_MD_CTX_init(&md_ctx);
251 EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); 250 EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
252 EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL); 251 if (EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL)
253 EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length); 252 && EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length)
254 EVP_DigestFinal_ex(&md_ctx,md,NULL); 253 && EVP_DigestFinal_ex(&md_ctx,md,NULL))
254 ret=(((unsigned long)md[0] )|((unsigned long)md[1]<<8L)|
255 ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
256 )&0xffffffffL;
255 EVP_MD_CTX_cleanup(&md_ctx); 257 EVP_MD_CTX_cleanup(&md_ctx);
256 258
257 ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)|
258 ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
259 )&0xffffffffL;
260 return(ret); 259 return(ret);
261 } 260 }
262#endif 261#endif
diff --git a/src/lib/libssl/src/crypto/x509/x509_vfy.c b/src/lib/libssl/src/crypto/x509/x509_vfy.c
index b0779db023..920066aeba 100644
--- a/src/lib/libssl/src/crypto/x509/x509_vfy.c
+++ b/src/lib/libssl/src/crypto/x509/x509_vfy.c
@@ -694,6 +694,7 @@ static int check_cert(X509_STORE_CTX *ctx)
694 X509_CRL *crl = NULL, *dcrl = NULL; 694 X509_CRL *crl = NULL, *dcrl = NULL;
695 X509 *x; 695 X509 *x;
696 int ok, cnum; 696 int ok, cnum;
697 unsigned int last_reasons;
697 cnum = ctx->error_depth; 698 cnum = ctx->error_depth;
698 x = sk_X509_value(ctx->chain, cnum); 699 x = sk_X509_value(ctx->chain, cnum);
699 ctx->current_cert = x; 700 ctx->current_cert = x;
@@ -702,6 +703,7 @@ static int check_cert(X509_STORE_CTX *ctx)
702 ctx->current_reasons = 0; 703 ctx->current_reasons = 0;
703 while (ctx->current_reasons != CRLDP_ALL_REASONS) 704 while (ctx->current_reasons != CRLDP_ALL_REASONS)
704 { 705 {
706 last_reasons = ctx->current_reasons;
705 /* Try to retrieve relevant CRL */ 707 /* Try to retrieve relevant CRL */
706 if (ctx->get_crl) 708 if (ctx->get_crl)
707 ok = ctx->get_crl(ctx, &crl, x); 709 ok = ctx->get_crl(ctx, &crl, x);
@@ -745,6 +747,15 @@ static int check_cert(X509_STORE_CTX *ctx)
745 X509_CRL_free(dcrl); 747 X509_CRL_free(dcrl);
746 crl = NULL; 748 crl = NULL;
747 dcrl = NULL; 749 dcrl = NULL;
750 /* If reasons not updated we wont get anywhere by
751 * another iteration, so exit loop.
752 */
753 if (last_reasons == ctx->current_reasons)
754 {
755 ctx->error = X509_V_ERR_UNABLE_TO_GET_CRL;
756 ok = ctx->verify_cb(0, ctx);
757 goto err;
758 }
748 } 759 }
749 err: 760 err:
750 X509_CRL_free(crl); 761 X509_CRL_free(crl);
@@ -872,7 +883,7 @@ static int crl_extension_match(X509_CRL *a, X509_CRL *b, int nid)
872 { 883 {
873 ASN1_OCTET_STRING *exta, *extb; 884 ASN1_OCTET_STRING *exta, *extb;
874 int i; 885 int i;
875 i = X509_CRL_get_ext_by_NID(a, nid, 0); 886 i = X509_CRL_get_ext_by_NID(a, nid, -1);
876 if (i >= 0) 887 if (i >= 0)
877 { 888 {
878 /* Can't have multiple occurrences */ 889 /* Can't have multiple occurrences */
@@ -883,7 +894,7 @@ static int crl_extension_match(X509_CRL *a, X509_CRL *b, int nid)
883 else 894 else
884 exta = NULL; 895 exta = NULL;
885 896
886 i = X509_CRL_get_ext_by_NID(b, nid, 0); 897 i = X509_CRL_get_ext_by_NID(b, nid, -1);
887 898
888 if (i >= 0) 899 if (i >= 0)
889 { 900 {
@@ -1451,10 +1462,9 @@ static int cert_crl(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x)
1451 * a certificate was revoked. This has since been changed since 1462 * a certificate was revoked. This has since been changed since
1452 * critical extension can change the meaning of CRL entries. 1463 * critical extension can change the meaning of CRL entries.
1453 */ 1464 */
1454 if (crl->flags & EXFLAG_CRITICAL) 1465 if (!(ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
1466 && (crl->flags & EXFLAG_CRITICAL))
1455 { 1467 {
1456 if (ctx->param->flags & X509_V_FLAG_IGNORE_CRITICAL)
1457 return 1;
1458 ctx->error = X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION; 1468 ctx->error = X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION;
1459 ok = ctx->verify_cb(0, ctx); 1469 ok = ctx->verify_cb(0, ctx);
1460 if(!ok) 1470 if(!ok)
diff --git a/src/lib/libssl/src/crypto/x509/x_all.c b/src/lib/libssl/src/crypto/x509/x_all.c
index b94aeeb873..e06602d65a 100644
--- a/src/lib/libssl/src/crypto/x509/x_all.c
+++ b/src/lib/libssl/src/crypto/x509/x_all.c
@@ -97,6 +97,7 @@ int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
97 97
98int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) 98int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx)
99 { 99 {
100 x->cert_info->enc.modified = 1;
100 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), 101 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF),
101 x->cert_info->signature, 102 x->cert_info->signature,
102 x->sig_alg, x->signature, x->cert_info, ctx); 103 x->sig_alg, x->signature, x->cert_info, ctx);
@@ -123,6 +124,7 @@ int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md)
123 124
124int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) 125int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx)
125 { 126 {
127 x->crl->enc.modified = 1;
126 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), 128 return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO),
127 x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx); 129 x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx);
128 } 130 }
diff --git a/src/lib/libssl/src/crypto/x509v3/v3_purp.c b/src/lib/libssl/src/crypto/x509v3/v3_purp.c
index 181bd34979..ad688657e0 100644
--- a/src/lib/libssl/src/crypto/x509v3/v3_purp.c
+++ b/src/lib/libssl/src/crypto/x509v3/v3_purp.c
@@ -474,11 +474,11 @@ static void x509v3_cache_extensions(X509 *x)
474 for (i = 0; i < X509_get_ext_count(x); i++) 474 for (i = 0; i < X509_get_ext_count(x); i++)
475 { 475 {
476 ex = X509_get_ext(x, i); 476 ex = X509_get_ext(x, i);
477 if (!X509_EXTENSION_get_critical(ex))
478 continue;
479 if (OBJ_obj2nid(X509_EXTENSION_get_object(ex)) 477 if (OBJ_obj2nid(X509_EXTENSION_get_object(ex))
480 == NID_freshest_crl) 478 == NID_freshest_crl)
481 x->ex_flags |= EXFLAG_FRESHEST; 479 x->ex_flags |= EXFLAG_FRESHEST;
480 if (!X509_EXTENSION_get_critical(ex))
481 continue;
482 if (!X509_supported_extension(ex)) 482 if (!X509_supported_extension(ex))
483 { 483 {
484 x->ex_flags |= EXFLAG_CRITICAL; 484 x->ex_flags |= EXFLAG_CRITICAL;
diff --git a/src/lib/libssl/src/crypto/x86_64cpuid.pl b/src/lib/libssl/src/crypto/x86_64cpuid.pl
index 7b7b93b223..6ebfd017ea 100644
--- a/src/lib/libssl/src/crypto/x86_64cpuid.pl
+++ b/src/lib/libssl/src/crypto/x86_64cpuid.pl
@@ -11,7 +11,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
11( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or 11( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or
12die "can't locate x86_64-xlate.pl"; 12die "can't locate x86_64-xlate.pl";
13 13
14open STDOUT,"| $^X $xlate $flavour $output"; 14open OUT,"| \"$^X\" $xlate $flavour $output";
15*STDOUT=*OUT;
15 16
16($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order 17($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order
17 ("%rdi","%rsi","%rdx","%rcx"); # Unix order 18 ("%rdi","%rsi","%rdx","%rcx"); # Unix order
diff --git a/src/lib/libssl/src/demos/easy_tls/Makefile b/src/lib/libssl/src/demos/easy_tls/Makefile
index f65760670c..ea457a4110 100644
--- a/src/lib/libssl/src/demos/easy_tls/Makefile
+++ b/src/lib/libssl/src/demos/easy_tls/Makefile
@@ -1,5 +1,5 @@
1# Makefile for easy-tls example application (rudimentary client and server) 1# Makefile for easy-tls example application (rudimentary client and server)
2# $Id: Makefile,v 1.4 2010/10/01 22:58:57 djm Exp $ 2# $Id: Makefile,v 1.5 2014/04/13 15:25:34 miod Exp $
3 3
4SOLARIS_CFLAGS=-Wall -pedantic -g -O2 4SOLARIS_CFLAGS=-Wall -pedantic -g -O2
5SOLARIS_LIBS=-lxnet 5SOLARIS_LIBS=-lxnet
diff --git a/src/lib/libssl/src/demos/easy_tls/cacerts.pem b/src/lib/libssl/src/demos/easy_tls/cacerts.pem
index 2b11eb3b8a..c23d49bba7 100644
--- a/src/lib/libssl/src/demos/easy_tls/cacerts.pem
+++ b/src/lib/libssl/src/demos/easy_tls/cacerts.pem
@@ -1,4 +1,4 @@
1$Id: cacerts.pem,v 1.4 2010/10/01 22:58:57 djm Exp $ 1$Id: cacerts.pem,v 1.5 2014/04/13 15:25:34 miod Exp $
2 2
3issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit) 3issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
4subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit) 4subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
diff --git a/src/lib/libssl/src/demos/easy_tls/cert.pem b/src/lib/libssl/src/demos/easy_tls/cert.pem
index 0daca86ba2..6613c2df44 100644
--- a/src/lib/libssl/src/demos/easy_tls/cert.pem
+++ b/src/lib/libssl/src/demos/easy_tls/cert.pem
@@ -1,4 +1,4 @@
1$Id: cert.pem,v 1.4 2010/10/01 22:58:57 djm Exp $ 1$Id: cert.pem,v 1.5 2014/04/13 15:25:34 miod Exp $
2 2
3Example certificate and key. 3Example certificate and key.
4 4
diff --git a/src/lib/libssl/src/demos/easy_tls/easy-tls.c b/src/lib/libssl/src/demos/easy_tls/easy-tls.c
index cfae4b07cb..72047b3e80 100644
--- a/src/lib/libssl/src/demos/easy_tls/easy-tls.c
+++ b/src/lib/libssl/src/demos/easy_tls/easy-tls.c
@@ -1,7 +1,7 @@
1/* -*- Mode: C; c-file-style: "bsd" -*- */ 1/* -*- Mode: C; c-file-style: "bsd" -*- */
2/* 2/*
3 * easy-tls.c -- generic TLS proxy. 3 * easy-tls.c -- generic TLS proxy.
4 * $Id: easy-tls.c,v 1.5 2010/10/01 22:58:57 djm Exp $ 4 * $Id: easy-tls.c,v 1.6 2014/04/13 15:25:34 miod Exp $
5 */ 5 */
6/* 6/*
7 (c) Copyright 1999 Bodo Moeller. All rights reserved. 7 (c) Copyright 1999 Bodo Moeller. All rights reserved.
@@ -73,7 +73,7 @@
73 */ 73 */
74 74
75static char const rcsid[] = 75static char const rcsid[] =
76"$Id: easy-tls.c,v 1.5 2010/10/01 22:58:57 djm Exp $"; 76"$Id: easy-tls.c,v 1.6 2014/04/13 15:25:34 miod Exp $";
77 77
78#include <assert.h> 78#include <assert.h>
79#include <errno.h> 79#include <errno.h>
diff --git a/src/lib/libssl/src/demos/easy_tls/easy-tls.h b/src/lib/libssl/src/demos/easy_tls/easy-tls.h
index 29af27a6e7..844a5874b9 100644
--- a/src/lib/libssl/src/demos/easy_tls/easy-tls.h
+++ b/src/lib/libssl/src/demos/easy_tls/easy-tls.h
@@ -1,7 +1,7 @@
1/* -*- Mode: C; c-file-style: "bsd" -*- */ 1/* -*- Mode: C; c-file-style: "bsd" -*- */
2/* 2/*
3 * easy-tls.h -- generic TLS proxy. 3 * easy-tls.h -- generic TLS proxy.
4 * $Id: easy-tls.h,v 1.4 2010/10/01 22:58:57 djm Exp $ 4 * $Id: easy-tls.h,v 1.5 2014/04/13 15:25:34 miod Exp $
5 */ 5 */
6/* 6/*
7 * (c) Copyright 1999 Bodo Moeller. All rights reserved. 7 * (c) Copyright 1999 Bodo Moeller. All rights reserved.
diff --git a/src/lib/libssl/src/demos/easy_tls/test.c b/src/lib/libssl/src/demos/easy_tls/test.c
index 4e40cb91c4..4e884c4851 100644
--- a/src/lib/libssl/src/demos/easy_tls/test.c
+++ b/src/lib/libssl/src/demos/easy_tls/test.c
@@ -1,5 +1,5 @@
1/* test.c */ 1/* test.c */
2/* $Id: test.c,v 1.4 2010/10/01 22:58:57 djm Exp $ */ 2/* $Id: test.c,v 1.5 2014/04/13 15:25:34 miod Exp $ */
3 3
4#define L_PORT 9999 4#define L_PORT 9999
5#define C_PORT 443 5#define C_PORT 443
diff --git a/src/lib/libssl/src/demos/easy_tls/test.h b/src/lib/libssl/src/demos/easy_tls/test.h
index ebee2c5db5..b88d569fe8 100644
--- a/src/lib/libssl/src/demos/easy_tls/test.h
+++ b/src/lib/libssl/src/demos/easy_tls/test.h
@@ -1,5 +1,5 @@
1/* test.h */ 1/* test.h */
2/* $Id: test.h,v 1.4 2010/10/01 22:58:57 djm Exp $ */ 2/* $Id: test.h,v 1.5 2014/04/13 15:25:34 miod Exp $ */
3 3
4 4
5void test_process_init(int fd, int client_p, void *apparg); 5void test_process_init(int fd, int client_p, void *apparg);
diff --git a/src/lib/libssl/src/demos/engines/rsaref/build.com b/src/lib/libssl/src/demos/engines/rsaref/build.com
deleted file mode 100644
index 72b013d45e..0000000000
--- a/src/lib/libssl/src/demos/engines/rsaref/build.com
+++ /dev/null
@@ -1,105 +0,0 @@
1$! BUILD.COM -- Building procedure for the RSAref engine
2$
3$ if f$search("source.dir") .eqs. "" -
4 .or. f$search("install.dir") .eqs. ""
5$ then
6$ write sys$error "RSAref 2.0 hasn't been properly extracted."
7$ exit
8$ endif
9$
10$ if (f$getsyi("cpu").lt.128)
11$ then
12$ arch := vax
13$ else
14$ arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
15$ if (arch .eqs. "") then arch = "UNK"
16$ endif
17$
18$ _save_default = f$environment("default")
19$ set default [.install]
20$ files := desc,digit,md2c,md5c,nn,prime,-
21 rsa,r_encode,r_dh,r_enhanc,r_keygen,r_random,-
22 r_stdlib
23$ delete rsaref.olb;*
24$ library/create/object rsaref.olb
25$ files_i = 0
26$ rsaref_loop:
27$ files_e = f$edit(f$element(files_i,",",files),"trim")
28$ files_i = files_i + 1
29$ if files_e .eqs. "," then goto rsaref_loop_end
30$ cc/include=([-.source],[])/define=PROTOTYPES=1/object=[]'files_e'.obj -
31 [-.source]'files_e'.c
32$ library/replace/object rsaref.olb 'files_e'.obj
33$ goto rsaref_loop
34$ rsaref_loop_end:
35$
36$ set default [-]
37$ define/user openssl [---.include.openssl]
38$ cc/define=ENGINE_DYNAMIC_SUPPORT rsaref.c
39$
40$ if arch .eqs. "VAX"
41$ then
42$ macro/object=rsaref_vec.obj sys$input:
43;
44; Transfer vector for VAX shareable image
45;
46 .TITLE librsaref
47;
48; Define macro to assist in building transfer vector entries. Each entry
49; should take no more than 8 bytes.
50;
51 .MACRO FTRANSFER_ENTRY routine
52 .ALIGN QUAD
53 .TRANSFER routine
54 .MASK routine
55 JMP routine+2
56 .ENDM FTRANSFER_ENTRY
57;
58; Place entries in own program section.
59;
60 .PSECT $$LIBRSAREF,QUAD,PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT
61
62LIBRSAREF_xfer:
63 FTRANSFER_ENTRY bind_engine
64 FTRANSFER_ENTRY v_check
65
66;
67; Allocate extra storage at end of vector to allow for expansion.
68;
69 .BLKB 512-<.-LIBRSAREF_xfer> ; 1 page.
70 .END
71$ link/share=librsaref.exe sys$input:/option
72!
73! Ensure transfer vector is at beginning of image
74!
75CLUSTER=FIRST
76COLLECT=FIRST,$$LIBRSAREF
77!
78! make psects nonshareable so image can be installed.
79!
80PSECT_ATTR=$CHAR_STRING_CONSTANTS,NOWRT
81[]rsaref_vec.obj
82[]rsaref.obj
83[.install]rsaref.olb/lib
84[---.vax.exe.crypto]libcrypto.olb/lib
85$ else
86$ if arch_name .eqs. "ALPHA"
87$ then
88$ link/share=librsaref.exe sys$input:/option
89[]rsaref.obj
90[.install]rsaref.olb/lib
91[---.alpha.exe.crypto]libcrypto.olb/lib
92symbol_vector=(bind_engine=procedure,v_check=procedure)
93$ else
94$ if arch_name .eqs. "IA64"
95$ then
96$ link /shareable=librsaref.exe sys$input: /options
97[]rsaref.obj
98[.install]rsaref.olb/lib
99[---.ia64.exe.crypto]libcrypto.olb/lib
100symbol_vector=(bind_engine=procedure,v_check=procedure)
101$ endif
102$ endif
103$ endif
104$
105$ set default '_save_default'
diff --git a/src/lib/libssl/src/demos/x509/mkreq.c b/src/lib/libssl/src/demos/x509/mkreq.c
index d17e4ade94..d1cba9dc5a 100644
--- a/src/lib/libssl/src/demos/x509/mkreq.c
+++ b/src/lib/libssl/src/demos/x509/mkreq.c
@@ -7,13 +7,14 @@
7 7
8#include <openssl/pem.h> 8#include <openssl/pem.h>
9#include <openssl/conf.h> 9#include <openssl/conf.h>
10#include <openssl/x509.h>
10#include <openssl/x509v3.h> 11#include <openssl/x509v3.h>
11#ifndef OPENSSL_NO_ENGINE 12#ifndef OPENSSL_NO_ENGINE
12#include <openssl/engine.h> 13#include <openssl/engine.h>
13#endif 14#endif
14 15
15int mkreq(X509_REQ **x509p, EVP_PKEY **pkeyp, int bits, int serial, int days); 16int mkreq(X509_REQ **x509p, EVP_PKEY **pkeyp, int bits, int serial, int days);
16int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value); 17int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value);
17 18
18int main(int argc, char **argv) 19int main(int argc, char **argv)
19 { 20 {
@@ -148,7 +149,7 @@ err:
148 * because we wont reference any other sections. 149 * because we wont reference any other sections.
149 */ 150 */
150 151
151int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value) 152int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value)
152 { 153 {
153 X509_EXTENSION *ex; 154 X509_EXTENSION *ex;
154 ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value); 155 ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value);
diff --git a/src/lib/libssl/src/doc/apps/CA.pl.pod b/src/lib/libssl/src/doc/apps/CA.pl.pod
index ed69952f37..d326101cde 100644
--- a/src/lib/libssl/src/doc/apps/CA.pl.pod
+++ b/src/lib/libssl/src/doc/apps/CA.pl.pod
@@ -39,13 +39,13 @@ prints a usage message.
39 39
40=item B<-newcert> 40=item B<-newcert>
41 41
42creates a new self signed certificate. The private key and certificate are 42creates a new self signed certificate. The private key is written to the file
43written to the file "newreq.pem". 43"newkey.pem" and the request written to the file "newreq.pem".
44 44
45=item B<-newreq> 45=item B<-newreq>
46 46
47creates a new certificate request. The private key and request are 47creates a new certificate request. The private key is written to the file
48written to the file "newreq.pem". 48"newkey.pem" and the request written to the file "newreq.pem".
49 49
50=item B<-newreq-nodes> 50=item B<-newreq-nodes>
51 51
diff --git a/src/lib/libssl/src/doc/apps/config.pod b/src/lib/libssl/src/doc/apps/config.pod
index ace34b62bd..25c5381b9d 100644
--- a/src/lib/libssl/src/doc/apps/config.pod
+++ b/src/lib/libssl/src/doc/apps/config.pod
@@ -119,7 +119,7 @@ variable points to a section containing further ENGINE configuration
119information. 119information.
120 120
121The section pointed to by B<engines> is a table of engine names (though see 121The section pointed to by B<engines> is a table of engine names (though see
122B<engine_id> below) and further sections containing configuration informations 122B<engine_id> below) and further sections containing configuration information
123specific to each ENGINE. 123specific to each ENGINE.
124 124
125Each ENGINE specific section is used to set default algorithms, load 125Each ENGINE specific section is used to set default algorithms, load
diff --git a/src/lib/libssl/src/doc/apps/crl.pod b/src/lib/libssl/src/doc/apps/crl.pod
index a40c873b95..1ad76a5f8c 100644
--- a/src/lib/libssl/src/doc/apps/crl.pod
+++ b/src/lib/libssl/src/doc/apps/crl.pod
@@ -62,6 +62,11 @@ don't output the encoded version of the CRL.
62output a hash of the issuer name. This can be use to lookup CRLs in 62output a hash of the issuer name. This can be use to lookup CRLs in
63a directory by issuer name. 63a directory by issuer name.
64 64
65=item B<-hash_old>
66
67outputs the "hash" of the CRL issuer name using the older algorithm
68as used by OpenSSL versions before 1.0.0.
69
65=item B<-issuer> 70=item B<-issuer>
66 71
67output the issuer name. 72output the issuer name.
diff --git a/src/lib/libssl/src/doc/apps/pkcs12.pod b/src/lib/libssl/src/doc/apps/pkcs12.pod
index f69a5c5a4c..8e0d91798a 100644
--- a/src/lib/libssl/src/doc/apps/pkcs12.pod
+++ b/src/lib/libssl/src/doc/apps/pkcs12.pod
@@ -67,7 +67,7 @@ by default.
67The filename to write certificates and private keys to, standard output by 67The filename to write certificates and private keys to, standard output by
68default. They are all written in PEM format. 68default. They are all written in PEM format.
69 69
70=item B<-pass arg>, B<-passin arg> 70=item B<-passin arg>
71 71
72the PKCS#12 file (i.e. input file) password source. For more information about 72the PKCS#12 file (i.e. input file) password source. For more information about
73the format of B<arg> see the B<PASS PHRASE ARGUMENTS> section in 73the format of B<arg> see the B<PASS PHRASE ARGUMENTS> section in
@@ -75,10 +75,15 @@ L<openssl(1)|openssl(1)>.
75 75
76=item B<-passout arg> 76=item B<-passout arg>
77 77
78pass phrase source to encrypt any outputed private keys with. For more 78pass phrase source to encrypt any outputted private keys with. For more
79information about the format of B<arg> see the B<PASS PHRASE ARGUMENTS> section 79information about the format of B<arg> see the B<PASS PHRASE ARGUMENTS> section
80in L<openssl(1)|openssl(1)>. 80in L<openssl(1)|openssl(1)>.
81 81
82=item B<-password arg>
83
84With -export, -password is equivalent to -passout.
85Otherwise, -password is equivalent to -passin.
86
82=item B<-noout> 87=item B<-noout>
83 88
84this option inhibits output of the keys and certificates to the output file 89this option inhibits output of the keys and certificates to the output file
diff --git a/src/lib/libssl/src/doc/apps/req.pod b/src/lib/libssl/src/doc/apps/req.pod
index ff48bbdf28..0730d117b3 100644
--- a/src/lib/libssl/src/doc/apps/req.pod
+++ b/src/lib/libssl/src/doc/apps/req.pod
@@ -303,7 +303,7 @@ Reverses effect of B<-asn1-kludge>
303 303
304=item B<-newhdr> 304=item B<-newhdr>
305 305
306Adds the word B<NEW> to the PEM file header and footer lines on the outputed 306Adds the word B<NEW> to the PEM file header and footer lines on the outputted
307request. Some software (Netscape certificate server) and some CAs need this. 307request. Some software (Netscape certificate server) and some CAs need this.
308 308
309=item B<-batch> 309=item B<-batch>
diff --git a/src/lib/libssl/src/doc/apps/rsa.pod b/src/lib/libssl/src/doc/apps/rsa.pod
index 69b2bef82c..d7d784d52b 100644
--- a/src/lib/libssl/src/doc/apps/rsa.pod
+++ b/src/lib/libssl/src/doc/apps/rsa.pod
@@ -24,6 +24,8 @@ B<openssl> B<rsa>
24[B<-check>] 24[B<-check>]
25[B<-pubin>] 25[B<-pubin>]
26[B<-pubout>] 26[B<-pubout>]
27[B<-RSAPublicKey_in>]
28[B<-RSAPublicKey_out>]
27[B<-engine id>] 29[B<-engine id>]
28 30
29=head1 DESCRIPTION 31=head1 DESCRIPTION
@@ -118,6 +120,10 @@ by default a private key is output: with this option a public
118key will be output instead. This option is automatically set if 120key will be output instead. This option is automatically set if
119the input is a public key. 121the input is a public key.
120 122
123=item B<-RSAPublicKey_in>, B<-RSAPublicKey_out>
124
125like B<-pubin> and B<-pubout> except B<RSAPublicKey> format is used instead.
126
121=item B<-engine id> 127=item B<-engine id>
122 128
123specifying an engine (by its unique B<id> string) will cause B<rsa> 129specifying an engine (by its unique B<id> string) will cause B<rsa>
@@ -139,6 +145,11 @@ The PEM public key format uses the header and footer lines:
139 -----BEGIN PUBLIC KEY----- 145 -----BEGIN PUBLIC KEY-----
140 -----END PUBLIC KEY----- 146 -----END PUBLIC KEY-----
141 147
148The PEM B<RSAPublicKey> format uses the header and footer lines:
149
150 -----BEGIN RSA PUBLIC KEY-----
151 -----END RSA PUBLIC KEY-----
152
142The B<NET> form is a format compatible with older Netscape servers 153The B<NET> form is a format compatible with older Netscape servers
143and Microsoft IIS .key files, this uses unsalted RC4 for its encryption. 154and Microsoft IIS .key files, this uses unsalted RC4 for its encryption.
144It is not very secure and so should only be used when necessary. 155It is not very secure and so should only be used when necessary.
@@ -173,6 +184,10 @@ To just output the public part of a private key:
173 184
174 openssl rsa -in key.pem -pubout -out pubkey.pem 185 openssl rsa -in key.pem -pubout -out pubkey.pem
175 186
187Output the public part of a private key in B<RSAPublicKey> format:
188
189 openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
190
176=head1 BUGS 191=head1 BUGS
177 192
178The command line password arguments don't currently work with 193The command line password arguments don't currently work with
diff --git a/src/lib/libssl/src/doc/apps/s_client.pod b/src/lib/libssl/src/doc/apps/s_client.pod
index 4ebf7b5854..3215b2e8c9 100644
--- a/src/lib/libssl/src/doc/apps/s_client.pod
+++ b/src/lib/libssl/src/doc/apps/s_client.pod
@@ -10,6 +10,7 @@ s_client - SSL/TLS client program
10B<openssl> B<s_client> 10B<openssl> B<s_client>
11[B<-connect host:port>] 11[B<-connect host:port>]
12[B<-verify depth>] 12[B<-verify depth>]
13[B<-verify_return_error>]
13[B<-cert filename>] 14[B<-cert filename>]
14[B<-certform DER|PEM>] 15[B<-certform DER|PEM>]
15[B<-key filename>] 16[B<-key filename>]
@@ -90,6 +91,11 @@ Currently the verify operation continues after errors so all the problems
90with a certificate chain can be seen. As a side effect the connection 91with a certificate chain can be seen. As a side effect the connection
91will never fail due to a server certificate verify failure. 92will never fail due to a server certificate verify failure.
92 93
94=item B<-verify_return_error>
95
96Return verification errors instead of continuing. This will typically
97abort the handshake with a fatal error.
98
93=item B<-CApath directory> 99=item B<-CApath directory>
94 100
95The directory to use for server certificate verification. This directory 101The directory to use for server certificate verification. This directory
@@ -286,6 +292,13 @@ Since the SSLv23 client hello cannot include compression methods or extensions
286these will only be supported if its use is disabled, for example by using the 292these will only be supported if its use is disabled, for example by using the
287B<-no_sslv2> option. 293B<-no_sslv2> option.
288 294
295The B<s_client> utility is a test tool and is designed to continue the
296handshake after any certificate verification errors. As a result it will
297accept any certificate chain (trusted or not) sent by the peer. None test
298applications should B<not> do this as it makes them vulnerable to a MITM
299attack. This behaviour can be changed by with the B<-verify_return_error>
300option: any verify errors are then returned aborting the handshake.
301
289=head1 BUGS 302=head1 BUGS
290 303
291Because this program has a lot of options and also because some of 304Because this program has a lot of options and also because some of
@@ -293,9 +306,6 @@ the techniques used are rather old, the C source of s_client is rather
293hard to read and not a model of how things should be done. A typical 306hard to read and not a model of how things should be done. A typical
294SSL client program would be much simpler. 307SSL client program would be much simpler.
295 308
296The B<-verify> option should really exit if the server verification
297fails.
298
299The B<-prexit> option is a bit of a hack. We should really report 309The B<-prexit> option is a bit of a hack. We should really report
300information whenever a session is renegotiated. 310information whenever a session is renegotiated.
301 311
diff --git a/src/lib/libssl/src/doc/apps/s_server.pod b/src/lib/libssl/src/doc/apps/s_server.pod
index 3e503e17e1..6758ba3080 100644
--- a/src/lib/libssl/src/doc/apps/s_server.pod
+++ b/src/lib/libssl/src/doc/apps/s_server.pod
@@ -111,7 +111,7 @@ by using an appropriate certificate.
111 111
112=item B<-dcertform format>, B<-dkeyform format>, B<-dpass arg> 112=item B<-dcertform format>, B<-dkeyform format>, B<-dpass arg>
113 113
114addtional certificate and private key format and passphrase respectively. 114additional certificate and private key format and passphrase respectively.
115 115
116=item B<-nocert> 116=item B<-nocert>
117 117
diff --git a/src/lib/libssl/src/doc/apps/verify.pod b/src/lib/libssl/src/doc/apps/verify.pod
index 336098f1e3..da683004bd 100644
--- a/src/lib/libssl/src/doc/apps/verify.pod
+++ b/src/lib/libssl/src/doc/apps/verify.pod
@@ -54,35 +54,37 @@ in PEM format concatenated together.
54=item B<-untrusted file> 54=item B<-untrusted file>
55 55
56A file of untrusted certificates. The file should contain multiple certificates 56A file of untrusted certificates. The file should contain multiple certificates
57in PEM format concatenated together.
57 58
58=item B<-purpose purpose> 59=item B<-purpose purpose>
59 60
60the intended use for the certificate. Without this option no chain verification 61The intended use for the certificate. If this option is not specified,
61will be done. Currently accepted uses are B<sslclient>, B<sslserver>, 62B<verify> will not consider certificate purpose during chain verification.
62B<nssslserver>, B<smimesign>, B<smimeencrypt>. See the B<VERIFY OPERATION> 63Currently accepted uses are B<sslclient>, B<sslserver>, B<nssslserver>,
63section for more information. 64B<smimesign>, B<smimeencrypt>. See the B<VERIFY OPERATION> section for more
65information.
64 66
65=item B<-help> 67=item B<-help>
66 68
67prints out a usage message. 69Print out a usage message.
68 70
69=item B<-verbose> 71=item B<-verbose>
70 72
71print extra information about the operations being performed. 73Print extra information about the operations being performed.
72 74
73=item B<-issuer_checks> 75=item B<-issuer_checks>
74 76
75print out diagnostics relating to searches for the issuer certificate 77Print out diagnostics relating to searches for the issuer certificate of the
76of the current certificate. This shows why each candidate issuer 78current certificate. This shows why each candidate issuer certificate was
77certificate was rejected. However the presence of rejection messages 79rejected. The presence of rejection messages does not itself imply that
78does not itself imply that anything is wrong: during the normal 80anything is wrong; during the normal verification process, several
79verify process several rejections may take place. 81rejections may take place.
80 82
81=item B<-policy arg> 83=item B<-policy arg>
82 84
83Enable policy processing and add B<arg> to the user-initial-policy-set 85Enable policy processing and add B<arg> to the user-initial-policy-set (see
84(see RFC3280 et al). The policy B<arg> can be an object name an OID in numeric 86RFC5280). The policy B<arg> can be an object name an OID in numeric form.
85form. This argument can appear more than once. 87This argument can appear more than once.
86 88
87=item B<-policy_check> 89=item B<-policy_check>
88 90
@@ -90,41 +92,40 @@ Enables certificate policy processing.
90 92
91=item B<-explicit_policy> 93=item B<-explicit_policy>
92 94
93Set policy variable require-explicit-policy (see RFC3280 et al). 95Set policy variable require-explicit-policy (see RFC5280).
94 96
95=item B<-inhibit_any> 97=item B<-inhibit_any>
96 98
97Set policy variable inhibit-any-policy (see RFC3280 et al). 99Set policy variable inhibit-any-policy (see RFC5280).
98 100
99=item B<-inhibit_map> 101=item B<-inhibit_map>
100 102
101Set policy variable inhibit-policy-mapping (see RFC3280 et al). 103Set policy variable inhibit-policy-mapping (see RFC5280).
102 104
103=item B<-policy_print> 105=item B<-policy_print>
104 106
105Print out diagnostics, related to policy checking 107Print out diagnostics related to policy processing.
106 108
107=item B<-crl_check> 109=item B<-crl_check>
108 110
109Checks end entity certificate validity by attempting to lookup a valid CRL. 111Checks end entity certificate validity by attempting to look up a valid CRL.
110If a valid CRL cannot be found an error occurs. 112If a valid CRL cannot be found an error occurs.
111 113
112=item B<-crl_check_all> 114=item B<-crl_check_all>
113 115
114Checks the validity of B<all> certificates in the chain by attempting 116Checks the validity of B<all> certificates in the chain by attempting
115to lookup valid CRLs. 117to look up valid CRLs.
116 118
117=item B<-ignore_critical> 119=item B<-ignore_critical>
118 120
119Normally if an unhandled critical extension is present which is not 121Normally if an unhandled critical extension is present which is not
120supported by OpenSSL the certificate is rejected (as required by 122supported by OpenSSL the certificate is rejected (as required by RFC5280).
121RFC3280 et al). If this option is set critical extensions are 123If this option is set critical extensions are ignored.
122ignored.
123 124
124=item B<-x509_strict> 125=item B<-x509_strict>
125 126
126Disable workarounds for broken certificates which have to be disabled 127For strict X.509 compliance, disable non-compliant workarounds for broken
127for strict X.509 compliance. 128certificates.
128 129
129=item B<-extended_crl> 130=item B<-extended_crl>
130 131
@@ -142,16 +143,15 @@ because it doesn't add any security.
142 143
143=item B<-> 144=item B<->
144 145
145marks the last option. All arguments following this are assumed to be 146Indicates the last option. All arguments following this are assumed to be
146certificate files. This is useful if the first certificate filename begins 147certificate files. This is useful if the first certificate filename begins
147with a B<->. 148with a B<->.
148 149
149=item B<certificates> 150=item B<certificates>
150 151
151one or more certificates to verify. If no certificate filenames are included 152One or more certificates to verify. If no certificates are given, B<verify>
152then an attempt is made to read a certificate from standard input. They should 153will attempt to read a certificate from standard input. Certificates must be
153all be in PEM format. 154in PEM format.
154
155 155
156=back 156=back
157 157
diff --git a/src/lib/libssl/src/doc/apps/x509.pod b/src/lib/libssl/src/doc/apps/x509.pod
index 3002b08123..d2d9eb812a 100644
--- a/src/lib/libssl/src/doc/apps/x509.pod
+++ b/src/lib/libssl/src/doc/apps/x509.pod
@@ -29,6 +29,7 @@ B<openssl> B<x509>
29[B<-purpose>] 29[B<-purpose>]
30[B<-dates>] 30[B<-dates>]
31[B<-modulus>] 31[B<-modulus>]
32[B<-pubkey>]
32[B<-fingerprint>] 33[B<-fingerprint>]
33[B<-alias>] 34[B<-alias>]
34[B<-noout>] 35[B<-noout>]
@@ -135,6 +136,10 @@ section for more information.
135 136
136this option prevents output of the encoded version of the request. 137this option prevents output of the encoded version of the request.
137 138
139=item B<-pubkey>
140
141outputs the the certificate's SubjectPublicKeyInfo block in PEM format.
142
138=item B<-modulus> 143=item B<-modulus>
139 144
140this option prints out the value of the modulus of the public key 145this option prints out the value of the modulus of the public key
diff --git a/src/lib/libssl/src/doc/crypto/ERR_get_error.pod b/src/lib/libssl/src/doc/crypto/ERR_get_error.pod
index 34443045fc..828ecf529b 100644
--- a/src/lib/libssl/src/doc/crypto/ERR_get_error.pod
+++ b/src/lib/libssl/src/doc/crypto/ERR_get_error.pod
@@ -52,8 +52,11 @@ ERR_get_error_line_data(), ERR_peek_error_line_data() and
52ERR_get_last_error_line_data() store additional data and flags 52ERR_get_last_error_line_data() store additional data and flags
53associated with the error code in *B<data> 53associated with the error code in *B<data>
54and *B<flags>, unless these are B<NULL>. *B<data> contains a string 54and *B<flags>, unless these are B<NULL>. *B<data> contains a string
55if *B<flags>&B<ERR_TXT_STRING>. If it has been allocated by OPENSSL_malloc(), 55if *B<flags>&B<ERR_TXT_STRING> is true.
56*B<flags>&B<ERR_TXT_MALLOCED> is true. 56
57An application B<MUST NOT> free the *B<data> pointer (or any other pointers
58returned by these functions) with OPENSSL_free() as freeing is handled
59automatically by the error library.
57 60
58=head1 RETURN VALUES 61=head1 RETURN VALUES
59 62
diff --git a/src/lib/libssl/src/doc/crypto/EVP_BytesToKey.pod b/src/lib/libssl/src/doc/crypto/EVP_BytesToKey.pod
index d375c46e03..0ea7d55c0f 100644
--- a/src/lib/libssl/src/doc/crypto/EVP_BytesToKey.pod
+++ b/src/lib/libssl/src/doc/crypto/EVP_BytesToKey.pod
@@ -17,7 +17,7 @@ EVP_BytesToKey - password based encryption routine
17 17
18EVP_BytesToKey() derives a key and IV from various parameters. B<type> is 18EVP_BytesToKey() derives a key and IV from various parameters. B<type> is
19the cipher to derive the key and IV for. B<md> is the message digest to use. 19the cipher to derive the key and IV for. B<md> is the message digest to use.
20The B<salt> paramter is used as a salt in the derivation: it should point to 20The B<salt> parameter is used as a salt in the derivation: it should point to
21an 8 byte buffer or NULL if no salt is used. B<data> is a buffer containing 21an 8 byte buffer or NULL if no salt is used. B<data> is a buffer containing
22B<datal> bytes which is used to derive the keying data. B<count> is the 22B<datal> bytes which is used to derive the keying data. B<count> is the
23iteration count to use. The derived key and IV will be written to B<key> 23iteration count to use. The derived key and IV will be written to B<key>
diff --git a/src/lib/libssl/src/doc/crypto/EVP_DigestInit.pod b/src/lib/libssl/src/doc/crypto/EVP_DigestInit.pod
index 1aa15acb61..367691cc7a 100644
--- a/src/lib/libssl/src/doc/crypto/EVP_DigestInit.pod
+++ b/src/lib/libssl/src/doc/crypto/EVP_DigestInit.pod
@@ -252,9 +252,9 @@ digest name passed on the command line.
252 252
253=head1 SEE ALSO 253=head1 SEE ALSO
254 254
255L<evp(3)|evp(3)>, L<HMAC(3)|HMAC(3)>, L<MD2(3)|MD2(3)>, 255L<evp(3)|evp(3)>, L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>,
256L<MD5(3)|MD5(3)>, L<MDC2(3)|MDC2(3)>, L<RIPEMD160(3)|RIPEMD160(3)>, 256L<md5(3)|md5(3)>, L<mdc2(3)|mdc2(3)>, L<ripemd(3)|ripemd(3)>,
257L<SHA1(3)|SHA1(3)> 257L<sha(3)|sha(3)>, L<dgst(1)|dgst(1)>
258 258
259=head1 HISTORY 259=head1 HISTORY
260 260
diff --git a/src/lib/libssl/src/doc/crypto/EVP_EncryptInit.pod b/src/lib/libssl/src/doc/crypto/EVP_EncryptInit.pod
index 8271d3dfc4..1c4bf184a1 100644
--- a/src/lib/libssl/src/doc/crypto/EVP_EncryptInit.pod
+++ b/src/lib/libssl/src/doc/crypto/EVP_EncryptInit.pod
@@ -152,7 +152,7 @@ does not remain in memory.
152 152
153EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in a 153EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in a
154similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex and 154similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex and
155EVP_CipherInit_ex() except the B<ctx> paramter does not need to be 155EVP_CipherInit_ex() except the B<ctx> parameter does not need to be
156initialized and they always use the default cipher implementation. 156initialized and they always use the default cipher implementation.
157 157
158EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() behave in a 158EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() behave in a
diff --git a/src/lib/libssl/src/doc/crypto/EVP_PKEY_verifyrecover.pod b/src/lib/libssl/src/doc/crypto/EVP_PKEY_verifyrecover.pod
deleted file mode 100644
index f3605eb826..0000000000
--- a/src/lib/libssl/src/doc/crypto/EVP_PKEY_verifyrecover.pod
+++ /dev/null
@@ -1,103 +0,0 @@
1=pod
2
3=head1 NAME
4
5EVP_PKEY_verifyrecover_init, EVP_PKEY_verifyrecover - recover signature using a public key algorithm
6
7=head1 SYNOPSIS
8
9 #include <openssl/evp.h>
10
11 int EVP_PKEY_verifyrecover_init(EVP_PKEY_CTX *ctx);
12 int EVP_PKEY_verifyrecover(EVP_PKEY_CTX *ctx,
13 unsigned char *rout, size_t *routlen,
14 const unsigned char *sig, size_t siglen);
15
16=head1 DESCRIPTION
17
18The EVP_PKEY_verifyrecover_init() function initializes a public key algorithm
19context using key B<pkey> for a verify recover operation.
20
21The EVP_PKEY_verifyrecover() function recovers signed data
22using B<ctx>. The signature is specified using the B<sig> and
23B<siglen> parameters. If B<rout> is B<NULL> then the maximum size of the output
24buffer is written to the B<routlen> parameter. If B<rout> is not B<NULL> then
25before the call the B<routlen> parameter should contain the length of the
26B<rout> buffer, if the call is successful recovered data is written to
27B<rout> and the amount of data written to B<routlen>.
28
29=head1 NOTES
30
31Normally an application is only interested in whether a signature verification
32operation is successful in those cases the EVP_verify() function should be
33used.
34
35Sometimes however it is useful to obtain the data originally signed using a
36signing operation. Only certain public key algorithms can recover a signature
37in this way (for example RSA in PKCS padding mode).
38
39After the call to EVP_PKEY_verifyrecover_init() algorithm specific control
40operations can be performed to set any appropriate parameters for the
41operation.
42
43The function EVP_PKEY_verifyrecover() can be called more than once on the same
44context if several operations are performed using the same parameters.
45
46=head1 RETURN VALUES
47
48EVP_PKEY_verifyrecover_init() and EVP_PKEY_verifyrecover() return 1 for success
49and 0 or a negative value for failure. In particular a return value of -2
50indicates the operation is not supported by the public key algorithm.
51
52=head1 EXAMPLE
53
54Recover digest originally signed using PKCS#1 and SHA256 digest:
55
56 #include <openssl/evp.h>
57 #include <openssl/rsa.h>
58
59 EVP_PKEY_CTX *ctx;
60 unsigned char *rout, *sig;
61 size_t routlen, siglen;
62 EVP_PKEY *verify_key;
63 /* NB: assumes verify_key, sig and siglen are already set up
64 * and that verify_key is an RSA public key
65 */
66 ctx = EVP_PKEY_CTX_new(verify_key);
67 if (!ctx)
68 /* Error occurred */
69 if (EVP_PKEY_verifyrecover_init(ctx) <= 0)
70 /* Error */
71 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
72 /* Error */
73 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
74 /* Error */
75
76 /* Determine buffer length */
77 if (EVP_PKEY_verifyrecover(ctx, NULL, &routlen, sig, siglen) <= 0)
78 /* Error */
79
80 rout = OPENSSL_malloc(routlen);
81
82 if (!rout)
83 /* malloc failure */
84
85 if (EVP_PKEY_verifyrecover(ctx, rout, &routlen, sig, siglen) <= 0)
86 /* Error */
87
88 /* Recovered data is routlen bytes written to buffer rout */
89
90=head1 SEE ALSO
91
92L<EVP_PKEY_CTX_new(3)|EVP_PKEY_CTX_new(3)>,
93L<EVP_PKEY_encrypt(3)|EVP_PKEY_encrypt(3)>,
94L<EVP_PKEY_decrypt(3)|EVP_PKEY_decrypt(3)>,
95L<EVP_PKEY_sign(3)|EVP_PKEY_sign(3)>,
96L<EVP_PKEY_verify(3)|EVP_PKEY_verify(3)>,
97L<EVP_PKEY_derive(3)|EVP_PKEY_derive(3)>
98
99=head1 HISTORY
100
101These functions were first added to OpenSSL 1.0.0.
102
103=cut
diff --git a/src/lib/libssl/src/doc/crypto/EVP_SignInit.pod b/src/lib/libssl/src/doc/crypto/EVP_SignInit.pod
index 781d43e401..620a623ab6 100644
--- a/src/lib/libssl/src/doc/crypto/EVP_SignInit.pod
+++ b/src/lib/libssl/src/doc/crypto/EVP_SignInit.pod
@@ -89,10 +89,10 @@ The previous two bugs are fixed in the newer EVP_SignDigest*() function.
89=head1 SEE ALSO 89=head1 SEE ALSO
90 90
91L<EVP_VerifyInit(3)|EVP_VerifyInit(3)>, 91L<EVP_VerifyInit(3)|EVP_VerifyInit(3)>,
92L<EVP_DigestInit(3)|EVP_DigestInit(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, 92L<EVP_DigestInit(3)|EVP_DigestInit(3)>, L<err(3)|err(3)>,
93L<evp(3)|evp(3)>, L<HMAC(3)|HMAC(3)>, L<MD2(3)|MD2(3)>, 93L<evp(3)|evp(3)>, L<hmac(3)|hmac(3)>, L<md2(3)|md2(3)>,
94L<MD5(3)|MD5(3)>, L<MDC2(3)|MDC2(3)>, L<RIPEMD(3)|RIPEMD(3)>, 94L<md5(3)|md5(3)>, L<mdc2(3)|mdc2(3)>, L<ripemd(3)|ripemd(3)>,
95L<SHA1(3)|SHA1(3)>, L<digest(1)|digest(1)> 95L<sha(3)|sha(3)>, L<dgst(1)|dgst(1)>
96 96
97=head1 HISTORY 97=head1 HISTORY
98 98
diff --git a/src/lib/libssl/src/doc/crypto/des_modes.pod b/src/lib/libssl/src/doc/crypto/des_modes.pod
index 0ad01eafe2..e883ca8fde 100644
--- a/src/lib/libssl/src/doc/crypto/des_modes.pod
+++ b/src/lib/libssl/src/doc/crypto/des_modes.pod
@@ -248,7 +248,8 @@ it to:
248 248
249=head1 SEE ALSO 249=head1 SEE ALSO
250 250
251L<blowfish(3)|blowfish(3)> 251L<blowfish(3)|blowfish(3)>, L<des(3)|des(3)>, L<idea(3)|idea(3)>,
252L<rc2(3)|rc2(3)>
252 253
253=cut 254=cut
254 255
diff --git a/src/lib/libssl/src/doc/crypto/dsa.pod b/src/lib/libssl/src/doc/crypto/dsa.pod
index ae2e5d81f9..da07d2b930 100644
--- a/src/lib/libssl/src/doc/crypto/dsa.pod
+++ b/src/lib/libssl/src/doc/crypto/dsa.pod
@@ -101,7 +101,8 @@ Standard, DSS), ANSI X9.30
101=head1 SEE ALSO 101=head1 SEE ALSO
102 102
103L<bn(3)|bn(3)>, L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>, 103L<bn(3)|bn(3)>, L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
104L<rsa(3)|rsa(3)>, L<SHA1(3)|SHA1(3)>, L<DSA_new(3)|DSA_new(3)>, 104L<rsa(3)|rsa(3)>, L<sha(3)|sha(3)>, L<engine(3)|engine(3)>,
105L<DSA_new(3)|DSA_new(3)>,
105L<DSA_size(3)|DSA_size(3)>, 106L<DSA_size(3)|DSA_size(3)>,
106L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>, 107L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>,
107L<DSA_dup_DH(3)|DSA_dup_DH(3)>, 108L<DSA_dup_DH(3)|DSA_dup_DH(3)>,
diff --git a/src/lib/libssl/src/doc/crypto/hmac.pod b/src/lib/libssl/src/doc/crypto/hmac.pod
index 5e3921a0d8..d92138d273 100644
--- a/src/lib/libssl/src/doc/crypto/hmac.pod
+++ b/src/lib/libssl/src/doc/crypto/hmac.pod
@@ -90,7 +90,7 @@ RFC 2104
90 90
91=head1 SEE ALSO 91=head1 SEE ALSO
92 92
93L<SHA1(3)|SHA1(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)> 93L<sha(3)|sha(3)>, L<evp(3)|evp(3)>
94 94
95=head1 HISTORY 95=head1 HISTORY
96 96
diff --git a/src/lib/libssl/src/doc/crypto/mdc2.pod b/src/lib/libssl/src/doc/crypto/mdc2.pod
index 2fab9a9871..41f648af36 100644
--- a/src/lib/libssl/src/doc/crypto/mdc2.pod
+++ b/src/lib/libssl/src/doc/crypto/mdc2.pod
@@ -54,7 +54,7 @@ ISO/IEC 10118-2, with DES
54 54
55=head1 SEE ALSO 55=head1 SEE ALSO
56 56
57L<SHA1(3)|SHA1(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)> 57L<sha(3)|sha(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)>
58 58
59=head1 HISTORY 59=head1 HISTORY
60 60
diff --git a/src/lib/libssl/src/doc/crypto/pem.pod b/src/lib/libssl/src/doc/crypto/pem.pod
index d5b1896119..54414a3f6f 100644
--- a/src/lib/libssl/src/doc/crypto/pem.pod
+++ b/src/lib/libssl/src/doc/crypto/pem.pod
@@ -201,7 +201,7 @@ handle PKCS#8 format encrypted and unencrypted keys too.
201PEM_write_bio_PKCS8PrivateKey() and PEM_write_PKCS8PrivateKey() 201PEM_write_bio_PKCS8PrivateKey() and PEM_write_PKCS8PrivateKey()
202write a private key in an EVP_PKEY structure in PKCS#8 202write a private key in an EVP_PKEY structure in PKCS#8
203EncryptedPrivateKeyInfo format using PKCS#5 v2.0 password based encryption 203EncryptedPrivateKeyInfo format using PKCS#5 v2.0 password based encryption
204algorithms. The B<cipher> argument specifies the encryption algoritm to 204algorithms. The B<cipher> argument specifies the encryption algorithm to
205use: unlike all other PEM routines the encryption is applied at the 205use: unlike all other PEM routines the encryption is applied at the
206PKCS#8 level and not in the PEM headers. If B<cipher> is NULL then no 206PKCS#8 level and not in the PEM headers. If B<cipher> is NULL then no
207encryption is used and a PKCS#8 PrivateKeyInfo structure is used instead. 207encryption is used and a PKCS#8 PrivateKeyInfo structure is used instead.
diff --git a/src/lib/libssl/src/doc/crypto/ripemd.pod b/src/lib/libssl/src/doc/crypto/ripemd.pod
index 348ef7c961..264bb99ae7 100644
--- a/src/lib/libssl/src/doc/crypto/ripemd.pod
+++ b/src/lib/libssl/src/doc/crypto/ripemd.pod
@@ -56,7 +56,7 @@ ISO/IEC 10118-3 (draft) (??)
56 56
57=head1 SEE ALSO 57=head1 SEE ALSO
58 58
59L<SHA1(3)|SHA1(3)>, L<HMAC(3)|HMAC(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)> 59L<sha(3)|sha(3)>, L<hmac(3)|hmac(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)>
60 60
61=head1 HISTORY 61=head1 HISTORY
62 62
diff --git a/src/lib/libssl/src/doc/crypto/sha.pod b/src/lib/libssl/src/doc/crypto/sha.pod
index d7a56accd3..94ab7bc724 100644
--- a/src/lib/libssl/src/doc/crypto/sha.pod
+++ b/src/lib/libssl/src/doc/crypto/sha.pod
@@ -60,7 +60,7 @@ ANSI X9.30
60 60
61=head1 SEE ALSO 61=head1 SEE ALSO
62 62
63L<RIPEMD160(3)|RIPEMD160(3)>, L<HMAC(3)|HMAC(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)> 63L<ripemd(3)|ripemd(3)>, L<hmac(3)|hmac(3)>, L<EVP_DigestInit(3)|EVP_DigestInit(3)>
64 64
65=head1 HISTORY 65=head1 HISTORY
66 66
diff --git a/src/lib/libssl/src/doc/ssl/SSL_CTX_set_client_CA_list.pod b/src/lib/libssl/src/doc/ssl/SSL_CTX_set_client_CA_list.pod
index 04d0a3c9a8..bcf35dc85b 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_CTX_set_client_CA_list.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_CTX_set_client_CA_list.pod
@@ -66,16 +66,16 @@ values:
66 66
67=over 4 67=over 4
68 68
69=item C<1>
70
71The operation succeeded.
72
73=item C<0> 69=item C<0>
74 70
75A failure while manipulating the STACK_OF(X509_NAME) object occurred or 71A failure while manipulating the STACK_OF(X509_NAME) object occurred or
76the X509_NAME could not be extracted from B<cacert>. Check the error stack 72the X509_NAME could not be extracted from B<cacert>. Check the error stack
77to find out the reason. 73to find out the reason.
78 74
75=item C<1>
76
77The operation succeeded.
78
79=back 79=back
80 80
81=head1 EXAMPLES 81=head1 EXAMPLES
diff --git a/src/lib/libssl/src/doc/ssl/SSL_CTX_set_options.pod b/src/lib/libssl/src/doc/ssl/SSL_CTX_set_options.pod
index cc588f3a78..fded0601b5 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_CTX_set_options.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_CTX_set_options.pod
@@ -88,9 +88,10 @@ As of OpenSSL 0.9.8q and 1.0.0c, this option has no effect.
88 88
89... 89...
90 90
91=item SSL_OP_MSIE_SSLV2_RSA_PADDING 91=item SSL_OP_SAFARI_ECDHE_ECDSA_BUG
92 92
93As of OpenSSL 0.9.7h and 0.9.8a, this option has no effect. 93Don't prefer ECDHE-ECDSA ciphers when the client appears to be Safari on OS X.
94OS X 10.8..10.8.3 has broken support for ECDHE-ECDSA ciphers.
94 95
95=item SSL_OP_SSLEAY_080_CLIENT_DH_BUG 96=item SSL_OP_SSLEAY_080_CLIENT_DH_BUG
96 97
diff --git a/src/lib/libssl/src/doc/ssl/SSL_CTX_set_verify.pod b/src/lib/libssl/src/doc/ssl/SSL_CTX_set_verify.pod
index 81566839d3..6fd6c03215 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_CTX_set_verify.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_CTX_set_verify.pod
@@ -169,8 +169,8 @@ that will always continue the TLS/SSL handshake regardless of verification
169failure, if wished. The callback realizes a verification depth limit with 169failure, if wished. The callback realizes a verification depth limit with
170more informational output. 170more informational output.
171 171
172All verification errors are printed, informations about the certificate chain 172All verification errors are printed; information about the certificate chain
173are printed on request. 173is printed on request.
174The example is realized for a server that does allow but not require client 174The example is realized for a server that does allow but not require client
175certificates. 175certificates.
176 176
diff --git a/src/lib/libssl/src/doc/ssl/SSL_accept.pod b/src/lib/libssl/src/doc/ssl/SSL_accept.pod
index 17f504b89b..288203f8af 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_accept.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_accept.pod
@@ -44,18 +44,18 @@ The following return values can occur:
44 44
45=over 4 45=over 4
46 46
47=item C<1>
48
49The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
50established.
51
52=item C<0> 47=item C<0>
53 48
54The TLS/SSL handshake was not successful but was shut down controlled and 49The TLS/SSL handshake was not successful but was shut down controlled and
55by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the 50by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the
56return value B<ret> to find out the reason. 51return value B<ret> to find out the reason.
57 52
58=item C<E<lt>0> 53=item C<1>
54
55The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
56established.
57
58=item E<lt>0
59 59
60The TLS/SSL handshake was not successful because a fatal error occurred either 60The TLS/SSL handshake was not successful because a fatal error occurred either
61at the protocol level or a connection failure occurred. The shutdown was 61at the protocol level or a connection failure occurred. The shutdown was
diff --git a/src/lib/libssl/src/doc/ssl/SSL_connect.pod b/src/lib/libssl/src/doc/ssl/SSL_connect.pod
index 413af361e1..0087f6b3e1 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_connect.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_connect.pod
@@ -41,17 +41,17 @@ The following return values can occur:
41 41
42=over 4 42=over 4
43 43
44=item C<1>
45
46The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
47established.
48
49=item C<0> 44=item C<0>
50 45
51The TLS/SSL handshake was not successful but was shut down controlled and 46The TLS/SSL handshake was not successful but was shut down controlled and
52by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the 47by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the
53return value B<ret> to find out the reason. 48return value B<ret> to find out the reason.
54 49
50=item C<1>
51
52The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
53established.
54
55=item C<E<lt>0> 55=item C<E<lt>0>
56 56
57The TLS/SSL handshake was not successful, because a fatal error occurred either 57The TLS/SSL handshake was not successful, because a fatal error occurred either
diff --git a/src/lib/libssl/src/doc/ssl/SSL_do_handshake.pod b/src/lib/libssl/src/doc/ssl/SSL_do_handshake.pod
index e9d4119c72..1ca18d4723 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_do_handshake.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_do_handshake.pod
@@ -45,17 +45,17 @@ The following return values can occur:
45 45
46=over 4 46=over 4
47 47
48=item C<1>
49
50The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
51established.
52
53=item C<0> 48=item C<0>
54 49
55The TLS/SSL handshake was not successful but was shut down controlled and 50The TLS/SSL handshake was not successful but was shut down controlled and
56by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the 51by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the
57return value B<ret> to find out the reason. 52return value B<ret> to find out the reason.
58 53
54=item C<1>
55
56The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
57established.
58
59=item C<E<lt>0> 59=item C<E<lt>0>
60 60
61The TLS/SSL handshake was not successful because a fatal error occurred either 61The TLS/SSL handshake was not successful because a fatal error occurred either
diff --git a/src/lib/libssl/src/doc/ssl/SSL_set_shutdown.pod b/src/lib/libssl/src/doc/ssl/SSL_set_shutdown.pod
index 011a022a12..fe013085d3 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_set_shutdown.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_set_shutdown.pod
@@ -24,7 +24,7 @@ The shutdown state of an ssl connection is a bitmask of:
24 24
25=over 4 25=over 4
26 26
27=item 0 27=item Z<>0
28 28
29No shutdown setting, yet. 29No shutdown setting, yet.
30 30
diff --git a/src/lib/libssl/src/doc/ssl/SSL_shutdown.pod b/src/lib/libssl/src/doc/ssl/SSL_shutdown.pod
index 69ad31e80b..d86ac7cb13 100644
--- a/src/lib/libssl/src/doc/ssl/SSL_shutdown.pod
+++ b/src/lib/libssl/src/doc/ssl/SSL_shutdown.pod
@@ -92,11 +92,6 @@ The following return values can occur:
92 92
93=over 4 93=over 4
94 94
95=item C<1>
96
97The shutdown was successfully completed. The "close notify" alert was sent
98and the peer's "close notify" alert was received.
99
100=item C<0> 95=item C<0>
101 96
102The shutdown is not yet finished. Call SSL_shutdown() for a second time, 97The shutdown is not yet finished. Call SSL_shutdown() for a second time,
@@ -104,6 +99,11 @@ if a bidirectional shutdown shall be performed.
104The output of L<SSL_get_error(3)|SSL_get_error(3)> may be misleading, as an 99The output of L<SSL_get_error(3)|SSL_get_error(3)> may be misleading, as an
105erroneous SSL_ERROR_SYSCALL may be flagged even though no error occurred. 100erroneous SSL_ERROR_SYSCALL may be flagged even though no error occurred.
106 101
102=item C<1>
103
104The shutdown was successfully completed. The "close notify" alert was sent
105and the peer's "close notify" alert was received.
106
107=item C<-1> 107=item C<-1>
108 108
109The shutdown was not successful because a fatal error occurred either 109The shutdown was not successful because a fatal error occurred either
diff --git a/src/lib/libssl/src/doc/ssl/ssl.pod b/src/lib/libssl/src/doc/ssl/ssl.pod
index 88aaebf3f6..6d3ee24e4e 100644
--- a/src/lib/libssl/src/doc/ssl/ssl.pod
+++ b/src/lib/libssl/src/doc/ssl/ssl.pod
@@ -3,7 +3,7 @@
3 3
4=head1 NAME 4=head1 NAME
5 5
6ssl - OpenSSL SSL/TLS library 6SSL - OpenSSL SSL/TLS library
7 7
8=head1 SYNOPSIS 8=head1 SYNOPSIS
9 9
diff --git a/src/lib/libssl/src/e_os.h b/src/lib/libssl/src/e_os.h
index 79c1392573..6a0aad1de7 100644
--- a/src/lib/libssl/src/e_os.h
+++ b/src/lib/libssl/src/e_os.h
@@ -368,6 +368,13 @@ static unsigned int _strlen31(const char *str)
368# define DEFAULT_HOME "C:" 368# define DEFAULT_HOME "C:"
369# endif 369# endif
370 370
371/* Avoid Windows 8 SDK GetVersion deprecated problems */
372#if defined(_MSC_VER) && _MSC_VER>=1800
373# define check_winnt() (1)
374#else
375# define check_winnt() (GetVersion() < 0x80000000)
376#endif
377
371#else /* The non-microsoft world */ 378#else /* The non-microsoft world */
372 379
373# ifdef OPENSSL_SYS_VMS 380# ifdef OPENSSL_SYS_VMS
diff --git a/src/lib/libssl/src/engines/e_capi.c b/src/lib/libssl/src/engines/e_capi.c
index bfedde0eb0..c1085b56cd 100644
--- a/src/lib/libssl/src/engines/e_capi.c
+++ b/src/lib/libssl/src/engines/e_capi.c
@@ -1432,10 +1432,13 @@ static PCCERT_CONTEXT capi_find_cert(CAPI_CTX *ctx, const char *id, HCERTSTORE h
1432static CAPI_KEY *capi_get_key(CAPI_CTX *ctx, const char *contname, char *provname, DWORD ptype, DWORD keyspec) 1432static CAPI_KEY *capi_get_key(CAPI_CTX *ctx, const char *contname, char *provname, DWORD ptype, DWORD keyspec)
1433 { 1433 {
1434 CAPI_KEY *key; 1434 CAPI_KEY *key;
1435 DWORD dwFlags = 0;
1435 key = OPENSSL_malloc(sizeof(CAPI_KEY)); 1436 key = OPENSSL_malloc(sizeof(CAPI_KEY));
1436 CAPI_trace(ctx, "capi_get_key, contname=%s, provname=%s, type=%d\n", 1437 CAPI_trace(ctx, "capi_get_key, contname=%s, provname=%s, type=%d\n",
1437 contname, provname, ptype); 1438 contname, provname, ptype);
1438 if (!CryptAcquireContextA(&key->hprov, contname, provname, ptype, 0)) 1439 if(ctx->store_flags & CERT_SYSTEM_STORE_LOCAL_MACHINE)
1440 dwFlags = CRYPT_MACHINE_KEYSET;
1441 if (!CryptAcquireContextA(&key->hprov, contname, provname, ptype, dwFlags))
1439 { 1442 {
1440 CAPIerr(CAPI_F_CAPI_GET_KEY, CAPI_R_CRYPTACQUIRECONTEXT_ERROR); 1443 CAPIerr(CAPI_F_CAPI_GET_KEY, CAPI_R_CRYPTACQUIRECONTEXT_ERROR);
1441 capi_addlasterror(); 1444 capi_addlasterror();
diff --git a/src/lib/libssl/src/engines/makeengines.com b/src/lib/libssl/src/engines/makeengines.com
deleted file mode 100644
index 6329fbbf03..0000000000
--- a/src/lib/libssl/src/engines/makeengines.com
+++ /dev/null
@@ -1,1125 +0,0 @@
1$!
2$! MAKEENGINES.COM
3$! Written By: Richard Levitte
4$! richard@levitte.org
5$!
6$! This command file compiles and creates the various engines in form
7$! of shared images. They are placed in [.xxx.EXE.ENGINES], where "xxx"
8$! is ALPHA, IA64 or VAX, depending on your hardware.
9$!
10$! P1 if this is ENGINES or ALL, the engines will build, otherwise not.
11$!
12$! P2 DEBUG or NODEBUG to compile with or without debugger information.
13$!
14$! P3 VAXC for VAX C
15$! DECC for DEC C
16$! GNUC for GNU C (untested)
17$!
18$! P4 if defined, sets the TCP/IP libraries to use. UCX or TCPIP is
19$! used by default since most other implementations come with a
20$! compatibility library. The value must be one of the following:
21$!
22$! UCX for UCX
23$! SOCKETSHR for SOCKETSHR+NETLIB
24$! TCPIP for TCPIP (post UCX)
25$!
26$! P5 if defined, tells the compiler not to use special threads.
27$!
28$! P6 if defined, denotes which engines to build. If not defined,
29$! all available engines are built.
30$!
31$! P7, if defined, specifies the C pointer size. Ignored on VAX.
32$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
33$! Supported values are:
34$!
35$! "" Compile with default (/NOPOINTER_SIZE)
36$! 32 Compile with /POINTER_SIZE=32 (SHORT)
37$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
38$! (Automatically select ARGV if compiler supports it.)
39$! 64= Compile with /POINTER_SIZE=64 (LONG).
40$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
41$!
42$! P8, if defined, specifies a directory where ZLIB files (zlib.h,
43$! libz.olb) may be found. Optionally, a non-default object library
44$! name may be included ("dev:[dir]libz_64.olb", for example).
45$!
46$!-----------------------------------------------------------------------------
47$!
48$! Announce/identify.
49$!
50$ proc = f$environment( "procedure")
51$ write sys$output "@@@ "+ -
52 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
53$!
54$ on control_c then goto exit
55$!
56$! Set the default TCP/IP library to link against if needed
57$!
58$ TCPIP_LIB = ""
59$ ZLIB_LIB = ""
60$!
61$! Check What Architecture We Are Using.
62$!
63$ IF (F$GETSYI("CPU").LT.128)
64$ THEN
65$!
66$! The Architecture Is VAX.
67$!
68$ ARCH = "VAX"
69$!
70$! Else...
71$!
72$ ELSE
73$!
74$! The Architecture Is Alpha, IA64 or whatever comes in the future.
75$!
76$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
77$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
78$!
79$! End The Architecture Check.
80$!
81$ ENDIF
82$!
83$ ARCHD = ARCH
84$ LIB32 = "32"
85$ OPT_FILE = ""
86$ POINTER_SIZE = ""
87$!
88$! Set the names of the engines we want to build
89$! NOTE: Some might think this list ugly. However, it's made this way to
90$! reflect the LIBNAMES variable in Makefile as closely as possible,
91$! thereby making it fairly easy to verify that the lists are the same.
92$! NOTE: gmp isn't built, as it's mostly a test engine and brings in another
93$! library that isn't necessarely ported to VMS.
94$!
95$ ENGINES = "," + P6
96$ IF ENGINES .EQS. "," THEN -
97 ENGINES = ",4758cca,aep,atalla,cswift,chil,nuron,sureware,ubsec,padlock,"
98$!
99$! GOST requires a 64-bit integer type, unavailable on VAX.
100$!
101$ IF (ARCH .NES. "VAX") THEN -
102 ENGINES = ENGINES+ ",ccgost"
103$!
104$! Check options.
105$!
106$ OPT_PHASE = P1
107$ ACCEPT_PHASE = "ALL,ENGINES"
108$ OPT_DEBUG = P2
109$ OPT_COMPILER = P3
110$ OPT_TCPIP_LIB = P4
111$ OPT_SPECIAL_THREADS = P5
112$ OPT_POINTER_SIZE = P7
113$ ZLIB = P8
114$
115$ GOSUB CHECK_OPTIONS
116$!
117$! Set the goal directories, and create them if necessary
118$!
119$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.ENGINES]
120$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.ENGINES]
121$ IF F$PARSE(OBJ_DIR) .EQS. "" THEN CREATE/DIRECTORY 'OBJ_DIR'
122$ IF F$PARSE(EXE_DIR) .EQS. "" THEN CREATE/DIRECTORY 'EXE_DIR'
123$!
124$! Set the goal files, and create them if necessary
125$!
126$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
127$ IF F$SEARCH(CRYPTO_LIB) .EQS. "" THEN LIBRARY/CREATE/OBJECT 'CRYPTO_LIB'
128$!
129$! Specify the destination directory in any /MAP option.
130$!
131$ if (LINKMAP .eqs. "MAP")
132$ then
133$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
134$ endif
135$!
136$! Add the location prefix to the linker options file name.
137$!
138$ if (OPT_FILE .nes. "")
139$ then
140$ OPT_FILE = EXE_DIR+ OPT_FILE
141$ endif
142$!
143$! Initialise.
144$!
145$ GOSUB INITIALISE
146$ GOSUB CHECK_OPT_FILE
147$!
148$! Define what goes into each engine. VAX includes a transfer vector.
149$!
150$ ENGINE_ = ""
151$ TV_OBJ = ""
152$ IF ARCH .EQS. "VAX"
153$ THEN
154$ ENGINE_ = "engine_vector.mar"
155$ TV_OBJ_NAME = OBJ_DIR + F$PARSE(ENGINE_,,,"NAME","SYNTAX_ONLY") + ".OBJ"
156$ TV_OBJ = ",''TV_OBJ_NAME'"
157$ ENDIF
158$ ENGINE_4758CCA = "e_4758cca"
159$ ENGINE_aep = "e_aep"
160$ ENGINE_atalla = "e_atalla"
161$ ENGINE_cswift = "e_cswift"
162$ ENGINE_chil = "e_chil"
163$ ENGINE_nuron = "e_nuron"
164$ ENGINE_sureware = "e_sureware"
165$ ENGINE_ubsec = "e_ubsec"
166$ ENGINE_padlock = "e_padlock"
167$
168$ ENGINE_ccgost_SUBDIR = "ccgost"
169$ ENGINE_ccgost = "e_gost_err,gost2001_keyx,gost2001,gost89,gost94_keyx,"+ -
170 "gost_ameth,gost_asn1,gost_crypt,gost_ctl,gost_eng,"+ -
171 "gosthash,gost_keywrap,gost_md,gost_params,gost_pmeth,"+ -
172 "gost_sign"
173$!
174$! Define which programs need to be linked with a TCP/IP library
175$!
176$ TCPIP_ENGINES = ",,"
177$ IF COMPILER .EQS. "VAXC" THEN -
178 TCPIP_ENGINES = ",,"
179$!
180$! Set up two loops, one that keeps track of the engines,
181$! and one that keeps track of all the files going into
182$! the current engine.
183$!
184$! Here's the start of the engine loop.
185$!
186$ ENGINE_COUNTER = 0
187$ ENGINE_NEXT:
188$!
189$! Extract the current engine name, and if we've reached the end, stop
190$!
191$ ENGINE_NAME = F$ELEMENT(ENGINE_COUNTER,",",ENGINES)
192$ IF (ENGINE_NAME.EQS.",") THEN GOTO ENGINE_DONE
193$!
194$ ENGINE_COUNTER = ENGINE_COUNTER + 1
195$!
196$! Set up the engine library names.
197$!
198$ LIB_ENGINE = "ENGINE_" + ENGINE_NAME
199$!
200$! Check if the library module name actually is defined
201$!
202$ IF F$TYPE('LIB_ENGINE') .EQS. ""
203$ THEN
204$ WRITE SYS$ERROR ""
205$ WRITE SYS$ERROR "The module ",ENGINE_NAME," does not exist. Continuing..."
206$ WRITE SYS$ERROR ""
207$ GOTO ENGINE_NEXT
208$ ENDIF
209$!
210$! Talk to the user
211$!
212$ IF ENGINE_NAME .NES. ""
213$ THEN
214$ WRITE SYS$OUTPUT "Compiling The ",ENGINE_NAME," Library Files. (",BUILDALL,")"
215$ ELSE
216$ WRITE SYS$OUTPUT "Compiling Support Files. (",BUILDALL,")"
217$ ENDIF
218$!
219$! Create a .OPT file for the object files (for a real engine name).
220$!
221$ IF ENGINE_NAME .NES. ""
222$ THEN
223$ OPEN /WRITE OBJECTS 'EXE_DIR''ENGINE_NAME'.OPT
224$ ENDIF
225$!
226$! Here's the start of per-engine module loop.
227$!
228$ FILE_COUNTER = 0
229$ FILE_NEXT:
230$!
231$! Extract the file name from the file list, and if we've reached the end, stop
232$!
233$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_ENGINE')
234$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
235$!
236$ FILE_COUNTER = FILE_COUNTER + 1
237$!
238$ IF FILE_NAME .EQS. "" THEN GOTO FILE_NEXT
239$!
240$! Set up the source and object reference
241$!
242$ IF F$TYPE('LIB_ENGINE'_SUBDIR) .EQS. ""
243$ THEN
244$ SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[].C",,,"SYNTAX_ONLY")
245$ ELSE
246$ SOURCE_FILE = F$PARSE(FILE_NAME,"SYS$DISK:[."+'LIB_ENGINE'_SUBDIR+"].C",,,"SYNTAX_ONLY")
247$ ENDIF
248$ OBJECT_FILE = OBJ_DIR + F$PARSE(FILE_NAME,,,"NAME","SYNTAX_ONLY") + ".OBJ"
249$!
250$! If we get some problem, we just go on trying to build the next module.
251$ ON WARNING THEN GOTO FILE_NEXT
252$!
253$! Check if the module we want to compile is actually there.
254$!
255$ IF F$SEARCH(SOURCE_FILE) .EQS. ""
256$ THEN
257$ WRITE SYS$OUTPUT ""
258$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Doesn't Exist."
259$ WRITE SYS$OUTPUT ""
260$ GOTO EXIT
261$ ENDIF
262$!
263$! Talk to the user.
264$!
265$ WRITE SYS$OUTPUT " ",FILE_NAME,""
266$!
267$! Do the dirty work.
268$!
269$ ON ERROR THEN GOTO FILE_NEXT
270$ IF F$EDIT(F$PARSE(SOURCE_FILE,,,"TYPE","SYNTAX_ONLY"),"UPCASE") .EQS. ".MAR"
271$ THEN
272$ MACRO/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
273$ ELSE
274$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
275$ ENDIF
276$!
277$! Write the entry to the .OPT file (for a real engine name).
278$!
279$ IF ENGINE_NAME .NES. ""
280$ THEN
281$ WRITE OBJECTS OBJECT_FILE
282$ ENDIF
283$!
284$! Next file
285$!
286$ GOTO FILE_NEXT
287$!
288$ FILE_DONE:
289$!
290$! Do not link the support files.
291$!
292$ IF ENGINE_NAME .EQS. "" THEN GOTO ENGINE_NEXT
293$!
294$! Close the linker options file (for a real engine name).
295$!
296$ CLOSE OBJECTS
297$!
298$! Now, there are two ways to handle this. We can either build
299$! shareable images or stick the engine object file into libcrypto.
300$! For now, the latter is NOT supported.
301$!
302$!!!!! LIBRARY/REPLACE 'CRYPTO_LIB' 'OBJECT_FILE'
303$!
304$! For shareable libraries, we need to do things a little differently
305$! depending on if we link with a TCP/IP library or not.
306$!
307$ ENGINE_OPT := SYS$DISK:[]'ARCH'.OPT
308$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /SHARE='EXE_DIR''ENGINE_NAME'.EXE -
309 'EXE_DIR''ENGINE_NAME'.OPT /OPTIONS -
310 'TV_OBJ', -
311 'CRYPTO_LIB' /LIBRARY, -
312 'ENGINE_OPT' /OPTIONS -
313 'TCPIP_LIB' -
314 'ZLIB_LIB' -
315 ,'OPT_FILE' /OPTIONS
316$!
317$! Next engine
318$!
319$ GOTO ENGINE_NEXT
320$!
321$ ENGINE_DONE:
322$!
323$! Talk to the user
324$!
325$ WRITE SYS$OUTPUT "All Done..."
326$ EXIT:
327$ GOSUB CLEANUP
328$ EXIT
329$!
330$! Check For The Link Option FIle.
331$!
332$ CHECK_OPT_FILE:
333$!
334$! Check To See If We Need To Make A VAX C Option File.
335$!
336$ IF (COMPILER.EQS."VAXC")
337$ THEN
338$!
339$! Check To See If We Already Have A VAX C Linker Option File.
340$!
341$ IF (F$SEARCH(OPT_FILE).EQS."")
342$ THEN
343$!
344$! We Need A VAX C Linker Option File.
345$!
346$ CREATE 'OPT_FILE'
347$DECK
348!
349! Default System Options File To Link Against
350! The Sharable VAX C Runtime Library.
351!
352SYS$SHARE:VAXCRTL.EXE/SHARE
353$EOD
354$!
355$! End The Option File Check.
356$!
357$ ENDIF
358$!
359$! End The VAXC Check.
360$!
361$ ENDIF
362$!
363$! Check To See If We Need A GNU C Option File.
364$!
365$ IF (COMPILER.EQS."GNUC")
366$ THEN
367$!
368$! Check To See If We Already Have A GNU C Linker Option File.
369$!
370$ IF (F$SEARCH(OPT_FILE).EQS."")
371$ THEN
372$!
373$! We Need A GNU C Linker Option File.
374$!
375$ CREATE 'OPT_FILE'
376$DECK
377!
378! Default System Options File To Link Against
379! The Sharable C Runtime Library.
380!
381GNU_CC:[000000]GCCLIB/LIBRARY
382SYS$SHARE:VAXCRTL/SHARE
383$EOD
384$!
385$! End The Option File Check.
386$!
387$ ENDIF
388$!
389$! End The GNU C Check.
390$!
391$ ENDIF
392$!
393$! Check To See If We Need A DEC C Option File.
394$!
395$ IF (COMPILER.EQS."DECC")
396$ THEN
397$!
398$! Check To See If We Already Have A DEC C Linker Option File.
399$!
400$ IF (F$SEARCH(OPT_FILE).EQS."")
401$ THEN
402$!
403$! Figure Out If We Need A non-VAX Or A VAX Linker Option File.
404$!
405$ IF ARCH .EQS. "VAX"
406$ THEN
407$!
408$! We Need A DEC C Linker Option File For VAX.
409$!
410$ CREATE 'OPT_FILE'
411$DECK
412!
413! Default System Options File To Link Against
414! The Sharable DEC C Runtime Library.
415!
416SYS$SHARE:DECC$SHR.EXE/SHARE
417$EOD
418$!
419$! Else...
420$!
421$ ELSE
422$!
423$! Create The non-VAX Linker Option File.
424$!
425$ CREATE 'OPT_FILE'
426$DECK
427!
428! Default System Options File For non-VAX To Link Against
429! The Sharable C Runtime Library.
430!
431SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
432SYS$SHARE:CMA$OPEN_RTL/SHARE
433$EOD
434$!
435$! End The DEC C Option File Check.
436$!
437$ ENDIF
438$!
439$! End The Option File Search.
440$!
441$ ENDIF
442$!
443$! End The DEC C Check.
444$!
445$ ENDIF
446$!
447$! Tell The User What Linker Option File We Are Using.
448$!
449$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
450$!
451$! Time To RETURN.
452$!
453$ RETURN
454$!
455$! Check The User's Options.
456$!
457$ CHECK_OPTIONS:
458$!
459$! Check To See If OPT_PHASE Is Blank.
460$!
461$ IF (OPT_PHASE.EQS."ALL")
462$ THEN
463$!
464$! OPT_PHASE Is Blank, So Build Everything.
465$!
466$ BUILDALL = "ALL"
467$!
468$! Else...
469$!
470$ ELSE
471$!
472$! Else, Check To See If OPT_PHASE Has A Valid Argument.
473$!
474$ IF ("," + ACCEPT_PHASE + ",") - ("," + OPT_PHASE + ",") -
475 .NES. ("," + ACCEPT_PHASE + ",")
476$ THEN
477$!
478$! A Valid Argument.
479$!
480$ BUILDALL = OPT_PHASE
481$!
482$! Else...
483$!
484$ ELSE
485$!
486$! Tell The User We Don't Know What They Want.
487$!
488$ WRITE SYS$OUTPUT ""
489$ WRITE SYS$OUTPUT "The option ",OPT_PHASE," is invalid. The valid options are:"
490$ WRITE SYS$OUTPUT ""
491$ IF ("," + ACCEPT_PHASE + ",") - ",ALL," -
492 .NES. ("," + ACCEPT_PHASE + ",") THEN -
493 WRITE SYS$OUTPUT " ALL : just build everything."
494$ IF ("," + ACCEPT_PHASE + ",") - ",ENGINES," -
495 .NES. ("," + ACCEPT_PHASE + ",") THEN -
496 WRITE SYS$OUTPUT " ENGINES : to compile just the [.xxx.EXE.ENGINES]*.EXE hareable images."
497$ WRITE SYS$OUTPUT ""
498$ WRITE SYS$OUTPUT " where 'xxx' stands for:"
499$ WRITE SYS$OUTPUT ""
500$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha architecture."
501$ WRITE SYS$OUTPUT " IA64[64] : IA64 architecture."
502$ WRITE SYS$OUTPUT " VAX : VAX architecture."
503$ WRITE SYS$OUTPUT ""
504$!
505$! Time To EXIT.
506$!
507$ EXIT
508$!
509$! End The Valid Argument Check.
510$!
511$ ENDIF
512$!
513$! End The OPT_PHASE Check.
514$!
515$ ENDIF
516$!
517$! Check To See If OPT_DEBUG Is Blank.
518$!
519$ IF (OPT_DEBUG.EQS."NODEBUG")
520$ THEN
521$!
522$! OPT_DEBUG Is NODEBUG, So Compile Without The Debugger Information.
523$!
524$ DEBUGGER = "NODEBUG"
525$ LINKMAP = "NOMAP"
526$ TRACEBACK = "NOTRACEBACK"
527$ GCC_OPTIMIZE = "OPTIMIZE"
528$ CC_OPTIMIZE = "OPTIMIZE"
529$ MACRO_OPTIMIZE = "OPTIMIZE"
530$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
531$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
532$ ELSE
533$!
534$! Check To See If We Are To Compile With Debugger Information.
535$!
536$ IF (OPT_DEBUG.EQS."DEBUG")
537$ THEN
538$!
539$! Compile With Debugger Information.
540$!
541$ DEBUGGER = "DEBUG"
542$ LINKMAP = "MAP"
543$ TRACEBACK = "TRACEBACK"
544$ GCC_OPTIMIZE = "NOOPTIMIZE"
545$ CC_OPTIMIZE = "NOOPTIMIZE"
546$ MACRO_OPTIMIZE = "NOOPTIMIZE"
547$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
548$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
549$ ELSE
550$!
551$! They Entered An Invalid Option.
552$!
553$ WRITE SYS$OUTPUT ""
554$ WRITE SYS$OUTPUT "The Option ",OPT_DEBUG," Is Invalid. The Valid Options Are:"
555$ WRITE SYS$OUTPUT ""
556$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
557$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
558$ WRITE SYS$OUTPUT ""
559$!
560$! Time To EXIT.
561$!
562$ EXIT
563$!
564$! End The Valid Argument Check.
565$!
566$ ENDIF
567$!
568$! End The OPT_DEBUG Check.
569$!
570$ ENDIF
571$!
572$! Special Threads For OpenVMS v7.1 Or Later
573$!
574$! Written By: Richard Levitte
575$! richard@levitte.org
576$!
577$!
578$! Check To See If We Have A Option For OPT_SPECIAL_THREADS.
579$!
580$ IF (OPT_SPECIAL_THREADS.EQS."")
581$ THEN
582$!
583$! Get The Version Of VMS We Are Using.
584$!
585$ ISSEVEN :=
586$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
587$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
588$!
589$! Check To See If The VMS Version Is v7.1 Or Later.
590$!
591$ IF (TMP.GE.71)
592$ THEN
593$!
594$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
595$!
596$ ISSEVEN := ,PTHREAD_USE_D4
597$!
598$! End The VMS Version Check.
599$!
600$ ENDIF
601$!
602$! End The OPT_SPECIAL_THREADS Check.
603$!
604$ ENDIF
605$!
606$! Check OPT_POINTER_SIZE (P7).
607$!
608$ IF (OPT_POINTER_SIZE .NES. "") .AND. (ARCH .NES. "VAX")
609$ THEN
610$!
611$ IF (OPT_POINTER_SIZE .EQS. "32")
612$ THEN
613$ POINTER_SIZE = " /POINTER_SIZE=32"
614$ ELSE
615$ POINTER_SIZE = F$EDIT( OPT_POINTER_SIZE, "COLLAPSE, UPCASE")
616$ IF ((POINTER_SIZE .EQS. "64") .OR. -
617 (POINTER_SIZE .EQS. "64=") .OR. -
618 (POINTER_SIZE .EQS. "64=ARGV"))
619$ THEN
620$ ARCHD = ARCH+ "_64"
621$ LIB32 = ""
622$ POINTER_SIZE = " /POINTER_SIZE=64"
623$ ELSE
624$!
625$! Tell The User Entered An Invalid Option.
626$!
627$ WRITE SYS$OUTPUT ""
628$ WRITE SYS$OUTPUT "The Option ", OPT_POINTER_SIZE, -
629 " Is Invalid. The Valid Options Are:"
630$ WRITE SYS$OUTPUT ""
631$ WRITE SYS$OUTPUT -
632 " """" : Compile with default (short) pointers."
633$ WRITE SYS$OUTPUT -
634 " 32 : Compile with 32-bit (short) pointers."
635$ WRITE SYS$OUTPUT -
636 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
637$ WRITE SYS$OUTPUT -
638 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
639$ WRITE SYS$OUTPUT -
640 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
641$ WRITE SYS$OUTPUT ""
642$!
643$! Time To EXIT.
644$!
645$ EXIT
646$!
647$ ENDIF
648$!
649$ ENDIF
650$!
651$! End The OPT_POINTER_SIZE Check.
652$!
653$ ENDIF
654$!
655$! Set basic C compiler /INCLUDE directories.
656$!
657$ CC_INCLUDES = "SYS$DISK:[],SYS$DISK:[.VENDOR_DEFNS]"
658$!
659$! Check To See If OPT_COMPILER Is Blank.
660$!
661$ IF (OPT_COMPILER.EQS."")
662$ THEN
663$!
664$! O.K., The User Didn't Specify A Compiler, Let's Try To
665$! Find Out Which One To Use.
666$!
667$! Check To See If We Have GNU C.
668$!
669$ IF (F$TRNLNM("GNU_CC").NES."")
670$ THEN
671$!
672$! Looks Like GNUC, Set To Use GNUC.
673$!
674$ OPT_COMPILER = "GNUC"
675$!
676$! Else...
677$!
678$ ELSE
679$!
680$! Check To See If We Have VAXC Or DECC.
681$!
682$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
683$ THEN
684$!
685$! Looks Like DECC, Set To Use DECC.
686$!
687$ OPT_COMPILER = "DECC"
688$!
689$! Else...
690$!
691$ ELSE
692$!
693$! Looks Like VAXC, Set To Use VAXC.
694$!
695$ OPT_COMPILER = "VAXC"
696$!
697$! End The VAXC Compiler Check.
698$!
699$ ENDIF
700$!
701$! End The DECC & VAXC Compiler Check.
702$!
703$ ENDIF
704$!
705$! End The Compiler Check.
706$!
707$ ENDIF
708$!
709$! Check To See If We Have A Option For OPT_TCPIP_LIB.
710$!
711$ IF (OPT_TCPIP_LIB.EQS."")
712$ THEN
713$!
714$! Find out what socket library we have available
715$!
716$ IF F$PARSE("SOCKETSHR:") .NES. ""
717$ THEN
718$!
719$! We have SOCKETSHR, and it is my opinion that it's the best to use.
720$!
721$ OPT_TCPIP_LIB = "SOCKETSHR"
722$!
723$! Tell the user
724$!
725$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
726$!
727$! Else, let's look for something else
728$!
729$ ELSE
730$!
731$! Like UCX (the reason to do this before Multinet is that the UCX
732$! emulation is easier to use...)
733$!
734$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
735 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
736 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
737$ THEN
738$!
739$! Last resort: a UCX or UCX-compatible library
740$!
741$ OPT_TCPIP_LIB = "UCX"
742$!
743$! Tell the user
744$!
745$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
746$!
747$! That was all...
748$!
749$ ENDIF
750$ ENDIF
751$ ENDIF
752$!
753$! Set Up Initial CC Definitions, Possibly With User Ones
754$!
755$ CCDEFS = "TCPIP_TYPE_''OPT_TCPIP_LIB',DSO_VMS"
756$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
757$ CCEXTRAFLAGS = ""
758$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
759$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX"
760$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
761 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
762$!
763$! Check To See If We Have A ZLIB Option.
764$!
765$ IF (ZLIB .NES. "")
766$ THEN
767$!
768$! Check for expected ZLIB files.
769$!
770$ err = 0
771$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
772$ if (f$search( file1) .eqs. "")
773$ then
774$ WRITE SYS$OUTPUT ""
775$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
776$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
777$ err = 1
778$ endif
779$ file1 = f$parse( "A.;", ZLIB)- "A.;"
780$!
781$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
782$ if (f$search( file2) .eqs. "")
783$ then
784$ if (err .eq. 0)
785$ then
786$ WRITE SYS$OUTPUT ""
787$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
788$ endif
789$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
790$ WRITE SYS$OUTPUT ""
791$ err = err+ 2
792$ endif
793$ if (err .eq. 1)
794$ then
795$ WRITE SYS$OUTPUT ""
796$ endif
797$!
798$ if (err .ne. 0)
799$ then
800$ EXIT
801$ endif
802$!
803$ CCDEFS = """ZLIB=1"", "+ CCDEFS
804$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
805$ ZLIB_LIB = ", ''file2' /library"
806$!
807$! Print info
808$!
809$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
810$!
811$! End The ZLIB Check.
812$!
813$ ENDIF
814$!
815$! Check To See If The User Entered A Valid Parameter.
816$!
817$ IF (OPT_COMPILER.EQS."VAXC").OR.(OPT_COMPILER.EQS."DECC").OR.(OPT_COMPILER.EQS."GNUC")
818$ THEN
819$!
820$! Check To See If The User Wanted DECC.
821$!
822$ IF (OPT_COMPILER.EQS."DECC")
823$ THEN
824$!
825$! Looks Like DECC, Set To Use DECC.
826$!
827$ COMPILER = "DECC"
828$!
829$! Tell The User We Are Using DECC.
830$!
831$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
832$!
833$! Use DECC...
834$!
835$ CC = "CC"
836$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
837 THEN CC = "CC/DECC"
838$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
839 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
840 " /INCLUDE=(''CC_INCLUDES') " + -
841 CCEXTRAFLAGS
842$!
843$! Define The Linker Options File Name.
844$!
845$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
846$!
847$! End DECC Check.
848$!
849$ ENDIF
850$!
851$! Check To See If We Are To Use VAXC.
852$!
853$ IF (OPT_COMPILER.EQS."VAXC")
854$ THEN
855$!
856$! Looks Like VAXC, Set To Use VAXC.
857$!
858$ COMPILER = "VAXC"
859$!
860$! Tell The User We Are Using VAX C.
861$!
862$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
863$!
864$! Compile Using VAXC.
865$!
866$ CC = "CC"
867$ IF ARCH.NES."VAX"
868$ THEN
869$ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
870$ EXIT
871$ ENDIF
872$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
873$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
874 "/INCLUDE=(''CC_INCLUDES')" + -
875 CCEXTRAFLAGS
876$ CCDEFS = """VAXC""," + CCDEFS
877$!
878$! Define <sys> As SYS$COMMON:[SYSLIB]
879$!
880$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
881$!
882$! Define The Linker Options File Name.
883$!
884$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
885$!
886$! End VAXC Check
887$!
888$ ENDIF
889$!
890$! Check To See If We Are To Use GNU C.
891$!
892$ IF (OPT_COMPILER.EQS."GNUC")
893$ THEN
894$!
895$! Looks Like GNUC, Set To Use GNUC.
896$!
897$ COMPILER = "GNUC"
898$!
899$! Tell The User We Are Using GNUC.
900$!
901$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
902$!
903$! Use GNU C...
904$!
905$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
906 "/INCLUDE=(''CC_INCLUDES')" + -
907 CCEXTRAFLAGS
908$!
909$! Define The Linker Options File Name.
910$!
911$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
912$!
913$! End The GNU C Check.
914$!
915$ ENDIF
916$!
917$! Set up default defines
918$!
919$ CCDEFS = """FLAT_INC=1""," + CCDEFS
920$!
921$! Finish up the definition of CC.
922$!
923$ IF COMPILER .EQS. "DECC"
924$ THEN
925$ IF CCDISABLEWARNINGS .NES. ""
926$ THEN
927$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
928$ ENDIF
929$ ELSE
930$ CCDISABLEWARNINGS = ""
931$ ENDIF
932$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
933$!
934$! Show user the result
935$!
936$ WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
937$!
938$! Else The User Entered An Invalid Argument.
939$!
940$ ELSE
941$!
942$! Tell The User We Don't Know What They Want.
943$!
944$ WRITE SYS$OUTPUT ""
945$ WRITE SYS$OUTPUT "The Option ",OPT_COMPILER," Is Invalid. The Valid Options Are:"
946$ WRITE SYS$OUTPUT ""
947$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
948$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
949$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
950$ WRITE SYS$OUTPUT ""
951$!
952$! Time To EXIT.
953$!
954$ EXIT
955$!
956$! End The Valid Argument Check.
957$!
958$ ENDIF
959$!
960$! Build a MACRO command for the architecture at hand
961$!
962$ IF ARCH .EQS. "VAX"
963$ THEN
964$ MACRO = "MACRO/''DEBUGGER'"
965$ ELSE
966$ MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE'"
967$ ENDIF
968$!
969$! Show user the result
970$!
971$ WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
972$!
973$! Time to check the contents, and to make sure we get the correct library.
974$!
975$ IF OPT_TCPIP_LIB.EQS."SOCKETSHR" .OR. OPT_TCPIP_LIB.EQS."MULTINET" -
976 .OR. OPT_TCPIP_LIB.EQS."UCX" .OR. OPT_TCPIP_LIB.EQS."TCPIP" -
977 .OR. OPT_TCPIP_LIB.EQS."NONE"
978$ THEN
979$!
980$! Check to see if SOCKETSHR was chosen
981$!
982$ IF OPT_TCPIP_LIB.EQS."SOCKETSHR"
983$ THEN
984$!
985$! Set the library to use SOCKETSHR
986$!
987$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
988$!
989$! Done with SOCKETSHR
990$!
991$ ENDIF
992$!
993$! Check to see if MULTINET was chosen
994$!
995$ IF OPT_TCPIP_LIB.EQS."MULTINET"
996$ THEN
997$!
998$! Set the library to use UCX emulation.
999$!
1000$ OPT_TCPIP_LIB = "UCX"
1001$!
1002$! Done with MULTINET
1003$!
1004$ ENDIF
1005$!
1006$! Check to see if UCX was chosen
1007$!
1008$ IF OPT_TCPIP_LIB.EQS."UCX"
1009$ THEN
1010$!
1011$! Set the library to use UCX.
1012$!
1013$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
1014$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1015$ THEN
1016$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
1017$ ELSE
1018$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1019 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
1020$ ENDIF
1021$!
1022$! Done with UCX
1023$!
1024$ ENDIF
1025$!
1026$! Check to see if TCPIP was chosen
1027$!
1028$ IF OPT_TCPIP_LIB.EQS."TCPIP"
1029$ THEN
1030$!
1031$! Set the library to use TCPIP (post UCX).
1032$!
1033$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1034$!
1035$! Done with TCPIP
1036$!
1037$ ENDIF
1038$!
1039$! Check to see if NONE was chosen
1040$!
1041$ IF OPT_TCPIP_LIB.EQS."NONE"
1042$ THEN
1043$!
1044$! Do not use a TCPIP library.
1045$!
1046$ TCPIP_LIB = ""
1047$!
1048$! Done with TCPIP
1049$!
1050$ ENDIF
1051$!
1052$! Print info
1053$!
1054$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
1055$!
1056$! Else The User Entered An Invalid Argument.
1057$!
1058$ ELSE
1059$!
1060$! Tell The User We Don't Know What They Want.
1061$!
1062$ WRITE SYS$OUTPUT ""
1063$ WRITE SYS$OUTPUT "The Option ",OPT_TCPIP_LIB," Is Invalid. The Valid Options Are:"
1064$ WRITE SYS$OUTPUT ""
1065$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1066$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1067$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1068$ WRITE SYS$OUTPUT ""
1069$!
1070$! Time To EXIT.
1071$!
1072$ EXIT
1073$!
1074$! Done with TCP/IP libraries
1075$!
1076$ ENDIF
1077$!
1078$! Time To RETURN...
1079$!
1080$ RETURN
1081$!
1082$ INITIALISE:
1083$!
1084$! Save old value of the logical name OPENSSL
1085$!
1086$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1087$!
1088$! Save directory information
1089$!
1090$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1091$ __HERE = F$EDIT(__HERE,"UPCASE")
1092$ __TOP = __HERE - "ENGINES]"
1093$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1094$!
1095$! Set up the logical name OPENSSL to point at the include directory
1096$!
1097$ DEFINE OPENSSL /NOLOG '__INCLUDE'
1098$!
1099$! Done
1100$!
1101$ RETURN
1102$!
1103$ CLEANUP:
1104$!
1105$! Restore the saved logical name OPENSSL, if it had a value.
1106$!
1107$ if (f$type( __SAVE_OPENSSL) .nes. "")
1108$ then
1109$ IF __SAVE_OPENSSL .EQS. ""
1110$ THEN
1111$ DEASSIGN OPENSSL
1112$ ELSE
1113$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
1114$ ENDIF
1115$ endif
1116$!
1117$! Close any open files.
1118$!
1119$ if (f$trnlnm( "objects", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
1120 close objects
1121$!
1122$! Done
1123$!
1124$ RETURN
1125$!
diff --git a/src/lib/libssl/src/engines/vendor_defns/hwcryptohook.h b/src/lib/libssl/src/engines/vendor_defns/hwcryptohook.h
index e62d1fb066..3e8dc7e2eb 100644
--- a/src/lib/libssl/src/engines/vendor_defns/hwcryptohook.h
+++ b/src/lib/libssl/src/engines/vendor_defns/hwcryptohook.h
@@ -65,7 +65,7 @@
65 * please contact nCipher. 65 * please contact nCipher.
66 * 66 *
67 * 67 *
68 * $Id: hwcryptohook.h,v 1.2 2010/10/01 22:58:58 djm Exp $ 68 * $Id: hwcryptohook.h,v 1.3 2014/04/13 15:25:34 miod Exp $
69 */ 69 */
70 70
71#ifndef HWCRYPTOHOOK_H 71#ifndef HWCRYPTOHOOK_H
diff --git a/src/lib/libssl/src/install.com b/src/lib/libssl/src/install.com
deleted file mode 100644
index 6a0ea2d4de..0000000000
--- a/src/lib/libssl/src/install.com
+++ /dev/null
@@ -1,136 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! P1 root of the directory tree
7$! P2 "64" for 64-bit pointers.
8$!
9$!
10$! Announce/identify.
11$!
12$ proc = f$environment( "procedure")
13$ write sys$output "@@@ "+ -
14 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
15$!
16$ def_orig = f$environment( "default")
17$ on error then goto tidy
18$ on control_c then goto tidy
19$!
20$ if (p1 .eqs. "")
21$ then
22$ write sys$output "First argument missing."
23$ write sys$output -
24 "It should be the directory where you want things installed."
25$ exit
26$ endif
27$!
28$ if (f$getsyi("cpu") .lt. 128)
29$ then
30$ arch = "VAX"
31$ else
32$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
33$ if (arch .eqs. "") then arch = "UNK"
34$ endif
35$!
36$ archd = arch
37$!
38$ if (p2 .nes. "")
39$ then
40$ if (p2 .eqs. "64")
41$ then
42$ archd = arch+ "_64"
43$ else
44$ if (p2 .nes. "32")
45$ then
46$ write sys$output "Second argument invalid."
47$ write sys$output "It should be "32", "64", or nothing."
48$ exit
49$ endif
50$ endif
51$ endif
52$!
53$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
54$ root_dev = f$parse( root, , , "device", "syntax_only")
55$ root_dir = f$parse( root, , , "directory", "syntax_only") -
56 - ".][000000" - "[000000." - "][" - "[" - "]"
57$ root = root_dev + "[" + root_dir
58$!
59$ define /nolog wrk_sslroot 'root'.] /trans=conc
60$ define /nolog wrk_sslcerts wrk_sslroot:[certs]
61$ define /nolog wrk_sslinclude wrk_sslroot:[include]
62$ define /nolog wrk_ssllib wrk_sslroot:[lib]
63$ define /nolog wrk_sslprivate wrk_sslroot:[private]
64$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
65$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
66$!
67$! Exhibit the destination directory.
68$!
69$ write sys$output " Installing to (WRK_SSLROOT) ="
70$ write sys$output " ''f$trnlnm( "wrk_sslroot")'"
71$ write sys$output ""
72$!
73$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
74 create /directory /log wrk_sslroot:[000000]
75$ if f$parse("wrk_sslxexe:") .eqs. "" then -
76 create /directory /log wrk_sslxexe:
77$ if f$parse("wrk_sslxlib:") .eqs. "" then -
78 create /directory /log wrk_sslxlib:
79$ if f$parse("wrk_ssllib:") .eqs. "" then -
80 create /directory /log wrk_ssllib:
81$ if f$parse("wrk_sslinclude:") .eqs. "" then -
82 create /directory /log wrk_sslinclude:
83$ if f$parse("wrk_sslcerts:") .eqs. "" then -
84 create /directory /log wrk_sslcerts:
85$ if f$parse("wrk_sslprivate:") .eqs. "" then -
86 create /directory /log wrk_sslprivate:
87$ if f$parse("wrk_sslroot:[VMS]") .EQS. "" THEN -
88 create /directory /log wrk_sslroot:[VMS]
89$!
90$ sdirs := CRYPTO, SSL, APPS, VMS !!!, RSAREF, TEST, TOOLS
91$ exheader := e_os2.h
92$!
93$ copy /protection = w:re 'exheader' wrk_sslinclude: /log
94$!
95$ i = 0
96$ loop_sdirs:
97$ d = f$edit( f$element(i, ",", sdirs), "trim")
98$ i = i + 1
99$ if d .eqs. "," then goto loop_sdirs_end
100$ write sys$output "Installing ", d, " files."
101$ set default [.'d']
102$ @ install-'d'.com 'root'] 'p2'
103$ set default 'def_orig'
104$ goto loop_sdirs
105$ loop_sdirs_end:
106$!
107$ write sys$output ""
108$ write sys$output " Installation done!"
109$ write sys$output ""
110$ if (f$search( root+ "...]*.*;-1") .nes. "")
111$ then
112$ write sys$output " You might want to purge ", root, "...]"
113$ write sys$output ""
114$ endif
115$!
116$ tidy:
117$!
118$ set default 'def_orig'
119$!
120$ call deass wrk_sslroot
121$ call deass wrk_sslcerts
122$ call deass wrk_sslinclude
123$ call deass wrk_ssllib
124$ call deass wrk_sslprivate
125$ call deass wrk_sslxexe
126$ call deass wrk_sslxlib
127$!
128$ exit
129$!
130$ deass: subroutine
131$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
132$ then
133$ deassign /process 'p1'
134$ endif
135$ endsubroutine
136$!
diff --git a/src/lib/libssl/src/makevms.com b/src/lib/libssl/src/makevms.com
deleted file mode 100644
index de1dbd9058..0000000000
--- a/src/lib/libssl/src/makevms.com
+++ /dev/null
@@ -1,1543 +0,0 @@
1$!
2$! MAKEVMS.COM
3$! Original Author: UNKNOWN
4$! Rewritten By: Robert Byer
5$! Vice-President
6$! A-Com Computing, Inc.
7$! byer@mail.all-net.net
8$!
9$! Changes by Richard Levitte <richard@levitte.org>
10$! Zoltan Arpadffy <zoli@polarhome.com>
11$!
12$! This procedure creates the SSL libraries of "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB"
13$! "[.xxx.EXE.SSL]LIBSSL.OLB"
14$! The "xxx" denotes the machine architecture of ALPHA, IA64 or VAX.
15$!
16$! This procedures accepts two command line options listed below.
17$!
18$! P1 specifies one of the following build options:
19$!
20$! ALL Just build "everything".
21$! CONFIG Just build the "[.CRYPTO._xxx]OPENSSLCONF.H" file.
22$! BUILDINF Just build the "[.CRYPTO._xxx]BUILDINF.H" file.
23$! SOFTLINKS Just fix the Unix soft links.
24$! BUILDALL Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
25$! CRYPTO Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
26$! CRYPTO/x Just build the x part of the
27$! "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
28$! SSL Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
29$! SSL_TASK Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program.
30$! TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
31$! APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
32$! ENGINES Just build the "[.xxx.EXE.ENGINES]" application programs for OpenSSL.
33$!
34$! P2, if defined, specifies the C pointer size. Ignored on VAX.
35$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
36$! Supported values are:
37$!
38$! "" Compile with default (/NOPOINTER_SIZE).
39$! 32 Compile with /POINTER_SIZE=32 (SHORT).
40$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV]).
41$! (Automatically select ARGV if compiler supports it.)
42$! 64= Compile with /POINTER_SIZE=64 (LONG).
43$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
44$!
45$! P3 specifies DEBUG or NODEBUG, to compile with or without debugging
46$! information.
47$!
48$! P4 specifies which compiler to try to compile under.
49$!
50$! VAXC For VAX C.
51$! DECC For DEC C.
52$! GNUC For GNU C.
53$! LINK To only link the programs from existing object files.
54$! (not yet implemented)
55$!
56$! If you don't specify a compiler, it will try to determine which
57$! "C" compiler to use.
58$!
59$! P5, if defined, sets a TCP/IP library to use, through one of the following
60$! keywords:
61$!
62$! UCX for UCX or UCX emulation
63$! TCPIP for TCP/IP Services or TCP/IP Services emulation
64$! (this is prefered over UCX)
65$! SOCKETSHR for SOCKETSHR+NETLIB
66$! NONE to avoid specifying which TCP/IP implementation to
67$! use at build time (this works with DEC C). This is
68$! the default.
69$!
70$! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up).
71$!
72$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
73$! libz.olb) may be found. Optionally, a non-default object library
74$! name may be included ("dev:[dir]libz_64.olb", for example).
75$!
76$!
77$! Announce/identify.
78$!
79$ proc = f$environment( "procedure")
80$ write sys$output "@@@ "+ -
81 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
82$!
83$ DEF_ORIG = F$ENVIRONMENT( "DEFAULT")
84$ ON ERROR THEN GOTO TIDY
85$ ON CONTROL_C THEN GOTO TIDY
86$!
87$! Check if we're in a batch job, and make sure we get to
88$! the directory this script is in
89$!
90$ IF F$MODE() .EQS. "BATCH"
91$ THEN
92$ COMNAME=F$ENVIRONMENT("PROCEDURE")
93$ COMPATH=F$PARSE("A.;",COMNAME) - "A.;"
94$ SET DEF 'COMPATH'
95$ ENDIF
96$!
97$! Check What Architecture We Are Using.
98$!
99$ IF (F$GETSYI("CPU").LT.128)
100$ THEN
101$!
102$! The Architecture Is VAX.
103$!
104$ ARCH = "VAX"
105$!
106$! Else...
107$!
108$ ELSE
109$!
110$! The Architecture Is Alpha, IA64 or whatever comes in the future.
111$!
112$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
113$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
114$!
115$! End The Architecture Check.
116$!
117$ ENDIF
118$!
119$ ARCHD = ARCH
120$ LIB32 = "32"
121$ POINTER_SIZE = ""
122$!
123$! Get VMS version.
124$!
125$ VMS_VERSION = f$edit( f$getsyi( "VERSION"), "TRIM")
126$!
127$! Check To Make Sure We Have Valid Command Line Parameters.
128$!
129$ GOSUB CHECK_OPTIONS
130$!
131$! Check To See What We Are To Do.
132$!
133$ IF (BUILDCOMMAND.EQS."ALL")
134$ THEN
135$!
136$! Start with building the OpenSSL configuration file.
137$!
138$ GOSUB CONFIG
139$!
140$! Create The "BUILDINF.H" Include File.
141$!
142$ GOSUB BUILDINF
143$!
144$! Fix The Unix Softlinks.
145$!
146$ GOSUB SOFTLINKS
147$!
148$ ENDIF
149$!
150$ IF (BUILDCOMMAND.EQS."ALL".OR.BUILDCOMMAND.EQS."BUILDALL")
151$ THEN
152$!
153$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
154$!
155$ GOSUB CRYPTO
156$!
157$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
158$!
159$ GOSUB SSL
160$!
161$! Build The [.xxx.EXE.SSL]SSL_TASK.EXE DECNet SSL Engine.
162$!
163$ GOSUB SSL_TASK
164$!
165$! Build The [.xxx.EXE.TEST] OpenSSL Test Utilities.
166$!
167$ GOSUB TEST
168$!
169$! Build The [.xxx.EXE.APPS] OpenSSL Application Utilities.
170$!
171$ GOSUB APPS
172$!
173$! Build The [.xxx.EXE.ENGINES] OpenSSL Shareable Engines.
174$!
175$ GOSUB ENGINES
176$!
177$! Else...
178$!
179$ ELSE
180$!
181$! Build Just What The User Wants Us To Build.
182$!
183$ GOSUB 'BUILDCOMMAND'
184$!
185$ ENDIF
186$!
187$! Time To EXIT.
188$!
189$ GOTO TIDY
190$!
191$! Rebuild The [.CRYPTO._xxx]OPENSSLCONF.H" file.
192$!
193$ CONFIG:
194$!
195$! Tell The User We Are Creating The [.CRYPTO._xxx]OPENSSLCONF.H File.
196$!
197$ WRITE SYS$OUTPUT "Creating [.CRYPTO.''ARCHD']OPENSSLCONF.H Include File."
198$!
199$! First, make sure the directory exists.
200$!
201$ IF F$PARSE("SYS$DISK:[.CRYPTO.''ARCHD']") .EQS. "" THEN -
202 CREATE/DIRECTORY SYS$DISK:[.CRYPTO.'ARCHD']
203$!
204$! Different tar/UnZip versions/option may have named the file differently
205$ IF F$SEARCH("[.crypto]opensslconf.h_in") .NES. ""
206$ THEN
207$ OPENSSLCONF_H_IN = "[.crypto]opensslconf.h_in"
208$ ELSE
209$ IF F$SEARCH( "[.crypto]opensslconf_h.in") .NES. ""
210$ THEN
211$ OPENSSLCONF_H_IN = "[.crypto]opensslconf_h.in"
212$ ELSE
213$ ! For ODS-5
214$ IF F$SEARCH( "[.crypto]opensslconf.h.in") .NES. ""
215$ THEN
216$ OPENSSLCONF_H_IN = "[.crypto]opensslconf.h.in"
217$ ELSE
218$ WRITE SYS$ERROR "Couldn't find a [.crypto]opensslconf.h.in. Exiting!"
219$ $STATUS = %X00018294 ! "%RMS-F-FNF, file not found".
220$ GOTO TIDY
221$ ENDIF
222$ ENDIF
223$ ENDIF
224$!
225$! Create The [.CRYPTO._xxx]OPENSSLCONF.H File.
226$! Make sure it has the right format.
227$!
228$ OSCH_NAME = "SYS$DISK:[.CRYPTO.''ARCHD']OPENSSLCONF.H"
229$ CREATE /FDL=SYS$INPUT: 'OSCH_NAME'
230RECORD
231 FORMAT stream_lf
232$ OPEN /APPEND H_FILE 'OSCH_NAME'
233$!
234$! Write The [.CRYPTO._xxx]OPENSSLCONF.H File.
235$!
236$ WRITE H_FILE "/* This file was automatically built using makevms.com */"
237$ WRITE H_FILE "/* and ''OPENSSLCONF_H_IN' */"
238$!
239$! Write a few macros that indicate how this system was built.
240$!
241$ WRITE H_FILE ""
242$ WRITE H_FILE "#ifndef OPENSSL_SYS_VMS"
243$ WRITE H_FILE "# define OPENSSL_SYS_VMS"
244$ WRITE H_FILE "#endif"
245$
246$! One of the best way to figure out what the list should be is to do
247$! the following on a Unix system:
248$! grep OPENSSL_NO_ crypto/*/*.h ssl/*.h engines/*.h engines/*/*.h|grep ':# *if'|sed -e 's/^.*def //'|sort|uniq
249$! For that reason, the list will also always end up in alphabetical order
250$ CONFIG_LOGICALS := AES,-
251 ASM,INLINE_ASM,-
252 BF,-
253 BIO,-
254 BUFFER,-
255 BUF_FREELISTS,-
256 CAMELLIA,-
257 CAST,-
258 CMS,-
259 COMP,-
260 DEPRECATED,-
261 DES,-
262 DGRAM,-
263 DH,-
264 DSA,-
265 EC,-
266 EC2M,-
267 ECDH,-
268 ECDSA,-
269 EC_NISTP_64_GCC_128,-
270 ENGINE,-
271 ERR,-
272 EVP,-
273 FP_API,-
274 GMP,-
275 GOST,-
276 HASH_COMP,-
277 HMAC,-
278 IDEA,-
279 JPAKE,-
280 KRB5,-
281 LHASH,-
282 MD2,-
283 MD4,-
284 MD5,-
285 MDC2,-
286 OCSP,-
287 PSK,-
288 RC2,-
289 RC4,-
290 RC5,-
291 RFC3779,-
292 RIPEMD,-
293 RSA,-
294 SEED,-
295 SHA,-
296 SHA0,-
297 SHA1,-
298 SHA256,-
299 SHA512,-
300 SOCK,-
301 SRP,-
302 SSL2,-
303 SSL_INTERN,-
304 STACK,-
305 STATIC_ENGINE,-
306 STDIO,-
307 STORE,-
308 TLSEXT,-
309 WHIRLPOOL,-
310 X509
311$! Add a few that we know about
312$ CONFIG_LOGICALS := 'CONFIG_LOGICALS',-
313 THREADS
314$! The following rules, which dictate how some algorithm choices affect
315$! others, are picked from Configure.
316$! Quick syntax:
317$! list = item[ ; list]
318$! item = algos / dependents
319$! algos = algo [, algos]
320$! dependents = dependent [, dependents]
321$! When a list of algos is specified in one item, it means that they must
322$! all be disabled for the rule to apply.
323$! When a list of dependents is specified in one item, it means that they
324$! will all be disabled if the rule applies.
325$! Rules are checked sequentially. If a rule disables an algorithm, it will
326$! affect all following rules that depend on that algorithm being disabled.
327$! To force something to be enabled or disabled, have no algorithms in the
328$! algos part.
329$ CONFIG_DISABLE_RULES := RIJNDAEL/AES;-
330 DES/MDC2;-
331 EC/ECDSA,ECDH;-
332 MD5/SSL2,SSL3,TLS1;-
333 SHA/SSL3,TLS1;-
334 RSA/SSL2;-
335 RSA,DSA/SSL2;-
336 DH/SSL3,TLS1;-
337 TLS1/TLSEXT;-
338 EC/GOST;-
339 DSA/GOST;-
340 DH/GOST;-
341 /STATIC_ENGINE;-
342 /KRB5;-
343 /EC_NISTP_64_GCC_128
344$ CONFIG_ENABLE_RULES := ZLIB_DYNAMIC/ZLIB;-
345 /THREADS
346$
347$! Architecture specific rule addtions
348$ IF ARCH .EQS. "VAX"
349$ THEN
350$ ! Disable algorithms that require 64-bit integers in C
351$ CONFIG_DISABLE_RULES = CONFIG_DISABLE_RULES + -
352 ";/GOST" + -
353 ";/WHIRLPOOL"
354$ ENDIF
355$
356$ CONFIG_LOG_I = 0
357$ CONFIG_LOG_LOOP1:
358$ CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM")
359$ CONFIG_LOG_I = CONFIG_LOG_I + 1
360$ IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP1
361$ IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP1_END
362$ IF F$TRNLNM("OPENSSL_NO_"+CONFIG_LOG_E)
363$ THEN
364$ CONFIG_DISABLED_'CONFIG_LOG_E' := YES
365$ CONFIG_ENABLED_'CONFIG_LOG_E' := NO
366$ CONFIG_CHANGED_'CONFIG_LOG_E' := YES
367$ ELSE
368$ CONFIG_DISABLED_'CONFIG_LOG_E' := NO
369$ CONFIG_ENABLED_'CONFIG_LOG_E' := YES
370$ ! Because all algorithms are assumed enabled by default
371$ CONFIG_CHANGED_'CONFIG_LOG_E' := NO
372$ ENDIF
373$ GOTO CONFIG_LOG_LOOP1
374$ CONFIG_LOG_LOOP1_END:
375$
376$! Apply cascading disable rules
377$ CONFIG_DISABLE_I = 0
378$ CONFIG_DISABLE_LOOP0:
379$ CONFIG_DISABLE_E = F$EDIT(F$ELEMENT(CONFIG_DISABLE_I,";", -
380 CONFIG_DISABLE_RULES),"TRIM")
381$ CONFIG_DISABLE_I = CONFIG_DISABLE_I + 1
382$ IF CONFIG_DISABLE_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP0
383$ IF CONFIG_DISABLE_E .EQS. ";" THEN GOTO CONFIG_DISABLE_LOOP0_END
384$
385$ CONFIG_DISABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_DISABLE_E),"TRIM")
386$ CONFIG_DISABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_DISABLE_E),"TRIM")
387$ TO_DISABLE := YES
388$ CONFIG_ALGO_I = 0
389$ CONFIG_DISABLE_LOOP1:
390$ CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",", -
391 CONFIG_DISABLE_ALGOS),"TRIM")
392$ CONFIG_ALGO_I = CONFIG_ALGO_I + 1
393$ IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP1
394$ IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP1_END
395$ IF F$TYPE(CONFIG_DISABLED_'CONFIG_ALGO_E') .EQS. ""
396$ THEN
397$ TO_DISABLE := NO
398$ ELSE
399$ IF .NOT. CONFIG_DISABLED_'CONFIG_ALGO_E' THEN TO_DISABLE := NO
400$ ENDIF
401$ GOTO CONFIG_DISABLE_LOOP1
402$ CONFIG_DISABLE_LOOP1_END:
403$
404$ IF TO_DISABLE
405$ THEN
406$ CONFIG_DEPENDENT_I = 0
407$ CONFIG_DISABLE_LOOP2:
408$ CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",", -
409 CONFIG_DISABLE_DEPENDENTS),"TRIM")
410$ CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1
411$ IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_DISABLE_LOOP2
412$ IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_DISABLE_LOOP2_END
413$ CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := YES
414$ CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := NO
415$ ! Better not to assume defaults at this point...
416$ CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES
417$ WRITE SYS$ERROR -
418 "''CONFIG_DEPENDENT_E' disabled by rule ''CONFIG_DISABLE_E'"
419$ GOTO CONFIG_DISABLE_LOOP2
420$ CONFIG_DISABLE_LOOP2_END:
421$ ENDIF
422$ GOTO CONFIG_DISABLE_LOOP0
423$ CONFIG_DISABLE_LOOP0_END:
424$
425$! Apply cascading enable rules
426$ CONFIG_ENABLE_I = 0
427$ CONFIG_ENABLE_LOOP0:
428$ CONFIG_ENABLE_E = F$EDIT(F$ELEMENT(CONFIG_ENABLE_I,";", -
429 CONFIG_ENABLE_RULES),"TRIM")
430$ CONFIG_ENABLE_I = CONFIG_ENABLE_I + 1
431$ IF CONFIG_ENABLE_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP0
432$ IF CONFIG_ENABLE_E .EQS. ";" THEN GOTO CONFIG_ENABLE_LOOP0_END
433$
434$ CONFIG_ENABLE_ALGOS = F$EDIT(F$ELEMENT(0,"/",CONFIG_ENABLE_E),"TRIM")
435$ CONFIG_ENABLE_DEPENDENTS = F$EDIT(F$ELEMENT(1,"/",CONFIG_ENABLE_E),"TRIM")
436$ TO_ENABLE := YES
437$ CONFIG_ALGO_I = 0
438$ CONFIG_ENABLE_LOOP1:
439$ CONFIG_ALGO_E = F$EDIT(F$ELEMENT(CONFIG_ALGO_I,",", -
440 CONFIG_ENABLE_ALGOS),"TRIM")
441$ CONFIG_ALGO_I = CONFIG_ALGO_I + 1
442$ IF CONFIG_ALGO_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP1
443$ IF CONFIG_ALGO_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP1_END
444$ IF F$TYPE(CONFIG_ENABLED_'CONFIG_ALGO_E') .EQS. ""
445$ THEN
446$ TO_ENABLE := NO
447$ ELSE
448$ IF .NOT. CONFIG_ENABLED_'CONFIG_ALGO_E' THEN TO_ENABLE := NO
449$ ENDIF
450$ GOTO CONFIG_ENABLE_LOOP1
451$ CONFIG_ENABLE_LOOP1_END:
452$
453$ IF TO_ENABLE
454$ THEN
455$ CONFIG_DEPENDENT_I = 0
456$ CONFIG_ENABLE_LOOP2:
457$ CONFIG_DEPENDENT_E = F$EDIT(F$ELEMENT(CONFIG_DEPENDENT_I,",", -
458 CONFIG_ENABLE_DEPENDENTS),"TRIM")
459$ CONFIG_DEPENDENT_I = CONFIG_DEPENDENT_I + 1
460$ IF CONFIG_DEPENDENT_E .EQS. "" THEN GOTO CONFIG_ENABLE_LOOP2
461$ IF CONFIG_DEPENDENT_E .EQS. "," THEN GOTO CONFIG_ENABLE_LOOP2_END
462$ CONFIG_DISABLED_'CONFIG_DEPENDENT_E' := NO
463$ CONFIG_ENABLED_'CONFIG_DEPENDENT_E' := YES
464$ ! Better not to assume defaults at this point...
465$ CONFIG_CHANGED_'CONFIG_DEPENDENT_E' := YES
466$ WRITE SYS$ERROR -
467 "''CONFIG_DEPENDENT_E' enabled by rule ''CONFIG_ENABLE_E'"
468$ GOTO CONFIG_ENABLE_LOOP2
469$ CONFIG_ENABLE_LOOP2_END:
470$ ENDIF
471$ GOTO CONFIG_ENABLE_LOOP0
472$ CONFIG_ENABLE_LOOP0_END:
473$
474$! Write to the configuration
475$ CONFIG_LOG_I = 0
476$ CONFIG_LOG_LOOP2:
477$ CONFIG_LOG_E = F$EDIT(F$ELEMENT(CONFIG_LOG_I,",",CONFIG_LOGICALS),"TRIM")
478$ CONFIG_LOG_I = CONFIG_LOG_I + 1
479$ IF CONFIG_LOG_E .EQS. "" THEN GOTO CONFIG_LOG_LOOP2
480$ IF CONFIG_LOG_E .EQS. "," THEN GOTO CONFIG_LOG_LOOP2_END
481$ IF CONFIG_CHANGED_'CONFIG_LOG_E'
482$ THEN
483$ IF CONFIG_DISABLED_'CONFIG_LOG_E'
484$ THEN
485$ WRITE H_FILE "#ifndef OPENSSL_NO_",CONFIG_LOG_E
486$ WRITE H_FILE "# define OPENSSL_NO_",CONFIG_LOG_E
487$ WRITE H_FILE "#endif"
488$ ELSE
489$ WRITE H_FILE "#ifndef OPENSSL_",CONFIG_LOG_E
490$ WRITE H_FILE "# define OPENSSL_",CONFIG_LOG_E
491$ WRITE H_FILE "#endif"
492$ ENDIF
493$ ENDIF
494$ GOTO CONFIG_LOG_LOOP2
495$ CONFIG_LOG_LOOP2_END:
496$!
497$ WRITE H_FILE ""
498$ WRITE H_FILE "/* 2011-02-23 SMS."
499$ WRITE H_FILE " * On VMS (V8.3), setvbuf() doesn't support a 64-bit"
500$ WRITE H_FILE " * ""in"" pointer, and the help says:"
501$ WRITE H_FILE " * Please note that the previously documented"
502$ WRITE H_FILE " * value _IONBF is not supported."
503$ WRITE H_FILE " * So, skip it on VMS."
504$ WRITE H_FILE " */"
505$ WRITE H_FILE "#define OPENSSL_NO_SETVBUF_IONBF"
506$ WRITE H_FILE "/* STCP support comes with TCPIP 5.7 ECO 2 "
507$ WRITE H_FILE " * enable on newer systems / 2012-02-24 arpadffy */"
508$ WRITE H_FILE "#define OPENSSL_NO_SCTP"
509$ WRITE H_FILE ""
510$!
511$! Add in the common "crypto/opensslconf.h.in".
512$!
513$ TYPE 'OPENSSLCONF_H_IN' /OUTPUT=H_FILE:
514$!
515$ IF ARCH .NES. "VAX"
516$ THEN
517$!
518$! Write the non-VAX specific data
519$!
520$ WRITE H_FILE "#if defined(HEADER_RC4_H)"
521$ WRITE H_FILE "#undef RC4_INT"
522$ WRITE H_FILE "#define RC4_INT unsigned int"
523$ WRITE H_FILE "#undef RC4_CHUNK"
524$ WRITE H_FILE "#define RC4_CHUNK unsigned long long"
525$ WRITE H_FILE "#endif"
526$!
527$ WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
528$ WRITE H_FILE "#undef DES_LONG"
529$ WRITE H_FILE "#define DES_LONG unsigned int"
530$ WRITE H_FILE "#undef DES_PTR"
531$ WRITE H_FILE "#define DES_PTR"
532$ WRITE H_FILE "#undef DES_RISC1"
533$ WRITE H_FILE "#undef DES_RISC2"
534$ WRITE H_FILE "#define DES_RISC1"
535$ WRITE H_FILE "#undef DES_UNROLL"
536$ WRITE H_FILE "#define DES_UNROLL"
537$ WRITE H_FILE "#endif"
538$!
539$ WRITE H_FILE "#if defined(HEADER_BN_H)"
540$ WRITE H_FILE "#undef BN_LLONG" ! Never define with SIXTY_FOUR_BIT
541$ WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
542$ WRITE H_FILE "#undef SIXTY_FOUR_BIT"
543$ WRITE H_FILE "#define SIXTY_FOUR_BIT"
544$ WRITE H_FILE "#undef THIRTY_TWO_BIT"
545$ WRITE H_FILE "#undef SIXTEEN_BIT"
546$ WRITE H_FILE "#undef EIGHT_BIT"
547$ WRITE H_FILE "#endif"
548$
549$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION"
550$!
551$! Else...
552$!
553$ ELSE
554$!
555$! Write the VAX specific data
556$!
557$ WRITE H_FILE "#if defined(HEADER_RC4_H)"
558$ WRITE H_FILE "#undef RC4_INT"
559$ WRITE H_FILE "#define RC4_INT unsigned char"
560$ WRITE H_FILE "#undef RC4_CHUNK"
561$ WRITE H_FILE "#define RC4_CHUNK unsigned long"
562$ WRITE H_FILE "#endif"
563$!
564$ WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
565$ WRITE H_FILE "#undef DES_LONG"
566$ WRITE H_FILE "#define DES_LONG unsigned long"
567$ WRITE H_FILE "#undef DES_PTR"
568$ WRITE H_FILE "#define DES_PTR"
569$ WRITE H_FILE "#undef DES_RISC1"
570$ WRITE H_FILE "#undef DES_RISC2"
571$ WRITE H_FILE "#undef DES_UNROLL"
572$ WRITE H_FILE "#endif"
573$!
574$ WRITE H_FILE "#if defined(HEADER_BN_H)"
575$ WRITE H_FILE "#undef BN_LLONG" ! VAX C/DEC C doesn't have long long
576$ WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
577$ WRITE H_FILE "#undef SIXTY_FOUR_BIT"
578$ WRITE H_FILE "#undef THIRTY_TWO_BIT"
579$ WRITE H_FILE "#define THIRTY_TWO_BIT"
580$ WRITE H_FILE "#undef SIXTEEN_BIT"
581$ WRITE H_FILE "#undef EIGHT_BIT"
582$ WRITE H_FILE "#endif"
583$!
584$! Oddly enough, the following symbol is tested in crypto/sha/sha512.c
585$! before sha.h gets included (and HEADER_SHA_H defined), so we will not
586$! protect this one...
587$ WRITE H_FILE "#undef OPENSSL_NO_SHA512"
588$ WRITE H_FILE "#define OPENSSL_NO_SHA512"
589$!
590$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION"
591$ WRITE H_FILE "#define OPENSSL_EXPORT_VAR_AS_FUNCTION"
592$!
593$! End
594$!
595$ ENDIF
596$!
597$! Close the [.CRYPTO._xxx]OPENSSLCONF.H file
598$!
599$ CLOSE H_FILE
600$!
601$! Purge The [.CRYPTO._xxx]OPENSSLCONF.H file
602$!
603$ PURGE SYS$DISK:[.CRYPTO.'ARCHD']OPENSSLCONF.H
604$!
605$! That's All, Time To RETURN.
606$!
607$ RETURN
608$!
609$! Rebuild The "[.CRYPTO._xxx]BUILDINF.H" file.
610$!
611$ BUILDINF:
612$!
613$! Tell The User We Are Creating The [.CRYPTO._xxx]BUILDINF.H File.
614$!
615$ WRITE SYS$OUTPUT "Creating [.CRYPTO.''ARCHD']BUILDINF.H Include File."
616$!
617$! Create The [.CRYPTO._xxx]BUILDINF.H File.
618$!
619$ BIH_NAME = "SYS$DISK:[.CRYPTO.''ARCHD']BUILDINF.H"
620$ CREATE /FDL=SYS$INPUT: 'BIH_NAME'
621RECORD
622 FORMAT stream_lf
623$!
624$ OPEN /APPEND H_FILE 'bih_name'
625$!
626$! Get The Current Date & Time.
627$!
628$ TIME = F$TIME()
629$!
630$! Write The [.CRYPTO._xxx]BUILDINF.H File.
631$!
632$ CFLAGS = ""
633$ if (POINTER_SIZE .nes. "")
634$ then
635$ CFLAGS = CFLAGS+ "/POINTER_SIZE=''POINTER_SIZE'"
636$ endif
637$ if (ZLIB .nes. "")
638$ then
639$ if (CFLAGS .nes. "") then CFLAGS = CFLAGS+ " "
640$ CFLAGS = CFLAGS+ "/DEFINE=ZLIB"
641$ endif
642$!
643$ WRITE H_FILE "#define CFLAGS ""''CFLAGS'"""
644$ WRITE H_FILE "#define PLATFORM ""VMS ''ARCHD' ''VMS_VERSION'"""
645$ WRITE H_FILE "#define DATE ""''TIME'"" "
646$!
647$! Close The [.CRYPTO._xxx]BUILDINF.H File.
648$!
649$ CLOSE H_FILE
650$!
651$! Purge The [.CRYPTO._xxx]BUILDINF.H File.
652$!
653$ PURGE SYS$DISK:[.CRYPTO.'ARCHD']BUILDINF.H
654$!
655$! Delete [.CRYPTO]BUILDINF.H File, as there might be some residue from Unix.
656$!
657$ IF F$SEARCH("[.CRYPTO]BUILDINF.H") .NES. "" THEN -
658 DELETE SYS$DISK:[.CRYPTO]BUILDINF.H;*
659$!
660$! That's All, Time To RETURN.
661$!
662$ RETURN
663$!
664$! Copy a lot of files around.
665$!
666$ SOFTLINKS:
667$!
668$!!!! Tell The User We Are Partly Rebuilding The [.APPS] Directory.
669$!!!!
670$!!! WRITE SYS$OUTPUT "Rebuilding The '[.APPS]MD4.C' File."
671$!!!!
672$!!! DELETE SYS$DISK:[.APPS]MD4.C;*
673$!!!!
674$!!!! Copy MD4.C from [.CRYPTO.MD4] into [.APPS]
675$!!!!
676$!!! COPY SYS$DISK:[.CRYPTO.MD4]MD4.C SYS$DISK:[.APPS]
677$!
678$! Ensure that the [.include.openssl] directory contains a full set of
679$! real header files. The distribution kit may have left real or fake
680$! symlinks there. Rather than think about what's there, simply delete
681$! the destination files (fake or real symlinks) before copying the real
682$! header files in. (Copying a real header file onto a real symlink
683$! merely duplicates the real header file at its source.)
684$!
685$! Tell The User We Are Rebuilding The [.include.openssl] Directory.
686$!
687$ WRITE SYS$OUTPUT "Rebuilding The '[.include.openssl]' Directory."
688$!
689$! First, make sure the directory exists. If it did exist, delete all
690$! the existing header files (or fake or real symlinks).
691$!
692$ if f$parse( "sys$disk:[.include.openssl]") .eqs. ""
693$ then
694$ create /directory sys$disk:[.include.openssl]
695$ else
696$ delete sys$disk:[.include.openssl]*.h;*
697$ endif
698$!
699$! Copy All The ".H" Files From The Main Directory.
700$!
701$ EXHEADER := e_os2.h
702$ copy 'exheader' sys$disk:[.include.openssl]
703$!
704$! Copy All The ".H" Files From The [.CRYPTO] Directory Tree.
705$!
706$ SDIRS := , -
707 'ARCHD', -
708 OBJECTS, -
709 MD2, MD4, MD5, SHA, MDC2, HMAC, RIPEMD, WHRLPOOL, -
710 DES, AES, RC2, RC4, RC5, IDEA, BF, CAST, CAMELLIA, SEED, MODES, -
711 BN, EC, RSA, DSA, ECDSA, DH, ECDH, DSO, ENGINE, -
712 BUFFER, BIO, STACK, LHASH, RAND, ERR, -
713 EVP, ASN1, PEM, X509, X509V3, CONF, TXT_DB, PKCS7, PKCS12, -
714 COMP, OCSP, UI, KRB5, -
715 CMS, PQUEUE, TS, JPAKE, SRP, STORE, CMAC
716$!
717$ EXHEADER_ := crypto.h, opensslv.h, ebcdic.h, symhacks.h, ossl_typ.h
718$ EXHEADER_'ARCHD' := opensslconf.h
719$ EXHEADER_OBJECTS := objects.h, obj_mac.h
720$ EXHEADER_MD2 := md2.h
721$ EXHEADER_MD4 := md4.h
722$ EXHEADER_MD5 := md5.h
723$ EXHEADER_SHA := sha.h
724$ EXHEADER_MDC2 := mdc2.h
725$ EXHEADER_HMAC := hmac.h
726$ EXHEADER_RIPEMD := ripemd.h
727$ EXHEADER_WHRLPOOL := whrlpool.h
728$ EXHEADER_DES := des.h, des_old.h
729$ EXHEADER_AES := aes.h
730$ EXHEADER_RC2 := rc2.h
731$ EXHEADER_RC4 := rc4.h
732$ EXHEADER_RC5 := rc5.h
733$ EXHEADER_IDEA := idea.h
734$ EXHEADER_BF := blowfish.h
735$ EXHEADER_CAST := cast.h
736$ EXHEADER_CAMELLIA := camellia.h
737$ EXHEADER_SEED := seed.h
738$ EXHEADER_MODES := modes.h
739$ EXHEADER_BN := bn.h
740$ EXHEADER_EC := ec.h
741$ EXHEADER_RSA := rsa.h
742$ EXHEADER_DSA := dsa.h
743$ EXHEADER_ECDSA := ecdsa.h
744$ EXHEADER_DH := dh.h
745$ EXHEADER_ECDH := ecdh.h
746$ EXHEADER_DSO := dso.h
747$ EXHEADER_ENGINE := engine.h
748$ EXHEADER_BUFFER := buffer.h
749$ EXHEADER_BIO := bio.h
750$ EXHEADER_STACK := stack.h, safestack.h
751$ EXHEADER_LHASH := lhash.h
752$ EXHEADER_RAND := rand.h
753$ EXHEADER_ERR := err.h
754$ EXHEADER_EVP := evp.h
755$ EXHEADER_ASN1 := asn1.h, asn1_mac.h, asn1t.h
756$ EXHEADER_PEM := pem.h, pem2.h
757$ EXHEADER_X509 := x509.h, x509_vfy.h
758$ EXHEADER_X509V3 := x509v3.h
759$ EXHEADER_CONF := conf.h, conf_api.h
760$ EXHEADER_TXT_DB := txt_db.h
761$ EXHEADER_PKCS7 := pkcs7.h
762$ EXHEADER_PKCS12 := pkcs12.h
763$ EXHEADER_COMP := comp.h
764$ EXHEADER_OCSP := ocsp.h
765$ EXHEADER_UI := ui.h, ui_compat.h
766$ EXHEADER_KRB5 := krb5_asn.h
767$ EXHEADER_CMS := cms.h
768$ EXHEADER_PQUEUE := pqueue.h
769$ EXHEADER_TS := ts.h
770$ EXHEADER_JPAKE := jpake.h
771$ EXHEADER_SRP := srp.h
772$!!! EXHEADER_STORE := store.h, str_compat.h
773$ EXHEADER_STORE := store.h
774$ EXHEADER_CMAC := cmac.h
775$!
776$ i = 0
777$ loop_sdirs:
778$ sdir = f$edit( f$element( i, ",", sdirs), "trim")
779$ i = i + 1
780$ if (sdir .eqs. ",") then goto loop_sdirs_end
781$ hdr_list = exheader_'sdir'
782$ if (sdir .nes. "") then sdir = "."+ sdir
783$ copy [.crypto'sdir']'hdr_list' sys$disk:[.include.openssl]
784$ goto loop_sdirs
785$ loop_sdirs_end:
786$!
787$! Copy All The ".H" Files From The [.SSL] Directory.
788$!
789$! (keep these in the same order as ssl/Makefile)
790$ EXHEADER := ssl.h, ssl2.h, ssl3.h, ssl23.h, tls1.h, dtls1.h, kssl.h, srtp.h
791$ copy sys$disk:[.ssl]'exheader' sys$disk:[.include.openssl]
792$!
793$! Purge the [.include.openssl] header files.
794$!
795$ purge sys$disk:[.include.openssl]*.h
796$!
797$! That's All, Time To RETURN.
798$!
799$ RETURN
800$!
801$! Build The "[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO''LIB32'.OLB" Library.
802$!
803$ CRYPTO:
804$!
805$! Tell The User What We Are Doing.
806$!
807$ WRITE SYS$OUTPUT ""
808$ WRITE SYS$OUTPUT -
809 "Building The [.",ARCHD,".EXE.CRYPTO]SSL_LIBCRYPTO''LIB32'.OLB Library."
810$!
811$! Go To The [.CRYPTO] Directory.
812$!
813$ SET DEFAULT SYS$DISK:[.CRYPTO]
814$!
815$! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
816$!
817$ @CRYPTO-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
818 "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'"
819$!
820$! Build The [.xxx.EXE.CRYPTO]*.EXE Test Applications.
821$!
822$ @CRYPTO-LIB APPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
823 "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'"
824$!
825$! Go Back To The Main Directory.
826$!
827$ SET DEFAULT [-]
828$!
829$! Time To RETURN.
830$!
831$ RETURN
832$!
833$! Build The "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library.
834$!
835$ SSL:
836$!
837$! Tell The User What We Are Doing.
838$!
839$ WRITE SYS$OUTPUT ""
840$ WRITE SYS$OUTPUT -
841 "Building The [.",ARCHD,".EXE.SSL]SSL_LIBSSL''LIB32'.OLB Library."
842$!
843$! Go To The [.SSL] Directory.
844$!
845$ SET DEFAULT SYS$DISK:[.SSL]
846$!
847$! Build The [.xxx.EXE.SSL]LIBSSL.OLB Library.
848$!
849$ @SSL-LIB LIBRARY 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
850 "''ISSEVEN'" "''POINTER_SIZE'" "''ZLIB'"
851$!
852$! Go Back To The Main Directory.
853$!
854$ SET DEFAULT [-]
855$!
856$! Time To Return.
857$!
858$ RETURN
859$!
860$! Build The "[.xxx.EXE.SSL]SSL_TASK.EXE" Program.
861$!
862$ SSL_TASK:
863$!
864$! Tell The User What We Are Doing.
865$!
866$ WRITE SYS$OUTPUT ""
867$ WRITE SYS$OUTPUT -
868 "Building DECNet Based SSL Engine, [.",ARCHD,".EXE.SSL]SSL_TASK.EXE"
869$!
870$! Go To The [.SSL] Directory.
871$!
872$ SET DEFAULT SYS$DISK:[.SSL]
873$!
874$! Build The [.xxx.EXE.SSL]SSL_TASK.EXE
875$!
876$ @SSL-LIB SSL_TASK 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
877 "''ISSEVEN'" "''POINTER_SIZE'" "''ZLIB'"
878$!
879$! Go Back To The Main Directory.
880$!
881$ SET DEFAULT [-]
882$!
883$! That's All, Time To RETURN.
884$!
885$ RETURN
886$!
887$! Build The OpenSSL Test Programs.
888$!
889$ TEST:
890$!
891$! Tell The User What We Are Doing.
892$!
893$ WRITE SYS$OUTPUT ""
894$ WRITE SYS$OUTPUT "Building The OpenSSL [.",ARCHD,".EXE.TEST] Test Utilities."
895$!
896$! Go To The [.TEST] Directory.
897$!
898$ SET DEFAULT SYS$DISK:[.TEST]
899$!
900$! Build The Test Programs.
901$!
902$ @MAKETESTS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" -
903 "''POINTER_SIZE'" "''ZLIB'"
904$!
905$! Go Back To The Main Directory.
906$!
907$ SET DEFAULT [-]
908$!
909$! That's All, Time To RETURN.
910$!
911$ RETURN
912$!
913$! Build The OpenSSL Application Programs.
914$!
915$ APPS:
916$!
917$! Tell The User What We Are Doing.
918$!
919$ WRITE SYS$OUTPUT ""
920$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCHD,".EXE.APPS] Applications."
921$!
922$! Go To The [.APPS] Directory.
923$!
924$ SET DEFAULT SYS$DISK:[.APPS]
925$!
926$! Build The Application Programs.
927$!
928$ @MAKEAPPS 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" "''ISSEVEN'" -
929 "" "''POINTER_SIZE'" "''ZLIB'"
930$!
931$! Go Back To The Main Directory.
932$!
933$ SET DEFAULT [-]
934$!
935$! That's All, Time To RETURN.
936$!
937$ RETURN
938$!
939$! Build The OpenSSL Application Programs.
940$!
941$ ENGINES:
942$!
943$! Tell The User What We Are Doing.
944$!
945$ WRITE SYS$OUTPUT ""
946$ WRITE SYS$OUTPUT "Building OpenSSL [.",ARCHD,".EXE.ENGINES] Engines."
947$!
948$! Go To The [.ENGINES] Directory.
949$!
950$ SET DEFAULT SYS$DISK:[.ENGINES]
951$!
952$! Build The Application Programs.
953$!
954$ @MAKEENGINES ENGINES 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" -
955 "''ISSEVEN'" "''BUILDPART'" "''POINTER_SIZE'" "''ZLIB'"
956$!
957$! Go Back To The Main Directory.
958$!
959$ SET DEFAULT [-]
960$!
961$! That's All, Time To RETURN.
962$!
963$ RETURN
964$!
965$! Check The User's Options.
966$!
967$ CHECK_OPTIONS:
968$!
969$! Check if there's a "part", and separate it out
970$!
971$ BUILDPART = F$ELEMENT(1,"/",P1)
972$ IF BUILDPART .EQS. "/"
973$ THEN
974$ BUILDPART = ""
975$ ELSE
976$ P1 = F$EXTRACT(0,F$LENGTH(P1) - F$LENGTH(BUILDPART) - 1, P1)
977$ ENDIF
978$!
979$! Check To See If P1 Is Blank.
980$!
981$ IF (P1.EQS."ALL")
982$ THEN
983$!
984$! P1 Is ALL, So Build Everything.
985$!
986$ BUILDCOMMAND = "ALL"
987$!
988$! Else...
989$!
990$ ELSE
991$!
992$! Else, Check To See If P1 Has A Valid Argument.
993$!
994$ IF (P1.EQS."CONFIG").OR.(P1.EQS."BUILDINF").OR.(P1.EQS."SOFTLINKS") -
995 .OR.(P1.EQS."BUILDALL") -
996 .OR.(P1.EQS."CRYPTO").OR.(P1.EQS."SSL") -
997 .OR.(P1.EQS."SSL_TASK").OR.(P1.EQS."TEST").OR.(P1.EQS."APPS") -
998 .OR.(P1.EQS."ENGINES")
999$ THEN
1000$!
1001$! A Valid Argument.
1002$!
1003$ BUILDCOMMAND = P1
1004$!
1005$! Else...
1006$!
1007$ ELSE
1008$!
1009$! Tell The User We Don't Know What They Want.
1010$!
1011$ WRITE SYS$OUTPUT ""
1012$ WRITE SYS$OUTPUT "USAGE: @MAKEVMS.COM [Target] [Pointer size] [Debug option] <Compiler>"
1013$ WRITE SYS$OUTPUT ""
1014$ WRITE SYS$OUTPUT "Example: @MAKEVMS.COM ALL """" NODEBUG "
1015$ WRITE SYS$OUTPUT ""
1016$ WRITE SYS$OUTPUT "The Target ",P1," Is Invalid. The Valid Target Options Are:"
1017$ WRITE SYS$OUTPUT ""
1018$ WRITE SYS$OUTPUT " ALL : Just Build Everything."
1019$ WRITE SYS$OUTPUT " CONFIG : Just build the [.CRYPTO._xxx]OPENSSLCONF.H file."
1020$ WRITE SYS$OUTPUT " BUILDINF : Just build the [.CRYPTO._xxx]BUILDINF.H file."
1021$ WRITE SYS$OUTPUT " SOFTLINKS: Just Fix The Unix soft links."
1022$ WRITE SYS$OUTPUT " BUILDALL : Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done."
1023$ WRITE SYS$OUTPUT " CRYPTO : To Build Just The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
1024$ WRITE SYS$OUTPUT " CRYPTO/x : To Build Just The x Part Of The"
1025$ WRITE SYS$OUTPUT " [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
1026$ WRITE SYS$OUTPUT " SSL : To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
1027$ WRITE SYS$OUTPUT " SSL_TASK : To Build Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program."
1028$ WRITE SYS$OUTPUT " TEST : To Build Just The OpenSSL Test Programs."
1029$ WRITE SYS$OUTPUT " APPS : To Build Just The OpenSSL Application Programs."
1030$ WRITE SYS$OUTPUT " ENGINES : To Build Just The ENGINES"
1031$ WRITE SYS$OUTPUT ""
1032$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
1033$ WRITE SYS$OUTPUT ""
1034$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture."
1035$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture."
1036$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
1037$ WRITE SYS$OUTPUT ""
1038$!
1039$! Time To EXIT.
1040$!
1041$ GOTO TIDY
1042$!
1043$! End The Valid Argument Check.
1044$!
1045$ ENDIF
1046$!
1047$! End The P1 Check.
1048$!
1049$ ENDIF
1050$!
1051$! Check P2 (POINTER_SIZE).
1052$!
1053$ IF (P2 .NES. "") .AND. (ARCH .NES. "VAX")
1054$ THEN
1055$!
1056$ IF (P2 .EQS. "32")
1057$ THEN
1058$ POINTER_SIZE = "32"
1059$ ELSE
1060$ POINTER_SIZE = F$EDIT( P2, "COLLAPSE, UPCASE")
1061$ IF ((POINTER_SIZE .EQS. "64") .OR. -
1062 (POINTER_SIZE .EQS. "64=") .OR. -
1063 (POINTER_SIZE .EQS. "64=ARGV"))
1064$ THEN
1065$ ARCHD = ARCH+ "_64"
1066$ LIB32 = ""
1067$ ELSE
1068$!
1069$! Tell The User Entered An Invalid Option.
1070$!
1071$ WRITE SYS$OUTPUT ""
1072$ WRITE SYS$OUTPUT "The Option ", P2, -
1073 " Is Invalid. The Valid Options Are:"
1074$ WRITE SYS$OUTPUT ""
1075$ WRITE SYS$OUTPUT -
1076 " """" : Compile with default (short) pointers."
1077$ WRITE SYS$OUTPUT -
1078 " 32 : Compile with 32-bit (short) pointers."
1079$ WRITE SYS$OUTPUT -
1080 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
1081$ WRITE SYS$OUTPUT -
1082 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
1083$ WRITE SYS$OUTPUT -
1084 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
1085$ WRITE SYS$OUTPUT ""
1086$!
1087$! Time To EXIT.
1088$!
1089$ GOTO TIDY
1090$!
1091$ ENDIF
1092$!
1093$ ENDIF
1094$!
1095$! End The P2 (POINTER_SIZE) Check.
1096$!
1097$ ENDIF
1098$!
1099$! Check To See If P3 Is Blank.
1100$!
1101$ IF (P3.EQS."NODEBUG")
1102$ THEN
1103$!
1104$! P3 Is NODEBUG, So Compile Without Debugger Information.
1105$!
1106$ DEBUGGER = "NODEBUG"
1107$!
1108$! Else...
1109$!
1110$ ELSE
1111$!
1112$! Check To See If We Are To Compile With Debugger Information.
1113$!
1114$ IF (P3.EQS."DEBUG")
1115$ THEN
1116$!
1117$! Compile With Debugger Information.
1118$!
1119$ DEBUGGER = "DEBUG"
1120$!
1121$! Else...
1122$!
1123$ ELSE
1124$!
1125$! Tell The User Entered An Invalid Option.
1126$!
1127$ WRITE SYS$OUTPUT ""
1128$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1129$ WRITE SYS$OUTPUT ""
1130$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
1131$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
1132$ WRITE SYS$OUTPUT ""
1133$!
1134$! Time To EXIT.
1135$!
1136$ GOTO TIDY
1137$!
1138$! End The Valid Argument Check.
1139$!
1140$ ENDIF
1141$!
1142$! End The P3 Check.
1143$!
1144$ ENDIF
1145$!
1146$! Check To See If P4 Is Blank.
1147$!
1148$ IF (P4.EQS."")
1149$ THEN
1150$!
1151$! O.K., The User Didn't Specify A Compiler, Let's Try To
1152$! Find Out Which One To Use.
1153$!
1154$! Check To See If We Have GNU C.
1155$!
1156$ IF (F$TRNLNM("GNU_CC").NES."")
1157$ THEN
1158$!
1159$! Looks Like GNUC, Set To Use GNUC.
1160$!
1161$ COMPILER = "GNUC"
1162$!
1163$! Tell The User We Are Using GNUC.
1164$!
1165$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1166$!
1167$! End The GNU C Compiler Check.
1168$!
1169$ ENDIF
1170$!
1171$! Check To See If We Have VAXC Or DECC.
1172$!
1173$ IF (F$GETSYI("CPU").GE.128).OR.(F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC")
1174$ THEN
1175$!
1176$! Looks Like DECC, Set To Use DECC.
1177$!
1178$ COMPILER = "DECC"
1179$!
1180$! Tell The User We Are Using DECC.
1181$!
1182$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1183$!
1184$! Else...
1185$!
1186$ ELSE
1187$!
1188$! Looks Like VAXC, Set To Use VAXC.
1189$!
1190$ COMPILER = "VAXC"
1191$!
1192$! Tell The User We Are Using VAX C.
1193$!
1194$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1195$!
1196$! End The DECC & VAXC Compiler Check.
1197$!
1198$ ENDIF
1199$!
1200$! Else...
1201$!
1202$ ELSE
1203$!
1204$! Check To See If The User Entered A Valid Parameter.
1205$!
1206$ IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")!.OR.(P4.EQS."LINK")
1207$ THEN
1208$!
1209$! Check To See If The User Wanted To Just LINK.
1210$!
1211$ IF (P4.EQS."LINK")
1212$ THEN
1213$!
1214$! Looks Like LINK-only
1215$!
1216$ COMPILER = "LINK"
1217$!
1218$! Tell The User We Are Only Linking.
1219$!
1220$ WRITE SYS$OUTPUT "LINK Only. This actually NOT YET SUPPORTED!"
1221$!
1222$! End LINK Check.
1223$!
1224$ ENDIF
1225$!
1226$! Check To See If The User Wanted DECC.
1227$!
1228$ IF (P4.EQS."DECC")
1229$ THEN
1230$!
1231$! Looks Like DECC, Set To Use DECC.
1232$!
1233$ COMPILER = "DECC"
1234$!
1235$! Tell The User We Are Using DECC.
1236$!
1237$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
1238$!
1239$! End DECC Check.
1240$!
1241$ ENDIF
1242$!
1243$! Check To See If We Are To Use VAXC.
1244$!
1245$ IF (P4.EQS."VAXC")
1246$ THEN
1247$!
1248$! Looks Like VAXC, Set To Use VAXC.
1249$!
1250$ COMPILER = "VAXC"
1251$!
1252$! Tell The User We Are Using VAX C.
1253$!
1254$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
1255$!
1256$! End VAXC Check
1257$!
1258$ ENDIF
1259$!
1260$! Check To See If We Are To Use GNU C.
1261$!
1262$ IF (P4.EQS."GNUC")
1263$ THEN
1264$!
1265$! Looks Like GNUC, Set To Use GNUC.
1266$!
1267$ COMPILER = "GNUC"
1268$!
1269$! Tell The User We Are Using GNUC.
1270$!
1271$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1272$!
1273$! End The GNU C Check.
1274$!
1275$ ENDIF
1276$!
1277$! Else The User Entered An Invalid Argument.
1278$!
1279$ ELSE
1280$!
1281$! Tell The User We Don't Know What They Want.
1282$!
1283$ WRITE SYS$OUTPUT ""
1284$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:"
1285$ WRITE SYS$OUTPUT ""
1286$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
1287$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
1288$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
1289$ WRITE SYS$OUTPUT ""
1290$!
1291$! Time To EXIT.
1292$!
1293$ GOTO TIDY
1294$!
1295$! End The Valid Argument Check.
1296$!
1297$ ENDIF
1298$!
1299$! End The P4 Check.
1300$!
1301$ ENDIF
1302$!
1303$! Time to check the contents of P5, and to make sure we get the correct
1304$! library.
1305$!
1306$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX" -
1307 .OR. P5.EQS."TCPIP" .OR. P5.EQS."NONE"
1308$ THEN
1309$!
1310$! Check to see if SOCKETSHR was chosen
1311$!
1312$ IF P5.EQS."SOCKETSHR"
1313$ THEN
1314$!
1315$! Set the library to use SOCKETSHR
1316$!
1317$ TCPIP_LIB = "SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
1318$!
1319$! Tell the user
1320$!
1321$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
1322$!
1323$! Done with SOCKETSHR
1324$!
1325$ ENDIF
1326$!
1327$! Check to see if MULTINET was chosen
1328$!
1329$ IF P5.EQS."MULTINET"
1330$ THEN
1331$!
1332$! Set the library to use UCX emulation.
1333$!
1334$ P5 = "UCX"
1335$!
1336$! Tell the user
1337$!
1338$ WRITE SYS$OUTPUT "Using MultiNet via UCX emulation for TCP/IP"
1339$!
1340$! Done with MULTINET
1341$!
1342$ ENDIF
1343$!
1344$! Check to see if UCX was chosen
1345$!
1346$ IF P5.EQS."UCX"
1347$ THEN
1348$!
1349$! Set the library to use UCX.
1350$!
1351$ TCPIP_LIB = "SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
1352$!
1353$! Tell the user
1354$!
1355$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
1356$!
1357$! Done with UCX
1358$!
1359$ ENDIF
1360$!
1361$! Check to see if TCPIP was chosen
1362$!
1363$ IF P5.EQS."TCPIP"
1364$ THEN
1365$!
1366$! Set the library to use TCPIP (post UCX).
1367$!
1368$ TCPIP_LIB = "SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1369$!
1370$! Tell the user
1371$!
1372$ WRITE SYS$OUTPUT "Using TCPIP (post UCX) for TCP/IP"
1373$!
1374$! Done with TCPIP
1375$!
1376$ ENDIF
1377$!
1378$! Check to see if NONE was chosen
1379$!
1380$ IF P5.EQS."NONE"
1381$ THEN
1382$!
1383$! Do not use a TCPIP library.
1384$!
1385$ TCPIP_LIB = ""
1386$!
1387$! Tell the user
1388$!
1389$ WRITE SYS$OUTPUT "A specific TCPIP library will not be used."
1390$!
1391$! Done with NONE.
1392$!
1393$ ENDIF
1394$!
1395$! Set the TCPIP_TYPE symbol
1396$!
1397$ TCPIP_TYPE = P5
1398$!
1399$! Print info
1400$!
1401$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB
1402$!
1403$! Else The User Entered An Invalid Argument.
1404$!
1405$ ELSE
1406$ IF P5 .NES. ""
1407$ THEN
1408$!
1409$! Tell The User We Don't Know What They Want.
1410$!
1411$ WRITE SYS$OUTPUT ""
1412$ WRITE SYS$OUTPUT "The Option ",P5," Is Invalid. The Valid Options Are:"
1413$ WRITE SYS$OUTPUT ""
1414$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1415$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1416$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP TCP/IP (post UCX) library."
1417$ WRITE SYS$OUTPUT " NONE : To not link with a specific TCP/IP library."
1418$ WRITE SYS$OUTPUT ""
1419$!
1420$! Time To EXIT.
1421$!
1422$ GOTO TIDY
1423$ ELSE
1424$!
1425$! If TCPIP is not defined, then hardcode it to make
1426$! it clear that no TCPIP is desired.
1427$!
1428$ IF P5 .EQS. ""
1429$ THEN
1430$ TCPIP_LIB = ""
1431$ TCPIP_TYPE = "NONE"
1432$ ELSE
1433$!
1434$! Set the TCPIP_TYPE symbol
1435$!
1436$ TCPIP_TYPE = P5
1437$ ENDIF
1438$ ENDIF
1439$!
1440$! Done with TCP/IP libraries
1441$!
1442$ ENDIF
1443$!
1444$! Special Threads For OpenVMS v7.1 Or Later
1445$!
1446$! Written By: Richard Levitte
1447$! richard@levitte.org
1448$!
1449$!
1450$! Check To See If We Have A Option For P6.
1451$!
1452$ IF (P6.EQS."")
1453$ THEN
1454$!
1455$! Get The Version Of VMS We Are Using.
1456$!
1457$ ISSEVEN :=
1458$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,VMS_VERSION))
1459$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
1460$!
1461$! Check To See If The VMS Version Is v7.1 Or Later.
1462$!
1463$ IF (TMP.GE.71)
1464$ THEN
1465$!
1466$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
1467$!
1468$ ISSEVEN := ,PTHREAD_USE_D4
1469$!
1470$! End The VMS Version Check.
1471$!
1472$ ENDIF
1473$!
1474$! End The P6 Check.
1475$!
1476$ ENDIF
1477$!
1478$!
1479$! Check To See If We Have A ZLIB Option.
1480$!
1481$ ZLIB = P7
1482$ IF (ZLIB .NES. "")
1483$ THEN
1484$!
1485$! Check for expected ZLIB files.
1486$!
1487$ err = 0
1488$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
1489$ if (f$search( file1) .eqs. "")
1490$ then
1491$ WRITE SYS$OUTPUT ""
1492$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
1493$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
1494$ err = 1
1495$ endif
1496$!
1497$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
1498$ if (f$search( file2) .eqs. "")
1499$ then
1500$ if (err .eq. 0)
1501$ then
1502$ WRITE SYS$OUTPUT ""
1503$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
1504$ endif
1505$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
1506$ WRITE SYS$OUTPUT ""
1507$ err = err+ 2
1508$ endif
1509$ if (err .eq. 1)
1510$ then
1511$ WRITE SYS$OUTPUT ""
1512$ endif
1513$!
1514$ if (err .ne. 0)
1515$ then
1516$ GOTO TIDY
1517$ endif
1518$!
1519$! Print info
1520$!
1521$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
1522$!
1523$! End The ZLIB Check.
1524$!
1525$ ENDIF
1526$!
1527$! Time To RETURN...
1528$!
1529$ RETURN
1530$!
1531$ TIDY:
1532$!
1533$! Close any open files.
1534$!
1535$ if (f$trnlnm( "h_file", "LNM$PROCESS", 0, "SUPERVISOR") .nes. "") then -
1536 close h_file
1537$!
1538$! Restore the original default device:[directory].
1539$!
1540$ SET DEFAULT 'DEF_ORIG'
1541$!
1542$ EXIT
1543$!
diff --git a/src/lib/libssl/src/ms/32all.bat b/src/lib/libssl/src/ms/32all.bat
deleted file mode 100644
index aaab9b0c9d..0000000000
--- a/src/lib/libssl/src/ms/32all.bat
+++ /dev/null
@@ -1,20 +0,0 @@
1set OPTS=no-asm
2
3perl Configure VC-WIN32
4perl util\mkfiles.pl >MINFO
5perl util\mk1mf.pl %OPTS% debug VC-WIN32 >d32.mak
6perl util\mk1mf.pl %OPTS% VC-WIN32 >32.mak
7perl util\mk1mf.pl %OPTS% debug dll VC-WIN32 >d32dll.mak
8perl util\mk1mf.pl %OPTS% dll VC-WIN32 >32dll.mak
9perl util\mkdef.pl 32 libeay > ms\libeay32.def
10perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
11
12nmake -f d32.mak
13@if errorlevel 1 goto end
14nmake -f 32.mak
15@if errorlevel 1 goto end
16nmake -f d32dll.mak
17@if errorlevel 1 goto end
18nmake -f 32dll.mak
19
20:end
diff --git a/src/lib/libssl/src/ms/README b/src/lib/libssl/src/ms/README
deleted file mode 100644
index 07f1925d5f..0000000000
--- a/src/lib/libssl/src/ms/README
+++ /dev/null
@@ -1,13 +0,0 @@
1Run these makefiles from the top level as in
2nmake -f ms\makefilename
3to build with visual C++ 4.[01].
4
5The results will be in the out directory.
6
7These makefiles and def files were generated by typing
8
9perl util\mk1mf.pl VC-NT >ms/nt.mak
10perl util\mk1mf.pl VC-NT dll >ms/ntdll.mak
11
12perl util\mkdef.pl 32 crypto > ms/crypto32.def
13perl util\mkdef.pl 32 ssl > ms/ssl32.def
diff --git a/src/lib/libssl/src/ms/applink.c b/src/lib/libssl/src/ms/applink.c
deleted file mode 100644
index 54a0a64262..0000000000
--- a/src/lib/libssl/src/ms/applink.c
+++ /dev/null
@@ -1,94 +0,0 @@
1#define APPLINK_STDIN 1
2#define APPLINK_STDOUT 2
3#define APPLINK_STDERR 3
4#define APPLINK_FPRINTF 4
5#define APPLINK_FGETS 5
6#define APPLINK_FREAD 6
7#define APPLINK_FWRITE 7
8#define APPLINK_FSETMOD 8
9#define APPLINK_FEOF 9
10#define APPLINK_FCLOSE 10 /* should not be used */
11
12#define APPLINK_FOPEN 11 /* solely for completeness */
13#define APPLINK_FSEEK 12
14#define APPLINK_FTELL 13
15#define APPLINK_FFLUSH 14
16#define APPLINK_FERROR 15
17#define APPLINK_CLEARERR 16
18#define APPLINK_FILENO 17 /* to be used with below */
19
20#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */
21#define APPLINK_READ 19
22#define APPLINK_WRITE 20
23#define APPLINK_LSEEK 21
24#define APPLINK_CLOSE 22
25#define APPLINK_MAX 22 /* always same as last macro */
26
27#ifndef APPMACROS_ONLY
28#include <stdio.h>
29#include <io.h>
30#include <fcntl.h>
31
32static void *app_stdin(void) { return stdin; }
33static void *app_stdout(void) { return stdout; }
34static void *app_stderr(void) { return stderr; }
35static int app_feof(FILE *fp) { return feof(fp); }
36static int app_ferror(FILE *fp) { return ferror(fp); }
37static void app_clearerr(FILE *fp) { clearerr(fp); }
38static int app_fileno(FILE *fp) { return _fileno(fp); }
39static int app_fsetmod(FILE *fp,char mod)
40{ return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); }
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46__declspec(dllexport)
47void **
48#if defined(__BORLANDC__)
49__stdcall /* __stdcall appears to be the only way to get the name
50 * decoration right with Borland C. Otherwise it works
51 * purely incidentally, as we pass no parameters. */
52#else
53__cdecl
54#endif
55OPENSSL_Applink(void)
56{ static int once=1;
57 static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX};
58
59 if (once)
60 { OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin;
61 OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout;
62 OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr;
63 OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf;
64 OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets;
65 OPENSSL_ApplinkTable[APPLINK_FREAD] = fread;
66 OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite;
67 OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod;
68 OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof;
69 OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose;
70
71 OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen;
72 OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek;
73 OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell;
74 OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush;
75 OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror;
76 OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr;
77 OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno;
78
79 OPENSSL_ApplinkTable[APPLINK_OPEN] = _open;
80 OPENSSL_ApplinkTable[APPLINK_READ] = _read;
81 OPENSSL_ApplinkTable[APPLINK_WRITE] = _write;
82 OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek;
83 OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close;
84
85 once = 0;
86 }
87
88 return OPENSSL_ApplinkTable;
89}
90
91#ifdef __cplusplus
92}
93#endif
94#endif
diff --git a/src/lib/libssl/src/ms/bcb4.bat b/src/lib/libssl/src/ms/bcb4.bat
deleted file mode 100644
index 00fb9e8459..0000000000
--- a/src/lib/libssl/src/ms/bcb4.bat
+++ /dev/null
@@ -1,6 +0,0 @@
1perl Configure BC-32
2perl util\mkfiles.pl > MINFO
3
4@rem create make file
5perl util\mk1mf.pl no-asm BC-NT > bcb.mak
6
diff --git a/src/lib/libssl/src/ms/certCA.srl b/src/lib/libssl/src/ms/certCA.srl
deleted file mode 100644
index 2cfaa3ba20..0000000000
--- a/src/lib/libssl/src/ms/certCA.srl
+++ /dev/null
@@ -1 +0,0 @@
11D
diff --git a/src/lib/libssl/src/ms/certCA.ss b/src/lib/libssl/src/ms/certCA.ss
deleted file mode 100644
index b48c657ae0..0000000000
--- a/src/lib/libssl/src/ms/certCA.ss
+++ /dev/null
@@ -1,10 +0,0 @@
1-----BEGIN CERTIFICATE-----
2MIIBXDCCAQYCAQAwDQYJKoZIhvcNAQEEBQAwOTELMAkGA1UEBhMCQVUxFzAVBgNV
3BAoTDkRvZGd5IEJyb3RoZXJzMREwDwYDVQQDEwhEb2RneSBDQTAeFw05ODA3MjEw
4NjUwMTZaFw05ODA4MjAwNjUwMTZaMDkxCzAJBgNVBAYTAkFVMRcwFQYDVQQKEw5E
5b2RneSBCcm90aGVyczERMA8GA1UEAxMIRG9kZ3kgQ0EwXDANBgkqhkiG9w0BAQEF
6AANLADBIAkEA0DQLenM/ncK6CwSEJhOO1WfZUPUEi4pvos9fHW459jh3rRDADgi3
7fiCYxoRVSQhvB47kDZ3ViNg5yrDhy7F9ywIDAQABMA0GCSqGSIb3DQEBBAUAA0EA
8S564l3SBxJ+QcIXthGGDyP5zkxTf/1fHfelW9LNgu6lZTdy9Dlp/NecPekzRmZEM
9WiGXGkKNeuo8PsnGJHP9Qg==
10-----END CERTIFICATE-----
diff --git a/src/lib/libssl/src/ms/certU.ss b/src/lib/libssl/src/ms/certU.ss
deleted file mode 100644
index 095ea14330..0000000000
--- a/src/lib/libssl/src/ms/certU.ss
+++ /dev/null
@@ -1,10 +0,0 @@
1-----BEGIN CERTIFICATE-----
2MIIBcTCCARsCARwwDQYJKoZIhvcNAQEEBQAwOTELMAkGA1UEBhMCQVUxFzAVBgNV
3BAoTDkRvZGd5IEJyb3RoZXJzMREwDwYDVQQDEwhEb2RneSBDQTAeFw05ODA3MjEw
4NjUwMjdaFw05ODA4MjAwNjUwMjdaME4xCzAJBgNVBAYTAkFVMRcwFQYDVQQKEw5E
5b2RneSBCcm90aGVyczESMBAGA1UEAxMJQnJvdGhlciAxMRIwEAYDVQQDEwlCcm90
6aGVyIDIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA0e4qorOr/zuLB9NvRaXhJVaI
7HaGGasa7eMAjVPitWAXkN+DxXiGH1CnMgQraKiYzsEVP15xtxkevEvK5jJpOwwID
8AQABMA0GCSqGSIb3DQEBBAUAA0EAZhcPV+SWwaszFuDTYc6fUurcV9OeXUqoxSQy
9MnLZPTyWubHbbkUr9fUfdf7Cc7dFqGzag05VHkNQUS9VjMzjIQ==
10-----END CERTIFICATE-----
diff --git a/src/lib/libssl/src/ms/cmp.pl b/src/lib/libssl/src/ms/cmp.pl
deleted file mode 100644
index 95b257fe4c..0000000000
--- a/src/lib/libssl/src/ms/cmp.pl
+++ /dev/null
@@ -1,47 +0,0 @@
1#!/usr/local/bin/perl
2
3($#ARGV == 1) || die "usage: cmp.pl <file1> <file2>\n";
4
5open(IN0,"<$ARGV[0]") || die "unable to open $ARGV[0]\n";
6open(IN1,"<$ARGV[1]") || die "unable to open $ARGV[1]\n";
7binmode IN0;
8binmode IN1;
9
10$tot=0;
11$ret=1;
12for (;;)
13 {
14 $n1=sysread(IN0,$b1,4096);
15 $n2=sysread(IN1,$b2,4096);
16
17 last if ($n1 != $n2);
18 last if ($b1 ne $b2);
19 last if ($n1 < 0);
20 if ($n1 == 0)
21 {
22 $ret=0;
23 last;
24 }
25 $tot+=$n1;
26 }
27
28close(IN0);
29close(IN1);
30if ($ret)
31 {
32 printf STDERR "$ARGV[0] and $ARGV[1] are different\n";
33 @a1=unpack("C*",$b1);
34 @a2=unpack("C*",$b2);
35 for ($i=0; $i<=$#a1; $i++)
36 {
37 if ($a1[$i] ne $a2[$i])
38 {
39 printf "%02X %02X <<\n",$a1[$i],$a2[$i];
40 last;
41 }
42 }
43 $nm=$tot+$n1;
44 $tot+=$i+1;
45 printf STDERR "diff at char $tot of $nm\n";
46 }
47exit($ret);
diff --git a/src/lib/libssl/src/ms/do_ms.bat b/src/lib/libssl/src/ms/do_ms.bat
deleted file mode 100644
index 55014d3fc3..0000000000
--- a/src/lib/libssl/src/ms/do_ms.bat
+++ /dev/null
@@ -1,11 +0,0 @@
1
2perl util\mkfiles.pl >MINFO
3perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
4perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
5if x%OSVERSION% == x goto skipce
6perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
7perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
8:skipce
9
10perl util\mkdef.pl 32 libeay > ms\libeay32.def
11perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
diff --git a/src/lib/libssl/src/ms/do_nasm.bat b/src/lib/libssl/src/ms/do_nasm.bat
deleted file mode 100644
index 7b3f3edbf0..0000000000
--- a/src/lib/libssl/src/ms/do_nasm.bat
+++ /dev/null
@@ -1,8 +0,0 @@
1
2perl util\mkfiles.pl >MINFO
3perl util\mk1mf.pl nasm VC-WIN32 >ms\nt.mak
4perl util\mk1mf.pl dll nasm VC-WIN32 >ms\ntdll.mak
5perl util\mk1mf.pl nasm BC-NT >ms\bcb.mak
6
7perl util\mkdef.pl 32 libeay > ms\libeay32.def
8perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
diff --git a/src/lib/libssl/src/ms/do_nt.bat b/src/lib/libssl/src/ms/do_nt.bat
deleted file mode 100644
index e2d525e05d..0000000000
--- a/src/lib/libssl/src/ms/do_nt.bat
+++ /dev/null
@@ -1,7 +0,0 @@
1
2perl util\mkfiles.pl >MINFO
3perl util\mk1mf.pl no-asm VC-NT >ms\nt.mak
4perl util\mk1mf.pl dll no-asm VC-NT >ms\ntdll.mak
5
6perl util\mkdef.pl libeay NT > ms\libeay32.def
7perl util\mkdef.pl ssleay NT > ms\ssleay32.def
diff --git a/src/lib/libssl/src/ms/do_win64a.bat b/src/lib/libssl/src/ms/do_win64a.bat
deleted file mode 100755
index ff8b19ccfd..0000000000
--- a/src/lib/libssl/src/ms/do_win64a.bat
+++ /dev/null
@@ -1,19 +0,0 @@
1perl util\mkfiles.pl >MINFO
2
3cmd /c "nasm -f win64 -v" >NUL: 2>&1
4if %errorlevel% neq 0 goto ml64
5
6perl ms\uplink-x86_64.pl nasm > ms\uptable.asm
7nasm -f win64 -o ms\uptable.obj ms\uptable.asm
8goto proceed
9
10:ml64
11perl ms\uplink-x86_64.pl masm > ms\uptable.asm
12ml64 -c -Foms\uptable.obj ms\uptable.asm
13
14:proceed
15perl util\mk1mf.pl VC-WIN64A >ms\nt.mak
16perl util\mk1mf.pl dll VC-WIN64A >ms\ntdll.mak
17
18perl util\mkdef.pl 32 libeay > ms\libeay32.def
19perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
diff --git a/src/lib/libssl/src/ms/do_win64i.bat b/src/lib/libssl/src/ms/do_win64i.bat
deleted file mode 100755
index 088f5e1d0a..0000000000
--- a/src/lib/libssl/src/ms/do_win64i.bat
+++ /dev/null
@@ -1,9 +0,0 @@
1
2perl util\mkfiles.pl >MINFO
3perl ms\uplink-ia64.pl > ms\uptable.asm
4ias -o ms\uptable.obj ms\uptable.asm
5perl util\mk1mf.pl VC-WIN64I >ms\nt.mak
6perl util\mk1mf.pl dll VC-WIN64I >ms\ntdll.mak
7
8perl util\mkdef.pl 32 libeay > ms\libeay32.def
9perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
diff --git a/src/lib/libssl/src/ms/keyCA.ss b/src/lib/libssl/src/ms/keyCA.ss
deleted file mode 100644
index 933c2cd6ed..0000000000
--- a/src/lib/libssl/src/ms/keyCA.ss
+++ /dev/null
@@ -1,9 +0,0 @@
1-----BEGIN RSA PRIVATE KEY-----
2MIIBOwIBAAJBANA0C3pzP53CugsEhCYTjtVn2VD1BIuKb6LPXx1uOfY4d60QwA4I
3t34gmMaEVUkIbweO5A2d1YjYOcqw4cuxfcsCAwEAAQJAOT9WOKEfyN0WEpl3TJDs
4ITmgw2XbjhLOh1HFsW3xegWlaOuhL/wGamz7n7zzL/RQF3JP/VvpGk2F8VD9JhwT
5wQIhAPmqM3fLttBoCQuwQRdIPfB7Ps3THqx6N8AJ04z3I1ejAiEA1XyDd7bLpWrw
6/oA8CmR4b/KCGfvRwAL/Qej/rQliw7kCIQCYRzSvO8ScpuflhjKdZcXJuRJcbgnG
7f6Ejc5rh3xdiawIhALMmLdzEFNjXiSzIx5mg/kBTLUJIw5dx7GqO8B9xBORhAiA5
8oTN/hgvvrkkmRsHQpNBmzAEGBzhMEEq9lD6ZWrTSRg==
9-----END RSA PRIVATE KEY-----
diff --git a/src/lib/libssl/src/ms/keyU.ss b/src/lib/libssl/src/ms/keyU.ss
deleted file mode 100644
index 05d356e7a5..0000000000
--- a/src/lib/libssl/src/ms/keyU.ss
+++ /dev/null
@@ -1,9 +0,0 @@
1-----BEGIN RSA PRIVATE KEY-----
2MIIBPAIBAAJBANHuKqKzq/87iwfTb0Wl4SVWiB2hhmrGu3jAI1T4rVgF5Dfg8V4h
3h9QpzIEK2iomM7BFT9ecbcZHrxLyuYyaTsMCAwEAAQJBAIxtM6n4ZCJscxj+D13Y
4k13Fn3Gqvd6pJ3ijlj7dxh6tRBBQ3W9qmQflyvEc81giI2XtbVYBOEJKtJ1cWWZm
5gAkCIQDpEoOuc4KCI5ti6aMJvtxlXWNHbkXCxtbeIjH4+FnH9QIhAOaU3XVeWWOK
6PnnO87KniDjHQqWLnooivDGRK+FUKeDXAiEA2MjEvFVqFVvDIsxHPkBNROcI+Z6i
7ulkx76kErBtrfqUCIHN5uBLQZmngUPuFtiwRlLoCqJDphENfs+oK7vPQx4xPAiEA
8hnY2Ulrpld83IG6bUs95Loc8Fk81hez5YwmhsFEXVtk=
9-----END RSA PRIVATE KEY-----
diff --git a/src/lib/libssl/src/ms/mingw32.bat b/src/lib/libssl/src/ms/mingw32.bat
deleted file mode 100644
index 06b5733878..0000000000
--- a/src/lib/libssl/src/ms/mingw32.bat
+++ /dev/null
@@ -1,90 +0,0 @@
1@rem OpenSSL with Mingw32+GNU as
2@rem ---------------------------
3
4perl Configure mingw %1 %2 %3 %4 %5 %6 %7 %8
5
6@echo off
7
8perl -e "exit 1 if '%1' eq 'no-asm'"
9if errorlevel 1 goto noasm
10
11echo Generating x86 for GNU assember
12
13echo Bignum
14cd crypto\bn\asm
15perl bn-586.pl gaswin > bn-win32.s
16perl co-586.pl gaswin > co-win32.s
17cd ..\..\..
18
19echo DES
20cd crypto\des\asm
21perl des-586.pl gaswin > d-win32.s
22cd ..\..\..
23
24echo crypt
25cd crypto\des\asm
26perl crypt586.pl gaswin > y-win32.s
27cd ..\..\..
28
29echo Blowfish
30cd crypto\bf\asm
31perl bf-586.pl gaswin > b-win32.s
32cd ..\..\..
33
34echo CAST5
35cd crypto\cast\asm
36perl cast-586.pl gaswin > c-win32.s
37cd ..\..\..
38
39echo RC4
40cd crypto\rc4\asm
41perl rc4-586.pl gaswin > r4-win32.s
42cd ..\..\..
43
44echo MD5
45cd crypto\md5\asm
46perl md5-586.pl gaswin > m5-win32.s
47cd ..\..\..
48
49echo SHA1
50cd crypto\sha\asm
51perl sha1-586.pl gaswin > s1-win32.s
52cd ..\..\..
53
54echo RIPEMD160
55cd crypto\ripemd\asm
56perl rmd-586.pl gaswin > rm-win32.s
57cd ..\..\..
58
59echo RC5\32
60cd crypto\rc5\asm
61perl rc5-586.pl gaswin > r5-win32.s
62cd ..\..\..
63
64:noasm
65
66echo Generating makefile
67perl util\mkfiles.pl >MINFO
68perl util\mk1mf.pl gaswin Mingw32 >ms\mingw32a.mak
69echo Generating DLL definition files
70perl util\mkdef.pl 32 libeay >ms\libeay32.def
71if errorlevel 1 goto end
72perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
73if errorlevel 1 goto end
74
75rem copy ms\tlhelp32.h outinc
76
77echo Building the libraries
78mingw32-make -f ms/mingw32a.mak
79if errorlevel 1 goto end
80
81echo Generating the DLLs and input libraries
82dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def out/libcrypto.a -lws2_32 -lgdi32
83if errorlevel 1 goto end
84dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def out/libssl.a out/libeay32.a
85if errorlevel 1 goto end
86
87echo Done compiling OpenSSL
88
89:end
90
diff --git a/src/lib/libssl/src/ms/mw.bat b/src/lib/libssl/src/ms/mw.bat
deleted file mode 100644
index 35e00a4508..0000000000
--- a/src/lib/libssl/src/ms/mw.bat
+++ /dev/null
@@ -1,26 +0,0 @@
1@rem OpenSSL with Mingw32
2@rem --------------------
3
4@rem Makefile
5perl util\mkfiles.pl >MINFO
6perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
7@rem DLL definition files
8perl util\mkdef.pl 32 libeay >ms\libeay32.def
9if errorlevel 1 goto end
10perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
11if errorlevel 1 goto end
12
13@rem Build the libraries
14make -f ms/mingw32.mak
15if errorlevel 1 goto end
16
17@rem Generate the DLLs and input libraries
18dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def out/libcrypto.a -lws2_32 -lgdi32
19if errorlevel 1 goto end
20dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def out/libssl.a out/libeay32.a
21if errorlevel 1 goto end
22
23echo Done compiling OpenSSL
24
25:end
26
diff --git a/src/lib/libssl/src/ms/req2CA.ss b/src/lib/libssl/src/ms/req2CA.ss
deleted file mode 100644
index d061fb2a07..0000000000
--- a/src/lib/libssl/src/ms/req2CA.ss
+++ /dev/null
@@ -1,29 +0,0 @@
1Certificate Request:
2 Data:
3 Version: 0 (0x0)
4 Subject: C=AU, O=Dodgy Brothers, CN=Dodgy CA
5 Subject Public Key Info:
6 Public Key Algorithm: rsaEncryption
7 RSA Public Key: (512 bit)
8 Modulus (512 bit):
9 00:d0:34:0b:7a:73:3f:9d:c2:ba:0b:04:84:26:13:
10 8e:d5:67:d9:50:f5:04:8b:8a:6f:a2:cf:5f:1d:6e:
11 39:f6:38:77:ad:10:c0:0e:08:b7:7e:20:98:c6:84:
12 55:49:08:6f:07:8e:e4:0d:9d:d5:88:d8:39:ca:b0:
13 e1:cb:b1:7d:cb
14 Exponent: 65537 (0x10001)
15 Attributes:
16 a0:00
17 Signature Algorithm: md5WithRSAEncryption
18 8d:15:e6:8e:49:0f:07:fb:e0:72:ad:f0:04:9a:c8:5d:e7:1b:
19 ed:99:c9:c3:3c:f5:8e:4d:a1:5e:e1:40:75:2c:24:f0:c6:dd:
20 10:87:35:26:1d:cc:79:3f:a2:c6:a0:04:c8:52:78:ed:26:32:
21 d3:1b:a7:cd:5e:8c:55:92:dd:88
22-----BEGIN CERTIFICATE REQUEST-----
23MIHzMIGeAgEAMDkxCzAJBgNVBAYTAkFVMRcwFQYDVQQKEw5Eb2RneSBCcm90aGVy
24czERMA8GA1UEAxMIRG9kZ3kgQ0EwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA0DQL
25enM/ncK6CwSEJhOO1WfZUPUEi4pvos9fHW459jh3rRDADgi3fiCYxoRVSQhvB47k
26DZ3ViNg5yrDhy7F9ywIDAQABoAAwDQYJKoZIhvcNAQEEBQADQQCNFeaOSQ8H++By
27rfAEmshd5xvtmcnDPPWOTaFe4UB1LCTwxt0QhzUmHcx5P6LGoATIUnjtJjLTG6fN
28XoxVkt2I
29-----END CERTIFICATE REQUEST-----
diff --git a/src/lib/libssl/src/ms/reqCA.ss b/src/lib/libssl/src/ms/reqCA.ss
deleted file mode 100644
index 1f7138cadc..0000000000
--- a/src/lib/libssl/src/ms/reqCA.ss
+++ /dev/null
@@ -1,8 +0,0 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIHzMIGeAgEAMDkxCzAJBgNVBAYTAkFVMRcwFQYDVQQKEw5Eb2RneSBCcm90aGVy
3czERMA8GA1UEAxMIRG9kZ3kgQ0EwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA0DQL
4enM/ncK6CwSEJhOO1WfZUPUEi4pvos9fHW459jh3rRDADgi3fiCYxoRVSQhvB47k
5DZ3ViNg5yrDhy7F9ywIDAQABoAAwDQYJKoZIhvcNAQEFBQADQQA5DZSZgDXs8flG
6GZf4SGr8QpqkxSu9bZOYp/ySuz1khj7aupBrvZBmqZcZx4ZjAUN7UQpMWu2gyfKa
7mAiiLPFN
8-----END CERTIFICATE REQUEST-----
diff --git a/src/lib/libssl/src/ms/reqU.ss b/src/lib/libssl/src/ms/reqU.ss
deleted file mode 100644
index 91cce5966d..0000000000
--- a/src/lib/libssl/src/ms/reqU.ss
+++ /dev/null
@@ -1,8 +0,0 @@
1-----BEGIN CERTIFICATE REQUEST-----
2MIIBCDCBswIBADBOMQswCQYDVQQGEwJBVTEXMBUGA1UEChMORG9kZ3kgQnJvdGhl
3cnMxEjAQBgNVBAMTCUJyb3RoZXIgMTESMBAGA1UEAxMJQnJvdGhlciAyMFwwDQYJ
4KoZIhvcNAQEBBQADSwAwSAJBANHuKqKzq/87iwfTb0Wl4SVWiB2hhmrGu3jAI1T4
5rVgF5Dfg8V4hh9QpzIEK2iomM7BFT9ecbcZHrxLyuYyaTsMCAwEAAaAAMA0GCSqG
6SIb3DQEBAgUAA0EAhB0p6LbiVq+XshLo5sBQN0rsROC1OgWrdS6ZUmMaigOKK069
7r1o+dGwbM5VCYGTZf0PW9OtGuArGct0laL5h4w==
8-----END CERTIFICATE REQUEST-----
diff --git a/src/lib/libssl/src/ms/speed32.bat b/src/lib/libssl/src/ms/speed32.bat
deleted file mode 100644
index 95f7ce9505..0000000000
--- a/src/lib/libssl/src/ms/speed32.bat
+++ /dev/null
@@ -1,37 +0,0 @@
1set makefile=ms\nt.mak
2
3perl Configure b
4del tmp\*.obj
5nmake -f %makefile%
6nmake -f %makefile%
7nmake -f %makefile%
8out\ssleay version -v -b -f >speed.1
9out\ssleay speed >speed.1l
10
11perl Configure bl-4c-2c
12del tmp\rc4*.obj tmp\bn*.obj tmp\md2_dgst.obj
13nmake -f %makefile%
14nmake -f %makefile%
15nmake -f %makefile%
16out\ssleay speed rc4 rsa md2 >speed.2l
17
18perl Configure bl-4c-ri
19del tmp\rc4*.obj
20nmake -f %makefile%
21nmake -f %makefile%
22nmake -f %makefile%
23out\ssleay speed rc4 >speed.3l
24
25perl Configure b2-is-ri-dp
26del tmp\i_*.obj tmp\rc4*.obj tmp\ecb_enc.obj tmp\bn*.obj
27nmake -f %makefile%
28nmake -f %makefile%
29nmake -f %makefile%
30out\ssleay speed rsa rc4 idea des >speed.4l
31
32type speed.1 >speed.log
33type speed.1l >>speed.log
34perl util\sp-diff.pl speed.1l speed.2l >>speed.log
35perl util\sp-diff.pl speed.1l speed.3l >>speed.log
36perl util\sp-diff.pl speed.1l speed.4l >>speed.log
37
diff --git a/src/lib/libssl/src/ms/tenc.bat b/src/lib/libssl/src/ms/tenc.bat
deleted file mode 100644
index a4fa7f3652..0000000000
--- a/src/lib/libssl/src/ms/tenc.bat
+++ /dev/null
@@ -1,14 +0,0 @@
1rem called by testenc
2
3echo test %1 %2 %3 %4 %5 %6
4%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in %input% -out %tmp1%
5%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in %tmp1% -out %out1%
6%cmp% %input% %out1%
7if errorlevel 1 goto err
8
9echo test base64 %1 %2 %3 %4 %5 %6
10%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in %input% -out %tmp1%
11%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in %tmp1% -out %out1%
12%cmp% %input% %out1%
13
14:err
diff --git a/src/lib/libssl/src/ms/tencce.bat b/src/lib/libssl/src/ms/tencce.bat
deleted file mode 100644
index c8b1acd4b4..0000000000
--- a/src/lib/libssl/src/ms/tencce.bat
+++ /dev/null
@@ -1,19 +0,0 @@
1rem called by testencce
2
3echo test %1 %2 %3 %4 %5 %6
4cecopy %input% CE:\OpenSSL
5cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in \OpenSSL\%input% -out \OpenSSL\%tmp1%
6cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in \OpenSSL\%tmp1% -out \OpenSSL\%out1%
7del %out1% >nul 2>&1
8cecopy CE:\OpenSSL\%out1% .
9%cmp% %input% %out1%
10if errorlevel 1 goto err
11
12echo test base64 %1 %2 %3 %4 %5 %6
13cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in \OpenSSL\%input% -out \OpenSSL\%tmp1%
14cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in \OpenSSL\%tmp1% -out \OpenSSL\%out1%
15del %out1% >nul 2>&1
16cecopy CE:\OpenSSL\%out1% .
17%cmp% %input% %out1%
18
19:err
diff --git a/src/lib/libssl/src/ms/test.bat b/src/lib/libssl/src/ms/test.bat
deleted file mode 100644
index f490546ebb..0000000000
--- a/src/lib/libssl/src/ms/test.bat
+++ /dev/null
@@ -1,185 +0,0 @@
1@echo off
2
3set test=..\ms
4set opath=%PATH%
5PATH=..\ms;%PATH%
6set OPENSSL_CONF=..\apps\openssl.cnf
7
8rem run this from inside the bin directory
9
10echo rsa_test
11rsa_test
12if errorlevel 1 goto done
13
14echo destest
15destest
16if errorlevel 1 goto done
17
18echo ideatest
19ideatest
20if errorlevel 1 goto done
21
22echo bftest
23bftest
24if errorlevel 1 goto done
25
26echo shatest
27shatest
28if errorlevel 1 goto done
29
30echo sha1test
31sha1test
32if errorlevel 1 goto done
33
34echo md5test
35md5test
36if errorlevel 1 goto done
37
38echo rc2test
39rc2test
40if errorlevel 1 goto done
41
42echo rc4test
43rc4test
44if errorlevel 1 goto done
45
46echo randtest
47randtest
48if errorlevel 1 goto done
49
50echo dhtest
51dhtest
52if errorlevel 1 goto done
53
54echo exptest
55exptest
56if errorlevel 1 goto done
57
58echo dsatest
59dsatest
60if errorlevel 1 goto done
61
62echo ectest
63ectest
64if errorlevel 1 goto done
65
66echo testenc
67call %test%\testenc openssl
68if errorlevel 1 goto done
69
70echo testpem
71call %test%\testpem openssl
72if errorlevel 1 goto done
73
74echo testss
75call %test%\testss openssl
76if errorlevel 1 goto done
77
78set SSL_TEST=ssltest -key keyU.ss -cert certU.ss -c_key keyU.ss -c_cert certU.ss -CAfile certCA.ss
79
80echo test sslv2
81ssltest -ssl2
82if errorlevel 1 goto done
83
84echo test sslv2 with server authentication
85%SSL_TEST% -ssl2 -server_auth
86if errorlevel 1 goto done
87
88echo test sslv2 with client authentication
89%SSL_TEST% -ssl2 -client_auth
90if errorlevel 1 goto done
91
92echo test sslv2 with both client and server authentication
93%SSL_TEST% -ssl2 -server_auth -client_auth
94if errorlevel 1 goto done
95
96echo test sslv3
97ssltest -ssl3
98if errorlevel 1 goto done
99
100echo test sslv3 with server authentication
101%SSL_TEST% -ssl3 -server_auth
102if errorlevel 1 goto done
103
104echo test sslv3 with client authentication
105%SSL_TEST% -ssl3 -client_auth
106if errorlevel 1 goto done
107
108echo test sslv3 with both client and server authentication
109%SSL_TEST% -ssl3 -server_auth -client_auth
110if errorlevel 1 goto done
111
112echo test sslv2/sslv3
113ssltest
114if errorlevel 1 goto done
115
116echo test sslv2/sslv3 with server authentication
117%SSL_TEST% -server_auth
118if errorlevel 1 goto done
119
120echo test sslv2/sslv3 with client authentication
121%SSL_TEST% -client_auth
122if errorlevel 1 goto done
123
124echo test sslv2/sslv3 with both client and server authentication
125%SSL_TEST% -server_auth -client_auth
126if errorlevel 1 goto done
127
128echo test sslv2 via BIO pair
129ssltest -bio_pair -ssl2
130if errorlevel 1 goto done
131
132echo test sslv2/sslv3 with 1024 bit DHE via BIO pair
133ssltest -bio_pair -dhe1024dsa -v
134if errorlevel 1 goto done
135
136echo test sslv2 with server authentication via BIO pair
137%SSL_TEST% -bio_pair -ssl2 -server_auth
138if errorlevel 1 goto done
139
140echo test sslv2 with client authentication via BIO pair
141%SSL_TEST% -bio_pair -ssl2 -client_auth
142if errorlevel 1 goto done
143
144echo test sslv2 with both client and server authentication via BIO pair
145%SSL_TEST% -bio_pair -ssl2 -server_auth -client_auth
146if errorlevel 1 goto done
147
148echo test sslv3 via BIO pair
149ssltest -bio_pair -ssl3
150if errorlevel 1 goto done
151
152echo test sslv3 with server authentication via BIO pair
153%SSL_TEST% -bio_pair -ssl3 -server_auth
154if errorlevel 1 goto done
155
156echo test sslv3 with client authentication via BIO pair
157%SSL_TEST% -bio_pair -ssl3 -client_auth
158if errorlevel 1 goto done
159
160echo test sslv3 with both client and server authentication via BIO pair
161%SSL_TEST% -bio_pair -ssl3 -server_auth -client_auth
162if errorlevel 1 goto done
163
164echo test sslv2/sslv3 via BIO pair
165ssltest -bio_pair
166if errorlevel 1 goto done
167
168echo test sslv2/sslv3 with server authentication
169%SSL_TEST% -bio_pair -server_auth
170if errorlevel 1 goto done
171
172echo test sslv2/sslv3 with client authentication via BIO pair
173%SSL_TEST% -bio_pair -client_auth
174if errorlevel 1 goto done
175
176echo test sslv2/sslv3 with both client and server authentication via BIO pair
177%SSL_TEST% -bio_pair -server_auth -client_auth
178if errorlevel 1 goto done
179
180echo passed all tests
181goto end
182:done
183echo problems.....
184:end
185PATH=%opath%
diff --git a/src/lib/libssl/src/ms/testce.bat b/src/lib/libssl/src/ms/testce.bat
deleted file mode 100644
index 2ab010be6a..0000000000
--- a/src/lib/libssl/src/ms/testce.bat
+++ /dev/null
@@ -1,234 +0,0 @@
1@echo off
2
3cemkdir CE:\OpenSSL
4
5set test=..\ms
6set opath=%PATH%
7PATH=..\ms;%PATH%
8cecopy ..\apps\openssl.cnf CE:\OpenSSL
9set OPENSSL_CONF=\OpenSSL\openssl.cnf
10set HOME=\OpenSSL
11set CERUN_PASS_ENV=OPENSSL_CONF HOME
12
13rem run this from inside the bin directory
14
15rem Copy the DLL's (though they'll only exist if we're in out32dll)
16if exist libeay32.dll cecopy libeay32.dll CE:\OpenSSL
17if exist ssleay32.dll cecopy ssleay32.dll CE:\OpenSSL
18
19echo rsa_test
20call %test%\testce2 rsa_test
21if errorlevel 1 goto done
22
23echo destest
24call %test%\testce2 destest
25if errorlevel 1 goto done
26
27echo ideatest
28call %test%\testce2 ideatest
29if errorlevel 1 goto done
30
31echo bftest
32call %test%\testce2 bftest
33if errorlevel 1 goto done
34
35echo shatest
36call %test%\testce2 shatest
37if errorlevel 1 goto done
38
39echo sha1test
40call %test%\testce2 sha1test
41if errorlevel 1 goto done
42
43echo md5test
44call %test%\testce2 md5test
45if errorlevel 1 goto done
46
47echo md2test
48call %test%\testce2 md2test
49if errorlevel 1 goto done
50
51echo mdc2test
52call %test%\testce2 mdc2test
53if errorlevel 1 goto done
54
55echo rc2test
56call %test%\testce2 rc2test
57if errorlevel 1 goto done
58
59echo rc4test
60call %test%\testce2 rc4test
61if errorlevel 1 goto done
62
63echo randtest
64call %test%\testce2 randtest
65if errorlevel 1 goto done
66
67echo dhtest
68call %test%\testce2 dhtest
69if errorlevel 1 goto done
70
71echo exptest
72call %test%\testce2 exptest
73if errorlevel 1 goto done
74
75echo dsatest
76call %test%\testce2 dsatest
77if errorlevel 1 goto done
78
79echo testenc
80call %test%\testencce openssl.exe
81if errorlevel 1 goto done
82
83echo testpem
84call %test%\testpemce openssl.exe
85if errorlevel 1 goto done
86
87cecopy openssl.exe CE:\OpenSSL
88
89echo verify
90copy ..\certs\*.pem cert.tmp >nul
91cecopy cert.tmp CE:\OpenSSL
92cemkdir CE:\OpenSSL\certs
93rem cecopy ..\certs\*.pem CE:\OpenSSL\certs
94cecopy ..\certs\ca-cert.pem CE:\OpenSSL\certs
95cecopy ..\certs\dsa-ca.pem CE:\OpenSSL\certs
96cecopy ..\certs\dsa-pca.pem CE:\OpenSSL\certs
97cecopy ..\certs\factory.pem CE:\OpenSSL\certs
98cecopy ..\certs\ICE-CA.pem CE:\OpenSSL\certs
99cecopy ..\certs\ICE-root.pem CE:\OpenSSL\certs
100cecopy ..\certs\ICE-user.pem CE:\OpenSSL\certs
101cecopy ..\certs\nortelCA.pem CE:\OpenSSL\certs
102cecopy ..\certs\pca-cert.pem CE:\OpenSSL\certs
103cecopy ..\certs\RegTP-4R.pem CE:\OpenSSL\certs
104cecopy ..\certs\RegTP-5R.pem CE:\OpenSSL\certs
105cecopy ..\certs\RegTP-6R.pem CE:\OpenSSL\certs
106cecopy ..\certs\rsa-cca.pem CE:\OpenSSL\certs
107cecopy ..\certs\thawteCb.pem CE:\OpenSSL\certs
108cecopy ..\certs\thawteCp.pem CE:\OpenSSL\certs
109cecopy ..\certs\timCA.pem CE:\OpenSSL\certs
110cecopy ..\certs\tjhCA.pem CE:\OpenSSL\certs
111cecopy ..\certs\vsign1.pem CE:\OpenSSL\certs
112cecopy ..\certs\vsign2.pem CE:\OpenSSL\certs
113cecopy ..\certs\vsign3.pem CE:\OpenSSL\certs
114cecopy ..\certs\vsignss.pem CE:\OpenSSL\certs
115cecopy ..\certs\vsigntca.pem CE:\OpenSSL\certs
116cerun CE:\OpenSSL\openssl verify -CAfile \OpenSSL\cert.tmp \OpenSSL\certs\*.pem
117
118echo testss
119call %test%\testssce openssl.exe
120if errorlevel 1 goto done
121
122cecopy ssltest.exe CE:\OpenSSL
123cecopy ..\apps\server.pem CE:\OpenSSL
124cecopy ..\apps\client.pem CE:\OpenSSL
125
126echo test sslv2
127cerun CE:\OpenSSL\ssltest -ssl2
128if errorlevel 1 goto done
129
130echo test sslv2 with server authentication
131cerun CE:\OpenSSL\ssltest -ssl2 -server_auth -CAfile \OpenSSL\cert.tmp
132if errorlevel 1 goto done
133
134echo test sslv2 with client authentication
135cerun CE:\OpenSSL\ssltest -ssl2 -client_auth -CAfile \OpenSSL\cert.tmp
136if errorlevel 1 goto done
137
138echo test sslv2 with both client and server authentication
139cerun CE:\OpenSSL\ssltest -ssl2 -server_auth -client_auth -CAfile \OpenSSL\cert.tmp
140if errorlevel 1 goto done
141
142echo test sslv3
143cerun CE:\OpenSSL\ssltest -ssl3
144if errorlevel 1 goto done
145
146echo test sslv3 with server authentication
147cerun CE:\OpenSSL\ssltest -ssl3 -server_auth -CAfile \OpenSSL\cert.tmp
148if errorlevel 1 goto done
149
150echo test sslv3 with client authentication
151cerun CE:\OpenSSL\ssltest -ssl3 -client_auth -CAfile \OpenSSL\cert.tmp
152if errorlevel 1 goto done
153
154echo test sslv3 with both client and server authentication
155cerun CE:\OpenSSL\ssltest -ssl3 -server_auth -client_auth -CAfile \OpenSSL\cert.tmp
156if errorlevel 1 goto done
157
158echo test sslv2/sslv3
159cerun CE:\OpenSSL\ssltest
160if errorlevel 1 goto done
161
162echo test sslv2/sslv3 with server authentication
163cerun CE:\OpenSSL\ssltest -server_auth -CAfile \OpenSSL\cert.tmp
164if errorlevel 1 goto done
165
166echo test sslv2/sslv3 with client authentication
167cerun CE:\OpenSSL\ssltest -client_auth -CAfile \OpenSSL\cert.tmp
168if errorlevel 1 goto done
169
170echo test sslv2/sslv3 with both client and server authentication
171cerun CE:\OpenSSL\ssltest -server_auth -client_auth -CAfile \OpenSSL\cert.tmp
172if errorlevel 1 goto done
173
174echo test sslv2 via BIO pair
175cerun CE:\OpenSSL\ssltest -bio_pair -ssl2
176if errorlevel 1 goto done
177
178echo test sslv2/sslv3 with 1024 bit DHE via BIO pair
179cerun CE:\OpenSSL\ssltest -bio_pair -dhe1024dsa -v
180if errorlevel 1 goto done
181
182echo test sslv2 with server authentication via BIO pair
183cerun CE:\OpenSSL\ssltest -bio_pair -ssl2 -server_auth -CAfile \OpenSSL\cert.tmp
184if errorlevel 1 goto done
185
186echo test sslv2 with client authentication via BIO pair
187cerun CE:\OpenSSL\ssltest -bio_pair -ssl2 -client_auth -CAfile \OpenSSL\cert.tmp
188if errorlevel 1 goto done
189
190echo test sslv2 with both client and server authentication via BIO pair
191cerun CE:\OpenSSL\ssltest -bio_pair -ssl2 -server_auth -client_auth -CAfile \OpenSSL\cert.tmp
192if errorlevel 1 goto done
193
194echo test sslv3 via BIO pair
195cerun CE:\OpenSSL\ssltest -bio_pair -ssl3
196if errorlevel 1 goto done
197
198echo test sslv3 with server authentication via BIO pair
199cerun CE:\OpenSSL\ssltest -bio_pair -ssl3 -server_auth -CAfile \OpenSSL\cert.tmp
200if errorlevel 1 goto done
201
202echo test sslv3 with client authentication via BIO pair
203cerun CE:\OpenSSL\ssltest -bio_pair -ssl3 -client_auth -CAfile \OpenSSL\cert.tmp
204if errorlevel 1 goto done
205
206echo test sslv3 with both client and server authentication via BIO pair
207cerun CE:\OpenSSL\ssltest -bio_pair -ssl3 -server_auth -client_auth -CAfile \OpenSSL\cert.tmp
208if errorlevel 1 goto done
209
210echo test sslv2/sslv3 via BIO pair
211cerun CE:\OpenSSL\ssltest
212if errorlevel 1 goto done
213
214echo test sslv2/sslv3 with server authentication
215cerun CE:\OpenSSL\ssltest -bio_pair -server_auth -CAfile \OpenSSL\cert.tmp
216if errorlevel 1 goto done
217
218echo test sslv2/sslv3 with client authentication via BIO pair
219cerun CE:\OpenSSL\ssltest -bio_pair -client_auth -CAfile \OpenSSL\cert.tmp
220if errorlevel 1 goto done
221
222echo test sslv2/sslv3 with both client and server authentication via BIO pair
223cerun CE:\OpenSSL\ssltest -bio_pair -server_auth -client_auth -CAfile \OpenSSL\cert.tmp
224if errorlevel 1 goto done
225
226del cert.tmp
227
228echo passed all tests
229goto end
230:done
231echo problems.....
232:end
233PATH=%opath%
234
diff --git a/src/lib/libssl/src/ms/testce2.bat b/src/lib/libssl/src/ms/testce2.bat
deleted file mode 100644
index 24265b948f..0000000000
--- a/src/lib/libssl/src/ms/testce2.bat
+++ /dev/null
@@ -1,2 +0,0 @@
1cecopy %1.exe CE:\OpenSSL
2cerun CE:\OpenSSL\%1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/src/lib/libssl/src/ms/testenc.bat b/src/lib/libssl/src/ms/testenc.bat
deleted file mode 100644
index f8e90939ed..0000000000
--- a/src/lib/libssl/src/ms/testenc.bat
+++ /dev/null
@@ -1,94 +0,0 @@
1@echo off
2echo start testenc
3
4path=..\ms;%path%
5set ssleay=%1%
6set input=..\ms\testenc.bat
7set tmp1=..\ms\cipher.out
8set out1=..\ms\clear.out
9set cmp=perl ..\ms\cmp.pl
10
11cd
12call tenc.bat enc
13if errorlevel 1 goto err
14
15call tenc.bat rc4
16if errorlevel 1 goto err
17
18call tenc.bat des-cfb
19if errorlevel 1 goto err
20
21call tenc.bat des-ede-cfb
22if errorlevel 1 goto err
23
24call tenc.bat des-ede3-cfb
25if errorlevel 1 goto err
26
27call tenc.bat des-ofb
28if errorlevel 1 goto err
29
30call tenc.bat des-ede-ofb
31if errorlevel 1 goto err
32
33call tenc.bat des-ede3-ofb
34if errorlevel 1 goto err
35
36call tenc.bat des-ecb
37if errorlevel 1 goto err
38
39call tenc.bat des-ede
40if errorlevel 1 goto err
41
42call tenc.bat des-ede3
43if errorlevel 1 goto err
44
45call tenc.bat des-cbc
46if errorlevel 1 goto err
47
48call tenc.bat des-ede-cbc
49if errorlevel 1 goto err
50
51call tenc.bat des-ede3-cbc
52if errorlevel 1 goto err
53
54call tenc.bat idea-ecb
55if errorlevel 1 goto err
56
57call tenc.bat idea-cfb
58if errorlevel 1 goto err
59
60call tenc.bat idea-ofb
61if errorlevel 1 goto err
62
63call tenc.bat idea-cbc
64if errorlevel 1 goto err
65
66call tenc.bat rc2-ecb
67if errorlevel 1 goto err
68
69call tenc.bat rc2-cfb
70if errorlevel 1 goto err
71
72call tenc.bat rc2-ofb
73if errorlevel 1 goto err
74
75call tenc.bat rc2-cbc
76if errorlevel 1 goto err
77
78call tenc.bat bf-ecb
79if errorlevel 1 goto err
80
81call tenc.bat bf-cfb
82if errorlevel 1 goto err
83
84call tenc.bat bf-ofb
85if errorlevel 1 goto err
86
87call tenc.bat bf-cbc
88if errorlevel 1 goto err
89
90echo OK
91del %out1%
92del %tmp1%
93:err
94
diff --git a/src/lib/libssl/src/ms/testencce.bat b/src/lib/libssl/src/ms/testencce.bat
deleted file mode 100644
index 1da3e0861f..0000000000
--- a/src/lib/libssl/src/ms/testencce.bat
+++ /dev/null
@@ -1,97 +0,0 @@
1@echo off
2echo start testenc
3
4path=..\ms;%path%
5set ssleay=%1%
6copy ..\ms\testenc.bat >nul
7set input=testenc.bat
8set tmp1=cipher.out
9set out1=clear.out
10set cmp=perl ..\ms\cmp.pl
11
12cecopy %ssleay% CE:\OpenSSL
13
14cd
15call tencce.bat enc
16if errorlevel 1 goto err
17
18call tencce.bat rc4
19if errorlevel 1 goto err
20
21call tencce.bat des-cfb
22if errorlevel 1 goto err
23
24call tencce.bat des-ede-cfb
25if errorlevel 1 goto err
26
27call tencce.bat des-ede3-cfb
28if errorlevel 1 goto err
29
30call tencce.bat des-ofb
31if errorlevel 1 goto err
32
33call tencce.bat des-ede-ofb
34if errorlevel 1 goto err
35
36call tencce.bat des-ede3-ofb
37if errorlevel 1 goto err
38
39call tencce.bat des-ecb
40if errorlevel 1 goto err
41
42call tencce.bat des-ede
43if errorlevel 1 goto err
44
45call tencce.bat des-ede3
46if errorlevel 1 goto err
47
48call tencce.bat des-cbc
49if errorlevel 1 goto err
50
51call tencce.bat des-ede-cbc
52if errorlevel 1 goto err
53
54call tencce.bat des-ede3-cbc
55if errorlevel 1 goto err
56
57call tencce.bat idea-ecb
58if errorlevel 1 goto err
59
60call tencce.bat idea-cfb
61if errorlevel 1 goto err
62
63call tencce.bat idea-ofb
64if errorlevel 1 goto err
65
66call tencce.bat idea-cbc
67if errorlevel 1 goto err
68
69call tencce.bat rc2-ecb
70if errorlevel 1 goto err
71
72call tencce.bat rc2-cfb
73if errorlevel 1 goto err
74
75call tencce.bat rc2-ofb
76if errorlevel 1 goto err
77
78call tencce.bat rc2-cbc
79if errorlevel 1 goto err
80
81call tencce.bat bf-ecb
82if errorlevel 1 goto err
83
84call tencce.bat bf-cfb
85if errorlevel 1 goto err
86
87call tencce.bat bf-ofb
88if errorlevel 1 goto err
89
90call tencce.bat bf-cbc
91if errorlevel 1 goto err
92
93echo OK
94del %out1% >nul 2>&1
95del %tmp1% >nul 2>&1
96:err
97
diff --git a/src/lib/libssl/src/ms/testpem.bat b/src/lib/libssl/src/ms/testpem.bat
deleted file mode 100644
index 8b2e844d36..0000000000
--- a/src/lib/libssl/src/ms/testpem.bat
+++ /dev/null
@@ -1,32 +0,0 @@
1@echo off
2set ssleay=%1%
3set tmp1=pem.out
4set cmp=fc.exe
5
6call tpem.bat crl ..\test\testcrl.pem
7if errorlevel 1 goto err
8
9call tpem.bat pkcs7 ..\test\testp7.pem
10if errorlevel 1 goto err
11
12call tpem.bat req ..\test\testreq2.pem
13if errorlevel 1 goto err
14
15call tpem.bat rsa ..\test\testrsa.pem
16if errorlevel 1 goto err
17
18call tpem.bat x509 ..\test\testx509.pem
19if errorlevel 1 goto err
20
21call tpem.bat x509 ..\test\v3-cert1.pem
22if errorlevel 1 goto err
23
24call tpem.bat x509 ..\test\v3-cert1.pem
25if errorlevel 1 goto err
26
27call tpem.bat sess_id ..\test\testsid.pem
28if errorlevel 1 goto err
29
30echo OK
31del %tmp1%
32:err
diff --git a/src/lib/libssl/src/ms/testpemce.bat b/src/lib/libssl/src/ms/testpemce.bat
deleted file mode 100644
index ac64a7912c..0000000000
--- a/src/lib/libssl/src/ms/testpemce.bat
+++ /dev/null
@@ -1,42 +0,0 @@
1@echo off
2set ssleay=%1%
3set tmp1=pem.out
4set cmp=fc.exe
5
6cecopy %ssleay% CE:\OpenSSL
7
8copy ..\test\testcrl.pem >nul
9call tpemce.bat crl testcrl.pem
10if errorlevel 1 goto err
11
12copy ..\test\testp7.pem >nul
13call tpemce.bat pkcs7 testp7.pem
14if errorlevel 1 goto err
15
16copy ..\test\testreq2.pem >nul
17call tpemce.bat req testreq2.pem
18if errorlevel 1 goto err
19
20copy ..\test\testrsa.pem >nul
21call tpemce.bat rsa testrsa.pem
22if errorlevel 1 goto err
23
24copy ..\test\testx509.pem >nul
25call tpemce.bat x509 testx509.pem
26if errorlevel 1 goto err
27
28copy ..\test\v3-cert1.pem >nul
29call tpemce.bat x509 v3-cert1.pem
30if errorlevel 1 goto err
31
32copy ..\test\v3-cert1.pem >nul
33call tpemce.bat x509 v3-cert1.pem
34if errorlevel 1 goto err
35
36copy ..\test\testsid.pem >nul
37call tpemce.bat sess_id testsid.pem
38if errorlevel 1 goto err
39
40echo OK
41del %tmp1% >nul 2>&1
42:err
diff --git a/src/lib/libssl/src/ms/testss.bat b/src/lib/libssl/src/ms/testss.bat
deleted file mode 100644
index 5afa131dba..0000000000
--- a/src/lib/libssl/src/ms/testss.bat
+++ /dev/null
@@ -1,98 +0,0 @@
1@echo off
2
3rem set ssleay=..\out\ssleay
4set ssleay=%1
5
6set reqcmd=%ssleay% req
7set x509cmd=%ssleay% x509 -sha1
8set verifycmd=%ssleay% verify
9
10set CAkey=keyCA.ss
11set CAcert=certCA.ss
12set CAserial=certCA.srl
13set CAreq=reqCA.ss
14set CAconf=..\test\CAss.cnf
15set CAreq2=req2CA.ss
16
17set Uconf=..\test\Uss.cnf
18set Ukey=keyU.ss
19set Ureq=reqU.ss
20set Ucert=certU.ss
21
22echo make a certificate request using 'req'
23%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new
24if errorlevel 1 goto e_req
25
26echo convert the certificate request into a self signed certificate using 'x509'
27%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% >err.ss
28if errorlevel 1 goto e_x509
29
30echo --
31echo convert a certificate into a certificate request using 'x509'
32%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% >err.ss
33if errorlevel 1 goto e_x509_2
34
35%reqcmd% -verify -in %CAreq% -noout
36if errorlevel 1 goto e_vrfy_1
37
38%reqcmd% -verify -in %CAreq2% -noout
39if errorlevel 1 goto e_vrfy_2
40
41%verifycmd% -CAfile %CAcert% %CAcert%
42if errorlevel 1 goto e_vrfy_3
43
44echo --
45echo make another certificate request using 'req'
46%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new >err.ss
47if errorlevel 1 goto e_req_gen
48
49echo --
50echo sign certificate request with the just created CA via 'x509'
51%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey %CAkey% -CAserial %CAserial%
52if errorlevel 1 goto e_x_sign
53
54%verifycmd% -CAfile %CAcert% %Ucert%
55echo --
56echo Certificate details
57%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert%
58
59echo Everything appeared to work
60echo --
61echo The generated CA certificate is %CAcert%
62echo The generated CA private key is %CAkey%
63echo The current CA signing serial number is in %CAserial%
64
65echo The generated user certificate is %Ucert%
66echo The generated user private key is %Ukey%
67echo --
68
69del err.ss
70
71goto end
72
73:e_req
74echo error using 'req' to generate a certificate request
75goto end
76:e_x509
77echo error using 'x509' to self sign a certificate request
78goto end
79:e_x509_2
80echo error using 'x509' convert a certificate to a certificate request
81goto end
82:e_vrfy_1
83echo first generated request is invalid
84goto end
85:e_vrfy_2
86echo second generated request is invalid
87goto end
88:e_vrfy_3
89echo first generated cert is invalid
90goto end
91:e_req_gen
92echo error using 'req' to generate a certificate request
93goto end
94:e_x_sign
95echo error using 'x509' to sign a certificate request
96goto end
97
98:end
diff --git a/src/lib/libssl/src/ms/testssce.bat b/src/lib/libssl/src/ms/testssce.bat
deleted file mode 100644
index 18381ed2fa..0000000000
--- a/src/lib/libssl/src/ms/testssce.bat
+++ /dev/null
@@ -1,104 +0,0 @@
1rem set ssleay=..\out\ssleay
2set ssleay=%1
3
4set reqcmd=%ssleay% req
5set x509cmd=%ssleay% x509
6set verifycmd=%ssleay% verify
7
8set CAkey=\OpenSSL\keyCA.ss
9set CAcert=\OpenSSL\certCA.ss
10set CAserial=\OpenSSL\certCA.srl
11set CAreq=\OpenSSL\reqCA.ss
12cecopy ..\test\CAss.cnf CE:\OpenSSL
13set CAconf=\OpenSSL\CAss.cnf
14set CAreq2=\OpenSSL\req2CA.ss
15
16cecopy ..\test\Uss.cnf CE:\OpenSSL
17set Uconf=\OpenSSL\Uss.cnf
18set Ukey=\OpenSSL\keyU.ss
19set Ureq=\OpenSSL\reqU.ss
20set Ucert=\OpenSSL\certU.ss
21
22echo make a certificate request using 'req'
23cerun CE:\OpenSSL\%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new
24if errorlevel 1 goto e_req
25
26echo convert the certificate request into a self signed certificate using 'x509'
27cerun CE:\OpenSSL\%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% "> \OpenSSL\err.ss"
28if errorlevel 1 goto e_x509
29
30echo --
31echo convert a certificate into a certificate request using 'x509'
32cerun CE:\OpenSSL\%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% "> \OpenSSL\err.ss"
33if errorlevel 1 goto e_x509_2
34
35cerun CE:\OpenSSL\%reqcmd% -verify -in %CAreq% -noout
36if errorlevel 1 goto e_vrfy_1
37
38cerun CE:\OpenSSL\%reqcmd% -verify -in %CAreq2% -noout
39if errorlevel 1 goto e_vrfy_2
40
41cerun CE:\OpenSSL\%verifycmd% -CAfile %CAcert% %CAcert%
42if errorlevel 1 goto e_vrfy_3
43
44echo --
45echo make another certificate request using 'req'
46cerun CE:\OpenSSL\%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new "> \OpenSSL\err.ss"
47if errorlevel 1 goto e_req_gen
48
49echo --
50echo sign certificate request with the just created CA via 'x509'
51cerun CE:\OpenSSL\%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey %CAkey% -CAserial %CAserial%
52if errorlevel 1 goto e_x_sign
53
54cerun CE:\OpenSSL\%verifycmd% -CAfile %CAcert% %Ucert%
55echo --
56echo Certificate details
57cerun CE:\OpenSSL\%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert%
58
59cecopy CE:%CAcert% .
60cecopy CE:%CAkey% .
61cecopy CE:%CAserial% .
62cecopy CE:%Ucert% .
63cecopy CE:%Ukey% .
64
65echo Everything appeared to work
66echo --
67echo The generated CA certificate is %CAcert%
68echo The generated CA private key is %CAkey%
69echo The current CA signing serial number is in %CAserial%
70
71echo The generated user certificate is %Ucert%
72echo The generated user private key is %Ukey%
73echo --
74
75cedel CE:\OpenSSL\err.ss
76
77goto end
78
79:e_req
80echo error using 'req' to generate a certificate request
81goto end
82:e_x509
83echo error using 'x509' to self sign a certificate request
84goto end
85:e_x509_2
86echo error using 'x509' convert a certificate to a certificate request
87goto end
88:e_vrfy_1
89echo first generated request is invalid
90goto end
91:e_vrfy_2
92echo second generated request is invalid
93goto end
94:e_vrfy_3
95echo first generated cert is invalid
96goto end
97:e_req_gen
98echo error using 'req' to generate a certificate request
99goto end
100:e_x_sign
101echo error using 'x509' to sign a certificate request
102goto end
103
104:end
diff --git a/src/lib/libssl/src/ms/tlhelp32.h b/src/lib/libssl/src/ms/tlhelp32.h
deleted file mode 100644
index 8f4222e34f..0000000000
--- a/src/lib/libssl/src/ms/tlhelp32.h
+++ /dev/null
@@ -1,136 +0,0 @@
1/*
2 tlhelp32.h - Include file for Tool help functions.
3
4 Written by Mumit Khan <khan@nanotech.wisc.edu>
5
6 This file is part of a free library for the Win32 API.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
12*/
13#ifndef _TLHELP32_H
14#define _TLHELP32_H
15#ifdef __cplusplus
16extern "C" {
17#endif
18#define HF32_DEFAULT 1
19#define HF32_SHARED 2
20#define LF32_FIXED 0x1
21#define LF32_FREE 0x2
22#define LF32_MOVEABLE 0x4
23#define MAX_MODULE_NAME32 255
24#define TH32CS_SNAPHEAPLIST 0x1
25#define TH32CS_SNAPPROCESS 0x2
26#define TH32CS_SNAPTHREAD 0x4
27#define TH32CS_SNAPMODULE 0x8
28#define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST|TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD|TH32CS_SNAPMODULE)
29#define TH32CS_INHERIT 0x80000000
30typedef struct tagHEAPLIST32 {
31 DWORD dwSize;
32 DWORD th32ProcessID;
33 DWORD th32HeapID;
34 DWORD dwFlags;
35} HEAPLIST32,*PHEAPLIST32,*LPHEAPLIST32;
36typedef struct tagHEAPENTRY32 {
37 DWORD dwSize;
38 HANDLE hHandle;
39 DWORD dwAddress;
40 DWORD dwBlockSize;
41 DWORD dwFlags;
42 DWORD dwLockCount;
43 DWORD dwResvd;
44 DWORD th32ProcessID;
45 DWORD th32HeapID;
46} HEAPENTRY32,*PHEAPENTRY32,*LPHEAPENTRY32;
47typedef struct tagPROCESSENTRY32W {
48 DWORD dwSize;
49 DWORD cntUsage;
50 DWORD th32ProcessID;
51 DWORD th32DefaultHeapID;
52 DWORD th32ModuleID;
53 DWORD cntThreads;
54 DWORD th32ParentProcessID;
55 LONG pcPriClassBase;
56 DWORD dwFlags;
57 WCHAR szExeFile[MAX_PATH];
58} PROCESSENTRY32W,*PPROCESSENTRY32W,*LPPROCESSENTRY32W;
59typedef struct tagPROCESSENTRY32 {
60 DWORD dwSize;
61 DWORD cntUsage;
62 DWORD th32ProcessID;
63 DWORD th32DefaultHeapID;
64 DWORD th32ModuleID;
65 DWORD cntThreads;
66 DWORD th32ParentProcessID;
67 LONG pcPriClassBase;
68 DWORD dwFlags;
69 CHAR szExeFile[MAX_PATH];
70} PROCESSENTRY32,*PPROCESSENTRY32,*LPPROCESSENTRY32;
71typedef struct tagTHREADENTRY32 {
72 DWORD dwSize;
73 DWORD cntUsage;
74 DWORD th32ThreadID;
75 DWORD th32OwnerProcessID;
76 LONG tpBasePri;
77 LONG tpDeltaPri;
78 DWORD dwFlags;
79} THREADENTRY32,*PTHREADENTRY32,*LPTHREADENTRY32;
80typedef struct tagMODULEENTRY32W {
81 DWORD dwSize;
82 DWORD th32ModuleID;
83 DWORD th32ProcessID;
84 DWORD GlblcntUsage;
85 DWORD ProccntUsage;
86 BYTE *modBaseAddr;
87 DWORD modBaseSize;
88 HMODULE hModule;
89 WCHAR szModule[MAX_MODULE_NAME32 + 1];
90 WCHAR szExePath[MAX_PATH];
91} MODULEENTRY32W,*PMODULEENTRY32W,*LPMODULEENTRY32W;
92typedef struct tagMODULEENTRY32 {
93 DWORD dwSize;
94 DWORD th32ModuleID;
95 DWORD th32ProcessID;
96 DWORD GlblcntUsage;
97 DWORD ProccntUsage;
98 BYTE *modBaseAddr;
99 DWORD modBaseSize;
100 HMODULE hModule;
101 char szModule[MAX_MODULE_NAME32 + 1];
102 char szExePath[MAX_PATH];
103} MODULEENTRY32,*PMODULEENTRY32,*LPMODULEENTRY32;
104BOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,DWORD);
105BOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32);
106BOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32);
107BOOL WINAPI Heap32Next(LPHEAPENTRY32);
108BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);
109BOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W);
110BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);
111BOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W);
112BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32);
113BOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W);
114BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32);
115BOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W);
116BOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32);
117BOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32);
118BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,DWORD,LPDWORD);
119HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);
120#ifdef UNICODE
121#define LPMODULEENTRY32 LPMODULEENTRY32W
122#define LPPROCESSENTRY32 LPPROCESSENTRY32W
123#define MODULEENTRY32 MODULEENTRY32W
124#define Module32First Module32FirstW
125#define Module32Next Module32NextW
126#define PMODULEENTRY32 PMODULEENTRY32W
127#define PPROCESSENTRY32 PPROCESSENTRY32W
128#define PROCESSENTRY32 PROCESSENTRY32W
129#define Process32First Process32FirstW
130#define Process32Next Process32NextW
131#endif /* UNICODE */
132#ifdef __cplusplus
133}
134#endif
135#endif /* _TLHELP32_H */
136
diff --git a/src/lib/libssl/src/ms/tpem.bat b/src/lib/libssl/src/ms/tpem.bat
deleted file mode 100644
index cd01792e9f..0000000000
--- a/src/lib/libssl/src/ms/tpem.bat
+++ /dev/null
@@ -1,6 +0,0 @@
1rem called by testpem
2
3echo test %1 %2
4%ssleay% %1 -in %2 -out %tmp1%
5%cmp% %2 %tmp1%
6
diff --git a/src/lib/libssl/src/ms/tpemce.bat b/src/lib/libssl/src/ms/tpemce.bat
deleted file mode 100644
index 483f559cfa..0000000000
--- a/src/lib/libssl/src/ms/tpemce.bat
+++ /dev/null
@@ -1,8 +0,0 @@
1rem called by testpemce
2
3echo test %1 %2
4cecopy %2 CE:\OpenSSL
5cerun CE:\OpenSSL\%ssleay% %1 -in \OpenSSL\%2 -out \OpenSSL\%tmp1%
6del %tmp1% >nul 2>&1
7cecopy CE:\OpenSSL\%tmp1% .
8%cmp% %2 %tmp1%
diff --git a/src/lib/libssl/src/ms/uplink-common.pl b/src/lib/libssl/src/ms/uplink-common.pl
deleted file mode 100755
index 1d20e6e03e..0000000000
--- a/src/lib/libssl/src/ms/uplink-common.pl
+++ /dev/null
@@ -1,22 +0,0 @@
1#!/usr/bin/env perl
2#
3# pull APPLINK_MAX value from applink.c...
4$applink_c=$0;
5$applink_c=~s|[^/\\]+$||g;
6$applink_c.="applink.c";
7open(INPUT,$applink_c) || die "can't open $applink_c: $!";
8@max=grep {/APPLINK_MAX\s+(\d+)/} <INPUT>;
9close(INPUT);
10($#max==0) or die "can't find APPLINK_MAX in $applink_c";
11
12$max[0]=~/APPLINK_MAX\s+(\d+)/;
13$N=$1; # number of entries in OPENSSL_UplinkTable not including
14 # OPENSSL_UplinkTable[0], which contains this value...
15
161;
17
18# Idea is to fill the OPENSSL_UplinkTable with pointers to stubs
19# which invoke 'void OPENSSL_Uplink (ULONG_PTR *table,int index)';
20# and then dereference themselves. Latter shall result in endless
21# loop *unless* OPENSSL_Uplink does not replace 'table[index]' with
22# something else, e.g. as 'table[index]=unimplemented;'...
diff --git a/src/lib/libssl/src/ms/uplink-ia64.pl b/src/lib/libssl/src/ms/uplink-ia64.pl
deleted file mode 100755
index 4204c73d58..0000000000
--- a/src/lib/libssl/src/ms/uplink-ia64.pl
+++ /dev/null
@@ -1,50 +0,0 @@
1#!/usr/bin/env perl
2
3$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
4push(@INC,"${dir}.");
5
6require "uplink-common.pl";
7
8local $V=8; # max number of args uplink functions may accept...
9my $loc0 = "r".(32+$V);
10print <<___;
11.text
12.global OPENSSL_Uplink#
13.type OPENSSL_Uplink#,\@function
14
15___
16for ($i=1;$i<=$N;$i++) {
17print <<___;
18.proc lazy$i#
19lazy$i:
20 .prologue
21{ .mii; .save ar.pfs,$loc0
22 alloc loc0=ar.pfs,$V,3,2,0
23 .save b0,loc1
24 mov loc1=b0
25 addl loc2=\@ltoff(OPENSSL_UplinkTable#),gp };;
26 .body
27{ .mmi; ld8 out0=[loc2]
28 mov out1=$i };;
29{ .mib; add loc2=8*$i,out0
30 br.call.sptk.many b0=OPENSSL_Uplink# };;
31{ .mmi; ld8 r31=[loc2];;
32 ld8 r30=[r31],8 };;
33{ .mii; ld8 gp=[r31]
34 mov b6=r30
35 mov b0=loc1 };;
36{ .mib; mov ar.pfs=loc0
37 br.many b6 };;
38.endp lazy$i#
39
40___
41}
42print <<___;
43.data
44.global OPENSSL_UplinkTable#
45OPENSSL_UplinkTable: data8 $N // amount of following entries
46___
47for ($i=1;$i<=$N;$i++) { print " data8 \@fptr(lazy$i#)\n"; }
48print <<___;
49.size OPENSSL_UplinkTable,.-OPENSSL_UplinkTable#
50___
diff --git a/src/lib/libssl/src/ms/uplink-x86.pl b/src/lib/libssl/src/ms/uplink-x86.pl
deleted file mode 100755
index 0dffc14fcd..0000000000
--- a/src/lib/libssl/src/ms/uplink-x86.pl
+++ /dev/null
@@ -1,33 +0,0 @@
1#!/usr/bin/env perl
2
3$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
4push(@INC, "${dir}.", "${dir}../crypto/perlasm");
5require "x86asm.pl";
6
7require "uplink-common.pl";
8
9&asm_init($ARGV[0],"uplink-x86");
10
11&external_label("OPENSSL_Uplink");
12&public_label("OPENSSL_UplinkTable");
13
14for ($i=1;$i<=$N;$i++) {
15&function_begin_B("_\$lazy${i}");
16 &lea ("eax",&DWP(&label("OPENSSL_UplinkTable")));
17 &push ("eax");
18 &push ($i);
19 &call (&label("OPENSSL_Uplink"));
20 &add ("esp",8);
21 &pop ("eax");
22 &jmp_ptr(&DWP(4*$i,"eax"));
23&function_end_B("_\$lazy${i}");
24}
25
26&dataseg();
27&align(4);
28&set_label("OPENSSL_UplinkTable");
29&data_word($N);
30for ($i=1;$i<=$N;$i++) {
31&data_word(&label("_\$lazy${i}"));
32}
33&asm_finish();
diff --git a/src/lib/libssl/src/ms/uplink-x86_64.pl b/src/lib/libssl/src/ms/uplink-x86_64.pl
deleted file mode 100755
index 9acbf6be6f..0000000000
--- a/src/lib/libssl/src/ms/uplink-x86_64.pl
+++ /dev/null
@@ -1,64 +0,0 @@
1#!/usr/bin/env perl
2
3$output=shift;
4$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
5open STDOUT,"| $^X ${dir}../crypto/perlasm/x86_64-xlate.pl $output";
6push(@INC,"${dir}.");
7
8require "uplink-common.pl";
9
10$prefix="_lazy";
11
12print <<___;
13.text
14.extern OPENSSL_Uplink
15.globl OPENSSL_UplinkTable
16___
17for ($i=1;$i<=$N;$i++) {
18print <<___;
19.type $prefix${i},\@abi-omnipotent
20.align 16
21$prefix${i}:
22 .byte 0x48,0x83,0xEC,0x28 # sub rsp,40
23 mov %rcx,48(%rsp)
24 mov %rdx,56(%rsp)
25 mov %r8,64(%rsp)
26 mov %r9,72(%rsp)
27 lea OPENSSL_UplinkTable(%rip),%rcx
28 mov \$$i,%rdx
29 call OPENSSL_Uplink
30 mov 48(%rsp),%rcx
31 mov 56(%rsp),%rdx
32 mov 64(%rsp),%r8
33 mov 72(%rsp),%r9
34 lea OPENSSL_UplinkTable(%rip),%rax
35 add \$40,%rsp
36 jmp *8*$i(%rax)
37$prefix${i}_end:
38.size $prefix${i},.-$prefix${i}
39___
40}
41print <<___;
42.data
43OPENSSL_UplinkTable:
44 .quad $N
45___
46for ($i=1;$i<=$N;$i++) { print " .quad $prefix$i\n"; }
47print <<___;
48.section .pdata,"r"
49.align 4
50___
51for ($i=1;$i<=$N;$i++) {
52print <<___;
53 .rva $prefix${i},$prefix${i}_end,${prefix}_unwind_info
54___
55}
56print <<___;
57.section .xdata,"r"
58.align 8
59${prefix}_unwind_info:
60 .byte 0x01,0x04,0x01,0x00
61 .byte 0x04,0x42,0x00,0x00
62___
63
64close STDOUT;
diff --git a/src/lib/libssl/src/ms/uplink.c b/src/lib/libssl/src/ms/uplink.c
deleted file mode 100644
index 6d59cb1f87..0000000000
--- a/src/lib/libssl/src/ms/uplink.c
+++ /dev/null
@@ -1,117 +0,0 @@
1#if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE)
2#define UNICODE
3#endif
4#if defined(UNICODE) && !defined(_UNICODE)
5#define _UNICODE
6#endif
7#if defined(_UNICODE) && !defined(UNICODE)
8#define UNICODE
9#endif
10
11#include <windows.h>
12#include <tchar.h>
13#include <stdio.h>
14#include "uplink.h"
15void OPENSSL_showfatal(const char *,...);
16
17static TCHAR msg[128];
18
19static void unimplemented (void)
20{ OPENSSL_showfatal (sizeof(TCHAR)==sizeof(char)?"%s\n":"%S\n",msg);
21 ExitProcess (1);
22}
23
24void OPENSSL_Uplink (volatile void **table, int index)
25{ static HMODULE volatile apphandle=NULL;
26 static void ** volatile applinktable=NULL;
27 int len;
28 void (*func)(void)=unimplemented;
29 HANDLE h;
30 void **p;
31
32 /* Note that the below code is not MT-safe in respect to msg
33 * buffer, but what's the worst thing that can happen? Error
34 * message might be misleading or corrupted. As error condition
35 * is fatal and should never be risen, I accept the risk... */
36 /* One can argue that I should have used InterlockedExchangePointer
37 * or something to update static variables and table[]. Well,
38 * store instructions are as atomic as they can get and assigned
39 * values are effectively constant... So that volatile qualifier
40 * should be sufficient [it prohibits compiler to reorder memory
41 * access instructions]. */
42 do {
43 len = _sntprintf (msg,sizeof(msg)/sizeof(TCHAR),
44 _T("OPENSSL_Uplink(%p,%02X): "),table,index);
45 _tcscpy (msg+len,_T("unimplemented function"));
46
47 if ((h=apphandle)==NULL)
48 { if ((h=GetModuleHandle(NULL))==NULL)
49 { apphandle=(HMODULE)-1;
50 _tcscpy (msg+len,_T("no host application"));
51 break;
52 }
53 apphandle = h;
54 }
55 if ((h=apphandle)==(HMODULE)-1) /* revalidate */
56 break;
57
58 if (applinktable==NULL)
59 { void**(*applink)();
60
61 applink=(void**(*)())GetProcAddress(h,"OPENSSL_Applink");
62 if (applink==NULL)
63 { apphandle=(HMODULE)-1;
64 _tcscpy (msg+len,_T("no OPENSSL_Applink"));
65 break;
66 }
67 p = (*applink)();
68 if (p==NULL)
69 { apphandle=(HMODULE)-1;
70 _tcscpy (msg+len,_T("no ApplinkTable"));
71 break;
72 }
73 applinktable = p;
74 }
75 else
76 p = applinktable;
77
78 if (index > (int)p[0])
79 break;
80
81 if (p[index]) func = p[index];
82 } while (0);
83
84 table[index] = func;
85}
86
87#if defined(_MSC_VER) && defined(_M_IX86) && !defined(OPENSSL_NO_INLINE_ASM)
88#define LAZY(i) \
89__declspec(naked) static void lazy##i (void) { \
90 _asm push i \
91 _asm push OFFSET OPENSSL_UplinkTable \
92 _asm call OPENSSL_Uplink \
93 _asm add esp,8 \
94 _asm jmp OPENSSL_UplinkTable+4*i }
95
96#if APPLINK_MAX>25
97#error "Add more stubs..."
98#endif
99/* make some in advance... */
100LAZY(1) LAZY(2) LAZY(3) LAZY(4) LAZY(5)
101LAZY(6) LAZY(7) LAZY(8) LAZY(9) LAZY(10)
102LAZY(11) LAZY(12) LAZY(13) LAZY(14) LAZY(15)
103LAZY(16) LAZY(17) LAZY(18) LAZY(19) LAZY(20)
104LAZY(21) LAZY(22) LAZY(23) LAZY(24) LAZY(25)
105void *OPENSSL_UplinkTable[] = {
106 (void *)APPLINK_MAX,
107 lazy1, lazy2, lazy3, lazy4, lazy5,
108 lazy6, lazy7, lazy8, lazy9, lazy10,
109 lazy11,lazy12,lazy13,lazy14,lazy15,
110 lazy16,lazy17,lazy18,lazy19,lazy20,
111 lazy21,lazy22,lazy23,lazy24,lazy25,
112};
113#endif
114
115#ifdef SELFTEST
116main() { UP_fprintf(UP_stdout,"hello, world!\n"); }
117#endif
diff --git a/src/lib/libssl/src/ms/uplink.h b/src/lib/libssl/src/ms/uplink.h
deleted file mode 100644
index 4881ba7d42..0000000000
--- a/src/lib/libssl/src/ms/uplink.h
+++ /dev/null
@@ -1,29 +0,0 @@
1#define APPMACROS_ONLY
2#include "applink.c"
3
4extern void *OPENSSL_UplinkTable[];
5
6#define UP_stdin (*(void *(*)(void))OPENSSL_UplinkTable[APPLINK_STDIN])()
7#define UP_stdout (*(void *(*)(void))OPENSSL_UplinkTable[APPLINK_STDOUT])()
8#define UP_stderr (*(void *(*)(void))OPENSSL_UplinkTable[APPLINK_STDERR])()
9#define UP_fprintf (*(int (*)(void *,const char *,...))OPENSSL_UplinkTable[APPLINK_FPRINTF])
10#define UP_fgets (*(char *(*)(char *,int,void *))OPENSSL_UplinkTable[APPLINK_FGETS])
11#define UP_fread (*(size_t (*)(void *,size_t,size_t,void *))OPENSSL_UplinkTable[APPLINK_FREAD])
12#define UP_fwrite (*(size_t (*)(const void *,size_t,size_t,void *))OPENSSL_UplinkTable[APPLINK_FWRITE])
13#define UP_fsetmod (*(int (*)(void *,char))OPENSSL_UplinkTable[APPLINK_FSETMOD])
14#define UP_feof (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FEOF])
15#define UP_fclose (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FCLOSE])
16
17#define UP_fopen (*(void *(*)(const char *,const char *))OPENSSL_UplinkTable[APPLINK_FOPEN])
18#define UP_fseek (*(int (*)(void *,long,int))OPENSSL_UplinkTable[APPLINK_FSEEK])
19#define UP_ftell (*(long (*)(void *))OPENSSL_UplinkTable[APPLINK_FTELL])
20#define UP_fflush (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FFLUSH])
21#define UP_ferror (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FERROR])
22#define UP_clearerr (*(void (*)(void *))OPENSSL_UplinkTable[APPLINK_CLEARERR])
23#define UP_fileno (*(int (*)(void *))OPENSSL_UplinkTable[APPLINK_FILENO])
24
25#define UP_open (*(int (*)(const char *,int,...))OPENSSL_UplinkTable[APPLINK_OPEN])
26#define UP_read (*(ossl_ssize_t (*)(int,void *,size_t))OPENSSL_UplinkTable[APPLINK_READ])
27#define UP_write (*(ossl_ssize_t (*)(int,const void *,size_t))OPENSSL_UplinkTable[APPLINK_WRITE])
28#define UP_lseek (*(long (*)(int,long,int))OPENSSL_UplinkTable[APPLINK_LSEEK])
29#define UP_close (*(int (*)(int))OPENSSL_UplinkTable[APPLINK_CLOSE])
diff --git a/src/lib/libssl/src/ms/uplink.pl b/src/lib/libssl/src/ms/uplink.pl
deleted file mode 100755
index 102400e880..0000000000
--- a/src/lib/libssl/src/ms/uplink.pl
+++ /dev/null
@@ -1,204 +0,0 @@
1#!/usr/bin/env perl
2#
3# For Microsoft CL this is implemented as inline assembler. So that
4# even though this script can generate even Win32 code, we'll be
5# using it primarily to generate Win64 modules. Both IA-64 and AMD64
6# are supported...
7
8# pull APPLINK_MAX value from applink.c...
9$applink_c=$0;
10$applink_c=~s|[^/\\]+$||g;
11$applink_c.="applink.c";
12open(INPUT,$applink_c) || die "can't open $applink_c: $!";
13@max=grep {/APPLINK_MAX\s+(\d+)/} <INPUT>;
14close(INPUT);
15($#max==0) or die "can't find APPLINK_MAX in $applink_c";
16
17$max[0]=~/APPLINK_MAX\s+(\d+)/;
18$N=$1; # number of entries in OPENSSL_UplinkTable not including
19 # OPENSSL_UplinkTable[0], which contains this value...
20
21# Idea is to fill the OPENSSL_UplinkTable with pointers to stubs
22# which invoke 'void OPENSSL_Uplink (ULONG_PTR *table,int index)';
23# and then dereference themselves. Latter shall result in endless
24# loop *unless* OPENSSL_Uplink does not replace 'table[index]' with
25# something else, e.g. as 'table[index]=unimplemented;'...
26
27$arg = shift;
28#( defined shift || open STDOUT,">$arg" ) || die "can't open $arg: $!";
29
30if ($arg =~ /win32n/) { ia32nasm(); }
31elsif ($arg =~ /win32/) { ia32masm(); }
32elsif ($arg =~ /coff/) { ia32gas(); }
33elsif ($arg =~ /win64i/ or $arg =~ /ia64/) { ia64ias(); }
34elsif ($arg =~ /win64a/ or $arg =~ /amd64/) { amd64masm(); }
35else { die "nonsense $arg"; }
36
37sub ia32gas() {
38print <<___;
39.text
40___
41for ($i=1;$i<=$N;$i++) {
42print <<___;
43.def .Lazy$i; .scl 3; .type 32; .endef
44.align 4
45.Lazy$i:
46 pushl \$$i
47 pushl \$_OPENSSL_UplinkTable
48 call _OPENSSL_Uplink
49 addl \$8,%esp
50 jmp *(_OPENSSL_UplinkTable+4*$i)
51___
52}
53print <<___;
54.data
55.align 4
56.globl _OPENSSL_UplinkTable
57_OPENSSL_UplinkTable:
58 .long $N
59___
60for ($i=1;$i<=$N;$i++) { print " .long .Lazy$i\n"; }
61}
62
63sub ia32masm() {
64print <<___;
65.386P
66.model FLAT
67
68_DATA SEGMENT
69PUBLIC _OPENSSL_UplinkTable
70_OPENSSL_UplinkTable DD $N ; amount of following entries
71___
72for ($i=1;$i<=$N;$i++) { print " DD FLAT:\$lazy$i\n"; }
73print <<___;
74_DATA ENDS
75
76_TEXT SEGMENT
77EXTRN _OPENSSL_Uplink:NEAR
78___
79for ($i=1;$i<=$N;$i++) {
80print <<___;
81ALIGN 4
82\$lazy$i PROC NEAR
83 push $i
84 push OFFSET FLAT:_OPENSSL_UplinkTable
85 call _OPENSSL_Uplink
86 add esp,8
87 jmp DWORD PTR _OPENSSL_UplinkTable+4*$i
88\$lazy$i ENDP
89___
90}
91print <<___;
92ALIGN 4
93_TEXT ENDS
94END
95___
96}
97
98sub ia32nasm() {
99print <<___;
100SEGMENT .data
101GLOBAL _OPENSSL_UplinkTable
102_OPENSSL_UplinkTable DD $N ; amount of following entries
103___
104for ($i=1;$i<=$N;$i++) { print " DD \$lazy$i\n"; }
105print <<___;
106
107SEGMENT .text
108EXTERN _OPENSSL_Uplink
109___
110for ($i=1;$i<=$N;$i++) {
111print <<___;
112ALIGN 4
113\$lazy$i:
114 push $i
115 push _OPENSSL_UplinkTable
116 call _OPENSSL_Uplink
117 add esp,8
118 jmp [_OPENSSL_UplinkTable+4*$i]
119___
120}
121print <<___;
122ALIGN 4
123END
124___
125}
126
127sub ia64ias () {
128local $V=8; # max number of args uplink functions may accept...
129print <<___;
130.data
131.global OPENSSL_UplinkTable#
132OPENSSL_UplinkTable: data8 $N // amount of following entries
133___
134for ($i=1;$i<=$N;$i++) { print " data8 \@fptr(lazy$i#)\n"; }
135print <<___;
136.size OPENSSL_UplinkTable,.-OPENSSL_UplinkTable#
137
138.text
139.global OPENSSL_Uplink#
140.type OPENSSL_Uplink#,\@function
141___
142for ($i=1;$i<=$N;$i++) {
143print <<___;
144.proc lazy$i
145lazy$i:
146{ .mii; alloc loc0=ar.pfs,$V,3,2,0
147 mov loc1=b0
148 addl loc2=\@ltoff(OPENSSL_UplinkTable#),gp };;
149{ .mmi; ld8 out0=[loc2]
150 mov out1=$i };;
151{ .mib; adds loc2=8*$i,out0
152 br.call.sptk.many b0=OPENSSL_Uplink# };;
153{ .mmi; ld8 r31=[loc2];;
154 ld8 r30=[r31],8 };;
155{ .mii; ld8 gp=[r31]
156 mov b6=r30
157 mov b0=loc1 };;
158{ .mib; mov ar.pfs=loc0
159 br.many b6 };;
160.endp lazy$i#
161___
162}
163}
164
165sub amd64masm() {
166print <<___;
167_DATA SEGMENT
168PUBLIC OPENSSL_UplinkTable
169OPENSSL_UplinkTable DQ $N
170___
171for ($i=1;$i<=$N;$i++) { print " DQ \$lazy$i\n"; }
172print <<___;
173_DATA ENDS
174
175_TEXT SEGMENT
176EXTERN OPENSSL_Uplink:PROC
177___
178for ($i=1;$i<=$N;$i++) {
179print <<___;
180ALIGN 4
181\$lazy$i PROC
182 push r9
183 push r8
184 push rdx
185 push rcx
186 sub rsp,40
187 lea rcx,OFFSET OPENSSL_UplinkTable
188 mov rdx,$i
189 call OPENSSL_Uplink
190 add rsp,40
191 pop rcx
192 pop rdx
193 pop r8
194 pop r9
195 jmp QWORD PTR OPENSSL_UplinkTable+8*$i
196\$lazy$i ENDP
197___
198}
199print <<___;
200_TEXT ENDS
201END
202___
203}
204
diff --git a/src/lib/libssl/src/ms/x86asm.bat b/src/lib/libssl/src/ms/x86asm.bat
deleted file mode 100644
index 03563c6b04..0000000000
--- a/src/lib/libssl/src/ms/x86asm.bat
+++ /dev/null
@@ -1,57 +0,0 @@
1
2@echo off
3echo Generating x86 assember
4
5echo Bignum
6cd crypto\bn\asm
7perl x86.pl win32n > bn-win32.asm
8cd ..\..\..
9
10echo DES
11cd crypto\des\asm
12perl des-586.pl win32n > d-win32.asm
13cd ..\..\..
14
15echo "crypt(3)"
16
17cd crypto\des\asm
18perl crypt586.pl win32n > y-win32.asm
19cd ..\..\..
20
21echo Blowfish
22
23cd crypto\bf\asm
24perl bf-586.pl win32n > b-win32.asm
25cd ..\..\..
26
27echo CAST5
28cd crypto\cast\asm
29perl cast-586.pl win32n > c-win32.asm
30cd ..\..\..
31
32echo RC4
33cd crypto\rc4\asm
34perl rc4-586.pl win32n > r4-win32.asm
35cd ..\..\..
36
37echo MD5
38cd crypto\md5\asm
39perl md5-586.pl win32n > m5-win32.asm
40cd ..\..\..
41
42echo SHA1
43cd crypto\sha\asm
44perl sha1-586.pl win32n > s1-win32.asm
45cd ..\..\..
46
47echo RIPEMD160
48cd crypto\ripemd\asm
49perl rmd-586.pl win32n > rm-win32.asm
50cd ..\..\..
51
52echo RC5\32
53cd crypto\rc5\asm
54perl rc5-586.pl win32n > r5-win32.asm
55cd ..\..\..
56
57echo on
diff --git a/src/lib/libssl/src/openssl.spec b/src/lib/libssl/src/openssl.spec
index 0d86222e43..44147ce64a 100644
--- a/src/lib/libssl/src/openssl.spec
+++ b/src/lib/libssl/src/openssl.spec
@@ -1,8 +1,5 @@
1%define _unpackaged_files_terminate_build 0 1%define _unpackaged_files_terminate_build 0
2%define libmaj 1 2
3%define libmin 0
4%define librel 1
5%define librev c
6Release: 1 3Release: 1
7 4
8%define openssldir /var/ssl 5%define openssldir /var/ssl
@@ -10,9 +7,9 @@ Release: 1
10Summary: Secure Sockets Layer and cryptography libraries and tools 7Summary: Secure Sockets Layer and cryptography libraries and tools
11Name: openssl 8Name: openssl
12#Version: %{libmaj}.%{libmin}.%{librel} 9#Version: %{libmaj}.%{libmin}.%{librel}
13Version: %{libmaj}.%{libmin}.%{librel}%{librev} 10Version: 1.0.1g
14Source0: ftp://ftp.openssl.org/source/%{name}-%{version}.tar.gz 11Source0: ftp://ftp.openssl.org/source/%{name}-%{version}.tar.gz
15Copyright: Freely distributable 12License: OpenSSL
16Group: System Environment/Libraries 13Group: System Environment/Libraries
17Provides: SSL 14Provides: SSL
18URL: http://www.openssl.org/ 15URL: http://www.openssl.org/
diff --git a/src/lib/libssl/src/os2/OS2-EMX.cmd b/src/lib/libssl/src/os2/OS2-EMX.cmd
deleted file mode 100644
index 5924b50b6d..0000000000
--- a/src/lib/libssl/src/os2/OS2-EMX.cmd
+++ /dev/null
@@ -1,102 +0,0 @@
1@echo off
2
3perl Configure OS2-EMX
4perl util\mkfiles.pl > MINFO
5
6@rem create make file
7perl util\mk1mf.pl OS2-EMX > OS2-EMX.mak
8perl util\mk1mf.pl dll OS2-EMX > OS2-EMX-DLL.mak
9
10echo Generating export definition files
11perl util\mkdef.pl crypto OS2 > os2\crypto.def
12perl util\mkdef.pl ssl OS2 > os2\ssl.def
13
14echo Generating x86 for GNU assember
15
16echo Bignum
17cd crypto\bn\asm
18rem perl x86.pl a.out > bn-os2.asm
19perl bn-586.pl a.out > bn-os2.asm
20perl co-586.pl a.out > co-os2.asm
21cd ..\..\..
22
23echo DES
24cd crypto\des\asm
25perl des-586.pl a.out > d-os2.asm
26cd ..\..\..
27
28echo crypt(3)
29cd crypto\des\asm
30perl crypt586.pl a.out > y-os2.asm
31cd ..\..\..
32
33echo Blowfish
34cd crypto\bf\asm
35perl bf-586.pl a.out > b-os2.asm
36cd ..\..\..
37
38echo CAST5
39cd crypto\cast\asm
40perl cast-586.pl a.out > c-os2.asm
41cd ..\..\..
42
43echo RC4
44cd crypto\rc4\asm
45perl rc4-586.pl a.out > r4-os2.asm
46cd ..\..\..
47
48echo MD5
49cd crypto\md5\asm
50perl md5-586.pl a.out > m5-os2.asm
51cd ..\..\..
52
53echo SHA1
54cd crypto\sha\asm
55perl sha1-586.pl a.out > s1-os2.asm
56cd ..\..\..
57
58echo RIPEMD160
59cd crypto\ripemd\asm
60perl rmd-586.pl a.out > rm-os2.asm
61cd ..\..\..
62
63echo RC5\32
64cd crypto\rc5\asm
65perl rc5-586.pl a.out > r5-os2.asm
66cd ..\..\..
67
68cd os2
69
70if exist noname\backward_ssl.def goto nomkdir
71mkdir noname
72:nomkdir
73
74perl backwardify.pl crypto.def >backward_crypto.def
75perl backwardify.pl ssl.def >backward_ssl.def
76perl backwardify.pl -noname crypto.def >noname\backward_crypto.def
77perl backwardify.pl -noname ssl.def >noname\backward_ssl.def
78
79echo Creating backward compatibility forwarder dlls:
80echo crypto.dll
81gcc -Zomf -Zdll -Zcrtdll -o crypto.dll backward_crypto.def 2>&1 | grep -v L4085
82echo ssl.dll
83gcc -Zomf -Zdll -Zcrtdll -o ssl.dll backward_ssl.def 2>&1 | grep -v L4085
84
85echo Creating smaller backward compatibility forwarder dlls:
86echo These DLLs are not good for runtime resolution of symbols.
87echo noname\crypto.dll
88gcc -Zomf -Zdll -Zcrtdll -o noname/crypto.dll noname/backward_crypto.def 2>&1 | grep -v L4085
89echo noname\ssl.dll
90gcc -Zomf -Zdll -Zcrtdll -o noname/ssl.dll noname/backward_ssl.def 2>&1 | grep -v L4085
91
92echo Compressing forwarders (it is ok if lxlite is not found):
93lxlite *.dll noname/*.dll
94
95cd ..
96
97echo Now run:
98echo For static build:
99echo make -f OS2-EMX.mak
100echo For dynamic build:
101echo make -f OS2-EMX-DLL.mak
102echo then rename crypto.dll to cryptssl.dll, ssl.dll to open_ssl.dll
diff --git a/src/lib/libssl/src/os2/backwardify.pl b/src/lib/libssl/src/os2/backwardify.pl
deleted file mode 100644
index 272423c8fa..0000000000
--- a/src/lib/libssl/src/os2/backwardify.pl
+++ /dev/null
@@ -1,32 +0,0 @@
1#!/usr/bin/perl -w
2use strict;
3
4# Use as $0
5# Use as $0 -noname
6
7my $did_library;
8my $did_description;
9my $do_exports;
10my @imports;
11my $noname = (@ARGV and $ARGV[0] eq '-noname' and shift);
12while (<>) {
13 unless ($did_library) {
14 s/\b(cryptssl)\b/crypto/ and $did_library = $1 if /^LIBRARY\s+cryptssl\b/;
15 s/\b(open_ssl)\b/ssl/ and $did_library = $1 if /^LIBRARY\s+open_ssl\b/;
16 }
17 unless ($did_description) {
18 s&^(DESCRIPTION\s+(['"])).*&${1}\@#www.openssl.org/:#\@forwarder DLL for pre-0.9.7c+ OpenSSL to the new dll naming scheme$2& and $did_description++;
19 }
20 if ($do_exports) {{
21 last unless /\S/;
22 warn, last unless /^ \s* ( \w+ ) \s+ \@(\d+)\s*$/x;
23 push @imports, [$1, $2];
24 s/$/ NONAME/ if $noname;
25 }}
26 $do_exports++ if not $do_exports and /^EXPORTS/;
27 print $_;
28}
29print "IMPORTS\n";
30for my $imp (@imports) {
31 print "\t$imp->[0]=$did_library.$imp->[1]\n";
32}
diff --git a/src/lib/libssl/src/ssl/Makefile b/src/lib/libssl/src/ssl/Makefile
index feaf3e358a..debe07405b 100644
--- a/src/lib/libssl/src/ssl/Makefile
+++ b/src/lib/libssl/src/ssl/Makefile
@@ -22,7 +22,7 @@ LIB=$(TOP)/libssl.a
22SHARED_LIB= libssl$(SHLIB_EXT) 22SHARED_LIB= libssl$(SHLIB_EXT)
23LIBSRC= \ 23LIBSRC= \
24 s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c \ 24 s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c \
25 s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c \ 25 s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c \
26 s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c \ 26 s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c \
27 t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c \ 27 t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c \
28 d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c \ 28 d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c \
@@ -33,7 +33,7 @@ LIBSRC= \
33 bio_ssl.c ssl_err.c kssl.c tls_srp.c t1_reneg.c 33 bio_ssl.c ssl_err.c kssl.c tls_srp.c t1_reneg.c
34LIBOBJ= \ 34LIBOBJ= \
35 s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o \ 35 s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o \
36 s3_meth.o s3_srvr.o s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o \ 36 s3_meth.o s3_srvr.o s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s3_cbc.o \
37 s23_meth.o s23_srvr.o s23_clnt.o s23_lib.o s23_pkt.o \ 37 s23_meth.o s23_srvr.o s23_clnt.o s23_lib.o s23_pkt.o \
38 t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o \ 38 t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o \
39 d1_meth.o d1_srvr.o d1_clnt.o d1_lib.o d1_pkt.o \ 39 d1_meth.o d1_srvr.o d1_clnt.o d1_lib.o d1_pkt.o \
@@ -547,6 +547,26 @@ s3_both.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
547s3_both.o: ../include/openssl/stack.h ../include/openssl/symhacks.h 547s3_both.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
548s3_both.o: ../include/openssl/tls1.h ../include/openssl/x509.h 548s3_both.o: ../include/openssl/tls1.h ../include/openssl/x509.h
549s3_both.o: ../include/openssl/x509_vfy.h s3_both.c ssl_locl.h 549s3_both.o: ../include/openssl/x509_vfy.h s3_both.c ssl_locl.h
550s3_cbc.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
551s3_cbc.o: ../include/openssl/buffer.h ../include/openssl/comp.h
552s3_cbc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
553s3_cbc.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
554s3_cbc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
555s3_cbc.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
556s3_cbc.o: ../include/openssl/evp.h ../include/openssl/hmac.h
557s3_cbc.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
558s3_cbc.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h
559s3_cbc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
560s3_cbc.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
561s3_cbc.o: ../include/openssl/pem.h ../include/openssl/pem2.h
562s3_cbc.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
563s3_cbc.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
564s3_cbc.o: ../include/openssl/sha.h ../include/openssl/srtp.h
565s3_cbc.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
566s3_cbc.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
567s3_cbc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
568s3_cbc.o: ../include/openssl/tls1.h ../include/openssl/x509.h
569s3_cbc.o: ../include/openssl/x509_vfy.h s3_cbc.c ssl_locl.h
550s3_clnt.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h 570s3_clnt.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
551s3_clnt.o: ../include/openssl/bn.h ../include/openssl/buffer.h 571s3_clnt.o: ../include/openssl/bn.h ../include/openssl/buffer.h
552s3_clnt.o: ../include/openssl/comp.h ../include/openssl/crypto.h 572s3_clnt.o: ../include/openssl/comp.h ../include/openssl/crypto.h
diff --git a/src/lib/libssl/src/ssl/d1_both.c b/src/lib/libssl/src/ssl/d1_both.c
index e4b718efa7..2e8cf681ed 100644
--- a/src/lib/libssl/src/ssl/d1_both.c
+++ b/src/lib/libssl/src/ssl/d1_both.c
@@ -220,7 +220,6 @@ dtls1_hm_fragment_free(hm_fragment *frag)
220 EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx); 220 EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx);
221 EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash); 221 EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash);
222 } 222 }
223
224 if (frag->fragment) OPENSSL_free(frag->fragment); 223 if (frag->fragment) OPENSSL_free(frag->fragment);
225 if (frag->reassembly) OPENSSL_free(frag->reassembly); 224 if (frag->reassembly) OPENSSL_free(frag->reassembly);
226 OPENSSL_free(frag); 225 OPENSSL_free(frag);
@@ -320,9 +319,10 @@ int dtls1_do_write(SSL *s, int type)
320 s->init_off -= DTLS1_HM_HEADER_LENGTH; 319 s->init_off -= DTLS1_HM_HEADER_LENGTH;
321 s->init_num += DTLS1_HM_HEADER_LENGTH; 320 s->init_num += DTLS1_HM_HEADER_LENGTH;
322 321
323 /* write atleast DTLS1_HM_HEADER_LENGTH bytes */ 322 if ( s->init_num > curr_mtu)
324 if ( len <= DTLS1_HM_HEADER_LENGTH) 323 len = curr_mtu;
325 len += DTLS1_HM_HEADER_LENGTH; 324 else
325 len = s->init_num;
326 } 326 }
327 327
328 dtls1_fix_message_header(s, frag_off, 328 dtls1_fix_message_header(s, frag_off,
diff --git a/src/lib/libssl/src/ssl/d1_clnt.c b/src/lib/libssl/src/ssl/d1_clnt.c
index a6ed09c51d..48e5e06bde 100644
--- a/src/lib/libssl/src/ssl/d1_clnt.c
+++ b/src/lib/libssl/src/ssl/d1_clnt.c
@@ -538,13 +538,6 @@ int dtls1_connect(SSL *s)
538 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); 538 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
539 if (ret <= 0) goto end; 539 if (ret <= 0) goto end;
540 540
541#ifndef OPENSSL_NO_SCTP
542 /* Change to new shared key of SCTP-Auth,
543 * will be ignored if no SCTP used.
544 */
545 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
546#endif
547
548 s->state=SSL3_ST_CW_FINISHED_A; 541 s->state=SSL3_ST_CW_FINISHED_A;
549 s->init_num=0; 542 s->init_num=0;
550 543
@@ -571,6 +564,16 @@ int dtls1_connect(SSL *s)
571 goto end; 564 goto end;
572 } 565 }
573 566
567#ifndef OPENSSL_NO_SCTP
568 if (s->hit)
569 {
570 /* Change to new shared key of SCTP-Auth,
571 * will be ignored if no SCTP used.
572 */
573 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
574 }
575#endif
576
574 dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); 577 dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
575 break; 578 break;
576 579
@@ -613,6 +616,13 @@ int dtls1_connect(SSL *s)
613 } 616 }
614 else 617 else
615 { 618 {
619#ifndef OPENSSL_NO_SCTP
620 /* Change to new shared key of SCTP-Auth,
621 * will be ignored if no SCTP used.
622 */
623 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
624#endif
625
616#ifndef OPENSSL_NO_TLSEXT 626#ifndef OPENSSL_NO_TLSEXT
617 /* Allow NewSessionTicket if ticket expected */ 627 /* Allow NewSessionTicket if ticket expected */
618 if (s->tlsext_ticket_expected) 628 if (s->tlsext_ticket_expected)
@@ -773,7 +783,7 @@ int dtls1_client_hello(SSL *s)
773 unsigned char *buf; 783 unsigned char *buf;
774 unsigned char *p,*d; 784 unsigned char *p,*d;
775 unsigned int i,j; 785 unsigned int i,j;
776 unsigned long Time,l; 786 unsigned long l;
777 SSL_COMP *comp; 787 SSL_COMP *comp;
778 788
779 buf=(unsigned char *)s->init_buf->data; 789 buf=(unsigned char *)s->init_buf->data;
@@ -798,13 +808,11 @@ int dtls1_client_hello(SSL *s)
798 808
799 /* if client_random is initialized, reuse it, we are 809 /* if client_random is initialized, reuse it, we are
800 * required to use same upon reply to HelloVerify */ 810 * required to use same upon reply to HelloVerify */
801 for (i=0;p[i]=='\0' && i<sizeof(s->s3->client_random);i++) ; 811 for (i=0;p[i]=='\0' && i<sizeof(s->s3->client_random);i++)
812 ;
802 if (i==sizeof(s->s3->client_random)) 813 if (i==sizeof(s->s3->client_random))
803 { 814 ssl_fill_hello_random(s, 0, p,
804 Time=(unsigned long)time(NULL); /* Time */ 815 sizeof(s->s3->client_random));
805 l2n(Time,p);
806 RAND_pseudo_bytes(p,sizeof(s->s3->client_random)-4);
807 }
808 816
809 /* Do the message type and length last */ 817 /* Do the message type and length last */
810 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]); 818 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]);
diff --git a/src/lib/libssl/src/ssl/d1_pkt.c b/src/lib/libssl/src/ssl/d1_pkt.c
index cfe4524553..8186462d4a 100644
--- a/src/lib/libssl/src/ssl/d1_pkt.c
+++ b/src/lib/libssl/src/ssl/d1_pkt.c
@@ -455,7 +455,7 @@ printf("\n");
455 orig_len < mac_size+1)) 455 orig_len < mac_size+1))
456 { 456 {
457 al=SSL_AD_DECODE_ERROR; 457 al=SSL_AD_DECODE_ERROR;
458 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT); 458 SSLerr(SSL_F_DTLS1_PROCESS_RECORD,SSL_R_LENGTH_TOO_SHORT);
459 goto f_err; 459 goto f_err;
460 } 460 }
461 461
@@ -480,7 +480,7 @@ printf("\n");
480 } 480 }
481 481
482 i=s->method->ssl3_enc->mac(s,md,0 /* not send */); 482 i=s->method->ssl3_enc->mac(s,md,0 /* not send */);
483 if (i < 0 || mac == NULL || timingsafe_bcmp(md, mac, (size_t)mac_size) != 0) 483 if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
484 enc_err = -1; 484 enc_err = -1;
485 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+mac_size) 485 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+mac_size)
486 enc_err = -1; 486 enc_err = -1;
@@ -847,6 +847,12 @@ start:
847 } 847 }
848 } 848 }
849 849
850 if (s->d1->listen && rr->type != SSL3_RT_HANDSHAKE)
851 {
852 rr->length = 0;
853 goto start;
854 }
855
850 /* we now have a packet which can be read and processed */ 856 /* we now have a packet which can be read and processed */
851 857
852 if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, 858 if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
@@ -1051,6 +1057,7 @@ start:
1051 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && 1057 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
1052 !s->s3->renegotiate) 1058 !s->s3->renegotiate)
1053 { 1059 {
1060 s->d1->handshake_read_seq++;
1054 s->new_session = 1; 1061 s->new_session = 1;
1055 ssl3_renegotiate(s); 1062 ssl3_renegotiate(s);
1056 if (ssl3_renegotiate_check(s)) 1063 if (ssl3_renegotiate_check(s))
diff --git a/src/lib/libssl/src/ssl/d1_srvr.c b/src/lib/libssl/src/ssl/d1_srvr.c
index 29421da9aa..9975e20873 100644
--- a/src/lib/libssl/src/ssl/d1_srvr.c
+++ b/src/lib/libssl/src/ssl/d1_srvr.c
@@ -276,10 +276,11 @@ int dtls1_accept(SSL *s)
276 case SSL3_ST_SW_HELLO_REQ_B: 276 case SSL3_ST_SW_HELLO_REQ_B:
277 277
278 s->shutdown=0; 278 s->shutdown=0;
279 dtls1_clear_record_buffer(s);
279 dtls1_start_timer(s); 280 dtls1_start_timer(s);
280 ret=dtls1_send_hello_request(s); 281 ret=dtls1_send_hello_request(s);
281 if (ret <= 0) goto end; 282 if (ret <= 0) goto end;
282 s->s3->tmp.next_state=SSL3_ST_SW_HELLO_REQ_C; 283 s->s3->tmp.next_state=SSL3_ST_SR_CLNT_HELLO_A;
283 s->state=SSL3_ST_SW_FLUSH; 284 s->state=SSL3_ST_SW_FLUSH;
284 s->init_num=0; 285 s->init_num=0;
285 286
@@ -721,10 +722,13 @@ int dtls1_accept(SSL *s)
721 if (ret <= 0) goto end; 722 if (ret <= 0) goto end;
722 723
723#ifndef OPENSSL_NO_SCTP 724#ifndef OPENSSL_NO_SCTP
724 /* Change to new shared key of SCTP-Auth, 725 if (!s->hit)
725 * will be ignored if no SCTP used. 726 {
726 */ 727 /* Change to new shared key of SCTP-Auth,
727 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); 728 * will be ignored if no SCTP used.
729 */
730 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
731 }
728#endif 732#endif
729 733
730 s->state=SSL3_ST_SW_FINISHED_A; 734 s->state=SSL3_ST_SW_FINISHED_A;
@@ -749,7 +753,16 @@ int dtls1_accept(SSL *s)
749 if (ret <= 0) goto end; 753 if (ret <= 0) goto end;
750 s->state=SSL3_ST_SW_FLUSH; 754 s->state=SSL3_ST_SW_FLUSH;
751 if (s->hit) 755 if (s->hit)
756 {
752 s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A; 757 s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A;
758
759#ifndef OPENSSL_NO_SCTP
760 /* Change to new shared key of SCTP-Auth,
761 * will be ignored if no SCTP used.
762 */
763 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL);
764#endif
765 }
753 else 766 else
754 { 767 {
755 s->s3->tmp.next_state=SSL_ST_OK; 768 s->s3->tmp.next_state=SSL_ST_OK;
@@ -912,15 +925,13 @@ int dtls1_send_server_hello(SSL *s)
912 unsigned char *p,*d; 925 unsigned char *p,*d;
913 int i; 926 int i;
914 unsigned int sl; 927 unsigned int sl;
915 unsigned long l,Time; 928 unsigned long l;
916 929
917 if (s->state == SSL3_ST_SW_SRVR_HELLO_A) 930 if (s->state == SSL3_ST_SW_SRVR_HELLO_A)
918 { 931 {
919 buf=(unsigned char *)s->init_buf->data; 932 buf=(unsigned char *)s->init_buf->data;
920 p=s->s3->server_random; 933 p=s->s3->server_random;
921 Time=(unsigned long)time(NULL); /* Time */ 934 ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE);
922 l2n(Time,p);
923 RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4);
924 /* Do the message type and length last */ 935 /* Do the message type and length last */
925 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]); 936 d=p= &(buf[DTLS1_HM_HEADER_LENGTH]);
926 937
diff --git a/src/lib/libssl/src/ssl/dtls1.h b/src/lib/libssl/src/ssl/dtls1.h
index 5008bf6081..e65d501191 100644
--- a/src/lib/libssl/src/ssl/dtls1.h
+++ b/src/lib/libssl/src/ssl/dtls1.h
@@ -57,8 +57,8 @@
57 * 57 *
58 */ 58 */
59 59
60#ifndef HEADER_DTLS1_H 60#ifndef HEADER_DTLS1_H
61#define HEADER_DTLS1_H 61#define HEADER_DTLS1_H
62 62
63#include <openssl/buffer.h> 63#include <openssl/buffer.h>
64#include <openssl/pqueue.h> 64#include <openssl/pqueue.h>
@@ -72,8 +72,12 @@
72#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) 72#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)
73#include <sys/timeval.h> 73#include <sys/timeval.h>
74#else 74#else
75#if defined(OPENSSL_SYS_VXWORKS)
76#include <sys/times.h>
77#else
75#include <sys/time.h> 78#include <sys/time.h>
76#endif 79#endif
80#endif
77 81
78#ifdef __cplusplus 82#ifdef __cplusplus
79extern "C" { 83extern "C" {
diff --git a/src/lib/libssl/src/ssl/install-ssl.com b/src/lib/libssl/src/ssl/install-ssl.com
deleted file mode 100755
index afe6967f85..0000000000
--- a/src/lib/libssl/src/ssl/install-ssl.com
+++ /dev/null
@@ -1,136 +0,0 @@
1$! INSTALL-SSL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! P1 root of the directory tree
7$! P2 "64" for 64-bit pointers.
8$!
9$!
10$! Announce/identify.
11$!
12$ proc = f$environment( "procedure")
13$ write sys$output "@@@ "+ -
14 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
15$!
16$ on error then goto tidy
17$ on control_c then goto tidy
18$!
19$ if p1 .eqs. ""
20$ then
21$ write sys$output "First argument missing."
22$ write sys$output -
23 "It should be the directory where you want things installed."
24$ exit
25$ endif
26$!
27$ if (f$getsyi( "cpu") .lt. 128)
28$ then
29$ arch = "VAX"
30$ else
31$ arch = f$edit( f$getsyi( "arch_name"), "upcase")
32$ if (arch .eqs. "") then arch = "UNK"
33$ endif
34$!
35$ archd = arch
36$ lib32 = "32"
37$ shr = "_SHR32"
38$!
39$ if (p2 .nes. "")
40$ then
41$ if (p2 .eqs. "64")
42$ then
43$ archd = arch+ "_64"
44$ lib32 = ""
45$ shr = "_SHR"
46$ else
47$ if (p2 .nes. "32")
48$ then
49$ write sys$output "Second argument invalid."
50$ write sys$output "It should be "32", "64", or nothing."
51$ exit
52$ endif
53$ endif
54$ endif
55$!
56$ root = f$parse( p1, "[]A.;0", , , "syntax_only, no_conceal") - "A.;0"
57$ root_dev = f$parse(root,,,"device","syntax_only")
58$ root_dir = f$parse(root,,,"directory","syntax_only") - -
59 "[000000." - "][" - "[" - "]"
60$ root = root_dev + "[" + root_dir
61$!
62$ define /nolog wrk_sslroot 'root'.] /trans=conc
63$ define /nolog wrk_sslinclude wrk_sslroot:[include]
64$ define /nolog wrk_sslxexe wrk_sslroot:['archd'_exe]
65$ define /nolog wrk_sslxlib wrk_sslroot:['arch'_lib]
66$!
67$ if f$parse("wrk_sslroot:[000000]") .eqs. "" then -
68 create /directory /log wrk_sslroot:[000000]
69$ if f$parse("wrk_sslinclude:") .eqs. "" then -
70 create /directory /log wrk_sslinclude:
71$ if f$parse("wrk_sslxexe:") .eqs. "" then -
72 create /directory /log wrk_sslxexe:
73$ if f$parse("wrk_sslxlib:") .eqs. "" then -
74 create /directory /log wrk_sslxlib:
75$!
76$ exheader := ssl.h, ssl2.h, ssl3.h, ssl23.h, tls1.h, dtls1.h, kssl.h, srtp.h
77$ e_exe := ssl_task
78$ libs := ssl_libssl
79$!
80$ xexe_dir := [-.'archd'.exe.ssl]
81$!
82$ copy /protection = w:re 'exheader' wrk_sslinclude: /log
83$!
84$ i = 0
85$ loop_exe:
86$ e = f$edit( f$element( i, ",", e_exe), "trim")
87$ i = i + 1
88$ if e .eqs. "," then goto loop_exe_end
89$ set noon
90$ file = xexe_dir+ e+ ".exe"
91$ if f$search( file) .nes. ""
92$ then
93$ copy /protection = w:re 'file' wrk_sslxexe: /log
94$ endif
95$ set on
96$ goto loop_exe
97$ loop_exe_end:
98$!
99$ i = 0
100$ loop_lib:
101$ e = f$edit(f$element(i, ",", libs),"trim")
102$ i = i + 1
103$ if e .eqs. "," then goto loop_lib_end
104$ set noon
105$! Object library.
106$ file = xexe_dir+ e+ lib32+ ".olb"
107$ if f$search( file) .nes. ""
108$ then
109$ copy /protection = w:re 'file' wrk_sslxlib: /log
110$ endif
111$! Shareable image.
112$ file = xexe_dir+ e+ shr+ ".exe"
113$ if f$search( file) .nes. ""
114$ then
115$ copy /protection = w:re 'file' wrk_sslxlib: /log
116$ endif
117$ set on
118$ goto loop_lib
119$ loop_lib_end:
120$!
121$ tidy:
122$!
123$ call deass wrk_sslroot
124$ call deass wrk_sslinclude
125$ call deass wrk_sslxexe
126$ call deass wrk_sslxlib
127$!
128$ exit
129$!
130$ deass: subroutine
131$ if (f$trnlnm( p1, "LNM$PROCESS") .nes. "")
132$ then
133$ deassign /process 'p1'
134$ endif
135$ endsubroutine
136$!
diff --git a/src/lib/libssl/src/ssl/install.com b/src/lib/libssl/src/ssl/install.com
deleted file mode 100644
index 7f56067599..0000000000
--- a/src/lib/libssl/src/ssl/install.com
+++ /dev/null
@@ -1,90 +0,0 @@
1$! INSTALL.COM -- Installs the files in a given directory tree
2$!
3$! Author: Richard Levitte <richard@levitte.org>
4$! Time of creation: 22-MAY-1998 10:13
5$!
6$! P1 root of the directory tree
7$!
8$ IF P1 .EQS. ""
9$ THEN
10$ WRITE SYS$OUTPUT "First argument missing."
11$ WRITE SYS$OUTPUT -
12 "It should be the directory where you want things installed."
13$ EXIT
14$ ENDIF
15$
16$ IF (F$GETSYI("CPU").LT.128)
17$ THEN
18$ ARCH := VAX
19$ ELSE
20$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
21$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
22$ ENDIF
23$
24$ ROOT = F$PARSE(P1,"[]A.;0",,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
25$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
26$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
27 - "[000000." - "][" - "[" - "]"
28$ ROOT = ROOT_DEV + "[" + ROOT_DIR
29$
30$ DEFINE/NOLOG WRK_SSLROOT 'ROOT'.] /TRANS=CONC
31$ DEFINE/NOLOG WRK_SSLXLIB WRK_SSLROOT:['ARCH'_LIB]
32$ DEFINE/NOLOG WRK_SSLINCLUDE WRK_SSLROOT:[INCLUDE]
33$ DEFINE/NOLOG WRK_SSLXEXE WRK_SSLROOT:['ARCH'_EXE]
34$
35$ IF F$PARSE("WRK_SSLROOT:[000000]") .EQS. "" THEN -
36 CREATE/DIR/LOG WRK_SSLROOT:[000000]
37$ IF F$PARSE("WRK_SSLXLIB:") .EQS. "" THEN -
38 CREATE/DIR/LOG WRK_SSLXLIB:
39$ IF F$PARSE("WRK_SSLINCLUDE:") .EQS. "" THEN -
40 CREATE/DIR/LOG WRK_SSLINCLUDE:
41$ IF F$PARSE("WRK_SSLXEXE:") .EQS. "" THEN -
42 CREATE/DIR/LOG WRK_SSLXEXE:
43$
44$ EXHEADER := ssl.h,ssl2.h,ssl3.h,ssl23.h,tls1.h,dtls1.h,kssl.h
45$ E_EXE := ssl_task
46$ LIBS := LIBSSL
47$
48$ XEXE_DIR := [-.'ARCH'.EXE.SSL]
49$
50$ COPY 'EXHEADER' WRK_SSLINCLUDE:/LOG
51$ SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'EXHEADER'
52$
53$ I = 0
54$ LOOP_EXE:
55$ E = F$EDIT(F$ELEMENT(I, ",", E_EXE),"TRIM")
56$ I = I + 1
57$ IF E .EQS. "," THEN GOTO LOOP_EXE_END
58$ SET NOON
59$ IF F$SEARCH(XEXE_DIR+E+".EXE") .NES. ""
60$ THEN
61$ COPY 'XEXE_DIR''E'.EXE WRK_SSLXEXE:'E'.EXE/log
62$ SET FILE/PROT=W:RE WRK_SSLXEXE:'E'.EXE
63$ ENDIF
64$ SET ON
65$ GOTO LOOP_EXE
66$ LOOP_EXE_END:
67$
68$ I = 0
69$ LOOP_LIB:
70$ E = F$EDIT(F$ELEMENT(I, ",", LIBS),"TRIM")
71$ I = I + 1
72$ IF E .EQS. "," THEN GOTO LOOP_LIB_END
73$ SET NOON
74$! Object library.
75$ IF F$SEARCH(XEXE_DIR+E+".OLB") .NES. ""
76$ THEN
77$ COPY 'XEXE_DIR''E'.OLB WRK_SSLXLIB:'E'.OLB/log
78$ SET FILE/PROT=W:RE WRK_SSLXLIB:'E'.OLB
79$ ENDIF
80$! Shareable image.
81$ IF F$SEARCH(XEXE_DIR+E+".EXE") .NES. ""
82$ THEN
83$ COPY 'XEXE_DIR''E'.EXE WRK_SSLXLIB:'E'.EXE/log
84$ SET FILE/PROT=W:RE WRK_SSLXLIB:'E'.EXE
85$ ENDIF
86$ SET ON
87$ GOTO LOOP_LIB
88$ LOOP_LIB_END:
89$
90$ EXIT
diff --git a/src/lib/libssl/src/ssl/kssl.h b/src/lib/libssl/src/ssl/kssl.h
index 8242fd5eeb..e4df843073 100644
--- a/src/lib/libssl/src/ssl/kssl.h
+++ b/src/lib/libssl/src/ssl/kssl.h
@@ -70,6 +70,15 @@
70#include <stdio.h> 70#include <stdio.h>
71#include <ctype.h> 71#include <ctype.h>
72#include <krb5.h> 72#include <krb5.h>
73#ifdef OPENSSL_SYS_WIN32
74/* These can sometimes get redefined indirectly by krb5 header files
75 * after they get undefed in ossl_typ.h
76 */
77#undef X509_NAME
78#undef X509_EXTENSIONS
79#undef OCSP_REQUEST
80#undef OCSP_RESPONSE
81#endif
73 82
74#ifdef __cplusplus 83#ifdef __cplusplus
75extern "C" { 84extern "C" {
diff --git a/src/lib/libssl/src/ssl/s23_clnt.c b/src/lib/libssl/src/ssl/s23_clnt.c
index 47673e740a..2b93c639dd 100644
--- a/src/lib/libssl/src/ssl/s23_clnt.c
+++ b/src/lib/libssl/src/ssl/s23_clnt.c
@@ -269,12 +269,35 @@ static int ssl23_no_ssl2_ciphers(SSL *s)
269 return 1; 269 return 1;
270 } 270 }
271 271
272/* Fill a ClientRandom or ServerRandom field of length len. Returns <= 0
273 * on failure, 1 on success. */
274int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, int len)
275 {
276 int send_time = 0;
277
278 if (len < 4)
279 return 0;
280 if (server)
281 send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
282 else
283 send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
284 if (send_time)
285 {
286 unsigned long Time = (unsigned long)time(NULL);
287 unsigned char *p = result;
288 l2n(Time, p);
289 return RAND_pseudo_bytes(p, len-4);
290 }
291 else
292 return RAND_pseudo_bytes(result, len);
293 }
294
272static int ssl23_client_hello(SSL *s) 295static int ssl23_client_hello(SSL *s)
273 { 296 {
274 unsigned char *buf; 297 unsigned char *buf;
275 unsigned char *p,*d; 298 unsigned char *p,*d;
276 int i,ch_len; 299 int i,ch_len;
277 unsigned long Time,l; 300 unsigned long l;
278 int ssl2_compat; 301 int ssl2_compat;
279 int version = 0, version_major, version_minor; 302 int version = 0, version_major, version_minor;
280#ifndef OPENSSL_NO_COMP 303#ifndef OPENSSL_NO_COMP
@@ -355,9 +378,7 @@ static int ssl23_client_hello(SSL *s)
355#endif 378#endif
356 379
357 p=s->s3->client_random; 380 p=s->s3->client_random;
358 Time=(unsigned long)time(NULL); /* Time */ 381 if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0)
359 l2n(Time,p);
360 if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
361 return -1; 382 return -1;
362 383
363 if (version == TLS1_2_VERSION) 384 if (version == TLS1_2_VERSION)
diff --git a/src/lib/libssl/src/ssl/s2_clnt.c b/src/lib/libssl/src/ssl/s2_clnt.c
index c65d27946f..03b6cf9673 100644
--- a/src/lib/libssl/src/ssl/s2_clnt.c
+++ b/src/lib/libssl/src/ssl/s2_clnt.c
@@ -359,12 +359,14 @@ static int get_server_hello(SSL *s)
359 SSL_R_PEER_ERROR); 359 SSL_R_PEER_ERROR);
360 return(-1); 360 return(-1);
361 } 361 }
362#ifdef __APPLE_CC__ 362#if 0
363 /* The Rhapsody 5.5 (a.k.a. MacOS X) compiler bug
364 * workaround. <appro@fy.chalmers.se> */
365 s->hit=(i=*(p++))?1:0;
366#else
367 s->hit=(*(p++))?1:0; 363 s->hit=(*(p++))?1:0;
364 /* Some [PPC?] compilers fail to increment p in above
365 statement, e.g. one provided with Rhapsody 5.5, but
366 most recent example XL C 11.1 for AIX, even without
367 optimization flag... */
368#else
369 s->hit=(*p)?1:0; p++;
368#endif 370#endif
369 s->s2->tmp.cert_type= *(p++); 371 s->s2->tmp.cert_type= *(p++);
370 n2s(p,i); 372 n2s(p,i);
@@ -937,7 +939,7 @@ static int get_server_verify(SSL *s)
937 s->msg_callback(0, s->version, 0, p, len, s, s->msg_callback_arg); /* SERVER-VERIFY */ 939 s->msg_callback(0, s->version, 0, p, len, s, s->msg_callback_arg); /* SERVER-VERIFY */
938 p += 1; 940 p += 1;
939 941
940 if (timingsafe_bcmp(p,s->s2->challenge,s->s2->challenge_length) != 0) 942 if (CRYPTO_memcmp(p,s->s2->challenge,s->s2->challenge_length) != 0)
941 { 943 {
942 ssl2_return_error(s,SSL2_PE_UNDEFINED_ERROR); 944 ssl2_return_error(s,SSL2_PE_UNDEFINED_ERROR);
943 SSLerr(SSL_F_GET_SERVER_VERIFY,SSL_R_CHALLENGE_IS_DIFFERENT); 945 SSLerr(SSL_F_GET_SERVER_VERIFY,SSL_R_CHALLENGE_IS_DIFFERENT);
diff --git a/src/lib/libssl/src/ssl/s2_pkt.c b/src/lib/libssl/src/ssl/s2_pkt.c
index b6ac9caf4a..8bb6ab8baa 100644
--- a/src/lib/libssl/src/ssl/s2_pkt.c
+++ b/src/lib/libssl/src/ssl/s2_pkt.c
@@ -269,7 +269,7 @@ static int ssl2_read_internal(SSL *s, void *buf, int len, int peek)
269 s->s2->ract_data_length-=mac_size; 269 s->s2->ract_data_length-=mac_size;
270 ssl2_mac(s,mac,0); 270 ssl2_mac(s,mac,0);
271 s->s2->ract_data_length-=s->s2->padding; 271 s->s2->ract_data_length-=s->s2->padding;
272 if ( (timingsafe_bcmp(mac,s->s2->mac_data,mac_size) != 0) || 272 if ( (CRYPTO_memcmp(mac,s->s2->mac_data,mac_size) != 0) ||
273 (s->s2->rlength%EVP_CIPHER_CTX_block_size(s->enc_read_ctx) != 0)) 273 (s->s2->rlength%EVP_CIPHER_CTX_block_size(s->enc_read_ctx) != 0))
274 { 274 {
275 SSLerr(SSL_F_SSL2_READ_INTERNAL,SSL_R_BAD_MAC_DECODE); 275 SSLerr(SSL_F_SSL2_READ_INTERNAL,SSL_R_BAD_MAC_DECODE);
diff --git a/src/lib/libssl/src/ssl/s2_srvr.c b/src/lib/libssl/src/ssl/s2_srvr.c
index bc885e8e7f..2cba426bb7 100644
--- a/src/lib/libssl/src/ssl/s2_srvr.c
+++ b/src/lib/libssl/src/ssl/s2_srvr.c
@@ -1059,10 +1059,12 @@ static int request_certificate(SSL *s)
1059 EVP_PKEY *pkey=NULL; 1059 EVP_PKEY *pkey=NULL;
1060 1060
1061 EVP_MD_CTX_init(&ctx); 1061 EVP_MD_CTX_init(&ctx);
1062 EVP_VerifyInit_ex(&ctx,s->ctx->rsa_md5, NULL); 1062 if (!EVP_VerifyInit_ex(&ctx,s->ctx->rsa_md5, NULL)
1063 EVP_VerifyUpdate(&ctx,s->s2->key_material, 1063 || !EVP_VerifyUpdate(&ctx,s->s2->key_material,
1064 s->s2->key_material_length); 1064 s->s2->key_material_length)
1065 EVP_VerifyUpdate(&ctx,ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH); 1065 || !EVP_VerifyUpdate(&ctx,ccd,
1066 SSL2_MIN_CERT_CHALLENGE_LENGTH))
1067 goto msg_end;
1066 1068
1067 i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,NULL); 1069 i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,NULL);
1068 buf2=OPENSSL_malloc((unsigned int)i); 1070 buf2=OPENSSL_malloc((unsigned int)i);
@@ -1073,7 +1075,11 @@ static int request_certificate(SSL *s)
1073 } 1075 }
1074 p2=buf2; 1076 p2=buf2;
1075 i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,&p2); 1077 i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,&p2);
1076 EVP_VerifyUpdate(&ctx,buf2,(unsigned int)i); 1078 if (!EVP_VerifyUpdate(&ctx,buf2,(unsigned int)i))
1079 {
1080 OPENSSL_free(buf2);
1081 goto msg_end;
1082 }
1077 OPENSSL_free(buf2); 1083 OPENSSL_free(buf2);
1078 1084
1079 pkey=X509_get_pubkey(x509); 1085 pkey=X509_get_pubkey(x509);
diff --git a/src/lib/libssl/src/ssl/s3_both.c b/src/lib/libssl/src/ssl/s3_both.c
index ed0fcfc532..53b9390fdd 100644
--- a/src/lib/libssl/src/ssl/s3_both.c
+++ b/src/lib/libssl/src/ssl/s3_both.c
@@ -206,10 +206,10 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
206 206
207#ifndef OPENSSL_NO_NEXTPROTONEG 207#ifndef OPENSSL_NO_NEXTPROTONEG
208/* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */ 208/* ssl3_take_mac calculates the Finished MAC for the handshakes messages seen to far. */
209static void ssl3_take_mac(SSL *s) { 209static void ssl3_take_mac(SSL *s)
210 {
210 const char *sender; 211 const char *sender;
211 int slen; 212 int slen;
212
213 /* If no new cipher setup return immediately: other functions will 213 /* If no new cipher setup return immediately: other functions will
214 * set the appropriate error. 214 * set the appropriate error.
215 */ 215 */
@@ -228,7 +228,7 @@ static void ssl3_take_mac(SSL *s) {
228 228
229 s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, 229 s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
230 sender,slen,s->s3->tmp.peer_finish_md); 230 sender,slen,s->s3->tmp.peer_finish_md);
231} 231 }
232#endif 232#endif
233 233
234int ssl3_get_finished(SSL *s, int a, int b) 234int ssl3_get_finished(SSL *s, int a, int b)
@@ -238,8 +238,9 @@ int ssl3_get_finished(SSL *s, int a, int b)
238 unsigned char *p; 238 unsigned char *p;
239 239
240#ifdef OPENSSL_NO_NEXTPROTONEG 240#ifdef OPENSSL_NO_NEXTPROTONEG
241 /* the mac has already been generated when we received the change 241 /* the mac has already been generated when we received the
242 * cipher spec message and is in s->s3->tmp.peer_finish_md. */ 242 * change cipher spec message and is in s->s3->tmp.peer_finish_md.
243 */
243#endif 244#endif
244 245
245 n=s->method->ssl_get_message(s, 246 n=s->method->ssl_get_message(s,
@@ -270,7 +271,7 @@ int ssl3_get_finished(SSL *s, int a, int b)
270 goto f_err; 271 goto f_err;
271 } 272 }
272 273
273 if (timingsafe_bcmp(p, s->s3->tmp.peer_finish_md, i) != 0) 274 if (CRYPTO_memcmp(p, s->s3->tmp.peer_finish_md, i) != 0)
274 { 275 {
275 al=SSL_AD_DECRYPT_ERROR; 276 al=SSL_AD_DECRYPT_ERROR;
276 SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED); 277 SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED);
@@ -544,12 +545,14 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
544 s->init_num += i; 545 s->init_num += i;
545 n -= i; 546 n -= i;
546 } 547 }
548
547#ifndef OPENSSL_NO_NEXTPROTONEG 549#ifndef OPENSSL_NO_NEXTPROTONEG
548 /* If receiving Finished, record MAC of prior handshake messages for 550 /* If receiving Finished, record MAC of prior handshake messages for
549 * Finished verification. */ 551 * Finished verification. */
550 if (*s->init_buf->data == SSL3_MT_FINISHED) 552 if (*s->init_buf->data == SSL3_MT_FINISHED)
551 ssl3_take_mac(s); 553 ssl3_take_mac(s);
552#endif 554#endif
555
553 /* Feed this message into MAC computation. */ 556 /* Feed this message into MAC computation. */
554 ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4); 557 ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4);
555 if (s->msg_callback) 558 if (s->msg_callback)
diff --git a/src/lib/libssl/src/ssl/s3_clnt.c b/src/lib/libssl/src/ssl/s3_clnt.c
index b80d052e1f..a6b3c01afa 100644
--- a/src/lib/libssl/src/ssl/s3_clnt.c
+++ b/src/lib/libssl/src/ssl/s3_clnt.c
@@ -459,7 +459,6 @@ int ssl3_connect(SSL *s)
459 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); 459 SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
460 if (ret <= 0) goto end; 460 if (ret <= 0) goto end;
461 461
462
463#if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG) 462#if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
464 s->state=SSL3_ST_CW_FINISHED_A; 463 s->state=SSL3_ST_CW_FINISHED_A;
465#else 464#else
@@ -656,7 +655,7 @@ int ssl3_client_hello(SSL *s)
656 unsigned char *buf; 655 unsigned char *buf;
657 unsigned char *p,*d; 656 unsigned char *p,*d;
658 int i; 657 int i;
659 unsigned long Time,l; 658 unsigned long l;
660#ifndef OPENSSL_NO_COMP 659#ifndef OPENSSL_NO_COMP
661 int j; 660 int j;
662 SSL_COMP *comp; 661 SSL_COMP *comp;
@@ -681,9 +680,8 @@ int ssl3_client_hello(SSL *s)
681 /* else use the pre-loaded session */ 680 /* else use the pre-loaded session */
682 681
683 p=s->s3->client_random; 682 p=s->s3->client_random;
684 Time=(unsigned long)time(NULL); /* Time */ 683
685 l2n(Time,p); 684 if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0)
686 if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
687 goto err; 685 goto err;
688 686
689 /* Do the message type and length last */ 687 /* Do the message type and length last */
@@ -987,7 +985,10 @@ int ssl3_get_server_hello(SSL *s)
987 * client authentication. 985 * client authentication.
988 */ 986 */
989 if (TLS1_get_version(s) < TLS1_2_VERSION && !ssl3_digest_cached_records(s)) 987 if (TLS1_get_version(s) < TLS1_2_VERSION && !ssl3_digest_cached_records(s))
988 {
989 al = SSL_AD_INTERNAL_ERROR;
990 goto f_err; 990 goto f_err;
991 }
991 /* lets get the compression algorithm */ 992 /* lets get the compression algorithm */
992 /* COMPRESSION */ 993 /* COMPRESSION */
993#ifdef OPENSSL_NO_COMP 994#ifdef OPENSSL_NO_COMP
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c
index b73b5ac87f..c4ef2738d7 100644
--- a/src/lib/libssl/src/ssl/s3_lib.c
+++ b/src/lib/libssl/src/ssl/s3_lib.c
@@ -1125,7 +1125,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1125 0, /* not implemented (non-ephemeral DH) */ 1125 0, /* not implemented (non-ephemeral DH) */
1126 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256, 1126 TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
1127 TLS1_CK_DH_DSS_WITH_AES_128_SHA256, 1127 TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
1128 SSL_kDHr, 1128 SSL_kDHd,
1129 SSL_aDH, 1129 SSL_aDH,
1130 SSL_AES128, 1130 SSL_AES128,
1131 SSL_SHA256, 1131 SSL_SHA256,
@@ -1407,7 +1407,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1407 0, /* not implemented (non-ephemeral DH) */ 1407 0, /* not implemented (non-ephemeral DH) */
1408 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256, 1408 TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
1409 TLS1_CK_DH_DSS_WITH_AES_256_SHA256, 1409 TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
1410 SSL_kDHr, 1410 SSL_kDHd,
1411 SSL_aDH, 1411 SSL_aDH,
1412 SSL_AES256, 1412 SSL_AES256,
1413 SSL_SHA256, 1413 SSL_SHA256,
@@ -1683,7 +1683,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1683 SSL_3DES, 1683 SSL_3DES,
1684 SSL_SHA1, 1684 SSL_SHA1,
1685 SSL_TLSV1, 1685 SSL_TLSV1,
1686 SSL_NOT_EXP|SSL_HIGH, 1686 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1687 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 1687 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1688 168, 1688 168,
1689 168, 1689 168,
@@ -1699,7 +1699,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1699 SSL_AES128, 1699 SSL_AES128,
1700 SSL_SHA1, 1700 SSL_SHA1,
1701 SSL_TLSV1, 1701 SSL_TLSV1,
1702 SSL_NOT_EXP|SSL_HIGH, 1702 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1703 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 1703 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1704 128, 1704 128,
1705 128, 1705 128,
@@ -1715,7 +1715,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1715 SSL_AES256, 1715 SSL_AES256,
1716 SSL_SHA1, 1716 SSL_SHA1,
1717 SSL_TLSV1, 1717 SSL_TLSV1,
1718 SSL_NOT_EXP|SSL_HIGH, 1718 SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
1719 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 1719 SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
1720 256, 1720 256,
1721 256, 1721 256,
@@ -1958,7 +1958,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1958 0, 1958 0,
1959 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256, 1959 TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
1960 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256, 1960 TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
1961 SSL_kDHr, 1961 SSL_kDHd,
1962 SSL_aDH, 1962 SSL_aDH,
1963 SSL_AES128GCM, 1963 SSL_AES128GCM,
1964 SSL_AEAD, 1964 SSL_AEAD,
@@ -1974,7 +1974,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
1974 0, 1974 0,
1975 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384, 1975 TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
1976 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384, 1976 TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
1977 SSL_kDHr, 1977 SSL_kDHd,
1978 SSL_aDH, 1978 SSL_aDH,
1979 SSL_AES256GCM, 1979 SSL_AES256GCM,
1980 SSL_AEAD, 1980 SSL_AEAD,
@@ -2669,7 +2669,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2669 1, 2669 1,
2670 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256, 2670 TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
2671 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256, 2671 TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
2672 SSL_kECDHe, 2672 SSL_kECDHr,
2673 SSL_aECDH, 2673 SSL_aECDH,
2674 SSL_AES128, 2674 SSL_AES128,
2675 SSL_SHA256, 2675 SSL_SHA256,
@@ -2685,7 +2685,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2685 1, 2685 1,
2686 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384, 2686 TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
2687 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384, 2687 TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
2688 SSL_kECDHe, 2688 SSL_kECDHr,
2689 SSL_aECDH, 2689 SSL_aECDH,
2690 SSL_AES256, 2690 SSL_AES256,
2691 SSL_SHA384, 2691 SSL_SHA384,
@@ -2799,7 +2799,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2799 1, 2799 1,
2800 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256, 2800 TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2801 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256, 2801 TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
2802 SSL_kECDHe, 2802 SSL_kECDHr,
2803 SSL_aECDH, 2803 SSL_aECDH,
2804 SSL_AES128GCM, 2804 SSL_AES128GCM,
2805 SSL_AEAD, 2805 SSL_AEAD,
@@ -2815,7 +2815,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
2815 1, 2815 1,
2816 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384, 2816 TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2817 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384, 2817 TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
2818 SSL_kECDHe, 2818 SSL_kECDHr,
2819 SSL_aECDH, 2819 SSL_aECDH,
2820 SSL_AES256GCM, 2820 SSL_AES256GCM,
2821 SSL_AEAD, 2821 SSL_AEAD,
@@ -3037,6 +3037,11 @@ void ssl3_clear(SSL *s)
3037 s->s3->tmp.ecdh = NULL; 3037 s->s3->tmp.ecdh = NULL;
3038 } 3038 }
3039#endif 3039#endif
3040#ifndef OPENSSL_NO_TLSEXT
3041#ifndef OPENSSL_NO_EC
3042 s->s3->is_probably_safari = 0;
3043#endif /* !OPENSSL_NO_EC */
3044#endif /* !OPENSSL_NO_TLSEXT */
3040 3045
3041 rp = s->s3->rbuf.buf; 3046 rp = s->s3->rbuf.buf;
3042 wp = s->s3->wbuf.buf; 3047 wp = s->s3->wbuf.buf;
@@ -4016,6 +4021,13 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
4016 ii=sk_SSL_CIPHER_find(allow,c); 4021 ii=sk_SSL_CIPHER_find(allow,c);
4017 if (ii >= 0) 4022 if (ii >= 0)
4018 { 4023 {
4024#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT)
4025 if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari)
4026 {
4027 if (!ret) ret=sk_SSL_CIPHER_value(allow,ii);
4028 continue;
4029 }
4030#endif
4019 ret=sk_SSL_CIPHER_value(allow,ii); 4031 ret=sk_SSL_CIPHER_value(allow,ii);
4020 break; 4032 break;
4021 } 4033 }
diff --git a/src/lib/libssl/src/ssl/s3_pkt.c b/src/lib/libssl/src/ssl/s3_pkt.c
index 722ed9a858..96ba63262e 100644
--- a/src/lib/libssl/src/ssl/s3_pkt.c
+++ b/src/lib/libssl/src/ssl/s3_pkt.c
@@ -335,7 +335,7 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length);
335 if (version != s->version) 335 if (version != s->version)
336 { 336 {
337 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); 337 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER);
338 if ((s->version & 0xFF00) == (version & 0xFF00)) 338 if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash)
339 /* Send back error using their minor version number :-) */ 339 /* Send back error using their minor version number :-) */
340 s->version = (unsigned short)version; 340 s->version = (unsigned short)version;
341 al=SSL_AD_PROTOCOL_VERSION; 341 al=SSL_AD_PROTOCOL_VERSION;
@@ -407,7 +407,7 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length);
407 if (enc_err == 0) 407 if (enc_err == 0)
408 { 408 {
409 al=SSL_AD_DECRYPTION_FAILED; 409 al=SSL_AD_DECRYPTION_FAILED;
410 SSLerr(SSL_F_TLS1_ENC,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG); 410 SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BLOCK_CIPHER_PAD_IS_WRONG);
411 goto f_err; 411 goto f_err;
412 } 412 }
413 413
@@ -467,7 +467,7 @@ printf("\n");
467 } 467 }
468 468
469 i=s->method->ssl3_enc->mac(s,md,0 /* not send */); 469 i=s->method->ssl3_enc->mac(s,md,0 /* not send */);
470 if (i < 0 || mac == NULL || timingsafe_bcmp(md, mac, (size_t)mac_size) != 0) 470 if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
471 enc_err = -1; 471 enc_err = -1;
472 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size) 472 if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size)
473 enc_err = -1; 473 enc_err = -1;
@@ -748,6 +748,7 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
748 * bytes and record version number > TLS 1.0 748 * bytes and record version number > TLS 1.0
749 */ 749 */
750 if (s->state == SSL3_ST_CW_CLNT_HELLO_B 750 if (s->state == SSL3_ST_CW_CLNT_HELLO_B
751 && !s->renegotiate
751 && TLS1_get_version(s) > TLS1_VERSION) 752 && TLS1_get_version(s) > TLS1_VERSION)
752 *(p++) = 0x1; 753 *(p++) = 0x1;
753 else 754 else
@@ -1054,7 +1055,7 @@ start:
1054 { 1055 {
1055 s->rstate=SSL_ST_READ_HEADER; 1056 s->rstate=SSL_ST_READ_HEADER;
1056 rr->off=0; 1057 rr->off=0;
1057 if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0) 1058 if (s->mode & SSL_MODE_RELEASE_BUFFERS)
1058 ssl3_release_read_buffer(s); 1059 ssl3_release_read_buffer(s);
1059 } 1060 }
1060 } 1061 }
@@ -1242,7 +1243,7 @@ start:
1242 goto f_err; 1243 goto f_err;
1243 } 1244 }
1244#ifdef SSL_AD_MISSING_SRP_USERNAME 1245#ifdef SSL_AD_MISSING_SRP_USERNAME
1245 if (alert_descr == SSL_AD_MISSING_SRP_USERNAME) 1246 else if (alert_descr == SSL_AD_MISSING_SRP_USERNAME)
1246 return(0); 1247 return(0);
1247#endif 1248#endif
1248 } 1249 }
diff --git a/src/lib/libssl/src/ssl/s3_srvr.c b/src/lib/libssl/src/ssl/s3_srvr.c
index 118939fabb..9ac19c05f2 100644
--- a/src/lib/libssl/src/ssl/s3_srvr.c
+++ b/src/lib/libssl/src/ssl/s3_srvr.c
@@ -191,7 +191,8 @@ static int ssl_check_srp_ext_ClientHello(SSL *s, int *al)
191 { 191 {
192 if(s->srp_ctx.login == NULL) 192 if(s->srp_ctx.login == NULL)
193 { 193 {
194 /* There isn't any srp login extension !!! */ 194 /* RFC 5054 says SHOULD reject,
195 we do so if There is no srp login name */
195 ret = SSL3_AL_FATAL; 196 ret = SSL3_AL_FATAL;
196 *al = SSL_AD_UNKNOWN_PSK_IDENTITY; 197 *al = SSL_AD_UNKNOWN_PSK_IDENTITY;
197 } 198 }
@@ -378,6 +379,7 @@ int ssl3_accept(SSL *s)
378 } 379 }
379 } 380 }
380#endif 381#endif
382
381 s->renegotiate = 2; 383 s->renegotiate = 2;
382 s->state=SSL3_ST_SW_SRVR_HELLO_A; 384 s->state=SSL3_ST_SW_SRVR_HELLO_A;
383 s->init_num=0; 385 s->init_num=0;
@@ -956,7 +958,8 @@ int ssl3_get_client_hello(SSL *s)
956 (s->version != DTLS1_VERSION && s->client_version < s->version)) 958 (s->version != DTLS1_VERSION && s->client_version < s->version))
957 { 959 {
958 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER); 960 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER);
959 if ((s->client_version>>8) == SSL3_VERSION_MAJOR) 961 if ((s->client_version>>8) == SSL3_VERSION_MAJOR &&
962 !s->enc_write_ctx && !s->write_hash)
960 { 963 {
961 /* similar to ssl3_get_record, send alert using remote version number */ 964 /* similar to ssl3_get_record, send alert using remote version number */
962 s->version = s->client_version; 965 s->version = s->client_version;
@@ -1181,7 +1184,7 @@ int ssl3_get_client_hello(SSL *s)
1181 goto f_err; 1184 goto f_err;
1182 } 1185 }
1183 } 1186 }
1184 if (ssl_check_clienthello_tlsext(s) <= 0) { 1187 if (ssl_check_clienthello_tlsext_early(s) <= 0) {
1185 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); 1188 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT);
1186 goto err; 1189 goto err;
1187 } 1190 }
@@ -1191,12 +1194,9 @@ int ssl3_get_client_hello(SSL *s)
1191 * server_random before calling tls_session_secret_cb in order to allow 1194 * server_random before calling tls_session_secret_cb in order to allow
1192 * SessionTicket processing to use it in key derivation. */ 1195 * SessionTicket processing to use it in key derivation. */
1193 { 1196 {
1194 unsigned long Time;
1195 unsigned char *pos; 1197 unsigned char *pos;
1196 Time=(unsigned long)time(NULL); /* Time */
1197 pos=s->s3->server_random; 1198 pos=s->s3->server_random;
1198 l2n(Time,pos); 1199 if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0)
1199 if (RAND_pseudo_bytes(pos,SSL3_RANDOM_SIZE-4) <= 0)
1200 { 1200 {
1201 al=SSL_AD_INTERNAL_ERROR; 1201 al=SSL_AD_INTERNAL_ERROR;
1202 goto f_err; 1202 goto f_err;
@@ -1389,7 +1389,10 @@ int ssl3_get_client_hello(SSL *s)
1389 if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER)) 1389 if (TLS1_get_version(s) < TLS1_2_VERSION || !(s->verify_mode & SSL_VERIFY_PEER))
1390 { 1390 {
1391 if (!ssl3_digest_cached_records(s)) 1391 if (!ssl3_digest_cached_records(s))
1392 {
1393 al = SSL_AD_INTERNAL_ERROR;
1392 goto f_err; 1394 goto f_err;
1395 }
1393 } 1396 }
1394 1397
1395 /* we now have the following setup. 1398 /* we now have the following setup.
@@ -1403,6 +1406,16 @@ int ssl3_get_client_hello(SSL *s)
1403 * s->tmp.new_cipher - the new cipher to use. 1406 * s->tmp.new_cipher - the new cipher to use.
1404 */ 1407 */
1405 1408
1409 /* Handles TLS extensions that we couldn't check earlier */
1410 if (s->version >= SSL3_VERSION)
1411 {
1412 if (ssl_check_clienthello_tlsext_late(s) <= 0)
1413 {
1414 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
1415 goto err;
1416 }
1417 }
1418
1406 if (ret < 0) ret=1; 1419 if (ret < 0) ret=1;
1407 if (0) 1420 if (0)
1408 { 1421 {
@@ -1420,19 +1433,13 @@ int ssl3_send_server_hello(SSL *s)
1420 unsigned char *p,*d; 1433 unsigned char *p,*d;
1421 int i,sl; 1434 int i,sl;
1422 unsigned long l; 1435 unsigned long l;
1423#ifdef OPENSSL_NO_TLSEXT
1424 unsigned long Time;
1425#endif
1426 1436
1427 if (s->state == SSL3_ST_SW_SRVR_HELLO_A) 1437 if (s->state == SSL3_ST_SW_SRVR_HELLO_A)
1428 { 1438 {
1429 buf=(unsigned char *)s->init_buf->data; 1439 buf=(unsigned char *)s->init_buf->data;
1430#ifdef OPENSSL_NO_TLSEXT 1440#ifdef OPENSSL_NO_TLSEXT
1431 p=s->s3->server_random; 1441 p=s->s3->server_random;
1432 /* Generate server_random if it was not needed previously */ 1442 if (ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE) <= 0)
1433 Time=(unsigned long)time(NULL); /* Time */
1434 l2n(Time,p);
1435 if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
1436 return -1; 1443 return -1;
1437#endif 1444#endif
1438 /* Do the message type and length last */ 1445 /* Do the message type and length last */
@@ -1823,7 +1830,7 @@ int ssl3_send_server_key_exchange(SSL *s)
1823 SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); 1830 SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
1824 goto f_err; 1831 goto f_err;
1825 } 1832 }
1826 for (i=0; r[i] != NULL && i<4; i++) 1833 for (i=0; i < 4 && r[i] != NULL; i++)
1827 { 1834 {
1828 nr[i]=BN_num_bytes(r[i]); 1835 nr[i]=BN_num_bytes(r[i]);
1829#ifndef OPENSSL_NO_SRP 1836#ifndef OPENSSL_NO_SRP
@@ -1859,7 +1866,7 @@ int ssl3_send_server_key_exchange(SSL *s)
1859 d=(unsigned char *)s->init_buf->data; 1866 d=(unsigned char *)s->init_buf->data;
1860 p= &(d[4]); 1867 p= &(d[4]);
1861 1868
1862 for (i=0; r[i] != NULL && i<4; i++) 1869 for (i=0; i < 4 && r[i] != NULL; i++)
1863 { 1870 {
1864#ifndef OPENSSL_NO_SRP 1871#ifndef OPENSSL_NO_SRP
1865 if ((i == 2) && (type & SSL_kSRP)) 1872 if ((i == 2) && (type & SSL_kSRP))
diff --git a/src/lib/libssl/src/ssl/ssl-lib.com b/src/lib/libssl/src/ssl/ssl-lib.com
deleted file mode 100644
index a77f7707f2..0000000000
--- a/src/lib/libssl/src/ssl/ssl-lib.com
+++ /dev/null
@@ -1,1214 +0,0 @@
1$!
2$! SSL-LIB.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$!
10$! This command file compiles and creates the "[.xxx.EXE.SSL]LIBSSL.OLB"
11$! library for OpenSSL. The "xxx" denotes the machine architecture of
12$! ALPHA, IA64 or VAX.
13$!
14$! It is written to detect what type of machine you are compiling on
15$! (i.e. ALPHA or VAX) and which "C" compiler you have (i.e. VAXC, DECC
16$! or GNU C) or you can specify which compiler to use.
17$!
18$! Specify the following as P1 to build just that part or ALL to just
19$! build everything.
20$!
21$! LIBRARY To just compile the [.xxx.EXE.SSL]LIBSSL.OLB Library.
22$! SSL_TASK To just compile the [.xxx.EXE.SSL]SSL_TASK.EXE
23$!
24$! Specify DEBUG or NODEBUG as P2 to compile with or without debugger
25$! information.
26$!
27$! Specify which compiler at P3 to try to compile under.
28$!
29$! VAXC For VAX C.
30$! DECC For DEC C.
31$! GNUC For GNU C.
32$!
33$! If you don't specify a compiler, it will try to determine which
34$! "C" compiler to use.
35$!
36$! P4, if defined, sets a TCP/IP library to use, through one of the following
37$! keywords:
38$!
39$! UCX for UCX
40$! TCPIP for TCPIP (post UCX)
41$! SOCKETSHR for SOCKETSHR+NETLIB
42$!
43$! P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
44$!
45$! P6, if defined, specifies the C pointer size. Ignored on VAX.
46$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
47$! Supported values are:
48$!
49$! "" Compile with default (/NOPOINTER_SIZE)
50$! 32 Compile with /POINTER_SIZE=32 (SHORT)
51$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
52$! (Automatically select ARGV if compiler supports it.)
53$! 64= Compile with /POINTER_SIZE=64 (LONG).
54$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
55$!
56$! P7, if defined, specifies a directory where ZLIB files (zlib.h,
57$! libz.olb) may be found. Optionally, a non-default object library
58$! name may be included ("dev:[dir]libz_64.olb", for example).
59$!
60$!
61$! Announce/identify.
62$!
63$ proc = f$environment( "procedure")
64$ write sys$output "@@@ "+ -
65 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
66$!
67$! Define A TCP/IP Library That We Will Need To Link To.
68$! (That Is, If We Need To Link To One.)
69$!
70$ TCPIP_LIB = ""
71$ ZLIB_LIB = ""
72$!
73$! Check What Architecture We Are Using.
74$!
75$ IF (F$GETSYI("CPU").LT.128)
76$ THEN
77$!
78$! The Architecture Is VAX.
79$!
80$ ARCH = "VAX"
81$!
82$! Else...
83$!
84$ ELSE
85$!
86$! The Architecture Is Alpha, IA64 or whatever comes in the future.
87$!
88$ ARCH = F$EDIT( F$GETSYI( "ARCH_NAME"), "UPCASE")
89$ IF (ARCH .EQS. "") THEN ARCH = "UNK"
90$!
91$! End The Architecture Check.
92$!
93$ ENDIF
94$!
95$ ARCHD = ARCH
96$ LIB32 = "32"
97$ OPT_FILE = ""
98$ POINTER_SIZE = ""
99$!
100$! Check To Make Sure We Have Valid Command Line Parameters.
101$!
102$ GOSUB CHECK_OPTIONS
103$!
104$! Define The OBJ and EXE Directories.
105$!
106$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.SSL]
107$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.SSL]
108$!
109$! Specify the destination directory in any /MAP option.
110$!
111$ if (LINKMAP .eqs. "MAP")
112$ then
113$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
114$ endif
115$!
116$! Add the location prefix to the linker options file name.
117$!
118$ if (OPT_FILE .nes. "")
119$ then
120$ OPT_FILE = EXE_DIR+ OPT_FILE
121$ endif
122$!
123$! Initialise logical names and such
124$!
125$ GOSUB INITIALISE
126$!
127$! Tell The User What Kind of Machine We Run On.
128$!
129$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
130$!
131$! Check To See If The Architecture Specific OBJ Directory Exists.
132$!
133$ IF (F$PARSE(OBJ_DIR).EQS."")
134$ THEN
135$!
136$! It Dosen't Exist, So Create It.
137$!
138$ CREATE/DIR 'OBJ_DIR'
139$!
140$! End The Architecture Specific OBJ Directory Check.
141$!
142$ ENDIF
143$!
144$! Check To See If The Architecture Specific Directory Exists.
145$!
146$ IF (F$PARSE(EXE_DIR).EQS."")
147$ THEN
148$!
149$! It Dosen't Exist, So Create It.
150$!
151$ CREATE/DIR 'EXE_DIR'
152$!
153$! End The Architecture Specific Directory Check.
154$!
155$ ENDIF
156$!
157$! Define The Library Name.
158$!
159$ SSL_LIB := 'EXE_DIR'SSL_LIBSSL'LIB32'.OLB
160$!
161$! Define The CRYPTO-LIB We Are To Use.
162$!
163$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
164$!
165$! Set up exceptional compilations.
166$!
167$ CC5_SHOWN = 0
168$!
169$! Check To See What We Are To Do.
170$!
171$ IF (BUILDALL.EQS."TRUE")
172$ THEN
173$!
174$! Since Nothing Special Was Specified, Do Everything.
175$!
176$ GOSUB LIBRARY
177$ GOSUB SSL_TASK
178$!
179$! Else...
180$!
181$ ELSE
182$!
183$! Build Just What The User Wants Us To Build.
184$!
185$ GOSUB 'BUILDALL'
186$!
187$! End The BUILDALL Check.
188$!
189$ ENDIF
190$!
191$! Time To EXIT.
192$!
193$ EXIT:
194$ GOSUB CLEANUP
195$ EXIT
196$!
197$! Compile The Library.
198$!
199$ LIBRARY:
200$!
201$! Check To See If We Already Have A "[.xxx.EXE.SSL]SSL_LIBSSL''LIB32'.OLB" Library...
202$!
203$ IF (F$SEARCH(SSL_LIB).EQS."")
204$ THEN
205$!
206$! Guess Not, Create The Library.
207$!
208$ LIBRARY/CREATE/OBJECT 'SSL_LIB'
209$!
210$! End The Library Exist Check.
211$!
212$ ENDIF
213$!
214$! Define The Different SSL "library" Files.
215$!
216$ LIB_SSL = "s2_meth,s2_srvr,s2_clnt,s2_lib,s2_enc,s2_pkt,"+ -
217 "s3_meth,s3_srvr,s3_clnt,s3_lib,s3_enc,s3_pkt,s3_both,"+ -
218 "s23_meth,s23_srvr,s23_clnt,s23_lib,s23_pkt,"+ -
219 "t1_meth,t1_srvr,t1_clnt,t1_lib,t1_enc,"+ -
220 "d1_meth,d1_srvr,d1_clnt,d1_lib,d1_pkt,"+ -
221 "d1_both,d1_enc,d1_srtp,"+ -
222 "ssl_lib,ssl_err2,ssl_cert,ssl_sess,"+ -
223 "ssl_ciph,ssl_stat,ssl_rsa,"+ -
224 "ssl_asn1,ssl_txt,ssl_algs,"+ -
225 "bio_ssl,ssl_err,kssl,tls_srp,t1_reneg"
226$!
227$ COMPILEWITH_CC5 = ""
228$!
229$! Tell The User That We Are Compiling The Library.
230$!
231$ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library."
232$!
233$! Define A File Counter And Set It To "0"
234$!
235$ FILE_COUNTER = 0
236$!
237$! Top Of The File Loop.
238$!
239$ NEXT_FILE:
240$!
241$! O.K, Extract The File Name From The File List.
242$!
243$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_SSL)
244$!
245$! Check To See If We Are At The End Of The File List.
246$!
247$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
248$!
249$! Increment The Counter.
250$!
251$ FILE_COUNTER = FILE_COUNTER + 1
252$!
253$! Create The Source File Name.
254$!
255$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C"
256$!
257$! Create The Object File Name.
258$!
259$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
260$ ON WARNING THEN GOTO NEXT_FILE
261$!
262$! Check To See If The File We Want To Compile Is Actually There.
263$!
264$ IF (F$SEARCH(SOURCE_FILE).EQS."")
265$ THEN
266$!
267$! Tell The User That The File Dosen't Exist.
268$!
269$ WRITE SYS$OUTPUT ""
270$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
271$ WRITE SYS$OUTPUT ""
272$!
273$! Exit The Build.
274$!
275$ EXIT
276$!
277$! End The File Exists Check.
278$!
279$ ENDIF
280$!
281$! Tell The User What File We Are Compiling.
282$!
283$ WRITE SYS$OUTPUT " ",FILE_NAME,".c"
284$!
285$! Compile The File.
286$!
287$ ON ERROR THEN GOTO NEXT_FILE
288$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
289$!
290$! Add It To The Library.
291$!
292$ LIBRARY/REPLACE/OBJECT 'SSL_LIB' 'OBJECT_FILE'
293$!
294$! Time To Clean Up The Object File.
295$!
296$ DELETE 'OBJECT_FILE';*
297$!
298$! Go Back And Get The Next File Name.
299$!
300$ GOTO NEXT_FILE
301$!
302$! All Done With This Library.
303$!
304$ FILE_DONE:
305$!
306$! Tell The User That We Are All Done.
307$!
308$ WRITE SYS$OUTPUT "Library ",SSL_LIB," Compiled."
309$!
310$! Time To RETURN.
311$!
312$ RETURN
313$ SSL_TASK:
314$!
315$! Check To See If We Have The Proper Libraries.
316$!
317$ GOSUB LIB_CHECK
318$!
319$! Check To See If We Have A Linker Option File.
320$!
321$ GOSUB CHECK_OPT_FILE
322$!
323$! Check To See If The File We Want To Compile Is Actually There.
324$!
325$ IF (F$SEARCH("SYS$DISK:[]SSL_TASK.C").EQS."")
326$ THEN
327$!
328$! Tell The User That The File Dosen't Exist.
329$!
330$ WRITE SYS$OUTPUT ""
331$ WRITE SYS$OUTPUT "The File SSL_TASK.C Dosen't Exist."
332$ WRITE SYS$OUTPUT ""
333$!
334$! Exit The Build.
335$!
336$ EXIT
337$!
338$! End The SSL_TASK.C File Check.
339$!
340$ ENDIF
341$!
342$ COMPILEWITH_CC5 = "" !!! ",ssl_task,"
343$!
344$! Tell The User We Are Creating The SSL_TASK.
345$!
346$! Tell The User We Are Creating The SSL_TASK.
347$!
348$ WRITE SYS$OUTPUT "Creating SSL_TASK OSU HTTP SSL Engine."
349$!
350$! Tell The User What File We Are Compiling.
351$!
352$ FILE_NAME = "ssl_task"
353$ WRITE SYS$OUTPUT " ",FILE_NAME,".c"
354$!
355$! Compile The File.
356$!
357$ ON ERROR THEN GOTO SSL_TASK_END
358$!
359$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ ","
360$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5
361$ THEN
362$ if (.not. CC5_SHOWN)
363$ then
364$ CC5_SHOWN = 1
365$ write sys$output " \Using special rule (5)"
366$ x = " "+ CC5
367$ write /symbol sys$output x
368$ endif
369$ CC5 /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C
370$ ELSE
371$ CC /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C
372$ ENDIF
373$!
374$! Link The Program.
375$!
376$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_DIR'SSL_TASK.EXE -
377 'OBJ_DIR'SSL_TASK.OBJ, -
378 'SSL_LIB'/LIBRARY, -
379 'CRYPTO_LIB'/LIBRARY -
380 'TCPIP_LIB' -
381 'ZLIB_LIB' -
382 ,'OPT_FILE' /OPTIONS
383$!
384$! Time To Return.
385$!
386$SSL_TASK_END:
387$ RETURN
388$!
389$! Check For The Link Option FIle.
390$!
391$ CHECK_OPT_FILE:
392$!
393$! Check To See If We Need To Make A VAX C Option File.
394$!
395$ IF (COMPILER.EQS."VAXC")
396$ THEN
397$!
398$! Check To See If We Already Have A VAX C Linker Option File.
399$!
400$ IF (F$SEARCH(OPT_FILE).EQS."")
401$ THEN
402$!
403$! We Need A VAX C Linker Option File.
404$!
405$ CREATE 'OPT_FILE'
406$DECK
407!
408! Default System Options File To Link Against
409! The Sharable VAX C Runtime Library.
410!
411SYS$SHARE:VAXCRTL.EXE/SHARE
412$EOD
413$!
414$! End The Option File Check.
415$!
416$ ENDIF
417$!
418$! End The VAXC Check.
419$!
420$ ENDIF
421$!
422$! Check To See If We Need A GNU C Option File.
423$!
424$ IF (COMPILER.EQS."GNUC")
425$ THEN
426$!
427$! Check To See If We Already Have A GNU C Linker Option File.
428$!
429$ IF (F$SEARCH(OPT_FILE).EQS."")
430$ THEN
431$!
432$! We Need A GNU C Linker Option File.
433$!
434$ CREATE 'OPT_FILE'
435$DECK
436!
437! Default System Options File To Link Against
438! The Sharable C Runtime Library.
439!
440GNU_CC:[000000]GCCLIB/LIBRARY
441SYS$SHARE:VAXCRTL/SHARE
442$EOD
443$!
444$! End The Option File Check.
445$!
446$ ENDIF
447$!
448$! End The GNU C Check.
449$!
450$ ENDIF
451$!
452$! Check To See If We Need A DEC C Option File.
453$!
454$ IF (COMPILER.EQS."DECC")
455$ THEN
456$!
457$! Check To See If We Already Have A DEC C Linker Option File.
458$!
459$ IF (F$SEARCH(OPT_FILE).EQS."")
460$ THEN
461$!
462$! Figure Out If We Need A non-VAX Or A VAX Linker Option File.
463$!
464$ IF (ARCH.EQS."VAX")
465$ THEN
466$!
467$! We Need A DEC C Linker Option File For VAX.
468$!
469$ CREATE 'OPT_FILE'
470$DECK
471!
472! Default System Options File To Link Against
473! The Sharable DEC C Runtime Library.
474!
475SYS$SHARE:DECC$SHR.EXE/SHARE
476$EOD
477$!
478$! Else...
479$!
480$ ELSE
481$!
482$! Create The non-VAX Linker Option File.
483$!
484$ CREATE 'OPT_FILE'
485$DECK
486!
487! Default System Options File For non-VAX To Link Against
488! The Sharable C Runtime Library.
489!
490SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
491SYS$SHARE:CMA$OPEN_RTL/SHARE
492$EOD
493$!
494$! End The DEC C Option File Check.
495$!
496$ ENDIF
497$!
498$! End The Option File Search.
499$!
500$ ENDIF
501$!
502$! End The DEC C Check.
503$!
504$ ENDIF
505$!
506$! Tell The User What Linker Option File We Are Using.
507$!
508$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
509$!
510$! Time To RETURN.
511$!
512$ RETURN
513$ LIB_CHECK:
514$!
515$! Look For The VAX Library LIBSSL.OLB.
516$!
517$ IF (F$SEARCH(SSL_LIB).EQS."")
518$ THEN
519$!
520$! Tell The User We Can't Find The LIBSSL.OLB Library.
521$!
522$ WRITE SYS$OUTPUT ""
523$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
524$ WRITE SYS$OUTPUT "We Can't Link Without It."
525$ WRITE SYS$OUTPUT ""
526$!
527$! Since We Can't Link Without It, Exit.
528$!
529$ EXIT
530$!
531$! End The LIBSSL.OLB Library Check.
532$!
533$ ENDIF
534$!
535$! Look For The Library LIBCRYPTO.OLB.
536$!
537$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
538$ THEN
539$!
540$! Tell The User We Can't Find The LIBCRYPTO.OLB Library.
541$!
542$ WRITE SYS$OUTPUT ""
543$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
544$ WRITE SYS$OUTPUT "We Can't Link Without It."
545$ WRITE SYS$OUTPUT ""
546$!
547$! Since We Can't Link Without It, Exit.
548$!
549$ EXIT
550$!
551$! End The LIBCRYPTO.OLB Library Check.
552$!
553$ ENDIF
554$!
555$! Time To Return.
556$!
557$ RETURN
558$!
559$! Check The User's Options.
560$!
561$ CHECK_OPTIONS:
562$!
563$! Check To See If P1 Is Blank.
564$!
565$ IF (P1.EQS."ALL")
566$ THEN
567$!
568$! P1 Is Blank, So Build Everything.
569$!
570$ BUILDALL = "TRUE"
571$!
572$! Else...
573$!
574$ ELSE
575$!
576$! Else, Check To See If P1 Has A Valid Argument.
577$!
578$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."SSL_TASK")
579$ THEN
580$!
581$! A Valid Argument.
582$!
583$ BUILDALL = P1
584$!
585$! Else...
586$!
587$ ELSE
588$!
589$! Tell The User We Don't Know What They Want.
590$!
591$ WRITE SYS$OUTPUT ""
592$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
593$ WRITE SYS$OUTPUT ""
594$ WRITE SYS$OUTPUT " ALL : Just Build Everything."
595$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.SSL]LIBSSL.OLB Library."
596$ WRITE SYS$OUTPUT " SSL_TASK : To Compile Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program."
597$ WRITE SYS$OUTPUT ""
598$ WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
599$ WRITE SYS$OUTPUT ""
600$ WRITE SYS$OUTPUT " ALPHA[64]: Alpha Architecture."
601$ WRITE SYS$OUTPUT " IA64[64] : IA64 Architecture."
602$ WRITE SYS$OUTPUT " VAX : VAX Architecture."
603$ WRITE SYS$OUTPUT ""
604$!
605$! Time To EXIT.
606$!
607$ EXIT
608$!
609$! End The Valid Argument Check.
610$!
611$ ENDIF
612$!
613$! End The P1 Check.
614$!
615$ ENDIF
616$!
617$! Check To See If P2 Is Blank.
618$!
619$ IF (P2.EQS."NODEBUG")
620$ THEN
621$!
622$! P2 Is NODEBUG, So Compile Without Debugger Information.
623$!
624$ DEBUGGER = "NODEBUG"
625$ LINKMAP = "NOMAP"
626$ TRACEBACK = "NOTRACEBACK"
627$ GCC_OPTIMIZE = "OPTIMIZE"
628$ CC_OPTIMIZE = "OPTIMIZE"
629$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
630$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
631$!
632$! Else...
633$!
634$ ELSE
635$!
636$! Check To See If We Are To Compile With Debugger Information.
637$!
638$ IF (P2.EQS."DEBUG")
639$ THEN
640$!
641$! Compile With Debugger Information.
642$!
643$ DEBUGGER = "DEBUG"
644$ LINKMAP = "MAP"
645$ TRACEBACK = "TRACEBACK"
646$ GCC_OPTIMIZE = "NOOPTIMIZE"
647$ CC_OPTIMIZE = "NOOPTIMIZE"
648$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
649$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
650$ ELSE
651$!
652$! Tell The User Entered An Invalid Option.
653$!
654$ WRITE SYS$OUTPUT ""
655$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
656$ WRITE SYS$OUTPUT ""
657$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
658$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
659$ WRITE SYS$OUTPUT ""
660$!
661$! Time To EXIT.
662$!
663$ EXIT
664$!
665$! End The Valid Argument Check.
666$!
667$ ENDIF
668$!
669$! End The P2 Check.
670$!
671$ ENDIF
672$!
673$! Special Threads For OpenVMS v7.1 Or Later
674$!
675$! Written By: Richard Levitte
676$! richard@levitte.org
677$!
678$!
679$! Check To See If We Have A Option For P5.
680$!
681$ IF (P5.EQS."")
682$ THEN
683$!
684$! Get The Version Of VMS We Are Using.
685$!
686$ ISSEVEN :=
687$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
688$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
689$!
690$! Check To See If The VMS Version Is v7.1 Or Later.
691$!
692$ IF (TMP.GE.71)
693$ THEN
694$!
695$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
696$!
697$ ISSEVEN := ,PTHREAD_USE_D4
698$!
699$! End The VMS Version Check.
700$!
701$ ENDIF
702$!
703$! End The P5 Check.
704$!
705$ ENDIF
706$!
707$! Check P6 (POINTER_SIZE).
708$!
709$ IF (P6 .NES. "") .AND. (ARCH .NES. "VAX")
710$ THEN
711$!
712$ IF (P6 .EQS. "32")
713$ THEN
714$ POINTER_SIZE = " /POINTER_SIZE=32"
715$ ELSE
716$ POINTER_SIZE = F$EDIT( P6, "COLLAPSE, UPCASE")
717$ IF ((POINTER_SIZE .EQS. "64") .OR. -
718 (POINTER_SIZE .EQS. "64=") .OR. -
719 (POINTER_SIZE .EQS. "64=ARGV"))
720$ THEN
721$ ARCHD = ARCH+ "_64"
722$ LIB32 = ""
723$ POINTER_SIZE = " /POINTER_SIZE=64"
724$ ELSE
725$!
726$! Tell The User Entered An Invalid Option.
727$!
728$ WRITE SYS$OUTPUT ""
729$ WRITE SYS$OUTPUT "The Option ", P6, -
730 " Is Invalid. The Valid Options Are:"
731$ WRITE SYS$OUTPUT ""
732$ WRITE SYS$OUTPUT -
733 " """" : Compile with default (short) pointers."
734$ WRITE SYS$OUTPUT -
735 " 32 : Compile with 32-bit (short) pointers."
736$ WRITE SYS$OUTPUT -
737 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
738$ WRITE SYS$OUTPUT -
739 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
740$ WRITE SYS$OUTPUT -
741 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
742$ WRITE SYS$OUTPUT ""
743$!
744$! Time To EXIT.
745$!
746$ EXIT
747$!
748$ ENDIF
749$!
750$ ENDIF
751$!
752$! End The P6 (POINTER_SIZE) Check.
753$!
754$ ENDIF
755$!
756$! Set basic C compiler /INCLUDE directories.
757$!
758$ CC_INCLUDES = "SYS$DISK:[-.CRYPTO],SYS$DISK:[-]"
759$!
760$! Check To See If P3 Is Blank.
761$!
762$ IF (P3.EQS."")
763$ THEN
764$!
765$! O.K., The User Didn't Specify A Compiler, Let's Try To
766$! Find Out Which One To Use.
767$!
768$! Check To See If We Have GNU C.
769$!
770$ IF (F$TRNLNM("GNU_CC").NES."")
771$ THEN
772$!
773$! Looks Like GNUC, Set To Use GNUC.
774$!
775$ P3 = "GNUC"
776$!
777$! End The GNU C Compiler Check.
778$!
779$ ELSE
780$!
781$! Check To See If We Have VAXC Or DECC.
782$!
783$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
784$ THEN
785$!
786$! Looks Like DECC, Set To Use DECC.
787$!
788$ P3 = "DECC"
789$!
790$! Else...
791$!
792$ ELSE
793$!
794$! Looks Like VAXC, Set To Use VAXC.
795$!
796$ P3 = "VAXC"
797$!
798$! End The VAXC Compiler Check.
799$!
800$ ENDIF
801$!
802$! End The DECC & VAXC Compiler Check.
803$!
804$ ENDIF
805$!
806$! End The Compiler Check.
807$!
808$ ENDIF
809$!
810$! Check To See If We Have A Option For P4.
811$!
812$ IF (P4.EQS."")
813$ THEN
814$!
815$! Find out what socket library we have available
816$!
817$ IF F$PARSE("SOCKETSHR:") .NES. ""
818$ THEN
819$!
820$! We have SOCKETSHR, and it is my opinion that it's the best to use.
821$!
822$ P4 = "SOCKETSHR"
823$!
824$! Tell the user
825$!
826$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
827$!
828$! Else, let's look for something else
829$!
830$ ELSE
831$!
832$! Like UCX (the reason to do this before Multinet is that the UCX
833$! emulation is easier to use...)
834$!
835$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
836 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
837 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
838$ THEN
839$!
840$! Last resort: a UCX or UCX-compatible library
841$!
842$ P4 = "UCX"
843$!
844$! Tell the user
845$!
846$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
847$!
848$! That was all...
849$!
850$ ENDIF
851$ ENDIF
852$ ENDIF
853$!
854$! Set Up Initial CC Definitions, Possibly With User Ones
855$!
856$ CCDEFS = "TCPIP_TYPE_''P4'"
857$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
858$ CCEXTRAFLAGS = ""
859$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
860$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
861$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
862 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
863$!
864$! Check To See If We Have A ZLIB Option.
865$!
866$ ZLIB = P7
867$ IF (ZLIB .NES. "")
868$ THEN
869$!
870$! Check for expected ZLIB files.
871$!
872$ err = 0
873$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
874$ if (f$search( file1) .eqs. "")
875$ then
876$ WRITE SYS$OUTPUT ""
877$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
878$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
879$ err = 1
880$ endif
881$ file1 = f$parse( "A.;", ZLIB)- "A.;"
882$!
883$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
884$ if (f$search( file2) .eqs. "")
885$ then
886$ if (err .eq. 0)
887$ then
888$ WRITE SYS$OUTPUT ""
889$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
890$ endif
891$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
892$ WRITE SYS$OUTPUT ""
893$ err = err+ 2
894$ endif
895$ if (err .eq. 1)
896$ then
897$ WRITE SYS$OUTPUT ""
898$ endif
899$!
900$ if (err .ne. 0)
901$ then
902$ EXIT
903$ endif
904$!
905$ CCDEFS = """ZLIB=1"", "+ CCDEFS
906$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
907$ ZLIB_LIB = ", ''file2' /library"
908$!
909$! Print info
910$!
911$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
912$!
913$! End The ZLIB Check.
914$!
915$ ENDIF
916$!
917$! Check To See If The User Entered A Valid Parameter.
918$!
919$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
920$ THEN
921$!
922$! Check To See If The User Wanted DECC.
923$!
924$ IF (P3.EQS."DECC")
925$ THEN
926$!
927$! Looks Like DECC, Set To Use DECC.
928$!
929$ COMPILER = "DECC"
930$!
931$! Tell The User We Are Using DECC.
932$!
933$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
934$!
935$! Use DECC...
936$!
937$ CC = "CC"
938$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
939 THEN CC = "CC/DECC"
940$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
941 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
942 " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
943$!
944$! Define The Linker Options File Name.
945$!
946$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
947$!
948$! End DECC Check.
949$!
950$ ENDIF
951$!
952$! Check To See If We Are To Use VAXC.
953$!
954$ IF (P3.EQS."VAXC")
955$ THEN
956$!
957$! Looks Like VAXC, Set To Use VAXC.
958$!
959$ COMPILER = "VAXC"
960$!
961$! Tell The User We Are Using VAX C.
962$!
963$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
964$!
965$! Compile Using VAXC.
966$!
967$ CC = "CC"
968$ IF ARCH.NES."VAX"
969$ THEN
970$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
971$ EXIT
972$ ENDIF
973$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
974$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
975 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
976$ CCDEFS = CCDEFS + ",""VAXC"""
977$!
978$! Define <sys> As SYS$COMMON:[SYSLIB]
979$!
980$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
981$!
982$! Define The Linker Options File Name.
983$!
984$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
985$!
986$! End VAXC Check
987$!
988$ ENDIF
989$!
990$! Check To See If We Are To Use GNU C.
991$!
992$ IF (P3.EQS."GNUC")
993$ THEN
994$!
995$! Looks Like GNUC, Set To Use GNUC.
996$!
997$ COMPILER = "GNUC"
998$!
999$! Tell The User We Are Using GNUC.
1000$!
1001$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
1002$!
1003$! Use GNU C...
1004$!
1005$ IF F$TYPE(GCC) .EQS. "" THEN GCC := GCC
1006$ CC = GCC+"/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
1007 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
1008$!
1009$! Define The Linker Options File Name.
1010$!
1011$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
1012$!
1013$! End The GNU C Check.
1014$!
1015$ ENDIF
1016$!
1017$! Set up default defines
1018$!
1019$ CCDEFS = """FLAT_INC=1""," + CCDEFS
1020$!
1021$! Finish up the definition of CC.
1022$!
1023$ IF COMPILER .EQS. "DECC"
1024$ THEN
1025$ IF CCDISABLEWARNINGS .EQS. ""
1026$ THEN
1027$ CC4DISABLEWARNINGS = "DOLLARID"
1028$ ELSE
1029$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
1030$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
1031$ ENDIF
1032$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
1033$ ELSE
1034$ CCDISABLEWARNINGS = ""
1035$ CC4DISABLEWARNINGS = ""
1036$ ENDIF
1037$ CC2 = CC + " /DEFINE=(" + CCDEFS + ",_POSIX_C_SOURCE)" + CCDISABLEWARNINGS
1038$ CC3 = CC + " /DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
1039$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
1040$ IF COMPILER .EQS. "DECC"
1041$ THEN
1042$ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1043$ CC5 = CC3 - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
1044$ ELSE
1045$ CC4 = CC
1046$ CC5 = CC3
1047$ ENDIF
1048$!
1049$! Show user the result
1050$!
1051$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
1052$!
1053$! Else The User Entered An Invalid Argument.
1054$!
1055$ ELSE
1056$!
1057$! Tell The User We Don't Know What They Want.
1058$!
1059$ WRITE SYS$OUTPUT ""
1060$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1061$ WRITE SYS$OUTPUT ""
1062$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
1063$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
1064$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
1065$ WRITE SYS$OUTPUT ""
1066$!
1067$! Time To EXIT.
1068$!
1069$ EXIT
1070$ ENDIF
1071$!
1072$! Time to check the contents, and to make sure we get the correct library.
1073$!
1074$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX" -
1075 .OR. P4.EQS."TCPIP" .OR. P4.EQS."NONE"
1076$ THEN
1077$!
1078$! Check to see if SOCKETSHR was chosen
1079$!
1080$ IF P4.EQS."SOCKETSHR"
1081$ THEN
1082$!
1083$! Set the library to use SOCKETSHR
1084$!
1085$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
1086$!
1087$! Done with SOCKETSHR
1088$!
1089$ ENDIF
1090$!
1091$! Check to see if MULTINET was chosen
1092$!
1093$ IF P4.EQS."MULTINET"
1094$ THEN
1095$!
1096$! Set the library to use UCX emulation.
1097$!
1098$ P4 = "UCX"
1099$!
1100$! Done with MULTINET
1101$!
1102$ ENDIF
1103$!
1104$! Check to see if UCX was chosen
1105$!
1106$ IF P4.EQS."UCX"
1107$ THEN
1108$!
1109$! Set the library to use UCX.
1110$!
1111$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
1112$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
1113$ THEN
1114$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
1115$ ELSE
1116$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
1117 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
1118$ ENDIF
1119$!
1120$! Done with UCX
1121$!
1122$ ENDIF
1123$!
1124$! Check to see if TCPIP was chosen
1125$!
1126$ IF P4.EQS."TCPIP"
1127$ THEN
1128$!
1129$! Set the library to use TCPIP (post UCX).
1130$!
1131$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
1132$!
1133$! Done with TCPIP
1134$!
1135$ ENDIF
1136$!
1137$! Check to see if NONE was chosen
1138$!
1139$ IF P4.EQS."NONE"
1140$ THEN
1141$!
1142$! Do not use a TCPIP library.
1143$!
1144$ TCPIP_LIB = ""
1145$!
1146$! Done with NONE
1147$!
1148$ ENDIF
1149$!
1150$! Print info
1151$!
1152$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
1153$!
1154$! Else The User Entered An Invalid Argument.
1155$!
1156$ ELSE
1157$!
1158$! Tell The User We Don't Know What They Want.
1159$!
1160$ WRITE SYS$OUTPUT ""
1161$ WRITE SYS$OUTPUT "The Option ",P4," Is Invalid. The Valid Options Are:"
1162$ WRITE SYS$OUTPUT ""
1163$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1164$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1165$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1166$ WRITE SYS$OUTPUT ""
1167$!
1168$! Time To EXIT.
1169$!
1170$ EXIT
1171$!
1172$! Done with TCP/IP libraries
1173$!
1174$ ENDIF
1175$!
1176$! Time To RETURN...
1177$!
1178$ RETURN
1179$!
1180$ INITIALISE:
1181$!
1182$! Save old value of the logical name OPENSSL
1183$!
1184$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1185$!
1186$! Save directory information
1187$!
1188$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1189$ __HERE = F$EDIT(__HERE,"UPCASE")
1190$ __TOP = __HERE - "SSL]"
1191$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1192$!
1193$! Set up the logical name OPENSSL to point at the include directory
1194$!
1195$ DEFINE OPENSSL/NOLOG '__INCLUDE'
1196$!
1197$! Done
1198$!
1199$ RETURN
1200$!
1201$ CLEANUP:
1202$!
1203$! Restore the logical name OPENSSL if it had a value
1204$!
1205$ IF __SAVE_OPENSSL .EQS. ""
1206$ THEN
1207$ DEASSIGN OPENSSL
1208$ ELSE
1209$ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'
1210$ ENDIF
1211$!
1212$! Done
1213$!
1214$ RETURN
diff --git a/src/lib/libssl/src/ssl/ssl.h b/src/lib/libssl/src/ssl/ssl.h
index 8b0c2a2dac..7219a0e64b 100644
--- a/src/lib/libssl/src/ssl/ssl.h
+++ b/src/lib/libssl/src/ssl/ssl.h
@@ -493,6 +493,9 @@ struct ssl_session_st
493 char *psk_identity_hint; 493 char *psk_identity_hint;
494 char *psk_identity; 494 char *psk_identity;
495#endif 495#endif
496 /* Used to indicate that session resumption is not allowed.
497 * Applications can also set this bit for a new session via
498 * not_resumable_session_cb to disable session caching and tickets. */
496 int not_resumable; 499 int not_resumable;
497 500
498 /* The cert is the certificate used to establish this connection */ 501 /* The cert is the certificate used to establish this connection */
@@ -535,7 +538,7 @@ struct ssl_session_st
535#endif /* OPENSSL_NO_EC */ 538#endif /* OPENSSL_NO_EC */
536 /* RFC4507 info */ 539 /* RFC4507 info */
537 unsigned char *tlsext_tick; /* Session ticket */ 540 unsigned char *tlsext_tick; /* Session ticket */
538 size_t tlsext_ticklen; /* Session ticket length */ 541 size_t tlsext_ticklen; /* Session ticket length */
539 long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ 542 long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */
540#endif 543#endif
541#ifndef OPENSSL_NO_SRP 544#ifndef OPENSSL_NO_SRP
@@ -552,11 +555,14 @@ struct ssl_session_st
552#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L 555#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L
553#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L 556#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L
554#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L 557#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L
555#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L /* no effect since 0.9.7h and 0.9.8b */ 558#define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L
556#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L 559#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L
557#define SSL_OP_TLS_D5_BUG 0x00000100L 560#define SSL_OP_TLS_D5_BUG 0x00000100L
558#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L 561#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L
559 562
563/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */
564#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0
565
560/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added 566/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
561 * in OpenSSL 0.9.6d. Usually (depending on the application protocol) 567 * in OpenSSL 0.9.6d. Usually (depending on the application protocol)
562 * the workaround is not needed. Unfortunately some broken SSL/TLS 568 * the workaround is not needed. Unfortunately some broken SSL/TLS
@@ -638,6 +644,12 @@ struct ssl_session_st
638 * TLS only.) "Released" buffers are put onto a free-list in the context 644 * TLS only.) "Released" buffers are put onto a free-list in the context
639 * or just freed (depending on the context's setting for freelist_max_len). */ 645 * or just freed (depending on the context's setting for freelist_max_len). */
640#define SSL_MODE_RELEASE_BUFFERS 0x00000010L 646#define SSL_MODE_RELEASE_BUFFERS 0x00000010L
647/* Send the current time in the Random fields of the ClientHello and
648 * ServerHello records for compatibility with hypothetical implementations
649 * that require it.
650 */
651#define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L
652#define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L
641 653
642/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, 654/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,
643 * they cannot be used to clear bits. */ 655 * they cannot be used to clear bits. */
@@ -903,7 +915,7 @@ struct ssl_ctx_st
903 */ 915 */
904 unsigned int max_send_fragment; 916 unsigned int max_send_fragment;
905 917
906#ifndef OPENSSL_ENGINE 918#ifndef OPENSSL_NO_ENGINE
907 /* Engine to pass requests for client certs to 919 /* Engine to pass requests for client certs to
908 */ 920 */
909 ENGINE *client_cert_engine; 921 ENGINE *client_cert_engine;
@@ -927,6 +939,7 @@ struct ssl_ctx_st
927 /* Callback for status request */ 939 /* Callback for status request */
928 int (*tlsext_status_cb)(SSL *ssl, void *arg); 940 int (*tlsext_status_cb)(SSL *ssl, void *arg);
929 void *tlsext_status_arg; 941 void *tlsext_status_arg;
942
930 /* draft-rescorla-tls-opaque-prf-input-00.txt information */ 943 /* draft-rescorla-tls-opaque-prf-input-00.txt information */
931 int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, size_t len, void *arg); 944 int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, size_t len, void *arg);
932 void *tlsext_opaque_prf_input_callback_arg; 945 void *tlsext_opaque_prf_input_callback_arg;
@@ -952,6 +965,7 @@ struct ssl_ctx_st
952#endif 965#endif
953 966
954#ifndef OPENSSL_NO_TLSEXT 967#ifndef OPENSSL_NO_TLSEXT
968
955# ifndef OPENSSL_NO_NEXTPROTONEG 969# ifndef OPENSSL_NO_NEXTPROTONEG
956 /* Next protocol negotiation information */ 970 /* Next protocol negotiation information */
957 /* (for experimental NPN extension). */ 971 /* (for experimental NPN extension). */
@@ -2206,6 +2220,7 @@ void ERR_load_SSL_strings(void);
2206#define SSL_F_SSL_GET_NEW_SESSION 181 2220#define SSL_F_SSL_GET_NEW_SESSION 181
2207#define SSL_F_SSL_GET_PREV_SESSION 217 2221#define SSL_F_SSL_GET_PREV_SESSION 217
2208#define SSL_F_SSL_GET_SERVER_SEND_CERT 182 2222#define SSL_F_SSL_GET_SERVER_SEND_CERT 182
2223#define SSL_F_SSL_GET_SERVER_SEND_PKEY 317
2209#define SSL_F_SSL_GET_SIGN_PKEY 183 2224#define SSL_F_SSL_GET_SIGN_PKEY 183
2210#define SSL_F_SSL_INIT_WBIO_BUFFER 184 2225#define SSL_F_SSL_INIT_WBIO_BUFFER 184
2211#define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 2226#define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185
diff --git a/src/lib/libssl/src/ssl/ssl3.h b/src/lib/libssl/src/ssl/ssl3.h
index 112e627de0..cb8b2492ec 100644
--- a/src/lib/libssl/src/ssl/ssl3.h
+++ b/src/lib/libssl/src/ssl/ssl3.h
@@ -539,6 +539,15 @@ typedef struct ssl3_state_st
539 /* Set if we saw the Next Protocol Negotiation extension from our peer. */ 539 /* Set if we saw the Next Protocol Negotiation extension from our peer. */
540 int next_proto_neg_seen; 540 int next_proto_neg_seen;
541#endif 541#endif
542
543#ifndef OPENSSL_NO_TLSEXT
544#ifndef OPENSSL_NO_EC
545 /* This is set to true if we believe that this is a version of Safari
546 * running on OS X 10.6 or newer. We wish to know this because Safari
547 * on 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. */
548 char is_probably_safari;
549#endif /* !OPENSSL_NO_EC */
550#endif /* !OPENSSL_NO_TLSEXT */
542 } SSL3_STATE; 551 } SSL3_STATE;
543 552
544#endif 553#endif
@@ -578,8 +587,10 @@ typedef struct ssl3_state_st
578#define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) 587#define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT)
579#define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) 588#define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT)
580#define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) 589#define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT)
590#ifndef OPENSSL_NO_NEXTPROTONEG
581#define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) 591#define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT)
582#define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) 592#define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT)
593#endif
583#define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) 594#define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT)
584#define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) 595#define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT)
585/* read from server */ 596/* read from server */
@@ -629,8 +640,10 @@ typedef struct ssl3_state_st
629#define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) 640#define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT)
630#define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) 641#define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT)
631#define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) 642#define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT)
643#ifndef OPENSSL_NO_NEXTPROTONEG
632#define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) 644#define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT)
633#define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) 645#define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT)
646#endif
634#define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) 647#define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT)
635#define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) 648#define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT)
636/* write to client */ 649/* write to client */
@@ -655,7 +668,9 @@ typedef struct ssl3_state_st
655#define SSL3_MT_CLIENT_KEY_EXCHANGE 16 668#define SSL3_MT_CLIENT_KEY_EXCHANGE 16
656#define SSL3_MT_FINISHED 20 669#define SSL3_MT_FINISHED 20
657#define SSL3_MT_CERTIFICATE_STATUS 22 670#define SSL3_MT_CERTIFICATE_STATUS 22
671#ifndef OPENSSL_NO_NEXTPROTONEG
658#define SSL3_MT_NEXT_PROTO 67 672#define SSL3_MT_NEXT_PROTO 67
673#endif
659#define DTLS1_MT_HELLO_VERIFY_REQUEST 3 674#define DTLS1_MT_HELLO_VERIFY_REQUEST 3
660 675
661 676
diff --git a/src/lib/libssl/src/ssl/ssl_algs.c b/src/lib/libssl/src/ssl/ssl_algs.c
index d443143c59..9c34d19725 100644
--- a/src/lib/libssl/src/ssl/ssl_algs.c
+++ b/src/lib/libssl/src/ssl/ssl_algs.c
@@ -94,6 +94,7 @@ int SSL_library_init(void)
94 EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1()); 94 EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
95 EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1()); 95 EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
96#endif 96#endif
97
97#endif 98#endif
98#ifndef OPENSSL_NO_CAMELLIA 99#ifndef OPENSSL_NO_CAMELLIA
99 EVP_add_cipher(EVP_camellia_128_cbc()); 100 EVP_add_cipher(EVP_camellia_128_cbc());
diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c
index 917be31876..5123a89182 100644
--- a/src/lib/libssl/src/ssl/ssl_cert.c
+++ b/src/lib/libssl/src/ssl/ssl_cert.c
@@ -164,14 +164,14 @@ static void ssl_cert_set_default_md(CERT *cert)
164 { 164 {
165 /* Set digest values to defaults */ 165 /* Set digest values to defaults */
166#ifndef OPENSSL_NO_DSA 166#ifndef OPENSSL_NO_DSA
167 cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_dss1(); 167 cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
168#endif 168#endif
169#ifndef OPENSSL_NO_RSA 169#ifndef OPENSSL_NO_RSA
170 cert->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1(); 170 cert->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
171 cert->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1(); 171 cert->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
172#endif 172#endif
173#ifndef OPENSSL_NO_ECDSA 173#ifndef OPENSSL_NO_ECDSA
174 cert->pkeys[SSL_PKEY_ECC].digest = EVP_ecdsa(); 174 cert->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
175#endif 175#endif
176 } 176 }
177 177
diff --git a/src/lib/libssl/src/ssl/ssl_ciph.c b/src/lib/libssl/src/ssl/ssl_ciph.c
index 92d1e94d6a..0aba8e048c 100644
--- a/src/lib/libssl/src/ssl/ssl_ciph.c
+++ b/src/lib/libssl/src/ssl/ssl_ciph.c
@@ -312,6 +312,7 @@ static const SSL_CIPHER cipher_aliases[]={
312 {0,SSL_TXT_SSLV2,0, 0,0,0,0,SSL_SSLV2, 0,0,0,0}, 312 {0,SSL_TXT_SSLV2,0, 0,0,0,0,SSL_SSLV2, 0,0,0,0},
313 {0,SSL_TXT_SSLV3,0, 0,0,0,0,SSL_SSLV3, 0,0,0,0}, 313 {0,SSL_TXT_SSLV3,0, 0,0,0,0,SSL_SSLV3, 0,0,0,0},
314 {0,SSL_TXT_TLSV1,0, 0,0,0,0,SSL_TLSV1, 0,0,0,0}, 314 {0,SSL_TXT_TLSV1,0, 0,0,0,0,SSL_TLSV1, 0,0,0,0},
315 {0,SSL_TXT_TLSV1_2,0, 0,0,0,0,SSL_TLSV1_2, 0,0,0,0},
315 316
316 /* export flag */ 317 /* export flag */
317 {0,SSL_TXT_EXP,0, 0,0,0,0,0,SSL_EXPORT,0,0,0}, 318 {0,SSL_TXT_EXP,0, 0,0,0,0,0,SSL_EXPORT,0,0,0},
@@ -1150,9 +1151,9 @@ static int ssl_cipher_process_rulestr(const char *rule_str,
1150 while ( ((ch >= 'A') && (ch <= 'Z')) || 1151 while ( ((ch >= 'A') && (ch <= 'Z')) ||
1151 ((ch >= '0') && (ch <= '9')) || 1152 ((ch >= '0') && (ch <= '9')) ||
1152 ((ch >= 'a') && (ch <= 'z')) || 1153 ((ch >= 'a') && (ch <= 'z')) ||
1153 (ch == '-')) 1154 (ch == '-') || (ch == '.'))
1154#else 1155#else
1155 while ( isalnum(ch) || (ch == '-')) 1156 while ( isalnum(ch) || (ch == '-') || (ch == '.'))
1156#endif 1157#endif
1157 { 1158 {
1158 ch = *(++l); 1159 ch = *(++l);
diff --git a/src/lib/libssl/src/ssl/ssl_err.c b/src/lib/libssl/src/ssl/ssl_err.c
index 2577c6895a..370fb57e3b 100644
--- a/src/lib/libssl/src/ssl/ssl_err.c
+++ b/src/lib/libssl/src/ssl/ssl_err.c
@@ -228,6 +228,7 @@ static ERR_STRING_DATA SSL_str_functs[]=
228{ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"}, 228{ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"},
229{ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"}, 229{ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"},
230{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"}, 230{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"},
231{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"},
231{ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"}, 232{ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"},
232{ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"}, 233{ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"},
233{ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"}, 234{ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"},
diff --git a/src/lib/libssl/src/ssl/ssl_lib.c b/src/lib/libssl/src/ssl/ssl_lib.c
index c91f0018e4..f052deeb97 100644
--- a/src/lib/libssl/src/ssl/ssl_lib.c
+++ b/src/lib/libssl/src/ssl/ssl_lib.c
@@ -597,8 +597,10 @@ void SSL_free(SSL *s)
597 OPENSSL_free(s->next_proto_negotiated); 597 OPENSSL_free(s->next_proto_negotiated);
598#endif 598#endif
599 599
600#ifndef OPENSSL_NO_SRTP
600 if (s->srtp_profiles) 601 if (s->srtp_profiles)
601 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); 602 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
603#endif
602 604
603 OPENSSL_free(s); 605 OPENSSL_free(s);
604 } 606 }
@@ -1792,7 +1794,9 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
1792 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); 1794 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
1793 1795
1794 ret->extra_certs=NULL; 1796 ret->extra_certs=NULL;
1795 ret->comp_methods=SSL_COMP_get_compression_methods(); 1797 /* No compression for DTLS */
1798 if (meth->version != DTLS1_VERSION)
1799 ret->comp_methods=SSL_COMP_get_compression_methods();
1796 1800
1797 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; 1801 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
1798 1802
@@ -1949,8 +1953,10 @@ void SSL_CTX_free(SSL_CTX *a)
1949 a->comp_methods = NULL; 1953 a->comp_methods = NULL;
1950#endif 1954#endif
1951 1955
1956#ifndef OPENSSL_NO_SRTP
1952 if (a->srtp_profiles) 1957 if (a->srtp_profiles)
1953 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); 1958 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
1959#endif
1954 1960
1955#ifndef OPENSSL_NO_PSK 1961#ifndef OPENSSL_NO_PSK
1956 if (a->psk_identity_hint) 1962 if (a->psk_identity_hint)
@@ -2284,7 +2290,7 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
2284#endif 2290#endif
2285 2291
2286/* THIS NEEDS CLEANING UP */ 2292/* THIS NEEDS CLEANING UP */
2287X509 *ssl_get_server_send_cert(SSL *s) 2293CERT_PKEY *ssl_get_server_send_pkey(const SSL *s)
2288 { 2294 {
2289 unsigned long alg_k,alg_a; 2295 unsigned long alg_k,alg_a;
2290 CERT *c; 2296 CERT *c;
@@ -2339,12 +2345,20 @@ X509 *ssl_get_server_send_cert(SSL *s)
2339 i=SSL_PKEY_GOST01; 2345 i=SSL_PKEY_GOST01;
2340 else /* if (alg_a & SSL_aNULL) */ 2346 else /* if (alg_a & SSL_aNULL) */
2341 { 2347 {
2342 SSLerr(SSL_F_SSL_GET_SERVER_SEND_CERT,ERR_R_INTERNAL_ERROR); 2348 SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY,ERR_R_INTERNAL_ERROR);
2343 return(NULL); 2349 return(NULL);
2344 } 2350 }
2345 if (c->pkeys[i].x509 == NULL) return(NULL);
2346 2351
2347 return(c->pkeys[i].x509); 2352 return c->pkeys + i;
2353 }
2354
2355X509 *ssl_get_server_send_cert(const SSL *s)
2356 {
2357 CERT_PKEY *cpk;
2358 cpk = ssl_get_server_send_pkey(s);
2359 if (!cpk)
2360 return NULL;
2361 return cpk->x509;
2348 } 2362 }
2349 2363
2350EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd) 2364EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd)
@@ -2605,7 +2619,7 @@ const char *SSL_get_version(const SSL *s)
2605 return("TLSv1.2"); 2619 return("TLSv1.2");
2606 else if (s->version == TLS1_1_VERSION) 2620 else if (s->version == TLS1_1_VERSION)
2607 return("TLSv1.1"); 2621 return("TLSv1.1");
2608 if (s->version == TLS1_VERSION) 2622 else if (s->version == TLS1_VERSION)
2609 return("TLSv1"); 2623 return("TLSv1");
2610 else if (s->version == SSL3_VERSION) 2624 else if (s->version == SSL3_VERSION)
2611 return("SSLv3"); 2625 return("SSLv3");
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h
index c3c4c21d38..e485907748 100644
--- a/src/lib/libssl/src/ssl/ssl_locl.h
+++ b/src/lib/libssl/src/ssl/ssl_locl.h
@@ -841,13 +841,15 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk);
841int ssl_undefined_function(SSL *s); 841int ssl_undefined_function(SSL *s);
842int ssl_undefined_void_function(void); 842int ssl_undefined_void_function(void);
843int ssl_undefined_const_function(const SSL *s); 843int ssl_undefined_const_function(const SSL *s);
844X509 *ssl_get_server_send_cert(SSL *); 844CERT_PKEY *ssl_get_server_send_pkey(const SSL *s);
845X509 *ssl_get_server_send_cert(const SSL *);
845EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *c, const EVP_MD **pmd); 846EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *c, const EVP_MD **pmd);
846int ssl_cert_type(X509 *x,EVP_PKEY *pkey); 847int ssl_cert_type(X509 *x,EVP_PKEY *pkey);
847void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher); 848void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher);
848STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s); 849STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s);
849int ssl_verify_alarm_type(long type); 850int ssl_verify_alarm_type(long type);
850void ssl_load_ciphers(void); 851void ssl_load_ciphers(void);
852int ssl_fill_hello_random(SSL *s, int server, unsigned char *field, int len);
851 853
852int ssl2_enc_init(SSL *s, int client); 854int ssl2_enc_init(SSL *s, int client);
853int ssl2_generate_key_material(SSL *s); 855int ssl2_generate_key_material(SSL *s);
@@ -1099,7 +1101,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d,
1099int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); 1101int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al);
1100int ssl_prepare_clienthello_tlsext(SSL *s); 1102int ssl_prepare_clienthello_tlsext(SSL *s);
1101int ssl_prepare_serverhello_tlsext(SSL *s); 1103int ssl_prepare_serverhello_tlsext(SSL *s);
1102int ssl_check_clienthello_tlsext(SSL *s); 1104int ssl_check_clienthello_tlsext_early(SSL *s);
1105int ssl_check_clienthello_tlsext_late(SSL *s);
1103int ssl_check_serverhello_tlsext(SSL *s); 1106int ssl_check_serverhello_tlsext(SSL *s);
1104 1107
1105#ifndef OPENSSL_NO_HEARTBEATS 1108#ifndef OPENSSL_NO_HEARTBEATS
diff --git a/src/lib/libssl/src/ssl/ssl_rsa.c b/src/lib/libssl/src/ssl/ssl_rsa.c
index c0960b5712..60e7b66859 100644
--- a/src/lib/libssl/src/ssl/ssl_rsa.c
+++ b/src/lib/libssl/src/ssl/ssl_rsa.c
@@ -710,7 +710,7 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
710 710
711 ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ 711 ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */
712 712
713 in=BIO_new(BIO_s_file_internal()); 713 in = BIO_new(BIO_s_file_internal());
714 if (in == NULL) 714 if (in == NULL)
715 { 715 {
716 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_BUF_LIB); 716 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_BUF_LIB);
@@ -723,14 +723,16 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
723 goto end; 723 goto end;
724 } 724 }
725 725
726 x=PEM_read_bio_X509_AUX(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); 726 x=PEM_read_bio_X509_AUX(in,NULL,ctx->default_passwd_callback,
727 ctx->default_passwd_callback_userdata);
727 if (x == NULL) 728 if (x == NULL)
728 { 729 {
729 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_PEM_LIB); 730 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_PEM_LIB);
730 goto end; 731 goto end;
731 } 732 }
732 733
733 ret=SSL_CTX_use_certificate(ctx,x); 734 ret = SSL_CTX_use_certificate(ctx, x);
735
734 if (ERR_peek_error() != 0) 736 if (ERR_peek_error() != 0)
735 ret = 0; /* Key/certificate mismatch doesn't imply ret==0 ... */ 737 ret = 0; /* Key/certificate mismatch doesn't imply ret==0 ... */
736 if (ret) 738 if (ret)
@@ -742,13 +744,15 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
742 int r; 744 int r;
743 unsigned long err; 745 unsigned long err;
744 746
745 if (ctx->extra_certs != NULL) 747 if (ctx->extra_certs != NULL)
746 { 748 {
747 sk_X509_pop_free(ctx->extra_certs, X509_free); 749 sk_X509_pop_free(ctx->extra_certs, X509_free);
748 ctx->extra_certs = NULL; 750 ctx->extra_certs = NULL;
749 } 751 }
750 752
751 while ((ca = PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata)) 753 while ((ca = PEM_read_bio_X509(in, NULL,
754 ctx->default_passwd_callback,
755 ctx->default_passwd_callback_userdata))
752 != NULL) 756 != NULL)
753 { 757 {
754 r = SSL_CTX_add_extra_chain_cert(ctx, ca); 758 r = SSL_CTX_add_extra_chain_cert(ctx, ca);
diff --git a/src/lib/libssl/src/ssl/ssltest.c b/src/lib/libssl/src/ssl/ssltest.c
index a0e2af6647..4f80be8ee4 100644
--- a/src/lib/libssl/src/ssl/ssltest.c
+++ b/src/lib/libssl/src/ssl/ssltest.c
@@ -150,8 +150,6 @@
150#include <stdlib.h> 150#include <stdlib.h>
151#include <string.h> 151#include <string.h>
152#include <time.h> 152#include <time.h>
153#include <inttypes.h>
154#include <ctype.h>
155 153
156#define USE_SOCKETS 154#define USE_SOCKETS
157#include "e_os.h" 155#include "e_os.h"
@@ -545,8 +543,8 @@ int main(int argc, char *argv[])
545 int comp = 0; 543 int comp = 0;
546#ifndef OPENSSL_NO_COMP 544#ifndef OPENSSL_NO_COMP
547 COMP_METHOD *cm = NULL; 545 COMP_METHOD *cm = NULL;
548#endif
549 STACK_OF(SSL_COMP) *ssl_comp_methods = NULL; 546 STACK_OF(SSL_COMP) *ssl_comp_methods = NULL;
547#endif
550 int test_cipherlist = 0; 548 int test_cipherlist = 0;
551#ifdef OPENSSL_FIPS 549#ifdef OPENSSL_FIPS
552 int fips_mode=0; 550 int fips_mode=0;
@@ -883,7 +881,13 @@ bad:
883 meth=SSLv23_method(); 881 meth=SSLv23_method();
884#else 882#else
885#ifdef OPENSSL_NO_SSL2 883#ifdef OPENSSL_NO_SSL2
886 meth=SSLv3_method(); 884 if (tls1)
885 meth=TLSv1_method();
886 else
887 if (ssl3)
888 meth=SSLv3_method();
889 else
890 meth=SSLv23_method();
887#else 891#else
888 meth=SSLv2_method(); 892 meth=SSLv2_method();
889#endif 893#endif
diff --git a/src/lib/libssl/src/ssl/t1_enc.c b/src/lib/libssl/src/ssl/t1_enc.c
index 638405ec39..0c4cddedf8 100644
--- a/src/lib/libssl/src/ssl/t1_enc.c
+++ b/src/lib/libssl/src/ssl/t1_enc.c
@@ -361,7 +361,7 @@ int tls1_change_cipher_state(SSL *s, int which)
361 { 361 {
362 int i; 362 int i;
363 for (i=0; i<s->s3->tmp.key_block_length; i++) 363 for (i=0; i<s->s3->tmp.key_block_length; i++)
364 printf("%02x", key_block[i]); printf("\n"); 364 printf("%02x", s->s3->tmp.key_block[i]); printf("\n");
365 } 365 }
366#endif /* KSSL_DEBUG */ 366#endif /* KSSL_DEBUG */
367 367
@@ -427,7 +427,7 @@ int tls1_change_cipher_state(SSL *s, int which)
427 s->write_hash = mac_ctx; 427 s->write_hash = mac_ctx;
428 } 428 }
429 else 429 else
430 mac_ctx = ssl_replace_hash(&s->write_hash,NULL); 430 mac_ctx = ssl_replace_hash(&s->write_hash,NULL);
431#ifndef OPENSSL_NO_COMP 431#ifndef OPENSSL_NO_COMP
432 if (s->compress != NULL) 432 if (s->compress != NULL)
433 { 433 {
@@ -929,8 +929,8 @@ int tls1_final_finish_mac(SSL *s,
929 else 929 else
930 { 930 {
931 if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) || 931 if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) ||
932 !EVP_DigestFinal_ex(&ctx,q,&i) || 932 !EVP_DigestFinal_ex(&ctx,q,&i) ||
933 (i != (unsigned int)hashsize)) 933 (i != (unsigned int)hashsize))
934 err = 1; 934 err = 1;
935 q+=hashsize; 935 q+=hashsize;
936 } 936 }
@@ -986,7 +986,8 @@ int tls1_mac(SSL *ssl, unsigned char *md, int send)
986 } 986 }
987 else 987 else
988 { 988 {
989 EVP_MD_CTX_copy(&hmac,hash); 989 if (!EVP_MD_CTX_copy(&hmac,hash))
990 return -1;
990 mac_ctx = &hmac; 991 mac_ctx = &hmac;
991 } 992 }
992 993
diff --git a/src/lib/libssl/src/ssl/t1_lib.c b/src/lib/libssl/src/ssl/t1_lib.c
index a649dafba9..bddffd92cc 100644
--- a/src/lib/libssl/src/ssl/t1_lib.c
+++ b/src/lib/libssl/src/ssl/t1_lib.c
@@ -342,19 +342,11 @@ static unsigned char tls12_sigalgs[] = {
342#ifndef OPENSSL_NO_SHA 342#ifndef OPENSSL_NO_SHA
343 tlsext_sigalg(TLSEXT_hash_sha1) 343 tlsext_sigalg(TLSEXT_hash_sha1)
344#endif 344#endif
345#ifndef OPENSSL_NO_MD5
346 tlsext_sigalg_rsa(TLSEXT_hash_md5)
347#endif
348}; 345};
349 346
350int tls12_get_req_sig_algs(SSL *s, unsigned char *p) 347int tls12_get_req_sig_algs(SSL *s, unsigned char *p)
351 { 348 {
352 size_t slen = sizeof(tls12_sigalgs); 349 size_t slen = sizeof(tls12_sigalgs);
353#ifdef OPENSSL_FIPS
354 /* If FIPS mode don't include MD5 which is last */
355 if (FIPS_mode())
356 slen -= 2;
357#endif
358 if (p) 350 if (p)
359 memcpy(p, tls12_sigalgs, slen); 351 memcpy(p, tls12_sigalgs, slen);
360 return (int)slen; 352 return (int)slen;
@@ -649,6 +641,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha
649 } 641 }
650#endif 642#endif
651 643
644#ifndef OPENSSL_NO_SRTP
652 if(SSL_get_srtp_profiles(s)) 645 if(SSL_get_srtp_profiles(s))
653 { 646 {
654 int el; 647 int el;
@@ -667,6 +660,37 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha
667 } 660 }
668 ret += el; 661 ret += el;
669 } 662 }
663#endif
664
665#ifdef TLSEXT_TYPE_padding
666 /* Add padding to workaround bugs in F5 terminators.
667 * See https://tools.ietf.org/html/draft-agl-tls-padding-03
668 *
669 * NB: because this code works out the length of all existing
670 * extensions it MUST always appear last.
671 */
672 {
673 int hlen = ret - (unsigned char *)s->init_buf->data;
674 /* The code in s23_clnt.c to build ClientHello messages includes the
675 * 5-byte record header in the buffer, while the code in s3_clnt.c does
676 * not. */
677 if (s->state == SSL23_ST_CW_CLNT_HELLO_A)
678 hlen -= 5;
679 if (hlen > 0xff && hlen < 0x200)
680 {
681 hlen = 0x200 - hlen;
682 if (hlen >= 4)
683 hlen -= 4;
684 else
685 hlen = 0;
686
687 s2n(TLSEXT_TYPE_padding, ret);
688 s2n(hlen, ret);
689 memset(ret, 0, hlen);
690 ret += hlen;
691 }
692 }
693#endif
670 694
671 if ((extdatalen = ret-p-2)== 0) 695 if ((extdatalen = ret-p-2)== 0)
672 return p; 696 return p;
@@ -781,6 +805,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
781 } 805 }
782#endif 806#endif
783 807
808#ifndef OPENSSL_NO_SRTP
784 if(s->srtp_profile) 809 if(s->srtp_profile)
785 { 810 {
786 int el; 811 int el;
@@ -799,6 +824,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
799 } 824 }
800 ret+=el; 825 ret+=el;
801 } 826 }
827#endif
802 828
803 if (((s->s3->tmp.new_cipher->id & 0xFFFF)==0x80 || (s->s3->tmp.new_cipher->id & 0xFFFF)==0x81) 829 if (((s->s3->tmp.new_cipher->id & 0xFFFF)==0x80 || (s->s3->tmp.new_cipher->id & 0xFFFF)==0x81)
804 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) 830 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG))
@@ -862,6 +888,89 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
862 return ret; 888 return ret;
863 } 889 }
864 890
891#ifndef OPENSSL_NO_EC
892/* ssl_check_for_safari attempts to fingerprint Safari using OS X
893 * SecureTransport using the TLS extension block in |d|, of length |n|.
894 * Safari, since 10.6, sends exactly these extensions, in this order:
895 * SNI,
896 * elliptic_curves
897 * ec_point_formats
898 *
899 * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
900 * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
901 * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
902 * 10.8..10.8.3 (which don't work).
903 */
904static void ssl_check_for_safari(SSL *s, const unsigned char *data, const unsigned char *d, int n) {
905 unsigned short type, size;
906 static const unsigned char kSafariExtensionsBlock[] = {
907 0x00, 0x0a, /* elliptic_curves extension */
908 0x00, 0x08, /* 8 bytes */
909 0x00, 0x06, /* 6 bytes of curve ids */
910 0x00, 0x17, /* P-256 */
911 0x00, 0x18, /* P-384 */
912 0x00, 0x19, /* P-521 */
913
914 0x00, 0x0b, /* ec_point_formats */
915 0x00, 0x02, /* 2 bytes */
916 0x01, /* 1 point format */
917 0x00, /* uncompressed */
918 };
919
920 /* The following is only present in TLS 1.2 */
921 static const unsigned char kSafariTLS12ExtensionsBlock[] = {
922 0x00, 0x0d, /* signature_algorithms */
923 0x00, 0x0c, /* 12 bytes */
924 0x00, 0x0a, /* 10 bytes */
925 0x05, 0x01, /* SHA-384/RSA */
926 0x04, 0x01, /* SHA-256/RSA */
927 0x02, 0x01, /* SHA-1/RSA */
928 0x04, 0x03, /* SHA-256/ECDSA */
929 0x02, 0x03, /* SHA-1/ECDSA */
930 };
931
932 if (data >= (d+n-2))
933 return;
934 data += 2;
935
936 if (data > (d+n-4))
937 return;
938 n2s(data,type);
939 n2s(data,size);
940
941 if (type != TLSEXT_TYPE_server_name)
942 return;
943
944 if (data+size > d+n)
945 return;
946 data += size;
947
948 if (TLS1_get_client_version(s) >= TLS1_2_VERSION)
949 {
950 const size_t len1 = sizeof(kSafariExtensionsBlock);
951 const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
952
953 if (data + len1 + len2 != d+n)
954 return;
955 if (memcmp(data, kSafariExtensionsBlock, len1) != 0)
956 return;
957 if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0)
958 return;
959 }
960 else
961 {
962 const size_t len = sizeof(kSafariExtensionsBlock);
963
964 if (data + len != d+n)
965 return;
966 if (memcmp(data, kSafariExtensionsBlock, len) != 0)
967 return;
968 }
969
970 s->s3->is_probably_safari = 1;
971}
972#endif /* !OPENSSL_NO_EC */
973
865int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) 974int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
866 { 975 {
867 unsigned short type; 976 unsigned short type;
@@ -882,6 +991,11 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
882 SSL_TLSEXT_HB_DONT_SEND_REQUESTS); 991 SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
883#endif 992#endif
884 993
994#ifndef OPENSSL_NO_EC
995 if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
996 ssl_check_for_safari(s, data, d, n);
997#endif /* !OPENSSL_NO_EC */
998
885 if (data >= (d+n-2)) 999 if (data >= (d+n-2))
886 goto ri_check; 1000 goto ri_check;
887 n2s(data,len); 1001 n2s(data,len);
@@ -1077,7 +1191,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1077 int ellipticcurvelist_length = (*(sdata++) << 8); 1191 int ellipticcurvelist_length = (*(sdata++) << 8);
1078 ellipticcurvelist_length += (*(sdata++)); 1192 ellipticcurvelist_length += (*(sdata++));
1079 1193
1080 if (ellipticcurvelist_length != size - 2) 1194 if (ellipticcurvelist_length != size - 2 ||
1195 ellipticcurvelist_length < 1)
1081 { 1196 {
1082 *al = TLS1_AD_DECODE_ERROR; 1197 *al = TLS1_AD_DECODE_ERROR;
1083 return 0; 1198 return 0;
@@ -1176,7 +1291,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1176 } 1291 }
1177 } 1292 }
1178 else if (type == TLSEXT_TYPE_status_request && 1293 else if (type == TLSEXT_TYPE_status_request &&
1179 s->version != DTLS1_VERSION && s->ctx->tlsext_status_cb) 1294 s->version != DTLS1_VERSION)
1180 { 1295 {
1181 1296
1182 if (size < 5) 1297 if (size < 5)
@@ -1328,12 +1443,14 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1328#endif 1443#endif
1329 1444
1330 /* session ticket processed earlier */ 1445 /* session ticket processed earlier */
1446#ifndef OPENSSL_NO_SRTP
1331 else if (type == TLSEXT_TYPE_use_srtp) 1447 else if (type == TLSEXT_TYPE_use_srtp)
1332 { 1448 {
1333 if(ssl_parse_clienthello_use_srtp_ext(s, data, size, 1449 if(ssl_parse_clienthello_use_srtp_ext(s, data, size,
1334 al)) 1450 al))
1335 return 0; 1451 return 0;
1336 } 1452 }
1453#endif
1337 1454
1338 data+=size; 1455 data+=size;
1339 } 1456 }
@@ -1433,7 +1550,8 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1433 unsigned char *sdata = data; 1550 unsigned char *sdata = data;
1434 int ecpointformatlist_length = *(sdata++); 1551 int ecpointformatlist_length = *(sdata++);
1435 1552
1436 if (ecpointformatlist_length != size - 1) 1553 if (ecpointformatlist_length != size - 1 ||
1554 ecpointformatlist_length < 1)
1437 { 1555 {
1438 *al = TLS1_AD_DECODE_ERROR; 1556 *al = TLS1_AD_DECODE_ERROR;
1439 return 0; 1557 return 0;
@@ -1527,7 +1645,7 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1527 unsigned char selected_len; 1645 unsigned char selected_len;
1528 1646
1529 /* We must have requested it. */ 1647 /* We must have requested it. */
1530 if ((s->ctx->next_proto_select_cb == NULL)) 1648 if (s->ctx->next_proto_select_cb == NULL)
1531 { 1649 {
1532 *al = TLS1_AD_UNSUPPORTED_EXTENSION; 1650 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
1533 return 0; 1651 return 0;
@@ -1577,12 +1695,14 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1577 } 1695 }
1578 } 1696 }
1579#endif 1697#endif
1698#ifndef OPENSSL_NO_SRTP
1580 else if (type == TLSEXT_TYPE_use_srtp) 1699 else if (type == TLSEXT_TYPE_use_srtp)
1581 { 1700 {
1582 if(ssl_parse_serverhello_use_srtp_ext(s, data, size, 1701 if(ssl_parse_serverhello_use_srtp_ext(s, data, size,
1583 al)) 1702 al))
1584 return 0; 1703 return 0;
1585 } 1704 }
1705#endif
1586 1706
1587 data+=size; 1707 data+=size;
1588 } 1708 }
@@ -1763,7 +1883,7 @@ int ssl_prepare_serverhello_tlsext(SSL *s)
1763 return 1; 1883 return 1;
1764 } 1884 }
1765 1885
1766int ssl_check_clienthello_tlsext(SSL *s) 1886int ssl_check_clienthello_tlsext_early(SSL *s)
1767 { 1887 {
1768 int ret=SSL_TLSEXT_ERR_NOACK; 1888 int ret=SSL_TLSEXT_ERR_NOACK;
1769 int al = SSL_AD_UNRECOGNIZED_NAME; 1889 int al = SSL_AD_UNRECOGNIZED_NAME;
@@ -1782,42 +1902,12 @@ int ssl_check_clienthello_tlsext(SSL *s)
1782 else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) 1902 else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)
1783 ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); 1903 ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
1784 1904
1785 /* If status request then ask callback what to do.
1786 * Note: this must be called after servername callbacks in case
1787 * the certificate has changed.
1788 */
1789 if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
1790 {
1791 int r;
1792 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
1793 switch (r)
1794 {
1795 /* We don't want to send a status request response */
1796 case SSL_TLSEXT_ERR_NOACK:
1797 s->tlsext_status_expected = 0;
1798 break;
1799 /* status request response should be sent */
1800 case SSL_TLSEXT_ERR_OK:
1801 if (s->tlsext_ocsp_resp)
1802 s->tlsext_status_expected = 1;
1803 else
1804 s->tlsext_status_expected = 0;
1805 break;
1806 /* something bad happened */
1807 case SSL_TLSEXT_ERR_ALERT_FATAL:
1808 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1809 al = SSL_AD_INTERNAL_ERROR;
1810 goto err;
1811 }
1812 }
1813 else
1814 s->tlsext_status_expected = 0;
1815
1816#ifdef TLSEXT_TYPE_opaque_prf_input 1905#ifdef TLSEXT_TYPE_opaque_prf_input
1817 { 1906 {
1818 /* This sort of belongs into ssl_prepare_serverhello_tlsext(), 1907 /* This sort of belongs into ssl_prepare_serverhello_tlsext(),
1819 * but we might be sending an alert in response to the client hello, 1908 * but we might be sending an alert in response to the client hello,
1820 * so this has to happen here in ssl_check_clienthello_tlsext(). */ 1909 * so this has to happen here in
1910 * ssl_check_clienthello_tlsext_early(). */
1821 1911
1822 int r = 1; 1912 int r = 1;
1823 1913
@@ -1869,8 +1959,8 @@ int ssl_check_clienthello_tlsext(SSL *s)
1869 } 1959 }
1870 } 1960 }
1871 1961
1872#endif
1873 err: 1962 err:
1963#endif
1874 switch (ret) 1964 switch (ret)
1875 { 1965 {
1876 case SSL_TLSEXT_ERR_ALERT_FATAL: 1966 case SSL_TLSEXT_ERR_ALERT_FATAL:
@@ -1888,6 +1978,71 @@ int ssl_check_clienthello_tlsext(SSL *s)
1888 } 1978 }
1889 } 1979 }
1890 1980
1981int ssl_check_clienthello_tlsext_late(SSL *s)
1982 {
1983 int ret = SSL_TLSEXT_ERR_OK;
1984 int al;
1985
1986 /* If status request then ask callback what to do.
1987 * Note: this must be called after servername callbacks in case
1988 * the certificate has changed, and must be called after the cipher
1989 * has been chosen because this may influence which certificate is sent
1990 */
1991 if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
1992 {
1993 int r;
1994 CERT_PKEY *certpkey;
1995 certpkey = ssl_get_server_send_pkey(s);
1996 /* If no certificate can't return certificate status */
1997 if (certpkey == NULL)
1998 {
1999 s->tlsext_status_expected = 0;
2000 return 1;
2001 }
2002 /* Set current certificate to one we will use so
2003 * SSL_get_certificate et al can pick it up.
2004 */
2005 s->cert->key = certpkey;
2006 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2007 switch (r)
2008 {
2009 /* We don't want to send a status request response */
2010 case SSL_TLSEXT_ERR_NOACK:
2011 s->tlsext_status_expected = 0;
2012 break;
2013 /* status request response should be sent */
2014 case SSL_TLSEXT_ERR_OK:
2015 if (s->tlsext_ocsp_resp)
2016 s->tlsext_status_expected = 1;
2017 else
2018 s->tlsext_status_expected = 0;
2019 break;
2020 /* something bad happened */
2021 case SSL_TLSEXT_ERR_ALERT_FATAL:
2022 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2023 al = SSL_AD_INTERNAL_ERROR;
2024 goto err;
2025 }
2026 }
2027 else
2028 s->tlsext_status_expected = 0;
2029
2030 err:
2031 switch (ret)
2032 {
2033 case SSL_TLSEXT_ERR_ALERT_FATAL:
2034 ssl3_send_alert(s,SSL3_AL_FATAL,al);
2035 return -1;
2036
2037 case SSL_TLSEXT_ERR_ALERT_WARNING:
2038 ssl3_send_alert(s,SSL3_AL_WARNING,al);
2039 return 1;
2040
2041 default:
2042 return 1;
2043 }
2044 }
2045
1891int ssl_check_serverhello_tlsext(SSL *s) 2046int ssl_check_serverhello_tlsext(SSL *s)
1892 { 2047 {
1893 int ret=SSL_TLSEXT_ERR_NOACK; 2048 int ret=SSL_TLSEXT_ERR_NOACK;
@@ -2189,7 +2344,7 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen,
2189 HMAC_Update(&hctx, etick, eticklen); 2344 HMAC_Update(&hctx, etick, eticklen);
2190 HMAC_Final(&hctx, tick_hmac, NULL); 2345 HMAC_Final(&hctx, tick_hmac, NULL);
2191 HMAC_CTX_cleanup(&hctx); 2346 HMAC_CTX_cleanup(&hctx);
2192 if (timingsafe_bcmp(tick_hmac, etick + eticklen, mlen)) 2347 if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen))
2193 return 2; 2348 return 2;
2194 /* Attempt to decrypt session data */ 2349 /* Attempt to decrypt session data */
2195 /* Move p after IV to start of encrypted ticket, update length */ 2350 /* Move p after IV to start of encrypted ticket, update length */
@@ -2319,14 +2474,6 @@ const EVP_MD *tls12_get_hash(unsigned char hash_alg)
2319 { 2474 {
2320 switch(hash_alg) 2475 switch(hash_alg)
2321 { 2476 {
2322#ifndef OPENSSL_NO_MD5
2323 case TLSEXT_hash_md5:
2324#ifdef OPENSSL_FIPS
2325 if (FIPS_mode())
2326 return NULL;
2327#endif
2328 return EVP_md5();
2329#endif
2330#ifndef OPENSSL_NO_SHA 2477#ifndef OPENSSL_NO_SHA
2331 case TLSEXT_hash_sha1: 2478 case TLSEXT_hash_sha1:
2332 return EVP_sha1(); 2479 return EVP_sha1();
@@ -2414,7 +2561,7 @@ int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
2414 */ 2561 */
2415#ifndef OPENSSL_NO_DSA 2562#ifndef OPENSSL_NO_DSA
2416 if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest) 2563 if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
2417 c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_dss1(); 2564 c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
2418#endif 2565#endif
2419#ifndef OPENSSL_NO_RSA 2566#ifndef OPENSSL_NO_RSA
2420 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) 2567 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest)
@@ -2425,7 +2572,7 @@ int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
2425#endif 2572#endif
2426#ifndef OPENSSL_NO_ECDSA 2573#ifndef OPENSSL_NO_ECDSA
2427 if (!c->pkeys[SSL_PKEY_ECC].digest) 2574 if (!c->pkeys[SSL_PKEY_ECC].digest)
2428 c->pkeys[SSL_PKEY_ECC].digest = EVP_ecdsa(); 2575 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
2429#endif 2576#endif
2430 return 1; 2577 return 1;
2431 } 2578 }
diff --git a/src/lib/libssl/src/ssl/tls1.h b/src/lib/libssl/src/ssl/tls1.h
index c39c267f0b..c992091e30 100644
--- a/src/lib/libssl/src/ssl/tls1.h
+++ b/src/lib/libssl/src/ssl/tls1.h
@@ -230,6 +230,12 @@ extern "C" {
230/* ExtensionType value from RFC5620 */ 230/* ExtensionType value from RFC5620 */
231#define TLSEXT_TYPE_heartbeat 15 231#define TLSEXT_TYPE_heartbeat 15
232 232
233/* ExtensionType value for TLS padding extension.
234 * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml
235 * http://tools.ietf.org/html/draft-agl-tls-padding-03
236 */
237#define TLSEXT_TYPE_padding 21
238
233/* ExtensionType value from RFC4507 */ 239/* ExtensionType value from RFC4507 */
234#define TLSEXT_TYPE_session_ticket 35 240#define TLSEXT_TYPE_session_ticket 35
235 241
diff --git a/src/lib/libssl/src/test/Makefile b/src/lib/libssl/src/test/Makefile
index 09e6848764..4c9eabcc21 100644
--- a/src/lib/libssl/src/test/Makefile
+++ b/src/lib/libssl/src/test/Makefile
@@ -246,7 +246,7 @@ test_ecdh:
246test_verify: 246test_verify:
247 @echo "The following command should have some OK's and some failures" 247 @echo "The following command should have some OK's and some failures"
248 @echo "There are definitly a few expired certificates" 248 @echo "There are definitly a few expired certificates"
249 ../util/shlib_wrap.sh ../apps/openssl verify -CApath ../certs ../certs/*.pem 249 ../util/shlib_wrap.sh ../apps/openssl verify -CApath ../certs/demo ../certs/demo/*.pem
250 250
251test_dh: 251test_dh:
252 @echo "Generate a set of DH parameters" 252 @echo "Generate a set of DH parameters"
diff --git a/src/lib/libssl/src/test/bctest.com b/src/lib/libssl/src/test/bctest.com
deleted file mode 100644
index d7e5ec139e..0000000000
--- a/src/lib/libssl/src/test/bctest.com
+++ /dev/null
@@ -1,152 +0,0 @@
1$!
2$! Check operation of "bc".
3$!
4$! 2010-04-05 SMS. New. Based (loosely) on "bctest".
5$!
6$!
7$ tmp_file_name = "tmp.bctest"
8$ failure = ""
9$!
10$! Basic command test.
11$!
12$ on warning then goto bc_fail
13$ bc
14$ on error then exit
15$!
16$! Test for SunOS 5.[78] bc bug.
17$!
18$ if (failure .eqs. "")
19$ then
20$!
21$ define /user_mode sys$output 'tmp_file_name'
22$ bc
23obase=16
24ibase=16
25a=AD88C418F31B3FC712D0425001D522B3AE9134FF3A98C13C1FCC1682211195406C1A6C66C6A\
26CEEC1A0EC16950233F77F1C2F2363D56DD71A36C57E0B2511FC4BA8F22D261FE2E9356D99AF57\
2710F3817C0E05BF79C423C3F66FDF321BE8D3F18F625D91B670931C1EF25F28E489BDA1C5422D1\
28C3F6F7A1AD21585746ECC4F10A14A778AF56F08898E965E9909E965E0CB6F85B514150C644759\
293BE731877B16EA07B552088FF2EA728AC5E0FF3A23EB939304519AB8B60F2C33D6BA0945B66F0\
304FC3CADF855448B24A9D7640BCF473E
31b=DCE91E7D120B983EA9A104B5A96D634DD644C37657B1C7860B45E6838999B3DCE5A555583C6\
329209E41F413422954175A06E67FFEF6746DD652F0F48AEFECC3D8CAC13523BDAAD3F5AF4212BD\
338B3CD64126E1A82E190228020C05B91C8B141F1110086FC2A4C6ED631EBA129D04BB9A19FC53D\
343ED0E2017D60A68775B75481449
35(a/b)*b + (a%b) - a
36$ status = $status
37$ output_expected = "0"
38$ gosub check_output
39$ if (output .ne. 1)
40$ then
41$ failure = "SunOStest"
42$ else
43$ delete 'f$parse( tmp_file_name)'
44$ endif
45$ endif
46$!
47$! Test for SCO bc bug.
48$!
49$ if (failure .eqs. "")
50$ then
51$!
52$ define /user_mode sys$output 'tmp_file_name'
53$ bc
54obase=16
55ibase=16
56-FFDD63BA1A4648F0D804F8A1C66C53F0D2110590E8A3907EC73B4AEC6F15AC177F176F2274D2\
579DC8022EA0D7DD3ABE9746D2D46DD3EA5B5F6F69DF12877E0AC5E7F5ADFACEE54573F5D256A06\
5811B5D2BC24947724E22AE4EC3FB0C39D9B4694A01AFE5E43B4D99FB9812A0E4A5773D8B254117\
591239157EC6E3D8D50199 * -FFDD63BA1A4648F0D804F8A1C66C53F0D2110590E8A3907EC73B4\
60AEC6F15AC177F176F2274D29DC8022EA0D7DD3ABE9746D2D46DD3EA5B5F6F69DF12877E0AC5E7\
61F5ADFACEE54573F5D256A0611B5D2BC24947724E22AE4EC3FB0C39D9B4694A01AFE5E43B4D99F\
62B9812A0E4A5773D8B2541171239157EC6E3D8D50199 - FFBACC221682DA464B6D7F123482522\
6302EDAEDCA38C3B69E9B7BBCD6165A9CD8716C4903417F23C09A85B851961F92C217258CEEB866\
6485EFCC5DD131853A02C07A873B8E2AF2E40C6D5ED598CD0E8F35AD49F3C3A17FDB7653E4E2DC4\
65A8D23CC34686EE4AD01F7407A7CD74429AC6D36DBF0CB6A3E302D0E5BDFCD048A3B90C1BE5AA8\
66E16C3D5884F9136B43FF7BB443764153D4AEC176C681B078F4CC53D6EB6AB76285537DDEE7C18\
678C72441B52EDBDDBC77E02D34E513F2AABF92F44109CAFE8242BD0ECBAC5604A94B02EA44D43C\
6804E9476E6FBC48043916BFA1485C6093603600273C9C33F13114D78064AE42F3DC466C7DA543D\
6989C8D71
70AD534AFBED2FA39EE9F40E20FCF9E2C861024DB98DDCBA1CD118C49CA55EEBC20D6BA51B2271C\
71928B693D6A73F67FEB1B4571448588B46194617D25D910C6A9A130CC963155CF34079CB218A44\
728A1F57E276D92A33386DDCA3D241DB78C8974ABD71DD05B0FA555709C9910D745185E6FE108E3\
7337F1907D0C56F8BFBF52B9704 % -E557905B56B13441574CAFCE2BD257A750B1A8B2C88D0E36\
74E18EF7C38DAC80D3948E17ED63AFF3B3467866E3B89D09A81B3D16B52F6A3C7134D3C6F5123E9\
75F617E3145BBFBE9AFD0D6E437EA4FF6F04BC67C4F1458B4F0F47B64 - 1C2BBBB19B74E86FD32\
769E8DB6A8C3B1B9986D57ED5419C2E855F7D5469E35E76334BB42F4C43E3F3A31B9697C171DAC4\
77D97935A7E1A14AD209D6CF811F55C6DB83AA9E6DFECFCD6669DED7171EE22A40C6181615CAF3F\
785296964
79$ status = $status
80$ output_expected = "0\0"
81$ gosub check_output
82$ if (output .ne. 1)
83$ then
84$ failure = "SCOtest"
85$ else
86$ delete 'f$parse( tmp_file_name)'
87$ endif
88$ endif
89$!
90$! Test for working 'print' command.
91$!
92$ if (failure .eqs. "")
93$ then
94$!
95$ define /user_mode sys$output 'tmp_file_name'
96$ bc
97print "OK"
98$ status = $status
99$ output_expected = "OK"
100$ gosub check_output
101$ if (output .ne. 1)
102$ then
103$ failure = "printtest"
104$ else
105$ delete 'f$parse( tmp_file_name)'
106$ endif
107$ endif
108$!
109$ if (failure .nes. "")
110$ then
111$ write sys$output -
112 "No working bc found. Consider installing GNU bc."
113$ exit %X00030000 ! %DCL-W-NORMAL
114$ endif
115$!
116$ exit
117$!
118$!
119$! Complete "bc" command failure.
120$!
121$ bc_fail:
122$ write sys$output -
123 "No ""bc"" program/symbol found. Consider installing GNU bc."
124$ exit %X00030000 ! %DCL-W-NORMAL
125$!
126$!
127$! Output check subroutine.
128$!
129$ check_output:
130$ eof = 0
131$ line_nr = 0
132$ open /read tmp_file 'tmp_file_name'
133$ c_o_loop:
134$ read /error = error_read tmp_file line
135$ goto ok_read
136$ error_read:
137$ eof = 1
138$ ok_read:
139$ line_expected = f$element( line_nr, "\", output_expected)
140$ line_nr = line_nr+ 1
141$ if ((line_expected .nes. "\") .and. (.not. eof) .and. -
142 (line_expected .eqs. line)) then goto c_o_loop
143$!
144$ if ((line_expected .eqs. "\") .and. eof)
145$ then
146$ output = 1
147$ else
148$ output = 0
149$ endif
150$ close tmp_file
151$ return
152$!
diff --git a/src/lib/libssl/src/test/bntest.com b/src/lib/libssl/src/test/bntest.com
deleted file mode 100644
index 6545d2e5a5..0000000000
--- a/src/lib/libssl/src/test/bntest.com
+++ /dev/null
@@ -1,76 +0,0 @@
1$!
2$! Analyze bntest output file.
3$!
4$! Exit status = 1 (success) if all tests passed,
5$! 0 (warning) if any test failed.
6$!
7$! 2011-02-20 SMS. Added code to skip "#" comments in the input file.
8$!
9$! 2010-04-05 SMS. New. Based (loosely) on perl code in bntest-vms.sh.
10$!
11$! Expect data like:
12$! test test_name1
13$! 0
14$! [...]
15$! test test_name2
16$! 0
17$! [...]
18$! [...]
19$!
20$! Some tests have no following "0" lines.
21$!
22$ result_file_name = f$edit( p1, "TRIM")
23$ if (result_file_name .eqs. "")
24$ then
25$ result_file_name = "bntest-vms.out"
26$ endif
27$!
28$ fail = 0
29$ passed = 0
30$ tests = 0
31$!
32$ on control_c then goto tidy
33$ on error then goto tidy
34$!
35$ open /read result_file 'result_file_name'
36$!
37$ read_loop:
38$ read /end = read_loop_end /error = tidy result_file line
39$ t1 = f$element( 0, " ", line)
40$!
41$! Skip "#" comment lines.
42$ if (f$extract( 0, 1, f$edit( line, "TRIM")) .eqs. "#") then -
43 goto read_loop
44$!
45$ if (t1 .eqs. "test")
46$ then
47$ passed = passed+ 1
48$ tests = tests+ 1
49$ fail = 1
50$ t2 = f$extract( 5, 1000, line)
51$ write sys$output "verify ''t2'"
52$ else
53$ if (t1 .nes. "0")
54$ then
55$ write sys$output "Failed! bc: ''line'"
56$ passed = passed- fail
57$ fail = 0
58$ endif
59$ endif
60$ goto read_loop
61$ read_loop_end:
62$ write sys$output "''passed'/''tests' tests passed"
63$!
64$ tidy:
65$ if f$trnlnm( "result_file", "LNM$PROCESS_TABLE", , "SUPERVISOR", , "CONFINE")
66$ then
67$ close result_file
68$ endif
69$!
70$ if ((tests .gt. 0) .and. (tests .eq. passed))
71$ then
72$ exit 1
73$ else
74$ exit 0
75$ endif
76$!
diff --git a/src/lib/libssl/src/test/clean_test.com b/src/lib/libssl/src/test/clean_test.com
deleted file mode 100755
index 7df633fbef..0000000000
--- a/src/lib/libssl/src/test/clean_test.com
+++ /dev/null
@@ -1,35 +0,0 @@
1$!
2$! Delete various test results files.
3$!
4$ def_orig = f$environment( "default")
5$ proc = f$environment( "procedure")
6$ proc_dev_dir = f$parse( "A.;", proc) - "A.;"
7$!
8$ on control_c then goto tidy
9$ on error then goto tidy
10$!
11$ set default 'proc_dev_dir'
12$!
13$ files := *.cms;*, *.srl;*, *.ss;*, -
14 cms.err;*, cms.out;*, newreq.pem;*, -
15 p.txt-zlib-cipher;*, -
16 smtst.txt;*, testkey.pem;*, testreq.pem;*, -
17 test_*.err;*, test_*.out;*, -
18 .rnd;*
19$!
20$ delim = ","
21$ i = 0
22$ loop:
23$ file = f$edit( f$element( i, delim, files), "trim")
24$ if (file .eqs. delim) then goto loop_end
25$ if (f$search( file) .nes. "") then -
26 delete 'p1' 'file'
27$ i = i+ 1
28$ goto loop
29$ loop_end:
30$!
31$ tidy:
32$
33$ if (f$type( def_orig) .nes. "") then -
34 set default 'def_orig'
35$!
diff --git a/src/lib/libssl/src/test/maketests.com b/src/lib/libssl/src/test/maketests.com
deleted file mode 100644
index 9b64cba234..0000000000
--- a/src/lib/libssl/src/test/maketests.com
+++ /dev/null
@@ -1,1087 +0,0 @@
1$!
2$! MAKETESTS.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$!
10$! This command files compiles and creates all the various different
11$! "test" programs for the different types of encryption for OpenSSL.
12$! It was written so it would try to determine what "C" compiler to
13$! use or you can specify which "C" compiler to use.
14$!
15$! The test "executables" will be placed in a directory called
16$! [.xxx.EXE.TEST] where "xxx" denotes ALPHA, IA64, or VAX, depending
17$! on your machine architecture.
18$!
19$! Specify DEBUG or NODEBUG P1 to compile with or without debugger
20$! information.
21$!
22$! Specify which compiler at P2 to try to compile under.
23$!
24$! VAXC For VAX C.
25$! DECC For DEC C.
26$! GNUC For GNU C.
27$!
28$! If you don't specify a compiler, it will try to determine which
29$! "C" compiler to use.
30$!
31$! P3, if defined, sets a TCP/IP library to use, through one of the following
32$! keywords:
33$!
34$! UCX for UCX
35$! SOCKETSHR for SOCKETSHR+NETLIB
36$!
37$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
38$!
39$!
40$! P5, if defined, specifies the C pointer size. Ignored on VAX.
41$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
42$! Supported values are:
43$!
44$! "" Compile with default (/NOPOINTER_SIZE)
45$! 32 Compile with /POINTER_SIZE=32 (SHORT)
46$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
47$! (Automatically select ARGV if compiler supports it.)
48$! 64= Compile with /POINTER_SIZE=64 (LONG).
49$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
50$!
51$! P6, if defined, specifies a directory where ZLIB files (zlib.h,
52$! libz.olb) may be found. Optionally, a non-default object library
53$! name may be included ("dev:[dir]libz_64.olb", for example).
54$!
55$!
56$! Announce/identify.
57$!
58$ proc = f$environment( "procedure")
59$ write sys$output "@@@ "+ -
60 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
61$!
62$! Define A TCP/IP Library That We Will Need To Link To.
63$! (That is, If We Need To Link To One.)
64$!
65$ TCPIP_LIB = ""
66$ ZLIB_LIB = ""
67$!
68$! Check Which Architecture We Are Using.
69$!
70$ if (f$getsyi( "cpu") .lt. 128)
71$ then
72$ ARCH = "VAX"
73$ else
74$ ARCH = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
75$ if (ARCH .eqs. "") then ARCH = "UNK"
76$ endif
77$!
78$ ARCHD = ARCH
79$ LIB32 = "32"
80$ OPT_FILE = ""
81$ POINTER_SIZE = ""
82$!
83$! Check To Make Sure We Have Valid Command Line Parameters.
84$!
85$ GOSUB CHECK_OPTIONS
86$!
87$! Define The OBJ and EXE Directories.
88$!
89$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.TEST]
90$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.TEST]
91$!
92$! Specify the destination directory in any /MAP option.
93$!
94$ if (LINKMAP .eqs. "MAP")
95$ then
96$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
97$ endif
98$!
99$! Add the location prefix to the linker options file name.
100$!
101$ if (OPT_FILE .nes. "")
102$ then
103$ OPT_FILE = EXE_DIR+ OPT_FILE
104$ endif
105$!
106$! Initialise logical names and such
107$!
108$ GOSUB INITIALISE
109$!
110$! Tell The User What Kind of Machine We Run On.
111$!
112$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
113$!
114$! Define The CRYPTO-LIB We Are To Use.
115$!
116$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
117$!
118$! Define The SSL We Are To Use.
119$!
120$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
121$!
122$! Create the OBJ and EXE Directories, if needed.
123$!
124$ IF (F$PARSE(OBJ_DIR).EQS."") THEN -
125 CREATE /DIRECTORY 'OBJ_DIR'
126$ IF (F$PARSE(EXE_DIR).EQS."") THEN -
127 CREATE /DIRECTORY 'EXE_DIR'
128$!
129$! Check To See If We Have The Proper Libraries.
130$!
131$ GOSUB LIB_CHECK
132$!
133$! Check To See If We Have A Linker Option File.
134$!
135$ GOSUB CHECK_OPT_FILE
136$!
137$! Define The TEST Files.
138$! NOTE: Some might think this list ugly. However, it's made this way to
139$! reflect the EXE variable in Makefile as closely as possible,
140$! thereby making it fairly easy to verify that the lists are the same.
141$!
142$ TEST_FILES = "BNTEST,ECTEST,ECDSATEST,ECDHTEST,IDEATEST,"+ -
143 "MD2TEST,MD4TEST,MD5TEST,HMACTEST,WP_TEST,"+ -
144 "RC2TEST,RC4TEST,RC5TEST,"+ -
145 "DESTEST,SHATEST,SHA1TEST,SHA256T,SHA512T,"+ -
146 "MDC2TEST,RMDTEST,"+ -
147 "RANDTEST,DHTEST,ENGINETEST,"+ -
148 "BFTEST,CASTTEST,SSLTEST,EXPTEST,DSATEST,RSA_TEST,"+ -
149 "EVP_TEST,IGETEST,JPAKETEST,SRPTEST,"+ -
150 "ASN1TEST"
151$! Should we add MTTEST,PQ_TEST,LH_TEST,DIVTEST,TABTEST as well?
152$!
153$! Additional directory information.
154$ T_D_BNTEST := [-.crypto.bn]
155$ T_D_ECTEST := [-.crypto.ec]
156$ T_D_ECDSATEST := [-.crypto.ecdsa]
157$ T_D_ECDHTEST := [-.crypto.ecdh]
158$ T_D_IDEATEST := [-.crypto.idea]
159$ T_D_MD2TEST := [-.crypto.md2]
160$ T_D_MD4TEST := [-.crypto.md4]
161$ T_D_MD5TEST := [-.crypto.md5]
162$ T_D_HMACTEST := [-.crypto.hmac]
163$ T_D_WP_TEST := [-.crypto.whrlpool]
164$ T_D_RC2TEST := [-.crypto.rc2]
165$ T_D_RC4TEST := [-.crypto.rc4]
166$ T_D_RC5TEST := [-.crypto.rc5]
167$ T_D_DESTEST := [-.crypto.des]
168$ T_D_SHATEST := [-.crypto.sha]
169$ T_D_SHA1TEST := [-.crypto.sha]
170$ T_D_SHA256T := [-.crypto.sha]
171$ T_D_SHA512T := [-.crypto.sha]
172$ T_D_MDC2TEST := [-.crypto.mdc2]
173$ T_D_RMDTEST := [-.crypto.ripemd]
174$ T_D_RANDTEST := [-.crypto.rand]
175$ T_D_DHTEST := [-.crypto.dh]
176$ T_D_ENGINETEST := [-.crypto.engine]
177$ T_D_BFTEST := [-.crypto.bf]
178$ T_D_CASTTEST := [-.crypto.cast]
179$ T_D_SSLTEST := [-.ssl]
180$ T_D_EXPTEST := [-.crypto.bn]
181$ T_D_DSATEST := [-.crypto.dsa]
182$ T_D_RSA_TEST := [-.crypto.rsa]
183$ T_D_EVP_TEST := [-.crypto.evp]
184$ T_D_IGETEST := [-.test]
185$ T_D_JPAKETEST := [-.crypto.jpake]
186$ T_D_SRPTEST := [-.crypto.srp]
187$ T_D_ASN1TEST := [-.test]
188$!
189$ TCPIP_PROGRAMS = ",,"
190$ IF COMPILER .EQS. "VAXC" THEN -
191 TCPIP_PROGRAMS = ",SSLTEST,"
192$!
193$! Define A File Counter And Set It To "0".
194$!
195$ FILE_COUNTER = 0
196$!
197$! Top Of The File Loop.
198$!
199$ NEXT_FILE:
200$!
201$! O.K, Extract The File Name From The File List.
202$!
203$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",TEST_FILES)
204$!
205$! Check To See If We Are At The End Of The File List.
206$!
207$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
208$!
209$! Increment The Counter.
210$!
211$ FILE_COUNTER = FILE_COUNTER + 1
212$!
213$! Create The Source File Name.
214$!
215$ SOURCE_FILE = "SYS$DISK:" + T_D_'FILE_NAME' + FILE_NAME + ".C"
216$!
217$! Create The Object File Name.
218$!
219$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
220$!
221$! Create The Executable File Name.
222$!
223$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
224$ ON WARNING THEN GOTO NEXT_FILE
225$!
226$! Check To See If The File We Want To Compile Actually Exists.
227$!
228$ IF (F$SEARCH(SOURCE_FILE).EQS."")
229$ THEN
230$!
231$! Tell The User That The File Dosen't Exist.
232$!
233$ WRITE SYS$OUTPUT ""
234$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
235$ WRITE SYS$OUTPUT ""
236$!
237$! Exit The Build.
238$!
239$ GOTO EXIT
240$ ENDIF
241$!
242$! Tell The User What We Are Building.
243$!
244$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Test Program."
245$!
246$! Compile The File.
247$!
248$ ON ERROR THEN GOTO NEXT_FILE
249$ CC /OBJECT='OBJECT_FILE' 'SOURCE_FILE'
250$ ON WARNING THEN GOTO NEXT_FILE
251$!
252$! Check If What We Are About To Compile Works Without A TCP/IP Library.
253$!
254$ IF ((TCPIP_LIB.EQS."").AND.((TCPIP_PROGRAMS-FILE_NAME).NES.TCPIP_PROGRAMS))
255$ THEN
256$!
257$! Inform The User That A TCP/IP Library Is Needed To Compile This Program.
258$!
259$ WRITE SYS$OUTPUT -
260 FILE_NAME," Needs A TCP/IP Library. Can't Link. Skipping..."
261$ GOTO NEXT_FILE
262$!
263$! End The TCP/IP Library Check.
264$!
265$ ENDIF
266$!
267$! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
268$! Check To See If We Are To Link With A Specific TCP/IP Library.
269$!
270$! Don't Link With The RSAREF Routines And TCP/IP Library.
271$!
272$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXECTABLE = 'EXE_FILE' -
273 'OBJECT_FILE', -
274 'SSL_LIB' /LIBRARY, -
275 'CRYPTO_LIB' /LIBRARY -
276 'TCPIP_LIB' -
277 'ZLIB_LIB' -
278 ,'OPT_FILE' /OPTIONS
279$!
280$! Go Back And Do It Again.
281$!
282$ GOTO NEXT_FILE
283$!
284$! All Done With This Library Part.
285$!
286$ FILE_DONE:
287$!
288$! All Done, Time To Exit.
289$!
290$ EXIT:
291$ GOSUB CLEANUP
292$ EXIT
293$!
294$! Check For The Link Option FIle.
295$!
296$ CHECK_OPT_FILE:
297$!
298$! Check To See If We Need To Make A VAX C Option File.
299$!
300$ IF (COMPILER.EQS."VAXC")
301$ THEN
302$!
303$! Check To See If We Already Have A VAX C Linker Option File.
304$!
305$ IF (F$SEARCH(OPT_FILE).EQS."")
306$ THEN
307$!
308$! We Need A VAX C Linker Option File.
309$!
310$ CREATE 'OPT_FILE'
311$DECK
312!
313! Default System Options File To Link Against
314! The Sharable VAX C Runtime Library.
315!
316SYS$SHARE:VAXCRTL.EXE /SHAREABLE
317$EOD
318$!
319$! End The Option File Check.
320$!
321$ ENDIF
322$!
323$! End The VAXC Check.
324$!
325$ ENDIF
326$!
327$! Check To See If We Need A GNU C Option File.
328$!
329$ IF (COMPILER.EQS."GNUC")
330$ THEN
331$!
332$! Check To See If We Already Have A GNU C Linker Option File.
333$!
334$ IF (F$SEARCH(OPT_FILE).EQS."")
335$ THEN
336$!
337$! We Need A GNU C Linker Option File.
338$!
339$ CREATE 'OPT_FILE'
340$DECK
341!
342! Default System Options File To Link Against
343! The Sharable C Runtime Library.
344!
345GNU_CC:[000000]GCCLIB.OLB /LIBRARY
346SYS$SHARE:VAXCRTL.EXE /SHAREABLE
347$EOD
348$!
349$! End The Option File Check.
350$!
351$ ENDIF
352$!
353$! End The GNU C Check.
354$!
355$ ENDIF
356$!
357$! Check To See If We Need A DEC C Option File.
358$!
359$ IF (COMPILER.EQS."DECC")
360$ THEN
361$!
362$! Check To See If We Already Have A DEC C Linker Option File.
363$!
364$ IF (F$SEARCH(OPT_FILE).EQS."")
365$ THEN
366$!
367$! Figure Out If We Need A non-VAX Or A VAX Linker Option File.
368$!
369$ IF (ARCH.EQS."VAX")
370$ THEN
371$!
372$! We Need A DEC C Linker Option File For VAX.
373$!
374$ CREATE 'OPT_FILE'
375$DECK
376!
377! Default System Options File To Link Against
378! The Sharable DEC C Runtime Library.
379!
380SYS$SHARE:DECC$SHR.EXE /SHAREABLE
381$EOD
382$!
383$! Else...
384$!
385$ ELSE
386$!
387$! Create The non-VAX Linker Option File.
388$!
389$ CREATE 'OPT_FILE'
390$DECK
391!
392! Default System Options File For non-VAX To Link Against
393! The Sharable C Runtime Library.
394!
395SYS$SHARE:CMA$OPEN_LIB_SHR.EXE /SHAREABLE
396SYS$SHARE:CMA$OPEN_RTL.EXE /SHAREABLE
397$EOD
398$!
399$! End The DEC C Option File Check.
400$!
401$ ENDIF
402$!
403$! End The Option File Search.
404$!
405$ ENDIF
406$!
407$! End The DEC C Check.
408$!
409$ ENDIF
410$!
411$! Tell The User What Linker Option File We Are Using.
412$!
413$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
414$!
415$! Time To RETURN.
416$!
417$ RETURN
418$!
419$! Check To See If We Have The Appropiate Libraries.
420$!
421$ LIB_CHECK:
422$!
423$! Look For The Library LIBCRYPTO.OLB.
424$!
425$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
426$ THEN
427$!
428$! Tell The User We Can't Find The LIBCRYPTO.OLB Library.
429$!
430$ WRITE SYS$OUTPUT ""
431$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
432$ WRITE SYS$OUTPUT "We Can't Link Without It."
433$ WRITE SYS$OUTPUT ""
434$!
435$! Since We Can't Link Without It, Exit.
436$!
437$ EXIT
438$!
439$! End The Crypto Library Check.
440$!
441$ ENDIF
442$!
443$! Look For The Library LIBSSL.OLB.
444$!
445$ IF (F$SEARCH(SSL_LIB).EQS."")
446$ THEN
447$!
448$! Tell The User We Can't Find The LIBSSL.OLB Library.
449$!
450$ WRITE SYS$OUTPUT ""
451$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
452$ WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
453$ WRITE SYS$OUTPUT ""
454$!
455$! Since We Can't Link Without It, Exit.
456$!
457$ EXIT
458$!
459$! End The SSL Library Check.
460$!
461$ ENDIF
462$!
463$! Time To Return.
464$!
465$ RETURN
466$!
467$! Check The User's Options.
468$!
469$ CHECK_OPTIONS:
470$!
471$! Set basic C compiler /INCLUDE directories.
472$!
473$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
474$!
475$! Check To See If P1 Is Blank.
476$!
477$ IF (P1.EQS."NODEBUG")
478$ THEN
479$!
480$! P1 Is NODEBUG, So Compile Without Debugger Information.
481$!
482$ DEBUGGER = "NODEBUG"
483$ LINKMAP = "NOMAP"
484$ TRACEBACK = "NOTRACEBACK"
485$ GCC_OPTIMIZE = "OPTIMIZE"
486$ CC_OPTIMIZE = "OPTIMIZE"
487$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
488$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
489$!
490$! Else...
491$!
492$ ELSE
493$!
494$! Check To See If We Are To Compile With Debugger Information.
495$!
496$ IF (P1.EQS."DEBUG")
497$ THEN
498$!
499$! Compile With Debugger Information.
500$!
501$ DEBUGGER = "DEBUG"
502$ LINKMAP = "MAP"
503$ TRACEBACK = "TRACEBACK"
504$ GCC_OPTIMIZE = "NOOPTIMIZE"
505$ CC_OPTIMIZE = "NOOPTIMIZE"
506$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
507$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
508$!
509$! Else...
510$!
511$ ELSE
512$!
513$! Tell The User Entered An Invalid Option.
514$!
515$ WRITE SYS$OUTPUT ""
516$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
517$ WRITE SYS$OUTPUT ""
518$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
519$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
520$ WRITE SYS$OUTPUT ""
521$!
522$! Time To EXIT.
523$!
524$ EXIT
525$!
526$! End The Valid Argument Check.
527$!
528$ ENDIF
529$!
530$! End The P1 Check.
531$!
532$ ENDIF
533$!
534$! Check P5 (POINTER_SIZE).
535$!
536$ IF (P5 .NES. "") .AND. (ARCH .NES. "VAX")
537$ THEN
538$!
539$ IF (P5 .EQS. "32")
540$ THEN
541$ POINTER_SIZE = " /POINTER_SIZE=32"
542$ ELSE
543$ POINTER_SIZE = F$EDIT( P5, "COLLAPSE, UPCASE")
544$ IF ((POINTER_SIZE .EQS. "64") .OR. -
545 (POINTER_SIZE .EQS. "64=") .OR. -
546 (POINTER_SIZE .EQS. "64=ARGV"))
547$ THEN
548$ ARCHD = ARCH+ "_64"
549$ LIB32 = ""
550$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
551$ THEN
552$! Explicit user choice: "64" or "64=ARGV".
553$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
554$ ELSE
555$ SET NOON
556$ DEFINE /USER_MODE SYS$OUTPUT NL:
557$ DEFINE /USER_MODE SYS$ERROR NL:
558$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
559$ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
560$ THEN
561$ ! If we got here, it means DCL complained like this:
562$ ! %DCL-W-NOVALU, value not allowed - remove value specification
563$ ! \64=\
564$ !
565$ ! If the compiler was run, logicals defined in /USER would
566$ ! have been deassigned automatically. However, when DCL
567$ ! complains, they aren't, so we do it here (it might be
568$ ! unnecessary, but just in case there will be another error
569$ ! message further on that we don't want to miss)
570$ DEASSIGN /USER_MODE SYS$ERROR
571$ DEASSIGN /USER_MODE SYS$OUTPUT
572$ ELSE
573$ POINTER_SIZE = POINTER_SIZE + "=ARGV"
574$ ENDIF
575$ SET ON
576$ ENDIF
577$ POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
578$ ELSE
579$!
580$! Tell The User Entered An Invalid Option.
581$!
582$ WRITE SYS$OUTPUT ""
583$ WRITE SYS$OUTPUT "The Option ", P5, -
584 " Is Invalid. The Valid Options Are:"
585$ WRITE SYS$OUTPUT ""
586$ WRITE SYS$OUTPUT -
587 " """" : Compile with default (short) pointers."
588$ WRITE SYS$OUTPUT -
589 " 32 : Compile with 32-bit (short) pointers."
590$ WRITE SYS$OUTPUT -
591 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
592$ WRITE SYS$OUTPUT -
593 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
594$ WRITE SYS$OUTPUT -
595 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
596$ WRITE SYS$OUTPUT ""
597$!
598$! Time To EXIT.
599$!
600$ EXIT
601$!
602$ ENDIF
603$!
604$ ENDIF
605$!
606$! End The P5 (POINTER_SIZE) Check.
607$!
608$ ENDIF
609$!
610$! Check To See If P2 Is Blank.
611$!
612$ IF (P2.EQS."")
613$ THEN
614$!
615$! O.K., The User Didn't Specify A Compiler, Let's Try To
616$! Find Out Which One To Use.
617$!
618$! Check To See If We Have GNU C.
619$!
620$ IF (F$TRNLNM("GNU_CC").NES."")
621$ THEN
622$!
623$! Looks Like GNUC, Set To Use GNUC.
624$!
625$ P2 = "GNUC"
626$!
627$! End The GNU C Compiler Check.
628$!
629$ ELSE
630$!
631$! Check To See If We Have VAXC Or DECC.
632$!
633$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
634$ THEN
635$!
636$! Looks Like DECC, Set To Use DECC.
637$!
638$ P2 = "DECC"
639$!
640$! Else...
641$!
642$ ELSE
643$!
644$! Looks Like VAXC, Set To Use VAXC.
645$!
646$ P2 = "VAXC"
647$!
648$! End The VAXC Compiler Check.
649$!
650$ ENDIF
651$!
652$! End The DECC & VAXC Compiler Check.
653$!
654$ ENDIF
655$!
656$! End The Compiler Check.
657$!
658$ ENDIF
659$!
660$! Check To See If We Have A Option For P3.
661$!
662$ IF (P3.EQS."")
663$ THEN
664$!
665$! Find out what socket library we have available
666$!
667$ IF F$PARSE("SOCKETSHR:") .NES. ""
668$ THEN
669$!
670$! We have SOCKETSHR, and it is my opinion that it's the best to use.
671$!
672$ P3 = "SOCKETSHR"
673$!
674$! Tell the user
675$!
676$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
677$!
678$! Else, let's look for something else
679$!
680$ ELSE
681$!
682$! Like UCX (the reason to do this before Multinet is that the UCX
683$! emulation is easier to use...)
684$!
685$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
686 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
687 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
688$ THEN
689$!
690$! Last resort: a UCX or UCX-compatible library
691$!
692$ P3 = "UCX"
693$!
694$! Tell the user
695$!
696$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
697$!
698$! That was all...
699$!
700$ ENDIF
701$ ENDIF
702$ ENDIF
703$!
704$! Set Up Initial CC Definitions, Possibly With User Ones
705$!
706$ CCDEFS = "TCPIP_TYPE_''P3'"
707$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
708$ CCEXTRAFLAGS = ""
709$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
710$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
711$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
712 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
713$!
714$! Check To See If We Have A ZLIB Option.
715$!
716$ ZLIB = P6
717$ IF (ZLIB .NES. "")
718$ THEN
719$!
720$! Check for expected ZLIB files.
721$!
722$ err = 0
723$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
724$ if (f$search( file1) .eqs. "")
725$ then
726$ WRITE SYS$OUTPUT ""
727$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
728$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
729$ err = 1
730$ endif
731$ file1 = f$parse( "A.;", ZLIB)- "A.;"
732$!
733$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
734$ if (f$search( file2) .eqs. "")
735$ then
736$ if (err .eq. 0)
737$ then
738$ WRITE SYS$OUTPUT ""
739$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
740$ endif
741$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
742$ WRITE SYS$OUTPUT ""
743$ err = err+ 2
744$ endif
745$ if (err .eq. 1)
746$ then
747$ WRITE SYS$OUTPUT ""
748$ endif
749$!
750$ if (err .ne. 0)
751$ then
752$ GOTO EXIT
753$ endif
754$!
755$ CCDEFS = """ZLIB=1"", "+ CCDEFS
756$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
757$ ZLIB_LIB = ", ''file2' /library"
758$!
759$! Print info
760$!
761$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
762$!
763$! End The P8 Check.
764$!
765$ ENDIF
766$!
767$! Check To See If The User Entered A Valid Parameter.
768$!
769$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
770$ THEN
771$!
772$! Check To See If The User Wanted DECC.
773$!
774$ IF (P2.EQS."DECC")
775$ THEN
776$!
777$! Looks Like DECC, Set To Use DECC.
778$!
779$ COMPILER = "DECC"
780$!
781$! Tell The User We Are Using DECC.
782$!
783$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
784$!
785$! Use DECC...
786$!
787$ CC = "CC"
788$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
789 THEN CC = "CC /DECC"
790$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
791 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
792 " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
793$!
794$! Define The Linker Options File Name.
795$!
796$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
797$!
798$! End DECC Check.
799$!
800$ ENDIF
801$!
802$! Check To See If We Are To Use VAXC.
803$!
804$ IF (P2.EQS."VAXC")
805$ THEN
806$!
807$! Looks Like VAXC, Set To Use VAXC.
808$!
809$ COMPILER = "VAXC"
810$!
811$! Tell The User We Are Using VAX C.
812$!
813$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
814$!
815$! Compile Using VAXC.
816$!
817$ CC = "CC"
818$ IF ARCH.NES."VAX"
819$ THEN
820$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
821$ EXIT
822$ ENDIF
823$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC /VAXC"
824$ CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /NOLIST" + -
825 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
826$ CCDEFS = CCDEFS + ",""VAXC"""
827$!
828$! Define <sys> As SYS$COMMON:[SYSLIB]
829$!
830$ DEFINE /NOLOG SYS SYS$COMMON:[SYSLIB]
831$!
832$! Define The Linker Options File Name.
833$!
834$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
835$!
836$! End VAXC Check
837$!
838$ ENDIF
839$!
840$! Check To See If We Are To Use GNU C.
841$!
842$ IF (P2.EQS."GNUC")
843$ THEN
844$!
845$! Looks Like GNUC, Set To Use GNUC.
846$!
847$ COMPILER = "GNUC"
848$!
849$! Tell The User We Are Using GNUC.
850$!
851$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
852$!
853$! Use GNU C...
854$!
855$ CC = "GCC /NOCASE_HACK /''GCC_OPTIMIZE' /''DEBUGGER' /NOLIST" + -
856 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
857$!
858$! Define The Linker Options File Name.
859$!
860$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
861$!
862$! End The GNU C Check.
863$!
864$ ENDIF
865$!
866$! Set up default defines
867$!
868$ CCDEFS = """FLAT_INC=1""," + CCDEFS
869$!
870$! Finish up the definition of CC.
871$!
872$ IF COMPILER .EQS. "DECC"
873$ THEN
874$ IF CCDISABLEWARNINGS .EQS. ""
875$ THEN
876$ CC4DISABLEWARNINGS = "DOLLARID"
877$ ELSE
878$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
879$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
880$ ENDIF
881$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
882$ ELSE
883$ CCDISABLEWARNINGS = ""
884$ CC4DISABLEWARNINGS = ""
885$ ENDIF
886$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
887$!
888$! Show user the result
889$!
890$ WRITE /SYMBOL SYS$OUTPUT "Main Compiling Command: ", CC
891$!
892$! Else The User Entered An Invalid Argument.
893$!
894$ ELSE
895$!
896$! Tell The User We Don't Know What They Want.
897$!
898$ WRITE SYS$OUTPUT ""
899$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
900$ WRITE SYS$OUTPUT ""
901$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
902$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
903$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
904$ WRITE SYS$OUTPUT ""
905$!
906$! Time To EXIT.
907$!
908$ EXIT
909$ ENDIF
910$!
911$! Time to check the contents, and to make sure we get the correct library.
912$!
913$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
914 .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
915$ THEN
916$!
917$! Check to see if SOCKETSHR was chosen
918$!
919$ IF P3.EQS."SOCKETSHR"
920$ THEN
921$!
922$! Set the library to use SOCKETSHR
923$!
924$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
925$!
926$! Done with SOCKETSHR
927$!
928$ ENDIF
929$!
930$! Check to see if MULTINET was chosen
931$!
932$ IF P3.EQS."MULTINET"
933$ THEN
934$!
935$! Set the library to use UCX emulation.
936$!
937$ P3 = "UCX"
938$!
939$! Done with MULTINET
940$!
941$ ENDIF
942$!
943$! Check to see if UCX was chosen
944$!
945$ IF P3.EQS."UCX"
946$ THEN
947$!
948$! Set the library to use UCX.
949$!
950$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
951$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
952$ THEN
953$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
954$ ELSE
955$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
956 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
957$ ENDIF
958$!
959$! Done with UCX
960$!
961$ ENDIF
962$!
963$! Check to see if TCPIP was chosen
964$!
965$ IF P3.EQS."TCPIP"
966$ THEN
967$!
968$! Set the library to use TCPIP (post UCX).
969$!
970$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
971$!
972$! Done with TCPIP
973$!
974$ ENDIF
975$!
976$! Check to see if NONE was chosen
977$!
978$ IF P3.EQS."NONE"
979$ THEN
980$!
981$! Do not use a TCPIP library.
982$!
983$ TCPIP_LIB = ""
984$!
985$! Done with NONE
986$!
987$ ENDIF
988$!
989$! Print info
990$!
991$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
992$!
993$! Else The User Entered An Invalid Argument.
994$!
995$ ELSE
996$!
997$! Tell The User We Don't Know What They Want.
998$!
999$ WRITE SYS$OUTPUT ""
1000$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1001$ WRITE SYS$OUTPUT ""
1002$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1003$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1004$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1005$ WRITE SYS$OUTPUT ""
1006$!
1007$! Time To EXIT.
1008$!
1009$ EXIT
1010$!
1011$! Done with TCP/IP libraries
1012$!
1013$ ENDIF
1014$!
1015$! Special Threads For OpenVMS v7.1 Or Later
1016$!
1017$! Written By: Richard Levitte
1018$! richard@levitte.org
1019$!
1020$!
1021$! Check To See If We Have A Option For P4.
1022$!
1023$ IF (P4.EQS."")
1024$ THEN
1025$!
1026$! Get The Version Of VMS We Are Using.
1027$!
1028$ ISSEVEN :=
1029$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
1030$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
1031$!
1032$! Check To See If The VMS Version Is v7.1 Or Later.
1033$!
1034$ IF (TMP.GE.71)
1035$ THEN
1036$!
1037$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
1038$!
1039$ ISSEVEN := ,PTHREAD_USE_D4
1040$!
1041$! End The VMS Version Check.
1042$!
1043$ ENDIF
1044$!
1045$! End The P4 Check.
1046$!
1047$ ENDIF
1048$!
1049$! Time To RETURN...
1050$!
1051$ RETURN
1052$!
1053$ INITIALISE:
1054$!
1055$! Save old value of the logical name OPENSSL
1056$!
1057$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1058$!
1059$! Save directory information
1060$!
1061$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1062$ __HERE = F$EDIT(__HERE,"UPCASE")
1063$ __TOP = __HERE - "TEST]"
1064$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1065$!
1066$! Set up the logical name OPENSSL to point at the include directory
1067$!
1068$ DEFINE OPENSSL /NOLOG '__INCLUDE'
1069$!
1070$! Done
1071$!
1072$ RETURN
1073$!
1074$ CLEANUP:
1075$!
1076$! Restore the logical name OPENSSL if it had a value
1077$!
1078$ IF __SAVE_OPENSSL .EQS. ""
1079$ THEN
1080$ DEASSIGN OPENSSL
1081$ ELSE
1082$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
1083$ ENDIF
1084$!
1085$! Done
1086$!
1087$ RETURN
diff --git a/src/lib/libssl/src/test/tcrl.com b/src/lib/libssl/src/test/tcrl.com
deleted file mode 100644
index dd96a2b6dd..0000000000
--- a/src/lib/libssl/src/test/tcrl.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TCRL.COM -- Tests crl keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl crl"
13$
14$ t = "testcrl.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing CRL conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$! write sys$output "p -> t"
29$! 'cmd' -in fff.p -inform p -outform t -out f.t
30$! if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$! write sys$output "t -> d"
39$! 'cmd' -in f.t -inform t -outform d -out ff.d2
40$! if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$! write sys$output "d -> t"
46$! 'cmd' -in f.d -inform d -outform t -out ff.t1
47$! if $severity .ne. 1 then exit 3
48$! write sys$output "t -> t"
49$! 'cmd' -in f.t -inform t -outform t -out ff.t2
50$! if $severity .ne. 1 then exit 3
51$! write sys$output "p -> t"
52$! 'cmd' -in f.p -inform p -outform t -out ff.t3
53$! if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$! write sys$output "t -> p"
59$! 'cmd' -in f.t -inform t -outform p -out ff.p2
60$! if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$! backup/compare fff.p ff.p2
70$! if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$! backup/compare f.t ff.t1
75$! if $severity .ne. 1 then exit 3
76$! backup/compare f.t ff.t2
77$! if $severity .ne. 1 then exit 3
78$! backup/compare f.t ff.t3
79$! if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$! backup/compare f.p ff.p2
84$! if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/test/testca.com b/src/lib/libssl/src/test/testca.com
deleted file mode 100644
index 78cda9ec5a..0000000000
--- a/src/lib/libssl/src/test/testca.com
+++ /dev/null
@@ -1,52 +0,0 @@
1$! TESTCA.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. "64") then __arch = __arch+ "_64"
9$
10$ openssl = "mcr ''exe_dir'openssl"
11$
12$ SSLEAY_CONFIG="-config ""CAss.cnf"""
13$
14$ set noon
15$ if f$search("demoCA.dir") .nes. ""
16$ then
17$ @[-.util]deltree [.demoCA]*.*
18$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) demoCA.dir;*
19$ delete demoCA.dir;*
20$ endif
21$ set on
22$ open/read sys$ca_input VMSca-response.1
23$ @[-.apps]CA.com -input sys$ca_input -newca
24$ close sys$ca_input
25$ if $severity .ne. 1 then exit 3
26$
27$
28$ SSLEAY_CONFIG="-config ""Uss.cnf"""
29$ @[-.apps]CA.com -newreq
30$ if $severity .ne. 1 then exit 3
31$
32$
33$ SSLEAY_CONFIG="-config [-.apps]openssl-vms.cnf"
34$ open/read sys$ca_input VMSca-response.2
35$ @[-.apps]CA.com -input sys$ca_input -sign
36$ close sys$ca_input
37$ if $severity .ne. 1 then exit 3
38$
39$
40$ @[-.apps]CA.com -verify newcert.pem
41$ if $severity .ne. 1 then exit 3
42$
43$ set noon
44$ @[-.util]deltree [.demoCA]*.*
45$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) demoCA.dir;*
46$ delete demoCA.dir;*
47$ if f$search("newcert.pem") .nes. "" then delete newcert.pem;*
48$ if f$search("newcert.pem") .nes. "" then delete newreq.pem;*
49$ set on
50$! #usage: CA -newcert|-newreq|-newca|-sign|-verify
51$
52$ exit
diff --git a/src/lib/libssl/src/test/testenc.com b/src/lib/libssl/src/test/testenc.com
deleted file mode 100644
index 75acd6f07f..0000000000
--- a/src/lib/libssl/src/test/testenc.com
+++ /dev/null
@@ -1,66 +0,0 @@
1$! TESTENC.COM -- Test encoding and decoding
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. 64) then __arch = __arch+ "_64"
9$
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$ testsrc = "makefile."
12$ test = "p.txt"
13$ cmd = "mcr ''exe_dir'openssl"
14$
15$ if f$search(test) .nes. "" then delete 'test';*
16$ convert/fdl=sys$input: 'testsrc' 'test'
17RECORD
18 FORMAT STREAM_LF
19$
20$ if f$search(test+"-cipher") .nes. "" then delete 'test'-cipher;*
21$ if f$search(test+"-clear") .nes. "" then delete 'test'-clear;*
22$
23$ write sys$output "cat"
24$ 'cmd' enc -in 'test' -out 'test'-cipher
25$ 'cmd' enc -in 'test'-cipher -out 'test'-clear
26$ backup/compare 'test' 'test'-clear
27$ if $severity .ne. 1 then exit 3
28$ delete 'test'-cipher;*,'test'-clear;*
29$
30$ write sys$output "base64"
31$ 'cmd' enc -a -e -in 'test' -out 'test'-cipher
32$ 'cmd' enc -a -d -in 'test'-cipher -out 'test'-clear
33$ backup/compare 'test' 'test'-clear
34$ if $severity .ne. 1 then exit 3
35$ delete 'test'-cipher;*,'test'-clear;*
36$
37$ define/user sys$output 'test'-cipher-commands
38$ 'cmd' list-cipher-commands
39$ open/read f 'test'-cipher-commands
40$ loop_cipher_commands:
41$ read/end=loop_cipher_commands_end f i
42$ write sys$output i
43$
44$ if f$search(test+"-"+i+"-cipher") .nes. "" then -
45 delete 'test'-'i'-cipher;*
46$ if f$search(test+"-"+i+"-clear") .nes. "" then -
47 delete 'test'-'i'-clear;*
48$
49$ 'cmd' 'i' -bufsize 113 -e -k test -in 'test' -out 'test'-'i'-cipher
50$ 'cmd' 'i' -bufsize 157 -d -k test -in 'test'-'i'-cipher -out 'test'-'i'-clear
51$ backup/compare 'test' 'test'-'i'-clear
52$ if $severity .ne. 1 then exit 3
53$ delete 'test'-'i'-cipher;*,'test'-'i'-clear;*
54$
55$ write sys$output i," base64"
56$ 'cmd' 'i' -bufsize 113 -a -e -k test -in 'test' -out 'test'-'i'-cipher
57$ 'cmd' 'i' -bufsize 157 -a -d -k test -in 'test'-'i'-cipher -out 'test'-'i'-clear
58$ backup/compare 'test' 'test'-'i'-clear
59$ if $severity .ne. 1 then exit 3
60$ delete 'test'-'i'-cipher;*,'test'-'i'-clear;*
61$
62$ goto loop_cipher_commands
63$ loop_cipher_commands_end:
64$ close f
65$ delete 'test'-cipher-commands;*
66$ delete 'test';*
diff --git a/src/lib/libssl/src/test/testgen.com b/src/lib/libssl/src/test/testgen.com
deleted file mode 100644
index e076da2f30..0000000000
--- a/src/lib/libssl/src/test/testgen.com
+++ /dev/null
@@ -1,58 +0,0 @@
1$! TESTGEN.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$ if (p1 .eqs. 64) then __arch = __arch+ "_64"
8$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
9$
10$ T = "testcert"
11$ KEY = 512
12$ CA = "[-.certs]testca.pem"
13$
14$ set noon
15$ if f$search(T+".1;*") .nes. "" then delete 'T'.1;*
16$ if f$search(T+".2;*") .nes. "" then delete 'T'.2;*
17$ if f$search(T+".key;*") .nes. "" then delete 'T'.key;*
18$ set on
19$
20$ write sys$output "generating certificate request"
21$
22$ append/new nl: .rnd
23$ open/append random_file .rnd
24$ write random_file -
25 "string to make the random number generator think it has entropy"
26$ close random_file
27$
28$ set noon
29$ define/user sys$output nla0:
30$ mcr 'exe_dir'openssl no-rsa
31$ save_severity=$SEVERITY
32$ set on
33$ if save_severity
34$ then
35$ req_new="-newkey dsa:[-.apps]dsa512.pem"
36$ else
37$ req_new="-new"
38$ write sys$output -
39 "There should be a 2 sequences of .'s and some +'s."
40$ write sys$output -
41 "There should not be more that at most 80 per line"
42$ endif
43$
44$ write sys$output "This could take some time."
45$
46$ mcr 'exe_dir'openssl req -config test.cnf 'req_new' -out testreq.pem
47$ if $severity .ne. 1
48$ then
49$ write sys$output "problems creating request"
50$ exit 3
51$ endif
52$
53$ mcr 'exe_dir'openssl req -config test.cnf -verify -in testreq.pem -noout
54$ if $severity .ne. 1
55$ then
56$ write sys$output "signature on req is wrong"
57$ exit 3
58$ endif
diff --git a/src/lib/libssl/src/test/tests.com b/src/lib/libssl/src/test/tests.com
deleted file mode 100644
index a840d5078f..0000000000
--- a/src/lib/libssl/src/test/tests.com
+++ /dev/null
@@ -1,375 +0,0 @@
1$! TESTS.COM -- Performs the necessary tests
2$!
3$! P1 tests to be performed. Empty means all.
4$! P2 Pointer size: "", "32", or "64".
5$!
6$! Announce/identify.
7$!
8$ proc = f$environment( "procedure")
9$ write sys$output "@@@ "+ -
10 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
11$!
12$ __proc = f$element(0,";",f$environment("procedure"))
13$ __here = f$parse(f$parse("A.;",__proc) - "A.;","[]A.;") - "A.;"
14$ __save_default = f$environment("default")
15$ __arch = "VAX"
16$ if f$getsyi("cpu") .ge. 128 then -
17 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
18$ if __arch .eqs. "" then __arch = "UNK"
19$!
20$ __archd = __arch
21$ pointer_size = ""
22$ if (p2 .eq. "64")
23$ then
24$ pointer_size = "64"
25$ __archd = __arch+ "_64"
26$ endif
27$!
28$ texe_dir := sys$disk:[-.'__archd'.exe.test]
29$ exe_dir := sys$disk:[-.'__archd'.exe.apps]
30$
31$ set default '__here'
32$
33$ ROOT = F$PARSE("sys$disk:[-]A.;0",,,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
34$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
35$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
36 - ".][000000" - "[000000." - "][" - "[" - "]"
37$ ROOT = ROOT_DEV + "[" + ROOT_DIR
38$ DEFINE/NOLOG SSLROOT 'ROOT'.APPS.] /TRANS=CONC
39$ openssl_conf := sslroot:[000000]openssl-vms.cnf
40$
41$ on control_y then goto exit
42$ on error then goto exit
43$
44$ if p1 .nes. ""
45$ then
46$ tests = p1
47$ else
48$! NOTE: This list reflects the list of dependencies following the
49$! "alltests" target in Makefile. This should make it easy to see
50$! if there's a difference that needs to be taken care of.
51$ tests := -
52 test_des,test_idea,test_sha,test_md4,test_md5,test_hmac,-
53 test_md2,test_mdc2,test_wp,-
54 test_rmd,test_rc2,test_rc4,test_rc5,test_bf,test_cast,test_aes,-
55 test_rand,test_bn,test_ec,test_ecdsa,test_ecdh,-
56 test_enc,test_x509,test_rsa,test_crl,test_sid,-
57 test_gen,test_req,test_pkcs7,test_verify,test_dh,test_dsa,-
58 test_ss,test_ca,test_engine,test_evp,test_ssl,test_tsa,test_ige,-
59 test_jpake,test_srp,test_cms
60$ endif
61$ tests = f$edit(tests,"COLLAPSE")
62$
63$ BNTEST := bntest
64$ ECTEST := ectest
65$ ECDSATEST := ecdsatest
66$ ECDHTEST := ecdhtest
67$ EXPTEST := exptest
68$ IDEATEST := ideatest
69$ SHATEST := shatest
70$ SHA1TEST := sha1test
71$ SHA256TEST := sha256t
72$ SHA512TEST := sha512t
73$ MDC2TEST := mdc2test
74$ RMDTEST := rmdtest
75$ MD2TEST := md2test
76$ MD4TEST := md4test
77$ MD5TEST := md5test
78$ HMACTEST := hmactest
79$ WPTEST := wp_test
80$ RC2TEST := rc2test
81$ RC4TEST := rc4test
82$ RC5TEST := rc5test
83$ BFTEST := bftest
84$ CASTTEST := casttest
85$ DESTEST := destest
86$ RANDTEST := randtest
87$ DHTEST := dhtest
88$ DSATEST := dsatest
89$ METHTEST := methtest
90$ SSLTEST := ssltest
91$ RSATEST := rsa_test
92$ ENGINETEST := enginetest
93$ EVPTEST := evp_test
94$ IGETEST := igetest
95$ JPAKETEST := jpaketest
96$ SRPTEST := srptest
97$ ASN1TEST := asn1test
98$!
99$ tests_i = 0
100$ loop_tests:
101$ tests_e = f$element(tests_i,",",tests)
102$ tests_i = tests_i + 1
103$ if tests_e .eqs. "," then goto exit
104$ write sys$output "---> ''tests_e'"
105$ gosub 'tests_e'
106$ goto loop_tests
107$
108$ test_evp:
109$ mcr 'texe_dir''evptest' 'ROOT'.CRYPTO.EVP]evptests.txt
110$ return
111$ test_des:
112$ mcr 'texe_dir''destest'
113$ return
114$ test_idea:
115$ mcr 'texe_dir''ideatest'
116$ return
117$ test_sha:
118$ mcr 'texe_dir''shatest'
119$ mcr 'texe_dir''sha1test'
120$ mcr 'texe_dir''sha256test'
121$ mcr 'texe_dir''sha512test'
122$ return
123$ test_mdc2:
124$ mcr 'texe_dir''mdc2test'
125$ return
126$ test_md5:
127$ mcr 'texe_dir''md5test'
128$ return
129$ test_md4:
130$ mcr 'texe_dir''md4test'
131$ return
132$ test_hmac:
133$ mcr 'texe_dir''hmactest'
134$ return
135$ test_wp:
136$ mcr 'texe_dir''wptest'
137$ return
138$ test_md2:
139$ mcr 'texe_dir''md2test'
140$ return
141$ test_rmd:
142$ mcr 'texe_dir''rmdtest'
143$ return
144$ test_bf:
145$ mcr 'texe_dir''bftest'
146$ return
147$ test_cast:
148$ mcr 'texe_dir''casttest'
149$ return
150$ test_rc2:
151$ mcr 'texe_dir''rc2test'
152$ return
153$ test_rc4:
154$ mcr 'texe_dir''rc4test'
155$ return
156$ test_rc5:
157$ mcr 'texe_dir''rc5test'
158$ return
159$ test_rand:
160$ mcr 'texe_dir''randtest'
161$ return
162$ test_enc:
163$ @testenc.com 'pointer_size'
164$ return
165$ test_x509:
166$ set noon
167$ define sys$error test_x509.err
168$ write sys$output "test normal x509v1 certificate"
169$ @tx509.com "" 'pointer_size'
170$ write sys$output "test first x509v3 certificate"
171$ @tx509.com v3-cert1.pem 'pointer_size'
172$ write sys$output "test second x509v3 certificate"
173$ @tx509.com v3-cert2.pem 'pointer_size'
174$ deassign sys$error
175$ set on
176$ return
177$ test_rsa:
178$ set noon
179$ define sys$error test_rsa.err
180$ @trsa.com "" 'pointer_size'
181$ deassign sys$error
182$ mcr 'texe_dir''rsatest'
183$ set on
184$ return
185$ test_crl:
186$ set noon
187$ define sys$error test_crl.err
188$ @tcrl.com "" 'pointer_size'
189$ deassign sys$error
190$ set on
191$ return
192$ test_sid:
193$ set noon
194$ define sys$error test_sid.err
195$ @tsid.com "" 'pointer_size'
196$ deassign sys$error
197$ set on
198$ return
199$ test_req:
200$ set noon
201$ define sys$error test_req.err
202$ @treq.com "" 'pointer_size'
203$ @treq.com testreq2.pem 'pointer_size'
204$ deassign sys$error
205$ set on
206$ return
207$ test_pkcs7:
208$ set noon
209$ define sys$error test_pkcs7.err
210$ @tpkcs7.com "" 'pointer_size'
211$ @tpkcs7d.com "" 'pointer_size'
212$ deassign sys$error
213$ set on
214$ return
215$ test_bn:
216$ write sys$output -
217 "starting big number library test, could take a while..."
218$ set noon
219$ define sys$error test_bn.err
220$ define sys$output test_bn.out
221$ @ bctest.com
222$ status = $status
223$ deassign sys$error
224$ deassign sys$output
225$ set on
226$ if (status)
227$ then
228$ create /fdl = sys$input bntest-vms.tmp
229FILE
230 ORGANIZATION sequential
231RECORD
232 FORMAT stream_lf
233$ define /user_mode sys$output bntest-vms.tmp
234$ mcr 'texe_dir''bntest'
235$ define /user_mode sys$input bntest-vms.tmp
236$ define /user_mode sys$output bntest-vms.out
237$ bc
238$ @ bntest.com bntest-vms.out
239$ status = $status
240$ if (status)
241$ then
242$ delete bntest-vms.out;*
243$ delete bntest-vms.tmp;*
244$ endif
245$ else
246$ create /fdl = sys$input bntest-vms.sh
247FILE
248 ORGANIZATION sequential
249RECORD
250 FORMAT stream_lf
251$ open /append bntest_file bntest-vms.sh
252$ type /output = bntest_file sys$input:
253<< __FOO__ sh -c "`sh ./bctest`" | perl -e '$i=0; while (<STDIN>) {if (/^test (.*)/) {print STDERR "\nverify $1";} elsif (!/^0$/) {die "\nFailed! bc: $_";} else {print STDERR "."; $i++;}} print STDERR "\n$i tests passed\n"'
254$ define /user_mode sys$output bntest-vms.tmp
255$ mcr 'texe_dir''bntest'
256$ copy bntest-vms.tmp bntest_file
257$ delete bntest-vms.tmp;*
258$ type /output = bntest_file sys$input:
259__FOO__
260$ close bntest_file
261$ write sys$output "-- copy the [.test]bntest-vms.sh and [.test]bctest files to a Unix system and"
262$ write sys$output "-- run bntest-vms.sh through sh or bash to verify that the bignum operations"
263$ write sys$output "-- went well."
264$ write sys$output ""
265$ endif
266$ write sys$output "test a^b%c implementations"
267$ mcr 'texe_dir''exptest'
268$ return
269$ test_ec:
270$ write sys$output "test elliptic curves"
271$ mcr 'texe_dir''ectest'
272$ return
273$ test_ecdsa:
274$ write sys$output "test ecdsa"
275$ mcr 'texe_dir''ecdsatest'
276$ return
277$ test_ecdh:
278$ write sys$output "test ecdh"
279$ mcr 'texe_dir''ecdhtest'
280$ return
281$ test_verify:
282$ write sys$output "The following command should have some OK's and some failures"
283$ write sys$output "There are definitly a few expired certificates"
284$ @tverify.com 'pointer_size'
285$ return
286$ test_dh:
287$ write sys$output "Generate a set of DH parameters"
288$ mcr 'texe_dir''dhtest'
289$ return
290$ test_dsa:
291$ write sys$output "Generate a set of DSA parameters"
292$ mcr 'texe_dir''dsatest'
293$ return
294$ test_gen:
295$ write sys$output "Generate and verify a certificate request"
296$ @testgen.com 'pointer_size'
297$ return
298$ maybe_test_ss:
299$ testss_RDT = f$cvtime(f$file_attributes("testss.com","RDT"))
300$ if f$cvtime(f$file_attributes("keyU.ss","RDT")) .les. testss_RDT then -
301 goto test_ss
302$ if f$cvtime(f$file_attributes("certU.ss","RDT")) .les. testss_RDT then -
303 goto test_ss
304$ if f$cvtime(f$file_attributes("certCA.ss","RDT")) .les. testss_RDT then -
305 goto test_ss
306$ return
307$ test_ss:
308$ write sys$output "Generate and certify a test certificate"
309$ @testss.com 'pointer_size'
310$ return
311$ test_engine:
312$ write sys$output "Manipulate the ENGINE structures"
313$ mcr 'texe_dir''enginetest'
314$ return
315$ test_ssl:
316$ write sys$output "test SSL protocol"
317$ gosub maybe_test_ss
318$ @testssl.com keyU.ss certU.ss certCA.ss 'pointer_size'
319$ return
320$ test_ca:
321$ set noon
322$ define /user_mode sys$output test_ca.out
323$ mcr 'exe_dir'openssl no-rsa
324$ save_severity=$SEVERITY
325$ set on
326$ if save_severity
327$ then
328$ write sys$output "skipping CA.com test -- requires RSA"
329$ else
330$ write sys$output "Generate and certify a test certificate via the 'ca' program"
331$ @testca.com 'pointer_size'
332$ endif
333$ return
334$ test_aes:
335$! write sys$output "test AES"
336$! !mcr 'texe_dir''aestest'
337$ return
338$ test_tsa:
339$ set noon
340$ define /user_mode sys$output nla0:
341$ mcr 'exe_dir'openssl no-rsa
342$ save_severity=$SEVERITY
343$ set on
344$ if save_severity
345$ then
346$ write sys$output "skipping testtsa.com test -- requires RSA"
347$ else
348$ @testtsa.com "" "" "" 'pointer_size'
349$ endif
350$ return
351$ test_ige:
352$ write sys$output "Test IGE mode"
353$ mcr 'texe_dir''igetest'
354$ return
355$ test_jpake:
356$ write sys$output "Test JPAKE"
357$ mcr 'texe_dir''jpaketest'
358$ return
359$ test_cms:
360$ write sys$output "CMS consistency test"
361$ ! Define the logical name used to find openssl.exe in the perl script.
362$ define /user_mode osslx 'exe_dir'
363$ perl CMS-TEST.PL
364$ return
365$ test_srp:
366$ write sys$output "Test SRP"
367$ mcr 'texe_dir''srptest'
368$ return
369$
370$
371$ exit:
372$ mcr 'exe_dir'openssl version -a
373$ set default '__save_default'
374$ deassign sslroot
375$ exit
diff --git a/src/lib/libssl/src/test/testss.com b/src/lib/libssl/src/test/testss.com
deleted file mode 100644
index 32a74d0fc2..0000000000
--- a/src/lib/libssl/src/test/testss.com
+++ /dev/null
@@ -1,123 +0,0 @@
1$! TESTSS.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ digest="-md5"
13$ reqcmd = "mcr ''exe_dir'openssl req"
14$ x509cmd = "mcr ''exe_dir'openssl x509 ''digest'"
15$ verifycmd = "mcr ''exe_dir'openssl verify"
16$ dummycnf = "sys$disk:[-.apps]openssl-vms.cnf"
17$
18$ CAkey="""keyCA.ss"""
19$ CAcert="""certCA.ss"""
20$ CAreq="""reqCA.ss"""
21$ CAconf="""CAss.cnf"""
22$ CAreq2="""req2CA.ss""" ! temp
23$
24$ Uconf="""Uss.cnf"""
25$ Ukey="""keyU.ss"""
26$ Ureq="""reqU.ss"""
27$ Ucert="""certU.ss"""
28$
29$ write sys$output ""
30$ write sys$output "make a certificate request using 'req'"
31$
32$ set noon
33$ define/user sys$output nla0:
34$ mcr 'exe_dir'openssl no-rsa
35$ save_severity=$SEVERITY
36$ set on
37$ if save_severity
38$ then
39$ req_new="-newkey dsa:[-.apps]dsa512.pem"
40$ else
41$ req_new="-new"
42$ endif
43$
44$ 'reqcmd' -config 'CAconf' -out 'CAreq' -keyout 'CAkey' 'req_new' ! -out err.ss
45$ if $severity .ne. 1
46$ then
47$ write sys$output "error using 'req' to generate a certificate request"
48$ exit 3
49$ endif
50$ write sys$output ""
51$ write sys$output "convert the certificate request into a self signed certificate using 'x509'"
52$ define /user sys$output err.ss
53$ 'x509cmd' "-CAcreateserial" -in 'CAreq' -days 30 -req -out 'CAcert' -signkey 'CAkey'
54$ if $severity .ne. 1
55$ then
56$ write sys$output "error using 'x509' to self sign a certificate request"
57$ exit 3
58$ endif
59$
60$ write sys$output ""
61$ write sys$output "convert a certificate into a certificate request using 'x509'"
62$ define /user sys$output err.ss
63$ 'x509cmd' -in 'CAcert' -x509toreq -signkey 'CAkey' -out 'CAreq2'
64$ if $severity .ne. 1
65$ then
66$ write sys$output "error using 'x509' convert a certificate to a certificate request"
67$ exit 3
68$ endif
69$
70$ 'reqcmd' -config 'dummycnf' -verify -in 'CAreq' -noout
71$ if $severity .ne. 1
72$ then
73$ write sys$output "first generated request is invalid"
74$ exit 3
75$ endif
76$
77$ 'reqcmd' -config 'dummycnf' -verify -in 'CAreq2' -noout
78$ if $severity .ne. 1
79$ then
80$ write sys$output "second generated request is invalid"
81$ exit 3
82$ endif
83$
84$ 'verifycmd' "-CAfile" 'CAcert' 'CAcert'
85$ if $severity .ne. 1
86$ then
87$ write sys$output "first generated cert is invalid"
88$ exit 3
89$ endif
90$
91$ write sys$output ""
92$ write sys$output "make another certificate request using 'req'"
93$ define /user sys$output err.ss
94$ 'reqcmd' -config 'Uconf' -out 'Ureq' -keyout 'Ukey' 'req_new'
95$ if $severity .ne. 1
96$ then
97$ write sys$output "error using 'req' to generate a certificate request"
98$ exit 3
99$ endif
100$
101$ write sys$output ""
102$ write sys$output "sign certificate request with the just created CA via 'x509'"
103$ define /user sys$output err.ss
104$ 'x509cmd' "-CAcreateserial" -in 'Ureq' -days 30 -req -out 'Ucert' "-CA" 'CAcert' "-CAkey" 'CAkey'
105$ if $severity .ne. 1
106$ then
107$ write sys$output "error using 'x509' to sign a certificate request"
108$ exit 3
109$ endif
110$
111$ 'verifycmd' "-CAfile" 'CAcert' 'Ucert'
112$ write sys$output ""
113$ write sys$output "Certificate details"
114$ 'x509cmd' -subject -issuer -startdate -enddate -noout -in 'Ucert'
115$
116$ write sys$output ""
117$ write sys$output "The generated CA certificate is ",CAcert
118$ write sys$output "The generated CA private key is ",CAkey
119$
120$ write sys$output "The generated user certificate is ",Ucert
121$ write sys$output "The generated user private key is ",Ukey
122$
123$ if f$search("err.ss;*") .nes. "" then delete err.ss;*
diff --git a/src/lib/libssl/src/test/testssl b/src/lib/libssl/src/test/testssl
index 5ae4dc8720..4e8542b556 100644
--- a/src/lib/libssl/src/test/testssl
+++ b/src/lib/libssl/src/test/testssl
@@ -119,6 +119,23 @@ $ssltest -bio_pair -server_auth -client_auth $CA $extra || exit 1
119echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify 119echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify
120$ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1 120$ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1
121 121
122echo "Testing ciphersuites"
123for protocol in TLSv1.2 SSLv3; do
124 echo "Testing ciphersuites for $protocol"
125 for cipher in `../util/shlib_wrap.sh ../apps/openssl ciphers "RSA+$protocol" | tr ':' ' '`; do
126 echo "Testing $cipher"
127 prot=""
128 if [ $protocol = "SSLv3" ] ; then
129 prot="-ssl3"
130 fi
131 $ssltest -cipher $cipher $prot
132 if [ $? -ne 0 ] ; then
133 echo "Failed $cipher"
134 exit 1
135 fi
136 done
137done
138
122############################################################################# 139#############################################################################
123 140
124if ../util/shlib_wrap.sh ../apps/openssl no-dh; then 141if ../util/shlib_wrap.sh ../apps/openssl no-dh; then
diff --git a/src/lib/libssl/src/test/testssl.com b/src/lib/libssl/src/test/testssl.com
deleted file mode 100644
index f19edc4719..0000000000
--- a/src/lib/libssl/src/test/testssl.com
+++ /dev/null
@@ -1,208 +0,0 @@
1$! TESTSSL.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p4 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ texe_dir = "sys$disk:[-.''__arch'.exe.test]"
11$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
12$
13$ if p1 .eqs. ""
14$ then
15$ key="[-.apps]server.pem"
16$ else
17$ key=p1
18$ endif
19$ if p2 .eqs. ""
20$ then
21$ cert="[-.apps]server.pem"
22$ else
23$ cert=p2
24$ endif
25$ ssltest = "mcr ''texe_dir'ssltest -key ''key'"+ -
26 " -cert ''cert' -c_key ''key' -c_cert ''cert'"
27$!
28$ set noon
29$ define/user sys$output testssl-x509-output.
30$ define/user sys$error nla0:
31$ mcr 'exe_dir'openssl x509 -in 'cert' -text -noout
32$ define/user sys$error nla0:
33$ search/output=nla0: testssl-x509-output. "DSA Public Key"/exact
34$ if $severity .eq. 1
35$ then
36$ dsa_cert = "YES"
37$ else
38$ dsa_cert = "NO"
39$ endif
40$ delete testssl-x509-output.;*
41$
42$ if p3 .eqs. ""
43$ then
44$ copy/concatenate [-.certs]*.pem certs.tmp
45$ CA = """-CAfile"" certs.tmp"
46$ else
47$ CA = """-CAfile"" "+p3
48$ endif
49$
50$!###########################################################################
51$
52$ write sys$output "test sslv2"
53$ 'ssltest' -ssl2
54$ if $severity .ne. 1 then goto exit3
55$
56$ write sys$output "test sslv2 with server authentication"
57$ 'ssltest' -ssl2 -server_auth 'CA'
58$ if $severity .ne. 1 then goto exit3
59$
60$ if .not. dsa_cert
61$ then
62$ write sys$output "test sslv2 with client authentication"
63$ 'ssltest' -ssl2 -client_auth 'CA'
64$ if $severity .ne. 1 then goto exit3
65$
66$ write sys$output "test sslv2 with both client and server authentication"
67$ 'ssltest' -ssl2 -server_auth -client_auth 'CA'
68$ if $severity .ne. 1 then goto exit3
69$ endif
70$
71$ write sys$output "test sslv3"
72$ 'ssltest' -ssl3
73$ if $severity .ne. 1 then goto exit3
74$
75$ write sys$output "test sslv3 with server authentication"
76$ 'ssltest' -ssl3 -server_auth 'CA'
77$ if $severity .ne. 1 then goto exit3
78$
79$ write sys$output "test sslv3 with client authentication"
80$ 'ssltest' -ssl3 -client_auth 'CA'
81$ if $severity .ne. 1 then goto exit3
82$
83$ write sys$output "test sslv3 with both client and server authentication"
84$ 'ssltest' -ssl3 -server_auth -client_auth 'CA'
85$ if $severity .ne. 1 then goto exit3
86$
87$ write sys$output "test sslv2/sslv3"
88$ 'ssltest'
89$ if $severity .ne. 1 then goto exit3
90$
91$ write sys$output "test sslv2/sslv3 with server authentication"
92$ 'ssltest' -server_auth 'CA'
93$ if $severity .ne. 1 then goto exit3
94$
95$ write sys$output "test sslv2/sslv3 with client authentication"
96$ 'ssltest' -client_auth 'CA'
97$ if $severity .ne. 1 then goto exit3
98$
99$ write sys$output "test sslv2/sslv3 with both client and server authentication"
100$ 'ssltest' -server_auth -client_auth 'CA'
101$ if $severity .ne. 1 then goto exit3
102$
103$ write sys$output "test sslv2 via BIO pair"
104$ 'ssltest' -bio_pair -ssl2
105$ if $severity .ne. 1 then goto exit3
106$
107$ write sys$output "test sslv2 with server authentication via BIO pair"
108$ 'ssltest' -bio_pair -ssl2 -server_auth 'CA'
109$ if $severity .ne. 1 then goto exit3
110$
111$ if .not. dsa_cert
112$ then
113$ write sys$output "test sslv2 with client authentication via BIO pair"
114$ 'ssltest' -bio_pair -ssl2 -client_auth 'CA'
115$ if $severity .ne. 1 then goto exit3
116$
117$ write sys$output "test sslv2 with both client and server authentication via BIO pair"
118$ 'ssltest' -bio_pair -ssl2 -server_auth -client_auth 'CA'
119$ if $severity .ne. 1 then goto exit3
120$ endif
121$
122$ write sys$output "test sslv3 via BIO pair"
123$ 'ssltest' -bio_pair -ssl3
124$ if $severity .ne. 1 then goto exit3
125$
126$ write sys$output "test sslv3 with server authentication via BIO pair"
127$ 'ssltest' -bio_pair -ssl3 -server_auth 'CA'
128$ if $severity .ne. 1 then goto exit3
129$
130$ write sys$output "test sslv3 with client authentication via BIO pair"
131$ 'ssltest' -bio_pair -ssl3 -client_auth 'CA'
132$ if $severity .ne. 1 then goto exit3
133
134$ write sys$output "test sslv3 with both client and server authentication via BIO pair"
135$ 'ssltest' -bio_pair -ssl3 -server_auth -client_auth 'CA'
136$ if $severity .ne. 1 then goto exit3
137$
138$ write sys$output "test sslv2/sslv3 via BIO pair"
139$ 'ssltest'
140$ if $severity .ne. 1 then goto exit3
141$
142$ if .not. dsa_cert
143$ then
144$ write sys$output "test sslv2/sslv3 w/o DHE via BIO pair"
145$ 'ssltest' -bio_pair -no_dhe
146$ if $severity .ne. 1 then goto exit3
147$ endif
148$
149$ write sys$output "test sslv2/sslv3 with 1024 bit DHE via BIO pair"
150$ 'ssltest' -bio_pair -dhe1024dsa -v
151$ if $severity .ne. 1 then goto exit3
152$
153$ write sys$output "test sslv2/sslv3 with server authentication"
154$ 'ssltest' -bio_pair -server_auth 'CA'
155$ if $severity .ne. 1 then goto exit3
156$
157$ write sys$output "test sslv2/sslv3 with client authentication via BIO pair"
158$ 'ssltest' -bio_pair -client_auth 'CA'
159$ if $severity .ne. 1 then goto exit3
160$
161$ write sys$output "test sslv2/sslv3 with both client and server authentication via BIO pair"
162$ 'ssltest' -bio_pair -server_auth -client_auth 'CA'
163$ if $severity .ne. 1 then goto exit3
164$
165$!###########################################################################
166$
167$ define/user sys$output nla0:
168$ mcr 'exe_dir'openssl no-rsa
169$ no_rsa=$SEVERITY
170$ define/user sys$output nla0:
171$ mcr 'exe_dir'openssl no-dh
172$ no_dh=$SEVERITY
173$
174$ if no_dh
175$ then
176$ write sys$output "skipping anonymous DH tests"
177$ else
178$ write sys$output "test tls1 with 1024bit anonymous DH, multiple handshakes"
179$ 'ssltest' -v -bio_pair -tls1 -cipher "ADH" -dhe1024dsa -num 10 -f -time
180$ if $severity .ne. 1 then goto exit3
181$ endif
182$
183$ if no_rsa
184$ then
185$ write sys$output "skipping RSA tests"
186$ else
187$ write sys$output "test tls1 with 1024bit RSA, no DHE, multiple handshakes"
188$ mcr 'texe_dir'ssltest -v -bio_pair -tls1 -cert [-.apps]server2.pem -no_dhe -num 10 -f -time
189$ if $severity .ne. 1 then goto exit3
190$
191$ if no_dh
192$ then
193$ write sys$output "skipping RSA+DHE tests"
194$ else
195$ write sys$output "test tls1 with 1024bit RSA, 1024bit DHE, multiple handshakes"
196$ mcr 'texe_dir'ssltest -v -bio_pair -tls1 -cert [-.apps]server2.pem -dhe1024dsa -num 10 -f -time
197$ if $severity .ne. 1 then goto exit3
198$ endif
199$ endif
200$
201$ RET = 1
202$ goto exit
203$ exit3:
204$ RET = 3
205$ exit:
206$ if p3 .eqs. "" then delete certs.tmp;*
207$ set on
208$ exit 'RET'
diff --git a/src/lib/libssl/src/test/testtsa.com b/src/lib/libssl/src/test/testtsa.com
deleted file mode 100644
index 29fb1d0e63..0000000000
--- a/src/lib/libssl/src/test/testtsa.com
+++ /dev/null
@@ -1,255 +0,0 @@
1$!
2$! A few very basic tests for the 'ts' time stamping authority command.
3$!
4$
5$ __arch = "VAX"
6$ if f$getsyi("cpu") .ge. 128 then -
7 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
8$ if __arch .eqs. "" then __arch = "UNK"
9$!
10$ if (p4 .eqs. "64") then __arch = __arch+ "_64"
11$!
12$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
13$
14$ openssl = "mcr ''f$parse(exe_dir+"openssl.exe")'"
15$ OPENSSL_CONF = "[-]CAtsa.cnf"
16$ ! Because that's what ../apps/CA.sh really looks at
17$ SSLEAY_CONFIG = "-config " + OPENSSL_CONF
18$
19$ error:
20$ subroutine
21$ write sys$error "TSA test failed!"
22$ exit 3
23$ endsubroutine
24$
25$ setup_dir:
26$ subroutine
27$
28$ if f$search("tsa.dir") .nes ""
29$ then
30$ @[-.util]deltree [.tsa]*.*
31$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) tsa.dir;*
32$ delete tsa.dir;*
33$ endif
34$
35$ create/dir [.tsa]
36$ set default [.tsa]
37$ endsubroutine
38$
39$ clean_up_dir:
40$ subroutine
41$
42$ set default [-]
43$ @[-.util]deltree [.tsa]*.*
44$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) tsa.dir;*
45$ delete tsa.dir;*
46$ endsubroutine
47$
48$ create_ca:
49$ subroutine
50$
51$ write sys$output "Creating a new CA for the TSA tests..."
52$ TSDNSECT = "ts_ca_dn"
53$ openssl req -new -x509 -nodes -
54 -out tsaca.pem -keyout tsacakey.pem
55$ if $severity .ne. 1 then call error
56$ endsubroutine
57$
58$ create_tsa_cert:
59$ subroutine
60$
61$ INDEX=p1
62$ EXT=p2
63$ TSDNSECT = "ts_cert_dn"
64$
65$ openssl req -new -
66 -out tsa_req'INDEX'.pem -keyout tsa_key'INDEX'.pem
67$ if $severity .ne. 1 then call error
68$
69$ write sys$output "Using extension ''EXT'"
70$ openssl x509 -req -
71 -in tsa_req'INDEX'.pem -out tsa_cert'INDEX'.pem -
72 "-CA" tsaca.pem "-CAkey" tsacakey.pem "-CAcreateserial" -
73 -extfile 'OPENSSL_CONF' -extensions "''EXT'"
74$ if $severity .ne. 1 then call error
75$ endsubroutine
76$
77$ print_request:
78$ subroutine
79$
80$ openssl ts -query -in 'p1' -text
81$ endsubroutine
82$
83$ create_time_stamp_request1: subroutine
84$
85$ openssl ts -query -data [-]testtsa.com -policy tsa_policy1 -
86 -cert -out req1.tsq
87$ if $severity .ne. 1 then call error
88$ endsubroutine
89$
90$ create_time_stamp_request2: subroutine
91$
92$ openssl ts -query -data [-]testtsa.com -policy tsa_policy2 -
93 -no_nonce -out req2.tsq
94$ if $severity .ne. 1 then call error
95$ endsubroutine
96$
97$ create_time_stamp_request3: subroutine
98$
99$ openssl ts -query -data [-]CAtsa.cnf -no_nonce -out req3.tsq
100$ if $severity .ne. 1 then call error
101$ endsubroutine
102$
103$ print_response:
104$ subroutine
105$
106$ openssl ts -reply -in 'p1' -text
107$ if $severity .ne. 1 then call error
108$ endsubroutine
109$
110$ create_time_stamp_response:
111$ subroutine
112$
113$ openssl ts -reply -section 'p3' -queryfile 'p1' -out 'p2'
114$ if $severity .ne. 1 then call error
115$ endsubroutine
116$
117$ time_stamp_response_token_test:
118$ subroutine
119$
120$ RESPONSE2 = p2+ "-copy_tsr"
121$ TOKEN_DER = p2+ "-token_der"
122$ openssl ts -reply -in 'p2' -out 'TOKEN_DER' -token_out
123$ if $severity .ne. 1 then call error
124$ openssl ts -reply -in 'TOKEN_DER' -token_in -out 'RESPONSE2'
125$ if $severity .ne. 1 then call error
126$ backup/compare 'RESPONSE2' 'p2'
127$ if $severity .ne. 1 then call error
128$ openssl ts -reply -in 'p2' -text -token_out
129$ if $severity .ne. 1 then call error
130$ openssl ts -reply -in 'TOKEN_DER' -token_in -text -token_out
131$ if $severity .ne. 1 then call error
132$ openssl ts -reply -queryfile 'p1' -text -token_out
133$ if $severity .ne. 1 then call error
134$ endsubroutine
135$
136$ verify_time_stamp_response:
137$ subroutine
138$
139$ openssl ts -verify -queryfile 'p1' -in 'p2' -
140 "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
141$ if $severity .ne. 1 then call error
142$ openssl ts -verify -data 'p3' -in 'p2' -
143 "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
144$ if $severity .ne. 1 then call error
145$ endsubroutine
146$
147$ verify_time_stamp_token:
148$ subroutine
149$
150$ ! create the token from the response first
151$ openssl ts -reply -in "''p2'" -out "''p2'-token" -token_out
152$ if $severity .ne. 1 then call error
153$ openssl ts -verify -queryfile "''p1'" -in "''p2'-token" -
154 -token_in "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
155$ if $severity .ne. 1 then call error
156$ openssl ts -verify -data "''p3'" -in "''p2'-token" -
157 -token_in "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
158$ if $severity .ne. 1 then call error
159$ endsubroutine
160$
161$ verify_time_stamp_response_fail:
162$ subroutine
163$
164$ openssl ts -verify -queryfile 'p1' -in 'p2' -
165 "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
166$ ! Checks if the verification failed, as it should have.
167$ if $severity .eq. 1 then call error
168$ write sys$output "Ok"
169$ endsubroutine
170$
171$ ! Main body ----------------------------------------------------------
172$
173$ set noon
174$
175$ write sys$output "Setting up TSA test directory..."
176$ call setup_dir
177$
178$ write sys$output "Creating CA for TSA tests..."
179$ call create_ca
180$
181$ write sys$output "Creating tsa_cert1.pem TSA server cert..."
182$ call create_tsa_cert 1 "tsa_cert"
183$
184$ write sys$output "Creating tsa_cert2.pem non-TSA server cert..."
185$ call create_tsa_cert 2 "non_tsa_cert"
186$
187$ write sys$output "Creating req1.req time stamp request for file testtsa..."
188$ call create_time_stamp_request1
189$
190$ write sys$output "Printing req1.req..."
191$ call print_request "req1.tsq"
192$
193$ write sys$output "Generating valid response for req1.req..."
194$ call create_time_stamp_response "req1.tsq" "resp1.tsr" "tsa_config1"
195$
196$ write sys$output "Printing response..."
197$ call print_response "resp1.tsr"
198$
199$ write sys$output "Verifying valid response..."
200$ call verify_time_stamp_response "req1.tsq" "resp1.tsr" "[-]testtsa.com"
201$
202$ write sys$output "Verifying valid token..."
203$ call verify_time_stamp_token "req1.tsq" "resp1.tsr" "[-]testtsa.com"
204$
205$ ! The tests below are commented out, because invalid signer certificates
206$ ! can no longer be specified in the config file.
207$
208$ ! write sys$output "Generating _invalid_ response for req1.req..."
209$ ! call create_time_stamp_response "req1.tsq" "resp1_bad.tsr" "tsa_config2"
210$
211$ ! write sys$output "Printing response..."
212$ ! call print_response "resp1_bad.tsr"
213$
214$ ! write sys$output "Verifying invalid response, it should fail..."
215$ ! call verify_time_stamp_response_fail "req1.tsq" "resp1_bad.tsr"
216$
217$ write sys$output "Creating req2.req time stamp request for file testtsa..."
218$ call create_time_stamp_request2
219$
220$ write sys$output "Printing req2.req..."
221$ call print_request "req2.tsq"
222$
223$ write sys$output "Generating valid response for req2.req..."
224$ call create_time_stamp_response "req2.tsq" "resp2.tsr" "tsa_config1"
225$
226$ write sys$output "Checking '-token_in' and '-token_out' options with '-reply'..."
227$ call time_stamp_response_token_test "req2.tsq" "resp2.tsr"
228$
229$ write sys$output "Printing response..."
230$ call print_response "resp2.tsr"
231$
232$ write sys$output "Verifying valid response..."
233$ call verify_time_stamp_response "req2.tsq" "resp2.tsr" "[-]testtsa.com"
234$
235$ write sys$output "Verifying response against wrong request, it should fail..."
236$ call verify_time_stamp_response_fail "req1.tsq" "resp2.tsr"
237$
238$ write sys$output "Verifying response against wrong request, it should fail..."
239$ call verify_time_stamp_response_fail "req2.tsq" "resp1.tsr"
240$
241$ write sys$output "Creating req3.req time stamp request for file CAtsa.cnf..."
242$ call create_time_stamp_request3
243$
244$ write sys$output "Printing req3.req..."
245$ call print_request "req3.tsq"
246$
247$ write sys$output "Verifying response against wrong request, it should fail..."
248$ call verify_time_stamp_response_fail "req3.tsq" "resp1.tsr"
249$
250$ write sys$output "Cleaning up..."
251$ call clean_up_dir
252$
253$ set on
254$
255$ exit
diff --git a/src/lib/libssl/src/test/tpkcs7.com b/src/lib/libssl/src/test/tpkcs7.com
deleted file mode 100644
index 3fc4982bb0..0000000000
--- a/src/lib/libssl/src/test/tpkcs7.com
+++ /dev/null
@@ -1,59 +0,0 @@
1$! TPKCS7.COM -- Tests pkcs7 keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl pkcs7"
13$
14$ t = "testp7.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing PKCS7 conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$ write sys$output "p -> p"
29$ 'cmd' -in fff.p -inform p -outform p -out f.p
30$ if $severity .ne. 1 then exit 3
31$
32$ write sys$output "d -> d"
33$ 'cmd' -in f.d -inform d -outform d -out ff.d1
34$ if $severity .ne. 1 then exit 3
35$ write sys$output "p -> d"
36$ 'cmd' -in f.p -inform p -outform d -out ff.d3
37$ if $severity .ne. 1 then exit 3
38$
39$
40$ write sys$output "d -> p"
41$ 'cmd' -in f.d -inform d -outform p -out ff.p1
42$ if $severity .ne. 1 then exit 3
43$ write sys$output "p -> p"
44$ 'cmd' -in f.p -inform p -outform p -out ff.p3
45$ if $severity .ne. 1 then exit 3
46$
47$ backup/compare fff.p f.p
48$ if $severity .ne. 1 then exit 3
49$ backup/compare fff.p ff.p1
50$ if $severity .ne. 1 then exit 3
51$ backup/compare fff.p ff.p3
52$ if $severity .ne. 1 then exit 3
53$
54$ backup/compare f.p ff.p1
55$ if $severity .ne. 1 then exit 3
56$ backup/compare f.p ff.p3
57$ if $severity .ne. 1 then exit 3
58$
59$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/test/tpkcs7d.com b/src/lib/libssl/src/test/tpkcs7d.com
deleted file mode 100644
index eea8c888ee..0000000000
--- a/src/lib/libssl/src/test/tpkcs7d.com
+++ /dev/null
@@ -1,52 +0,0 @@
1$! TPKCS7.COM -- Tests pkcs7 keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl pkcs7"
13$
14$ t = "pkcs7-1.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing PKCS7 conversions (2)"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$ write sys$output "p -> p"
29$ 'cmd' -in fff.p -inform p -outform p -out f.p
30$ if $severity .ne. 1 then exit 3
31$
32$ write sys$output "d -> d"
33$ 'cmd' -in f.d -inform d -outform d -out ff.d1
34$ if $severity .ne. 1 then exit 3
35$ write sys$output "p -> d"
36$ 'cmd' -in f.p -inform p -outform d -out ff.d3
37$ if $severity .ne. 1 then exit 3
38$
39$
40$ write sys$output "d -> p"
41$ 'cmd' -in f.d -inform d -outform p -out ff.p1
42$ if $severity .ne. 1 then exit 3
43$ write sys$output "p -> p"
44$ 'cmd' -in f.p -inform p -outform p -out ff.p3
45$ if $severity .ne. 1 then exit 3
46$
47$ backup/compare f.p ff.p1
48$ if $severity .ne. 1 then exit 3
49$ backup/compare f.p ff.p3
50$ if $severity .ne. 1 then exit 3
51$
52$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/test/treq.com b/src/lib/libssl/src/test/treq.com
deleted file mode 100644
index acf08b79ef..0000000000
--- a/src/lib/libssl/src/test/treq.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TREQ.COM -- Tests req keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl req -config [-.apps]openssl-vms.cnf"
13$
14$ t = "testreq.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing req conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$! write sys$output "p -> t"
29$! 'cmd' -in fff.p -inform p -outform t -out f.t
30$! if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -verify -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$! write sys$output "t -> d"
39$! 'cmd' -verify -in f.t -inform t -outform d -out ff.d2
40$! if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -verify -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$! write sys$output "d -> t"
46$! 'cmd' -in f.d -inform d -outform t -out ff.t1
47$! if $severity .ne. 1 then exit 3
48$! write sys$output "t -> t"
49$! 'cmd' -in f.t -inform t -outform t -out ff.t2
50$! if $severity .ne. 1 then exit 3
51$! write sys$output "p -> t"
52$! 'cmd' -in f.p -inform p -outform t -out ff.t3
53$! if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$! write sys$output "t -> p"
59$! 'cmd' -in f.t -inform t -outform p -out ff.p2
60$! if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$! backup/compare fff.p ff.p2
70$! if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$! backup/compare f.t ff.t1
75$! if $severity .ne. 1 then exit 3
76$! backup/compare f.t ff.t2
77$! if $severity .ne. 1 then exit 3
78$! backup/compare f.t ff.t3
79$! if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$! backup/compare f.p ff.p2
84$! if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/test/trsa.com b/src/lib/libssl/src/test/trsa.com
deleted file mode 100644
index 54180843ee..0000000000
--- a/src/lib/libssl/src/test/trsa.com
+++ /dev/null
@@ -1,99 +0,0 @@
1$! TRSA.COM -- Tests rsa keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ set noon
13$ define/user sys$output nla0:
14$ mcr 'exe_dir'openssl no-rsa
15$ save_severity=$SEVERITY
16$ set on
17$ if save_severity
18$ then
19$ write sys$output "skipping RSA conversion test"
20$ exit
21$ endif
22$
23$ cmd = "mcr ''exe_dir'openssl rsa"
24$
25$ t = "testrsa.pem"
26$ if p1 .nes. "" then t = p1
27$
28$ write sys$output "testing RSA conversions"
29$ if f$search("fff.*") .nes "" then delete fff.*;*
30$ if f$search("ff.*") .nes "" then delete ff.*;*
31$ if f$search("f.*") .nes "" then delete f.*;*
32$ convert/fdl=sys$input: 't' fff.p
33RECORD
34 FORMAT STREAM_LF
35$
36$ write sys$output "p -> d"
37$ 'cmd' -in fff.p -inform p -outform d -out f.d
38$ if $severity .ne. 1 then exit 3
39$! write sys$output "p -> t"
40$! 'cmd' -in fff.p -inform p -outform t -out f.t
41$! if $severity .ne. 1 then exit 3
42$ write sys$output "p -> p"
43$ 'cmd' -in fff.p -inform p -outform p -out f.p
44$ if $severity .ne. 1 then exit 3
45$
46$ write sys$output "d -> d"
47$ 'cmd' -in f.d -inform d -outform d -out ff.d1
48$ if $severity .ne. 1 then exit 3
49$! write sys$output "t -> d"
50$! 'cmd' -in f.t -inform t -outform d -out ff.d2
51$! if $severity .ne. 1 then exit 3
52$ write sys$output "p -> d"
53$ 'cmd' -in f.p -inform p -outform d -out ff.d3
54$ if $severity .ne. 1 then exit 3
55$
56$! write sys$output "d -> t"
57$! 'cmd' -in f.d -inform d -outform t -out ff.t1
58$! if $severity .ne. 1 then exit 3
59$! write sys$output "t -> t"
60$! 'cmd' -in f.t -inform t -outform t -out ff.t2
61$! if $severity .ne. 1 then exit 3
62$! write sys$output "p -> t"
63$! 'cmd' -in f.p -inform p -outform t -out ff.t3
64$! if $severity .ne. 1 then exit 3
65$
66$ write sys$output "d -> p"
67$ 'cmd' -in f.d -inform d -outform p -out ff.p1
68$ if $severity .ne. 1 then exit 3
69$! write sys$output "t -> p"
70$! 'cmd' -in f.t -inform t -outform p -out ff.p2
71$! if $severity .ne. 1 then exit 3
72$ write sys$output "p -> p"
73$ 'cmd' -in f.p -inform p -outform p -out ff.p3
74$ if $severity .ne. 1 then exit 3
75$
76$ backup/compare fff.p f.p
77$ if $severity .ne. 1 then exit 3
78$ backup/compare fff.p ff.p1
79$ if $severity .ne. 1 then exit 3
80$! backup/compare fff.p ff.p2
81$! if $severity .ne. 1 then exit 3
82$ backup/compare fff.p ff.p3
83$ if $severity .ne. 1 then exit 3
84$
85$! backup/compare f.t ff.t1
86$! if $severity .ne. 1 then exit 3
87$! backup/compare f.t ff.t2
88$! if $severity .ne. 1 then exit 3
89$! backup/compare f.t ff.t3
90$! if $severity .ne. 1 then exit 3
91$
92$ backup/compare f.p ff.p1
93$ if $severity .ne. 1 then exit 3
94$! backup/compare f.p ff.p2
95$! if $severity .ne. 1 then exit 3
96$ backup/compare f.p ff.p3
97$ if $severity .ne. 1 then exit 3
98$
99$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/test/tsid.com b/src/lib/libssl/src/test/tsid.com
deleted file mode 100644
index b6c4e49473..0000000000
--- a/src/lib/libssl/src/test/tsid.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TSID.COM -- Tests sid keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl sess_id"
13$
14$ t = "testsid.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing session-id conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$! write sys$output "p -> t"
29$! 'cmd' -in fff.p -inform p -outform t -out f.t
30$! if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$! write sys$output "t -> d"
39$! 'cmd' -in f.t -inform t -outform d -out ff.d2
40$! if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$! write sys$output "d -> t"
46$! 'cmd' -in f.d -inform d -outform t -out ff.t1
47$! if $severity .ne. 1 then exit 3
48$! write sys$output "t -> t"
49$! 'cmd' -in f.t -inform t -outform t -out ff.t2
50$! if $severity .ne. 1 then exit 3
51$! write sys$output "p -> t"
52$! 'cmd' -in f.p -inform p -outform t -out ff.t3
53$! if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$! write sys$output "t -> p"
59$! 'cmd' -in f.t -inform t -outform p -out ff.p2
60$! if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$! backup/compare fff.p ff.p2
70$! if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$! backup/compare f.t ff.t1
75$! if $severity .ne. 1 then exit 3
76$! backup/compare f.t ff.t2
77$! if $severity .ne. 1 then exit 3
78$! backup/compare f.t ff.t3
79$! if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$! backup/compare f.p ff.p2
84$! if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/test/tverify.com b/src/lib/libssl/src/test/tverify.com
deleted file mode 100644
index d888344637..0000000000
--- a/src/lib/libssl/src/test/tverify.com
+++ /dev/null
@@ -1,65 +0,0 @@
1$! TVERIFY.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ line_max = 255 ! Could be longer on modern non-VAX.
11$ temp_file_name = "certs_"+ f$getjpi( "", "PID")+ ".tmp"
12$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
13$ cmd = "mcr ''exe_dir'openssl verify ""-CAfile"" ''temp_file_name'"
14$ cmd_len = f$length( cmd)
15$ pems = "[-.certs...]*.pem"
16$!
17$! Concatenate all the certificate files.
18$!
19$ copy /concatenate 'pems' 'temp_file_name'
20$!
21$! Loop through all the certificate files.
22$!
23$ args = ""
24$ old_f = ""
25$ loop_file:
26$ f = f$search( pems)
27$ if ((f .nes. "") .and. (f .nes. old_f))
28$ then
29$ old_f = f
30$!
31$! If this file name would over-extend the command line, then
32$! run the command now.
33$!
34$ if (cmd_len+ f$length( args)+ 1+ f$length( f) .gt. line_max)
35$ then
36$ if (args .eqs. "") then goto disaster
37$ 'cmd''args'
38$ args = ""
39$ endif
40$! Add the next file to the argument list.
41$ args = args+ " "+ f
42$ else
43$! No more files in the list
44$ goto loop_file_end
45$ endif
46$ goto loop_file
47$ loop_file_end:
48$!
49$! Run the command for any left-over arguments.
50$!
51$ if (args .nes. "")
52$ then
53$ 'cmd''args'
54$ endif
55$!
56$! Delete the temporary file.
57$!
58$ if (f$search( "''temp_file_name';*") .nes. "") then -
59 delete 'temp_file_name';*
60$!
61$ exit
62$!
63$ disaster:
64$ write sys$output " Command line too long. Doomed."
65$!
diff --git a/src/lib/libssl/src/test/tx509.com b/src/lib/libssl/src/test/tx509.com
deleted file mode 100644
index 93ce988b41..0000000000
--- a/src/lib/libssl/src/test/tx509.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TX509.COM -- Tests x509 certificates
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl x509"
13$
14$ t = "testx509.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing X509 conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$ write sys$output "p -> n"
29$ 'cmd' -in fff.p -inform p -outform n -out f.n
30$ if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$ write sys$output "n -> d"
39$ 'cmd' -in f.n -inform n -outform d -out ff.d2
40$ if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$ write sys$output "d -> n"
46$ 'cmd' -in f.d -inform d -outform n -out ff.n1
47$ if $severity .ne. 1 then exit 3
48$ write sys$output "n -> n"
49$ 'cmd' -in f.n -inform n -outform n -out ff.n2
50$ if $severity .ne. 1 then exit 3
51$ write sys$output "p -> n"
52$ 'cmd' -in f.p -inform p -outform n -out ff.n3
53$ if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$ write sys$output "n -> p"
59$ 'cmd' -in f.n -inform n -outform p -out ff.p2
60$ if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$ backup/compare fff.p ff.p2
70$ if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$ backup/compare f.n ff.n1
75$ if $severity .ne. 1 then exit 3
76$ backup/compare f.n ff.n2
77$ if $severity .ne. 1 then exit 3
78$ backup/compare f.n ff.n3
79$ if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$ backup/compare f.p ff.p2
84$ if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/src/util/deltree.com b/src/lib/libssl/src/util/deltree.com
deleted file mode 100644
index 9f36b1a5e9..0000000000
--- a/src/lib/libssl/src/util/deltree.com
+++ /dev/null
@@ -1,34 +0,0 @@
1$! DELTREE.COM
2$
3$ call deltree 'p1'
4$ exit $status
5$
6$ deltree: subroutine ! P1 is a name of a directory
7$ on control_y then goto dt_STOP
8$ on warning then goto dt_exit
9$ _dt_def = f$trnlnm("SYS$DISK")+f$directory()
10$ if f$parse(p1) .eqs. "" then exit
11$ set default 'f$parse(p1,,,"DEVICE")''f$parse(p1,,,"DIRECTORY")'
12$ p1 = f$parse(p1,,,"NAME") + f$parse(p1,,,"TYPE")
13$ _fp = f$parse(".DIR",p1)
14$ dt_loop:
15$ _f = f$search(_fp)
16$ if _f .eqs. "" then goto dt_loopend
17$ call deltree [.'f$parse(_f,,,"NAME")']*.*
18$ goto dt_loop
19$ dt_loopend:
20$ _fp = f$parse(p1,".;*")
21$ if f$search(_fp) .eqs. "" then goto dt_exit
22$ set noon
23$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) '_fp'
24$ set on
25$ delete/nolog '_fp'
26$ dt_exit:
27$ set default '_dt_def'
28$ goto dt_end
29$ dt_STOP:
30$ set default '_dt_def'
31$ stop/id=""
32$ exit
33$ dt_end:
34$ endsubroutine
diff --git a/src/lib/libssl/src/util/libeay.num b/src/lib/libssl/src/util/libeay.num
index 93f80ba0c6..aa86b2b8b1 100644
--- a/src/lib/libssl/src/util/libeay.num
+++ b/src/lib/libssl/src/util/libeay.num
@@ -3510,6 +3510,8 @@ BIO_get_callback_arg 3902 EXIST::FUNCTION:
3510BIO_set_callback 3903 EXIST::FUNCTION: 3510BIO_set_callback 3903 EXIST::FUNCTION:
3511d2i_ASIdOrRange 3904 EXIST::FUNCTION:RFC3779 3511d2i_ASIdOrRange 3904 EXIST::FUNCTION:RFC3779
3512i2d_ASIdentifiers 3905 EXIST::FUNCTION:RFC3779 3512i2d_ASIdentifiers 3905 EXIST::FUNCTION:RFC3779
3513CRYPTO_memcmp 3906 EXIST::FUNCTION:
3514BN_consttime_swap 3907 EXIST::FUNCTION:
3513SEED_decrypt 3908 EXIST::FUNCTION:SEED 3515SEED_decrypt 3908 EXIST::FUNCTION:SEED
3514SEED_encrypt 3909 EXIST::FUNCTION:SEED 3516SEED_encrypt 3909 EXIST::FUNCTION:SEED
3515SEED_cbc_encrypt 3910 EXIST::FUNCTION:SEED 3517SEED_cbc_encrypt 3910 EXIST::FUNCTION:SEED
@@ -3687,7 +3689,7 @@ FIPS_dh_new 4073 NOEXIST::FUNCTION:
3687FIPS_corrupt_dsa_keygen 4074 NOEXIST::FUNCTION: 3689FIPS_corrupt_dsa_keygen 4074 NOEXIST::FUNCTION:
3688FIPS_dh_free 4075 NOEXIST::FUNCTION: 3690FIPS_dh_free 4075 NOEXIST::FUNCTION:
3689fips_pkey_signature_test 4076 NOEXIST::FUNCTION: 3691fips_pkey_signature_test 4076 NOEXIST::FUNCTION:
3690EVP_add_alg_module 4077 NOEXIST::FUNCTION: 3692EVP_add_alg_module 4077 EXIST::FUNCTION:
3691int_RAND_init_engine_callbacks 4078 NOEXIST::FUNCTION: 3693int_RAND_init_engine_callbacks 4078 NOEXIST::FUNCTION:
3692int_EVP_CIPHER_set_engine_callbacks 4079 NOEXIST::FUNCTION: 3694int_EVP_CIPHER_set_engine_callbacks 4079 NOEXIST::FUNCTION:
3693int_EVP_MD_init_engine_callbacks 4080 NOEXIST::FUNCTION: 3695int_EVP_MD_init_engine_callbacks 4080 NOEXIST::FUNCTION:
diff --git a/src/lib/libssl/src/util/mk1mf.pl b/src/lib/libssl/src/util/mk1mf.pl
index 458f830401..72fa089f6b 100644
--- a/src/lib/libssl/src/util/mk1mf.pl
+++ b/src/lib/libssl/src/util/mk1mf.pl
@@ -1222,7 +1222,7 @@ sub read_options
1222 } 1222 }
1223 } 1223 }
1224 } 1224 }
1225 elsif (/^([^=]*)=(.*)$/ && !/^-D/){ $VARS{$1}=$2; } 1225 elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; }
1226 elsif (/^-[lL].*$/) { $l_flags.="$_ "; } 1226 elsif (/^-[lL].*$/) { $l_flags.="$_ "; }
1227 elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/) 1227 elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/)
1228 { $c_flags.="$_ "; } 1228 { $c_flags.="$_ "; }
diff --git a/src/lib/libssl/src/util/pl/BC-32.pl b/src/lib/libssl/src/util/pl/BC-32.pl
index 1f1e13fb40..b41bb45e82 100644
--- a/src/lib/libssl/src/util/pl/BC-32.pl
+++ b/src/lib/libssl/src/util/pl/BC-32.pl
@@ -18,7 +18,7 @@ $out_def="out32";
18$tmp_def="tmp32"; 18$tmp_def="tmp32";
19$inc_def="inc32"; 19$inc_def="inc32";
20#enable max error messages, disable most common warnings 20#enable max error messages, disable most common warnings
21$cflags="-DWIN32_LEAN_AND_MEAN -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -c -tWC -tWM -DOPENSSL_SYSNAME_WIN32 -DL_ENDIAN -DDSO_WIN32 -D_stricmp=stricmp -D_strnicmp=strnicmp "; 21$cflags="-DWIN32_LEAN_AND_MEAN -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -c -tWC -tWM -DOPENSSL_SYSNAME_WIN32 -DL_ENDIAN -DDSO_WIN32 -D_stricmp=stricmp -D_strnicmp=strnicmp -D_timeb=timeb -D_ftime=ftime ";
22if ($debug) 22if ($debug)
23{ 23{
24 $cflags.="-Od -y -v -vi- -D_DEBUG"; 24 $cflags.="-Od -y -v -vi- -D_DEBUG";
@@ -38,7 +38,7 @@ $efile="";
38$exep='.exe'; 38$exep='.exe';
39if ($no_sock) 39if ($no_sock)
40 { $ex_libs=""; } 40 { $ex_libs=""; }
41else { $ex_libs="cw32mt.lib import32.lib"; } 41else { $ex_libs="cw32mt.lib import32.lib crypt32.lib ws2_32.lib"; }
42 42
43# static library stuff 43# static library stuff
44$mklib='tlib /P64'; 44$mklib='tlib /P64';
@@ -51,8 +51,8 @@ $lfile='';
51$shlib_ex_obj=""; 51$shlib_ex_obj="";
52$app_ex_obj="c0x32.obj"; 52$app_ex_obj="c0x32.obj";
53 53
54$asm='nasmw -f obj -d__omf__'; 54$asm=(`nasm -v 2>NUL` ge `nasmw -v 2>NUL`?"nasm":"nasmw")." -f obj -d__omf__";
55$asm.=" /Zi" if $debug; 55$asm.=" -g" if $debug;
56$afile='-o'; 56$afile='-o';
57 57
58$bn_mulw_obj=''; 58$bn_mulw_obj='';
diff --git a/src/lib/libssl/src/util/pl/VC-32.pl b/src/lib/libssl/src/util/pl/VC-32.pl
index c503bd52b9..3705fc73b7 100644
--- a/src/lib/libssl/src/util/pl/VC-32.pl
+++ b/src/lib/libssl/src/util/pl/VC-32.pl
@@ -27,6 +27,8 @@ $zlib_lib="zlib1.lib";
27$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g; 27$l_flags =~ s/-L("\[^"]+")/\/libpath:$1/g;
28$l_flags =~ s/-L(\S+)/\/libpath:$1/g; 28$l_flags =~ s/-L(\S+)/\/libpath:$1/g;
29 29
30my $ff = "";
31
30# C compiler stuff 32# C compiler stuff
31$cc='cl'; 33$cc='cl';
32if ($FLAVOR =~ /WIN64/) 34if ($FLAVOR =~ /WIN64/)
@@ -118,7 +120,7 @@ elsif ($FLAVOR =~ /CE/)
118 $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'})); 120 $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'}));
119 $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'})); 121 $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'}));
120 $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics... 122 $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics...
121 $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG'; 123 $dbg_cflags=' /MC /Od -DDEBUG -D_DEBUG';
122 $lflags="/nologo /opt:ref $wcelflag"; 124 $lflags="/nologo /opt:ref $wcelflag";
123 } 125 }
124else # Win32 126else # Win32
@@ -126,6 +128,7 @@ else # Win32
126 $base_cflags= " $mf_cflag"; 128 $base_cflags= " $mf_cflag";
127 my $f = $shlib || $fips ?' /MD':' /MT'; 129 my $f = $shlib || $fips ?' /MD':' /MT';
128 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib 130 $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
131 $ff = "/fixed";
129 $opt_cflags=$f.' /Ox /O2 /Ob2'; 132 $opt_cflags=$f.' /Ox /O2 /Ob2';
130 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; 133 $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
131 $lflags="/nologo /subsystem:console /opt:ref"; 134 $lflags="/nologo /subsystem:console /opt:ref";
@@ -318,7 +321,7 @@ sub do_lib_rule
318 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n"; 321 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
319 $ret.="\tSET FIPS_TARGET=$target\n"; 322 $ret.="\tSET FIPS_TARGET=$target\n";
320 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n"; 323 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
321 $ret.="\t\$(FIPSLINK) \$(MLFLAGS) /map $base_arg $efile$target "; 324 $ret.="\t\$(FIPSLINK) \$(MLFLAGS) $ff /map $base_arg $efile$target ";
322 $ret.="$name @<<\n \$(SHLIB_EX_OBJ) $objs \$(EX_LIBS) "; 325 $ret.="$name @<<\n \$(SHLIB_EX_OBJ) $objs \$(EX_LIBS) ";
323 $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n"; 326 $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n";
324 } 327 }
@@ -355,7 +358,7 @@ sub do_link_rule
355 $ret.="\tSET FIPS_TARGET=$target\n"; 358 $ret.="\tSET FIPS_TARGET=$target\n";
356 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n"; 359 $ret.="\tSET FIPS_SHA1_EXE=\$(FIPS_SHA1_EXE)\n";
357 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n"; 360 $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n";
358 $ret.="\t\$(FIPSLINK) \$(LFLAGS) /map $efile$target @<<\n"; 361 $ret.="\t\$(FIPSLINK) \$(LFLAGS) $ff /map $efile$target @<<\n";
359 $ret.="\t\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n"; 362 $ret.="\t\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n<<\n";
360 } 363 }
361 else 364 else
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h
index 8b0c2a2dac..7219a0e64b 100644
--- a/src/lib/libssl/ssl.h
+++ b/src/lib/libssl/ssl.h
@@ -493,6 +493,9 @@ struct ssl_session_st
493 char *psk_identity_hint; 493 char *psk_identity_hint;
494 char *psk_identity; 494 char *psk_identity;
495#endif 495#endif
496 /* Used to indicate that session resumption is not allowed.
497 * Applications can also set this bit for a new session via
498 * not_resumable_session_cb to disable session caching and tickets. */
496 int not_resumable; 499 int not_resumable;
497 500
498 /* The cert is the certificate used to establish this connection */ 501 /* The cert is the certificate used to establish this connection */
@@ -535,7 +538,7 @@ struct ssl_session_st
535#endif /* OPENSSL_NO_EC */ 538#endif /* OPENSSL_NO_EC */
536 /* RFC4507 info */ 539 /* RFC4507 info */
537 unsigned char *tlsext_tick; /* Session ticket */ 540 unsigned char *tlsext_tick; /* Session ticket */
538 size_t tlsext_ticklen; /* Session ticket length */ 541 size_t tlsext_ticklen; /* Session ticket length */
539 long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ 542 long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */
540#endif 543#endif
541#ifndef OPENSSL_NO_SRP 544#ifndef OPENSSL_NO_SRP
@@ -552,11 +555,14 @@ struct ssl_session_st
552#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L 555#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L
553#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L 556#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L
554#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L 557#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L
555#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L /* no effect since 0.9.7h and 0.9.8b */ 558#define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L
556#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L 559#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L
557#define SSL_OP_TLS_D5_BUG 0x00000100L 560#define SSL_OP_TLS_D5_BUG 0x00000100L
558#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L 561#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L
559 562
563/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */
564#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0
565
560/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added 566/* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added
561 * in OpenSSL 0.9.6d. Usually (depending on the application protocol) 567 * in OpenSSL 0.9.6d. Usually (depending on the application protocol)
562 * the workaround is not needed. Unfortunately some broken SSL/TLS 568 * the workaround is not needed. Unfortunately some broken SSL/TLS
@@ -638,6 +644,12 @@ struct ssl_session_st
638 * TLS only.) "Released" buffers are put onto a free-list in the context 644 * TLS only.) "Released" buffers are put onto a free-list in the context
639 * or just freed (depending on the context's setting for freelist_max_len). */ 645 * or just freed (depending on the context's setting for freelist_max_len). */
640#define SSL_MODE_RELEASE_BUFFERS 0x00000010L 646#define SSL_MODE_RELEASE_BUFFERS 0x00000010L
647/* Send the current time in the Random fields of the ClientHello and
648 * ServerHello records for compatibility with hypothetical implementations
649 * that require it.
650 */
651#define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L
652#define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L
641 653
642/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, 654/* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,
643 * they cannot be used to clear bits. */ 655 * they cannot be used to clear bits. */
@@ -903,7 +915,7 @@ struct ssl_ctx_st
903 */ 915 */
904 unsigned int max_send_fragment; 916 unsigned int max_send_fragment;
905 917
906#ifndef OPENSSL_ENGINE 918#ifndef OPENSSL_NO_ENGINE
907 /* Engine to pass requests for client certs to 919 /* Engine to pass requests for client certs to
908 */ 920 */
909 ENGINE *client_cert_engine; 921 ENGINE *client_cert_engine;
@@ -927,6 +939,7 @@ struct ssl_ctx_st
927 /* Callback for status request */ 939 /* Callback for status request */
928 int (*tlsext_status_cb)(SSL *ssl, void *arg); 940 int (*tlsext_status_cb)(SSL *ssl, void *arg);
929 void *tlsext_status_arg; 941 void *tlsext_status_arg;
942
930 /* draft-rescorla-tls-opaque-prf-input-00.txt information */ 943 /* draft-rescorla-tls-opaque-prf-input-00.txt information */
931 int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, size_t len, void *arg); 944 int (*tlsext_opaque_prf_input_callback)(SSL *, void *peerinput, size_t len, void *arg);
932 void *tlsext_opaque_prf_input_callback_arg; 945 void *tlsext_opaque_prf_input_callback_arg;
@@ -952,6 +965,7 @@ struct ssl_ctx_st
952#endif 965#endif
953 966
954#ifndef OPENSSL_NO_TLSEXT 967#ifndef OPENSSL_NO_TLSEXT
968
955# ifndef OPENSSL_NO_NEXTPROTONEG 969# ifndef OPENSSL_NO_NEXTPROTONEG
956 /* Next protocol negotiation information */ 970 /* Next protocol negotiation information */
957 /* (for experimental NPN extension). */ 971 /* (for experimental NPN extension). */
@@ -2206,6 +2220,7 @@ void ERR_load_SSL_strings(void);
2206#define SSL_F_SSL_GET_NEW_SESSION 181 2220#define SSL_F_SSL_GET_NEW_SESSION 181
2207#define SSL_F_SSL_GET_PREV_SESSION 217 2221#define SSL_F_SSL_GET_PREV_SESSION 217
2208#define SSL_F_SSL_GET_SERVER_SEND_CERT 182 2222#define SSL_F_SSL_GET_SERVER_SEND_CERT 182
2223#define SSL_F_SSL_GET_SERVER_SEND_PKEY 317
2209#define SSL_F_SSL_GET_SIGN_PKEY 183 2224#define SSL_F_SSL_GET_SIGN_PKEY 183
2210#define SSL_F_SSL_INIT_WBIO_BUFFER 184 2225#define SSL_F_SSL_INIT_WBIO_BUFFER 184
2211#define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 2226#define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185
diff --git a/src/lib/libssl/ssl3.h b/src/lib/libssl/ssl3.h
index 112e627de0..cb8b2492ec 100644
--- a/src/lib/libssl/ssl3.h
+++ b/src/lib/libssl/ssl3.h
@@ -539,6 +539,15 @@ typedef struct ssl3_state_st
539 /* Set if we saw the Next Protocol Negotiation extension from our peer. */ 539 /* Set if we saw the Next Protocol Negotiation extension from our peer. */
540 int next_proto_neg_seen; 540 int next_proto_neg_seen;
541#endif 541#endif
542
543#ifndef OPENSSL_NO_TLSEXT
544#ifndef OPENSSL_NO_EC
545 /* This is set to true if we believe that this is a version of Safari
546 * running on OS X 10.6 or newer. We wish to know this because Safari
547 * on 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. */
548 char is_probably_safari;
549#endif /* !OPENSSL_NO_EC */
550#endif /* !OPENSSL_NO_TLSEXT */
542 } SSL3_STATE; 551 } SSL3_STATE;
543 552
544#endif 553#endif
@@ -578,8 +587,10 @@ typedef struct ssl3_state_st
578#define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) 587#define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT)
579#define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) 588#define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT)
580#define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) 589#define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT)
590#ifndef OPENSSL_NO_NEXTPROTONEG
581#define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) 591#define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT)
582#define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) 592#define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT)
593#endif
583#define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) 594#define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT)
584#define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) 595#define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT)
585/* read from server */ 596/* read from server */
@@ -629,8 +640,10 @@ typedef struct ssl3_state_st
629#define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) 640#define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT)
630#define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) 641#define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT)
631#define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) 642#define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT)
643#ifndef OPENSSL_NO_NEXTPROTONEG
632#define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) 644#define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT)
633#define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) 645#define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT)
646#endif
634#define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) 647#define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT)
635#define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) 648#define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT)
636/* write to client */ 649/* write to client */
@@ -655,7 +668,9 @@ typedef struct ssl3_state_st
655#define SSL3_MT_CLIENT_KEY_EXCHANGE 16 668#define SSL3_MT_CLIENT_KEY_EXCHANGE 16
656#define SSL3_MT_FINISHED 20 669#define SSL3_MT_FINISHED 20
657#define SSL3_MT_CERTIFICATE_STATUS 22 670#define SSL3_MT_CERTIFICATE_STATUS 22
671#ifndef OPENSSL_NO_NEXTPROTONEG
658#define SSL3_MT_NEXT_PROTO 67 672#define SSL3_MT_NEXT_PROTO 67
673#endif
659#define DTLS1_MT_HELLO_VERIFY_REQUEST 3 674#define DTLS1_MT_HELLO_VERIFY_REQUEST 3
660 675
661 676
diff --git a/src/lib/libssl/ssl_algs.c b/src/lib/libssl/ssl_algs.c
index d443143c59..9c34d19725 100644
--- a/src/lib/libssl/ssl_algs.c
+++ b/src/lib/libssl/ssl_algs.c
@@ -94,6 +94,7 @@ int SSL_library_init(void)
94 EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1()); 94 EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
95 EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1()); 95 EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
96#endif 96#endif
97
97#endif 98#endif
98#ifndef OPENSSL_NO_CAMELLIA 99#ifndef OPENSSL_NO_CAMELLIA
99 EVP_add_cipher(EVP_camellia_128_cbc()); 100 EVP_add_cipher(EVP_camellia_128_cbc());
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c
index 917be31876..5123a89182 100644
--- a/src/lib/libssl/ssl_cert.c
+++ b/src/lib/libssl/ssl_cert.c
@@ -164,14 +164,14 @@ static void ssl_cert_set_default_md(CERT *cert)
164 { 164 {
165 /* Set digest values to defaults */ 165 /* Set digest values to defaults */
166#ifndef OPENSSL_NO_DSA 166#ifndef OPENSSL_NO_DSA
167 cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_dss1(); 167 cert->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
168#endif 168#endif
169#ifndef OPENSSL_NO_RSA 169#ifndef OPENSSL_NO_RSA
170 cert->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1(); 170 cert->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
171 cert->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1(); 171 cert->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
172#endif 172#endif
173#ifndef OPENSSL_NO_ECDSA 173#ifndef OPENSSL_NO_ECDSA
174 cert->pkeys[SSL_PKEY_ECC].digest = EVP_ecdsa(); 174 cert->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
175#endif 175#endif
176 } 176 }
177 177
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c
index 92d1e94d6a..0aba8e048c 100644
--- a/src/lib/libssl/ssl_ciph.c
+++ b/src/lib/libssl/ssl_ciph.c
@@ -312,6 +312,7 @@ static const SSL_CIPHER cipher_aliases[]={
312 {0,SSL_TXT_SSLV2,0, 0,0,0,0,SSL_SSLV2, 0,0,0,0}, 312 {0,SSL_TXT_SSLV2,0, 0,0,0,0,SSL_SSLV2, 0,0,0,0},
313 {0,SSL_TXT_SSLV3,0, 0,0,0,0,SSL_SSLV3, 0,0,0,0}, 313 {0,SSL_TXT_SSLV3,0, 0,0,0,0,SSL_SSLV3, 0,0,0,0},
314 {0,SSL_TXT_TLSV1,0, 0,0,0,0,SSL_TLSV1, 0,0,0,0}, 314 {0,SSL_TXT_TLSV1,0, 0,0,0,0,SSL_TLSV1, 0,0,0,0},
315 {0,SSL_TXT_TLSV1_2,0, 0,0,0,0,SSL_TLSV1_2, 0,0,0,0},
315 316
316 /* export flag */ 317 /* export flag */
317 {0,SSL_TXT_EXP,0, 0,0,0,0,0,SSL_EXPORT,0,0,0}, 318 {0,SSL_TXT_EXP,0, 0,0,0,0,0,SSL_EXPORT,0,0,0},
@@ -1150,9 +1151,9 @@ static int ssl_cipher_process_rulestr(const char *rule_str,
1150 while ( ((ch >= 'A') && (ch <= 'Z')) || 1151 while ( ((ch >= 'A') && (ch <= 'Z')) ||
1151 ((ch >= '0') && (ch <= '9')) || 1152 ((ch >= '0') && (ch <= '9')) ||
1152 ((ch >= 'a') && (ch <= 'z')) || 1153 ((ch >= 'a') && (ch <= 'z')) ||
1153 (ch == '-')) 1154 (ch == '-') || (ch == '.'))
1154#else 1155#else
1155 while ( isalnum(ch) || (ch == '-')) 1156 while ( isalnum(ch) || (ch == '-') || (ch == '.'))
1156#endif 1157#endif
1157 { 1158 {
1158 ch = *(++l); 1159 ch = *(++l);
diff --git a/src/lib/libssl/ssl_err.c b/src/lib/libssl/ssl_err.c
index 2577c6895a..370fb57e3b 100644
--- a/src/lib/libssl/ssl_err.c
+++ b/src/lib/libssl/ssl_err.c
@@ -228,6 +228,7 @@ static ERR_STRING_DATA SSL_str_functs[]=
228{ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"}, 228{ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"},
229{ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"}, 229{ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"},
230{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"}, 230{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"},
231{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"},
231{ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"}, 232{ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"},
232{ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"}, 233{ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"},
233{ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"}, 234{ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"},
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c
index c91f0018e4..f052deeb97 100644
--- a/src/lib/libssl/ssl_lib.c
+++ b/src/lib/libssl/ssl_lib.c
@@ -597,8 +597,10 @@ void SSL_free(SSL *s)
597 OPENSSL_free(s->next_proto_negotiated); 597 OPENSSL_free(s->next_proto_negotiated);
598#endif 598#endif
599 599
600#ifndef OPENSSL_NO_SRTP
600 if (s->srtp_profiles) 601 if (s->srtp_profiles)
601 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); 602 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
603#endif
602 604
603 OPENSSL_free(s); 605 OPENSSL_free(s);
604 } 606 }
@@ -1792,7 +1794,9 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
1792 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); 1794 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
1793 1795
1794 ret->extra_certs=NULL; 1796 ret->extra_certs=NULL;
1795 ret->comp_methods=SSL_COMP_get_compression_methods(); 1797 /* No compression for DTLS */
1798 if (meth->version != DTLS1_VERSION)
1799 ret->comp_methods=SSL_COMP_get_compression_methods();
1796 1800
1797 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; 1801 ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
1798 1802
@@ -1949,8 +1953,10 @@ void SSL_CTX_free(SSL_CTX *a)
1949 a->comp_methods = NULL; 1953 a->comp_methods = NULL;
1950#endif 1954#endif
1951 1955
1956#ifndef OPENSSL_NO_SRTP
1952 if (a->srtp_profiles) 1957 if (a->srtp_profiles)
1953 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles); 1958 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
1959#endif
1954 1960
1955#ifndef OPENSSL_NO_PSK 1961#ifndef OPENSSL_NO_PSK
1956 if (a->psk_identity_hint) 1962 if (a->psk_identity_hint)
@@ -2284,7 +2290,7 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
2284#endif 2290#endif
2285 2291
2286/* THIS NEEDS CLEANING UP */ 2292/* THIS NEEDS CLEANING UP */
2287X509 *ssl_get_server_send_cert(SSL *s) 2293CERT_PKEY *ssl_get_server_send_pkey(const SSL *s)
2288 { 2294 {
2289 unsigned long alg_k,alg_a; 2295 unsigned long alg_k,alg_a;
2290 CERT *c; 2296 CERT *c;
@@ -2339,12 +2345,20 @@ X509 *ssl_get_server_send_cert(SSL *s)
2339 i=SSL_PKEY_GOST01; 2345 i=SSL_PKEY_GOST01;
2340 else /* if (alg_a & SSL_aNULL) */ 2346 else /* if (alg_a & SSL_aNULL) */
2341 { 2347 {
2342 SSLerr(SSL_F_SSL_GET_SERVER_SEND_CERT,ERR_R_INTERNAL_ERROR); 2348 SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY,ERR_R_INTERNAL_ERROR);
2343 return(NULL); 2349 return(NULL);
2344 } 2350 }
2345 if (c->pkeys[i].x509 == NULL) return(NULL);
2346 2351
2347 return(c->pkeys[i].x509); 2352 return c->pkeys + i;
2353 }
2354
2355X509 *ssl_get_server_send_cert(const SSL *s)
2356 {
2357 CERT_PKEY *cpk;
2358 cpk = ssl_get_server_send_pkey(s);
2359 if (!cpk)
2360 return NULL;
2361 return cpk->x509;
2348 } 2362 }
2349 2363
2350EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd) 2364EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd)
@@ -2605,7 +2619,7 @@ const char *SSL_get_version(const SSL *s)
2605 return("TLSv1.2"); 2619 return("TLSv1.2");
2606 else if (s->version == TLS1_1_VERSION) 2620 else if (s->version == TLS1_1_VERSION)
2607 return("TLSv1.1"); 2621 return("TLSv1.1");
2608 if (s->version == TLS1_VERSION) 2622 else if (s->version == TLS1_VERSION)
2609 return("TLSv1"); 2623 return("TLSv1");
2610 else if (s->version == SSL3_VERSION) 2624 else if (s->version == SSL3_VERSION)
2611 return("SSLv3"); 2625 return("SSLv3");
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index c3c4c21d38..e485907748 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -841,13 +841,15 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk);
841int ssl_undefined_function(SSL *s); 841int ssl_undefined_function(SSL *s);
842int ssl_undefined_void_function(void); 842int ssl_undefined_void_function(void);
843int ssl_undefined_const_function(const SSL *s); 843int ssl_undefined_const_function(const SSL *s);
844X509 *ssl_get_server_send_cert(SSL *); 844CERT_PKEY *ssl_get_server_send_pkey(const SSL *s);
845X509 *ssl_get_server_send_cert(const SSL *);
845EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *c, const EVP_MD **pmd); 846EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *c, const EVP_MD **pmd);
846int ssl_cert_type(X509 *x,EVP_PKEY *pkey); 847int ssl_cert_type(X509 *x,EVP_PKEY *pkey);
847void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher); 848void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher);
848STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s); 849STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s);
849int ssl_verify_alarm_type(long type); 850int ssl_verify_alarm_type(long type);
850void ssl_load_ciphers(void); 851void ssl_load_ciphers(void);
852int ssl_fill_hello_random(SSL *s, int server, unsigned char *field, int len);
851 853
852int ssl2_enc_init(SSL *s, int client); 854int ssl2_enc_init(SSL *s, int client);
853int ssl2_generate_key_material(SSL *s); 855int ssl2_generate_key_material(SSL *s);
@@ -1099,7 +1101,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, unsigned char *d,
1099int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); 1101int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al);
1100int ssl_prepare_clienthello_tlsext(SSL *s); 1102int ssl_prepare_clienthello_tlsext(SSL *s);
1101int ssl_prepare_serverhello_tlsext(SSL *s); 1103int ssl_prepare_serverhello_tlsext(SSL *s);
1102int ssl_check_clienthello_tlsext(SSL *s); 1104int ssl_check_clienthello_tlsext_early(SSL *s);
1105int ssl_check_clienthello_tlsext_late(SSL *s);
1103int ssl_check_serverhello_tlsext(SSL *s); 1106int ssl_check_serverhello_tlsext(SSL *s);
1104 1107
1105#ifndef OPENSSL_NO_HEARTBEATS 1108#ifndef OPENSSL_NO_HEARTBEATS
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c
index c0960b5712..60e7b66859 100644
--- a/src/lib/libssl/ssl_rsa.c
+++ b/src/lib/libssl/ssl_rsa.c
@@ -710,7 +710,7 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
710 710
711 ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */ 711 ERR_clear_error(); /* clear error stack for SSL_CTX_use_certificate() */
712 712
713 in=BIO_new(BIO_s_file_internal()); 713 in = BIO_new(BIO_s_file_internal());
714 if (in == NULL) 714 if (in == NULL)
715 { 715 {
716 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_BUF_LIB); 716 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_BUF_LIB);
@@ -723,14 +723,16 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
723 goto end; 723 goto end;
724 } 724 }
725 725
726 x=PEM_read_bio_X509_AUX(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata); 726 x=PEM_read_bio_X509_AUX(in,NULL,ctx->default_passwd_callback,
727 ctx->default_passwd_callback_userdata);
727 if (x == NULL) 728 if (x == NULL)
728 { 729 {
729 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_PEM_LIB); 730 SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,ERR_R_PEM_LIB);
730 goto end; 731 goto end;
731 } 732 }
732 733
733 ret=SSL_CTX_use_certificate(ctx,x); 734 ret = SSL_CTX_use_certificate(ctx, x);
735
734 if (ERR_peek_error() != 0) 736 if (ERR_peek_error() != 0)
735 ret = 0; /* Key/certificate mismatch doesn't imply ret==0 ... */ 737 ret = 0; /* Key/certificate mismatch doesn't imply ret==0 ... */
736 if (ret) 738 if (ret)
@@ -742,13 +744,15 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
742 int r; 744 int r;
743 unsigned long err; 745 unsigned long err;
744 746
745 if (ctx->extra_certs != NULL) 747 if (ctx->extra_certs != NULL)
746 { 748 {
747 sk_X509_pop_free(ctx->extra_certs, X509_free); 749 sk_X509_pop_free(ctx->extra_certs, X509_free);
748 ctx->extra_certs = NULL; 750 ctx->extra_certs = NULL;
749 } 751 }
750 752
751 while ((ca = PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata)) 753 while ((ca = PEM_read_bio_X509(in, NULL,
754 ctx->default_passwd_callback,
755 ctx->default_passwd_callback_userdata))
752 != NULL) 756 != NULL)
753 { 757 {
754 r = SSL_CTX_add_extra_chain_cert(ctx, ca); 758 r = SSL_CTX_add_extra_chain_cert(ctx, ca);
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c
index 638405ec39..0c4cddedf8 100644
--- a/src/lib/libssl/t1_enc.c
+++ b/src/lib/libssl/t1_enc.c
@@ -361,7 +361,7 @@ int tls1_change_cipher_state(SSL *s, int which)
361 { 361 {
362 int i; 362 int i;
363 for (i=0; i<s->s3->tmp.key_block_length; i++) 363 for (i=0; i<s->s3->tmp.key_block_length; i++)
364 printf("%02x", key_block[i]); printf("\n"); 364 printf("%02x", s->s3->tmp.key_block[i]); printf("\n");
365 } 365 }
366#endif /* KSSL_DEBUG */ 366#endif /* KSSL_DEBUG */
367 367
@@ -427,7 +427,7 @@ int tls1_change_cipher_state(SSL *s, int which)
427 s->write_hash = mac_ctx; 427 s->write_hash = mac_ctx;
428 } 428 }
429 else 429 else
430 mac_ctx = ssl_replace_hash(&s->write_hash,NULL); 430 mac_ctx = ssl_replace_hash(&s->write_hash,NULL);
431#ifndef OPENSSL_NO_COMP 431#ifndef OPENSSL_NO_COMP
432 if (s->compress != NULL) 432 if (s->compress != NULL)
433 { 433 {
@@ -929,8 +929,8 @@ int tls1_final_finish_mac(SSL *s,
929 else 929 else
930 { 930 {
931 if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) || 931 if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) ||
932 !EVP_DigestFinal_ex(&ctx,q,&i) || 932 !EVP_DigestFinal_ex(&ctx,q,&i) ||
933 (i != (unsigned int)hashsize)) 933 (i != (unsigned int)hashsize))
934 err = 1; 934 err = 1;
935 q+=hashsize; 935 q+=hashsize;
936 } 936 }
@@ -986,7 +986,8 @@ int tls1_mac(SSL *ssl, unsigned char *md, int send)
986 } 986 }
987 else 987 else
988 { 988 {
989 EVP_MD_CTX_copy(&hmac,hash); 989 if (!EVP_MD_CTX_copy(&hmac,hash))
990 return -1;
990 mac_ctx = &hmac; 991 mac_ctx = &hmac;
991 } 992 }
992 993
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c
index a649dafba9..bddffd92cc 100644
--- a/src/lib/libssl/t1_lib.c
+++ b/src/lib/libssl/t1_lib.c
@@ -342,19 +342,11 @@ static unsigned char tls12_sigalgs[] = {
342#ifndef OPENSSL_NO_SHA 342#ifndef OPENSSL_NO_SHA
343 tlsext_sigalg(TLSEXT_hash_sha1) 343 tlsext_sigalg(TLSEXT_hash_sha1)
344#endif 344#endif
345#ifndef OPENSSL_NO_MD5
346 tlsext_sigalg_rsa(TLSEXT_hash_md5)
347#endif
348}; 345};
349 346
350int tls12_get_req_sig_algs(SSL *s, unsigned char *p) 347int tls12_get_req_sig_algs(SSL *s, unsigned char *p)
351 { 348 {
352 size_t slen = sizeof(tls12_sigalgs); 349 size_t slen = sizeof(tls12_sigalgs);
353#ifdef OPENSSL_FIPS
354 /* If FIPS mode don't include MD5 which is last */
355 if (FIPS_mode())
356 slen -= 2;
357#endif
358 if (p) 350 if (p)
359 memcpy(p, tls12_sigalgs, slen); 351 memcpy(p, tls12_sigalgs, slen);
360 return (int)slen; 352 return (int)slen;
@@ -649,6 +641,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha
649 } 641 }
650#endif 642#endif
651 643
644#ifndef OPENSSL_NO_SRTP
652 if(SSL_get_srtp_profiles(s)) 645 if(SSL_get_srtp_profiles(s))
653 { 646 {
654 int el; 647 int el;
@@ -667,6 +660,37 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *p, unsigned cha
667 } 660 }
668 ret += el; 661 ret += el;
669 } 662 }
663#endif
664
665#ifdef TLSEXT_TYPE_padding
666 /* Add padding to workaround bugs in F5 terminators.
667 * See https://tools.ietf.org/html/draft-agl-tls-padding-03
668 *
669 * NB: because this code works out the length of all existing
670 * extensions it MUST always appear last.
671 */
672 {
673 int hlen = ret - (unsigned char *)s->init_buf->data;
674 /* The code in s23_clnt.c to build ClientHello messages includes the
675 * 5-byte record header in the buffer, while the code in s3_clnt.c does
676 * not. */
677 if (s->state == SSL23_ST_CW_CLNT_HELLO_A)
678 hlen -= 5;
679 if (hlen > 0xff && hlen < 0x200)
680 {
681 hlen = 0x200 - hlen;
682 if (hlen >= 4)
683 hlen -= 4;
684 else
685 hlen = 0;
686
687 s2n(TLSEXT_TYPE_padding, ret);
688 s2n(hlen, ret);
689 memset(ret, 0, hlen);
690 ret += hlen;
691 }
692 }
693#endif
670 694
671 if ((extdatalen = ret-p-2)== 0) 695 if ((extdatalen = ret-p-2)== 0)
672 return p; 696 return p;
@@ -781,6 +805,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
781 } 805 }
782#endif 806#endif
783 807
808#ifndef OPENSSL_NO_SRTP
784 if(s->srtp_profile) 809 if(s->srtp_profile)
785 { 810 {
786 int el; 811 int el;
@@ -799,6 +824,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
799 } 824 }
800 ret+=el; 825 ret+=el;
801 } 826 }
827#endif
802 828
803 if (((s->s3->tmp.new_cipher->id & 0xFFFF)==0x80 || (s->s3->tmp.new_cipher->id & 0xFFFF)==0x81) 829 if (((s->s3->tmp.new_cipher->id & 0xFFFF)==0x80 || (s->s3->tmp.new_cipher->id & 0xFFFF)==0x81)
804 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) 830 && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG))
@@ -862,6 +888,89 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha
862 return ret; 888 return ret;
863 } 889 }
864 890
891#ifndef OPENSSL_NO_EC
892/* ssl_check_for_safari attempts to fingerprint Safari using OS X
893 * SecureTransport using the TLS extension block in |d|, of length |n|.
894 * Safari, since 10.6, sends exactly these extensions, in this order:
895 * SNI,
896 * elliptic_curves
897 * ec_point_formats
898 *
899 * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
900 * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
901 * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
902 * 10.8..10.8.3 (which don't work).
903 */
904static void ssl_check_for_safari(SSL *s, const unsigned char *data, const unsigned char *d, int n) {
905 unsigned short type, size;
906 static const unsigned char kSafariExtensionsBlock[] = {
907 0x00, 0x0a, /* elliptic_curves extension */
908 0x00, 0x08, /* 8 bytes */
909 0x00, 0x06, /* 6 bytes of curve ids */
910 0x00, 0x17, /* P-256 */
911 0x00, 0x18, /* P-384 */
912 0x00, 0x19, /* P-521 */
913
914 0x00, 0x0b, /* ec_point_formats */
915 0x00, 0x02, /* 2 bytes */
916 0x01, /* 1 point format */
917 0x00, /* uncompressed */
918 };
919
920 /* The following is only present in TLS 1.2 */
921 static const unsigned char kSafariTLS12ExtensionsBlock[] = {
922 0x00, 0x0d, /* signature_algorithms */
923 0x00, 0x0c, /* 12 bytes */
924 0x00, 0x0a, /* 10 bytes */
925 0x05, 0x01, /* SHA-384/RSA */
926 0x04, 0x01, /* SHA-256/RSA */
927 0x02, 0x01, /* SHA-1/RSA */
928 0x04, 0x03, /* SHA-256/ECDSA */
929 0x02, 0x03, /* SHA-1/ECDSA */
930 };
931
932 if (data >= (d+n-2))
933 return;
934 data += 2;
935
936 if (data > (d+n-4))
937 return;
938 n2s(data,type);
939 n2s(data,size);
940
941 if (type != TLSEXT_TYPE_server_name)
942 return;
943
944 if (data+size > d+n)
945 return;
946 data += size;
947
948 if (TLS1_get_client_version(s) >= TLS1_2_VERSION)
949 {
950 const size_t len1 = sizeof(kSafariExtensionsBlock);
951 const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
952
953 if (data + len1 + len2 != d+n)
954 return;
955 if (memcmp(data, kSafariExtensionsBlock, len1) != 0)
956 return;
957 if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0)
958 return;
959 }
960 else
961 {
962 const size_t len = sizeof(kSafariExtensionsBlock);
963
964 if (data + len != d+n)
965 return;
966 if (memcmp(data, kSafariExtensionsBlock, len) != 0)
967 return;
968 }
969
970 s->s3->is_probably_safari = 1;
971}
972#endif /* !OPENSSL_NO_EC */
973
865int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) 974int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)
866 { 975 {
867 unsigned short type; 976 unsigned short type;
@@ -882,6 +991,11 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
882 SSL_TLSEXT_HB_DONT_SEND_REQUESTS); 991 SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
883#endif 992#endif
884 993
994#ifndef OPENSSL_NO_EC
995 if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
996 ssl_check_for_safari(s, data, d, n);
997#endif /* !OPENSSL_NO_EC */
998
885 if (data >= (d+n-2)) 999 if (data >= (d+n-2))
886 goto ri_check; 1000 goto ri_check;
887 n2s(data,len); 1001 n2s(data,len);
@@ -1077,7 +1191,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1077 int ellipticcurvelist_length = (*(sdata++) << 8); 1191 int ellipticcurvelist_length = (*(sdata++) << 8);
1078 ellipticcurvelist_length += (*(sdata++)); 1192 ellipticcurvelist_length += (*(sdata++));
1079 1193
1080 if (ellipticcurvelist_length != size - 2) 1194 if (ellipticcurvelist_length != size - 2 ||
1195 ellipticcurvelist_length < 1)
1081 { 1196 {
1082 *al = TLS1_AD_DECODE_ERROR; 1197 *al = TLS1_AD_DECODE_ERROR;
1083 return 0; 1198 return 0;
@@ -1176,7 +1291,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1176 } 1291 }
1177 } 1292 }
1178 else if (type == TLSEXT_TYPE_status_request && 1293 else if (type == TLSEXT_TYPE_status_request &&
1179 s->version != DTLS1_VERSION && s->ctx->tlsext_status_cb) 1294 s->version != DTLS1_VERSION)
1180 { 1295 {
1181 1296
1182 if (size < 5) 1297 if (size < 5)
@@ -1328,12 +1443,14 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1328#endif 1443#endif
1329 1444
1330 /* session ticket processed earlier */ 1445 /* session ticket processed earlier */
1446#ifndef OPENSSL_NO_SRTP
1331 else if (type == TLSEXT_TYPE_use_srtp) 1447 else if (type == TLSEXT_TYPE_use_srtp)
1332 { 1448 {
1333 if(ssl_parse_clienthello_use_srtp_ext(s, data, size, 1449 if(ssl_parse_clienthello_use_srtp_ext(s, data, size,
1334 al)) 1450 al))
1335 return 0; 1451 return 0;
1336 } 1452 }
1453#endif
1337 1454
1338 data+=size; 1455 data+=size;
1339 } 1456 }
@@ -1433,7 +1550,8 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1433 unsigned char *sdata = data; 1550 unsigned char *sdata = data;
1434 int ecpointformatlist_length = *(sdata++); 1551 int ecpointformatlist_length = *(sdata++);
1435 1552
1436 if (ecpointformatlist_length != size - 1) 1553 if (ecpointformatlist_length != size - 1 ||
1554 ecpointformatlist_length < 1)
1437 { 1555 {
1438 *al = TLS1_AD_DECODE_ERROR; 1556 *al = TLS1_AD_DECODE_ERROR;
1439 return 0; 1557 return 0;
@@ -1527,7 +1645,7 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1527 unsigned char selected_len; 1645 unsigned char selected_len;
1528 1646
1529 /* We must have requested it. */ 1647 /* We must have requested it. */
1530 if ((s->ctx->next_proto_select_cb == NULL)) 1648 if (s->ctx->next_proto_select_cb == NULL)
1531 { 1649 {
1532 *al = TLS1_AD_UNSUPPORTED_EXTENSION; 1650 *al = TLS1_AD_UNSUPPORTED_EXTENSION;
1533 return 0; 1651 return 0;
@@ -1577,12 +1695,14 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
1577 } 1695 }
1578 } 1696 }
1579#endif 1697#endif
1698#ifndef OPENSSL_NO_SRTP
1580 else if (type == TLSEXT_TYPE_use_srtp) 1699 else if (type == TLSEXT_TYPE_use_srtp)
1581 { 1700 {
1582 if(ssl_parse_serverhello_use_srtp_ext(s, data, size, 1701 if(ssl_parse_serverhello_use_srtp_ext(s, data, size,
1583 al)) 1702 al))
1584 return 0; 1703 return 0;
1585 } 1704 }
1705#endif
1586 1706
1587 data+=size; 1707 data+=size;
1588 } 1708 }
@@ -1763,7 +1883,7 @@ int ssl_prepare_serverhello_tlsext(SSL *s)
1763 return 1; 1883 return 1;
1764 } 1884 }
1765 1885
1766int ssl_check_clienthello_tlsext(SSL *s) 1886int ssl_check_clienthello_tlsext_early(SSL *s)
1767 { 1887 {
1768 int ret=SSL_TLSEXT_ERR_NOACK; 1888 int ret=SSL_TLSEXT_ERR_NOACK;
1769 int al = SSL_AD_UNRECOGNIZED_NAME; 1889 int al = SSL_AD_UNRECOGNIZED_NAME;
@@ -1782,42 +1902,12 @@ int ssl_check_clienthello_tlsext(SSL *s)
1782 else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0) 1902 else if (s->initial_ctx != NULL && s->initial_ctx->tlsext_servername_callback != 0)
1783 ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg); 1903 ret = s->initial_ctx->tlsext_servername_callback(s, &al, s->initial_ctx->tlsext_servername_arg);
1784 1904
1785 /* If status request then ask callback what to do.
1786 * Note: this must be called after servername callbacks in case
1787 * the certificate has changed.
1788 */
1789 if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
1790 {
1791 int r;
1792 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
1793 switch (r)
1794 {
1795 /* We don't want to send a status request response */
1796 case SSL_TLSEXT_ERR_NOACK:
1797 s->tlsext_status_expected = 0;
1798 break;
1799 /* status request response should be sent */
1800 case SSL_TLSEXT_ERR_OK:
1801 if (s->tlsext_ocsp_resp)
1802 s->tlsext_status_expected = 1;
1803 else
1804 s->tlsext_status_expected = 0;
1805 break;
1806 /* something bad happened */
1807 case SSL_TLSEXT_ERR_ALERT_FATAL:
1808 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
1809 al = SSL_AD_INTERNAL_ERROR;
1810 goto err;
1811 }
1812 }
1813 else
1814 s->tlsext_status_expected = 0;
1815
1816#ifdef TLSEXT_TYPE_opaque_prf_input 1905#ifdef TLSEXT_TYPE_opaque_prf_input
1817 { 1906 {
1818 /* This sort of belongs into ssl_prepare_serverhello_tlsext(), 1907 /* This sort of belongs into ssl_prepare_serverhello_tlsext(),
1819 * but we might be sending an alert in response to the client hello, 1908 * but we might be sending an alert in response to the client hello,
1820 * so this has to happen here in ssl_check_clienthello_tlsext(). */ 1909 * so this has to happen here in
1910 * ssl_check_clienthello_tlsext_early(). */
1821 1911
1822 int r = 1; 1912 int r = 1;
1823 1913
@@ -1869,8 +1959,8 @@ int ssl_check_clienthello_tlsext(SSL *s)
1869 } 1959 }
1870 } 1960 }
1871 1961
1872#endif
1873 err: 1962 err:
1963#endif
1874 switch (ret) 1964 switch (ret)
1875 { 1965 {
1876 case SSL_TLSEXT_ERR_ALERT_FATAL: 1966 case SSL_TLSEXT_ERR_ALERT_FATAL:
@@ -1888,6 +1978,71 @@ int ssl_check_clienthello_tlsext(SSL *s)
1888 } 1978 }
1889 } 1979 }
1890 1980
1981int ssl_check_clienthello_tlsext_late(SSL *s)
1982 {
1983 int ret = SSL_TLSEXT_ERR_OK;
1984 int al;
1985
1986 /* If status request then ask callback what to do.
1987 * Note: this must be called after servername callbacks in case
1988 * the certificate has changed, and must be called after the cipher
1989 * has been chosen because this may influence which certificate is sent
1990 */
1991 if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
1992 {
1993 int r;
1994 CERT_PKEY *certpkey;
1995 certpkey = ssl_get_server_send_pkey(s);
1996 /* If no certificate can't return certificate status */
1997 if (certpkey == NULL)
1998 {
1999 s->tlsext_status_expected = 0;
2000 return 1;
2001 }
2002 /* Set current certificate to one we will use so
2003 * SSL_get_certificate et al can pick it up.
2004 */
2005 s->cert->key = certpkey;
2006 r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2007 switch (r)
2008 {
2009 /* We don't want to send a status request response */
2010 case SSL_TLSEXT_ERR_NOACK:
2011 s->tlsext_status_expected = 0;
2012 break;
2013 /* status request response should be sent */
2014 case SSL_TLSEXT_ERR_OK:
2015 if (s->tlsext_ocsp_resp)
2016 s->tlsext_status_expected = 1;
2017 else
2018 s->tlsext_status_expected = 0;
2019 break;
2020 /* something bad happened */
2021 case SSL_TLSEXT_ERR_ALERT_FATAL:
2022 ret = SSL_TLSEXT_ERR_ALERT_FATAL;
2023 al = SSL_AD_INTERNAL_ERROR;
2024 goto err;
2025 }
2026 }
2027 else
2028 s->tlsext_status_expected = 0;
2029
2030 err:
2031 switch (ret)
2032 {
2033 case SSL_TLSEXT_ERR_ALERT_FATAL:
2034 ssl3_send_alert(s,SSL3_AL_FATAL,al);
2035 return -1;
2036
2037 case SSL_TLSEXT_ERR_ALERT_WARNING:
2038 ssl3_send_alert(s,SSL3_AL_WARNING,al);
2039 return 1;
2040
2041 default:
2042 return 1;
2043 }
2044 }
2045
1891int ssl_check_serverhello_tlsext(SSL *s) 2046int ssl_check_serverhello_tlsext(SSL *s)
1892 { 2047 {
1893 int ret=SSL_TLSEXT_ERR_NOACK; 2048 int ret=SSL_TLSEXT_ERR_NOACK;
@@ -2189,7 +2344,7 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen,
2189 HMAC_Update(&hctx, etick, eticklen); 2344 HMAC_Update(&hctx, etick, eticklen);
2190 HMAC_Final(&hctx, tick_hmac, NULL); 2345 HMAC_Final(&hctx, tick_hmac, NULL);
2191 HMAC_CTX_cleanup(&hctx); 2346 HMAC_CTX_cleanup(&hctx);
2192 if (timingsafe_bcmp(tick_hmac, etick + eticklen, mlen)) 2347 if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen))
2193 return 2; 2348 return 2;
2194 /* Attempt to decrypt session data */ 2349 /* Attempt to decrypt session data */
2195 /* Move p after IV to start of encrypted ticket, update length */ 2350 /* Move p after IV to start of encrypted ticket, update length */
@@ -2319,14 +2474,6 @@ const EVP_MD *tls12_get_hash(unsigned char hash_alg)
2319 { 2474 {
2320 switch(hash_alg) 2475 switch(hash_alg)
2321 { 2476 {
2322#ifndef OPENSSL_NO_MD5
2323 case TLSEXT_hash_md5:
2324#ifdef OPENSSL_FIPS
2325 if (FIPS_mode())
2326 return NULL;
2327#endif
2328 return EVP_md5();
2329#endif
2330#ifndef OPENSSL_NO_SHA 2477#ifndef OPENSSL_NO_SHA
2331 case TLSEXT_hash_sha1: 2478 case TLSEXT_hash_sha1:
2332 return EVP_sha1(); 2479 return EVP_sha1();
@@ -2414,7 +2561,7 @@ int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
2414 */ 2561 */
2415#ifndef OPENSSL_NO_DSA 2562#ifndef OPENSSL_NO_DSA
2416 if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest) 2563 if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
2417 c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_dss1(); 2564 c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
2418#endif 2565#endif
2419#ifndef OPENSSL_NO_RSA 2566#ifndef OPENSSL_NO_RSA
2420 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) 2567 if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest)
@@ -2425,7 +2572,7 @@ int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
2425#endif 2572#endif
2426#ifndef OPENSSL_NO_ECDSA 2573#ifndef OPENSSL_NO_ECDSA
2427 if (!c->pkeys[SSL_PKEY_ECC].digest) 2574 if (!c->pkeys[SSL_PKEY_ECC].digest)
2428 c->pkeys[SSL_PKEY_ECC].digest = EVP_ecdsa(); 2575 c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
2429#endif 2576#endif
2430 return 1; 2577 return 1;
2431 } 2578 }
diff --git a/src/lib/libssl/test/Makefile b/src/lib/libssl/test/Makefile
index 09e6848764..4c9eabcc21 100644
--- a/src/lib/libssl/test/Makefile
+++ b/src/lib/libssl/test/Makefile
@@ -246,7 +246,7 @@ test_ecdh:
246test_verify: 246test_verify:
247 @echo "The following command should have some OK's and some failures" 247 @echo "The following command should have some OK's and some failures"
248 @echo "There are definitly a few expired certificates" 248 @echo "There are definitly a few expired certificates"
249 ../util/shlib_wrap.sh ../apps/openssl verify -CApath ../certs ../certs/*.pem 249 ../util/shlib_wrap.sh ../apps/openssl verify -CApath ../certs/demo ../certs/demo/*.pem
250 250
251test_dh: 251test_dh:
252 @echo "Generate a set of DH parameters" 252 @echo "Generate a set of DH parameters"
diff --git a/src/lib/libssl/test/bctest.com b/src/lib/libssl/test/bctest.com
deleted file mode 100644
index d7e5ec139e..0000000000
--- a/src/lib/libssl/test/bctest.com
+++ /dev/null
@@ -1,152 +0,0 @@
1$!
2$! Check operation of "bc".
3$!
4$! 2010-04-05 SMS. New. Based (loosely) on "bctest".
5$!
6$!
7$ tmp_file_name = "tmp.bctest"
8$ failure = ""
9$!
10$! Basic command test.
11$!
12$ on warning then goto bc_fail
13$ bc
14$ on error then exit
15$!
16$! Test for SunOS 5.[78] bc bug.
17$!
18$ if (failure .eqs. "")
19$ then
20$!
21$ define /user_mode sys$output 'tmp_file_name'
22$ bc
23obase=16
24ibase=16
25a=AD88C418F31B3FC712D0425001D522B3AE9134FF3A98C13C1FCC1682211195406C1A6C66C6A\
26CEEC1A0EC16950233F77F1C2F2363D56DD71A36C57E0B2511FC4BA8F22D261FE2E9356D99AF57\
2710F3817C0E05BF79C423C3F66FDF321BE8D3F18F625D91B670931C1EF25F28E489BDA1C5422D1\
28C3F6F7A1AD21585746ECC4F10A14A778AF56F08898E965E9909E965E0CB6F85B514150C644759\
293BE731877B16EA07B552088FF2EA728AC5E0FF3A23EB939304519AB8B60F2C33D6BA0945B66F0\
304FC3CADF855448B24A9D7640BCF473E
31b=DCE91E7D120B983EA9A104B5A96D634DD644C37657B1C7860B45E6838999B3DCE5A555583C6\
329209E41F413422954175A06E67FFEF6746DD652F0F48AEFECC3D8CAC13523BDAAD3F5AF4212BD\
338B3CD64126E1A82E190228020C05B91C8B141F1110086FC2A4C6ED631EBA129D04BB9A19FC53D\
343ED0E2017D60A68775B75481449
35(a/b)*b + (a%b) - a
36$ status = $status
37$ output_expected = "0"
38$ gosub check_output
39$ if (output .ne. 1)
40$ then
41$ failure = "SunOStest"
42$ else
43$ delete 'f$parse( tmp_file_name)'
44$ endif
45$ endif
46$!
47$! Test for SCO bc bug.
48$!
49$ if (failure .eqs. "")
50$ then
51$!
52$ define /user_mode sys$output 'tmp_file_name'
53$ bc
54obase=16
55ibase=16
56-FFDD63BA1A4648F0D804F8A1C66C53F0D2110590E8A3907EC73B4AEC6F15AC177F176F2274D2\
579DC8022EA0D7DD3ABE9746D2D46DD3EA5B5F6F69DF12877E0AC5E7F5ADFACEE54573F5D256A06\
5811B5D2BC24947724E22AE4EC3FB0C39D9B4694A01AFE5E43B4D99FB9812A0E4A5773D8B254117\
591239157EC6E3D8D50199 * -FFDD63BA1A4648F0D804F8A1C66C53F0D2110590E8A3907EC73B4\
60AEC6F15AC177F176F2274D29DC8022EA0D7DD3ABE9746D2D46DD3EA5B5F6F69DF12877E0AC5E7\
61F5ADFACEE54573F5D256A0611B5D2BC24947724E22AE4EC3FB0C39D9B4694A01AFE5E43B4D99F\
62B9812A0E4A5773D8B2541171239157EC6E3D8D50199 - FFBACC221682DA464B6D7F123482522\
6302EDAEDCA38C3B69E9B7BBCD6165A9CD8716C4903417F23C09A85B851961F92C217258CEEB866\
6485EFCC5DD131853A02C07A873B8E2AF2E40C6D5ED598CD0E8F35AD49F3C3A17FDB7653E4E2DC4\
65A8D23CC34686EE4AD01F7407A7CD74429AC6D36DBF0CB6A3E302D0E5BDFCD048A3B90C1BE5AA8\
66E16C3D5884F9136B43FF7BB443764153D4AEC176C681B078F4CC53D6EB6AB76285537DDEE7C18\
678C72441B52EDBDDBC77E02D34E513F2AABF92F44109CAFE8242BD0ECBAC5604A94B02EA44D43C\
6804E9476E6FBC48043916BFA1485C6093603600273C9C33F13114D78064AE42F3DC466C7DA543D\
6989C8D71
70AD534AFBED2FA39EE9F40E20FCF9E2C861024DB98DDCBA1CD118C49CA55EEBC20D6BA51B2271C\
71928B693D6A73F67FEB1B4571448588B46194617D25D910C6A9A130CC963155CF34079CB218A44\
728A1F57E276D92A33386DDCA3D241DB78C8974ABD71DD05B0FA555709C9910D745185E6FE108E3\
7337F1907D0C56F8BFBF52B9704 % -E557905B56B13441574CAFCE2BD257A750B1A8B2C88D0E36\
74E18EF7C38DAC80D3948E17ED63AFF3B3467866E3B89D09A81B3D16B52F6A3C7134D3C6F5123E9\
75F617E3145BBFBE9AFD0D6E437EA4FF6F04BC67C4F1458B4F0F47B64 - 1C2BBBB19B74E86FD32\
769E8DB6A8C3B1B9986D57ED5419C2E855F7D5469E35E76334BB42F4C43E3F3A31B9697C171DAC4\
77D97935A7E1A14AD209D6CF811F55C6DB83AA9E6DFECFCD6669DED7171EE22A40C6181615CAF3F\
785296964
79$ status = $status
80$ output_expected = "0\0"
81$ gosub check_output
82$ if (output .ne. 1)
83$ then
84$ failure = "SCOtest"
85$ else
86$ delete 'f$parse( tmp_file_name)'
87$ endif
88$ endif
89$!
90$! Test for working 'print' command.
91$!
92$ if (failure .eqs. "")
93$ then
94$!
95$ define /user_mode sys$output 'tmp_file_name'
96$ bc
97print "OK"
98$ status = $status
99$ output_expected = "OK"
100$ gosub check_output
101$ if (output .ne. 1)
102$ then
103$ failure = "printtest"
104$ else
105$ delete 'f$parse( tmp_file_name)'
106$ endif
107$ endif
108$!
109$ if (failure .nes. "")
110$ then
111$ write sys$output -
112 "No working bc found. Consider installing GNU bc."
113$ exit %X00030000 ! %DCL-W-NORMAL
114$ endif
115$!
116$ exit
117$!
118$!
119$! Complete "bc" command failure.
120$!
121$ bc_fail:
122$ write sys$output -
123 "No ""bc"" program/symbol found. Consider installing GNU bc."
124$ exit %X00030000 ! %DCL-W-NORMAL
125$!
126$!
127$! Output check subroutine.
128$!
129$ check_output:
130$ eof = 0
131$ line_nr = 0
132$ open /read tmp_file 'tmp_file_name'
133$ c_o_loop:
134$ read /error = error_read tmp_file line
135$ goto ok_read
136$ error_read:
137$ eof = 1
138$ ok_read:
139$ line_expected = f$element( line_nr, "\", output_expected)
140$ line_nr = line_nr+ 1
141$ if ((line_expected .nes. "\") .and. (.not. eof) .and. -
142 (line_expected .eqs. line)) then goto c_o_loop
143$!
144$ if ((line_expected .eqs. "\") .and. eof)
145$ then
146$ output = 1
147$ else
148$ output = 0
149$ endif
150$ close tmp_file
151$ return
152$!
diff --git a/src/lib/libssl/test/bntest.com b/src/lib/libssl/test/bntest.com
deleted file mode 100644
index 6545d2e5a5..0000000000
--- a/src/lib/libssl/test/bntest.com
+++ /dev/null
@@ -1,76 +0,0 @@
1$!
2$! Analyze bntest output file.
3$!
4$! Exit status = 1 (success) if all tests passed,
5$! 0 (warning) if any test failed.
6$!
7$! 2011-02-20 SMS. Added code to skip "#" comments in the input file.
8$!
9$! 2010-04-05 SMS. New. Based (loosely) on perl code in bntest-vms.sh.
10$!
11$! Expect data like:
12$! test test_name1
13$! 0
14$! [...]
15$! test test_name2
16$! 0
17$! [...]
18$! [...]
19$!
20$! Some tests have no following "0" lines.
21$!
22$ result_file_name = f$edit( p1, "TRIM")
23$ if (result_file_name .eqs. "")
24$ then
25$ result_file_name = "bntest-vms.out"
26$ endif
27$!
28$ fail = 0
29$ passed = 0
30$ tests = 0
31$!
32$ on control_c then goto tidy
33$ on error then goto tidy
34$!
35$ open /read result_file 'result_file_name'
36$!
37$ read_loop:
38$ read /end = read_loop_end /error = tidy result_file line
39$ t1 = f$element( 0, " ", line)
40$!
41$! Skip "#" comment lines.
42$ if (f$extract( 0, 1, f$edit( line, "TRIM")) .eqs. "#") then -
43 goto read_loop
44$!
45$ if (t1 .eqs. "test")
46$ then
47$ passed = passed+ 1
48$ tests = tests+ 1
49$ fail = 1
50$ t2 = f$extract( 5, 1000, line)
51$ write sys$output "verify ''t2'"
52$ else
53$ if (t1 .nes. "0")
54$ then
55$ write sys$output "Failed! bc: ''line'"
56$ passed = passed- fail
57$ fail = 0
58$ endif
59$ endif
60$ goto read_loop
61$ read_loop_end:
62$ write sys$output "''passed'/''tests' tests passed"
63$!
64$ tidy:
65$ if f$trnlnm( "result_file", "LNM$PROCESS_TABLE", , "SUPERVISOR", , "CONFINE")
66$ then
67$ close result_file
68$ endif
69$!
70$ if ((tests .gt. 0) .and. (tests .eq. passed))
71$ then
72$ exit 1
73$ else
74$ exit 0
75$ endif
76$!
diff --git a/src/lib/libssl/test/clean_test.com b/src/lib/libssl/test/clean_test.com
deleted file mode 100755
index 7df633fbef..0000000000
--- a/src/lib/libssl/test/clean_test.com
+++ /dev/null
@@ -1,35 +0,0 @@
1$!
2$! Delete various test results files.
3$!
4$ def_orig = f$environment( "default")
5$ proc = f$environment( "procedure")
6$ proc_dev_dir = f$parse( "A.;", proc) - "A.;"
7$!
8$ on control_c then goto tidy
9$ on error then goto tidy
10$!
11$ set default 'proc_dev_dir'
12$!
13$ files := *.cms;*, *.srl;*, *.ss;*, -
14 cms.err;*, cms.out;*, newreq.pem;*, -
15 p.txt-zlib-cipher;*, -
16 smtst.txt;*, testkey.pem;*, testreq.pem;*, -
17 test_*.err;*, test_*.out;*, -
18 .rnd;*
19$!
20$ delim = ","
21$ i = 0
22$ loop:
23$ file = f$edit( f$element( i, delim, files), "trim")
24$ if (file .eqs. delim) then goto loop_end
25$ if (f$search( file) .nes. "") then -
26 delete 'p1' 'file'
27$ i = i+ 1
28$ goto loop
29$ loop_end:
30$!
31$ tidy:
32$
33$ if (f$type( def_orig) .nes. "") then -
34 set default 'def_orig'
35$!
diff --git a/src/lib/libssl/test/maketests.com b/src/lib/libssl/test/maketests.com
deleted file mode 100644
index 9b64cba234..0000000000
--- a/src/lib/libssl/test/maketests.com
+++ /dev/null
@@ -1,1087 +0,0 @@
1$!
2$! MAKETESTS.COM
3$! Written By: Robert Byer
4$! Vice-President
5$! A-Com Computing, Inc.
6$! byer@mail.all-net.net
7$!
8$! Changes by Richard Levitte <richard@levitte.org>
9$!
10$! This command files compiles and creates all the various different
11$! "test" programs for the different types of encryption for OpenSSL.
12$! It was written so it would try to determine what "C" compiler to
13$! use or you can specify which "C" compiler to use.
14$!
15$! The test "executables" will be placed in a directory called
16$! [.xxx.EXE.TEST] where "xxx" denotes ALPHA, IA64, or VAX, depending
17$! on your machine architecture.
18$!
19$! Specify DEBUG or NODEBUG P1 to compile with or without debugger
20$! information.
21$!
22$! Specify which compiler at P2 to try to compile under.
23$!
24$! VAXC For VAX C.
25$! DECC For DEC C.
26$! GNUC For GNU C.
27$!
28$! If you don't specify a compiler, it will try to determine which
29$! "C" compiler to use.
30$!
31$! P3, if defined, sets a TCP/IP library to use, through one of the following
32$! keywords:
33$!
34$! UCX for UCX
35$! SOCKETSHR for SOCKETSHR+NETLIB
36$!
37$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
38$!
39$!
40$! P5, if defined, specifies the C pointer size. Ignored on VAX.
41$! ("64=ARGV" gives more efficient code with HP C V7.3 or newer.)
42$! Supported values are:
43$!
44$! "" Compile with default (/NOPOINTER_SIZE)
45$! 32 Compile with /POINTER_SIZE=32 (SHORT)
46$! 64 Compile with /POINTER_SIZE=64[=ARGV] (LONG[=ARGV])
47$! (Automatically select ARGV if compiler supports it.)
48$! 64= Compile with /POINTER_SIZE=64 (LONG).
49$! 64=ARGV Compile with /POINTER_SIZE=64=ARGV (LONG=ARGV).
50$!
51$! P6, if defined, specifies a directory where ZLIB files (zlib.h,
52$! libz.olb) may be found. Optionally, a non-default object library
53$! name may be included ("dev:[dir]libz_64.olb", for example).
54$!
55$!
56$! Announce/identify.
57$!
58$ proc = f$environment( "procedure")
59$ write sys$output "@@@ "+ -
60 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
61$!
62$! Define A TCP/IP Library That We Will Need To Link To.
63$! (That is, If We Need To Link To One.)
64$!
65$ TCPIP_LIB = ""
66$ ZLIB_LIB = ""
67$!
68$! Check Which Architecture We Are Using.
69$!
70$ if (f$getsyi( "cpu") .lt. 128)
71$ then
72$ ARCH = "VAX"
73$ else
74$ ARCH = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
75$ if (ARCH .eqs. "") then ARCH = "UNK"
76$ endif
77$!
78$ ARCHD = ARCH
79$ LIB32 = "32"
80$ OPT_FILE = ""
81$ POINTER_SIZE = ""
82$!
83$! Check To Make Sure We Have Valid Command Line Parameters.
84$!
85$ GOSUB CHECK_OPTIONS
86$!
87$! Define The OBJ and EXE Directories.
88$!
89$ OBJ_DIR := SYS$DISK:[-.'ARCHD'.OBJ.TEST]
90$ EXE_DIR := SYS$DISK:[-.'ARCHD'.EXE.TEST]
91$!
92$! Specify the destination directory in any /MAP option.
93$!
94$ if (LINKMAP .eqs. "MAP")
95$ then
96$ LINKMAP = LINKMAP+ "=''EXE_DIR'"
97$ endif
98$!
99$! Add the location prefix to the linker options file name.
100$!
101$ if (OPT_FILE .nes. "")
102$ then
103$ OPT_FILE = EXE_DIR+ OPT_FILE
104$ endif
105$!
106$! Initialise logical names and such
107$!
108$ GOSUB INITIALISE
109$!
110$! Tell The User What Kind of Machine We Run On.
111$!
112$ WRITE SYS$OUTPUT "Host system architecture: ''ARCHD'"
113$!
114$! Define The CRYPTO-LIB We Are To Use.
115$!
116$ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB
117$!
118$! Define The SSL We Are To Use.
119$!
120$ SSL_LIB := SYS$DISK:[-.'ARCHD'.EXE.SSL]SSL_LIBSSL'LIB32'.OLB
121$!
122$! Create the OBJ and EXE Directories, if needed.
123$!
124$ IF (F$PARSE(OBJ_DIR).EQS."") THEN -
125 CREATE /DIRECTORY 'OBJ_DIR'
126$ IF (F$PARSE(EXE_DIR).EQS."") THEN -
127 CREATE /DIRECTORY 'EXE_DIR'
128$!
129$! Check To See If We Have The Proper Libraries.
130$!
131$ GOSUB LIB_CHECK
132$!
133$! Check To See If We Have A Linker Option File.
134$!
135$ GOSUB CHECK_OPT_FILE
136$!
137$! Define The TEST Files.
138$! NOTE: Some might think this list ugly. However, it's made this way to
139$! reflect the EXE variable in Makefile as closely as possible,
140$! thereby making it fairly easy to verify that the lists are the same.
141$!
142$ TEST_FILES = "BNTEST,ECTEST,ECDSATEST,ECDHTEST,IDEATEST,"+ -
143 "MD2TEST,MD4TEST,MD5TEST,HMACTEST,WP_TEST,"+ -
144 "RC2TEST,RC4TEST,RC5TEST,"+ -
145 "DESTEST,SHATEST,SHA1TEST,SHA256T,SHA512T,"+ -
146 "MDC2TEST,RMDTEST,"+ -
147 "RANDTEST,DHTEST,ENGINETEST,"+ -
148 "BFTEST,CASTTEST,SSLTEST,EXPTEST,DSATEST,RSA_TEST,"+ -
149 "EVP_TEST,IGETEST,JPAKETEST,SRPTEST,"+ -
150 "ASN1TEST"
151$! Should we add MTTEST,PQ_TEST,LH_TEST,DIVTEST,TABTEST as well?
152$!
153$! Additional directory information.
154$ T_D_BNTEST := [-.crypto.bn]
155$ T_D_ECTEST := [-.crypto.ec]
156$ T_D_ECDSATEST := [-.crypto.ecdsa]
157$ T_D_ECDHTEST := [-.crypto.ecdh]
158$ T_D_IDEATEST := [-.crypto.idea]
159$ T_D_MD2TEST := [-.crypto.md2]
160$ T_D_MD4TEST := [-.crypto.md4]
161$ T_D_MD5TEST := [-.crypto.md5]
162$ T_D_HMACTEST := [-.crypto.hmac]
163$ T_D_WP_TEST := [-.crypto.whrlpool]
164$ T_D_RC2TEST := [-.crypto.rc2]
165$ T_D_RC4TEST := [-.crypto.rc4]
166$ T_D_RC5TEST := [-.crypto.rc5]
167$ T_D_DESTEST := [-.crypto.des]
168$ T_D_SHATEST := [-.crypto.sha]
169$ T_D_SHA1TEST := [-.crypto.sha]
170$ T_D_SHA256T := [-.crypto.sha]
171$ T_D_SHA512T := [-.crypto.sha]
172$ T_D_MDC2TEST := [-.crypto.mdc2]
173$ T_D_RMDTEST := [-.crypto.ripemd]
174$ T_D_RANDTEST := [-.crypto.rand]
175$ T_D_DHTEST := [-.crypto.dh]
176$ T_D_ENGINETEST := [-.crypto.engine]
177$ T_D_BFTEST := [-.crypto.bf]
178$ T_D_CASTTEST := [-.crypto.cast]
179$ T_D_SSLTEST := [-.ssl]
180$ T_D_EXPTEST := [-.crypto.bn]
181$ T_D_DSATEST := [-.crypto.dsa]
182$ T_D_RSA_TEST := [-.crypto.rsa]
183$ T_D_EVP_TEST := [-.crypto.evp]
184$ T_D_IGETEST := [-.test]
185$ T_D_JPAKETEST := [-.crypto.jpake]
186$ T_D_SRPTEST := [-.crypto.srp]
187$ T_D_ASN1TEST := [-.test]
188$!
189$ TCPIP_PROGRAMS = ",,"
190$ IF COMPILER .EQS. "VAXC" THEN -
191 TCPIP_PROGRAMS = ",SSLTEST,"
192$!
193$! Define A File Counter And Set It To "0".
194$!
195$ FILE_COUNTER = 0
196$!
197$! Top Of The File Loop.
198$!
199$ NEXT_FILE:
200$!
201$! O.K, Extract The File Name From The File List.
202$!
203$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",TEST_FILES)
204$!
205$! Check To See If We Are At The End Of The File List.
206$!
207$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
208$!
209$! Increment The Counter.
210$!
211$ FILE_COUNTER = FILE_COUNTER + 1
212$!
213$! Create The Source File Name.
214$!
215$ SOURCE_FILE = "SYS$DISK:" + T_D_'FILE_NAME' + FILE_NAME + ".C"
216$!
217$! Create The Object File Name.
218$!
219$ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
220$!
221$! Create The Executable File Name.
222$!
223$ EXE_FILE = EXE_DIR + FILE_NAME + ".EXE"
224$ ON WARNING THEN GOTO NEXT_FILE
225$!
226$! Check To See If The File We Want To Compile Actually Exists.
227$!
228$ IF (F$SEARCH(SOURCE_FILE).EQS."")
229$ THEN
230$!
231$! Tell The User That The File Dosen't Exist.
232$!
233$ WRITE SYS$OUTPUT ""
234$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
235$ WRITE SYS$OUTPUT ""
236$!
237$! Exit The Build.
238$!
239$ GOTO EXIT
240$ ENDIF
241$!
242$! Tell The User What We Are Building.
243$!
244$ WRITE SYS$OUTPUT "Building The ",FILE_NAME," Test Program."
245$!
246$! Compile The File.
247$!
248$ ON ERROR THEN GOTO NEXT_FILE
249$ CC /OBJECT='OBJECT_FILE' 'SOURCE_FILE'
250$ ON WARNING THEN GOTO NEXT_FILE
251$!
252$! Check If What We Are About To Compile Works Without A TCP/IP Library.
253$!
254$ IF ((TCPIP_LIB.EQS."").AND.((TCPIP_PROGRAMS-FILE_NAME).NES.TCPIP_PROGRAMS))
255$ THEN
256$!
257$! Inform The User That A TCP/IP Library Is Needed To Compile This Program.
258$!
259$ WRITE SYS$OUTPUT -
260 FILE_NAME," Needs A TCP/IP Library. Can't Link. Skipping..."
261$ GOTO NEXT_FILE
262$!
263$! End The TCP/IP Library Check.
264$!
265$ ENDIF
266$!
267$! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
268$! Check To See If We Are To Link With A Specific TCP/IP Library.
269$!
270$! Don't Link With The RSAREF Routines And TCP/IP Library.
271$!
272$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXECTABLE = 'EXE_FILE' -
273 'OBJECT_FILE', -
274 'SSL_LIB' /LIBRARY, -
275 'CRYPTO_LIB' /LIBRARY -
276 'TCPIP_LIB' -
277 'ZLIB_LIB' -
278 ,'OPT_FILE' /OPTIONS
279$!
280$! Go Back And Do It Again.
281$!
282$ GOTO NEXT_FILE
283$!
284$! All Done With This Library Part.
285$!
286$ FILE_DONE:
287$!
288$! All Done, Time To Exit.
289$!
290$ EXIT:
291$ GOSUB CLEANUP
292$ EXIT
293$!
294$! Check For The Link Option FIle.
295$!
296$ CHECK_OPT_FILE:
297$!
298$! Check To See If We Need To Make A VAX C Option File.
299$!
300$ IF (COMPILER.EQS."VAXC")
301$ THEN
302$!
303$! Check To See If We Already Have A VAX C Linker Option File.
304$!
305$ IF (F$SEARCH(OPT_FILE).EQS."")
306$ THEN
307$!
308$! We Need A VAX C Linker Option File.
309$!
310$ CREATE 'OPT_FILE'
311$DECK
312!
313! Default System Options File To Link Against
314! The Sharable VAX C Runtime Library.
315!
316SYS$SHARE:VAXCRTL.EXE /SHAREABLE
317$EOD
318$!
319$! End The Option File Check.
320$!
321$ ENDIF
322$!
323$! End The VAXC Check.
324$!
325$ ENDIF
326$!
327$! Check To See If We Need A GNU C Option File.
328$!
329$ IF (COMPILER.EQS."GNUC")
330$ THEN
331$!
332$! Check To See If We Already Have A GNU C Linker Option File.
333$!
334$ IF (F$SEARCH(OPT_FILE).EQS."")
335$ THEN
336$!
337$! We Need A GNU C Linker Option File.
338$!
339$ CREATE 'OPT_FILE'
340$DECK
341!
342! Default System Options File To Link Against
343! The Sharable C Runtime Library.
344!
345GNU_CC:[000000]GCCLIB.OLB /LIBRARY
346SYS$SHARE:VAXCRTL.EXE /SHAREABLE
347$EOD
348$!
349$! End The Option File Check.
350$!
351$ ENDIF
352$!
353$! End The GNU C Check.
354$!
355$ ENDIF
356$!
357$! Check To See If We Need A DEC C Option File.
358$!
359$ IF (COMPILER.EQS."DECC")
360$ THEN
361$!
362$! Check To See If We Already Have A DEC C Linker Option File.
363$!
364$ IF (F$SEARCH(OPT_FILE).EQS."")
365$ THEN
366$!
367$! Figure Out If We Need A non-VAX Or A VAX Linker Option File.
368$!
369$ IF (ARCH.EQS."VAX")
370$ THEN
371$!
372$! We Need A DEC C Linker Option File For VAX.
373$!
374$ CREATE 'OPT_FILE'
375$DECK
376!
377! Default System Options File To Link Against
378! The Sharable DEC C Runtime Library.
379!
380SYS$SHARE:DECC$SHR.EXE /SHAREABLE
381$EOD
382$!
383$! Else...
384$!
385$ ELSE
386$!
387$! Create The non-VAX Linker Option File.
388$!
389$ CREATE 'OPT_FILE'
390$DECK
391!
392! Default System Options File For non-VAX To Link Against
393! The Sharable C Runtime Library.
394!
395SYS$SHARE:CMA$OPEN_LIB_SHR.EXE /SHAREABLE
396SYS$SHARE:CMA$OPEN_RTL.EXE /SHAREABLE
397$EOD
398$!
399$! End The DEC C Option File Check.
400$!
401$ ENDIF
402$!
403$! End The Option File Search.
404$!
405$ ENDIF
406$!
407$! End The DEC C Check.
408$!
409$ ENDIF
410$!
411$! Tell The User What Linker Option File We Are Using.
412$!
413$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
414$!
415$! Time To RETURN.
416$!
417$ RETURN
418$!
419$! Check To See If We Have The Appropiate Libraries.
420$!
421$ LIB_CHECK:
422$!
423$! Look For The Library LIBCRYPTO.OLB.
424$!
425$ IF (F$SEARCH(CRYPTO_LIB).EQS."")
426$ THEN
427$!
428$! Tell The User We Can't Find The LIBCRYPTO.OLB Library.
429$!
430$ WRITE SYS$OUTPUT ""
431$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"."
432$ WRITE SYS$OUTPUT "We Can't Link Without It."
433$ WRITE SYS$OUTPUT ""
434$!
435$! Since We Can't Link Without It, Exit.
436$!
437$ EXIT
438$!
439$! End The Crypto Library Check.
440$!
441$ ENDIF
442$!
443$! Look For The Library LIBSSL.OLB.
444$!
445$ IF (F$SEARCH(SSL_LIB).EQS."")
446$ THEN
447$!
448$! Tell The User We Can't Find The LIBSSL.OLB Library.
449$!
450$ WRITE SYS$OUTPUT ""
451$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"."
452$ WRITE SYS$OUTPUT "Some Of The Test Programs Need To Link To It."
453$ WRITE SYS$OUTPUT ""
454$!
455$! Since We Can't Link Without It, Exit.
456$!
457$ EXIT
458$!
459$! End The SSL Library Check.
460$!
461$ ENDIF
462$!
463$! Time To Return.
464$!
465$ RETURN
466$!
467$! Check The User's Options.
468$!
469$ CHECK_OPTIONS:
470$!
471$! Set basic C compiler /INCLUDE directories.
472$!
473$ CC_INCLUDES = "SYS$DISK:[-],SYS$DISK:[-.CRYPTO]"
474$!
475$! Check To See If P1 Is Blank.
476$!
477$ IF (P1.EQS."NODEBUG")
478$ THEN
479$!
480$! P1 Is NODEBUG, So Compile Without Debugger Information.
481$!
482$ DEBUGGER = "NODEBUG"
483$ LINKMAP = "NOMAP"
484$ TRACEBACK = "NOTRACEBACK"
485$ GCC_OPTIMIZE = "OPTIMIZE"
486$ CC_OPTIMIZE = "OPTIMIZE"
487$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
488$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
489$!
490$! Else...
491$!
492$ ELSE
493$!
494$! Check To See If We Are To Compile With Debugger Information.
495$!
496$ IF (P1.EQS."DEBUG")
497$ THEN
498$!
499$! Compile With Debugger Information.
500$!
501$ DEBUGGER = "DEBUG"
502$ LINKMAP = "MAP"
503$ TRACEBACK = "TRACEBACK"
504$ GCC_OPTIMIZE = "NOOPTIMIZE"
505$ CC_OPTIMIZE = "NOOPTIMIZE"
506$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
507$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
508$!
509$! Else...
510$!
511$ ELSE
512$!
513$! Tell The User Entered An Invalid Option.
514$!
515$ WRITE SYS$OUTPUT ""
516$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
517$ WRITE SYS$OUTPUT ""
518$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
519$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
520$ WRITE SYS$OUTPUT ""
521$!
522$! Time To EXIT.
523$!
524$ EXIT
525$!
526$! End The Valid Argument Check.
527$!
528$ ENDIF
529$!
530$! End The P1 Check.
531$!
532$ ENDIF
533$!
534$! Check P5 (POINTER_SIZE).
535$!
536$ IF (P5 .NES. "") .AND. (ARCH .NES. "VAX")
537$ THEN
538$!
539$ IF (P5 .EQS. "32")
540$ THEN
541$ POINTER_SIZE = " /POINTER_SIZE=32"
542$ ELSE
543$ POINTER_SIZE = F$EDIT( P5, "COLLAPSE, UPCASE")
544$ IF ((POINTER_SIZE .EQS. "64") .OR. -
545 (POINTER_SIZE .EQS. "64=") .OR. -
546 (POINTER_SIZE .EQS. "64=ARGV"))
547$ THEN
548$ ARCHD = ARCH+ "_64"
549$ LIB32 = ""
550$ IF (F$EXTRACT( 2, 1, POINTER_SIZE) .EQS. "=")
551$ THEN
552$! Explicit user choice: "64" or "64=ARGV".
553$ IF (POINTER_SIZE .EQS. "64=") THEN POINTER_SIZE = "64"
554$ ELSE
555$ SET NOON
556$ DEFINE /USER_MODE SYS$OUTPUT NL:
557$ DEFINE /USER_MODE SYS$ERROR NL:
558$ CC /NOLIST /NOOBJECT /POINTER_SIZE=64=ARGV NL:
559$ IF ($STATUS .AND. %X0FFF0000) .EQ. %X00030000
560$ THEN
561$ ! If we got here, it means DCL complained like this:
562$ ! %DCL-W-NOVALU, value not allowed - remove value specification
563$ ! \64=\
564$ !
565$ ! If the compiler was run, logicals defined in /USER would
566$ ! have been deassigned automatically. However, when DCL
567$ ! complains, they aren't, so we do it here (it might be
568$ ! unnecessary, but just in case there will be another error
569$ ! message further on that we don't want to miss)
570$ DEASSIGN /USER_MODE SYS$ERROR
571$ DEASSIGN /USER_MODE SYS$OUTPUT
572$ ELSE
573$ POINTER_SIZE = POINTER_SIZE + "=ARGV"
574$ ENDIF
575$ SET ON
576$ ENDIF
577$ POINTER_SIZE = " /POINTER_SIZE=''POINTER_SIZE'"
578$ ELSE
579$!
580$! Tell The User Entered An Invalid Option.
581$!
582$ WRITE SYS$OUTPUT ""
583$ WRITE SYS$OUTPUT "The Option ", P5, -
584 " Is Invalid. The Valid Options Are:"
585$ WRITE SYS$OUTPUT ""
586$ WRITE SYS$OUTPUT -
587 " """" : Compile with default (short) pointers."
588$ WRITE SYS$OUTPUT -
589 " 32 : Compile with 32-bit (short) pointers."
590$ WRITE SYS$OUTPUT -
591 " 64 : Compile with 64-bit (long) pointers (auto ARGV)."
592$ WRITE SYS$OUTPUT -
593 " 64= : Compile with 64-bit (long) pointers (no ARGV)."
594$ WRITE SYS$OUTPUT -
595 " 64=ARGV : Compile with 64-bit (long) pointers (ARGV)."
596$ WRITE SYS$OUTPUT ""
597$!
598$! Time To EXIT.
599$!
600$ EXIT
601$!
602$ ENDIF
603$!
604$ ENDIF
605$!
606$! End The P5 (POINTER_SIZE) Check.
607$!
608$ ENDIF
609$!
610$! Check To See If P2 Is Blank.
611$!
612$ IF (P2.EQS."")
613$ THEN
614$!
615$! O.K., The User Didn't Specify A Compiler, Let's Try To
616$! Find Out Which One To Use.
617$!
618$! Check To See If We Have GNU C.
619$!
620$ IF (F$TRNLNM("GNU_CC").NES."")
621$ THEN
622$!
623$! Looks Like GNUC, Set To Use GNUC.
624$!
625$ P2 = "GNUC"
626$!
627$! End The GNU C Compiler Check.
628$!
629$ ELSE
630$!
631$! Check To See If We Have VAXC Or DECC.
632$!
633$ IF (ARCH.NES."VAX").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
634$ THEN
635$!
636$! Looks Like DECC, Set To Use DECC.
637$!
638$ P2 = "DECC"
639$!
640$! Else...
641$!
642$ ELSE
643$!
644$! Looks Like VAXC, Set To Use VAXC.
645$!
646$ P2 = "VAXC"
647$!
648$! End The VAXC Compiler Check.
649$!
650$ ENDIF
651$!
652$! End The DECC & VAXC Compiler Check.
653$!
654$ ENDIF
655$!
656$! End The Compiler Check.
657$!
658$ ENDIF
659$!
660$! Check To See If We Have A Option For P3.
661$!
662$ IF (P3.EQS."")
663$ THEN
664$!
665$! Find out what socket library we have available
666$!
667$ IF F$PARSE("SOCKETSHR:") .NES. ""
668$ THEN
669$!
670$! We have SOCKETSHR, and it is my opinion that it's the best to use.
671$!
672$ P3 = "SOCKETSHR"
673$!
674$! Tell the user
675$!
676$ WRITE SYS$OUTPUT "Using SOCKETSHR for TCP/IP"
677$!
678$! Else, let's look for something else
679$!
680$ ELSE
681$!
682$! Like UCX (the reason to do this before Multinet is that the UCX
683$! emulation is easier to use...)
684$!
685$ IF F$TRNLNM("UCX$IPC_SHR") .NES. "" -
686 .OR. F$PARSE("SYS$SHARE:UCX$IPC_SHR.EXE") .NES. "" -
687 .OR. F$PARSE("SYS$LIBRARY:UCX$IPC.OLB") .NES. ""
688$ THEN
689$!
690$! Last resort: a UCX or UCX-compatible library
691$!
692$ P3 = "UCX"
693$!
694$! Tell the user
695$!
696$ WRITE SYS$OUTPUT "Using UCX or an emulation thereof for TCP/IP"
697$!
698$! That was all...
699$!
700$ ENDIF
701$ ENDIF
702$ ENDIF
703$!
704$! Set Up Initial CC Definitions, Possibly With User Ones
705$!
706$ CCDEFS = "TCPIP_TYPE_''P3'"
707$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
708$ CCEXTRAFLAGS = ""
709$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
710$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
711$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
712 CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
713$!
714$! Check To See If We Have A ZLIB Option.
715$!
716$ ZLIB = P6
717$ IF (ZLIB .NES. "")
718$ THEN
719$!
720$! Check for expected ZLIB files.
721$!
722$ err = 0
723$ file1 = f$parse( "zlib.h", ZLIB, , , "SYNTAX_ONLY")
724$ if (f$search( file1) .eqs. "")
725$ then
726$ WRITE SYS$OUTPUT ""
727$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
728$ WRITE SYS$OUTPUT " Can't find header: ''file1'"
729$ err = 1
730$ endif
731$ file1 = f$parse( "A.;", ZLIB)- "A.;"
732$!
733$ file2 = f$parse( ZLIB, "libz.olb", , , "SYNTAX_ONLY")
734$ if (f$search( file2) .eqs. "")
735$ then
736$ if (err .eq. 0)
737$ then
738$ WRITE SYS$OUTPUT ""
739$ WRITE SYS$OUTPUT "The Option ", ZLIB, " Is Invalid."
740$ endif
741$ WRITE SYS$OUTPUT " Can't find library: ''file2'"
742$ WRITE SYS$OUTPUT ""
743$ err = err+ 2
744$ endif
745$ if (err .eq. 1)
746$ then
747$ WRITE SYS$OUTPUT ""
748$ endif
749$!
750$ if (err .ne. 0)
751$ then
752$ GOTO EXIT
753$ endif
754$!
755$ CCDEFS = """ZLIB=1"", "+ CCDEFS
756$ CC_INCLUDES = CC_INCLUDES+ ", "+ file1
757$ ZLIB_LIB = ", ''file2' /library"
758$!
759$! Print info
760$!
761$ WRITE SYS$OUTPUT "ZLIB library spec: ", file2
762$!
763$! End The P8 Check.
764$!
765$ ENDIF
766$!
767$! Check To See If The User Entered A Valid Parameter.
768$!
769$ IF (P2.EQS."VAXC").OR.(P2.EQS."DECC").OR.(P2.EQS."GNUC")
770$ THEN
771$!
772$! Check To See If The User Wanted DECC.
773$!
774$ IF (P2.EQS."DECC")
775$ THEN
776$!
777$! Looks Like DECC, Set To Use DECC.
778$!
779$ COMPILER = "DECC"
780$!
781$! Tell The User We Are Using DECC.
782$!
783$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
784$!
785$! Use DECC...
786$!
787$ CC = "CC"
788$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
789 THEN CC = "CC /DECC"
790$ CC = CC + " /''CC_OPTIMIZE' /''DEBUGGER' /STANDARD=RELAXED"+ -
791 "''POINTER_SIZE' /NOLIST /PREFIX=ALL" + -
792 " /INCLUDE=(''CC_INCLUDES') " + CCEXTRAFLAGS
793$!
794$! Define The Linker Options File Name.
795$!
796$ OPT_FILE = "VAX_DECC_OPTIONS.OPT"
797$!
798$! End DECC Check.
799$!
800$ ENDIF
801$!
802$! Check To See If We Are To Use VAXC.
803$!
804$ IF (P2.EQS."VAXC")
805$ THEN
806$!
807$! Looks Like VAXC, Set To Use VAXC.
808$!
809$ COMPILER = "VAXC"
810$!
811$! Tell The User We Are Using VAX C.
812$!
813$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
814$!
815$! Compile Using VAXC.
816$!
817$ CC = "CC"
818$ IF ARCH.NES."VAX"
819$ THEN
820$ WRITE SYS$OUTPUT "There is no VAX C on ''ARCH'!"
821$ EXIT
822$ ENDIF
823$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC /VAXC"
824$ CC = CC + "/''CC_OPTIMIZE' /''DEBUGGER' /NOLIST" + -
825 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
826$ CCDEFS = CCDEFS + ",""VAXC"""
827$!
828$! Define <sys> As SYS$COMMON:[SYSLIB]
829$!
830$ DEFINE /NOLOG SYS SYS$COMMON:[SYSLIB]
831$!
832$! Define The Linker Options File Name.
833$!
834$ OPT_FILE = "VAX_VAXC_OPTIONS.OPT"
835$!
836$! End VAXC Check
837$!
838$ ENDIF
839$!
840$! Check To See If We Are To Use GNU C.
841$!
842$ IF (P2.EQS."GNUC")
843$ THEN
844$!
845$! Looks Like GNUC, Set To Use GNUC.
846$!
847$ COMPILER = "GNUC"
848$!
849$! Tell The User We Are Using GNUC.
850$!
851$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
852$!
853$! Use GNU C...
854$!
855$ CC = "GCC /NOCASE_HACK /''GCC_OPTIMIZE' /''DEBUGGER' /NOLIST" + -
856 "/INCLUDE=(''CC_INCLUDES')" + CCEXTRAFLAGS
857$!
858$! Define The Linker Options File Name.
859$!
860$ OPT_FILE = "VAX_GNUC_OPTIONS.OPT"
861$!
862$! End The GNU C Check.
863$!
864$ ENDIF
865$!
866$! Set up default defines
867$!
868$ CCDEFS = """FLAT_INC=1""," + CCDEFS
869$!
870$! Finish up the definition of CC.
871$!
872$ IF COMPILER .EQS. "DECC"
873$ THEN
874$ IF CCDISABLEWARNINGS .EQS. ""
875$ THEN
876$ CC4DISABLEWARNINGS = "DOLLARID"
877$ ELSE
878$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID"
879$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
880$ ENDIF
881$ CC4DISABLEWARNINGS = " /WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))"
882$ ELSE
883$ CCDISABLEWARNINGS = ""
884$ CC4DISABLEWARNINGS = ""
885$ ENDIF
886$ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
887$!
888$! Show user the result
889$!
890$ WRITE /SYMBOL SYS$OUTPUT "Main Compiling Command: ", CC
891$!
892$! Else The User Entered An Invalid Argument.
893$!
894$ ELSE
895$!
896$! Tell The User We Don't Know What They Want.
897$!
898$ WRITE SYS$OUTPUT ""
899$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
900$ WRITE SYS$OUTPUT ""
901$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
902$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
903$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
904$ WRITE SYS$OUTPUT ""
905$!
906$! Time To EXIT.
907$!
908$ EXIT
909$ ENDIF
910$!
911$! Time to check the contents, and to make sure we get the correct library.
912$!
913$ IF P3.EQS."SOCKETSHR" .OR. P3.EQS."MULTINET" .OR. P3.EQS."UCX" -
914 .OR. P3.EQS."TCPIP" .OR. P3.EQS."NONE"
915$ THEN
916$!
917$! Check to see if SOCKETSHR was chosen
918$!
919$ IF P3.EQS."SOCKETSHR"
920$ THEN
921$!
922$! Set the library to use SOCKETSHR
923$!
924$ TCPIP_LIB = ",SYS$DISK:[-.VMS]SOCKETSHR_SHR.OPT /OPTIONS"
925$!
926$! Done with SOCKETSHR
927$!
928$ ENDIF
929$!
930$! Check to see if MULTINET was chosen
931$!
932$ IF P3.EQS."MULTINET"
933$ THEN
934$!
935$! Set the library to use UCX emulation.
936$!
937$ P3 = "UCX"
938$!
939$! Done with MULTINET
940$!
941$ ENDIF
942$!
943$! Check to see if UCX was chosen
944$!
945$ IF P3.EQS."UCX"
946$ THEN
947$!
948$! Set the library to use UCX.
949$!
950$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC.OPT /OPTIONS"
951$ IF F$TRNLNM("UCX$IPC_SHR") .NES. ""
952$ THEN
953$ TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_DECC_LOG.OPT /OPTIONS"
954$ ELSE
955$ IF COMPILER .NES. "DECC" .AND. ARCH .EQS. "VAX" THEN -
956 TCPIP_LIB = ",SYS$DISK:[-.VMS]UCX_SHR_VAXC.OPT /OPTIONS"
957$ ENDIF
958$!
959$! Done with UCX
960$!
961$ ENDIF
962$!
963$! Check to see if TCPIP was chosen
964$!
965$ IF P3.EQS."TCPIP"
966$ THEN
967$!
968$! Set the library to use TCPIP (post UCX).
969$!
970$ TCPIP_LIB = ",SYS$DISK:[-.VMS]TCPIP_SHR_DECC.OPT /OPTIONS"
971$!
972$! Done with TCPIP
973$!
974$ ENDIF
975$!
976$! Check to see if NONE was chosen
977$!
978$ IF P3.EQS."NONE"
979$ THEN
980$!
981$! Do not use a TCPIP library.
982$!
983$ TCPIP_LIB = ""
984$!
985$! Done with NONE
986$!
987$ ENDIF
988$!
989$! Print info
990$!
991$ WRITE SYS$OUTPUT "TCP/IP library spec: ", TCPIP_LIB- ","
992$!
993$! Else The User Entered An Invalid Argument.
994$!
995$ ELSE
996$!
997$! Tell The User We Don't Know What They Want.
998$!
999$ WRITE SYS$OUTPUT ""
1000$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
1001$ WRITE SYS$OUTPUT ""
1002$ WRITE SYS$OUTPUT " SOCKETSHR : To link with SOCKETSHR TCP/IP library."
1003$ WRITE SYS$OUTPUT " UCX : To link with UCX TCP/IP library."
1004$ WRITE SYS$OUTPUT " TCPIP : To link with TCPIP (post UCX) TCP/IP library."
1005$ WRITE SYS$OUTPUT ""
1006$!
1007$! Time To EXIT.
1008$!
1009$ EXIT
1010$!
1011$! Done with TCP/IP libraries
1012$!
1013$ ENDIF
1014$!
1015$! Special Threads For OpenVMS v7.1 Or Later
1016$!
1017$! Written By: Richard Levitte
1018$! richard@levitte.org
1019$!
1020$!
1021$! Check To See If We Have A Option For P4.
1022$!
1023$ IF (P4.EQS."")
1024$ THEN
1025$!
1026$! Get The Version Of VMS We Are Using.
1027$!
1028$ ISSEVEN :=
1029$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
1030$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
1031$!
1032$! Check To See If The VMS Version Is v7.1 Or Later.
1033$!
1034$ IF (TMP.GE.71)
1035$ THEN
1036$!
1037$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
1038$!
1039$ ISSEVEN := ,PTHREAD_USE_D4
1040$!
1041$! End The VMS Version Check.
1042$!
1043$ ENDIF
1044$!
1045$! End The P4 Check.
1046$!
1047$ ENDIF
1048$!
1049$! Time To RETURN...
1050$!
1051$ RETURN
1052$!
1053$ INITIALISE:
1054$!
1055$! Save old value of the logical name OPENSSL
1056$!
1057$ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
1058$!
1059$! Save directory information
1060$!
1061$ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
1062$ __HERE = F$EDIT(__HERE,"UPCASE")
1063$ __TOP = __HERE - "TEST]"
1064$ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
1065$!
1066$! Set up the logical name OPENSSL to point at the include directory
1067$!
1068$ DEFINE OPENSSL /NOLOG '__INCLUDE'
1069$!
1070$! Done
1071$!
1072$ RETURN
1073$!
1074$ CLEANUP:
1075$!
1076$! Restore the logical name OPENSSL if it had a value
1077$!
1078$ IF __SAVE_OPENSSL .EQS. ""
1079$ THEN
1080$ DEASSIGN OPENSSL
1081$ ELSE
1082$ DEFINE /NOLOG OPENSSL '__SAVE_OPENSSL'
1083$ ENDIF
1084$!
1085$! Done
1086$!
1087$ RETURN
diff --git a/src/lib/libssl/test/tcrl.com b/src/lib/libssl/test/tcrl.com
deleted file mode 100644
index dd96a2b6dd..0000000000
--- a/src/lib/libssl/test/tcrl.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TCRL.COM -- Tests crl keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl crl"
13$
14$ t = "testcrl.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing CRL conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$! write sys$output "p -> t"
29$! 'cmd' -in fff.p -inform p -outform t -out f.t
30$! if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$! write sys$output "t -> d"
39$! 'cmd' -in f.t -inform t -outform d -out ff.d2
40$! if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$! write sys$output "d -> t"
46$! 'cmd' -in f.d -inform d -outform t -out ff.t1
47$! if $severity .ne. 1 then exit 3
48$! write sys$output "t -> t"
49$! 'cmd' -in f.t -inform t -outform t -out ff.t2
50$! if $severity .ne. 1 then exit 3
51$! write sys$output "p -> t"
52$! 'cmd' -in f.p -inform p -outform t -out ff.t3
53$! if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$! write sys$output "t -> p"
59$! 'cmd' -in f.t -inform t -outform p -out ff.p2
60$! if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$! backup/compare fff.p ff.p2
70$! if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$! backup/compare f.t ff.t1
75$! if $severity .ne. 1 then exit 3
76$! backup/compare f.t ff.t2
77$! if $severity .ne. 1 then exit 3
78$! backup/compare f.t ff.t3
79$! if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$! backup/compare f.p ff.p2
84$! if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/test/testca.com b/src/lib/libssl/test/testca.com
deleted file mode 100644
index 78cda9ec5a..0000000000
--- a/src/lib/libssl/test/testca.com
+++ /dev/null
@@ -1,52 +0,0 @@
1$! TESTCA.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. "64") then __arch = __arch+ "_64"
9$
10$ openssl = "mcr ''exe_dir'openssl"
11$
12$ SSLEAY_CONFIG="-config ""CAss.cnf"""
13$
14$ set noon
15$ if f$search("demoCA.dir") .nes. ""
16$ then
17$ @[-.util]deltree [.demoCA]*.*
18$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) demoCA.dir;*
19$ delete demoCA.dir;*
20$ endif
21$ set on
22$ open/read sys$ca_input VMSca-response.1
23$ @[-.apps]CA.com -input sys$ca_input -newca
24$ close sys$ca_input
25$ if $severity .ne. 1 then exit 3
26$
27$
28$ SSLEAY_CONFIG="-config ""Uss.cnf"""
29$ @[-.apps]CA.com -newreq
30$ if $severity .ne. 1 then exit 3
31$
32$
33$ SSLEAY_CONFIG="-config [-.apps]openssl-vms.cnf"
34$ open/read sys$ca_input VMSca-response.2
35$ @[-.apps]CA.com -input sys$ca_input -sign
36$ close sys$ca_input
37$ if $severity .ne. 1 then exit 3
38$
39$
40$ @[-.apps]CA.com -verify newcert.pem
41$ if $severity .ne. 1 then exit 3
42$
43$ set noon
44$ @[-.util]deltree [.demoCA]*.*
45$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) demoCA.dir;*
46$ delete demoCA.dir;*
47$ if f$search("newcert.pem") .nes. "" then delete newcert.pem;*
48$ if f$search("newcert.pem") .nes. "" then delete newreq.pem;*
49$ set on
50$! #usage: CA -newcert|-newreq|-newca|-sign|-verify
51$
52$ exit
diff --git a/src/lib/libssl/test/testenc.com b/src/lib/libssl/test/testenc.com
deleted file mode 100644
index 75acd6f07f..0000000000
--- a/src/lib/libssl/test/testenc.com
+++ /dev/null
@@ -1,66 +0,0 @@
1$! TESTENC.COM -- Test encoding and decoding
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. 64) then __arch = __arch+ "_64"
9$
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$ testsrc = "makefile."
12$ test = "p.txt"
13$ cmd = "mcr ''exe_dir'openssl"
14$
15$ if f$search(test) .nes. "" then delete 'test';*
16$ convert/fdl=sys$input: 'testsrc' 'test'
17RECORD
18 FORMAT STREAM_LF
19$
20$ if f$search(test+"-cipher") .nes. "" then delete 'test'-cipher;*
21$ if f$search(test+"-clear") .nes. "" then delete 'test'-clear;*
22$
23$ write sys$output "cat"
24$ 'cmd' enc -in 'test' -out 'test'-cipher
25$ 'cmd' enc -in 'test'-cipher -out 'test'-clear
26$ backup/compare 'test' 'test'-clear
27$ if $severity .ne. 1 then exit 3
28$ delete 'test'-cipher;*,'test'-clear;*
29$
30$ write sys$output "base64"
31$ 'cmd' enc -a -e -in 'test' -out 'test'-cipher
32$ 'cmd' enc -a -d -in 'test'-cipher -out 'test'-clear
33$ backup/compare 'test' 'test'-clear
34$ if $severity .ne. 1 then exit 3
35$ delete 'test'-cipher;*,'test'-clear;*
36$
37$ define/user sys$output 'test'-cipher-commands
38$ 'cmd' list-cipher-commands
39$ open/read f 'test'-cipher-commands
40$ loop_cipher_commands:
41$ read/end=loop_cipher_commands_end f i
42$ write sys$output i
43$
44$ if f$search(test+"-"+i+"-cipher") .nes. "" then -
45 delete 'test'-'i'-cipher;*
46$ if f$search(test+"-"+i+"-clear") .nes. "" then -
47 delete 'test'-'i'-clear;*
48$
49$ 'cmd' 'i' -bufsize 113 -e -k test -in 'test' -out 'test'-'i'-cipher
50$ 'cmd' 'i' -bufsize 157 -d -k test -in 'test'-'i'-cipher -out 'test'-'i'-clear
51$ backup/compare 'test' 'test'-'i'-clear
52$ if $severity .ne. 1 then exit 3
53$ delete 'test'-'i'-cipher;*,'test'-'i'-clear;*
54$
55$ write sys$output i," base64"
56$ 'cmd' 'i' -bufsize 113 -a -e -k test -in 'test' -out 'test'-'i'-cipher
57$ 'cmd' 'i' -bufsize 157 -a -d -k test -in 'test'-'i'-cipher -out 'test'-'i'-clear
58$ backup/compare 'test' 'test'-'i'-clear
59$ if $severity .ne. 1 then exit 3
60$ delete 'test'-'i'-cipher;*,'test'-'i'-clear;*
61$
62$ goto loop_cipher_commands
63$ loop_cipher_commands_end:
64$ close f
65$ delete 'test'-cipher-commands;*
66$ delete 'test';*
diff --git a/src/lib/libssl/test/testgen.com b/src/lib/libssl/test/testgen.com
deleted file mode 100644
index e076da2f30..0000000000
--- a/src/lib/libssl/test/testgen.com
+++ /dev/null
@@ -1,58 +0,0 @@
1$! TESTGEN.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$ if (p1 .eqs. 64) then __arch = __arch+ "_64"
8$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
9$
10$ T = "testcert"
11$ KEY = 512
12$ CA = "[-.certs]testca.pem"
13$
14$ set noon
15$ if f$search(T+".1;*") .nes. "" then delete 'T'.1;*
16$ if f$search(T+".2;*") .nes. "" then delete 'T'.2;*
17$ if f$search(T+".key;*") .nes. "" then delete 'T'.key;*
18$ set on
19$
20$ write sys$output "generating certificate request"
21$
22$ append/new nl: .rnd
23$ open/append random_file .rnd
24$ write random_file -
25 "string to make the random number generator think it has entropy"
26$ close random_file
27$
28$ set noon
29$ define/user sys$output nla0:
30$ mcr 'exe_dir'openssl no-rsa
31$ save_severity=$SEVERITY
32$ set on
33$ if save_severity
34$ then
35$ req_new="-newkey dsa:[-.apps]dsa512.pem"
36$ else
37$ req_new="-new"
38$ write sys$output -
39 "There should be a 2 sequences of .'s and some +'s."
40$ write sys$output -
41 "There should not be more that at most 80 per line"
42$ endif
43$
44$ write sys$output "This could take some time."
45$
46$ mcr 'exe_dir'openssl req -config test.cnf 'req_new' -out testreq.pem
47$ if $severity .ne. 1
48$ then
49$ write sys$output "problems creating request"
50$ exit 3
51$ endif
52$
53$ mcr 'exe_dir'openssl req -config test.cnf -verify -in testreq.pem -noout
54$ if $severity .ne. 1
55$ then
56$ write sys$output "signature on req is wrong"
57$ exit 3
58$ endif
diff --git a/src/lib/libssl/test/tests.com b/src/lib/libssl/test/tests.com
deleted file mode 100644
index a840d5078f..0000000000
--- a/src/lib/libssl/test/tests.com
+++ /dev/null
@@ -1,375 +0,0 @@
1$! TESTS.COM -- Performs the necessary tests
2$!
3$! P1 tests to be performed. Empty means all.
4$! P2 Pointer size: "", "32", or "64".
5$!
6$! Announce/identify.
7$!
8$ proc = f$environment( "procedure")
9$ write sys$output "@@@ "+ -
10 f$parse( proc, , , "name")+ f$parse( proc, , , "type")
11$!
12$ __proc = f$element(0,";",f$environment("procedure"))
13$ __here = f$parse(f$parse("A.;",__proc) - "A.;","[]A.;") - "A.;"
14$ __save_default = f$environment("default")
15$ __arch = "VAX"
16$ if f$getsyi("cpu") .ge. 128 then -
17 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
18$ if __arch .eqs. "" then __arch = "UNK"
19$!
20$ __archd = __arch
21$ pointer_size = ""
22$ if (p2 .eq. "64")
23$ then
24$ pointer_size = "64"
25$ __archd = __arch+ "_64"
26$ endif
27$!
28$ texe_dir := sys$disk:[-.'__archd'.exe.test]
29$ exe_dir := sys$disk:[-.'__archd'.exe.apps]
30$
31$ set default '__here'
32$
33$ ROOT = F$PARSE("sys$disk:[-]A.;0",,,,"SYNTAX_ONLY,NO_CONCEAL") - "A.;0"
34$ ROOT_DEV = F$PARSE(ROOT,,,"DEVICE","SYNTAX_ONLY")
35$ ROOT_DIR = F$PARSE(ROOT,,,"DIRECTORY","SYNTAX_ONLY") -
36 - ".][000000" - "[000000." - "][" - "[" - "]"
37$ ROOT = ROOT_DEV + "[" + ROOT_DIR
38$ DEFINE/NOLOG SSLROOT 'ROOT'.APPS.] /TRANS=CONC
39$ openssl_conf := sslroot:[000000]openssl-vms.cnf
40$
41$ on control_y then goto exit
42$ on error then goto exit
43$
44$ if p1 .nes. ""
45$ then
46$ tests = p1
47$ else
48$! NOTE: This list reflects the list of dependencies following the
49$! "alltests" target in Makefile. This should make it easy to see
50$! if there's a difference that needs to be taken care of.
51$ tests := -
52 test_des,test_idea,test_sha,test_md4,test_md5,test_hmac,-
53 test_md2,test_mdc2,test_wp,-
54 test_rmd,test_rc2,test_rc4,test_rc5,test_bf,test_cast,test_aes,-
55 test_rand,test_bn,test_ec,test_ecdsa,test_ecdh,-
56 test_enc,test_x509,test_rsa,test_crl,test_sid,-
57 test_gen,test_req,test_pkcs7,test_verify,test_dh,test_dsa,-
58 test_ss,test_ca,test_engine,test_evp,test_ssl,test_tsa,test_ige,-
59 test_jpake,test_srp,test_cms
60$ endif
61$ tests = f$edit(tests,"COLLAPSE")
62$
63$ BNTEST := bntest
64$ ECTEST := ectest
65$ ECDSATEST := ecdsatest
66$ ECDHTEST := ecdhtest
67$ EXPTEST := exptest
68$ IDEATEST := ideatest
69$ SHATEST := shatest
70$ SHA1TEST := sha1test
71$ SHA256TEST := sha256t
72$ SHA512TEST := sha512t
73$ MDC2TEST := mdc2test
74$ RMDTEST := rmdtest
75$ MD2TEST := md2test
76$ MD4TEST := md4test
77$ MD5TEST := md5test
78$ HMACTEST := hmactest
79$ WPTEST := wp_test
80$ RC2TEST := rc2test
81$ RC4TEST := rc4test
82$ RC5TEST := rc5test
83$ BFTEST := bftest
84$ CASTTEST := casttest
85$ DESTEST := destest
86$ RANDTEST := randtest
87$ DHTEST := dhtest
88$ DSATEST := dsatest
89$ METHTEST := methtest
90$ SSLTEST := ssltest
91$ RSATEST := rsa_test
92$ ENGINETEST := enginetest
93$ EVPTEST := evp_test
94$ IGETEST := igetest
95$ JPAKETEST := jpaketest
96$ SRPTEST := srptest
97$ ASN1TEST := asn1test
98$!
99$ tests_i = 0
100$ loop_tests:
101$ tests_e = f$element(tests_i,",",tests)
102$ tests_i = tests_i + 1
103$ if tests_e .eqs. "," then goto exit
104$ write sys$output "---> ''tests_e'"
105$ gosub 'tests_e'
106$ goto loop_tests
107$
108$ test_evp:
109$ mcr 'texe_dir''evptest' 'ROOT'.CRYPTO.EVP]evptests.txt
110$ return
111$ test_des:
112$ mcr 'texe_dir''destest'
113$ return
114$ test_idea:
115$ mcr 'texe_dir''ideatest'
116$ return
117$ test_sha:
118$ mcr 'texe_dir''shatest'
119$ mcr 'texe_dir''sha1test'
120$ mcr 'texe_dir''sha256test'
121$ mcr 'texe_dir''sha512test'
122$ return
123$ test_mdc2:
124$ mcr 'texe_dir''mdc2test'
125$ return
126$ test_md5:
127$ mcr 'texe_dir''md5test'
128$ return
129$ test_md4:
130$ mcr 'texe_dir''md4test'
131$ return
132$ test_hmac:
133$ mcr 'texe_dir''hmactest'
134$ return
135$ test_wp:
136$ mcr 'texe_dir''wptest'
137$ return
138$ test_md2:
139$ mcr 'texe_dir''md2test'
140$ return
141$ test_rmd:
142$ mcr 'texe_dir''rmdtest'
143$ return
144$ test_bf:
145$ mcr 'texe_dir''bftest'
146$ return
147$ test_cast:
148$ mcr 'texe_dir''casttest'
149$ return
150$ test_rc2:
151$ mcr 'texe_dir''rc2test'
152$ return
153$ test_rc4:
154$ mcr 'texe_dir''rc4test'
155$ return
156$ test_rc5:
157$ mcr 'texe_dir''rc5test'
158$ return
159$ test_rand:
160$ mcr 'texe_dir''randtest'
161$ return
162$ test_enc:
163$ @testenc.com 'pointer_size'
164$ return
165$ test_x509:
166$ set noon
167$ define sys$error test_x509.err
168$ write sys$output "test normal x509v1 certificate"
169$ @tx509.com "" 'pointer_size'
170$ write sys$output "test first x509v3 certificate"
171$ @tx509.com v3-cert1.pem 'pointer_size'
172$ write sys$output "test second x509v3 certificate"
173$ @tx509.com v3-cert2.pem 'pointer_size'
174$ deassign sys$error
175$ set on
176$ return
177$ test_rsa:
178$ set noon
179$ define sys$error test_rsa.err
180$ @trsa.com "" 'pointer_size'
181$ deassign sys$error
182$ mcr 'texe_dir''rsatest'
183$ set on
184$ return
185$ test_crl:
186$ set noon
187$ define sys$error test_crl.err
188$ @tcrl.com "" 'pointer_size'
189$ deassign sys$error
190$ set on
191$ return
192$ test_sid:
193$ set noon
194$ define sys$error test_sid.err
195$ @tsid.com "" 'pointer_size'
196$ deassign sys$error
197$ set on
198$ return
199$ test_req:
200$ set noon
201$ define sys$error test_req.err
202$ @treq.com "" 'pointer_size'
203$ @treq.com testreq2.pem 'pointer_size'
204$ deassign sys$error
205$ set on
206$ return
207$ test_pkcs7:
208$ set noon
209$ define sys$error test_pkcs7.err
210$ @tpkcs7.com "" 'pointer_size'
211$ @tpkcs7d.com "" 'pointer_size'
212$ deassign sys$error
213$ set on
214$ return
215$ test_bn:
216$ write sys$output -
217 "starting big number library test, could take a while..."
218$ set noon
219$ define sys$error test_bn.err
220$ define sys$output test_bn.out
221$ @ bctest.com
222$ status = $status
223$ deassign sys$error
224$ deassign sys$output
225$ set on
226$ if (status)
227$ then
228$ create /fdl = sys$input bntest-vms.tmp
229FILE
230 ORGANIZATION sequential
231RECORD
232 FORMAT stream_lf
233$ define /user_mode sys$output bntest-vms.tmp
234$ mcr 'texe_dir''bntest'
235$ define /user_mode sys$input bntest-vms.tmp
236$ define /user_mode sys$output bntest-vms.out
237$ bc
238$ @ bntest.com bntest-vms.out
239$ status = $status
240$ if (status)
241$ then
242$ delete bntest-vms.out;*
243$ delete bntest-vms.tmp;*
244$ endif
245$ else
246$ create /fdl = sys$input bntest-vms.sh
247FILE
248 ORGANIZATION sequential
249RECORD
250 FORMAT stream_lf
251$ open /append bntest_file bntest-vms.sh
252$ type /output = bntest_file sys$input:
253<< __FOO__ sh -c "`sh ./bctest`" | perl -e '$i=0; while (<STDIN>) {if (/^test (.*)/) {print STDERR "\nverify $1";} elsif (!/^0$/) {die "\nFailed! bc: $_";} else {print STDERR "."; $i++;}} print STDERR "\n$i tests passed\n"'
254$ define /user_mode sys$output bntest-vms.tmp
255$ mcr 'texe_dir''bntest'
256$ copy bntest-vms.tmp bntest_file
257$ delete bntest-vms.tmp;*
258$ type /output = bntest_file sys$input:
259__FOO__
260$ close bntest_file
261$ write sys$output "-- copy the [.test]bntest-vms.sh and [.test]bctest files to a Unix system and"
262$ write sys$output "-- run bntest-vms.sh through sh or bash to verify that the bignum operations"
263$ write sys$output "-- went well."
264$ write sys$output ""
265$ endif
266$ write sys$output "test a^b%c implementations"
267$ mcr 'texe_dir''exptest'
268$ return
269$ test_ec:
270$ write sys$output "test elliptic curves"
271$ mcr 'texe_dir''ectest'
272$ return
273$ test_ecdsa:
274$ write sys$output "test ecdsa"
275$ mcr 'texe_dir''ecdsatest'
276$ return
277$ test_ecdh:
278$ write sys$output "test ecdh"
279$ mcr 'texe_dir''ecdhtest'
280$ return
281$ test_verify:
282$ write sys$output "The following command should have some OK's and some failures"
283$ write sys$output "There are definitly a few expired certificates"
284$ @tverify.com 'pointer_size'
285$ return
286$ test_dh:
287$ write sys$output "Generate a set of DH parameters"
288$ mcr 'texe_dir''dhtest'
289$ return
290$ test_dsa:
291$ write sys$output "Generate a set of DSA parameters"
292$ mcr 'texe_dir''dsatest'
293$ return
294$ test_gen:
295$ write sys$output "Generate and verify a certificate request"
296$ @testgen.com 'pointer_size'
297$ return
298$ maybe_test_ss:
299$ testss_RDT = f$cvtime(f$file_attributes("testss.com","RDT"))
300$ if f$cvtime(f$file_attributes("keyU.ss","RDT")) .les. testss_RDT then -
301 goto test_ss
302$ if f$cvtime(f$file_attributes("certU.ss","RDT")) .les. testss_RDT then -
303 goto test_ss
304$ if f$cvtime(f$file_attributes("certCA.ss","RDT")) .les. testss_RDT then -
305 goto test_ss
306$ return
307$ test_ss:
308$ write sys$output "Generate and certify a test certificate"
309$ @testss.com 'pointer_size'
310$ return
311$ test_engine:
312$ write sys$output "Manipulate the ENGINE structures"
313$ mcr 'texe_dir''enginetest'
314$ return
315$ test_ssl:
316$ write sys$output "test SSL protocol"
317$ gosub maybe_test_ss
318$ @testssl.com keyU.ss certU.ss certCA.ss 'pointer_size'
319$ return
320$ test_ca:
321$ set noon
322$ define /user_mode sys$output test_ca.out
323$ mcr 'exe_dir'openssl no-rsa
324$ save_severity=$SEVERITY
325$ set on
326$ if save_severity
327$ then
328$ write sys$output "skipping CA.com test -- requires RSA"
329$ else
330$ write sys$output "Generate and certify a test certificate via the 'ca' program"
331$ @testca.com 'pointer_size'
332$ endif
333$ return
334$ test_aes:
335$! write sys$output "test AES"
336$! !mcr 'texe_dir''aestest'
337$ return
338$ test_tsa:
339$ set noon
340$ define /user_mode sys$output nla0:
341$ mcr 'exe_dir'openssl no-rsa
342$ save_severity=$SEVERITY
343$ set on
344$ if save_severity
345$ then
346$ write sys$output "skipping testtsa.com test -- requires RSA"
347$ else
348$ @testtsa.com "" "" "" 'pointer_size'
349$ endif
350$ return
351$ test_ige:
352$ write sys$output "Test IGE mode"
353$ mcr 'texe_dir''igetest'
354$ return
355$ test_jpake:
356$ write sys$output "Test JPAKE"
357$ mcr 'texe_dir''jpaketest'
358$ return
359$ test_cms:
360$ write sys$output "CMS consistency test"
361$ ! Define the logical name used to find openssl.exe in the perl script.
362$ define /user_mode osslx 'exe_dir'
363$ perl CMS-TEST.PL
364$ return
365$ test_srp:
366$ write sys$output "Test SRP"
367$ mcr 'texe_dir''srptest'
368$ return
369$
370$
371$ exit:
372$ mcr 'exe_dir'openssl version -a
373$ set default '__save_default'
374$ deassign sslroot
375$ exit
diff --git a/src/lib/libssl/test/testss.com b/src/lib/libssl/test/testss.com
deleted file mode 100644
index 32a74d0fc2..0000000000
--- a/src/lib/libssl/test/testss.com
+++ /dev/null
@@ -1,123 +0,0 @@
1$! TESTSS.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ digest="-md5"
13$ reqcmd = "mcr ''exe_dir'openssl req"
14$ x509cmd = "mcr ''exe_dir'openssl x509 ''digest'"
15$ verifycmd = "mcr ''exe_dir'openssl verify"
16$ dummycnf = "sys$disk:[-.apps]openssl-vms.cnf"
17$
18$ CAkey="""keyCA.ss"""
19$ CAcert="""certCA.ss"""
20$ CAreq="""reqCA.ss"""
21$ CAconf="""CAss.cnf"""
22$ CAreq2="""req2CA.ss""" ! temp
23$
24$ Uconf="""Uss.cnf"""
25$ Ukey="""keyU.ss"""
26$ Ureq="""reqU.ss"""
27$ Ucert="""certU.ss"""
28$
29$ write sys$output ""
30$ write sys$output "make a certificate request using 'req'"
31$
32$ set noon
33$ define/user sys$output nla0:
34$ mcr 'exe_dir'openssl no-rsa
35$ save_severity=$SEVERITY
36$ set on
37$ if save_severity
38$ then
39$ req_new="-newkey dsa:[-.apps]dsa512.pem"
40$ else
41$ req_new="-new"
42$ endif
43$
44$ 'reqcmd' -config 'CAconf' -out 'CAreq' -keyout 'CAkey' 'req_new' ! -out err.ss
45$ if $severity .ne. 1
46$ then
47$ write sys$output "error using 'req' to generate a certificate request"
48$ exit 3
49$ endif
50$ write sys$output ""
51$ write sys$output "convert the certificate request into a self signed certificate using 'x509'"
52$ define /user sys$output err.ss
53$ 'x509cmd' "-CAcreateserial" -in 'CAreq' -days 30 -req -out 'CAcert' -signkey 'CAkey'
54$ if $severity .ne. 1
55$ then
56$ write sys$output "error using 'x509' to self sign a certificate request"
57$ exit 3
58$ endif
59$
60$ write sys$output ""
61$ write sys$output "convert a certificate into a certificate request using 'x509'"
62$ define /user sys$output err.ss
63$ 'x509cmd' -in 'CAcert' -x509toreq -signkey 'CAkey' -out 'CAreq2'
64$ if $severity .ne. 1
65$ then
66$ write sys$output "error using 'x509' convert a certificate to a certificate request"
67$ exit 3
68$ endif
69$
70$ 'reqcmd' -config 'dummycnf' -verify -in 'CAreq' -noout
71$ if $severity .ne. 1
72$ then
73$ write sys$output "first generated request is invalid"
74$ exit 3
75$ endif
76$
77$ 'reqcmd' -config 'dummycnf' -verify -in 'CAreq2' -noout
78$ if $severity .ne. 1
79$ then
80$ write sys$output "second generated request is invalid"
81$ exit 3
82$ endif
83$
84$ 'verifycmd' "-CAfile" 'CAcert' 'CAcert'
85$ if $severity .ne. 1
86$ then
87$ write sys$output "first generated cert is invalid"
88$ exit 3
89$ endif
90$
91$ write sys$output ""
92$ write sys$output "make another certificate request using 'req'"
93$ define /user sys$output err.ss
94$ 'reqcmd' -config 'Uconf' -out 'Ureq' -keyout 'Ukey' 'req_new'
95$ if $severity .ne. 1
96$ then
97$ write sys$output "error using 'req' to generate a certificate request"
98$ exit 3
99$ endif
100$
101$ write sys$output ""
102$ write sys$output "sign certificate request with the just created CA via 'x509'"
103$ define /user sys$output err.ss
104$ 'x509cmd' "-CAcreateserial" -in 'Ureq' -days 30 -req -out 'Ucert' "-CA" 'CAcert' "-CAkey" 'CAkey'
105$ if $severity .ne. 1
106$ then
107$ write sys$output "error using 'x509' to sign a certificate request"
108$ exit 3
109$ endif
110$
111$ 'verifycmd' "-CAfile" 'CAcert' 'Ucert'
112$ write sys$output ""
113$ write sys$output "Certificate details"
114$ 'x509cmd' -subject -issuer -startdate -enddate -noout -in 'Ucert'
115$
116$ write sys$output ""
117$ write sys$output "The generated CA certificate is ",CAcert
118$ write sys$output "The generated CA private key is ",CAkey
119$
120$ write sys$output "The generated user certificate is ",Ucert
121$ write sys$output "The generated user private key is ",Ukey
122$
123$ if f$search("err.ss;*") .nes. "" then delete err.ss;*
diff --git a/src/lib/libssl/test/testssl b/src/lib/libssl/test/testssl
index 5ae4dc8720..4e8542b556 100644
--- a/src/lib/libssl/test/testssl
+++ b/src/lib/libssl/test/testssl
@@ -119,6 +119,23 @@ $ssltest -bio_pair -server_auth -client_auth $CA $extra || exit 1
119echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify 119echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify
120$ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1 120$ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1
121 121
122echo "Testing ciphersuites"
123for protocol in TLSv1.2 SSLv3; do
124 echo "Testing ciphersuites for $protocol"
125 for cipher in `../util/shlib_wrap.sh ../apps/openssl ciphers "RSA+$protocol" | tr ':' ' '`; do
126 echo "Testing $cipher"
127 prot=""
128 if [ $protocol = "SSLv3" ] ; then
129 prot="-ssl3"
130 fi
131 $ssltest -cipher $cipher $prot
132 if [ $? -ne 0 ] ; then
133 echo "Failed $cipher"
134 exit 1
135 fi
136 done
137done
138
122############################################################################# 139#############################################################################
123 140
124if ../util/shlib_wrap.sh ../apps/openssl no-dh; then 141if ../util/shlib_wrap.sh ../apps/openssl no-dh; then
diff --git a/src/lib/libssl/test/testssl.com b/src/lib/libssl/test/testssl.com
deleted file mode 100644
index f19edc4719..0000000000
--- a/src/lib/libssl/test/testssl.com
+++ /dev/null
@@ -1,208 +0,0 @@
1$! TESTSSL.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p4 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ texe_dir = "sys$disk:[-.''__arch'.exe.test]"
11$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
12$
13$ if p1 .eqs. ""
14$ then
15$ key="[-.apps]server.pem"
16$ else
17$ key=p1
18$ endif
19$ if p2 .eqs. ""
20$ then
21$ cert="[-.apps]server.pem"
22$ else
23$ cert=p2
24$ endif
25$ ssltest = "mcr ''texe_dir'ssltest -key ''key'"+ -
26 " -cert ''cert' -c_key ''key' -c_cert ''cert'"
27$!
28$ set noon
29$ define/user sys$output testssl-x509-output.
30$ define/user sys$error nla0:
31$ mcr 'exe_dir'openssl x509 -in 'cert' -text -noout
32$ define/user sys$error nla0:
33$ search/output=nla0: testssl-x509-output. "DSA Public Key"/exact
34$ if $severity .eq. 1
35$ then
36$ dsa_cert = "YES"
37$ else
38$ dsa_cert = "NO"
39$ endif
40$ delete testssl-x509-output.;*
41$
42$ if p3 .eqs. ""
43$ then
44$ copy/concatenate [-.certs]*.pem certs.tmp
45$ CA = """-CAfile"" certs.tmp"
46$ else
47$ CA = """-CAfile"" "+p3
48$ endif
49$
50$!###########################################################################
51$
52$ write sys$output "test sslv2"
53$ 'ssltest' -ssl2
54$ if $severity .ne. 1 then goto exit3
55$
56$ write sys$output "test sslv2 with server authentication"
57$ 'ssltest' -ssl2 -server_auth 'CA'
58$ if $severity .ne. 1 then goto exit3
59$
60$ if .not. dsa_cert
61$ then
62$ write sys$output "test sslv2 with client authentication"
63$ 'ssltest' -ssl2 -client_auth 'CA'
64$ if $severity .ne. 1 then goto exit3
65$
66$ write sys$output "test sslv2 with both client and server authentication"
67$ 'ssltest' -ssl2 -server_auth -client_auth 'CA'
68$ if $severity .ne. 1 then goto exit3
69$ endif
70$
71$ write sys$output "test sslv3"
72$ 'ssltest' -ssl3
73$ if $severity .ne. 1 then goto exit3
74$
75$ write sys$output "test sslv3 with server authentication"
76$ 'ssltest' -ssl3 -server_auth 'CA'
77$ if $severity .ne. 1 then goto exit3
78$
79$ write sys$output "test sslv3 with client authentication"
80$ 'ssltest' -ssl3 -client_auth 'CA'
81$ if $severity .ne. 1 then goto exit3
82$
83$ write sys$output "test sslv3 with both client and server authentication"
84$ 'ssltest' -ssl3 -server_auth -client_auth 'CA'
85$ if $severity .ne. 1 then goto exit3
86$
87$ write sys$output "test sslv2/sslv3"
88$ 'ssltest'
89$ if $severity .ne. 1 then goto exit3
90$
91$ write sys$output "test sslv2/sslv3 with server authentication"
92$ 'ssltest' -server_auth 'CA'
93$ if $severity .ne. 1 then goto exit3
94$
95$ write sys$output "test sslv2/sslv3 with client authentication"
96$ 'ssltest' -client_auth 'CA'
97$ if $severity .ne. 1 then goto exit3
98$
99$ write sys$output "test sslv2/sslv3 with both client and server authentication"
100$ 'ssltest' -server_auth -client_auth 'CA'
101$ if $severity .ne. 1 then goto exit3
102$
103$ write sys$output "test sslv2 via BIO pair"
104$ 'ssltest' -bio_pair -ssl2
105$ if $severity .ne. 1 then goto exit3
106$
107$ write sys$output "test sslv2 with server authentication via BIO pair"
108$ 'ssltest' -bio_pair -ssl2 -server_auth 'CA'
109$ if $severity .ne. 1 then goto exit3
110$
111$ if .not. dsa_cert
112$ then
113$ write sys$output "test sslv2 with client authentication via BIO pair"
114$ 'ssltest' -bio_pair -ssl2 -client_auth 'CA'
115$ if $severity .ne. 1 then goto exit3
116$
117$ write sys$output "test sslv2 with both client and server authentication via BIO pair"
118$ 'ssltest' -bio_pair -ssl2 -server_auth -client_auth 'CA'
119$ if $severity .ne. 1 then goto exit3
120$ endif
121$
122$ write sys$output "test sslv3 via BIO pair"
123$ 'ssltest' -bio_pair -ssl3
124$ if $severity .ne. 1 then goto exit3
125$
126$ write sys$output "test sslv3 with server authentication via BIO pair"
127$ 'ssltest' -bio_pair -ssl3 -server_auth 'CA'
128$ if $severity .ne. 1 then goto exit3
129$
130$ write sys$output "test sslv3 with client authentication via BIO pair"
131$ 'ssltest' -bio_pair -ssl3 -client_auth 'CA'
132$ if $severity .ne. 1 then goto exit3
133
134$ write sys$output "test sslv3 with both client and server authentication via BIO pair"
135$ 'ssltest' -bio_pair -ssl3 -server_auth -client_auth 'CA'
136$ if $severity .ne. 1 then goto exit3
137$
138$ write sys$output "test sslv2/sslv3 via BIO pair"
139$ 'ssltest'
140$ if $severity .ne. 1 then goto exit3
141$
142$ if .not. dsa_cert
143$ then
144$ write sys$output "test sslv2/sslv3 w/o DHE via BIO pair"
145$ 'ssltest' -bio_pair -no_dhe
146$ if $severity .ne. 1 then goto exit3
147$ endif
148$
149$ write sys$output "test sslv2/sslv3 with 1024 bit DHE via BIO pair"
150$ 'ssltest' -bio_pair -dhe1024dsa -v
151$ if $severity .ne. 1 then goto exit3
152$
153$ write sys$output "test sslv2/sslv3 with server authentication"
154$ 'ssltest' -bio_pair -server_auth 'CA'
155$ if $severity .ne. 1 then goto exit3
156$
157$ write sys$output "test sslv2/sslv3 with client authentication via BIO pair"
158$ 'ssltest' -bio_pair -client_auth 'CA'
159$ if $severity .ne. 1 then goto exit3
160$
161$ write sys$output "test sslv2/sslv3 with both client and server authentication via BIO pair"
162$ 'ssltest' -bio_pair -server_auth -client_auth 'CA'
163$ if $severity .ne. 1 then goto exit3
164$
165$!###########################################################################
166$
167$ define/user sys$output nla0:
168$ mcr 'exe_dir'openssl no-rsa
169$ no_rsa=$SEVERITY
170$ define/user sys$output nla0:
171$ mcr 'exe_dir'openssl no-dh
172$ no_dh=$SEVERITY
173$
174$ if no_dh
175$ then
176$ write sys$output "skipping anonymous DH tests"
177$ else
178$ write sys$output "test tls1 with 1024bit anonymous DH, multiple handshakes"
179$ 'ssltest' -v -bio_pair -tls1 -cipher "ADH" -dhe1024dsa -num 10 -f -time
180$ if $severity .ne. 1 then goto exit3
181$ endif
182$
183$ if no_rsa
184$ then
185$ write sys$output "skipping RSA tests"
186$ else
187$ write sys$output "test tls1 with 1024bit RSA, no DHE, multiple handshakes"
188$ mcr 'texe_dir'ssltest -v -bio_pair -tls1 -cert [-.apps]server2.pem -no_dhe -num 10 -f -time
189$ if $severity .ne. 1 then goto exit3
190$
191$ if no_dh
192$ then
193$ write sys$output "skipping RSA+DHE tests"
194$ else
195$ write sys$output "test tls1 with 1024bit RSA, 1024bit DHE, multiple handshakes"
196$ mcr 'texe_dir'ssltest -v -bio_pair -tls1 -cert [-.apps]server2.pem -dhe1024dsa -num 10 -f -time
197$ if $severity .ne. 1 then goto exit3
198$ endif
199$ endif
200$
201$ RET = 1
202$ goto exit
203$ exit3:
204$ RET = 3
205$ exit:
206$ if p3 .eqs. "" then delete certs.tmp;*
207$ set on
208$ exit 'RET'
diff --git a/src/lib/libssl/test/testtsa.com b/src/lib/libssl/test/testtsa.com
deleted file mode 100644
index 29fb1d0e63..0000000000
--- a/src/lib/libssl/test/testtsa.com
+++ /dev/null
@@ -1,255 +0,0 @@
1$!
2$! A few very basic tests for the 'ts' time stamping authority command.
3$!
4$
5$ __arch = "VAX"
6$ if f$getsyi("cpu") .ge. 128 then -
7 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
8$ if __arch .eqs. "" then __arch = "UNK"
9$!
10$ if (p4 .eqs. "64") then __arch = __arch+ "_64"
11$!
12$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
13$
14$ openssl = "mcr ''f$parse(exe_dir+"openssl.exe")'"
15$ OPENSSL_CONF = "[-]CAtsa.cnf"
16$ ! Because that's what ../apps/CA.sh really looks at
17$ SSLEAY_CONFIG = "-config " + OPENSSL_CONF
18$
19$ error:
20$ subroutine
21$ write sys$error "TSA test failed!"
22$ exit 3
23$ endsubroutine
24$
25$ setup_dir:
26$ subroutine
27$
28$ if f$search("tsa.dir") .nes ""
29$ then
30$ @[-.util]deltree [.tsa]*.*
31$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) tsa.dir;*
32$ delete tsa.dir;*
33$ endif
34$
35$ create/dir [.tsa]
36$ set default [.tsa]
37$ endsubroutine
38$
39$ clean_up_dir:
40$ subroutine
41$
42$ set default [-]
43$ @[-.util]deltree [.tsa]*.*
44$ set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) tsa.dir;*
45$ delete tsa.dir;*
46$ endsubroutine
47$
48$ create_ca:
49$ subroutine
50$
51$ write sys$output "Creating a new CA for the TSA tests..."
52$ TSDNSECT = "ts_ca_dn"
53$ openssl req -new -x509 -nodes -
54 -out tsaca.pem -keyout tsacakey.pem
55$ if $severity .ne. 1 then call error
56$ endsubroutine
57$
58$ create_tsa_cert:
59$ subroutine
60$
61$ INDEX=p1
62$ EXT=p2
63$ TSDNSECT = "ts_cert_dn"
64$
65$ openssl req -new -
66 -out tsa_req'INDEX'.pem -keyout tsa_key'INDEX'.pem
67$ if $severity .ne. 1 then call error
68$
69$ write sys$output "Using extension ''EXT'"
70$ openssl x509 -req -
71 -in tsa_req'INDEX'.pem -out tsa_cert'INDEX'.pem -
72 "-CA" tsaca.pem "-CAkey" tsacakey.pem "-CAcreateserial" -
73 -extfile 'OPENSSL_CONF' -extensions "''EXT'"
74$ if $severity .ne. 1 then call error
75$ endsubroutine
76$
77$ print_request:
78$ subroutine
79$
80$ openssl ts -query -in 'p1' -text
81$ endsubroutine
82$
83$ create_time_stamp_request1: subroutine
84$
85$ openssl ts -query -data [-]testtsa.com -policy tsa_policy1 -
86 -cert -out req1.tsq
87$ if $severity .ne. 1 then call error
88$ endsubroutine
89$
90$ create_time_stamp_request2: subroutine
91$
92$ openssl ts -query -data [-]testtsa.com -policy tsa_policy2 -
93 -no_nonce -out req2.tsq
94$ if $severity .ne. 1 then call error
95$ endsubroutine
96$
97$ create_time_stamp_request3: subroutine
98$
99$ openssl ts -query -data [-]CAtsa.cnf -no_nonce -out req3.tsq
100$ if $severity .ne. 1 then call error
101$ endsubroutine
102$
103$ print_response:
104$ subroutine
105$
106$ openssl ts -reply -in 'p1' -text
107$ if $severity .ne. 1 then call error
108$ endsubroutine
109$
110$ create_time_stamp_response:
111$ subroutine
112$
113$ openssl ts -reply -section 'p3' -queryfile 'p1' -out 'p2'
114$ if $severity .ne. 1 then call error
115$ endsubroutine
116$
117$ time_stamp_response_token_test:
118$ subroutine
119$
120$ RESPONSE2 = p2+ "-copy_tsr"
121$ TOKEN_DER = p2+ "-token_der"
122$ openssl ts -reply -in 'p2' -out 'TOKEN_DER' -token_out
123$ if $severity .ne. 1 then call error
124$ openssl ts -reply -in 'TOKEN_DER' -token_in -out 'RESPONSE2'
125$ if $severity .ne. 1 then call error
126$ backup/compare 'RESPONSE2' 'p2'
127$ if $severity .ne. 1 then call error
128$ openssl ts -reply -in 'p2' -text -token_out
129$ if $severity .ne. 1 then call error
130$ openssl ts -reply -in 'TOKEN_DER' -token_in -text -token_out
131$ if $severity .ne. 1 then call error
132$ openssl ts -reply -queryfile 'p1' -text -token_out
133$ if $severity .ne. 1 then call error
134$ endsubroutine
135$
136$ verify_time_stamp_response:
137$ subroutine
138$
139$ openssl ts -verify -queryfile 'p1' -in 'p2' -
140 "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
141$ if $severity .ne. 1 then call error
142$ openssl ts -verify -data 'p3' -in 'p2' -
143 "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
144$ if $severity .ne. 1 then call error
145$ endsubroutine
146$
147$ verify_time_stamp_token:
148$ subroutine
149$
150$ ! create the token from the response first
151$ openssl ts -reply -in "''p2'" -out "''p2'-token" -token_out
152$ if $severity .ne. 1 then call error
153$ openssl ts -verify -queryfile "''p1'" -in "''p2'-token" -
154 -token_in "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
155$ if $severity .ne. 1 then call error
156$ openssl ts -verify -data "''p3'" -in "''p2'-token" -
157 -token_in "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
158$ if $severity .ne. 1 then call error
159$ endsubroutine
160$
161$ verify_time_stamp_response_fail:
162$ subroutine
163$
164$ openssl ts -verify -queryfile 'p1' -in 'p2' -
165 "-CAfile" tsaca.pem -untrusted tsa_cert1.pem
166$ ! Checks if the verification failed, as it should have.
167$ if $severity .eq. 1 then call error
168$ write sys$output "Ok"
169$ endsubroutine
170$
171$ ! Main body ----------------------------------------------------------
172$
173$ set noon
174$
175$ write sys$output "Setting up TSA test directory..."
176$ call setup_dir
177$
178$ write sys$output "Creating CA for TSA tests..."
179$ call create_ca
180$
181$ write sys$output "Creating tsa_cert1.pem TSA server cert..."
182$ call create_tsa_cert 1 "tsa_cert"
183$
184$ write sys$output "Creating tsa_cert2.pem non-TSA server cert..."
185$ call create_tsa_cert 2 "non_tsa_cert"
186$
187$ write sys$output "Creating req1.req time stamp request for file testtsa..."
188$ call create_time_stamp_request1
189$
190$ write sys$output "Printing req1.req..."
191$ call print_request "req1.tsq"
192$
193$ write sys$output "Generating valid response for req1.req..."
194$ call create_time_stamp_response "req1.tsq" "resp1.tsr" "tsa_config1"
195$
196$ write sys$output "Printing response..."
197$ call print_response "resp1.tsr"
198$
199$ write sys$output "Verifying valid response..."
200$ call verify_time_stamp_response "req1.tsq" "resp1.tsr" "[-]testtsa.com"
201$
202$ write sys$output "Verifying valid token..."
203$ call verify_time_stamp_token "req1.tsq" "resp1.tsr" "[-]testtsa.com"
204$
205$ ! The tests below are commented out, because invalid signer certificates
206$ ! can no longer be specified in the config file.
207$
208$ ! write sys$output "Generating _invalid_ response for req1.req..."
209$ ! call create_time_stamp_response "req1.tsq" "resp1_bad.tsr" "tsa_config2"
210$
211$ ! write sys$output "Printing response..."
212$ ! call print_response "resp1_bad.tsr"
213$
214$ ! write sys$output "Verifying invalid response, it should fail..."
215$ ! call verify_time_stamp_response_fail "req1.tsq" "resp1_bad.tsr"
216$
217$ write sys$output "Creating req2.req time stamp request for file testtsa..."
218$ call create_time_stamp_request2
219$
220$ write sys$output "Printing req2.req..."
221$ call print_request "req2.tsq"
222$
223$ write sys$output "Generating valid response for req2.req..."
224$ call create_time_stamp_response "req2.tsq" "resp2.tsr" "tsa_config1"
225$
226$ write sys$output "Checking '-token_in' and '-token_out' options with '-reply'..."
227$ call time_stamp_response_token_test "req2.tsq" "resp2.tsr"
228$
229$ write sys$output "Printing response..."
230$ call print_response "resp2.tsr"
231$
232$ write sys$output "Verifying valid response..."
233$ call verify_time_stamp_response "req2.tsq" "resp2.tsr" "[-]testtsa.com"
234$
235$ write sys$output "Verifying response against wrong request, it should fail..."
236$ call verify_time_stamp_response_fail "req1.tsq" "resp2.tsr"
237$
238$ write sys$output "Verifying response against wrong request, it should fail..."
239$ call verify_time_stamp_response_fail "req2.tsq" "resp1.tsr"
240$
241$ write sys$output "Creating req3.req time stamp request for file CAtsa.cnf..."
242$ call create_time_stamp_request3
243$
244$ write sys$output "Printing req3.req..."
245$ call print_request "req3.tsq"
246$
247$ write sys$output "Verifying response against wrong request, it should fail..."
248$ call verify_time_stamp_response_fail "req3.tsq" "resp1.tsr"
249$
250$ write sys$output "Cleaning up..."
251$ call clean_up_dir
252$
253$ set on
254$
255$ exit
diff --git a/src/lib/libssl/test/tpkcs7.com b/src/lib/libssl/test/tpkcs7.com
deleted file mode 100644
index 3fc4982bb0..0000000000
--- a/src/lib/libssl/test/tpkcs7.com
+++ /dev/null
@@ -1,59 +0,0 @@
1$! TPKCS7.COM -- Tests pkcs7 keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl pkcs7"
13$
14$ t = "testp7.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing PKCS7 conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$ write sys$output "p -> p"
29$ 'cmd' -in fff.p -inform p -outform p -out f.p
30$ if $severity .ne. 1 then exit 3
31$
32$ write sys$output "d -> d"
33$ 'cmd' -in f.d -inform d -outform d -out ff.d1
34$ if $severity .ne. 1 then exit 3
35$ write sys$output "p -> d"
36$ 'cmd' -in f.p -inform p -outform d -out ff.d3
37$ if $severity .ne. 1 then exit 3
38$
39$
40$ write sys$output "d -> p"
41$ 'cmd' -in f.d -inform d -outform p -out ff.p1
42$ if $severity .ne. 1 then exit 3
43$ write sys$output "p -> p"
44$ 'cmd' -in f.p -inform p -outform p -out ff.p3
45$ if $severity .ne. 1 then exit 3
46$
47$ backup/compare fff.p f.p
48$ if $severity .ne. 1 then exit 3
49$ backup/compare fff.p ff.p1
50$ if $severity .ne. 1 then exit 3
51$ backup/compare fff.p ff.p3
52$ if $severity .ne. 1 then exit 3
53$
54$ backup/compare f.p ff.p1
55$ if $severity .ne. 1 then exit 3
56$ backup/compare f.p ff.p3
57$ if $severity .ne. 1 then exit 3
58$
59$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/test/tpkcs7d.com b/src/lib/libssl/test/tpkcs7d.com
deleted file mode 100644
index eea8c888ee..0000000000
--- a/src/lib/libssl/test/tpkcs7d.com
+++ /dev/null
@@ -1,52 +0,0 @@
1$! TPKCS7.COM -- Tests pkcs7 keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl pkcs7"
13$
14$ t = "pkcs7-1.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing PKCS7 conversions (2)"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$ write sys$output "p -> p"
29$ 'cmd' -in fff.p -inform p -outform p -out f.p
30$ if $severity .ne. 1 then exit 3
31$
32$ write sys$output "d -> d"
33$ 'cmd' -in f.d -inform d -outform d -out ff.d1
34$ if $severity .ne. 1 then exit 3
35$ write sys$output "p -> d"
36$ 'cmd' -in f.p -inform p -outform d -out ff.d3
37$ if $severity .ne. 1 then exit 3
38$
39$
40$ write sys$output "d -> p"
41$ 'cmd' -in f.d -inform d -outform p -out ff.p1
42$ if $severity .ne. 1 then exit 3
43$ write sys$output "p -> p"
44$ 'cmd' -in f.p -inform p -outform p -out ff.p3
45$ if $severity .ne. 1 then exit 3
46$
47$ backup/compare f.p ff.p1
48$ if $severity .ne. 1 then exit 3
49$ backup/compare f.p ff.p3
50$ if $severity .ne. 1 then exit 3
51$
52$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/test/treq.com b/src/lib/libssl/test/treq.com
deleted file mode 100644
index acf08b79ef..0000000000
--- a/src/lib/libssl/test/treq.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TREQ.COM -- Tests req keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl req -config [-.apps]openssl-vms.cnf"
13$
14$ t = "testreq.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing req conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$! write sys$output "p -> t"
29$! 'cmd' -in fff.p -inform p -outform t -out f.t
30$! if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -verify -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$! write sys$output "t -> d"
39$! 'cmd' -verify -in f.t -inform t -outform d -out ff.d2
40$! if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -verify -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$! write sys$output "d -> t"
46$! 'cmd' -in f.d -inform d -outform t -out ff.t1
47$! if $severity .ne. 1 then exit 3
48$! write sys$output "t -> t"
49$! 'cmd' -in f.t -inform t -outform t -out ff.t2
50$! if $severity .ne. 1 then exit 3
51$! write sys$output "p -> t"
52$! 'cmd' -in f.p -inform p -outform t -out ff.t3
53$! if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$! write sys$output "t -> p"
59$! 'cmd' -in f.t -inform t -outform p -out ff.p2
60$! if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$! backup/compare fff.p ff.p2
70$! if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$! backup/compare f.t ff.t1
75$! if $severity .ne. 1 then exit 3
76$! backup/compare f.t ff.t2
77$! if $severity .ne. 1 then exit 3
78$! backup/compare f.t ff.t3
79$! if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$! backup/compare f.p ff.p2
84$! if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/test/trsa.com b/src/lib/libssl/test/trsa.com
deleted file mode 100644
index 54180843ee..0000000000
--- a/src/lib/libssl/test/trsa.com
+++ /dev/null
@@ -1,99 +0,0 @@
1$! TRSA.COM -- Tests rsa keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ set noon
13$ define/user sys$output nla0:
14$ mcr 'exe_dir'openssl no-rsa
15$ save_severity=$SEVERITY
16$ set on
17$ if save_severity
18$ then
19$ write sys$output "skipping RSA conversion test"
20$ exit
21$ endif
22$
23$ cmd = "mcr ''exe_dir'openssl rsa"
24$
25$ t = "testrsa.pem"
26$ if p1 .nes. "" then t = p1
27$
28$ write sys$output "testing RSA conversions"
29$ if f$search("fff.*") .nes "" then delete fff.*;*
30$ if f$search("ff.*") .nes "" then delete ff.*;*
31$ if f$search("f.*") .nes "" then delete f.*;*
32$ convert/fdl=sys$input: 't' fff.p
33RECORD
34 FORMAT STREAM_LF
35$
36$ write sys$output "p -> d"
37$ 'cmd' -in fff.p -inform p -outform d -out f.d
38$ if $severity .ne. 1 then exit 3
39$! write sys$output "p -> t"
40$! 'cmd' -in fff.p -inform p -outform t -out f.t
41$! if $severity .ne. 1 then exit 3
42$ write sys$output "p -> p"
43$ 'cmd' -in fff.p -inform p -outform p -out f.p
44$ if $severity .ne. 1 then exit 3
45$
46$ write sys$output "d -> d"
47$ 'cmd' -in f.d -inform d -outform d -out ff.d1
48$ if $severity .ne. 1 then exit 3
49$! write sys$output "t -> d"
50$! 'cmd' -in f.t -inform t -outform d -out ff.d2
51$! if $severity .ne. 1 then exit 3
52$ write sys$output "p -> d"
53$ 'cmd' -in f.p -inform p -outform d -out ff.d3
54$ if $severity .ne. 1 then exit 3
55$
56$! write sys$output "d -> t"
57$! 'cmd' -in f.d -inform d -outform t -out ff.t1
58$! if $severity .ne. 1 then exit 3
59$! write sys$output "t -> t"
60$! 'cmd' -in f.t -inform t -outform t -out ff.t2
61$! if $severity .ne. 1 then exit 3
62$! write sys$output "p -> t"
63$! 'cmd' -in f.p -inform p -outform t -out ff.t3
64$! if $severity .ne. 1 then exit 3
65$
66$ write sys$output "d -> p"
67$ 'cmd' -in f.d -inform d -outform p -out ff.p1
68$ if $severity .ne. 1 then exit 3
69$! write sys$output "t -> p"
70$! 'cmd' -in f.t -inform t -outform p -out ff.p2
71$! if $severity .ne. 1 then exit 3
72$ write sys$output "p -> p"
73$ 'cmd' -in f.p -inform p -outform p -out ff.p3
74$ if $severity .ne. 1 then exit 3
75$
76$ backup/compare fff.p f.p
77$ if $severity .ne. 1 then exit 3
78$ backup/compare fff.p ff.p1
79$ if $severity .ne. 1 then exit 3
80$! backup/compare fff.p ff.p2
81$! if $severity .ne. 1 then exit 3
82$ backup/compare fff.p ff.p3
83$ if $severity .ne. 1 then exit 3
84$
85$! backup/compare f.t ff.t1
86$! if $severity .ne. 1 then exit 3
87$! backup/compare f.t ff.t2
88$! if $severity .ne. 1 then exit 3
89$! backup/compare f.t ff.t3
90$! if $severity .ne. 1 then exit 3
91$
92$ backup/compare f.p ff.p1
93$ if $severity .ne. 1 then exit 3
94$! backup/compare f.p ff.p2
95$! if $severity .ne. 1 then exit 3
96$ backup/compare f.p ff.p3
97$ if $severity .ne. 1 then exit 3
98$
99$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/test/tsid.com b/src/lib/libssl/test/tsid.com
deleted file mode 100644
index b6c4e49473..0000000000
--- a/src/lib/libssl/test/tsid.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TSID.COM -- Tests sid keys
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl sess_id"
13$
14$ t = "testsid.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing session-id conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$! write sys$output "p -> t"
29$! 'cmd' -in fff.p -inform p -outform t -out f.t
30$! if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$! write sys$output "t -> d"
39$! 'cmd' -in f.t -inform t -outform d -out ff.d2
40$! if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$! write sys$output "d -> t"
46$! 'cmd' -in f.d -inform d -outform t -out ff.t1
47$! if $severity .ne. 1 then exit 3
48$! write sys$output "t -> t"
49$! 'cmd' -in f.t -inform t -outform t -out ff.t2
50$! if $severity .ne. 1 then exit 3
51$! write sys$output "p -> t"
52$! 'cmd' -in f.p -inform p -outform t -out ff.t3
53$! if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$! write sys$output "t -> p"
59$! 'cmd' -in f.t -inform t -outform p -out ff.p2
60$! if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$! backup/compare fff.p ff.p2
70$! if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$! backup/compare f.t ff.t1
75$! if $severity .ne. 1 then exit 3
76$! backup/compare f.t ff.t2
77$! if $severity .ne. 1 then exit 3
78$! backup/compare f.t ff.t3
79$! if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$! backup/compare f.p ff.p2
84$! if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/test/tverify.com b/src/lib/libssl/test/tverify.com
deleted file mode 100644
index d888344637..0000000000
--- a/src/lib/libssl/test/tverify.com
+++ /dev/null
@@ -1,65 +0,0 @@
1$! TVERIFY.COM
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p1 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ line_max = 255 ! Could be longer on modern non-VAX.
11$ temp_file_name = "certs_"+ f$getjpi( "", "PID")+ ".tmp"
12$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
13$ cmd = "mcr ''exe_dir'openssl verify ""-CAfile"" ''temp_file_name'"
14$ cmd_len = f$length( cmd)
15$ pems = "[-.certs...]*.pem"
16$!
17$! Concatenate all the certificate files.
18$!
19$ copy /concatenate 'pems' 'temp_file_name'
20$!
21$! Loop through all the certificate files.
22$!
23$ args = ""
24$ old_f = ""
25$ loop_file:
26$ f = f$search( pems)
27$ if ((f .nes. "") .and. (f .nes. old_f))
28$ then
29$ old_f = f
30$!
31$! If this file name would over-extend the command line, then
32$! run the command now.
33$!
34$ if (cmd_len+ f$length( args)+ 1+ f$length( f) .gt. line_max)
35$ then
36$ if (args .eqs. "") then goto disaster
37$ 'cmd''args'
38$ args = ""
39$ endif
40$! Add the next file to the argument list.
41$ args = args+ " "+ f
42$ else
43$! No more files in the list
44$ goto loop_file_end
45$ endif
46$ goto loop_file
47$ loop_file_end:
48$!
49$! Run the command for any left-over arguments.
50$!
51$ if (args .nes. "")
52$ then
53$ 'cmd''args'
54$ endif
55$!
56$! Delete the temporary file.
57$!
58$ if (f$search( "''temp_file_name';*") .nes. "") then -
59 delete 'temp_file_name';*
60$!
61$ exit
62$!
63$ disaster:
64$ write sys$output " Command line too long. Doomed."
65$!
diff --git a/src/lib/libssl/test/tx509.com b/src/lib/libssl/test/tx509.com
deleted file mode 100644
index 93ce988b41..0000000000
--- a/src/lib/libssl/test/tx509.com
+++ /dev/null
@@ -1,88 +0,0 @@
1$! TX509.COM -- Tests x509 certificates
2$
3$ __arch = "VAX"
4$ if f$getsyi("cpu") .ge. 128 then -
5 __arch = f$edit( f$getsyi( "ARCH_NAME"), "UPCASE")
6$ if __arch .eqs. "" then __arch = "UNK"
7$!
8$ if (p2 .eqs. "64") then __arch = __arch+ "_64"
9$!
10$ exe_dir = "sys$disk:[-.''__arch'.exe.apps]"
11$
12$ cmd = "mcr ''exe_dir'openssl x509"
13$
14$ t = "testx509.pem"
15$ if p1 .nes. "" then t = p1
16$
17$ write sys$output "testing X509 conversions"
18$ if f$search("fff.*") .nes "" then delete fff.*;*
19$ if f$search("ff.*") .nes "" then delete ff.*;*
20$ if f$search("f.*") .nes "" then delete f.*;*
21$ convert/fdl=sys$input: 't' fff.p
22RECORD
23 FORMAT STREAM_LF
24$
25$ write sys$output "p -> d"
26$ 'cmd' -in fff.p -inform p -outform d -out f.d
27$ if $severity .ne. 1 then exit 3
28$ write sys$output "p -> n"
29$ 'cmd' -in fff.p -inform p -outform n -out f.n
30$ if $severity .ne. 1 then exit 3
31$ write sys$output "p -> p"
32$ 'cmd' -in fff.p -inform p -outform p -out f.p
33$ if $severity .ne. 1 then exit 3
34$
35$ write sys$output "d -> d"
36$ 'cmd' -in f.d -inform d -outform d -out ff.d1
37$ if $severity .ne. 1 then exit 3
38$ write sys$output "n -> d"
39$ 'cmd' -in f.n -inform n -outform d -out ff.d2
40$ if $severity .ne. 1 then exit 3
41$ write sys$output "p -> d"
42$ 'cmd' -in f.p -inform p -outform d -out ff.d3
43$ if $severity .ne. 1 then exit 3
44$
45$ write sys$output "d -> n"
46$ 'cmd' -in f.d -inform d -outform n -out ff.n1
47$ if $severity .ne. 1 then exit 3
48$ write sys$output "n -> n"
49$ 'cmd' -in f.n -inform n -outform n -out ff.n2
50$ if $severity .ne. 1 then exit 3
51$ write sys$output "p -> n"
52$ 'cmd' -in f.p -inform p -outform n -out ff.n3
53$ if $severity .ne. 1 then exit 3
54$
55$ write sys$output "d -> p"
56$ 'cmd' -in f.d -inform d -outform p -out ff.p1
57$ if $severity .ne. 1 then exit 3
58$ write sys$output "n -> p"
59$ 'cmd' -in f.n -inform n -outform p -out ff.p2
60$ if $severity .ne. 1 then exit 3
61$ write sys$output "p -> p"
62$ 'cmd' -in f.p -inform p -outform p -out ff.p3
63$ if $severity .ne. 1 then exit 3
64$
65$ backup/compare fff.p f.p
66$ if $severity .ne. 1 then exit 3
67$ backup/compare fff.p ff.p1
68$ if $severity .ne. 1 then exit 3
69$ backup/compare fff.p ff.p2
70$ if $severity .ne. 1 then exit 3
71$ backup/compare fff.p ff.p3
72$ if $severity .ne. 1 then exit 3
73$
74$ backup/compare f.n ff.n1
75$ if $severity .ne. 1 then exit 3
76$ backup/compare f.n ff.n2
77$ if $severity .ne. 1 then exit 3
78$ backup/compare f.n ff.n3
79$ if $severity .ne. 1 then exit 3
80$
81$ backup/compare f.p ff.p1
82$ if $severity .ne. 1 then exit 3
83$ backup/compare f.p ff.p2
84$ if $severity .ne. 1 then exit 3
85$ backup/compare f.p ff.p3
86$ if $severity .ne. 1 then exit 3
87$
88$ delete f.*;*,ff.*;*,fff.*;*
diff --git a/src/lib/libssl/tls1.h b/src/lib/libssl/tls1.h
index c39c267f0b..c992091e30 100644
--- a/src/lib/libssl/tls1.h
+++ b/src/lib/libssl/tls1.h
@@ -230,6 +230,12 @@ extern "C" {
230/* ExtensionType value from RFC5620 */ 230/* ExtensionType value from RFC5620 */
231#define TLSEXT_TYPE_heartbeat 15 231#define TLSEXT_TYPE_heartbeat 15
232 232
233/* ExtensionType value for TLS padding extension.
234 * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml
235 * http://tools.ietf.org/html/draft-agl-tls-padding-03
236 */
237#define TLSEXT_TYPE_padding 21
238
233/* ExtensionType value from RFC4507 */ 239/* ExtensionType value from RFC4507 */
234#define TLSEXT_TYPE_session_ticket 35 240#define TLSEXT_TYPE_session_ticket 35
235 241