aboutsummaryrefslogtreecommitdiff
path: root/contrib/bind9
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bind9')
-rw-r--r--contrib/bind9/CHANGES967
-rw-r--r--contrib/bind9/COPYRIGHT4
-rw-r--r--contrib/bind9/FAQ4
-rw-r--r--contrib/bind9/FAQ.xml5
-rw-r--r--contrib/bind9/HISTORY52
-rw-r--r--contrib/bind9/Makefile.in22
-rw-r--r--contrib/bind9/README183
-rw-r--r--contrib/bind9/aclocal.m47
-rw-r--r--contrib/bind9/bin/Makefile.in6
-rw-r--r--contrib/bind9/bin/check/check-tool.c20
-rw-r--r--contrib/bind9/bin/check/check-tool.h7
-rw-r--r--contrib/bind9/bin/check/named-checkconf.c17
-rw-r--r--contrib/bind9/bin/check/named-checkzone.835
-rw-r--r--contrib/bind9/bin/check/named-checkzone.c71
-rw-r--r--contrib/bind9/bin/check/named-checkzone.docbook45
-rw-r--r--contrib/bind9/bin/check/named-checkzone.html47
-rw-r--r--contrib/bind9/bin/confgen/ddns-confgen.c2
-rw-r--r--contrib/bind9/bin/confgen/keygen.c12
-rw-r--r--contrib/bind9/bin/confgen/rndc-confgen.c6
-rw-r--r--contrib/bind9/bin/dig/Makefile.in6
-rw-r--r--contrib/bind9/bin/dig/dig.146
-rw-r--r--contrib/bind9/bin/dig/dig.c118
-rw-r--r--contrib/bind9/bin/dig/dig.docbook138
-rw-r--r--contrib/bind9/bin/dig/dig.html138
-rw-r--r--contrib/bind9/bin/dig/dighost.c90
-rw-r--r--contrib/bind9/bin/dig/host.c20
-rw-r--r--contrib/bind9/bin/dig/include/dig/dig.h6
-rw-r--r--contrib/bind9/bin/dig/nslookup.c68
-rw-r--r--contrib/bind9/bin/dnssec/Makefile.in22
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-dsfromkey.822
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-dsfromkey.c57
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook25
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-dsfromkey.html39
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keyfromlabel.811
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c21
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook17
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keyfromlabel.html23
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keygen.820
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keygen.c49
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keygen.docbook30
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-keygen.html31
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-revoke.c5
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-revoke.docbook2
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-settime.811
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-settime.c56
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-settime.docbook17
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-settime.html23
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-signzone.866
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-signzone.c951
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-signzone.docbook107
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-signzone.html95
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-verify.897
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-verify.c328
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-verify.docbook185
-rw-r--r--contrib/bind9/bin/dnssec/dnssec-verify.html117
-rw-r--r--contrib/bind9/bin/dnssec/dnssectool.c1336
-rw-r--r--contrib/bind9/bin/dnssec/dnssectool.h17
-rw-r--r--contrib/bind9/bin/named/Makefile.in24
-rw-r--r--contrib/bind9/bin/named/bind9.ver3.xsl738
-rw-r--r--contrib/bind9/bin/named/bind9.ver3.xsl.h740
-rw-r--r--contrib/bind9/bin/named/builtin.c15
-rw-r--r--contrib/bind9/bin/named/client.c510
-rw-r--r--contrib/bind9/bin/named/config.c40
-rw-r--r--contrib/bind9/bin/named/control.c16
-rw-r--r--contrib/bind9/bin/named/controlconf.c9
-rw-r--r--contrib/bind9/bin/named/include/dlz/dlz_dlopen_driver.h2
-rw-r--r--contrib/bind9/bin/named/include/named/client.h38
-rw-r--r--contrib/bind9/bin/named/include/named/control.h7
-rw-r--r--contrib/bind9/bin/named/include/named/globals.h10
-rw-r--r--contrib/bind9/bin/named/include/named/interfacemgr.h11
-rw-r--r--contrib/bind9/bin/named/include/named/server.h30
-rw-r--r--contrib/bind9/bin/named/include/named/zoneconf.h6
-rw-r--r--contrib/bind9/bin/named/interfacemgr.c78
-rw-r--r--contrib/bind9/bin/named/log.c4
-rw-r--r--contrib/bind9/bin/named/logconf.c16
-rw-r--r--contrib/bind9/bin/named/lwresd.c4
-rw-r--r--contrib/bind9/bin/named/main.c45
-rw-r--r--contrib/bind9/bin/named/named.819
-rw-r--r--contrib/bind9/bin/named/named.conf.518
-rw-r--r--contrib/bind9/bin/named/named.conf.docbook19
-rw-r--r--contrib/bind9/bin/named/named.conf.html48
-rw-r--r--contrib/bind9/bin/named/named.docbook22
-rw-r--r--contrib/bind9/bin/named/named.html28
-rw-r--r--contrib/bind9/bin/named/query.c583
-rw-r--r--contrib/bind9/bin/named/server.c1189
-rw-r--r--contrib/bind9/bin/named/statschannel.c517
-rw-r--r--contrib/bind9/bin/named/tkeyconf.c8
-rw-r--r--contrib/bind9/bin/named/tsigconf.c4
-rw-r--r--contrib/bind9/bin/named/unix/Makefile.in2
-rw-r--r--contrib/bind9/bin/named/unix/dlz_dlopen_driver.c27
-rw-r--r--contrib/bind9/bin/named/unix/os.c2
-rw-r--r--contrib/bind9/bin/named/update.c1266
-rw-r--r--contrib/bind9/bin/named/xfrout.c42
-rw-r--r--contrib/bind9/bin/named/zoneconf.c388
-rw-r--r--contrib/bind9/bin/nsupdate/Makefile.in6
-rw-r--r--contrib/bind9/bin/nsupdate/nsupdate.118
-rw-r--r--contrib/bind9/bin/nsupdate/nsupdate.c101
-rw-r--r--contrib/bind9/bin/nsupdate/nsupdate.docbook20
-rw-r--r--contrib/bind9/bin/nsupdate/nsupdate.html28
-rw-r--r--contrib/bind9/bin/rndc/rndc.c29
-rw-r--r--contrib/bind9/bin/tools/genrandom.84
-rw-r--r--contrib/bind9/bin/tools/genrandom.c3
-rw-r--r--contrib/bind9/bin/tools/genrandom.docbook5
-rw-r--r--contrib/bind9/bin/tools/genrandom.html10
-rw-r--r--contrib/bind9/bin/tools/isc-hmac-fixup.86
-rw-r--r--contrib/bind9/bin/tools/isc-hmac-fixup.docbook5
-rw-r--r--contrib/bind9/bin/tools/isc-hmac-fixup.html10
-rw-r--r--contrib/bind9/bin/tools/nsec3hash.c4
-rw-r--r--contrib/bind9/config.h.in19
-rw-r--r--contrib/bind9/config.threads.in13
-rw-r--r--contrib/bind9/configure.in400
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM-book.xml850
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch01.html52
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch02.html22
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch03.html176
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch04.html207
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch05.html6
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch06.html784
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch07.html21
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch08.html18
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch09.html220
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.ch10.html11
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.html213
-rw-r--r--contrib/bind9/doc/arm/Bv9ARM.pdf18300
-rw-r--r--contrib/bind9/doc/arm/dnssec.xml31
-rw-r--r--contrib/bind9/doc/arm/man.arpaname.html8
-rw-r--r--contrib/bind9/doc/arm/man.ddns-confgen.html10
-rw-r--r--contrib/bind9/doc/arm/man.dig.html138
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-dsfromkey.html48
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html25
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-keygen.html31
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-revoke.html10
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-settime.html25
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-signzone.html103
-rw-r--r--contrib/bind9/doc/arm/man.dnssec-verify.html156
-rw-r--r--contrib/bind9/doc/arm/man.genrandom.html10
-rw-r--r--contrib/bind9/doc/arm/man.host.html18
-rw-r--r--contrib/bind9/doc/arm/man.isc-hmac-fixup.html10
-rw-r--r--contrib/bind9/doc/arm/man.named-checkconf.html20
-rw-r--r--contrib/bind9/doc/arm/man.named-checkzone.html47
-rw-r--r--contrib/bind9/doc/arm/man.named-journalprint.html8
-rw-r--r--contrib/bind9/doc/arm/man.named.html28
-rw-r--r--contrib/bind9/doc/arm/man.nsec3hash.html10
-rw-r--r--contrib/bind9/doc/arm/man.nsupdate.html28
-rw-r--r--contrib/bind9/doc/arm/man.rndc-confgen.html12
-rw-r--r--contrib/bind9/doc/arm/man.rndc.conf.html12
-rw-r--r--contrib/bind9/doc/arm/man.rndc.html12
-rw-r--r--contrib/bind9/doc/arm/pkcs11.xml4
-rw-r--r--contrib/bind9/doc/misc/options61
-rw-r--r--contrib/bind9/isc-config.sh.in18
-rw-r--r--contrib/bind9/lib/Makefile.in7
-rw-r--r--contrib/bind9/lib/bind9/Makefile.in3
-rw-r--r--contrib/bind9/lib/bind9/api5
-rw-r--r--contrib/bind9/lib/bind9/check.c210
-rw-r--r--contrib/bind9/lib/dns/Makefile.in18
-rw-r--r--contrib/bind9/lib/dns/acache.c54
-rw-r--r--contrib/bind9/lib/dns/acl.c11
-rw-r--r--contrib/bind9/lib/dns/adb.c31
-rw-r--r--contrib/bind9/lib/dns/api7
-rw-r--r--contrib/bind9/lib/dns/byaddr.c9
-rw-r--r--contrib/bind9/lib/dns/cache.c143
-rw-r--r--contrib/bind9/lib/dns/callbacks.c6
-rw-r--r--contrib/bind9/lib/dns/client.c36
-rw-r--r--contrib/bind9/lib/dns/clientinfo.c38
-rw-r--r--contrib/bind9/lib/dns/db.c93
-rw-r--r--contrib/bind9/lib/dns/dbtable.c9
-rw-r--r--contrib/bind9/lib/dns/diff.c14
-rw-r--r--contrib/bind9/lib/dns/dispatch.c556
-rw-r--r--contrib/bind9/lib/dns/dlz.c22
-rw-r--r--contrib/bind9/lib/dns/dns64.c4
-rw-r--r--contrib/bind9/lib/dns/dnssec.c75
-rw-r--r--contrib/bind9/lib/dns/dst_api.c123
-rw-r--r--contrib/bind9/lib/dns/dst_internal.h6
-rw-r--r--contrib/bind9/lib/dns/dst_openssl.h7
-rw-r--r--contrib/bind9/lib/dns/dst_parse.c2
-rw-r--r--contrib/bind9/lib/dns/ecdb.c15
-rw-r--r--contrib/bind9/lib/dns/gen.c184
-rw-r--r--contrib/bind9/lib/dns/gssapi_link.c3
-rw-r--r--contrib/bind9/lib/dns/gssapictx.c12
-rw-r--r--contrib/bind9/lib/dns/hmac_link.c8
-rw-r--r--contrib/bind9/lib/dns/include/dns/Makefile.in6
-rw-r--r--contrib/bind9/lib/dns/include/dns/acache.h17
-rw-r--r--contrib/bind9/lib/dns/include/dns/acl.h4
-rw-r--r--contrib/bind9/lib/dns/include/dns/adb.h6
-rw-r--r--contrib/bind9/lib/dns/include/dns/cache.h34
-rw-r--r--contrib/bind9/lib/dns/include/dns/callbacks.h12
-rw-r--r--contrib/bind9/lib/dns/include/dns/clientinfo.h85
-rw-r--r--contrib/bind9/lib/dns/include/dns/db.h54
-rw-r--r--contrib/bind9/lib/dns/include/dns/dispatch.h66
-rw-r--r--contrib/bind9/lib/dns/include/dns/dlz_dlopen.h15
-rw-r--r--contrib/bind9/lib/dns/include/dns/dnssec.h17
-rw-r--r--contrib/bind9/lib/dns/include/dns/events.h9
-rw-r--r--contrib/bind9/lib/dns/include/dns/journal.h42
-rw-r--r--contrib/bind9/lib/dns/include/dns/log.h2
-rw-r--r--contrib/bind9/lib/dns/include/dns/master.h29
-rw-r--r--contrib/bind9/lib/dns/include/dns/masterdump.h47
-rw-r--r--contrib/bind9/lib/dns/include/dns/message.h26
-rw-r--r--contrib/bind9/lib/dns/include/dns/name.h22
-rw-r--r--contrib/bind9/lib/dns/include/dns/ncache.h7
-rw-r--r--contrib/bind9/lib/dns/include/dns/nsec.h42
-rw-r--r--contrib/bind9/lib/dns/include/dns/nsec3.h15
-rw-r--r--contrib/bind9/lib/dns/include/dns/private.h21
-rw-r--r--contrib/bind9/lib/dns/include/dns/rdata.h15
-rw-r--r--contrib/bind9/lib/dns/include/dns/rdataset.h2
-rw-r--r--contrib/bind9/lib/dns/include/dns/resolver.h11
-rw-r--r--contrib/bind9/lib/dns/include/dns/result.h8
-rw-r--r--contrib/bind9/lib/dns/include/dns/rpz.h21
-rw-r--r--contrib/bind9/lib/dns/include/dns/rriterator.h4
-rw-r--r--contrib/bind9/lib/dns/include/dns/sdb.h13
-rw-r--r--contrib/bind9/lib/dns/include/dns/sdlz.h18
-rw-r--r--contrib/bind9/lib/dns/include/dns/time.h2
-rw-r--r--contrib/bind9/lib/dns/include/dns/types.h25
-rw-r--r--contrib/bind9/lib/dns/include/dns/update.h64
-rw-r--r--contrib/bind9/lib/dns/include/dns/validator.h6
-rw-r--r--contrib/bind9/lib/dns/include/dns/view.h46
-rw-r--r--contrib/bind9/lib/dns/include/dns/zone.h211
-rw-r--r--contrib/bind9/lib/dns/include/dns/zt.h36
-rw-r--r--contrib/bind9/lib/dns/include/dst/dst.h44
-rw-r--r--contrib/bind9/lib/dns/iptable.c7
-rw-r--r--contrib/bind9/lib/dns/journal.c185
-rw-r--r--contrib/bind9/lib/dns/key.c16
-rw-r--r--contrib/bind9/lib/dns/keytable.c10
-rw-r--r--contrib/bind9/lib/dns/log.c2
-rw-r--r--contrib/bind9/lib/dns/lookup.c11
-rw-r--r--contrib/bind9/lib/dns/master.c87
-rw-r--r--contrib/bind9/lib/dns/masterdump.c165
-rw-r--r--contrib/bind9/lib/dns/message.c163
-rw-r--r--contrib/bind9/lib/dns/name.c24
-rw-r--r--contrib/bind9/lib/dns/ncache.c24
-rw-r--r--contrib/bind9/lib/dns/nsec.c258
-rw-r--r--contrib/bind9/lib/dns/nsec3.c369
-rw-r--r--contrib/bind9/lib/dns/openssl_link.c62
-rw-r--r--contrib/bind9/lib/dns/openssldh_link.c1
-rw-r--r--contrib/bind9/lib/dns/openssldsa_link.c20
-rw-r--r--contrib/bind9/lib/dns/opensslecdsa_link.c25
-rw-r--r--contrib/bind9/lib/dns/opensslgost_link.c4
-rw-r--r--contrib/bind9/lib/dns/opensslrsa_link.c69
-rw-r--r--contrib/bind9/lib/dns/peer.c4
-rw-r--r--contrib/bind9/lib/dns/private.c80
-rw-r--r--contrib/bind9/lib/dns/rbt.c13
-rw-r--r--contrib/bind9/lib/dns/rbtdb.c82
-rw-r--r--contrib/bind9/lib/dns/rdata.c276
-rw-r--r--contrib/bind9/lib/dns/rdata/any_255/tsig_250.c25
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/cert_37.c9
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/dlv_32769.c10
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/dnskey_48.c44
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/ds_43.c8
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/eui48_108.c215
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/eui48_108.h26
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/eui64_109.c220
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/eui64_109.h26
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/ipseckey_45.c7
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/key_25.c15
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/keydata_65533.c32
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/l32_105.c233
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/l32_105.h27
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/l64_106.c228
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/l64_106.h27
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/lp_107.c275
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/lp_107.h28
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/mx_15.c3
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/naptr_35.c (renamed from contrib/bind9/lib/dns/rdata/in_1/naptr_35.c)91
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/naptr_35.h (renamed from contrib/bind9/lib/dns/rdata/in_1/naptr_35.h)12
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/nid_104.c228
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/nid_104.h27
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/nsec3_50.c45
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/nsec3_50.h47
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/opt_41.c10
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/rrsig_46.c17
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/sig_24.c9
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/soa_6.c4
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/sshfp_44.c9
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/tkey_249.c16
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/txt_16.c9
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/uri_256.c331
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/uri_256.h31
-rw-r--r--contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c9
-rw-r--r--contrib/bind9/lib/dns/rdata/in_1/nsap_22.c3
-rw-r--r--contrib/bind9/lib/dns/request.c8
-rw-r--r--contrib/bind9/lib/dns/resolver.c571
-rw-r--r--contrib/bind9/lib/dns/result.c7
-rw-r--r--contrib/bind9/lib/dns/rootns.c5
-rw-r--r--contrib/bind9/lib/dns/rpz.c40
-rw-r--r--contrib/bind9/lib/dns/sdb.c54
-rw-r--r--contrib/bind9/lib/dns/sdlz.c88
-rw-r--r--contrib/bind9/lib/dns/spnego.c34
-rw-r--r--contrib/bind9/lib/dns/spnego_asn1.c52
-rw-r--r--contrib/bind9/lib/dns/ssu.c7
-rw-r--r--contrib/bind9/lib/dns/ssu_external.c2
-rw-r--r--contrib/bind9/lib/dns/tkey.c11
-rw-r--r--contrib/bind9/lib/dns/tsig.c44
-rw-r--r--contrib/bind9/lib/dns/update.c1865
-rw-r--r--contrib/bind9/lib/dns/validator.c555
-rw-r--r--contrib/bind9/lib/dns/view.c104
-rw-r--r--contrib/bind9/lib/dns/xfrin.c15
-rw-r--r--contrib/bind9/lib/dns/zone.c3032
-rw-r--r--contrib/bind9/lib/dns/zt.c160
-rw-r--r--contrib/bind9/lib/export/dns/Makefile.in8
-rw-r--r--contrib/bind9/lib/export/irs/Makefile.in5
-rw-r--r--contrib/bind9/lib/export/isc/Makefile.in15
-rw-r--r--contrib/bind9/lib/export/isc/include/isc/Makefile.in4
-rw-r--r--contrib/bind9/lib/export/isc/nls/Makefile.in2
-rw-r--r--contrib/bind9/lib/export/isc/nothreads/Makefile.in2
-rw-r--r--contrib/bind9/lib/export/isc/pthreads/Makefile.in2
-rw-r--r--contrib/bind9/lib/export/isc/unix/Makefile.in2
-rw-r--r--contrib/bind9/lib/export/isccfg/Makefile.in4
-rw-r--r--contrib/bind9/lib/export/samples/Makefile.in5
-rw-r--r--contrib/bind9/lib/export/samples/nsprobe.c28
-rw-r--r--contrib/bind9/lib/export/samples/sample-async.c4
-rw-r--r--contrib/bind9/lib/export/samples/sample-gai.c6
-rw-r--r--contrib/bind9/lib/export/samples/sample-request.c12
-rw-r--r--contrib/bind9/lib/export/samples/sample-update.c6
-rw-r--r--contrib/bind9/lib/export/samples/sample.c24
-rw-r--r--contrib/bind9/lib/irs/api7
-rw-r--r--contrib/bind9/lib/irs/dnsconf.c6
-rw-r--r--contrib/bind9/lib/irs/getaddrinfo.c28
-rw-r--r--contrib/bind9/lib/irs/getnameinfo.c5
-rw-r--r--contrib/bind9/lib/irs/resconf.c2
-rw-r--r--contrib/bind9/lib/isc/Makefile.in11
-rw-r--r--contrib/bind9/lib/isc/api9
-rw-r--r--contrib/bind9/lib/isc/buffer.c4
-rw-r--r--contrib/bind9/lib/isc/include/isc/Makefile.in4
-rw-r--r--contrib/bind9/lib/isc/include/isc/buffer.h18
-rw-r--r--contrib/bind9/lib/isc/include/isc/file.h20
-rw-r--r--contrib/bind9/lib/isc/include/isc/heap.h4
-rw-r--r--contrib/bind9/lib/isc/include/isc/list.h17
-rw-r--r--contrib/bind9/lib/isc/include/isc/mem.h23
-rw-r--r--contrib/bind9/lib/isc/include/isc/namespace.h10
-rw-r--r--contrib/bind9/lib/isc/include/isc/pool.h149
-rw-r--r--contrib/bind9/lib/isc/include/isc/queue.h165
-rw-r--r--contrib/bind9/lib/isc/include/isc/radix.h38
-rw-r--r--contrib/bind9/lib/isc/include/isc/regex.h39
-rw-r--r--contrib/bind9/lib/isc/include/isc/region.h11
-rw-r--r--contrib/bind9/lib/isc/include/isc/sockaddr.h3
-rw-r--r--contrib/bind9/lib/isc/include/isc/socket.h26
-rw-r--r--contrib/bind9/lib/isc/include/isc/task.h64
-rw-r--r--contrib/bind9/lib/isc/include/isc/taskpool.h13
-rw-r--r--contrib/bind9/lib/isc/include/isc/timer.h17
-rw-r--r--contrib/bind9/lib/isc/inet_aton.c4
-rw-r--r--contrib/bind9/lib/isc/log.c9
-rw-r--r--contrib/bind9/lib/isc/mem.c199
-rw-r--r--contrib/bind9/lib/isc/nothreads/Makefile.in6
-rw-r--r--contrib/bind9/lib/isc/parseint.c13
-rw-r--r--contrib/bind9/lib/isc/pool.c177
-rw-r--r--contrib/bind9/lib/isc/pthreads/thread.c4
-rw-r--r--contrib/bind9/lib/isc/radix.c37
-rw-r--r--contrib/bind9/lib/isc/ratelimiter.c17
-rw-r--r--contrib/bind9/lib/isc/regex.c370
-rw-r--r--contrib/bind9/lib/isc/sockaddr.c7
-rw-r--r--contrib/bind9/lib/isc/socket_api.c40
-rw-r--r--contrib/bind9/lib/isc/sparc64/include/isc/atomic.h2
-rw-r--r--contrib/bind9/lib/isc/symtab.c10
-rw-r--r--contrib/bind9/lib/isc/task.c371
-rw-r--r--contrib/bind9/lib/isc/task_api.c30
-rw-r--r--contrib/bind9/lib/isc/task_p.h10
-rw-r--r--contrib/bind9/lib/isc/taskpool.c23
-rw-r--r--contrib/bind9/lib/isc/timer.c10
-rw-r--r--contrib/bind9/lib/isc/timer_api.c6
-rw-r--r--contrib/bind9/lib/isc/unix/entropy.c5
-rw-r--r--contrib/bind9/lib/isc/unix/file.c21
-rw-r--r--contrib/bind9/lib/isc/unix/include/isc/time.h6
-rw-r--r--contrib/bind9/lib/isc/unix/net.c3
-rw-r--r--contrib/bind9/lib/isc/unix/socket.c335
-rw-r--r--contrib/bind9/lib/isc/unix/time.c8
-rw-r--r--contrib/bind9/lib/isccc/api7
-rw-r--r--contrib/bind9/lib/isccc/cc.c47
-rw-r--r--contrib/bind9/lib/isccfg/Makefile.in3
-rw-r--r--contrib/bind9/lib/isccfg/aclconf.c2
-rw-r--r--contrib/bind9/lib/isccfg/api7
-rw-r--r--contrib/bind9/lib/isccfg/include/isccfg/cfg.h6
-rw-r--r--contrib/bind9/lib/isccfg/namedconf.c70
-rw-r--r--contrib/bind9/lib/isccfg/parser.c19
-rw-r--r--contrib/bind9/lib/lwres/api7
-rw-r--r--contrib/bind9/lib/lwres/context.c3
-rw-r--r--contrib/bind9/lib/lwres/getaddrinfo.c16
-rw-r--r--contrib/bind9/lib/lwres/getipnode.c14
-rw-r--r--contrib/bind9/lib/lwres/getnameinfo.c4
-rw-r--r--contrib/bind9/lib/lwres/getrrset.c54
-rw-r--r--contrib/bind9/lib/lwres/lwinetaton.c6
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_config.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_config.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_config.html10
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_context.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_context.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_context.html8
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gabn.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gabn.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gabn.html10
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gai_strerror.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gai_strerror.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gai_strerror.html6
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getaddrinfo.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getaddrinfo.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getaddrinfo.html8
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gethostent.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gethostent.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gethostent.html10
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getipnode.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getipnode.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getipnode.html8
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getnameinfo.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getnameinfo.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getnameinfo.html10
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.html8
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gnba.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gnba.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_gnba.html10
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_hstrerror.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_hstrerror.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_hstrerror.html8
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_inetntop.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_inetntop.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_inetntop.html8
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_noop.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_noop.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_noop.html10
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_packet.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_packet.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_packet.html6
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_resutil.34
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_resutil.docbook5
-rw-r--r--contrib/bind9/lib/lwres/man/lwres_resutil.html8
-rw-r--r--contrib/bind9/lib/lwres/print.c4
-rw-r--r--contrib/bind9/lib/lwres/print_p.h4
-rw-r--r--contrib/bind9/lib/lwres/strtoul.c4
-rw-r--r--contrib/bind9/lib/lwres/unix/Makefile.in2
-rw-r--r--contrib/bind9/lib/lwres/unix/include/Makefile.in2
-rw-r--r--contrib/bind9/lib/lwres/unix/include/lwres/Makefile.in2
-rw-r--r--contrib/bind9/lib/lwres/unix/include/lwres/net.h8
-rw-r--r--contrib/bind9/lib/lwres/version.c4
-rw-r--r--contrib/bind9/libtool.m46656
-rw-r--r--contrib/bind9/libtool.m4/libtool.m47982
-rw-r--r--contrib/bind9/libtool.m4/ltoptions.m4384
-rw-r--r--contrib/bind9/libtool.m4/ltsugar.m4123
-rw-r--r--contrib/bind9/libtool.m4/ltversion.m423
-rw-r--r--contrib/bind9/ltmain.sh10028
-rw-r--r--contrib/bind9/make/Makefile.in2
-rw-r--r--contrib/bind9/make/includes.in2
-rw-r--r--contrib/bind9/make/rules.in19
-rwxr-xr-xcontrib/bind9/mkinstalldirs2
-rw-r--r--contrib/bind9/version6
443 files changed, 50062 insertions, 26941 deletions
diff --git a/contrib/bind9/CHANGES b/contrib/bind9/CHANGES
index bd064e5ff980..4e3152fd0bb7 100644
--- a/contrib/bind9/CHANGES
+++ b/contrib/bind9/CHANGES
@@ -1,32 +1,514 @@
- --- 9.8.4-P2 released ---
+ --- 9.9.3-P2 released ---
-3516. [security] Removed the check for regex.h in configure in order
- to disable regex syntax checking, as it exposes
- BIND to a critical flaw in libregex on some
- platforms. [RT #32688]
+3621. [security] Incorrect bounds checking on private type 'keydata'
+ can lead to a remotely triggerable REQUIRE failure
+ (CVE-2013-4854). [RT #34238]
- --- 9.8.4-P1 released ---
+ --- 9.9.3-P1 released ---
-3407. [security] Named could die on specific queries with dns64 enabled.
- [Addressed in change #3388 for BIND 9.8.5 and 9.9.3.]
+3584. [security] Caching data from an incompletely signed zone could
+ trigger an assertion failure in resolver.c [RT #33690]
- --- 9.8.4 released ---
+ --- 9.9.3 released ---
+
+3568. [cleanup] Add a product description line to the version file,
+ to be reported by named -v/-V. [RT #33366]
+
+3567. [bug] Silence clang static analyzer warnings. [RT #33365]
+
+3563. [contrib] zone2sqlite failed with some table names. [RT #33375]
+
+3561. [bug] dig: issue a warning if an EDNS query returns FORMERR
+ or NOTIMP. Adjust usage message. [RT #33363]
+
+ --- 9.9.3rc2 released ---
+
+3560. [bug] isc-config.sh did not honor includedir and libdir
+ when set via configure. [RT #33345]
+
+3559. [func] Check that both forms of Sender Policy Framework
+ records exist or do not exist. [RT #33355]
+
+3558. [bug] IXFR of a DLZ stored zone was broken. [RT #33331]
+
+3557. [bug] Reloading redirect zones was broken. [RT #33292]
+
+3556. [maint] Added AAAA for D.ROOT-SERVERS.NET.
+
+3555. [bug] Address theoretical race conditions in acache.c
+ (change #3553 was incomplete). [RT #33252]
+
+3553. [bug] Address suspected double free in acache. [RT #33252]
+
+3552. [bug] Wrong getopt option string for 'nsupdate -r'.
+ [RT #33280]
+
+3549. [doc] Documentation for "request-nsid" was missing.
+ [RT #33153]
+
+3548. [bug] The NSID request code in resolver.c was broken
+ resulting in invalid EDNS options being sent.
+ [RT #33153]
+
+3547. [bug] Some malformed unknown rdata records were not properly
+ detected and rejected. [RT #33129]
+
+ --- 9.9.3rc1 released ---
+
+3546. [func] Add EUI48 and EUI64 types. [RT #33082]
+
+3544. [contrib] check5011.pl: Script to report the status of
+ managed keys as recorded in managed-keys.bind.
+ Contributed by Tony Finch <dot@dotat.at>
+
+3543. [bug] Update socket structure before attaching to socket
+ manager after accept. [RT #33084]
+
+3541. [bug] Parts of libdns were not properly initialized when
+ built in libexport mode. [RT #33028]
+
+3540. [test] libt_api: t_info and t_assert were not thread safe.
+
+3539. [port] win32: timestamp format didn't match other platforms.
+
+3538. [test] Running "make test" now requires loopback interfaces
+ to be set up. [RT #32452]
+
+3537. [tuning] Slave zones, when updated, now send NOTIFY messages
+ to peers before being dumped to disk rather than
+ after. [RT #27242]
+
+3535. [bug] Minor win32 cleanups. [RT #32962]
+
+3534. [bug] Extra text after an embedded NULL was ignored when
+ parsing zone files. [RT #32699]
+
+3533. [contrib] query-loc-0.4.0: memory leaks. [RT #32960]
+
+3532. [contrib] zkt: fixed buffer overrun, resource leaks. [RT #32960]
+
+3531. [bug] win32: A uninitialized value could be returned on out
+ of memory. [RT #32960]
+
+3530. [contrib] Better RTT tracking in queryperf. [RT #30128]
+
+3528. [func] New "dnssec-coverage" command scans the timing
+ metadata for a set of DNSSEC keys and reports if a
+ lapse in signing coverage has been scheduled
+ inadvertently. (Note: This tool depends on python;
+ it will not be built or installed on systems that
+ do not have a python interpreter.) [RT #28098]
+
+3527. [compat] Add a URI to allow applications to explicitly
+ request a particular XML schema from the statistics
+ channel, returning 404 if not supported. [RT #32481]
+
+3526. [cleanup] Set up dependencies for unit tests correctly during
+ build. [RT #32803]
+
+3521. [bug] Address memory leak in opensslecdsa_link.c. [RT #32249]
+
+3520. [bug] 'mctx' was not being referenced counted in some places
+ where it should have been. [RT #32794]
+
+ --- 9.9.3b2 released ---
+
+3517. [bug] Reorder destruction to avoid shutdown race. [RT #32777]
+
+3515. [port] '%T' is not portable in strftime(). [RT #32763]
+
+3514. [bug] The ranges for valid key sizes in ddns-confgen and
+ rndc-confgen were too constrained. Keys up to 512
+ bits are now allowed for most algorithms, and up
+ to 1024 bits for hmac-sha384 and hmac-sha512.
+ [RT #32753]
+
+3511. [doc] Improve documentation of redirect zones. [RT #32756]
+
+3509. [cleanup] Added a product line to version file to allow for
+ easy naming of different products (BIND
+ vs BIND ESV, for example). [RT #32755]
+
+3508. [contrib] queryperf was incorrectly rejecting the -T option.
+ [RT #32338]
+
+3507. [bug] Statistics channel XSL (when built with
+ --enable-newstats) had a glitch when attempting
+ to chart query data before any queries had been
+ received. [RT #32620]
+
+3505. [bug] When setting "max-cache-size" and "max-acache-size",
+ larger values than 4 gigabytes could not be set
+ explicitly, though larger sizes were available
+ when setting cache size to 0. This has been
+ corrected; the full range is now available.
+ [RT #32358]
+
+3503. [doc] Clarify size_spec syntax. [RT #32449]
+
+3501. [func] zone-statistics now takes three options: full,
+ terse, and none. "yes" and "no" are retained as
+ synonyms for full and terse, respectively. [RT #29165]
+
+3500. [security] Support NAPTR regular expression validation on
+ all platforms without using libregex, which
+ can be vulnerable to memory exhaustion attack
+ (CVE-2013-2266). [RT #32688]
+
+3499. [doc] Corrected ARM documentation of built-in zones.
+ [RT #32694]
+
+3498. [bug] zone statistics for zones which matched a potential
+ empty zone could have their zone-statistics setting
+ overridden.
+
+3496. [func] Improvements to RPZ performance. The "response-policy"
+ syntax now includes a "min-ns-dots" clause, with
+ default 1, to exclude top-level domains from
+ NSIP and NSDNAME checking. --enable-rpz-nsip and
+ --enable-rpz-nsdname are now the default. [RT #32251]
+
+3493. [contrib] Added BDBHPT dynamically-lodable DLZ module,
+ contributed by Mark Goldfinch. [RT #32549]
+
+3492. [bug] Fixed a regression in zone loading performance
+ due to lock contention. [RT #30399]
+
+3491. [bug] Slave zones using inline-signing must specify a
+ file name. [RT #31946]
+
+3489. [bug] --enable-developer now turns on ISC_LIST_CHECKINIT.
+ When cloning a rdataset do not copy the link contents.
+ [RT #32651]
+
+3488. [bug] Use after free error with DH generated keys. [RT #32649]
+
+3487. [bug] Change 3444 was not complete. There was a additional
+ place where the NOQNAME proof needed to be saved.
+ [RT #32629]
+
+3486. [bug] named could crash when using TKEY-negotiated keys
+ that had been deleted and then recreated. [RT #32506]
+
+3485. [cleanup] Only compile openssl_gostlink.c if we support GOST.
+
+3483. [bug] Corrected XSL code in use with --enable-newstats.
+ [RT #32587]
+
+3481. [cleanup] Removed use of const const in atf.
+
+3480. [bug] Silence logging noise when setting up zone
+ statistics. [RT #32525]
+
+3479. [bug] Address potential memory leaks in gssapi support
+ code. [RT #32405]
+
+3478. [port] Fix a build failure in strict C99 environments
+ [RT #32475]
+
+3474. [bug] nsupdate could assert when the local and remote
+ address families didn't match. [RT #22897]
+
+3473. [bug] dnssec-signzone/verify could incorrectly report
+ an error condition due to an empty node above an
+ opt-out delegation lacking an NSEC3. [RT #32072]
+
+3471. [bug] The number of UDP dispatches now defaults to
+ the number of CPUs even if -n has been set to
+ a higher value. [RT #30964]
+
+3470. [bug] Slave zones could fail to dump when successfully
+ refreshing after an initial failure. [RT #31276]
+
+ --- 9.9.3b1 released ---
+
+3468. [security] RPZ rules to generate A records (but not AAAA records)
+ could trigger an assertion failure when used in
+ conjunction with DNS64 (CVE-2012-5689). [RT #32141]
+
+3467. [bug] Added checks in dnssec-keygen and dnssec-settime
+ to check for delete date < inactive date. [RT #31719]
+
+3466. [contrib] Corrected the DNS_CLIENTINFOMETHODS_VERSION check
+ in DLZ example driver. [RT #32275]
+
+3465. [bug] Handle isolated reserved ports. [RT #31778]
+
+3464. [maint] Updates to PKCS#11 openssl patches, supporting
+ versions 0.9.8x, 1.0.0j, 1.0.1c [RT #29749]
+
+3463. [doc] Clarify managed-keys syntax in ARM. [RT #32232]
+
+3462. [doc] Clarify server selection behavior of dig when using
+ -4 or -6 options. [RT #32181]
+
+3461. [bug] Negative responses could incorrectly have AD=1
+ set. [RT #32237]
+
+3460. [bug] Only link against readline where needed. [RT #29810]
+
+3458. [bug] Return FORMERR when presented with a overly long
+ domain named in a request. [RT #29682]
+
+3457. [protocol] Add ILNP records (NID, LP, L32, L64). [RT #31836]
+
+3456. [port] g++47: ATF failed to compile. [RT #32012]
+
+3455. [contrib] queryperf: fix getopt option list. [RT #32338]
+
+3454. [port] sparc64: improve atomic support. [RT #25182]
+
+3453. [bug] 'rndc addzone' of a zone with 'inline-signing yes;'
+ failed. [RT #31960]
+
+3452. [bug] Accept duplicate singleton records. [RT #32329]
+
+3451. [port] Increase per thread stack size from 64K to 1M.
+ [RT #32230]
+
+3450. [bug] Stop logfileconfig system test spam system logs.
+ [RT #32315]
+
+3449. [bug] gen.c: use the pre-processor to construct format
+ strings so that compiler can perform sanity checks;
+ check the snprintf results. [RT #17576]
+
+3448. [bug] The allow-query-on ACL was not processed correctly.
+ [RT #29486]
+
+3447. [port] Add support for libxml2-2.9.x [RT #32231]
+
+3446. [port] win32: Add source ID (see change #3400) to build.
+ [RT #31683]
+
+3445. [bug] Warn about zone files with blank owner names
+ immediately after $ORIGIN directives. [RT #31848]
+
+3444. [bug] The NOQNAME proof was not being returned from cached
+ insecure responses. [RT #21409]
+
+3443. [bug] ddns-confgen: Some TSIG algorithms were incorrectly
+ rejected when generating keys. [RT #31927]
+
+3442. [port] Net::DNS 0.69 introduced a non backwards compatible
+ change. [RT #32216]
+
+3441. [maint] D.ROOT-SERVERS.NET is now 199.7.91.13.
+
+3440. [bug] Reorder get_key_struct to not trigger a assertion when
+ cleaning up due to out of memory error. [RT #32131]
+
+3439. [bug] contrib/dlz error checking fixes. [RT #32102]
+
+3438. [bug] Don't accept unknown data escape in quotes. [RT #32031]
+
+3437. [bug] isc_buffer_init -> isc_buffer_constinit to initialize
+ buffers with constant data. [RT #32064]
+
+3436. [bug] Check malloc/calloc return values. [RT #32088]
+
+3435. [bug] Cross compilation support in configure was broken.
+ [RT #32078]
+
+3431. [bug] ddns-confgen: Some valid key algorithms were
+ not accepted. [RT #31927]
+
+3430. [bug] win32: isc_time_formatISO8601 was missing the
+ 'T' between the date and time. [RT #32044]
+
+3429. [bug] dns_zone_getserial2 could a return success without
+ returning a valid serial. [RT #32007]
+
+3428. [cleanup] dig: Add timezone to date output. [RT #2269]
+
+3427. [bug] dig +trace incorrectly displayed name server
+ addresses instead of names. [RT #31641]
+
+3426. [bug] dnssec-checkds: Clearer output when records are not
+ found. [RT #31968]
+
+3425. [bug] "acacheentry" reference counting was broken resulting
+ in use after free. [RT #31908]
+
+3424. [func] dnssec-dsfromkey now emits the hash without spaces.
+ [RT #31951]
+
+3423. [bug] "rndc signing -nsec3param" didn't accept the full
+ range of possible values. Address portability issues.
+ [RT #31938]
+
+3422. [bug] Added a clear error message for when the SOA does not
+ match the referral. [RT #31281]
+
+3421. [bug] Named loops when re-signing if all keys are offline.
+ [RT #31916]
+
+3420. [bug] Address VPATH compilation issues. [RT #31879]
+
+3419. [bug] Memory leak on validation cancel. [RT #31869]
+
+3417. [func] Optional new XML schema (version 3.0) for the
+ statistics channel adds query type statistics at the
+ zone level, and flattens the XML tree and uses
+ compressed format to optimize parsing. Includes new XSL
+ that permits charting via the Google Charts API on
+ browsers that support javascript in XSL. To enable,
+ build with "configure --enable-newstats". [RT #30023]
+
+3416. [bug] Named could die on shutdown if running with 128 UDP
+ dispatches per interface. [RT #31743]
+
+3415. [bug] named could die with a REQUIRE failure if a validation
+ was canceled. [RT #31804]
+
+3414. [bug] Address locking issues found by Coverity. [RT #31626]
+
+3412. [bug] Copy timeval structure from control message data.
+ [RT #31548]
+
+3411. [tuning] Use IPV6_USE_MIN_MTU or equivalent with TCP in addition
+ to UDP. [RT #31690]
+
+3410. [bug] Addressed Coverity warnings. [RT #31626]
+
+3409. [contrib] contrib/dane/mkdane.sh: Tool to generate TLSA RR's
+ from X.509 certificates, for use with DANE
+ (DNS-based Authentication of Named Entities).
+ [RT #30513]
+
+3408. [bug] Some DNSSEC-related options (update-check-ksk,
+ dnssec-loadkeys-interval, dnssec-dnskey-kskonly)
+ are now legal in slave zones as long as
+ inline-signing is in use. [RT #31078]
+
+3406. [bug] mem.c: Fix compilation errors when building with
+ ISC_MEM_TRACKLINES or ISC_MEMPOOL_NAMES disabled.
+ Also, ISC_MEM_DEBUG is no longer optional. [RT #31559]
+
+3405. [bug] Handle time going backwards in acache. [RT #31253]
+
+3404. [bug] dnssec-signzone: When re-signing a zone, remove
+ RRSIG and NSEC records from nodes that used to be
+ in-zone but are now below a zone cut. [RT #31556]
+
+3403. [bug] Silence noisy OpenSSL logging. [RT #31497]
+
+3402. [test] The IPv6 interface numbers used for system
+ tests were incorrect on some platforms. [RT #25085]
+
+3401. [bug] Addressed Coverity warnings. [RT #31484]
+
+3400. [cleanup] "named -V" can now report a source ID string, defined
+ in the "srcid" file in the build tree and normally set
+ to the most recent git hash. [RT #31494]
+
+3399. [port] netbsd: rename 'bool' parameter to avoid namespace
+ clash. [RT #31515]
+
+3398. [bug] SOA parameters were not being updated with inline
+ signed zones if the zone was modified while the
+ server was offline. [RT #29272]
+
+3397. [bug] dig crashed when using +nssearch with +tcp. [RT #25298]
+
+3396. [bug] OPT records were incorrectly removed from signed,
+ truncated responses. [RT #31439]
+
+3395. [protocol] Add RFC 6598 reverse zones to built in empty zones
+ list, 64.100.IN-ADDR.ARPA ... 127.100.IN-ADDR.ARPA.
+ [RT #31336]
+
+3394. [bug] Adjust 'successfully validated after lower casing
+ signer' log level and category. [RT #31414]
+
+3393. [bug] 'host -C' could core dump if REFUSED was received.
+ [RT #31381]
+
+3391. [bug] A DNSKEY lookup that encountered a CNAME failed.
+ [RT #31262]
+
+3390. [bug] Silence clang compiler warnings. [RT #30417]
+
+3389. [bug] Always return NOERROR (not 0) in TSIG. [RT #31275]
+
+3388. [bug] Fixed several Coverity warnings.
+ Note: This change includes a fix for a bug that
+ was subsequently determined to be an exploitable
+ security vulnerability, CVE-2012-5688: named could
+ die on specific queries with dns64 enabled.
+ [RT #30996]
+
+3386. [bug] Address locking violation when generating new NSEC /
+ NSEC3 chains. [RT #31224]
+
+3385. [bug] named-checkconf didn't detect missing master lists
+ in also-notify clauses. [RT #30810]
+
+3384. [bug] Improved logging of crypto errors. [RT #30963]
+
+3382. [bug] SOA query from slave used use-v6-udp-ports range,
+ if set, regardless of the address family in use.
+ [RT #24173]
+
+3381. [contrib] Update queryperf to support more RR types.
+ [RT #30762]
+
+3380. [bug] named could die if a nonexistent master list was
+ referenced in a also-notify. [RT #31004]
+
+3379. [bug] isc_interval_zero and isc_time_epoch should be
+ "const (type)* const". [RT #31069]
+
+3378. [bug] Handle missing 'managed-keys-directory' better.
+ [RT #30625]
+
+3377. [bug] Removed spurious newline from NSEC3 multiline
+ output. [RT #31044]
+
+3376. [bug] Lack of EDNS support was being recorded without a
+ successful response. [RT #30811]
+
+3375. [func] Check that 'rndc dumpdb' works on a empty cache.
+ [RT #30808]
+
+3374. [bug] isc_parse_uint32 failed to return a range error on
+ systems with 64 bit longs. [RT #30232]
+
+3372. [bug] Silence spurious "deleted from unreachable cache"
+ messages. [RT #30501]
+
+3371. [bug] AD=1 should behave like DO=1 when deciding whether to
+ add NS RRsets to the additional section or not.
+ [RT #30479]
+
+3316. [tuning] Improved locking performance when recursing.
+ [RT #28836]
+
+3315. [tuning] Use multiple dispatch objects for sending upstream
+ queries; this can improve performance on busy
+ multiprocessor systems by reducing lock contention.
+ [RT #28605]
+
+ --- 9.9.2 released ---
3383. [security] A certain combination of records in the RBT could
- cause named to hang while populating the additional
- section of a response. [RT #31090]
+ cause named to hang while populating the additional
+ section of a response. [RT #31090]
3373. [bug] win32: open raw files in binary mode. [RT #30944]
3364. [security] Named could die on specially crafted record.
[RT #30416]
- --- 9.8.4rc1 released ---
+ --- 9.9.2rc1 released ---
+
+3370. [bug] Address use after free while shutting down. [RT #30241]
3369. [bug] nsupdate terminated unexpectedly in interactive mode
if built with readline support. [RT #29550]
-3368. [bug] <dns/iptable.h> and <dns/zone.h> were not C++ safe.
+3368. [bug] <dns/iptable.h>, <dns/private.h> and <dns/zone.h>
+ were not C++ safe.
3367. [bug] dns_dnsseckey_create() result was not being checked.
[RT #30685]
@@ -45,6 +527,9 @@
could trigger an assertion failure on startup.
[RT #27730]
+3361. [bug] "rndc signing -nsec3param" didn't work correctly
+ when salt was set to '-' (no salt). [RT #30099]
+
3360. [bug] 'host -w' could die. [RT #18723]
3359. [bug] An improperly-formed TSIG secret could cause a
@@ -56,10 +541,12 @@
approaching their expiry, so they don't remain
in caches after expiry. [RT #26429]
- --- 9.8.4b1 released ---
+3355. [port] Use more portable awk in verify system test.
3354. [func] Improve OpenSSL error logging. [RT #29932]
+ --- 9.9.2b1 released ---
+
3353. [bug] Use a single task for task exclusive operations.
[RT #29872]
@@ -74,6 +561,8 @@
ISC_MEM_DEBUGCTX memory debugging flag is set.
[RT #30240]
+3349. [bug] Change #3345 was incomplete. [RT #30233]
+
3348. [bug] Prevent RRSIG data from being cached if a negative
record matching the covering type exists at a higher
trust level. Such data already can't be retrieved from
@@ -87,16 +576,42 @@
3346. [security] Bad-cache data could be used before it was
initialized, causing an assert. [RT #30025]
+3345. [bug] Addressed race condition when removing the last item
+ or inserting the first item in an ISC_QUEUE.
+ [RT #29539]
+
+3344. [func] New "dnssec-checkds" command checks a zone to
+ determine which DS records should be published
+ in the parent zone, or which DLV records should be
+ published in a DLV zone, and queries the DNS to
+ ensure that it exists. (Note: This tool depends
+ on python; it will not be built or installed on
+ systems that do not have a python interpreter.)
+ [RT #28099]
+
3342. [bug] Change #3314 broke saving of stub zones to disk
resulting in excessive cpu usage in some cases.
[RT #29952]
+3341. [func] New "dnssec-verify" command checks a signed zone
+ to ensure correctness of signatures and of NSEC/NSEC3
+ chains. [RT #23673]
+
+3339. [func] Allow the maximum supported rsa exponent size to be
+ specified: "max-rsa-exponent-size <value>;" [RT #29228]
+
+3338. [bug] Address race condition in units tests: asyncload_zone
+ and asyncload_zt. [RT #26100]
+
3337. [bug] Change #3294 broke support for the multiple keys
in controls. [RT #29694]
3335. [func] nslookup: return a nonzero exit code when unable
to get an answer. [RT #29492]
+3334. [bug] Hold a zone table reference while performing a
+ asynchronous load of a zone. [RT #28326]
+
3333. [bug] Setting resolver-query-timeout too low can cause
named to not recover if it loses connectivity.
[RT #29623]
@@ -132,14 +647,14 @@
3317. [func] Add ECDSA support (RFC 6605). [RT #21918]
- --- 9.8.3 released ---
+ --- 9.9.1 released ---
3318. [tuning] Reduce the amount of work performed while holding a
- bucket lock when finshed with a fetch context.
+ bucket lock when finished with a fetch context.
[RT #29239]
-3314. [bug] The masters list could be updated while refesh_callback
- and stub_callback were using it. [RT #26732]
+3314. [bug] The masters list could be updated while stub_callback
+ or refresh_callback were using it. [RT #26732]
3313. [protocol] Add TLSA record type. [RT #28989]
@@ -151,7 +666,7 @@
3310. [test] Increase table size for mutex profiling. [RT #28809]
-3309. [bug] resolver.c:fctx_finddone() was not threadsafe.
+3309. [bug] resolver.c:fctx_finddone() was not thread safe.
[RT #27995]
3307. [bug] Add missing ISC_LANG_BEGINDECLS and ISC_LANG_ENDDECLS.
@@ -164,6 +679,8 @@
3304. [bug] Use hmctx, not mctx when freeing rbtdb->heaps.
[RT #28571]
+3303. [bug] named could die when reloading. [RT #28606]
+
3302. [bug] dns_dnssec_findmatchingkeys could fail to find
keys if the zone name contained character that
required special mappings. [RT #28600]
@@ -177,22 +694,15 @@
3299. [bug] Make SDB handle errors from database drivers better.
[RT #28534]
-3232. [bug] Zero zone->curmaster before return in
- dns_zone_setmasterswithkeys(). [RT #26732]
-
-3183. [bug] Added RTLD_GLOBAL flag to dlopen call. [RT #26301]
-
-3197. [bug] Don't try to log the filename and line number when
- the config parser can't open a file. [RT #22263]
-
- --- 9.8.2 released ---
-
3298. [bug] Named could dereference a NULL pointer in
zmgr_start_xfrin_ifquota if the zone was being removed.
[RT #28419]
3297. [bug] Named could die on a malformed master file. [RT #28467]
+3296. [bug] Named could die with a INSIST failure in
+ client.c:exit_check. [RT #28346]
+
3295. [bug] Adjust isc_time_secondsastimet range check to be more
portable. [RT # 26542]
@@ -204,6 +714,16 @@
3290. [bug] <isc/hmacsha.h> was not being installed. [RT #28169]
+3273. [bug] AAAA responses could be returned in the additional
+ section even when filter-aaaa-on-v4 was in use.
+ [RT #27292]
+
+ --- 9.9.0 released ---
+
+ --- 9.9.0rc4 released ---
+
+3289. [bug] 'rndc retransfer' failed for inline zones. [RT #28036]
+
3288. [bug] dlz_destroy() function wasn't correctly registered
by the DLZ dlopen driver. [RT #28056]
@@ -212,7 +732,7 @@
3286. [bug] Managed key maintenance timer could fail to start
after 'rndc reconfig'. [RT #26786]
- --- 9.8.2rc2 released ---
+ --- 9.9.0rc3 released ---
3285. [bug] val-frdataset was incorrectly disassociated in
proveunsecure after calling startfinddlvsep.
@@ -235,24 +755,34 @@
3280. [bug] Potential double free of a rdataset on out of memory
with DNS64. [RT #27762]
+3279. [bug] Hold a internal reference to the zone while performing
+ a asynchronous load. Address potential memory leak
+ if the asynchronous is cancelled. [RT #27750]
+
3278. [bug] Make sure automatic key maintenance is started
when "auto-dnssec maintain" is turned on during
"rndc reconfig". [RT #26805]
+3277. [bug] win32: isc_socket_dup is not implemented. [RT #27696]
+
3276. [bug] win32: ns_os_openfile failed to return NULL on
safe_open failure. [RT #27696]
-3274. [bug] Log when a zone is not reusable. Only set loadtime
- on successful loads. [RT #27650]
-
-3273. [bug] AAAA responses could be returned in the additional
- section even when filter-aaaa-on-v4 was in use.
- [RT #27292]
+3275. [bug] Corrected rndc -h output; the 'rndc sync -clean'
+ option had been misspelled as '-clear'. (To avoid
+ future confusion, both options now work.) [RT #27173]
3271. [port] darwin: mksymtbl is not always stable, loop several
times before giving up. mksymtbl was using non
portable perl to covert 64 bit hex strings. [RT #27653]
+ --- 9.9.0rc2 released ---
+
+3270. [bug] "rndc reload" didn't reuse existing zones correctly
+ when inline-signing was in use. [RT #27650]
+
+3269. [port] darwin 11 and later now built threaded by default.
+
3268. [bug] Convert RRSIG expiry times to 64 timestamps to work
out the earliest expiry time. [RT #23311]
@@ -264,14 +794,26 @@
DNSKEY RRset was not being properly computed.
[RT #26543]
+3265. [bug] Corrected a problem with lock ordering in the
+ inline-signing code. [RT #27557]
+
+3264. [bug] Automatic regeneration of signatures in an
+ inline-signing zone could stall when the server
+ was restarted. [RT #27344]
+
+3263. [bug] "rndc sync" did not affect the unsigned side of an
+ inline-signing zone. [RT #27337]
+
3262. [bug] Signed responses were handled incorrectly by RPZ.
[RT #27316]
- --- 9.8.2rc1 released ---
+3261. [func] RRset ordering now defaults to random. [RT #27174]
3260. [bug] "rrset-order cyclic" could appear not to rotate
for some query patterns. [RT #27170/27185]
+ --- 9.9.0rc1 released ---
+
3259. [bug] named-compilezone: Suppress "dump zone to <file>"
message when writing to stdout. [RT #27109]
@@ -283,12 +825,21 @@
3256. [bug] Disable empty zones for lwresd -C. [RT #27139]
+3255. [func] No longer require that a empty zones be explicitly
+ enabled or that a empty zone is disabled for
+ RFC 1918 empty zones to be configured. [RT #27139]
+
3254. [bug] Set isc_socket_ipv6only() on the IPv6 control channels.
[RT #22249]
3253. [bug] Return DNS_R_SYNTAX when the input to a text field is
too long. [RT #26956]
+3252. [bug] When master zones using inline-signing were
+ updated while the server was offline, the source
+ zone could fall out of sync with the signed
+ copy. They can now resynchronize. [RT #26676]
+
3251. [bug] Enforce a upper bound (65535 bytes) on the amount of
memory dns_sdlz_putrr() can allocate per record to
prevent run away memory consumption on ISC_R_NOSPACE.
@@ -308,8 +859,34 @@
3247. [bug] 'raw' format zones failed to preserve load order
breaking 'fixed' sort order. [RT #27087]
-3243. [port] netbsd,bsdi: the thread defaults were not being
- properly set.
+3246. [bug] Named failed to start with a empty also-notify list.
+ [RT #27087]
+
+3245. [bug] Don't report a error unchanged serials unless there
+ were other changes when thawing a zone with
+ ixfr-fromdifferences. [RT #26845]
+
+3244. [func] Added readline support to nslookup and nsupdate.
+ Also simplified nsupdate syntax to make "update"
+ and "prereq" optional. [RT #24659]
+
+3243. [port] freebsd,netbsd,bsdi: the thread defaults were not
+ being properly set.
+
+3242. [func] Extended the header of raw-format master files to
+ include the serial number of the zone from which
+ they were generated, if different (as in the case
+ of inline-signing zones). This is to be used in
+ inline-signing zones, to track changes between the
+ unsigned and signed versions of the zone, which may
+ have different serial numbers.
+
+ (Note: raw zonefiles generated by this version of
+ BIND are no longer compatible with prior versions.
+ To generate a backward-compatible raw zonefile
+ using dnssec-signzone or named-compilezone, specify
+ output format "raw=0" instead of simply "raw".)
+ [RT #26587]
3241. [bug] Address race conditions in the resolver code.
[RT #26889]
@@ -324,11 +901,22 @@
3237. [bug] dig -6 didn't work with +trace. [RT #26906]
- --- 9.8.2b1 released ---
+3236. [bug] Backed out changes #3182 and #3202, related to
+ EDNS(0) fallback behavior. [RT #26416]
+
+3235. [func] dns_db_diffx, a extended dns_db_diff which returns
+ the generated diff and optionally writes it to a
+ journal. [RT #26386]
3234. [bug] 'make depend' produced invalid makefiles. [RT #26830]
-3231. [bug] named could fail to send a uncompressable zone.
+3233. [bug] 'rndc freeze/thaw' didn't work for inline zones.
+ [RT #26632]
+
+3232. [bug] Zero zone->curmaster before return in
+ dns_zone_setmasterswithkeys(). [RT #26732]
+
+3231. [bug] named could fail to send a incompressible zone.
[RT #26796]
3230. [bug] 'dig axfr' failed to properly handle a multi-message
@@ -345,14 +933,29 @@
3226. [bug] Address minor resource leakages. [RT #26624]
-3221. [bug] Fixed a potential coredump on shutdown due to
+3225. [bug] Silence spurious "setsockopt(517, IPV6_V6ONLY) failed"
+ messages. [RT #26507]
+
+3224. [bug] 'rndc signing' argument parsing was broken. [RT #26684]
+
+3223. [bug] 'task_test privilege_drop' generated false positives.
+ [RT #26766]
+
+3222. [cleanup] Replace dns_journal_{get,set}_bitws with
+ dns_journal_{get,set}_sourceserial. [RT #26634]
+
+3221. [bug] Fixed a potential core dump on shutdown due to
referencing fetch context after it's been freed.
[RT #26720]
+ --- 9.9.0b2 released ---
+
3220. [bug] Change #3186 was incomplete; dns_db_rpz_findips()
could fail to set the database version correctly,
causing an assertion failure. [RT #26180]
+3219. [bug] Disable NOEDNS caching following a timeout.
+
3218. [security] Cache lookup could return RRSIG data associated with
nonexistent records, leading to an assertion
failure. [RT #26590]
@@ -361,21 +964,38 @@
3216. [bug] resolver.c:validated() was not thread-safe. [RT #26478]
+3215. [bug] 'rndc recursing' could cause a core dump. [RT #26495]
+
+3214. [func] Add 'named -U' option to set the number of UDP
+ listener threads per interface. [RT #26485]
+
3213. [doc] Clarify ixfr-from-differences behavior. [RT #25188]
3212. [bug] rbtdb.c: failed to remove a node from the deadnodes
list prior to adding a reference to it leading a
possible assertion failure. [RT #23219]
+3211. [func] dnssec-signzone: "-f -" prints to stdout; "-O full"
+ option prints in single-line-per-record format.
+ [RT #20287]
+
+3210. [bug] Canceling the oldest query due to recursive-client
+ overload could trigger an assertion failure. [RT #26463]
+
3209. [func] Add "dnssec-lookaside 'no'". [RT #24858]
-3208. [bug] 'dig -y' handle unknown tsig alorithm better.
+3208. [bug] 'dig -y' handle unknown tsig algorithm better.
[RT #25522]
3207. [contrib] Fixed build error in Berkeley DB DLZ module. [RT #26444]
3206. [cleanup] Add ISC information to log at start time. [RT #25484]
+3205. [func] Upgrade dig's defaults to better reflect modern
+ nameserver behavior. Enable "dig +adflag" and
+ "dig +edns=0" by default. Enable "+dnssec" when
+ running "dig +trace". [RT #23497]
+
3204. [bug] When a master server that has been marked as
unreachable sends a NOTIFY, mark it reachable
again. [RT #25960]
@@ -383,12 +1003,24 @@
3203. [bug] Increase log level to 'info' for validation failures
from expired or not-yet-valid RRSIGs. [RT #21796]
+3202. [bug] NOEDNS caching on timeout was too aggressive.
+ [RT #26416]
+
+3201. [func] 'rndc querylog' can now be given an on/off parameter
+ instead of only being used as a toggle. [RT #18351]
+
3200. [doc] Some rndc functions were undocumented or were
missing from 'rndc -h' output. [RT #25555]
+3199. [func] When logging client information, include the name
+ being queried. [RT #25944]
+
3198. [doc] Clarified that dnssec-settime can alter keyfile
permissions. [RT #24866]
+3197. [bug] Don't try to log the filename and line number when
+ the config parser can't open a file. [RT #22263]
+
3196. [bug] nsupdate: return nonzero exit code when target zone
doesn't exist. [RT #25783]
@@ -417,10 +1049,50 @@
3187. [port] win32: support for Visual Studio 2008. [RT #26356]
+ --- 9.9.0b1 released ---
+
3186. [bug] Version/db mis-match in rpz code. [RT #26180]
+3185. [func] New 'rndc signing' option for auto-dnssec zones:
+ - 'rndc signing -list' displays the current
+ state of signing operations
+ - 'rndc signing -clear' clears the signing state
+ records for keys that have fully signed the zone
+ - 'rndc signing -nsec3param' sets the NSEC3
+ parameters for the zone
+ The 'rndc keydone' syntax is removed. [RT #23729]
+
+3184. [bug] named had excessive cpu usage when a redirect zone was
+ configured. [RT #26013]
+
+3183. [bug] Added RTLD_GLOBAL flag to dlopen call. [RT #26301]
+
+3182. [bug] Auth servers behind firewalls which block packets
+ greater than 512 bytes may cause other servers to
+ perform poorly. Now, adb retains edns information
+ and caches noedns servers. [RT #23392/24964]
+
+3181. [func] Inline-signing is now supported for master zones.
+ [RT #26224]
+
+3180. [func] Local copies of slave zones are now saved in raw
+ format by default, to improve startup performance.
+ 'masterfile-format text;' can be used to override
+ the default, if desired. [RT #25867]
+
3179. [port] kfreebsd: build issues. [RT #26273]
+3178. [bug] A race condition introduced by change #3163 could
+ cause an assertion failure on shutdown. [RT #26271]
+
+3177. [func] 'rndc keydone', remove the indicator record that
+ named has finished signing the zone with the
+ corresponding key. [RT #26206]
+
+3176. [doc] Corrected example code and added a README to the
+ sample external DLZ module in contrib/dlz/example.
+ [RT #26215]
+
3175. [bug] Fix how DNSSEC positive wildcard responses from a
NSEC3 signed zone are validated. Stop sending a
unnecessary NSEC3 record when generating such
@@ -431,9 +1103,14 @@
3173. [port] Correctly validate root DS responses. [RT #25726]
+3172. [port] darwin 10.* and freebsd [89] are now built threaded by
+ default.
+
3171. [bug] Exclusively lock the task when adding a zone using
'rndc addzone'. [RT #25600]
+ --- 9.9.0a3 released ---
+
3170. [func] RPZ update:
- fix precedence among competing rules
- improve ARM text including documenting rule precedence
@@ -448,10 +1125,28 @@
3169. [func] Catch db/version mis-matches when calling dns_db_*().
[RT #26017]
+3168. [bug] Nxdomain redirection could trigger an assert with
+ a ANY query. [RT #26017]
+
3167. [bug] Negative answers from forwarders were not being
correctly tagged making them appear to not be cached.
[RT #25380]
+3166. [bug] Upgrading a zone to support inline-signing failed.
+ [RT #26014]
+
+3165. [bug] dnssec-signzone could generate new signatures when
+ resigning, even when valid signatures were already
+ present. [RT #26025]
+
+3164. [func] Enable DLZ modules to retrieve client information,
+ so that responses can be changed depending on the
+ source address of the query. [RT #25768]
+
+3163. [bug] Use finer-grained locking in client.c to address
+ concurrency problems with large numbers of threads.
+ [RT #26044]
+
3162. [test] start.pl: modified to allow for "named.args" in
ns*/ subdirectory to override stock arguments to
named. Largely from RT#26044, but no separate ticket.
@@ -459,24 +1154,52 @@
3161. [bug] zone.c:del_sigs failed to always reset rdata leading
assertion failures. [RT #25880]
+3160. [bug] When printing out a NSEC3 record in multiline form
+ the newline was not being printed causing type codes
+ to be run together. [RT #25873]
+
+3159. [bug] On some platforms, named could assert on startup
+ when running in a chrooted environment without
+ /proc. [RT #25863]
+
+3158. [bug] Recursive servers would prefer a particular UDP
+ socket instead of using all available sockets.
+ [RT #26038]
+
3157. [tuning] Reduce the time spent in "rndc reconfig" by parsing
the config file before pausing the server. [RT #21373]
+3156. [placeholder]
+
+ --- 9.9.0a2 released ---
+
3155. [bug] Fixed a build failure when using contrib DLZ
drivers (e.g., mysql, postgresql, etc). [RT #25710]
3154. [bug] Attempting to print an empty rdataset could trigger
an assert. [RT #25452]
+3153. [func] Extend request-ixfr to zone level and remove the
+ side effect of forcing an AXFR. [RT #25156]
+
3152. [cleanup] Some versions of gcc and clang failed due to
incorrect use of __builtin_expect. [RT #25183]
3151. [bug] Queries for type RRSIG or SIG could be handled
incorrectly. [RT #21050]
+3150. [func] Improved startup and reconfiguration time by
+ enabling zones to load in multiple threads. [RT #25333]
+
+3149. [placeholder]
+
3148. [bug] Processing of normal queries could be stalled when
forwarding a UPDATE message. [RT #24711]
+3147. [func] Initial inline signing support. [RT #23657]
+
+ --- 9.9.0a1 released ---
+
3146. [test] Fixed gcc4.6.0 errors in ATF. [RT #25598]
3145. [test] Capture output of ATF unit tests in "./atf.out" if
@@ -487,29 +1210,31 @@
3143. [bug] Silence clang compiler warnings. [RT #25174]
-3139. [test] Added tests from RFC 6234, RFC 2202, and RFC 1321
- for the hashing algorithms (md5, sha1 - sha512, and
- their hmac counterparts). [RT #25067]
-
- --- 9.8.1 released ---
-
- --- 9.8.1rc1 released ---
+3142. [bug] NAPTR is class agnostic. [RT #25429]
3141. [bug] Silence spurious "zone serial (0) unchanged" messages
associated with empty zones. [RT #25079]
+3140. [func] New command "rndc flushtree <name>" clears the
+ specified name from the server cache along with
+ all names under it. [RT #19970]
+
+3139. [test] Added tests from RFC 6234, RFC 2202, and RFC 1321
+ for the hashing algorithms (md5, sha1 - sha512, and
+ their hmac counterparts). [RT #25067]
+
3138. [bug] Address memory leaks and out-of-order operations when
shutting named down. [RT #25210]
+3137. [func] Improve hardware scalability by allowing multiple
+ worker threads to process incoming UDP packets.
+ This can significantly increase query throughput
+ on some systems. [RT #22992]
+
3136. [func] Add RFC 1918 reverse zones to the list of built-in
empty zones switched on by the 'empty-zones-enable'
option. [RT #24990]
- Note: empty-zones-enable must be "yes;" or a empty
- zone needs to be disabled in named.conf for RFC 1918
- zones to be activated. This requirement may be
- removed in future releases.
-
3135. [port] FreeBSD: workaround broken IPV6_USE_MIN_MTU processing.
See http://www.freebsd.org/cgi/query-pr.cgi?pr=158307
[RT #24950]
@@ -517,19 +1242,34 @@
3134. [bug] Improve the accuracy of dnssec-signzone's signing
statistics. [RT #16030]
- --- 9.8.1b3 released ---
-
3133. [bug] Change #3114 was incomplete. [RT #24577]
+3132. [placeholder]
+
3131. [tuning] Improve scalability by allocating one zone task
per 100 zones at startup time, rather than using a
fixed-size task table. [RT #24406]
+3130. [func] Support alternate methods for managing a dynamic
+ zone's serial number. Two methods are currently
+ defined using serial-update-method, "increment"
+ (default) and "unixtime". [RT #23849]
+
3129. [bug] Named could crash on 'rndc reconfig' when
allow-new-zones was set to yes and named ACLs
were used. [RT #22739]
- --- 9.8.1b2 released ---
+3128. [func] Inserting an NSEC3PARAM via dynamic update in an
+ auto-dnssec zone that has not been signed yet
+ will cause it to be signed with the specified NSEC3
+ parameters when keys are activated. The
+ NSEC3PARAM record will not appear in the zone until
+ it is signed, but the parameters will be stored.
+ [RT #23684]
+
+3127. [bug] 'rndc thaw' will now remove a zone's journal file
+ if the zone serial number has been changed and
+ ixfr-from-differences is not in use. [RT #24687]
3126. [security] Using DNAME record to generate replacements caused
RPZ to exit with a assertion failure. [RT #24766]
@@ -569,6 +1309,12 @@
never-implemented 'auto-dnssec create' option.
[RT #24533]
+3116. [func] New 'dnssec-update-mode' option controls updates
+ of DNSSEC records in signed dynamic zones. Set to
+ 'no-resign' to disable automatic RRSIG regeneration
+ while retaining the ability to sign new or changed
+ data. [RT #24533]
+
3115. [bug] Named could fail to return requested data when
following a CNAME that points into the same zone.
[RT #24455]
@@ -579,8 +1325,6 @@
3113. [doc] Document the relationship between serial-query-rate
and NOTIFY messages.
- --- 9.8.1b1 released ---
-
3112. [doc] Add missing descriptions of the update policy name
types "ms-self", "ms-subdomain", "krb5-self" and
"krb5-subdomain", which allow machines to update
@@ -593,9 +1337,23 @@
3110. [bug] dnssec-signzone: Wrong error message could appear
when attempting to sign with no KSK. [RT #24369]
+3109. [func] The also-notify option now uses the same syntax
+ as a zone's masters clause. This means it is
+ now possible to specify a TSIG key to use when
+ sending notifies to a given server, or to include
+ an explicit named masters list in an also-notfiy
+ statement. [RT #23508]
+
+3108. [cleanup] dnssec-signzone: Clarified some error and
+ warning messages; removed #ifdef ALLOW_KSKLESS_ZONES
+ code (use -P instead). [RT #20852]
+
3107. [bug] dnssec-signzone: Report the correct number of ZSKs
when using -x. [RT #20852]
+3106. [func] When logging client requests, include the name of
+ the TSIG key if any. [RT #23619]
+
3105. [bug] GOST support can be suppressed by "configure
--without-gost" [RT #24367]
@@ -605,6 +1363,12 @@
instead of in the options statement could trigger
an assertion failure in named-checkconf. [RT #24382]
+3102. [func] New 'dnssec-loadkeys-interval' option configures
+ how often, in minutes, to check the key repository
+ for updates when using automatic key maintenance.
+ Default is every 60 minutes (formerly hard-coded
+ to 12 hours). [RT #23744]
+
3101. [bug] Zones using automatic key maintenance could fail
to check the key repository for updates. [RT #23744]
@@ -640,6 +1404,9 @@
3090. [func] Make --with-gssapi default [RT #23738]
+3089. [func] dnssec-dsfromkey now supports reading keys from
+ standard input "dnssec-dsfromkey -f -". [RT# 20662]
+
3088. [bug] Remove bin/tests/system/logfileconfig/ns1/named.conf
and add setup.sh in order to resolve changing
named.conf issue. [RT #23687]
@@ -652,6 +1419,17 @@
other change has been specified, using "-P now -A now"
as default values. [RT #22474]
+3085. [func] New '-R' option in dnssec-signzone forces removal
+ of signatures which have not yet expired but
+ were generated by a key that no longer exists.
+ [RT #22471]
+
+3084. [func] A new command "rndc sync" dumps pending changes in
+ a dynamic zone to disk; "rndc sync -clean" also
+ removes the journal file after syncing. Also,
+ "rndc freeze" no longer removes journal files.
+ [RT #22473]
+
3083. [bug] NOTIFY messages were not being sent when generating
a NSEC3 chain incrementally. [RT #23702]
@@ -672,7 +1450,12 @@
3077. [bug] zone.c:zone_refreshkeys() incorrectly called
dns_zone_attach(), use zone->irefs instead. [RT #23303]
-3075. [bug] dns_dnssec_findzonekeys{2} used a inconsistant
+3076. [func] New '-L' option in dnssec-keygen, dnsset-settime, and
+ dnssec-keyfromlabel sets the default TTL of the
+ key. When possible, automatic signing will use that
+ TTL when the key is published. [RT #23304]
+
+3075. [bug] dns_dnssec_findzonekeys{2} used a inconsistent
timestamp when determining which keys are active.
[RT #23642]
@@ -686,7 +1469,7 @@
3072. [bug] dns_dns64_aaaaok() potential NULL pointer dereference.
[RT #20256]
-3071. [bug] has_nsec could be used unintialised in
+3071. [bug] has_nsec could be used uninitialized in
update.c:next_active. [RT #20256]
3070. [bug] dnssec-signzone potential NULL pointer dereference.
@@ -704,7 +1487,7 @@
3066. [func] The DLZ "dlopen" driver is now built by default,
no longer requiring a configure option. To
disable it, use "configure --without-dlopen".
- (Note: driver not supported on win32.) [RT #23467]
+ Driver also supported on win32. [RT #23467]
3065. [bug] RRSIG could have time stamps too far in the future.
[RT #23356]
@@ -714,6 +1497,25 @@
3063. [contrib] More verbose error reporting from DLZ LDAP. [RT #23402]
+3062. [func] Made several changes to enhance human readability
+ of DNSSEC data in dig output and in generated
+ zone files:
+ - DNSKEY record comments are more verbose, no
+ longer used in multiline mode only
+ - multiline RRSIG records reformatted
+ - multiline output mode for NSEC3PARAM records
+ - "dig +norrcomments" suppresses DNSKEY comments
+ - "dig +split=X" breaks hex/base64 records into
+ fields of width X; "dig +nosplit" disables this.
+ [RT #22820]
+
+3061. [func] New option "dnssec-signzone -D", only write out
+ generated DNSSEC records. [RT #22896]
+
+3060. [func] New option "dnssec-signzone -X <date>" allows
+ specification of a separate expiration date
+ for DNSKEY RRSIGs and other RRSIGs. [RT #22141]
+
3059. [test] Added a regression test for change #3023.
3058. [bug] Cause named to terminate at startup or rndc reconfig/
@@ -723,6 +1525,10 @@
3057. [bug] "rndc secroots" would abort after the first error
and so could miss some views. [RT #23488]
+3056. [func] Added support for URI resource record. [RT #23386]
+
+3055. [placeholder]
+
3054. [bug] Added elliptic curve support check in
GOST OpenSSL engine detection. [RT #23485]
@@ -732,7 +1538,7 @@
3052. [test] Fixed last autosign test report. [RT #23256]
-3051. [bug] NS records obsure DNAME records at the bottom of the
+3051. [bug] NS records obscure DNAME records at the bottom of the
zone if both are present. [RT #23035]
3050. [bug] The autosign system test was timing dependent.
@@ -742,7 +1548,7 @@
3049. [bug] Save and restore the gid when creating creating
named.pid at startup. [RT #23290]
-3048. [bug] Fully separate view key mangement. [RT #23419]
+3048. [bug] Fully separate view key management. [RT #23419]
3047. [bug] DNSKEY NODATA responses not cached fixed in
validator.c. Tests added to dnssec system test.
@@ -751,6 +1557,8 @@
3046. [bug] Use RRSIG original TTL to compute validated RRset
and RRSIG TTL. [RT #23332]
+3045. [removed] Replaced by change #3050.
+
3044. [bug] Hold the socket manager lock while freeing the socket.
[RT #23333]
@@ -771,6 +1579,8 @@
with a CNAME existed between the trust anchor and the
top of the zone. [RT #23338]
+3039. [func] Redirect on NXDOMAIN support. [RT #23146]
+
3038. [bug] Install <dns/rpz.h>. [RT #23342]
3037. [doc] Update COPYRIGHT to contain all the individual
@@ -808,8 +1618,6 @@
after calling grow_headerspace() and if not
re-call grow_headerspace() until we do. [RT #22521]
- --- 9.8.0 released ---
-
3025. [bug] Fixed a possible deadlock due to zone resigning.
[RT #22964]
@@ -831,8 +1639,6 @@
3019. [test] Test: check apex NSEC3 records after adding DNSKEY
record via UPDATE. [RT #23229]
- --- 9.8.0rc1 released ---
-
3018. [bug] Named failed to check for the "none;" acl when deciding
if a zone may need to be re-signed. [RT #23120]
@@ -844,6 +1650,8 @@
3015. [port] win32: fix IN6_IS_ADDR_LINKLOCAL and
IN6_IS_ADDR_SITELOCAL macros. [RT #22724]
+3014. [placeholder]
+
3013. [bug] The DNS64 ttl was not always being set as expected.
[RT #23034]
@@ -851,7 +1659,8 @@
signing records for any remaining DNSKEY changes.
[RT #22590]
-3011. [func] Allow setting this in named.conf using the new
+3011. [func] Change the default query timeout from 30 seconds
+ to 10. Allow setting this in named.conf using the new
'resolver-query-timeout' option, which specifies a max
time in seconds. 0 means 'default' and anything longer
than 30 will be silently set to 30. [RT #22852]
@@ -1079,7 +1888,7 @@
no data response. [RT #21744]
2952. [port] win32: named-checkzone and named-checkconf failed
- to initialise winsock. [RT #21932]
+ to initialize winsock. [RT #21932]
2951. [bug] named failed to generate a correct signed response
in a optout, delegation only zone with no secure
@@ -1125,7 +1934,7 @@
in use. [RT# 21868]
2938. [bug] When generating signed responses, from a signed zone
- that uses NSEC3, named would use a uninitialised
+ that uses NSEC3, named would use a uninitialized
pointer if it needed to skip a NSEC3 record because
it didn't match the selected NSEC3PARAM record for
zone. [RT# 21868]
@@ -1179,7 +1988,7 @@
revisit the issue and complete the fix later.
[RT #21710]
-2930. [experimental] New "rndc addzone" and "rndc delzone" commads
+2930. [experimental] New "rndc addzone" and "rndc delzone" commands
allow dynamic addition and deletion of zones.
To enable this feature, specify a "new-zone-file"
option at the view or options level in named.conf.
@@ -1355,7 +2164,7 @@
successfully responds to the query using plain DNS.
[RT #20930]
-2873. [bug] Cancelling a dynamic update via the dns/client module
+2873. [bug] Canceling a dynamic update via the dns/client module
could trigger an assertion failure. [RT #21133]
2872. [bug] Modify dns/client.c:dns_client_createx() to only
@@ -1397,7 +2206,7 @@
2860. [bug] named-checkconf's usage was out of date. [RT #21039]
-2859. [bug] When cancelling validation it was possible to leak
+2859. [bug] When canceling validation it was possible to leak
memory. [RT #20800]
2858. [bug] RTT estimates were not being adjusted on ICMP errors.
@@ -1950,7 +2759,7 @@
2695. [func] DHCP/DDNS - update fdwatch code for use by
DHCP. Modify the api to isc_sockfdwatch_t (the
- callback functon for isc_socket_fdwatchcreate)
+ callback function for isc_socket_fdwatchcreate)
to include information about the direction (read
or write) and add isc_socket_fdwatchpoke.
[RT #20253]
@@ -2015,7 +2824,7 @@
sets the time when a key is no longer used for
signing but is still published.
- The "unpublished" date (-U) is deprecated in
- favour of "deleted" (-D).
+ favor of "deleted" (-D).
[RT #20247]
2676. [bug] --with-export-installdir should have been
@@ -2461,7 +3270,7 @@
2553. [bug] Reference leak on DNSSEC validation errors. [RT #19291]
-2552. [bug] zero-no-soa-ttl-cache was not being honoured.
+2552. [bug] zero-no-soa-ttl-cache was not being honored.
[RT #19340]
2551. [bug] Potential Reference leak on return. [RT #19341]
@@ -2514,7 +3323,7 @@
2534. [func] Check NAPTR records regular expressions and
replacement strings to ensure they are syntactically
- valid and consistant. [RT #18168]
+ valid and consistent. [RT #18168]
2533. [doc] ARM: document @ (at-sign). [RT #17144]
diff --git a/contrib/bind9/COPYRIGHT b/contrib/bind9/COPYRIGHT
index 6f2c8e5aa226..525c2228db33 100644
--- a/contrib/bind9/COPYRIGHT
+++ b/contrib/bind9/COPYRIGHT
@@ -1,4 +1,4 @@
-Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
Copyright (C) 1996-2003 Internet Software Consortium.
Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
-$Id: COPYRIGHT,v 1.17.14.2 2012/01/04 23:46:18 tbox Exp $
+$Id: COPYRIGHT,v 1.19 2012/01/03 23:46:59 tbox Exp $
Portions of this code release fall under one or more of the
following Copyright notices. Please see individual source
diff --git a/contrib/bind9/FAQ b/contrib/bind9/FAQ
index 9e3469ce4ae2..5e86a082f5cb 100644
--- a/contrib/bind9/FAQ
+++ b/contrib/bind9/FAQ
@@ -1,6 +1,6 @@
Frequently Asked Questions about BIND 9
-Copyright © 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+Copyright © 2004-2010, 2013 Internet Systems Consortium, Inc. ("ISC")
Copyright © 2000-2003 Internet Software Consortium.
@@ -869,7 +869,7 @@ A: If you run Tiger(Mac OS 10.4) or later then this is all you need to do:
Copy the key statement from /etc/rndc.conf into /etc/rndc.key, e.g.:
key "rndc-key" {
- algorithm hmac-md5;
+ algorithm hmac-sha256;
secret "uvceheVuqf17ZwIcTydddw==";
};
diff --git a/contrib/bind9/FAQ.xml b/contrib/bind9/FAQ.xml
index 7b21689ce905..d0f903be782e 100644
--- a/contrib/bind9/FAQ.xml
+++ b/contrib/bind9/FAQ.xml
@@ -1,7 +1,7 @@
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" []>
<!--
- - Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2010, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -30,6 +30,7 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -1564,7 +1565,7 @@ rand_irqs="3 14 15"</programlisting>
<informalexample>
<programlisting>
key "rndc-key" {
- algorithm hmac-md5;
+ algorithm hmac-sha256;
secret "uvceheVuqf17ZwIcTydddw==";
};</programlisting>
</informalexample>
diff --git a/contrib/bind9/HISTORY b/contrib/bind9/HISTORY
index e98f9b41460d..9a3b7599965b 100644
--- a/contrib/bind9/HISTORY
+++ b/contrib/bind9/HISTORY
@@ -1,5 +1,57 @@
Summary of functional enhancements from prior major releases of BIND 9:
+BIND 9.8.0
+
+ BIND 9.8.0 includes a number of changes from BIND 9.7 and earlier
+ releases. New features include:
+
+ - Built-in trust anchor for the root zone, which can be
+ switched on via "dnssec-validation auto;"
+ - Support for DNS64.
+ - Support for response policy zones (RPZ).
+ - Support for writable DLZ zones.
+ - Improved ease of configuration of GSS/TSIG for
+ interoperability with Active Directory
+ - Support for GOST signing algorithm for DNSSEC.
+ - Removed RTT Banding from server selection algorithm.
+ - New "static-stub" zone type.
+ - Allow configuration of resolver timeouts via
+ "resolver-query-timeout" option.
+ - The DLZ "dlopen" driver is now built by default.
+ - Added a new include file with function typedefs
+ for the DLZ "dlopen" driver.
+ - Made "--with-gssapi" default.
+ - More verbose error reporting from DLZ LDAP.
+
+BIND 9.7.0
+
+ BIND 9.7.0 includes a number of changes from BIND 9.6 and earlier
+ releases. Most are intended to simplify DNSSEC configuration.
+
+ New features include:
+
+ - Fully automatic signing of zones by "named".
+ - Simplified configuration of DNSSEC Lookaside Validation (DLV).
+ - Simplified configuration of Dynamic DNS, using the "ddns-confgen"
+ command line tool or the "local" update-policy option. (As a side
+ effect, this also makes it easier to configure automatic zone
+ re-signing.)
+ - New named option "attach-cache" that allows multiple views to
+ share a single cache.
+ - DNS rebinding attack prevention.
+ - New default values for dnssec-keygen parameters.
+ - Support for RFC 5011 automated trust anchor maintenance
+ - Smart signing: simplified tools for zone signing and key
+ maintenance.
+ - The "statistics-channels" option is now available on Windows.
+ - A new DNSSEC-aware libdns API for use by non-BIND9 applications
+ - On some platforms, named and other binaries can now print out
+ a stack backtrace on assertion failure, to aid in debugging.
+ - A "tools only" installation mode on Windows, which only installs
+ dig, host, nslookup and nsupdate.
+ - Improved PKCS#11 support, including Keyper support and explicit
+ OpenSSL engine selection.
+
BIND 9.6.0
Full NSEC3 support
diff --git a/contrib/bind9/Makefile.in b/contrib/bind9/Makefile.in
index 05d9c43174f0..7c1d66523fa5 100644
--- a/contrib/bind9/Makefile.in
+++ b/contrib/bind9/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2002 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.58.250.4 2011/09/06 04:06:11 marka Exp $
+# $Id: Makefile.in,v 1.62 2011/09/06 04:06:37 marka Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -61,9 +61,21 @@ tags:
rm -f TAGS
find lib bin -name "*.[ch]" -print | @ETAGS@ -
-check: test
-
-test:
+test check:
+ @if test -n "`${PERL} ${top_srcdir}/bin/tests/system/testsock.pl 2>&- || echo fail`"; then \
+ echo I: NOTE: The tests were not run because they require that; \
+ echo I: the IP addresses 10.53.0.1 through 10.53.0.8 are configured; \
+ echo I: as alias addresses on the loopback interface. Please run; \
+ echo I: \'bin/tests/system/ifconfig.sh up\' as root to configure; \
+ echo I: them, then rerun the tests. Run make force-test to run the; \
+ echo I: tests anyway.; \
+ exit 1; \
+ fi
+ ${MAKE} test-force
+
+force-test: test-force
+
+test-force:
status=0; \
(cd bin/tests && ${MAKE} ${MAKEDEFS} test) || status=1; \
(test -f unit/unittest.sh && $(SHELL) unit/unittest.sh) || status=1; \
diff --git a/contrib/bind9/README b/contrib/bind9/README
index f79763978754..88d799e4f7cf 100644
--- a/contrib/bind9/README
+++ b/contrib/bind9/README
@@ -51,114 +51,64 @@ BIND 9
For up-to-date release notes and errata, see
http://www.isc.org/software/bind9/releasenotes
-BIND 9.8.4
-
- BIND 9.8.4 includes several bug fixes and patches security
- flaws described in CVE-2012-1667, CVE-2012-3817 and CVE-2012-4244.
-
-BIND 9.8.3
-
- BIND 9.8.3 is a maintenance release.
-
-BIND 9.8.2
-
- BIND 9.8.2 includes a number of bug fixes and prevents a security
- problem described in CVE-2011-4313
-
-BIND 9.8.1
-
- BIND 9.8.1 includes a number of bug fixes and enhancements from
- BIND 9.8 and earlier releases. New features include:
-
- - The DLZ "dlopen" driver is now built by default.
- - Added a new include file with function typedefs
- for the DLZ "dlopen" driver.
- - Made "--with-gssapi" default.
- - More verbose error reporting from DLZ LDAP.
-
-BIND 9.8.0
-
- BIND 9.8.0 includes a number of changes from BIND 9.7 and earlier
- releases. New features include:
-
- - Built-in trust anchor for the root zone, which can be
- switched on via "dnssec-validation auto;"
- - Support for DNS64.
- - Support for response policy zones (RPZ).
- - Support for writable DLZ zones.
- - Improved ease of configuration of GSS/TSIG for
- interoperability with Active Directory
- - Support for GOST signing algorithm for DNSSEC.
- - Removed RTT Banding from server selection algorithm.
- - New "static-stub" zone type.
- - Allow configuration of resolver timeouts via
- "resolver-query-timeout" option.
-
-BIND 9.7.0
-
- BIND 9.7.0 includes a number of changes from BIND 9.6 and earlier
- releases. Most are intended to simplify DNSSEC configuration.
-
- New features include:
-
- - Fully automatic signing of zones by "named".
- - Simplified configuration of DNSSEC Lookaside Validation (DLV).
- - Simplified configuration of Dynamic DNS, using the "ddns-confgen"
- command line tool or the "local" update-policy option. (As a side
- effect, this also makes it easier to configure automatic zone
- re-signing.)
- - New named option "attach-cache" that allows multiple views to
- share a single cache.
- - DNS rebinding attack prevention.
- - New default values for dnssec-keygen parameters.
- - Support for RFC 5011 automated trust anchor maintenance
- - Smart signing: simplified tools for zone signing and key
- maintenance.
- - The "statistics-channels" option is now available on Windows.
- - A new DNSSEC-aware libdns API for use by non-BIND9 applications
- - On some platforms, named and other binaries can now print out
- a stack backtrace on assertion failure, to aid in debugging.
- - A "tools only" installation mode on Windows, which only installs
- dig, host, nslookup and nsupdate.
- - Improved PKCS#11 support, including Keyper support and explicit
- OpenSSL engine selection.
-
- Known issues in this release:
-
- - In rare cases, DNSSEC validation can leak memory. When this
- happens, it will cause an assertion failure when named exits,
- but is otherwise harmless. A fix exists, but was too late for
- this release; it will be included in BIND 9.7.1.
-
- Compatibility notes:
-
- - If you had built BIND 9.6 with any of ALLOW_NSEC3PARAM_UPDATE,
- ALLOW_SECURE_TO_INSECURE or ALLOW_INSECURE_TO_SECURE defined, then
- you should ensure that all changes that are in progress have
- completed prior to upgrading to BIND 9.7. BIND 9.7 implements
- those features in a way which is not backwards compatible.
-
- - Prior releases had a bug which caused HMAC-SHA* keys with long
- secrets to be used incorrectly. Fixing this bug means that older
- versions of BIND 9 may fail to interoperate with this version
- when using TSIG keys. If this occurs, the new "isc-hmac-fixup"
- tool will convert a key with a long secret into a form that works
- correctly with all versions of BIND 9. See the "isc-hmac-fixup"
- man page for additional details.
-
- - Revoking a DNSSEC key with "dnssec-revoke" changes its key ID.
- It is possible for the new key ID to collide with that of a
- different key. Newly generated keys will not have this problem,
- as "dnssec-keygen" looks for potential collisions before
- generating keys, but exercise caution if using key revokation
- with keys that were generated by older versions of BIND 9. See
- the Administrator's Reference Manual, section 4.10 ("Dynamic
- Trust Anchor Management") for more details.
-
- - A bug was fixed in which a key's scheduled inactivity date was
- stored incorectly. Users who participated in the 9.7.0 BETA test
- and had DNSSEC keys with scheduled inactivity dates will need to
- reset those keys' dates using "dnssec-settime -I".
+BIND 9.9.3
+
+ BIND 9.9.3 is a maintenance release and patches the security
+ flaws described in CVE-2012-5688, CVE-2012-5689 and CVE-2013-2266.
+
+BIND 9.9.2
+
+ BIND 9.9.2 is a maintenance release and patches the security
+ flaw described in CVE-2012-4244.
+
+BIND 9.9.1
+
+ BIND 9.9.1 is a maintenance release.
+
+BIND 9.9.0
+
+ BIND 9.9.0 includes a number of changes from BIND 9.8 and earlier
+ releases. New features include:
+
+ - Inline signing, allowing automatic DNSSEC signing of
+ master zones without modification of the zonefile, or
+ "bump in the wire" signing in slaves.
+ - NXDOMAIN redirection.
+ - New 'rndc flushtree' command clears all data under a given
+ name from the DNS cache.
+ - New 'rndc sync' command dumps pending changes in a dynamic
+ zone to disk without a freeze/thaw cycle.
+ - New 'rndc signing' command displays or clears signing status
+ records in 'auto-dnssec' zones.
+ - NSEC3 parameters for 'auto-dnssec' zones can now be set prior
+ to signing, eliminating the need to initially sign with NSEC.
+ - Startup time improvements on large authoritative servers.
+ - Slave zones are now saved in raw format by default.
+ - Several improvements to response policy zones (RPZ).
+ - Improved hardware scalability by using multiple threads
+ to listen for queries and using finer-grained client locking
+ - The 'also-notify' option now takes the same syntax as
+ 'masters', so it can used named masterlists and TSIG keys.
+ - 'dnssec-signzone -D' writes an output file containing only DNSSEC
+ data, which can be included by the primary zone file.
+ - 'dnssec-signzone -R' forces removal of signatures that are
+ not expired but were created by a key which no longer exists.
+ - 'dnssec-signzone -X' allows a separate expiration date to
+ be specified for DNSKEY signatures from other signatures.
+ - New '-L' option to dnssec-keygen, dnssec-settime, and
+ dnssec-keyfromlabel sets the default TTL for the key.
+ - dnssec-dsfromkey now supports reading from standard input,
+ to make it easier to convert DNSKEY to DS.
+ - RFC 1918 reverse zones have been added to the empty-zones
+ table per RFC 6303.
+ - Dynamic updates can now optionally set the zone's SOA serial
+ number to the current UNIX time.
+ - DLZ modules can now retrieve the source IP address of
+ the querying client.
+ - 'request-ixfr' option can now be set at the per-zone level.
+ - 'dig +rrcomments' turns on comments about DNSKEY records,
+ indicating their key ID, algorithm and function
+ - Simplified nsupdate syntax and added readline support
Building
@@ -188,12 +138,12 @@ Building
AIX 4.3, 5L
CentOS 4, 4.5, 5
Darwin 9.0.0d1/ARM
- Debian 4
- Fedora Core 5, 7
- FreeBSD 6.1
+ Debian 4, 5, 6
+ Fedora Core 5, 7, 8
+ FreeBSD 6, 7, 8
HP-UX 11.23 PA
- MacOS X 10.4, 10.5
- Red Hat Enterprise Linux 4, 5
+ MacOS X 10.5, 10.6, 10.7
+ Red Hat Enterprise Linux 4, 5, 6
SCO OpenServer 5.0.6
Slackware 9, 10
SuSE 9, 10
@@ -214,7 +164,8 @@ Building
CFLAGS
C compiler flags. Defaults to include -g and/or -O2
- as supported by the compiler.
+ as supported by the compiler. Please include '-g'
+ if you need to set CFLAGS.
STD_CINCLUDES
System header file directories. Can be used to specify
@@ -331,6 +282,10 @@ Building
libraries. sh-utils-1.16 provides a "printf" which compiles
on SunOS 4.
+Known limitations
+
+ Linux requires kernel build 2.6.39 or later to get the
+ performance benefits from using multiple sockets.
Documentation
diff --git a/contrib/bind9/aclocal.m4 b/contrib/bind9/aclocal.m4
index c1a594c1e35d..3f017c999647 100644
--- a/contrib/bind9/aclocal.m4
+++ b/contrib/bind9/aclocal.m4
@@ -1,2 +1,5 @@
-sinclude(./libtool.m4)dnl
-
+sinclude(libtool.m4/libtool.m4)dnl
+sinclude(libtool.m4/ltoptions.m4)dnl
+sinclude(libtool.m4/ltsugar.m4)dnl
+sinclude(libtool.m4/ltversion.m4)dnl
+sinclude(libtool.m4/lt~obsolete.m4)dnl
diff --git a/contrib/bind9/bin/Makefile.in b/contrib/bind9/bin/Makefile.in
index 89b4673edd35..87ca5b270562 100644
--- a/contrib/bind9/bin/Makefile.in
+++ b/contrib/bind9/bin/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -19,8 +19,8 @@ srcdir = @srcdir@
VPATH = @srcdir@
top_srcdir = @top_srcdir@
-SUBDIRS = named rndc dig dnssec tests tools nsupdate \
- check confgen @PKCS11_TOOLS@
+SUBDIRS = named rndc dig dnssec tools tests nsupdate \
+ check confgen @PYTHON_TOOLS@ @PKCS11_TOOLS@
TARGETS =
@BIND9_MAKE_RULES@
diff --git a/contrib/bind9/bin/check/check-tool.c b/contrib/bind9/bin/check/check-tool.c
index 2bf16a686c55..1e534071d0c8 100644
--- a/contrib/bind9/bin/check/check-tool.c
+++ b/contrib/bind9/bin/check/check-tool.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: check-tool.c,v 1.41 2010/09/07 23:46:59 tbox Exp $ */
+/* $Id: check-tool.c,v 1.44 2011/12/22 07:32:39 each Exp $ */
/*! \file */
@@ -196,6 +196,10 @@ checkns(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner,
a->type == dns_rdatatype_a);
REQUIRE(aaaa == NULL || !dns_rdataset_isassociated(aaaa) ||
aaaa->type == dns_rdatatype_aaaa);
+
+ if (a == NULL || aaaa == NULL)
+ return (answer);
+
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_CANONNAME;
hints.ai_family = PF_UNSPEC;
@@ -258,8 +262,7 @@ checkns(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner,
}
return (ISC_TRUE);
}
- if (a == NULL || aaaa == NULL)
- return (answer);
+
/*
* Check that all glue records really exist.
*/
@@ -597,7 +600,7 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
dns_zone_settype(zone, dns_zone_master);
- isc_buffer_init(&buffer, zonename, strlen(zonename));
+ isc_buffer_constinit(&buffer, zonename, strlen(zonename));
isc_buffer_add(&buffer, strlen(zonename));
dns_fixedname_init(&fixorigin);
origin = dns_fixedname_name(&fixorigin);
@@ -635,7 +638,8 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
/*% dump the zone */
isc_result_t
dump_zone(const char *zonename, dns_zone_t *zone, const char *filename,
- dns_masterformat_t fileformat, const dns_master_style_t *style)
+ dns_masterformat_t fileformat, const dns_master_style_t *style,
+ const isc_uint32_t rawversion)
{
isc_result_t result;
FILE *output = stdout;
@@ -661,8 +665,8 @@ dump_zone(const char *zonename, dns_zone_t *zone, const char *filename,
}
}
- result = dns_zone_dumptostream2(zone, output, fileformat, style);
-
+ result = dns_zone_dumptostream3(zone, output, fileformat, style,
+ rawversion);
if (output != stdout)
(void)isc_stdio_close(output);
diff --git a/contrib/bind9/bin/check/check-tool.h b/contrib/bind9/bin/check/check-tool.h
index e988597a740d..0794729ee05f 100644
--- a/contrib/bind9/bin/check/check-tool.h
+++ b/contrib/bind9/bin/check/check-tool.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2010, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: check-tool.h,v 1.16 2010/09/07 23:46:59 tbox Exp $ */
+/* $Id: check-tool.h,v 1.18 2011/12/09 23:47:02 tbox Exp $ */
#ifndef CHECK_TOOL_H
#define CHECK_TOOL_H
@@ -41,7 +41,8 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
isc_result_t
dump_zone(const char *zonename, dns_zone_t *zone, const char *filename,
- dns_masterformat_t fileformat, const dns_master_style_t *style);
+ dns_masterformat_t fileformat, const dns_master_style_t *style,
+ const isc_uint32_t rawversion);
#ifdef _WIN32
void InitSockets(void);
diff --git a/contrib/bind9/bin/check/named-checkconf.c b/contrib/bind9/bin/check/named-checkconf.c
index a342dd9fbd9a..0b3c508f28c4 100644
--- a/contrib/bind9/bin/check/named-checkconf.c
+++ b/contrib/bind9/bin/check/named-checkconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: named-checkconf.c,v 1.54.62.2 2011/03/12 04:59:13 tbox Exp $ */
+/* $Id: named-checkconf.c,v 1.56 2011/03/12 04:59:46 tbox Exp $ */
/*! \file */
@@ -295,6 +295,18 @@ configure_zone(const char *vclass, const char *view,
}
obj = NULL;
+ if (get_maps(maps, "check-spf", &obj)) {
+ if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {
+ zone_options |= DNS_ZONEOPT_CHECKSPF;
+ } else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
+ zone_options &= ~DNS_ZONEOPT_CHECKSPF;
+ } else
+ INSIST(0);
+ } else {
+ zone_options |= DNS_ZONEOPT_CHECKSPF;
+ }
+
+ obj = NULL;
if (get_checknames(maps, &obj)) {
if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {
zone_options |= DNS_ZONEOPT_CHECKNAMES;
@@ -471,6 +483,7 @@ main(int argc, char **argv) {
if (isc_commandline_option != '?')
fprintf(stderr, "%s: invalid argument -%c\n",
program, isc_commandline_option);
+ /* FALLTHROUGH */
case 'h':
usage();
diff --git a/contrib/bind9/bin/check/named-checkzone.8 b/contrib/bind9/bin/check/named-checkzone.8
index 92c8bdcffcf1..8538ca886c2a 100644
--- a/contrib/bind9/bin/check/named-checkzone.8
+++ b/contrib/bind9/bin/check/named-checkzone.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2007, 2009-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000-2002 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -33,9 +33,9 @@
named\-checkzone, named\-compilezone \- zone file validity checking or converting tool
.SH "SYNOPSIS"
.HP 16
-\fBnamed\-checkzone\fR [\fB\-d\fR] [\fB\-h\fR] [\fB\-j\fR] [\fB\-q\fR] [\fB\-v\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-f\ \fR\fB\fIformat\fR\fR] [\fB\-F\ \fR\fB\fIformat\fR\fR] [\fB\-i\ \fR\fB\fImode\fR\fR] [\fB\-k\ \fR\fB\fImode\fR\fR] [\fB\-m\ \fR\fB\fImode\fR\fR] [\fB\-M\ \fR\fB\fImode\fR\fR] [\fB\-n\ \fR\fB\fImode\fR\fR] [\fB\-o\ \fR\fB\fIfilename\fR\fR] [\fB\-r\ \fR\fB\fImode\fR\fR] [\fB\-s\ \fR\fB\fIstyle\fR\fR] [\fB\-S\ \fR\fB\fImode\fR\fR] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] [\fB\-w\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-W\ \fR\fB\fImode\fR\fR] {zonename} {filename}
+\fBnamed\-checkzone\fR [\fB\-d\fR] [\fB\-h\fR] [\fB\-j\fR] [\fB\-q\fR] [\fB\-v\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-f\ \fR\fB\fIformat\fR\fR] [\fB\-F\ \fR\fB\fIformat\fR\fR] [\fB\-i\ \fR\fB\fImode\fR\fR] [\fB\-k\ \fR\fB\fImode\fR\fR] [\fB\-m\ \fR\fB\fImode\fR\fR] [\fB\-M\ \fR\fB\fImode\fR\fR] [\fB\-n\ \fR\fB\fImode\fR\fR] [\fB\-L\ \fR\fB\fIserial\fR\fR] [\fB\-o\ \fR\fB\fIfilename\fR\fR] [\fB\-r\ \fR\fB\fImode\fR\fR] [\fB\-s\ \fR\fB\fIstyle\fR\fR] [\fB\-S\ \fR\fB\fImode\fR\fR] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] [\fB\-T\ \fR\fB\fImode\fR\fR] [\fB\-w\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-W\ \fR\fB\fImode\fR\fR] {zonename} {filename}
.HP 18
-\fBnamed\-compilezone\fR [\fB\-d\fR] [\fB\-j\fR] [\fB\-q\fR] [\fB\-v\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-C\ \fR\fB\fImode\fR\fR] [\fB\-f\ \fR\fB\fIformat\fR\fR] [\fB\-F\ \fR\fB\fIformat\fR\fR] [\fB\-i\ \fR\fB\fImode\fR\fR] [\fB\-k\ \fR\fB\fImode\fR\fR] [\fB\-m\ \fR\fB\fImode\fR\fR] [\fB\-n\ \fR\fB\fImode\fR\fR] [\fB\-r\ \fR\fB\fImode\fR\fR] [\fB\-s\ \fR\fB\fIstyle\fR\fR] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] [\fB\-w\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-W\ \fR\fB\fImode\fR\fR] {\fB\-o\ \fR\fB\fIfilename\fR\fR} {zonename} {filename}
+\fBnamed\-compilezone\fR [\fB\-d\fR] [\fB\-j\fR] [\fB\-q\fR] [\fB\-v\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-C\ \fR\fB\fImode\fR\fR] [\fB\-f\ \fR\fB\fIformat\fR\fR] [\fB\-F\ \fR\fB\fIformat\fR\fR] [\fB\-i\ \fR\fB\fImode\fR\fR] [\fB\-k\ \fR\fB\fImode\fR\fR] [\fB\-m\ \fR\fB\fImode\fR\fR] [\fB\-n\ \fR\fB\fImode\fR\fR] [\fB\-L\ \fR\fB\fIserial\fR\fR] [\fB\-r\ \fR\fB\fImode\fR\fR] [\fB\-s\ \fR\fB\fIstyle\fR\fR] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] [\fB\-T\ \fR\fB\fImode\fR\fR] [\fB\-w\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-W\ \fR\fB\fImode\fR\fR] {\fB\-o\ \fR\fB\fIfilename\fR\fR} {zonename} {filename}
.SH "DESCRIPTION"
.PP
\fBnamed\-checkzone\fR
@@ -139,11 +139,19 @@ Specify the format of the zone file. Possible formats are
.PP
\-F \fIformat\fR
.RS 4
-Specify the format of the output file specified. Possible formats are
+Specify the format of the output file specified. For
+\fBnamed\-checkzone\fR, this does not cause any effects unless it dumps the zone contents.
+.sp
+Possible formats are
\fB"text"\fR
(default) and
-\fB"raw"\fR. For
-\fBnamed\-checkzone\fR, this does not cause any effects unless it dumps the zone contents.
+\fB"raw"\fR
+or
+\fB"raw=N"\fR, which store the zone in a binary format for rapid loading by
+\fBnamed\fR.
+\fB"raw=N"\fR
+specifies the format version of the raw zone file: if N is 0, the raw file can be read by any version of
+\fBnamed\fR; if N is 1, the file can be read by release 9.9.0 or higher. The default is 1.
.RE
.PP
\-k \fImode\fR
@@ -160,6 +168,11 @@ checks with the specified failure mode. Possible modes are
\fB"ignore"\fR.
.RE
.PP
+\-L \fIserial\fR
+.RS 4
+When compiling a zone to 'raw' format, set the "source serial" value in the header to the specified serial number. (This is expected to be used primarily for testing purposes.)
+.RE
+.PP
\-m \fImode\fR
.RS 4
Specify whether MX records should be checked to see if they are addresses. Possible modes are
@@ -236,6 +249,14 @@ Chroot to
so that include directives in the configuration file are processed as if run by a similarly chrooted named.
.RE
.PP
+\-T \fImode\fR
+.RS 4
+Check if Sender Policy Framework records (TXT and SPF) both exist or both don't exist. A warning is issued if they don't match. Possible modes are
+\fB"warn"\fR
+(default),
+\fB"ignore"\fR.
+.RE
+.PP
\-w \fIdirectory\fR
.RS 4
chdir to
@@ -281,7 +302,7 @@ BIND 9 Administrator Reference Manual.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2004\-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004\-2007, 2009\-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000\-2002 Internet Software Consortium.
.br
diff --git a/contrib/bind9/bin/check/named-checkzone.c b/contrib/bind9/bin/check/named-checkzone.c
index 11491b580862..7e779c2d17f8 100644
--- a/contrib/bind9/bin/check/named-checkzone.c
+++ b/contrib/bind9/bin/check/named-checkzone.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: named-checkzone.c,v 1.61.62.2 2011/12/22 23:45:54 tbox Exp $ */
+/* $Id: named-checkzone.c,v 1.65 2011/12/22 17:29:22 each Exp $ */
/*! \file */
@@ -39,6 +39,7 @@
#include <dns/db.h>
#include <dns/fixedname.h>
#include <dns/log.h>
+#include <dns/master.h>
#include <dns/masterdump.h>
#include <dns/name.h>
#include <dns/rdataclass.h>
@@ -112,8 +113,12 @@ main(int argc, char **argv) {
const char *outputformatstr = NULL;
dns_masterformat_t inputformat = dns_masterformat_text;
dns_masterformat_t outputformat = dns_masterformat_text;
+ dns_masterrawheader_t header;
+ isc_uint32_t rawversion = 1, serialnum = 0;
+ isc_boolean_t snset = ISC_FALSE;
isc_boolean_t logdump = ISC_FALSE;
FILE *errout = stdout;
+ char *endp;
outputstyle = &dns_master_style_full;
@@ -145,19 +150,21 @@ main(int argc, char **argv) {
if (progmode == progmode_compile) {
zone_options |= (DNS_ZONEOPT_CHECKNS |
DNS_ZONEOPT_FATALNS |
+ DNS_ZONEOPT_CHECKSPF |
DNS_ZONEOPT_CHECKDUPRR |
DNS_ZONEOPT_CHECKNAMES |
DNS_ZONEOPT_CHECKNAMESFAIL |
DNS_ZONEOPT_CHECKWILDCARD);
} else
- zone_options |= DNS_ZONEOPT_CHECKDUPRR;
+ zone_options |= (DNS_ZONEOPT_CHECKDUPRR |
+ DNS_ZONEOPT_CHECKSPF);
#define ARGCMP(X) (strcmp(isc_commandline_argument, X) == 0)
isc_commandline_errprint = ISC_FALSE;
while ((c = isc_commandline_parse(argc, argv,
- "c:df:hi:jk:m:n:qr:s:t:o:vw:DF:M:S:W:"))
+ "c:df:hi:jk:L:m:n:qr:s:t:o:vw:DF:M:S:T:W:"))
!= EOF) {
switch (c) {
case 'c':
@@ -235,6 +242,17 @@ main(int argc, char **argv) {
}
break;
+ case 'L':
+ snset = ISC_TRUE;
+ endp = NULL;
+ serialnum = strtol(isc_commandline_argument, &endp, 0);
+ if (*endp != '\0') {
+ fprintf(stderr, "source serial number "
+ "must be numeric");
+ exit(1);
+ }
+ break;
+
case 'n':
if (ARGCMP("ignore")) {
zone_options &= ~(DNS_ZONEOPT_CHECKNS|
@@ -363,6 +381,18 @@ main(int argc, char **argv) {
}
break;
+ case 'T':
+ if (ARGCMP("warn")) {
+ zone_options |= DNS_ZONEOPT_CHECKSPF;
+ } else if (ARGCMP("ignore")) {
+ zone_options &= ~DNS_ZONEOPT_CHECKSPF;
+ } else {
+ fprintf(stderr, "invalid argument to -T: %s\n",
+ isc_commandline_argument);
+ exit(1);
+ }
+ break;
+
case 'W':
if (ARGCMP("warn"))
zone_options |= DNS_ZONEOPT_CHECKWILDCARD;
@@ -374,6 +404,7 @@ main(int argc, char **argv) {
if (isc_commandline_option != '?')
fprintf(stderr, "%s: invalid argument -%c\n",
prog_name, isc_commandline_option);
+ /* FALLTHROUGH */
case 'h':
usage();
@@ -398,7 +429,11 @@ main(int argc, char **argv) {
inputformat = dns_masterformat_text;
else if (strcasecmp(inputformatstr, "raw") == 0)
inputformat = dns_masterformat_raw;
- else {
+ else if (strncasecmp(inputformatstr, "raw=", 4) == 0) {
+ inputformat = dns_masterformat_raw;
+ fprintf(stderr,
+ "WARNING: input format raw, version ignored\n");
+ } else {
fprintf(stderr, "unknown file format: %s\n",
inputformatstr);
exit(1);
@@ -406,11 +441,22 @@ main(int argc, char **argv) {
}
if (outputformatstr != NULL) {
- if (strcasecmp(outputformatstr, "text") == 0)
+ if (strcasecmp(outputformatstr, "text") == 0) {
outputformat = dns_masterformat_text;
- else if (strcasecmp(outputformatstr, "raw") == 0)
+ } else if (strcasecmp(outputformatstr, "raw") == 0) {
+ outputformat = dns_masterformat_raw;
+ } else if (strncasecmp(outputformatstr, "raw=", 4) == 0) {
+ char *end;
+
outputformat = dns_masterformat_raw;
- else {
+ rawversion = strtol(outputformatstr + 4, &end, 10);
+ if (end == outputformatstr + 4 || *end != '\0' ||
+ rawversion > 1U) {
+ fprintf(stderr,
+ "unknown raw format version\n");
+ exit(1);
+ }
+ } else {
fprintf(stderr, "unknown file format: %s\n",
outputformatstr);
exit(1);
@@ -465,13 +511,20 @@ main(int argc, char **argv) {
result = load_zone(mctx, origin, filename, inputformat, classname,
&zone);
+ if (snset) {
+ dns_master_initrawheader(&header);
+ header.flags = DNS_MASTERRAW_SOURCESERIALSET;
+ header.sourceserial = serialnum;
+ dns_zone_setrawdata(zone, &header);
+ }
+
if (result == ISC_R_SUCCESS && dumpzone) {
if (logdump) {
fprintf(errout, "dump zone to %s...", output_filename);
fflush(errout);
}
result = dump_zone(origin, zone, output_filename,
- outputformat, outputstyle);
+ outputformat, outputstyle, rawversion);
if (logdump)
fprintf(errout, "done\n");
}
diff --git a/contrib/bind9/bin/check/named-checkzone.docbook b/contrib/bind9/bin/check/named-checkzone.docbook
index 33dc15e47095..ea37fa2b57f9 100644
--- a/contrib/bind9/bin/check/named-checkzone.docbook
+++ b/contrib/bind9/bin/check/named-checkzone.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2007, 2009-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2002 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: named-checkzone.docbook,v 1.40 2010/01/16 23:48:15 tbox Exp $ -->
+<!-- $Id: named-checkzone.docbook,v 1.44 2011/12/22 07:32:39 each Exp $ -->
<refentry id="man.named-checkzone">
<refentryinfo>
<date>June 13, 2000</date>
@@ -38,6 +38,8 @@
<year>2007</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -70,11 +72,13 @@
<arg><option>-m <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-M <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-n <replaceable class="parameter">mode</replaceable></option></arg>
+ <arg><option>-L <replaceable class="parameter">serial</replaceable></option></arg>
<arg><option>-o <replaceable class="parameter">filename</replaceable></option></arg>
<arg><option>-r <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-s <replaceable class="parameter">style</replaceable></option></arg>
<arg><option>-S <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-t <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-T <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-w <replaceable class="parameter">directory</replaceable></option></arg>
<arg><option>-D</option></arg>
<arg><option>-W <replaceable class="parameter">mode</replaceable></option></arg>
@@ -95,9 +99,11 @@
<arg><option>-k <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-m <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-n <replaceable class="parameter">mode</replaceable></option></arg>
+ <arg><option>-L <replaceable class="parameter">serial</replaceable></option></arg>
<arg><option>-r <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-s <replaceable class="parameter">style</replaceable></option></arg>
<arg><option>-t <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-T <replaceable class="parameter">mode</replaceable></option></arg>
<arg><option>-w <replaceable class="parameter">directory</replaceable></option></arg>
<arg><option>-D</option></arg>
<arg><option>-W <replaceable class="parameter">mode</replaceable></option></arg>
@@ -247,12 +253,20 @@
<listitem>
<para>
Specify the format of the output file specified.
- Possible formats are <command>"text"</command> (default)
- and <command>"raw"</command>.
For <command>named-checkzone</command>,
this does not cause any effects unless it dumps the zone
contents.
</para>
+ <para>
+ Possible formats are <command>"text"</command> (default)
+ and <command>"raw"</command> or <command>"raw=N"</command>,
+ which store the zone in a binary format for rapid loading
+ by <command>named</command>. <command>"raw=N"</command>
+ specifies the format version of the raw zone file: if N
+ is 0, the raw file can be read by any version of
+ <command>named</command>; if N is 1, the file can be read
+ by release 9.9.0 or higher. The default is 1.
+ </para>
</listitem>
</varlistentry>
@@ -272,6 +286,17 @@
</varlistentry>
<varlistentry>
+ <term>-L <replaceable class="parameter">serial</replaceable></term>
+ <listitem>
+ <para>
+ When compiling a zone to 'raw' format, set the "source serial"
+ value in the header to the specified serial number. (This is
+ expected to be used primarily for testing purposes.)
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-m <replaceable class="parameter">mode</replaceable></term>
<listitem>
<para>
@@ -380,6 +405,18 @@
</varlistentry>
<varlistentry>
+ <term>-T <replaceable class="parameter">mode</replaceable></term>
+ <listitem>
+ <para>
+ Check if Sender Policy Framework records (TXT and SPF)
+ both exist or both don't exist. A warning is issued
+ if they don't match. Possible modes are
+ <command>"warn"</command> (default), <command>"ignore"</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-w <replaceable class="parameter">directory</replaceable></term>
<listitem>
<para>
diff --git a/contrib/bind9/bin/check/named-checkzone.html b/contrib/bind9/bin/check/named-checkzone.html
index 2be53a7b3498..6941326996cc 100644
--- a/contrib/bind9/bin/check/named-checkzone.html
+++ b/contrib/bind9/bin/check/named-checkzone.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2007, 2009-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2002 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -29,11 +29,11 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-checkzone</code> [<code class="option">-d</code>] [<code class="option">-h</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-M <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-o <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-S <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {zonename} {filename}</p></div>
-<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {<code class="option">-o <em class="replaceable"><code>filename</code></em></code>} {zonename} {filename}</p></div>
+<div class="cmdsynopsis"><p><code class="command">named-checkzone</code> [<code class="option">-d</code>] [<code class="option">-h</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-M <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-o <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-S <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-T <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {zonename} {filename}</p></div>
+<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-T <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {<code class="option">-o <em class="replaceable"><code>filename</code></em></code>} {zonename} {filename}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543696"></a><h2>DESCRIPTION</h2>
+<a name="id2543736"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkzone</strong></span>
checks the syntax and integrity of a zone file. It performs the
same checks as <span><strong class="command">named</strong></span> does when loading a
@@ -53,7 +53,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543731"></a><h2>OPTIONS</h2>
+<a name="id2543771"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-d</span></dt>
<dd><p>
@@ -128,14 +128,24 @@
and <span><strong class="command">"raw"</strong></span>.
</p></dd>
<dt><span class="term">-F <em class="replaceable"><code>format</code></em></span></dt>
-<dd><p>
+<dd>
+<p>
Specify the format of the output file specified.
- Possible formats are <span><strong class="command">"text"</strong></span> (default)
- and <span><strong class="command">"raw"</strong></span>.
For <span><strong class="command">named-checkzone</strong></span>,
this does not cause any effects unless it dumps the zone
contents.
- </p></dd>
+ </p>
+<p>
+ Possible formats are <span><strong class="command">"text"</strong></span> (default)
+ and <span><strong class="command">"raw"</strong></span> or <span><strong class="command">"raw=N"</strong></span>,
+ which store the zone in a binary format for rapid loading
+ by <span><strong class="command">named</strong></span>. <span><strong class="command">"raw=N"</strong></span>
+ specifies the format version of the raw zone file: if N
+ is 0, the raw file can be read by any version of
+ <span><strong class="command">named</strong></span>; if N is 1, the file can be read
+ by release 9.9.0 or higher. The default is 1.
+ </p>
+</dd>
<dt><span class="term">-k <em class="replaceable"><code>mode</code></em></span></dt>
<dd><p>
Perform <span><strong class="command">"check-names"</strong></span> checks with the
@@ -146,6 +156,12 @@
(default for <span><strong class="command">named-checkzone</strong></span>) and
<span><strong class="command">"ignore"</strong></span>.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>serial</code></em></span></dt>
+<dd><p>
+ When compiling a zone to 'raw' format, set the "source serial"
+ value in the header to the specified serial number. (This is
+ expected to be used primarily for testing purposes.)
+ </p></dd>
<dt><span class="term">-m <em class="replaceable"><code>mode</code></em></span></dt>
<dd><p>
Specify whether MX records should be checked to see if they
@@ -214,6 +230,13 @@
directives in the configuration file are processed as if
run by a similarly chrooted named.
</p></dd>
+<dt><span class="term">-T <em class="replaceable"><code>mode</code></em></span></dt>
+<dd><p>
+ Check if Sender Policy Framework records (TXT and SPF)
+ both exist or both don't exist. A warning is issued
+ if they don't match. Possible modes are
+ <span><strong class="command">"warn"</strong></span> (default), <span><strong class="command">"ignore"</strong></span>.
+ </p></dd>
<dt><span class="term">-w <em class="replaceable"><code>directory</code></em></span></dt>
<dd><p>
chdir to <code class="filename">directory</code> so that
@@ -247,14 +270,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544446"></a><h2>RETURN VALUES</h2>
+<a name="id2544612"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkzone</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544458"></a><h2>SEE ALSO</h2>
+<a name="id2544624"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
<em class="citetitle">RFC 1035</em>,
@@ -262,7 +285,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544491"></a><h2>AUTHOR</h2>
+<a name="id2544657"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/confgen/ddns-confgen.c b/contrib/bind9/bin/confgen/ddns-confgen.c
index 826b500d950c..d655145eaf7a 100644
--- a/contrib/bind9/bin/confgen/ddns-confgen.c
+++ b/contrib/bind9/bin/confgen/ddns-confgen.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: ddns-confgen.c,v 1.9.308.2 2011/03/12 04:59:13 tbox Exp $ */
+/* $Id: ddns-confgen.c,v 1.11 2011/03/12 04:59:46 tbox Exp $ */
/*! \file */
diff --git a/contrib/bind9/bin/confgen/keygen.c b/contrib/bind9/bin/confgen/keygen.c
index a5db317700d8..d0cdafed364b 100644
--- a/contrib/bind9/bin/confgen/keygen.c
+++ b/contrib/bind9/bin/confgen/keygen.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -126,13 +126,17 @@ generate_key(isc_mem_t *mctx, const char *randomfile, dns_secalg_t alg,
switch (alg) {
case DST_ALG_HMACMD5:
+ case DST_ALG_HMACSHA1:
+ case DST_ALG_HMACSHA224:
+ case DST_ALG_HMACSHA256:
if (keysize < 1 || keysize > 512)
fatal("keysize %d out of range (must be 1-512)\n",
keysize);
break;
- case DST_ALG_HMACSHA256:
- if (keysize < 1 || keysize > 256)
- fatal("keysize %d out of range (must be 1-256)\n",
+ case DST_ALG_HMACSHA384:
+ case DST_ALG_HMACSHA512:
+ if (keysize < 1 || keysize > 1024)
+ fatal("keysize %d out of range (must be 1-1024)\n",
keysize);
break;
default:
diff --git a/contrib/bind9/bin/confgen/rndc-confgen.c b/contrib/bind9/bin/confgen/rndc-confgen.c
index 1ad14a99aa15..e2ac07923a2c 100644
--- a/contrib/bind9/bin/confgen/rndc-confgen.c
+++ b/contrib/bind9/bin/confgen/rndc-confgen.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rndc-confgen.c,v 1.5.308.2 2011/03/12 04:59:13 tbox Exp $ */
+/* $Id: rndc-confgen.c,v 1.7 2011/03/12 04:59:46 tbox Exp $ */
/*! \file */
@@ -140,8 +140,6 @@ main(int argc, char **argv) {
keysize = strtol(isc_commandline_argument, &p, 10);
if (*p != '\0' || keysize < 0)
fatal("-b requires a non-negative number");
- if (keysize < 1 || keysize > 512)
- fatal("-b must be in the range 1 through 512");
break;
case 'c':
keyfile = isc_commandline_argument;
diff --git a/contrib/bind9/bin/dig/Makefile.in b/contrib/bind9/bin/dig/Makefile.in
index 2a3bc5d6fe8b..5bc4db0a32aa 100644
--- a/contrib/bind9/bin/dig/Makefile.in
+++ b/contrib/bind9/bin/dig/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2005, 2007, 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000-2002 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -23,6 +23,8 @@ top_srcdir = @top_srcdir@
@BIND9_MAKE_INCLUDES@
+READLINE_LIB = @READLINE_LIB@
+
CINCLUDES = -I${srcdir}/include ${DNS_INCLUDES} ${BIND9_INCLUDES} \
${ISC_INCLUDES} ${LWRES_INCLUDES} ${ISCCFG_INCLUDES}
@@ -78,7 +80,7 @@ host@EXEEXT@: host.@O@ dighost.@O@ ${UOBJS} ${DEPLIBS}
${FINALBUILDCMD}
nslookup@EXEEXT@: nslookup.@O@ dighost.@O@ ${UOBJS} ${DEPLIBS}
- export BASEOBJS="nslookup.@O@ dighost.@O@ ${UOBJS}"; \
+ export BASEOBJS="nslookup.@O@ dighost.@O@ ${READLINE_LIB} ${UOBJS}"; \
${FINALBUILDCMD}
doc man:: ${MANOBJS}
diff --git a/contrib/bind9/bin/dig/dig.1 b/contrib/bind9/bin/dig/dig.1
index 6e3bfb6c0c6e..818c020319df 100644
--- a/contrib/bind9/bin/dig/dig.1
+++ b/contrib/bind9/bin/dig/dig.1
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000-2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -57,7 +57,9 @@ allows multiple lookups to be issued from the command line.
Unless it is told to query a specific name server,
\fBdig\fR
will try each of the servers listed in
-\fI/etc/resolv.conf\fR.
+\fI/etc/resolv.conf\fR. If no usable server addreses are found,
+\fBdig\fR
+will send the query to the local host.
.PP
When no command line arguments or options are given,
\fBdig\fR
@@ -95,13 +97,20 @@ is the name or IP address of the name server to query. This can be an IPv4 addre
\fIserver\fR
argument is a hostname,
\fBdig\fR
-resolves that name before querying that name server. If no
+resolves that name before querying that name server.
+.sp
+If no
\fIserver\fR
argument is provided,
\fBdig\fR
consults
-\fI/etc/resolv.conf\fR
-and queries the name servers listed there. The reply from the name server that responds is displayed.
+\fI/etc/resolv.conf\fR; if an address is found there, it queries the name server at that address. If either of the
+\fB\-4\fR
+or
+\fB\-6\fR
+options are in use, then only addresses for the corresponding transport will be tried. If no usable addresses are found,
+\fBdig\fR
+will send the query to the local host. The reply from the name server that responds is displayed.
.RE
.PP
\fBname\fR
@@ -291,7 +300,7 @@ A synonym for
.PP
\fB+[no]adflag\fR
.RS 4
-Set [do not set] the AD (authentic data) bit in the query. This requests the server to return whether all of the answer and authority sections have all been validated as secure according to the security policy of the server. AD=1 indicates that all records have been validated as secure and the answer is not from a OPT\-OUT range. AD=0 indicate that some part of the answer was insecure or not validated.
+Set [do not set] the AD (authentic data) bit in the query. This requests the server to return whether all of the answer and authority sections have all been validated as secure according to the security policy of the server. AD=1 indicates that all records have been validated as secure and the answer is not from a OPT\-OUT range. AD=0 indicate that some part of the answer was insecure or not validated. This bit is set by default.
.RE
.PP
\fB+[no]cdflag\fR
@@ -332,6 +341,9 @@ attempts to find the authoritative name servers for the zone containing the name
Toggle tracing of the delegation path from the root name servers for the name being looked up. Tracing is disabled by default. When tracing is enabled,
\fBdig\fR
makes iterative queries to resolve the name being looked up. It will follow referrals from the root servers, showing the answer from each server that was used to resolve the lookup.
+.sp
+\fB+dnssec\fR
+is also set when +trace is set to better emulate the default queries from a nameserver.
.RE
.PP
\fB+[no]cmd\fR
@@ -358,6 +370,24 @@ option is enabled. If short form answers are requested, the default is not to sh
Toggle the display of comment lines in the output. The default is to print comments.
.RE
.PP
+\fB+[no]rrcomments\fR
+.RS 4
+Toggle the display of per\-record comments in the output (for example, human\-readable key information about DNSKEY records). The default is not to print record comments unless multiline mode is active.
+.RE
+.PP
+\fB+split=W\fR
+.RS 4
+Split long hex\- or base64\-formatted fields in resource records into chunks of
+\fIW\fR
+characters (where
+\fIW\fR
+is rounded up to the nearest multiple of 4).
+\fI+nosplit\fR
+or
+\fI+split=0\fR
+causes fields not to be split at all. The default is 56 characters, or 44 characters when multiline mode is active.
+.RE
+.PP
\fB+[no]stats\fR
.RS 4
This query option toggles the printing of statistics: when the query was made, the size of the reply and so on. The default behavior is to print the query statistics.
@@ -445,7 +475,7 @@ bytes. The maximum and minimum sizes of this buffer are 65535 and 0 respectively
.RS 4
Specify the EDNS version to query with. Valid values are 0 to 255. Setting the EDNS version will cause a EDNS query to be sent.
\fB+noedns\fR
-clears the remembered EDNS version.
+clears the remembered EDNS version. EDNS is set to 0 by default.
.RE
.PP
\fB+[no]multiline\fR
@@ -567,7 +597,7 @@ RFC1035.
.PP
There are probably too many query options.
.SH "COPYRIGHT"
-Copyright \(co 2004\-2010 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004\-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000\-2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/bin/dig/dig.c b/contrib/bind9/bin/dig/dig.c
index 5e5ec0fa48d4..79037101d732 100644
--- a/contrib/bind9/bin/dig/dig.c
+++ b/contrib/bind9/bin/dig/dig.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dig.c,v 1.237.124.4 2011/12/07 17:23:55 each Exp $ */
+/* $Id: dig.c,v 1.245 2011/12/07 17:23:28 each Exp $ */
/*! \file */
@@ -67,7 +67,8 @@ static char domainopt[DNS_NAME_MAXTEXT];
static isc_boolean_t short_form = ISC_FALSE, printcmd = ISC_TRUE,
ip6_int = ISC_FALSE, plusquest = ISC_FALSE, pluscomm = ISC_FALSE,
multiline = ISC_FALSE, nottl = ISC_FALSE, noclass = ISC_FALSE,
- onesoa = ISC_FALSE;
+ onesoa = ISC_FALSE, rrcomments = ISC_FALSE;
+static isc_uint32_t splitwidth = 0xffffffff;
/*% opcode text */
static const char * const opcodetext[] = {
@@ -186,7 +187,7 @@ help(void) {
" +domain=### (Set default domainname)\n"
" +bufsize=### (Set EDNS0 Max UDP packet size)\n"
" +ndots=### (Set NDOTS value)\n"
-" +edns=### (Set EDNS version)\n"
+" +[no]edns[=###] (Set EDNS version) [0]\n"
" +[no]search (Set whether to use searchlist)\n"
" +[no]showsearch (Search with intermediate results)\n"
" +[no]defname (Ditto)\n"
@@ -201,6 +202,8 @@ help(void) {
" +[no]cl (Control display of class in records)\n"
" +[no]cmd (Control display of command line)\n"
" +[no]comments (Control display of comment lines)\n"
+" +[no]rrcomments (Control display of per-record "
+ "comments)\n"
" +[no]question (Control display of question)\n"
" +[no]answer (Control display of answer)\n"
" +[no]authority (Control display of authority)\n"
@@ -213,7 +216,7 @@ help(void) {
" +[no]qr (Print question before sending)\n"
" +[no]nssearch (Search all authoritative nameservers)\n"
" +[no]identify (ID responders in short answers)\n"
-" +[no]trace (Trace delegation down from root)\n"
+" +[no]trace (Trace delegation down from root [+dnssec])\n"
" +[no]dnssec (Request DNSSEC records)\n"
" +[no]nsid (Request Name Server ID)\n"
#ifdef DIG_SIGCHASE
@@ -223,6 +226,7 @@ help(void) {
" +[no]topdown (Do DNSSEC validation top down mode)\n"
#endif
#endif
+" +[no]split=## (Split hex/base64 fields into chunks)\n"
" +[no]multiline (Print records in an expanded format)\n"
" +[no]onesoa (AXFR prints only one soa record)\n"
" global d-opts and servers (before host name) affect all queries.\n"
@@ -240,6 +244,8 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
isc_uint64_t diff;
isc_time_t now;
time_t tnow;
+ struct tm tmnow;
+ char time_str[100];
char fromtext[ISC_SOCKADDR_FORMATSIZE];
isc_sockaddr_format(from, fromtext, sizeof(fromtext));
@@ -251,7 +257,10 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
printf(";; Query time: %ld msec\n", (long int)diff/1000);
printf(";; SERVER: %s(%s)\n", fromtext, query->servname);
time(&tnow);
- printf(";; WHEN: %s", ctime(&tnow));
+ tmnow = *localtime(&tnow);
+ if (strftime(time_str, sizeof(time_str),
+ "%a %b %d %H:%M:%S %Z %Y", &tmnow) > 0U)
+ printf(";; WHEN: %s\n", time_str);
if (query->lookup->doing_xfr) {
printf(";; XFR size: %u records (messages %u, "
"bytes %" ISC_PRINT_QUADFORMAT "u)\n",
@@ -259,7 +268,6 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
query->byte_count);
} else {
printf(";; MSG SIZE rcvd: %u\n", bytes);
-
}
if (key != NULL) {
if (!validated)
@@ -276,7 +284,7 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
"from %s(%s) in %d ms\n\n",
query->lookup->doing_xfr ?
query->byte_count : (isc_uint64_t)bytes,
- fromtext, query->servname,
+ fromtext, query->userarg,
(int)diff/1000);
}
}
@@ -391,6 +399,8 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
styleflags |= DNS_STYLEFLAG_NO_TTL;
if (noclass)
styleflags |= DNS_STYLEFLAG_NO_CLASS;
+ if (rrcomments)
+ styleflags |= DNS_STYLEFLAG_RRCOMMENT;
if (multiline) {
styleflags |= DNS_STYLEFLAG_OMIT_OWNER;
styleflags |= DNS_STYLEFLAG_OMIT_CLASS;
@@ -399,16 +409,21 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
styleflags |= DNS_STYLEFLAG_TTL;
styleflags |= DNS_STYLEFLAG_MULTILINE;
styleflags |= DNS_STYLEFLAG_COMMENT;
+ styleflags |= DNS_STYLEFLAG_RRCOMMENT;
}
+
if (multiline || (nottl && noclass))
- result = dns_master_stylecreate(&style, styleflags,
- 24, 24, 24, 32, 80, 8, mctx);
+ result = dns_master_stylecreate2(&style, styleflags,
+ 24, 24, 24, 32, 80, 8,
+ splitwidth, mctx);
else if (nottl || noclass)
- result = dns_master_stylecreate(&style, styleflags,
- 24, 24, 32, 40, 80, 8, mctx);
+ result = dns_master_stylecreate2(&style, styleflags,
+ 24, 24, 32, 40, 80, 8,
+ splitwidth, mctx);
else
- result = dns_master_stylecreate(&style, styleflags,
- 24, 32, 40, 48, 80, 8, mctx);
+ result = dns_master_stylecreate2(&style, styleflags,
+ 24, 32, 40, 48, 80, 8,
+ splitwidth, mctx);
check_result(result, "dns_master_stylecreate");
result = dns_master_rdatasettotext(owner_name, rdataset, style, target);
@@ -433,6 +448,10 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
unsigned int styleflags = 0;
styleflags |= DNS_STYLEFLAG_REL_OWNER;
+ if (query->lookup->comments)
+ styleflags |= DNS_STYLEFLAG_COMMENT;
+ if (rrcomments)
+ styleflags |= DNS_STYLEFLAG_RRCOMMENT;
if (nottl)
styleflags |= DNS_STYLEFLAG_NO_TTL;
if (noclass)
@@ -444,17 +463,20 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
styleflags |= DNS_STYLEFLAG_OMIT_TTL;
styleflags |= DNS_STYLEFLAG_TTL;
styleflags |= DNS_STYLEFLAG_MULTILINE;
- styleflags |= DNS_STYLEFLAG_COMMENT;
+ styleflags |= DNS_STYLEFLAG_RRCOMMENT;
}
if (multiline || (nottl && noclass))
- result = dns_master_stylecreate(&style, styleflags,
- 24, 24, 24, 32, 80, 8, mctx);
+ result = dns_master_stylecreate2(&style, styleflags,
+ 24, 24, 24, 32, 80, 8,
+ splitwidth, mctx);
else if (nottl || noclass)
- result = dns_master_stylecreate(&style, styleflags,
- 24, 24, 32, 40, 80, 8, mctx);
+ result = dns_master_stylecreate2(&style, styleflags,
+ 24, 24, 32, 40, 80, 8,
+ splitwidth, mctx);
else
- result = dns_master_stylecreate(&style, styleflags,
- 24, 32, 40, 48, 80, 8, mctx);
+ result = dns_master_stylecreate2(&style, styleflags,
+ 24, 32, 40, 48, 80, 8,
+ splitwidth, mctx);
check_result(result, "dns_master_stylecreate");
if (query->lookup->cmdline[0] != 0) {
@@ -525,6 +547,13 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
printf(";; WARNING: recursion requested "
"but not available\n");
}
+ if (msg != query->lookup->sendmsg &&
+ query->lookup->edns != -1 && msg->opt == NULL &&
+ (msg->rcode == dns_rcode_formerr ||
+ msg->rcode == dns_rcode_notimp))
+ printf("\n;; WARNING: EDNS query returned status "
+ "%s - retry with '+noedns'\n",
+ rcode_totext(msg->rcode));
if (msg != query->lookup->sendmsg && extrabytes != 0U)
printf(";; WARNING: Messages has %u extra byte%s at "
"end\n", extrabytes, extrabytes != 0 ? "s" : "");
@@ -754,6 +783,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
lookup->section_answer = state;
lookup->section_additional = state;
lookup->comments = state;
+ rrcomments = state;
lookup->stats = state;
printcmd = state;
break;
@@ -855,8 +885,10 @@ plus_option(char *option, isc_boolean_t is_batchfile,
lookup->edns = -1;
break;
}
- if (value == NULL)
- goto need_value;
+ if (value == NULL) {
+ lookup->edns = 0;
+ break;
+ }
result = parse_uint(&num, value, 255, "edns");
if (result != ISC_R_SUCCESS)
fatal("Couldn't parse edns");
@@ -912,6 +944,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
lookup->identify = ISC_TRUE;
lookup->stats = ISC_FALSE;
lookup->comments = ISC_FALSE;
+ rrcomments = ISC_FALSE;
lookup->section_additional = ISC_FALSE;
lookup->section_authority = ISC_FALSE;
lookup->section_question = ISC_FALSE;
@@ -972,6 +1005,10 @@ plus_option(char *option, isc_boolean_t is_batchfile,
goto invalid_option;
}
break;
+ case 'r': /* rrcomments */
+ FULLCHECK("rrcomments");
+ rrcomments = state;
+ break;
default:
goto invalid_option;
}
@@ -998,6 +1035,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
lookup->section_authority = ISC_FALSE;
lookup->section_question = ISC_FALSE;
lookup->comments = ISC_FALSE;
+ rrcomments = ISC_FALSE;
lookup->stats = ISC_FALSE;
}
break;
@@ -1020,6 +1058,36 @@ plus_option(char *option, isc_boolean_t is_batchfile,
lookup->dnssec = ISC_TRUE;
break;
#endif
+ case 'p': /* split */
+ FULLCHECK("split");
+ if (value != NULL && !state)
+ goto invalid_option;
+ if (!state) {
+ splitwidth = 0;
+ break;
+ } else if (value == NULL)
+ break;
+
+ result = parse_uint(&splitwidth, value,
+ 1023, "split");
+ if (splitwidth % 4 != 0) {
+ splitwidth = ((splitwidth + 3) / 4) * 4;
+ fprintf(stderr, ";; Warning, split must be "
+ "a multiple of 4; adjusting "
+ "to %d\n", splitwidth);
+ }
+ /*
+ * There is an adjustment done in the
+ * totext_<rrtype>() functions which causes
+ * splitwidth to shrink. This is okay when we're
+ * using the default width but incorrect in this
+ * case, so we correct for it
+ */
+ if (splitwidth)
+ splitwidth += 3;
+ if (result != ISC_R_SUCCESS)
+ fatal("Couldn't parse retries");
+ break;
case 't': /* stats */
FULLCHECK("stats");
lookup->stats = state;
@@ -1064,10 +1132,12 @@ plus_option(char *option, isc_boolean_t is_batchfile,
lookup->recurse = ISC_FALSE;
lookup->identify = ISC_TRUE;
lookup->comments = ISC_FALSE;
+ rrcomments = ISC_FALSE;
lookup->stats = ISC_FALSE;
lookup->section_additional = ISC_FALSE;
lookup->section_authority = ISC_TRUE;
lookup->section_question = ISC_FALSE;
+ lookup->dnssec = ISC_TRUE;
usesearch = ISC_FALSE;
}
break;
@@ -1471,6 +1541,8 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
if (!is_batchfile) {
debug("making new lookup");
default_lookup = make_empty_lookup();
+ default_lookup->adflag = ISC_TRUE;
+ default_lookup->edns = 0;
#ifndef NOPOSIX
/*
diff --git a/contrib/bind9/bin/dig/dig.docbook b/contrib/bind9/bin/dig/dig.docbook
index d64d038b500d..028f0fcd7324 100644
--- a/contrib/bind9/bin/dig/dig.docbook
+++ b/contrib/bind9/bin/dig/dig.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dig.docbook,v 1.47 2010/03/04 23:50:34 tbox Exp $ -->
+<!-- $Id: dig.docbook,v 1.51 2011/11/04 11:02:50 jreed Exp $ -->
<refentry id="man.dig">
<refentryinfo>
@@ -45,6 +45,8 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -116,9 +118,10 @@
<para>
Unless it is told to query a specific name server,
- <command>dig</command> will try each of the servers listed
- in
- <filename>/etc/resolv.conf</filename>.
+ <command>dig</command> will try each of the servers listed in
+ <filename>/etc/resolv.conf</filename>. If no usable server addreses
+ are found, <command>dig</command> will send the query to the local
+ host.
</para>
<para>
@@ -157,20 +160,25 @@
<term><constant>server</constant></term>
<listitem>
<para>
- is the name or IP address of the name server to query. This can
- be an IPv4
- address in dotted-decimal notation or an IPv6
+ is the name or IP address of the name server to query. This
+ can be an IPv4 address in dotted-decimal notation or an IPv6
address in colon-delimited notation. When the supplied
- <parameter>server</parameter> argument is a
- hostname,
- <command>dig</command> resolves that name before
- querying that name
- server. If no <parameter>server</parameter>
- argument is provided,
- <command>dig</command> consults <filename>/etc/resolv.conf</filename>
- and queries the name servers listed there. The reply from the
- name
- server that responds is displayed.
+ <parameter>server</parameter> argument is a hostname,
+ <command>dig</command> resolves that name before querying
+ that name server.
+ </para>
+ <para>
+ If no <parameter>server</parameter> argument is
+ provided, <command>dig</command> consults
+ <filename>/etc/resolv.conf</filename>; if an
+ address is found there, it queries the name server at
+ that address. If either of the <option>-4</option> or
+ <option>-6</option> options are in use, then
+ only addresses for the corresponding transport
+ will be tried. If no usable addresses are found,
+ <command>dig</command> will send the query to the
+ local host. The reply from the name server that
+ responds is displayed.
</para>
</listitem>
</varlistentry>
@@ -460,7 +468,8 @@
policy of the server. AD=1 indicates that all records
have been validated as secure and the answer is not
from a OPT-OUT range. AD=0 indicate that some part
- of the answer was insecure or not validated.
+ of the answer was insecure or not validated. This
+ bit is set by default.
</para>
</listitem>
</varlistentry>
@@ -497,19 +506,17 @@
<varlistentry>
<term><option>+[no]recurse</option></term>
- <listitem>
- <para>
- Toggle the setting of the RD (recursion desired) bit in the
- query.
- This bit is set by default, which means <command>dig</command>
- normally sends recursive queries. Recursion is automatically
- disabled
- when the <parameter>+nssearch</parameter> or
- <parameter>+trace</parameter> query options are
- used.
- </para>
- </listitem>
- </varlistentry>
+ <listitem>
+ <para>
+ Toggle the setting of the RD (recursion desired) bit
+ in the query. This bit is set by default, which means
+ <command>dig</command> normally sends recursive
+ queries. Recursion is automatically disabled when
+ the <parameter>+nssearch</parameter> or
+ <parameter>+trace</parameter> query options are used.
+ </para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term><option>+[no]nssearch</option></term>
@@ -529,20 +536,21 @@
<varlistentry>
<term><option>+[no]trace</option></term>
<listitem>
- <para>
- Toggle tracing of the delegation path from the root name servers
- for
- the name being looked up. Tracing is disabled by default. When
- tracing is enabled, <command>dig</command> makes
- iterative queries to
- resolve the name being looked up. It will follow referrals from
- the
- root servers, showing the answer from each server that was used
- to
- resolve the lookup.
- </para>
- </listitem>
- </varlistentry>
+ <para>
+ Toggle tracing of the delegation path from the root
+ name servers for the name being looked up. Tracing
+ is disabled by default. When tracing is enabled,
+ <command>dig</command> makes iterative queries to
+ resolve the name being looked up. It will follow
+ referrals from the root servers, showing the answer
+ from each server that was used to resolve the lookup.
+ </para>
+ <para>
+ <command>+dnssec</command> is also set when +trace is
+ set to better emulate the default queries from a nameserver.
+ </para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term><option>+[no]cmd</option></term>
@@ -587,8 +595,35 @@
<listitem>
<para>
Toggle the display of comment lines in the output. The default
- is to
- print comments.
+ is to print comments.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>+[no]rrcomments</option></term>
+ <listitem>
+ <para>
+ Toggle the display of per-record comments in the output (for
+ example, human-readable key information about DNSKEY records).
+ The default is not to print record comments unless multiline
+ mode is active.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>+split=W</option></term>
+ <listitem>
+ <para>
+ Split long hex- or base64-formatted fields in resource
+ records into chunks of <parameter>W</parameter> characters
+ (where <parameter>W</parameter> is rounded up to the nearest
+ multiple of 4).
+ <parameter>+nosplit</parameter> or
+ <parameter>+split=0</parameter> causes fields not to be
+ split at all. The default is 56 characters, or 44 characters
+ when multiline mode is active.
</para>
</listitem>
</varlistentry>
@@ -748,9 +783,10 @@
<listitem>
<para>
Specify the EDNS version to query with. Valid values
- are 0 to 255. Setting the EDNS version will cause a
- EDNS query to be sent. <option>+noedns</option> clears the
- remembered EDNS version.
+ are 0 to 255. Setting the EDNS version will cause
+ a EDNS query to be sent. <option>+noedns</option>
+ clears the remembered EDNS version. EDNS is set to
+ 0 by default.
</para>
</listitem>
</varlistentry>
diff --git a/contrib/bind9/bin/dig/dig.html b/contrib/bind9/bin/dig/dig.html
index ceef3fa8d988..768582e37bb1 100644
--- a/contrib/bind9/bin/dig/dig.html
+++ b/contrib/bind9/bin/dig/dig.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -34,7 +34,7 @@
<div class="cmdsynopsis"><p><code class="command">dig</code> [global-queryopt...] [query...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543524"></a><h2>DESCRIPTION</h2>
+<a name="id2543530"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dig</strong></span>
(domain information groper) is a flexible tool
for interrogating DNS name servers. It performs DNS lookups and
@@ -57,9 +57,10 @@
</p>
<p>
Unless it is told to query a specific name server,
- <span><strong class="command">dig</strong></span> will try each of the servers listed
- in
- <code class="filename">/etc/resolv.conf</code>.
+ <span><strong class="command">dig</strong></span> will try each of the servers listed in
+ <code class="filename">/etc/resolv.conf</code>. If no usable server addreses
+ are found, <span><strong class="command">dig</strong></span> will send the query to the local
+ host.
</p>
<p>
When no command line arguments or options are given,
@@ -80,7 +81,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543597"></a><h2>SIMPLE USAGE</h2>
+<a name="id2543609"></a><h2>SIMPLE USAGE</h2>
<p>
A typical invocation of <span><strong class="command">dig</strong></span> looks like:
</p>
@@ -91,22 +92,29 @@
</p>
<div class="variablelist"><dl>
<dt><span class="term"><code class="constant">server</code></span></dt>
-<dd><p>
- is the name or IP address of the name server to query. This can
- be an IPv4
- address in dotted-decimal notation or an IPv6
+<dd>
+<p>
+ is the name or IP address of the name server to query. This
+ can be an IPv4 address in dotted-decimal notation or an IPv6
address in colon-delimited notation. When the supplied
- <em class="parameter"><code>server</code></em> argument is a
- hostname,
- <span><strong class="command">dig</strong></span> resolves that name before
- querying that name
- server. If no <em class="parameter"><code>server</code></em>
- argument is provided,
- <span><strong class="command">dig</strong></span> consults <code class="filename">/etc/resolv.conf</code>
- and queries the name servers listed there. The reply from the
- name
- server that responds is displayed.
- </p></dd>
+ <em class="parameter"><code>server</code></em> argument is a hostname,
+ <span><strong class="command">dig</strong></span> resolves that name before querying
+ that name server.
+ </p>
+<p>
+ If no <em class="parameter"><code>server</code></em> argument is
+ provided, <span><strong class="command">dig</strong></span> consults
+ <code class="filename">/etc/resolv.conf</code>; if an
+ address is found there, it queries the name server at
+ that address. If either of the <code class="option">-4</code> or
+ <code class="option">-6</code> options are in use, then
+ only addresses for the corresponding transport
+ will be tried. If no usable addresses are found,
+ <span><strong class="command">dig</strong></span> will send the query to the
+ local host. The reply from the name server that
+ responds is displayed.
+ </p>
+</dd>
<dt><span class="term"><code class="constant">name</code></span></dt>
<dd><p>
is the name of the resource record that is to be looked up.
@@ -126,7 +134,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543688"></a><h2>OPTIONS</h2>
+<a name="id2543713"></a><h2>OPTIONS</h2>
<p>
The <code class="option">-b</code> option sets the source IP address of the query
to <em class="parameter"><code>address</code></em>. This must be a valid
@@ -230,7 +238,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544037"></a><h2>QUERY OPTIONS</h2>
+<a name="id2544061"></a><h2>QUERY OPTIONS</h2>
<p><span><strong class="command">dig</strong></span>
provides a number of query options which affect
the way in which lookups are made and the results displayed. Some of
@@ -315,7 +323,8 @@
policy of the server. AD=1 indicates that all records
have been validated as secure and the answer is not
from a OPT-OUT range. AD=0 indicate that some part
- of the answer was insecure or not validated.
+ of the answer was insecure or not validated. This
+ bit is set by default.
</p></dd>
<dt><span class="term"><code class="option">+[no]cdflag</code></span></dt>
<dd><p>
@@ -334,15 +343,13 @@
</p></dd>
<dt><span class="term"><code class="option">+[no]recurse</code></span></dt>
<dd><p>
- Toggle the setting of the RD (recursion desired) bit in the
- query.
- This bit is set by default, which means <span><strong class="command">dig</strong></span>
- normally sends recursive queries. Recursion is automatically
- disabled
- when the <em class="parameter"><code>+nssearch</code></em> or
- <em class="parameter"><code>+trace</code></em> query options are
- used.
- </p></dd>
+ Toggle the setting of the RD (recursion desired) bit
+ in the query. This bit is set by default, which means
+ <span><strong class="command">dig</strong></span> normally sends recursive
+ queries. Recursion is automatically disabled when
+ the <em class="parameter"><code>+nssearch</code></em> or
+ <em class="parameter"><code>+trace</code></em> query options are used.
+ </p></dd>
<dt><span class="term"><code class="option">+[no]nssearch</code></span></dt>
<dd><p>
When this option is set, <span><strong class="command">dig</strong></span>
@@ -354,18 +361,21 @@
zone.
</p></dd>
<dt><span class="term"><code class="option">+[no]trace</code></span></dt>
-<dd><p>
- Toggle tracing of the delegation path from the root name servers
- for
- the name being looked up. Tracing is disabled by default. When
- tracing is enabled, <span><strong class="command">dig</strong></span> makes
- iterative queries to
- resolve the name being looked up. It will follow referrals from
- the
- root servers, showing the answer from each server that was used
- to
- resolve the lookup.
- </p></dd>
+<dd>
+<p>
+ Toggle tracing of the delegation path from the root
+ name servers for the name being looked up. Tracing
+ is disabled by default. When tracing is enabled,
+ <span><strong class="command">dig</strong></span> makes iterative queries to
+ resolve the name being looked up. It will follow
+ referrals from the root servers, showing the answer
+ from each server that was used to resolve the lookup.
+ </p>
+<p>
+ <span><strong class="command">+dnssec</strong></span> is also set when +trace is
+ set to better emulate the default queries from a nameserver.
+ </p>
+</dd>
<dt><span class="term"><code class="option">+[no]cmd</code></span></dt>
<dd><p>
Toggles the printing of the initial comment in the output
@@ -392,8 +402,25 @@
<dt><span class="term"><code class="option">+[no]comments</code></span></dt>
<dd><p>
Toggle the display of comment lines in the output. The default
- is to
- print comments.
+ is to print comments.
+ </p></dd>
+<dt><span class="term"><code class="option">+[no]rrcomments</code></span></dt>
+<dd><p>
+ Toggle the display of per-record comments in the output (for
+ example, human-readable key information about DNSKEY records).
+ The default is not to print record comments unless multiline
+ mode is active.
+ </p></dd>
+<dt><span class="term"><code class="option">+split=W</code></span></dt>
+<dd><p>
+ Split long hex- or base64-formatted fields in resource
+ records into chunks of <em class="parameter"><code>W</code></em> characters
+ (where <em class="parameter"><code>W</code></em> is rounded up to the nearest
+ multiple of 4).
+ <em class="parameter"><code>+nosplit</code></em> or
+ <em class="parameter"><code>+split=0</code></em> causes fields not to be
+ split at all. The default is 56 characters, or 44 characters
+ when multiline mode is active.
</p></dd>
<dt><span class="term"><code class="option">+[no]stats</code></span></dt>
<dd><p>
@@ -488,9 +515,10 @@
<dt><span class="term"><code class="option">+edns=#</code></span></dt>
<dd><p>
Specify the EDNS version to query with. Valid values
- are 0 to 255. Setting the EDNS version will cause a
- EDNS query to be sent. <code class="option">+noedns</code> clears the
- remembered EDNS version.
+ are 0 to 255. Setting the EDNS version will cause
+ a EDNS query to be sent. <code class="option">+noedns</code>
+ clears the remembered EDNS version. EDNS is set to
+ 0 by default.
</p></dd>
<dt><span class="term"><code class="option">+[no]multiline</code></span></dt>
<dd><p>
@@ -561,7 +589,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545186"></a><h2>MULTIPLE QUERIES</h2>
+<a name="id2545324"></a><h2>MULTIPLE QUERIES</h2>
<p>
The BIND 9 implementation of <span><strong class="command">dig </strong></span>
supports
@@ -607,7 +635,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545248"></a><h2>IDN SUPPORT</h2>
+<a name="id2545386"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">dig</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -621,14 +649,14 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545338"></a><h2>FILES</h2>
+<a name="id2545409"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
<p><code class="filename">${HOME}/.digrc</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545355"></a><h2>SEE ALSO</h2>
+<a name="id2545426"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">host</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
@@ -636,7 +664,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545393"></a><h2>BUGS</h2>
+<a name="id2545531"></a><h2>BUGS</h2>
<p>
There are probably too many query options.
</p>
diff --git a/contrib/bind9/bin/dig/dighost.c b/contrib/bind9/bin/dig/dighost.c
index 9695de0dbc4c..3c4b335d060c 100644
--- a/contrib/bind9/bin/dig/dighost.c
+++ b/contrib/bind9/bin/dig/dighost.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dighost.c,v 1.336.22.9 2011/12/07 17:23:55 each Exp $ */
+/* $Id: dighost.c,v 1.345 2011/12/07 17:23:28 each Exp $ */
/*! \file
* \note
@@ -362,8 +362,6 @@ connect_timeout(isc_task_t *task, isc_event_t *event);
static void
launch_next_query(dig_query_t *query, isc_boolean_t include_question);
-static void
-send_tcp_connect(dig_query_t *query);
static void *
mem_alloc(void *arg, size_t size) {
@@ -791,9 +789,9 @@ make_empty_lookup(void) {
looknew->new_search = ISC_FALSE;
looknew->done_as_is = ISC_FALSE;
looknew->need_search = ISC_FALSE;
- dns_fixedname_init(&looknew->fdomain);
ISC_LINK_INIT(looknew, link);
ISC_LIST_INIT(looknew->q);
+ ISC_LIST_INIT(looknew->connecting);
ISC_LIST_INIT(looknew->my_server_list);
return (looknew);
}
@@ -815,11 +813,11 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) {
looknew = make_empty_lookup();
INSIST(looknew != NULL);
- strncpy(looknew->textname, lookold->textname, MXNAME);
+ strlcpy(looknew->textname, lookold->textname, MXNAME);
#if DIG_SIGCHASE_TD
- strncpy(looknew->textnamesigchase, lookold->textnamesigchase, MXNAME);
+ strlcpy(looknew->textnamesigchase, lookold->textnamesigchase, MXNAME);
#endif
- strncpy(looknew->cmdline, lookold->cmdline, MXNAME);
+ strlcpy(looknew->cmdline, lookold->cmdline, MXNAME);
looknew->textname[MXNAME-1] = 0;
looknew->rdtype = lookold->rdtype;
looknew->qrdtype = lookold->qrdtype;
@@ -867,8 +865,6 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) {
looknew->tsigctx = NULL;
looknew->need_search = lookold->need_search;
looknew->done_as_is = lookold->done_as_is;
- dns_name_copy(dns_fixedname_name(&lookold->fdomain),
- dns_fixedname_name(&looknew->fdomain), NULL);
if (servers)
clone_server_list(lookold->my_server_list,
@@ -998,7 +994,7 @@ parse_hmac(const char *hmac) {
len = strlen(hmac);
if (len >= (int) sizeof(buf))
fatal("unknown key type '%.*s'", len, hmac);
- strncpy(buf, hmac, sizeof(buf));
+ strlcpy(buf, hmac, sizeof(buf));
digestbits = 0;
@@ -1080,8 +1076,8 @@ read_confkey(void) {
secretstr = cfg_obj_asstring(secretobj);
algorithm = cfg_obj_asstring(algorithmobj);
- strncpy(keynametext, keyname, sizeof(keynametext));
- strncpy(keysecret, secretstr, sizeof(keysecret));
+ strlcpy(keynametext, keyname, sizeof(keynametext));
+ strlcpy(keysecret, secretstr, sizeof(keysecret));
parse_hmac(algorithm);
setup_text_key();
@@ -1164,7 +1160,7 @@ make_searchlist_entry(char *domain) {
if (search == NULL)
fatal("memory allocation failure in %s:%d",
__FILE__, __LINE__);
- strncpy(search->origin, domain, MXNAME);
+ strlcpy(search->origin, domain, MXNAME);
search->origin[MXNAME-1] = 0;
ISC_LINK_INIT(search, link);
return (search);
@@ -1473,7 +1469,10 @@ clear_query(dig_query_t *query) {
if (lookup->current_query == query)
lookup->current_query = NULL;
- ISC_LIST_UNLINK(lookup->q, query, link);
+ if (ISC_LINK_LINKED(query, link))
+ ISC_LIST_UNLINK(lookup->q, query, link);
+ if (ISC_LINK_LINKED(query, clink))
+ ISC_LIST_UNLINK(lookup->connecting, query, clink);
if (ISC_LINK_LINKED(&query->recvbuf, link))
ISC_LIST_DEQUEUE(query->recvlist, &query->recvbuf,
link);
@@ -1481,6 +1480,7 @@ clear_query(dig_query_t *query) {
ISC_LIST_DEQUEUE(query->lengthlist, &query->lengthbuf,
link);
INSIST(query->recvspace != NULL);
+
if (query->sock != NULL) {
isc_socket_detach(&query->sock);
sockcount--;
@@ -1508,13 +1508,22 @@ try_clear_lookup(dig_lookup_t *lookup) {
debug("try_clear_lookup(%p)", lookup);
- if (ISC_LIST_HEAD(lookup->q) != NULL) {
+ if (ISC_LIST_HEAD(lookup->q) != NULL ||
+ ISC_LIST_HEAD(lookup->connecting) != NULL)
+ {
if (debugging) {
q = ISC_LIST_HEAD(lookup->q);
while (q != NULL) {
debug("query to %s still pending", q->servname);
q = ISC_LIST_NEXT(q, link);
}
+
+ q = ISC_LIST_HEAD(lookup->connecting);
+ while (q != NULL) {
+ debug("query to %s still connecting",
+ q->servname);
+ q = ISC_LIST_NEXT(q, clink);
+ }
}
return (ISC_FALSE);
}
@@ -1642,7 +1651,7 @@ start_lookup(void) {
= current_lookup->rdclassset;
current_lookup->rdclass = dns_rdataclass_in;
- strncpy(current_lookup->textnamesigchase,
+ strlcpy(current_lookup->textnamesigchase,
current_lookup->textname, MXNAME);
current_lookup->trace_root_sigchase = ISC_TRUE;
@@ -1654,7 +1663,7 @@ start_lookup(void) {
check_result(result, "dns_name_totext");
isc_buffer_usedregion(b, &r);
r.base[r.length] = '\0';
- strncpy(current_lookup->textname, (char*)r.base,
+ strlcpy(current_lookup->textname, (char*)r.base,
MXNAME);
isc_buffer_free(&b);
@@ -1800,6 +1809,7 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
lookup->trace_root = ISC_FALSE;
if (lookup->ns_search_only)
lookup->recurse = ISC_FALSE;
+ dns_fixedname_init(&lookup->fdomain);
domain = dns_fixedname_name(&lookup->fdomain);
dns_name_copy(name, domain, NULL);
}
@@ -2290,7 +2300,6 @@ setup_lookup(dig_lookup_t *lookup) {
query->rr_count = 0;
query->msg_count = 0;
query->byte_count = 0;
- ISC_LINK_INIT(query, link);
ISC_LIST_INIT(query->recvlist);
ISC_LIST_INIT(query->lengthlist);
query->sock = NULL;
@@ -2303,6 +2312,7 @@ setup_lookup(dig_lookup_t *lookup) {
isc_buffer_init(&query->slbuf, query->slspace, 2);
query->sendbuf = lookup->renderbuf;
+ ISC_LINK_INIT(query, clink);
ISC_LINK_INIT(query, link);
ISC_LIST_ENQUEUE(lookup->q, query, link);
}
@@ -2424,6 +2434,7 @@ static void
force_timeout(dig_lookup_t *l, dig_query_t *query) {
isc_event_t *event;
+ debug("force_timeout ()");
event = isc_event_allocate(mctx, query, ISC_TIMEREVENT_IDLE,
connect_timeout, l,
sizeof(isc_event_t));
@@ -2491,6 +2502,7 @@ send_tcp_connect(dig_query_t *query) {
send_tcp_connect(next);
return;
}
+
INSIST(query->sock == NULL);
result = isc_socket_create(socketmgr,
isc_sockaddr_pf(&query->sockaddr),
@@ -2521,6 +2533,9 @@ send_tcp_connect(dig_query_t *query) {
if (l->ns_search_only && !l->trace_root) {
debug("sending next, since searching");
next = ISC_LIST_NEXT(query, link);
+ if (ISC_LINK_LINKED(query, link))
+ ISC_LIST_DEQUEUE(l->q, query, link);
+ ISC_LIST_ENQUEUE(l->connecting, query, clink);
if (next != NULL)
send_tcp_connect(next);
}
@@ -2601,7 +2616,7 @@ send_udp(dig_query_t *query) {
static void
connect_timeout(isc_task_t *task, isc_event_t *event) {
dig_lookup_t *l = NULL;
- dig_query_t *query = NULL, *cq;
+ dig_query_t *query = NULL, *next, *cq;
UNUSED(task);
REQUIRE(event->ev_type == ISC_TIMEREVENT_IDLE);
@@ -2625,7 +2640,9 @@ connect_timeout(isc_task_t *task, isc_event_t *event) {
if (query->sock != NULL)
isc_socket_cancel(query->sock, NULL,
ISC_SOCKCANCEL_ALL);
- send_tcp_connect(ISC_LIST_NEXT(cq, link));
+ next = ISC_LIST_NEXT(cq, link);
+ if (next != NULL)
+ send_tcp_connect(next);
}
UNLOCK_LOOKUP;
return;
@@ -2868,9 +2885,8 @@ connect_done(isc_task_t *task, isc_event_t *event) {
if (next != NULL) {
bringup_timer(next, TCP_TIMEOUT);
send_tcp_connect(next);
- } else {
+ } else
check_next_lookup(l);
- }
UNLOCK_LOOKUP;
return;
}
@@ -3427,6 +3443,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
if (n == 0)
docancel = ISC_TRUE;
l->trace_root = ISC_FALSE;
+ usesearch = ISC_FALSE;
} else
#ifdef DIG_SIGCHASE
if (!do_sigchase)
@@ -3603,15 +3620,19 @@ getaddresses(dig_lookup_t *lookup, const char *host, isc_result_t *resultp) {
*/
void
do_lookup(dig_lookup_t *lookup) {
+ dig_query_t *query;
REQUIRE(lookup != NULL);
debug("do_lookup()");
lookup->pending = ISC_TRUE;
- if (lookup->tcp_mode)
- send_tcp_connect(ISC_LIST_HEAD(lookup->q));
- else
- send_udp(ISC_LIST_HEAD(lookup->q));
+ query = ISC_LIST_HEAD(lookup->q);
+ if (query != NULL) {
+ if (lookup->tcp_mode)
+ send_tcp_connect(query);
+ else
+ send_udp(query);
+ }
}
/*%
@@ -4083,7 +4104,7 @@ sigchase_scanname(dns_rdatatype_t type, dns_rdatatype_t covers,
check_result(result, "dns_name_totext");
isc_buffer_usedregion(b, &r);
r.base[r.length] = '\0';
- strcpy(lookup->textname, (char*)r.base);
+ strlcpy(lookup->textname, (char*)r.base, sizeof(lookup->textname));
isc_buffer_free(&b);
if (type == dns_rdatatype_rrsig)
@@ -4208,7 +4229,7 @@ opentmpkey(isc_mem_t *mctx, const char *file, char **tempp, FILE **fp) {
return (ISC_R_NOMEMORY);
memset(tempnamekey, 0, tempnamekeylen);
- strncpy(tempnamekey, tempname, tempnamelen);
+ strlcpy(tempnamekey, tempname, tempnamelen);
strcat(tempnamekey ,".key");
@@ -4342,7 +4363,7 @@ prepare_lookup(dns_name_t *name)
lookup->new_search = ISC_TRUE;
lookup->trace_root_sigchase = ISC_FALSE;
- strncpy(lookup->textname, lookup->textnamesigchase, MXNAME);
+ strlcpy(lookup->textname, lookup->textnamesigchase, MXNAME);
lookup->rdtype = lookup->rdtype_sigchase;
lookup->rdtypeset = ISC_TRUE;
@@ -4401,7 +4422,7 @@ prepare_lookup(dns_name_t *name)
dns_rdata_totext(&aaaa, &ns.name, b);
isc_buffer_usedregion(b, &r);
r.base[r.length] = '\0';
- strncpy(namestr, (char*)r.base,
+ strlcpy(namestr, (char*)r.base,
DNS_NAME_FORMATSIZE);
isc_buffer_free(&b);
dns_rdata_reset(&aaaa);
@@ -4430,7 +4451,7 @@ prepare_lookup(dns_name_t *name)
dns_rdata_totext(&a, &ns.name, b);
isc_buffer_usedregion(b, &r);
r.base[r.length] = '\0';
- strncpy(namestr, (char*)r.base,
+ strlcpy(namestr, (char*)r.base,
DNS_NAME_FORMATSIZE);
isc_buffer_free(&b);
dns_rdata_reset(&a);
@@ -4609,7 +4630,6 @@ contains_trusted_key(dns_name_t *name, dns_rdataset_t *rdataset,
{
isc_result_t result;
dns_rdata_t rdata = DNS_RDATA_INIT;
- dst_key_t *trustedKey = NULL;
dst_key_t *dnsseckey = NULL;
int i;
@@ -4653,10 +4673,6 @@ contains_trusted_key(dns_name_t *name, dns_rdataset_t *rdataset,
dst_key_free(&dnsseckey);
} while (dns_rdataset_next(rdataset) == ISC_R_SUCCESS);
- if (trustedKey != NULL)
- dst_key_free(&trustedKey);
- trustedKey = NULL;
-
return (ISC_R_NOTFOUND);
}
diff --git a/contrib/bind9/bin/dig/host.c b/contrib/bind9/bin/dig/host.c
index 82eea056c0d1..49fe991e1ca0 100644
--- a/contrib/bind9/bin/dig/host.c
+++ b/contrib/bind9/bin/dig/host.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: host.c,v 1.124.40.3 2011/03/11 06:46:59 marka Exp $ */
+/* $Id: host.c,v 1.127 2011/03/11 06:11:20 marka Exp $ */
/*! \file */
@@ -446,10 +446,18 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
if (msg->rcode != 0) {
char namestr[DNS_NAME_FORMATSIZE];
dns_name_format(query->lookup->name, namestr, sizeof(namestr));
- printf("Host %s not found: %d(%s)\n",
- (msg->rcode != dns_rcode_nxdomain) ? namestr :
- query->lookup->textname, msg->rcode,
- rcode_totext(msg->rcode));
+
+ if (query->lookup->identify_previous_line)
+ printf("Nameserver %s:\n\t%s not found: %d(%s)\n",
+ query->servname,
+ (msg->rcode != dns_rcode_nxdomain) ? namestr :
+ query->lookup->textname, msg->rcode,
+ rcode_totext(msg->rcode));
+ else
+ printf("Host %s not found: %d(%s)\n",
+ (msg->rcode != dns_rcode_nxdomain) ? namestr :
+ query->lookup->textname, msg->rcode,
+ rcode_totext(msg->rcode));
return (ISC_R_SUCCESS);
}
diff --git a/contrib/bind9/bin/dig/include/dig/dig.h b/contrib/bind9/bin/dig/include/dig/dig.h
index 6c186dec5e4b..f04440cfb527 100644
--- a/contrib/bind9/bin/dig/include/dig/dig.h
+++ b/contrib/bind9/bin/dig/include/dig/dig.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dig.h,v 1.111.306.3 2011/12/07 17:23:55 each Exp $ */
+/* $Id: dig.h,v 1.114 2011/12/07 17:23:28 each Exp $ */
#ifndef DIG_H
#define DIG_H
@@ -168,6 +168,7 @@ isc_boolean_t sigchase;
dns_name_t *oname;
ISC_LINK(dig_lookup_t) link;
ISC_LIST(dig_query_t) q;
+ ISC_LIST(dig_query_t) connecting;
dig_query_t *current_query;
dig_serverlist_t my_server_list;
dig_searchlist_t *origin;
@@ -214,6 +215,7 @@ struct dig_query {
slspace[4];
isc_socket_t *sock;
ISC_LINK(dig_query_t) link;
+ ISC_LINK(dig_query_t) clink;
isc_sockaddr_t sockaddr;
isc_time_t time_sent;
isc_uint64_t byte_count;
diff --git a/contrib/bind9/bin/dig/nslookup.c b/contrib/bind9/bin/dig/nslookup.c
index 2ef8f84ea2a7..3f5b82fd292d 100644
--- a/contrib/bind9/bin/dig/nslookup.c
+++ b/contrib/bind9/bin/dig/nslookup.c
@@ -15,11 +15,12 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nslookup.c,v 1.127.38.2 2011/02/28 01:19:58 tbox Exp $ */
+/* $Id: nslookup.c,v 1.130 2011/12/16 23:01:16 each Exp $ */
#include <config.h>
#include <stdlib.h>
+#include <unistd.h>
#include <isc/app.h>
#include <isc/buffer.h>
@@ -45,6 +46,11 @@
#include <dig/dig.h>
+#if defined(HAVE_READLINE)
+#include <readline/readline.h>
+#include <readline/history.h>
+#endif
+
static isc_boolean_t short_form = ISC_TRUE,
tcpmode = ISC_FALSE,
identify = ISC_FALSE, stats = ISC_TRUE,
@@ -53,6 +59,8 @@ static isc_boolean_t short_form = ISC_TRUE,
section_additional = ISC_TRUE, recurse = ISC_TRUE,
aaonly = ISC_FALSE, nofail = ISC_TRUE;
+static isc_boolean_t interactive;
+
static isc_boolean_t in_use = ISC_FALSE;
static char defclass[MXRD] = "IN";
static char deftype[MXRD] = "A";
@@ -715,28 +723,12 @@ addlookup(char *opt) {
}
static void
-get_next_command(void) {
- char *buf;
+do_next_command(char *input) {
char *ptr, *arg;
- char *input;
- fflush(stdout);
- buf = isc_mem_allocate(mctx, COMMSIZE);
- if (buf == NULL)
- fatal("memory allocation failure");
- fputs("> ", stderr);
- fflush(stderr);
- isc_app_block();
- ptr = fgets(buf, COMMSIZE, stdin);
- isc_app_unblock();
- if (ptr == NULL) {
- in_use = ISC_FALSE;
- goto cleanup;
- }
- input = buf;
ptr = next_token(&input, " \t\r\n");
if (ptr == NULL)
- goto cleanup;
+ return;
arg = next_token(&input, " \t\r\n");
if ((strcasecmp(ptr, "set") == 0) &&
(arg != NULL))
@@ -750,20 +742,48 @@ get_next_command(void) {
show_settings(ISC_TRUE, ISC_TRUE);
} else if (strcasecmp(ptr, "exit") == 0) {
in_use = ISC_FALSE;
- goto cleanup;
} else if (strcasecmp(ptr, "help") == 0 ||
strcasecmp(ptr, "?") == 0) {
printf("The '%s' command is not yet implemented.\n", ptr);
- goto cleanup;
} else if (strcasecmp(ptr, "finger") == 0 ||
strcasecmp(ptr, "root") == 0 ||
strcasecmp(ptr, "ls") == 0 ||
strcasecmp(ptr, "view") == 0) {
printf("The '%s' command is not implemented.\n", ptr);
- goto cleanup;
} else
addlookup(ptr);
- cleanup:
+}
+
+static void
+get_next_command(void) {
+ char *buf;
+ char *ptr;
+
+ fflush(stdout);
+ buf = isc_mem_allocate(mctx, COMMSIZE);
+ if (buf == NULL)
+ fatal("memory allocation failure");
+ isc_app_block();
+ if (interactive) {
+#ifdef HAVE_READLINE
+ ptr = readline("> ");
+ add_history(ptr);
+#else
+ fputs("> ", stderr);
+ fflush(stderr);
+ ptr = fgets(buf, COMMSIZE, stdin);
+#endif
+ } else
+ ptr = fgets(buf, COMMSIZE, stdin);
+ isc_app_unblock();
+ if (ptr == NULL) {
+ in_use = ISC_FALSE;
+ } else
+ do_next_command(ptr);
+#ifdef HAVE_READLINE
+ if (interactive)
+ free(ptr);
+#endif
isc_mem_free(mctx, buf);
}
@@ -859,6 +879,8 @@ int
main(int argc, char **argv) {
isc_result_t result;
+ interactive = ISC_TF(isatty(0));
+
ISC_LIST_INIT(lookup_list);
ISC_LIST_INIT(server_list);
ISC_LIST_INIT(search_list);
diff --git a/contrib/bind9/bin/dnssec/Makefile.in b/contrib/bind9/bin/dnssec/Makefile.in
index 0bca14155724..4f8bceb968dc 100644
--- a/contrib/bind9/bin/dnssec/Makefile.in
+++ b/contrib/bind9/bin/dnssec/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.42 2009/12/05 23:31:40 each Exp $
+# $Id: Makefile.in,v 1.42.332.1 2011/03/16 06:37:51 each Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -44,19 +44,23 @@ NOSYMLIBS = ${DNSLIBS} ${ISCNOSYMLIBS} @LIBS@
# Alphabetically
TARGETS = dnssec-keygen@EXEEXT@ dnssec-signzone@EXEEXT@ \
dnssec-keyfromlabel@EXEEXT@ dnssec-dsfromkey@EXEEXT@ \
- dnssec-revoke@EXEEXT@ dnssec-settime@EXEEXT@
+ dnssec-revoke@EXEEXT@ dnssec-settime@EXEEXT@ \
+ dnssec-verify@EXEEXT@
OBJS = dnssectool.@O@
SRCS = dnssec-dsfromkey.c dnssec-keyfromlabel.c dnssec-keygen.c \
- dnssec-revoke.c dnssec-settime.c dnssec-signzone.c dnssectool.c
+ dnssec-revoke.c dnssec-settime.c dnssec-signzone.c \
+ dnssec-verify.c dnssectool.c
MANPAGES = dnssec-dsfromkey.8 dnssec-keyfromlabel.8 dnssec-keygen.8 \
- dnssec-revoke.8 dnssec-settime.8 dnssec-signzone.8
+ dnssec-revoke.8 dnssec-settime.8 dnssec-signzone.8 \
+ dnssec-verify.8
HTMLPAGES = dnssec-dsfromkey.html dnssec-keyfromlabel.html \
dnssec-keygen.html dnssec-revoke.html \
- dnssec-settime.html dnssec-signzone.html
+ dnssec-settime.html dnssec-signzone.html \
+ dnssec-verify.html
MANOBJS = ${MANPAGES} ${HTMLPAGES}
@@ -82,6 +86,14 @@ dnssec-signzone@EXEEXT@: dnssec-signzone.@O@ ${OBJS} ${DEPLIBS}
export BASEOBJS="dnssec-signzone.@O@ ${OBJS}"; \
${FINALBUILDCMD}
+dnssec-verify.@O@: dnssec-verify.c
+ ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -DVERSION=\"${VERSION}\" \
+ -c ${srcdir}/dnssec-verify.c
+
+dnssec-verify@EXEEXT@: dnssec-verify.@O@ ${OBJS} ${DEPLIBS}
+ export BASEOBJS="dnssec-verify.@O@ ${OBJS}"; \
+ ${FINALBUILDCMD}
+
dnssec-revoke@EXEEXT@: dnssec-revoke.@O@ ${OBJS} ${DEPLIBS}
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
dnssec-revoke.@O@ ${OBJS} ${LIBS}
diff --git a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.8 b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.8
index ae9bb54000c6..89d4228e0214 100644
--- a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.8
+++ b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2008-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2008-2012 Internet Systems Consortium, Inc. ("ISC")
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -32,9 +32,9 @@
dnssec\-dsfromkey \- DNSSEC DS RR generation tool
.SH "SYNOPSIS"
.HP 17
-\fBdnssec\-dsfromkey\fR [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fR\fB\fIalg\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] {keyfile}
+\fBdnssec\-dsfromkey\fR [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fR\fB\fIalg\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-T\ \fR\fB\fITTL\fR\fR] {keyfile}
.HP 17
-\fBdnssec\-dsfromkey\fR {\-s} [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fR\fB\fIalg\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-s\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-f\ \fR\fB\fIfile\fR\fR] [\fB\-A\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] {dnsname}
+\fBdnssec\-dsfromkey\fR {\-s} [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fR\fB\fIalg\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-s\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-T\ \fR\fB\fITTL\fR\fR] [\fB\-f\ \fR\fB\fIfile\fR\fR] [\fB\-A\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] {dnsname}
.SH "DESCRIPTION"
.PP
\fBdnssec\-dsfromkey\fR
@@ -58,6 +58,11 @@ Select the digest algorithm. The value of
must be one of SHA\-1 (SHA1), SHA\-256 (SHA256), GOST or SHA\-384 (SHA384). These values are case insensitive.
.RE
.PP
+\-T \fITTL\fR
+.RS 4
+Specifies the TTL of the DS records.
+.RE
+.PP
\-K \fIdirectory\fR
.RS 4
Look for key files (or, in keyset mode,
@@ -71,6 +76,15 @@ files) in
Zone file mode: in place of the keyfile name, the argument is the DNS domain name of a zone master file, which can be read from
\fBfile\fR. If the zone name is the same as
\fBfile\fR, then it may be omitted.
+.sp
+If
+\fBfile\fR
+is set to
+"\-", then the zone data is read from the standard input. This makes it possible to use the output of the
+\fBdig\fR
+command as input, as in:
+.sp
+\fBdig dnskey example.com | dnssec\-dsfromkey \-f \- example.com\fR
.RE
.PP
\-A
@@ -139,5 +153,5 @@ RFC 4509.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2008\-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2008\-2012 Internet Systems Consortium, Inc. ("ISC")
.br
diff --git a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.c b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.c
index 93d789b06264..bfedae830b5c 100644
--- a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.c
+++ b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-dsfromkey.c,v 1.19.14.2 2011/09/05 23:45:53 tbox Exp $ */
+/* $Id: dnssec-dsfromkey.c,v 1.24 2011/10/25 01:54:18 marka Exp $ */
/*! \file */
@@ -31,12 +31,13 @@
#include <isc/string.h>
#include <isc/util.h>
+#include <dns/callbacks.h>
#include <dns/db.h>
#include <dns/dbiterator.h>
#include <dns/ds.h>
#include <dns/fixedname.h>
-#include <dns/log.h>
#include <dns/keyvalues.h>
+#include <dns/log.h>
#include <dns/master.h>
#include <dns/name.h>
#include <dns/rdata.h>
@@ -61,6 +62,7 @@ static dns_rdataclass_t rdclass;
static dns_fixedname_t fixed;
static dns_name_t *name = NULL;
static isc_mem_t *mctx = NULL;
+static isc_uint32_t ttl;
static isc_result_t
initname(char *setname) {
@@ -76,8 +78,28 @@ initname(char *setname) {
return (result);
}
+static void
+db_load_from_stream(dns_db_t *db, FILE *fp) {
+ isc_result_t result;
+ dns_rdatacallbacks_t callbacks;
+
+ dns_rdatacallbacks_init(&callbacks);
+ result = dns_db_beginload(db, &callbacks.add, &callbacks.add_private);
+ if (result != ISC_R_SUCCESS)
+ fatal("dns_db_beginload failed: %s", isc_result_totext(result));
+
+ result = dns_master_loadstream(fp, name, name, rdclass, 0,
+ &callbacks, mctx);
+ if (result != ISC_R_SUCCESS)
+ fatal("can't load from input: %s", isc_result_totext(result));
+
+ result = dns_db_endload(db, &callbacks.add_private);
+ if (result != ISC_R_SUCCESS)
+ fatal("dns_db_endload failed: %s", isc_result_totext(result));
+}
+
static isc_result_t
-loadsetfromfile(char *filename, dns_rdataset_t *rdataset) {
+loadset(const char *filename, dns_rdataset_t *rdataset) {
isc_result_t result;
dns_db_t *db = NULL;
dns_dbnode_t *node = NULL;
@@ -90,9 +112,15 @@ loadsetfromfile(char *filename, dns_rdataset_t *rdataset) {
if (result != ISC_R_SUCCESS)
fatal("can't create database");
- result = dns_db_load(db, filename);
- if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE)
- fatal("can't load %s: %s", filename, isc_result_totext(result));
+ if (strcmp(filename, "-") == 0) {
+ db_load_from_stream(db, stdin);
+ filename = "input";
+ } else {
+ result = dns_db_load(db, filename);
+ if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE)
+ fatal("can't load %s: %s", filename,
+ isc_result_totext(result));
+ }
result = dns_db_findnode(db, name, ISC_FALSE, &node);
if (result != ISC_R_SUCCESS)
@@ -141,7 +169,7 @@ loadkeyset(char *dirname, dns_rdataset_t *rdataset) {
return (ISC_R_NOSPACE);
isc_buffer_putuint8(&buf, 0);
- return (loadsetfromfile(filename, rdataset));
+ return (loadset(filename, rdataset));
}
static void
@@ -256,7 +284,9 @@ emit(unsigned int dtype, isc_boolean_t showall, char *lookaside,
}
}
- result = dns_rdata_totext(&ds, (dns_name_t *) NULL, &textb);
+ result = dns_rdata_tofmttext(&ds, (dns_name_t *) NULL, 0, 0, 0, "",
+ &textb);
+
if (result != ISC_R_SUCCESS)
fatal("can't print rdata");
@@ -267,6 +297,9 @@ emit(unsigned int dtype, isc_boolean_t showall, char *lookaside,
isc_buffer_usedregion(&nameb, &r);
printf("%.*s ", (int)r.length, r.base);
+ if (ttl != 0U)
+ printf("%u ", ttl);
+
isc_buffer_usedregion(&classb, &r);
printf("%.*s", (int)r.length, r.base);
@@ -302,6 +335,7 @@ usage(void) {
fprintf(stderr, " -l: add lookaside zone and print DLV records\n");
fprintf(stderr, " -s: read keyset from keyset-<dnsname> file\n");
fprintf(stderr, " -c class: rdata class for DS set (default: IN)\n");
+ fprintf(stderr, " -T TTL\n");
fprintf(stderr, " -f file: read keyset from zone file\n");
fprintf(stderr, " -A: when used with -f, "
"include all keys in DS set, not just KSKs\n");
@@ -341,7 +375,7 @@ main(int argc, char **argv) {
isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv,
- "12Aa:c:d:Ff:K:l:sv:h")) != -1) {
+ "12Aa:c:d:Ff:K:l:sT:v:h")) != -1) {
switch (ch) {
case '1':
dtype = DNS_DSDIGEST_SHA1;
@@ -381,6 +415,9 @@ main(int argc, char **argv) {
case 's':
usekeyset = ISC_TRUE;
break;
+ case 'T':
+ ttl = atol(isc_commandline_argument);
+ break;
case 'v':
verbose = strtol(isc_commandline_argument, &endp, 0);
if (*endp != '\0')
@@ -466,7 +503,7 @@ main(int argc, char **argv) {
if (usekeyset)
result = loadkeyset(dir, &rdataset);
else
- result = loadsetfromfile(filename, &rdataset);
+ result = loadset(filename, &rdataset);
if (result != ISC_R_SUCCESS)
fatal("could not load DNSKEY set: %s\n",
diff --git a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook
index d7050335107a..77c0994dd3ba 100644
--- a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook
+++ b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2008-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2008-2012 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dnssec-dsfromkey.docbook,v 1.12 2010/12/23 23:47:08 tbox Exp $ -->
+<!-- $Id: dnssec-dsfromkey.docbook,v 1.17 2011/10/25 01:54:18 marka Exp $ -->
<refentry id="man.dnssec-dsfromkey">
<refentryinfo>
<date>August 26, 2009</date>
@@ -39,6 +39,7 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
<year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
@@ -52,6 +53,7 @@
<arg><option>-2</option></arg>
<arg><option>-a <replaceable class="parameter">alg</replaceable></option></arg>
<arg><option>-l <replaceable class="parameter">domain</replaceable></option></arg>
+ <arg><option>-T <replaceable class="parameter">TTL</replaceable></option></arg>
<arg choice="req">keyfile</arg>
</cmdsynopsis>
<cmdsynopsis>
@@ -64,6 +66,7 @@
<arg><option>-l <replaceable class="parameter">domain</replaceable></option></arg>
<arg><option>-s</option></arg>
<arg><option>-c <replaceable class="parameter">class</replaceable></option></arg>
+ <arg><option>-T <replaceable class="parameter">TTL</replaceable></option></arg>
<arg><option>-f <replaceable class="parameter">file</replaceable></option></arg>
<arg><option>-A</option></arg>
<arg><option>-v <replaceable class="parameter">level</replaceable></option></arg>
@@ -115,6 +118,15 @@
</varlistentry>
<varlistentry>
+ <term>-T <replaceable class="parameter">TTL</replaceable></term>
+ <listitem>
+ <para>
+ Specifies the TTL of the DS records.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-K <replaceable class="parameter">directory</replaceable></term>
<listitem>
<para>
@@ -134,6 +146,15 @@
from <option>file</option>. If the zone name is the same as
<option>file</option>, then it may be omitted.
</para>
+ <para>
+ If <option>file</option> is set to <literal>"-"</literal>, then
+ the zone data is read from the standard input. This makes it
+ possible to use the output of the <command>dig</command>
+ command as input, as in:
+ </para>
+ <para>
+ <userinput>dig dnskey example.com | dnssec-dsfromkey -f - example.com</userinput>
+ </para>
</listitem>
</varlistentry>
diff --git a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.html b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.html
index 24bc0c133896..50d4d7802bd4 100644
--- a/contrib/bind9/bin/dnssec/dnssec-dsfromkey.html
+++ b/contrib/bind9/bin/dnssec/dnssec-dsfromkey.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2008-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2008-2012 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -28,18 +28,18 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] {keyfile}</p></div>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> {-s} [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-s</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-A</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {dnsname}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-T <em class="replaceable"><code>TTL</code></em></code>] {keyfile}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> {-s} [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-s</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-T <em class="replaceable"><code>TTL</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-A</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {dnsname}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543468"></a><h2>DESCRIPTION</h2>
+<a name="id2543489"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-dsfromkey</strong></span>
outputs the Delegation Signer (DS) resource record (RR), as defined in
RFC 3658 and RFC 4509, for the given key(s).
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543480"></a><h2>OPTIONS</h2>
+<a name="id2543500"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-1</span></dt>
<dd><p>
@@ -57,6 +57,10 @@
SHA-256 (SHA256), GOST or SHA-384 (SHA384).
These values are case insensitive.
</p></dd>
+<dt><span class="term">-T <em class="replaceable"><code>TTL</code></em></span></dt>
+<dd><p>
+ Specifies the TTL of the DS records.
+ </p></dd>
<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
<dd><p>
Look for key files (or, in keyset mode,
@@ -64,12 +68,23 @@
<code class="option">directory</code>.
</p></dd>
<dt><span class="term">-f <em class="replaceable"><code>file</code></em></span></dt>
-<dd><p>
+<dd>
+<p>
Zone file mode: in place of the keyfile name, the argument is
the DNS domain name of a zone master file, which can be read
from <code class="option">file</code>. If the zone name is the same as
<code class="option">file</code>, then it may be omitted.
- </p></dd>
+ </p>
+<p>
+ If <code class="option">file</code> is set to <code class="literal">"-"</code>, then
+ the zone data is read from the standard input. This makes it
+ possible to use the output of the <span><strong class="command">dig</strong></span>
+ command as input, as in:
+ </p>
+<p>
+ <strong class="userinput"><code>dig dnskey example.com | dnssec-dsfromkey -f - example.com</code></strong>
+ </p>
+</dd>
<dt><span class="term">-A</span></dt>
<dd><p>
Include ZSK's when generating DS records. Without this option,
@@ -101,7 +116,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543667"></a><h2>EXAMPLE</h2>
+<a name="id2543726"></a><h2>EXAMPLE</h2>
<p>
To build the SHA-256 DS RR from the
<strong class="userinput"><code>Kexample.com.+003+26160</code></strong>
@@ -116,7 +131,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543697"></a><h2>FILES</h2>
+<a name="id2543756"></a><h2>FILES</h2>
<p>
The keyfile can be designed by the key identification
<code class="filename">Knnnn.+aaa+iiiii</code> or the full file name
@@ -130,13 +145,13 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543732"></a><h2>CAVEAT</h2>
+<a name="id2543792"></a><h2>CAVEAT</h2>
<p>
A keyfile error can give a "file not found" even if the file exists.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543741"></a><h2>SEE ALSO</h2>
+<a name="id2543801"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -146,7 +161,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543781"></a><h2>AUTHOR</h2>
+<a name="id2543841"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.8 b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.8
index 9867ff7e80c2..0e1ea1624881 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.8
+++ b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.8
@@ -32,7 +32,7 @@
dnssec\-keyfromlabel \- DNSSEC key generation tool
.SH "SYNOPSIS"
.HP 20
-\fBdnssec\-keyfromlabel\fR {\-l\ \fIlabel\fR} [\fB\-3\fR] [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-f\ \fR\fB\fIflag\fR\fR] [\fB\-G\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-k\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-n\ \fR\fB\fInametype\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-p\ \fR\fB\fIprotocol\fR\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-t\ \fR\fB\fItype\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-y\fR] {name}
+\fBdnssec\-keyfromlabel\fR {\-l\ \fIlabel\fR} [\fB\-3\fR] [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-f\ \fR\fB\fIflag\fR\fR] [\fB\-G\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-k\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-n\ \fR\fB\fInametype\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-p\ \fR\fB\fIprotocol\fR\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-t\ \fR\fB\fItype\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-y\fR] {name}
.SH "DESCRIPTION"
.PP
\fBdnssec\-keyfromlabel\fR
@@ -122,6 +122,15 @@ Sets the directory in which the key files are to be written.
Generate KEY records rather than DNSKEY records.
.RE
.PP
+\-L \fIttl\fR
+.RS 4
+Sets the default TTL to use for this key when it is converted into a DNSKEY RR. If the key is imported into a zone, this is the TTL that will be used for it, unless there was already a DNSKEY RRset in place, in which case the existing TTL would take precedence. Setting the default TTL to
+0
+or
+none
+removes it.
+.RE
+.PP
\-p \fIprotocol\fR
.RS 4
Sets the protocol value for the key. The protocol is a number between 0 and 255. The default is 3 (DNSSEC). Other possible values for this argument are listed in RFC 2535 and its successors.
diff --git a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c
index e91e02dda5ae..3ad00d7a04f3 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c
+++ b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-keyfromlabel.c,v 1.32.14.4 2011/11/30 00:51:38 marka Exp $ */
+/* $Id: dnssec-keyfromlabel.c,v 1.38 2011/11/30 00:48:51 marka Exp $ */
/*! \file */
@@ -85,6 +85,7 @@ usage(void) {
fprintf(stderr, " -K directory: directory in which to place "
"key files\n");
fprintf(stderr, " -k: generate a TYPE=KEY key\n");
+ fprintf(stderr, " -L ttl: default key TTL\n");
fprintf(stderr, " -n nametype: ZONE | HOST | ENTITY | USER | OTHER\n");
fprintf(stderr, " (DNSKEY generation defaults to ZONE\n");
fprintf(stderr, " -p protocol: default: 3 [dnssec]\n");
@@ -139,12 +140,13 @@ main(int argc, char **argv) {
dns_rdataclass_t rdclass;
int options = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC;
char *label = NULL;
+ dns_ttl_t ttl = 0;
isc_stdtime_t publish = 0, activate = 0, revoke = 0;
isc_stdtime_t inactive = 0, delete = 0;
isc_stdtime_t now;
isc_boolean_t setpub = ISC_FALSE, setact = ISC_FALSE;
isc_boolean_t setrev = ISC_FALSE, setinact = ISC_FALSE;
- isc_boolean_t setdel = ISC_FALSE;
+ isc_boolean_t setdel = ISC_FALSE, setttl = ISC_FALSE;
isc_boolean_t unsetpub = ISC_FALSE, unsetact = ISC_FALSE;
isc_boolean_t unsetrev = ISC_FALSE, unsetinact = ISC_FALSE;
isc_boolean_t unsetdel = ISC_FALSE;
@@ -166,7 +168,7 @@ main(int argc, char **argv) {
isc_stdtime_get(&now);
while ((ch = isc_commandline_parse(argc, argv,
- "3a:Cc:E:f:K:kl:n:p:t:v:yFhGP:A:R:I:D:")) != -1)
+ "3a:Cc:E:f:K:kl:L:n:p:t:v:yFhGP:A:R:I:D:")) != -1)
{
switch (ch) {
case '3':
@@ -204,6 +206,13 @@ main(int argc, char **argv) {
case 'k':
options |= DST_TYPE_KEY;
break;
+ case 'L':
+ if (strcmp(isc_commandline_argument, "none") == 0)
+ ttl = 0;
+ else
+ ttl = strtottl(isc_commandline_argument);
+ setttl = ISC_TRUE;
+ break;
case 'l':
label = isc_mem_strdup(mctx, isc_commandline_argument);
break;
@@ -356,6 +365,8 @@ main(int argc, char **argv) {
fprintf(stderr, "The use of RSA (RSAMD5) is not recommended.\n"
"If you still wish to use RSA (RSAMD5) please "
"specify \"-a RSAMD5\"\n");
+ if (freeit != NULL)
+ free(freeit);
return (1);
} else {
r.base = algname;
@@ -515,6 +526,10 @@ main(int argc, char **argv) {
dst_key_setprivateformat(key, 1, 2);
}
+ /* Set default key TTL */
+ if (setttl)
+ dst_key_setttl(key, ttl);
+
/*
* Do not overwrite an existing key. Warn LOUDLY if there
* is a risk of ID collision due to this key or another key
diff --git a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook
index 4662e870a8ef..0dd3c0ea66b8 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook
+++ b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dnssec-keyfromlabel.docbook,v 1.18.14.2 2011/02/28 01:19:58 tbox Exp $ -->
+<!-- $Id: dnssec-keyfromlabel.docbook,v 1.21 2011/03/17 01:40:34 each Exp $ -->
<refentry id="man.dnssec-keyfromlabel">
<refentryinfo>
<date>February 8, 2008</date>
@@ -60,6 +60,7 @@
<arg><option>-I <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-k</option></arg>
<arg><option>-K <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-L <replaceable class="parameter">ttl</replaceable></option></arg>
<arg><option>-n <replaceable class="parameter">nametype</replaceable></option></arg>
<arg><option>-P <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-p <replaceable class="parameter">protocol</replaceable></option></arg>
@@ -237,6 +238,20 @@
</varlistentry>
<varlistentry>
+ <term>-L <replaceable class="parameter">ttl</replaceable></term>
+ <listitem>
+ <para>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <literal>0</literal> or <literal>none</literal> removes it.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-p <replaceable class="parameter">protocol</replaceable></term>
<listitem>
<para>
diff --git a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.html b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.html
index 0fa3affa277b..f0e2c5c3b86e 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.html
+++ b/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.html
@@ -28,10 +28,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keyfromlabel</code> {-l <em class="replaceable"><code>label</code></em>} [<code class="option">-3</code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-k</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-y</code>] {name}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-keyfromlabel</code> {-l <em class="replaceable"><code>label</code></em>} [<code class="option">-3</code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-k</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-y</code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543498"></a><h2>DESCRIPTION</h2>
+<a name="id2543507"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keyfromlabel</strong></span>
gets keys with the given label from a crypto hardware and builds
key files for DNSSEC (Secure DNS), as defined in RFC 2535
@@ -44,7 +44,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543516"></a><h2>OPTIONS</h2>
+<a name="id2543525"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -135,6 +135,15 @@
<dd><p>
Generate KEY records rather than DNSKEY records.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
+<dd><p>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <code class="literal">0</code> or <code class="literal">none</code> removes it.
+ </p></dd>
<dt><span class="term">-p <em class="replaceable"><code>protocol</code></em></span></dt>
<dd><p>
Sets the protocol value for the key. The protocol
@@ -164,7 +173,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543880"></a><h2>TIMING OPTIONS</h2>
+<a name="id2543980"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -211,7 +220,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544046"></a><h2>GENERATED KEY FILES</h2>
+<a name="id2543054"></a><h2>GENERATED KEY FILES</h2>
<p>
When <span><strong class="command">dnssec-keyfromlabel</strong></span> completes
successfully,
@@ -250,7 +259,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544119"></a><h2>SEE ALSO</h2>
+<a name="id2543127"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -258,7 +267,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544152"></a><h2>AUTHOR</h2>
+<a name="id2543160"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/dnssec/dnssec-keygen.8 b/contrib/bind9/bin/dnssec/dnssec-keygen.8
index 689f23df4edb..90daddd15690 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keygen.8
+++ b/contrib/bind9/bin/dnssec/dnssec-keygen.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007-2012 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000-2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -33,7 +33,7 @@
dnssec\-keygen \- DNSSEC key generation tool
.SH "SYNOPSIS"
.HP 14
-\fBdnssec\-keygen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-b\ \fR\fB\fIkeysize\fR\fR] [\fB\-n\ \fR\fB\fInametype\fR\fR] [\fB\-3\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-C\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-e\fR] [\fB\-f\ \fR\fB\fIflag\fR\fR] [\fB\-G\fR] [\fB\-g\ \fR\fB\fIgenerator\fR\fR] [\fB\-h\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-p\ \fR\fB\fIprotocol\fR\fR] [\fB\-q\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-r\ \fR\fB\fIrandomdev\fR\fR] [\fB\-S\ \fR\fB\fIkey\fR\fR] [\fB\-s\ \fR\fB\fIstrength\fR\fR] [\fB\-t\ \fR\fB\fItype\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-z\fR] {name}
+\fBdnssec\-keygen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-b\ \fR\fB\fIkeysize\fR\fR] [\fB\-n\ \fR\fB\fInametype\fR\fR] [\fB\-3\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-C\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-f\ \fR\fB\fIflag\fR\fR] [\fB\-G\fR] [\fB\-g\ \fR\fB\fIgenerator\fR\fR] [\fB\-h\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-k\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-p\ \fR\fB\fIprotocol\fR\fR] [\fB\-q\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-r\ \fR\fB\fIrandomdev\fR\fR] [\fB\-S\ \fR\fB\fIkey\fR\fR] [\fB\-s\ \fR\fB\fIstrength\fR\fR] [\fB\-t\ \fR\fB\fItype\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-z\fR] {name}
.SH "DESCRIPTION"
.PP
\fBdnssec\-keygen\fR
@@ -103,11 +103,6 @@ Indicates that the DNS record containing the key should have the specified class
Uses a crypto hardware (OpenSSL engine) for random number and, when supported, key generation. When compiled with PKCS#11 support it defaults to pkcs11; the empty name resets it to no engine.
.RE
.PP
-\-e
-.RS 4
-If generating an RSAMD5/RSASHA1 key, use a large exponent.
-.RE
-.PP
\-f \fIflag\fR
.RS 4
Set the specified flag in the flag field of the KEY/DNSKEY record. The only recognized flags are KSK (Key Signing Key) and REVOKE.
@@ -139,6 +134,15 @@ Sets the directory in which the key files are to be written.
Deprecated in favor of \-T KEY.
.RE
.PP
+\-L \fIttl\fR
+.RS 4
+Sets the default TTL to use for this key when it is converted into a DNSKEY RR. If the key is imported into a zone, this is the TTL that will be used for it, unless there was already a DNSKEY RRset in place, in which case the existing TTL would take precedence. Setting the default TTL to
+0
+or
+none
+removes it.
+.RE
+.PP
\-p \fIprotocol\fR
.RS 4
Sets the protocol value for the generated key. The protocol is a number between 0 and 255. The default is 3 (DNSSEC). Other possible values for this argument are listed in RFC 2535 and its successors.
@@ -298,7 +302,7 @@ RFC 4034.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007\-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007\-2012 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000\-2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/bin/dnssec/dnssec-keygen.c b/contrib/bind9/bin/dnssec/dnssec-keygen.c
index 8af100c7bdea..1e61ca392e86 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keygen.c
+++ b/contrib/bind9/bin/dnssec/dnssec-keygen.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -29,7 +29,7 @@
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-keygen.c,v 1.115.14.4 2011/11/30 00:51:38 marka Exp $ */
+/* $Id: dnssec-keygen.c,v 1.120 2011/11/30 00:48:51 marka Exp $ */
/*! \file */
@@ -124,11 +124,12 @@ usage(void) {
#else
fprintf(stderr, " -E <engine name>\n");
#endif
- fprintf(stderr, " -e: use large exponent (RSAMD5/RSASHA1 only)\n");
fprintf(stderr, " -f <keyflag>: KSK | REVOKE\n");
fprintf(stderr, " -g <generator>: use specified generator "
"(DH only)\n");
+ fprintf(stderr, " -L <ttl>: default key TTL\n");
fprintf(stderr, " -p <protocol>: (default: 3 [dnssec])\n");
+ fprintf(stderr, " -r <randomdev>: a file containing random data\n");
fprintf(stderr, " -s <strength>: strength value this key signs DNS "
"records with (default: 0)\n");
fprintf(stderr, " -T <rrtype>: DNSKEY | KEY (default: DNSKEY; "
@@ -137,8 +138,6 @@ usage(void) {
fprintf(stderr, " -t <type>: "
"AUTHCONF | NOAUTHCONF | NOAUTH | NOCONF "
"(default: AUTHCONF)\n");
- fprintf(stderr, " -r <randomdev>: a file containing random data\n");
-
fprintf(stderr, " -h: print usage and exit\n");
fprintf(stderr, " -m <memory debugging mode>:\n");
fprintf(stderr, " usage | trace | record | size | mctx\n");
@@ -212,7 +211,7 @@ main(int argc, char **argv) {
isc_boolean_t conflict = ISC_FALSE, null_key = ISC_FALSE;
isc_boolean_t oldstyle = ISC_FALSE;
isc_mem_t *mctx = NULL;
- int ch, rsa_exp = 0, generator = 0, param = 0;
+ int ch, generator = 0, param = 0;
int protocol = -1, size = -1, signatory = 0;
isc_result_t ret;
isc_textregion_t r;
@@ -231,6 +230,7 @@ main(int argc, char **argv) {
dns_rdataclass_t rdclass;
int options = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC;
int dbits = 0;
+ dns_ttl_t ttl = 0;
isc_boolean_t use_default = ISC_FALSE, use_nsec3 = ISC_FALSE;
isc_stdtime_t publish = 0, activate = 0, revoke = 0;
isc_stdtime_t inactive = 0, delete = 0;
@@ -238,7 +238,7 @@ main(int argc, char **argv) {
int prepub = -1;
isc_boolean_t setpub = ISC_FALSE, setact = ISC_FALSE;
isc_boolean_t setrev = ISC_FALSE, setinact = ISC_FALSE;
- isc_boolean_t setdel = ISC_FALSE;
+ isc_boolean_t setdel = ISC_FALSE, setttl = ISC_FALSE;
isc_boolean_t unsetpub = ISC_FALSE, unsetact = ISC_FALSE;
isc_boolean_t unsetrev = ISC_FALSE, unsetinact = ISC_FALSE;
isc_boolean_t unsetdel = ISC_FALSE;
@@ -257,7 +257,7 @@ main(int argc, char **argv) {
/*
* Process memory debugging argument first.
*/
-#define CMDLINE_FLAGS "3A:a:b:Cc:D:d:E:eFf:Gg:hI:i:K:km:n:P:p:qR:r:S:s:T:t:v:"
+#define CMDLINE_FLAGS "3A:a:b:Cc:D:d:E:eFf:Gg:hI:i:K:kL:m:n:P:p:qR:r:S:s:T:t:v:"
while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
switch (ch) {
case 'm':
@@ -310,7 +310,9 @@ main(int argc, char **argv) {
engine = isc_commandline_argument;
break;
case 'e':
- rsa_exp = 1;
+ fprintf(stderr,
+ "phased-out option -e "
+ "(was 'use (RSA) large exponent)\n");
break;
case 'f':
c = (unsigned char)(isc_commandline_argument[0]);
@@ -340,6 +342,13 @@ main(int argc, char **argv) {
"To generate a key-signing key, use -f KSK.\n"
"To generate a key with TYPE=KEY, use -T KEY.\n");
break;
+ case 'L':
+ if (strcmp(isc_commandline_argument, "none") == 0)
+ ttl = 0;
+ else
+ ttl = strtottl(isc_commandline_argument);
+ setttl = ISC_TRUE;
+ break;
case 'n':
nametype = isc_commandline_argument;
break;
@@ -526,6 +535,7 @@ main(int argc, char **argv) {
"recommended.\nIf you still wish to "
"use RSA (RSAMD5) please specify "
"\"-a RSAMD5\"\n");
+ INSIST(freeit == NULL);
return (1);
} else if (strcasecmp(algname, "HMAC-MD5") == 0)
alg = DST_ALG_HMACMD5;
@@ -781,13 +791,6 @@ main(int argc, char **argv) {
break;
}
- if (!(alg == DNS_KEYALG_RSAMD5 || alg == DNS_KEYALG_RSASHA1 ||
- alg == DNS_KEYALG_NSEC3RSASHA1 || alg == DNS_KEYALG_RSASHA256 ||
- alg == DNS_KEYALG_RSASHA512 || alg == DST_ALG_ECCGOST ||
- alg == DST_ALG_ECDSA256 || alg == DST_ALG_ECDSA384) &&
- rsa_exp != 0)
- fatal("specified RSA exponent for a non-RSA key");
-
if (alg != DNS_KEYALG_DH && generator != 0)
fatal("specified DH generator for a non-DH key");
@@ -847,7 +850,6 @@ main(int argc, char **argv) {
case DNS_KEYALG_NSEC3RSASHA1:
case DNS_KEYALG_RSASHA256:
case DNS_KEYALG_RSASHA512:
- param = rsa_exp;
show_progress = ISC_TRUE;
break;
@@ -960,8 +962,15 @@ main(int argc, char **argv) {
dst_key_settime(key, DST_TIME_INACTIVE,
inactive);
- if (setdel)
+ if (setdel) {
+ if (setinact && delete < inactive)
+ fprintf(stderr, "%s: warning: Key is "
+ "scheduled to be deleted "
+ "before it is scheduled to be "
+ "made inactive.\n",
+ program);
dst_key_settime(key, DST_TIME_DELETE, delete);
+ }
} else {
if (setpub || setact || setrev || setinact ||
setdel || unsetpub || unsetact ||
@@ -975,6 +984,10 @@ main(int argc, char **argv) {
dst_key_setprivateformat(key, 1, 2);
}
+ /* Set the default key TTL */
+ if (setttl)
+ dst_key_setttl(key, ttl);
+
/*
* Do not overwrite an existing key, or create a key
* if there is a risk of ID collision due to this key
diff --git a/contrib/bind9/bin/dnssec/dnssec-keygen.docbook b/contrib/bind9/bin/dnssec/dnssec-keygen.docbook
index 0a1926bd839a..bc50c0226da2 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keygen.docbook
+++ b/contrib/bind9/bin/dnssec/dnssec-keygen.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007-2012 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dnssec-keygen.docbook,v 1.36 2010/12/23 04:07:59 marka Exp $ -->
+<!-- $Id: dnssec-keygen.docbook,v 1.38 2011/03/17 23:47:29 tbox Exp $ -->
<refentry id="man.dnssec-keygen">
<refentryinfo>
<date>June 30, 2000</date>
@@ -43,6 +43,7 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
<year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
@@ -67,7 +68,6 @@
<arg><option>-c <replaceable class="parameter">class</replaceable></option></arg>
<arg><option>-D <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-E <replaceable class="parameter">engine</replaceable></option></arg>
- <arg><option>-e</option></arg>
<arg><option>-f <replaceable class="parameter">flag</replaceable></option></arg>
<arg><option>-G</option></arg>
<arg><option>-g <replaceable class="parameter">generator</replaceable></option></arg>
@@ -75,6 +75,7 @@
<arg><option>-I <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-i <replaceable class="parameter">interval</replaceable></option></arg>
<arg><option>-K <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-L <replaceable class="parameter">ttl</replaceable></option></arg>
<arg><option>-k</option></arg>
<arg><option>-P <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-p <replaceable class="parameter">protocol</replaceable></option></arg>
@@ -232,15 +233,6 @@
</varlistentry>
<varlistentry>
- <term>-e</term>
- <listitem>
- <para>
- If generating an RSAMD5/RSASHA1 key, use a large exponent.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term>-f <replaceable class="parameter">flag</replaceable></term>
<listitem>
<para>
@@ -301,6 +293,20 @@
</varlistentry>
<varlistentry>
+ <term>-L <replaceable class="parameter">ttl</replaceable></term>
+ <listitem>
+ <para>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <literal>0</literal> or <literal>none</literal> removes it.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-p <replaceable class="parameter">protocol</replaceable></term>
<listitem>
<para>
diff --git a/contrib/bind9/bin/dnssec/dnssec-keygen.html b/contrib/bind9/bin/dnssec/dnssec-keygen.html
index 3bdfa0739f2c..ecf512b165f8 100644
--- a/contrib/bind9/bin/dnssec/dnssec-keygen.html
+++ b/contrib/bind9/bin/dnssec/dnssec-keygen.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007-2012 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -29,10 +29,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-3</code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-C</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e</code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k</code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-q</code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {name}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-3</code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-C</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-k</code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-q</code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543582"></a><h2>DESCRIPTION</h2>
+<a name="id2543590"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keygen</strong></span>
generates keys for DNSSEC (Secure DNS), as defined in RFC 2535
and RFC 4034. It can also generate keys for use with
@@ -46,7 +46,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543601"></a><h2>OPTIONS</h2>
+<a name="id2543608"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -139,10 +139,6 @@
support it defaults to pkcs11; the empty name resets it to
no engine.
</p></dd>
-<dt><span class="term">-e</span></dt>
-<dd><p>
- If generating an RSAMD5/RSASHA1 key, use a large exponent.
- </p></dd>
<dt><span class="term">-f <em class="replaceable"><code>flag</code></em></span></dt>
<dd><p>
Set the specified flag in the flag field of the KEY/DNSKEY record.
@@ -173,6 +169,15 @@
<dd><p>
Deprecated in favor of -T KEY.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
+<dd><p>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <code class="literal">0</code> or <code class="literal">none</code> removes it.
+ </p></dd>
<dt><span class="term">-p <em class="replaceable"><code>protocol</code></em></span></dt>
<dd><p>
Sets the protocol value for the generated key. The protocol
@@ -251,7 +256,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544169"></a><h2>TIMING OPTIONS</h2>
+<a name="id2544187"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -322,7 +327,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544359"></a><h2>GENERATED KEYS</h2>
+<a name="id2544377"></a><h2>GENERATED KEYS</h2>
<p>
When <span><strong class="command">dnssec-keygen</strong></span> completes
successfully,
@@ -368,7 +373,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544441"></a><h2>EXAMPLE</h2>
+<a name="id2544459"></a><h2>EXAMPLE</h2>
<p>
To generate a 768-bit DSA key for the domain
<strong class="userinput"><code>example.com</code></strong>, the following command would be
@@ -389,7 +394,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544485"></a><h2>SEE ALSO</h2>
+<a name="id2544571"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2539</em>,
@@ -398,7 +403,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544584"></a><h2>AUTHOR</h2>
+<a name="id2544602"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/dnssec/dnssec-revoke.c b/contrib/bind9/bin/dnssec/dnssec-revoke.c
index 8346f1c91182..7b115810642e 100644
--- a/contrib/bind9/bin/dnssec/dnssec-revoke.c
+++ b/contrib/bind9/bin/dnssec/dnssec-revoke.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,13 +14,12 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-revoke.c,v 1.22.124.2 2011/10/20 23:46:27 tbox Exp $ */
+/* $Id: dnssec-revoke.c,v 1.24 2011/10/20 23:46:51 tbox Exp $ */
/*! \file */
#include <config.h>
-#include <libgen.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/contrib/bind9/bin/dnssec/dnssec-revoke.docbook b/contrib/bind9/bin/dnssec/dnssec-revoke.docbook
index 99518bb2f2fa..4062f5e0407d 100644
--- a/contrib/bind9/bin/dnssec/dnssec-revoke.docbook
+++ b/contrib/bind9/bin/dnssec/dnssec-revoke.docbook
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dnssec-revoke.docbook,v 1.7.266.2 2011/10/20 23:46:27 tbox Exp $ -->
+<!-- $Id: dnssec-revoke.docbook,v 1.9 2011/10/20 23:46:51 tbox Exp $ -->
<refentry id="man.dnssec-revoke">
<refentryinfo>
<date>June 1, 2009</date>
diff --git a/contrib/bind9/bin/dnssec/dnssec-settime.8 b/contrib/bind9/bin/dnssec/dnssec-settime.8
index 8a5e2e789005..7c0c3b289285 100644
--- a/contrib/bind9/bin/dnssec/dnssec-settime.8
+++ b/contrib/bind9/bin/dnssec/dnssec-settime.8
@@ -32,7 +32,7 @@
dnssec\-settime \- Set the key timing metadata for a DNSSEC key
.SH "SYNOPSIS"
.HP 15
-\fBdnssec\-settime\fR [\fB\-f\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-h\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] {keyfile}
+\fBdnssec\-settime\fR [\fB\-f\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-h\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] {keyfile}
.SH "DESCRIPTION"
.PP
\fBdnssec\-settime\fR
@@ -67,6 +67,15 @@ will fail when attempting to update a legacy key. With this option, the key will
Sets the directory in which the key files are to reside.
.RE
.PP
+\-L \fIttl\fR
+.RS 4
+Sets the default TTL to use for this key when it is converted into a DNSKEY RR. If the key is imported into a zone, this is the TTL that will be used for it, unless there was already a DNSKEY RRset in place, in which case the existing TTL would take precedence. Setting the default TTL to
+0
+or
+none
+removes it.
+.RE
+.PP
\-h
.RS 4
Emit usage message and exit.
diff --git a/contrib/bind9/bin/dnssec/dnssec-settime.c b/contrib/bind9/bin/dnssec/dnssec-settime.c
index f7f4486eefe7..4c88a07ac455 100644
--- a/contrib/bind9/bin/dnssec/dnssec-settime.c
+++ b/contrib/bind9/bin/dnssec/dnssec-settime.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,13 +14,12 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-settime.c,v 1.28.16.3 2011/06/02 20:24:11 each Exp $ */
+/* $Id: dnssec-settime.c,v 1.32 2011/06/02 20:24:45 each Exp $ */
/*! \file */
#include <config.h>
-#include <libgen.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
@@ -67,6 +66,7 @@ usage(void) {
fprintf(stderr, " -f: force update of old-style "
"keys\n");
fprintf(stderr, " -K directory: set key file location\n");
+ fprintf(stderr, " -L ttl: set default key TTL\n");
fprintf(stderr, " -v level: set level of verbosity\n");
fprintf(stderr, " -h: help\n");
fprintf(stderr, "Timing options:\n");
@@ -138,11 +138,13 @@ main(int argc, char **argv) {
unsigned int size = 0;
isc_uint16_t flags = 0;
int prepub = -1;
+ dns_ttl_t ttl = 0;
isc_stdtime_t now;
isc_stdtime_t pub = 0, act = 0, rev = 0, inact = 0, del = 0;
+ isc_stdtime_t prevact = 0, previnact = 0, prevdel = 0;
isc_boolean_t setpub = ISC_FALSE, setact = ISC_FALSE;
isc_boolean_t setrev = ISC_FALSE, setinact = ISC_FALSE;
- isc_boolean_t setdel = ISC_FALSE;
+ isc_boolean_t setdel = ISC_FALSE, setttl = ISC_FALSE;
isc_boolean_t unsetpub = ISC_FALSE, unsetact = ISC_FALSE;
isc_boolean_t unsetrev = ISC_FALSE, unsetinact = ISC_FALSE;
isc_boolean_t unsetdel = ISC_FALSE;
@@ -169,7 +171,7 @@ main(int argc, char **argv) {
isc_stdtime_get(&now);
-#define CMDLINE_FLAGS "A:D:E:fhI:i:K:P:p:R:S:uv:"
+#define CMDLINE_FLAGS "A:D:E:fhI:i:K:L:P:p:R:S:uv:"
while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
switch (ch) {
case 'E':
@@ -233,6 +235,13 @@ main(int argc, char **argv) {
"directory");
}
break;
+ case 'L':
+ if (strcmp(isc_commandline_argument, "none") == 0)
+ ttl = 0;
+ else
+ ttl = strtottl(isc_commandline_argument);
+ setttl = ISC_TRUE;
+ break;
case 'v':
verbose = strtol(isc_commandline_argument, &endp, 0);
if (*endp != '\0')
@@ -344,7 +353,6 @@ main(int argc, char **argv) {
if (predecessor != NULL) {
char keystr[DST_KEY_FORMATSIZE];
- isc_stdtime_t when;
int major, minor;
if (prepub == -1)
@@ -376,19 +384,20 @@ main(int argc, char **argv) {
fatal("Predecessor has incompatible format "
"version %d.%d\n\t", major, minor);
- result = dst_key_gettime(prevkey, DST_TIME_ACTIVATE, &when);
+ result = dst_key_gettime(prevkey, DST_TIME_ACTIVATE, &prevact);
if (result != ISC_R_SUCCESS)
fatal("Predecessor has no activation date. "
"You must set one before\n\t"
"generating a successor.");
- result = dst_key_gettime(prevkey, DST_TIME_INACTIVE, &act);
+ result = dst_key_gettime(prevkey, DST_TIME_INACTIVE,
+ &previnact);
if (result != ISC_R_SUCCESS)
fatal("Predecessor has no inactivation date. "
"You must set one before\n\t"
"generating a successor.");
- pub = act - prepub;
+ pub = prevact - prepub;
if (pub < now && prepub != 0)
fatal("Predecessor will become inactive before the\n\t"
"prepublication period ends. Either change "
@@ -396,13 +405,18 @@ main(int argc, char **argv) {
"or use the -i option to set a shorter "
"prepublication interval.");
- result = dst_key_gettime(prevkey, DST_TIME_DELETE, &when);
+ result = dst_key_gettime(prevkey, DST_TIME_DELETE, &prevdel);
if (result != ISC_R_SUCCESS)
- fprintf(stderr, "%s: WARNING: Predecessor has no "
+ fprintf(stderr, "%s: warning: Predecessor has no "
"removal date;\n\t"
"it will remain in the zone "
"indefinitely after rollover.\n",
program);
+ else if (prevdel < previnact)
+ fprintf(stderr, "%s: warning: Predecessor is "
+ "scheduled to be deleted\n\t"
+ "before it is scheduled to be "
+ "inactive.\n", program);
changed = setpub = setact = ISC_TRUE;
dst_key_free(&prevkey);
@@ -464,6 +478,20 @@ main(int argc, char **argv) {
fatal("Key flags mismatch");
}
+ prevdel = previnact = 0;
+ if ((setdel && setinact && del < inact) ||
+ (dst_key_gettime(key, DST_TIME_INACTIVE,
+ &previnact) == ISC_R_SUCCESS &&
+ setdel && !setinact && del < previnact) ||
+ (dst_key_gettime(key, DST_TIME_DELETE,
+ &prevdel) == ISC_R_SUCCESS &&
+ setinact && !setdel && prevdel < inact) ||
+ (!setdel && !setinact && prevdel < previnact))
+ fprintf(stderr, "%s: warning: Key is scheduled to "
+ "be deleted before it is\n\t"
+ "scheduled to be inactive.\n",
+ program);
+
if (force)
set_keyversion(key);
else
@@ -516,6 +544,9 @@ main(int argc, char **argv) {
else if (unsetdel)
dst_key_unsettime(key, DST_TIME_DELETE);
+ if (setttl)
+ dst_key_setttl(key, ttl);
+
/*
* No metadata changes were made but we're forcing an upgrade
* to the new format anyway: use "-P now -A now" as the default
@@ -526,6 +557,9 @@ main(int argc, char **argv) {
changed = ISC_TRUE;
}
+ if (!changed && setttl)
+ changed = ISC_TRUE;
+
/*
* Print out time values, if -p was used.
*/
diff --git a/contrib/bind9/bin/dnssec/dnssec-settime.docbook b/contrib/bind9/bin/dnssec/dnssec-settime.docbook
index 3d89b651b473..bc6870b13212 100644
--- a/contrib/bind9/bin/dnssec/dnssec-settime.docbook
+++ b/contrib/bind9/bin/dnssec/dnssec-settime.docbook
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dnssec-settime.docbook,v 1.11.70.3 2011/11/03 20:21:30 each Exp $ -->
+<!-- $Id: dnssec-settime.docbook,v 1.15 2011/11/03 20:21:37 each Exp $ -->
<refentry id="man.dnssec-settime">
<refentryinfo>
<date>July 15, 2009</date>
@@ -48,6 +48,7 @@
<command>dnssec-settime</command>
<arg><option>-f</option></arg>
<arg><option>-K <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-L <replaceable class="parameter">ttl</replaceable></option></arg>
<arg><option>-P <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-A <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg><option>-R <replaceable class="parameter">date/offset</replaceable></option></arg>
@@ -117,6 +118,20 @@
</varlistentry>
<varlistentry>
+ <term>-L <replaceable class="parameter">ttl</replaceable></term>
+ <listitem>
+ <para>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <literal>0</literal> or <literal>none</literal> removes it.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-h</term>
<listitem>
<para>
diff --git a/contrib/bind9/bin/dnssec/dnssec-settime.html b/contrib/bind9/bin/dnssec/dnssec-settime.html
index 0ac82bcbd3da..7b022658c058 100644
--- a/contrib/bind9/bin/dnssec/dnssec-settime.html
+++ b/contrib/bind9/bin/dnssec/dnssec-settime.html
@@ -28,10 +28,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-settime</code> [<code class="option">-f</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] {keyfile}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-settime</code> [<code class="option">-f</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] {keyfile}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543424"></a><h2>DESCRIPTION</h2>
+<a name="id2543432"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-settime</strong></span>
reads a DNSSEC private key file and sets the key timing metadata
as specified by the <code class="option">-P</code>, <code class="option">-A</code>,
@@ -57,7 +57,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543472"></a><h2>OPTIONS</h2>
+<a name="id2543480"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-f</span></dt>
<dd><p>
@@ -74,6 +74,15 @@
<dd><p>
Sets the directory in which the key files are to reside.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
+<dd><p>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <code class="literal">0</code> or <code class="literal">none</code> removes it.
+ </p></dd>
<dt><span class="term">-h</span></dt>
<dd><p>
Emit usage message and exit.
@@ -90,7 +99,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543563"></a><h2>TIMING OPTIONS</h2>
+<a name="id2543664"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -169,7 +178,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543770"></a><h2>PRINTING OPTIONS</h2>
+<a name="id2543802"></a><h2>PRINTING OPTIONS</h2>
<p>
<span><strong class="command">dnssec-settime</strong></span> can also be used to print the
timing metadata associated with a key.
@@ -195,7 +204,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543848"></a><h2>SEE ALSO</h2>
+<a name="id2543880"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -203,7 +212,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543881"></a><h2>AUTHOR</h2>
+<a name="id2542138"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/dnssec/dnssec-signzone.8 b/contrib/bind9/bin/dnssec/dnssec-signzone.8
index 028068803cdb..c91749569a50 100644
--- a/contrib/bind9/bin/dnssec/dnssec-signzone.8
+++ b/contrib/bind9/bin/dnssec/dnssec-signzone.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000-2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -33,7 +33,7 @@
dnssec\-signzone \- DNSSEC zone signing tool
.SH "SYNOPSIS"
.HP 16
-\fBdnssec\-signzone\fR [\fB\-a\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-d\ \fR\fB\fIdirectory\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-e\ \fR\fB\fIend\-time\fR\fR] [\fB\-f\ \fR\fB\fIoutput\-file\fR\fR] [\fB\-g\fR] [\fB\-h\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\ \fR\fB\fIkey\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-I\ \fR\fB\fIinput\-format\fR\fR] [\fB\-j\ \fR\fB\fIjitter\fR\fR] [\fB\-N\ \fR\fB\fIsoa\-serial\-format\fR\fR] [\fB\-o\ \fR\fB\fIorigin\fR\fR] [\fB\-O\ \fR\fB\fIoutput\-format\fR\fR] [\fB\-p\fR] [\fB\-P\fR] [\fB\-r\ \fR\fB\fIrandomdev\fR\fR] [\fB\-S\fR] [\fB\-s\ \fR\fB\fIstart\-time\fR\fR] [\fB\-T\ \fR\fB\fIttl\fR\fR] [\fB\-t\fR] [\fB\-u\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-x\fR] [\fB\-z\fR] [\fB\-3\ \fR\fB\fIsalt\fR\fR] [\fB\-H\ \fR\fB\fIiterations\fR\fR] [\fB\-A\fR] {zonefile} [key...]
+\fBdnssec\-signzone\fR [\fB\-a\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-d\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-e\ \fR\fB\fIend\-time\fR\fR] [\fB\-f\ \fR\fB\fIoutput\-file\fR\fR] [\fB\-g\fR] [\fB\-h\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\ \fR\fB\fIkey\fR\fR] [\fB\-L\ \fR\fB\fIserial\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-I\ \fR\fB\fIinput\-format\fR\fR] [\fB\-j\ \fR\fB\fIjitter\fR\fR] [\fB\-N\ \fR\fB\fIsoa\-serial\-format\fR\fR] [\fB\-o\ \fR\fB\fIorigin\fR\fR] [\fB\-O\ \fR\fB\fIoutput\-format\fR\fR] [\fB\-P\fR] [\fB\-p\fR] [\fB\-R\fR] [\fB\-r\ \fR\fB\fIrandomdev\fR\fR] [\fB\-S\fR] [\fB\-s\ \fR\fB\fIstart\-time\fR\fR] [\fB\-T\ \fR\fB\fIttl\fR\fR] [\fB\-t\fR] [\fB\-u\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-X\ \fR\fB\fIextended\ end\-time\fR\fR] [\fB\-x\fR] [\fB\-z\fR] [\fB\-3\ \fR\fB\fIsalt\fR\fR] [\fB\-H\ \fR\fB\fIiterations\fR\fR] [\fB\-A\fR] {zonefile} [key...]
.SH "DESCRIPTION"
.PP
\fBdnssec\-signzone\fR
@@ -72,6 +72,15 @@ files in
\fBdirectory\fR.
.RE
.PP
+\-D
+.RS 4
+Output only those record types automatically managed by
+\fBdnssec\-signzone\fR, i.e. RRSIG, NSEC, NSEC3 and NSEC3PARAM records. If smart signing (\fB\-S\fR) is used, DNSKEY records are also included. The resulting file can be included in the original zone file with
+\fB$INCLUDE\fR. This option cannot be combined with
+\fB\-O raw\fR
+or serial number updating.
+.RE
+.PP
\-E \fIengine\fR
.RS 4
Uses a crypto hardware (OpenSSL engine) for the crypto operations it supports, for instance signing with private keys from a secure key store. When compiled with PKCS#11 support it defaults to pkcs11; the empty name resets it to no engine.
@@ -119,11 +128,29 @@ must be later than
\fBstart\-time\fR.
.RE
.PP
+\-X \fIextended end\-time\fR
+.RS 4
+Specify the date and time when the generated RRSIG records for the DNSKEY RRset will expire. This is to be used in cases when the DNSKEY signatures need to persist longer than signatures on other records; e.g., when the private component of the KSK is kept offline and the KSK signature is to be refreshed manually.
+.sp
+As with
+\fBstart\-time\fR, an absolute time is indicated in YYYYMMDDHHMMSS notation. A time relative to the start time is indicated with +N, which is N seconds from the start time. A time relative to the current time is indicated with now+N. If no
+\fBextended end\-time\fR
+is specified, the value of
+\fBend\-time\fR
+is used as the default. (\fBend\-time\fR, in turn, defaults to 30 days from the start time.)
+\fBextended end\-time\fR
+must be later than
+\fBstart\-time\fR.
+.RE
+.PP
\-f \fIoutput\-file\fR
.RS 4
The name of the output file containing the signed zone. The default is to append
\fI.signed\fR
-to the input filename.
+to the input filename. If
+\fBoutput\-file\fR
+is set to
+"\-", then the signed zone is written to the standard output, with a default output format of "full".
.RE
.PP
\-h
@@ -164,6 +191,11 @@ option specifies a jitter window that will be used to randomize the signature ex
Signature lifetime jitter also to some extent benefits validators and servers by spreading out cache expiration, i.e. if large numbers of RRSIGs don't expire at the same time from all caches there will be less congestion than if all validators need to refetch at mostly the same time.
.RE
.PP
+\-L \fIserial\fR
+.RS 4
+When writing a signed zone to 'raw' format, set the "source serial" value in the header to the specified serial number. (This is expected to be used primarily for testing purposes.)
+.RE
+.PP
\-n \fIncpus\fR
.RS 4
Specifies the number of threads to use. By default, one thread is started for each detected CPU.
@@ -205,8 +237,15 @@ The zone origin. If not specified, the name of the zone file is assumed to be th
.RS 4
The format of the output file containing the signed zone. Possible formats are
\fB"text"\fR
-(default) and
-\fB"raw"\fR.
+(default)
+\fB"full"\fR, which is text output in a format suitable for processing by external scripts, and
+\fB"raw"\fR
+or
+\fB"raw=N"\fR, which store the zone in a binary format for rapid loading by
+\fBnamed\fR.
+\fB"raw=N"\fR
+specifies the format version of the raw zone file: if N is 0, the raw file can be read by any version of
+\fBnamed\fR; if N is 1, the file can be read by release 9.9.0 or higher. The default is 1.
.RE
.PP
\-p
@@ -221,6 +260,17 @@ Disable post sign verification tests.
The post sign verification test ensures that for each algorithm in use there is at least one non revoked self signed KSK key, that all revoked KSK keys are self signed, and that all records in the zone are signed by the algorithm. This option skips these tests.
.RE
.PP
+\-R
+.RS 4
+Remove signatures from keys that no longer exist.
+.sp
+Normally, when a previously\-signed zone is passed as input to the signer, and a DNSKEY record has been removed and replaced with a new one, signatures from the old key that are still within their validity period are retained. This allows the zone to continue to validate with cached copies of the old DNSKEY RRset. The
+\fB\-R\fR
+forces
+\fBdnssec\-signzone\fR
+to remove all orphaned signatures.
+.RE
+.PP
\-r \fIrandomdev\fR
.RS 4
Specifies the source of randomness. If the operating system does not provide a
@@ -265,8 +315,8 @@ If either of the key's unpublication or deletion dates are set and in the past,
.PP
\-T \fIttl\fR
.RS 4
-Specifies the TTL to be used for new DNSKEY records imported into the zone from the key repository. If not specified, the default is the minimum TTL value from the zone's SOA record. This option is ignored when signing without
-\fB\-S\fR, since DNSKEY records are not imported from the key repository in that case. It is also ignored if there are any pre\-existing DNSKEY records at the zone apex, in which case new records' TTL values will be set to match them.
+Specifies a TTL to be used for new DNSKEY records imported into the zone from the key repository. If not specified, the default is the TTL value from the zone's SOA record. This option is ignored when signing without
+\fB\-S\fR, since DNSKEY records are not imported from the key repository in that case. It is also ignored if there are any pre\-existing DNSKEY records at the zone apex, in which case new records' TTL values will be set to match them, or if any of the imported DNSKEY records had a default TTL value. In the event of a a conflict between TTL values in imported keys, the shortest one is used.
.RE
.PP
\-t
@@ -378,7 +428,7 @@ RFC 4033.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2004\-2009 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004\-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000\-2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/bin/dnssec/dnssec-signzone.c b/contrib/bind9/bin/dnssec/dnssec-signzone.c
index 237624948a26..83456a7db7d7 100644
--- a/contrib/bind9/bin/dnssec/dnssec-signzone.c
+++ b/contrib/bind9/bin/dnssec/dnssec-signzone.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -29,7 +29,7 @@
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-signzone.c,v 1.262.110.9 2011/07/19 23:47:12 tbox Exp $ */
+/* $Id: dnssec-signzone.c,v 1.285 2011/12/22 07:32:39 each Exp $ */
/*! \file */
@@ -37,6 +37,7 @@
#include <stdlib.h>
#include <time.h>
+#include <unistd.h>
#include <isc/app.h>
#include <isc/base32.h>
@@ -124,7 +125,7 @@ struct signer_event {
static dns_dnsseckeylist_t keylist;
static unsigned int keycount = 0;
isc_rwlock_t keylist_lock;
-static isc_stdtime_t starttime = 0, endtime = 0, now;
+static isc_stdtime_t starttime = 0, endtime = 0, dnskey_endtime = 0, now;
static int cycle = -1;
static int jitter = 0;
static isc_boolean_t tryverify = ISC_FALSE;
@@ -133,11 +134,13 @@ static isc_mem_t *mctx = NULL;
static isc_entropy_t *ectx = NULL;
static dns_ttl_t zone_soa_min_ttl;
static dns_ttl_t soa_ttl;
-static FILE *fp;
+static FILE *fp = NULL;
static char *tempfile = NULL;
static const dns_master_style_t *masterstyle;
static dns_masterformat_t inputformat = dns_masterformat_text;
static dns_masterformat_t outputformat = dns_masterformat_text;
+static isc_uint32_t rawversion = 1, serialnum = 0;
+static isc_boolean_t snset = ISC_FALSE;
static unsigned int nsigned = 0, nretained = 0, ndropped = 0;
static unsigned int nverified = 0, nverifyfailed = 0;
static const char *directory = NULL, *dsdir = NULL;
@@ -171,6 +174,10 @@ static isc_boolean_t disable_zone_check = ISC_FALSE;
static isc_boolean_t update_chain = ISC_FALSE;
static isc_boolean_t set_keyttl = ISC_FALSE;
static dns_ttl_t keyttl;
+static isc_boolean_t smartsign = ISC_FALSE;
+static isc_boolean_t remove_orphans = ISC_FALSE;
+static isc_boolean_t output_dnssec_only = ISC_FALSE;
+static isc_boolean_t output_stdout = ISC_FALSE;
#define INCSTAT(counter) \
if (printstats) { \
@@ -182,19 +189,71 @@ static dns_ttl_t keyttl;
static void
sign(isc_task_t *task, isc_event_t *event);
-#define check_dns_dbiterator_current(result) \
- check_result((result == DNS_R_NEWORIGIN) ? ISC_R_SUCCESS : result, \
- "dns_dbiterator_current()")
-
static void
dumpnode(dns_name_t *name, dns_dbnode_t *node) {
+ dns_rdataset_t rds;
+ dns_rdatasetiter_t *iter = NULL;
+ isc_buffer_t *buffer = NULL;
+ isc_region_t r;
isc_result_t result;
+ unsigned bufsize = 4096;
if (outputformat != dns_masterformat_text)
return;
- result = dns_master_dumpnodetostream(mctx, gdb, gversion, node, name,
- masterstyle, fp);
- check_result(result, "dns_master_dumpnodetostream");
+
+ if (!output_dnssec_only) {
+ result = dns_master_dumpnodetostream(mctx, gdb, gversion, node,
+ name, masterstyle, fp);
+ check_result(result, "dns_master_dumpnodetostream");
+ return;
+ }
+
+ result = dns_db_allrdatasets(gdb, node, gversion, 0, &iter);
+ check_result(result, "dns_db_allrdatasets");
+
+ dns_rdataset_init(&rds);
+
+ result = isc_buffer_allocate(mctx, &buffer, bufsize);
+ check_result(result, "isc_buffer_allocate");
+
+ for (result = dns_rdatasetiter_first(iter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(iter)) {
+
+ dns_rdatasetiter_current(iter, &rds);
+
+ if (rds.type != dns_rdatatype_rrsig &&
+ rds.type != dns_rdatatype_nsec &&
+ rds.type != dns_rdatatype_nsec3 &&
+ rds.type != dns_rdatatype_nsec3param &&
+ (!smartsign || rds.type != dns_rdatatype_dnskey)) {
+ dns_rdataset_disassociate(&rds);
+ continue;
+ }
+
+ for (;;) {
+ result = dns_master_rdatasettotext(name, &rds,
+ masterstyle, buffer);
+ if (result != ISC_R_NOSPACE)
+ break;
+
+ bufsize <<= 1;
+ isc_buffer_free(&buffer);
+ result = isc_buffer_allocate(mctx, &buffer, bufsize);
+ check_result(result, "isc_buffer_allocate");
+ }
+ check_result(result, "dns_master_rdatasettotext");
+
+ isc_buffer_usedregion(buffer, &r);
+ result = isc_stdio_write(r.base, 1, r.length, fp, NULL);
+ check_result(result, "isc_stdio_write");
+ isc_buffer_clear(buffer);
+
+ dns_rdataset_disassociate(&rds);
+ }
+
+ isc_buffer_free(&buffer);
+ dns_rdatasetiter_destroy(&iter);
}
/*%
@@ -206,7 +265,7 @@ signwithkey(dns_name_t *name, dns_rdataset_t *rdataset, dst_key_t *key,
dns_ttl_t ttl, dns_diff_t *add, const char *logmsg)
{
isc_result_t result;
- isc_stdtime_t jendtime;
+ isc_stdtime_t jendtime, expiry;
char keystr[DST_KEY_FORMATSIZE];
dns_rdata_t trdata = DNS_RDATA_INIT;
unsigned char array[BUFSIZE];
@@ -216,7 +275,12 @@ signwithkey(dns_name_t *name, dns_rdataset_t *rdataset, dst_key_t *key,
dst_key_format(key, keystr, sizeof(keystr));
vbprintf(1, "\t%s %s\n", logmsg, keystr);
- jendtime = (jitter != 0) ? isc_random_jitter(endtime, jitter) : endtime;
+ if (rdataset->type == dns_rdatatype_dnskey)
+ expiry = dnskey_endtime;
+ else
+ expiry = endtime;
+
+ jendtime = (jitter != 0) ? isc_random_jitter(expiry, jitter) : expiry;
isc_buffer_init(&b, array, sizeof(array));
result = dns_dnssec_sign(name, rdataset, key, &starttime, &jendtime,
mctx, &b, &trdata);
@@ -254,6 +318,12 @@ issigningkey(dns_dnsseckey_t *key) {
}
static inline isc_boolean_t
+ispublishedkey(dns_dnsseckey_t *key) {
+ return ((key->force_publish || key->hint_publish) &&
+ !key->hint_remove);
+}
+
+static inline isc_boolean_t
iszonekey(dns_dnsseckey_t *key) {
return (ISC_TF(dns_name_equal(dst_key_name(key->key), gorigin) &&
dst_key_iszonekey(key->key)));
@@ -334,13 +404,16 @@ keythatsigned(dns_rdata_rrsig_t *rrsig) {
directory, mctx, &privkey);
if (result == ISC_R_SUCCESS) {
dst_key_free(&pubkey);
- dns_dnsseckey_create(mctx, &privkey, &key);
- } else {
- dns_dnsseckey_create(mctx, &pubkey, &key);
+ result = dns_dnsseckey_create(mctx, &privkey, &key);
+ } else
+ result = dns_dnsseckey_create(mctx, &pubkey, &key);
+
+ if (result == ISC_R_SUCCESS) {
+ key->force_publish = ISC_FALSE;
+ key->force_sign = ISC_FALSE;
+ key->index = keycount++;
+ ISC_LIST_APPEND(keylist, key, link);
}
- key->force_publish = ISC_FALSE;
- key->force_sign = ISC_FALSE;
- ISC_LIST_APPEND(keylist, key, link);
isc_rwlock_unlock(&keylist_lock, isc_rwlocktype_write);
return (key);
@@ -481,38 +554,38 @@ signset(dns_diff_t *del, dns_diff_t *add, dns_dbnode_t *node, dns_name_t *name,
"private dnskey not found\n",
sigstr);
} else if (key == NULL || future) {
+ keep = (!expired && !remove_orphans);
vbprintf(2, "\trrsig by %s %s - dnskey not found\n",
- expired ? "retained" : "dropped", sigstr);
- if (!expired)
- keep = ISC_TRUE;
+ keep ? "retained" : "dropped", sigstr);
} else if (issigningkey(key)) {
+ wassignedby[key->index] = ISC_TRUE;
+
if (!expired && rrsig.originalttl == set->ttl &&
setverifies(name, set, key->key, &sigrdata)) {
vbprintf(2, "\trrsig by %s retained\n", sigstr);
keep = ISC_TRUE;
- wassignedby[key->index] = ISC_TRUE;
- nowsignedby[key->index] = ISC_TRUE;
} else {
vbprintf(2, "\trrsig by %s dropped - %s\n",
sigstr, expired ? "expired" :
rrsig.originalttl != set->ttl ?
"ttl change" : "failed to verify");
- wassignedby[key->index] = ISC_TRUE;
resign = ISC_TRUE;
}
+ } else if (!ispublishedkey(key) && remove_orphans) {
+ vbprintf(2, "\trrsig by %s dropped - dnskey removed\n",
+ sigstr);
} else if (iszonekey(key)) {
+ wassignedby[key->index] = ISC_TRUE;
+
if (!expired && rrsig.originalttl == set->ttl &&
setverifies(name, set, key->key, &sigrdata)) {
vbprintf(2, "\trrsig by %s retained\n", sigstr);
keep = ISC_TRUE;
- wassignedby[key->index] = ISC_TRUE;
- nowsignedby[key->index] = ISC_TRUE;
} else {
vbprintf(2, "\trrsig by %s dropped - %s\n",
sigstr, expired ? "expired" :
rrsig.originalttl != set->ttl ?
"ttl change" : "failed to verify");
- wassignedby[key->index] = ISC_TRUE;
}
} else if (!expired) {
vbprintf(2, "\trrsig by %s retained\n", sigstr);
@@ -545,6 +618,7 @@ signset(dns_diff_t *del, dns_diff_t *add, dns_dbnode_t *node, dns_name_t *name,
}
} else {
tuple = NULL;
+ vbprintf(2, "removing signature by %s\n", sigstr);
result = dns_difftuple_create(mctx, DNS_DIFFOP_DEL,
name, sigset.ttl,
&sigrdata, &tuple);
@@ -646,6 +720,8 @@ hashlist_add(hashlist_t *l, const unsigned char *hash, size_t len)
if (l->entries == l->size) {
l->size = l->size * 2 + 100;
l->hashbuf = realloc(l->hashbuf, l->size * l->length);
+ if (l->hashbuf == NULL)
+ fatal("unable to grow hashlist: out of memory");
}
memset(l->hashbuf + l->entries * l->length, 0, l->length);
memcpy(l->hashbuf + l->entries * l->length, hash, len);
@@ -920,26 +996,6 @@ loadds(dns_name_t *name, isc_uint32_t ttl, dns_rdataset_t *dsset) {
}
static isc_boolean_t
-delegation(dns_name_t *name, dns_dbnode_t *node, isc_uint32_t *ttlp) {
- dns_rdataset_t nsset;
- isc_result_t result;
-
- if (dns_name_equal(name, gorigin))
- return (ISC_FALSE);
-
- dns_rdataset_init(&nsset);
- result = dns_db_findrdataset(gdb, node, gversion, dns_rdatatype_ns,
- 0, 0, &nsset, NULL);
- if (dns_rdataset_isassociated(&nsset)) {
- if (ttlp != NULL)
- *ttlp = nsset.ttl;
- dns_rdataset_disassociate(&nsset);
- }
-
- return (ISC_TF(result == ISC_R_SUCCESS));
-}
-
-static isc_boolean_t
secure(dns_name_t *name, dns_dbnode_t *node) {
dns_rdataset_t dsset;
isc_result_t result;
@@ -974,7 +1030,7 @@ signname(dns_dbnode_t *node, dns_name_t *name) {
/*
* Determine if this is a delegation point.
*/
- if (delegation(name, node, NULL))
+ if (is_delegation(gdb, gversion, gorigin, name, node, NULL))
isdelegation = ISC_TRUE;
/*
@@ -1307,485 +1363,6 @@ postsign(void) {
dns_dbiterator_destroy(&gdbiter);
}
-static isc_boolean_t
-goodsig(dns_rdata_t *sigrdata, dns_name_t *name, dns_rdataset_t *keyrdataset,
- dns_rdataset_t *rdataset)
-{
- dns_rdata_dnskey_t key;
- dns_rdata_rrsig_t sig;
- dst_key_t *dstkey = NULL;
- isc_result_t result;
-
- dns_rdata_tostruct(sigrdata, &sig, NULL);
-
- for (result = dns_rdataset_first(keyrdataset);
- result == ISC_R_SUCCESS;
- result = dns_rdataset_next(keyrdataset)) {
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_rdataset_current(keyrdataset, &rdata);
- dns_rdata_tostruct(&rdata, &key, NULL);
- result = dns_dnssec_keyfromrdata(gorigin, &rdata, mctx,
- &dstkey);
- if (result != ISC_R_SUCCESS)
- return (ISC_FALSE);
- if (sig.algorithm != key.algorithm ||
- sig.keyid != dst_key_id(dstkey) ||
- !dns_name_equal(&sig.signer, gorigin)) {
- dst_key_free(&dstkey);
- continue;
- }
- result = dns_dnssec_verify(name, rdataset, dstkey, ISC_FALSE,
- mctx, sigrdata);
- dst_key_free(&dstkey);
- if (result == ISC_R_SUCCESS)
- return(ISC_TRUE);
- }
- return (ISC_FALSE);
-}
-
-static void
-verifyset(dns_rdataset_t *rdataset, dns_name_t *name, dns_dbnode_t *node,
- dns_rdataset_t *keyrdataset, unsigned char *ksk_algorithms,
- unsigned char *bad_algorithms)
-{
- unsigned char set_algorithms[256];
- char namebuf[DNS_NAME_FORMATSIZE];
- char algbuf[80];
- char typebuf[80];
- dns_rdataset_t sigrdataset;
- dns_rdatasetiter_t *rdsiter = NULL;
- isc_result_t result;
- int i;
-
- dns_rdataset_init(&sigrdataset);
- result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter);
- check_result(result, "dns_db_allrdatasets()");
- for (result = dns_rdatasetiter_first(rdsiter);
- result == ISC_R_SUCCESS;
- result = dns_rdatasetiter_next(rdsiter)) {
- dns_rdatasetiter_current(rdsiter, &sigrdataset);
- if (sigrdataset.type == dns_rdatatype_rrsig &&
- sigrdataset.covers == rdataset->type)
- break;
- dns_rdataset_disassociate(&sigrdataset);
- }
- if (result != ISC_R_SUCCESS) {
- dns_name_format(name, namebuf, sizeof(namebuf));
- type_format(rdataset->type, typebuf, sizeof(typebuf));
- fprintf(stderr, "no signatures for %s/%s\n", namebuf, typebuf);
- for (i = 0; i < 256; i++)
- if (ksk_algorithms[i] != 0)
- bad_algorithms[i] = 1;
- return;
- }
-
- memset(set_algorithms, 0, sizeof(set_algorithms));
- for (result = dns_rdataset_first(&sigrdataset);
- result == ISC_R_SUCCESS;
- result = dns_rdataset_next(&sigrdataset)) {
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_rdata_rrsig_t sig;
-
- dns_rdataset_current(&sigrdataset, &rdata);
- dns_rdata_tostruct(&rdata, &sig, NULL);
- if (rdataset->ttl != sig.originalttl) {
- dns_name_format(name, namebuf, sizeof(namebuf));
- type_format(rdataset->type, typebuf, sizeof(typebuf));
- fprintf(stderr, "TTL mismatch for %s %s keytag %u\n",
- namebuf, typebuf, sig.keyid);
- continue;
- }
- if ((set_algorithms[sig.algorithm] != 0) ||
- (ksk_algorithms[sig.algorithm] == 0))
- continue;
- if (goodsig(&rdata, name, keyrdataset, rdataset))
- set_algorithms[sig.algorithm] = 1;
- }
- dns_rdatasetiter_destroy(&rdsiter);
- if (memcmp(set_algorithms, ksk_algorithms, sizeof(set_algorithms))) {
- dns_name_format(name, namebuf, sizeof(namebuf));
- type_format(rdataset->type, typebuf, sizeof(typebuf));
- for (i = 0; i < 256; i++)
- if ((ksk_algorithms[i] != 0) &&
- (set_algorithms[i] == 0)) {
- dns_secalg_format(i, algbuf, sizeof(algbuf));
- fprintf(stderr, "Missing %s signature for "
- "%s %s\n", algbuf, namebuf, typebuf);
- bad_algorithms[i] = 1;
- }
- }
- dns_rdataset_disassociate(&sigrdataset);
-}
-
-static void
-verifynode(dns_name_t *name, dns_dbnode_t *node, isc_boolean_t delegation,
- dns_rdataset_t *keyrdataset, unsigned char *ksk_algorithms,
- unsigned char *bad_algorithms)
-{
- dns_rdataset_t rdataset;
- dns_rdatasetiter_t *rdsiter = NULL;
- isc_result_t result;
-
- result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter);
- check_result(result, "dns_db_allrdatasets()");
- result = dns_rdatasetiter_first(rdsiter);
- dns_rdataset_init(&rdataset);
- while (result == ISC_R_SUCCESS) {
- dns_rdatasetiter_current(rdsiter, &rdataset);
- if (rdataset.type != dns_rdatatype_rrsig &&
- rdataset.type != dns_rdatatype_dnskey &&
- (!delegation || rdataset.type == dns_rdatatype_ds ||
- rdataset.type == dns_rdatatype_nsec)) {
- verifyset(&rdataset, name, node, keyrdataset,
- ksk_algorithms, bad_algorithms);
- }
- dns_rdataset_disassociate(&rdataset);
- result = dns_rdatasetiter_next(rdsiter);
- }
- if (result != ISC_R_NOMORE)
- fatal("rdataset iteration failed: %s",
- isc_result_totext(result));
- dns_rdatasetiter_destroy(&rdsiter);
-}
-
-/*%
- * Verify that certain things are sane:
- *
- * The apex has a DNSKEY RRset with at least one KSK, and at least
- * one ZSK if the -x flag was not used.
- *
- * The DNSKEY record was signed with at least one of the KSKs in
- * the DNSKEY RRset.
- *
- * The rest of the zone was signed with at least one of the ZSKs
- * present in the DNSKEY RRset.
- */
-static void
-verifyzone(void) {
- char algbuf[80];
- dns_dbiterator_t *dbiter = NULL;
- dns_dbnode_t *node = NULL, *nextnode = NULL;
- dns_fixedname_t fname, fnextname, fzonecut;
- dns_name_t *name, *nextname, *zonecut;
- dns_rdata_dnskey_t dnskey;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_rdataset_t keyset, soaset;
- dns_rdataset_t keysigs, soasigs;
- int i;
- isc_boolean_t done = ISC_FALSE;
- isc_boolean_t first = ISC_TRUE;
- isc_boolean_t goodksk = ISC_FALSE;
- isc_result_t result;
- unsigned char revoked_ksk[256];
- unsigned char revoked_zsk[256];
- unsigned char standby_ksk[256];
- unsigned char standby_zsk[256];
- unsigned char ksk_algorithms[256];
- unsigned char zsk_algorithms[256];
- unsigned char bad_algorithms[256];
-#ifdef ALLOW_KSKLESS_ZONES
- isc_boolean_t allzsksigned = ISC_TRUE;
- unsigned char self_algorithms[256];
-#endif
-
- if (disable_zone_check)
- return;
-
- result = dns_db_findnode(gdb, gorigin, ISC_FALSE, &node);
- if (result != ISC_R_SUCCESS)
- fatal("failed to find the zone's origin: %s",
- isc_result_totext(result));
-
- dns_rdataset_init(&keyset);
- dns_rdataset_init(&keysigs);
- dns_rdataset_init(&soaset);
- dns_rdataset_init(&soasigs);
-
- result = dns_db_findrdataset(gdb, node, gversion,
- dns_rdatatype_dnskey,
- 0, 0, &keyset, &keysigs);
- if (result != ISC_R_SUCCESS)
- fatal("cannot find DNSKEY rrset\n");
-
- result = dns_db_findrdataset(gdb, node, gversion,
- dns_rdatatype_soa,
- 0, 0, &soaset, &soasigs);
- dns_db_detachnode(gdb, &node);
- if (result != ISC_R_SUCCESS)
- fatal("cannot find SOA rrset\n");
-
- if (!dns_rdataset_isassociated(&keysigs))
- fatal("cannot find DNSKEY RRSIGs\n");
-
- if (!dns_rdataset_isassociated(&soasigs))
- fatal("cannot find SOA RRSIGs\n");
-
- memset(revoked_ksk, 0, sizeof(revoked_ksk));
- memset(revoked_zsk, 0, sizeof(revoked_zsk));
- memset(standby_ksk, 0, sizeof(standby_ksk));
- memset(standby_zsk, 0, sizeof(standby_zsk));
- memset(ksk_algorithms, 0, sizeof(ksk_algorithms));
- memset(zsk_algorithms, 0, sizeof(zsk_algorithms));
- memset(bad_algorithms, 0, sizeof(bad_algorithms));
-#ifdef ALLOW_KSKLESS_ZONES
- memset(self_algorithms, 0, sizeof(self_algorithms));
-#endif
-
- /*
- * Check that the DNSKEY RR has at least one self signing KSK
- * and one ZSK per algorithm in it (or, if -x was used, one
- * self-signing KSK).
- */
- for (result = dns_rdataset_first(&keyset);
- result == ISC_R_SUCCESS;
- result = dns_rdataset_next(&keyset)) {
- dns_rdataset_current(&keyset, &rdata);
- result = dns_rdata_tostruct(&rdata, &dnskey, NULL);
- check_result(result, "dns_rdata_tostruct");
-
- if ((dnskey.flags & DNS_KEYOWNER_ZONE) == 0)
- ;
- else if ((dnskey.flags & DNS_KEYFLAG_REVOKE) != 0) {
- if ((dnskey.flags & DNS_KEYFLAG_KSK) != 0 &&
- !dns_dnssec_selfsigns(&rdata, gorigin, &keyset,
- &keysigs, ISC_FALSE,
- mctx)) {
- char namebuf[DNS_NAME_FORMATSIZE];
- char buffer[1024];
- isc_buffer_t buf;
-
- dns_name_format(gorigin, namebuf,
- sizeof(namebuf));
- isc_buffer_init(&buf, buffer, sizeof(buffer));
- result = dns_rdata_totext(&rdata, NULL, &buf);
- check_result(result, "dns_rdata_totext");
- fatal("revoked KSK is not self signed:\n"
- "%s DNSKEY %.*s", namebuf,
- (int)isc_buffer_usedlength(&buf), buffer);
- }
- if ((dnskey.flags & DNS_KEYFLAG_KSK) != 0 &&
- revoked_ksk[dnskey.algorithm] != 255)
- revoked_ksk[dnskey.algorithm]++;
- else if ((dnskey.flags & DNS_KEYFLAG_KSK) == 0 &&
- revoked_zsk[dnskey.algorithm] != 255)
- revoked_zsk[dnskey.algorithm]++;
- } else if ((dnskey.flags & DNS_KEYFLAG_KSK) != 0) {
- if (dns_dnssec_selfsigns(&rdata, gorigin, &keyset,
- &keysigs, ISC_FALSE, mctx)) {
- if (ksk_algorithms[dnskey.algorithm] != 255)
- ksk_algorithms[dnskey.algorithm]++;
- goodksk = ISC_TRUE;
- } else {
- if (standby_ksk[dnskey.algorithm] != 255)
- standby_ksk[dnskey.algorithm]++;
- }
- } else if (dns_dnssec_selfsigns(&rdata, gorigin, &keyset,
- &keysigs, ISC_FALSE,
- mctx)) {
-#ifdef ALLOW_KSKLESS_ZONES
- if (self_algorithms[dnskey.algorithm] != 255)
- self_algorithms[dnskey.algorithm]++;
-#endif
- if (zsk_algorithms[dnskey.algorithm] != 255)
- zsk_algorithms[dnskey.algorithm]++;
- } else if (dns_dnssec_signs(&rdata, gorigin, &soaset,
- &soasigs, ISC_FALSE, mctx)) {
- if (zsk_algorithms[dnskey.algorithm] != 255)
- zsk_algorithms[dnskey.algorithm]++;
- } else {
- if (standby_zsk[dnskey.algorithm] != 255)
- standby_zsk[dnskey.algorithm]++;
-#ifdef ALLOW_KSKLESS_ZONES
- allzsksigned = ISC_FALSE;
-#endif
- }
- dns_rdata_freestruct(&dnskey);
- dns_rdata_reset(&rdata);
- }
- dns_rdataset_disassociate(&keysigs);
- dns_rdataset_disassociate(&soaset);
- dns_rdataset_disassociate(&soasigs);
-
-#ifdef ALLOW_KSKLESS_ZONES
- if (!goodksk) {
- if (!ignore_kskflag)
- fprintf(stderr, "No self signing KSK found. Using "
- "self signed ZSK's for active "
- "algorithm list.\n");
- memcpy(ksk_algorithms, self_algorithms, sizeof(ksk_algorithms));
- if (!allzsksigned)
- fprintf(stderr, "warning: not all ZSK's are self "
- "signed.\n");
- }
-#else
- if (!goodksk) {
- fatal("No self signed KSK's found");
- }
-#endif
-
- fprintf(stderr, "Verifying the zone using the following algorithms:");
- for (i = 0; i < 256; i++) {
-#ifdef ALLOW_KSKLESS_ZONES
- if (ksk_algorithms[i] != 0 || zsk_algorithms[i] != 0)
-#else
- if (ksk_algorithms[i] != 0)
-#endif
- {
- dns_secalg_format(i, algbuf, sizeof(algbuf));
- fprintf(stderr, " %s", algbuf);
- }
- }
- fprintf(stderr, ".\n");
-
- if (!ignore_kskflag && !keyset_kskonly) {
- for (i = 0; i < 256; i++) {
- /*
- * The counts should both be zero or both be non-zero.
- * Mark the algorithm as bad if this is not met.
- */
- if ((ksk_algorithms[i] != 0) ==
- (zsk_algorithms[i] != 0))
- continue;
- dns_secalg_format(i, algbuf, sizeof(algbuf));
- fprintf(stderr, "Missing %s for algorithm %s\n",
- (ksk_algorithms[i] != 0)
- ? "ZSK"
- : "self signing KSK",
- algbuf);
- bad_algorithms[i] = 1;
- }
- }
-
- /*
- * Check that all the other records were signed by keys that are
- * present in the DNSKEY RRSET.
- */
-
- dns_fixedname_init(&fname);
- name = dns_fixedname_name(&fname);
- dns_fixedname_init(&fnextname);
- nextname = dns_fixedname_name(&fnextname);
- dns_fixedname_init(&fzonecut);
- zonecut = NULL;
-
- result = dns_db_createiterator(gdb, DNS_DB_NONSEC3, &dbiter);
- check_result(result, "dns_db_createiterator()");
-
- result = dns_dbiterator_first(dbiter);
- check_result(result, "dns_dbiterator_first()");
-
- while (!done) {
- isc_boolean_t isdelegation = ISC_FALSE;
-
- result = dns_dbiterator_current(dbiter, &node, name);
- check_dns_dbiterator_current(result);
- if (!dns_name_issubdomain(name, gorigin)) {
- dns_db_detachnode(gdb, &node);
- result = dns_dbiterator_next(dbiter);
- if (result == ISC_R_NOMORE)
- done = ISC_TRUE;
- else
- check_result(result, "dns_dbiterator_next()");
- continue;
- }
- if (delegation(name, node, NULL)) {
- zonecut = dns_fixedname_name(&fzonecut);
- dns_name_copy(name, zonecut, NULL);
- isdelegation = ISC_TRUE;
- }
- verifynode(name, node, isdelegation, &keyset,
- ksk_algorithms, bad_algorithms);
- result = dns_dbiterator_next(dbiter);
- nextnode = NULL;
- while (result == ISC_R_SUCCESS) {
- result = dns_dbiterator_current(dbiter, &nextnode,
- nextname);
- check_dns_dbiterator_current(result);
- if (!dns_name_issubdomain(nextname, gorigin) ||
- (zonecut != NULL &&
- dns_name_issubdomain(nextname, zonecut)))
- {
- dns_db_detachnode(gdb, &nextnode);
- result = dns_dbiterator_next(dbiter);
- continue;
- }
- dns_db_detachnode(gdb, &nextnode);
- break;
- }
- if (result == ISC_R_NOMORE) {
- done = ISC_TRUE;
- } else if (result != ISC_R_SUCCESS)
- fatal("iterating through the database failed: %s",
- isc_result_totext(result));
- dns_db_detachnode(gdb, &node);
- }
-
- dns_dbiterator_destroy(&dbiter);
-
- result = dns_db_createiterator(gdb, DNS_DB_NSEC3ONLY, &dbiter);
- check_result(result, "dns_db_createiterator()");
-
- for (result = dns_dbiterator_first(dbiter);
- result == ISC_R_SUCCESS;
- result = dns_dbiterator_next(dbiter) ) {
- result = dns_dbiterator_current(dbiter, &node, name);
- check_dns_dbiterator_current(result);
- verifynode(name, node, ISC_FALSE, &keyset,
- ksk_algorithms, bad_algorithms);
- dns_db_detachnode(gdb, &node);
- }
- dns_dbiterator_destroy(&dbiter);
-
- dns_rdataset_disassociate(&keyset);
-
- /*
- * If we made it this far, we have what we consider a properly signed
- * zone. Set the good flag.
- */
- for (i = 0; i < 256; i++) {
- if (bad_algorithms[i] != 0) {
- if (first)
- fprintf(stderr, "The zone is not fully signed "
- "for the following algorithms:");
- dns_secalg_format(i, algbuf, sizeof(algbuf));
- fprintf(stderr, " %s", algbuf);
- first = ISC_FALSE;
- }
- }
- if (!first) {
- fprintf(stderr, ".\n");
- fatal("DNSSEC completeness test failed.");
- }
-
- if (goodksk || ignore_kskflag) {
- /*
- * Print the success summary.
- */
- fprintf(stderr, "Zone signing complete:\n");
- for (i = 0; i < 256; i++) {
- if ((ksk_algorithms[i] != 0) ||
- (standby_ksk[i] != 0) ||
- (revoked_zsk[i] != 0) ||
- (zsk_algorithms[i] != 0) ||
- (standby_zsk[i] != 0) ||
- (revoked_zsk[i] != 0)) {
- dns_secalg_format(i, algbuf, sizeof(algbuf));
- fprintf(stderr, "Algorithm: %s: KSKs: "
- "%u active, %u stand-by, %u revoked\n",
- algbuf, ksk_algorithms[i],
- standby_ksk[i], revoked_ksk[i]);
- fprintf(stderr, "%*sZSKs: "
- "%u active, %u %s, %u revoked\n",
- (int) strlen(algbuf) + 13, "",
- zsk_algorithms[i],
- standby_zsk[i],
- keyset_kskonly ? "present" : "stand-by",
- revoked_zsk[i]);
- }
- }
- }
-}
-
/*%
* Sign the apex of the zone.
* Note the origin may not be the first node if there are out of zone
@@ -1883,7 +1460,7 @@ assignwork(isc_task_t *task, isc_task_t *worker) {
if (dns_name_issubdomain(name, gorigin) &&
(zonecut == NULL ||
!dns_name_issubdomain(name, zonecut))) {
- if (delegation(name, node, NULL)) {
+ if (is_delegation(gdb, gversion, gorigin, name, node, NULL)) {
dns_fixedname_init(&fzonecut);
zonecut = dns_fixedname_name(&fzonecut);
dns_name_copy(name, zonecut, NULL);
@@ -2027,7 +1604,9 @@ add_ds(dns_name_t *name, dns_dbnode_t *node, isc_uint32_t nsttl) {
* Remove records of the given type and their signatures.
*/
static void
-remove_records(dns_dbnode_t *node, dns_rdatatype_t which) {
+remove_records(dns_dbnode_t *node, dns_rdatatype_t which,
+ isc_boolean_t checknsec)
+{
isc_result_t result;
dns_rdatatype_t type, covers;
dns_rdatasetiter_t *rdsiter = NULL;
@@ -2048,10 +1627,12 @@ remove_records(dns_dbnode_t *node, dns_rdatatype_t which) {
covers = rdataset.covers;
dns_rdataset_disassociate(&rdataset);
if (type == which || covers == which) {
- if (which == dns_rdatatype_nsec && !update_chain)
+ if (which == dns_rdatatype_nsec &&
+ checknsec && !update_chain)
fatal("Zone contains NSEC records. Use -u "
"to update to NSEC3.");
- if (which == dns_rdatatype_nsec3param && !update_chain)
+ if (which == dns_rdatatype_nsec3param &&
+ checknsec && !update_chain)
fatal("Zone contains NSEC3 chains. Use -u "
"to update to NSEC.");
result = dns_db_deleterdataset(gdb, node, gversion,
@@ -2063,6 +1644,39 @@ remove_records(dns_dbnode_t *node, dns_rdatatype_t which) {
dns_rdatasetiter_destroy(&rdsiter);
}
+/*
+ * Remove signatures covering the given type (0 == all signatures).
+ */
+static void
+remove_sigs(dns_dbnode_t *node, dns_rdatatype_t which) {
+ isc_result_t result;
+ dns_rdatatype_t type, covers;
+ dns_rdatasetiter_t *rdsiter = NULL;
+ dns_rdataset_t rdataset;
+
+ dns_rdataset_init(&rdataset);
+ result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter);
+ check_result(result, "dns_db_allrdatasets()");
+ for (result = dns_rdatasetiter_first(rdsiter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(rdsiter)) {
+ dns_rdatasetiter_current(rdsiter, &rdataset);
+ type = rdataset.type;
+ covers = rdataset.covers;
+ dns_rdataset_disassociate(&rdataset);
+
+ if (type == dns_rdatatype_rrsig &&
+ (covers == which || which == 0))
+ {
+ result = dns_db_deleterdataset(gdb, node, gversion,
+ type, covers);
+ check_result(result, "dns_db_deleterdataset()");
+ continue;
+ }
+ }
+ dns_rdatasetiter_destroy(&rdsiter);
+}
+
/*%
* Generate NSEC records for the zone and remove NSEC3/NSEC3PARAM records.
*/
@@ -2139,14 +1753,17 @@ nsecify(void) {
}
if (dns_name_equal(name, gorigin))
- remove_records(node, dns_rdatatype_nsec3param);
+ remove_records(node, dns_rdatatype_nsec3param,
+ ISC_TRUE);
- if (delegation(name, node, &nsttl)) {
+ if (is_delegation(gdb, gversion, gorigin, name, node, &nsttl)) {
zonecut = dns_fixedname_name(&fzonecut);
dns_name_copy(name, zonecut, NULL);
+ remove_sigs(node, 0);
if (generateds)
add_ds(name, node, nsttl);
}
+
result = dns_dbiterator_next(dbiter);
nextnode = NULL;
while (result == ISC_R_SUCCESS) {
@@ -2164,6 +1781,9 @@ nsecify(void) {
(zonecut != NULL &&
dns_name_issubdomain(nextname, zonecut)))
{
+ remove_sigs(nextnode, 0);
+ remove_records(nextnode, dns_rdatatype_nsec,
+ ISC_FALSE);
dns_db_detachnode(gdb, &nextnode);
result = dns_dbiterator_next(dbiter);
continue;
@@ -2555,7 +2175,7 @@ nsec3ify(unsigned int hashalg, unsigned int iterations,
}
if (dns_name_equal(name, gorigin))
- remove_records(node, dns_rdatatype_nsec);
+ remove_records(node, dns_rdatatype_nsec, ISC_TRUE);
result = dns_dbiterator_next(dbiter);
nextnode = NULL;
@@ -2572,13 +2192,17 @@ nsec3ify(unsigned int hashalg, unsigned int iterations,
if (!dns_name_issubdomain(nextname, gorigin) ||
(zonecut != NULL &&
dns_name_issubdomain(nextname, zonecut))) {
+ remove_sigs(nextnode, 0);
dns_db_detachnode(gdb, &nextnode);
result = dns_dbiterator_next(dbiter);
continue;
}
- if (delegation(nextname, nextnode, &nsttl)) {
+ if (is_delegation(gdb, gversion, gorigin,
+ nextname, nextnode, &nsttl))
+ {
zonecut = dns_fixedname_name(&fzonecut);
dns_name_copy(nextname, zonecut, NULL);
+ remove_sigs(nextnode, 0);
if (generateds)
add_ds(nextname, nextnode, nsttl);
if (OPTOUT(nsec3flags) &&
@@ -2704,7 +2328,9 @@ nsec3ify(unsigned int hashalg, unsigned int iterations,
result = dns_dbiterator_next(dbiter);
continue;
}
- if (delegation(nextname, nextnode, NULL)) {
+ if (is_delegation(gdb, gversion, gorigin,
+ nextname, nextnode, NULL))
+ {
zonecut = dns_fixedname_name(&fzonecut);
dns_name_copy(nextname, zonecut, NULL);
if (OPTOUT(nsec3flags) &&
@@ -3011,7 +2637,7 @@ set_nsec3params(isc_boolean_t update_chain, isc_boolean_t set_salt,
dns_rdata_nsec3_t nsec3;
dns_fixedname_t fname;
dns_name_t *hashname;
- unsigned char orig_salt[256];
+ unsigned char orig_salt[255];
size_t orig_saltlen;
dns_hash_t orig_hash;
isc_uint16_t orig_iter;
@@ -3277,10 +2903,16 @@ usage(void) {
fprintf(stderr, "update DS records based on child zones' "
"dsset-* files\n");
fprintf(stderr, "\t-s [YYYYMMDDHHMMSS|+offset]:\n");
- fprintf(stderr, "\t\tRRSIG start time - absolute|offset (now - 1 hour)\n");
+ fprintf(stderr, "\t\tRRSIG start time "
+ "- absolute|offset (now - 1 hour)\n");
fprintf(stderr, "\t-e [YYYYMMDDHHMMSS|+offset|\"now\"+offset]:\n");
- fprintf(stderr, "\t\tRRSIG end time - absolute|from start|from now "
+ fprintf(stderr, "\t\tRRSIG end time "
+ "- absolute|from start|from now "
"(now + 30 days)\n");
+ fprintf(stderr, "\t-X [YYYYMMDDHHMMSS|+offset|\"now\"+offset]:\n");
+ fprintf(stderr, "\t\tDNSKEY RRSIG end "
+ "- absolute|from start|from now "
+ "(matches -e)\n");
fprintf(stderr, "\t-i interval:\n");
fprintf(stderr, "\t\tcycle interval - resign "
"if < interval from end ( (end-start)/4 )\n");
@@ -3298,6 +2930,8 @@ usage(void) {
fprintf(stderr, "\t\tfile format of signed zone file (text)\n");
fprintf(stderr, "\t-N format:\n");
fprintf(stderr, "\t\tsoa serial format of signed zone file (keep)\n");
+ fprintf(stderr, "\t-D:\n");
+ fprintf(stderr, "\t\toutput only DNSSEC-related records\n");
fprintf(stderr, "\t-r randomdev:\n");
fprintf(stderr, "\t\ta file containing random data\n");
fprintf(stderr, "\t-a:\t");
@@ -3314,6 +2948,8 @@ usage(void) {
fprintf(stderr, "use pseudorandom data (faster but less secure)\n");
fprintf(stderr, "\t-P:\t");
fprintf(stderr, "disable post-sign verification\n");
+ fprintf(stderr, "\t-R:\t");
+ fprintf(stderr, "remove signatures from keys that no longer exist\n");
fprintf(stderr, "\t-T TTL:\tTTL for newly added DNSKEYs\n");
fprintf(stderr, "\t-t:\t");
fprintf(stderr, "print statistics\n");
@@ -3351,36 +2987,39 @@ print_stats(isc_time_t *timer_start, isc_time_t *timer_finish,
isc_uint64_t time_us; /* Time in microseconds */
isc_uint64_t time_ms; /* Time in milliseconds */
isc_uint64_t sig_ms; /* Signatures per millisecond */
+ FILE *out = output_stdout ? stderr : stdout;
- printf("Signatures generated: %10d\n", nsigned);
- printf("Signatures retained: %10d\n", nretained);
- printf("Signatures dropped: %10d\n", ndropped);
- printf("Signatures successfully verified: %10d\n", nverified);
- printf("Signatures unsuccessfully verified: %10d\n", nverifyfailed);
+ fprintf(out, "Signatures generated: %10d\n", nsigned);
+ fprintf(out, "Signatures retained: %10d\n", nretained);
+ fprintf(out, "Signatures dropped: %10d\n", ndropped);
+ fprintf(out, "Signatures successfully verified: %10d\n", nverified);
+ fprintf(out, "Signatures unsuccessfully "
+ "verified: %10d\n", nverifyfailed);
time_us = isc_time_microdiff(sign_finish, sign_start);
time_ms = time_us / 1000;
- printf("Signing time in seconds: %7u.%03u\n",
- (unsigned int) (time_ms / 1000),
- (unsigned int) (time_ms % 1000));
+ fprintf(out, "Signing time in seconds: %7u.%03u\n",
+ (unsigned int) (time_ms / 1000),
+ (unsigned int) (time_ms % 1000));
if (time_us > 0) {
sig_ms = ((isc_uint64_t)nsigned * 1000000000) / time_us;
- printf("Signatures per second: %7u.%03u\n",
- (unsigned int) sig_ms / 1000,
- (unsigned int) sig_ms % 1000);
+ fprintf(out, "Signatures per second: %7u.%03u\n",
+ (unsigned int) sig_ms / 1000,
+ (unsigned int) sig_ms % 1000);
}
time_us = isc_time_microdiff(timer_finish, timer_start);
time_ms = time_us / 1000;
- printf("Runtime in seconds: %7u.%03u\n",
- (unsigned int) (time_ms / 1000),
- (unsigned int) (time_ms % 1000));
+ fprintf(out, "Runtime in seconds: %7u.%03u\n",
+ (unsigned int) (time_ms / 1000),
+ (unsigned int) (time_ms % 1000));
}
int
main(int argc, char *argv[]) {
int i, ch;
char *startstr = NULL, *endstr = NULL, *classname = NULL;
+ char *dnskey_endstr = NULL;
char *origin = NULL, *file = NULL, *output = NULL;
char *inputformatstr = NULL, *outputformatstr = NULL;
char *serialformatstr = NULL;
@@ -3400,20 +3039,20 @@ main(int argc, char *argv[]) {
#endif
unsigned int eflags;
isc_boolean_t free_output = ISC_FALSE;
- int tempfilelen;
+ int tempfilelen = 0;
dns_rdataclass_t rdclass;
isc_task_t **tasks = NULL;
isc_buffer_t b;
int len;
hashlist_t hashlist;
- isc_boolean_t smartsign = ISC_FALSE;
isc_boolean_t make_keyset = ISC_FALSE;
isc_boolean_t set_salt = ISC_FALSE;
isc_boolean_t set_optout = ISC_FALSE;
isc_boolean_t set_iter = ISC_FALSE;
+ isc_boolean_t nonsecify = ISC_FALSE;
#define CMDLINE_FLAGS \
- "3:AaCc:Dd:E:e:f:FghH:i:I:j:K:k:l:m:n:N:o:O:pPr:s:ST:tuUv:xz"
+ "3:AaCc:Dd:E:e:f:FghH:i:I:j:K:k:L:l:m:n:N:o:O:PpRr:s:ST:tuUv:X:xzZ:"
/*
* Process memory debugging argument first.
@@ -3499,6 +3138,10 @@ main(int argc, char *argv[]) {
dsdir, isc_result_totext(result));
break;
+ case 'D':
+ output_dnssec_only = ISC_TRUE;
+ break;
+
case 'E':
engine = isc_commandline_argument;
break;
@@ -3509,6 +3152,8 @@ main(int argc, char *argv[]) {
case 'f':
output = isc_commandline_argument;
+ if (strcmp(output, "-") == 0)
+ output_stdout = ISC_TRUE;
break;
case 'g':
@@ -3557,6 +3202,17 @@ main(int argc, char *argv[]) {
dskeyfile[ndskeys++] = isc_commandline_argument;
break;
+ case 'L':
+ snset = ISC_TRUE;
+ endp = NULL;
+ serialnum = strtol(isc_commandline_argument, &endp, 0);
+ if (*endp != '\0') {
+ fprintf(stderr, "source serial number "
+ "must be numeric");
+ exit(1);
+ }
+ break;
+
case 'l':
len = strlen(isc_commandline_argument);
isc_buffer_init(&b, isc_commandline_argument, len);
@@ -3599,6 +3255,10 @@ main(int argc, char *argv[]) {
pseudorandom = ISC_TRUE;
break;
+ case 'R':
+ remove_orphans = ISC_TRUE;
+ break;
+
case 'r':
setup_entropy(mctx, isc_commandline_argument, &ectx);
break;
@@ -3636,6 +3296,10 @@ main(int argc, char *argv[]) {
fatal("verbose level must be numeric");
break;
+ case 'X':
+ dnskey_endstr = isc_commandline_argument;
+ break;
+
case 'x':
keyset_kskonly = ISC_TRUE;
break;
@@ -3658,6 +3322,10 @@ main(int argc, char *argv[]) {
fprintf(stderr, "%s: unhandled option -%c\n",
program, isc_commandline_option);
exit(1);
+ case 'Z': /* Undocumented test options */
+ if (!strcmp(isc_commandline_argument, "nonsecify"))
+ nonsecify = ISC_TRUE;
+ break;
}
}
@@ -3683,11 +3351,19 @@ main(int argc, char *argv[]) {
} else
starttime = now - 3600; /* Allow for some clock skew. */
- if (endstr != NULL) {
+ if (endstr != NULL)
endtime = strtotime(endstr, now, starttime);
- } else
+ else
endtime = starttime + (30 * 24 * 60 * 60);
+ if (dnskey_endstr != NULL) {
+ dnskey_endtime = strtotime(dnskey_endstr, now, starttime);
+ if (endstr != NULL && dnskey_endtime == endtime)
+ fprintf(stderr, "WARNING: -e and -X were both set, "
+ "but have identical values.\n");
+ } else
+ dnskey_endtime = endtime;
+
if (cycle == -1)
cycle = (endtime - starttime) / 4;
@@ -3730,16 +3406,36 @@ main(int argc, char *argv[]) {
inputformat = dns_masterformat_text;
else if (strcasecmp(inputformatstr, "raw") == 0)
inputformat = dns_masterformat_raw;
- else
- fatal("unknown file format: %s\n", inputformatstr);
+ else if (strncasecmp(inputformatstr, "raw=", 4) == 0) {
+ inputformat = dns_masterformat_raw;
+ fprintf(stderr,
+ "WARNING: input format version ignored\n");
+ } else
+ fatal("unknown file format: %s", inputformatstr);
+
}
if (outputformatstr != NULL) {
- if (strcasecmp(outputformatstr, "text") == 0)
+ if (strcasecmp(outputformatstr, "text") == 0) {
+ outputformat = dns_masterformat_text;
+ } else if (strcasecmp(outputformatstr, "full") == 0) {
outputformat = dns_masterformat_text;
- else if (strcasecmp(outputformatstr, "raw") == 0)
+ masterstyle = &dns_master_style_full;
+ } else if (strcasecmp(outputformatstr, "raw") == 0) {
outputformat = dns_masterformat_raw;
- else
+ } else if (strncasecmp(outputformatstr, "raw=", 4) == 0) {
+ char *end;
+ outputformat = dns_masterformat_raw;
+
+ outputformat = dns_masterformat_raw;
+ rawversion = strtol(outputformatstr + 4, &end, 10);
+ if (end == outputformatstr + 4 || *end != '\0' ||
+ rawversion > 1U) {
+ fprintf(stderr,
+ "unknown raw format version\n");
+ exit(1);
+ }
+ } else
fatal("unknown file format: %s\n", outputformatstr);
}
@@ -3756,6 +3452,12 @@ main(int argc, char *argv[]) {
serialformatstr);
}
+ if (output_dnssec_only && outputformat != dns_masterformat_text)
+ fatal("option -D can only be used with \"-O text\"\n");
+
+ if (output_dnssec_only && serialformat != SOA_SERIAL_KEEP)
+ fatal("option -D can only be used with \"-N keep\"\n");
+
result = dns_master_stylecreate(&dsstyle, DNS_STYLEFLAG_NO_TTL,
0, 24, 0, 0, 0, 8, mctx);
check_result(result, "dns_master_stylecreate");
@@ -3779,18 +3481,6 @@ main(int argc, char *argv[]) {
else
set_nsec3params(update_chain, set_salt, set_optout, set_iter);
- if (IS_NSEC3) {
- isc_boolean_t answer;
- hash_length = dns_nsec3_hashlength(dns_hash_sha1);
- hashlist_init(&hashlist, dns_db_nodecount(gdb) * 2,
- hash_length);
- result = dns_nsec_nseconly(gdb, gversion, &answer);
- check_result(result, "dns_nsec_nseconly");
- if (answer)
- fatal("NSEC3 generation requested with "
- "NSEC only DNSKEY");
- }
-
/*
* We need to do this early on, as we start messing with the list
* of keys rather early.
@@ -3843,6 +3533,22 @@ main(int argc, char *argv[]) {
if (IS_NSEC3) {
unsigned int max;
+ isc_boolean_t answer;
+
+ hash_length = dns_nsec3_hashlength(dns_hash_sha1);
+ hashlist_init(&hashlist, dns_db_nodecount(gdb) * 2,
+ hash_length);
+ result = dns_nsec_nseconly(gdb, gversion, &answer);
+ if (result == ISC_R_NOTFOUND)
+ fprintf(stderr, "%s: warning: NSEC3 generation "
+ "requested with no DNSKEY; ignoring\n",
+ program);
+ else if (result != ISC_R_SUCCESS)
+ check_result(result, "dns_nsec_nseconly");
+ else if (answer)
+ fatal("NSEC3 generation requested with "
+ "NSEC-only DNSKEY");
+
result = dns_nsec3_maxiterations(gdb, NULL, mctx, &max);
check_result(result, "dns_nsec3_maxiterations()");
if (nsec3iter > max)
@@ -3869,11 +3575,13 @@ main(int argc, char *argv[]) {
remove_duplicates();
- if (IS_NSEC3)
- nsec3ify(dns_hash_sha1, nsec3iter, salt, salt_length,
- &hashlist);
- else
- nsecify();
+ if (!nonsecify) {
+ if (IS_NSEC3)
+ nsec3ify(dns_hash_sha1, nsec3iter, salt, salt_length,
+ &hashlist);
+ else
+ nsecify();
+ }
if (!nokeys) {
writeset("dsset-", dns_rdatatype_ds);
@@ -3884,24 +3592,29 @@ main(int argc, char *argv[]) {
}
}
- tempfilelen = strlen(output) + 20;
- tempfile = isc_mem_get(mctx, tempfilelen);
- if (tempfile == NULL)
- fatal("out of memory");
+ if (output_stdout) {
+ fp = stdout;
+ if (outputformatstr == NULL)
+ masterstyle = &dns_master_style_full;
+ } else {
+ tempfilelen = strlen(output) + 20;
+ tempfile = isc_mem_get(mctx, tempfilelen);
+ if (tempfile == NULL)
+ fatal("out of memory");
- result = isc_file_mktemplate(output, tempfile, tempfilelen);
- check_result(result, "isc_file_mktemplate");
+ result = isc_file_mktemplate(output, tempfile, tempfilelen);
+ check_result(result, "isc_file_mktemplate");
- fp = NULL;
- if (outputformat == dns_masterformat_text)
- result = isc_file_openunique(tempfile, &fp);
- else
- result = isc_file_bopenunique(tempfile, &fp);
- if (result != ISC_R_SUCCESS)
- fatal("failed to open temporary output file: %s",
- isc_result_totext(result));
- removefile = ISC_TRUE;
- setfatalcallback(&removetempfile);
+ if (outputformat == dns_masterformat_text)
+ result = isc_file_openunique(tempfile, &fp);
+ else
+ result = isc_file_bopenunique(tempfile, &fp);
+ if (result != ISC_R_SUCCESS)
+ fatal("failed to open temporary output file: %s",
+ isc_result_totext(result));
+ removefile = ISC_TRUE;
+ setfatalcallback(&removetempfile);
+ }
print_time(fp);
print_version(fp);
@@ -3958,29 +3671,42 @@ main(int argc, char *argv[]) {
isc_mem_put(mctx, tasks, ntasks * sizeof(isc_task_t *));
postsign();
TIME_NOW(&sign_finish);
- verifyzone();
+
+ if (!disable_zone_check)
+ verifyzone(gdb, gversion, gorigin, mctx,
+ ignore_kskflag, keyset_kskonly);
if (outputformat != dns_masterformat_text) {
- result = dns_master_dumptostream2(mctx, gdb, gversion,
+ dns_masterrawheader_t header;
+ dns_master_initrawheader(&header);
+ if (rawversion == 0U)
+ header.flags = DNS_MASTERRAW_COMPAT;
+ else if (snset) {
+ header.flags = DNS_MASTERRAW_SOURCESERIALSET;
+ header.sourceserial = serialnum;
+ }
+ result = dns_master_dumptostream3(mctx, gdb, gversion,
masterstyle, outputformat,
- fp);
- check_result(result, "dns_master_dumptostream2");
+ &header, fp);
+ check_result(result, "dns_master_dumptostream3");
}
- result = isc_stdio_close(fp);
- check_result(result, "isc_stdio_close");
- removefile = ISC_FALSE;
-
- result = isc_file_rename(tempfile, output);
- if (result != ISC_R_SUCCESS)
- fatal("failed to rename temp file to %s: %s\n",
- output, isc_result_totext(result));
-
DESTROYLOCK(&namelock);
if (printstats)
DESTROYLOCK(&statslock);
- printf("%s\n", output);
+ if (!output_stdout) {
+ result = isc_stdio_close(fp);
+ check_result(result, "isc_stdio_close");
+ removefile = ISC_FALSE;
+
+ result = isc_file_rename(tempfile, output);
+ if (result != ISC_R_SUCCESS)
+ fatal("failed to rename temp file to %s: %s\n",
+ output, isc_result_totext(result));
+
+ printf("%s\n", output);
+ }
dns_db_closeversion(gdb, &gversion, ISC_FALSE);
dns_db_detach(&gdb);
@@ -3991,7 +3717,8 @@ main(int argc, char *argv[]) {
dns_dnsseckey_destroy(mctx, &key);
}
- isc_mem_put(mctx, tempfile, tempfilelen);
+ if (tempfilelen != 0)
+ isc_mem_put(mctx, tempfile, tempfilelen);
if (free_output)
isc_mem_free(mctx, output);
diff --git a/contrib/bind9/bin/dnssec/dnssec-signzone.docbook b/contrib/bind9/bin/dnssec/dnssec-signzone.docbook
index 128ebe96341b..e427fc1266bc 100644
--- a/contrib/bind9/bin/dnssec/dnssec-signzone.docbook
+++ b/contrib/bind9/bin/dnssec/dnssec-signzone.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: dnssec-signzone.docbook,v 1.44 2009/12/03 23:18:16 each Exp $ -->
+<!-- $Id: dnssec-signzone.docbook,v 1.52 2011/12/22 07:32:40 each Exp $ -->
<refentry id="man.dnssec-signzone">
<refentryinfo>
<date>June 05, 2009</date>
@@ -43,6 +43,7 @@
<year>2007</year>
<year>2008</year>
<year>2009</year>
+ <year>2011</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -60,6 +61,7 @@
<arg><option>-a</option></arg>
<arg><option>-c <replaceable class="parameter">class</replaceable></option></arg>
<arg><option>-d <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-D</option></arg>
<arg><option>-E <replaceable class="parameter">engine</replaceable></option></arg>
<arg><option>-e <replaceable class="parameter">end-time</replaceable></option></arg>
<arg><option>-f <replaceable class="parameter">output-file</replaceable></option></arg>
@@ -67,6 +69,7 @@
<arg><option>-h</option></arg>
<arg><option>-K <replaceable class="parameter">directory</replaceable></option></arg>
<arg><option>-k <replaceable class="parameter">key</replaceable></option></arg>
+ <arg><option>-L <replaceable class="parameter">serial</replaceable></option></arg>
<arg><option>-l <replaceable class="parameter">domain</replaceable></option></arg>
<arg><option>-i <replaceable class="parameter">interval</replaceable></option></arg>
<arg><option>-I <replaceable class="parameter">input-format</replaceable></option></arg>
@@ -74,8 +77,9 @@
<arg><option>-N <replaceable class="parameter">soa-serial-format</replaceable></option></arg>
<arg><option>-o <replaceable class="parameter">origin</replaceable></option></arg>
<arg><option>-O <replaceable class="parameter">output-format</replaceable></option></arg>
- <arg><option>-p</option></arg>
<arg><option>-P</option></arg>
+ <arg><option>-p</option></arg>
+ <arg><option>-R</option></arg>
<arg><option>-r <replaceable class="parameter">randomdev</replaceable></option></arg>
<arg><option>-S</option></arg>
<arg><option>-s <replaceable class="parameter">start-time</replaceable></option></arg>
@@ -83,6 +87,7 @@
<arg><option>-t</option></arg>
<arg><option>-u</option></arg>
<arg><option>-v <replaceable class="parameter">level</replaceable></option></arg>
+ <arg><option>-X <replaceable class="parameter">extended end-time</replaceable></option></arg>
<arg><option>-x</option></arg>
<arg><option>-z</option></arg>
<arg><option>-3 <replaceable class="parameter">salt</replaceable></option></arg>
@@ -152,6 +157,22 @@
</varlistentry>
<varlistentry>
+ <term>-D</term>
+ <listitem>
+ <para>
+ Output only those record types automatically managed by
+ <command>dnssec-signzone</command>, i.e. RRSIG, NSEC,
+ NSEC3 and NSEC3PARAM records. If smart signing
+ (<option>-S</option>) is used, DNSKEY records are also
+ included. The resulting file can be included in the original
+ zone file with <command>$INCLUDE</command>. This option
+ cannot be combined with <option>-O raw</option> or serial
+ number updating.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-E <replaceable class="parameter">engine</replaceable></term>
<listitem>
<para>
@@ -238,13 +259,40 @@
</varlistentry>
<varlistentry>
+ <term>-X <replaceable class="parameter">extended end-time</replaceable></term>
+ <listitem>
+ <para>
+ Specify the date and time when the generated RRSIG records
+ for the DNSKEY RRset will expire. This is to be used in cases
+ when the DNSKEY signatures need to persist longer than
+ signatures on other records; e.g., when the private component
+ of the KSK is kept offline and the KSK signature is to be
+ refreshed manually.
+ </para>
+ <para>
+ As with <option>start-time</option>, an absolute
+ time is indicated in YYYYMMDDHHMMSS notation. A time relative
+ to the start time is indicated with +N, which is N seconds from
+ the start time. A time relative to the current time is
+ indicated with now+N. If no <option>extended end-time</option> is
+ specified, the value of <option>end-time</option> is used as
+ the default. (<option>end-time</option>, in turn, defaults to
+ 30 days from the start time.) <option>extended end-time</option>
+ must be later than <option>start-time</option>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-f <replaceable class="parameter">output-file</replaceable></term>
<listitem>
<para>
The name of the output file containing the signed zone. The
default is to append <filename>.signed</filename> to
- the
- input filename.
+ the input filename. If <option>output-file</option> is
+ set to <literal>"-"</literal>, then the signed zone is
+ written to the standard output, with a default output
+ format of "full".
</para>
</listitem>
</varlistentry>
@@ -325,6 +373,17 @@
</varlistentry>
<varlistentry>
+ <term>-L <replaceable class="parameter">serial</replaceable></term>
+ <listitem>
+ <para>
+ When writing a signed zone to 'raw' format, set the "source serial"
+ value in the header to the specified serial number. (This is
+ expected to be used primarily for testing purposes.)
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-n <replaceable class="parameter">ncpus</replaceable></term>
<listitem>
<para>
@@ -388,7 +447,15 @@
<para>
The format of the output file containing the signed zone.
Possible formats are <command>"text"</command> (default)
- and <command>"raw"</command>.
+ <command>"full"</command>, which is text output in a
+ format suitable for processing by external scripts,
+ and <command>"raw"</command> or <command>"raw=N"</command>,
+ which store the zone in a binary format for rapid loading
+ by <command>named</command>. <command>"raw=N"</command>
+ specifies the format version of the raw zone file: if N
+ is 0, the raw file can be read by any version of
+ <command>named</command>; if N is 1, the file can be
+ read by release 9.9.0 or higher. The default is 1.
</para>
</listitem>
</varlistentry>
@@ -422,6 +489,24 @@
</varlistentry>
<varlistentry>
+ <term>-R</term>
+ <listitem>
+ <para>
+ Remove signatures from keys that no longer exist.
+ </para>
+ <para>
+ Normally, when a previously-signed zone is passed as input
+ to the signer, and a DNSKEY record has been removed and
+ replaced with a new one, signatures from the old key
+ that are still within their validity period are retained.
+ This allows the zone to continue to validate with cached
+ copies of the old DNSKEY RRset. The <option>-R</option> forces
+ <command>dnssec-signzone</command> to remove all orphaned
+ signatures.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term>-r <replaceable class="parameter">randomdev</replaceable></term>
<listitem>
<para>
@@ -508,15 +593,17 @@
<term>-T <replaceable class="parameter">ttl</replaceable></term>
<listitem>
<para>
- Specifies the TTL to be used for new DNSKEY records imported
- into the zone from the key repository. If not specified,
- the default is the minimum TTL value from the zone's SOA
+ Specifies a TTL to be used for new DNSKEY records imported
+ into the zone from the key repository. If not
+ specified, the default is the TTL value from the zone's SOA
record. This option is ignored when signing without
<option>-S</option>, since DNSKEY records are not imported
from the key repository in that case. It is also ignored if
there are any pre-existing DNSKEY records at the zone apex,
in which case new records' TTL values will be set to match
- them.
+ them, or if any of the imported DNSKEY records had a default
+ TTL value. In the event of a a conflict between TTL values in
+ imported keys, the shortest one is used.
</para>
</listitem>
</varlistentry>
diff --git a/contrib/bind9/bin/dnssec/dnssec-signzone.html b/contrib/bind9/bin/dnssec/dnssec-signzone.html
index 82185c6477d5..37994539b605 100644
--- a/contrib/bind9/bin/dnssec/dnssec-signzone.html
+++ b/contrib/bind9/bin/dnssec/dnssec-signzone.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -29,10 +29,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-p</code>] [<code class="option">-P</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-t</code>] [<code class="option">-u</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] [<code class="option">-3 <em class="replaceable"><code>salt</code></em></code>] [<code class="option">-H <em class="replaceable"><code>iterations</code></em></code>] [<code class="option">-A</code>] {zonefile} [key...]</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-P</code>] [<code class="option">-p</code>] [<code class="option">-R</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-t</code>] [<code class="option">-u</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-X <em class="replaceable"><code>extended end-time</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] [<code class="option">-3 <em class="replaceable"><code>salt</code></em></code>] [<code class="option">-H <em class="replaceable"><code>iterations</code></em></code>] [<code class="option">-A</code>] {zonefile} [key...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543597"></a><h2>DESCRIPTION</h2>
+<a name="id2543626"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-signzone</strong></span>
signs a zone. It generates
NSEC and RRSIG records and produces a signed version of the
@@ -43,7 +43,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543612"></a><h2>OPTIONS</h2>
+<a name="id2543641"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd><p>
@@ -67,6 +67,17 @@
Look for <code class="filename">dsset-</code> or
<code class="filename">keyset-</code> files in <code class="option">directory</code>.
</p></dd>
+<dt><span class="term">-D</span></dt>
+<dd><p>
+ Output only those record types automatically managed by
+ <span><strong class="command">dnssec-signzone</strong></span>, i.e. RRSIG, NSEC,
+ NSEC3 and NSEC3PARAM records. If smart signing
+ (<code class="option">-S</code>) is used, DNSKEY records are also
+ included. The resulting file can be included in the original
+ zone file with <span><strong class="command">$INCLUDE</strong></span>. This option
+ cannot be combined with <code class="option">-O raw</code> or serial
+ number updating.
+ </p></dd>
<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
<dd><p>
Uses a crypto hardware (OpenSSL engine) for the crypto operations
@@ -118,12 +129,36 @@
<code class="option">end-time</code> must be later than
<code class="option">start-time</code>.
</p></dd>
+<dt><span class="term">-X <em class="replaceable"><code>extended end-time</code></em></span></dt>
+<dd>
+<p>
+ Specify the date and time when the generated RRSIG records
+ for the DNSKEY RRset will expire. This is to be used in cases
+ when the DNSKEY signatures need to persist longer than
+ signatures on other records; e.g., when the private component
+ of the KSK is kept offline and the KSK signature is to be
+ refreshed manually.
+ </p>
+<p>
+ As with <code class="option">start-time</code>, an absolute
+ time is indicated in YYYYMMDDHHMMSS notation. A time relative
+ to the start time is indicated with +N, which is N seconds from
+ the start time. A time relative to the current time is
+ indicated with now+N. If no <code class="option">extended end-time</code> is
+ specified, the value of <code class="option">end-time</code> is used as
+ the default. (<code class="option">end-time</code>, in turn, defaults to
+ 30 days from the start time.) <code class="option">extended end-time</code>
+ must be later than <code class="option">start-time</code>.
+ </p>
+</dd>
<dt><span class="term">-f <em class="replaceable"><code>output-file</code></em></span></dt>
<dd><p>
The name of the output file containing the signed zone. The
default is to append <code class="filename">.signed</code> to
- the
- input filename.
+ the input filename. If <code class="option">output-file</code> is
+ set to <code class="literal">"-"</code>, then the signed zone is
+ written to the standard output, with a default output
+ format of "full".
</p></dd>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -184,6 +219,12 @@
validators need to refetch at mostly the same time.
</p>
</dd>
+<dt><span class="term">-L <em class="replaceable"><code>serial</code></em></span></dt>
+<dd><p>
+ When writing a signed zone to 'raw' format, set the "source serial"
+ value in the header to the specified serial number. (This is
+ expected to be used primarily for testing purposes.)
+ </p></dd>
<dt><span class="term">-n <em class="replaceable"><code>ncpus</code></em></span></dt>
<dd><p>
Specifies the number of threads to use. By default, one
@@ -217,7 +258,15 @@
<dd><p>
The format of the output file containing the signed zone.
Possible formats are <span><strong class="command">"text"</strong></span> (default)
- and <span><strong class="command">"raw"</strong></span>.
+ <span><strong class="command">"full"</strong></span>, which is text output in a
+ format suitable for processing by external scripts,
+ and <span><strong class="command">"raw"</strong></span> or <span><strong class="command">"raw=N"</strong></span>,
+ which store the zone in a binary format for rapid loading
+ by <span><strong class="command">named</strong></span>. <span><strong class="command">"raw=N"</strong></span>
+ specifies the format version of the raw zone file: if N
+ is 0, the raw file can be read by any version of
+ <span><strong class="command">named</strong></span>; if N is 1, the file can be
+ read by release 9.9.0 or higher. The default is 1.
</p></dd>
<dt><span class="term">-p</span></dt>
<dd><p>
@@ -239,6 +288,22 @@
This option skips these tests.
</p>
</dd>
+<dt><span class="term">-R</span></dt>
+<dd>
+<p>
+ Remove signatures from keys that no longer exist.
+ </p>
+<p>
+ Normally, when a previously-signed zone is passed as input
+ to the signer, and a DNSKEY record has been removed and
+ replaced with a new one, signatures from the old key
+ that are still within their validity period are retained.
+ This allows the zone to continue to validate with cached
+ copies of the old DNSKEY RRset. The <code class="option">-R</code> forces
+ <span><strong class="command">dnssec-signzone</strong></span> to remove all orphaned
+ signatures.
+ </p>
+</dd>
<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
<dd><p>
Specifies the source of randomness. If the operating
@@ -297,15 +362,17 @@
</dd>
<dt><span class="term">-T <em class="replaceable"><code>ttl</code></em></span></dt>
<dd><p>
- Specifies the TTL to be used for new DNSKEY records imported
- into the zone from the key repository. If not specified,
- the default is the minimum TTL value from the zone's SOA
+ Specifies a TTL to be used for new DNSKEY records imported
+ into the zone from the key repository. If not
+ specified, the default is the TTL value from the zone's SOA
record. This option is ignored when signing without
<code class="option">-S</code>, since DNSKEY records are not imported
from the key repository in that case. It is also ignored if
there are any pre-existing DNSKEY records at the zone apex,
in which case new records' TTL values will be set to match
- them.
+ them, or if any of the imported DNSKEY records had a default
+ TTL value. In the event of a a conflict between TTL values in
+ imported keys, the shortest one is used.
</p></dd>
<dt><span class="term">-t</span></dt>
<dd><p>
@@ -379,7 +446,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544965"></a><h2>EXAMPLE</h2>
+<a name="id2545127"></a><h2>EXAMPLE</h2>
<p>
The following command signs the <strong class="userinput"><code>example.com</code></strong>
zone with the DSA key generated by <span><strong class="command">dnssec-keygen</strong></span>
@@ -409,14 +476,14 @@ db.example.com.signed
%</pre>
</div>
<div class="refsect1" lang="en">
-<a name="id2545020"></a><h2>SEE ALSO</h2>
+<a name="id2545182"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 4033</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545045"></a><h2>AUTHOR</h2>
+<a name="id2545207"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/dnssec/dnssec-verify.8 b/contrib/bind9/bin/dnssec/dnssec-verify.8
new file mode 100644
index 000000000000..1de88fa03a2d
--- /dev/null
+++ b/contrib/bind9/bin/dnssec/dnssec-verify.8
@@ -0,0 +1,97 @@
+.\" Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+.\"
+.\" Permission to use, copy, modify, and/or distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+.\" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+.\" AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+.\" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+.\" LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+.\" PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\" $Id$
+.\"
+.hy 0
+.ad l
+.\" Title: dnssec\-verify
+.\" Author:
+.\" Generator: DocBook XSL Stylesheets v1.71.1 <http://docbook.sf.net/>
+.\" Date: April 12, 2012
+.\" Manual: BIND9
+.\" Source: BIND9
+.\"
+.TH "DNSSEC\-VERIFY" "8" "April 12, 2012" "BIND9" "BIND9"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+dnssec\-verify \- DNSSEC zone verification tool
+.SH "SYNOPSIS"
+.HP 14
+\fBdnssec\-verify\fR [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-I\ \fR\fB\fIinput\-format\fR\fR] [\fB\-o\ \fR\fB\fIorigin\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-x\fR] [\fB\-z\fR] {zonefile}
+.SH "DESCRIPTION"
+.PP
+\fBdnssec\-verify\fR
+verifies that a zone is fully signed for each algorithm found in the DNSKEY RRset for the zone, and that the NSEC / NSEC3 chains are complete.
+.SH "OPTIONS"
+.PP
+\-c \fIclass\fR
+.RS 4
+Specifies the DNS class of the zone.
+.RE
+.PP
+\-I \fIinput\-format\fR
+.RS 4
+The format of the input zone file. Possible formats are
+\fB"text"\fR
+(default) and
+\fB"raw"\fR. This option is primarily intended to be used for dynamic signed zones so that the dumped zone file in a non\-text format containing updates can be verified independently. The use of this option does not make much sense for non\-dynamic zones.
+.RE
+.PP
+\-o \fIorigin\fR
+.RS 4
+The zone origin. If not specified, the name of the zone file is assumed to be the origin.
+.RE
+.PP
+\-v \fIlevel\fR
+.RS 4
+Sets the debugging level.
+.RE
+.PP
+\-x
+.RS 4
+Only verify that the DNSKEY RRset is signed with key\-signing keys. Without this flag, it is assumed that the DNSKEY RRset will be signed by all active keys. When this flag is set, it will not be an error if the DNSKEY RRset is not signed by zone\-signing keys. This corresponds to the
+\fB\-x\fR
+option in
+\fBdnssec\-signzone\fR.
+.RE
+.PP
+\-z
+.RS 4
+Ignore the KSK flag on the keys when determining whether the zone if correctly signed. Without this flag it is assumed that there will be a non\-revoked, self\-signed DNSKEY with the KSK flag set for each algorithm and that RRsets other than DNSKEY RRset will be signed with a different DNSKEY without the KSK flag set.
+.sp
+With this flag set, we only require that for each algorithm, there will be at least one non\-revoked, self\-signed DNSKEY, regardless of the KSK flag state, and that other RRsets will be signed by a non\-revoked key for the same algorithm that includes the self\-signed key; the same key may be used for both purposes. This corresponds to the
+\fB\-z\fR
+option in
+\fBdnssec\-signzone\fR.
+.RE
+.PP
+zonefile
+.RS 4
+The file containing the zone to be signed.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBdnssec\-signzone\fR(8),
+BIND 9 Administrator Reference Manual,
+RFC 4033.
+.SH "AUTHOR"
+.PP
+Internet Systems Consortium
+.SH "COPYRIGHT"
+Copyright \(co 2012 Internet Systems Consortium, Inc. ("ISC")
+.br
diff --git a/contrib/bind9/bin/dnssec/dnssec-verify.c b/contrib/bind9/bin/dnssec/dnssec-verify.c
new file mode 100644
index 000000000000..682896cb768c
--- /dev/null
+++ b/contrib/bind9/bin/dnssec/dnssec-verify.c
@@ -0,0 +1,328 @@
+/*
+ * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: dnssec-verify.c,v 1.1.2.1 2011/03/16 06:37:51 each Exp $ */
+
+/*! \file */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <time.h>
+
+#include <isc/app.h>
+#include <isc/base32.h>
+#include <isc/commandline.h>
+#include <isc/entropy.h>
+#include <isc/event.h>
+#include <isc/file.h>
+#include <isc/hash.h>
+#include <isc/hex.h>
+#include <isc/mem.h>
+#include <isc/mutex.h>
+#include <isc/os.h>
+#include <isc/print.h>
+#include <isc/random.h>
+#include <isc/rwlock.h>
+#include <isc/serial.h>
+#include <isc/stdio.h>
+#include <isc/stdlib.h>
+#include <isc/string.h>
+#include <isc/time.h>
+#include <isc/util.h>
+
+#include <dns/db.h>
+#include <dns/dbiterator.h>
+#include <dns/diff.h>
+#include <dns/dnssec.h>
+#include <dns/ds.h>
+#include <dns/fixedname.h>
+#include <dns/keyvalues.h>
+#include <dns/log.h>
+#include <dns/master.h>
+#include <dns/masterdump.h>
+#include <dns/nsec.h>
+#include <dns/nsec3.h>
+#include <dns/rdata.h>
+#include <dns/rdatalist.h>
+#include <dns/rdataset.h>
+#include <dns/rdataclass.h>
+#include <dns/rdatasetiter.h>
+#include <dns/rdatastruct.h>
+#include <dns/rdatatype.h>
+#include <dns/result.h>
+#include <dns/soa.h>
+#include <dns/time.h>
+
+#include <dst/dst.h>
+
+#include "dnssectool.h"
+
+const char *program = "dnssec-verify";
+int verbose;
+
+static isc_stdtime_t now;
+static isc_mem_t *mctx = NULL;
+static isc_entropy_t *ectx = NULL;
+static dns_masterformat_t inputformat = dns_masterformat_text;
+static dns_db_t *gdb; /* The database */
+static dns_dbversion_t *gversion; /* The database version */
+static dns_rdataclass_t gclass; /* The class */
+static dns_name_t *gorigin; /* The database origin */
+static isc_boolean_t ignore_kskflag = ISC_FALSE;
+static isc_boolean_t keyset_kskonly = ISC_FALSE;
+
+/*%
+ * Load the zone file from disk
+ */
+static void
+loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) {
+ isc_buffer_t b;
+ int len;
+ dns_fixedname_t fname;
+ dns_name_t *name;
+ isc_result_t result;
+
+ len = strlen(origin);
+ isc_buffer_init(&b, origin, len);
+ isc_buffer_add(&b, len);
+
+ dns_fixedname_init(&fname);
+ name = dns_fixedname_name(&fname);
+ result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL);
+ if (result != ISC_R_SUCCESS)
+ fatal("failed converting name '%s' to dns format: %s",
+ origin, isc_result_totext(result));
+
+ result = dns_db_create(mctx, "rbt", name, dns_dbtype_zone,
+ rdclass, 0, NULL, db);
+ check_result(result, "dns_db_create()");
+
+ result = dns_db_load2(*db, file, inputformat);
+ if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE)
+ fatal("failed loading zone from '%s': %s",
+ file, isc_result_totext(result));
+}
+
+ISC_PLATFORM_NORETURN_PRE static void
+usage(void) ISC_PLATFORM_NORETURN_POST;
+
+static void
+usage(void) {
+ fprintf(stderr, "Usage:\n");
+ fprintf(stderr, "\t%s [options] zonefile [keys]\n", program);
+
+ fprintf(stderr, "\n");
+
+ fprintf(stderr, "Version: %s\n", VERSION);
+
+ fprintf(stderr, "Options: (default value in parenthesis) \n");
+ fprintf(stderr, "\t-v debuglevel (0)\n");
+ fprintf(stderr, "\t-o origin:\n");
+ fprintf(stderr, "\t\tzone origin (name of zonefile)\n");
+ fprintf(stderr, "\t-I format:\n");
+ fprintf(stderr, "\t\tfile format of input zonefile (text)\n");
+ fprintf(stderr, "\t-c class (IN)\n");
+ fprintf(stderr, "\t-E engine:\n");
+#ifdef USE_PKCS11
+ fprintf(stderr, "\t\tname of an OpenSSL engine to use "
+ "(default is \"pkcs11\")\n");
+#else
+ fprintf(stderr, "\t\tname of an OpenSSL engine to use\n");
+#endif
+ fprintf(stderr, "\t-x:\tDNSKEY record signed with KSKs only, "
+ "not ZSKs\n");
+ fprintf(stderr, "\t-z:\tAll records signed with KSKs\n");
+ exit(0);
+}
+
+int
+main(int argc, char *argv[]) {
+ char *origin = NULL, *file = NULL;
+ char *inputformatstr = NULL;
+ isc_result_t result;
+ isc_log_t *log = NULL;
+#ifdef USE_PKCS11
+ const char *engine = "pkcs11";
+#else
+ const char *engine = NULL;
+#endif
+ char *classname = NULL;
+ dns_rdataclass_t rdclass;
+ char ch, *endp;
+
+#define CMDLINE_FLAGS \
+ "m:o:I:c:E:v:xz"
+
+ /*
+ * Process memory debugging argument first.
+ */
+ while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
+ switch (ch) {
+ case 'm':
+ if (strcasecmp(isc_commandline_argument, "record") == 0)
+ isc_mem_debugging |= ISC_MEM_DEBUGRECORD;
+ if (strcasecmp(isc_commandline_argument, "trace") == 0)
+ isc_mem_debugging |= ISC_MEM_DEBUGTRACE;
+ if (strcasecmp(isc_commandline_argument, "usage") == 0)
+ isc_mem_debugging |= ISC_MEM_DEBUGUSAGE;
+ if (strcasecmp(isc_commandline_argument, "size") == 0)
+ isc_mem_debugging |= ISC_MEM_DEBUGSIZE;
+ if (strcasecmp(isc_commandline_argument, "mctx") == 0)
+ isc_mem_debugging |= ISC_MEM_DEBUGCTX;
+ break;
+ default:
+ break;
+ }
+ }
+ isc_commandline_reset = ISC_TRUE;
+ check_result(isc_app_start(), "isc_app_start");
+
+ result = isc_mem_create(0, 0, &mctx);
+ if (result != ISC_R_SUCCESS)
+ fatal("out of memory");
+
+ dns_result_register();
+
+ isc_commandline_errprint = ISC_FALSE;
+
+ while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
+ switch (ch) {
+ case 'c':
+ classname = isc_commandline_argument;
+ break;
+
+ case 'E':
+ engine = isc_commandline_argument;
+ break;
+
+ case 'h':
+ usage();
+ break;
+
+ case 'I':
+ inputformatstr = isc_commandline_argument;
+ break;
+
+ case 'm':
+ break;
+
+ case 'o':
+ origin = isc_commandline_argument;
+ break;
+
+ case 'v':
+ endp = NULL;
+ verbose = strtol(isc_commandline_argument, &endp, 0);
+ if (*endp != '\0')
+ fatal("verbose level must be numeric");
+ break;
+
+ case 'x':
+ keyset_kskonly = ISC_TRUE;
+ break;
+
+ case 'z':
+ ignore_kskflag = ISC_TRUE;
+ break;
+
+ case '?':
+ if (isc_commandline_option != '?')
+ fprintf(stderr, "%s: invalid argument -%c\n",
+ program, isc_commandline_option);
+ usage();
+ break;
+
+ default:
+ fprintf(stderr, "%s: unhandled option -%c\n",
+ program, isc_commandline_option);
+ exit(1);
+ }
+ }
+
+ if (ectx == NULL)
+ setup_entropy(mctx, NULL, &ectx);
+
+ result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (result != ISC_R_SUCCESS)
+ fatal("could not create hash context");
+
+ result = dst_lib_init2(mctx, ectx, engine, ISC_ENTROPY_BLOCKING);
+ if (result != ISC_R_SUCCESS)
+ fatal("could not initialize dst: %s",
+ isc_result_totext(result));
+
+ isc_stdtime_get(&now);
+
+ rdclass = strtoclass(classname);
+
+ setup_logging(verbose, mctx, &log);
+
+ argc -= isc_commandline_index;
+ argv += isc_commandline_index;
+
+ if (argc < 1)
+ usage();
+
+ file = argv[0];
+
+ argc -= 1;
+ argv += 1;
+
+ POST(argc);
+ POST(argv);
+
+ if (origin == NULL)
+ origin = file;
+
+ if (inputformatstr != NULL) {
+ if (strcasecmp(inputformatstr, "text") == 0)
+ inputformat = dns_masterformat_text;
+ else if (strcasecmp(inputformatstr, "raw") == 0)
+ inputformat = dns_masterformat_raw;
+ else
+ fatal("unknown file format: %s\n", inputformatstr);
+ }
+
+ gdb = NULL;
+ fprintf(stderr, "Loading zone '%s' from file '%s'\n", origin, file);
+ loadzone(file, origin, rdclass, &gdb);
+ gorigin = dns_db_origin(gdb);
+ gclass = dns_db_class(gdb);
+
+ gversion = NULL;
+ result = dns_db_newversion(gdb, &gversion);
+ check_result(result, "dns_db_newversion()");
+
+ verifyzone(gdb, gversion, gorigin, mctx,
+ ignore_kskflag, keyset_kskonly);
+
+ dns_db_closeversion(gdb, &gversion, ISC_FALSE);
+ dns_db_detach(&gdb);
+
+ cleanup_logging(&log);
+ dst_lib_destroy();
+ isc_hash_destroy();
+ cleanup_entropy(&ectx);
+ dns_name_destroy();
+ if (verbose > 10)
+ isc_mem_stats(mctx, stdout);
+ isc_mem_destroy(&mctx);
+
+ (void) isc_app_finish();
+
+ return (0);
+}
diff --git a/contrib/bind9/bin/dnssec/dnssec-verify.docbook b/contrib/bind9/bin/dnssec/dnssec-verify.docbook
new file mode 100644
index 000000000000..0835df1d5ea3
--- /dev/null
+++ b/contrib/bind9/bin/dnssec/dnssec-verify.docbook
@@ -0,0 +1,185 @@
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
+ [<!ENTITY mdash "&#8212;">]>
+<!--
+ - Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ -
+ - Permission to use, copy, modify, and/or distribute this software for any
+ - purpose with or without fee is hereby granted, provided that the above
+ - copyright notice and this permission notice appear in all copies.
+ -
+ - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ - PERFORMANCE OF THIS SOFTWARE.
+-->
+
+<!-- $Id: dnssec-verify.docbook,v 1.52 2011/12/22 07:32:40 each Exp $ -->
+<refentry id="man.dnssec-verify">
+ <refentryinfo>
+ <date>April 12, 2012</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle><application>dnssec-verify</application></refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo>BIND9</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname><application>dnssec-verify</application></refname>
+ <refpurpose>DNSSEC zone verification tool</refpurpose>
+ </refnamediv>
+
+ <docinfo>
+ <copyright>
+ <year>2012</year>
+ <holder>Internet Systems Consortium, Inc. ("ISC")</holder>
+ </copyright>
+ </docinfo>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>dnssec-verify</command>
+ <arg><option>-c <replaceable class="parameter">class</replaceable></option></arg>
+ <arg><option>-E <replaceable class="parameter">engine</replaceable></option></arg>
+ <arg><option>-I <replaceable class="parameter">input-format</replaceable></option></arg>
+ <arg><option>-o <replaceable class="parameter">origin</replaceable></option></arg>
+ <arg><option>-v <replaceable class="parameter">level</replaceable></option></arg>
+ <arg><option>-x</option></arg>
+ <arg><option>-z</option></arg>
+ <arg choice="req">zonefile</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>DESCRIPTION</title>
+ <para><command>dnssec-verify</command>
+ verifies that a zone is fully signed for each algorithm found
+ in the DNSKEY RRset for the zone, and that the NSEC / NSEC3
+ chains are complete.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>OPTIONS</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>-c <replaceable class="parameter">class</replaceable></term>
+ <listitem>
+ <para>
+ Specifies the DNS class of the zone.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-I <replaceable class="parameter">input-format</replaceable></term>
+ <listitem>
+ <para>
+ The format of the input zone file.
+ Possible formats are <command>"text"</command> (default)
+ and <command>"raw"</command>.
+ This option is primarily intended to be used for dynamic
+ signed zones so that the dumped zone file in a non-text
+ format containing updates can be verified independently.
+ The use of this option does not make much sense for
+ non-dynamic zones.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-o <replaceable class="parameter">origin</replaceable></term>
+ <listitem>
+ <para>
+ The zone origin. If not specified, the name of the zone file
+ is assumed to be the origin.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-v <replaceable class="parameter">level</replaceable></term>
+ <listitem>
+ <para>
+ Sets the debugging level.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-x</term>
+ <listitem>
+ <para>
+ Only verify that the DNSKEY RRset is signed with key-signing
+ keys. Without this flag, it is assumed that the DNSKEY RRset
+ will be signed by all active keys. When this flag is set,
+ it will not be an error if the DNSKEY RRset is not signed
+ by zone-signing keys. This corresponds to the <option>-x</option>
+ option in <command>dnssec-signzone</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-z</term>
+ <listitem>
+ <para>
+ Ignore the KSK flag on the keys when determining whether
+ the zone if correctly signed. Without this flag it is
+ assumed that there will be a non-revoked, self-signed
+ DNSKEY with the KSK flag set for each algorithm and
+ that RRsets other than DNSKEY RRset will be signed with
+ a different DNSKEY without the KSK flag set.
+ </para>
+ <para>
+ With this flag set, we only require that for each algorithm,
+ there will be at least one non-revoked, self-signed DNSKEY,
+ regardless of the KSK flag state, and that other RRsets
+ will be signed by a non-revoked key for the same algorithm
+ that includes the self-signed key; the same key may be used
+ for both purposes. This corresponds to the <option>-z</option>
+ option in <command>dnssec-signzone</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>zonefile</term>
+ <listitem>
+ <para>
+ The file containing the zone to be signed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>dnssec-signzone</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citetitle>BIND 9 Administrator Reference Manual</citetitle>,
+ <citetitle>RFC 4033</citetitle>.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>AUTHOR</title>
+ <para><corpauthor>Internet Systems Consortium</corpauthor>
+ </para>
+ </refsect1>
+
+</refentry><!--
+ - Local variables:
+ - mode: sgml
+ - End:
+-->
diff --git a/contrib/bind9/bin/dnssec/dnssec-verify.html b/contrib/bind9/bin/dnssec/dnssec-verify.html
new file mode 100644
index 000000000000..135556f51001
--- /dev/null
+++ b/contrib/bind9/bin/dnssec/dnssec-verify.html
@@ -0,0 +1,117 @@
+<!--
+ - Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ -
+ - Permission to use, copy, modify, and/or distribute this software for any
+ - purpose with or without fee is hereby granted, provided that the above
+ - copyright notice and this permission notice appear in all copies.
+ -
+ - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ - PERFORMANCE OF THIS SOFTWARE.
+-->
+<!-- $Id$ -->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>dnssec-verify</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en">
+<a name="man.dnssec-verify"></a><div class="titlepage"></div>
+<div class="refnamediv">
+<h2>Name</h2>
+<p><span class="application">dnssec-verify</span> &#8212; DNSSEC zone verification tool</p>
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="cmdsynopsis"><p><code class="command">dnssec-verify</code> [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] {zonefile}</p></div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2543390"></a><h2>DESCRIPTION</h2>
+<p><span><strong class="command">dnssec-verify</strong></span>
+ verifies that a zone is fully signed for each algorithm found
+ in the DNSKEY RRset for the zone, and that the NSEC / NSEC3
+ chains are complete.
+ </p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2543402"></a><h2>OPTIONS</h2>
+<div class="variablelist"><dl>
+<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
+<dd><p>
+ Specifies the DNS class of the zone.
+ </p></dd>
+<dt><span class="term">-I <em class="replaceable"><code>input-format</code></em></span></dt>
+<dd><p>
+ The format of the input zone file.
+ Possible formats are <span><strong class="command">"text"</strong></span> (default)
+ and <span><strong class="command">"raw"</strong></span>.
+ This option is primarily intended to be used for dynamic
+ signed zones so that the dumped zone file in a non-text
+ format containing updates can be verified independently.
+ The use of this option does not make much sense for
+ non-dynamic zones.
+ </p></dd>
+<dt><span class="term">-o <em class="replaceable"><code>origin</code></em></span></dt>
+<dd><p>
+ The zone origin. If not specified, the name of the zone file
+ is assumed to be the origin.
+ </p></dd>
+<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
+<dd><p>
+ Sets the debugging level.
+ </p></dd>
+<dt><span class="term">-x</span></dt>
+<dd><p>
+ Only verify that the DNSKEY RRset is signed with key-signing
+ keys. Without this flag, it is assumed that the DNSKEY RRset
+ will be signed by all active keys. When this flag is set,
+ it will not be an error if the DNSKEY RRset is not signed
+ by zone-signing keys. This corresponds to the <code class="option">-x</code>
+ option in <span><strong class="command">dnssec-signzone</strong></span>.
+ </p></dd>
+<dt><span class="term">-z</span></dt>
+<dd>
+<p>
+ Ignore the KSK flag on the keys when determining whether
+ the zone if correctly signed. Without this flag it is
+ assumed that there will be a non-revoked, self-signed
+ DNSKEY with the KSK flag set for each algorithm and
+ that RRsets other than DNSKEY RRset will be signed with
+ a different DNSKEY without the KSK flag set.
+ </p>
+<p>
+ With this flag set, we only require that for each algorithm,
+ there will be at least one non-revoked, self-signed DNSKEY,
+ regardless of the KSK flag state, and that other RRsets
+ will be signed by a non-revoked key for the same algorithm
+ that includes the self-signed key; the same key may be used
+ for both purposes. This corresponds to the <code class="option">-z</code>
+ option in <span><strong class="command">dnssec-signzone</strong></span>.
+ </p>
+</dd>
+<dt><span class="term">zonefile</span></dt>
+<dd><p>
+ The file containing the zone to be signed.
+ </p></dd>
+</dl></div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2543543"></a><h2>SEE ALSO</h2>
+<p>
+ <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
+ <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
+ <em class="citetitle">RFC 4033</em>.
+ </p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2543637"></a><h2>AUTHOR</h2>
+<p><span class="corpauthor">Internet Systems Consortium</span>
+ </p>
+</div>
+</div></body>
+</html>
diff --git a/contrib/bind9/bin/dnssec/dnssectool.c b/contrib/bind9/bin/dnssec/dnssectool.c
index 882b042f1b8e..7c8c6ce2254a 100644
--- a/contrib/bind9/bin/dnssec/dnssectool.c
+++ b/contrib/bind9/bin/dnssec/dnssectool.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssectool.c,v 1.60.162.3 2011/10/21 03:56:32 marka Exp $ */
+/* $Id: dnssectool.c,v 1.63 2011/10/21 03:55:33 marka Exp $ */
/*! \file */
@@ -27,9 +27,11 @@
#include <stdlib.h>
+#include <isc/base32.h>
#include <isc/buffer.h>
#include <isc/dir.h>
#include <isc/entropy.h>
+#include <isc/heap.h>
#include <isc/list.h>
#include <isc/mem.h>
#include <isc/string.h>
@@ -37,12 +39,19 @@
#include <isc/util.h>
#include <isc/print.h>
+#include <dns/db.h>
+#include <dns/dbiterator.h>
#include <dns/dnssec.h>
+#include <dns/fixedname.h>
#include <dns/keyvalues.h>
#include <dns/log.h>
#include <dns/name.h>
+#include <dns/nsec.h>
+#include <dns/nsec3.h>
#include <dns/rdatastruct.h>
#include <dns/rdataclass.h>
+#include <dns/rdataset.h>
+#include <dns/rdatasetiter.h>
#include <dns/rdatatype.h>
#include <dns/result.h>
#include <dns/secalg.h>
@@ -50,6 +59,18 @@
#include "dnssectool.h"
+static isc_heap_t *expected_chains, *found_chains;
+
+struct nsec3_chain_fixed {
+ isc_uint8_t hash;
+ isc_uint8_t salt_length;
+ isc_uint8_t next_length;
+ isc_uint16_t iterations;
+ /* unsigned char salt[0]; */
+ /* unsigned char owner[0]; */
+ /* unsigned char next[0]; */
+};
+
extern int verbose;
extern const char *program;
@@ -467,3 +488,1314 @@ key_collision(dst_key_t *dstkey, dns_name_t *name, const char *dir,
return (conflict);
}
+
+isc_boolean_t
+is_delegation(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ dns_name_t *name, dns_dbnode_t *node, isc_uint32_t *ttlp)
+{
+ dns_rdataset_t nsset;
+ isc_result_t result;
+
+ if (dns_name_equal(name, origin))
+ return (ISC_FALSE);
+
+ dns_rdataset_init(&nsset);
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_ns,
+ 0, 0, &nsset, NULL);
+ if (dns_rdataset_isassociated(&nsset)) {
+ if (ttlp != NULL)
+ *ttlp = nsset.ttl;
+ dns_rdataset_disassociate(&nsset);
+ }
+
+ return (ISC_TF(result == ISC_R_SUCCESS));
+}
+
+static isc_boolean_t
+goodsig(dns_name_t *origin, dns_rdata_t *sigrdata, dns_name_t *name,
+ dns_rdataset_t *keyrdataset, dns_rdataset_t *rdataset, isc_mem_t *mctx)
+{
+ dns_rdata_dnskey_t key;
+ dns_rdata_rrsig_t sig;
+ dst_key_t *dstkey = NULL;
+ isc_result_t result;
+
+ result = dns_rdata_tostruct(sigrdata, &sig, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+
+ for (result = dns_rdataset_first(keyrdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(keyrdataset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_current(keyrdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &key, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ result = dns_dnssec_keyfromrdata(origin, &rdata, mctx,
+ &dstkey);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_FALSE);
+ if (sig.algorithm != key.algorithm ||
+ sig.keyid != dst_key_id(dstkey) ||
+ !dns_name_equal(&sig.signer, origin)) {
+ dst_key_free(&dstkey);
+ continue;
+ }
+ result = dns_dnssec_verify(name, rdataset, dstkey, ISC_FALSE,
+ mctx, sigrdata);
+ dst_key_free(&dstkey);
+ if (result == ISC_R_SUCCESS)
+ return(ISC_TRUE);
+ }
+ return (ISC_FALSE);
+}
+
+static isc_result_t
+verifynsec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_dbnode_t *node, dns_name_t *nextname)
+{
+ unsigned char buffer[DNS_NSEC_BUFFERSIZE];
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char nextbuf[DNS_NAME_FORMATSIZE];
+ char found[DNS_NAME_FORMATSIZE];
+ dns_rdataset_t rdataset;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdata_t tmprdata = DNS_RDATA_INIT;
+ dns_rdata_nsec_t nsec;
+ isc_result_t result;
+
+ dns_rdataset_init(&rdataset);
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec,
+ 0, 0, &rdataset, NULL);
+ if (result != ISC_R_SUCCESS) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fprintf(stderr, "Missing NSEC record for %s\n", namebuf);
+ goto failure;
+ }
+
+ result = dns_rdataset_first(&rdataset);
+ check_result(result, "dns_rdataset_first()");
+
+ dns_rdataset_current(&rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &nsec, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ /* Check bit next name is consistent */
+ if (!dns_name_equal(&nsec.next, nextname)) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(nextname, nextbuf, sizeof(nextbuf));
+ dns_name_format(&nsec.next, found, sizeof(found));
+ fprintf(stderr, "Bad NSEC record for %s, next name "
+ "mismatch (expected:%s, found:%s)\n", namebuf,
+ nextbuf, found);
+ goto failure;
+ }
+ /* Check bit map is consistent */
+ result = dns_nsec_buildrdata(db, ver, node, nextname, buffer,
+ &tmprdata);
+ check_result(result, "dns_nsec_buildrdata()");
+ if (dns_rdata_compare(&rdata, &tmprdata) != 0) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fprintf(stderr, "Bad NSEC record for %s, bit map "
+ "mismatch\n", namebuf);
+ goto failure;
+ }
+ result = dns_rdataset_next(&rdataset);
+ if (result != ISC_R_NOMORE) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fprintf(stderr, "Multipe NSEC records for %s\n", namebuf);
+ goto failure;
+
+ }
+ dns_rdataset_disassociate(&rdataset);
+ return (ISC_R_SUCCESS);
+ failure:
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ return (ISC_R_FAILURE);
+}
+
+static void
+check_no_rrsig(dns_db_t *db, dns_dbversion_t *ver, dns_rdataset_t *rdataset,
+ dns_name_t *name, dns_dbnode_t *node)
+{
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char typebuf[80];
+ dns_rdataset_t sigrdataset;
+ dns_rdatasetiter_t *rdsiter = NULL;
+ isc_result_t result;
+
+ dns_rdataset_init(&sigrdataset);
+ result = dns_db_allrdatasets(db, node, ver, 0, &rdsiter);
+ check_result(result, "dns_db_allrdatasets()");
+ for (result = dns_rdatasetiter_first(rdsiter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(rdsiter)) {
+ dns_rdatasetiter_current(rdsiter, &sigrdataset);
+ if (sigrdataset.type == dns_rdatatype_rrsig &&
+ sigrdataset.covers == rdataset->type)
+ break;
+ dns_rdataset_disassociate(&sigrdataset);
+ }
+ if (result == ISC_R_SUCCESS) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ type_format(rdataset->type, typebuf, sizeof(typebuf));
+ fprintf(stderr, "Warning: Found unexpected signatures for "
+ "%s/%s\n", namebuf, typebuf);
+ }
+ if (dns_rdataset_isassociated(&sigrdataset))
+ dns_rdataset_disassociate(&sigrdataset);
+ dns_rdatasetiter_destroy(&rdsiter);
+}
+
+static isc_boolean_t
+chain_compare(void *arg1, void *arg2) {
+ struct nsec3_chain_fixed *e1 = arg1, *e2 = arg2;
+ size_t len;
+
+ /*
+ * Do each element in turn to get a stable sort.
+ */
+ if (e1->hash < e2->hash)
+ return (ISC_TRUE);
+ if (e1->hash > e2->hash)
+ return (ISC_FALSE);
+ if (e1->iterations < e2->iterations)
+ return (ISC_TRUE);
+ if (e1->iterations > e2->iterations)
+ return (ISC_FALSE);
+ if (e1->salt_length < e2->salt_length)
+ return (ISC_TRUE);
+ if (e1->salt_length > e2->salt_length)
+ return (ISC_FALSE);
+ if (e1->next_length < e2->next_length)
+ return (ISC_TRUE);
+ if (e1->next_length > e2->next_length)
+ return (ISC_FALSE);
+ len = e1->salt_length + 2 * e1->next_length;
+ if (memcmp(e1 + 1, e2 + 1, len) < 0)
+ return (ISC_TRUE);
+ return (ISC_FALSE);
+}
+
+static isc_boolean_t
+chain_equal(struct nsec3_chain_fixed *e1, struct nsec3_chain_fixed *e2) {
+ size_t len;
+
+ if (e1->hash != e2->hash)
+ return (ISC_FALSE);
+ if (e1->iterations != e2->iterations)
+ return (ISC_FALSE);
+ if (e1->salt_length != e2->salt_length)
+ return (ISC_FALSE);
+ if (e1->next_length != e2->next_length)
+ return (ISC_FALSE);
+ len = e1->salt_length + 2 * e1->next_length;
+ if (memcmp(e1 + 1, e2 + 1, len) != 0)
+ return (ISC_FALSE);
+ return (ISC_TRUE);
+}
+
+static isc_result_t
+record_nsec3(const unsigned char *rawhash, const dns_rdata_nsec3_t *nsec3,
+ isc_mem_t *mctx, isc_heap_t *chains)
+{
+ struct nsec3_chain_fixed *element;
+ size_t len;
+ unsigned char *cp;
+ isc_result_t result;
+
+ len = sizeof(*element) + nsec3->next_length * 2 + nsec3->salt_length;
+
+ element = isc_mem_get(mctx, len);
+ if (element == NULL)
+ return (ISC_R_NOMEMORY);
+ memset(element, 0, len);
+ element->hash = nsec3->hash;
+ element->salt_length = nsec3->salt_length;
+ element->next_length = nsec3->next_length;
+ element->iterations = nsec3->iterations;
+ cp = (unsigned char *)(element + 1);
+ memcpy(cp, nsec3->salt, nsec3->salt_length);
+ cp += nsec3->salt_length;
+ memcpy(cp, rawhash, nsec3->next_length);
+ cp += nsec3->next_length;
+ memcpy(cp, nsec3->next, nsec3->next_length);
+ result = isc_heap_insert(chains, element);
+ if (result != ISC_R_SUCCESS) {
+ fprintf(stderr, "isc_heap_insert failed: %s\n",
+ isc_result_totext(result));
+ isc_mem_put(mctx, element, len);
+ }
+ return (result);
+}
+
+static isc_result_t
+match_nsec3(dns_name_t *name, isc_mem_t *mctx,
+ dns_rdata_nsec3param_t *nsec3param, dns_rdataset_t *rdataset,
+ unsigned char types[8192], unsigned int maxtype,
+ unsigned char *rawhash, size_t rhsize)
+{
+ unsigned char cbm[8244];
+ char namebuf[DNS_NAME_FORMATSIZE];
+ dns_rdata_nsec3_t nsec3;
+ isc_result_t result;
+ unsigned int len;
+
+ /*
+ * Find matching NSEC3 record.
+ */
+ for (result = dns_rdataset_first(rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(rdataset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_current(rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &nsec3, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ if (nsec3.hash == nsec3param->hash &&
+ nsec3.next_length == rhsize &&
+ nsec3.iterations == nsec3param->iterations &&
+ nsec3.salt_length == nsec3param->salt_length &&
+ memcmp(nsec3.salt, nsec3param->salt,
+ nsec3param->salt_length) == 0)
+ break;
+ }
+ if (result != ISC_R_SUCCESS) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fprintf(stderr, "Missing NSEC3 record for %s\n", namebuf);
+ return (result);
+ }
+
+ /*
+ * Check the type list.
+ */
+ len = dns_nsec_compressbitmap(cbm, types, maxtype);
+ if (nsec3.len != len || memcmp(cbm, nsec3.typebits, len) != 0) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fprintf(stderr, "Bad NSEC3 record for %s, bit map "
+ "mismatch\n", namebuf);
+ return (ISC_R_FAILURE);
+ }
+
+ /*
+ * Record chain.
+ */
+ result = record_nsec3(rawhash, &nsec3, mctx, expected_chains);
+ check_result(result, "record_nsec3()");
+
+ /*
+ * Make sure there is only one NSEC3 record with this set of
+ * parameters.
+ */
+ for (result = dns_rdataset_next(rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(rdataset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_current(rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &nsec3, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ if (nsec3.hash == nsec3param->hash &&
+ nsec3.iterations == nsec3param->iterations &&
+ nsec3.salt_length == nsec3param->salt_length &&
+ memcmp(nsec3.salt, nsec3param->salt,
+ nsec3.salt_length) == 0) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fprintf(stderr, "Multiple NSEC3 records with the "
+ "same parameter set for %s", namebuf);
+ result = DNS_R_DUPLICATE;
+ break;
+ }
+ }
+ if (result != ISC_R_NOMORE)
+ return (result);
+
+ result = ISC_R_SUCCESS;
+ return (result);
+}
+
+static isc_boolean_t
+innsec3params(dns_rdata_nsec3_t *nsec3, dns_rdataset_t *nsec3paramset) {
+ dns_rdata_nsec3param_t nsec3param;
+ isc_result_t result;
+
+ for (result = dns_rdataset_first(nsec3paramset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(nsec3paramset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+
+ dns_rdataset_current(nsec3paramset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &nsec3param, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ if (nsec3param.flags == 0 &&
+ nsec3param.hash == nsec3->hash &&
+ nsec3param.iterations == nsec3->iterations &&
+ nsec3param.salt_length == nsec3->salt_length &&
+ memcmp(nsec3param.salt, nsec3->salt,
+ nsec3->salt_length) == 0)
+ return (ISC_TRUE);
+ }
+ return (ISC_FALSE);
+}
+
+static isc_result_t
+record_found(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
+ dns_name_t *name, dns_dbnode_t *node,
+ dns_rdataset_t *nsec3paramset)
+{
+ unsigned char owner[NSEC3_MAX_HASH_LENGTH];
+ dns_rdata_nsec3_t nsec3;
+ dns_rdataset_t rdataset;
+ dns_label_t hashlabel;
+ isc_buffer_t b;
+ isc_result_t result;
+
+ if (nsec3paramset == NULL || !dns_rdataset_isassociated(nsec3paramset))
+ return (ISC_R_SUCCESS);
+
+ dns_rdataset_init(&rdataset);
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec3,
+ 0, 0, &rdataset, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_R_SUCCESS);
+
+ dns_name_getlabel(name, 0, &hashlabel);
+ isc_region_consume(&hashlabel, 1);
+ isc_buffer_init(&b, owner, sizeof(owner));
+ result = isc_base32hex_decoderegion(&hashlabel, &b);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+ for (result = dns_rdataset_first(&rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&rdataset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_current(&rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &nsec3, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ if (nsec3.next_length != isc_buffer_usedlength(&b))
+ continue;
+ /*
+ * We only care about NSEC3 records that match a NSEC3PARAM
+ * record.
+ */
+ if (!innsec3params(&nsec3, nsec3paramset))
+ continue;
+
+ /*
+ * Record chain.
+ */
+ result = record_nsec3(owner, &nsec3, mctx, found_chains);
+ check_result(result, "record_nsec3()");
+ }
+
+ cleanup:
+ dns_rdataset_disassociate(&rdataset);
+ return (ISC_R_SUCCESS);
+}
+
+static isc_boolean_t
+isoptout(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ dns_rdata_t *nsec3rdata)
+{
+ dns_rdataset_t rdataset;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdata_nsec3_t nsec3;
+ dns_rdata_nsec3param_t nsec3param;
+ dns_fixedname_t fixed;
+ dns_name_t *hashname;
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ unsigned char rawhash[NSEC3_MAX_HASH_LENGTH];
+ size_t rhsize = sizeof(rawhash);
+ isc_boolean_t ret;
+
+ result = dns_rdata_tostruct(nsec3rdata, &nsec3param, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+
+ dns_fixedname_init(&fixed);
+ result = dns_nsec3_hashname(&fixed, rawhash, &rhsize, origin, origin,
+ nsec3param.hash, nsec3param.iterations,
+ nsec3param.salt, nsec3param.salt_length);
+ check_result(result, "dns_nsec3_hashname()");
+
+ dns_rdataset_init(&rdataset);
+ hashname = dns_fixedname_name(&fixed);
+ result = dns_db_findnsec3node(db, hashname, ISC_FALSE, &node);
+ if (result == ISC_R_SUCCESS)
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec3,
+ 0, 0, &rdataset, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_FALSE);
+
+ result = dns_rdataset_first(&rdataset);
+ check_result(result, "dns_rdataset_first()");
+
+ dns_rdataset_current(&rdataset, &rdata);
+
+ result = dns_rdata_tostruct(&rdata, &nsec3, NULL);
+ if (result != ISC_R_SUCCESS)
+ ret = ISC_FALSE;
+ else
+ ret = ISC_TF((nsec3.flags & DNS_NSEC3FLAG_OPTOUT) != 0);
+
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+
+ return (ret);
+}
+
+static isc_result_t
+verifynsec3(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ isc_mem_t *mctx, dns_name_t *name, dns_rdata_t *rdata,
+ isc_boolean_t delegation, isc_boolean_t empty,
+ unsigned char types[8192], unsigned int maxtype)
+{
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char hashbuf[DNS_NAME_FORMATSIZE];
+ dns_rdataset_t rdataset;
+ dns_rdata_nsec3param_t nsec3param;
+ dns_fixedname_t fixed;
+ dns_name_t *hashname;
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ unsigned char rawhash[NSEC3_MAX_HASH_LENGTH];
+ size_t rhsize = sizeof(rawhash);
+ isc_boolean_t optout;
+
+ result = dns_rdata_tostruct(rdata, &nsec3param, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+
+ if (nsec3param.flags != 0)
+ return (ISC_R_SUCCESS);
+
+ if (!dns_nsec3_supportedhash(nsec3param.hash))
+ return (ISC_R_SUCCESS);
+
+ optout = isoptout(db, ver, origin, rdata);
+
+ dns_fixedname_init(&fixed);
+ result = dns_nsec3_hashname(&fixed, rawhash, &rhsize, name, origin,
+ nsec3param.hash, nsec3param.iterations,
+ nsec3param.salt, nsec3param.salt_length);
+ check_result(result, "dns_nsec3_hashname()");
+
+ /*
+ * We don't use dns_db_find() here as it works with the choosen
+ * nsec3 chain and we may also be called with uncommitted data
+ * from dnssec-signzone so the secure status of the zone may not
+ * be up to date.
+ */
+ dns_rdataset_init(&rdataset);
+ hashname = dns_fixedname_name(&fixed);
+ result = dns_db_findnsec3node(db, hashname, ISC_FALSE, &node);
+ if (result == ISC_R_SUCCESS)
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec3,
+ 0, 0, &rdataset, NULL);
+ if (result != ISC_R_SUCCESS &&
+ (!delegation || (empty && !optout) ||
+ (!empty && dns_nsec_isset(types, dns_rdatatype_ds))))
+ {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(hashname, hashbuf, sizeof(hashbuf));
+ fprintf(stderr, "Missing NSEC3 record for %s (%s)\n",
+ namebuf, hashbuf);
+ } else if (result == ISC_R_NOTFOUND &&
+ delegation && (!empty || optout))
+ {
+ result = ISC_R_SUCCESS;
+ } else if (result == ISC_R_SUCCESS) {
+ result = match_nsec3(name, mctx, &nsec3param, &rdataset,
+ types, maxtype, rawhash, rhsize);
+ }
+
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+static isc_result_t
+verifynsec3s(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ isc_mem_t *mctx, dns_name_t *name, dns_rdataset_t *nsec3paramset,
+ isc_boolean_t delegation, isc_boolean_t empty,
+ unsigned char types[8192], unsigned int maxtype)
+{
+ isc_result_t result;
+
+ for (result = dns_rdataset_first(nsec3paramset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(nsec3paramset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+
+ dns_rdataset_current(nsec3paramset, &rdata);
+ result = verifynsec3(db, ver, origin, mctx, name, &rdata,
+ delegation, empty, types, maxtype);
+ if (result != ISC_R_SUCCESS)
+ break;
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+ return (result);
+}
+
+static void
+verifyset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ isc_mem_t *mctx, dns_rdataset_t *rdataset, dns_name_t *name,
+ dns_dbnode_t *node, dns_rdataset_t *keyrdataset,
+ unsigned char *act_algorithms, unsigned char *bad_algorithms)
+{
+ unsigned char set_algorithms[256];
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char algbuf[80];
+ char typebuf[80];
+ dns_rdataset_t sigrdataset;
+ dns_rdatasetiter_t *rdsiter = NULL;
+ isc_result_t result;
+ int i;
+
+ dns_rdataset_init(&sigrdataset);
+ result = dns_db_allrdatasets(db, node, ver, 0, &rdsiter);
+ check_result(result, "dns_db_allrdatasets()");
+ for (result = dns_rdatasetiter_first(rdsiter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(rdsiter)) {
+ dns_rdatasetiter_current(rdsiter, &sigrdataset);
+ if (sigrdataset.type == dns_rdatatype_rrsig &&
+ sigrdataset.covers == rdataset->type)
+ break;
+ dns_rdataset_disassociate(&sigrdataset);
+ }
+ if (result != ISC_R_SUCCESS) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ type_format(rdataset->type, typebuf, sizeof(typebuf));
+ fprintf(stderr, "No signatures for %s/%s\n", namebuf, typebuf);
+ for (i = 0; i < 256; i++)
+ if (act_algorithms[i] != 0)
+ bad_algorithms[i] = 1;
+ dns_rdatasetiter_destroy(&rdsiter);
+ return;
+ }
+
+ memset(set_algorithms, 0, sizeof(set_algorithms));
+ for (result = dns_rdataset_first(&sigrdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&sigrdataset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdata_rrsig_t sig;
+
+ dns_rdataset_current(&sigrdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &sig, NULL);
+ check_result(result, "dns_rdata_tostruct()");
+ if (rdataset->ttl != sig.originalttl) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ type_format(rdataset->type, typebuf, sizeof(typebuf));
+ fprintf(stderr, "TTL mismatch for %s %s keytag %u\n",
+ namebuf, typebuf, sig.keyid);
+ continue;
+ }
+ if ((set_algorithms[sig.algorithm] != 0) ||
+ (act_algorithms[sig.algorithm] == 0))
+ continue;
+ if (goodsig(origin, &rdata, name, keyrdataset, rdataset, mctx))
+ set_algorithms[sig.algorithm] = 1;
+ }
+ dns_rdatasetiter_destroy(&rdsiter);
+ if (memcmp(set_algorithms, act_algorithms, sizeof(set_algorithms))) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ type_format(rdataset->type, typebuf, sizeof(typebuf));
+ for (i = 0; i < 256; i++)
+ if ((act_algorithms[i] != 0) &&
+ (set_algorithms[i] == 0)) {
+ dns_secalg_format(i, algbuf, sizeof(algbuf));
+ fprintf(stderr, "No correct %s signature for "
+ "%s %s\n", algbuf, namebuf, typebuf);
+ bad_algorithms[i] = 1;
+ }
+ }
+ dns_rdataset_disassociate(&sigrdataset);
+}
+
+static isc_result_t
+verifynode(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ isc_mem_t *mctx, dns_name_t *name, dns_dbnode_t *node,
+ isc_boolean_t delegation, dns_rdataset_t *keyrdataset,
+ unsigned char *act_algorithms, unsigned char *bad_algorithms,
+ dns_rdataset_t *nsecset, dns_rdataset_t *nsec3paramset,
+ dns_name_t *nextname)
+{
+ unsigned char types[8192];
+ unsigned int maxtype = 0;
+ dns_rdataset_t rdataset; dns_rdatasetiter_t *rdsiter = NULL;
+ isc_result_t result, tresult;
+
+ memset(types, 0, sizeof(types));
+ result = dns_db_allrdatasets(db, node, ver, 0, &rdsiter);
+ check_result(result, "dns_db_allrdatasets()");
+ result = dns_rdatasetiter_first(rdsiter);
+ dns_rdataset_init(&rdataset);
+ while (result == ISC_R_SUCCESS) {
+ dns_rdatasetiter_current(rdsiter, &rdataset);
+ /*
+ * If we are not at a delegation then everything should be
+ * signed. If we are at a delegation then only the DS set
+ * is signed. The NS set is not signed at a delegation but
+ * its existance is recorded in the bit map. Anything else
+ * other than NSEC and DS is not signed at a delegation.
+ */
+ if (rdataset.type != dns_rdatatype_rrsig &&
+ rdataset.type != dns_rdatatype_dnskey &&
+ (!delegation || rdataset.type == dns_rdatatype_ds ||
+ rdataset.type == dns_rdatatype_nsec)) {
+ verifyset(db, ver, origin, mctx, &rdataset,
+ name, node, keyrdataset,
+ act_algorithms, bad_algorithms);
+ dns_nsec_setbit(types, rdataset.type, 1);
+ if (rdataset.type > maxtype)
+ maxtype = rdataset.type;
+ } else if (rdataset.type != dns_rdatatype_rrsig &&
+ rdataset.type != dns_rdatatype_dnskey) {
+ if (rdataset.type == dns_rdatatype_ns)
+ dns_nsec_setbit(types, rdataset.type, 1);
+ check_no_rrsig(db, ver, &rdataset, name, node);
+ } else
+ dns_nsec_setbit(types, rdataset.type, 1);
+ dns_rdataset_disassociate(&rdataset);
+ result = dns_rdatasetiter_next(rdsiter);
+ }
+ if (result != ISC_R_NOMORE)
+ fatal("rdataset iteration failed: %s",
+ isc_result_totext(result));
+ dns_rdatasetiter_destroy(&rdsiter);
+
+ result = ISC_R_SUCCESS;
+
+ if (nsecset != NULL && dns_rdataset_isassociated(nsecset))
+ result = verifynsec(db, ver, name, node, nextname);
+
+ if (nsec3paramset != NULL && dns_rdataset_isassociated(nsec3paramset)) {
+ tresult = verifynsec3s(db, ver, origin, mctx, name,
+ nsec3paramset, delegation, ISC_FALSE,
+ types, maxtype);
+ if (result == ISC_R_SUCCESS && tresult != ISC_R_SUCCESS)
+ result = tresult;
+ }
+ return (result);
+}
+
+static isc_boolean_t
+is_empty(dns_db_t *db, dns_dbversion_t *ver, dns_dbnode_t *node) {
+ dns_rdatasetiter_t *rdsiter = NULL;
+ isc_result_t result;
+
+ result = dns_db_allrdatasets(db, node, ver, 0, &rdsiter);
+ check_result(result, "dns_db_allrdatasets()");
+ result = dns_rdatasetiter_first(rdsiter);
+ dns_rdatasetiter_destroy(&rdsiter);
+ if (result == ISC_R_NOMORE)
+ return (ISC_TRUE);
+ return (ISC_FALSE);
+}
+
+static void
+check_no_nsec(dns_name_t *name, dns_dbnode_t *node, dns_db_t *db,
+ dns_dbversion_t *ver)
+{
+ dns_rdataset_t rdataset;
+ isc_result_t result;
+
+ dns_rdataset_init(&rdataset);
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec,
+ 0, 0, &rdataset, NULL);
+ if (result != ISC_R_NOTFOUND) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ fatal("unexpected NSEC RRset at %s\n", namebuf);
+ }
+
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+}
+
+static isc_boolean_t
+newchain(const struct nsec3_chain_fixed *first,
+ const struct nsec3_chain_fixed *e)
+{
+ if (first->hash != e->hash ||
+ first->iterations != e->iterations ||
+ first->salt_length != e->salt_length ||
+ first->next_length != e->next_length ||
+ memcmp(first + 1, e + 1, first->salt_length) != 0)
+ return (ISC_TRUE);
+ return (ISC_FALSE);
+}
+
+static void
+free_element(isc_mem_t *mctx, struct nsec3_chain_fixed *e) {
+ size_t len;
+
+ len = sizeof(*e) + e->salt_length + 2 * e->next_length;
+ isc_mem_put(mctx, e, len);
+}
+
+static isc_boolean_t
+checknext(const struct nsec3_chain_fixed *first,
+ const struct nsec3_chain_fixed *e)
+{
+ char buf[512];
+ const unsigned char *d1 = (const unsigned char *)(first + 1);
+ const unsigned char *d2 = (const unsigned char *)(e + 1);
+ isc_buffer_t b;
+ isc_region_t sr;
+
+ d1 += first->salt_length + first->next_length;
+ d2 += e->salt_length;
+
+ if (memcmp(d1, d2, first->next_length) == 0)
+ return (ISC_TRUE);
+
+ DE_CONST(d1 - first->next_length, sr.base);
+ sr.length = first->next_length;
+ isc_buffer_init(&b, buf, sizeof(buf));
+ isc_base32hex_totext(&sr, 1, "", &b);
+ fprintf(stderr, "Break in NSEC3 chain at: %.*s\n",
+ (int) isc_buffer_usedlength(&b), buf);
+
+ DE_CONST(d1, sr.base);
+ sr.length = first->next_length;
+ isc_buffer_init(&b, buf, sizeof(buf));
+ isc_base32hex_totext(&sr, 1, "", &b);
+ fprintf(stderr, "Expected: %.*s\n", (int) isc_buffer_usedlength(&b),
+ buf);
+
+ DE_CONST(d2, sr.base);
+ sr.length = first->next_length;
+ isc_buffer_init(&b, buf, sizeof(buf));
+ isc_base32hex_totext(&sr, 1, "", &b);
+ fprintf(stderr, "Found: %.*s\n", (int) isc_buffer_usedlength(&b), buf);
+
+ return (ISC_FALSE);
+}
+
+#define EXPECTEDANDFOUND "Expected and found NSEC3 chains not equal\n"
+
+static isc_result_t
+verify_nsec3_chains(isc_mem_t *mctx) {
+ isc_result_t result = ISC_R_SUCCESS;
+ struct nsec3_chain_fixed *e, *f = NULL;
+ struct nsec3_chain_fixed *first = NULL, *prev = NULL;
+
+ while ((e = isc_heap_element(expected_chains, 1)) != NULL) {
+ isc_heap_delete(expected_chains, 1);
+ if (f == NULL)
+ f = isc_heap_element(found_chains, 1);
+ if (f != NULL) {
+ isc_heap_delete(found_chains, 1);
+
+ /*
+ * Check that they match.
+ */
+ if (chain_equal(e, f)) {
+ free_element(mctx, f);
+ f = NULL;
+ } else {
+ if (result == ISC_R_SUCCESS)
+ fprintf(stderr, EXPECTEDANDFOUND);
+ result = ISC_R_FAILURE;
+ /*
+ * Attempt to resync found_chain.
+ */
+ while (f != NULL && !chain_compare(e, f)) {
+ free_element(mctx, f);
+ f = isc_heap_element(found_chains, 1);
+ if (f != NULL)
+ isc_heap_delete(found_chains, 1);
+ if (f != NULL && chain_equal(e, f)) {
+ free_element(mctx, f);
+ f = NULL;
+ break;
+ }
+ }
+ }
+ } else if (result == ISC_R_SUCCESS) {
+ fprintf(stderr, EXPECTEDANDFOUND);
+ result = ISC_R_FAILURE;
+ }
+ if (first == NULL || newchain(first, e)) {
+ if (prev != NULL) {
+ if (!checknext(prev, first))
+ result = ISC_R_FAILURE;
+ if (prev != first)
+ free_element(mctx, prev);
+ }
+ if (first != NULL)
+ free_element(mctx, first);
+ prev = first = e;
+ continue;
+ }
+ if (!checknext(prev, e))
+ result = ISC_R_FAILURE;
+ if (prev != first)
+ free_element(mctx, prev);
+ prev = e;
+ }
+ if (prev != NULL) {
+ if (!checknext(prev, first))
+ result = ISC_R_FAILURE;
+ if (prev != first)
+ free_element(mctx, prev);
+ }
+ if (first != NULL)
+ free_element(mctx, first);
+ do {
+ if (f != NULL) {
+ if (result == ISC_R_SUCCESS) {
+ fprintf(stderr, EXPECTEDANDFOUND);
+ result = ISC_R_FAILURE;
+ }
+ free_element(mctx, f);
+ }
+ f = isc_heap_element(found_chains, 1);
+ if (f != NULL)
+ isc_heap_delete(found_chains, 1);
+ } while (f != NULL);
+
+ return (result);
+}
+
+static isc_result_t
+verifyemptynodes(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ isc_mem_t *mctx, dns_name_t *name, dns_name_t *prevname,
+ isc_boolean_t isdelegation, dns_rdataset_t *nsec3paramset)
+{
+ dns_namereln_t reln;
+ int order;
+ unsigned int labels, nlabels, i;
+ dns_name_t suffix;
+ isc_result_t result = ISC_R_SUCCESS, tresult;
+
+ reln = dns_name_fullcompare(prevname, name, &order, &labels);
+ if (order >= 0)
+ return (result);
+
+ nlabels = dns_name_countlabels(name);
+
+ if (reln == dns_namereln_commonancestor ||
+ reln == dns_namereln_contains) {
+ dns_name_init(&suffix, NULL);
+ for (i = labels + 1; i < nlabels; i++) {
+ dns_name_getlabelsequence(name, nlabels - i, i,
+ &suffix);
+ if (nsec3paramset != NULL &&
+ dns_rdataset_isassociated(nsec3paramset)) {
+ tresult = verifynsec3s(db, ver, origin, mctx,
+ &suffix, nsec3paramset,
+ isdelegation, ISC_TRUE,
+ NULL, 0);
+ if (result == ISC_R_SUCCESS &&
+ tresult != ISC_R_SUCCESS)
+ result = tresult;
+ }
+ }
+ }
+ return (result);
+}
+
+/*%
+ * Verify that certain things are sane:
+ *
+ * The apex has a DNSKEY record with at least one KSK, and at least
+ * one ZSK if the -x flag was not used.
+ *
+ * The DNSKEY record was signed with at least one of the KSKs in this
+ * set.
+ *
+ * The rest of the zone was signed with at least one of the ZSKs
+ * present in the DNSKEY RRSET.
+ */
+void
+verifyzone(dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *origin, isc_mem_t *mctx,
+ isc_boolean_t ignore_kskflag, isc_boolean_t keyset_kskonly)
+{
+ char algbuf[80];
+ dns_dbiterator_t *dbiter = NULL;
+ dns_dbnode_t *node = NULL, *nextnode = NULL;
+ dns_fixedname_t fname, fnextname, fprevname, fzonecut;
+ dns_name_t *name, *nextname, *prevname, *zonecut;
+ dns_rdata_dnskey_t dnskey;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_t keyset, soaset;
+ dns_rdataset_t keysigs, soasigs;
+ dns_rdataset_t nsecset, nsecsigs;
+ dns_rdataset_t nsec3paramset, nsec3paramsigs;
+ int i;
+ isc_boolean_t done = ISC_FALSE;
+ isc_boolean_t first = ISC_TRUE;
+ isc_boolean_t goodksk = ISC_FALSE;
+ isc_boolean_t goodzsk = ISC_FALSE;
+ isc_result_t result, vresult = ISC_R_UNSET;
+ unsigned char revoked_ksk[256];
+ unsigned char revoked_zsk[256];
+ unsigned char standby_ksk[256];
+ unsigned char standby_zsk[256];
+ unsigned char ksk_algorithms[256];
+ unsigned char zsk_algorithms[256];
+ unsigned char bad_algorithms[256];
+ unsigned char act_algorithms[256];
+
+ result = isc_heap_create(mctx, chain_compare, NULL, 1024,
+ &expected_chains);
+ check_result(result, "isc_heap_create()");
+ result = isc_heap_create(mctx, chain_compare, NULL, 1024,
+ &found_chains);
+ check_result(result, "isc_heap_create()");
+
+ result = dns_db_findnode(db, origin, ISC_FALSE, &node);
+ if (result != ISC_R_SUCCESS)
+ fatal("failed to find the zone's origin: %s",
+ isc_result_totext(result));
+
+ dns_rdataset_init(&keyset);
+ dns_rdataset_init(&keysigs);
+ dns_rdataset_init(&soaset);
+ dns_rdataset_init(&soasigs);
+ dns_rdataset_init(&nsecset);
+ dns_rdataset_init(&nsecsigs);
+ dns_rdataset_init(&nsec3paramset);
+ dns_rdataset_init(&nsec3paramsigs);
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_dnskey,
+ 0, 0, &keyset, &keysigs);
+ if (result != ISC_R_SUCCESS)
+ fatal("Zone contains no DNSSEC keys\n");
+
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa,
+ 0, 0, &soaset, &soasigs);
+ if (result != ISC_R_SUCCESS)
+ fatal("Zone contains no SOA record\n");
+
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec,
+ 0, 0, &nsecset, &nsecsigs);
+ if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
+ fatal("NSEC lookup failed\n");
+
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec3param,
+ 0, 0, &nsec3paramset, &nsec3paramsigs);
+ if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
+ fatal("NSEC3PARAM lookup failed\n");
+
+ if (!dns_rdataset_isassociated(&keysigs))
+ fatal("DNSKEY is not signed (keys offline or inactive?)\n");
+
+ if (!dns_rdataset_isassociated(&soasigs))
+ fatal("SOA is not signed (keys offline or inactive?)\n");
+
+ if (dns_rdataset_isassociated(&nsecset) &&
+ !dns_rdataset_isassociated(&nsecsigs))
+ fatal("NSEC is not signed (keys offline or inactive?)\n");
+
+ if (dns_rdataset_isassociated(&nsec3paramset) &&
+ !dns_rdataset_isassociated(&nsec3paramsigs))
+ fatal("NSEC3PARAM is not signed (keys offline or inactive?)\n");
+
+ if (!dns_rdataset_isassociated(&nsecset) &&
+ !dns_rdataset_isassociated(&nsec3paramset))
+ fatal("No valid NSEC/NSEC3 chain for testing\n");
+
+ dns_db_detachnode(db, &node);
+
+ memset(revoked_ksk, 0, sizeof(revoked_ksk));
+ memset(revoked_zsk, 0, sizeof(revoked_zsk));
+ memset(standby_ksk, 0, sizeof(standby_ksk));
+ memset(standby_zsk, 0, sizeof(standby_zsk));
+ memset(ksk_algorithms, 0, sizeof(ksk_algorithms));
+ memset(zsk_algorithms, 0, sizeof(zsk_algorithms));
+ memset(bad_algorithms, 0, sizeof(bad_algorithms));
+ memset(act_algorithms, 0, sizeof(act_algorithms));
+
+ /*
+ * Check that the DNSKEY RR has at least one self signing KSK
+ * and one ZSK per algorithm in it (or, if -x was used, one
+ * self-signing KSK).
+ */
+ for (result = dns_rdataset_first(&keyset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&keyset)) {
+ dns_rdataset_current(&keyset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &dnskey, NULL);
+ check_result(result, "dns_rdata_tostruct");
+
+ if ((dnskey.flags & DNS_KEYOWNER_ZONE) == 0)
+ ;
+ else if ((dnskey.flags & DNS_KEYFLAG_REVOKE) != 0) {
+ if ((dnskey.flags & DNS_KEYFLAG_KSK) != 0 &&
+ !dns_dnssec_selfsigns(&rdata, origin, &keyset,
+ &keysigs, ISC_FALSE,
+ mctx)) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char buffer[1024];
+ isc_buffer_t buf;
+
+ dns_name_format(origin, namebuf,
+ sizeof(namebuf));
+ isc_buffer_init(&buf, buffer, sizeof(buffer));
+ result = dns_rdata_totext(&rdata, NULL, &buf);
+ check_result(result, "dns_rdata_totext");
+ fatal("revoked KSK is not self signed:\n"
+ "%s DNSKEY %.*s", namebuf,
+ (int)isc_buffer_usedlength(&buf), buffer);
+ }
+ if ((dnskey.flags & DNS_KEYFLAG_KSK) != 0 &&
+ revoked_ksk[dnskey.algorithm] != 255)
+ revoked_ksk[dnskey.algorithm]++;
+ else if ((dnskey.flags & DNS_KEYFLAG_KSK) == 0 &&
+ revoked_zsk[dnskey.algorithm] != 255)
+ revoked_zsk[dnskey.algorithm]++;
+ } else if ((dnskey.flags & DNS_KEYFLAG_KSK) != 0) {
+ if (dns_dnssec_selfsigns(&rdata, origin, &keyset,
+ &keysigs, ISC_FALSE, mctx)) {
+ if (ksk_algorithms[dnskey.algorithm] != 255)
+ ksk_algorithms[dnskey.algorithm]++;
+ goodksk = ISC_TRUE;
+ } else {
+ if (standby_ksk[dnskey.algorithm] != 255)
+ standby_ksk[dnskey.algorithm]++;
+ }
+ } else if (dns_dnssec_selfsigns(&rdata, origin, &keyset,
+ &keysigs, ISC_FALSE, mctx)) {
+ if (zsk_algorithms[dnskey.algorithm] != 255)
+ zsk_algorithms[dnskey.algorithm]++;
+ goodzsk = ISC_TRUE;
+ } else if (dns_dnssec_signs(&rdata, origin, &soaset,
+ &soasigs, ISC_FALSE, mctx)) {
+ if (zsk_algorithms[dnskey.algorithm] != 255)
+ zsk_algorithms[dnskey.algorithm]++;
+ } else {
+ if (standby_zsk[dnskey.algorithm] != 255)
+ standby_zsk[dnskey.algorithm]++;
+ }
+ dns_rdata_freestruct(&dnskey);
+ dns_rdata_reset(&rdata);
+ }
+ dns_rdataset_disassociate(&keysigs);
+ dns_rdataset_disassociate(&soaset);
+ dns_rdataset_disassociate(&soasigs);
+ if (dns_rdataset_isassociated(&nsecsigs))
+ dns_rdataset_disassociate(&nsecsigs);
+ if (dns_rdataset_isassociated(&nsec3paramsigs))
+ dns_rdataset_disassociate(&nsec3paramsigs);
+
+ if (ignore_kskflag ) {
+ if (!goodksk && !goodzsk)
+ fatal("No self-signed DNSKEY found.");
+ } else if (!goodksk)
+ fatal("No self-signed KSK DNSKEY found. Supply an active\n"
+ "key with the KSK flag set, or use '-P'.");
+
+ fprintf(stderr, "Verifying the zone using the following algorithms:");
+ for (i = 0; i < 256; i++) {
+ if (ignore_kskflag)
+ act_algorithms[i] = (ksk_algorithms[i] != 0 ||
+ zsk_algorithms[i] != 0) ? 1 : 0;
+ else
+ act_algorithms[i] = ksk_algorithms[i] != 0 ? 1 : 0;
+ if (act_algorithms[i] != 0) {
+ dns_secalg_format(i, algbuf, sizeof(algbuf));
+ fprintf(stderr, " %s", algbuf);
+ }
+ }
+ fprintf(stderr, ".\n");
+
+ if (!ignore_kskflag && !keyset_kskonly) {
+ for (i = 0; i < 256; i++) {
+ /*
+ * The counts should both be zero or both be non-zero.
+ * Mark the algorithm as bad if this is not met.
+ */
+ if ((ksk_algorithms[i] != 0) ==
+ (zsk_algorithms[i] != 0))
+ continue;
+ dns_secalg_format(i, algbuf, sizeof(algbuf));
+ fprintf(stderr, "Missing %s for algorithm %s\n",
+ (ksk_algorithms[i] != 0)
+ ? "ZSK"
+ : "self-signed KSK",
+ algbuf);
+ bad_algorithms[i] = 1;
+ }
+ }
+
+ /*
+ * Check that all the other records were signed by keys that are
+ * present in the DNSKEY RRSET.
+ */
+
+ dns_fixedname_init(&fname);
+ name = dns_fixedname_name(&fname);
+ dns_fixedname_init(&fnextname);
+ nextname = dns_fixedname_name(&fnextname);
+ dns_fixedname_init(&fprevname);
+ prevname = NULL;
+ dns_fixedname_init(&fzonecut);
+ zonecut = NULL;
+
+ result = dns_db_createiterator(db, DNS_DB_NONSEC3, &dbiter);
+ check_result(result, "dns_db_createiterator()");
+
+ result = dns_dbiterator_first(dbiter);
+ check_result(result, "dns_dbiterator_first()");
+
+ while (!done) {
+ isc_boolean_t isdelegation = ISC_FALSE;
+
+ result = dns_dbiterator_current(dbiter, &node, name);
+ check_dns_dbiterator_current(result);
+ if (!dns_name_issubdomain(name, origin)) {
+ check_no_nsec(name, node, db, ver);
+ dns_db_detachnode(db, &node);
+ result = dns_dbiterator_next(dbiter);
+ if (result == ISC_R_NOMORE)
+ done = ISC_TRUE;
+ else
+ check_result(result, "dns_dbiterator_next()");
+ continue;
+ }
+ if (is_delegation(db, ver, origin, name, node, NULL)) {
+ zonecut = dns_fixedname_name(&fzonecut);
+ dns_name_copy(name, zonecut, NULL);
+ isdelegation = ISC_TRUE;
+ }
+ nextnode = NULL;
+ result = dns_dbiterator_next(dbiter);
+ while (result == ISC_R_SUCCESS) {
+ result = dns_dbiterator_current(dbiter, &nextnode,
+ nextname);
+ check_dns_dbiterator_current(result);
+ if (!dns_name_issubdomain(nextname, origin) ||
+ (zonecut != NULL &&
+ dns_name_issubdomain(nextname, zonecut)))
+ {
+ check_no_nsec(nextname, nextnode, db, ver);
+ dns_db_detachnode(db, &nextnode);
+ result = dns_dbiterator_next(dbiter);
+ continue;
+ }
+ if (is_empty(db, ver, nextnode)) {
+ dns_db_detachnode(db, &nextnode);
+ result = dns_dbiterator_next(dbiter);
+ continue;
+ }
+ dns_db_detachnode(db, &nextnode);
+ break;
+ }
+ if (result == ISC_R_NOMORE) {
+ done = ISC_TRUE;
+ nextname = origin;
+ } else if (result != ISC_R_SUCCESS)
+ fatal("iterating through the database failed: %s",
+ isc_result_totext(result));
+ result = verifynode(db, ver, origin, mctx, name, node,
+ isdelegation, &keyset, act_algorithms,
+ bad_algorithms, &nsecset, &nsec3paramset,
+ nextname);
+ if (vresult == ISC_R_UNSET)
+ vresult = ISC_R_SUCCESS;
+ if (vresult == ISC_R_SUCCESS && result != ISC_R_SUCCESS)
+ vresult = result;
+ if (prevname != NULL) {
+ result = verifyemptynodes(db, ver, origin, mctx, name,
+ prevname, isdelegation,
+ &nsec3paramset);
+ } else
+ prevname = dns_fixedname_name(&fprevname);
+ dns_name_copy(name, prevname, NULL);
+ if (vresult == ISC_R_SUCCESS && result != ISC_R_SUCCESS)
+ vresult = result;
+ dns_db_detachnode(db, &node);
+ }
+
+ dns_dbiterator_destroy(&dbiter);
+
+ result = dns_db_createiterator(db, DNS_DB_NSEC3ONLY, &dbiter);
+ check_result(result, "dns_db_createiterator()");
+
+ for (result = dns_dbiterator_first(dbiter);
+ result == ISC_R_SUCCESS;
+ result = dns_dbiterator_next(dbiter) ) {
+ result = dns_dbiterator_current(dbiter, &node, name);
+ check_dns_dbiterator_current(result);
+ result = verifynode(db, ver, origin, mctx, name, node,
+ ISC_FALSE, &keyset, act_algorithms,
+ bad_algorithms, NULL, NULL, NULL);
+ check_result(result, "verifynode");
+ record_found(db, ver, mctx, name, node, &nsec3paramset);
+ dns_db_detachnode(db, &node);
+ }
+ dns_dbiterator_destroy(&dbiter);
+
+ dns_rdataset_disassociate(&keyset);
+ if (dns_rdataset_isassociated(&nsecset))
+ dns_rdataset_disassociate(&nsecset);
+ if (dns_rdataset_isassociated(&nsec3paramset))
+ dns_rdataset_disassociate(&nsec3paramset);
+
+ result = verify_nsec3_chains(mctx);
+ if (vresult == ISC_R_UNSET)
+ vresult = ISC_R_SUCCESS;
+ if (result != ISC_R_SUCCESS && vresult == ISC_R_SUCCESS)
+ vresult = result;
+ isc_heap_destroy(&expected_chains);
+ isc_heap_destroy(&found_chains);
+
+ /*
+ * If we made it this far, we have what we consider a properly signed
+ * zone. Set the good flag.
+ */
+ for (i = 0; i < 256; i++) {
+ if (bad_algorithms[i] != 0) {
+ if (first)
+ fprintf(stderr, "The zone is not fully signed "
+ "for the following algorithms:");
+ dns_secalg_format(i, algbuf, sizeof(algbuf));
+ fprintf(stderr, " %s", algbuf);
+ first = ISC_FALSE;
+ }
+ }
+ if (!first) {
+ fprintf(stderr, ".\n");
+ fatal("DNSSEC completeness test failed.");
+ }
+
+ if (vresult != ISC_R_SUCCESS)
+ fatal("DNSSEC completeness test failed (%s).",
+ dns_result_totext(vresult));
+
+ if (goodksk || ignore_kskflag) {
+ /*
+ * Print the success summary.
+ */
+ fprintf(stderr, "Zone fully signed:\n");
+ for (i = 0; i < 256; i++) {
+ if ((ksk_algorithms[i] != 0) ||
+ (standby_ksk[i] != 0) ||
+ (revoked_zsk[i] != 0) ||
+ (zsk_algorithms[i] != 0) ||
+ (standby_zsk[i] != 0) ||
+ (revoked_zsk[i] != 0)) {
+ dns_secalg_format(i, algbuf, sizeof(algbuf));
+ fprintf(stderr, "Algorithm: %s: KSKs: "
+ "%u active, %u stand-by, %u revoked\n",
+ algbuf, ksk_algorithms[i],
+ standby_ksk[i], revoked_ksk[i]);
+ fprintf(stderr, "%*sZSKs: "
+ "%u active, %u %s, %u revoked\n",
+ (int) strlen(algbuf) + 13, "",
+ zsk_algorithms[i],
+ standby_zsk[i],
+ keyset_kskonly ? "present" : "stand-by",
+ revoked_zsk[i]);
+ }
+ }
+ }
+}
diff --git a/contrib/bind9/bin/dnssec/dnssectool.h b/contrib/bind9/bin/dnssec/dnssectool.h
index e6dfe51aeed3..09b4fb103b13 100644
--- a/contrib/bind9/bin/dnssec/dnssectool.h
+++ b/contrib/bind9/bin/dnssec/dnssectool.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssectool.h,v 1.31.162.2 2011/10/20 23:46:27 tbox Exp $ */
+/* $Id: dnssectool.h,v 1.33 2011/10/20 23:46:51 tbox Exp $ */
#ifndef DNSSECTOOL_H
#define DNSSECTOOL_H 1
@@ -25,6 +25,11 @@
#include <dns/rdatastruct.h>
#include <dst/dst.h>
+#define check_dns_dbiterator_current(result) \
+ check_result((result == DNS_R_NEWORIGIN) ? ISC_R_SUCCESS : result, \
+ "dns_dbiterator_current()")
+
+
typedef void (fatalcallback_t)(void);
ISC_PLATFORM_NORETURN_PRE void
@@ -81,4 +86,12 @@ isc_boolean_t
key_collision(dst_key_t *key, dns_name_t *name, const char *dir,
isc_mem_t *mctx, isc_boolean_t *exact);
+isc_boolean_t
+is_delegation(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *origin,
+ dns_name_t *name, dns_dbnode_t *node, isc_uint32_t *ttlp);
+
+void
+verifyzone(dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *origin, isc_mem_t *mctx,
+ isc_boolean_t ignore_kskflag, isc_boolean_t keyset_kskonly);
#endif /* DNSSEC_DNSSECTOOL_H */
diff --git a/contrib/bind9/bin/named/Makefile.in b/contrib/bind9/bin/named/Makefile.in
index ea919ae5e2da..689413570378 100644
--- a/contrib/bind9/bin/named/Makefile.in
+++ b/contrib/bind9/bin/named/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2002 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.114.14.2 2011/03/10 23:47:25 tbox Exp $
+# $Id: Makefile.in,v 1.116 2011/03/10 23:47:49 tbox Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -21,6 +21,12 @@ top_srcdir = @top_srcdir@
@BIND9_VERSION@
+@BIND9_PRODUCT@
+
+@BIND9_DESCRIPTION@
+
+@BIND9_SRCID@
+
@BIND9_CONFIGARGS@
@BIND9_MAKE_INCLUDES@
@@ -114,6 +120,9 @@ MANOBJS = ${MANPAGES} ${HTMLPAGES}
main.@O@: main.c
${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} \
-DVERSION=\"${VERSION}\" \
+ -DPRODUCT=\"${PRODUCT}\" \
+ -DDESCRIPTION=\"${DESCRIPTION}\" \
+ -DSRCID=\"${SRCID}\" \
-DCONFIGARGS="\"${CONFIGARGS}\"" \
-DNS_LOCALSTATEDIR=\"${localstatedir}\" \
-DNS_SYSCONFDIR=\"${sysconfdir}\" -c ${srcdir}/main.c
@@ -124,6 +133,7 @@ bind.keys.h: ${top_srcdir}/bind.keys ${srcdir}/bindkeys.pl
config.@O@: config.c bind.keys.h
${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} \
-DVERSION=\"${VERSION}\" \
+ -DSRCID=\"${SRCID}\" \
-DNS_LOCALSTATEDIR=\"${localstatedir}\" \
-DNS_SYSCONFDIR=\"${sysconfdir}\" \
-c ${srcdir}/config.c
@@ -151,8 +161,11 @@ maintainer-clean::
bind9.xsl.h: bind9.xsl ${srcdir}/convertxsl.pl
${PERL} ${srcdir}/convertxsl.pl < ${srcdir}/bind9.xsl > bind9.xsl.h
-depend: bind9.xsl.h
-statschannel.@O@: bind9.xsl.h
+bind9.ver3.xsl.h: bind9.ver3.xsl ${srcdir}/convertxsl.pl
+ ${PERL} ${srcdir}/convertxsl.pl < ${srcdir}/bind9.ver3.xsl > bind9.ver3.xsl.h
+
+depend: bind9.xsl.h bind9.ver3.xsl.h
+statschannel.@O@: bind9.xsl.h bind9.ver3.xsl.h
installdirs:
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${sbindir}
@@ -167,3 +180,6 @@ install:: named@EXEEXT@ lwresd@EXEEXT@ installdirs
${INSTALL_DATA} ${srcdir}/named.conf.5 ${DESTDIR}${mandir}/man5
@DLZ_DRIVER_RULES@
+
+named-symtbl.@O@: named-symtbl.c
+ ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c named-symtbl.c
diff --git a/contrib/bind9/bin/named/bind9.ver3.xsl b/contrib/bind9/bin/named/bind9.ver3.xsl
new file mode 100644
index 000000000000..22e5c45fbef4
--- /dev/null
+++ b/contrib/bind9/bin/named/bind9.ver3.xsl
@@ -0,0 +1,738 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ - Copyright (C) 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
+ -
+ - Permission to use, copy, modify, and/or distribute this software for any
+ - purpose with or without fee is hereby granted, provided that the above
+ - copyright notice and this permission notice appear in all copies.
+ -
+ - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ - PERFORMANCE OF THIS SOFTWARE.
+-->
+
+<!-- $Id$ -->
+
+<!-- %Id: bind9.xsl,v 1.21 2009/01/27 23:47:54 tbox Exp % -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <xsl:output method="html" indent="yes" version="4.0"/>
+ <xsl:template match="statistics[@version=&quot;3.0&quot;]">
+ <html>
+ <head>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <script type="text/javascript" src="https://www.google.com/jsapi"/>
+ <script type="text/javascript">
+
+ google.load("visualization", "1", {packages:["corechart"]});
+ google.setOnLoadCallback(loadGraphs);
+
+ var graphs=[];
+
+ function drawChart(chart_title,target,data) {
+ var data = google.visualization.arrayToDataTable(data);
+
+ var options = {
+ title: chart_title
+ };
+
+ var chart = new google.visualization.BarChart(document.getElementById(target));
+ chart.draw(data, options);
+ }
+
+ function loadGraphs(){
+ //alert("here we are!");
+ var g;
+
+ // Server Incoming query Types
+ while(g = graphs.shift()){
+ // alert("going for: " + g.target);
+ if(g.data.length > 1){
+ drawChart(g.title,g.target,g.data);
+ }
+ }
+ }
+
+ // Server Incoming Queries Types
+ graphs.push({
+ 'title' : "Server Incoming Query Types",
+ 'target': 'chart_incoming_qtypes',
+ 'data': [['Type','Counter'],<xsl:for-each select="server/counters[@type=&quot;qtype&quot;]/counter">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]
+ });
+
+
+ // Server Incoming Requests
+ graphs.push({
+ 'title' : "Server Incoming Requests",
+ 'target': 'chart_incoming_requests',
+ 'data': [['Requests','Counter'],<xsl:for-each select="server/counters[@type=&quot;opcode&quot;]/counter">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]});
+
+
+
+
+ </script>
+ </xsl:if>
+ <style type="text/css">
+ body {
+ font-family: sans-serif;
+ background-color: #ffffff;
+ color: #000000;
+ font-size: 10pt;
+ }
+
+ .odd{
+ background-color: #f0f0f0;
+ }
+
+ .even{
+ background-color: #ffffff;
+ }
+
+ p.footer{
+ font-style:italic;
+ color: grey;
+ }
+
+ table {
+ border-collapse: collapse;
+ border: 1px solid grey;
+ }
+
+ table.counters{
+ border: 1px solid grey;
+ width: 500px;
+ }
+
+ table.counters th {
+ text-align: center;
+ border: 1px solid grey;
+ width: 120px;
+ }
+ table.counters td{
+ text-align:center;
+
+ }
+
+ table.counters tr:hover{
+ background-color: #99ddff;
+ }
+
+ .totals {
+ background-color: rgb(1,169,206);
+ color: #ffffff;
+ }
+
+ td, th {
+ padding-right: 5px;
+ padding-left: 5px;
+ border: 1px solid grey;
+ }
+
+ .header h1 {
+ color: rgb(1,169,206);
+ padding: 0px;
+ }
+
+ .content {
+ background-color: #ffffff;
+ color: #000000;
+ padding: 4px;
+ }
+
+ .item {
+ padding: 4px;
+ text-align: right;
+ }
+
+ .value {
+ padding: 4px;
+ font-weight: bold;
+ }
+
+
+ h2 {
+ color: grey;
+ font-size: 14pt;
+ width:500px;
+ text-align:center;
+ }
+
+ h3 {
+ color: #444444;
+ font-size: 12pt;
+ width:500px;
+ text-align:center;
+
+ }
+ h4 {
+ color: rgb(1,169,206);
+ font-size: 10pt;
+ width:500px;
+ text-align:center;
+
+ }
+
+ .pie {
+ width:500px;
+ height: 500px;
+ }
+
+ </style>
+ <title>ISC BIND 9 Statistics</title>
+ </head>
+ <body>
+ <div class="header">
+ <h1>ISC Bind 9 Configuration and Statistics</h1>
+ </div>
+ <hr/>
+ <h2>Server Times</h2>
+ <table class="counters">
+ <tr>
+ <th>Boot time:</th>
+ <td>
+ <xsl:value-of select="server/boot-time"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Sample time:</th>
+ <td>
+ <xsl:value-of select="server/current-time"/>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ <h2>Incoming Requests</h2>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <div class="pie" id="chart_incoming_requests">[no incoming requests]</div>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="server/counters[@type=&quot;opcode&quot;]/counter">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <tr>
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ <tr>
+ <th class="totals">Total:</th>
+ <td class="totals">
+ <xsl:value-of select="sum(server/counters[@type=&quot;opcode&quot;]/counter)"/>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ <h3>Incoming Queries by Type</h3>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <div class="pie" id="chart_incoming_qtypes">[no incoming queries]</div>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="server/counters[@type=&quot;qtype&quot;]/counter">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <xsl:variable name="css-class">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ <tr>
+ <th class="totals">Total:</th>
+ <td class="totals">
+ <xsl:value-of select="sum(server/counters[@type=&quot;qtype&quot;]/counter)"/>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ <h2>Outgoing Queries per view</h2>
+ <xsl:for-each select="views/view[count(counters[@type=&quot;resqtype&quot;]/counter) &gt; 0]">
+ <h3>View <xsl:value-of select="@name"/></h3>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <script type="text/javascript">
+ graphs.push({
+ 'title': "Outgoing queries for view: <xsl:value-of select="@name"/>",
+ 'target': 'chart_outgoing_queries_view_<xsl:value-of select="@name"/>',
+ 'data': [['Type','Counter'],<xsl:for-each select="counters[@type=&quot;resqtype&quot;]/counter">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]
+ });
+
+ </script>
+ <xsl:variable name="target">
+ <xsl:value-of select="@name"/>
+ </xsl:variable>
+ <div class="pie" id="chart_outgoing_queries_view_{$target}"/>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="counters[@type=&quot;resqtype&quot;]/counter">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <xsl:variable name="css-class1">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class1}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ </xsl:for-each>
+ <h2>Server Statistics</h2>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <script type="text/javascript">
+ graphs.push({
+ 'title' : "Server Counters",
+ 'target': 'chart_server_nsstat_restype',
+ 'data': [['Type','Counter'],<xsl:for-each select="server/counters[@type=&quot;nsstat&quot;]/counter[.&gt;0]">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]
+ });
+
+ </script>
+ <div class="pie" id="chart_server_nsstat_restype"/>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="server/counters[@type=&quot;nsstat&quot;]/counter[.&gt;0]">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <xsl:variable name="css-class2">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class2}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ <h2>Zone Maintenance Statistics</h2>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <script type="text/javascript">
+ graphs.push({
+ 'title' : "Zone Maintenance Stats",
+ 'target': 'chart_server_zone_maint',
+ 'data': [['Type','Counter'],<xsl:for-each select="server/counters[@type=&quot;zonestat&quot;]/counter">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]
+ });
+
+ </script>
+ <!-- Non Mozilla specific markup -->
+ <div class="pie" id="chart_server_zone_maint"/>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="server/counters[@type=&quot;zonestat&quot;]/counter">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <xsl:variable name="css-class3">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class3}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <h2>Resolver Statistics (Common)</h2>
+ <table class="counters">
+ <xsl:for-each select="server/counters[@type=&quot;restat&quot;]/counter">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <xsl:variable name="css-class4">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class4}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <xsl:for-each select="views/view">
+ <h3>Resolver Statistics for View <xsl:value-of select="@name"/></h3>
+ <table class="counters">
+ <xsl:for-each select="counters[@type=&quot;resstats&quot;]/counter[.&gt;0]">
+ <xsl:sort select="." data-type="number" order="descending"/>
+ <xsl:variable name="css-class5">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class5}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </xsl:for-each>
+ <h3>Cache DB RRsets for View <xsl:value-of select="@name"/></h3>
+ <xsl:for-each select="views/view">
+ <table class="counters">
+ <xsl:for-each select="cache/rrset">
+ <xsl:variable name="css-class6">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class6}">
+ <th>
+ <xsl:value-of select="name"/>
+ </th>
+ <td>
+ <xsl:value-of select="counter"/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ </xsl:for-each>
+ <h2>Socket I/O Statistics</h2>
+ <table class="counters">
+ <xsl:for-each select="server/counters[@type=&quot;sockstat&quot;]/counter[.&gt;0]">
+ <xsl:variable name="css-class7">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class7}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ <br/>
+ <h2>Response Codes per view/zone</h2>
+ <xsl:for-each select="views/view[zones/zone/counters[@type=&quot;rcode&quot;]/counter &gt;0]">
+ <h3>View <xsl:value-of select="@name"/></h3>
+ <xsl:variable name="thisview">
+ <xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:for-each select="zones/zone">
+ <xsl:if test="counters[@type=&quot;rcode&quot;]/counter[. &gt; 0]">
+ <h4>Zone <xsl:value-of select="@name"/></h4>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <script type="text/javascript">
+ graphs.push({
+ 'title': "Response Codes for zone <xsl:value-of select="@name"/>",
+ 'target': 'chart_rescode_<xsl:value-of select="../../@name"/>_<xsl:value-of select="@name"/>',
+ 'data': [['Type','Counter'],<xsl:for-each select="counters[@type=&quot;rcode&quot;]/counter[.&gt;0 and @name != &quot;QryAuthAns&quot;]">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]
+ });
+
+ </script>
+ <xsl:variable name="target">
+ <xsl:value-of select="@name"/>
+ </xsl:variable>
+ <div class="pie" id="chart_rescode_{$thisview}_{$target}"/>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="counters[@type=&quot;rcode&quot;]/counter[.&gt;0 and @name != &quot;QryAuthAns&quot;]">
+ <xsl:sort select="."/>
+ <xsl:variable name="css-class10">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class10}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ <h2>Received QTYPES per view/zone</h2>
+ <xsl:for-each select="views/view[zones/zone/counters[@type=&quot;qtype&quot;]/counter &gt;0]">
+ <h3>View <xsl:value-of select="@name"/></h3>
+ <xsl:variable name="thisview2">
+ <xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:for-each select="zones/zone">
+ <xsl:if test="counters[@type=&quot;qtype&quot;]/counter[count(.) &gt; 0]">
+ <h4>Zone <xsl:value-of select="@name"/></h4>
+ <xsl:if test="system-property('xsl:vendor')!='Transformiix'">
+ <!-- Non Mozilla specific markup -->
+ <script type="text/javascript">
+ graphs.push({
+ 'title': "Query Types for zone <xsl:value-of select="@name"/>",
+ 'target': 'chart_qtype_<xsl:value-of select="../../@name"/>_<xsl:value-of select="@name"/>',
+ 'data': [['Type','Counter'],<xsl:for-each select="counters[@type=&quot;qtype&quot;]/counter[.&gt;0 and @name != &quot;QryAuthAns&quot;]">['<xsl:value-of select="@name"/>',<xsl:value-of select="."/>],</xsl:for-each>]
+ });
+
+ </script>
+ <xsl:variable name="target">
+ <xsl:value-of select="@name"/>
+ </xsl:variable>
+ <div class="pie" id="chart_qtype_{$thisview2}_{$target}"/>
+ </xsl:if>
+ <table class="counters">
+ <xsl:for-each select="counters[@type=&quot;qtype&quot;]/counter">
+ <xsl:sort select="."/>
+ <xsl:variable name="css-class11">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class11}">
+ <th>
+ <xsl:value-of select="@name"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ <h2>Network Status</h2>
+ <table class="counters">
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ <th>Type</th>
+ <th>References</th>
+ <th>LocalAddress</th>
+ <th>PeerAddress</th>
+ <th>State</th>
+ </tr>
+ <xsl:for-each select="socketmgr/sockets/socket">
+ <xsl:sort select="id"/>
+ <xsl:variable name="css-class12">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class12}">
+ <td>
+ <xsl:value-of select="id"/>
+ </td>
+ <td>
+ <xsl:value-of select="name"/>
+ </td>
+ <td>
+ <xsl:value-of select="type"/>
+ </td>
+ <td>
+ <xsl:value-of select="references"/>
+ </td>
+ <td>
+ <xsl:value-of select="local-address"/>
+ </td>
+ <td>
+ <xsl:value-of select="peer-address"/>
+ </td>
+ <td>
+ <xsl:for-each select="states">
+ <xsl:value-of select="."/>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ <h2>Task Manager Configuration</h2>
+ <table class="counters">
+ <tr>
+ <th class="even">Thread-Model</th>
+ <td>
+ <xsl:value-of select="taskmgr/thread-model/type"/>
+ </td>
+ </tr>
+ <tr class="odd">
+ <th>Worker Threads</th>
+ <td>
+ <xsl:value-of select="taskmgr/thread-model/worker-threads"/>
+ </td>
+ </tr>
+ <tr class="even">
+ <th>Default Quantum</th>
+ <td>
+ <xsl:value-of select="taskmgr/thread-model/default-quantum"/>
+ </td>
+ </tr>
+ <tr class="odd">
+ <th>Tasks Running</th>
+ <td>
+ <xsl:value-of select="taskmgr/thread-model/tasks-running"/>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ <h2>Tasks</h2>
+ <table class="counters">
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ <th>References</th>
+ <th>State</th>
+ <th>Quantum</th>
+ </tr>
+ <xsl:for-each select="taskmgr/tasks/task">
+ <xsl:sort select="name"/>
+ <xsl:variable name="css-class14">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class14}">
+ <td>
+ <xsl:value-of select="id"/>
+ </td>
+ <td>
+ <xsl:value-of select="name"/>
+ </td>
+ <td>
+ <xsl:value-of select="references"/>
+ </td>
+ <td>
+ <xsl:value-of select="state"/>
+ </td>
+ <td>
+ <xsl:value-of select="quantum"/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ <h2>Memory Usage Summary</h2>
+ <table class="counters">
+ <xsl:for-each select="memory/summary/*">
+ <xsl:variable name="css-class13">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class13}">
+ <th>
+ <xsl:value-of select="name()"/>
+ </th>
+ <td>
+ <xsl:value-of select="."/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <br/>
+ <h2>Memory Contexts</h2>
+ <table class="counters">
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ <th>References</th>
+ <th>TotalUse</th>
+ <th>InUse</th>
+ <th>MaxUse</th>
+ <th>BlockSize</th>
+ <th>Pools</th>
+ <th>HiWater</th>
+ <th>LoWater</th>
+ </tr>
+ <xsl:for-each select="memory/contexts/context">
+ <xsl:sort select="total" data-type="number" order="descending"/>
+ <xsl:variable name="css-class14">
+ <xsl:choose>
+ <xsl:when test="position() mod 2 = 0">even</xsl:when>
+ <xsl:otherwise>odd</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tr class="{$css-class14}">
+ <td>
+ <xsl:value-of select="id"/>
+ </td>
+ <td>
+ <xsl:value-of select="name"/>
+ </td>
+ <td>
+ <xsl:value-of select="references"/>
+ </td>
+ <td>
+ <xsl:value-of select="total"/>
+ </td>
+ <td>
+ <xsl:value-of select="inuse"/>
+ </td>
+ <td>
+ <xsl:value-of select="maxinuse"/>
+ </td>
+ <td>
+ <xsl:value-of select="blocksize"/>
+ </td>
+ <td>
+ <xsl:value-of select="pools"/>
+ </td>
+ <td>
+ <xsl:value-of select="hiwater"/>
+ </td>
+ <td>
+ <xsl:value-of select="lowater"/>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <hr/>
+ <p class="footer">Internet Systems Consortium Inc.<br/><a href="http://www.isc.org">http://www.isc.org</a></p>
+ </body>
+ </html>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/contrib/bind9/bin/named/bind9.ver3.xsl.h b/contrib/bind9/bin/named/bind9.ver3.xsl.h
new file mode 100644
index 000000000000..c55714a6fb7b
--- /dev/null
+++ b/contrib/bind9/bin/named/bind9.ver3.xsl.h
@@ -0,0 +1,740 @@
+/*
+ * Generated by convertxsl.pl 1.14 2008/07/17 23:43:26 jinmei Exp
+ * From <!-- %Id: bind9.xsl 1.21 2009/01/27 23:47:54 tbox Exp %
+ */
+static char xslmsg[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!--\n"
+ " - Copyright (C) 2006-2009 Internet Systems Consortium, Inc. (\"ISC\")\n"
+ " -\n"
+ " - Permission to use, copy, modify, and/or distribute this software for any\n"
+ " - purpose with or without fee is hereby granted, provided that the above\n"
+ " - copyright notice and this permission notice appear in all copies.\n"
+ " -\n"
+ " - THE SOFTWARE IS PROVIDED \"AS IS\" AND ISC DISCLAIMS ALL WARRANTIES WITH\n"
+ " - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n"
+ " - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,\n"
+ " - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n"
+ " - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\n"
+ " - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n"
+ " - PERFORMANCE OF THIS SOFTWARE.\n"
+ "-->\n"
+ "<!-- \045Id: bind9.xsl,v 1.21 2009/01/27 23:47:54 tbox Exp \045 -->\n"
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns=\"http://www.w3.org/1999/xhtml\" version=\"1.0\">\n"
+ " <xsl:output method=\"html\" indent=\"yes\" version=\"4.0\"/>\n"
+ " <xsl:template match=\"statistics[@version=&quot;3.0&quot;]\">\n"
+ " <html>\n"
+ " <head>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"/>\n"
+ " <script type=\"text/javascript\">\n"
+ " \n"
+ " google.load(\"visualization\", \"1\", {packages:[\"corechart\"]});\n"
+ " google.setOnLoadCallback(loadGraphs);\n"
+ "\n"
+ " var graphs=[];\n"
+ " \n"
+ " function drawChart(chart_title,target,data) {\n"
+ " var data = google.visualization.arrayToDataTable(data);\n"
+ "\n"
+ " var options = {\n"
+ " title: chart_title\n"
+ " };\n"
+ " \n"
+ " var chart = new google.visualization.BarChart(document.getElementById(target));\n"
+ " chart.draw(data, options);\n"
+ " }\n"
+ " \n"
+ " function loadGraphs(){\n"
+ " //alert(\"here we are!\");\n"
+ " var g;\n"
+ " \n"
+ " // Server Incoming query Types\n"
+ " while(g = graphs.shift()){\n"
+ " // alert(\"going for: \" + g.target);\n"
+ " if(g.data.length > 1){\n"
+ " drawChart(g.title,g.target,g.data);\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " // Server Incoming Queries Types \n"
+ " graphs.push({\n"
+ " 'title' : \"Server Incoming Query Types\",\n"
+ " 'target': 'chart_incoming_qtypes',\n"
+ " 'data': [['Type','Counter'],<xsl:for-each select=\"server/counters[@type=&quot;qtype&quot;]/counter\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]\n"
+ " });\n"
+ "\n"
+ "\n"
+ " // Server Incoming Requests \n"
+ " graphs.push({\n"
+ " 'title' : \"Server Incoming Requests\",\n"
+ " 'target': 'chart_incoming_requests',\n"
+ " 'data': [['Requests','Counter'],<xsl:for-each select=\"server/counters[@type=&quot;opcode&quot;]/counter\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]});\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " </script>\n"
+ " </xsl:if>\n"
+ " <style type=\"text/css\">\n"
+ " body {\n"
+ " font-family: sans-serif;\n"
+ " background-color: #ffffff;\n"
+ " color: #000000;\n"
+ " font-size: 10pt;\n"
+ " }\n"
+ " \n"
+ " .odd{\n"
+ " background-color: #f0f0f0;\n"
+ " }\n"
+ " \n"
+ " .even{\n"
+ " background-color: #ffffff;\n"
+ " }\n"
+ " \n"
+ " p.footer{\n"
+ " font-style:italic;\n"
+ " color: grey;\n"
+ " }\n"
+ "\n"
+ " table {\n"
+ " border-collapse: collapse;\n"
+ " border: 1px solid grey;\n"
+ " }\n"
+ "\n"
+ " table.counters{\n"
+ " border: 1px solid grey;\n"
+ " width: 500px;\n"
+ " }\n"
+ " \n"
+ " table.counters th {\n"
+ " text-align: center;\n"
+ " border: 1px solid grey;\n"
+ " width: 120px;\n"
+ " }\n"
+ " table.counters td{\n"
+ " text-align:center;\n"
+ " \n"
+ " }\n"
+ " \n"
+ " table.counters tr:hover{\n"
+ " background-color: #99ddff;\n"
+ " }\n"
+ " \n"
+ " .totals {\n"
+ " background-color: rgb(1,169,206);\n"
+ " color: #ffffff;\n"
+ " }\n"
+ "\n"
+ " td, th {\n"
+ " padding-right: 5px;\n"
+ " padding-left: 5px;\n"
+ " border: 1px solid grey;\n"
+ " }\n"
+ "\n"
+ " .header h1 {\n"
+ " color: rgb(1,169,206);\n"
+ " padding: 0px;\n"
+ " }\n"
+ "\n"
+ " .content {\n"
+ " background-color: #ffffff;\n"
+ " color: #000000;\n"
+ " padding: 4px;\n"
+ " }\n"
+ "\n"
+ " .item {\n"
+ " padding: 4px;\n"
+ " text-align: right;\n"
+ " }\n"
+ "\n"
+ " .value {\n"
+ " padding: 4px;\n"
+ " font-weight: bold;\n"
+ " }\n"
+ "\n"
+ "\n"
+ " h2 {\n"
+ " color: grey;\n"
+ " font-size: 14pt;\n"
+ " width:500px;\n"
+ " text-align:center;\n"
+ " }\n"
+ " \n"
+ " h3 {\n"
+ " color: #444444;\n"
+ " font-size: 12pt;\n"
+ " width:500px;\n"
+ " text-align:center;\n"
+ " \n"
+ " }\n"
+ " h4 {\n"
+ " color: rgb(1,169,206);\n"
+ " font-size: 10pt;\n"
+ " width:500px;\n"
+ " text-align:center;\n"
+ " \n"
+ " }\n"
+ "\n"
+ " .pie {\n"
+ " width:500px;\n"
+ " height: 500px;\n"
+ " }\n"
+ "\n"
+ " </style>\n"
+ " <title>ISC BIND 9 Statistics</title>\n"
+ " </head>\n"
+ " <body>\n"
+ " <div class=\"header\">\n"
+ " <h1>ISC Bind 9 Configuration and Statistics</h1>\n"
+ " </div>\n"
+ " <hr/>\n"
+ " <h2>Server Times</h2>\n"
+ " <table class=\"counters\">\n"
+ " <tr>\n"
+ " <th>Boot time:</th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"server/boot-time\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr>\n"
+ " <th>Sample time:</th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"server/current-time\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Incoming Requests</h2>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <div class=\"pie\" id=\"chart_incoming_requests\">[graph incoming requests]</div>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"server/counters[@type=&quot;opcode&quot;]/counter\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <tr>\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " <tr>\n"
+ " <th class=\"totals\">Total:</th>\n"
+ " <td class=\"totals\">\n"
+ " <xsl:value-of select=\"sum(server/counters[@type=&quot;opcode&quot;]/counter)\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h3>Incoming Queries by Type</h3>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <div class=\"pie\" id=\"chart_incoming_qtypes\">[graph incoming qtypes]</div>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"server/counters[@type=&quot;qtype&quot;]/counter\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " <tr>\n"
+ " <th class=\"totals\">Total:</th>\n"
+ " <td class=\"totals\">\n"
+ " <xsl:value-of select=\"sum(server/counters[@type=&quot;qtype&quot;]/counter)\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Outgoing Queries per view</h2>\n"
+ " <xsl:for-each select=\"views/view[count(counters[@type=&quot;resqtype&quot;]/counter) &gt; 0]\">\n"
+ " <h3>View <xsl:value-of select=\"@name\"/></h3>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <script type=\"text/javascript\">\n"
+ " graphs.push({\n"
+ " 'title': \"Outgoing queries for view: <xsl:value-of select=\"@name\"/>\",\n"
+ " 'target': 'chart_outgoing_queries_view_<xsl:value-of select=\"@name\"/>',\n"
+ " 'data': [['Type','Counter'],<xsl:for-each select=\"counters[@type=&quot;resqtype&quot;]/counter\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]\n"
+ " });\n"
+ " \n"
+ " </script>\n"
+ " <xsl:variable name=\"target\">\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </xsl:variable>\n"
+ " <div class=\"pie\" id=\"chart_outgoing_queries_view_{$target}\"/>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"counters[@type=&quot;resqtype&quot;]/counter\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class1\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class1}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " </xsl:for-each>\n"
+ " <h2>Server Statistics</h2>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <script type=\"text/javascript\">\n"
+ " graphs.push({\n"
+ " 'title' : \"Server Response Types\",\n"
+ " 'target': 'chart_server_nsstat_restype',\n"
+ " 'data': [['Type','Counter'],<xsl:for-each select=\"server/counters[@type=&quot;nsstat&quot;]/counter[.&gt;0]\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]\n"
+ " });\n"
+ " \n"
+ " </script>\n"
+ " <div class=\"pie\" id=\"chart_server_nsstat_restype\"/>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"server/counters[@type=&quot;nsstat&quot;]/counter[.&gt;0]\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class2\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class2}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Zone Maintenance Statistics</h2>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <script type=\"text/javascript\">\n"
+ " graphs.push({\n"
+ " 'title' : \"Zone Maintenance Stats\",\n"
+ " 'target': 'chart_server_zone_maint',\n"
+ " 'data': [['Type','Counter'],<xsl:for-each select=\"server/counters[@type=&quot;zonestat&quot;]/counter\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]\n"
+ " });\n"
+ "\n"
+ " </script>\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <div class=\"pie\" id=\"chart_server_zone_maint\"/>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"server/counters[@type=&quot;zonestat&quot;]/counter\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class3\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class3}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <h2>Resolver Statistics (Common)</h2>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"server/counters[@type=&quot;restat&quot;]/counter\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class4\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class4}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <xsl:for-each select=\"views/view\">\n"
+ " <h3>Resolver Statistics for View <xsl:value-of select=\"@name\"/></h3>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"counters[@type=&quot;resstats&quot;]/counter[.&gt;0]\">\n"
+ " <xsl:sort select=\".\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class5\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class5}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " </xsl:for-each>\n"
+ " <h3>Cache DB RRsets for View <xsl:value-of select=\"@name\"/></h3>\n"
+ " <xsl:for-each select=\"views/view\">\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"cache/rrset\">\n"
+ " <xsl:variable name=\"css-class6\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class6}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"counter\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " </xsl:for-each>\n"
+ " <h2>Socket I/O Statistics</h2>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"server/counters[@type=&quot;sockstat&quot;]/counter[.&gt;0]\">\n"
+ " <xsl:variable name=\"css-class7\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class7}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <br/>\n"
+ " <h2>Response Codes per view/zone</h2>\n"
+ " <xsl:for-each select=\"views/view[zones/zone/counters[@type=&quot;rcode&quot;]/counter &gt;0]\">\n"
+ " <h3>View <xsl:value-of select=\"@name\"/></h3>\n"
+ " <xsl:variable name=\"thisview\">\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </xsl:variable>\n"
+ " <xsl:for-each select=\"zones/zone\">\n"
+ " <xsl:if test=\"counters[@type=&quot;rcode&quot;]/counter[. &gt; 0]\">\n"
+ " <h4>Zone <xsl:value-of select=\"@name\"/></h4>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <script type=\"text/javascript\">\n"
+ " graphs.push({\n"
+ " 'title': \"Response Codes for zone <xsl:value-of select=\"@name\"/>\",\n"
+ " 'target': 'chart_rescode_<xsl:value-of select=\"../../@name\"/>_<xsl:value-of select=\"@name\"/>',\n"
+ " 'data': [['Type','Counter'],<xsl:for-each select=\"counters[@type=&quot;rcode&quot;]/counter[.&gt;0 and @name != &quot;QryAuthAns&quot;]\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]\n"
+ " });\n"
+ "\n"
+ " </script>\n"
+ " <xsl:variable name=\"target\">\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </xsl:variable>\n"
+ " <div class=\"pie\" id=\"chart_rescode_{$thisview}_{$target}\"/>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"counters[@type=&quot;rcode&quot;]/counter[.&gt;0 and @name != &quot;QryAuthAns&quot;]\">\n"
+ " <xsl:sort select=\".\"/>\n"
+ " <xsl:variable name=\"css-class10\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class10}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " </xsl:if>\n"
+ " </xsl:for-each>\n"
+ " </xsl:for-each>\n"
+ " <h2>Received QTYPES per view/zone</h2>\n"
+ " <xsl:for-each select=\"views/view[zones/zone/counters[@type=&quot;qtype&quot;]/counter &gt;0]\">\n"
+ " <h3>View <xsl:value-of select=\"@name\"/></h3>\n"
+ " <xsl:variable name=\"thisview2\">\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </xsl:variable>\n"
+ " <xsl:for-each select=\"zones/zone\">\n"
+ " <xsl:if test=\"counters[@type=&quot;qtype&quot;]/counter[count(.) &gt; 0]\">\n"
+ " <h4>Zone <xsl:value-of select=\"@name\"/></h4>\n"
+ " <xsl:if test=\"system-property('xsl:vendor')!='Transformiix'\">\n"
+ " <!-- Non Mozilla specific markup -->\n"
+ " <script type=\"text/javascript\">\n"
+ " graphs.push({\n"
+ " 'title': \"Query Types for zone <xsl:value-of select=\"@name\"/>\",\n"
+ " 'target': 'chart_qtype_<xsl:value-of select=\"../../@name\"/>_<xsl:value-of select=\"@name\"/>',\n"
+ " 'data': [['Type','Counter'],<xsl:for-each select=\"counters[@type=&quot;qtype&quot;]/counter[.&gt;0 and @name != &quot;QryAuthAns&quot;]\">['<xsl:value-of select=\"@name\"/>',<xsl:value-of select=\".\"/>],</xsl:for-each>]\n"
+ " });\n"
+ "\n"
+ " </script>\n"
+ " <xsl:variable name=\"target\">\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </xsl:variable>\n"
+ " <div class=\"pie\" id=\"chart_qtype_{$thisview2}_{$target}\"/>\n"
+ " </xsl:if>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"counters[@type=&quot;qtype&quot;]/counter\">\n"
+ " <xsl:sort select=\".\"/>\n"
+ " <xsl:variable name=\"css-class11\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class11}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"@name\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " </xsl:if>\n"
+ " </xsl:for-each>\n"
+ " </xsl:for-each>\n"
+ " <h2>Network Status</h2>\n"
+ " <table class=\"counters\">\n"
+ " <tr>\n"
+ " <th>ID</th>\n"
+ " <th>Name</th>\n"
+ " <th>Type</th>\n"
+ " <th>References</th>\n"
+ " <th>LocalAddress</th>\n"
+ " <th>PeerAddress</th>\n"
+ " <th>State</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"socketmgr/sockets/socket\">\n"
+ " <xsl:sort select=\"id\"/>\n"
+ " <xsl:variable name=\"css-class12\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class12}\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"id\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"type\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"references\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"local-address\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"peer-address\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:for-each select=\"states\">\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </xsl:for-each>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Task Manager Configuration</h2>\n"
+ " <table class=\"counters\">\n"
+ " <tr>\n"
+ " <th class=\"even\">Thread-Model</th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/type\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr class=\"odd\">\n"
+ " <th>Worker Threads</th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/worker-threads\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr class=\"even\">\n"
+ " <th>Default Quantum</th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/default-quantum\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " <tr class=\"odd\">\n"
+ " <th>Tasks Running</th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"taskmgr/thread-model/tasks-running\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Tasks</h2>\n"
+ " <table class=\"counters\">\n"
+ " <tr>\n"
+ " <th>ID</th>\n"
+ " <th>Name</th>\n"
+ " <th>References</th>\n"
+ " <th>State</th>\n"
+ " <th>Quantum</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"taskmgr/tasks/task\">\n"
+ " <xsl:sort select=\"name\"/>\n"
+ " <xsl:variable name=\"css-class14\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class14}\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"id\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"references\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"state\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"quantum\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Memory Usage Summary</h2>\n"
+ " <table class=\"counters\">\n"
+ " <xsl:for-each select=\"memory/summary/*\">\n"
+ " <xsl:variable name=\"css-class13\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class13}\">\n"
+ " <th>\n"
+ " <xsl:value-of select=\"name()\"/>\n"
+ " </th>\n"
+ " <td>\n"
+ " <xsl:value-of select=\".\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <br/>\n"
+ " <h2>Memory Contexts</h2>\n"
+ " <table class=\"counters\">\n"
+ " <tr>\n"
+ " <th>ID</th>\n"
+ " <th>Name</th>\n"
+ " <th>References</th>\n"
+ " <th>TotalUse</th>\n"
+ " <th>InUse</th>\n"
+ " <th>MaxUse</th>\n"
+ " <th>BlockSize</th>\n"
+ " <th>Pools</th>\n"
+ " <th>HiWater</th>\n"
+ " <th>LoWater</th>\n"
+ " </tr>\n"
+ " <xsl:for-each select=\"memory/contexts/context\">\n"
+ " <xsl:sort select=\"total\" data-type=\"number\" order=\"descending\"/>\n"
+ " <xsl:variable name=\"css-class14\">\n"
+ " <xsl:choose>\n"
+ " <xsl:when test=\"position() mod 2 = 0\">even</xsl:when>\n"
+ " <xsl:otherwise>odd</xsl:otherwise>\n"
+ " </xsl:choose>\n"
+ " </xsl:variable>\n"
+ " <tr class=\"{$css-class14}\">\n"
+ " <td>\n"
+ " <xsl:value-of select=\"id\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"name\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"references\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"total\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"inuse\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"maxinuse\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"blocksize\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"pools\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"hiwater\"/>\n"
+ " </td>\n"
+ " <td>\n"
+ " <xsl:value-of select=\"lowater\"/>\n"
+ " </td>\n"
+ " </tr>\n"
+ " </xsl:for-each>\n"
+ " </table>\n"
+ " <hr/>\n"
+ " <p class=\"footer\">Internet Systems Consortium Inc.<br/><a href=\"http://www.isc.org\">http://www.isc.org</a></p>\n"
+ " </body>\n"
+ " </html>\n"
+ " </xsl:template>\n"
+ "</xsl:stylesheet>\n";
diff --git a/contrib/bind9/bin/named/builtin.c b/contrib/bind9/bin/named/builtin.c
index 14204cd295c6..4604cb3ce07e 100644
--- a/contrib/bind9/bin/named/builtin.c
+++ b/contrib/bind9/bin/named/builtin.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: builtin.c,v 1.20.14.3 2012/01/11 20:19:40 ckb Exp $ */
+/* $Id: builtin.c,v 1.26 2012/01/21 19:44:18 each Exp $ */
/*! \file
* \brief
@@ -281,11 +281,14 @@ dns64_cname(const dns_name_t *zone, const dns_name_t *name,
static isc_result_t
builtin_lookup(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *lookup)
+ dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo)
{
builtin_t *b = (builtin_t *) dbdata;
UNUSED(zone);
+ UNUSED(methods);
+ UNUSED(clientinfo);
if (strcmp(name, "@") == 0)
return (b->do_lookup(lookup));
@@ -295,10 +298,14 @@ builtin_lookup(const char *zone, const char *name, void *dbdata,
static isc_result_t
dns64_lookup(const dns_name_t *zone, const dns_name_t *name, void *dbdata,
- dns_sdblookup_t *lookup)
+ dns_sdblookup_t *lookup, dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo)
{
builtin_t *b = (builtin_t *) dbdata;
+ UNUSED(methods);
+ UNUSED(clientinfo);
+
if (name->labels == 0 && name->length == 0)
return (b->do_lookup(lookup));
else
@@ -353,6 +360,8 @@ do_authors_lookup(dns_sdblookup_t *lookup) {
"Curtis Blackburn",
"James Brister",
"Ben Cottrell",
+ "John H. DuBois III",
+ "Francis Dupont",
"Michael Graff",
"Andreas Gustafsson",
"Bob Halley",
diff --git a/contrib/bind9/bin/named/client.c b/contrib/bind9/bin/named/client.c
index 606cc2d4dad4..933abc7631e2 100644
--- a/contrib/bind9/bin/named/client.c
+++ b/contrib/bind9/bin/named/client.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: client.c,v 1.271.10.4 2012/01/31 23:46:39 tbox Exp $ */
+/* $Id$ */
#include <config.h>
@@ -24,6 +24,7 @@
#include <isc/once.h>
#include <isc/platform.h>
#include <isc/print.h>
+#include <isc/queue.h>
#include <isc/stats.h>
#include <isc/stdio.h>
#include <isc/string.h>
@@ -116,15 +117,26 @@
struct ns_clientmgr {
/* Unlocked. */
unsigned int magic;
+
+ /* The queue object has its own locks */
+ client_queue_t inactive; /*%< To be recycled */
+
isc_mem_t * mctx;
isc_taskmgr_t * taskmgr;
isc_timermgr_t * timermgr;
+
+ /* Lock covers manager state. */
isc_mutex_t lock;
- /* Locked by lock. */
isc_boolean_t exiting;
- client_list_t active; /*%< Active clients */
- client_list_t recursing; /*%< Recursing clients */
- client_list_t inactive; /*%< To be recycled */
+
+ /* Lock covers the clients list */
+ isc_mutex_t listlock;
+ client_list_t clients; /*%< All active clients */
+
+ /* Lock covers the recursing list */
+ isc_mutex_t reclock;
+ client_list_t recursing; /*%< Recursing clients */
+
#if NMCTXS > 0
/*%< mctx pool for clients. */
unsigned int nextmctx;
@@ -188,6 +200,12 @@ struct ns_clientmgr {
* recursion quota, and an outstanding write request.
*/
+#define NS_CLIENTSTATE_RECURSING 5
+/*%<
+ * The client object is recursing. It will be on the 'recursing'
+ * list.
+ */
+
#define NS_CLIENTSTATE_MAX 9
/*%<
* Sentinel value used to indicate "no state". When client->newstate
@@ -210,20 +228,21 @@ static void client_udprecv(ns_client_t *client);
static void clientmgr_destroy(ns_clientmgr_t *manager);
static isc_boolean_t exit_check(ns_client_t *client);
static void ns_client_endrequest(ns_client_t *client);
-static void ns_client_checkactive(ns_client_t *client);
static void client_start(isc_task_t *task, isc_event_t *event);
static void client_request(isc_task_t *task, isc_event_t *event);
static void ns_client_dumpmessage(ns_client_t *client, const char *reason);
+static isc_result_t get_client(ns_clientmgr_t *manager, ns_interface_t *ifp,
+ dns_dispatch_t *disp, isc_boolean_t tcp);
void
ns_client_recursing(ns_client_t *client) {
REQUIRE(NS_CLIENT_VALID(client));
+ REQUIRE(client->state == NS_CLIENTSTATE_WORKING);
- LOCK(&client->manager->lock);
- ISC_LIST_UNLINK(*client->list, client, link);
- ISC_LIST_APPEND(client->manager->recursing, client, link);
- client->list = &client->manager->recursing;
- UNLOCK(&client->manager->lock);
+ LOCK(&client->manager->reclock);
+ client->newstate = client->state = NS_CLIENTSTATE_RECURSING;
+ ISC_LIST_APPEND(client->manager->recursing, client, rlink);
+ UNLOCK(&client->manager->reclock);
}
void
@@ -231,15 +250,14 @@ ns_client_killoldestquery(ns_client_t *client) {
ns_client_t *oldest;
REQUIRE(NS_CLIENT_VALID(client));
- LOCK(&client->manager->lock);
+ LOCK(&client->manager->reclock);
oldest = ISC_LIST_HEAD(client->manager->recursing);
if (oldest != NULL) {
+ ISC_LIST_UNLINK(client->manager->recursing, oldest, rlink);
+ UNLOCK(&client->manager->reclock);
ns_query_cancel(oldest);
- ISC_LIST_UNLINK(*oldest->list, oldest, link);
- ISC_LIST_APPEND(client->manager->active, oldest, link);
- oldest->list = &client->manager->active;
- }
- UNLOCK(&client->manager->lock);
+ } else
+ UNLOCK(&client->manager->reclock);
}
void
@@ -268,15 +286,16 @@ ns_client_settimeout(ns_client_t *client, unsigned int seconds) {
*/
static isc_boolean_t
exit_check(ns_client_t *client) {
- ns_clientmgr_t *locked_manager = NULL;
- ns_clientmgr_t *destroy_manager = NULL;
+ isc_boolean_t destroy_manager = ISC_FALSE;
+ ns_clientmgr_t *manager = NULL;
REQUIRE(NS_CLIENT_VALID(client));
+ manager = client->manager;
if (client->state <= client->newstate)
return (ISC_FALSE); /* Business as usual. */
- INSIST(client->newstate < NS_CLIENTSTATE_WORKING);
+ INSIST(client->newstate < NS_CLIENTSTATE_RECURSING);
/*
* We need to detach from the view early when shutting down
@@ -293,13 +312,16 @@ exit_check(ns_client_t *client) {
client->newstate == NS_CLIENTSTATE_FREED && client->view != NULL)
dns_view_detach(&client->view);
- if (client->state == NS_CLIENTSTATE_WORKING) {
+ if (client->state == NS_CLIENTSTATE_WORKING ||
+ client->state == NS_CLIENTSTATE_RECURSING)
+ {
INSIST(client->newstate <= NS_CLIENTSTATE_READING);
/*
* Let the update processing complete.
*/
if (client->nupdates > 0)
return (ISC_TRUE);
+
/*
* We are trying to abort request processing.
*/
@@ -322,23 +344,28 @@ exit_check(ns_client_t *client) {
*/
return (ISC_TRUE);
}
+
/*
* I/O cancel is complete. Burn down all state
* related to the current request. Ensure that
- * the client is on the active list and not the
- * recursing list.
+ * the client is no longer on the recursing list.
+ *
+ * We need to check whether the client is still linked,
+ * because it may already have been removed from the
+ * recursing list by ns_client_killoldestquery()
*/
- LOCK(&client->manager->lock);
- if (client->list == &client->manager->recursing) {
- ISC_LIST_UNLINK(*client->list, client, link);
- ISC_LIST_APPEND(client->manager->active, client, link);
- client->list = &client->manager->active;
+ if (client->state == NS_CLIENTSTATE_RECURSING) {
+ LOCK(&manager->reclock);
+ if (ISC_LINK_LINKED(client, rlink))
+ ISC_LIST_UNLINK(manager->recursing,
+ client, rlink);
+ UNLOCK(&manager->reclock);
}
- UNLOCK(&client->manager->lock);
ns_client_endrequest(client);
client->state = NS_CLIENTSTATE_READING;
INSIST(client->recursionquota == NULL);
+
if (NS_CLIENTSTATE_READING == client->newstate) {
client_read(client);
client->newstate = NS_CLIENTSTATE_MAX;
@@ -389,8 +416,27 @@ exit_check(ns_client_t *client) {
* or UDP request, but we may have enough clients doing
* that already. Check whether this client needs to remain
* active and force it to go inactive if not.
+ *
+ * UDP clients go inactive at this point, but TCP clients
+ * may remain active if we have fewer active TCP client
+ * objects than desired due to an earlier quota exhaustion.
+ */
+ if (client->mortal && TCP_CLIENT(client) && !ns_g_clienttest) {
+ LOCK(&client->interface->lock);
+ if (client->interface->ntcpcurrent <
+ client->interface->ntcptarget)
+ client->mortal = ISC_FALSE;
+ UNLOCK(&client->interface->lock);
+ }
+
+ /*
+ * We don't need the client; send it to the inactive
+ * queue for recycling.
*/
- ns_client_checkactive(client);
+ if (client->mortal) {
+ if (client->newstate > NS_CLIENTSTATE_INACTIVE)
+ client->newstate = NS_CLIENTSTATE_INACTIVE;
+ }
if (NS_CLIENTSTATE_READY == client->newstate) {
if (TCP_CLIENT(client)) {
@@ -404,6 +450,7 @@ exit_check(ns_client_t *client) {
if (client->state == NS_CLIENTSTATE_READY) {
INSIST(client->newstate <= NS_CLIENTSTATE_INACTIVE);
+
/*
* We are trying to enter the inactive state.
*/
@@ -411,25 +458,22 @@ exit_check(ns_client_t *client) {
isc_socket_cancel(client->tcplistener, client->task,
ISC_SOCKCANCEL_ACCEPT);
- if (! (client->naccepts == 0)) {
- /* Still waiting for accept cancel completion. */
+ /* Still waiting for accept cancel completion. */
+ if (! (client->naccepts == 0))
return (ISC_TRUE);
- }
- /* Accept cancel is complete. */
+ /* Accept cancel is complete. */
if (client->nrecvs > 0)
isc_socket_cancel(client->udpsocket, client->task,
ISC_SOCKCANCEL_RECV);
- if (! (client->nrecvs == 0)) {
- /* Still waiting for recv cancel completion. */
+
+ /* Still waiting for recv cancel completion. */
+ if (! (client->nrecvs == 0))
return (ISC_TRUE);
- }
- /* Recv cancel is complete. */
- if (client->nctls > 0) {
- /* Still waiting for control event to be delivered */
+ /* Still waiting for control event to be delivered */
+ if (client->nctls > 0)
return (ISC_TRUE);
- }
/* Deactivate the client. */
if (client->interface)
@@ -449,7 +493,6 @@ exit_check(ns_client_t *client) {
client->attributes = 0;
client->mortal = ISC_FALSE;
- LOCK(&client->manager->lock);
/*
* Put the client on the inactive list. If we are aiming for
* the "freed" state, it will be removed from the inactive
@@ -457,18 +500,18 @@ exit_check(ns_client_t *client) {
* that has been done, lest the manager decide to reactivate
* the dying client inbetween.
*/
- locked_manager = client->manager;
- ISC_LIST_UNLINK(*client->list, client, link);
- ISC_LIST_APPEND(client->manager->inactive, client, link);
- client->list = &client->manager->inactive;
client->state = NS_CLIENTSTATE_INACTIVE;
INSIST(client->recursionquota == NULL);
if (client->state == client->newstate) {
client->newstate = NS_CLIENTSTATE_MAX;
+ if (!ns_g_clienttest && manager != NULL &&
+ !manager->exiting)
+ ISC_QUEUE_PUSH(manager->inactive, client,
+ ilink);
if (client->needshutdown)
isc_task_shutdown(client->task);
- goto unlock;
+ return (ISC_TRUE);
}
}
@@ -485,6 +528,7 @@ exit_check(ns_client_t *client) {
REQUIRE(client->state == NS_CLIENTSTATE_INACTIVE);
INSIST(client->recursionquota == NULL);
+ INSIST(!ISC_QLINK_LINKED(client, ilink));
ns_query_free(client);
isc_mem_put(client->mctx, client->recvbuf, RECV_BUFFER_SIZE);
@@ -493,27 +537,27 @@ exit_check(ns_client_t *client) {
isc_timer_detach(&client->timer);
if (client->tcpbuf != NULL)
- isc_mem_put(client->mctx, client->tcpbuf, TCP_BUFFER_SIZE);
+ isc_mem_put(client->mctx, client->tcpbuf,
+ TCP_BUFFER_SIZE);
if (client->opt != NULL) {
INSIST(dns_rdataset_isassociated(client->opt));
dns_rdataset_disassociate(client->opt);
- dns_message_puttemprdataset(client->message, &client->opt);
+ dns_message_puttemprdataset(client->message,
+ &client->opt);
}
+
dns_message_destroy(&client->message);
- if (client->manager != NULL) {
- ns_clientmgr_t *manager = client->manager;
- if (locked_manager == NULL) {
- LOCK(&manager->lock);
- locked_manager = manager;
- }
- ISC_LIST_UNLINK(*client->list, client, link);
- client->list = NULL;
+ if (manager != NULL) {
+ LOCK(&manager->listlock);
+ ISC_LIST_UNLINK(manager->clients, client, link);
+ LOCK(&manager->lock);
if (manager->exiting &&
- ISC_LIST_EMPTY(manager->active) &&
- ISC_LIST_EMPTY(manager->inactive) &&
- ISC_LIST_EMPTY(manager->recursing))
- destroy_manager = manager;
+ ISC_LIST_EMPTY(manager->clients))
+ destroy_manager = ISC_TRUE;
+ UNLOCK(&manager->lock);
+ UNLOCK(&manager->listlock);
}
+
/*
* Detaching the task must be done after unlinking from
* the manager's lists because the manager accesses
@@ -524,6 +568,7 @@ exit_check(ns_client_t *client) {
CTRACE("free");
client->magic = 0;
+
/*
* Check that there are no other external references to
* the memory context.
@@ -533,22 +578,10 @@ exit_check(ns_client_t *client) {
INSIST(0);
}
isc_mem_putanddetach(&client->mctx, client, sizeof(*client));
-
- goto unlock;
- }
-
- unlock:
- if (locked_manager != NULL) {
- UNLOCK(&locked_manager->lock);
- locked_manager = NULL;
}
- /*
- * Only now is it safe to destroy the client manager (if needed),
- * because we have accessed its lock for the last time.
- */
- if (destroy_manager != NULL)
- clientmgr_destroy(destroy_manager);
+ if (destroy_manager && manager != NULL)
+ clientmgr_destroy(manager);
return (ISC_TRUE);
}
@@ -604,6 +637,9 @@ client_shutdown(isc_task_t *task, isc_event_t *event) {
client->shutdown_arg = NULL;
}
+ if (ISC_QLINK_LINKED(client, ilink))
+ ISC_QUEUE_UNLINK(client->manager->inactive, client, ilink);
+
client->newstate = NS_CLIENTSTATE_FREED;
client->needshutdown = ISC_FALSE;
(void)exit_check(client);
@@ -616,7 +652,8 @@ ns_client_endrequest(ns_client_t *client) {
INSIST(client->nsends == 0);
INSIST(client->nrecvs == 0);
INSIST(client->nupdates == 0);
- INSIST(client->state == NS_CLIENTSTATE_WORKING);
+ INSIST(client->state == NS_CLIENTSTATE_WORKING ||
+ client->state == NS_CLIENTSTATE_RECURSING);
CTRACE("endrequest");
@@ -649,46 +686,13 @@ ns_client_endrequest(ns_client_t *client) {
client->attributes &= NS_CLIENTATTR_TCP;
}
-static void
-ns_client_checkactive(ns_client_t *client) {
- if (client->mortal) {
- /*
- * This client object should normally go inactive
- * at this point, but if we have fewer active client
- * objects than desired due to earlier quota exhaustion,
- * keep it active to make up for the shortage.
- */
- isc_boolean_t need_another_client = ISC_FALSE;
- if (TCP_CLIENT(client) && !ns_g_clienttest) {
- LOCK(&client->interface->lock);
- if (client->interface->ntcpcurrent <
- client->interface->ntcptarget)
- need_another_client = ISC_TRUE;
- UNLOCK(&client->interface->lock);
- } else {
- /*
- * The UDP client quota is enforced by making
- * requests fail rather than by not listening
- * for new ones. Therefore, there is always a
- * full set of UDP clients listening.
- */
- }
- if (! need_another_client) {
- /*
- * We don't need this client object. Recycle it.
- */
- if (client->newstate >= NS_CLIENTSTATE_INACTIVE)
- client->newstate = NS_CLIENTSTATE_INACTIVE;
- }
- }
-}
-
void
ns_client_next(ns_client_t *client, isc_result_t result) {
int newstate;
REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(client->state == NS_CLIENTSTATE_WORKING ||
+ client->state == NS_CLIENTSTATE_RECURSING ||
client->state == NS_CLIENTSTATE_READING);
CTRACE("next");
@@ -745,9 +749,6 @@ client_senddone(isc_task_t *task, isc_event_t *event) {
client->tcpbuf = NULL;
}
- if (exit_check(client))
- return;
-
ns_client_next(client, ISC_R_SUCCESS);
}
@@ -1394,10 +1395,9 @@ client_request(isc_task_t *task, isc_event_t *event) {
INSIST(client->recursionquota == NULL);
- INSIST(client->state ==
- TCP_CLIENT(client) ?
- NS_CLIENTSTATE_READING :
- NS_CLIENTSTATE_READY);
+ INSIST(client->state == (TCP_CLIENT(client) ?
+ NS_CLIENTSTATE_READING :
+ NS_CLIENTSTATE_READY));
ns_client_requests++;
@@ -1975,6 +1975,11 @@ static isc_result_t
get_clientmctx(ns_clientmgr_t *manager, isc_mem_t **mctxp) {
isc_mem_t *clientmctx;
isc_result_t result;
+#if NMCTXS > 0
+ unsigned int nextmctx;
+#endif
+
+ MTRACE("clientmctx");
/*
* Caller must be holding the manager lock.
@@ -1986,19 +1991,21 @@ get_clientmctx(ns_clientmgr_t *manager, isc_mem_t **mctxp) {
return (result);
}
#if NMCTXS > 0
- INSIST(manager->nextmctx < NMCTXS);
- clientmctx = manager->mctxpool[manager->nextmctx];
+ nextmctx = manager->nextmctx++;
+ if (manager->nextmctx == NMCTXS)
+ manager->nextmctx = 0;
+
+ INSIST(nextmctx < NMCTXS);
+
+ clientmctx = manager->mctxpool[nextmctx];
if (clientmctx == NULL) {
result = isc_mem_create(0, 0, &clientmctx);
if (result != ISC_R_SUCCESS)
return (result);
isc_mem_setname(clientmctx, "client", NULL);
- manager->mctxpool[manager->nextmctx] = clientmctx;
+ manager->mctxpool[nextmctx] = clientmctx;
}
- manager->nextmctx++;
- if (manager->nextmctx == NMCTXS)
- manager->nextmctx = 0;
#else
clientmctx = manager->mctx;
#endif
@@ -2119,6 +2126,8 @@ client_create(ns_clientmgr_t *manager, ns_client_t **clientp) {
#ifdef ALLOW_FILTER_AAAA_ON_V4
client->filter_aaaa = dns_v4_aaaa_ok;
#endif
+ client->needshutdown = ns_g_clienttest;
+
ISC_EVENT_INIT(&client->ctlevent, sizeof(client->ctlevent), 0, NULL,
NS_EVENT_CLIENTCONTROL, client_start, client, client,
NULL, NULL);
@@ -2130,7 +2139,8 @@ client_create(ns_clientmgr_t *manager, ns_client_t **clientp) {
client->formerrcache.time = 0;
client->formerrcache.id = 0;
ISC_LINK_INIT(client, link);
- client->list = NULL;
+ ISC_LINK_INIT(client, rlink);
+ ISC_QLINK_INIT(client, ilink);
/*
* We call the init routines for the various kinds of client here,
@@ -2145,8 +2155,6 @@ client_create(ns_clientmgr_t *manager, ns_client_t **clientp) {
if (result != ISC_R_SUCCESS)
goto cleanup_query;
- client->needshutdown = ns_g_clienttest;
-
CTRACE("create");
*clientp = client;
@@ -2408,10 +2416,11 @@ ns_client_replace(ns_client_t *client) {
CTRACE("replace");
- result = ns_clientmgr_createclients(client->manager,
- 1, client->interface,
- (TCP_CLIENT(client) ?
- ISC_TRUE : ISC_FALSE));
+ REQUIRE(client != NULL);
+ REQUIRE(client->manager != NULL);
+
+ result = get_client(client->manager, client->interface,
+ client->dispatch, TCP_CLIENT(client));
if (result != ISC_R_SUCCESS)
return (result);
@@ -2435,9 +2444,7 @@ clientmgr_destroy(ns_clientmgr_t *manager) {
int i;
#endif
- REQUIRE(ISC_LIST_EMPTY(manager->active));
- REQUIRE(ISC_LIST_EMPTY(manager->inactive));
- REQUIRE(ISC_LIST_EMPTY(manager->recursing));
+ REQUIRE(ISC_LIST_EMPTY(manager->clients));
MTRACE("clientmgr_destroy");
@@ -2448,7 +2455,10 @@ clientmgr_destroy(ns_clientmgr_t *manager) {
}
#endif
+ ISC_QUEUE_DESTROY(manager->inactive);
DESTROYLOCK(&manager->lock);
+ DESTROYLOCK(&manager->listlock);
+ DESTROYLOCK(&manager->reclock);
manager->magic = 0;
isc_mem_put(manager->mctx, manager, sizeof(*manager));
}
@@ -2471,13 +2481,21 @@ ns_clientmgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
if (result != ISC_R_SUCCESS)
goto cleanup_manager;
+ result = isc_mutex_init(&manager->listlock);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_lock;
+
+ result = isc_mutex_init(&manager->reclock);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_listlock;
+
manager->mctx = mctx;
manager->taskmgr = taskmgr;
manager->timermgr = timermgr;
manager->exiting = ISC_FALSE;
- ISC_LIST_INIT(manager->active);
- ISC_LIST_INIT(manager->inactive);
+ ISC_LIST_INIT(manager->clients);
ISC_LIST_INIT(manager->recursing);
+ ISC_QUEUE_INIT(manager->inactive, ilink);
#if NMCTXS > 0
manager->nextmctx = 0;
for (i = 0; i < NMCTXS; i++)
@@ -2491,6 +2509,12 @@ ns_clientmgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
return (ISC_R_SUCCESS);
+ cleanup_listlock:
+ (void) isc_mutex_destroy(&manager->listlock);
+
+ cleanup_lock:
+ (void) isc_mutex_destroy(&manager->lock);
+
cleanup_manager:
isc_mem_put(manager->mctx, manager, sizeof(*manager));
@@ -2499,9 +2523,10 @@ ns_clientmgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
void
ns_clientmgr_destroy(ns_clientmgr_t **managerp) {
+ isc_result_t result;
ns_clientmgr_t *manager;
ns_client_t *client;
- isc_boolean_t need_destroy = ISC_FALSE;
+ isc_boolean_t need_destroy = ISC_FALSE, unlock = ISC_FALSE;
REQUIRE(managerp != NULL);
manager = *managerp;
@@ -2509,31 +2534,27 @@ ns_clientmgr_destroy(ns_clientmgr_t **managerp) {
MTRACE("destroy");
- LOCK(&manager->lock);
+ /*
+ * Check for success because we may already be task-exclusive
+ * at this point. Only if we succeed at obtaining an exclusive
+ * lock now will we need to relinquish it later.
+ */
+ result = isc_task_beginexclusive(ns_g_server->task);
+ if (result == ISC_R_SUCCESS)
+ unlock = ISC_TRUE;
manager->exiting = ISC_TRUE;
- for (client = ISC_LIST_HEAD(manager->recursing);
- client != NULL;
- client = ISC_LIST_NEXT(client, link))
- isc_task_shutdown(client->task);
-
- for (client = ISC_LIST_HEAD(manager->active);
- client != NULL;
- client = ISC_LIST_NEXT(client, link))
- isc_task_shutdown(client->task);
-
- for (client = ISC_LIST_HEAD(manager->inactive);
+ for (client = ISC_LIST_HEAD(manager->clients);
client != NULL;
client = ISC_LIST_NEXT(client, link))
isc_task_shutdown(client->task);
- if (ISC_LIST_EMPTY(manager->active) &&
- ISC_LIST_EMPTY(manager->inactive) &&
- ISC_LIST_EMPTY(manager->recursing))
+ if (ISC_LIST_EMPTY(manager->clients))
need_destroy = ISC_TRUE;
- UNLOCK(&manager->lock);
+ if (unlock)
+ isc_task_endexclusive(ns_g_server->task);
if (need_destroy)
clientmgr_destroy(manager);
@@ -2541,81 +2562,86 @@ ns_clientmgr_destroy(ns_clientmgr_t **managerp) {
*managerp = NULL;
}
-isc_result_t
-ns_clientmgr_createclients(ns_clientmgr_t *manager, unsigned int n,
- ns_interface_t *ifp, isc_boolean_t tcp)
+static isc_result_t
+get_client(ns_clientmgr_t *manager, ns_interface_t *ifp,
+ dns_dispatch_t *disp, isc_boolean_t tcp)
{
isc_result_t result = ISC_R_SUCCESS;
- unsigned int i;
+ isc_event_t *ev;
ns_client_t *client;
+ MTRACE("get client");
- REQUIRE(VALID_MANAGER(manager));
- REQUIRE(n > 0);
+ REQUIRE(manager != NULL);
- MTRACE("createclients");
+ if (manager->exiting)
+ return (ISC_R_SHUTTINGDOWN);
/*
- * We MUST lock the manager lock for the entire client creation
- * process. If we didn't do this, then a client could get a
- * shutdown event and disappear out from under us.
+ * Allocate a client. First try to get a recycled one;
+ * if that fails, make a new one.
*/
+ client = NULL;
+ if (!ns_g_clienttest)
+ ISC_QUEUE_POP(manager->inactive, ilink, client);
- LOCK(&manager->lock);
+ if (client != NULL)
+ MTRACE("recycle");
+ else {
+ MTRACE("create new");
- for (i = 0; i < n; i++) {
- isc_event_t *ev;
- /*
- * Allocate a client. First try to get a recycled one;
- * if that fails, make a new one.
- */
- client = NULL;
- if (!ns_g_clienttest)
- client = ISC_LIST_HEAD(manager->inactive);
- if (client != NULL) {
- MTRACE("recycle");
- ISC_LIST_UNLINK(manager->inactive, client, link);
- client->list = NULL;
- } else {
- MTRACE("create new");
- result = client_create(manager, &client);
- if (result != ISC_R_SUCCESS)
- break;
- }
+ LOCK(&manager->lock);
+ result = client_create(manager, &client);
+ UNLOCK(&manager->lock);
+ if (result != ISC_R_SUCCESS)
+ return (result);
- ns_interface_attach(ifp, &client->interface);
- client->state = NS_CLIENTSTATE_READY;
- INSIST(client->recursionquota == NULL);
+ LOCK(&manager->listlock);
+ ISC_LIST_APPEND(manager->clients, client, link);
+ UNLOCK(&manager->listlock);
+ }
- if (tcp) {
- client->attributes |= NS_CLIENTATTR_TCP;
- isc_socket_attach(ifp->tcpsocket,
- &client->tcplistener);
- } else {
- isc_socket_t *sock;
+ client->manager = manager;
+ ns_interface_attach(ifp, &client->interface);
+ client->state = NS_CLIENTSTATE_READY;
+ INSIST(client->recursionquota == NULL);
- dns_dispatch_attach(ifp->udpdispatch,
- &client->dispatch);
- sock = dns_dispatch_getsocket(client->dispatch);
- isc_socket_attach(sock, &client->udpsocket);
- }
- client->manager = manager;
- ISC_LIST_APPEND(manager->active, client, link);
- client->list = &manager->active;
+ if (tcp) {
+ client->attributes |= NS_CLIENTATTR_TCP;
+ isc_socket_attach(ifp->tcpsocket,
+ &client->tcplistener);
+ } else {
+ isc_socket_t *sock;
- INSIST(client->nctls == 0);
- client->nctls++;
- ev = &client->ctlevent;
- isc_task_send(client->task, &ev);
- }
- if (i != 0) {
- /*
- * We managed to create at least one client, so we
- * declare victory.
- */
- result = ISC_R_SUCCESS;
+ dns_dispatch_attach(disp, &client->dispatch);
+ sock = dns_dispatch_getsocket(client->dispatch);
+ isc_socket_attach(sock, &client->udpsocket);
}
- UNLOCK(&manager->lock);
+ INSIST(client->nctls == 0);
+ client->nctls++;
+ ev = &client->ctlevent;
+ isc_task_send(client->task, &ev);
+
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
+ns_clientmgr_createclients(ns_clientmgr_t *manager, unsigned int n,
+ ns_interface_t *ifp, isc_boolean_t tcp)
+{
+ isc_result_t result = ISC_R_SUCCESS;
+ unsigned int disp;
+
+ REQUIRE(VALID_MANAGER(manager));
+ REQUIRE(n > 0);
+
+ MTRACE("createclients");
+
+ for (disp = 0; disp < n; disp++) {
+ result = get_client(manager, ifp, ifp->udpdispatch[disp], tcp);
+ if (result != ISC_R_SUCCESS)
+ break;
+ }
return (result);
}
@@ -2700,19 +2726,41 @@ ns_client_logv(ns_client_t *client, isc_logcategory_t *category,
{
char msgbuf[2048];
char peerbuf[ISC_SOCKADDR_FORMATSIZE];
- const char *name = "";
- const char *sep = "";
+ char signerbuf[DNS_NAME_FORMATSIZE], qnamebuf[DNS_NAME_FORMATSIZE];
+ const char *viewname = "";
+ const char *sep1 = "", *sep2 = "", *sep3 = "", *sep4 = "";
+ const char *signer = "", *qname = "";
+ dns_name_t *q = NULL;
vsnprintf(msgbuf, sizeof(msgbuf), fmt, ap);
+
ns_client_name(client, peerbuf, sizeof(peerbuf));
+
+ if (client->signer != NULL) {
+ dns_name_format(client->signer, signerbuf, sizeof(signerbuf));
+ sep1 = "/key ";
+ signer = signerbuf;
+ }
+
+ q = client->query.origqname != NULL
+ ? client->query.origqname : client->query.qname;
+ if (q != NULL) {
+ dns_name_format(q, qnamebuf, sizeof(qnamebuf));
+ sep2 = " (";
+ sep3 = ")";
+ qname = qnamebuf;
+ }
+
if (client->view != NULL && strcmp(client->view->name, "_bind") != 0 &&
strcmp(client->view->name, "_default") != 0) {
- name = client->view->name;
- sep = ": view ";
+ sep4 = ": view ";
+ viewname = client->view->name;
}
isc_log_write(ns_g_lctx, category, module, level,
- "client %s%s%s: %s", peerbuf, sep, name, msgbuf);
+ "client %s%s%s%s%s%s%s%s: %s",
+ peerbuf, sep1, signer, sep2, qname, sep3,
+ sep4, viewname, msgbuf);
}
void
@@ -2794,9 +2842,11 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager) {
REQUIRE(VALID_MANAGER(manager));
- LOCK(&manager->lock);
+ LOCK(&manager->reclock);
client = ISC_LIST_HEAD(manager->recursing);
while (client != NULL) {
+ INSIST(client->state == NS_CLIENTSTATE_RECURSING);
+
ns_client_name(client, peerbuf, sizeof(peerbuf));
if (client->view != NULL &&
strcmp(client->view->name, "_bind") != 0 &&
@@ -2807,6 +2857,9 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager) {
name = "";
sep = "";
}
+
+ LOCK(&client->query.fetchlock);
+ INSIST(client->query.qname != NULL);
dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
if (client->query.qname != client->query.origqname &&
client->query.origqname != NULL) {
@@ -2829,20 +2882,19 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager) {
strcpy(typebuf, "-");
strcpy(classbuf, "-");
}
+ UNLOCK(&client->query.fetchlock);
fprintf(f, "; client %s%s%s: id %u '%s/%s/%s'%s%s "
"requesttime %d\n", peerbuf, sep, name,
client->message->id, namebuf, typebuf, classbuf,
origfor, original, client->requesttime);
- client = ISC_LIST_NEXT(client, link);
+ client = ISC_LIST_NEXT(client, rlink);
}
- UNLOCK(&manager->lock);
+ UNLOCK(&manager->reclock);
}
void
ns_client_qnamereplace(ns_client_t *client, dns_name_t *name) {
-
- if (client->manager != NULL)
- LOCK(&client->manager->lock);
+ LOCK(&client->query.fetchlock);
if (client->query.restarts > 0) {
/*
* client->query.qname was dynamically allocated.
@@ -2851,6 +2903,16 @@ ns_client_qnamereplace(ns_client_t *client, dns_name_t *name) {
&client->query.qname);
}
client->query.qname = name;
- if (client->manager != NULL)
- UNLOCK(&client->manager->lock);
+ UNLOCK(&client->query.fetchlock);
+}
+
+isc_result_t
+ns_client_sourceip(dns_clientinfo_t *ci, isc_sockaddr_t **addrp) {
+ ns_client_t *client = (ns_client_t *) ci->data;
+
+ REQUIRE(NS_CLIENT_VALID(client));
+ REQUIRE(addrp != NULL);
+
+ *addrp = &client->peeraddr;
+ return (ISC_R_SUCCESS);
}
diff --git a/contrib/bind9/bin/named/config.c b/contrib/bind9/bin/named/config.c
index 9e453ade3bc6..fa349eeade2f 100644
--- a/contrib/bind9/bin/named/config.c
+++ b/contrib/bind9/bin/named/config.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: config.c,v 1.113.16.2 2011/02/28 01:19:58 tbox Exp $ */
+/* $Id: config.c,v 1.123 2012/01/06 23:46:41 tbox Exp $ */
/*! \file */
@@ -73,6 +73,7 @@ options {\n\
listen-on {any;};\n\
listen-on-v6 {none;};\n\
match-mapped-addresses no;\n\
+ max-rsa-exponent-size 0; /* no limit */\n\
memstatistics-file \"named.memstats\";\n\
multiple-cnames no;\n\
# named-xfer <obsolete>;\n\
@@ -90,7 +91,7 @@ options {\n\
"\
recursive-clients 1000;\n\
resolver-query-timeout 10;\n\
- rrset-order {type NS order random; order cyclic; };\n\
+ rrset-order { order random; };\n\
serial-queries 20;\n\
serial-query-rate 20;\n\
server-id none;\n\
@@ -150,6 +151,7 @@ options {\n\
check-names response ignore;\n\
check-dup-records warn;\n\
check-mx warn;\n\
+ check-spf warn;\n\
acache-enable no;\n\
acache-cleaning-interval 60;\n\
max-acache-size 16M;\n\
@@ -199,7 +201,8 @@ options {\n\
sig-signing-nodes 100;\n\
sig-signing-signatures 10;\n\
sig-signing-type 65534;\n\
- zone-statistics false;\n\
+ inline-signing no;\n\
+ zone-statistics terse;\n\
max-journal-size unlimited;\n\
ixfr-from-differences false;\n\
check-wildcard yes;\n\
@@ -209,7 +212,10 @@ options {\n\
check-srv-cname warn;\n\
zero-no-soa-ttl yes;\n\
update-check-ksk yes;\n\
+ serial-update-method increment;\n\
+ dnssec-update-mode maintain;\n\
dnssec-dnskey-kskonly no;\n\
+ dnssec-loadkeys-interval 60;\n\
try-tcp-refresh yes; /* BIND 8 compat */\n\
};\n\
"
@@ -291,7 +297,8 @@ ns_checknames_get(const cfg_obj_t **maps, const char *which,
if (maps[i] == NULL)
return (ISC_R_NOTFOUND);
checknames = NULL;
- if (cfg_map_get(maps[i], "check-names", &checknames) == ISC_R_SUCCESS) {
+ if (cfg_map_get(maps[i], "check-names",
+ &checknames) == ISC_R_SUCCESS) {
/*
* Zone map entry is not a list.
*/
@@ -304,7 +311,8 @@ ns_checknames_get(const cfg_obj_t **maps, const char *which,
element = cfg_list_next(element)) {
value = cfg_listelt_value(element);
type = cfg_tuple_get(value, "type");
- if (strcasecmp(cfg_obj_asstring(type), which) == 0) {
+ if (strcasecmp(cfg_obj_asstring(type),
+ which) == 0) {
*obj = cfg_tuple_get(value, "mode");
return (ISC_R_SUCCESS);
}
@@ -377,6 +385,8 @@ ns_config_getzonetype(const cfg_obj_t *zonetypeobj) {
ztype = dns_zone_stub;
else if (strcasecmp(str, "static-stub") == 0)
ztype = dns_zone_staticstub;
+ else if (strcasecmp(str, "redirect") == 0)
+ ztype = dns_zone_redirect;
else
INSIST(0);
return (ztype);
@@ -639,17 +649,16 @@ ns_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
if (isc_sockaddr_getport(&addrs[i]) == 0)
isc_sockaddr_setport(&addrs[i], port);
keys[i] = NULL;
- if (!cfg_obj_isstring(key)) {
- i++;
+ i++; /* Increment here so that cleanup on error works. */
+ if (!cfg_obj_isstring(key))
continue;
- }
- keys[i] = isc_mem_get(mctx, sizeof(dns_name_t));
- if (keys[i] == NULL)
+ keys[i - 1] = isc_mem_get(mctx, sizeof(dns_name_t));
+ if (keys[i - 1] == NULL)
goto cleanup;
- dns_name_init(keys[i], NULL);
+ dns_name_init(keys[i - 1], NULL);
keystr = cfg_obj_asstring(key);
- isc_buffer_init(&b, keystr, strlen(keystr));
+ isc_buffer_constinit(&b, keystr, strlen(keystr));
isc_buffer_add(&b, strlen(keystr));
dns_fixedname_init(&fname);
result = dns_name_fromtext(dns_fixedname_name(&fname), &b,
@@ -657,10 +666,9 @@ ns_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
if (result != ISC_R_SUCCESS)
goto cleanup;
result = dns_name_dup(dns_fixedname_name(&fname), mctx,
- keys[i]);
+ keys[i - 1]);
if (result != ISC_R_SUCCESS)
goto cleanup;
- i++;
}
if (pushed != 0) {
pushed--;
@@ -716,7 +724,7 @@ ns_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
if (addrs != NULL)
isc_mem_put(mctx, addrs, addrcount * sizeof(isc_sockaddr_t));
if (keys != NULL) {
- for (j = 0; j <= i; j++) {
+ for (j = 0; j < i; j++) {
if (keys[j] == NULL)
continue;
if (dns_name_dynamic(keys[j]))
diff --git a/contrib/bind9/bin/named/control.c b/contrib/bind9/bin/named/control.c
index ff084fc7d5a9..fabe442aabc3 100644
--- a/contrib/bind9/bin/named/control.c
+++ b/contrib/bind9/bin/named/control.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: control.c,v 1.41 2010/12/03 22:05:19 each Exp $ */
+/* $Id$ */
/*! \file */
@@ -61,7 +61,7 @@ command_compare(const char *text, const char *command) {
isc_result_t
ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
isccc_sexpr_t *data;
- char *command;
+ char *command = NULL;
isc_result_t result;
int log_level;
#ifdef HAVE_LIBSCF
@@ -154,7 +154,7 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
} else if (command_compare(command, NS_COMMAND_DUMPSTATS)) {
result = ns_server_dumpstats(ns_g_server);
} else if (command_compare(command, NS_COMMAND_QUERYLOG)) {
- result = ns_server_togglequerylog(ns_g_server);
+ result = ns_server_togglequerylog(ns_g_server, command);
} else if (command_compare(command, NS_COMMAND_DUMPDB)) {
ns_server_dumpdb(ns_g_server, command);
result = ISC_R_SUCCESS;
@@ -169,7 +169,9 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
} else if (command_compare(command, NS_COMMAND_FLUSH)) {
result = ns_server_flushcache(ns_g_server, command);
} else if (command_compare(command, NS_COMMAND_FLUSHNAME)) {
- result = ns_server_flushname(ns_g_server, command);
+ result = ns_server_flushnode(ns_g_server, command, ISC_FALSE);
+ } else if (command_compare(command, NS_COMMAND_FLUSHTREE)) {
+ result = ns_server_flushnode(ns_g_server, command, ISC_TRUE);
} else if (command_compare(command, NS_COMMAND_STATUS)) {
result = ns_server_status(ns_g_server, text);
} else if (command_compare(command, NS_COMMAND_TSIGLIST)) {
@@ -183,6 +185,8 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
command_compare(command, NS_COMMAND_THAW)) {
result = ns_server_freeze(ns_g_server, ISC_FALSE, command,
text);
+ } else if (command_compare(command, NS_COMMAND_SYNC)) {
+ result = ns_server_sync(ns_g_server, command, text);
} else if (command_compare(command, NS_COMMAND_RECURSING)) {
result = ns_server_dumprecursing(ns_g_server);
} else if (command_compare(command, NS_COMMAND_TIMERPOKE)) {
@@ -201,6 +205,8 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
result = ns_server_add_zone(ns_g_server, command);
} else if (command_compare(command, NS_COMMAND_DELZONE)) {
result = ns_server_del_zone(ns_g_server, command);
+ } else if (command_compare(command, NS_COMMAND_SIGNING)) {
+ result = ns_server_signing(ns_g_server, command, text);
} else {
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_CONTROL, ISC_LOG_WARNING,
diff --git a/contrib/bind9/bin/named/controlconf.c b/contrib/bind9/bin/named/controlconf.c
index daf00d04ed65..c46a6e15f467 100644
--- a/contrib/bind9/bin/named/controlconf.c
+++ b/contrib/bind9/bin/named/controlconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: controlconf.c,v 1.60.544.3 2011/12/22 08:10:09 marka Exp $ */
+/* $Id: controlconf.c,v 1.63 2011/12/22 08:07:48 marka Exp $ */
/*! \file */
@@ -149,7 +149,7 @@ free_listener(controllistener_t *listener) {
if (listener->acl != NULL)
dns_acl_detach(&listener->acl);
- isc_mem_put(listener->mctx, listener, sizeof(*listener));
+ isc_mem_putanddetach(&listener->mctx, listener, sizeof(*listener));
}
static void
@@ -1066,8 +1066,9 @@ add_listener(ns_controls_t *cp, controllistener_t **listenerp,
result = ISC_R_NOMEMORY;
if (result == ISC_R_SUCCESS) {
+ listener->mctx = NULL;
+ isc_mem_attach(mctx, &listener->mctx);
listener->controls = cp;
- listener->mctx = mctx;
listener->task = cp->server->task;
listener->address = *addr;
listener->sock = NULL;
diff --git a/contrib/bind9/bin/named/include/dlz/dlz_dlopen_driver.h b/contrib/bind9/bin/named/include/dlz/dlz_dlopen_driver.h
index 7af325a13b30..602b3c074d12 100644
--- a/contrib/bind9/bin/named/include/dlz/dlz_dlopen_driver.h
+++ b/contrib/bind9/bin/named/include/dlz/dlz_dlopen_driver.h
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dlz_dlopen_driver.h,v 1.1.4.4 2011/03/17 09:41:06 fdupont Exp $ */
+/* $Id: dlz_dlopen_driver.h,v 1.4 2011/03/17 09:25:53 fdupont Exp $ */
#ifndef DLZ_DLOPEN_DRIVER_H
#define DLZ_DLOPEN_DRIVER_H
diff --git a/contrib/bind9/bin/named/include/named/client.h b/contrib/bind9/bin/named/include/named/client.h
index 109d160b456b..98e79df70668 100644
--- a/contrib/bind9/bin/named/include/named/client.h
+++ b/contrib/bind9/bin/named/include/named/client.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: client.h,v 1.91.278.2 2012/01/31 23:46:39 tbox Exp $ */
+/* $Id$ */
#ifndef NAMED_CLIENT_H
#define NAMED_CLIENT_H 1
@@ -66,7 +66,9 @@
#include <isc/magic.h>
#include <isc/stdtime.h>
#include <isc/quota.h>
+#include <isc/queue.h>
+#include <dns/db.h>
#include <dns/fixedname.h>
#include <dns/name.h>
#include <dns/rdataclass.h>
@@ -81,8 +83,6 @@
*** Types
***/
-typedef ISC_LIST(ns_client_t) client_list_t;
-
/*% nameserver client structure */
struct ns_client {
unsigned int magic;
@@ -155,26 +155,29 @@ struct ns_client {
isc_stdtime_t time;
dns_messageid_t id;
} formerrcache;
+
ISC_LINK(ns_client_t) link;
- /*%
- * The list 'link' is part of, or NULL if not on any list.
- */
- client_list_t *list;
+ ISC_LINK(ns_client_t) rlink;
+ ISC_QLINK(ns_client_t) ilink;
};
+typedef ISC_QUEUE(ns_client_t) client_queue_t;
+typedef ISC_LIST(ns_client_t) client_list_t;
+
#define NS_CLIENT_MAGIC ISC_MAGIC('N','S','C','c')
#define NS_CLIENT_VALID(c) ISC_MAGIC_VALID(c, NS_CLIENT_MAGIC)
-#define NS_CLIENTATTR_TCP 0x01
-#define NS_CLIENTATTR_RA 0x02 /*%< Client gets recursive service */
-#define NS_CLIENTATTR_PKTINFO 0x04 /*%< pktinfo is valid */
-#define NS_CLIENTATTR_MULTICAST 0x08 /*%< recv'd from multicast */
-#define NS_CLIENTATTR_WANTDNSSEC 0x10 /*%< include dnssec records */
-#define NS_CLIENTATTR_WANTNSID 0x20 /*%< include nameserver ID */
+#define NS_CLIENTATTR_TCP 0x001
+#define NS_CLIENTATTR_RA 0x002 /*%< Client gets recursive service */
+#define NS_CLIENTATTR_PKTINFO 0x004 /*%< pktinfo is valid */
+#define NS_CLIENTATTR_MULTICAST 0x008 /*%< recv'd from multicast */
+#define NS_CLIENTATTR_WANTDNSSEC 0x010 /*%< include dnssec records */
+#define NS_CLIENTATTR_WANTNSID 0x020 /*%< include nameserver ID */
#ifdef ALLOW_FILTER_AAAA_ON_V4
-#define NS_CLIENTATTR_FILTER_AAAA 0x40 /*%< suppress AAAAs */
-#define NS_CLIENTATTR_FILTER_AAAA_RC 0x80 /*%< recursing for A against AAAA */
+#define NS_CLIENTATTR_FILTER_AAAA 0x040 /*%< suppress AAAAs */
+#define NS_CLIENTATTR_FILTER_AAAA_RC 0x080 /*%< recursing for A against AAAA */
#endif
+#define NS_CLIENTATTR_WANTAD 0x100 /*%< want AD in response if possible */
extern unsigned int ns_client_requests;
@@ -378,4 +381,7 @@ ns_client_isself(dns_view_t *myview, dns_tsigkey_t *mykey,
* Isself callback.
*/
+isc_result_t
+ns_client_sourceip(dns_clientinfo_t *ci, isc_sockaddr_t **addrp);
+
#endif /* NAMED_CLIENT_H */
diff --git a/contrib/bind9/bin/named/include/named/control.h b/contrib/bind9/bin/named/include/named/control.h
index 24e59093b4d1..d730a83280cd 100644
--- a/contrib/bind9/bin/named/include/named/control.h
+++ b/contrib/bind9/bin/named/include/named/control.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: control.h,v 1.31 2010/08/16 22:21:06 marka Exp $ */
+/* $Id$ */
#ifndef NAMED_CONTROL_H
#define NAMED_CONTROL_H 1
@@ -47,6 +47,7 @@
#define NS_COMMAND_NOTRACE "notrace"
#define NS_COMMAND_FLUSH "flush"
#define NS_COMMAND_FLUSHNAME "flushname"
+#define NS_COMMAND_FLUSHTREE "flushtree"
#define NS_COMMAND_STATUS "status"
#define NS_COMMAND_TSIGLIST "tsig-list"
#define NS_COMMAND_TSIGDELETE "tsig-delete"
@@ -62,6 +63,8 @@
#define NS_COMMAND_LOADKEYS "loadkeys"
#define NS_COMMAND_ADDZONE "addzone"
#define NS_COMMAND_DELZONE "delzone"
+#define NS_COMMAND_SYNC "sync"
+#define NS_COMMAND_SIGNING "signing"
isc_result_t
ns_controls_create(ns_server_t *server, ns_controls_t **ctrlsp);
diff --git a/contrib/bind9/bin/named/include/named/globals.h b/contrib/bind9/bin/named/include/named/globals.h
index 842931677b55..cbc14d8b72d9 100644
--- a/contrib/bind9/bin/named/include/named/globals.h
+++ b/contrib/bind9/bin/named/include/named/globals.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: globals.h,v 1.89.54.2 2011/06/17 23:47:10 tbox Exp $ */
+/* $Id: globals.h,v 1.92 2011/11/09 18:44:04 each Exp $ */
#ifndef NAMED_GLOBALS_H
#define NAMED_GLOBALS_H 1
@@ -51,6 +51,7 @@
EXTERN isc_mem_t * ns_g_mctx INIT(NULL);
EXTERN unsigned int ns_g_cpus INIT(0);
+EXTERN unsigned int ns_g_udpdisp INIT(0);
EXTERN isc_taskmgr_t * ns_g_taskmgr INIT(NULL);
EXTERN dns_dispatchmgr_t * ns_g_dispatchmgr INIT(NULL);
EXTERN isc_entropy_t * ns_g_entropy INIT(NULL);
@@ -66,6 +67,9 @@ EXTERN isc_timermgr_t * ns_g_timermgr INIT(NULL);
EXTERN isc_socketmgr_t * ns_g_socketmgr INIT(NULL);
EXTERN cfg_parser_t * ns_g_parser INIT(NULL);
EXTERN const char * ns_g_version INIT(VERSION);
+EXTERN const char * ns_g_product INIT(PRODUCT);
+EXTERN const char * ns_g_description INIT(DESCRIPTION);
+EXTERN const char * ns_g_srcid INIT(SRCID);
EXTERN const char * ns_g_configargs INIT(CONFIGARGS);
EXTERN in_port_t ns_g_port INIT(0);
EXTERN in_port_t lwresd_g_listenport INIT(0);
@@ -120,6 +124,7 @@ EXTERN isc_boolean_t ns_g_coreok INIT(ISC_TRUE);
EXTERN const char * ns_g_chrootdir INIT(NULL);
EXTERN isc_boolean_t ns_g_foreground INIT(ISC_FALSE);
EXTERN isc_boolean_t ns_g_logstderr INIT(ISC_FALSE);
+EXTERN isc_boolean_t ns_g_nosyslog INIT(ISC_FALSE);
EXTERN const char * ns_g_defaultsessionkeyfile
INIT(NS_LOCALSTATEDIR "/run/named/"
@@ -153,6 +158,7 @@ EXTERN isc_boolean_t ns_g_memstatistics INIT(ISC_FALSE);
EXTERN isc_boolean_t ns_g_clienttest INIT(ISC_FALSE);
EXTERN isc_boolean_t ns_g_nosoa INIT(ISC_FALSE);
EXTERN isc_boolean_t ns_g_noaa INIT(ISC_FALSE);
+EXTERN isc_boolean_t ns_g_nonearest INIT(ISC_FALSE);
#undef EXTERN
#undef INIT
diff --git a/contrib/bind9/bin/named/include/named/interfacemgr.h b/contrib/bind9/bin/named/include/named/interfacemgr.h
index 2724c393cdc5..380dbedd7686 100644
--- a/contrib/bind9/bin/named/include/named/interfacemgr.h
+++ b/contrib/bind9/bin/named/include/named/interfacemgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: interfacemgr.h,v 1.33 2007/06/19 23:46:59 tbox Exp $ */
+/* $Id: interfacemgr.h,v 1.35 2011/07/28 23:47:58 tbox Exp $ */
#ifndef NAMED_INTERFACEMGR_H
#define NAMED_INTERFACEMGR_H 1
@@ -65,7 +65,8 @@
#define NS_INTERFACE_VALID(t) ISC_MAGIC_VALID(t, IFACE_MAGIC)
#define NS_INTERFACEFLAG_ANYADDR 0x01U /*%< bound to "any" address */
-
+#define MAX_UDP_DISPATCH 128 /*%< Maximum number of UDP dispatchers
+ to start per interface */
/*% The nameserver interface structure */
struct ns_interface {
unsigned int magic; /*%< Magic number. */
@@ -76,11 +77,13 @@ struct ns_interface {
isc_sockaddr_t addr; /*%< Address and port. */
unsigned int flags; /*%< Interface characteristics */
char name[32]; /*%< Null terminated. */
- dns_dispatch_t * udpdispatch; /*%< UDP dispatcher. */
+ dns_dispatch_t * udpdispatch[MAX_UDP_DISPATCH];
+ /*%< UDP dispatchers. */
isc_socket_t * tcpsocket; /*%< TCP socket. */
int ntcptarget; /*%< Desired number of concurrent
TCP accepts */
int ntcpcurrent; /*%< Current ditto, locked */
+ int nudpdispatch; /*%< Number of UDP dispatches */
ns_clientmgr_t * clientmgr; /*%< Client manager. */
ISC_LINK(ns_interface_t) link;
};
diff --git a/contrib/bind9/bin/named/include/named/server.h b/contrib/bind9/bin/named/include/named/server.h
index 25aa641ad37e..3ba0c64a712d 100644
--- a/contrib/bind9/bin/named/include/named/server.h
+++ b/contrib/bind9/bin/named/include/named/server.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.h,v 1.110 2010/08/16 23:46:52 tbox Exp $ */
+/* $Id$ */
#ifndef NAMED_SERVER_H
#define NAMED_SERVER_H 1
@@ -165,7 +165,9 @@ enum {
dns_nsstatscounter_updatefail = 34,
dns_nsstatscounter_updatebadprereq = 35,
- dns_nsstatscounter_max = 36
+ dns_nsstatscounter_rpz_rewrites = 36,
+
+ dns_nsstatscounter_max = 37
};
void
@@ -228,9 +230,10 @@ ns_server_retransfercommand(ns_server_t *server, char *args);
*/
isc_result_t
-ns_server_togglequerylog(ns_server_t *server);
+ns_server_togglequerylog(ns_server_t *server, char *args);
/*%<
- * Toggle logging of queries, as in BIND 8.
+ * Enable/disable logging of queries. (Takes "yes" or "no" argument,
+ * but can also be used as a toggle for backward comptibility.)
*/
/*%
@@ -264,10 +267,12 @@ isc_result_t
ns_server_flushcache(ns_server_t *server, char *args);
/*%
- * Flush a particular name from the server's cache(s)
+ * Flush a particular name from the server's cache. If 'tree' is false,
+ * also flush the name from the ADB and badcache. If 'tree' is true, also
+ * flush all the names under the specified name.
*/
isc_result_t
-ns_server_flushname(ns_server_t *server, char *args);
+ns_server_flushnode(ns_server_t *server, char *args, isc_boolean_t tree);
/*%
* Report the server's status.
@@ -295,6 +300,12 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
isc_buffer_t *text);
/*%
+ * Dump zone updates to disk, optionally removing the journal file
+ */
+isc_result_t
+ns_server_sync(ns_server_t *server, char *args, isc_buffer_t *text);
+
+/*%
* Update a zone's DNSKEY set from the key repository. If
* the command that triggered the call to this function was "sign",
* then force a full signing of the zone. If it was "loadkeys",
@@ -334,4 +345,9 @@ ns_server_add_zone(ns_server_t *server, char *args);
isc_result_t
ns_server_del_zone(ns_server_t *server, char *args);
+/*%
+ * Lists the status of the signing records for a given zone.
+ */
+isc_result_t
+ns_server_signing(ns_server_t *server, char *args, isc_buffer_t *text);
#endif /* NAMED_SERVER_H */
diff --git a/contrib/bind9/bin/named/include/named/zoneconf.h b/contrib/bind9/bin/named/include/named/zoneconf.h
index ebaad684ae7a..0e684d2d4c7e 100644
--- a/contrib/bind9/bin/named/include/named/zoneconf.h
+++ b/contrib/bind9/bin/named/include/named/zoneconf.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2010, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zoneconf.h,v 1.28 2010/12/20 23:47:20 tbox Exp $ */
+/* $Id: zoneconf.h,v 1.30 2011/08/30 23:46:51 tbox Exp $ */
#ifndef NS_ZONECONF_H
#define NS_ZONECONF_H 1
@@ -33,7 +33,7 @@ ISC_LANG_BEGINDECLS
isc_result_t
ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
const cfg_obj_t *zconfig, cfg_aclconfctx_t *ac,
- dns_zone_t *zone);
+ dns_zone_t *zone, dns_zone_t *raw);
/*%<
* Configure or reconfigure a zone according to the named.conf
* data in 'cctx' and 'czone'.
diff --git a/contrib/bind9/bin/named/interfacemgr.c b/contrib/bind9/bin/named/interfacemgr.c
index d194d2b877cf..84bf21d77142 100644
--- a/contrib/bind9/bin/named/interfacemgr.c
+++ b/contrib/bind9/bin/named/interfacemgr.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,13 +15,14 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: interfacemgr.c,v 1.95.426.2 2011/03/12 04:59:14 tbox Exp $ */
+/* $Id: interfacemgr.c,v 1.101 2011/11/09 18:44:03 each Exp $ */
/*! \file */
#include <config.h>
#include <isc/interfaceiter.h>
+#include <isc/os.h>
#include <isc/string.h>
#include <isc/task.h>
#include <isc/util.h>
@@ -79,11 +80,13 @@ ns_interfacemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
if (mgr == NULL)
return (ISC_R_NOMEMORY);
+ mgr->mctx = NULL;
+ isc_mem_attach(mctx, &mgr->mctx);
+
result = isc_mutex_init(&mgr->lock);
if (result != ISC_R_SUCCESS)
goto cleanup_mem;
- mgr->mctx = mctx;
mgr->taskmgr = taskmgr;
mgr->socketmgr = socketmgr;
mgr->dispatchmgr = dispatchmgr;
@@ -115,7 +118,7 @@ ns_interfacemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
ns_listenlist_detach(&mgr->listenon4);
ns_listenlist_detach(&mgr->listenon6);
cleanup_mem:
- isc_mem_put(mctx, mgr, sizeof(*mgr));
+ isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
return (result);
}
@@ -128,7 +131,7 @@ ns_interfacemgr_destroy(ns_interfacemgr_t *mgr) {
clearlistenon(mgr);
DESTROYLOCK(&mgr->lock);
mgr->magic = 0;
- isc_mem_put(mgr->mctx, mgr, sizeof(*mgr));
+ isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
}
dns_aclenv_t *
@@ -183,11 +186,14 @@ ns_interface_create(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr,
{
ns_interface_t *ifp;
isc_result_t result;
+ int disp;
REQUIRE(NS_INTERFACEMGR_VALID(mgr));
+
ifp = isc_mem_get(mgr->mctx, sizeof(*ifp));
if (ifp == NULL)
return (ISC_R_NOMEMORY);
+
ifp->mgr = NULL;
ifp->generation = mgr->generation;
ifp->addr = *addr;
@@ -210,9 +216,11 @@ ns_interface_create(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr,
goto clientmgr_create_failure;
}
- ifp->udpdispatch = NULL;
+ for (disp = 0; disp < MAX_UDP_DISPATCH; disp++)
+ ifp->udpdispatch[disp] = NULL;
ifp->tcpsocket = NULL;
+
/*
* Create a single TCP client object. It will replace itself
* with a new one as soon as it gets a connection, so the actual
@@ -221,6 +229,7 @@ ns_interface_create(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr,
*/
ifp->ntcptarget = 1;
ifp->ntcpcurrent = 0;
+ ifp->nudpdispatch = 0;
ISC_LINK_INIT(ifp, link);
@@ -235,6 +244,7 @@ ns_interface_create(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr,
clientmgr_create_failure:
DESTROYLOCK(&ifp->lock);
+
lock_create_failure:
ifp->magic = 0;
isc_mem_put(mgr->mctx, ifp, sizeof(*ifp));
@@ -247,6 +257,7 @@ ns_interface_listenudp(ns_interface_t *ifp) {
isc_result_t result;
unsigned int attrs;
unsigned int attrmask;
+ int disp, i;
attrs = 0;
attrs |= DNS_DISPATCHATTR_UDP;
@@ -258,18 +269,28 @@ ns_interface_listenudp(ns_interface_t *ifp) {
attrmask = 0;
attrmask |= DNS_DISPATCHATTR_UDP | DNS_DISPATCHATTR_TCP;
attrmask |= DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_IPV6;
- result = dns_dispatch_getudp(ifp->mgr->dispatchmgr, ns_g_socketmgr,
- ns_g_taskmgr, &ifp->addr,
- 4096, 1000, 32768, 8219, 8237,
- attrs, attrmask, &ifp->udpdispatch);
- if (result != ISC_R_SUCCESS) {
- isc_log_write(IFMGR_COMMON_LOGARGS, ISC_LOG_ERROR,
- "could not listen on UDP socket: %s",
- isc_result_totext(result));
- goto udp_dispatch_failure;
+
+ ifp->nudpdispatch = ISC_MIN(ns_g_udpdisp, MAX_UDP_DISPATCH);
+ for (disp = 0; disp < ifp->nudpdispatch; disp++) {
+ result = dns_dispatch_getudp_dup(ifp->mgr->dispatchmgr,
+ ns_g_socketmgr,
+ ns_g_taskmgr, &ifp->addr,
+ 4096, 1000, 32768, 8219, 8237,
+ attrs, attrmask,
+ &ifp->udpdispatch[disp],
+ disp == 0
+ ? NULL
+ : ifp->udpdispatch[0]);
+ if (result != ISC_R_SUCCESS) {
+ isc_log_write(IFMGR_COMMON_LOGARGS, ISC_LOG_ERROR,
+ "could not listen on UDP socket: %s",
+ isc_result_totext(result));
+ goto udp_dispatch_failure;
+ }
+
}
- result = ns_clientmgr_createclients(ifp->clientmgr, ns_g_cpus,
+ result = ns_clientmgr_createclients(ifp->clientmgr, ifp->nudpdispatch,
ifp, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
@@ -277,12 +298,17 @@ ns_interface_listenudp(ns_interface_t *ifp) {
isc_result_totext(result));
goto addtodispatch_failure;
}
+
return (ISC_R_SUCCESS);
addtodispatch_failure:
- dns_dispatch_changeattributes(ifp->udpdispatch, 0,
- DNS_DISPATCHATTR_NOLISTEN);
- dns_dispatch_detach(&ifp->udpdispatch);
+ for (i = disp - 1; i <= 0; i--) {
+ dns_dispatch_changeattributes(ifp->udpdispatch[i], 0,
+ DNS_DISPATCHATTR_NOLISTEN);
+ dns_dispatch_detach(&(ifp->udpdispatch[i]));
+ }
+ ifp->nudpdispatch = 0;
+
udp_dispatch_failure:
return (result);
}
@@ -396,15 +422,19 @@ ns_interface_shutdown(ns_interface_t *ifp) {
static void
ns_interface_destroy(ns_interface_t *ifp) {
isc_mem_t *mctx = ifp->mgr->mctx;
+ int disp;
+
REQUIRE(NS_INTERFACE_VALID(ifp));
ns_interface_shutdown(ifp);
- if (ifp->udpdispatch != NULL) {
- dns_dispatch_changeattributes(ifp->udpdispatch, 0,
- DNS_DISPATCHATTR_NOLISTEN);
- dns_dispatch_detach(&ifp->udpdispatch);
- }
+ for (disp = 0; disp < ifp->nudpdispatch; disp++)
+ if (ifp->udpdispatch[disp] != NULL) {
+ dns_dispatch_changeattributes(ifp->udpdispatch[disp], 0,
+ DNS_DISPATCHATTR_NOLISTEN);
+ dns_dispatch_detach(&(ifp->udpdispatch[disp]));
+ }
+
if (ifp->tcpsocket != NULL)
isc_socket_detach(&ifp->tcpsocket);
diff --git a/contrib/bind9/bin/named/log.c b/contrib/bind9/bin/named/log.c
index 5d19dcb205c6..a34dea47ecb7 100644
--- a/contrib/bind9/bin/named/log.c
+++ b/contrib/bind9/bin/named/log.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -201,7 +201,7 @@ isc_result_t
ns_log_setdefaultcategory(isc_logconfig_t *lcfg) {
isc_result_t result;
- if (! ns_g_logstderr) {
+ if (! ns_g_logstderr && ! ns_g_nosyslog) {
result = isc_log_usechannel(lcfg, "default_syslog",
ISC_LOGCATEGORY_DEFAULT, NULL);
if (result != ISC_R_SUCCESS)
diff --git a/contrib/bind9/bin/named/logconf.c b/contrib/bind9/bin/named/logconf.c
index 5d17ab0e6016..b99a167d12f1 100644
--- a/contrib/bind9/bin/named/logconf.c
+++ b/contrib/bind9/bin/named/logconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: logconf.c,v 1.42.816.3 2011/03/05 23:52:06 tbox Exp $ */
+/* $Id: logconf.c,v 1.45 2011/03/05 23:52:29 tbox Exp $ */
/*! \file */
@@ -246,14 +246,16 @@ channel_fromconf(const cfg_obj_t *channel, isc_logconfig_t *lctx) {
isc_result_totext(result));
} else
(void)isc_stdio_close(fp);
- } else {
- syslog(LOG_ERR, "isc_file_isplainfile '%s' failed: %s",
- dest.file.name, isc_result_totext(result));
- fprintf(stderr, "isc_file_isplainfile '%s' failed: %s",
- dest.file.name, isc_result_totext(result));
+ goto done;
}
+ if (!ns_g_nosyslog)
+ syslog(LOG_ERR, "isc_file_isplainfile '%s' failed: %s",
+ dest.file.name, isc_result_totext(result));
+ fprintf(stderr, "isc_file_isplainfile '%s' failed: %s",
+ dest.file.name, isc_result_totext(result));
}
+ done:
return (result);
}
diff --git a/contrib/bind9/bin/named/lwresd.c b/contrib/bind9/bin/named/lwresd.c
index 11198a4324f2..7ee2196364e9 100644
--- a/contrib/bind9/bin/named/lwresd.c
+++ b/contrib/bind9/bin/named/lwresd.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -368,7 +368,7 @@ ns_lwdmanager_create(isc_mem_t *mctx, const cfg_obj_t *lwres,
dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
- isc_buffer_init(&namebuf, searchstr,
+ isc_buffer_constinit(&namebuf, searchstr,
strlen(searchstr));
isc_buffer_add(&namebuf, strlen(searchstr));
result = dns_name_fromtext(name, &namebuf,
diff --git a/contrib/bind9/bin/named/main.c b/contrib/bind9/bin/named/main.c
index 30c6ef9cac56..a5467249082a 100644
--- a/contrib/bind9/bin/named/main.c
+++ b/contrib/bind9/bin/named/main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: main.c,v 1.180.14.4 2011/11/05 00:45:52 each Exp $ */
+/* $Id$ */
/*! \file */
@@ -418,7 +418,7 @@ parse_command_line(int argc, char *argv[]) {
isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv,
"46c:C:d:E:fFgi:lm:n:N:p:P:"
- "sS:t:T:u:vVx:")) != -1) {
+ "sS:t:T:U:u:vVx:")) != -1) {
switch (ch) {
case '4':
if (disable4)
@@ -523,18 +523,33 @@ parse_command_line(int argc, char *argv[]) {
maxudp = 512;
else if (!strcmp(isc_commandline_argument, "maxudp1460"))
maxudp = 1460;
+ else if (!strcmp(isc_commandline_argument, "nosyslog"))
+ ns_g_nosyslog = ISC_TRUE;
+ else if (!strcmp(isc_commandline_argument, "nonearest"))
+ ns_g_nonearest = ISC_TRUE;
else
fprintf(stderr, "unknown -T flag '%s\n",
isc_commandline_argument);
break;
+ case 'U':
+ ns_g_udpdisp = parse_int(isc_commandline_argument,
+ "number of UDP listeners "
+ "per interface");
+ break;
case 'u':
ns_g_username = isc_commandline_argument;
break;
case 'v':
- printf("BIND %s\n", ns_g_version);
+ printf("%s %s", ns_g_product, ns_g_version);
+ if (*ns_g_description != 0)
+ printf(" %s", ns_g_description);
+ printf("\n");
exit(0);
case 'V':
- printf("BIND %s built with %s\n", ns_g_version,
+ printf("%s %s", ns_g_product, ns_g_version);
+ if (*ns_g_description != 0)
+ printf(" %s", ns_g_description);
+ printf(" <id:%s> built with %s\n", ns_g_srcid,
ns_g_configargs);
#ifdef OPENSSL
printf("using OpenSSL version: %s\n",
@@ -585,6 +600,18 @@ create_managers(void) {
#else
ns_g_cpus = 1;
#endif
+#ifdef WIN32
+ ns_g_udpdisp = 1;
+#else
+ if (ns_g_udpdisp == 0)
+ ns_g_udpdisp = ns_g_cpus_detected;
+ if (ns_g_udpdisp > ns_g_cpus)
+ ns_g_udpdisp = ns_g_cpus;
+#endif
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_INFO, "using %u UDP listener%s per interface",
+ ns_g_udpdisp, ns_g_udpdisp == 1 ? "" : "s");
+
result = isc_taskmgr_create(ns_g_mctx, ns_g_cpus, 0, &ns_g_taskmgr);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
@@ -787,8 +814,8 @@ setup(void) {
isc_result_totext(result));
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,
- ISC_LOG_NOTICE, "starting BIND %s%s", ns_g_version,
- saved_command_line);
+ ISC_LOG_NOTICE, "starting %s %s%s", ns_g_product,
+ ns_g_version, saved_command_line);
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,
ISC_LOG_NOTICE, "built with %s", ns_g_configargs);
@@ -1029,9 +1056,9 @@ main(int argc, char *argv[]) {
*/
strlcat(version,
#if defined(NO_VERSION_DATE) || !defined(__DATE__)
- "named version: BIND " VERSION,
+ "named version: BIND " VERSION " <" SRCID ">",
#else
- "named version: BIND " VERSION " (" __DATE__ ")",
+ "named version: BIND " VERSION " <" SRCID "> (" __DATE__ ")",
#endif
sizeof(version));
result = isc_file_progname(*argv, program_name, sizeof(program_name));
diff --git a/contrib/bind9/bin/named/named.8 b/contrib/bind9/bin/named/named.8
index 222ff426cabd..b27be3185997 100644
--- a/contrib/bind9/bin/named/named.8
+++ b/contrib/bind9/bin/named/named.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -33,7 +33,7 @@
named \- Internet domain name server
.SH "SYNOPSIS"
.HP 6
-\fBnamed\fR [\fB\-4\fR] [\fB\-6\fR] [\fB\-c\ \fR\fB\fIconfig\-file\fR\fR] [\fB\-d\ \fR\fB\fIdebug\-level\fR\fR] [\fB\-E\ \fR\fB\fIengine\-name\fR\fR] [\fB\-f\fR] [\fB\-g\fR] [\fB\-m\ \fR\fB\fIflag\fR\fR] [\fB\-n\ \fR\fB\fI#cpus\fR\fR] [\fB\-p\ \fR\fB\fIport\fR\fR] [\fB\-s\fR] [\fB\-S\ \fR\fB\fI#max\-socks\fR\fR] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] [\fB\-u\ \fR\fB\fIuser\fR\fR] [\fB\-v\fR] [\fB\-V\fR] [\fB\-x\ \fR\fB\fIcache\-file\fR\fR]
+\fBnamed\fR [\fB\-4\fR] [\fB\-6\fR] [\fB\-c\ \fR\fB\fIconfig\-file\fR\fR] [\fB\-d\ \fR\fB\fIdebug\-level\fR\fR] [\fB\-E\ \fR\fB\fIengine\-name\fR\fR] [\fB\-f\fR] [\fB\-g\fR] [\fB\-m\ \fR\fB\fIflag\fR\fR] [\fB\-n\ \fR\fB\fI#cpus\fR\fR] [\fB\-p\ \fR\fB\fIport\fR\fR] [\fB\-s\fR] [\fB\-S\ \fR\fB\fI#max\-socks\fR\fR] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] [\fB\-U\ \fR\fB\fI#listeners\fR\fR] [\fB\-u\ \fR\fB\fIuser\fR\fR] [\fB\-v\fR] [\fB\-V\fR] [\fB\-x\ \fR\fB\fIcache\-file\fR\fR]
.SH "DESCRIPTION"
.PP
\fBnamed\fR
@@ -168,6 +168,19 @@ is defined allows a process with root privileges to escape a chroot jail.
.RE
.RE
.PP
+\-U \fI#listeners\fR
+.RS 4
+Use
+\fI#listeners\fR
+worker threads to listen for incoming UDP packets on each address. If not specified,
+\fBnamed\fR
+will use the number of detected CPUs. If
+\fB\-n\fR
+has been set to a higher value than the number of CPUs, then
+\fB\-U\fR
+may be increased as high as that value, but no higher.
+.RE
+.PP
\-u \fIuser\fR
.RS 4
Setuid to
@@ -267,7 +280,7 @@ BIND 9 Administrator Reference Manual.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2004\-2009 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004\-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001, 2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/bin/named/named.conf.5 b/contrib/bind9/bin/named/named.conf.5
index 4356c192e6b6..8d0122280b8a 100644
--- a/contrib/bind9/bin/named/named.conf.5
+++ b/contrib/bind9/bin/named/named.conf.5
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -187,7 +187,7 @@ options {
random\-device \fIquoted_string\fR;
recursive\-clients \fIinteger\fR;
serial\-query\-rate \fIinteger\fR;
- server\-id ( \fIquoted_string\fR | none |;
+ server\-id ( \fIquoted_string\fR | none );
stacksize \fIsize\fR;
statistics\-file \fIquoted_string\fR;
statistics\-interval \fIinteger\fR; // not yet implemented
@@ -289,7 +289,8 @@ options {
notify\-delay \fIseconds\fR;
notify\-to\-soa \fIboolean\fR;
also\-notify [ port \fIinteger\fR ] { ( \fIipv4_address\fR | \fIipv6_address\fR )
- [ port \fIinteger\fR ]; ... };
+ [ port \fIinteger\fR ]; ...
+ [ key \fIkeyname\fR ] ... };
allow\-notify { \fIaddress_match_element\fR; ... };
forward ( first | only );
forwarders [ port \fIinteger\fR ] {
@@ -458,7 +459,8 @@ view \fIstring\fR \fIoptional_class\fR {
notify\-delay \fIseconds\fR;
notify\-to\-soa \fIboolean\fR;
also\-notify [ port \fIinteger\fR ] { ( \fIipv4_address\fR | \fIipv6_address\fR )
- [ port \fIinteger\fR ]; ... };
+ [ port \fIinteger\fR ]; ...
+ [ key \fIkeyname\fR ] ... };
allow\-notify { \fIaddress_match_element\fR; ... };
forward ( first | only );
forwarders [ port \fIinteger\fR ] {
@@ -502,7 +504,7 @@ view \fIstring\fR \fIoptional_class\fR {
.RS 4
.nf
zone \fIstring\fR \fIoptional_class\fR {
- type ( master | slave | stub | hint |
+ type ( master | slave | stub | hint | redirect |
forward | delegation\-only );
file \fIquoted_string\fR;
masters [ port \fIinteger\fR ] {
@@ -544,7 +546,8 @@ zone \fIstring\fR \fIoptional_class\fR {
notify\-delay \fIseconds\fR;
notify\-to\-soa \fIboolean\fR;
also\-notify [ port \fIinteger\fR ] { ( \fIipv4_address\fR | \fIipv6_address\fR )
- [ port \fIinteger\fR ]; ... };
+ [ port \fIinteger\fR ]; ...
+ [ key \fIkeyname\fR ] ... };
allow\-notify { \fIaddress_match_element\fR; ... };
forward ( first | only );
forwarders [ port \fIinteger\fR ] {
@@ -560,6 +563,7 @@ zone \fIstring\fR \fIoptional_class\fR {
max\-refresh\-time \fIinteger\fR;
min\-refresh\-time \fIinteger\fR;
multi\-master \fIboolean\fR;
+ request\-ixfr \fIboolean\fR;
sig\-validity\-interval \fIinteger\fR;
transfer\-source ( \fIipv4_address\fR | * )
[ port ( \fIinteger\fR | * ) ];
@@ -592,5 +596,5 @@ zone \fIstring\fR \fIoptional_class\fR {
\fBrndc\fR(8),
BIND 9 Administrator Reference Manual.
.SH "COPYRIGHT"
-Copyright \(co 2004\-2011 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004\-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
.br
diff --git a/contrib/bind9/bin/named/named.conf.docbook b/contrib/bind9/bin/named/named.conf.docbook
index c6ee1db1ca49..d778706930e0 100644
--- a/contrib/bind9/bin/named/named.conf.docbook
+++ b/contrib/bind9/bin/named/named.conf.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: named.conf.docbook,v 1.49.14.2 2011/11/07 00:31:47 marka Exp $ -->
+<!-- $Id: named.conf.docbook,v 1.55 2011/11/07 00:25:53 each Exp $ -->
<refentry>
<refentryinfo>
<date>Aug 13, 2004</date>
@@ -44,6 +44,7 @@
<year>2009</year>
<year>2010</year>
<year>2011</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
</docinfo>
@@ -218,7 +219,7 @@ options {
random-device <replaceable>quoted_string</replaceable>;
recursive-clients <replaceable>integer</replaceable>;
serial-query-rate <replaceable>integer</replaceable>;
- server-id ( <replaceable>quoted_string</replaceable> | none |;
+ server-id ( <replaceable>quoted_string</replaceable> | none );
stacksize <replaceable>size</replaceable>;
statistics-file <replaceable>quoted_string</replaceable>;
statistics-interval <replaceable>integer</replaceable>; // not yet implemented
@@ -325,7 +326,8 @@ options {
notify-delay <replaceable>seconds</replaceable>;
notify-to-soa <replaceable>boolean</replaceable>;
also-notify <optional> port <replaceable>integer</replaceable> </optional> { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> )
- <optional> port <replaceable>integer</replaceable> </optional>; ... };
+ <optional> port <replaceable>integer</replaceable> </optional>; ...
+ <optional> key <replaceable>keyname</replaceable> </optional> ... };
allow-notify { <replaceable>address_match_element</replaceable>; ... };
forward ( first | only );
@@ -512,7 +514,8 @@ view <replaceable>string</replaceable> <replaceable>optional_class</replaceable>
notify-delay <replaceable>seconds</replaceable>;
notify-to-soa <replaceable>boolean</replaceable>;
also-notify <optional> port <replaceable>integer</replaceable> </optional> { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> )
- <optional> port <replaceable>integer</replaceable> </optional>; ... };
+ <optional> port <replaceable>integer</replaceable> </optional>; ...
+ <optional> key <replaceable>keyname</replaceable> </optional> ... };
allow-notify { <replaceable>address_match_element</replaceable>; ... };
forward ( first | only );
@@ -562,7 +565,7 @@ view <replaceable>string</replaceable> <replaceable>optional_class</replaceable>
<title>ZONE</title>
<literallayout>
zone <replaceable>string</replaceable> <replaceable>optional_class</replaceable> {
- type ( master | slave | stub | hint |
+ type ( master | slave | stub | hint | redirect |
forward | delegation-only );
file <replaceable>quoted_string</replaceable>;
@@ -608,7 +611,8 @@ zone <replaceable>string</replaceable> <replaceable>optional_class</replaceable>
notify-delay <replaceable>seconds</replaceable>;
notify-to-soa <replaceable>boolean</replaceable>;
also-notify <optional> port <replaceable>integer</replaceable> </optional> { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> )
- <optional> port <replaceable>integer</replaceable> </optional>; ... };
+ <optional> port <replaceable>integer</replaceable> </optional>; ...
+ <optional> key <replaceable>keyname</replaceable> </optional> ... };
allow-notify { <replaceable>address_match_element</replaceable>; ... };
forward ( first | only );
@@ -626,6 +630,7 @@ zone <replaceable>string</replaceable> <replaceable>optional_class</replaceable>
max-refresh-time <replaceable>integer</replaceable>;
min-refresh-time <replaceable>integer</replaceable>;
multi-master <replaceable>boolean</replaceable>;
+ request-ixfr <replaceable>boolean</replaceable>;
sig-validity-interval <replaceable>integer</replaceable>;
transfer-source ( <replaceable>ipv4_address</replaceable> | * )
diff --git a/contrib/bind9/bin/named/named.conf.html b/contrib/bind9/bin/named/named.conf.html
index 71bd94669503..23d9391af3d0 100644
--- a/contrib/bind9/bin/named/named.conf.html
+++ b/contrib/bind9/bin/named/named.conf.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -21,7 +21,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en">
-<a name="id2476275"></a><div class="titlepage"></div>
+<a name="id2476274"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2>Name</h2>
<p><code class="filename">named.conf</code> &#8212; configuration file for named</p>
@@ -31,7 +31,7 @@
<div class="cmdsynopsis"><p><code class="command">named.conf</code> </p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543353"></a><h2>DESCRIPTION</h2>
+<a name="id2543357"></a><h2>DESCRIPTION</h2>
<p><code class="filename">named.conf</code> is the configuration file
for
<span><strong class="command">named</strong></span>. Statements are enclosed
@@ -50,14 +50,14 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543381"></a><h2>ACL</h2>
+<a name="id2543385"></a><h2>ACL</h2>
<div class="literallayout"><p><br>
acl <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543397"></a><h2>KEY</h2>
+<a name="id2543401"></a><h2>KEY</h2>
<div class="literallayout"><p><br>
key <em class="replaceable"><code>domain_name</code></em> {<br>
algorithm <em class="replaceable"><code>string</code></em>;<br>
@@ -66,7 +66,7 @@ key <em class="replaceable"><code>domain_name</code></em> {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543416"></a><h2>MASTERS</h2>
+<a name="id2543420"></a><h2>MASTERS</h2>
<div class="literallayout"><p><br>
masters <em class="replaceable"><code>string</code></em> [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
( <em class="replaceable"><code>masters</code></em> | <em class="replaceable"><code>ipv4_address</code></em> [<span class="optional">port <em class="replaceable"><code>integer</code></em></span>] |<br>
@@ -75,7 +75,7 @@ masters <em class="replaceable"><code>string</code></em> [<span class="optional"
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543462"></a><h2>SERVER</h2>
+<a name="id2543466"></a><h2>SERVER</h2>
<div class="literallayout"><p><br>
server ( <em class="replaceable"><code>ipv4_address[<span class="optional">/prefixlen</span>]</code></em> | <em class="replaceable"><code>ipv6_address[<span class="optional">/prefixlen</span>]</code></em> ) {<br>
bogus <em class="replaceable"><code>boolean</code></em>;<br>
@@ -97,7 +97,7 @@ server ( <em class="replaceable"><code>ipv4_address[<span class="optional">/pref
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543530"></a><h2>TRUSTED-KEYS</h2>
+<a name="id2543534"></a><h2>TRUSTED-KEYS</h2>
<div class="literallayout"><p><br>
trusted-keys {<br>
<em class="replaceable"><code>domain_name</code></em> <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key</code></em>; ... <br>
@@ -105,7 +105,7 @@ trusted-keys {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543556"></a><h2>MANAGED-KEYS</h2>
+<a name="id2543560"></a><h2>MANAGED-KEYS</h2>
<div class="literallayout"><p><br>
managed-keys {<br>
<em class="replaceable"><code>domain_name</code></em> <code class="constant">initial-key</code> <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key</code></em>; ... <br>
@@ -113,7 +113,7 @@ managed-keys {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543585"></a><h2>CONTROLS</h2>
+<a name="id2543589"></a><h2>CONTROLS</h2>
<div class="literallayout"><p><br>
controls {<br>
inet ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> | * )<br>
@@ -125,7 +125,7 @@ controls {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543620"></a><h2>LOGGING</h2>
+<a name="id2543624"></a><h2>LOGGING</h2>
<div class="literallayout"><p><br>
logging {<br>
channel <em class="replaceable"><code>string</code></em> {<br>
@@ -143,7 +143,7 @@ logging {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543658"></a><h2>LWRES</h2>
+<a name="id2543662"></a><h2>LWRES</h2>
<div class="literallayout"><p><br>
lwres {<br>
listen-on [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] {<br>
@@ -156,7 +156,7 @@ lwres {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543700"></a><h2>OPTIONS</h2>
+<a name="id2543704"></a><h2>OPTIONS</h2>
<div class="literallayout"><p><br>
options {<br>
avoid-v4-udp-ports { <em class="replaceable"><code>port</code></em>; ... };<br>
@@ -184,7 +184,7 @@ options {<br>
random-device <em class="replaceable"><code>quoted_string</code></em>;<br>
recursive-clients <em class="replaceable"><code>integer</code></em>;<br>
serial-query-rate <em class="replaceable"><code>integer</code></em>;<br>
- server-id ( <em class="replaceable"><code>quoted_string</code></em> | none |;<br>
+ server-id ( <em class="replaceable"><code>quoted_string</code></em> | none );<br>
stacksize <em class="replaceable"><code>size</code></em>;<br>
statistics-file <em class="replaceable"><code>quoted_string</code></em>;<br>
statistics-interval <em class="replaceable"><code>integer</code></em>; // not yet implemented<br>
@@ -291,7 +291,8 @@ options {<br>
notify-delay <em class="replaceable"><code>seconds</code></em>;<br>
notify-to-soa <em class="replaceable"><code>boolean</code></em>;<br>
also-notify [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> )<br>
- [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ... };<br>
+ [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
+ [<span class="optional"> key <em class="replaceable"><code>keyname</code></em> </span>] ... };<br>
allow-notify { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
<br>
forward ( first | only );<br>
@@ -360,7 +361,7 @@ options {<br>
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544574"></a><h2>VIEW</h2>
+<a name="id2544585"></a><h2>VIEW</h2>
<div class="literallayout"><p><br>
view <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>optional_class</code></em> {<br>
match-clients { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
@@ -477,7 +478,8 @@ view <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
notify-delay <em class="replaceable"><code>seconds</code></em>;<br>
notify-to-soa <em class="replaceable"><code>boolean</code></em>;<br>
also-notify [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> )<br>
- [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ... };<br>
+ [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
+ [<span class="optional"> key <em class="replaceable"><code>keyname</code></em> </span>] ... };<br>
allow-notify { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
<br>
forward ( first | only );<br>
@@ -523,10 +525,10 @@ view <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2545284"></a><h2>ZONE</h2>
+<a name="id2545301"></a><h2>ZONE</h2>
<div class="literallayout"><p><br>
zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>optional_class</code></em> {<br>
- type ( master | slave | stub | hint |<br>
+ type ( master | slave | stub | hint | redirect |<br>
forward | delegation-only );<br>
file <em class="replaceable"><code>quoted_string</code></em>;<br>
<br>
@@ -572,7 +574,8 @@ zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
notify-delay <em class="replaceable"><code>seconds</code></em>;<br>
notify-to-soa <em class="replaceable"><code>boolean</code></em>;<br>
also-notify [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>] { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> )<br>
- [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ... };<br>
+ [<span class="optional"> port <em class="replaceable"><code>integer</code></em> </span>]; ...<br>
+ [<span class="optional"> key <em class="replaceable"><code>keyname</code></em> </span>] ... };<br>
allow-notify { <em class="replaceable"><code>address_match_element</code></em>; ... };<br>
<br>
forward ( first | only );<br>
@@ -590,6 +593,7 @@ zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
max-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
multi-master <em class="replaceable"><code>boolean</code></em>;<br>
+ request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
sig-validity-interval <em class="replaceable"><code>integer</code></em>;<br>
<br>
transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
@@ -618,12 +622,12 @@ zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2545664"></a><h2>FILES</h2>
+<a name="id2545690"></a><h2>FILES</h2>
<p><code class="filename">/etc/named.conf</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545675"></a><h2>SEE ALSO</h2>
+<a name="id2545702"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
diff --git a/contrib/bind9/bin/named/named.docbook b/contrib/bind9/bin/named/named.docbook
index c748911e24a1..1f08e196e040 100644
--- a/contrib/bind9/bin/named/named.docbook
+++ b/contrib/bind9/bin/named/named.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: named.docbook,v 1.26 2009/10/05 17:30:49 fdupont Exp $ -->
+<!-- $Id: named.docbook,v 1.28 2011/11/09 23:46:23 tbox Exp $ -->
<refentry id="man.named">
<refentryinfo>
<date>May 21, 2009</date>
@@ -43,6 +43,8 @@
<year>2007</year>
<year>2008</year>
<year>2009</year>
+ <year>2011</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -69,6 +71,7 @@
<arg><option>-s</option></arg>
<arg><option>-S <replaceable class="parameter">#max-socks</replaceable></option></arg>
<arg><option>-t <replaceable class="parameter">directory</replaceable></option></arg>
+ <arg><option>-U <replaceable class="parameter">#listeners</replaceable></option></arg>
<arg><option>-u <replaceable class="parameter">user</replaceable></option></arg>
<arg><option>-v</option></arg>
<arg><option>-V</option></arg>
@@ -282,6 +285,21 @@
</varlistentry>
<varlistentry>
+ <term>-U <replaceable class="parameter">#listeners</replaceable></term>
+ <listitem>
+ <para>
+ Use <replaceable class="parameter">#listeners</replaceable>
+ worker threads to listen for incoming UDP packets on each
+ address. If not specified, <command>named</command> will
+ use the number of detected CPUs. If <option>-n</option>
+ has been set to a higher value than the number of CPUs,
+ then <option>-U</option> may be increased as high as that
+ value, but no higher.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>-u <replaceable class="parameter">user</replaceable></term>
<listitem>
<para>Setuid
diff --git a/contrib/bind9/bin/named/named.html b/contrib/bind9/bin/named/named.html
index cf3cb2678f39..fc8de5147ad8 100644
--- a/contrib/bind9/bin/named/named.html
+++ b/contrib/bind9/bin/named/named.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -29,10 +29,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine-name</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-S <em class="replaceable"><code>#max-socks</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-V</code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
+<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine-name</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-S <em class="replaceable"><code>#max-socks</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-U <em class="replaceable"><code>#listeners</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-V</code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543482"></a><h2>DESCRIPTION</h2>
+<a name="id2543497"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named</strong></span>
is a Domain Name System (DNS) server,
part of the BIND 9 distribution from ISC. For more
@@ -47,7 +47,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543507"></a><h2>OPTIONS</h2>
+<a name="id2543522"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-4</span></dt>
<dd><p>
@@ -178,6 +178,16 @@
</p>
</div>
</dd>
+<dt><span class="term">-U <em class="replaceable"><code>#listeners</code></em></span></dt>
+<dd><p>
+ Use <em class="replaceable"><code>#listeners</code></em>
+ worker threads to listen for incoming UDP packets on each
+ address. If not specified, <span><strong class="command">named</strong></span> will
+ use the number of detected CPUs. If <code class="option">-n</code>
+ has been set to a higher value than the number of CPUs,
+ then <code class="option">-U</code> may be increased as high as that
+ value, but no higher.
+ </p></dd>
<dt><span class="term">-u <em class="replaceable"><code>user</code></em></span></dt>
<dd>
<p>Setuid
@@ -228,7 +238,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543964"></a><h2>SIGNALS</h2>
+<a name="id2544012"></a><h2>SIGNALS</h2>
<p>
In routine operation, signals should not be used to control
the nameserver; <span><strong class="command">rndc</strong></span> should be used
@@ -249,7 +259,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544012"></a><h2>CONFIGURATION</h2>
+<a name="id2544060"></a><h2>CONFIGURATION</h2>
<p>
The <span><strong class="command">named</strong></span> configuration file is too complex
to describe in detail here. A complete description is provided
@@ -266,7 +276,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544049"></a><h2>FILES</h2>
+<a name="id2544233"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="filename">/etc/named.conf</code></span></dt>
<dd><p>
@@ -279,7 +289,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544088"></a><h2>SEE ALSO</h2>
+<a name="id2544273"></a><h2>SEE ALSO</h2>
<p><em class="citetitle">RFC 1033</em>,
<em class="citetitle">RFC 1034</em>,
<em class="citetitle">RFC 1035</em>,
@@ -292,7 +302,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544295"></a><h2>AUTHOR</h2>
+<a name="id2544343"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/named/query.c b/contrib/bind9/bin/named/query.c
index 9e67f2d2187f..5093cb243da4 100644
--- a/contrib/bind9/bin/named/query.c
+++ b/contrib/bind9/bin/named/query.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: query.c,v 1.353.8.24 2012/02/07 01:14:39 marka Exp $ */
+/* $Id$ */
/*! \file */
@@ -94,6 +94,10 @@
/*% Want DNSSEC? */
#define WANTDNSSEC(c) (((c)->attributes & \
NS_CLIENTATTR_WANTDNSSEC) != 0)
+/*% Want WANTAD? */
+#define WANTAD(c) (((c)->attributes & \
+ NS_CLIENTATTR_WANTAD) != 0)
+
/*% No authority? */
#define NOAUTHORITY(c) (((c)->query.attributes & \
NS_QUERYATTR_NOAUTHORITY) != 0)
@@ -168,39 +172,66 @@ rpz_st_clear(ns_client_t *client);
static inline void
inc_stats(ns_client_t *client, isc_statscounter_t counter) {
dns_zone_t *zone = client->query.authzone;
+ isc_stats_t *zonestats;
+#ifdef NEWSTATS
+ dns_rdatatype_t qtype;
+ dns_rdataset_t *rdataset;
+ dns_stats_t *querystats = NULL;
+#endif
isc_stats_increment(ns_g_server->nsstats, counter);
- if (zone != NULL) {
- isc_stats_t *zonestats = dns_zone_getrequeststats(zone);
- if (zonestats != NULL)
- isc_stats_increment(zonestats, counter);
+ if (zone == NULL)
+ return;
+
+ /* Do regular response type stats */
+ zonestats = dns_zone_getrequeststats(zone);
+
+ if (zonestats != NULL)
+ isc_stats_increment(zonestats, counter);
+
+#ifdef NEWSTATS
+ /* Do query type statistics
+ *
+ * We only increment per-type if we're using the authoriative
+ * answer counter, preventing double-counting.
+ */
+ if (counter == dns_nsstatscounter_authans) {
+ querystats = dns_zone_getrcvquerystats(zone);
+ if (querystats != NULL) {
+ rdataset = ISC_LIST_HEAD(client->query.qname->list);
+ if (rdataset != NULL) {
+ qtype = rdataset->type;
+ dns_rdatatypestats_increment(querystats, qtype);
+ }
+ }
}
+#endif
}
static void
query_send(ns_client_t *client) {
isc_statscounter_t counter;
+
if ((client->message->flags & DNS_MESSAGEFLAG_AA) == 0)
inc_stats(client, dns_nsstatscounter_nonauthans);
else
inc_stats(client, dns_nsstatscounter_authans);
+
if (client->message->rcode == dns_rcode_noerror) {
- if (ISC_LIST_EMPTY(client->message->sections[DNS_SECTION_ANSWER])) {
- if (client->query.isreferral) {
+ dns_section_t answer = DNS_SECTION_ANSWER;
+ if (ISC_LIST_EMPTY(client->message->sections[answer])) {
+ if (client->query.isreferral)
counter = dns_nsstatscounter_referral;
- } else {
+ else
counter = dns_nsstatscounter_nxrrset;
- }
- } else {
+ } else
counter = dns_nsstatscounter_success;
- }
- } else if (client->message->rcode == dns_rcode_nxdomain) {
+ } else if (client->message->rcode == dns_rcode_nxdomain)
counter = dns_nsstatscounter_nxdomain;
- } else {
- /* We end up here in case of YXDOMAIN, and maybe others */
+ else /* We end up here in case of YXDOMAIN, and maybe others */
counter = dns_nsstatscounter_failure;
- }
+
inc_stats(client, counter);
ns_client_send(client);
}
@@ -651,7 +682,7 @@ query_validatezonedb(ns_client_t *client, dns_name_t *name,
dns_dbversion_t **versionp)
{
isc_result_t result;
- dns_acl_t *queryacl;
+ dns_acl_t *queryacl, *queryonacl;
ns_dbversion_t *dbversion;
REQUIRE(zone != NULL);
@@ -763,6 +794,21 @@ query_validatezonedb(ns_client_t *client, dns_name_t *name,
client->query.attributes |= NS_QUERYATTR_QUERYOKVALID;
}
+ /* If and only if we've gotten this far, check allow-query-on too */
+ if (result == ISC_R_SUCCESS) {
+ queryonacl = dns_zone_getqueryonacl(zone);
+ if (queryonacl == NULL)
+ queryonacl = client->view->queryonacl;
+
+ result = ns_client_checkaclsilent(client, NULL,
+ queryonacl, ISC_TRUE);
+ if ((options & DNS_GETDB_NOLOG) == 0 &&
+ result != ISC_R_SUCCESS)
+ ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
+ NS_LOGMODULE_QUERY, ISC_LOG_INFO,
+ "query-on denied");
+ }
+
dbversion->acl_checked = ISC_TRUE;
if (result != ISC_R_SUCCESS) {
dbversion->queryok = ISC_FALSE;
@@ -831,12 +877,29 @@ query_getzonedb(ns_client_t *client, dns_name_t *name, dns_rdatatype_t qtype,
}
static void
-rpz_log_rewrite(ns_client_t *client, const char *disabled,
+rpz_log_rewrite(ns_client_t *client, isc_boolean_t disabled,
dns_rpz_policy_t policy, dns_rpz_type_t type,
- dns_name_t *rpz_qname) {
+ dns_zone_t *zone, dns_name_t *rpz_qname)
+{
+ isc_stats_t *zonestats;
char qname_buf[DNS_NAME_FORMATSIZE];
char rpz_qname_buf[DNS_NAME_FORMATSIZE];
+ /*
+ * Count enabled rewrites in the global counter.
+ * Count both enabled and disabled rewrites for each zone.
+ */
+ if (!disabled && policy != DNS_RPZ_POLICY_PASSTHRU) {
+ isc_stats_increment(ns_g_server->nsstats,
+ dns_nsstatscounter_rpz_rewrites);
+ }
+ if (zone != NULL) {
+ zonestats = dns_zone_getrequeststats(zone);
+ if (zonestats != NULL)
+ isc_stats_increment(zonestats,
+ dns_nsstatscounter_rpz_rewrites);
+ }
+
if (!isc_log_wouldlog(ns_g_lctx, DNS_RPZ_INFO_LEVEL))
return;
@@ -845,7 +908,7 @@ rpz_log_rewrite(ns_client_t *client, const char *disabled,
ns_client_log(client, DNS_LOGCATEGORY_RPZ, NS_LOGMODULE_QUERY,
DNS_RPZ_INFO_LEVEL, "%srpz %s %s rewrite %s via %s",
- disabled,
+ disabled ? "disabled " : "",
dns_rpz_type2str(type), dns_rpz_policy2str(policy),
qname_buf, rpz_qname_buf);
}
@@ -861,6 +924,9 @@ rpz_log_fail(ns_client_t *client, int level,
if (!isc_log_wouldlog(ns_g_lctx, level))
return;
+ /*
+ * bin/tests/system/rpz/tests.sh looks for "rpz.*failed".
+ */
dns_name_format(client->query.qname, namebuf1, sizeof(namebuf1));
dns_name_format(name, namebuf2, sizeof(namebuf2));
ns_client_log(client, NS_LOGCATEGORY_QUERY_EERRORS,
@@ -1141,6 +1207,8 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
isc_boolean_t added_something, need_addname;
dns_zone_t *zone;
dns_rdatatype_t type;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(qtype != dns_rdatatype_any);
@@ -1165,6 +1233,9 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
need_addname = ISC_FALSE;
zone = NULL;
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
+
/*
* We treat type A additional section processing as if it
* were "any address type" additional section processing.
@@ -1209,9 +1280,10 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
* necessarily in the same database.
*/
node = NULL;
- result = dns_db_find(db, name, version, type, client->query.dboptions,
- client->now, &node, fname, rdataset,
- sigrdataset);
+ result = dns_db_findext(db, name, version, type,
+ client->query.dboptions,
+ client->now, &node, fname, &cm, &ci,
+ rdataset, sigrdataset);
if (result == ISC_R_SUCCESS) {
if (sigrdataset != NULL && !dns_db_issecure(db) &&
dns_rdataset_isassociated(sigrdataset))
@@ -1247,11 +1319,11 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
if (sigrdataset == NULL)
goto cleanup;
}
- result = dns_db_find(db, name, version, type,
- client->query.dboptions |
- DNS_DBFIND_GLUEOK | DNS_DBFIND_ADDITIONALOK,
- client->now, &node, fname, rdataset,
- sigrdataset);
+ result = dns_db_findext(db, name, version, type,
+ client->query.dboptions |
+ DNS_DBFIND_GLUEOK | DNS_DBFIND_ADDITIONALOK,
+ client->now, &node, fname, &cm, &ci,
+ rdataset, sigrdataset);
if (result == DNS_R_GLUE &&
validate(client, db, fname, rdataset, sigrdataset))
result = ISC_R_SUCCESS;
@@ -1294,10 +1366,10 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
goto cleanup;
dns_db_attach(client->query.gluedb, &db);
- result = dns_db_find(db, name, version, type,
- client->query.dboptions | DNS_DBFIND_GLUEOK,
- client->now, &node, fname, rdataset,
- sigrdataset);
+ result = dns_db_findext(db, name, version, type,
+ client->query.dboptions | DNS_DBFIND_GLUEOK,
+ client->now, &node, fname, &cm, &ci,
+ rdataset, sigrdataset);
if (!(result == ISC_R_SUCCESS ||
result == DNS_R_ZONECUT ||
result == DNS_R_GLUE))
@@ -1371,8 +1443,8 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
goto aaaa_lookup;
result = dns_db_findrdataset(db, node, version,
dns_rdatatype_a, 0,
- client->now, rdataset,
- sigrdataset);
+ client->now,
+ rdataset, sigrdataset);
if (result == DNS_R_NCACHENXDOMAIN)
goto addname;
if (result == DNS_R_NCACHENXRRSET) {
@@ -1422,8 +1494,8 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
goto addname;
result = dns_db_findrdataset(db, node, version,
dns_rdatatype_aaaa, 0,
- client->now, rdataset,
- sigrdataset);
+ client->now,
+ rdataset, sigrdataset);
if (result == DNS_R_NCACHENXDOMAIN)
goto addname;
if (result == DNS_R_NCACHENXRRSET) {
@@ -1597,6 +1669,8 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
dns_zone_t *zone;
dns_rdatatype_t type;
dns_rdatasetadditional_t additionaltype;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
/*
* If we don't have an additional cache call query_addadditional.
@@ -1635,6 +1709,8 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
POST(needadditionalcache);
additionaltype = dns_rdatasetadditional_fromauth;
dns_name_init(&cfname, NULL);
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
CTRACE("query_addadditional2");
@@ -1737,8 +1813,10 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
* necessarily in the same database.
*/
node = NULL;
- result = dns_db_find(db, name, version, type, client->query.dboptions,
- client->now, &node, fname, NULL, NULL);
+ result = dns_db_findext(db, name, version, type,
+ client->query.dboptions,
+ client->now, &node, fname, &cm, &ci,
+ NULL, NULL);
if (result == ISC_R_SUCCESS)
goto found;
@@ -1765,10 +1843,11 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
*/
goto try_glue;
- result = dns_db_find(db, name, version, type,
- client->query.dboptions |
- DNS_DBFIND_GLUEOK | DNS_DBFIND_ADDITIONALOK,
- client->now, &node, fname, NULL, NULL);
+ result = dns_db_findext(db, name, version, type,
+ client->query.dboptions |
+ DNS_DBFIND_GLUEOK | DNS_DBFIND_ADDITIONALOK,
+ client->now, &node, fname, &cm, &ci,
+ NULL, NULL);
if (result == ISC_R_SUCCESS)
goto found;
@@ -1837,9 +1916,10 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) {
findglue:
dns_db_attach(client->query.gluedb, &db);
- result = dns_db_find(db, name, version, type,
- client->query.dboptions | DNS_DBFIND_GLUEOK,
- client->now, &node, fname, NULL, NULL);
+ result = dns_db_findext(db, name, version, type,
+ client->query.dboptions | DNS_DBFIND_GLUEOK,
+ client->now, &node, fname, &cm, &ci,
+ NULL, NULL);
if (!(result == ISC_R_SUCCESS ||
result == DNS_R_ZONECUT ||
result == DNS_R_GLUE)) {
@@ -2489,6 +2569,8 @@ query_addsoa(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version,
isc_result_t result, eresult;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
dns_rdataset_t **sigrdatasetp = NULL;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
CTRACE("query_addsoa");
/*
@@ -2499,6 +2581,9 @@ query_addsoa(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version,
rdataset = NULL;
node = NULL;
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
+
/*
* Don't add the SOA record for test which set "-T nosoa".
*/
@@ -2532,9 +2617,8 @@ query_addsoa(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version,
result = dns_db_getoriginnode(db, &node);
if (result == ISC_R_SUCCESS) {
result = dns_db_findrdataset(db, node, version,
- dns_rdatatype_soa,
- 0, client->now, rdataset,
- sigrdataset);
+ dns_rdatatype_soa, 0, client->now,
+ rdataset, sigrdataset);
} else {
dns_fixedname_t foundname;
dns_name_t *fname;
@@ -2542,9 +2626,9 @@ query_addsoa(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version,
dns_fixedname_init(&foundname);
fname = dns_fixedname_name(&foundname);
- result = dns_db_find(db, name, version, dns_rdatatype_soa,
- client->query.dboptions, 0, &node,
- fname, rdataset, sigrdataset);
+ result = dns_db_findext(db, name, version, dns_rdatatype_soa,
+ client->query.dboptions, 0, &node,
+ fname, &cm, &ci, rdataset, sigrdataset);
}
if (result != ISC_R_SUCCESS) {
/*
@@ -2609,6 +2693,8 @@ query_addns(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version) {
dns_fixedname_t foundname;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
dns_rdataset_t **sigrdatasetp = NULL;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
CTRACE("query_addns");
/*
@@ -2620,6 +2706,8 @@ query_addns(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version) {
node = NULL;
dns_fixedname_init(&foundname);
fname = dns_fixedname_name(&foundname);
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
/*
* Get resources and make 'name' be the database origin.
@@ -2652,14 +2740,13 @@ query_addns(ns_client_t *client, dns_db_t *db, dns_dbversion_t *version) {
result = dns_db_getoriginnode(db, &node);
if (result == ISC_R_SUCCESS) {
result = dns_db_findrdataset(db, node, version,
- dns_rdatatype_ns,
- 0, client->now, rdataset,
- sigrdataset);
+ dns_rdatatype_ns, 0, client->now,
+ rdataset, sigrdataset);
} else {
CTRACE("query_addns: calling dns_db_find");
- result = dns_db_find(db, name, NULL, dns_rdatatype_ns,
- client->query.dboptions, 0, &node,
- fname, rdataset, sigrdataset);
+ result = dns_db_findext(db, name, NULL, dns_rdatatype_ns,
+ client->query.dboptions, 0, &node,
+ fname, &cm, &ci, rdataset, sigrdataset);
CTRACE("query_addns: dns_db_find complete");
}
if (result != ISC_R_SUCCESS) {
@@ -2781,15 +2868,19 @@ mark_secure(ns_client_t *client, dns_db_t *db, dns_name_t *name,
{
isc_result_t result;
dns_dbnode_t *node = NULL;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
isc_stdtime_t now;
rdataset->trust = dns_trust_secure;
sigrdataset->trust = dns_trust_secure;
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
/*
* Save the updated secure state. Ignore failures.
*/
- result = dns_db_findnode(db, name, ISC_TRUE, &node);
+ result = dns_db_findnodeext(db, name, ISC_TRUE, &cm, &ci, &node);
if (result != ISC_R_SUCCESS)
return;
@@ -2817,9 +2908,15 @@ get_key(ns_client_t *client, dns_db_t *db, dns_rdata_rrsig_t *rrsig,
isc_result_t result;
dns_dbnode_t *node = NULL;
isc_boolean_t secure = ISC_FALSE;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
+
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
if (!dns_rdataset_isassociated(keyrdataset)) {
- result = dns_db_findnode(db, &rrsig->signer, ISC_FALSE, &node);
+ result = dns_db_findnodeext(db, &rrsig->signer, ISC_FALSE,
+ &cm, &ci, &node);
if (result != ISC_R_SUCCESS)
return (ISC_FALSE);
@@ -2862,7 +2959,7 @@ get_key(ns_client_t *client, dns_db_t *db, dns_rdata_rrsig_t *rrsig,
static isc_boolean_t
verify(dst_key_t *key, dns_name_t *name, dns_rdataset_t *rdataset,
- dns_rdata_t *rdata, isc_mem_t *mctx, isc_boolean_t acceptexpired)
+ dns_rdata_t *rdata, ns_client_t *client)
{
isc_result_t result;
dns_fixedname_t fixed;
@@ -2871,9 +2968,10 @@ verify(dst_key_t *key, dns_name_t *name, dns_rdataset_t *rdataset,
dns_fixedname_init(&fixed);
again:
- result = dns_dnssec_verify2(name, rdataset, key, ignore, mctx,
+ result = dns_dnssec_verify3(name, rdataset, key, ignore,
+ client->view->maxbits, client->mctx,
rdata, NULL);
- if (result == DNS_R_SIGEXPIRED && acceptexpired) {
+ if (result == DNS_R_SIGEXPIRED && client->view->acceptexpired) {
ignore = ISC_TRUE;
goto again;
}
@@ -2916,8 +3014,7 @@ validate(ns_client_t *client, dns_db_t *db, dns_name_t *name,
do {
if (!get_key(client, db, &rrsig, &keyrdataset, &key))
break;
- if (verify(key, name, rdataset, &rdata, client->mctx,
- client->view->acceptexpired)) {
+ if (verify(key, name, rdataset, &rdata, client)) {
dst_key_free(&key);
dns_rdataset_disassociate(&keyrdataset);
mark_secure(client, db, name, &rrsig,
@@ -2944,6 +3041,8 @@ query_addbestns(ns_client_t *client) {
dns_dbversion_t *version;
dns_zone_t *zone;
isc_buffer_t b;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
CTRACE("query_addbestns");
fname = NULL;
@@ -2960,6 +3059,9 @@ query_addbestns(ns_client_t *client) {
is_zone = ISC_FALSE;
use_zone = ISC_FALSE;
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
+
/*
* Find the right database.
*/
@@ -2993,10 +3095,11 @@ query_addbestns(ns_client_t *client) {
* Now look for the zonecut.
*/
if (is_zone) {
- result = dns_db_find(db, client->query.qname, version,
- dns_rdatatype_ns, client->query.dboptions,
- client->now, &node, fname,
- rdataset, sigrdataset);
+ result = dns_db_findext(db, client->query.qname, version,
+ dns_rdatatype_ns,
+ client->query.dboptions,
+ client->now, &node, fname,
+ &cm, &ci, rdataset, sigrdataset);
if (result != DNS_R_DELEGATION)
goto cleanup;
if (USECACHE(client)) {
@@ -3075,6 +3178,14 @@ query_addbestns(ns_client_t *client) {
goto cleanup;
/*
+ * If the answer is secure only add NS records if they are secure * when the client may be looking for AD in the response.
+ */
+ if (SECURE(client) && (WANTDNSSEC(client) || WANTAD(client)) &&
+ ((rdataset->trust != dns_trust_secure) ||
+ (sigrdataset != NULL && sigrdataset->trust != dns_trust_secure)))
+ goto cleanup;
+
+ /*
* If the client doesn't want DNSSEC we can discard the sigrdataset
* now.
*/
@@ -3265,6 +3376,8 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
int order;
dns_fixedname_t cfixed;
dns_name_t *cname;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
CTRACE("query_addwildcardproof");
fname = NULL;
@@ -3272,6 +3385,9 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
sigrdataset = NULL;
node = NULL;
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
+
/*
* Get the NOQNAME proof then if !ispositive
* get the NOWILDCARD proof.
@@ -3331,8 +3447,9 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
if (fname == NULL || rdataset == NULL || sigrdataset == NULL)
goto cleanup;
- result = dns_db_find(db, name, version, dns_rdatatype_nsec, options,
- 0, &node, fname, rdataset, sigrdataset);
+ result = dns_db_findext(db, name, version, dns_rdatatype_nsec,
+ options, 0, &node, fname, &cm, &ci,
+ rdataset, sigrdataset);
if (node != NULL)
dns_db_detachnode(db, &node);
@@ -3354,10 +3471,10 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
if (labels == 0U)
goto cleanup;
dns_name_split(cname, labels, NULL, cname);
- result = dns_db_find(db, cname, version,
- dns_rdatatype_nsec,
- options, 0, NULL, fname,
- NULL, NULL);
+ result = dns_db_findext(db, cname, version,
+ dns_rdatatype_nsec,
+ options, 0, NULL, fname,
+ &cm, &ci, NULL, NULL);
}
/*
* Add closest (provable) encloser NSEC3.
@@ -3857,6 +3974,11 @@ rpz_rrset_find(ns_client_t *client, dns_rpz_type_t rpz_type,
dns_fixedname_t fixed;
dns_name_t *found;
isc_result_t result;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
+
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
st = client->query.rpz_st;
if ((st->state & DNS_RPZ_RECURSING) != 0) {
@@ -3912,8 +4034,9 @@ rpz_rrset_find(ns_client_t *client, dns_rpz_type_t rpz_type,
node = NULL;
dns_fixedname_init(&fixed);
found = dns_fixedname_name(&fixed);
- result = dns_db_find(*dbp, name, version, type, DNS_DBFIND_GLUEOK,
- client->now, &node, found, *rdatasetp, NULL);
+ result = dns_db_findext(*dbp, name, version, type, DNS_DBFIND_GLUEOK,
+ client->now, &node, found,
+ &cm, &ci, *rdatasetp, NULL);
if (result == DNS_R_DELEGATION && is_zone && USECACHE(client)) {
/*
* Try the cache if we're authoritative for an
@@ -3922,9 +4045,9 @@ rpz_rrset_find(ns_client_t *client, dns_rpz_type_t rpz_type,
rpz_clean(NULL, dbp, &node, rdatasetp);
version = NULL;
dns_db_attach(client->view->cachedb, dbp);
- result = dns_db_find(*dbp, name, version, dns_rdatatype_ns,
- 0, client->now, &node, found,
- *rdatasetp, NULL);
+ result = dns_db_findext(*dbp, name, version, dns_rdatatype_ns,
+ 0, client->now, &node, found,
+ &cm, &ci, *rdatasetp, NULL);
}
rpz_clean(NULL, dbp, &node, NULL);
if (result == DNS_R_DELEGATION) {
@@ -4028,6 +4151,8 @@ rpz_rewrite_rrset(ns_client_t *client, dns_rpz_type_t rpz_type,
rdatasetp, resuming);
switch (result) {
case ISC_R_SUCCESS:
+ case DNS_R_GLUE:
+ case DNS_R_ZONECUT:
result = rpz_rewrite_ip(client, *rdatasetp, rpz_type);
break;
case DNS_R_EMPTYNAME:
@@ -4120,6 +4245,13 @@ rpz_find(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qnamef,
dns_fixedname_t fixed;
dns_name_t *found;
isc_result_t result;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
+
+ REQUIRE(nodep != NULL);
+
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
result = rpz_ready(client, zonep, dbp, nodep, rdatasetp);
if (result != ISC_R_SUCCESS) {
@@ -4140,8 +4272,9 @@ rpz_find(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qnamef,
dns_fixedname_init(&fixed);
found = dns_fixedname_name(&fixed);
- result = dns_db_find(*dbp, qnamef, *versionp, dns_rdatatype_any, 0,
- client->now, nodep, found, *rdatasetp, NULL);
+ result = dns_db_findext(*dbp, qnamef, *versionp, dns_rdatatype_any, 0,
+ client->now, nodep, found, &cm, &ci,
+ *rdatasetp, NULL);
if (result == ISC_R_SUCCESS) {
dns_rdatasetiter_t *rdsiter;
@@ -4185,10 +4318,10 @@ rpz_find(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qnamef,
qtype == dns_rdatatype_sig)
result = DNS_R_NXRRSET;
else
- result = dns_db_find(*dbp, qnamef, *versionp,
- qtype, 0, client->now,
- nodep, found, *rdatasetp,
- NULL);
+ result = dns_db_findext(*dbp, qnamef, *versionp,
+ qtype, 0, client->now,
+ nodep, found, &cm, &ci,
+ *rdatasetp, NULL);
}
}
switch (result) {
@@ -4204,26 +4337,32 @@ rpz_find(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qnamef,
result = DNS_R_CNAME;
}
break;
+ case DNS_R_NXRRSET:
+ policy = DNS_RPZ_POLICY_NODATA;
+ break;
case DNS_R_DNAME:
/*
* DNAME policy RRs have very few if any uses that are not
* better served with simple wildcards. Making the work would
* require complications to get the number of labels matched
* in the name or the found name to the main DNS_R_DNAME case
- * in query_find(). So fall through to treat them as NODATA.
+ * in query_find().
+ */
+ dns_rdataset_disassociate(*rdatasetp);
+ dns_db_detachnode(*dbp, nodep);
+ /*
+ * Fall through to treat it as a miss.
*/
- case DNS_R_NXRRSET:
- policy = DNS_RPZ_POLICY_NODATA;
- break;
case DNS_R_NXDOMAIN:
case DNS_R_EMPTYNAME:
/*
* If we don't get a qname hit,
* see if it is worth looking for other types.
*/
- dns_db_rpz_enabled(*dbp, client->query.rpz_st);
+ (void)dns_db_rpz_enabled(*dbp, client->query.rpz_st);
dns_db_detach(dbp);
dns_zone_detach(zonep);
+ result = DNS_R_NXDOMAIN;
policy = DNS_RPZ_POLICY_MISS;
break;
default:
@@ -4231,9 +4370,7 @@ rpz_find(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qnamef,
dns_zone_detach(zonep);
rpz_log_fail(client, DNS_RPZ_ERROR_LEVEL, rpz_type, qnamef,
"", result);
- policy = DNS_RPZ_POLICY_ERROR;
- result = DNS_R_SERVFAIL;
- break;
+ return (DNS_R_SERVFAIL);
}
*policyp = policy;
@@ -4299,6 +4436,9 @@ rpz_rewrite_name(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname,
if (result == ISC_R_SUCCESS)
break;
INSIST(result == DNS_R_NAMETOOLONG);
+ /*
+ * Trim the name until it is not too long.
+ */
labels = dns_name_countlabels(prefix);
if (labels < 2) {
rpz_log_fail(client, DNS_RPZ_ERROR_LEVEL,
@@ -4322,7 +4462,6 @@ rpz_rewrite_name(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname,
rdatasetp, &policy);
switch (result) {
case DNS_R_NXDOMAIN:
- case DNS_R_EMPTYNAME:
break;
case DNS_R_SERVFAIL:
rpz_clean(&zone, &db, &node, rdatasetp);
@@ -4345,13 +4484,45 @@ rpz_rewrite_name(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname,
(st->m.type == rpz_type &&
0 >= dns_name_compare(rpz_qname, st->qname))))
continue;
-
+#if 0
+ /*
+ * This code would block a customer reported information
+ * leak of rpz rules by rewriting requests in the
+ * rpz-ip, rpz-nsip, rpz-nsdname,and rpz-passthru TLDs.
+ * Without this code, a bad guy could request
+ * 24.0.3.2.10.rpz-ip. to find the policy rule for
+ * 10.2.3.0/14. It is an insignificant leak and this
+ * code is not worth its cost, because the bad guy
+ * could publish "evil.com A 10.2.3.4" and request
+ * evil.com to get the same information.
+ * Keep code with "#if 0" in case customer demand
+ * is irresistible.
+ *
+ * We have the less frequent case of a triggered
+ * policy. Check that we have not trigger on one
+ * of the pretend RPZ TLDs.
+ * This test would make it impossible to rewrite
+ * names in TLDs that start with "rpz-" should
+ * ICANN ever allow such TLDs.
+ */
+ labels = dns_name_countlabels(qname);
+ if (labels >= 2) {
+ dns_label_t label;
+
+ dns_name_getlabel(qname, labels-2, &label);
+ if (label.length >= sizeof(DNS_RPZ_PREFIX)-1 &&
+ strncasecmp((const char *)label.base+1,
+ DNS_RPZ_PREFIX,
+ sizeof(DNS_RPZ_PREFIX)-1) == 0)
+ continue;
+ }
+#endif
/*
* Merely log DNS_RPZ_POLICY_DISABLED hits.
*/
if (rpz->policy == DNS_RPZ_POLICY_DISABLED) {
- rpz_log_rewrite(client, "disabled ",
- policy, rpz_type, rpz_qname);
+ rpz_log_rewrite(client, ISC_TRUE, policy,
+ rpz_type, zone, rpz_qname);
continue;
}
@@ -4482,7 +4653,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
rdataset = NULL;
if ((st->state & DNS_RPZ_DONE_QNAME) == 0) {
/*
- * Check rules for the query name if this it the first time
+ * Check rules for the query name if this is the first time
* for the current qname, i.e. we've not been recursing.
* There is a first time for each name in a CNAME chain.
*/
@@ -4524,7 +4695,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
dns_fixedname_init(&nsnamef);
dns_name_clone(client->query.qname, dns_fixedname_name(&nsnamef));
- while (st->r.label > 1) {
+ while (st->r.label > client->view->rpz_min_ns_labels) {
/*
* Get NS rrset for each domain in the current qname.
*/
@@ -4655,8 +4826,8 @@ cleanup:
st->m.policy == DNS_RPZ_POLICY_ERROR) {
if (st->m.policy == DNS_RPZ_POLICY_PASSTHRU &&
result != DNS_R_DELEGATION)
- rpz_log_rewrite(client, "", st->m.policy, st->m.type,
- st->qname);
+ rpz_log_rewrite(client, ISC_FALSE, st->m.policy,
+ st->m.type, st->m.zone, st->qname);
rpz_match_clear(st);
}
if (st->m.policy == DNS_RPZ_POLICY_ERROR) {
@@ -4671,7 +4842,7 @@ cleanup:
}
/*
- * See if response policy zone rewriting is allowed a lack of interest
+ * See if response policy zone rewriting is allowed by a lack of interest
* by the client in DNSSEC or a lack of signatures.
*/
static isc_boolean_t
@@ -4766,7 +4937,8 @@ rpz_add_cname(ns_client_t *client, dns_rpz_st_t *st,
fname, dns_trust_authanswer, st->m.ttl);
if (result != ISC_R_SUCCESS)
return (result);
- rpz_log_rewrite(client, "", st->m.policy, st->m.type, st->qname);
+ rpz_log_rewrite(client, ISC_FALSE, st->m.policy,
+ st->m.type, st->m.zone, st->qname);
ns_client_qnamereplace(client, fname);
/*
* Turn off DNSSEC because the results of a
@@ -5093,6 +5265,8 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t *db,
dns_rdata_nsec3_t nsec3;
dns_rdata_t rdata = DNS_RDATA_INIT;
isc_boolean_t optout;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
salt_length = sizeof(salt);
result = dns_db_getnsec3parameters(db, version, &hash, NULL,
@@ -5102,6 +5276,8 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t *db,
dns_name_init(&name, NULL);
dns_name_clone(qname, &name);
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
/*
* Map unknown algorithm to known value.
@@ -5118,9 +5294,9 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t *db,
return;
dboptions = client->query.dboptions | DNS_DBFIND_FORCENSEC3;
- result = dns_db_find(db, dns_fixedname_name(&fixed), version,
- dns_rdatatype_nsec3, dboptions, client->now,
- NULL, fname, rdataset, sigrdataset);
+ result = dns_db_findext(db, dns_fixedname_name(&fixed), version,
+ dns_rdatatype_nsec3, dboptions, client->now,
+ NULL, fname, &cm, &ci, rdataset, sigrdataset);
if (result == DNS_R_NXDOMAIN) {
if (!dns_rdataset_isassociated(rdataset)) {
@@ -5260,6 +5436,121 @@ dns64_aaaaok(ns_client_t *client, dns_rdataset_t *rdataset,
}
/*
+ * Look for the name and type in the redirection zone. If found update
+ * the arguments as appropriate. Return ISC_TRUE if a update was
+ * performed.
+ *
+ * Only perform the update if the client is in the allow query acl and
+ * returning the update would not cause a DNSSEC validation failure.
+ */
+static isc_boolean_t
+redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
+ dns_dbnode_t **nodep, dns_db_t **dbp, dns_dbversion_t **versionp,
+ dns_rdatatype_t qtype)
+{
+ dns_db_t *db = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_fixedname_t fixed;
+ dns_name_t *found;
+ dns_rdataset_t trdataset;
+ isc_result_t result;
+ dns_rdatatype_t type;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
+ ns_dbversion_t *dbversion;
+
+ CTRACE("redirect");
+
+ if (client->view->redirect == NULL)
+ return (ISC_FALSE);
+
+ dns_fixedname_init(&fixed);
+ found = dns_fixedname_name(&fixed);
+ dns_rdataset_init(&trdataset);
+
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
+
+ if (WANTDNSSEC(client) && dns_db_iszone(*dbp) && dns_db_issecure(*dbp))
+ return (ISC_FALSE);
+
+ if (WANTDNSSEC(client) && dns_rdataset_isassociated(rdataset)) {
+ if (rdataset->trust == dns_trust_secure)
+ return (ISC_FALSE);
+ if (rdataset->trust == dns_trust_ultimate &&
+ (rdataset->type == dns_rdatatype_nsec ||
+ rdataset->type == dns_rdatatype_nsec3))
+ return (ISC_FALSE);
+ if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
+ for (result = dns_rdataset_first(rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(rdataset)) {
+ dns_ncache_current(rdataset, found, &trdataset);
+ type = trdataset.type;
+ dns_rdataset_disassociate(&trdataset);
+ if (type == dns_rdatatype_nsec ||
+ type == dns_rdatatype_nsec3 ||
+ type == dns_rdatatype_rrsig)
+ return (ISC_FALSE);
+ }
+ }
+ }
+
+ result = ns_client_checkaclsilent(client, NULL,
+ dns_zone_getqueryacl(client->view->redirect),
+ ISC_TRUE);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_FALSE);
+
+ result = dns_zone_getdb(client->view->redirect, &db);
+ if (result != ISC_R_SUCCESS)
+ return (ISC_FALSE);
+
+ dbversion = query_findversion(client, db);
+ if (dbversion == NULL) {
+ dns_db_detach(&db);
+ return (ISC_FALSE);
+ }
+
+ /*
+ * Lookup the requested data in the redirect zone.
+ */
+ result = dns_db_findext(db, client->query.qname, dbversion->version,
+ qtype, 0, client->now, &node, found, &cm, &ci,
+ &trdataset, NULL);
+ if (result != ISC_R_SUCCESS) {
+ if (dns_rdataset_isassociated(&trdataset))
+ dns_rdataset_disassociate(&trdataset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ dns_db_detach(&db);
+ return (ISC_FALSE);
+ }
+ CTRACE("redirect: found data: done");
+
+ dns_name_copy(found, name, NULL);
+ if (dns_rdataset_isassociated(rdataset))
+ dns_rdataset_disassociate(rdataset);
+ if (dns_rdataset_isassociated(&trdataset)) {
+ dns_rdataset_clone(&trdataset, rdataset);
+ dns_rdataset_disassociate(&trdataset);
+ }
+ if (*nodep != NULL)
+ dns_db_detachnode(*dbp, nodep);
+ dns_db_detach(dbp);
+ dns_db_attachnode(db, node, nodep);
+ dns_db_attach(db, dbp);
+ dns_db_detachnode(db, &node);
+ dns_db_detach(&db);
+ *versionp = dbversion->version;
+
+ client->query.attributes |= (NS_QUERYATTR_NOAUTHORITY |
+ NS_QUERYATTR_NOADDITIONAL);
+
+ return (ISC_TRUE);
+}
+
+/*
* Do the bulk of query processing for the current query of 'client'.
* If 'event' is non-NULL, we are returning from recursion and 'qtype'
* is ignored. Otherwise, 'qtype' is the query type.
@@ -5297,6 +5588,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
isc_boolean_t resuming;
int line = -1;
isc_boolean_t dns64_exclude, dns64;
+ dns_clientinfomethods_t cm;
+ dns_clientinfo_t ci;
CTRACE("query_find");
@@ -5328,6 +5621,9 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
is_zone = ISC_FALSE;
is_staticstub_zone = ISC_FALSE;
+ dns_clientinfomethods_init(&cm, ns_client_sourceip);
+ dns_clientinfo_init(&ci, client);
+
if (event != NULL) {
/*
* We're returning from recursion. Restore the query context
@@ -5562,9 +5858,9 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
/*
* Now look for an answer in the database.
*/
- result = dns_db_find(db, client->query.qname, version, type,
- client->query.dboptions, client->now,
- &node, fname, rdataset, sigrdataset);
+ result = dns_db_findext(db, client->query.qname, version, type,
+ client->query.dboptions, client->now,
+ &node, fname, &cm, &ci, rdataset, sigrdataset);
resume:
CTRACE("query_find: resume");
@@ -5703,9 +5999,10 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
client->attributes &= ~(NS_CLIENTATTR_WANTDNSSEC |
DNS_MESSAGEFLAG_AD);
query_putrdataset(client, &sigrdataset);
+ rpz_st->q.is_zone = is_zone;
is_zone = ISC_TRUE;
- rpz_log_rewrite(client, "", rpz_st->m.policy,
- rpz_st->m.type, rpz_st->qname);
+ rpz_log_rewrite(client, ISC_FALSE, rpz_st->m.policy,
+ rpz_st->m.type, zone, rpz_st->qname);
}
}
@@ -5737,10 +6034,11 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
result = ISC_R_FAILURE;
} else {
dns_db_attach(client->view->hints, &db);
- result = dns_db_find(db, dns_rootname,
- NULL, dns_rdatatype_ns,
- 0, client->now, &node, fname,
- rdataset, sigrdataset);
+ result = dns_db_findext(db, dns_rootname,
+ NULL, dns_rdatatype_ns,
+ 0, client->now, &node,
+ fname, &cm, &ci,
+ rdataset, sigrdataset);
}
if (result != ISC_R_SUCCESS) {
/*
@@ -6080,6 +6378,15 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
rdataset = NULL;
sigrdataset = NULL;
type = qtype = dns_rdatatype_a;
+ rpz_st = client->query.rpz_st;
+ if (rpz_st != NULL) {
+ /*
+ * Arrange for RPZ rewriting of any A records.
+ */
+ if ((rpz_st->state & DNS_RPZ_REWRITTEN) != 0)
+ is_zone = rpz_st->q.is_zone;
+ rpz_st_clear(client);
+ }
dns64 = ISC_TRUE;
goto db_find;
}
@@ -6108,7 +6415,10 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
* closest provable encloser.
*/
if (dns_rdataset_isassociated(rdataset) &&
- !dns_name_equal(qname, found)) {
+ !dns_name_equal(qname, found) &&
+ !(ns_g_nonearest &&
+ qtype != dns_rdatatype_ds))
+ {
unsigned int count;
unsigned int skip;
@@ -6198,6 +6508,10 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
case DNS_R_NXDOMAIN:
INSIST(is_zone);
+ if (!empty_wild &&
+ redirect(client, fname, rdataset, &node, &db, &version,
+ type))
+ break;
if (dns_rdataset_isassociated(rdataset)) {
/*
* If we've got a NSEC record, we need to save the
@@ -6257,6 +6571,9 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
goto cleanup;
case DNS_R_NCACHENXDOMAIN:
+ if (redirect(client, fname, rdataset, &node, &db, &version,
+ type))
+ break;
case DNS_R_NCACHENXRRSET:
ncache_nxrrset:
INSIST(!is_zone);
@@ -6338,6 +6655,15 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
sigrdataset = NULL;
fname = NULL;
type = qtype = dns_rdatatype_a;
+ rpz_st = client->query.rpz_st;
+ if (rpz_st != NULL) {
+ /*
+ * Arrange for RPZ rewriting of any A records.
+ */
+ if ((rpz_st->state & DNS_RPZ_REWRITTEN) != 0)
+ is_zone = rpz_st->q.is_zone;
+ rpz_st_clear(client);
+ }
dns64 = ISC_TRUE;
goto db_find;
}
@@ -6750,9 +7076,9 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
if (qtype == dns_rdatatype_aaaa) {
trdataset = query_newrdataset(client);
result = dns_db_findrdataset(db, node, version,
- dns_rdatatype_a, 0,
- client->now,
- trdataset, NULL);
+ dns_rdatatype_a, 0,
+ client->now,
+ trdataset, NULL);
if (dns_rdataset_isassociated(trdataset))
dns_rdataset_disassociate(trdataset);
query_putrdataset(client, &trdataset);
@@ -6838,6 +7164,15 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
rdataset = NULL;
sigrdataset = NULL;
type = qtype = dns_rdatatype_a;
+ rpz_st = client->query.rpz_st;
+ if (rpz_st != NULL) {
+ /*
+ * Arrange for RPZ rewriting of any A records.
+ */
+ if ((rpz_st->state & DNS_RPZ_REWRITTEN) != 0)
+ is_zone = rpz_st->q.is_zone;
+ rpz_st_clear(client);
+ }
dns64_exclude = dns64 = ISC_TRUE;
goto db_find;
}
@@ -7124,7 +7459,6 @@ ns_query_start(ns_client_t *client) {
dns_rdatatype_t qtype;
unsigned int saved_extflags = client->extflags;
unsigned int saved_flags = client->message->flags;
- isc_boolean_t want_ad;
CTRACE("ns_query_start");
@@ -7220,6 +7554,7 @@ ns_query_start(ns_client_t *client) {
INSIST(rdataset != NULL);
qtype = rdataset->type;
dns_rdatatypestats_increment(ns_g_server->rcvquerystats, qtype);
+
if (dns_rdatatype_ismeta(qtype)) {
switch (qtype) {
case dns_rdatatype_any:
@@ -7286,13 +7621,11 @@ ns_query_start(ns_client_t *client) {
client->query.attributes &= ~NS_QUERYATTR_SECURE;
/*
- * Set 'want_ad' if the client has set AD in the query.
+ * Set NS_CLIENTATTR_WANTDNSSEC if the client has set AD in the query.
* This allows AD to be returned on queries without DO set.
*/
if ((message->flags & DNS_MESSAGEFLAG_AD) != 0)
- want_ad = ISC_TRUE;
- else
- want_ad = ISC_FALSE;
+ client->attributes |= NS_CLIENTATTR_WANTAD;
/*
* This is an ordinary query.
@@ -7317,7 +7650,7 @@ ns_query_start(ns_client_t *client) {
* Set AD. We must clear it if we add non-validated data to a
* response.
*/
- if (WANTDNSSEC(client) || want_ad)
+ if (WANTDNSSEC(client) || WANTAD(client))
message->flags |= DNS_MESSAGEFLAG_AD;
qclient = NULL;
diff --git a/contrib/bind9/bin/named/server.c b/contrib/bind9/bin/named/server.c
index c3eb1ea0ae67..aef922bb73bc 100644
--- a/contrib/bind9/bin/named/server.c
+++ b/contrib/bind9/bin/named/server.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.c,v 1.599.8.19 2012/02/22 00:33:32 each Exp $ */
+/* $Id$ */
/*! \file */
@@ -34,11 +34,13 @@
#include <isc/entropy.h>
#include <isc/file.h>
#include <isc/hash.h>
+#include <isc/hex.h>
#include <isc/httpd.h>
#include <isc/lex.h>
#include <isc/parseint.h>
#include <isc/portset.h>
#include <isc/print.h>
+#include <isc/refcount.h>
#include <isc/resource.h>
#include <isc/sha2.h>
#include <isc/socket.h>
@@ -72,6 +74,7 @@
#include <dns/order.h>
#include <dns/peer.h>
#include <dns/portlist.h>
+#include <dns/private.h>
#include <dns/rbt.h>
#include <dns/rdataclass.h>
#include <dns/rdataset.h>
@@ -112,6 +115,10 @@
#define PATH_MAX 1024
#endif
+#ifndef SIZE_MAX
+#define SIZE_MAX ((size_t)-1)
+#endif
+
/*%
* Check an operation for failure. Assumes that the function
* using it has a 'result' variable and a 'cleanup' label.
@@ -159,7 +166,7 @@
* a cache. Only effective when a finite max-cache-size is specified.
* This is currently defined to be 8MB.
*/
-#define MAX_ADB_SIZE_FOR_CACHESHARE 8388608
+#define MAX_ADB_SIZE_FOR_CACHESHARE 8388608U
struct ns_dispatch {
isc_sockaddr_t addr;
@@ -215,56 +222,129 @@ struct cfg_context {
cfg_aclconfctx_t * actx;
};
+/*%
+ * Holds state information for the initial zone loading process.
+ * Uses the isc_refcount structure to count the number of views
+ * with pending zone loads, dereferencing as each view finishes.
+ */
+typedef struct {
+ ns_server_t *server;
+ isc_refcount_t refs;
+} ns_zoneload_t;
+
/*
* These zones should not leak onto the Internet.
*/
-static const struct {
- const char *zone;
- isc_boolean_t rfc1918;
-} empty_zones[] = {
+const char *empty_zones[] = {
/* RFC 1918 */
- { "10.IN-ADDR.ARPA", ISC_TRUE },
- { "16.172.IN-ADDR.ARPA", ISC_TRUE },
- { "17.172.IN-ADDR.ARPA", ISC_TRUE },
- { "18.172.IN-ADDR.ARPA", ISC_TRUE },
- { "19.172.IN-ADDR.ARPA", ISC_TRUE },
- { "20.172.IN-ADDR.ARPA", ISC_TRUE },
- { "21.172.IN-ADDR.ARPA", ISC_TRUE },
- { "22.172.IN-ADDR.ARPA", ISC_TRUE },
- { "23.172.IN-ADDR.ARPA", ISC_TRUE },
- { "24.172.IN-ADDR.ARPA", ISC_TRUE },
- { "25.172.IN-ADDR.ARPA", ISC_TRUE },
- { "26.172.IN-ADDR.ARPA", ISC_TRUE },
- { "27.172.IN-ADDR.ARPA", ISC_TRUE },
- { "28.172.IN-ADDR.ARPA", ISC_TRUE },
- { "29.172.IN-ADDR.ARPA", ISC_TRUE },
- { "30.172.IN-ADDR.ARPA", ISC_TRUE },
- { "31.172.IN-ADDR.ARPA", ISC_TRUE },
- { "168.192.IN-ADDR.ARPA", ISC_TRUE },
+ "10.IN-ADDR.ARPA",
+ "16.172.IN-ADDR.ARPA",
+ "17.172.IN-ADDR.ARPA",
+ "18.172.IN-ADDR.ARPA",
+ "19.172.IN-ADDR.ARPA",
+ "20.172.IN-ADDR.ARPA",
+ "21.172.IN-ADDR.ARPA",
+ "22.172.IN-ADDR.ARPA",
+ "23.172.IN-ADDR.ARPA",
+ "24.172.IN-ADDR.ARPA",
+ "25.172.IN-ADDR.ARPA",
+ "26.172.IN-ADDR.ARPA",
+ "27.172.IN-ADDR.ARPA",
+ "28.172.IN-ADDR.ARPA",
+ "29.172.IN-ADDR.ARPA",
+ "30.172.IN-ADDR.ARPA",
+ "31.172.IN-ADDR.ARPA",
+ "168.192.IN-ADDR.ARPA",
+
+ /* RFC 6598 */
+ "64.100.IN-ADDR.ARPA",
+ "65.100.IN-ADDR.ARPA",
+ "66.100.IN-ADDR.ARPA",
+ "67.100.IN-ADDR.ARPA",
+ "68.100.IN-ADDR.ARPA",
+ "69.100.IN-ADDR.ARPA",
+ "70.100.IN-ADDR.ARPA",
+ "71.100.IN-ADDR.ARPA",
+ "72.100.IN-ADDR.ARPA",
+ "73.100.IN-ADDR.ARPA",
+ "74.100.IN-ADDR.ARPA",
+ "75.100.IN-ADDR.ARPA",
+ "76.100.IN-ADDR.ARPA",
+ "77.100.IN-ADDR.ARPA",
+ "78.100.IN-ADDR.ARPA",
+ "79.100.IN-ADDR.ARPA",
+ "80.100.IN-ADDR.ARPA",
+ "81.100.IN-ADDR.ARPA",
+ "82.100.IN-ADDR.ARPA",
+ "83.100.IN-ADDR.ARPA",
+ "84.100.IN-ADDR.ARPA",
+ "85.100.IN-ADDR.ARPA",
+ "86.100.IN-ADDR.ARPA",
+ "87.100.IN-ADDR.ARPA",
+ "88.100.IN-ADDR.ARPA",
+ "89.100.IN-ADDR.ARPA",
+ "90.100.IN-ADDR.ARPA",
+ "91.100.IN-ADDR.ARPA",
+ "92.100.IN-ADDR.ARPA",
+ "93.100.IN-ADDR.ARPA",
+ "94.100.IN-ADDR.ARPA",
+ "95.100.IN-ADDR.ARPA",
+ "96.100.IN-ADDR.ARPA",
+ "97.100.IN-ADDR.ARPA",
+ "98.100.IN-ADDR.ARPA",
+ "99.100.IN-ADDR.ARPA",
+ "100.100.IN-ADDR.ARPA",
+ "101.100.IN-ADDR.ARPA",
+ "102.100.IN-ADDR.ARPA",
+ "103.100.IN-ADDR.ARPA",
+ "104.100.IN-ADDR.ARPA",
+ "105.100.IN-ADDR.ARPA",
+ "106.100.IN-ADDR.ARPA",
+ "107.100.IN-ADDR.ARPA",
+ "108.100.IN-ADDR.ARPA",
+ "109.100.IN-ADDR.ARPA",
+ "110.100.IN-ADDR.ARPA",
+ "111.100.IN-ADDR.ARPA",
+ "112.100.IN-ADDR.ARPA",
+ "113.100.IN-ADDR.ARPA",
+ "114.100.IN-ADDR.ARPA",
+ "115.100.IN-ADDR.ARPA",
+ "116.100.IN-ADDR.ARPA",
+ "117.100.IN-ADDR.ARPA",
+ "118.100.IN-ADDR.ARPA",
+ "119.100.IN-ADDR.ARPA",
+ "120.100.IN-ADDR.ARPA",
+ "121.100.IN-ADDR.ARPA",
+ "122.100.IN-ADDR.ARPA",
+ "123.100.IN-ADDR.ARPA",
+ "124.100.IN-ADDR.ARPA",
+ "125.100.IN-ADDR.ARPA",
+ "126.100.IN-ADDR.ARPA",
+ "127.100.IN-ADDR.ARPA",
/* RFC 5735 and RFC 5737 */
- { "0.IN-ADDR.ARPA", ISC_FALSE }, /* THIS NETWORK */
- { "127.IN-ADDR.ARPA", ISC_FALSE }, /* LOOPBACK */
- { "254.169.IN-ADDR.ARPA", ISC_FALSE }, /* LINK LOCAL */
- { "2.0.192.IN-ADDR.ARPA", ISC_FALSE }, /* TEST NET */
- { "100.51.198.IN-ADDR.ARPA", ISC_FALSE }, /* TEST NET 2 */
- { "113.0.203.IN-ADDR.ARPA", ISC_FALSE }, /* TEST NET 3 */
- { "255.255.255.255.IN-ADDR.ARPA", ISC_FALSE }, /* BROADCAST */
+ "0.IN-ADDR.ARPA", /* THIS NETWORK */
+ "127.IN-ADDR.ARPA", /* LOOPBACK */
+ "254.169.IN-ADDR.ARPA", /* LINK LOCAL */
+ "2.0.192.IN-ADDR.ARPA", /* TEST NET */
+ "100.51.198.IN-ADDR.ARPA", /* TEST NET 2 */
+ "113.0.203.IN-ADDR.ARPA", /* TEST NET 3 */
+ "255.255.255.255.IN-ADDR.ARPA", /* BROADCAST */
/* Local IPv6 Unicast Addresses */
- { "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA", ISC_FALSE },
- { "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA", ISC_FALSE },
+ "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA",
+ "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA",
/* LOCALLY ASSIGNED LOCAL ADDRESS SCOPE */
- { "D.F.IP6.ARPA", ISC_FALSE },
- { "8.E.F.IP6.ARPA", ISC_FALSE }, /* LINK LOCAL */
- { "9.E.F.IP6.ARPA", ISC_FALSE }, /* LINK LOCAL */
- { "A.E.F.IP6.ARPA", ISC_FALSE }, /* LINK LOCAL */
- { "B.E.F.IP6.ARPA", ISC_FALSE }, /* LINK LOCAL */
+ "D.F.IP6.ARPA",
+ "8.E.F.IP6.ARPA", /* LINK LOCAL */
+ "9.E.F.IP6.ARPA", /* LINK LOCAL */
+ "A.E.F.IP6.ARPA", /* LINK LOCAL */
+ "B.E.F.IP6.ARPA", /* LINK LOCAL */
/* Example Prefix, RFC 3849. */
- { "8.B.D.0.1.0.0.2.IP6.ARPA", ISC_FALSE },
+ "8.B.D.0.1.0.0.2.IP6.ARPA",
- { NULL, ISC_FALSE }
+ NULL
};
ISC_PLATFORM_NORETURN_PRE static void
@@ -447,7 +527,7 @@ configure_view_nametable(const cfg_obj_t *vconfig, const cfg_obj_t *config,
element = cfg_list_next(element)) {
nameobj = cfg_listelt_value(element);
str = cfg_obj_asstring(nameobj);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL));
/*
@@ -564,7 +644,7 @@ dstkey_fromconfig(const cfg_obj_t *vconfig, const cfg_obj_t *key,
keystruct.common.rdtype,
&keystruct, &rrdatabuf));
dns_fixedname_init(&fkeyname);
- isc_buffer_init(&namebuf, keynamestr, strlen(keynamestr));
+ isc_buffer_constinit(&namebuf, keynamestr, strlen(keynamestr));
isc_buffer_add(&namebuf, strlen(keynamestr));
CHECK(dns_name_fromtext(keyname, &namebuf, dns_rootname, 0, NULL));
CHECK(dst_key_fromdns(keyname, viewclass, &rrdatabuf,
@@ -798,7 +878,17 @@ configure_view_dnsseckeys(dns_view_t *view, const cfg_obj_t *vconfig,
*/
obj = NULL;
(void)ns_config_get(maps, "managed-keys-directory", &obj);
- directory = obj != NULL ? cfg_obj_asstring(obj) : NULL;
+ directory = (obj != NULL ? cfg_obj_asstring(obj) : NULL);
+ if (directory != NULL)
+ result = isc_file_isdirectory(directory);
+ if (result != ISC_R_SUCCESS) {
+ isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY,
+ NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
+ "invalid managed-keys-directory %s: %s",
+ directory, isc_result_totext(result));
+ goto cleanup;
+
+ }
CHECK(add_keydata_zone(view, directory, ns_g_mctx));
cleanup:
@@ -824,7 +914,7 @@ mustbesecure(const cfg_obj_t *mbs, dns_resolver_t *resolver) {
{
obj = cfg_listelt_value(element);
str = cfg_obj_asstring(cfg_tuple_get(obj, "name"));
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL));
value = cfg_obj_asboolean(cfg_tuple_get(obj, "value"));
@@ -977,7 +1067,7 @@ configure_order(dns_order_t *order, const cfg_obj_t *ent) {
else
str = "*";
addroot = ISC_TF(strcmp(str, "*") == 0);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
dns_fixedname_init(&fixed);
result = dns_name_fromtext(dns_fixedname_name(&fixed), &b,
@@ -1163,7 +1253,7 @@ disable_algorithms(const cfg_obj_t *disabled, dns_resolver_t *resolver) {
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
str = cfg_obj_asstring(cfg_tuple_get(disabled, "name"));
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL));
@@ -1215,7 +1305,7 @@ on_disable_list(const cfg_obj_t *disablelist, dns_name_t *zonename) {
{
value = cfg_listelt_value(element);
str = cfg_obj_asstring(value);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
result = dns_name_fromtext(name, &b, dns_rootname,
0, NULL);
@@ -1258,12 +1348,14 @@ check_dbtype(dns_zone_t **zonep, unsigned int dbtypec, const char **dbargv,
}
static isc_result_t
-setquerystats(dns_zone_t *zone, isc_mem_t *mctx, isc_boolean_t on) {
+setquerystats(dns_zone_t *zone, isc_mem_t *mctx, dns_zonestat_level_t level) {
isc_result_t result;
isc_stats_t *zoneqrystats;
+ dns_zone_setstatlevel(zone, level);
+
zoneqrystats = NULL;
- if (on) {
+ if (level == dns_zonestat_full) {
result = isc_stats_create(mctx, &zoneqrystats,
dns_nsstatscounter_max);
if (result != ISC_R_SUCCESS)
@@ -1311,7 +1403,7 @@ static isc_boolean_t
cache_sharable(dns_view_t *originview, dns_view_t *view,
isc_boolean_t new_zero_no_soattl,
unsigned int new_cleaning_interval,
- isc_uint32_t new_max_cache_size)
+ isc_uint64_t new_max_cache_size)
{
/*
* If the cache cannot even reused for the same view, it cannot be
@@ -1344,11 +1436,11 @@ dlzconfigure_callback(dns_view_t *view, dns_zone_t *zone) {
result = dns_zonemgr_managezone(ns_g_server->zonemgr, zone);
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
dns_zone_setstats(zone, ns_g_server->zonestats);
- return ns_zone_configure_writeable_dlz(view->dlzdatabase,
- zone, zclass, origin);
+ return (ns_zone_configure_writeable_dlz(view->dlzdatabase,
+ zone, zclass, origin));
}
static isc_result_t
@@ -1399,7 +1491,7 @@ dns64_reverse(dns_view_t *view, isc_mem_t *mctx, isc_netaddr_t *na,
dns64_dbtype[3] = contact;
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
- isc_buffer_init(&b, reverse, strlen(reverse));
+ isc_buffer_constinit(&b, reverse, strlen(reverse));
isc_buffer_add(&b, strlen(reverse));
CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL));
CHECK(dns_zone_create(&zone, mctx));
@@ -1417,7 +1509,7 @@ dns64_reverse(dns_view_t *view, isc_mem_t *mctx, isc_netaddr_t *na,
dns_zone_setdialup(zone, dns_dialuptype_no);
dns_zone_setnotifytype(zone, dns_notifytype_no);
dns_zone_setoption(zone, DNS_ZONEOPT_NOCHECKNS, ISC_TRUE);
- CHECK(setquerystats(zone, mctx, ISC_FALSE)); /* XXXMPA */
+ CHECK(setquerystats(zone, mctx, dns_zonestat_none)); /* XXXMPA */
CHECK(dns_view_addzone(view, zone));
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
ISC_LOG_INFO, "dns64 reverse zone%s%s: %s", sep,
@@ -1430,39 +1522,57 @@ cleanup:
}
static isc_result_t
+configure_rpz_name(dns_view_t *view, const cfg_obj_t *obj, dns_name_t *name,
+ const char *str, const char *msg)
+{
+ isc_result_t result;
+
+ result = dns_name_fromstring(name, str, DNS_NAME_DOWNCASE, view->mctx);
+ if (result != ISC_R_SUCCESS)
+ cfg_obj_log(obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
+ "invalid %s '%s'", msg, str);
+ return (result);
+}
+
+static isc_result_t
+configure_rpz_name2(dns_view_t *view, const cfg_obj_t *obj, dns_name_t *name,
+ const char *str, const dns_name_t *origin)
+{
+ isc_result_t result;
+
+ result = dns_name_fromstring2(name, str, origin, DNS_NAME_DOWNCASE,
+ view->mctx);
+ if (result != ISC_R_SUCCESS)
+ cfg_obj_log(obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
+ "invalid zone '%s'", str);
+ return (result);
+}
+
+static isc_result_t
configure_rpz(dns_view_t *view, const cfg_listelt_t *element,
isc_boolean_t recursive_only_def, dns_ttl_t ttl_def)
{
- const cfg_obj_t *rpz_obj, *policy_obj, *obj;
+ const cfg_obj_t *rpz_obj, *obj;
const char *str;
dns_rpz_zone_t *old, *new;
- dns_zone_t *zone = NULL;
isc_result_t result;
+ rpz_obj = cfg_listelt_value(element);
+
new = isc_mem_get(view->mctx, sizeof(*new));
if (new == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup;
+ cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
+ "no memory for response policy zones");
+ return (ISC_R_NOMEMORY);
}
memset(new, 0, sizeof(*new));
dns_name_init(&new->origin, NULL);
dns_name_init(&new->nsdname, NULL);
- dns_name_init(&new->cname, NULL);
dns_name_init(&new->passthru, NULL);
+ dns_name_init(&new->cname, NULL);
ISC_LIST_INITANDAPPEND(view->rpz_zones, new, link);
- rpz_obj = cfg_listelt_value(element);
- policy_obj = cfg_tuple_get(rpz_obj, "policy");
- if (cfg_obj_isvoid(policy_obj)) {
- new->policy = DNS_RPZ_POLICY_GIVEN;
- } else {
- str = cfg_obj_asstring(cfg_tuple_get(policy_obj,
- "policy name"));
- new->policy = dns_rpz_str2policy(str);
- INSIST(new->policy != DNS_RPZ_POLICY_ERROR);
- }
-
obj = cfg_tuple_get(rpz_obj, "recursive-only");
if (cfg_obj_isvoid(obj)) {
new->recursive_only = recursive_only_def;
@@ -1480,47 +1590,14 @@ configure_rpz(dns_view_t *view, const cfg_listelt_t *element,
}
str = cfg_obj_asstring(cfg_tuple_get(rpz_obj, "zone name"));
- result = dns_name_fromstring(&new->origin, str, DNS_NAME_DOWNCASE,
- view->mctx);
- if (result != ISC_R_SUCCESS) {
- cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
- "invalid zone '%s'", str);
- goto cleanup;
- }
-
- result = dns_name_fromstring2(&new->nsdname, DNS_RPZ_NSDNAME_ZONE,
- &new->origin, DNS_NAME_DOWNCASE,
- view->mctx);
- if (result != ISC_R_SUCCESS) {
- cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
- "invalid zone '%s'", str);
- goto cleanup;
- }
-
- result = dns_name_fromstring(&new->passthru, DNS_RPZ_PASSTHRU_ZONE,
- DNS_NAME_DOWNCASE, view->mctx);
- if (result != ISC_R_SUCCESS) {
- cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
- "invalid zone '%s'", str);
- goto cleanup;
- }
-
- result = dns_view_findzone(view, &new->origin, &zone);
- if (result != ISC_R_SUCCESS) {
- cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
- "unknown zone '%s'", str);
- goto cleanup;
- }
- if (dns_zone_gettype(zone) != dns_zone_master &&
- dns_zone_gettype(zone) != dns_zone_slave) {
+ result = configure_rpz_name(view, rpz_obj, &new->origin, str, "zone");
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ if (dns_name_equal(&new->origin, dns_rootname)) {
cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
- "zone '%s' is neither master nor slave", str);
- dns_zone_detach(&zone);
- result = DNS_R_NOTMASTER;
- goto cleanup;
+ "invalid zone name '%s'", str);
+ return (DNS_R_EMPTYLABEL);
}
- dns_zone_detach(&zone);
-
for (old = ISC_LIST_HEAD(view->rpz_zones);
old != new;
old = ISC_LIST_NEXT(old, link)) {
@@ -1529,26 +1606,37 @@ configure_rpz(dns_view_t *view, const cfg_listelt_t *element,
cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
"duplicate '%s'", str);
result = DNS_R_DUPLICATE;
- goto cleanup;
+ return (result);
}
}
- if (new->policy == DNS_RPZ_POLICY_CNAME) {
- str = cfg_obj_asstring(cfg_tuple_get(policy_obj, "cname"));
- result = dns_name_fromstring(&new->cname, str,
- DNS_NAME_DOWNCASE, view->mctx);
- if (result != ISC_R_SUCCESS) {
- cfg_obj_log(rpz_obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
- "invalid cname '%s'", str);
- goto cleanup;
+ result = configure_rpz_name2(view, rpz_obj, &new->nsdname,
+ DNS_RPZ_NSDNAME_ZONE, &new->origin);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ result = configure_rpz_name(view, rpz_obj, &new->passthru,
+ DNS_RPZ_PASSTHRU_ZONE, "zone");
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ obj = cfg_tuple_get(rpz_obj, "policy");
+ if (cfg_obj_isvoid(obj)) {
+ new->policy = DNS_RPZ_POLICY_GIVEN;
+ } else {
+ str = cfg_obj_asstring(cfg_tuple_get(obj, "policy name"));
+ new->policy = dns_rpz_str2policy(str);
+ INSIST(new->policy != DNS_RPZ_POLICY_ERROR);
+ if (new->policy == DNS_RPZ_POLICY_CNAME) {
+ str = cfg_obj_asstring(cfg_tuple_get(obj, "cname"));
+ result = configure_rpz_name(view, rpz_obj, &new->cname,
+ str, "cname");
+ if (result != ISC_R_SUCCESS)
+ return (result);
}
}
return (ISC_R_SUCCESS);
-
- cleanup:
- dns_rpz_view_destroy(view);
- return (result);
}
/*
@@ -1582,10 +1670,10 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
in_port_t port;
dns_cache_t *cache = NULL;
isc_result_t result;
- isc_uint32_t max_adb_size;
unsigned int cleaning_interval;
- isc_uint32_t max_cache_size;
- isc_uint32_t max_acache_size;
+ size_t max_cache_size;
+ size_t max_acache_size;
+ size_t max_adb_size;
isc_uint32_t lame_ttl;
dns_tsig_keyring_t *ring = NULL;
dns_view_t *pview = NULL; /* Production view */
@@ -1599,13 +1687,13 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
const char *cachename = NULL;
dns_order_t *order = NULL;
isc_uint32_t udpsize;
+ isc_uint32_t maxbits;
unsigned int resopts = 0;
dns_zone_t *zone = NULL;
isc_uint32_t max_clients_per_query;
const char *sep = ": view ";
const char *viewname = view->name;
const char *forview = " for view ";
- isc_boolean_t rfc1918;
isc_boolean_t empty_zones_enable;
const cfg_obj_t *disablelist = NULL;
isc_stats_t *resstats = NULL;
@@ -1615,8 +1703,9 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
ns_cache_t *nsc;
isc_boolean_t zero_no_soattl;
dns_acl_t *clients = NULL, *mapped = NULL, *excluded = NULL;
- unsigned int query_timeout;
+ unsigned int query_timeout, ndisp;
struct cfg_context *nzctx;
+ dns_rpz_zone_t *rpz;
REQUIRE(DNS_VIEW_VALID(view));
@@ -1690,18 +1779,18 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
max_acache_size = ISC_UINT32_MAX;
} else {
isc_resourcevalue_t value;
-
value = cfg_obj_asuint64(obj);
- if (value > ISC_UINT32_MAX) {
- cfg_obj_log(obj, ns_g_lctx, ISC_LOG_ERROR,
+ if (value > SIZE_MAX) {
+ cfg_obj_log(obj, ns_g_lctx,
+ ISC_LOG_WARNING,
"'max-acache-size "
- "%" ISC_PRINT_QUADFORMAT
- "d' is too large",
- value);
- result = ISC_R_RANGE;
- goto cleanup;
+ "%" ISC_PRINT_QUADFORMAT "u' "
+ "is too large for this "
+ "system; reducing to %lu",
+ value, (unsigned long)SIZE_MAX);
+ value = SIZE_MAX;
}
- max_acache_size = (isc_uint32_t)value;
+ max_acache_size = (size_t) value;
}
dns_acache_setcachesize(view->acache, max_acache_size);
}
@@ -1715,6 +1804,53 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
}
/*
+ * Make the list of response policy zone names for a view that
+ * is used for real lookups and so cares about hints.
+ */
+ obj = NULL;
+ if (view->rdclass == dns_rdataclass_in && need_hints &&
+ ns_config_get(maps, "response-policy", &obj) == ISC_R_SUCCESS) {
+ const cfg_obj_t *rpz_obj;
+ isc_boolean_t recursive_only_def;
+ dns_ttl_t ttl_def;
+
+ rpz_obj = cfg_tuple_get(obj, "recursive-only");
+ if (!cfg_obj_isvoid(rpz_obj) &&
+ !cfg_obj_asboolean(rpz_obj))
+ recursive_only_def = ISC_FALSE;
+ else
+ recursive_only_def = ISC_TRUE;
+
+ rpz_obj = cfg_tuple_get(obj, "break-dnssec");
+ if (!cfg_obj_isvoid(rpz_obj) &&
+ cfg_obj_asboolean(rpz_obj))
+ view->rpz_break_dnssec = ISC_TRUE;
+ else
+ view->rpz_break_dnssec = ISC_FALSE;
+
+ rpz_obj = cfg_tuple_get(obj, "max-policy-ttl");
+ if (cfg_obj_isuint32(rpz_obj))
+ ttl_def = cfg_obj_asuint32(rpz_obj);
+ else
+ ttl_def = DNS_RPZ_MAX_TTL_DEFAULT;
+
+ rpz_obj = cfg_tuple_get(obj, "min-ns-dots");
+ if (cfg_obj_isuint32(rpz_obj))
+ view->rpz_min_ns_labels = cfg_obj_asuint32(rpz_obj) + 1;
+ else
+ view->rpz_min_ns_labels = 2;
+
+ element = cfg_list_first(cfg_tuple_get(obj, "zone list"));
+ while (element != NULL) {
+ result = configure_rpz(view, element,
+ recursive_only_def, ttl_def);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ element = cfg_list_next(element);
+ }
+ }
+
+ /*
* Configure the zones.
*/
zonelist = NULL;
@@ -1735,6 +1871,22 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
actx, ISC_FALSE));
}
+ for (rpz = ISC_LIST_HEAD(view->rpz_zones);
+ rpz != NULL;
+ rpz = ISC_LIST_NEXT(rpz, link))
+ {
+ if (!rpz->defined) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+
+ dns_name_format(&rpz->origin, namebuf, sizeof(namebuf));
+ cfg_obj_log(obj, ns_g_lctx, DNS_RPZ_ERROR_LEVEL,
+ "'%s' is not a master or slave zone",
+ namebuf);
+ result = ISC_R_NOTFOUND;
+ goto cleanup;
+ }
+ }
+
/*
* If we're allowing added zones, then load zone configuration
* from the newzone file for zones that were added during previous
@@ -1825,15 +1977,17 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
} else {
isc_resourcevalue_t value;
value = cfg_obj_asuint64(obj);
- if (value > ISC_UINT32_MAX) {
- cfg_obj_log(obj, ns_g_lctx, ISC_LOG_ERROR,
+ if (value > SIZE_MAX) {
+ cfg_obj_log(obj, ns_g_lctx,
+ ISC_LOG_WARNING,
"'max-cache-size "
- "%" ISC_PRINT_QUADFORMAT "d' is too large",
- value);
- result = ISC_R_RANGE;
- goto cleanup;
+ "%" ISC_PRINT_QUADFORMAT "u' "
+ "is too large for this "
+ "system; reducing to %lu",
+ value, (unsigned long)SIZE_MAX);
+ value = SIZE_MAX;
}
- max_cache_size = (isc_uint32_t)value;
+ max_cache_size = (size_t) value;
}
/* Check-names. */
@@ -2142,7 +2296,9 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
result = ISC_R_UNEXPECTED;
goto cleanup;
}
- CHECK(dns_view_createresolver(view, ns_g_taskmgr, 31,
+
+ ndisp = 4 * ISC_MIN(ns_g_udpdisp, MAX_UDP_DISPATCH);
+ CHECK(dns_view_createresolver(view, ns_g_taskmgr, 31, ndisp,
ns_g_socketmgr, ns_g_timermgr,
resopts, ns_g_dispatchmgr,
dispatch4, dispatch6));
@@ -2161,9 +2317,9 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
* MAX_ADB_SIZE_FOR_CACHESHARE when the cache is shared.
*/
max_adb_size = 0;
- if (max_cache_size != 0) {
+ if (max_cache_size != 0U) {
max_adb_size = max_cache_size / 8;
- if (max_adb_size == 0)
+ if (max_adb_size == 0U)
max_adb_size = 1; /* Force minimum. */
if (view != nsc->primaryview &&
max_adb_size > MAX_ADB_SIZE_FOR_CACHESHARE) {
@@ -2227,6 +2383,19 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
view->maxudp = udpsize;
/*
+ * Set the maximum rsa exponent bits.
+ */
+ obj = NULL;
+ result = ns_config_get(maps, "max-rsa-exponent-size", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ maxbits = cfg_obj_asuint32(obj);
+ if (maxbits != 0 && maxbits < 35)
+ maxbits = 35;
+ if (maxbits > 4096)
+ maxbits = 4096;
+ view->maxbits = maxbits;
+
+ /*
* Set supported DNSSEC algorithms.
*/
dns_resolver_reset_algorithms(view->resolver);
@@ -2554,11 +2723,6 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
ns_g_mctx, &view->upfwdacl));
obj = NULL;
- result = ns_config_get(maps, "request-ixfr", &obj);
- INSIST(result == ISC_R_SUCCESS);
- view->requestixfr = cfg_obj_asboolean(obj);
-
- obj = NULL;
result = ns_config_get(maps, "provide-ixfr", &obj);
INSIST(result == ISC_R_SUCCESS);
view->provideixfr = cfg_obj_asboolean(obj);
@@ -2638,7 +2802,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
obj = cfg_listelt_value(element);
str = cfg_obj_asstring(cfg_tuple_get(obj,
"trust-anchor"));
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
dlv = dns_fixedname_name(&view->dlv_fixed);
CHECK(dns_name_fromtext(dlv, &b, dns_rootname,
@@ -2691,7 +2855,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
element = cfg_list_next(element)) {
exclude = cfg_listelt_value(element);
str = cfg_obj_asstring(exclude);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
CHECK(dns_name_fromtext(name, &b, dns_rootname,
0, NULL));
@@ -2711,16 +2875,13 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
(void)ns_config_get(maps, "disable-empty-zone", &disablelist);
if (obj == NULL && disablelist == NULL &&
view->rdclass == dns_rdataclass_in) {
- rfc1918 = ISC_FALSE;
empty_zones_enable = view->recursion;
} else if (view->rdclass == dns_rdataclass_in) {
- rfc1918 = ISC_TRUE;
if (obj != NULL)
empty_zones_enable = cfg_obj_asboolean(obj);
else
empty_zones_enable = view->recursion;
} else {
- rfc1918 = ISC_FALSE;
empty_zones_enable = ISC_FALSE;
}
if (empty_zones_enable && !lwresd_g_useresolvconf) {
@@ -2732,11 +2893,10 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
const char *str;
char server[DNS_NAME_FORMATSIZE + 1];
char contact[DNS_NAME_FORMATSIZE + 1];
- isc_boolean_t logit;
const char *empty_dbtype[4] =
{ "_builtin", "empty", NULL, NULL };
int empty_dbtypec = 4;
- isc_boolean_t zonestats_on;
+ dns_zonestat_level_t statlevel;
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -2745,7 +2905,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
result = ns_config_get(maps, "empty-server", &obj);
if (result == ISC_R_SUCCESS) {
str = cfg_obj_asstring(obj);
- isc_buffer_init(&buffer, str, strlen(str));
+ isc_buffer_constinit(&buffer, str, strlen(str));
isc_buffer_add(&buffer, strlen(str));
CHECK(dns_name_fromtext(name, &buffer, dns_rootname, 0,
NULL));
@@ -2760,7 +2920,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
result = ns_config_get(maps, "empty-contact", &obj);
if (result == ISC_R_SUCCESS) {
str = cfg_obj_asstring(obj);
- isc_buffer_init(&buffer, str, strlen(str));
+ isc_buffer_constinit(&buffer, str, strlen(str));
isc_buffer_add(&buffer, strlen(str));
CHECK(dns_name_fromtext(name, &buffer, dns_rootname, 0,
NULL));
@@ -2774,17 +2934,31 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
obj = NULL;
result = ns_config_get(maps, "zone-statistics", &obj);
INSIST(result == ISC_R_SUCCESS);
- zonestats_on = cfg_obj_asboolean(obj);
+ if (cfg_obj_isboolean(obj)) {
+ if (cfg_obj_asboolean(obj))
+ statlevel = dns_zonestat_full;
+ else
+ statlevel = dns_zonestat_terse; /* XXX */
+ } else {
+ const char *levelstr = cfg_obj_asstring(obj);
+ if (strcasecmp(levelstr, "full") == 0)
+ statlevel = dns_zonestat_full;
+ else if (strcasecmp(levelstr, "terse") == 0)
+ statlevel = dns_zonestat_terse;
+ else if (strcasecmp(levelstr, "none") == 0)
+ statlevel = dns_zonestat_none;
+ else
+ INSIST(0);
+ }
- logit = ISC_TRUE;
- for (empty = empty_zones[empty_zone].zone;
+ for (empty = empty_zones[empty_zone];
empty != NULL;
- empty = empty_zones[++empty_zone].zone)
+ empty = empty_zones[++empty_zone])
{
dns_forwarders_t *forwarders = NULL;
dns_view_t *pview = NULL;
- isc_buffer_init(&buffer, empty, strlen(empty));
+ isc_buffer_constinit(&buffer, empty, strlen(empty));
isc_buffer_add(&buffer, strlen(empty));
/*
* Look for zone on drop list.
@@ -2800,7 +2974,6 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
*/
(void)dns_view_findzone(view, name, &zone);
if (zone != NULL) {
- CHECK(setquerystats(zone, mctx, zonestats_on));
dns_zone_detach(&zone);
continue;
}
@@ -2815,23 +2988,6 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
forwarders->fwdpolicy == dns_fwdpolicy_only)
continue;
- if (!rfc1918 && empty_zones[empty_zone].rfc1918) {
- if (logit) {
- isc_log_write(ns_g_lctx,
- NS_LOGCATEGORY_GENERAL,
- NS_LOGMODULE_SERVER,
- ISC_LOG_WARNING,
- "Warning%s%s: "
- "'empty-zones-enable/"
- "disable-empty-zone' "
- "not set: disabling "
- "RFC 1918 empty zones",
- sep, viewname);
- logit = ISC_FALSE;
- }
- continue;
- }
-
/*
* See if we can re-use a existing zone.
*/
@@ -2852,13 +3008,14 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
dns_zone_setview(zone, view);
CHECK(dns_view_addzone(view, zone));
CHECK(setquerystats(zone, mctx,
- zonestats_on));
+ statlevel));
dns_zone_detach(&zone);
continue;
}
}
- CHECK(dns_zone_create(&zone, mctx));
+ CHECK(dns_zonemgr_createzone(ns_g_server->zonemgr,
+ &zone));
CHECK(dns_zone_setorigin(zone, name));
dns_zone_setview(zone, view);
CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr,
@@ -2876,7 +3033,7 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
dns_zone_setnotifytype(zone, dns_notifytype_no);
dns_zone_setoption(zone, DNS_ZONEOPT_NOCHECKNS,
ISC_TRUE);
- CHECK(setquerystats(zone, mctx, zonestats_on));
+ CHECK(setquerystats(zone, mctx, statlevel));
CHECK(dns_view_addzone(view, zone));
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
@@ -2886,49 +3043,6 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
}
}
- /*
- * Make the list of response policy zone names for views that
- * are used for real lookups and so care about hints.
- */
- obj = NULL;
- if (view->rdclass == dns_rdataclass_in && need_hints &&
- ns_config_get(maps, "response-policy", &obj) == ISC_R_SUCCESS) {
- const cfg_obj_t *recursive_only_obj;
- const cfg_obj_t *break_dnssec_obj, *ttl_obj;
- isc_boolean_t recursive_only_def;
- dns_ttl_t ttl_def;
-
- recursive_only_obj = cfg_tuple_get(obj, "recursive-only");
- if (!cfg_obj_isvoid(recursive_only_obj) &&
- !cfg_obj_asboolean(recursive_only_obj))
- recursive_only_def = ISC_FALSE;
- else
- recursive_only_def = ISC_TRUE;
-
- break_dnssec_obj = cfg_tuple_get(obj, "break-dnssec");
- if (!cfg_obj_isvoid(break_dnssec_obj) &&
- cfg_obj_asboolean(break_dnssec_obj))
- view->rpz_break_dnssec = ISC_TRUE;
- else
- view->rpz_break_dnssec = ISC_FALSE;
-
- ttl_obj = cfg_tuple_get(obj, "max-policy-ttl");
- if (cfg_obj_isuint32(ttl_obj))
- ttl_def = cfg_obj_asuint32(ttl_obj);
- else
- ttl_def = DNS_RPZ_MAX_TTL_DEFAULT;
-
- for (element = cfg_list_first(cfg_tuple_get(obj, "zone list"));
- element != NULL;
- element = cfg_list_next(element)) {
- result = configure_rpz(view, element,
- recursive_only_def, ttl_def);
- if (result != ISC_R_SUCCESS)
- goto cleanup;
- dns_rpz_set_need(ISC_TRUE);
- }
- }
-
result = ISC_R_SUCCESS;
cleanup:
@@ -3028,7 +3142,7 @@ configure_alternates(const cfg_obj_t *config, dns_view_t *view,
isc_buffer_t buffer;
in_port_t myport = port;
- isc_buffer_init(&buffer, str, strlen(str));
+ isc_buffer_constinit(&buffer, str, strlen(str));
isc_buffer_add(&buffer, strlen(str));
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -3265,6 +3379,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
{
dns_view_t *pview = NULL; /* Production view */
dns_zone_t *zone = NULL; /* New or reused zone */
+ dns_zone_t *raw = NULL; /* New or reused raw zone */
dns_zone_t *dupzone = NULL;
const cfg_obj_t *options = NULL;
const cfg_obj_t *zoptions = NULL;
@@ -3272,6 +3387,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
const cfg_obj_t *forwarders = NULL;
const cfg_obj_t *forwardtype = NULL;
const cfg_obj_t *only = NULL;
+ const cfg_obj_t *signing = NULL;
isc_result_t result;
isc_result_t tresult;
isc_buffer_t buffer;
@@ -3280,6 +3396,8 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
const char *zname;
dns_rdataclass_t zclass;
const char *ztypestr;
+ isc_boolean_t is_rpz;
+ dns_rpz_zone_t *rpz;
options = NULL;
(void)cfg_map_get(config, "options", &options);
@@ -3290,7 +3408,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
* Get the zone origin as a dns_name_t.
*/
zname = cfg_obj_asstring(cfg_tuple_get(zconfig, "name"));
- isc_buffer_init(&buffer, zname, strlen(zname));
+ isc_buffer_constinit(&buffer, zname, strlen(zname));
isc_buffer_add(&buffer, strlen(zname));
dns_fixedname_init(&fixorigin);
CHECK(dns_name_fromtext(dns_fixedname_name(&fixorigin),
@@ -3393,6 +3511,38 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
}
/*
+ * Redirect zones only require minimal configuration.
+ */
+ if (strcasecmp(ztypestr, "redirect") == 0) {
+ if (view->redirect != NULL) {
+ cfg_obj_log(zconfig, ns_g_lctx, ISC_LOG_ERROR,
+ "redirect zone already exists");
+ result = ISC_R_EXISTS;
+ goto cleanup;
+ }
+ result = dns_viewlist_find(&ns_g_server->viewlist, view->name,
+ view->rdclass, &pview);
+ if (result != ISC_R_NOTFOUND && result != ISC_R_SUCCESS)
+ goto cleanup;
+ if (pview != NULL && pview->redirect != NULL) {
+ dns_zone_attach(pview->redirect, &zone);
+ dns_zone_setview(zone, view);
+ } else {
+ CHECK(dns_zonemgr_createzone(ns_g_server->zonemgr,
+ &zone));
+ CHECK(dns_zone_setorigin(zone, origin));
+ dns_zone_setview(zone, view);
+ CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr,
+ zone));
+ dns_zone_setstats(zone, ns_g_server->zonestats);
+ }
+ CHECK(ns_zone_configure(config, vconfig, zconfig, aclconf,
+ zone, NULL));
+ dns_zone_attach(zone, &view->redirect);
+ goto cleanup;
+ }
+
+ /*
* Check for duplicates in the new zone table.
*/
result = dns_view_findzone(view, origin, &dupzone);
@@ -3409,6 +3559,21 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
INSIST(dupzone == NULL);
/*
+ * Note whether this is a response policy zone.
+ */
+ is_rpz = ISC_FALSE;
+ for (rpz = ISC_LIST_HEAD(view->rpz_zones);
+ rpz != NULL;
+ rpz = ISC_LIST_NEXT(rpz, link))
+ {
+ if (dns_name_equal(&rpz->origin, origin)) {
+ is_rpz = ISC_TRUE;
+ rpz->defined = ISC_TRUE;
+ break;
+ }
+ }
+
+ /*
* See if we can reuse an existing zone. This is
* only possible if all of these are true:
* - The zone's view exists
@@ -3416,19 +3581,23 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
* - The zone is compatible with the config
* options (e.g., an existing master zone cannot
* be reused if the options specify a slave zone)
+ * - The zone was and is or was not and is not a policy zone
*/
- result = dns_viewlist_find(&ns_g_server->viewlist,
- view->name, view->rdclass,
- &pview);
+ result = dns_viewlist_find(&ns_g_server->viewlist, view->name,
+ view->rdclass, &pview);
if (result != ISC_R_NOTFOUND && result != ISC_R_SUCCESS)
goto cleanup;
if (pview != NULL)
result = dns_view_findzone(pview, origin, &zone);
if (result != ISC_R_NOTFOUND && result != ISC_R_SUCCESS)
goto cleanup;
+
if (zone != NULL && !ns_zone_reusable(zone, zconfig))
dns_zone_detach(&zone);
+ if (zone != NULL && is_rpz != dns_zone_get_rpz(zone))
+ dns_zone_detach(&zone);
+
if (zone != NULL) {
/*
* We found a reusable zone. Make it use the
@@ -3442,7 +3611,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
* We cannot reuse an existing zone, we have
* to create a new one.
*/
- CHECK(dns_zone_create(&zone, mctx));
+ CHECK(dns_zonemgr_createzone(ns_g_server->zonemgr, &zone));
CHECK(dns_zone_setorigin(zone, origin));
dns_zone_setview(zone, view);
if (view->acache != NULL)
@@ -3451,6 +3620,19 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
dns_zone_setstats(zone, ns_g_server->zonestats);
}
+ if (is_rpz) {
+ result = dns_zone_rpz_enable(zone);
+ if (result != ISC_R_SUCCESS) {
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
+ "zone '%s': incompatible"
+ " masterfile-format or database"
+ " for a response policy zone",
+ zname);
+ goto cleanup;
+ }
+ }
+
/*
* If the zone contains a 'forwarders' statement, configure
* selective forwarding.
@@ -3479,10 +3661,28 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
*/
dns_zone_setadded(zone, added);
+ signing = NULL;
+ if ((strcasecmp(ztypestr, "master") == 0 ||
+ strcasecmp(ztypestr, "slave") == 0) &&
+ cfg_map_get(zoptions, "inline-signing", &signing) == ISC_R_SUCCESS &&
+ cfg_obj_asboolean(signing))
+ {
+ dns_zone_getraw(zone, &raw);
+ if (raw == NULL) {
+ CHECK(dns_zone_create(&raw, mctx));
+ CHECK(dns_zone_setorigin(raw, origin));
+ dns_zone_setview(raw, view);
+ if (view->acache != NULL)
+ dns_zone_setacache(raw, view->acache);
+ dns_zone_setstats(raw, ns_g_server->zonestats);
+ CHECK(dns_zone_link(zone, raw));
+ }
+ }
+
/*
* Configure the zone.
*/
- CHECK(ns_zone_configure(config, vconfig, zconfig, aclconf, zone));
+ CHECK(ns_zone_configure(config, vconfig, zconfig, aclconf, zone, raw));
/*
* Add the zone to its view in the new view list.
@@ -3498,6 +3698,8 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
cleanup:
if (zone != NULL)
dns_zone_detach(&zone);
+ if (raw != NULL)
+ dns_zone_detach(&raw);
if (pview != NULL)
dns_view_detach(&pview);
@@ -3540,7 +3742,7 @@ add_keydata_zone(dns_view_t *view, const char *directory, isc_mem_t *mctx) {
}
/* No existing keydata zone was found; create one */
- CHECK(dns_zone_create(&zone, mctx));
+ CHECK(dns_zonemgr_createzone(ns_g_server->zonemgr, &zone));
CHECK(dns_zone_setorigin(zone, dns_rootname));
isc_sha256_data((void *)view->name, strlen(view->name), buffer);
@@ -3574,7 +3776,7 @@ add_keydata_zone(dns_view_t *view, const char *directory, isc_mem_t *mctx) {
dns_zone_setjournalsize(zone, 0);
dns_zone_setstats(zone, ns_g_server->zonestats);
- CHECK(setquerystats(zone, mctx, ISC_FALSE));
+ CHECK(setquerystats(zone, mctx, dns_zonestat_none));
if (view->managed_keys != NULL)
dns_zone_detach(&view->managed_keys);
@@ -3982,6 +4184,9 @@ removed(dns_zone_t *zone, void *uap) {
case dns_zone_stub:
type = "stub";
break;
+ case dns_zone_redirect:
+ type = "redirect";
+ break;
default:
type = "other";
break;
@@ -4126,7 +4331,7 @@ configure_session_key(const cfg_obj_t **maps, ns_server_t *server,
INSIST(result == ISC_R_SUCCESS);
keynamestr = cfg_obj_asstring(obj);
dns_fixedname_init(&fname);
- isc_buffer_init(&buffer, keynamestr, strlen(keynamestr));
+ isc_buffer_constinit(&buffer, keynamestr, strlen(keynamestr));
isc_buffer_add(&buffer, strlen(keynamestr));
keyname = dns_fixedname_name(&fname);
result = dns_name_fromtext(keyname, &buffer, dns_rootname, 0, NULL);
@@ -5211,32 +5416,102 @@ load_configuration(const char *filename, ns_server_t *server,
}
static isc_result_t
-load_zones(ns_server_t *server, isc_boolean_t stop) {
+view_loaded(void *arg) {
+ isc_result_t result;
+ ns_zoneload_t *zl = (ns_zoneload_t *) arg;
+ ns_server_t *server = zl->server;
+ unsigned int refs;
+
+
+ /*
+ * Force zone maintenance. Do this after loading
+ * so that we know when we need to force AXFR of
+ * slave zones whose master files are missing.
+ *
+ * We use the zoneload reference counter to let us
+ * know when all views are finished.
+ */
+ isc_refcount_decrement(&zl->refs, &refs);
+ if (refs != 0)
+ return (ISC_R_SUCCESS);
+
+ isc_refcount_destroy(&zl->refs);
+ isc_mem_put(server->mctx, zl, sizeof (*zl));
+
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_NOTICE, "all zones loaded");
+ CHECKFATAL(dns_zonemgr_forcemaint(server->zonemgr),
+ "forcing zone maintenance");
+
+ ns_os_started();
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_NOTICE, "running");
+
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+load_zones(ns_server_t *server) {
isc_result_t result;
dns_view_t *view;
+ ns_zoneload_t *zl;
+ unsigned int refs = 0;
+
+ zl = isc_mem_get(server->mctx, sizeof (*zl));
+ if (zl == NULL)
+ return (ISC_R_NOMEMORY);
+ zl->server = server;
result = isc_task_beginexclusive(server->task);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ isc_refcount_init(&zl->refs, 1);
+
/*
- * Load zone data from disk.
+ * Schedule zones to be loaded from disk.
*/
for (view = ISC_LIST_HEAD(server->viewlist);
view != NULL;
view = ISC_LIST_NEXT(view, link))
{
- CHECK(dns_view_load(view, stop));
- if (view->managed_keys != NULL)
- CHECK(dns_zone_load(view->managed_keys));
+ if (view->managed_keys != NULL) {
+ result = dns_zone_load(view->managed_keys);
+ if (result != ISC_R_SUCCESS &&
+ result != DNS_R_UPTODATE &&
+ result != DNS_R_CONTINUE)
+ goto cleanup;
+ }
+ if (view->redirect != NULL) {
+ result = dns_zone_load(view->redirect);
+ if (result != ISC_R_SUCCESS &&
+ result != DNS_R_UPTODATE &&
+ result != DNS_R_CONTINUE)
+ goto cleanup;
+ }
+
+ /*
+ * 'dns_view_asyncload' calls view_loaded if there are no
+ * zones.
+ */
+ isc_refcount_increment(&zl->refs, NULL);
+ CHECK(dns_view_asyncload(view, view_loaded, zl));
}
- /*
- * Force zone maintenance. Do this after loading
- * so that we know when we need to force AXFR of
- * slave zones whose master files are missing.
- */
- CHECK(dns_zonemgr_forcemaint(server->zonemgr));
cleanup:
+ isc_refcount_decrement(&zl->refs, &refs);
+ if (refs == 0) {
+ isc_refcount_destroy(&zl->refs);
+ isc_mem_put(server->mctx, zl, sizeof (*zl));
+ } else {
+ /*
+ * Place the task manager into privileged mode. This
+ * ensures that after we leave task-exclusive mode, no
+ * other tasks will be able to run except for the ones
+ * that are loading zones.
+ */
+ isc_taskmgr_setmode(ns_g_taskmgr, isc_taskmgrmode_privileged);
+ }
+
isc_task_endexclusive(server->task);
return (result);
}
@@ -5261,6 +5536,8 @@ load_new_zones(ns_server_t *server, isc_boolean_t stop) {
/* Load managed-keys data */
if (view->managed_keys != NULL)
CHECK(dns_zone_loadnew(view->managed_keys));
+ if (view->redirect != NULL)
+ CHECK(dns_zone_loadnew(view->redirect));
}
/*
@@ -5322,11 +5599,7 @@ run_server(isc_task_t *task, isc_event_t *event) {
isc_hash_init();
- CHECKFATAL(load_zones(server, ISC_FALSE), "loading zones");
-
- ns_os_started();
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
- ISC_LOG_NOTICE, "running");
+ CHECKFATAL(load_zones(server), "loading zones");
}
void
@@ -5763,7 +6036,7 @@ reload(ns_server_t *server) {
isc_result_t result;
CHECK(loadconfig(server));
- result = load_zones(server, ISC_FALSE);
+ result = load_zones(server);
if (result == ISC_R_SUCCESS)
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
@@ -5844,11 +6117,10 @@ next_token(char **stringp, const char *delim) {
* set '*zonep' to NULL.
*/
static isc_result_t
-zone_from_args(ns_server_t *server, char *args, dns_zone_t **zonep,
- const char **zonename)
+zone_from_args(ns_server_t *server, char *args, const char *zonetxt,
+ dns_zone_t **zonep, const char **zonename, isc_boolean_t skip)
{
char *input, *ptr;
- const char *zonetxt;
char *classtxt;
const char *viewtxt = NULL;
dns_fixedname_t name;
@@ -5858,19 +6130,23 @@ zone_from_args(ns_server_t *server, char *args, dns_zone_t **zonep,
dns_rdataclass_t rdclass;
REQUIRE(zonep != NULL && *zonep == NULL);
+ REQUIRE(zonename == NULL || *zonename == NULL);
input = args;
- /* Skip the command name. */
- ptr = next_token(&input, " \t");
- if (ptr == NULL)
- return (ISC_R_UNEXPECTEDEND);
+ if (skip) {
+ /* Skip the command name. */
+ ptr = next_token(&input, " \t");
+ if (ptr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+ }
/* Look for the zone name. */
- zonetxt = next_token(&input, " \t");
+ if (zonetxt == NULL)
+ zonetxt = next_token(&input, " \t");
if (zonetxt == NULL)
return (ISC_R_SUCCESS);
- if (zonename)
+ if (zonename != NULL)
*zonename = zonetxt;
/* Look for the optional class name. */
@@ -5880,7 +6156,7 @@ zone_from_args(ns_server_t *server, char *args, dns_zone_t **zonep,
viewtxt = next_token(&input, " \t");
}
- isc_buffer_init(&buf, zonetxt, strlen(zonetxt));
+ isc_buffer_constinit(&buf, zonetxt, strlen(zonetxt));
isc_buffer_add(&buf, strlen(zonetxt));
dns_fixedname_init(&name);
result = dns_name_fromtext(dns_fixedname_name(&name),
@@ -5930,13 +6206,20 @@ isc_result_t
ns_server_retransfercommand(ns_server_t *server, char *args) {
isc_result_t result;
dns_zone_t *zone = NULL;
+ dns_zone_t *raw = NULL;
dns_zonetype_t type;
- result = zone_from_args(server, args, &zone, NULL);
+ result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
if (result != ISC_R_SUCCESS)
return (result);
if (zone == NULL)
return (ISC_R_UNEXPECTEDEND);
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ dns_zone_detach(&zone);
+ dns_zone_attach(raw, &zone);
+ dns_zone_detach(&raw);
+ }
type = dns_zone_gettype(zone);
if (type == dns_zone_slave || type == dns_zone_stub)
dns_zone_forcereload(zone);
@@ -5956,7 +6239,7 @@ ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
dns_zonetype_t type;
const char *msg = NULL;
- result = zone_from_args(server, args, &zone, NULL);
+ result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
if (result != ISC_R_SUCCESS)
return (result);
if (zone == NULL) {
@@ -6016,7 +6299,7 @@ ns_server_notifycommand(ns_server_t *server, char *args, isc_buffer_t *text) {
dns_zone_t *zone = NULL;
const unsigned char msg[] = "zone notify queued";
- result = zone_from_args(server, args, &zone, NULL);
+ result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
if (result != ISC_R_SUCCESS)
return (result);
if (zone == NULL)
@@ -6041,7 +6324,7 @@ ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
const unsigned char msg2[] = "not a slave or stub zone";
dns_zonetype_t type;
- result = zone_from_args(server, args, &zone, NULL);
+ result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
if (result != ISC_R_SUCCESS)
return (result);
if (zone == NULL)
@@ -6063,8 +6346,29 @@ ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
}
isc_result_t
-ns_server_togglequerylog(ns_server_t *server) {
- server->log_queries = server->log_queries ? ISC_FALSE : ISC_TRUE;
+ns_server_togglequerylog(ns_server_t *server, char *args) {
+ isc_boolean_t value;
+ char *ptr;
+
+ /* Skip the command name. */
+ ptr = next_token(&args, " \t");
+ if (ptr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+
+ ptr = next_token(&args, " \t");
+ if (ptr == NULL)
+ value = server->log_queries ? ISC_FALSE : ISC_TRUE;
+ else if (strcasecmp(ptr, "yes") == 0 || strcasecmp(ptr, "on") == 0)
+ value = ISC_TRUE;
+ else if (strcasecmp(ptr, "no") == 0 || strcasecmp(ptr, "off") == 0)
+ value = ISC_FALSE;
+ else
+ return (ISC_R_NOTFOUND);
+
+ if (server->log_queries == value)
+ return (ISC_R_SUCCESS);
+
+ server->log_queries = value;
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
@@ -6471,6 +6775,7 @@ ns_server_dumpsecroots(ns_server_t *server, char *args) {
ptr = next_token(&args, " \t");
if (ptr == NULL)
return (ISC_R_UNEXPECTEDEND);
+
ptr = next_token(&args, " \t");
CHECKMF(isc_stdio_open(server->secrootsfile, "w", &fp),
@@ -6768,7 +7073,7 @@ ns_server_flushcache(ns_server_t *server, char *args) {
}
isc_result_t
-ns_server_flushname(ns_server_t *server, char *args) {
+ns_server_flushnode(ns_server_t *server, char *args, isc_boolean_t tree) {
char *ptr, *target, *viewname;
dns_view_t *view;
isc_boolean_t flushed;
@@ -6788,7 +7093,7 @@ ns_server_flushname(ns_server_t *server, char *args) {
if (target == NULL)
return (ISC_R_UNEXPECTEDEND);
- isc_buffer_init(&b, target, strlen(target));
+ isc_buffer_constinit(&b, target, strlen(target));
isc_buffer_add(&b, strlen(target));
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -6815,13 +7120,15 @@ ns_server_flushname(ns_server_t *server, char *args) {
* if some of the views share a single cache. But since the
* operation is lightweight we prefer simplicity here.
*/
- result = dns_view_flushname(view, name);
+ result = dns_view_flushnode(view, name, tree);
if (result != ISC_R_SUCCESS) {
flushed = ISC_FALSE;
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "flushing name '%s' in cache view '%s' "
- "failed: %s", target, view->name,
+ "flushing %s '%s' in cache view '%s' "
+ "failed: %s",
+ tree ? "tree" : "name",
+ target, view->name,
isc_result_totext(result));
}
}
@@ -6829,21 +7136,26 @@ ns_server_flushname(ns_server_t *server, char *args) {
if (viewname != NULL)
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
- "flushing name '%s' in cache view '%s' "
- "succeeded", target, viewname);
+ "flushing %s '%s' in cache view '%s' "
+ "succeeded",
+ tree ? "tree" : "name",
+ target, viewname);
else
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
- "flushing name '%s' in all cache views "
- "succeeded", target);
+ "flushing %s '%s' in all cache views "
+ "succeeded",
+ tree ? "tree" : "name",
+ target);
result = ISC_R_SUCCESS;
} else {
if (!found)
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
- "flushing name '%s' in cache view '%s' "
- "failed: view not found", target,
- viewname);
+ "flushing %s '%s' in cache view '%s' "
+ "failed: view not found",
+ tree ? "tree" : "name",
+ target, viewname);
result = ISC_R_FAILURE;
}
isc_task_endexclusive(server->task);
@@ -6878,6 +7190,7 @@ ns_server_status(ns_server_t *server, isc_buffer_t *text) {
#ifdef ISC_PLATFORM_USETHREADS
"CPUs found: %u\n"
"worker threads: %u\n"
+ "UDP listeners per interface: %u\n"
#endif
"number of zones: %u\n"
"debug level: %d\n"
@@ -6890,7 +7203,7 @@ ns_server_status(ns_server_t *server, isc_buffer_t *text) {
"server is up and running",
ns_g_version, ob, alt, cb,
#ifdef ISC_PLATFORM_USETHREADS
- ns_g_cpus_detected, ns_g_cpus,
+ ns_g_cpus_detected, ns_g_cpus, ns_g_udpdisp,
#endif
zonecount, ns_g_debuglevel, xferrunning, xferdeferred,
soaqueries, server->log_queries ? "ON" : "OFF",
@@ -7142,7 +7455,7 @@ ns_server_rekey(ns_server_t *server, char *args) {
if (strncasecmp(args, NS_COMMAND_SIGN, strlen(NS_COMMAND_SIGN)) == 0)
fullsign = ISC_TRUE;
- result = zone_from_args(server, args, &zone, NULL);
+ result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
if (result != ISC_R_SUCCESS)
return (result);
if (zone == NULL)
@@ -7169,6 +7482,112 @@ ns_server_rekey(ns_server_t *server, char *args) {
}
/*
+ * Act on a "sync" command from the command channel.
+*/
+static isc_result_t
+synczone(dns_zone_t *zone, void *uap) {
+ isc_boolean_t cleanup = *(isc_boolean_t *)uap;
+ isc_result_t result;
+ dns_zone_t *raw = NULL;
+ char *journal;
+
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ synczone(raw, uap);
+ dns_zone_detach(&raw);
+ }
+
+ result = dns_zone_flush(zone);
+ if (result != ISC_R_SUCCESS)
+ cleanup = ISC_FALSE;
+ if (cleanup) {
+ journal = dns_zone_getjournal(zone);
+ if (journal != NULL)
+ (void)isc_file_remove(journal);
+ }
+
+ return (result);
+}
+
+isc_result_t
+ns_server_sync(ns_server_t *server, char *args, isc_buffer_t *text) {
+ isc_result_t result, tresult;
+ dns_view_t *view;
+ dns_zone_t *zone = NULL;
+ char classstr[DNS_RDATACLASS_FORMATSIZE];
+ char zonename[DNS_NAME_FORMATSIZE];
+ const char *vname, *sep, *msg = NULL, *arg;
+ isc_boolean_t cleanup = ISC_FALSE;
+
+ (void) next_token(&args, " \t");
+
+ arg = next_token(&args, " \t");
+ if (arg != NULL &&
+ (strcmp(arg, "-clean") == 0 || strcmp(arg, "-clear") == 0)) {
+ cleanup = ISC_TRUE;
+ arg = next_token(&args, " \t");
+ }
+
+ result = zone_from_args(server, args, arg, &zone, NULL, ISC_FALSE);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ if (zone == NULL) {
+ result = isc_task_beginexclusive(server->task);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ tresult = ISC_R_SUCCESS;
+ for (view = ISC_LIST_HEAD(server->viewlist);
+ view != NULL;
+ view = ISC_LIST_NEXT(view, link)) {
+ result = dns_zt_apply(view->zonetable, ISC_FALSE,
+ synczone, &cleanup);
+ if (result != ISC_R_SUCCESS &&
+ tresult == ISC_R_SUCCESS)
+ tresult = result;
+ }
+ isc_task_endexclusive(server->task);
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_INFO,
+ "dumping all zones%s: %s",
+ cleanup ? ", removing journal files" : "",
+ isc_result_totext(result));
+ return (tresult);
+ }
+
+ result = isc_task_beginexclusive(server->task);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ result = synczone(zone, &cleanup);
+ isc_task_endexclusive(server->task);
+
+ if (msg != NULL && strlen(msg) < isc_buffer_availablelength(text))
+ isc_buffer_putmem(text, (const unsigned char *)msg,
+ strlen(msg) + 1);
+
+ view = dns_zone_getview(zone);
+ if (strcmp(view->name, "_default") == 0 ||
+ strcmp(view->name, "_bind") == 0)
+ {
+ vname = "";
+ sep = "";
+ } else {
+ vname = view->name;
+ sep = " ";
+ }
+ dns_rdataclass_format(dns_zone_getclass(zone), classstr,
+ sizeof(classstr));
+ dns_name_format(dns_zone_getorigin(zone),
+ zonename, sizeof(zonename));
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_INFO,
+ "sync: dumping zone '%s/%s'%s%s%s: %s",
+ zonename, classstr, sep, vname,
+ cleanup ? ", removing journal file" : "",
+ isc_result_totext(result));
+ dns_zone_detach(&zone);
+ return (result);
+}
+
+/*
* Act on a "freeze" or "thaw" command from the command channel.
*/
isc_result_t
@@ -7176,17 +7595,16 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
isc_buffer_t *text)
{
isc_result_t result, tresult;
- dns_zone_t *zone = NULL;
+ dns_zone_t *zone = NULL, *raw = NULL;
dns_zonetype_t type;
char classstr[DNS_RDATACLASS_FORMATSIZE];
char zonename[DNS_NAME_FORMATSIZE];
dns_view_t *view;
- char *journal;
const char *vname, *sep;
isc_boolean_t frozen;
const char *msg = NULL;
- result = zone_from_args(server, args, &zone, NULL);
+ result = zone_from_args(server, args, NULL, &zone, NULL, ISC_TRUE);
if (result != ISC_R_SUCCESS)
return (result);
if (zone == NULL) {
@@ -7209,12 +7627,23 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
isc_result_totext(tresult));
return (tresult);
}
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ dns_zone_detach(&zone);
+ dns_zone_attach(raw, &zone);
+ dns_zone_detach(&raw);
+ }
type = dns_zone_gettype(zone);
if (type != dns_zone_master) {
dns_zone_detach(&zone);
return (DNS_R_NOTMASTER);
}
+ if (freeze && !dns_zone_isdynamic(zone, ISC_TRUE)) {
+ dns_zone_detach(&zone);
+ return (DNS_R_NOTDYNAMIC);
+ }
+
result = isc_task_beginexclusive(server->task);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
frozen = dns_zone_getupdatedisabled(zone);
@@ -7231,11 +7660,6 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args,
msg = "Flushing the zone updates to "
"disk failed.";
}
- if (result == ISC_R_SUCCESS) {
- journal = dns_zone_getjournal(zone);
- if (journal != NULL)
- (void)isc_file_remove(journal);
- }
if (result == ISC_R_SUCCESS)
dns_zone_setupdatedisabled(zone, freeze);
} else {
@@ -7342,7 +7766,7 @@ ns_server_add_zone(ns_server_t *server, char *args) {
CHECK(cfg_map_get(config, "addzone", &parms));
zonename = cfg_obj_asstring(cfg_tuple_get(parms, "name"));
- isc_buffer_init(&buf, zonename, strlen(zonename));
+ isc_buffer_constinit(&buf, zonename, strlen(zonename));
isc_buffer_add(&buf, strlen(zonename));
dns_name_init(&dnsname, NULL);
isc_buffer_allocate(server->mctx, &nbuf, 256);
@@ -7406,7 +7830,8 @@ ns_server_add_zone(ns_server_t *server, char *args) {
CHECK(isc_stdio_open(view->new_zone_file, "a", &fp));
/* Mark view unfrozen so that zone can be added */
- isc_task_beginexclusive(server->task);
+ result = isc_task_beginexclusive(server->task);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_view_thaw(view);
result = configure_zone(cfg->config, parms, vconfig,
server->mctx, view, cfg->actx, ISC_FALSE);
@@ -7514,9 +7939,8 @@ ns_server_del_zone(ns_server_t *server, char *args) {
FILE *ifp = NULL, *ofp = NULL;
/* Parse parameters */
- CHECK(zone_from_args(server, args, &zone, &zonename));
- if (result != ISC_R_SUCCESS)
- return (result);
+ CHECK(zone_from_args(server, args, NULL, &zone, &zonename, ISC_TRUE));
+
if (zone == NULL) {
result = ISC_R_UNEXPECTEDEND;
goto cleanup;
@@ -7531,8 +7955,8 @@ ns_server_del_zone(ns_server_t *server, char *args) {
goto cleanup;
}
- if (zonename != NULL)
- znamelen = strlen(zonename);
+ INSIST(zonename != NULL);
+ znamelen = strlen(zonename);
/* Dig out configuration for this zone */
view = dns_zone_getview(zone);
@@ -7682,3 +8106,162 @@ newzone_cfgctx_destroy(void **cfgp) {
isc_mem_putanddetach(&cfg->mctx, cfg, sizeof(*cfg));
*cfgp = NULL;
}
+
+isc_result_t
+ns_server_signing(ns_server_t *server, char *args, isc_buffer_t *text) {
+ isc_result_t result = ISC_R_SUCCESS;
+ dns_zone_t *zone = NULL;
+ dns_name_t *origin;
+ dns_db_t *db = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_dbversion_t *version = NULL;
+ dns_rdatatype_t privatetype;
+ dns_rdataset_t privset;
+ isc_boolean_t first = ISC_TRUE;
+ isc_boolean_t list = ISC_FALSE, clear = ISC_FALSE;
+ isc_boolean_t chain = ISC_FALSE;
+ char keystr[DNS_SECALG_FORMATSIZE + 7];
+ unsigned short hash = 0, flags = 0, iter = 0, saltlen = 0;
+ unsigned char salt[255];
+ const char *ptr;
+ size_t n;
+
+ dns_rdataset_init(&privset);
+
+ /* Skip the command name. */
+ ptr = next_token(&args, " \t");
+ if (ptr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+
+ /* Find out what we are to do. */
+ ptr = next_token(&args, " \t");
+ if (ptr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+
+ if (strcasecmp(ptr, "-list") == 0)
+ list = ISC_TRUE;
+ else if ((strcasecmp(ptr, "-clear") == 0) ||
+ (strcasecmp(ptr, "-clean") == 0)) {
+ clear = ISC_TRUE;
+ ptr = next_token(&args, " \t");
+ if (ptr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+ memcpy(keystr, ptr, sizeof(keystr));
+ } else if(strcasecmp(ptr, "-nsec3param") == 0) {
+ const char *hashstr, *flagstr, *iterstr;
+ char nbuf[512];
+
+ chain = ISC_TRUE;
+ hashstr = next_token(&args, " \t");
+ if (hashstr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+
+ if (strcasecmp(hashstr, "none") == 0)
+ hash = 0;
+ else {
+ flagstr = next_token(&args, " \t");
+ iterstr = next_token(&args, " \t");
+ if (flagstr == NULL || iterstr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+
+ n = snprintf(nbuf, sizeof(nbuf), "%s %s %s",
+ hashstr, flagstr, iterstr);
+ if (n == sizeof(nbuf))
+ return (ISC_R_NOSPACE);
+ n = sscanf(nbuf, "%hu %hu %hu", &hash, &flags, &iter);
+ if (n != 3U)
+ return (ISC_R_BADNUMBER);
+
+ if (hash > 0xffU || flags > 0xffU)
+ return (ISC_R_RANGE);
+
+ ptr = next_token(&args, " \t");
+ if (ptr == NULL)
+ return (ISC_R_UNEXPECTEDEND);
+ if (strcmp(ptr, "-") != 0) {
+ isc_buffer_t buf;
+
+ isc_buffer_init(&buf, salt, sizeof(salt));
+ CHECK(isc_hex_decodestring(ptr, &buf));
+ saltlen = isc_buffer_usedlength(&buf);
+ }
+ }
+ } else
+ CHECK(DNS_R_SYNTAX);
+
+ CHECK(zone_from_args(server, args, NULL, &zone, NULL, ISC_FALSE));
+ if (zone == NULL)
+ CHECK(ISC_R_UNEXPECTEDEND);
+
+ if (clear) {
+ CHECK(dns_zone_keydone(zone, keystr));
+ isc_buffer_putstr(text, "request queued");
+ isc_buffer_putuint8(text, 0);
+ } else if (chain) {
+ CHECK(dns_zone_setnsec3param(zone, (isc_uint8_t)hash,
+ (isc_uint8_t)flags, iter,
+ (isc_uint8_t)saltlen, salt,
+ ISC_TRUE));
+ isc_buffer_putstr(text, "request queued");
+ isc_buffer_putuint8(text, 0);
+ } else if (list) {
+ privatetype = dns_zone_getprivatetype(zone);
+ origin = dns_zone_getorigin(zone);
+ CHECK(dns_zone_getdb(zone, &db));
+ CHECK(dns_db_findnode(db, origin, ISC_FALSE, &node));
+ dns_db_currentversion(db, &version);
+
+ result = dns_db_findrdataset(db, node, version, privatetype,
+ dns_rdatatype_none, 0,
+ &privset, NULL);
+ if (result == ISC_R_NOTFOUND) {
+ isc_buffer_putstr(text, "No signing records found");
+ isc_buffer_putuint8(text, 0);
+ result = ISC_R_SUCCESS;
+ goto cleanup;
+ }
+
+ for (result = dns_rdataset_first(&privset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&privset))
+ {
+ dns_rdata_t priv = DNS_RDATA_INIT;
+ char output[BUFSIZ];
+ isc_buffer_t buf;
+
+ dns_rdataset_current(&privset, &priv);
+
+ isc_buffer_init(&buf, output, sizeof(output));
+ CHECK(dns_private_totext(&priv, &buf));
+
+ if (!first)
+ isc_buffer_putstr(text, "\n");
+ first = ISC_FALSE;
+
+ n = snprintf((char *)isc_buffer_used(text),
+ isc_buffer_availablelength(text),
+ "%s", output);
+ if (n >= isc_buffer_availablelength(text))
+ CHECK(ISC_R_NOSPACE);
+
+ isc_buffer_add(text, n);
+ }
+
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+ }
+
+ cleanup:
+ if (dns_rdataset_isassociated(&privset))
+ dns_rdataset_disassociate(&privset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ if (version != NULL)
+ dns_db_closeversion(db, &version, ISC_FALSE);
+ if (db != NULL)
+ dns_db_detach(&db);
+ if (zone != NULL)
+ dns_zone_detach(&zone);
+
+ return (result);
+}
diff --git a/contrib/bind9/bin/named/statschannel.c b/contrib/bind9/bin/named/statschannel.c
index 6ea0be505191..bb642cc374bf 100644
--- a/contrib/bind9/bin/named/statschannel.c
+++ b/contrib/bind9/bin/named/statschannel.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2008-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: statschannel.c,v 1.26.150.2 2011/03/12 04:59:14 tbox Exp $ */
+/* $Id: statschannel.c,v 1.28 2011/03/12 04:59:46 tbox Exp $ */
/*! \file */
@@ -43,7 +43,11 @@
#include <named/server.h>
#include <named/statschannel.h>
-#include "bind9.xsl.h"
+#ifdef NEWSTATS
+ #include "bind9.ver3.xsl.h"
+#else /* OLDSTATS */
+ #include "bind9.xsl.h"
+#endif /* NEWSTATS */
struct ns_statschannel {
/* Unlocked */
@@ -187,7 +191,7 @@ init_desc(void) {
SET_NSSTATDESC(servfail, "queries resulted in SERVFAIL", "QrySERVFAIL");
SET_NSSTATDESC(formerr, "queries resulted in FORMERR", "QryFORMERR");
SET_NSSTATDESC(nxdomain, "queries resulted in NXDOMAIN", "QryNXDOMAIN");
- SET_NSSTATDESC(recursion, "queries caused recursion","QryRecursion");
+ SET_NSSTATDESC(recursion, "queries caused recursion", "QryRecursion");
SET_NSSTATDESC(duplicate, "duplicate queries received", "QryDuplicate");
SET_NSSTATDESC(dropped, "queries dropped", "QryDropped");
SET_NSSTATDESC(failure, "other query failures", "QryFailure");
@@ -202,6 +206,8 @@ init_desc(void) {
SET_NSSTATDESC(updatebadprereq,
"updates rejected due to prerequisite failure",
"UpdateBadPrereq");
+ SET_NSSTATDESC(rpz_rewrites, "response policy zone rewrites",
+ "RPZRewrites");
INSIST(i == dns_nsstatscounter_max);
/* Initialize resolver statistics */
@@ -302,7 +308,8 @@ init_desc(void) {
SET_ZONESTATDESC(axfrreqv6, "IPv6 AXFR requested", "AXFRReqv6");
SET_ZONESTATDESC(ixfrreqv4, "IPv4 IXFR requested", "IXFRReqv4");
SET_ZONESTATDESC(ixfrreqv6, "IPv6 IXFR requested", "IXFRReqv6");
- SET_ZONESTATDESC(xfrsuccess, "transfer requests succeeded","XfrSuccess");
+ SET_ZONESTATDESC(xfrsuccess, "transfer requests succeeded",
+ "XfrSuccess");
SET_ZONESTATDESC(xfrfail, "transfer requests failed", "XfrFail");
INSIST(i == dns_zonestatscounter_max);
@@ -425,7 +432,7 @@ init_desc(void) {
do { \
set_desc(dns_dnssecstats_ ## counterid, \
dns_dnssecstats_max, \
- desc, dnssecstats_desc,\
+ desc, dnssecstats_desc, \
xmldesc, dnssecstats_xmldesc); \
dnssecstats_index[i++] = dns_dnssecstats_ ## counterid; \
} while (0)
@@ -517,6 +524,51 @@ dump_counters(isc_stats_t *stats, statsformat_t type, void *arg,
break;
case statsformat_xml:
#ifdef HAVE_LIBXML2
+#ifdef NEWSTATS
+ writer = arg;
+
+ if (category != NULL) {
+ /* <NameOfCategory> */
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR
+ category));
+ /* <name> inside category */
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR
+ "name"));
+ TRY0(xmlTextWriterWriteString(writer,
+ ISC_XMLCHAR
+ desc[index]));
+ TRY0(xmlTextWriterEndElement(writer));
+ /* </name> */
+
+ /* <counter> */
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR
+ "counter"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u", value));
+
+ TRY0(xmlTextWriterEndElement(writer));
+ /* </counter> */
+ TRY0(xmlTextWriterEndElement(writer));
+ /* </NameOfCategory> */
+
+ } else {
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR
+ "counter"));
+ TRY0(xmlTextWriterWriteAttribute(writer,
+ ISC_XMLCHAR
+ "name",
+ ISC_XMLCHAR
+ desc[index]));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u", value));
+ TRY0(xmlTextWriterEndElement(writer));
+ /* counter */
+ }
+#else /* !NEWSTATS */
writer = arg;
if (category != NULL) {
@@ -546,17 +598,73 @@ dump_counters(isc_stats_t *stats, statsformat_t type, void *arg,
TRY0(xmlTextWriterEndElement(writer)); /* counter */
if (category != NULL)
TRY0(xmlTextWriterEndElement(writer)); /* category */
-#endif
+#endif /* NEWSTATS */
+#endif /* LIBXML2 */
break;
}
}
return (ISC_R_SUCCESS);
#ifdef HAVE_LIBXML2
error:
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_ERROR, "failed at dump_counters()");
return (ISC_R_FAILURE);
#endif
}
+#ifdef NEWSTATS
+static void
+rdtypestat_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
+ char typebuf[64];
+ const char *typestr;
+ stats_dumparg_t *dumparg = arg;
+ FILE *fp;
+#ifdef HAVE_LIBXML2
+ xmlTextWriterPtr writer;
+ int xmlrc;
+#endif
+
+ if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_OTHERTYPE)
+ == 0) {
+ dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf,
+ sizeof(typebuf));
+ typestr = typebuf;
+ } else
+ typestr = "Others";
+
+ switch (dumparg->type) {
+ case statsformat_file:
+ fp = dumparg->arg;
+ fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, typestr);
+ break;
+ case statsformat_xml:
+#ifdef HAVE_LIBXML2
+
+ writer = dumparg->arg;
+
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
+ ISC_XMLCHAR typestr));
+
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ val));
+
+ TRY0(xmlTextWriterEndElement(writer)); /* type */
+#endif
+ break;
+ }
+ return;
+#ifdef HAVE_LIBXML2
+ error:
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_ERROR, "failed at rdtypestat_dump()");
+ dumparg->result = ISC_R_FAILURE;
+ return;
+#endif
+}
+#else /* NEWSTATS */
static void
rdtypestat_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
char typebuf[64];
@@ -608,6 +716,7 @@ rdtypestat_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
return;
#endif
}
+#endif /* NEWSTATS */
static void
rdatasetstats_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
@@ -666,11 +775,58 @@ rdatasetstats_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) {
return;
#ifdef HAVE_LIBXML2
error:
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_ERROR, "failed at rdatasetstats_dump()");
dumparg->result = ISC_R_FAILURE;
#endif
}
+#ifdef NEWSTATS
+static void
+opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
+ FILE *fp;
+ isc_buffer_t b;
+ char codebuf[64];
+ stats_dumparg_t *dumparg = arg;
+#ifdef HAVE_LIBXML2
+ xmlTextWriterPtr writer;
+ int xmlrc;
+#endif
+
+ isc_buffer_init(&b, codebuf, sizeof(codebuf) - 1);
+ dns_opcode_totext(code, &b);
+ codebuf[isc_buffer_usedlength(&b)] = '\0';
+
+ switch (dumparg->type) {
+ case statsformat_file:
+ fp = dumparg->arg;
+ fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, codebuf);
+ break;
+ case statsformat_xml:
+#ifdef HAVE_LIBXML2
+ writer = dumparg->arg;
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
+ ISC_XMLCHAR codebuf ));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ val));
+ TRY0(xmlTextWriterEndElement(writer)); /* counter */
+#endif
+ break;
+ }
+ return;
+
+#ifdef HAVE_LIBXML2
+ error:
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_ERROR, "failed at opcodestat_dump()");
+ dumparg->result = ISC_R_FAILURE;
+ return;
+#endif
+}
+#else /* NEWSTATS */
static void
opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
FILE *fp;
@@ -719,12 +875,96 @@ opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) {
return;
#endif
}
+#endif /* NEWSTATS */
#ifdef HAVE_LIBXML2
-/* XXXMLG below here sucks. */
+/* XXXMLG below here sucks. (not so much) */
+
+#ifdef NEWSTATS
+static isc_result_t
+zone_xmlrender(dns_zone_t *zone, void *arg) {
+ isc_result_t result;
+ char buf[1024 + 32]; /* sufficiently large for zone name and class */
+ char *zone_name_only = NULL;
+ dns_rdataclass_t rdclass;
+ isc_uint32_t serial;
+ xmlTextWriterPtr writer = arg;
+ isc_stats_t *zonestats;
+ dns_stats_t *rcvquerystats;
+ dns_zonestat_level_t statlevel;
+ isc_uint64_t nsstat_values[dns_nsstatscounter_max];
+ int xmlrc;
+ stats_dumparg_t dumparg;
+
+ statlevel = dns_zone_getstatlevel(zone);
+ if (statlevel == dns_zonestat_none)
+ return (ISC_R_SUCCESS);
+
+ dumparg.type = statsformat_xml;
+ dumparg.arg = writer;
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "zone"));
+ dns_zone_name(zone, buf, sizeof(buf));
+ zone_name_only = strtok(buf, "/");
+ if(zone_name_only == NULL)
+ zone_name_only = buf;
+
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
+ ISC_XMLCHAR zone_name_only));
+ rdclass = dns_zone_getclass(zone);
+ dns_rdataclass_format(rdclass, buf, sizeof(buf));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "rdataclass",
+ ISC_XMLCHAR buf));
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "serial"));
+ if (dns_zone_getserial2(zone, &serial) == ISC_R_SUCCESS)
+ TRY0(xmlTextWriterWriteFormatString(writer, "%u", serial));
+ else
+ TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR "-"));
+ TRY0(xmlTextWriterEndElement(writer)); /* serial */
+
+ zonestats = dns_zone_getrequeststats(zone);
+ rcvquerystats = dns_zone_getrcvquerystats(zone);
+ if (statlevel == dns_zonestat_full && zonestats != NULL) {
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "rcode"));
+
+ result = dump_counters(zonestats, statsformat_xml, writer,
+ NULL, nsstats_xmldesc,
+ dns_nsstatscounter_max, nsstats_index,
+ nsstat_values, ISC_STATSDUMP_VERBOSE);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+ /* counters type="rcode"*/
+ TRY0(xmlTextWriterEndElement(writer));
+ }
+
+ if (statlevel == dns_zonestat_full && rcvquerystats != NULL) {
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "qtype"));
+
+ dumparg.result = ISC_R_SUCCESS;
+ dns_rdatatypestats_dump(rcvquerystats, rdtypestat_dump,
+ &dumparg, 0);
+ if(dumparg.result != ISC_R_SUCCESS)
+ goto error;
+
+ /* counters type="qtype"*/
+ TRY0(xmlTextWriterEndElement(writer));
+ }
+ TRY0(xmlTextWriterEndElement(writer)); /* zone */
+ return (ISC_R_SUCCESS);
+ error:
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_ERROR, "Failed at zone_xmlrender()");
+ return (ISC_R_FAILURE);
+}
+#else /* NEWSTATS */
static isc_result_t
zone_xmlrender(dns_zone_t *zone, void *arg) {
char buf[1024 + 32]; /* sufficiently large for zone name and class */
@@ -774,7 +1014,237 @@ zone_xmlrender(dns_zone_t *zone, void *arg) {
error:
return (ISC_R_FAILURE);
}
+#endif /* NEWSTATS */
+
+#ifdef NEWSTATS
+static isc_result_t
+generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
+ char boottime[sizeof "yyyy-mm-ddThh:mm:ssZ"];
+ char nowstr[sizeof "yyyy-mm-ddThh:mm:ssZ"];
+ isc_time_t now;
+ xmlTextWriterPtr writer = NULL;
+ xmlDocPtr doc = NULL;
+ int xmlrc;
+ dns_view_t *view;
+ stats_dumparg_t dumparg;
+ dns_stats_t *cacherrstats;
+ isc_uint64_t nsstat_values[dns_nsstatscounter_max];
+ isc_uint64_t resstat_values[dns_resstatscounter_max];
+ isc_uint64_t zonestat_values[dns_zonestatscounter_max];
+ isc_uint64_t sockstat_values[isc_sockstatscounter_max];
+ isc_result_t result;
+
+ isc_time_now(&now);
+ isc_time_formatISO8601(&ns_g_boottime, boottime, sizeof boottime);
+ isc_time_formatISO8601(&now, nowstr, sizeof nowstr);
+
+ writer = xmlNewTextWriterDoc(&doc, 0);
+ if (writer == NULL)
+ goto error;
+ TRY0(xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL));
+ TRY0(xmlTextWriterWritePI(writer, ISC_XMLCHAR "xml-stylesheet",
+ ISC_XMLCHAR "type=\"text/xsl\" href=\"/bind9.ver3.xsl\""));
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "statistics"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "version",
+ ISC_XMLCHAR "3.0"));
+ /* Set common fields for statistics dump */
+ dumparg.type = statsformat_xml;
+ dumparg.arg = writer;
+
+ /*
+ * Start by rendering the views we know of here. For each view we
+ * know of, call its rendering function.
+ */
+ view = ISC_LIST_HEAD(server->viewlist);
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "views"));
+ while (view != NULL) {
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "view"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
+ ISC_XMLCHAR view->name));
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "zones"));
+ result = dns_zt_apply(view->zonetable, ISC_TRUE, zone_xmlrender,
+ writer);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+ TRY0(xmlTextWriterEndElement(writer)); /* zones */
+
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "resqtype"));
+
+ if (view->resquerystats != NULL) {
+ dumparg.result = ISC_R_SUCCESS;
+ dns_rdatatypestats_dump(view->resquerystats,
+ rdtypestat_dump, &dumparg, 0);
+ if (dumparg.result != ISC_R_SUCCESS)
+ goto error;
+ }
+ TRY0(xmlTextWriterEndElement(writer));
+
+ /* <resstats> */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "resstats"));
+ if (view->resstats != NULL) {
+ result = dump_counters(view->resstats,
+ statsformat_xml, writer,
+ NULL, resstats_xmldesc,
+ dns_resstatscounter_max,
+ resstats_index, resstat_values,
+ ISC_STATSDUMP_VERBOSE);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+ }
+ TRY0(xmlTextWriterEndElement(writer)); /* </resstats> */
+
+ cacherrstats = dns_db_getrrsetstats(view->cachedb);
+ if (cacherrstats != NULL) {
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "cache"));
+ TRY0(xmlTextWriterWriteAttribute(writer,
+ ISC_XMLCHAR "name",
+ ISC_XMLCHAR
+ dns_cache_getname(view->cache)));
+ dumparg.result = ISC_R_SUCCESS;
+ dns_rdatasetstats_dump(cacherrstats, rdatasetstats_dump,
+ &dumparg, 0);
+ if (dumparg.result != ISC_R_SUCCESS)
+ goto error;
+ TRY0(xmlTextWriterEndElement(writer)); /* cache */
+ }
+
+ TRY0(xmlTextWriterEndElement(writer)); /* view */
+
+ view = ISC_LIST_NEXT(view, link);
+ }
+ TRY0(xmlTextWriterEndElement(writer)); /* views */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "socketmgr"));
+ isc_socketmgr_renderxml(ns_g_socketmgr, writer);
+ TRY0(xmlTextWriterEndElement(writer)); /* socketmgr */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "taskmgr"));
+ isc_taskmgr_renderxml(ns_g_taskmgr, writer);
+ TRY0(xmlTextWriterEndElement(writer)); /* taskmgr */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "server"));
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "boot-time"));
+ TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR boottime));
+ TRY0(xmlTextWriterEndElement(writer)); /* boot-time */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "current-time"));
+ TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR nowstr));
+ TRY0(xmlTextWriterEndElement(writer)); /* current-time */
+
+ dumparg.result = ISC_R_SUCCESS;
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "opcode"));
+
+ dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg,
+ 0);
+ if (dumparg.result != ISC_R_SUCCESS)
+ goto error;
+
+ TRY0(xmlTextWriterEndElement(writer)); /* counters type=opcode */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "qtype"));
+
+ dumparg.result = ISC_R_SUCCESS;
+ dns_rdatatypestats_dump(server->rcvquerystats, rdtypestat_dump,
+ &dumparg, 0);
+ if (dumparg.result != ISC_R_SUCCESS)
+ goto error;
+ TRY0(xmlTextWriterEndElement(writer)); /* counters */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "nsstat"));
+
+ result = dump_counters(server->nsstats, statsformat_xml,
+ writer, NULL, nsstats_xmldesc,
+ dns_nsstatscounter_max,
+ nsstats_index, nsstat_values,
+ ISC_STATSDUMP_VERBOSE);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+
+ TRY0(xmlTextWriterEndElement(writer)); /* counters type=nsstat */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "zonestat"));
+
+ result = dump_counters(server->zonestats, statsformat_xml, writer,
+ NULL, zonestats_xmldesc,
+ dns_zonestatscounter_max, zonestats_index,
+ zonestat_values, ISC_STATSDUMP_VERBOSE);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+
+ TRY0(xmlTextWriterEndElement(writer)); /* counters type=zonestat */
+
+ /*
+ * Most of the common resolver statistics entries are 0, so we don't
+ * use the verbose dump here.
+ */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "resstat"));
+ result = dump_counters(server->resolverstats, statsformat_xml,
+ writer, NULL, resstats_xmldesc,
+ dns_resstatscounter_max, resstats_index,
+ resstat_values, 0);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+
+ TRY0(xmlTextWriterEndElement(writer)); /* counters type=resstat */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
+ TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR "sockstat"));
+
+ result = dump_counters(server->sockstats, statsformat_xml,
+ writer, NULL, sockstats_xmldesc,
+ isc_sockstatscounter_max, sockstats_index,
+ sockstat_values, ISC_STATSDUMP_VERBOSE);
+ if (result != ISC_R_SUCCESS)
+ goto error;
+
+ TRY0(xmlTextWriterEndElement(writer)); /* counters type=sockstat */
+
+ TRY0(xmlTextWriterEndElement(writer)); /* server */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "memory"));
+ isc_mem_renderxml(writer);
+ TRY0(xmlTextWriterEndElement(writer)); /* memory */
+
+ TRY0(xmlTextWriterEndElement(writer)); /* statistics */
+
+ TRY0(xmlTextWriterEndDocument(writer));
+
+ xmlFreeTextWriter(writer);
+
+ xmlDocDumpFormatMemoryEnc(doc, buf, buflen, "UTF-8", 0);
+ xmlFreeDoc(doc);
+ return (ISC_R_SUCCESS);
+
+ error:
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_ERROR, "failed generating XML response");
+ if (writer != NULL)
+ xmlFreeTextWriter(writer);
+ if (doc != NULL)
+ xmlFreeDoc(doc);
+ return (ISC_R_FAILURE);
+}
+#else /* OLDSTATS */
static isc_result_t
generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
char boottime[sizeof "yyyy-mm-ddThh:mm:ssZ"];
@@ -877,11 +1347,11 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
TRY0(xmlTextWriterEndElement(writer)); /* views */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "socketmgr"));
- isc_socketmgr_renderxml(ns_g_socketmgr, writer);
+ TRY0(isc_socketmgr_renderxml(ns_g_socketmgr, writer));
TRY0(xmlTextWriterEndElement(writer)); /* socketmgr */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "taskmgr"));
- isc_taskmgr_renderxml(ns_g_taskmgr, writer);
+ TRY0(isc_taskmgr_renderxml(ns_g_taskmgr, writer));
TRY0(xmlTextWriterEndElement(writer)); /* taskmgr */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "server"));
@@ -944,7 +1414,7 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
TRY0(xmlTextWriterEndElement(writer)); /* server */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "memory"));
- isc_mem_renderxml(writer);
+ TRY0(isc_mem_renderxml(writer));
TRY0(xmlTextWriterEndElement(writer)); /* memory */
TRY0(xmlTextWriterEndElement(writer)); /* statistics */
@@ -966,6 +1436,7 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) {
xmlFreeDoc(doc);
return (ISC_R_FAILURE);
}
+#endif /* NEWSTATS */
static void
wrap_xmlfree(isc_buffer_t *buffer, void *arg) {
@@ -998,7 +1469,10 @@ render_index(const char *url, const char *querystring, void *arg,
isc_buffer_add(b, msglen);
*freecb = wrap_xmlfree;
*freecb_args = NULL;
- }
+ } else
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
+ "failed at rendering XML()");
return (result);
}
@@ -1030,7 +1504,7 @@ static void
shutdown_listener(ns_statschannel_t *listener) {
char socktext[ISC_SOCKADDR_FORMATSIZE];
isc_sockaddr_format(&listener->address, socktext, sizeof(socktext));
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,NS_LOGMODULE_SERVER,
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
ISC_LOG_NOTICE, "stopping statistics channel on %s",
socktext);
@@ -1148,10 +1622,22 @@ add_listener(ns_server_t *server, ns_statschannel_t **listenerp,
#ifdef HAVE_LIBXML2
isc_httpdmgr_addurl(listener->httpdmgr, "/", render_index, server);
+ isc_httpdmgr_addurl(listener->httpdmgr, "/xml", render_index, server);
+#ifdef NEWSTATS
+ isc_httpdmgr_addurl(listener->httpdmgr, "/xml/v3", render_index,
+ server);
+#else /* OLDSTATS */
+ isc_httpdmgr_addurl(listener->httpdmgr, "/xml/v2", render_index,
+ server);
+#endif /* NEWSTATS */
#endif
+#ifdef NEWSTATS
+ isc_httpdmgr_addurl(listener->httpdmgr, "/bind9.ver3.xsl", render_xsl,
+ server);
+#else /* OLDSTATS */
isc_httpdmgr_addurl(listener->httpdmgr, "/bind9.xsl", render_xsl,
server);
-
+#endif /* NEWSTATS */
*listenerp = listener;
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_NOTICE,
@@ -1283,7 +1769,8 @@ ns_statschannels_configure(ns_server_t *server, const cfg_obj_t *config,
obj = cfg_tuple_get(listen_params, "address");
addr = *cfg_obj_assockaddr(obj);
if (isc_sockaddr_getport(&addr) == 0)
- isc_sockaddr_setport(&addr, NS_STATSCHANNEL_HTTPPORT);
+ isc_sockaddr_setport(&addr,
+ NS_STATSCHANNEL_HTTPPORT);
isc_sockaddr_format(&addr, socktext,
sizeof(socktext));
diff --git a/contrib/bind9/bin/named/tkeyconf.c b/contrib/bind9/bin/named/tkeyconf.c
index 6d852a0871c0..e9520592dc5f 100644
--- a/contrib/bind9/bin/named/tkeyconf.c
+++ b/contrib/bind9/bin/named/tkeyconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -73,7 +73,7 @@ ns_tkeyctx_fromconfig(const cfg_obj_t *options, isc_mem_t *mctx,
if (result == ISC_R_SUCCESS) {
s = cfg_obj_asstring(cfg_tuple_get(obj, "name"));
n = cfg_obj_asuint32(cfg_tuple_get(obj, "keyid"));
- isc_buffer_init(&b, s, strlen(s));
+ isc_buffer_constinit(&b, s, strlen(s));
isc_buffer_add(&b, strlen(s));
dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
@@ -87,7 +87,7 @@ ns_tkeyctx_fromconfig(const cfg_obj_t *options, isc_mem_t *mctx,
result = cfg_map_get(options, "tkey-domain", &obj);
if (result == ISC_R_SUCCESS) {
s = cfg_obj_asstring(obj);
- isc_buffer_init(&b, s, strlen(s));
+ isc_buffer_constinit(&b, s, strlen(s));
isc_buffer_add(&b, strlen(s));
dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
@@ -106,7 +106,7 @@ ns_tkeyctx_fromconfig(const cfg_obj_t *options, isc_mem_t *mctx,
if (result == ISC_R_SUCCESS) {
s = cfg_obj_asstring(obj);
- isc_buffer_init(&b, s, strlen(s));
+ isc_buffer_constinit(&b, s, strlen(s));
isc_buffer_add(&b, strlen(s));
dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
diff --git a/contrib/bind9/bin/named/tsigconf.c b/contrib/bind9/bin/named/tsigconf.c
index 776b1b9f837d..eef87e930438 100644
--- a/contrib/bind9/bin/named/tsigconf.c
+++ b/contrib/bind9/bin/named/tsigconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -78,7 +78,7 @@ add_initial_keys(const cfg_obj_t *list, dns_tsig_keyring_t *ring,
* Create the key name.
*/
dns_name_init(&keyname, NULL);
- isc_buffer_init(&keynamesrc, keyid, strlen(keyid));
+ isc_buffer_constinit(&keynamesrc, keyid, strlen(keyid));
isc_buffer_add(&keynamesrc, strlen(keyid));
isc_buffer_init(&keynamebuf, keynamedata, sizeof(keynamedata));
ret = dns_name_fromtext(&keyname, &keynamesrc, dns_rootname,
diff --git a/contrib/bind9/bin/named/unix/Makefile.in b/contrib/bind9/bin/named/unix/Makefile.in
index ff2eccea86a4..17bb43e36aae 100644
--- a/contrib/bind9/bin/named/unix/Makefile.in
+++ b/contrib/bind9/bin/named/unix/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.13.244.2 2011/03/10 23:47:26 tbox Exp $
+# $Id: Makefile.in,v 1.15 2011/03/10 23:47:49 tbox Exp $
srcdir = @srcdir@
VPATH = @srcdir@
diff --git a/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c b/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c
index edd394656d28..2ba8a028a37a 100644
--- a/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c
+++ b/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2011-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dlz_dlopen_driver.c,v 1.1.4.6 2012/02/22 23:46:35 tbox Exp $ */
+/* $Id$ */
#include <config.h>
@@ -143,7 +143,7 @@ dlopen_dlz_allowzonexfr(void *driverarg, void *dbdata, const char *name,
static isc_result_t
dlopen_dlz_authority(const char *zone, void *driverarg, void *dbdata,
- dns_sdlzlookup_t *lookup)
+ dns_sdlzlookup_t *lookup)
{
dlopen_data_t *cd = (dlopen_data_t *) dbdata;
isc_result_t result;
@@ -177,7 +177,9 @@ dlopen_dlz_findzonedb(void *driverarg, void *dbdata, const char *name)
static isc_result_t
dlopen_dlz_lookup(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup)
+ void *dbdata, dns_sdlzlookup_t *lookup,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo)
{
dlopen_data_t *cd = (dlopen_data_t *) dbdata;
isc_result_t result;
@@ -185,7 +187,8 @@ dlopen_dlz_lookup(const char *zone, const char *name, void *driverarg,
UNUSED(driverarg);
MAYBE_LOCK(cd);
- result = cd->dlz_lookup(zone, name, cd->dbdata, lookup);
+ result = cd->dlz_lookup(zone, name, cd->dbdata, lookup,
+ methods, clientinfo);
MAYBE_UNLOCK(cd);
return (result);
}
@@ -225,7 +228,9 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
return (ISC_R_FAILURE);
}
- isc_mem_create(0, 0, &mctx);
+ result = isc_mem_create(0, 0, &mctx);
+ if (result != ISC_R_SUCCESS)
+ return (result);
cd = isc_mem_get(mctx, sizeof(*cd));
if (cd == NULL) {
@@ -247,7 +252,9 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
}
/* Initialize the lock */
- isc_mutex_init(&cd->lock);
+ result = isc_mutex_init(&cd->lock);
+ if (result != ISC_R_SUCCESS)
+ goto failed;
/* Open the library */
dlopen_flags = RTLD_NOW|RTLD_GLOBAL;
@@ -351,11 +358,11 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
failed:
dlopen_log(ISC_LOG_ERROR, "dlz_dlopen of '%s' failed", dlzname);
- if (cd->dl_path)
+ if (cd->dl_path != NULL)
isc_mem_free(mctx, cd->dl_path);
- if (cd->dlzname)
+ if (cd->dlzname != NULL)
isc_mem_free(mctx, cd->dlzname);
- if (dlopen_flags)
+ if (dlopen_flags != 0)
(void) isc_mutex_destroy(&cd->lock);
#ifdef HAVE_DLCLOSE
if (cd->dl_handle)
diff --git a/contrib/bind9/bin/named/unix/os.c b/contrib/bind9/bin/named/unix/os.c
index 9637ded473e5..4f5f55c3eedb 100644
--- a/contrib/bind9/bin/named/unix/os.c
+++ b/contrib/bind9/bin/named/unix/os.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: os.c,v 1.104.38.3 2011/03/02 00:04:01 marka Exp $ */
+/* $Id: os.c,v 1.107 2011/03/02 00:02:54 marka Exp $ */
/*! \file */
diff --git a/contrib/bind9/bin/named/update.c b/contrib/bind9/bin/named/update.c
index 6fb6a8536721..0df00c083c55 100644
--- a/contrib/bind9/bin/named/update.c
+++ b/contrib/bind9/bin/named/update.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: update.c,v 1.186.16.7 2011/11/03 02:55:34 each Exp $ */
+/* $Id: update.c,v 1.199 2011/12/22 07:32:40 each Exp $ */
#include <config.h>
@@ -47,6 +47,7 @@
#include <dns/soa.h>
#include <dns/ssu.h>
#include <dns/tsig.h>
+#include <dns/update.h>
#include <dns/view.h>
#include <dns/zone.h>
#include <dns/zt.h>
@@ -268,6 +269,11 @@ update_log(ns_client_t *client, dns_zone_t *zone,
namebuf, classbuf, message);
}
+static void
+update_log_cb(void *arg, dns_zone_t *zone, int level, const char *message) {
+ update_log(arg, zone, level, "%s", message);
+}
+
/*%
* Increment updated-related statistics counters.
*/
@@ -721,45 +727,6 @@ rrset_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
}
/*%
- * Set '*visible' to true if the RRset exists and is part of the
- * visible zone. Otherwise '*visible' is set to false unless a
- * error occurs.
- */
-static isc_result_t
-rrset_visible(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_rdatatype_t type, isc_boolean_t *visible)
-{
- isc_result_t result;
- dns_fixedname_t fixed;
-
- dns_fixedname_init(&fixed);
- result = dns_db_find(db, name, ver, type, DNS_DBFIND_NOWILD,
- (isc_stdtime_t) 0, NULL,
- dns_fixedname_name(&fixed), NULL, NULL);
- switch (result) {
- case ISC_R_SUCCESS:
- *visible = ISC_TRUE;
- break;
- /*
- * Glue, obscured, deleted or replaced records.
- */
- case DNS_R_DELEGATION:
- case DNS_R_DNAME:
- case DNS_R_CNAME:
- case DNS_R_NXDOMAIN:
- case DNS_R_NXRRSET:
- case DNS_R_EMPTYNAME:
- case DNS_R_COVERINGNSEC:
- *visible = ISC_FALSE;
- result = ISC_R_SUCCESS;
- break;
- default:
- break;
- }
- return (result);
-}
-
-/*%
* Helper function for cname_incompatible_rrset_exists.
*/
static isc_result_t
@@ -1174,16 +1141,6 @@ true_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
}
/*%
- * Return true if the record is a RRSIG.
- */
-static isc_boolean_t
-rrsig_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
- UNUSED(update_rr);
- return ((db_rr->type == dns_rdatatype_rrsig) ?
- ISC_TRUE : ISC_FALSE);
-}
-
-/*%
* Return true iff the two RRs have identical rdata.
*/
static isc_boolean_t
@@ -1425,8 +1382,8 @@ get_current_rr(dns_message_t *msg, dns_section_t section,
*/
static isc_result_t
-increment_soa_serial(dns_db_t *db, dns_dbversion_t *ver,
- dns_diff_t *diff, isc_mem_t *mctx)
+update_soa_serial(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff,
+ isc_mem_t *mctx, dns_updatemethod_t method)
{
dns_difftuple_t *deltuple = NULL;
dns_difftuple_t *addtuple = NULL;
@@ -1438,12 +1395,7 @@ increment_soa_serial(dns_db_t *db, dns_dbversion_t *ver,
addtuple->op = DNS_DIFFOP_ADD;
serial = dns_soa_getserial(&addtuple->rdata);
-
- /* RFC1982 */
- serial = (serial + 1) & 0xFFFFFFFF;
- if (serial == 0)
- serial = 1;
-
+ serial = dns_update_soaserial(serial, method);
dns_soa_setserial(serial, &addtuple->rdata);
CHECK(do_one_tuple(&deltuple, db, ver, diff));
CHECK(do_one_tuple(&addtuple, db, ver, diff));
@@ -1502,1129 +1454,6 @@ check_soa_increment(dns_db_t *db, dns_dbversion_t *ver,
}
/**************************************************************************/
-/*
- * Incremental updating of NSECs and RRSIGs.
- */
-
-/*%
- * We abuse the dns_diff_t type to represent a set of domain names
- * affected by the update.
- */
-static isc_result_t
-namelist_append_name(dns_diff_t *list, dns_name_t *name) {
- isc_result_t result;
- dns_difftuple_t *tuple = NULL;
- static dns_rdata_t dummy_rdata = DNS_RDATA_INIT;
-
- CHECK(dns_difftuple_create(list->mctx, DNS_DIFFOP_EXISTS, name, 0,
- &dummy_rdata, &tuple));
- dns_diff_append(list, &tuple);
- failure:
- return (result);
-}
-
-static isc_result_t
-namelist_append_subdomain(dns_db_t *db, dns_name_t *name, dns_diff_t *affected)
-{
- isc_result_t result;
- dns_fixedname_t fixedname;
- dns_name_t *child;
- dns_dbiterator_t *dbit = NULL;
-
- dns_fixedname_init(&fixedname);
- child = dns_fixedname_name(&fixedname);
-
- CHECK(dns_db_createiterator(db, DNS_DB_NONSEC3, &dbit));
-
- for (result = dns_dbiterator_seek(dbit, name);
- result == ISC_R_SUCCESS;
- result = dns_dbiterator_next(dbit))
- {
- dns_dbnode_t *node = NULL;
- CHECK(dns_dbiterator_current(dbit, &node, child));
- dns_db_detachnode(db, &node);
- if (! dns_name_issubdomain(child, name))
- break;
- CHECK(namelist_append_name(affected, child));
- }
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
- failure:
- if (dbit != NULL)
- dns_dbiterator_destroy(&dbit);
- return (result);
-}
-
-
-
-/*%
- * Helper function for non_nsec_rrset_exists().
- */
-static isc_result_t
-is_non_nsec_action(void *data, dns_rdataset_t *rrset) {
- UNUSED(data);
- if (!(rrset->type == dns_rdatatype_nsec ||
- rrset->type == dns_rdatatype_nsec3 ||
- (rrset->type == dns_rdatatype_rrsig &&
- (rrset->covers == dns_rdatatype_nsec ||
- rrset->covers == dns_rdatatype_nsec3))))
- return (ISC_R_EXISTS);
- return (ISC_R_SUCCESS);
-}
-
-/*%
- * Check whether there is an rrset other than a NSEC or RRSIG NSEC,
- * i.e., anything that justifies the continued existence of a name
- * after a secure update.
- *
- * If such an rrset exists, set '*exists' to ISC_TRUE.
- * Otherwise, set it to ISC_FALSE.
- */
-static isc_result_t
-non_nsec_rrset_exists(dns_db_t *db, dns_dbversion_t *ver,
- dns_name_t *name, isc_boolean_t *exists)
-{
- isc_result_t result;
- result = foreach_rrset(db, ver, name, is_non_nsec_action, NULL);
- RETURN_EXISTENCE_FLAG;
-}
-
-/*%
- * A comparison function for sorting dns_diff_t:s by name.
- */
-static int
-name_order(const void *av, const void *bv) {
- dns_difftuple_t const * const *ap = av;
- dns_difftuple_t const * const *bp = bv;
- dns_difftuple_t const *a = *ap;
- dns_difftuple_t const *b = *bp;
- return (dns_name_compare(&a->name, &b->name));
-}
-
-static isc_result_t
-uniqify_name_list(dns_diff_t *list) {
- isc_result_t result;
- dns_difftuple_t *p, *q;
-
- CHECK(dns_diff_sort(list, name_order));
-
- p = ISC_LIST_HEAD(list->tuples);
- while (p != NULL) {
- do {
- q = ISC_LIST_NEXT(p, link);
- if (q == NULL || ! dns_name_equal(&p->name, &q->name))
- break;
- ISC_LIST_UNLINK(list->tuples, q, link);
- dns_difftuple_free(&q);
- } while (1);
- p = ISC_LIST_NEXT(p, link);
- }
- failure:
- return (result);
-}
-
-static isc_result_t
-is_active(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- isc_boolean_t *flag, isc_boolean_t *cut, isc_boolean_t *unsecure)
-{
- isc_result_t result;
- dns_fixedname_t foundname;
- dns_fixedname_init(&foundname);
- result = dns_db_find(db, name, ver, dns_rdatatype_any,
- DNS_DBFIND_GLUEOK | DNS_DBFIND_NOWILD,
- (isc_stdtime_t) 0, NULL,
- dns_fixedname_name(&foundname),
- NULL, NULL);
- if (result == ISC_R_SUCCESS || result == DNS_R_EMPTYNAME) {
- *flag = ISC_TRUE;
- *cut = ISC_FALSE;
- if (unsecure != NULL)
- *unsecure = ISC_FALSE;
- return (ISC_R_SUCCESS);
- } else if (result == DNS_R_ZONECUT) {
- *flag = ISC_TRUE;
- *cut = ISC_TRUE;
- if (unsecure != NULL) {
- /*
- * We are at the zonecut. Check to see if there
- * is a DS RRset.
- */
- if (dns_db_find(db, name, ver, dns_rdatatype_ds, 0,
- (isc_stdtime_t) 0, NULL,
- dns_fixedname_name(&foundname),
- NULL, NULL) == DNS_R_NXRRSET)
- *unsecure = ISC_TRUE;
- else
- *unsecure = ISC_FALSE;
- }
- return (ISC_R_SUCCESS);
- } else if (result == DNS_R_GLUE || result == DNS_R_DNAME ||
- result == DNS_R_DELEGATION || result == DNS_R_NXDOMAIN) {
- *flag = ISC_FALSE;
- *cut = ISC_FALSE;
- if (unsecure != NULL)
- *unsecure = ISC_FALSE;
- return (ISC_R_SUCCESS);
- } else {
- /*
- * Silence compiler.
- */
- *flag = ISC_FALSE;
- *cut = ISC_FALSE;
- if (unsecure != NULL)
- *unsecure = ISC_FALSE;
- return (result);
- }
-}
-
-/*%
- * Find the next/previous name that has a NSEC record.
- * In other words, skip empty database nodes and names that
- * have had their NSECs removed because they are obscured by
- * a zone cut.
- */
-static isc_result_t
-next_active(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *oldname, dns_name_t *newname,
- isc_boolean_t forward)
-{
- isc_result_t result;
- dns_dbiterator_t *dbit = NULL;
- isc_boolean_t has_nsec = ISC_FALSE;
- unsigned int wraps = 0;
- isc_boolean_t secure = dns_db_issecure(db);
-
- CHECK(dns_db_createiterator(db, 0, &dbit));
-
- CHECK(dns_dbiterator_seek(dbit, oldname));
- do {
- dns_dbnode_t *node = NULL;
-
- if (forward)
- result = dns_dbiterator_next(dbit);
- else
- result = dns_dbiterator_prev(dbit);
- if (result == ISC_R_NOMORE) {
- /*
- * Wrap around.
- */
- if (forward)
- CHECK(dns_dbiterator_first(dbit));
- else
- CHECK(dns_dbiterator_last(dbit));
- wraps++;
- if (wraps == 2) {
- update_log(client, zone, ISC_LOG_ERROR,
- "secure zone with no NSECs");
- result = DNS_R_BADZONE;
- goto failure;
- }
- }
- CHECK(dns_dbiterator_current(dbit, &node, newname));
- dns_db_detachnode(db, &node);
-
- /*
- * The iterator may hold the tree lock, and
- * rrset_exists() calls dns_db_findnode() which
- * may try to reacquire it. To avoid deadlock
- * we must pause the iterator first.
- */
- CHECK(dns_dbiterator_pause(dbit));
- if (secure) {
- CHECK(rrset_exists(db, ver, newname,
- dns_rdatatype_nsec, 0, &has_nsec));
- } else {
- dns_fixedname_t ffound;
- dns_name_t *found;
- dns_fixedname_init(&ffound);
- found = dns_fixedname_name(&ffound);
- result = dns_db_find(db, newname, ver,
- dns_rdatatype_soa,
- DNS_DBFIND_NOWILD, 0, NULL, found,
- NULL, NULL);
- if (result == ISC_R_SUCCESS ||
- result == DNS_R_EMPTYNAME ||
- result == DNS_R_NXRRSET ||
- result == DNS_R_CNAME ||
- (result == DNS_R_DELEGATION &&
- dns_name_equal(newname, found))) {
- has_nsec = ISC_TRUE;
- result = ISC_R_SUCCESS;
- } else if (result != DNS_R_NXDOMAIN)
- break;
- }
- } while (! has_nsec);
- failure:
- if (dbit != NULL)
- dns_dbiterator_destroy(&dbit);
-
- return (result);
-}
-
-/*%
- * Add a NSEC record for "name", recording the change in "diff".
- * The existing NSEC is removed.
- */
-static isc_result_t
-add_nsec(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *name, dns_ttl_t nsecttl,
- dns_diff_t *diff)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- unsigned char buffer[DNS_NSEC_BUFFERSIZE];
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_difftuple_t *tuple = NULL;
- dns_fixedname_t fixedname;
- dns_name_t *target;
-
- dns_fixedname_init(&fixedname);
- target = dns_fixedname_name(&fixedname);
-
- /*
- * Find the successor name, aka NSEC target.
- */
- CHECK(next_active(client, zone, db, ver, name, target, ISC_TRUE));
-
- /*
- * Create the NSEC RDATA.
- */
- CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
- dns_rdata_init(&rdata);
- CHECK(dns_nsec_buildrdata(db, ver, node, target, buffer, &rdata));
- dns_db_detachnode(db, &node);
-
- /*
- * Delete the old NSEC and record the change.
- */
- CHECK(delete_if(true_p, db, ver, name, dns_rdatatype_nsec, 0,
- NULL, diff));
- /*
- * Add the new NSEC and record the change.
- */
- CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name,
- nsecttl, &rdata, &tuple));
- CHECK(do_one_tuple(&tuple, db, ver, diff));
- INSIST(tuple == NULL);
-
- failure:
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-/*%
- * Add a placeholder NSEC record for "name", recording the change in "diff".
- */
-static isc_result_t
-add_placeholder_nsec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_diff_t *diff)
-{
- isc_result_t result;
- dns_difftuple_t *tuple = NULL;
- isc_region_t r;
- unsigned char data[1] = { 0 }; /* The root domain, no bits. */
- dns_rdata_t rdata = DNS_RDATA_INIT;
-
- r.base = data;
- r.length = sizeof(data);
- dns_rdata_fromregion(&rdata, dns_db_class(db), dns_rdatatype_nsec, &r);
- CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name, 0,
- &rdata, &tuple));
- CHECK(do_one_tuple(&tuple, db, ver, diff));
- failure:
- return (result);
-}
-
-static isc_result_t
-find_zone_keys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
- isc_mem_t *mctx, unsigned int maxkeys,
- dst_key_t **keys, unsigned int *nkeys)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- const char *directory = dns_zone_getkeydirectory(zone);
- CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
- CHECK(dns_dnssec_findzonekeys2(db, ver, node, dns_db_origin(db),
- directory, mctx, maxkeys, keys, nkeys));
- failure:
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-/*%
- * Add RRSIG records for an RRset, recording the change in "diff".
- */
-static isc_result_t
-add_sigs(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *name, dns_rdatatype_t type,
- dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
- isc_stdtime_t inception, isc_stdtime_t expire,
- isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- dns_rdataset_t rdataset;
- dns_rdata_t sig_rdata = DNS_RDATA_INIT;
- isc_buffer_t buffer;
- unsigned char data[1024]; /* XXX */
- unsigned int i, j;
- isc_boolean_t added_sig = ISC_FALSE;
- isc_mem_t *mctx = client->mctx;
-
- dns_rdataset_init(&rdataset);
- isc_buffer_init(&buffer, data, sizeof(data));
-
- /* Get the rdataset to sign. */
- if (type == dns_rdatatype_nsec3)
- CHECK(dns_db_findnsec3node(db, name, ISC_FALSE, &node));
- else
- CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
- CHECK(dns_db_findrdataset(db, node, ver, type, 0,
- (isc_stdtime_t) 0, &rdataset, NULL));
- dns_db_detachnode(db, &node);
-
-#define REVOKE(x) ((dst_key_flags(x) & DNS_KEYFLAG_REVOKE) != 0)
-#define KSK(x) ((dst_key_flags(x) & DNS_KEYFLAG_KSK) != 0)
-#define ALG(x) dst_key_alg(x)
-
- /*
- * If we are honoring KSK flags then we need to check that we
- * have both KSK and non-KSK keys that are not revoked per
- * algorithm.
- */
- for (i = 0; i < nkeys; i++) {
- isc_boolean_t both = ISC_FALSE;
-
- if (!dst_key_isprivate(keys[i]))
- continue;
-
- if (check_ksk && !REVOKE(keys[i])) {
- isc_boolean_t have_ksk, have_nonksk;
- if (KSK(keys[i])) {
- have_ksk = ISC_TRUE;
- have_nonksk = ISC_FALSE;
- } else {
- have_ksk = ISC_FALSE;
- have_nonksk = ISC_TRUE;
- }
- for (j = 0; j < nkeys; j++) {
- if (j == i || ALG(keys[i]) != ALG(keys[j]))
- continue;
- if (REVOKE(keys[j]))
- continue;
- if (KSK(keys[j]))
- have_ksk = ISC_TRUE;
- else
- have_nonksk = ISC_TRUE;
- both = have_ksk && have_nonksk;
- if (both)
- break;
- }
- }
-
- if (both) {
- if (type == dns_rdatatype_dnskey) {
- if (!KSK(keys[i]) && keyset_kskonly)
- continue;
- } else if (KSK(keys[i]))
- continue;
- } else if (REVOKE(keys[i]) && type != dns_rdatatype_dnskey)
- continue;
-
- /* Calculate the signature, creating a RRSIG RDATA. */
- CHECK(dns_dnssec_sign(name, &rdataset, keys[i],
- &inception, &expire,
- mctx, &buffer, &sig_rdata));
-
- /* Update the database and journal with the RRSIG. */
- /* XXX inefficient - will cause dataset merging */
- CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADDRESIGN, name,
- rdataset.ttl, &sig_rdata));
- dns_rdata_reset(&sig_rdata);
- isc_buffer_init(&buffer, data, sizeof(data));
- added_sig = ISC_TRUE;
- }
- if (!added_sig) {
- update_log(client, zone, ISC_LOG_ERROR,
- "found no active private keys, "
- "unable to generate any signatures");
- result = ISC_R_NOTFOUND;
- }
-
- failure:
- if (dns_rdataset_isassociated(&rdataset))
- dns_rdataset_disassociate(&rdataset);
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-/*
- * Delete expired RRsigs and any RRsigs we are about to re-sign.
- * See also zone.c:del_sigs().
- */
-static isc_result_t
-del_keysigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- dns_rdataset_t rdataset;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- unsigned int i;
- dns_rdata_rrsig_t rrsig;
- isc_boolean_t found;
-
- dns_rdataset_init(&rdataset);
-
- result = dns_db_findnode(db, name, ISC_FALSE, &node);
- if (result == ISC_R_NOTFOUND)
- return (ISC_R_SUCCESS);
- if (result != ISC_R_SUCCESS)
- goto failure;
- result = dns_db_findrdataset(db, node, ver, dns_rdatatype_rrsig,
- dns_rdatatype_dnskey, (isc_stdtime_t) 0,
- &rdataset, NULL);
- dns_db_detachnode(db, &node);
-
- if (result == ISC_R_NOTFOUND)
- return (ISC_R_SUCCESS);
- if (result != ISC_R_SUCCESS)
- goto failure;
-
- for (result = dns_rdataset_first(&rdataset);
- result == ISC_R_SUCCESS;
- result = dns_rdataset_next(&rdataset)) {
- dns_rdataset_current(&rdataset, &rdata);
- result = dns_rdata_tostruct(&rdata, &rrsig, NULL);
- RUNTIME_CHECK(result == ISC_R_SUCCESS);
- found = ISC_FALSE;
- for (i = 0; i < nkeys; i++) {
- if (rrsig.keyid == dst_key_id(keys[i])) {
- found = ISC_TRUE;
- if (!dst_key_isprivate(keys[i])) {
- /*
- * The re-signing code in zone.c
- * will mark this as offline.
- * Just skip the record for now.
- */
- break;
- }
- result = update_one_rr(db, ver, diff,
- DNS_DIFFOP_DEL, name,
- rdataset.ttl, &rdata);
- break;
- }
- }
- /*
- * If there is not a matching DNSKEY then delete the RRSIG.
- */
- if (!found)
- result = update_one_rr(db, ver, diff, DNS_DIFFOP_DEL,
- name, rdataset.ttl, &rdata);
- dns_rdata_reset(&rdata);
- if (result != ISC_R_SUCCESS)
- break;
- }
- dns_rdataset_disassociate(&rdataset);
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
-failure:
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-static isc_result_t
-add_exposed_sigs(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *name, isc_boolean_t cut,
- dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
- isc_stdtime_t inception, isc_stdtime_t expire,
- isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
-{
- isc_result_t result;
- dns_dbnode_t *node;
- dns_rdatasetiter_t *iter;
-
- node = NULL;
- result = dns_db_findnode(db, name, ISC_FALSE, &node);
- if (result == ISC_R_NOTFOUND)
- return (ISC_R_SUCCESS);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- iter = NULL;
- result = dns_db_allrdatasets(db, node, ver,
- (isc_stdtime_t) 0, &iter);
- if (result != ISC_R_SUCCESS)
- goto cleanup_node;
-
- for (result = dns_rdatasetiter_first(iter);
- result == ISC_R_SUCCESS;
- result = dns_rdatasetiter_next(iter))
- {
- dns_rdataset_t rdataset;
- dns_rdatatype_t type;
- isc_boolean_t flag;
-
- dns_rdataset_init(&rdataset);
- dns_rdatasetiter_current(iter, &rdataset);
- type = rdataset.type;
- dns_rdataset_disassociate(&rdataset);
-
- /*
- * We don't need to sign unsigned NSEC records at the cut
- * as they are handled elsewhere.
- */
- if ((type == dns_rdatatype_rrsig) ||
- (cut && type != dns_rdatatype_ds))
- continue;
- result = rrset_exists(db, ver, name, dns_rdatatype_rrsig,
- type, &flag);
- if (result != ISC_R_SUCCESS)
- goto cleanup_iterator;
- if (flag)
- continue;;
- result = add_sigs(client, zone, db, ver, name, type, diff,
- keys, nkeys, inception, expire,
- check_ksk, keyset_kskonly);
- if (result != ISC_R_SUCCESS)
- goto cleanup_iterator;
- }
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
-
- cleanup_iterator:
- dns_rdatasetiter_destroy(&iter);
-
- cleanup_node:
- dns_db_detachnode(db, &node);
-
- return (result);
-}
-
-/*%
- * Update RRSIG, NSEC and NSEC3 records affected by an update. The original
- * update, including the SOA serial update but excluding the RRSIG & NSEC
- * changes, is in "diff" and has already been applied to "newver" of "db".
- * The database version prior to the update is "oldver".
- *
- * The necessary RRSIG, NSEC and NSEC3 changes will be applied to "newver"
- * and added (as a minimal diff) to "diff".
- *
- * The RRSIGs generated will be valid for 'sigvalidityinterval' seconds.
- */
-static isc_result_t
-update_signatures(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *oldver, dns_dbversion_t *newver,
- dns_diff_t *diff, isc_uint32_t sigvalidityinterval)
-{
- isc_result_t result;
- dns_difftuple_t *t;
- dns_diff_t diffnames;
- dns_diff_t affected;
- dns_diff_t sig_diff;
- dns_diff_t nsec_diff;
- dns_diff_t nsec_mindiff;
- isc_boolean_t flag, build_nsec, build_nsec3;
- dst_key_t *zone_keys[DNS_MAXZONEKEYS];
- unsigned int nkeys = 0;
- unsigned int i;
- isc_stdtime_t now, inception, expire;
- dns_ttl_t nsecttl;
- dns_rdata_soa_t soa;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_rdataset_t rdataset;
- dns_dbnode_t *node = NULL;
- isc_boolean_t check_ksk, keyset_kskonly;
- isc_boolean_t unsecure;
- isc_boolean_t cut;
- dns_rdatatype_t privatetype = dns_zone_getprivatetype(zone);
-
- dns_diff_init(client->mctx, &diffnames);
- dns_diff_init(client->mctx, &affected);
-
- dns_diff_init(client->mctx, &sig_diff);
- sig_diff.resign = dns_zone_getsigresigninginterval(zone);
- dns_diff_init(client->mctx, &nsec_diff);
- dns_diff_init(client->mctx, &nsec_mindiff);
-
- result = find_zone_keys(zone, db, newver, client->mctx,
- DNS_MAXZONEKEYS, zone_keys, &nkeys);
- if (result != ISC_R_SUCCESS) {
- update_log(client, zone, ISC_LOG_ERROR,
- "could not get zone keys for secure dynamic update");
- goto failure;
- }
-
- isc_stdtime_get(&now);
- inception = now - 3600; /* Allow for some clock skew. */
- expire = now + sigvalidityinterval;
-
- /*
- * Do we look at the KSK flag on the DNSKEY to determining which
- * keys sign which RRsets? First check the zone option then
- * check the keys flags to make sure at least one has a ksk set
- * and one doesn't.
- */
- check_ksk = ISC_TF((dns_zone_getoptions(zone) &
- DNS_ZONEOPT_UPDATECHECKKSK) != 0);
- keyset_kskonly = ISC_TF((dns_zone_getoptions(zone) &
- DNS_ZONEOPT_DNSKEYKSKONLY) != 0);
-
- /*
- * Get the NSEC/NSEC3 TTL from the SOA MINIMUM field.
- */
- CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
- dns_rdataset_init(&rdataset);
- CHECK(dns_db_findrdataset(db, node, newver, dns_rdatatype_soa, 0,
- (isc_stdtime_t) 0, &rdataset, NULL));
- CHECK(dns_rdataset_first(&rdataset));
- dns_rdataset_current(&rdataset, &rdata);
- CHECK(dns_rdata_tostruct(&rdata, &soa, NULL));
- nsecttl = soa.minimum;
- dns_rdataset_disassociate(&rdataset);
- dns_db_detachnode(db, &node);
-
- /*
- * Find all RRsets directly affected by the update, and
- * update their RRSIGs. Also build a list of names affected
- * by the update in "diffnames".
- */
- CHECK(dns_diff_sort(diff, temp_order));
-
- t = ISC_LIST_HEAD(diff->tuples);
- while (t != NULL) {
- dns_name_t *name = &t->name;
- /* Now "name" is a new, unique name affected by the update. */
-
- CHECK(namelist_append_name(&diffnames, name));
-
- while (t != NULL && dns_name_equal(&t->name, name)) {
- dns_rdatatype_t type;
- type = t->rdata.type;
-
- /*
- * Now "name" and "type" denote a new unique RRset
- * affected by the update.
- */
-
- /* Don't sign RRSIGs. */
- if (type == dns_rdatatype_rrsig)
- goto skip;
-
- /*
- * Delete all old RRSIGs covering this type, since they
- * are all invalid when the signed RRset has changed.
- * We may not be able to recreate all of them - tough.
- * Special case changes to the zone's DNSKEY records
- * to support offline KSKs.
- */
- if (type == dns_rdatatype_dnskey)
- del_keysigs(db, newver, name, &sig_diff,
- zone_keys, nkeys);
- else
- CHECK(delete_if(true_p, db, newver, name,
- dns_rdatatype_rrsig, type,
- NULL, &sig_diff));
-
- /*
- * If this RRset is still visible after the update,
- * add a new signature for it.
- */
- CHECK(rrset_visible(db, newver, name, type, &flag));
- if (flag) {
- CHECK(add_sigs(client, zone, db, newver, name,
- type, &sig_diff, zone_keys,
- nkeys, inception, expire,
- check_ksk, keyset_kskonly));
- }
- skip:
- /* Skip any other updates to the same RRset. */
- while (t != NULL &&
- dns_name_equal(&t->name, name) &&
- t->rdata.type == type)
- {
- t = ISC_LIST_NEXT(t, link);
- }
- }
- }
- update_log(client, zone, ISC_LOG_DEBUG(3), "updated data signatures");
-
- /* Remove orphaned NSECs and RRSIG NSECs. */
- for (t = ISC_LIST_HEAD(diffnames.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- CHECK(non_nsec_rrset_exists(db, newver, &t->name, &flag));
- if (! flag) {
- CHECK(delete_if(true_p, db, newver, &t->name,
- dns_rdatatype_any, 0,
- NULL, &sig_diff));
- }
- }
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "removed any orphaned NSEC records");
-
- /*
- * See if we need to build NSEC or NSEC3 chains.
- */
- CHECK(dns_private_chains(db, newver, privatetype, &build_nsec,
- &build_nsec3));
- if (!build_nsec)
- goto update_nsec3;
-
- update_log(client, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC chain");
-
- /*
- * When a name is created or deleted, its predecessor needs to
- * have its NSEC updated.
- */
- for (t = ISC_LIST_HEAD(diffnames.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- isc_boolean_t existed, exists;
- dns_fixedname_t fixedname;
- dns_name_t *prevname;
-
- dns_fixedname_init(&fixedname);
- prevname = dns_fixedname_name(&fixedname);
-
- CHECK(name_exists(db, oldver, &t->name, &existed));
- CHECK(name_exists(db, newver, &t->name, &exists));
- if (exists == existed)
- continue;
-
- /*
- * Find the predecessor.
- * When names become obscured or unobscured in this update
- * transaction, we may find the wrong predecessor because
- * the NSECs have not yet been updated to reflect the delegation
- * change. This should not matter because in this case,
- * the correct predecessor is either the delegation node or
- * a newly unobscured node, and those nodes are on the
- * "affected" list in any case.
- */
- CHECK(next_active(client, zone, db, newver,
- &t->name, prevname, ISC_FALSE));
- CHECK(namelist_append_name(&affected, prevname));
- }
-
- /*
- * Find names potentially affected by delegation changes
- * (obscured by adding an NS or DNAME, or unobscured by
- * removing one).
- */
- for (t = ISC_LIST_HEAD(diffnames.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- isc_boolean_t ns_existed, dname_existed;
- isc_boolean_t ns_exists, dname_exists;
-
- CHECK(rrset_exists(db, oldver, &t->name, dns_rdatatype_ns, 0,
- &ns_existed));
- CHECK(rrset_exists(db, oldver, &t->name, dns_rdatatype_dname, 0,
- &dname_existed));
- CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_ns, 0,
- &ns_exists));
- CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_dname, 0,
- &dname_exists));
- if ((ns_exists || dname_exists) == (ns_existed || dname_existed))
- continue;
- /*
- * There was a delegation change. Mark all subdomains
- * of t->name as potentially needing a NSEC update.
- */
- CHECK(namelist_append_subdomain(db, &t->name, &affected));
- }
-
- ISC_LIST_APPENDLIST(affected.tuples, diffnames.tuples, link);
- INSIST(ISC_LIST_EMPTY(diffnames.tuples));
-
- CHECK(uniqify_name_list(&affected));
-
- /*
- * Determine which names should have NSECs, and delete/create
- * NSECs to make it so. We don't know the final NSEC targets yet,
- * so we just create placeholder NSECs with arbitrary contents
- * to indicate that their respective owner names should be part of
- * the NSEC chain.
- */
- for (t = ISC_LIST_HEAD(affected.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- isc_boolean_t exists;
- dns_name_t *name = &t->name;
-
- CHECK(name_exists(db, newver, name, &exists));
- if (! exists)
- continue;
- CHECK(is_active(db, newver, name, &flag, &cut, NULL));
- if (!flag) {
- /*
- * This name is obscured. Delete any
- * existing NSEC record.
- */
- CHECK(delete_if(true_p, db, newver, name,
- dns_rdatatype_nsec, 0,
- NULL, &nsec_diff));
- CHECK(delete_if(rrsig_p, db, newver, name,
- dns_rdatatype_any, 0, NULL, diff));
- } else {
- /*
- * This name is not obscured. It needs to have a
- * NSEC unless it is the at the origin, in which
- * case it should already exist if there is a complete
- * NSEC chain and if there isn't a complete NSEC chain
- * we don't want to add one as that would signal that
- * there is a complete NSEC chain.
- */
- if (!dns_name_equal(name, dns_db_origin(db))) {
- CHECK(rrset_exists(db, newver, name,
- dns_rdatatype_nsec, 0,
- &flag));
- if (!flag)
- CHECK(add_placeholder_nsec(db, newver,
- name, diff));
- }
- CHECK(add_exposed_sigs(client, zone, db, newver, name,
- cut, &sig_diff, zone_keys, nkeys,
- inception, expire, check_ksk,
- keyset_kskonly));
- }
- }
-
- /*
- * Now we know which names are part of the NSEC chain.
- * Make them all point at their correct targets.
- */
- for (t = ISC_LIST_HEAD(affected.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- CHECK(rrset_exists(db, newver, &t->name,
- dns_rdatatype_nsec, 0, &flag));
- if (flag) {
- /*
- * There is a NSEC, but we don't know if it is correct.
- * Delete it and create a correct one to be sure.
- * If the update was unnecessary, the diff minimization
- * will take care of eliminating it from the journal,
- * IXFRs, etc.
- *
- * The RRSIG bit should always be set in the NSECs
- * we generate, because they will all get RRSIG NSECs.
- * (XXX what if the zone keys are missing?).
- * Because the RRSIG NSECs have not necessarily been
- * created yet, the correctness of the bit mask relies
- * on the assumption that NSECs are only created if
- * there is other data, and if there is other data,
- * there are other RRSIGs.
- */
- CHECK(add_nsec(client, zone, db, newver, &t->name,
- nsecttl, &nsec_diff));
- }
- }
-
- /*
- * Minimize the set of NSEC updates so that we don't
- * have to regenerate the RRSIG NSECs for NSECs that were
- * replaced with identical ones.
- */
- while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
- dns_diff_appendminimal(&nsec_mindiff, &t);
- }
-
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "signing rebuilt NSEC chain");
-
- /* Update RRSIG NSECs. */
- for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- if (t->op == DNS_DIFFOP_DEL) {
- CHECK(delete_if(true_p, db, newver, &t->name,
- dns_rdatatype_rrsig, dns_rdatatype_nsec,
- NULL, &sig_diff));
- } else if (t->op == DNS_DIFFOP_ADD) {
- CHECK(add_sigs(client, zone, db, newver, &t->name,
- dns_rdatatype_nsec, &sig_diff,
- zone_keys, nkeys, inception, expire,
- check_ksk, keyset_kskonly));
- } else {
- INSIST(0);
- }
- }
-
- update_nsec3:
-
- /* Record our changes for the journal. */
- while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(sig_diff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
- while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
-
- INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
-
- if (!build_nsec3) {
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "no NSEC3 chains to rebuild");
- goto failure;
- }
-
- update_log(client, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC3 chains");
-
- dns_diff_clear(&diffnames);
- dns_diff_clear(&affected);
-
- CHECK(dns_diff_sort(diff, temp_order));
-
- /*
- * Find names potentially affected by delegation changes
- * (obscured by adding an NS or DNAME, or unobscured by
- * removing one).
- */
- t = ISC_LIST_HEAD(diff->tuples);
- while (t != NULL) {
- dns_name_t *name = &t->name;
-
- isc_boolean_t ns_existed, dname_existed;
- isc_boolean_t ns_exists, dname_exists;
- isc_boolean_t exists, existed;
-
- if (t->rdata.type == dns_rdatatype_nsec ||
- t->rdata.type == dns_rdatatype_rrsig) {
- t = ISC_LIST_NEXT(t, link);
- continue;
- }
-
- CHECK(namelist_append_name(&affected, name));
-
- CHECK(rrset_exists(db, oldver, name, dns_rdatatype_ns, 0,
- &ns_existed));
- CHECK(rrset_exists(db, oldver, name, dns_rdatatype_dname, 0,
- &dname_existed));
- CHECK(rrset_exists(db, newver, name, dns_rdatatype_ns, 0,
- &ns_exists));
- CHECK(rrset_exists(db, newver, name, dns_rdatatype_dname, 0,
- &dname_exists));
-
- exists = ns_exists || dname_exists;
- existed = ns_existed || dname_existed;
- if (exists == existed)
- goto nextname;
- /*
- * There was a delegation change. Mark all subdomains
- * of t->name as potentially needing a NSEC3 update.
- */
- CHECK(namelist_append_subdomain(db, name, &affected));
-
- nextname:
- while (t != NULL && dns_name_equal(&t->name, name))
- t = ISC_LIST_NEXT(t, link);
- }
-
- for (t = ISC_LIST_HEAD(affected.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link)) {
- dns_name_t *name = &t->name;
-
- unsecure = ISC_FALSE; /* Silence compiler warning. */
- CHECK(is_active(db, newver, name, &flag, &cut, &unsecure));
-
- if (!flag) {
- CHECK(delete_if(rrsig_p, db, newver, name,
- dns_rdatatype_any, 0, NULL, diff));
- CHECK(dns_nsec3_delnsec3sx(db, newver, name,
- privatetype, &nsec_diff));
- } else {
- CHECK(add_exposed_sigs(client, zone, db, newver, name,
- cut, &sig_diff, zone_keys, nkeys,
- inception, expire, check_ksk,
- keyset_kskonly));
- CHECK(dns_nsec3_addnsec3sx(db, newver, name, nsecttl,
- unsecure, privatetype,
- &nsec_diff));
- }
- }
-
- /*
- * Minimize the set of NSEC3 updates so that we don't
- * have to regenerate the RRSIG NSEC3s for NSEC3s that were
- * replaced with identical ones.
- */
- while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
- dns_diff_appendminimal(&nsec_mindiff, &t);
- }
-
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "signing rebuilt NSEC3 chain");
-
- /* Update RRSIG NSEC3s. */
- for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- if (t->op == DNS_DIFFOP_DEL) {
- CHECK(delete_if(true_p, db, newver, &t->name,
- dns_rdatatype_rrsig,
- dns_rdatatype_nsec3,
- NULL, &sig_diff));
- } else if (t->op == DNS_DIFFOP_ADD) {
- CHECK(add_sigs(client, zone, db, newver, &t->name,
- dns_rdatatype_nsec3,
- &sig_diff, zone_keys, nkeys,
- inception, expire, check_ksk,
- keyset_kskonly));
- } else {
- INSIST(0);
- }
- }
-
- /* Record our changes for the journal. */
- while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(sig_diff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
- while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
-
- INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
-
- failure:
- dns_diff_clear(&sig_diff);
- dns_diff_clear(&nsec_diff);
- dns_diff_clear(&nsec_mindiff);
-
- dns_diff_clear(&affected);
- dns_diff_clear(&diffnames);
-
- for (i = 0; i < nkeys; i++)
- dst_key_free(&zone_keys[i]);
-
- return (result);
-}
-
-
-/**************************************************************************/
/*%
* The actual update code in all its glory. We try to follow
* the RFC2136 pseudocode as closely as possible.
@@ -2686,7 +1515,7 @@ ns_update_start(ns_client_t *client, isc_result_t sigresult) {
isc_result_t result;
dns_name_t *zonename;
dns_rdataset_t *zone_rdataset;
- dns_zone_t *zone = NULL;
+ dns_zone_t *zone = NULL, *raw = NULL;
/*
* Interpret the zone section.
@@ -2720,6 +1549,17 @@ ns_update_start(ns_client_t *client, isc_result_t sigresult) {
if (result != ISC_R_SUCCESS)
FAILC(DNS_R_NOTAUTH, "not authoritative for update zone");
+ /*
+ * If there is a raw (unsigned) zone associated with this
+ * zone then it processes the UPDATE request.
+ */
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ dns_zone_detach(&zone);
+ dns_zone_attach(raw, &zone);
+ dns_zone_detach(&raw);
+ }
+
switch(dns_zone_gettype(zone)) {
case dns_zone_master:
case dns_zone_dlz:
@@ -3066,8 +1906,19 @@ check_dnssec(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
}
/* Check existing DB for NSEC-only DNSKEY */
- if (!nseconly)
- CHECK(dns_nsec_nseconly(db, ver, &nseconly));
+ if (!nseconly) {
+ result = dns_nsec_nseconly(db, ver, &nseconly);
+
+ /*
+ * An NSEC3PARAM update can proceed without a DNSKEY (it
+ * will trigger a delayed change), so we can ignore
+ * ISC_R_NOTFOUND here.
+ */
+ if (result == ISC_R_NOTFOUND)
+ result = ISC_R_SUCCESS;
+
+ CHECK(result);
+ }
/* Check existing DB for NSEC3 */
if (!nsec3)
@@ -3238,9 +2089,11 @@ add_nsec3param_records(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
ttl_good = ISC_TRUE;
}
if (tuple->op == DNS_DIFFOP_ADD) {
+ isc_boolean_t nseconly = ISC_FALSE;
+
/*
* Look for any deletes which match this ADD ignoring
- * OPTOUT. We don't need to explictly remove them as
+ * flags. We don't need to explictly remove them as
* they will be removed a side effect of processing
* the add.
*/
@@ -3262,12 +2115,28 @@ add_nsec3param_records(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
ISC_LIST_APPEND(diff->tuples, next, link);
next = ISC_LIST_HEAD(temp_diff.tuples);
}
+
/*
- * See if we already have a CREATE request in progress.
+ * Create a private-type record to signal that
+ * we want a delayed NSEC3 chain add/delete
*/
dns_nsec3param_toprivate(&tuple->rdata, &rdata,
privatetype, buf, sizeof(buf));
buf[2] |= DNS_NSEC3FLAG_CREATE;
+
+ /*
+ * If the zone is not currently capable of
+ * supporting an NSEC3 chain, then we set the
+ * INITIAL flag to indicate that these parameters
+ * are to be used later.
+ */
+ result = dns_nsec_nseconly(db, ver, &nseconly);
+ if (result == ISC_R_NOTFOUND || nseconly)
+ buf[2] |= DNS_NSEC3FLAG_INITIAL;
+
+ /*
+ * See if this CREATE request already exists.
+ */
CHECK(rr_exists(db, ver, name, &rdata, &flag));
if (!flag) {
@@ -3379,7 +2248,7 @@ rollback_private(dns_db_t *db, dns_rdatatype_t privatetype,
/*
* Allow records which indicate that a zone has been
- * signed with a DNSKEY to be be removed.
+ * signed with a DNSKEY to be removed.
*/
if (tuple->op == DNS_DIFFOP_DEL &&
tuple->rdata.length == 5 &&
@@ -3500,7 +2369,8 @@ add_signing_records(dns_db_t *db, dns_rdatatype_t privatetype,
ISC_LIST_UNLINK(temp_diff.tuples, tuple, link);
ISC_LIST_APPEND(diff->tuples, tuple, link);
- dns_rdata_tostruct(&tuple->rdata, &dnskey, NULL);
+ result = dns_rdata_tostruct(&tuple->rdata, &dnskey, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
if ((dnskey.flags &
(DNS_KEYFLAG_OWNERMASK|DNS_KEYTYPE_NOAUTH))
!= DNS_KEYOWNER_ZONE)
@@ -4156,7 +3026,8 @@ update_action(isc_task_t *task, isc_event_t *event) {
* changed as a result of an update operation.
*/
if (! soa_serial_changed) {
- CHECK(increment_soa_serial(db, ver, &diff, mctx));
+ CHECK(update_soa_serial(db, ver, &diff, mctx,
+ dns_zone_getserialupdatemethod(zone)));
}
CHECK(check_mx(client, zone, db, ver, &diff));
@@ -4190,7 +3061,7 @@ update_action(isc_task_t *task, isc_event_t *event) {
CHECK(add_nsec3param_records(client, zone, db, ver, &diff));
- if (!has_dnskey) {
+ if (had_dnskey && !has_dnskey) {
/*
* We are transitioning from secure to insecure.
* Cause all NSEC3 chains to be deleted. When the
@@ -4198,12 +3069,17 @@ update_action(isc_task_t *task, isc_event_t *event) {
* remove any NSEC chain present will also be removed.
*/
CHECK(dns_nsec3param_deletechains(db, ver, zone,
- &diff));
+ ISC_TRUE, &diff));
} else if (has_dnskey && isdnssec(db, ver, privatetype)) {
isc_uint32_t interval;
+ dns_update_log_t log;
+
interval = dns_zone_getsigvalidityinterval(zone);
- result = update_signatures(client, zone, db, oldver,
- ver, &diff, interval);
+ log.func = update_log_cb;
+ log.arg = client;
+ result = dns_update_signatures(&log, zone, db, oldver,
+ ver, &diff, interval);
+
if (result != ISC_R_SUCCESS) {
update_log(client, zone,
ISC_LOG_ERROR,
@@ -4220,7 +3096,7 @@ update_action(isc_task_t *task, isc_event_t *event) {
journal = NULL;
result = dns_journal_open(mctx, journalfile,
- ISC_TRUE, &journal);
+ DNS_JOURNAL_CREATE, &journal);
if (result != ISC_R_SUCCESS)
FAILS(result, "journal open failed");
diff --git a/contrib/bind9/bin/named/xfrout.c b/contrib/bind9/bin/named/xfrout.c
index 6cda6589e1c9..a0a617d14c12 100644
--- a/contrib/bind9/bin/named/xfrout.c
+++ b/contrib/bind9/bin/named/xfrout.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: xfrout.c,v 1.139.16.4 2011/12/01 01:00:50 marka Exp $ */
+/* $Id$ */
#include <config.h>
@@ -247,12 +247,13 @@ ixfr_rrstream_create(isc_mem_t *mctx,
s = isc_mem_get(mctx, sizeof(*s));
if (s == NULL)
return (ISC_R_NOMEMORY);
- s->common.mctx = mctx;
+ s->common.mctx = NULL;
+ isc_mem_attach(mctx, &s->common.mctx);
s->common.methods = &ixfr_rrstream_methods;
s->journal = NULL;
CHECK(dns_journal_open(mctx, journal_filename,
- ISC_FALSE, &s->journal));
+ DNS_JOURNAL_READ, &s->journal));
CHECK(dns_journal_iter_init(s->journal, begin_serial, end_serial));
*sp = (rrstream_t *) s;
@@ -289,7 +290,7 @@ ixfr_rrstream_destroy(rrstream_t **rsp) {
ixfr_rrstream_t *s = (ixfr_rrstream_t *) *rsp;
if (s->journal != 0)
dns_journal_destroy(&s->journal);
- isc_mem_put(s->common.mctx, s, sizeof(*s));
+ isc_mem_putanddetach(&s->common.mctx, s, sizeof(*s));
}
static rrstream_methods_t ixfr_rrstream_methods = {
@@ -335,7 +336,8 @@ axfr_rrstream_create(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *ver,
s = isc_mem_get(mctx, sizeof(*s));
if (s == NULL)
return (ISC_R_NOMEMORY);
- s->common.mctx = mctx;
+ s->common.mctx = NULL;
+ isc_mem_attach(mctx, &s->common.mctx);
s->common.methods = &axfr_rrstream_methods;
s->it_valid = ISC_FALSE;
@@ -413,7 +415,7 @@ axfr_rrstream_destroy(rrstream_t **rsp) {
axfr_rrstream_t *s = (axfr_rrstream_t *) *rsp;
if (s->it_valid)
dns_rriterator_destroy(&s->it);
- isc_mem_put(s->common.mctx, s, sizeof(*s));
+ isc_mem_putanddetach(&s->common.mctx, s, sizeof(*s));
}
static rrstream_methods_t axfr_rrstream_methods = {
@@ -455,7 +457,8 @@ soa_rrstream_create(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *ver,
s = isc_mem_get(mctx, sizeof(*s));
if (s == NULL)
return (ISC_R_NOMEMORY);
- s->common.mctx = mctx;
+ s->common.mctx = NULL;
+ isc_mem_attach(mctx, &s->common.mctx);
s->common.methods = &soa_rrstream_methods;
s->soa_tuple = NULL;
@@ -497,7 +500,7 @@ soa_rrstream_destroy(rrstream_t **rsp) {
soa_rrstream_t *s = (soa_rrstream_t *) *rsp;
if (s->soa_tuple != NULL)
dns_difftuple_free(&s->soa_tuple);
- isc_mem_put(s->common.mctx, s, sizeof(*s));
+ isc_mem_putanddetach(&s->common.mctx, s, sizeof(*s));
}
static rrstream_methods_t soa_rrstream_methods = {
@@ -561,7 +564,8 @@ compound_rrstream_create(isc_mem_t *mctx, rrstream_t **soa_stream,
s = isc_mem_get(mctx, sizeof(*s));
if (s == NULL)
return (ISC_R_NOMEMORY);
- s->common.mctx = mctx;
+ s->common.mctx = NULL;
+ isc_mem_attach(mctx, &s->common.mctx);
s->common.methods = &compound_rrstream_methods;
s->components[0] = *soa_stream;
s->components[1] = *data_stream;
@@ -634,7 +638,7 @@ compound_rrstream_destroy(rrstream_t **rsp) {
s->components[0]->methods->destroy(&s->components[0]);
s->components[1]->methods->destroy(&s->components[1]);
s->components[2] = NULL; /* Copy of components[0]. */
- isc_mem_put(s->common.mctx, s, sizeof(*s));
+ isc_mem_putanddetach(&s->common.mctx, s, sizeof(*s));
}
static rrstream_methods_t compound_rrstream_methods = {
@@ -833,14 +837,6 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
FAILQ(DNS_R_NOTAUTH, "non-authoritative zone",
question_name, question_class);
is_dlz = ISC_TRUE;
- /*
- * DLZ only support full zone transfer, not incremental
- */
- if (reqtype != dns_rdatatype_axfr) {
- mnemonic = "AXFR-style IXFR";
- reqtype = dns_rdatatype_axfr;
- }
-
} else {
/*
* not DLZ and not in normal zone table, we are
@@ -852,12 +848,14 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
} else {
/* zone table has a match */
switch(dns_zone_gettype(zone)) {
+ /* Master and slave zones are OK for transfer. */
case dns_zone_master:
case dns_zone_slave:
case dns_zone_dlz:
- break; /* Master and slave zones are OK for transfer. */
+ break;
default:
- FAILQ(DNS_R_NOTAUTH, "non-authoritative zone", question_name, question_class);
+ FAILQ(DNS_R_NOTAUTH, "non-authoritative zone",
+ question_name, question_class);
}
CHECK(dns_zone_getdb(zone, &db));
dns_db_currentversion(db, &ver);
@@ -992,7 +990,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
is_poll = ISC_TRUE;
goto have_stream;
}
- journalfile = dns_zone_getjournal(zone);
+ journalfile = is_dlz ? NULL : dns_zone_getjournal(zone);
if (journalfile != NULL)
result = ixfr_rrstream_create(mctx,
journalfile,
diff --git a/contrib/bind9/bin/named/zoneconf.c b/contrib/bind9/bin/named/zoneconf.c
index 6eef28ae131f..7f36b143d4e5 100644
--- a/contrib/bind9/bin/named/zoneconf.c
+++ b/contrib/bind9/bin/named/zoneconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zoneconf.c,v 1.170.14.7 2012/01/31 23:46:39 tbox Exp $ */
+/* $Id$ */
/*% */
@@ -56,6 +56,7 @@
typedef enum {
allow_notify,
allow_query,
+ allow_query_on,
allow_transfer,
allow_update,
allow_update_forwarding
@@ -104,6 +105,11 @@ configure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
aclp = &view->queryacl;
aclname = "allow-query";
break;
+ case allow_query_on:
+ if (view != NULL)
+ aclp = &view->queryonacl;
+ aclname = "allow-query-on";
+ break;
case allow_transfer:
if (view != NULL)
aclp = &view->transferacl;
@@ -269,7 +275,7 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone,
dns_fixedname_init(&fident);
str = cfg_obj_asstring(identity);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
result = dns_name_fromtext(dns_fixedname_name(&fident), &b,
dns_rootname, 0, NULL);
@@ -292,7 +298,7 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone,
}
} else {
str = cfg_obj_asstring(dname);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
result = dns_name_fromtext(dns_fixedname_name(&fname),
&b, dns_rootname, 0, NULL);
@@ -525,7 +531,7 @@ configure_staticstub_servernames(const cfg_obj_t *zconfig, dns_zone_t *zone,
dns_fixedname_init(&fixed_name);
nsname = dns_fixedname_name(&fixed_name);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
result = dns_name_fromtext(nsname, &b, dns_rootname, 0, NULL);
if (result != ISC_R_SUCCESS) {
@@ -786,7 +792,7 @@ checknames(dns_zonetype_t ztype, const cfg_obj_t **maps,
isc_result_t
ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
const cfg_obj_t *zconfig, cfg_aclconfctx_t *ac,
- dns_zone_t *zone)
+ dns_zone_t *zone, dns_zone_t *raw)
{
isc_result_t result;
const char *zname;
@@ -818,8 +824,12 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
isc_boolean_t ixfrdiff;
dns_masterformat_t masterformat;
isc_stats_t *zoneqrystats;
- isc_boolean_t zonestats_on;
+#ifdef NEWSTATS
+ dns_stats_t *rcvquerystats;
+#endif
+ dns_zonestat_level_t statlevel;
int seconds;
+ dns_zone_t *mayberaw = (raw != NULL) ? raw : zone;
i = 0;
if (zconfig != NULL) {
@@ -851,9 +861,16 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
RETERR(ns_config_getclass(cfg_tuple_get(zconfig, "class"),
vclass, &zclass));
dns_zone_setclass(zone, zclass);
+ if (raw != NULL)
+ dns_zone_setclass(raw, zclass);
ztype = zonetype_fromconfig(zoptions);
- dns_zone_settype(zone, ztype);
+ if (raw != NULL) {
+ dns_zone_settype(raw, ztype);
+ dns_zone_settype(zone, dns_zone_master);
+ } else
+ dns_zone_settype(zone, ztype);
+
obj = NULL;
result = cfg_map_get(zoptions, "database", &obj);
@@ -901,7 +918,10 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
return (ISC_R_FAILURE);
}
- masterformat = dns_masterformat_text;
+ if (ztype == dns_zone_slave)
+ masterformat = dns_masterformat_raw;
+ else
+ masterformat = dns_masterformat_text;
obj = NULL;
result= ns_config_get(maps, "masterfile-format", &obj);
if (result == ISC_R_SUCCESS) {
@@ -914,18 +934,40 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(0);
}
- RETERR(dns_zone_setfile2(zone, filename, masterformat));
+
+ if (raw != NULL && filename != NULL) {
+#define SIGNED ".signed"
+ size_t signedlen = strlen(filename) + sizeof(SIGNED);
+ char *signedname;
+
+ RETERR(dns_zone_setfile2(raw, filename, masterformat));
+ signedname = isc_mem_get(mctx, signedlen);
+ if (signedname == NULL)
+ return (ISC_R_NOMEMORY);
+
+ (void)snprintf(signedname, signedlen, "%s" SIGNED, filename);
+ result = dns_zone_setfile2(zone, signedname,
+ dns_masterformat_raw);
+ isc_mem_put(mctx, signedname, signedlen);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ } else
+ RETERR(dns_zone_setfile2(zone, filename, masterformat));
obj = NULL;
result = cfg_map_get(zoptions, "journal", &obj);
if (result == ISC_R_SUCCESS)
- RETERR(dns_zone_setjournal(zone, cfg_obj_asstring(obj)));
+ RETERR(dns_zone_setjournal(mayberaw, cfg_obj_asstring(obj)));
+ /*
+ * Notify messages are processed by the raw zone if it exists.
+ */
if (ztype == dns_zone_slave)
RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_notify, ac, zone,
+ allow_notify, ac, mayberaw,
dns_zone_setnotifyacl,
dns_zone_clearnotifyacl));
+
/*
* XXXAG This probably does not make sense for stubs.
*/
@@ -934,6 +976,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
dns_zone_setqueryacl,
dns_zone_clearqueryacl));
+ RETERR(configure_zone_acl(zconfig, vconfig, config,
+ allow_query_on, ac, zone,
+ dns_zone_setqueryonacl,
+ dns_zone_clearqueryonacl));
+
obj = NULL;
result = ns_config_get(maps, "dialup", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
@@ -955,27 +1002,63 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(0);
}
+ if (raw != NULL)
+ dns_zone_setdialup(raw, dialup);
dns_zone_setdialup(zone, dialup);
obj = NULL;
result = ns_config_get(maps, "zone-statistics", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- zonestats_on = cfg_obj_asboolean(obj);
- zoneqrystats = NULL;
- if (zonestats_on) {
+ if (cfg_obj_isboolean(obj)) {
+ if (cfg_obj_asboolean(obj))
+ statlevel = dns_zonestat_full;
+ else
+ statlevel = dns_zonestat_terse; /* XXX */
+ } else {
+ const char *levelstr = cfg_obj_asstring(obj);
+ if (strcasecmp(levelstr, "full") == 0)
+ statlevel = dns_zonestat_full;
+ else if (strcasecmp(levelstr, "terse") == 0)
+ statlevel = dns_zonestat_terse;
+ else if (strcasecmp(levelstr, "none") == 0)
+ statlevel = dns_zonestat_none;
+ else
+ INSIST(0);
+ }
+ dns_zone_setstatlevel(zone, statlevel);
+
+ zoneqrystats = NULL;
+#ifdef NEWSTATS
+ rcvquerystats = NULL;
+#endif
+ if (statlevel == dns_zonestat_full) {
RETERR(isc_stats_create(mctx, &zoneqrystats,
dns_nsstatscounter_max));
+#ifdef NEWSTATS
+ RETERR(dns_rdatatypestats_create(mctx,
+ &rcvquerystats));
+#endif
}
- dns_zone_setrequeststats(zone, zoneqrystats);
+ dns_zone_setrequeststats(zone, zoneqrystats );
+#ifdef NEWSTATS
+ dns_zone_setrcvquerystats(zone, rcvquerystats);
+#endif
+
if (zoneqrystats != NULL)
isc_stats_detach(&zoneqrystats);
+#ifdef NEWSTATS
+ if(rcvquerystats != NULL)
+ dns_stats_detach(&rcvquerystats);
+#endif
+
/*
* Configure master functionality. This applies
* to primary masters (type "master") and slaves
* acting as masters (type "slave"), but not to stubs.
*/
- if (ztype != dns_zone_stub && ztype != dns_zone_staticstub) {
+ if (ztype != dns_zone_stub && ztype != dns_zone_staticstub &&
+ ztype != dns_zone_redirect) {
obj = NULL;
result = ns_config_get(maps, "notify", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
@@ -993,22 +1076,28 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(0);
}
+ if (raw != NULL)
+ dns_zone_setnotifytype(raw, dns_notifytype_no);
dns_zone_setnotifytype(zone, notifytype);
obj = NULL;
result = ns_config_get(maps, "also-notify", &obj);
if (result == ISC_R_SUCCESS) {
- isc_sockaddr_t *addrs = NULL;
isc_uint32_t addrcount;
- result = ns_config_getiplist(config, obj, 0, mctx,
- &addrs, &addrcount);
- if (result != ISC_R_SUCCESS)
- return (result);
- result = dns_zone_setalsonotify(zone, addrs,
- addrcount);
- ns_config_putiplist(mctx, &addrs, addrcount);
- if (result != ISC_R_SUCCESS)
- return (result);
+ addrs = NULL;
+ keynames = NULL;
+ RETERR(ns_config_getipandkeylist(config, obj, mctx,
+ &addrs, &keynames,
+ &addrcount));
+ result = dns_zone_setalsonotifywithkeys(zone, addrs,
+ keynames,
+ addrcount);
+ if (addrcount != 0)
+ ns_config_putipandkeylist(mctx, &addrs,
+ &keynames, addrcount);
+ else
+ INSIST(addrs == NULL && keynames == NULL);
+ RETERR(result);
} else
RETERR(dns_zone_setalsonotify(zone, NULL, 0));
@@ -1048,8 +1137,10 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
dns_zone_setidleout(zone, cfg_obj_asuint32(obj) * 60);
obj = NULL;
- result = ns_config_get(maps, "max-journal-size", &obj);
+ result = ns_config_get(maps, "max-journal-size", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
+ if (raw != NULL)
+ dns_zone_setjournalsize(raw, -1);
dns_zone_setjournalsize(zone, -1);
if (cfg_obj_isstring(obj)) {
const char *str = cfg_obj_asstring(obj);
@@ -1069,6 +1160,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
}
journal_size = (isc_uint32_t)value;
}
+ if (raw != NULL)
+ dns_zone_setjournalsize(raw, journal_size);
dns_zone_setjournalsize(zone, journal_size);
obj = NULL;
@@ -1084,7 +1177,19 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
ixfrdiff = ISC_TRUE;
else
ixfrdiff = ISC_FALSE;
- dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS, ixfrdiff);
+ if (raw != NULL) {
+ dns_zone_setoption(raw, DNS_ZONEOPT_IXFRFROMDIFFS,
+ ISC_TRUE);
+ dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS,
+ ISC_TRUE);
+ } else
+ dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS,
+ ixfrdiff);
+
+ obj = NULL;
+ result = ns_config_get(maps, "request-ixfr", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ dns_zone_setrequestixfr(zone, cfg_obj_asboolean(obj));
checknames(ztype, maps, &obj);
INSIST(obj != NULL);
@@ -1097,8 +1202,21 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
fail = check = ISC_FALSE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES, check);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL, fail);
+ if (raw != NULL) {
+ dns_zone_setoption(raw, DNS_ZONEOPT_CHECKNAMES,
+ check);
+ dns_zone_setoption(raw, DNS_ZONEOPT_CHECKNAMESFAIL,
+ fail);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES,
+ ISC_FALSE);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL,
+ ISC_FALSE);
+ } else {
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES,
+ check);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL,
+ fail);
+ }
obj = NULL;
result = ns_config_get(maps, "notify-delay", &obj);
@@ -1112,6 +1230,17 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
cfg_obj_asboolean(obj));
obj = NULL;
+ result = ns_config_get(maps, "check-spf", &obj);
+ INSIST(result == ISC_R_SUCCESS && obj != NULL);
+ if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {
+ check = ISC_TRUE;
+ } else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
+ check = ISC_FALSE;
+ } else
+ INSIST(0);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSPF, check);
+
+ obj = NULL;
result = ns_config_get(maps, "zero-no-soa-ttl", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
dns_zone_setzeronosoattl(zone, cfg_obj_asboolean(obj));
@@ -1121,6 +1250,32 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
INSIST(result == ISC_R_SUCCESS && obj != NULL);
dns_zone_setoption(zone, DNS_ZONEOPT_NSEC3TESTZONE,
cfg_obj_asboolean(obj));
+ } else if (ztype == dns_zone_redirect) {
+ dns_zone_setnotifytype(zone, dns_notifytype_no);
+
+ obj = NULL;
+ result = ns_config_get(maps, "max-journal-size", &obj);
+ INSIST(result == ISC_R_SUCCESS && obj != NULL);
+ dns_zone_setjournalsize(zone, -1);
+ if (cfg_obj_isstring(obj)) {
+ const char *str = cfg_obj_asstring(obj);
+ INSIST(strcasecmp(str, "unlimited") == 0);
+ journal_size = ISC_UINT32_MAX / 2;
+ } else {
+ isc_resourcevalue_t value;
+ value = cfg_obj_asuint64(obj);
+ if (value > ISC_UINT32_MAX / 2) {
+ cfg_obj_log(obj, ns_g_lctx,
+ ISC_LOG_ERROR,
+ "'max-journal-size "
+ "%" ISC_PRINT_QUADFORMAT "d' "
+ "is too large",
+ value);
+ RETERR(ISC_R_RANGE);
+ }
+ journal_size = (isc_uint32_t)value;
+ }
+ dns_zone_setjournalsize(zone, journal_size);
}
/*
@@ -1131,11 +1286,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
dns_acl_t *updateacl;
RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_update, ac, zone,
+ allow_update, ac, mayberaw,
dns_zone_setupdateacl,
dns_zone_clearupdateacl));
- updateacl = dns_zone_getupdateacl(zone);
+ updateacl = dns_zone_getupdateacl(mayberaw);
if (updateacl != NULL && dns_acl_isinsecure(updateacl))
isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY,
NS_LOGMODULE_SERVER, ISC_LOG_WARNING,
@@ -1143,7 +1298,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
"address, which is insecure",
zname);
- RETERR(configure_zone_ssutable(zoptions, zone, zname));
+ RETERR(configure_zone_ssutable(zoptions, mayberaw, zname));
+ }
+
+ if (ztype == dns_zone_master || raw != NULL) {
+ isc_boolean_t allow = ISC_FALSE, maint = ISC_FALSE;
obj = NULL;
result = ns_config_get(maps, "sig-validity-interval", &obj);
@@ -1202,10 +1361,34 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
INSIST(result == ISC_R_SUCCESS && obj != NULL);
dns_zone_setoption(zone, DNS_ZONEOPT_DNSKEYKSKONLY,
cfg_obj_asboolean(obj));
- } else if (ztype == dns_zone_slave) {
+
+ obj = NULL;
+ result = ns_config_get(maps, "dnssec-loadkeys-interval", &obj);
+ INSIST(result == ISC_R_SUCCESS && obj != NULL);
+ RETERR(dns_zone_setrefreshkeyinterval(zone,
+ cfg_obj_asuint32(obj)));
+
+ obj = NULL;
+ result = cfg_map_get(zoptions, "auto-dnssec", &obj);
+ if (result == ISC_R_SUCCESS) {
+ const char *arg = cfg_obj_asstring(obj);
+ if (strcasecmp(arg, "allow") == 0)
+ allow = ISC_TRUE;
+ else if (strcasecmp(arg, "maintain") == 0)
+ allow = maint = ISC_TRUE;
+ else if (strcasecmp(arg, "off") == 0)
+ ;
+ else
+ INSIST(0);
+ dns_zone_setkeyopt(zone, DNS_ZONEKEY_ALLOW, allow);
+ dns_zone_setkeyopt(zone, DNS_ZONEKEY_MAINTAIN, maint);
+ }
+ }
+
+ if (ztype == dns_zone_slave) {
RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_update_forwarding, ac, zone,
- dns_zone_setforwardacl,
+ allow_update_forwarding, ac,
+ mayberaw, dns_zone_setforwardacl,
dns_zone_clearforwardacl));
}
@@ -1213,15 +1396,13 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
* Primary master functionality.
*/
if (ztype == dns_zone_master) {
- isc_boolean_t allow = ISC_FALSE, maint = ISC_FALSE;
-
obj = NULL;
result = ns_config_get(maps, "check-wildcard", &obj);
if (result == ISC_R_SUCCESS)
check = cfg_obj_asboolean(obj);
else
check = ISC_FALSE;
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKWILDCARD, check);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKWILDCARD, check);
obj = NULL;
result = ns_config_get(maps, "check-dup-records", &obj);
@@ -1235,8 +1416,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
fail = check = ISC_FALSE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKDUPRR, check);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRR, check);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
obj = NULL;
result = ns_config_get(maps, "check-mx", &obj);
@@ -1250,13 +1431,13 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
fail = check = ISC_FALSE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKMX, check);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKMXFAIL, fail);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMX, check);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMXFAIL, fail);
obj = NULL;
result = ns_config_get(maps, "check-integrity", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKINTEGRITY,
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKINTEGRITY,
cfg_obj_asboolean(obj));
obj = NULL;
@@ -1271,8 +1452,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
warn = ignore = ISC_TRUE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_WARNMXCNAME, warn);
- dns_zone_setoption(zone, DNS_ZONEOPT_IGNOREMXCNAME, ignore);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNMXCNAME, warn);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNOREMXCNAME, ignore);
obj = NULL;
result = ns_config_get(maps, "check-srv-cname", &obj);
@@ -1286,30 +1467,38 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
warn = ignore = ISC_TRUE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_WARNSRVCNAME, warn);
- dns_zone_setoption(zone, DNS_ZONEOPT_IGNORESRVCNAME, ignore);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNSRVCNAME, warn);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNORESRVCNAME,
+ ignore);
obj = NULL;
result = ns_config_get(maps, "dnssec-secure-to-insecure", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setoption(zone, DNS_ZONEOPT_SECURETOINSECURE,
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_SECURETOINSECURE,
cfg_obj_asboolean(obj));
obj = NULL;
- result = cfg_map_get(zoptions, "auto-dnssec", &obj);
+ result = cfg_map_get(zoptions, "dnssec-update-mode", &obj);
if (result == ISC_R_SUCCESS) {
const char *arg = cfg_obj_asstring(obj);
- if (strcasecmp(arg, "allow") == 0)
- allow = ISC_TRUE;
+ if (strcasecmp(arg, "no-resign") == 0)
+ dns_zone_setkeyopt(zone, DNS_ZONEKEY_NORESIGN,
+ ISC_TRUE);
else if (strcasecmp(arg, "maintain") == 0)
- allow = maint = ISC_TRUE;
- else if (strcasecmp(arg, "off") == 0)
;
else
INSIST(0);
- dns_zone_setkeyopt(zone, DNS_ZONEKEY_ALLOW, allow);
- dns_zone_setkeyopt(zone, DNS_ZONEKEY_MAINTAIN, maint);
}
+
+ obj = NULL;
+ result = ns_config_get(maps, "serial-update-method", &obj);
+ INSIST(result == ISC_R_SUCCESS && obj != NULL);
+ if (strcasecmp(cfg_obj_asstring(obj), "unixtime") == 0)
+ dns_zone_setserialupdatemethod(zone,
+ dns_updatemethod_unixtime);
+ else
+ dns_zone_setserialupdatemethod(zone,
+ dns_updatemethod_increment);
}
/*
@@ -1318,6 +1507,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
switch (ztype) {
case dns_zone_slave:
case dns_zone_stub:
+ case dns_zone_redirect:
count = 0;
obj = NULL;
(void)cfg_map_get(zoptions, "masters", &obj);
@@ -1327,7 +1517,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
RETERR(ns_config_getipandkeylist(config, obj, mctx,
&addrs, &keynames,
&count));
- result = dns_zone_setmasterswithkeys(zone, addrs,
+ result = dns_zone_setmasterswithkeys(mayberaw, addrs,
keynames, count);
if (count != 0)
ns_config_putipandkeylist(mctx, &addrs,
@@ -1335,7 +1525,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(addrs == NULL && keynames == NULL);
} else
- result = dns_zone_setmasters(zone, NULL, 0);
+ result = dns_zone_setmasters(mayberaw, NULL, 0);
RETERR(result);
multi = ISC_FALSE;
@@ -1345,59 +1535,63 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
INSIST(result == ISC_R_SUCCESS && obj != NULL);
multi = cfg_obj_asboolean(obj);
}
- dns_zone_setoption(zone, DNS_ZONEOPT_MULTIMASTER, multi);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_MULTIMASTER, multi);
obj = NULL;
result = ns_config_get(maps, "max-transfer-time-in", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setmaxxfrin(zone, cfg_obj_asuint32(obj) * 60);
+ dns_zone_setmaxxfrin(mayberaw, cfg_obj_asuint32(obj) * 60);
obj = NULL;
result = ns_config_get(maps, "max-transfer-idle-in", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setidlein(zone, cfg_obj_asuint32(obj) * 60);
+ dns_zone_setidlein(mayberaw, cfg_obj_asuint32(obj) * 60);
obj = NULL;
result = ns_config_get(maps, "max-refresh-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setmaxrefreshtime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setmaxrefreshtime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "min-refresh-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setminrefreshtime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setminrefreshtime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "max-retry-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setmaxretrytime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setmaxretrytime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "min-retry-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setminretrytime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setminretrytime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "transfer-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setxfrsource4(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setxfrsource4(mayberaw,
+ cfg_obj_assockaddr(obj)));
ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));
obj = NULL;
result = ns_config_get(maps, "transfer-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setxfrsource6(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setxfrsource6(mayberaw,
+ cfg_obj_assockaddr(obj)));
ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));
obj = NULL;
result = ns_config_get(maps, "alt-transfer-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setaltxfrsource4(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setaltxfrsource4(mayberaw,
+ cfg_obj_assockaddr(obj)));
obj = NULL;
result = ns_config_get(maps, "alt-transfer-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setaltxfrsource6(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setaltxfrsource6(mayberaw,
+ cfg_obj_assockaddr(obj)));
obj = NULL;
(void)ns_config_get(maps, "use-alt-transfer-source", &obj);
@@ -1413,11 +1607,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
alt = ISC_FALSE;
} else
alt = cfg_obj_asboolean(obj);
- dns_zone_setoption(zone, DNS_ZONEOPT_USEALTXFRSRC, alt);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_USEALTXFRSRC, alt);
obj = NULL;
(void)ns_config_get(maps, "try-tcp-refresh", &obj);
- dns_zone_setoption(zone, DNS_ZONEOPT_TRYTCPREFRESH,
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_TRYTCPREFRESH,
cfg_obj_asboolean(obj));
break;
@@ -1450,10 +1644,10 @@ ns_zone_configure_writeable_dlz(dns_dlzdb_t *dlzdatabase, dns_zone_t *zone,
dns_zone_settype(zone, dns_zone_dlz);
result = dns_sdlz_setdb(dlzdatabase, rdclass, name, &db);
if (result != ISC_R_SUCCESS)
- return result;
+ return (result);
result = dns_zone_dlzpostload(zone, db);
dns_db_detach(&db);
- return result;
+ return (result);
}
isc_boolean_t
@@ -1462,15 +1656,12 @@ ns_zone_reusable(dns_zone_t *zone, const cfg_obj_t *zconfig) {
const cfg_obj_t *obj = NULL;
const char *cfilename;
const char *zfilename;
+ dns_zone_t *raw = NULL;
+ isc_boolean_t has_raw;
+ dns_zonetype_t ztype;
zoptions = cfg_tuple_get(zconfig, "options");
- if (zonetype_fromconfig(zoptions) != dns_zone_gettype(zone)) {
- dns_zone_log(zone, ISC_LOG_DEBUG(1),
- "not reusable: type mismatch");
- return (ISC_FALSE);
- }
-
/*
* We always reconfigure a static-stub zone for simplicity, assuming
* the amount of data to be loaded is small.
@@ -1481,18 +1672,49 @@ ns_zone_reusable(dns_zone_t *zone, const cfg_obj_t *zconfig) {
return (ISC_FALSE);
}
+ /* If there's a raw zone, use that for filename and type comparison */
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ zfilename = dns_zone_getfile(raw);
+ ztype = dns_zone_gettype(raw);
+ dns_zone_detach(&raw);
+ has_raw = ISC_TRUE;
+ } else {
+ zfilename = dns_zone_getfile(zone);
+ ztype = dns_zone_gettype(zone);
+ has_raw = ISC_FALSE;
+ }
+
+ obj = NULL;
+ (void)cfg_map_get(zoptions, "inline-signing", &obj);
+ if ((obj == NULL || !cfg_obj_asboolean(obj)) && has_raw) {
+ dns_zone_log(zone, ISC_LOG_DEBUG(1),
+ "not reusable: old zone was inline-signing");
+ return (ISC_FALSE);
+ } else if ((obj != NULL && cfg_obj_asboolean(obj)) && !has_raw) {
+ dns_zone_log(zone, ISC_LOG_DEBUG(1),
+ "not reusable: old zone was not inline-signing");
+ return (ISC_FALSE);
+ }
+
+ if (zonetype_fromconfig(zoptions) != ztype) {
+ dns_zone_log(zone, ISC_LOG_DEBUG(1),
+ "not reusable: type mismatch");
+ return (ISC_FALSE);
+ }
+
obj = NULL;
(void)cfg_map_get(zoptions, "file", &obj);
if (obj != NULL)
cfilename = cfg_obj_asstring(obj);
else
cfilename = NULL;
- zfilename = dns_zone_getfile(zone);
if (!((cfilename == NULL && zfilename == NULL) ||
(cfilename != NULL && zfilename != NULL &&
- strcmp(cfilename, zfilename) == 0))) {
+ strcmp(cfilename, zfilename) == 0)))
+ {
dns_zone_log(zone, ISC_LOG_DEBUG(1),
- "not reusable: filename mismatch");
+ "not reusable: filename mismatch");
return (ISC_FALSE);
}
diff --git a/contrib/bind9/bin/nsupdate/Makefile.in b/contrib/bind9/bin/nsupdate/Makefile.in
index f62ee348663c..09e6c14052e8 100644
--- a/contrib/bind9/bin/nsupdate/Makefile.in
+++ b/contrib/bind9/bin/nsupdate/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2006-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2006-2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000-2002 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -23,6 +23,8 @@ top_srcdir = @top_srcdir@
@BIND9_MAKE_INCLUDES@
+READLINE_LIB = @READLINE_LIB@
+
CINCLUDES = ${LWRES_INCLUDES} ${DNS_INCLUDES} ${BIND9_INCLUDES} \
${ISC_INCLUDES} ${ISCCFG_INCLUDES} @DST_GSSAPI_INC@
@@ -72,7 +74,7 @@ nsupdate.@O@: nsupdate.c
-c ${srcdir}/nsupdate.c
nsupdate@EXEEXT@: nsupdate.@O@ ${UOBJS} ${DEPLIBS}
- export BASEOBJS="nsupdate.@O@ ${UOBJS}"; \
+ export BASEOBJS="nsupdate.@O@ ${READLINE_LIB} ${UOBJS}"; \
${FINALBUILDCMD}
doc man:: ${MANOBJS}
diff --git a/contrib/bind9/bin/nsupdate/nsupdate.1 b/contrib/bind9/bin/nsupdate/nsupdate.1
index 58675975233e..1e2dcaffbc30 100644
--- a/contrib/bind9/bin/nsupdate/nsupdate.1
+++ b/contrib/bind9/bin/nsupdate/nsupdate.1
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000-2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -263,20 +263,20 @@ rather than the default realm in
\fIkrb5.conf\fR. If no realm is specified the saved realm is cleared.
.RE
.PP
-\fBprereq nxdomain\fR {domain\-name}
+\fB[prereq]\fR\fB nxdomain\fR {domain\-name}
.RS 4
Requires that no resource record of any type exists with name
\fIdomain\-name\fR.
.RE
.PP
-\fBprereq yxdomain\fR {domain\-name}
+\fB[prereq]\fR\fB yxdomain\fR {domain\-name}
.RS 4
Requires that
\fIdomain\-name\fR
exists (has as at least one resource record, of any type).
.RE
.PP
-\fBprereq nxrrset\fR {domain\-name} [class] {type}
+\fB[prereq]\fR\fB nxrrset\fR {domain\-name} [class] {type}
.RS 4
Requires that no resource record exists of the specified
\fItype\fR,
@@ -287,7 +287,7 @@ and
is omitted, IN (internet) is assumed.
.RE
.PP
-\fBprereq yxrrset\fR {domain\-name} [class] {type}
+\fB[prereq]\fR\fB yxrrset\fR {domain\-name} [class] {type}
.RS 4
This requires that a resource record of the specified
\fItype\fR,
@@ -299,7 +299,7 @@ must exist. If
is omitted, IN (internet) is assumed.
.RE
.PP
-\fBprereq yxrrset\fR {domain\-name} [class] {type} {data...}
+\fB[prereq]\fR\fB yxrrset\fR {domain\-name} [class] {type} {data...}
.RS 4
The
\fIdata\fR
@@ -315,7 +315,7 @@ are combined to form a set of RRs. This set of RRs must exactly match the set of
are written in the standard text representation of the resource record's RDATA.
.RE
.PP
-\fBupdate delete\fR {domain\-name} [ttl] [class] [type\ [data...]]
+\fB[update]\fR\fB del\fR\fB[ete]\fR {domain\-name} [ttl] [class] [type\ [data...]]
.RS 4
Deletes any resource records named
\fIdomain\-name\fR. If
@@ -329,7 +329,7 @@ is not supplied. The
is ignored, and is only allowed for compatibility.
.RE
.PP
-\fBupdate add\fR {domain\-name} {ttl} [class] {type} {data...}
+\fB[update]\fR\fB add\fR {domain\-name} {ttl} [class] {type} {data...}
.RS 4
Adds a new resource record with the specified
\fIttl\fR,
@@ -435,7 +435,7 @@ RFC 2931,
.PP
The TSIG key is redundantly stored in two separate files. This is a consequence of nsupdate using the DST library for its cryptographic operations, and may change in future releases.
.SH "COPYRIGHT"
-Copyright \(co 2004\-2010 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004\-2012 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000\-2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/bin/nsupdate/nsupdate.c b/contrib/bind9/bin/nsupdate/nsupdate.c
index 1f5e3e96c9ef..e96c075b67c4 100644
--- a/contrib/bind9/bin/nsupdate/nsupdate.c
+++ b/contrib/bind9/bin/nsupdate/nsupdate.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsupdate.c,v 1.193.12.4 2011/11/03 04:30:09 each Exp $ */
+/* $Id$ */
/*! \file */
@@ -85,6 +85,10 @@
#endif
#include <bind9/getaddresses.h>
+#if defined(HAVE_READLINE)
+#include <readline/readline.h>
+#include <readline/history.h>
+#endif
#ifdef HAVE_ADDRINFO
#ifdef HAVE_GETADDRINFO
@@ -930,7 +934,7 @@ get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr) {
INSIST(count == 1);
}
-#define PARSE_ARGS_FMT "dDML:y:ghlovk:p:rR::t:u:"
+#define PARSE_ARGS_FMT "dDML:y:ghlovk:p:r:R::t:u:"
static void
pre_parse_args(int argc, char **argv) {
@@ -1805,6 +1809,8 @@ evaluate_update(char *cmdline) {
}
if (strcasecmp(word, "delete") == 0)
isdelete = ISC_TRUE;
+ else if (strcasecmp(word, "del") == 0)
+ isdelete = ISC_TRUE;
else if (strcasecmp(word, "add") == 0)
isdelete = ISC_FALSE;
else {
@@ -1883,35 +1889,13 @@ show_message(FILE *stream, dns_message_t *msg, const char *description) {
isc_buffer_free(&buf);
}
-
static isc_uint16_t
-get_next_command(void) {
- char cmdlinebuf[MAXCMD];
- char *cmdline;
+do_next_command(char *cmdline) {
char *word;
- char *tmp;
-
- ddebug("get_next_command()");
- if (interactive) {
- fprintf(stdout, "> ");
- fflush(stdout);
- }
- isc_app_block();
- cmdline = fgets(cmdlinebuf, MAXCMD, input);
- isc_app_unblock();
- if (cmdline == NULL)
- return (STATUS_QUIT);
-
- /*
- * Normalize input by removing any eol.
- */
- tmp = cmdline;
- (void)nsu_strsep(&tmp, "\r\n");
+ ddebug("do_next_command()");
word = nsu_strsep(&cmdline, " \t\r\n");
- if (feof(input))
- return (STATUS_QUIT);
if (word == NULL || *word == 0)
return (STATUS_SEND);
if (word[0] == ';')
@@ -1920,8 +1904,22 @@ get_next_command(void) {
return (STATUS_QUIT);
if (strcasecmp(word, "prereq") == 0)
return (evaluate_prereq(cmdline));
+ if (strcasecmp(word, "nxdomain") == 0)
+ return (make_prereq(cmdline, ISC_FALSE, ISC_FALSE));
+ if (strcasecmp(word, "yxdomain") == 0)
+ return (make_prereq(cmdline, ISC_TRUE, ISC_FALSE));
+ if (strcasecmp(word, "nxrrset") == 0)
+ return (make_prereq(cmdline, ISC_FALSE, ISC_TRUE));
+ if (strcasecmp(word, "yxrrset") == 0)
+ return (make_prereq(cmdline, ISC_TRUE, ISC_TRUE));
if (strcasecmp(word, "update") == 0)
return (evaluate_update(cmdline));
+ if (strcasecmp(word, "delete") == 0)
+ return (update_addordelete(cmdline, ISC_TRUE));
+ if (strcasecmp(word, "del") == 0)
+ return (update_addordelete(cmdline, ISC_TRUE));
+ if (strcasecmp(word, "add") == 0)
+ return (update_addordelete(cmdline, ISC_FALSE));
if (strcasecmp(word, "server") == 0)
return (evaluate_server(cmdline));
if (strcasecmp(word, "local") == 0)
@@ -1988,18 +1986,55 @@ get_next_command(void) {
"oldgsstsig (use Microsoft's GSS_TSIG to sign the request)\n"
"zone name (set the zone to be updated)\n"
"class CLASS (set the zone's DNS class, e.g. IN (default), CH)\n"
-"prereq nxdomain name (does this name not exist)\n"
-"prereq yxdomain name (does this name exist)\n"
-"prereq nxrrset .... (does this RRset exist)\n"
-"prereq yxrrset .... (does this RRset not exist)\n"
-"update add .... (add the given record to the zone)\n"
-"update delete .... (remove the given record(s) from the zone)\n");
+"[prereq] nxdomain name (does this name not exist)\n"
+"[prereq] yxdomain name (does this name exist)\n"
+"[prereq] nxrrset .... (does this RRset exist)\n"
+"[prereq] yxrrset .... (does this RRset not exist)\n"
+"[update] add .... (add the given record to the zone)\n"
+"[update] del[ete] .... (remove the given record(s) from the zone)\n");
return (STATUS_MORE);
}
fprintf(stderr, "incorrect section name: %s\n", word);
return (STATUS_SYNTAX);
}
+static isc_uint16_t
+get_next_command(void) {
+ isc_uint16_t result = STATUS_QUIT;
+ char cmdlinebuf[MAXCMD];
+ char *cmdline;
+
+ isc_app_block();
+ if (interactive) {
+#ifdef HAVE_READLINE
+ cmdline = readline("> ");
+ add_history(cmdline);
+#else
+ fprintf(stdout, "> ");
+ fflush(stdout);
+ cmdline = fgets(cmdlinebuf, MAXCMD, input);
+#endif
+ } else
+ cmdline = fgets(cmdlinebuf, MAXCMD, input);
+ isc_app_unblock();
+
+ if (cmdline != NULL) {
+ char *tmp = cmdline;
+
+ /*
+ * Normalize input by removing any eol as readline()
+ * removes eol but fgets doesn't.
+ */
+ (void)nsu_strsep(&tmp, "\r\n");
+ result = do_next_command(cmdline);
+ }
+#ifdef HAVE_READLINE
+ if (interactive)
+ free(cmdline);
+#endif
+ return (result);
+}
+
static isc_boolean_t
user_interaction(void) {
isc_uint16_t result = STATUS_MORE;
diff --git a/contrib/bind9/bin/nsupdate/nsupdate.docbook b/contrib/bind9/bin/nsupdate/nsupdate.docbook
index 6378df7a7f1e..c54211cc87a1 100644
--- a/contrib/bind9/bin/nsupdate/nsupdate.docbook
+++ b/contrib/bind9/bin/nsupdate/nsupdate.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: nsupdate.docbook,v 1.44 2010/07/09 23:46:51 tbox Exp $ -->
+<!-- $Id$ -->
<refentry id="man.nsupdate">
<refentryinfo>
<date>Aug 25, 2009</date>
@@ -42,6 +42,8 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
+ <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -424,7 +426,7 @@
<varlistentry>
<term>
- <command>prereq nxdomain</command>
+ <command><optional>prereq</optional> nxdomain</command>
<arg choice="req">domain-name</arg>
</term>
<listitem>
@@ -438,7 +440,7 @@
<varlistentry>
<term>
- <command>prereq yxdomain</command>
+ <command><optional>prereq</optional> yxdomain</command>
<arg choice="req">domain-name</arg>
</term>
<listitem>
@@ -452,7 +454,7 @@
<varlistentry>
<term>
- <command>prereq nxrrset</command>
+ <command><optional>prereq</optional> nxrrset</command>
<arg choice="req">domain-name</arg>
<arg choice="opt">class</arg>
<arg choice="req">type</arg>
@@ -474,7 +476,7 @@
<varlistentry>
<term>
- <command>prereq yxrrset</command>
+ <command><optional>prereq</optional> yxrrset</command>
<arg choice="req">domain-name</arg>
<arg choice="opt">class</arg>
<arg choice="req">type</arg>
@@ -496,7 +498,7 @@
<varlistentry>
<term>
- <command>prereq yxrrset</command>
+ <command><optional>prereq</optional> yxrrset</command>
<arg choice="req">domain-name</arg>
<arg choice="opt">class</arg>
<arg choice="req">type</arg>
@@ -530,7 +532,7 @@
<varlistentry>
<term>
- <command>update delete</command>
+ <command><optional>update</optional> del<optional>ete</optional></command>
<arg choice="req">domain-name</arg>
<arg choice="opt">ttl</arg>
<arg choice="opt">class</arg>
@@ -556,7 +558,7 @@
<varlistentry>
<term>
- <command>update add</command>
+ <command><optional>update</optional> add</command>
<arg choice="req">domain-name</arg>
<arg choice="req">ttl</arg>
<arg choice="opt">class</arg>
diff --git a/contrib/bind9/bin/nsupdate/nsupdate.html b/contrib/bind9/bin/nsupdate/nsupdate.html
index 5c108e374611..276d4af6fbe1 100644
--- a/contrib/bind9/bin/nsupdate/nsupdate.html
+++ b/contrib/bind9/bin/nsupdate/nsupdate.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -32,7 +32,7 @@
<div class="cmdsynopsis"><p><code class="command">nsupdate</code> [<code class="option">-d</code>] [<code class="option">-D</code>] [[<code class="option">-g</code>] | [<code class="option">-o</code>] | [<code class="option">-l</code>] | [<code class="option">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></code>] | [<code class="option">-k <em class="replaceable"><code>keyfile</code></em></code>]] [<code class="option">-t <em class="replaceable"><code>timeout</code></em></code>] [<code class="option">-u <em class="replaceable"><code>udptimeout</code></em></code>] [<code class="option">-r <em class="replaceable"><code>udpretries</code></em></code>] [<code class="option">-R <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-v</code>] [filename]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543459"></a><h2>DESCRIPTION</h2>
+<a name="id2543464"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">nsupdate</strong></span>
is used to submit Dynamic DNS Update requests as defined in RFC 2136
to a name server.
@@ -192,7 +192,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543790"></a><h2>INPUT FORMAT</h2>
+<a name="id2543796"></a><h2>INPUT FORMAT</h2>
<p><span><strong class="command">nsupdate</strong></span>
reads input from
<em class="parameter"><code>filename</code></em>
@@ -331,7 +331,7 @@
realm is specified the saved realm is cleared.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq nxdomain</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] nxdomain</strong></span>
{domain-name}
</span></dt>
<dd><p>
@@ -339,7 +339,7 @@
<em class="parameter"><code>domain-name</code></em>.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq yxdomain</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] yxdomain</strong></span>
{domain-name}
</span></dt>
<dd><p>
@@ -348,7 +348,7 @@
exists (has as at least one resource record, of any type).
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq nxrrset</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] nxrrset</strong></span>
{domain-name}
[class]
{type}
@@ -364,7 +364,7 @@
is omitted, IN (internet) is assumed.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq yxrrset</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] yxrrset</strong></span>
{domain-name}
[class]
{type}
@@ -381,7 +381,7 @@
is omitted, IN (internet) is assumed.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq yxrrset</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] yxrrset</strong></span>
{domain-name}
[class]
{type}
@@ -410,7 +410,7 @@
RDATA.
</p></dd>
<dt><span class="term">
- <span><strong class="command">update delete</strong></span>
+ <span><strong class="command">[<span class="optional">update</span>] del[<span class="optional">ete</span>]</strong></span>
{domain-name}
[ttl]
[class]
@@ -431,7 +431,7 @@
is ignored, and is only allowed for compatibility.
</p></dd>
<dt><span class="term">
- <span><strong class="command">update add</strong></span>
+ <span><strong class="command">[<span class="optional">update</span>] add</strong></span>
{domain-name}
{ttl}
[class]
@@ -480,7 +480,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544702"></a><h2>EXAMPLES</h2>
+<a name="id2544725"></a><h2>EXAMPLES</h2>
<p>
The examples below show how
<span><strong class="command">nsupdate</strong></span>
@@ -534,7 +534,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544746"></a><h2>FILES</h2>
+<a name="id2544769"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="constant">/etc/resolv.conf</code></span></dt>
<dd><p>
@@ -557,7 +557,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2544829"></a><h2>SEE ALSO</h2>
+<a name="id2542121"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">RFC 2136</em>,
<em class="citetitle">RFC 3007</em>,
@@ -572,7 +572,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2542156"></a><h2>BUGS</h2>
+<a name="id2542179"></a><h2>BUGS</h2>
<p>
The TSIG key is redundantly stored in two separate files.
This is a consequence of nsupdate using the DST library
diff --git a/contrib/bind9/bin/rndc/rndc.c b/contrib/bind9/bin/rndc/rndc.c
index 5811cfa141fa..e3e6525f5c34 100644
--- a/contrib/bind9/bin/rndc/rndc.c
+++ b/contrib/bind9/bin/rndc/rndc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rndc.c,v 1.131.20.3 2011/11/03 22:06:31 each Exp $ */
+/* $Id$ */
/*! \file */
@@ -114,6 +114,11 @@ command is one of the following:\n\
thaw Enable updates to all dynamic zones and reload them.\n\
thaw zone [class [view]]\n\
Enable updates to a frozen dynamic zone and reload it.\n\
+ sync [-clean] Dump changes to all dynamic zones to disk, and optionally\n\
+ remove their journal files.\n\
+ sync [-clean] zone [class [view]]\n\
+ Dump a single zone's changes to disk, and optionally\n\
+ remove its journal file.\n\
notify zone [class [view]]\n\
Resend NOTIFY messages for the zone.\n\
reconfig Reload configuration file and new zones only.\n\
@@ -122,7 +127,8 @@ command is one of the following:\n\
loadkeys zone [class [view]]\n\
Update keys without signing immediately.\n\
stats Write server statistics to the statistics file.\n\
- querylog Toggle query logging.\n\
+ querylog newstate\n\
+ Enable / disable query logging.\n\
dumpdb [-all|-cache|-zones] [view ...]\n\
Dump cache(s) to the dump file (named_dump.db).\n\
secroots [view ...]\n\
@@ -140,6 +146,8 @@ command is one of the following:\n\
flush [view] Flushes the server's cache for a view.\n\
flushname name [view]\n\
Flush the given name from the server's cache(s)\n\
+ flushtree name [view]\n\
+ Flush all names under the given name from the server's cache(s)\n\
status Display status of the server.\n\
recursing Dump the queries that are currently recursing (named.recursing)\n\
tsig-list List all currently active TSIG keys, including both statically\n\
@@ -152,6 +160,20 @@ command is one of the following:\n\
Add zone to given view. Requires new-zone-file option.\n\
delzone [\"file\"] zone [class [view]]\n\
Removes zone from given view. Requires new-zone-file option.\n\
+ signing -list zone [class [view]]\n\
+ List the private records showing the state of DNSSEC\n\
+ signing in the given zone.\n\
+ signing -clear <keyid>/<algorithm> zone [class [view]]\n\
+ Remove the private record that indicating the given key\n\
+ has finished signing the given zone.\n\
+ signing -clear all zone [class [view]]\n\
+ Remove the private records for all keys that have\n\
+ finished signing the given zone.\n\
+ signing -nsec3param none zone [class [view]]\n\
+ Remove NSEC3 chains from zone.\n\
+ signing -nsec3param hash flags iterations salt zone [class [view]]\n\
+ Add NSEC3 chain to zone if already signed.\n\
+ Prime zone with NSEC3 chain if not yet signed.\n\
*restart Restart the server.\n\
\n\
* == not yet implemented\n\
@@ -771,6 +793,7 @@ main(int argc, char **argv) {
program, isc_commandline_option);
usage(1);
}
+ /* FALLTHROUGH */
case 'h':
usage(0);
break;
diff --git a/contrib/bind9/bin/tools/genrandom.8 b/contrib/bind9/bin/tools/genrandom.8
index 38c1ccd67c24..fd9ebf46eb80 100644
--- a/contrib/bind9/bin/tools/genrandom.8
+++ b/contrib/bind9/bin/tools/genrandom.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2009-2011 Internet Systems Consortium, Inc. ("ISC")
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -65,5 +65,5 @@ The file name into which random data should be written.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2009\-2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2009\-2011 Internet Systems Consortium, Inc. ("ISC")
.br
diff --git a/contrib/bind9/bin/tools/genrandom.c b/contrib/bind9/bin/tools/genrandom.c
index 675e5043d601..0d7eb726d6de 100644
--- a/contrib/bind9/bin/tools/genrandom.c
+++ b/contrib/bind9/bin/tools/genrandom.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -93,6 +93,7 @@ main(int argc, char **argv) {
if (isc_commandline_option != '?')
fprintf(stderr, "%s: invalid argument -%c\n",
program, isc_commandline_option);
+ /* FALLTHROUGH */
case 'h':
usage();
diff --git a/contrib/bind9/bin/tools/genrandom.docbook b/contrib/bind9/bin/tools/genrandom.docbook
index 730aab99bb56..33d5cf71d815 100644
--- a/contrib/bind9/bin/tools/genrandom.docbook
+++ b/contrib/bind9/bin/tools/genrandom.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2009-2011 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: genrandom.docbook,v 1.8 2011/08/08 23:46:41 tbox Exp $ -->
<refentry id="man.genrandom">
<refentryinfo>
<date>Feb 19, 2009</date>
@@ -39,7 +39,6 @@
<year>2009</year>
<year>2010</year>
<year>2011</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
</docinfo>
diff --git a/contrib/bind9/bin/tools/genrandom.html b/contrib/bind9/bin/tools/genrandom.html
index f69b7ca2da21..6b7043407973 100644
--- a/contrib/bind9/bin/tools/genrandom.html
+++ b/contrib/bind9/bin/tools/genrandom.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2009-2011 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -31,7 +31,7 @@
<div class="cmdsynopsis"><p><code class="command">genrandom</code> [<code class="option">-n <em class="replaceable"><code>number</code></em></code>] {<em class="replaceable"><code>size</code></em>} {<em class="replaceable"><code>filename</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543370"></a><h2>DESCRIPTION</h2>
+<a name="id2543368"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">genrandom</strong></span>
generates a file or a set of files containing a specified quantity
@@ -40,7 +40,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543383"></a><h2>ARGUMENTS</h2>
+<a name="id2543381"></a><h2>ARGUMENTS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-n <em class="replaceable"><code>number</code></em></span></dt>
<dd><p>
@@ -58,14 +58,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543444"></a><h2>SEE ALSO</h2>
+<a name="id2543442"></a><h2>SEE ALSO</h2>
<p>
<span class="citerefentry"><span class="refentrytitle">rand</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">arc4random</span>(3)</span>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543470"></a><h2>AUTHOR</h2>
+<a name="id2543468"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/tools/isc-hmac-fixup.8 b/contrib/bind9/bin/tools/isc-hmac-fixup.8
index c02ed03f4fb0..6364e54d94b8 100644
--- a/contrib/bind9/bin/tools/isc-hmac-fixup.8
+++ b/contrib/bind9/bin/tools/isc-hmac-fixup.8
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2010, 2013 Internet Systems Consortium, Inc. ("ISC")
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -23,7 +23,7 @@
.\" Manual: BIND9
.\" Source: BIND9
.\"
-.TH "ISC\-HMAC\-FIXUP" "1" "January 5, 2010" "BIND9" "BIND9"
+.TH "ISC\-HMAC\-FIXUP" "8" "January 5, 2010" "BIND9" "BIND9"
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
@@ -57,5 +57,5 @@ RFC 2104.
.PP
Internet Systems Consortium
.SH "COPYRIGHT"
-Copyright \(co 2010 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2010, 2013 Internet Systems Consortium, Inc. ("ISC")
.br
diff --git a/contrib/bind9/bin/tools/isc-hmac-fixup.docbook b/contrib/bind9/bin/tools/isc-hmac-fixup.docbook
index c298a85861d7..cc72373352c4 100644
--- a/contrib/bind9/bin/tools/isc-hmac-fixup.docbook
+++ b/contrib/bind9/bin/tools/isc-hmac-fixup.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2010, 2013 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -25,7 +25,7 @@
<refmeta>
<refentrytitle><application>isc-hmac-fixup</application></refentrytitle>
- <manvolnum>1</manvolnum>
+ <manvolnum>8</manvolnum>
<refmiscinfo>BIND9</refmiscinfo>
</refmeta>
@@ -37,6 +37,7 @@
<docinfo>
<copyright>
<year>2010</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
</docinfo>
diff --git a/contrib/bind9/bin/tools/isc-hmac-fixup.html b/contrib/bind9/bin/tools/isc-hmac-fixup.html
index d39ebf0fa166..f5ab4b5a2054 100644
--- a/contrib/bind9/bin/tools/isc-hmac-fixup.html
+++ b/contrib/bind9/bin/tools/isc-hmac-fixup.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2010, 2013 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -31,7 +31,7 @@
<div class="cmdsynopsis"><p><code class="command">isc-hmac-fixup</code> {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>secret</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543352"></a><h2>DESCRIPTION</h2>
+<a name="id2543355"></a><h2>DESCRIPTION</h2>
<p>
Versions of BIND 9 up to and including BIND 9.6 had a bug causing
HMAC-SHA* TSIG keys which were longer than the digest length of the
@@ -57,7 +57,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543376"></a><h2>SECURITY CONSIDERATIONS</h2>
+<a name="id2543379"></a><h2>SECURITY CONSIDERATIONS</h2>
<p>
Secrets that have been converted by <span><strong class="command">isc-hmac-fixup</strong></span>
are shortened, but as this is how the HMAC protocol works in
@@ -68,14 +68,14 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543389"></a><h2>SEE ALSO</h2>
+<a name="id2543393"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2104</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543406"></a><h2>AUTHOR</h2>
+<a name="id2543410"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/bin/tools/nsec3hash.c b/contrib/bind9/bin/tools/nsec3hash.c
index 6a54163e689f..57f24c251eee 100644
--- a/contrib/bind9/bin/tools/nsec3hash.c
+++ b/contrib/bind9/bin/tools/nsec3hash.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2008, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2006, 2008, 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: nsec3hash.c,v 1.8 2011/11/02 23:46:24 tbox Exp $ */
#include <config.h>
diff --git a/contrib/bind9/config.h.in b/contrib/bind9/config.h.in
index 42d7a21fa5f4..a6ddcb1ed55d 100644
--- a/contrib/bind9/config.h.in
+++ b/contrib/bind9/config.h.in
@@ -283,9 +283,18 @@ int sigwait(const unsigned int *set, int *sig);
/* Define to 1 if you have the <net/if6.h> header file. */
#undef HAVE_NET_IF6_H
+/* Define if your OpenSSL version supports ECDSA. */
+#undef HAVE_OPENSSL_ECDSA
+
/* Define if your OpenSSL version supports GOST. */
#undef HAVE_OPENSSL_GOST
+/* Define to 1 if you have the `readline' function. */
+#undef HAVE_READLINE
+
+/* Define to 1 if you have the <regex.h> header file. */
+#undef HAVE_REGEX_H
+
/* Define to 1 if you have the `setegid' function. */
#undef HAVE_SETEGID
@@ -355,6 +364,9 @@ int sigwait(const unsigned int *set, int *sig);
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
/* return type of gai_strerror */
#undef IRS_GAISTRERROR_RETURN_T
@@ -367,6 +379,10 @@ int sigwait(const unsigned int *set, int *sig);
/* Define to allow building of objects for dlopen(). */
#undef ISC_DLZ_DLOPEN
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
/* Defined if extern char *optarg is not declared. */
#undef NEED_OPTARG
@@ -374,6 +390,9 @@ int sigwait(const unsigned int *set, int *sig);
*/
#undef NEED_SECURE_DIRECTORY
+/* Use the new XML schema for statistics */
+#undef NEWSTATS
+
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
diff --git a/contrib/bind9/config.threads.in b/contrib/bind9/config.threads.in
index a56ca37d4830..3f1c936fd521 100644
--- a/contrib/bind9/config.threads.in
+++ b/contrib/bind9/config.threads.in
@@ -43,8 +43,13 @@ case $host in
# OpenBSD users have reported that named dumps core on
# startup when built with threads.
use_threads=false ;;
-*-freebsd*)
+[*-freebsd[1234567].*])
+ # Threads are broken at least up to FreeBSD 4.11.
+ # FreeBSD 5, 6 and 7 we have never officially supported threads
+ # on. YMMV
use_threads=false ;;
+*-freebsd*)
+ use_threads=true ;;
[*-bsdi[234]*])
# Thread signals do not work reliably on some versions of BSD/OS.
use_threads=false ;;
@@ -55,12 +60,16 @@ case $host in
# Linux kernels produce unusable core dumps from multithreaded
# programs, and because of limitations in setuid().
use_threads=false ;;
+*-darwin[[123456789]].*)
+ use_threads=false ;;
+*-darwin*.*)
+ use_threads=true ;;
*)
use_threads=false ;;
esac
AC_ARG_ENABLE(threads,
- [ --enable-threads enable multithreading])
+ [ --enable-threads enable multithreading])
case "$enable_threads" in
yes)
use_threads=true
diff --git a/contrib/bind9/configure.in b/contrib/bind9/configure.in
index 0567addc186e..8e543d85fdda 100644
--- a/contrib/bind9/configure.in
+++ b/contrib/bind9/configure.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -18,12 +18,13 @@ AC_DIVERT_PUSH(1)dnl
esyscmd([sed "s/^/# /" COPYRIGHT])dnl
AC_DIVERT_POP()dnl
-AC_REVISION($Revision: 1.512.8.15 $)
+AC_REVISION($Revision: 1.533 $)
AC_INIT(lib/dns/name.c)
AC_PREREQ(2.59)
AC_CONFIG_HEADER(config.h)
+AC_CONFIG_MACRO_DIR([libtool.m4])
AC_CANONICAL_HOST
@@ -36,7 +37,7 @@ case $build_os in
sunos*)
# Just set the maximum command line length for sunos as it otherwise
# takes a exceptionally long time to work it out. Required for libtool.
-
+
lt_cv_sys_max_cmd_len=4096;
;;
esac
@@ -62,14 +63,13 @@ It is available from http://www.isc.org as a separate download.])
;;
esac
-AC_ARG_ENABLE(developer, [ --enable-developer enable developer build settings])
+AC_ARG_ENABLE(developer, [ --enable-developer enable developer build settings])
case "$enable_developer" in
yes)
+ STD_CDEFINES="$STD_CDEFINES -DISC_LIST_CHECKINIT=1"
test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
test "${with_atf+set}" = set || with_atf=yes
test "${enable_filter_aaaa+set}" = set || enable_filter_aaaa=yes
- test "${enable_rpz_nsip+set}" = set || enable_rpz_nsip=yes
- test "${enable_rpz_nsdname+set}" = set || enable_rpz_nsdname=yes
test "${with_dlz_filesystem+set}" = set || with_dlz_filesystem=yes
case "$host" in
*-darwin*)
@@ -137,6 +137,73 @@ AC_PATH_PROGS(PERL, perl5 perl)
AC_SUBST(PERL)
#
+# Python is also optional; it is used by the tools in bin/python.
+# If python is unavailable, we simply don't build those.
+#
+AC_ARG_WITH(python,
+[ --with-python=PATH Specify path to python interpreter],
+ use_python="$withval", use_python="unspec")
+
+case "$use_python" in
+ no)
+ AC_MSG_RESULT(disabled)
+ ;;
+ unspec|yes|*)
+ case "$use_python" in
+ unspec|yes|'')
+ AC_PATH_PROGS(PYTHON, python)
+ ;;
+ *)
+ AC_PATH_PROGS(PYTHON, $use_python)
+ ;;
+ esac
+ if test "X$PYTHON" == "X"
+ then
+ case "$use_python" in
+ unspec)
+ AC_MSG_RESULT(disabled)
+ ;;
+ yes|*)
+ AC_MSG_ERROR([missing python])
+ ;;
+ esac
+ break
+ fi
+ testscript='try: import argparse
+except: exit(1)'
+ AC_MSG_CHECKING([python module 'argparse'])
+ if $PYTHON -c "$testscript"; then
+ AC_MSG_RESULT([found, using $PYTHON])
+ else
+ case "$use_python" in
+ unspec)
+ PYTHON=""
+ AC_SUBST(CHECKDS)
+ AC_SUBST(COVERAGE)
+ AC_MSG_RESULT([not found, python disabled])
+ ;;
+ yes)
+ AC_MSG_RESULT([no found])
+ AC_MSG_ERROR([python 'argparse' module not supported])
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+PYTHON_TOOLS=''
+CHECKDS=''
+COVERAGE=''
+if test "X$PYTHON" != "X"; then
+ PYTHON_TOOLS=python
+ CHECKDS=checkds
+ COVERAGE=coverage
+fi
+AC_SUBST(CHECKDS)
+AC_SUBST(COVERAGE)
+AC_SUBST(PYTHON_TOOLS)
+
+#
# Special processing of paths depending on whether --prefix,
# --sysconfdir or --localstatedir arguments were given. What's
# desired is some compatibility with the way previous versions
@@ -298,7 +365,7 @@ esac
AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
+AC_CHECK_HEADERS(fcntl.h regex.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
[$ac_includes_default
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
@@ -322,17 +389,15 @@ AC_CHECK_FUNCS(setegid setresgid)
# is reported to not support "static inline" (RT #1212).
#
AC_MSG_CHECKING(for static inline breakage)
-AC_TRY_COMPILE(, [
- foo1();
- }
-
+AC_TRY_COMPILE([
static inline int foo1() {
return 0;
}
static inline int foo2() {
return foo1();
- ],
+ }
+ ], [foo1();],
[AC_MSG_RESULT(no)],
[AC_MSG_RESULT(yes)
AC_DEFINE(inline, ,[Define to empty if your compiler does not support "static inline".])])
@@ -401,6 +466,19 @@ lifconf.lifc_len = 0;
AC_SUBST(ISC_PLATFORM_HAVELIFCONF)
#
+# check if we want the new statistics
+#
+AC_ARG_ENABLE(newstats,
+ [ --enable-newstats use the new statistics])
+case "$enable_newstats" in
+yes)
+ AC_DEFINE(NEWSTATS, 1, [Use the new XML schema for statistics])
+ ;;
+*)
+ ;;
+esac
+
+#
# check if we have kqueue
#
AC_ARG_ENABLE(kqueue,
@@ -445,6 +523,8 @@ int main() {
[AC_MSG_RESULT(yes)
ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"],
[AC_MSG_RESULT(no)
+ ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"],
+ [AC_MSG_RESULT(no)
ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"])
;;
yes)
@@ -550,12 +630,16 @@ case "$use_openssl" in
AC_MSG_RESULT(no)
DST_OPENSSL_INC=""
USE_OPENSSL=""
+ OPENSSLGOSTLINKOBJS=""
+ OPENSSLGOSTLINKSRS=""
OPENSSLLINKOBJS=""
OPENSSLLINKSRCS=""
;;
auto)
DST_OPENSSL_INC=""
USE_OPENSSL=""
+ OPENSSLGOSTLINKOBJS=""
+ OPENSSLGOSTLINKSRS=""
OPENSSLLINKOBJS=""
OPENSSLLINKSRCS=""
AC_MSG_ERROR(
@@ -658,7 +742,7 @@ shared library configuration (e.g., LD_LIBRARY_PATH).)],
],
[AC_MSG_RESULT(assuming it does work on target platform)]
)
-
+
AC_ARG_ENABLE(openssl-version-check,
[AC_HELP_STRING([--enable-openssl-version-check],
[Check OpenSSL Version @<:@default=yes@:>@])])
@@ -691,20 +775,20 @@ no)
;;
esac
- AC_MSG_CHECKING(for OpenSSL DSA support)
- if test -f $use_openssl/include/openssl/dsa.h
- then
- AC_DEFINE(HAVE_OPENSSL_DSA)
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
+ AC_MSG_CHECKING(for OpenSSL DSA support)
+ if test -f $use_openssl/include/openssl/dsa.h
+ then
+ AC_DEFINE(HAVE_OPENSSL_DSA)
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
- AC_CHECK_FUNCS(EVP_sha256 EVP_sha384 EVP_sha512)
+ AC_CHECK_FUNCS(EVP_sha256 EVP_sha384 EVP_sha512)
- AC_MSG_CHECKING(for OpenSSL ECDSA support)
- have_ecdsa=""
- AC_TRY_RUN([
+ AC_MSG_CHECKING(for OpenSSL ECDSA support)
+ have_ecdsa=""
+ AC_TRY_RUN([
#include <stdio.h>
#include <openssl/ecdsa.h>
#include <openssl/objects.h>
@@ -721,22 +805,42 @@ int main() {
return (0);
}
],
- [AC_MSG_RESULT(yes)
- have_ecdsa="yes"],
- [AC_MSG_RESULT(no)
- have_ecdsa="no"])
- case $have_ecdsa in
- yes)
- OPENSSL_ECDSA="yes"
- AC_DEFINE(HAVE_OPENSSL_ECDSA)
- ;;
- *)
- ;;
- esac
-
- AC_MSG_CHECKING(for OpenSSL GOST support)
- have_gost=""
- AC_TRY_RUN([
+ [AC_MSG_RESULT(yes)
+ have_ecdsa="yes"],
+ [AC_MSG_RESULT(no)
+ have_ecdsa="no"],
+ [AC_MSG_RESULT(using --with-ecdsa)])
+ AC_ARG_WITH(ecdsa, [ --with-ecdsa OpenSSL ECDSA],
+ with_ecdsa="$withval", with_ecdsa="auto")
+ case "$with_ecdsa" in
+ yes)
+ case "$have_ecdsa" in
+ no) AC_MSG_ERROR([ecdsa not supported]) ;;
+ *) have_ecdsa=yes ;;
+ esac
+ ;;
+ no)
+ have_ecdsa=no ;;
+ *)
+ case "$have_ecdsa" in
+ yes|no) ;;
+ *) AC_MSG_ERROR([need --with-ecdsa=[[yes or no]]]) ;;
+ esac
+ ;;
+ esac
+ case $have_ecdsa in
+ yes)
+ OPENSSL_ECDSA="yes"
+ AC_DEFINE(HAVE_OPENSSL_ECDSA, 1,
+ [Define if your OpenSSL version supports ECDSA.])
+ ;;
+ *)
+ ;;
+ esac
+
+ AC_MSG_CHECKING(for OpenSSL GOST support)
+ have_gost=""
+ AC_TRY_RUN([
#include <openssl/conf.h>
#include <openssl/engine.h>
int main() {
@@ -758,43 +862,46 @@ int main() {
#endif
}
],
- [AC_MSG_RESULT(yes)
- have_gost="yes"],
- [AC_MSG_RESULT(no)
- have_gost="no"],
- [AC_MSG_RESULT(using --with-gost)])
- AC_ARG_WITH(gost, , with_gost="$withval", with_gost="auto")
- case "$with_gost" in
- yes)
- case "$have_gost" in
- no) AC_MSG_ERROR([gost not supported]) ;;
- *) have_gost=yes ;;
- esac
- ;;
- no)
- have_gost=no ;;
- *)
- case "$have_gost" in
- yes|no) ;;
- *) AC_MSG_ERROR([need --with-gost=[[yes or no]]]) ;;
- esac
- ;;
- esac
- case $have_gost in
- yes)
- OPENSSL_GOST="yes"
- AC_DEFINE(HAVE_OPENSSL_GOST, 1,
- [Define if your OpenSSL version supports GOST.])
- ;;
- *)
- ;;
- esac
- CFLAGS="$saved_cflags"
- LIBS="$saved_libs"
- OPENSSLLINKOBJS='${OPENSSLLINKOBJS}'
- OPENSSLLINKSRCS='${OPENSSLLINKSRCS}'
-
- ;;
+ [AC_MSG_RESULT(yes)
+ have_gost="yes"],
+ [AC_MSG_RESULT(no)
+ have_gost="no"],
+ [AC_MSG_RESULT(using --with-gost)])
+ AC_ARG_WITH(gost, [ --with-gost OpenSSL GOST],
+ with_gost="$withval", with_gost="auto")
+ case "$with_gost" in
+ yes)
+ case "$have_gost" in
+ no) AC_MSG_ERROR([gost not supported]) ;;
+ *) have_gost=yes ;;
+ esac
+ ;;
+ no)
+ have_gost=no ;;
+ *)
+ case "$have_gost" in
+ yes|no) ;;
+ *) AC_MSG_ERROR([need --with-gost=[[yes or no]]]) ;;
+ esac
+ ;;
+ esac
+ case $have_gost in
+ yes)
+ OPENSSL_GOST="yes"
+ OPENSSLGOSTLINKOBJS='${OPENSSLGOSTLINKOBJS}'
+ OPENSSLGOSTLINKSRCS='${OPENSSLGOSTLINKSRCS}'
+ AC_DEFINE(HAVE_OPENSSL_GOST, 1,
+ [Define if your OpenSSL version supports GOST.])
+ ;;
+ *)
+ ;;
+ esac
+ CFLAGS="$saved_cflags"
+ LIBS="$saved_libs"
+ OPENSSLLINKOBJS='${OPENSSLLINKOBJS}'
+ OPENSSLLINKSRCS='${OPENSSLLINKSRCS}'
+
+ ;;
esac
#
@@ -804,6 +911,8 @@ esac
AC_SUBST(USE_OPENSSL)
AC_SUBST(DST_OPENSSL_INC)
+AC_SUBST(OPENSSLGOSTLINKOBJS)
+AC_SUBST(OPENSSLGOSTLINKSRCS)
AC_SUBST(OPENSSLLINKOBJS)
AC_SUBST(OPENSSLLINKSRCS)
AC_SUBST(OPENSSL_ECDSA)
@@ -1075,6 +1184,11 @@ AC_ARG_WITH(randomdev,
case "$use_randomdev" in
unspec)
+ case "$cross_compiling" in
+ yes)
+ AC_MSG_RESULT(unspecified)
+ AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
+ esac
case "$host" in
*-openbsd*)
devrandom=/dev/arandom
@@ -1087,6 +1201,7 @@ case "$use_randomdev" in
AC_CHECK_FILE($devrandom,
AC_DEFINE_UNQUOTED(PATH_RANDOMDEV,
"$devrandom"),)
+
;;
yes)
AC_MSG_ERROR([--with-randomdev must specify a path])
@@ -1258,7 +1373,7 @@ case "$use_libxml2" in
;;
auto|yes)
case X`(xml2-config --version) 2>/dev/null` in
- X2.[[678]].*)
+ X2.[[6789]].*)
libxml2_libs=`xml2-config --libs`
libxml2_cflags=`xml2-config --cflags`
;;
@@ -1299,7 +1414,7 @@ AC_CHECK_LIB(scf, smf_enable_instance)
AC_CHECK_FUNC(flockfile, AC_DEFINE(HAVE_FLOCKFILE),)
AC_CHECK_FUNC(getc_unlocked, AC_DEFINE(HAVE_GETCUNLOCKED),)
-#
+#
# Indicate what the final decision was regarding threads.
#
AC_MSG_CHECKING(whether to build with threads)
@@ -1309,7 +1424,7 @@ else
AC_MSG_RESULT(no)
fi
-#
+#
# End of pthreads stuff.
#
@@ -1595,8 +1710,8 @@ AC_SUBST(LIBTOOL_IN_MAIN)
# build exportable DNS library?
#
AC_ARG_ENABLE(exportlib,
- [ --enable-exportlib build exportable library (GNU make required)
- [[default=no]]])
+ [ --enable-exportlib build exportable library (GNU make required)
+ [[default=no]]])
case "$enable_exportlib" in
yes)
gmake=
@@ -1621,8 +1736,8 @@ AC_SUBST(BIND9_CO_RULE)
AC_ARG_WITH(export-libdir,
[ --with-export-libdir[=PATH]
- installation directory for the export library
- [[EPREFIX/lib/bind9]]],
+ installation directory for the export library
+ [[EPREFIX/lib/bind9]]],
export_libdir="$withval",)
if test -z "$export_libdir"; then
export_libdir="\${exec_prefix}/lib/bind9/"
@@ -1631,8 +1746,8 @@ AC_SUBST(export_libdir)
AC_ARG_WITH(export-includedir,
[ --with-export-includedir[=PATH]
- installation directory for the header files of the
- export library [[PREFIX/include/bind9]]],
+ installation directory for the header files of the
+ export library [[PREFIX/include/bind9]]],
export_includedir="$withval",)
if test -z "$export_includedir"; then
export_includedir="\${prefix}/include/bind9/"
@@ -1940,7 +2055,7 @@ AC_TRY_RUN([
#include <netinet/in.h>
#include <arpa/inet.h>
main() { char a[16]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 :
- inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 :
+ inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 :
(inet_pton(AF_INET6, "::1.2.3.4", a) != 1)); }],
[AC_MSG_RESULT(yes)
ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"],
@@ -2181,7 +2296,7 @@ AC_ARG_ENABLE(getifaddrs,
# This interface iteration code for getifaddrs() will fall back to using
# /proc/net/if_inet6 if getifaddrs() in glibc doesn't return any IPv6
# addresses.
-#
+#
case $want_getifaddrs in
glibc)
AC_MSG_WARN("--enable-getifaddrs=glibc is no longer required")
@@ -2256,6 +2371,29 @@ AC_CHECK_FUNC(strlcat,
[ISC_PLATFORM_NEEDSTRLCAT="#define ISC_PLATFORM_NEEDSTRLCAT 1"])
AC_SUBST(ISC_PLATFORM_NEEDSTRLCAT)
+
+AC_SUBST(READLINE_LIB)
+AC_ARG_WITH(readline,
+ [ --with-readline[=LIBSPEC] specify readline library [default -lreadline]],
+ readline="$withval", readline="-lreadline")
+case "$readline" in
+no) ;;
+*)
+ if test "x$readline" = "xyes"
+ then
+ readline=-lreadline
+ fi
+ saved_LIBS="$LIBS"
+ LIBS="$readline"
+ AC_CHECK_FUNCS(readline)
+ if test "$ac_cv_func_readline" = "yes"
+ then
+ READLINE_LIB="$readline"
+ fi
+ LIBS="$saved_LIBS"
+ ;;
+esac
+
ISC_PRINT_OBJS=
ISC_PRINT_SRCS=
AC_MSG_CHECKING(sprintf)
@@ -2341,7 +2479,7 @@ main() {
sprintf(buf, "%lld", j);
exit((sizeof(long long int) != sizeof(long int))? 0 :
(strcmp(buf, "0") != 0));
-}
+}
],
[AC_MSG_RESULT(ll)
ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
@@ -2606,7 +2744,7 @@ yes)
esac
AC_SUBST(ISC_PLATFORM_HAVEIFNAMETOINDEX)
-AC_CHECK_FUNCS(nanosleep)
+AC_CHECK_FUNCS(nanosleep usleep)
#
# Machine architecture dependent features
@@ -2733,7 +2871,7 @@ if test "$have_atomic" = "yes"; then
else
case "$host" in
alpha*-dec-osf*)
- # Tru64 compiler has its own syntax for inline
+ # Tru64 compiler has its own syntax for inline
# assembly.
AC_TRY_COMPILE(, [
#ifndef __DECC
@@ -2827,9 +2965,9 @@ esac
# Enable response policy rewriting using NS IP addresses
#
AC_ARG_ENABLE(rpz-nsip,
- [ --enable-rpz-nsip enable rpz-nsip rules [[default=no]]],
+ [ --disable-rpz-nsip disable rpz-nsip rules [[default=enabled]]],
enable_nsip="$enableval",
- enable_nsip="no")
+ enable_nsip="yes")
case "$enable_nsip" in
yes)
AC_DEFINE(ENABLE_RPZ_NSIP, 1,
@@ -2845,9 +2983,9 @@ esac
# Enable response policy rewriting using NS name
#
AC_ARG_ENABLE(rpz-nsdname,
- [ --enable-rpz-nsdname enable rpz-nsdname rules [[default=no]]],
+ [ --disable-rpz-nsdname disable rpz-nsdname rules [[default=enabled]]],
enable_nsdname="$enableval",
- enable_nsdname="no")
+ enable_nsdname="yes")
case "$enable_nsdname" in
yes)
AC_DEFINE(ENABLE_RPZ_NSDNAME, 1,
@@ -2955,11 +3093,11 @@ AC_SUBST(DOXYGEN)
# NOM_PATH_FILE(VARIABLE, FILENAME, DIRECTORIES)
#
# If the file FILENAME is found in one of the DIRECTORIES, the shell
-# variable VARIABLE is defined to its absolute pathname. Otherwise,
+# variable VARIABLE is defined to its absolute pathname. Otherwise,
# it is set to FILENAME, with no directory prefix (that's not terribly
# useful, but looks less confusing in substitutions than leaving it
# empty). The variable VARIABLE will be substituted into output files.
-#
+#
AC_DEFUN(NOM_PATH_FILE, [
$1=""
@@ -2995,7 +3133,7 @@ AC_ARG_WITH(docbook-xsl,
case "$docbook_path" in
auto)
AC_MSG_RESULT(auto)
- docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook"
+ docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl"
;;
*)
docbook_xsl_trees="$withval"
@@ -3131,14 +3269,22 @@ AC_SUBST(IDNLIBS)
# Check whether to build Automated Test Framework unit tests
#
AC_ARG_WITH(atf,
- [ --with-atf=ARG Automated Test Framework support],
+ [ --with-atf=ARG Automated Test Framework support],
atf="$withval", atf="no")
if test "$atf" = yes; then
atf=`pwd`/unit/atf
ATFBUILD=atf-src
AC_SUBST(ATFBUILD)
AC_CONFIG_COMMANDS([atf-config],
- [cd unit/atf-src; ${SHELL} ./configure MISSING=: --prefix $atfdir; cd ../..],
+ [(
+ mkdir -p unit/atf-src;
+ cd unit/atf-src;
+ case "$srcdir" in
+ /*) ;;
+ *) srcdir="../../$srcdir";;
+ esac
+ ${SHELL} ${srcdir}${srcdir:+/unit/atf-src/}./configure MISSING=: --prefix $atfdir;
+ ) ],
[atfdir=`pwd`/unit/atf])
AC_MSG_RESULT(building ATF from bind9/unit/atf-src)
fi
@@ -3149,6 +3295,9 @@ if test "$atf" != no; then
STD_CINCLUDES="$STD_CINCLUDES -I$atf/include"
ATFBIN="$atf/bin"
ATFLIBS="-L$atf/lib -latf-c"
+ if test "$want_openssl_hash" = yes; then
+ ATFLIBS="-L$atf/lib -latf-c $DNS_CRYPTO_LIBS"
+ fi
UNITTESTS=tests
fi
AC_SUBST(ATFBIN)
@@ -3193,9 +3342,20 @@ AC_SUBST_FILE(BIND9_MAKE_RULES)
BIND9_MAKE_RULES=$BIND9_TOP_BUILDDIR/make/rules
. $srcdir/version
+BIND9_PRODUCT="PRODUCT=\"${PRODUCT}\""
+AC_SUBST(BIND9_PRODUCT)
+BIND9_DESCRIPTION="DESCRIPTION=\"${DESCRIPTION}\""
+AC_SUBST(BIND9_DESCRIPTION)
BIND9_VERSION="VERSION=${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}"
AC_SUBST(BIND9_VERSION)
+BIND9_SRCID="SRCID=unset"
+if test -f $srcdir/srcid; then
+ . $srcdir/srcid
+ BIND9_SRCID="SRCID=$SRCID"
+fi
+AC_SUBST(BIND9_SRCID)
+
if test -z "$ac_configure_args"; then
BIND9_CONFIGARGS="defaults"
else
@@ -3247,7 +3407,7 @@ DLZ_DRIVER_SRCS=""
DLZ_DRIVER_OBJS=""
DLZ_SYSTEM_TEST=""
-#
+#
# Configure support for building a shared library object
#
# Even when libtool is available it can't always be relied upon
@@ -3264,6 +3424,11 @@ AC_ARG_WITH(dlopen,
[ --with-dlopen=ARG Support dynamically loadable DLZ drivers],
dlopen="$withval", dlopen="yes")
+case $host in
+ *-sunos*) dlopen="no"
+ ;;
+esac
+
if test "$dlopen" = "yes"; then
AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
if test "$have_dl" = "yes"; then
@@ -3278,7 +3443,11 @@ if test "$dlopen" = "yes"; then
SO_CFLAGS="-fPIC"
if test "$have_dl" = "yes"
then
- SO_LD="${CC} -shared"
+ if test "$use_libtool" = "yes"; then
+ SO_LD="${CC} -Xcompiler -shared"
+ else
+ SO_LD="${CC} -shared"
+ fi
else
SO_LD="ld -shared"
fi
@@ -3349,8 +3518,8 @@ if test "$cross_compiling" = "yes"; then
BUILD_LDFLAGS="$BUILD_LDFLAGS"
BUILD_LIBS="$BUILD_LIBS"
else
- BUILD_CC="$CC"
- BUILD_CFLAGS="$CFLAGS"
+ BUILD_CC="$CC"
+ BUILD_CFLAGS="$CFLAGS"
BUILD_CPPFLAGS="$CPPFLAGS $GEN_NEED_OPTARG"
BUILD_LDFLAGS="$LDFLAGS"
BUILD_LIBS="$LIBS"
@@ -3479,11 +3648,29 @@ AC_CONFIG_FILES([
bin/named/unix/Makefile
bin/nsupdate/Makefile
bin/pkcs11/Makefile
+ bin/python/Makefile
+ bin/python/dnssec-checkds.py
+ bin/python/dnssec-coverage.py
bin/rndc/Makefile
bin/tests/Makefile
bin/tests/atomic/Makefile
bin/tests/db/Makefile
bin/tests/dst/Makefile
+ bin/tests/dst/Kdh.+002+18602.key
+ bin/tests/dst/Kdh.+002+18602.private
+ bin/tests/dst/Kdh.+002+48957.key
+ bin/tests/dst/Kdh.+002+48957.private
+ bin/tests/dst/Ktest.+001+00002.key
+ bin/tests/dst/Ktest.+001+54622.key
+ bin/tests/dst/Ktest.+001+54622.private
+ bin/tests/dst/Ktest.+003+23616.key
+ bin/tests/dst/Ktest.+003+23616.private
+ bin/tests/dst/Ktest.+003+49667.key
+ bin/tests/dst/dst_2_data
+ bin/tests/dst/t2_data_1
+ bin/tests/dst/t2_data_2
+ bin/tests/dst/t2_dsasig
+ bin/tests/dst/t2_rsasig
bin/tests/hashes/Makefile
bin/tests/headerdep_test.sh
bin/tests/master/Makefile
@@ -3503,6 +3690,7 @@ AC_CONFIG_FILES([
bin/tests/system/gost/prereq.sh
bin/tests/system/lwresd/Makefile
bin/tests/system/rpz/Makefile
+ bin/tests/system/rsabigexponent/Makefile
bin/tests/system/tkey/Makefile
bin/tests/system/tsiggss/Makefile
bin/tests/tasks/Makefile
@@ -3617,7 +3805,7 @@ yes)
esac
if test "X$USE_OPENSSL" = "X"; then
-cat << \EOF
+cat << \EOF
BIND is being built without OpenSSL. This means it will not have DNSSEC support.
EOF
fi
diff --git a/contrib/bind9/doc/arm/Bv9ARM-book.xml b/contrib/bind9/doc/arm/Bv9ARM-book.xml
index f3f862af7523..862555461524 100644
--- a/contrib/bind9/doc/arm/Bv9ARM-book.xml
+++ b/contrib/bind9/doc/arm/Bv9ARM-book.xml
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -33,6 +33,7 @@
<year>2010</year>
<year>2011</year>
<year>2012</year>
+ <year>2013</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
@@ -71,7 +72,7 @@
</para>
<para>
- This version of the manual corresponds to BIND version 9.8.
+ This version of the manual corresponds to BIND version 9.9.
</para>
</sect1>
@@ -1236,15 +1237,12 @@ zone "eng.example.com" {
<listitem>
<para>
Suspend updates to a dynamic zone. If no zone is
- specified,
- then all zones are suspended. This allows manual
- edits to be made to a zone normally updated by dynamic
- update. It
- also causes changes in the journal file to be synced
- into the master
- and the journal file to be removed. All dynamic
- update attempts will
- be refused while the zone is frozen.
+ specified, then all zones are suspended. This allows
+ manual edits to be made to a zone normally updated by
+ dynamic update. It also causes changes in the
+ journal file to be synced into the master file.
+ All dynamic update attempts will be refused while
+ the zone is frozen.
</para>
</listitem>
</varlistentry>
@@ -1256,15 +1254,34 @@ zone "eng.example.com" {
<optional><replaceable>view</replaceable></optional></optional></optional></userinput></term>
<listitem>
<para>
- Enable updates to a frozen dynamic zone. If no zone
- is
- specified, then all frozen zones are enabled. This
- causes
- the server to reload the zone from disk, and
- re-enables dynamic updates
- after the load has completed. After a zone is thawed,
- dynamic updates
- will no longer be refused.
+ Enable updates to a frozen dynamic zone. If no
+ zone is specified, then all frozen zones are
+ enabled. This causes the server to reload the zone
+ from disk, and re-enables dynamic updates after the
+ load has completed. After a zone is thawed,
+ dynamic updates will no longer be refused. If
+ the zone has changed and the
+ <command>ixfr-from-differences</command> option is
+ in use, then the journal file will be updated to
+ reflect changes in the zone. Otherwise, if the
+ zone has changed, any existing journal file will be
+ removed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><userinput>sync
+ <optional>-clean</optional>
+ <optional><replaceable>zone</replaceable>
+ <optional><replaceable>class</replaceable>
+ <optional><replaceable>view</replaceable></optional></optional></optional></userinput></term>
+ <listitem>
+ <para>
+ Sync changes in the journal file for a dynamic zone
+ to the master file. If the "-clean" option is
+ specified, the journal file is also removed. If
+ no zone is specified, then all zones are synced.
</para>
</listitem>
</varlistentry>
@@ -1305,10 +1322,17 @@ zone "eng.example.com" {
</varlistentry>
<varlistentry>
- <term><userinput>querylog</userinput></term>
+ <term><userinput>querylog</userinput>
+ <optional>on|off</optional>
+ </term>
<listitem>
<para>
- Toggle query logging. Query logging can also be enabled
+ Enable or disable query logging. (For backward
+ compatibility, this command can also be used without
+ an argument to toggle query logging on and off.)
+ </para>
+ <para>
+ Query logging can also be enabled
by explicitly directing the <command>queries</command>
<command>category</command> to a
<command>channel</command> in the
@@ -1416,10 +1440,29 @@ zone "eng.example.com" {
</varlistentry>
<varlistentry>
- <term><userinput>flushname</userinput> <replaceable>name</replaceable></term>
+ <term><userinput>flushname</userinput>
+ <replaceable>name</replaceable>
+ <optional><replaceable>view</replaceable></optional>
+ </term>
+ <listitem>
+ <para>
+ Flushes the given name from the server's DNS cache,
+ and from the server's nameserver address database
+ if applicable.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><userinput>flushtree</userinput>
+ <replaceable>name</replaceable>
+ <optional><replaceable>view</replaceable></optional>
+ </term>
<listitem>
<para>
- Flushes the given name from the server's cache.
+ Flushes the given name, and all of its subdomains,
+ from the server's DNS cache. (The server's
+ nameserver address database is not affected.)
</para>
</listitem>
</varlistentry>
@@ -1480,7 +1523,7 @@ zone "eng.example.com" {
<optional><replaceable>view</replaceable></optional></term>
<listitem>
<para>
- Delete a given TKEY-negotated key from the server.
+ Delete a given TKEY-negotiated key from the server.
(This does not apply to statically configured TSIG
keys.)
</para>
@@ -1546,6 +1589,75 @@ zone "eng.example.com" {
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><userinput>signing
+ <optional>( -list | -clear <replaceable>keyid/algorithm</replaceable> | -clear <literal>all</literal> | -nsec3param ( <replaceable>parameters</replaceable> | <literal>none</literal> ) ) </optional>
+ <replaceable>zone</replaceable>
+ <optional><replaceable>class</replaceable>
+ <optional><replaceable>view</replaceable></optional></optional>
+ </userinput></term>
+ <listitem>
+ <para>
+ List, edit, or remove the DNSSEC signing state for
+ the specified zone. The status of ongoing DNSSEC
+ operations (such as signing or generating
+ NSEC3 chains) is stored in the zone in the form
+ of DNS resource records of type
+ <command>sig-signing-type</command>.
+ <command>rndc signing -list</command> converts
+ these records into a human-readable form,
+ indicating which keys are currently signing
+ or have finished signing the zone, and which NSEC3
+ NSEC3 chains are being created or removed.
+ </para>
+ <para>
+ <command>rndc signing -clear</command> can remove
+ a single key (specified in the same format that
+ <command>rndc signing -list</command> uses to
+ display it), or all keys. In either case, only
+ completed keys are removed; any record indicating
+ that a key has not yet finished signing the zone
+ will be retained.
+ </para>
+ <para>
+ <command>rndc signing -nsec3param</command> sets
+ the NSEC3 parameters for a zone. This is the
+ only supported mechanism for using NSEC3 with
+ <command>inline-signing</command> zones.
+ Parameters are specified in the same format as
+ an NSEC3PARAM resource record: hash algorithm,
+ flags, iterations, and salt, in that order.
+ </para>
+ <para>
+ Currently, the only defined value for hash algorithm
+ is <literal>1</literal>, representing SHA-1.
+ The <option>flags</option> may be set to
+ <literal>0</literal> or <literal>1</literal>,
+ depending on whether you wish to set the opt-out
+ bit in the NSEC3 chain. <option>iterations</option>
+ defines the number of additional times to apply
+ the algorithm when generating an NSEC3 hash. The
+ <option>salt</option> is a string of data expressed
+ in hexidecimal, or a hyphen (`-') if no salt is
+ to be used.
+ </para>
+ <para>
+ So, for example, to create an NSEC3 chain using
+ the SHA-1 hash algorithm, no opt-out flag,
+ 10 iterations, and a salt value of "FFFF", use:
+ <command>rndc signing -nsec3param 1 0 10 FFFF &lt;zone&gt;</command>.
+ To set the opt-out flag, 15 iterations, and no
+ salt, use:
+ <command>rndc signing -nsec3param 1 1 15 - &lt;zone&gt;</command>.
+ </para>
+ <para>
+ <command>rndc signing -nsec3param none</command>
+ removes an existing NSEC3 chain and replaces it
+ with NSEC.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
<para>
@@ -1924,13 +2036,11 @@ controls {
</para>
<para>
- When acting as a slave, <acronym>BIND</acronym> 9 will attempt
- to use IXFR unless it is explicitly disabled via the
- <command>request-ixfr</command> option or the use of
- <command>ixfr-from-differences</command>. For
- more information about disabling IXFR, see the description
- of the <command>request-ixfr</command> clause of the
- <command>server</command> statement.
+ When acting as a slave, <acronym>BIND</acronym> 9 will
+ attempt to use IXFR unless
+ it is explicitly disabled. For more information about disabling
+ IXFR, see the description of the <command>request-ixfr</command> clause
+ of the <command>server</command> statement.
</para>
</sect1>
@@ -3274,31 +3384,45 @@ $ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
</entry>
<entry colname="2">
<para>
- A number, the word <userinput>unlimited</userinput>,
- or the word <userinput>default</userinput>.
+ A 64-bit unsigned integer, or the keywords
+ <userinput>unlimited</userinput> or
+ <userinput>default</userinput>.
</para>
- <para>
- An <varname>unlimited</varname> <varname>size_spec</varname> requests unlimited
- use, or the maximum available amount. A <varname>default size_spec</varname> uses
- the limit that was in force when the server was started.
+ <para>
+ Integers may take values
+ 0 &lt;= value &lt;= 18446744073709551615, though
+ certain parameters may use a more limited range
+ within these extremes. In most cases, setting a
+ value to 0 does not literally mean zero; it means
+ "undefined" or "as big as psosible", depending on
+ the context. See the expalantions of particular
+ parameters that use <varname>size_spec</varname>
+ for details on how they interpret its use.
</para>
<para>
- A <varname>number</varname> can optionally be
- followed by a scaling factor:
+ Numeric values can optionally be followed by a
+ scaling factor:
<userinput>K</userinput> or <userinput>k</userinput>
for kilobytes,
<userinput>M</userinput> or <userinput>m</userinput>
for megabytes, and
- <userinput>G</userinput> or <userinput>g</userinput> for gigabytes,
- which scale by 1024, 1024*1024, and 1024*1024*1024
- respectively.
+ <userinput>G</userinput> or <userinput>g</userinput>
+ for gigabytes, which scale by 1024, 1024*1024, and
+ 1024*1024*1024 respectively.
</para>
- <para>
- The value must be representable as a 64-bit unsigned integer
- (0 to 18446744073709551615, inclusive).
- Using <varname>unlimited</varname> is the best
- way
- to safely set a really large number.
+ <para>
+ <varname>unlimited</varname> generally means
+ "as big as possible", though in certain contexts,
+ (including <option>max-cache-size</option>), it may
+ mean the largest possible 32-bit unsigned integer
+ (0xffffffff); this distinction can be important when
+ dealing with larger quantities.
+ <varname>unlimited</varname> is usually the best way
+ to safely set a very large number.
+ </para>
+ <para>
+ <varname>default</varname>
+ uses the limit that was in force when the server was started.
</para>
</entry>
</row>
@@ -3634,7 +3758,9 @@ $ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
<entry colname="2">
<para>
defines a named masters list for
- inclusion in stub and slave zone masters clauses.
+ inclusion in stub and slave zones'
+ <command>masters</command> or
+ <command>also-notify</command> lists.
</para>
</entry>
</row>
@@ -4031,7 +4157,7 @@ $ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
[ <command>channel</command> <replaceable>channel_name</replaceable> {
( <command>file</command> <replaceable>path_name</replaceable>
[ <command>versions</command> ( <replaceable>number</replaceable> | <command>unlimited</command> ) ]
- [ <command>size</command> <replaceable>size spec</replaceable> ]
+ [ <command>size</command> <replaceable>size_spec</replaceable> ]
| <command>syslog</command> <replaceable>syslog_facility</replaceable>
| <command>stderr</command>
| <command>null</command> );
@@ -4574,11 +4700,17 @@ category notify { null; };
</para>
<para>
- <computeroutput>client 127.0.0.1#62536: query: www.example.com IN AAAA +SE</computeroutput>
+ <computeroutput>client 127.0.0.1#62536 (www.example.com): query: www.example.com IN AAAA +SE</computeroutput>
</para>
<para>
- <computeroutput>client ::1#62537: query: www.example.net IN AAAA -SE</computeroutput>
+ <computeroutput>client ::1#62537 (www.example.net): query: www.example.net IN AAAA -SE</computeroutput>
</para>
+ <para>
+ (The first part of this log message, showing the
+ client address/port number and query name, is
+ repeated in all subsequent log messages related
+ to the same query.)
+ </para>
</entry>
</row>
<row rowsep="0">
@@ -5006,7 +5138,8 @@ badresp:1,adberr:0,findfail:0,valfail:0]
Usage</title>
<para><command>masters</command>
lists allow for a common set of masters to be easily used by
- multiple stub and slave zones.
+ multiple stub and slave zones in their <command>masters</command>
+ or <command>also-notify</command> lists.
</para>
</sect2>
@@ -5043,7 +5176,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> pid-file <replaceable>path_name</replaceable>; </optional>
<optional> recursing-file <replaceable>path_name</replaceable>; </optional>
<optional> statistics-file <replaceable>path_name</replaceable>; </optional>
- <optional> zone-statistics <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
<optional> auth-nxdomain <replaceable>yes_or_no</replaceable>; </optional>
<optional> deallocate-on-exit <replaceable>yes_or_no</replaceable>; </optional>
<optional> dialup <replaceable>dialup_option</replaceable>; </optional>
@@ -5057,6 +5190,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> multiple-cnames <replaceable>yes_or_no</replaceable>; </optional>
<optional> notify <replaceable>yes_or_no</replaceable> | <replaceable>explicit</replaceable> | <replaceable>master-only</replaceable>; </optional>
<optional> recursion <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> request-nsid <replaceable>yes_or_no</replaceable>; </optional>
<optional> rfc2308-type1 <replaceable>yes_or_no</replaceable>; </optional>
<optional> use-id-pool <replaceable>yes_or_no</replaceable>; </optional>
<optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable>; </optional>
@@ -5083,6 +5217,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> check-mx-cname ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
<optional> check-srv-cname ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
<optional> check-sibling <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> check-spf ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
<optional> allow-new-zones { <replaceable>yes_or_no</replaceable> }; </optional>
<optional> allow-notify { <replaceable>address_match_list</replaceable> }; </optional>
<optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
@@ -5095,7 +5230,9 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> allow-update { <replaceable>address_match_list</replaceable> }; </optional>
<optional> allow-update-forwarding { <replaceable>address_match_list</replaceable> }; </optional>
<optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> dnssec-update-mode ( <replaceable>maintain</replaceable> | <replaceable>no-resign</replaceable> ); </optional>
<optional> dnssec-dnskey-kskonly <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> dnssec-loadkeys-interval <replaceable>number</replaceable>; </optional>
<optional> dnssec-secure-to-insecure <replaceable>yes_or_no</replaceable> ;</optional>
<optional> try-tcp-refresh <replaceable>yes_or_no</replaceable>; </optional>
<optional> allow-v6-synthesis { <replaceable>address_match_list</replaceable> }; </optional>
@@ -5141,8 +5278,9 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> ; </optional>
<optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> ; </optional>
<optional> notify-to-soa <replaceable>yes_or_no</replaceable> ; </optional>
- <optional> also-notify { <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> ;
- <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> ; ... </optional> }; </optional>
+ <optional> also-notify { <replaceable>ip_addr</replaceable>
+ <optional>port <replaceable>ip_port</replaceable></optional> <optional>key <replaceable>keyname</replaceable></optional> ;
+ <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> <optional>key <replaceable>keyname</replaceable></optional> ; ... </optional> }; </optional>
<optional> max-ixfr-log-size <replaceable>number</replaceable>; </optional>
<optional> max-journal-size <replaceable>size_spec</replaceable>; </optional>
<optional> coresize <replaceable>size_spec</replaceable> ; </optional>
@@ -5193,6 +5331,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> preferred-glue ( <replaceable>A</replaceable> | <replaceable>AAAA</replaceable> | <replaceable>NONE</replaceable> ); </optional>
<optional> edns-udp-size <replaceable>number</replaceable>; </optional>
<optional> max-udp-size <replaceable>number</replaceable>; </optional>
+ <optional> max-rsa-exponent-size <replaceable>number</replaceable>; </optional>
<optional> root-delegation-only <optional> exclude { <replaceable>namelist</replaceable> } </optional> ; </optional>
<optional> querylog <replaceable>yes_or_no</replaceable> ; </optional>
<optional> disable-algorithms <replaceable>domain</replaceable> { <replaceable>algorithm</replaceable>;
@@ -5216,7 +5355,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<optional> policy given | disabled | passthru | nxdomain | nodata | cname <replaceable>domain</replaceable> </optional>
<optional> recursive-only <replaceable>yes_or_no</replaceable> </optional> <optional> max-policy-ttl <replaceable>number</replaceable> </optional> ;
} <optional> recursive-only <replaceable>yes_or_no</replaceable> </optional> <optional> max-policy-ttl <replaceable>number</replaceable> </optional>
- <optional> break-dnssec <replaceable>yes_or_no</replaceable> </optional> ; </optional>
+ <optional> break-dnssec <replaceable>yes_or_no</replaceable> </optional> <optional> min-ns-dots <replaceable>number</replaceable> </optional> ; </optional>
};
</programlisting>
@@ -5374,11 +5513,18 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<term><command>managed-keys-directory</command></term>
<listitem>
<para>
- The directory used to hold the files used to track managed keys.
- By default it is the working directory. It there are no
- views then the file <filename>managed-keys.bind</filename>
- otherwise a SHA256 hash of the view name is used with
- <filename>.mkeys</filename> extension added.
+ Specifies the directory in which to store the files that
+ track managed DNSSEC keys. By default, this is the working
+ directory.
+ </para>
+ <para>
+ If <command>named</command> is not configured to use views,
+ then managed keys for the server will be tracked in a single
+ file called <filename>managed-keys.bind</filename>.
+ Otherwise, managed keys will be tracked in separate files,
+ one file per view; each file name will be the SHA256 hash
+ of the view name, followed by the extension
+ <filename>.mkeys</filename>.
</para>
</listitem>
</varlistentry>
@@ -5760,7 +5906,8 @@ options {
installed along with <acronym>BIND</acronym> 9, and is
current as of the release date. If the DLV key expires, a
new copy of <filename>bind.keys</filename> can be downloaded
- from <ulink>https://www.isc.org/solutions/dlv</ulink>.
+ from <ulink url="https://www.isc.org/solutions/dlv/"
+ >https://www.isc.org/solutions/dlv/</ulink>.
</para>
<para>
(To prevent problems if <filename>bind.keys</filename> is
@@ -5880,6 +6027,73 @@ options {
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><command>dnssec-update-mode</command></term>
+ <listitem>
+ <para>
+ If this option is set to its default value of
+ <literal>maintain</literal> in a zone of type
+ <literal>master</literal> which is DNSSEC-signed
+ and configured to allow dynamic updates (see
+ <xref linkend="dynamic_update_policies"/>), and
+ if <command>named</command> has access to the
+ private signing key(s) for the zone, then
+ <command>named</command> will automatically sign all new
+ or changed records and maintain signatures for the zone
+ by regenerating RRSIG records whenever they approach
+ their expiration date.
+ </para>
+ <para>
+ If the option is changed to <literal>no-resign</literal>,
+ then <command>named</command> will sign all new or
+ changed records, but scheduled maintenance of
+ signatures is disabled.
+ </para>
+ <para>
+ With either of these settings, <command>named</command>
+ will reject updates to a DNSSEC-signed zone when the
+ signing keys are inactive or unavailable to
+ <command>named</command>. (A planned third option,
+ <literal>external</literal>, will disable all automatic
+ signing and allow DNSSEC data to be submitted into a zone
+ via dyanmic update; this is not yet implemented.)
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>zone-statistics</command></term>
+ <listitem>
+ <para>
+ If <userinput>full</userinput>, the server will collect
+ statistical data on all zones (unless specifically
+ turned off on a per-zone basis by specifying
+ <command>zone-statistics terse</command> or
+ <command>zone-statistics none</command>
+ in the <command>zone</command> statement).
+ The default is <userinput>terse</userinput>, providing
+ minimal statistics on zones (including name and
+ current serial number, but not query type
+ counters).
+ </para>
+ <para>
+ These statistics may be accessed via the
+ <command>statistics-channel</command> or
+ using <command>rndc stats</command>, which
+ will dump them to the file listed
+ in the <command>statistics-file</command>. See
+ also <xref linkend="statsfile"/>.
+ </para>
+ <para>
+ For backward compatibility with earlier versions
+ of BIND 9, the <command>zone-statistics</command>
+ option can also accept <userinput>yes</userinput>
+ or <userinput>no</userinput>, which have the same
+ effect as <userinput>full</userinput> and
+ <userinput>terse</userinput>, respectively.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
<sect3 id="boolean_options">
@@ -6349,6 +6563,22 @@ options {
</varlistentry>
<varlistentry>
+ <term><command>request-nsid</command></term>
+ <listitem>
+ <para>
+ If <userinput>yes</userinput>, then an empty EDNS(0)
+ NSID (Name Server Identifier) option is sent with all
+ queries to authoritative name servers during iterative
+ resolution. If the authoritative server returns an NSID
+ option in its response, then its contents are logged in
+ the <command>resolver</command> category at level
+ <command>info</command>.
+ The default is <userinput>no</userinput>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>rfc2308-type1</command></term>
<listitem>
<para>
@@ -6378,25 +6608,6 @@ options {
</varlistentry>
<varlistentry>
- <term><command>zone-statistics</command></term>
- <listitem>
- <para>
- If <userinput>yes</userinput>, the server will collect
- statistical data on all zones (unless specifically turned
- off
- on a per-zone basis by specifying <command>zone-statistics no</command>
- in the <command>zone</command> statement).
- The default is <userinput>no</userinput>.
- These statistics may be accessed
- using <command>rndc stats</command>, which will
- dump them to the file listed
- in the <command>statistics-file</command>. See
- also <xref linkend="statsfile"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term><command>use-ixfr</command></term>
<listitem>
<para>
@@ -6617,13 +6828,14 @@ options {
<term><command>ixfr-from-differences</command></term>
<listitem>
<para>
- When <userinput>yes</userinput> and the server loads a new version of a master
- zone from its zone file or receives a new version of a slave
- file by a non-incremental zone transfer, it will compare
- the new version to the previous one and calculate a set
- of differences. The differences are then logged in the
- zone's journal file such that the changes can be transmitted
- to downstream slaves as an incremental zone transfer.
+ When <userinput>yes</userinput> and the server loads a new
+ version of a master zone from its zone file or receives a
+ new version of a slave file via zone transfer, it will
+ compare the new version to the previous one and calculate
+ a set of differences. The differences are then logged in
+ the zone's journal file such that the changes can be
+ transmitted to downstream slaves as an incremental zone
+ transfer.
</para>
<para>
By allowing incremental zone transfers to be used for
@@ -6808,6 +7020,13 @@ options {
checks use <command>named-checkzone</command>).
The default is <command>yes</command>.
</para>
+ <para>
+ Check that the two forms of Sender Policy Framework
+ records (TXT records starting with "v=spf1" and SPF) either
+ both exist or both don't exist. Warnings are
+ emitted it they don't and be suppressed with
+ <command>check-spf</command>.
+ </para>
</listitem>
</varlistentry>
@@ -6844,6 +7063,19 @@ options {
</varlistentry>
<varlistentry>
+ <term><command>check-spf</command></term>
+ <listitem>
+ <para>
+ When performing integrity checks, check that the
+ two forms of Sender Policy Framwork records (TXT
+ records starting with "v=spf1" and SPF) both exist
+ or both don't exist and issue a warning if not
+ met. The default is <command>warn</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>zero-no-soa-ttl</command></term>
<listitem>
<para>
@@ -6918,6 +7150,26 @@ options {
</varlistentry>
<varlistentry>
+ <term><command>dnssec-loadkeys-interval</command></term>
+ <listitem>
+ <para>
+ When a zone is configured with <command>auto-dnssec
+ maintain;</command> its key repository must be checked
+ periodically to see if any new keys have been added
+ or any existing keys' timing metadata has been updated
+ (see <xref linkend="man.dnssec-keygen"/> and
+ <xref linkend="man.dnssec-settime"/>). The
+ <command>dnssec-loadkeys-interval</command> option
+ sets the frequency of autoatic repository checks, in
+ minutes. The default is <literal>60</literal> (1 hour),
+ the minimum is <literal>1</literal> (1 minute), and the
+ maximum is <literal>1440</literal> (24 hours); any higher
+ value is silently reduced.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>try-tcp-refresh</command></term>
<listitem>
<para>
@@ -7106,6 +7358,12 @@ options {
necessarily knowing the internal network's addresses.
</para>
<para>
+ Note that <command>allow-query-on</command> is only
+ checked for queries that are permitted by
+ <command>allow-query</command>. A query must be
+ allowed by both ACLs, or it will be refused.
+ </para>
+ <para>
<command>allow-query-on</command> may
also be specified in the <command>zone</command>
statement, in which case it overrides the
@@ -7566,6 +7824,13 @@ avoid-v6-udp-ports {};
<command>also-notify</command> address to send
the notify messages to a port other than the
default of 53.
+ An optional TSIG key can also be specified with each
+ address to cause the notify messages to be signed; this
+ can be useful when sending notifies to multiple views.
+ In place of explicit addresses, one or more named
+ <command>masters</command> lists can be used.
+ </para>
+ <para>
If an <command>also-notify</command> list
is given in a <command>zone</command> statement,
it will override
@@ -8032,8 +8297,10 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
approaches
the specified size, some of the oldest transactions in the
journal
- will be automatically removed. The default is
- <literal>unlimited</literal>.
+ will be automatically removed. The largest permitted
+ value is 2 gigabytes. The default is
+ <literal>unlimited</literal>, which also
+ means 2 gigabytes.
This may also be set on a per-zone basis.
</para>
</listitem>
@@ -8480,8 +8747,10 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</para>
<para>
If multiple <command>rrset-order</command> statements
- appear,
- they are not combined &mdash; the last one applies.
+ appear, they are not combined &mdash; the last one applies.
+ </para>
+ <para>
+ By default, all records are returned in random order.
</para>
<note>
@@ -8639,6 +8908,15 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
It is expected that this parameter may be removed
in a future version once there is a standard type.
</para>
+ <para>
+ These records can be removed from the zone once named
+ has completed signing the zone with the matching key
+ using <command>nsupdate</command> or
+ <command>rndc signing -clear</command>.
+ <command>rndc signing -clear</command> is the only supported
+ way to remove these records from
+ <command>inline-signing</command> zones.
+ </para>
</listitem>
</varlistentry>
@@ -8732,9 +9010,14 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
the file format of zone files (see
<xref linkend="zonefile_format"/>).
The default value is <constant>text</constant>, which is the
- standard textual representation. Files in other formats
- than <constant>text</constant> are typically expected
- to be generated by the <command>named-compilezone</command> tool.
+ standard textual representation, except for slave zones,
+ in which the default value is <constant>raw</constant>.
+ Files in other formats than <constant>text</constant> are
+ typically expected to be generated by the
+ <command>named-compilezone</command> tool, or dumped by
+ <command>named</command>.
+ </para>
+ <para>
Note that when a zone file in a different format than
<constant>text</constant> is loaded, <command>named</command>
may omit some of the checks which would be performed for a
@@ -8803,6 +9086,18 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><command>max-rsa-exponent-size</command></term>
+ <listitem>
+ <para>
+ The maximum RSA exponent size, in bits, that will
+ be accepted when validating. Valid values are 35
+ to 4096 bits. The default zero (0) is also accepted
+ and is equivalent to 4096.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</sect3>
@@ -8819,12 +9114,16 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
built-in view (see <xref linkend="view_statement_grammar"/>) of
class
<command>CHAOS</command> which is separate from the
- default view of
- class <command>IN</command>; therefore, any global
- server options
- such as <command>allow-query</command> do not apply
- the these zones.
- If you feel the need to disable these zones, use the options
+ default view of class <command>IN</command>. Most global
+ configuration options (<command>allow-query</command>,
+ etc) will apply to this view, but some are locally
+ overridden: <command>notify</command>,
+ <command>recursion</command> and
+ <command>allow-new-zones</command> are
+ always set to <userinput>no</userinput>.
+ </para>
+ <para>
+ If you need to disable these zones, use the options
below, or hide the built-in <command>CHAOS</command>
view by
defining an explicit view of class <command>CHAOS</command>
@@ -8897,7 +9196,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
servers. The official servers which cover these namespaces
return NXDOMAIN responses to these queries. In particular,
these cover the reverse namespaces for addresses from
- RFC 1918, RFC 4193, and RFC 5737. They also include the
+ RFC 1918, RFC 4193, RFC 5737 and RFC 6598. They also include the
reverse namespace for IPv6 local address (locally assigned),
IPv6 link local addresses, the IPv6 loopback address and the
IPv6 unknown address.
@@ -8928,6 +9227,70 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
<listitem>30.172.IN-ADDR.ARPA</listitem>
<listitem>31.172.IN-ADDR.ARPA</listitem>
<listitem>168.192.IN-ADDR.ARPA</listitem>
+ <listitem>64.100.IN-ADDR.ARPA</listitem>
+ <listitem>65.100.IN-ADDR.ARPA</listitem>
+ <listitem>66.100.IN-ADDR.ARPA</listitem>
+ <listitem>67.100.IN-ADDR.ARPA</listitem>
+ <listitem>68.100.IN-ADDR.ARPA</listitem>
+ <listitem>69.100.IN-ADDR.ARPA</listitem>
+ <listitem>70.100.IN-ADDR.ARPA</listitem>
+ <listitem>71.100.IN-ADDR.ARPA</listitem>
+ <listitem>72.100.IN-ADDR.ARPA</listitem>
+ <listitem>73.100.IN-ADDR.ARPA</listitem>
+ <listitem>74.100.IN-ADDR.ARPA</listitem>
+ <listitem>75.100.IN-ADDR.ARPA</listitem>
+ <listitem>76.100.IN-ADDR.ARPA</listitem>
+ <listitem>77.100.IN-ADDR.ARPA</listitem>
+ <listitem>78.100.IN-ADDR.ARPA</listitem>
+ <listitem>79.100.IN-ADDR.ARPA</listitem>
+ <listitem>80.100.IN-ADDR.ARPA</listitem>
+ <listitem>81.100.IN-ADDR.ARPA</listitem>
+ <listitem>82.100.IN-ADDR.ARPA</listitem>
+ <listitem>83.100.IN-ADDR.ARPA</listitem>
+ <listitem>84.100.IN-ADDR.ARPA</listitem>
+ <listitem>85.100.IN-ADDR.ARPA</listitem>
+ <listitem>86.100.IN-ADDR.ARPA</listitem>
+ <listitem>87.100.IN-ADDR.ARPA</listitem>
+ <listitem>88.100.IN-ADDR.ARPA</listitem>
+ <listitem>89.100.IN-ADDR.ARPA</listitem>
+ <listitem>90.100.IN-ADDR.ARPA</listitem>
+ <listitem>91.100.IN-ADDR.ARPA</listitem>
+ <listitem>92.100.IN-ADDR.ARPA</listitem>
+ <listitem>93.100.IN-ADDR.ARPA</listitem>
+ <listitem>94.100.IN-ADDR.ARPA</listitem>
+ <listitem>95.100.IN-ADDR.ARPA</listitem>
+ <listitem>96.100.IN-ADDR.ARPA</listitem>
+ <listitem>97.100.IN-ADDR.ARPA</listitem>
+ <listitem>98.100.IN-ADDR.ARPA</listitem>
+ <listitem>99.100.IN-ADDR.ARPA</listitem>
+ <listitem>100.100.IN-ADDR.ARPA</listitem>
+ <listitem>101.100.IN-ADDR.ARPA</listitem>
+ <listitem>102.100.IN-ADDR.ARPA</listitem>
+ <listitem>103.100.IN-ADDR.ARPA</listitem>
+ <listitem>104.100.IN-ADDR.ARPA</listitem>
+ <listitem>105.100.IN-ADDR.ARPA</listitem>
+ <listitem>106.100.IN-ADDR.ARPA</listitem>
+ <listitem>107.100.IN-ADDR.ARPA</listitem>
+ <listitem>108.100.IN-ADDR.ARPA</listitem>
+ <listitem>109.100.IN-ADDR.ARPA</listitem>
+ <listitem>110.100.IN-ADDR.ARPA</listitem>
+ <listitem>111.100.IN-ADDR.ARPA</listitem>
+ <listitem>112.100.IN-ADDR.ARPA</listitem>
+ <listitem>113.100.IN-ADDR.ARPA</listitem>
+ <listitem>114.100.IN-ADDR.ARPA</listitem>
+ <listitem>115.100.IN-ADDR.ARPA</listitem>
+ <listitem>116.100.IN-ADDR.ARPA</listitem>
+ <listitem>117.100.IN-ADDR.ARPA</listitem>
+ <listitem>118.100.IN-ADDR.ARPA</listitem>
+ <listitem>119.100.IN-ADDR.ARPA</listitem>
+ <listitem>120.100.IN-ADDR.ARPA</listitem>
+ <listitem>121.100.IN-ADDR.ARPA</listitem>
+ <listitem>122.100.IN-ADDR.ARPA</listitem>
+ <listitem>123.100.IN-ADDR.ARPA</listitem>
+ <listitem>124.100.IN-ADDR.ARPA</listitem>
+ <listitem>125.100.IN-ADDR.ARPA</listitem>
+ <listitem>126.100.IN-ADDR.ARPA</listitem>
+ <listitem>127.100.IN-ADDR.ARPA</listitem>
<listitem>0.IN-ADDR.ARPA</listitem>
<listitem>127.IN-ADDR.ARPA</listitem>
<listitem>254.169.IN-ADDR.ARPA</listitem>
@@ -9188,7 +9551,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
to get access to an internal node of your local network
that couldn't be externally accessed otherwise.
See the paper available at
- <ulink>
+ <ulink url="http://portal.acm.org/citation.cfm?id=1315245.1315298">
http://portal.acm.org/citation.cfm?id=1315245.1315298
</ulink>
for more details about the attacks.
@@ -9328,14 +9691,15 @@ deny-answer-aliases { "example.net"; };
They are encoded as subdomains of
<userinput>rpz-nsdomain</userinput> relativized
to the RPZ origin name.
- </para>
-
- <para>
NSIP triggers match IP addresses in A and
AAAA RRsets for domains that can be checked against NSDNAME
policy records.
NSIP triggers are encoded like IP triggers except as subdomains of
<userinput>rpz-nsip</userinput>.
+ NSDNAME and NSIP triggers are checked only for names with at
+ least <command>min-ns-dots</command> dots.
+ The default value of <command>min-ns-dots</command> is 1 to
+ exclude top level domains.
</para>
<para>
@@ -9375,17 +9739,6 @@ deny-answer-aliases { "example.net"; };
</para>
<para>
- Authority verification issues and variations in authority data
- can cause inconsistent results for NSIP and NSDNAME policy records.
- Glue NS records often differ from authoritative NS records.
- So they are available
- only when <acronym>BIND</acronym> is built with the
- <userinput>--enable-rpz-nsip</userinput> or
- <userinput>--enable-rpz-nsdname</userinput> options
- on the "configure" command line.
- </para>
-
- <para>
RPZ record sets are sets of any types of DNS record except
DNAME or DNSSEC that encode actions or responses to queries.
<itemizedlist>
@@ -9409,7 +9762,7 @@ deny-answer-aliases { "example.net"; };
walled garden's authority DNS server.
</listitem>
<listitem>The <command>PASSTHRU</command> policy is specified
- by a CNAME whose target is <command>rpz_passthru.</command>
+ by a CNAME whose target is <command>rpz-passthru.</command>
It causes the response to not be rewritten
and is most often used to "poke holes" in policies for
CIDR blocks.
@@ -9523,6 +9876,26 @@ bzone.domain.com CNAME garden.example.com.
ns.domain.com.rpz-nsdname CNAME .
48.zz.2.2001.rpz-nsip CNAME .
</programlisting>
+ <para>
+ RPZ can affect server performance.
+ Each configured response policy zone requires the server to
+ perform one to four additional database lookups before a
+ query can be answered.
+ For example, a DNS server with four policy zones, each with all
+ four kinds of response triggers, QNAME, IP, NSIP, and
+ NSDNAME, requires a total of 17 times as many database
+ lookups as a similar DNS server with no response policy zones.
+ A <acronym>BIND9</acronym> server with adequate memory and one
+ response policy zone with QNAME and IP triggers might achieve a
+ maximum queries-per-second rate about 20% lower.
+ A server with four response policy zones with QNAME and IP
+ triggers might have a maximum QPS rate about 50% lower.
+ </para>
+
+ <para>
+ Responses rewritten by RPZ are counted in the
+ <command>RPZRewrites</command> statistics.
+ </para>
</sect3>
</sect2>
@@ -9614,8 +9987,9 @@ ns.domain.com.rpz-nsdname CNAME .
the local server, acting as a slave, will request incremental zone
transfers from the given remote server, a master. If not set, the
value of the <command>request-ixfr</command> option in
- the view or
- global options block is used as a default.
+ the view or global options block is used as a default. It may
+ also be set in the zone block and, if set there, it will
+ override the global or view setting for that zone.
</para>
<para>
@@ -9807,6 +10181,35 @@ ns.domain.com.rpz-nsdname CNAME .
<command>named</command> will not open any communication channels.
</para>
+ <para>
+ If the statistics channel is configured to listen on 127.0.0.1
+ port 8888, then the statistics are accessible in XML format at
+ <ulink url="http://127.0.0.1:8888/"
+ >http://127.0.0.1:8888/</ulink> or
+ <ulink url="http://127.0.0.1:8888/xml"
+ >http://127.0.0.1:8888/xml</ulink>. A CSS file is
+ included which can format the XML statistics into tables
+ when viewed with a stylesheet-capable browser. When
+ <acronym>BIND</acronym> 9 is configured with --enable-newstats,
+ a new XML schema is used (version 3) which adds additional
+ zone statistics and uses a flatter tree for more efficient
+ parsing. The stylesheet included uses the Google Charts API
+ to render data into into charts and graphs when using a
+ javascript-capable browser.
+ </para>
+
+ <para>
+ Applications that depend on a particular XML schema
+ can request
+ <ulink url="http://127.0.0.1:8888/xml/v2"
+ >http://127.0.0.1:8888/xml/v2</ulink> for version 2
+ of the statistics XML schema or
+ <ulink url="http://127.0.0.1:8888/xml/v3"
+ >http://127.0.0.1:8888/xml/v3</ulink> for version 3.
+ If the requested schema is supported by the server, then
+ it will respond; if not, it will return a "page not found"
+ error.
+ </para>
</sect2>
<sect2 id="trusted-keys">
@@ -9864,8 +10267,8 @@ ns.domain.com.rpz-nsdname CNAME .
<title><command>managed-keys</command> Statement Grammar</title>
<programlisting><command>managed-keys</command> {
- <replaceable>string</replaceable> initial-key <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ;
- <optional> <replaceable>string</replaceable> initial-key <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; <optional>...</optional></optional>
+ <replaceable>name</replaceable> <literal>initial-key</literal> <replaceable>flags</replaceable> <replaceable>protocol</replaceable> <replaceable>algorithm</replaceable> <replaceable>key-data</replaceable> ;
+ <optional> <replaceable>name</replaceable> <literal>initial-key</literal> <replaceable>flags</replaceable> <replaceable>protocol</replaceable> <replaceable>algorithm</replaceable> <replaceable>key-data</replaceable> ; <optional>...</optional></optional>
};
</programlisting>
@@ -9973,13 +10376,16 @@ ns.domain.com.rpz-nsdname CNAME .
<command>named</command>.)
</para>
<para>
- If the <command>dnssec-lookaside</command> option is
+ If the <command>dnssec-validation</command> option is
set to <userinput>auto</userinput>, <command>named</command>
will automatically initialize a managed key for the
- zone <literal>dlv.isc.org</literal>. The key that is
- used to initialize the key maintenance process is built
- into <command>named</command>, and can be overridden
- from <command>bindkeys-file</command>.
+ root zone. Similarly, if the <command>dnssec-lookaside</command>
+ option is set to <userinput>auto</userinput>,
+ <command>named</command> will automatically initialize
+ a managed key for the zone <literal>dlv.isc.org</literal>.
+ In both cases, the key that is used to initialize the key
+ maintenance process is built into <command>named</command>,
+ and can be overridden from <command>bindkeys-file</command>.
</para>
</sect2>
@@ -10135,12 +10541,16 @@ view "external" {
<optional> allow-query-on { <replaceable>address_match_list</replaceable> }; </optional>
<optional> allow-transfer { <replaceable>address_match_list</replaceable> }; </optional>
<optional> allow-update { <replaceable>address_match_list</replaceable> }; </optional>
+ <optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> dnssec-dnskey-kskonly <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> dnssec-loadkeys-interval <replaceable>number</replaceable>; </optional>
<optional> update-policy <replaceable>local</replaceable> | { <replaceable>update_policy_rule</replaceable> <optional>...</optional> }; </optional>
<optional> also-notify { <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> ;
<optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> ; ... </optional> }; </optional>
<optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
<optional> check-mx (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
<optional> check-wildcard <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> check-spf ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
<optional> check-integrity <replaceable>yes_or_no</replaceable> ; </optional>
<optional> dialup <replaceable>dialup_option</replaceable> ; </optional>
<optional> file <replaceable>string</replaceable> ; </optional>
@@ -10152,6 +10562,7 @@ view "external" {
<optional> ixfr-base <replaceable>string</replaceable> ; </optional>
<optional> ixfr-from-differences <replaceable>yes_or_no</replaceable>; </optional>
<optional> ixfr-tmp-file <replaceable>string</replaceable> ; </optional>
+ <optional> request-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
<optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable> ; </optional>
<optional> max-ixfr-log-size <replaceable>number</replaceable> ; </optional>
<optional> max-transfer-idle-out <replaceable>number</replaceable> ; </optional>
@@ -10162,7 +10573,7 @@ view "external" {
<optional> pubkey <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>number</replaceable> <replaceable>string</replaceable> ; </optional>
<optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> ; </optional>
<optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> ; </optional>
- <optional> zone-statistics <replaceable>yes_or_no</replaceable> ; </optional>
+ <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
<optional> sig-validity-interval <replaceable>number</replaceable> <optional><replaceable>number</replaceable></optional> ; </optional>
<optional> sig-signing-nodes <replaceable>number</replaceable> ; </optional>
<optional> sig-signing-signatures <replaceable>number</replaceable> ; </optional>
@@ -10174,7 +10585,9 @@ view "external" {
<optional> max-retry-time <replaceable>number</replaceable> ; </optional>
<optional> key-directory <replaceable>path_name</replaceable>; </optional>
<optional> auto-dnssec <constant>allow</constant>|<constant>maintain</constant>|<constant>off</constant>; </optional>
+ <optional> inline-signing <replaceable>yes_or_no</replaceable>; </optional>
<optional> zero-no-soa-ttl <replaceable>yes_or_no</replaceable> ; </optional>
+ <optional> serial-update-method <constant>increment</constant>|<constant>unixtime</constant>; </optional>
};
zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
@@ -10184,13 +10597,15 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
<optional> allow-query-on { <replaceable>address_match_list</replaceable> }; </optional>
<optional> allow-transfer { <replaceable>address_match_list</replaceable> }; </optional>
<optional> allow-update-forwarding { <replaceable>address_match_list</replaceable> }; </optional>
- <optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
<optional> dnssec-update-mode ( <replaceable>maintain</replaceable> | <replaceable>no-resign</replaceable> ); </optional>
+ <optional> update-check-ksk <replaceable>yes_or_no</replaceable>; </optional>
<optional> dnssec-dnskey-kskonly <replaceable>yes_or_no</replaceable>; </optional>
+ <optional> dnssec-loadkeys-interval <replaceable>number</replaceable>; </optional>
<optional> dnssec-secure-to-insecure <replaceable>yes_or_no</replaceable> ; </optional>
<optional> try-tcp-refresh <replaceable>yes_or_no</replaceable>; </optional>
- <optional> also-notify { <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> ;
- <optional> <replaceable>ip_addr</replaceable> <optional>port <replaceable>ip_port</replaceable></optional> ; ... </optional> }; </optional>
+ <optional> also-notify <optional>port <replaceable>ip_port</replaceable></optional> { ( <replaceable>masters_list</replaceable> | <replaceable>ip_addr</replaceable>
+ <optional>port <replaceable>ip_port</replaceable></optional>
+ <optional>key <replaceable>key</replaceable></optional> ) ; <optional>...</optional> }; </optional>
<optional> check-names (<constant>warn</constant>|<constant>fail</constant>|<constant>ignore</constant>) ; </optional>
<optional> dialup <replaceable>dialup_option</replaceable> ; </optional>
<optional> file <replaceable>string</replaceable> ; </optional>
@@ -10223,12 +10638,19 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
<optional> use-alt-transfer-source <replaceable>yes_or_no</replaceable>; </optional>
<optional> notify-source (<replaceable>ip4_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> ; </optional>
<optional> notify-source-v6 (<replaceable>ip6_addr</replaceable> | <constant>*</constant>) <optional>port <replaceable>ip_port</replaceable></optional> ; </optional>
- <optional> zone-statistics <replaceable>yes_or_no</replaceable> ; </optional>
+ <optional> zone-statistics <replaceable>full</replaceable> | <replaceable>terse</replaceable> | <replaceable>none</replaceable>; </optional>
+ <optional> sig-validity-interval <replaceable>number</replaceable> <optional><replaceable>number</replaceable></optional> ; </optional>
+ <optional> sig-signing-nodes <replaceable>number</replaceable> ; </optional>
+ <optional> sig-signing-signatures <replaceable>number</replaceable> ; </optional>
+ <optional> sig-signing-type <replaceable>number</replaceable> ; </optional>
<optional> database <replaceable>string</replaceable> ; </optional>
<optional> min-refresh-time <replaceable>number</replaceable> ; </optional>
<optional> max-refresh-time <replaceable>number</replaceable> ; </optional>
<optional> min-retry-time <replaceable>number</replaceable> ; </optional>
<optional> max-retry-time <replaceable>number</replaceable> ; </optional>
+ <optional> key-directory <replaceable>path_name</replaceable>; </optional>
+ <optional> auto-dnssec <constant>allow</constant>|<constant>maintain</constant>|<constant>off</constant>; </optional>
+ <optional> inline-signing <replaceable>yes_or_no</replaceable>; </optional>
<optional> multi-master <replaceable>yes_or_no</replaceable> ; </optional>
<optional> zero-no-soa-ttl <replaceable>yes_or_no</replaceable> ; </optional>
};
@@ -10288,6 +10710,13 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
<optional> delegation-only <replaceable>yes_or_no</replaceable> ; </optional>
};
+zone <replaceable>"."</replaceable> <optional><replaceable>class</replaceable></optional> {
+ type redirect;
+ file <replaceable>string</replaceable> ;
+ <optional> masterfile-format (<constant>text</constant>|<constant>raw</constant>) ; </optional>
+ <optional> allow-query { <replaceable>address_match_list</replaceable> }; </optional>
+};
+
zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replaceable></optional> {
type delegation-only;
};
@@ -10531,6 +10960,64 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
<row rowsep="0">
<entry colname="1">
<para>
+ <varname>redirect</varname>
+ </para>
+ </entry>
+ <entry colname="2">
+ <para>
+ Redirect zones are used to provide answers to
+ queries when normal resolution would result in
+ NXDOMAIN being returned.
+ Only one redirect zone is supported
+ per view. <command>allow-query</command> can be
+ used to restrict which clients see these answers.
+ </para>
+ <para>
+ If the client has requested DNSSEC records (DO=1) and
+ the NXDOMAIN response is signed then no substitution
+ will occur.
+ </para>
+ <para>
+ To redirect all NXDOMAIN responses to
+ 100.100.100.2 and
+ 2001:ffff:ffff::100.100.100.2, one would
+ configure a type redirect zone named ".",
+ with the zone file containing wildcard records
+ that point to the desired addresses:
+ <literal>"*. IN A 100.100.100.2"</literal>
+ and
+ <literal>"*. IN AAAA 2001:ffff:ffff::100.100.100.2"</literal>.
+ </para>
+ <para>
+ To redirect all Spanish names (under .ES) one
+ would use similar entries but with the names
+ "*.ES." instead of "*.". To redirect all
+ commercial Spanish names (under COM.ES) one
+ would use wildcard entries called "*.COM.ES.".
+ </para>
+ <para>
+ Note that the redirect zone supports all
+ possible types; it is not limited to A and
+ AAAA records.
+ </para>
+ <para>
+ Because redirect zones are not referenced
+ directly by name, they are not kept in the
+ zone lookup table with normal master and slave
+ zones. Consequently, it is not currently possible
+ to use
+ <command>rndc reload
+ <replaceable>zonename</replaceable></command>
+ to reload a redirect zone. However, when using
+ <command>rndc reload</command> without specifying
+ a zone name, redirect zones will be reloaded along
+ with other zones.
+ </para>
+ </entry>
+ </row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para>
<varname>delegation-only</varname>
</para>
</entry>
@@ -10674,6 +11161,9 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
with each <command>also-notify</command>
address to send the notify
messages to a port other than the default of 53.
+ A TSIG key may also be specified to cause the
+ <literal>NOTIFY</literal> to be signed by the
+ given key.
<command>also-notify</command> is not
meaningful for stub zones.
The default is the empty list.
@@ -10707,6 +11197,16 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
</varlistentry>
<varlistentry>
+ <term><command>check-spf</command></term>
+ <listitem>
+ <para>
+ See the description of
+ <command>check-spf</command> in <xref linkend="boolean_options"/>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>check-wildcard</command></term>
<listitem>
<para>
@@ -10757,6 +11257,16 @@ zone <replaceable>zone_name</replaceable> <optional><replaceable>class</replacea
</varlistentry>
<varlistentry>
+ <term><command>dnssec-update-mode</command></term>
+ <listitem>
+ <para>
+ See the description of
+ <command>dnssec-update-mode</command> in <xref linkend="options"/>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>dnssec-dnskey-kskonly</command></term>
<listitem>
<para>
@@ -11259,23 +11769,55 @@ example.com. NS ns2.example.net.
zone the first time, the repository will be searched
for changes periodically, regardless of whether
<command>rndc loadkeys</command> is used. The recheck
- interval is hard-coded to
- one hour.
+ interval is defined by
+ <command>dnssec-loadkeys-interval</command>.)
+ </para>
+ <para>
+ The default setting is <command>auto-dnssec off</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>serial-update-method</command></term>
+ <listitem>
+ <para>
+ Zones configured for dynamic DNS may use this
+ option to set the update method that will be used for
+ the zone serial number in the SOA record.
</para>
<para>
- <command>auto-dnssec create;</command> includes the
- above, but also allows <command>named</command>
- to create new keys in the key repository when needed.
- (NOTE: This option is not yet implemented; the syntax is
- being reserved for future use.)
+ With the default setting of
+ <command>serial-update-method increment;</command>, the
+ SOA serial number will be incremented by one each time
+ the zone is updated.
</para>
<para>
- The default setting is <command>auto-dnssec off</command>.
+ When set to
+ <command>serial-update-method unixtime;</command>, the
+ SOA serial number will be set to the number of seconds
+ since the UNIX epoch, unless the serial number is
+ already greater than or equal to that value, in which
+ case it is simply incremented by one.
</para>
</listitem>
</varlistentry>
<varlistentry>
+ <term><command>inline-signing</command></term>
+ <listitem>
+ <para>
+ If <literal>yes</literal>, this enables
+ "bump in the wire" signing of a zone, where a
+ unsigned zone is transferred in or loaded from
+ disk and a signed version of the zone is served,
+ with possibly, a different serial number. This
+ behaviour is disabled by default.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>multi-master</command></term>
<listitem>
<para>
@@ -14094,6 +14636,19 @@ HOST-127.EXAMPLE. MX 0 .
</para>
</entry>
</row>
+ <row rowsep="0">
+ <entry colname="1">
+ <para><command>RPZRewrites</command></para>
+ </entry>
+ <entry colname="2">
+ <para><command></command></para>
+ </entry>
+ <entry colname="3">
+ <para>
+ Response policy zone rewrites.
+ </para>
+ </entry>
+ </row>
</tbody>
</tgroup>
</informaltable>
@@ -14915,14 +15470,6 @@ zone "example.com" {
This allows recursive queries of the server from the outside
unless recursion has been previously disabled.
</para>
- <para>
- For more information on how to use ACLs to protect your server,
- see the <emphasis>AUSCERT</emphasis> advisory at:
- </para>
- <para>
- <ulink url="ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos"
- >ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos</ulink>
- </para>
</sect1>
<sect1>
<title><command>Chroot</command> and <command>Setuid</command></title>
@@ -16545,12 +17092,15 @@ zone "example.com" {
<title>Manual pages</title>
<xi:include href="../../bin/dig/dig.docbook"/>
<xi:include href="../../bin/dig/host.docbook"/>
+ <xi:include href="../../bin/python/dnssec-checkds.docbook"/>
+ <xi:include href="../../bin/python/dnssec-coverage.docbook"/>
<xi:include href="../../bin/dnssec/dnssec-dsfromkey.docbook"/>
<xi:include href="../../bin/dnssec/dnssec-keyfromlabel.docbook"/>
<xi:include href="../../bin/dnssec/dnssec-keygen.docbook"/>
<xi:include href="../../bin/dnssec/dnssec-revoke.docbook"/>
<xi:include href="../../bin/dnssec/dnssec-settime.docbook"/>
<xi:include href="../../bin/dnssec/dnssec-signzone.docbook"/>
+ <xi:include href="../../bin/dnssec/dnssec-verify.docbook"/>
<xi:include href="../../bin/check/named-checkconf.docbook"/>
<xi:include href="../../bin/check/named-checkzone.docbook"/>
<xi:include href="../../bin/named/named.docbook"/>
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch01.html b/contrib/bind9/doc/arm/Bv9ARM.ch01.html
index 420d7b355996..39211c7bdd10 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch01.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch01.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -45,17 +45,17 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564375">Scope of Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564398">Organization of This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564538">Conventions Used in This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564720">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564378">Scope of Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564402">Organization of This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564541">Conventions Used in This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564723">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564741">DNS Fundamentals</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564775">Domains and Domain Names</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567180">Zones</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567257">Authoritative Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567430">Caching Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567560">Name Servers in Multiple Roles</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564744">DNS Fundamentals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564846">Domains and Domain Names</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567184">Zones</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567260">Authoritative Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567433">Caching Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567563">Name Servers in Multiple Roles</a></span></dt>
</dl></dd>
</dl>
</div>
@@ -71,7 +71,7 @@
</p>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564375"></a>Scope of Document</h2></div></div></div>
+<a name="id2564378"></a>Scope of Document</h2></div></div></div>
<p>
The Berkeley Internet Name Domain
(<acronym class="acronym">BIND</acronym>) implements a
@@ -82,12 +82,12 @@
system administrators.
</p>
<p>
- This version of the manual corresponds to BIND version 9.8.
+ This version of the manual corresponds to BIND version 9.9.
</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564398"></a>Organization of This Document</h2></div></div></div>
+<a name="id2564402"></a>Organization of This Document</h2></div></div></div>
<p>
In this document, <span class="emphasis"><em>Chapter 1</em></span> introduces
the basic <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym> concepts. <span class="emphasis"><em>Chapter 2</em></span>
@@ -116,7 +116,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564538"></a>Conventions Used in This Document</h2></div></div></div>
+<a name="id2564541"></a>Conventions Used in This Document</h2></div></div></div>
<p>
In this document, we use the following general typographic
conventions:
@@ -243,7 +243,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2564720"></a>The Domain Name System (<acronym class="acronym">DNS</acronym>)</h2></div></div></div>
+<a name="id2564723"></a>The Domain Name System (<acronym class="acronym">DNS</acronym>)</h2></div></div></div>
<p>
The purpose of this document is to explain the installation
and upkeep of the <acronym class="acronym">BIND</acronym> (Berkeley Internet
@@ -253,7 +253,7 @@
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2564741"></a>DNS Fundamentals</h3></div></div></div>
+<a name="id2564744"></a>DNS Fundamentals</h3></div></div></div>
<p>
The Domain Name System (DNS) is a hierarchical, distributed
database. It stores information for mapping Internet host names to
@@ -275,7 +275,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2564775"></a>Domains and Domain Names</h3></div></div></div>
+<a name="id2564846"></a>Domains and Domain Names</h3></div></div></div>
<p>
The data stored in the DNS is identified by <span class="emphasis"><em>domain names</em></span> that are organized as a tree according to
organizational or administrative boundaries. Each node of the tree,
@@ -321,7 +321,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567180"></a>Zones</h3></div></div></div>
+<a name="id2567184"></a>Zones</h3></div></div></div>
<p>
To properly operate a name server, it is important to understand
the difference between a <span class="emphasis"><em>zone</em></span>
@@ -374,7 +374,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567257"></a>Authoritative Name Servers</h3></div></div></div>
+<a name="id2567260"></a>Authoritative Name Servers</h3></div></div></div>
<p>
Each zone is served by at least
one <span class="emphasis"><em>authoritative name server</em></span>,
@@ -391,7 +391,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567281"></a>The Primary Master</h4></div></div></div>
+<a name="id2567284"></a>The Primary Master</h4></div></div></div>
<p>
The authoritative server where the master copy of the zone
data is maintained is called the
@@ -411,7 +411,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567379"></a>Slave Servers</h4></div></div></div>
+<a name="id2567382"></a>Slave Servers</h4></div></div></div>
<p>
The other authoritative servers, the <span class="emphasis"><em>slave</em></span>
servers (also known as <span class="emphasis"><em>secondary</em></span> servers)
@@ -427,7 +427,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567400"></a>Stealth Servers</h4></div></div></div>
+<a name="id2567403"></a>Stealth Servers</h4></div></div></div>
<p>
Usually all of the zone's authoritative servers are listed in
NS records in the parent zone. These NS records constitute
@@ -462,7 +462,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567430"></a>Caching Name Servers</h3></div></div></div>
+<a name="id2567433"></a>Caching Name Servers</h3></div></div></div>
<p>
The resolver libraries provided by most operating systems are
<span class="emphasis"><em>stub resolvers</em></span>, meaning that they are not
@@ -489,7 +489,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2567533"></a>Forwarding</h4></div></div></div>
+<a name="id2567537"></a>Forwarding</h4></div></div></div>
<p>
Even a caching name server does not necessarily perform
the complete recursive lookup itself. Instead, it can
@@ -516,7 +516,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567560"></a>Name Servers in Multiple Roles</h3></div></div></div>
+<a name="id2567563"></a>Name Servers in Multiple Roles</h3></div></div></div>
<p>
The <acronym class="acronym">BIND</acronym> name server can
simultaneously act as
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch02.html b/contrib/bind9/doc/arm/Bv9ARM.ch02.html
index 296578197166..c62ec1c562d5 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch02.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch02.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -45,16 +45,16 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567594">Hardware requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567621">CPU Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567634">Memory Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567729">Name Server Intensive Environment Issues</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567739">Supported Operating Systems</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567597">Hardware requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567624">CPU Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567637">Memory Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567732">Name Server Intensive Environment Issues</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567742">Supported Operating Systems</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567594"></a>Hardware requirements</h2></div></div></div>
+<a name="id2567597"></a>Hardware requirements</h2></div></div></div>
<p>
<acronym class="acronym">DNS</acronym> hardware requirements have
traditionally been quite modest.
@@ -73,7 +73,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567621"></a>CPU Requirements</h2></div></div></div>
+<a name="id2567624"></a>CPU Requirements</h2></div></div></div>
<p>
CPU requirements for <acronym class="acronym">BIND</acronym> 9 range from
i486-class machines
@@ -84,7 +84,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567634"></a>Memory Requirements</h2></div></div></div>
+<a name="id2567637"></a>Memory Requirements</h2></div></div></div>
<p>
The memory of the server has to be large enough to fit the
cache and zones loaded off disk. The <span><strong class="command">max-cache-size</strong></span>
@@ -107,7 +107,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567729"></a>Name Server Intensive Environment Issues</h2></div></div></div>
+<a name="id2567732"></a>Name Server Intensive Environment Issues</h2></div></div></div>
<p>
For name server intensive environments, there are two alternative
configurations that may be used. The first is where clients and
@@ -124,7 +124,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2567739"></a>Supported Operating Systems</h2></div></div></div>
+<a name="id2567742"></a>Supported Operating Systems</h2></div></div></div>
<p>
ISC <acronym class="acronym">BIND</acronym> 9 compiles and runs on a large
number
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch03.html b/contrib/bind9/doc/arm/Bv9ARM.ch03.html
index 32000b188659..0b8819ec832b 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch03.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch03.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -47,14 +47,14 @@
<dl>
<dt><span class="sect1"><a href="Bv9ARM.ch03.html#sample_configuration">Sample Configurations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567771">A Caching-only Name Server</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567992">An Authoritative-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567774">A Caching-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567995">An Authoritative-only Name Server</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568014">Load Balancing</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568369">Name Server Operations</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568018">Load Balancing</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568372">Name Server Operations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568374">Tools for Use With the Name Server Daemon</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570421">Signals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568377">Tools for Use With the Name Server Daemon</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570600">Signals</a></span></dt>
</dl></dd>
</dl>
</div>
@@ -68,7 +68,7 @@
<a name="sample_configuration"></a>Sample Configurations</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567771"></a>A Caching-only Name Server</h3></div></div></div>
+<a name="id2567774"></a>A Caching-only Name Server</h3></div></div></div>
<p>
The following sample configuration is appropriate for a caching-only
name server for use by clients internal to a corporation. All
@@ -98,7 +98,7 @@ zone "0.0.127.in-addr.arpa" {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2567992"></a>An Authoritative-only Name Server</h3></div></div></div>
+<a name="id2567995"></a>An Authoritative-only Name Server</h3></div></div></div>
<p>
This sample configuration is for an authoritative-only server
that is the master server for "<code class="filename">example.com</code>"
@@ -146,7 +146,7 @@ zone "eng.example.com" {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2568014"></a>Load Balancing</h2></div></div></div>
+<a name="id2568018"></a>Load Balancing</h2></div></div></div>
<p>
A primitive form of load balancing can be achieved in
the <acronym class="acronym">DNS</acronym> by using multiple records
@@ -289,10 +289,10 @@ zone "eng.example.com" {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2568369"></a>Name Server Operations</h2></div></div></div>
+<a name="id2568372"></a>Name Server Operations</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2568374"></a>Tools for Use With the Name Server Daemon</h3></div></div></div>
+<a name="id2568377"></a>Tools for Use With the Name Server Daemon</h3></div></div></div>
<p>
This section describes several indispensable diagnostic,
administrative and monitoring tools available to the system
@@ -532,30 +532,41 @@ zone "eng.example.com" {
[<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</span>]</code></strong></span></dt>
<dd><p>
Suspend updates to a dynamic zone. If no zone is
- specified,
- then all zones are suspended. This allows manual
- edits to be made to a zone normally updated by dynamic
- update. It
- also causes changes in the journal file to be synced
- into the master
- and the journal file to be removed. All dynamic
- update attempts will
- be refused while the zone is frozen.
+ specified, then all zones are suspended. This allows
+ manual edits to be made to a zone normally updated by
+ dynamic update. It also causes changes in the
+ journal file to be synced into the master file.
+ All dynamic update attempts will be refused while
+ the zone is frozen.
</p></dd>
<dt><span class="term"><strong class="userinput"><code>thaw
[<span class="optional"><em class="replaceable"><code>zone</code></em>
[<span class="optional"><em class="replaceable"><code>class</code></em>
[<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</span>]</code></strong></span></dt>
<dd><p>
- Enable updates to a frozen dynamic zone. If no zone
- is
- specified, then all frozen zones are enabled. This
- causes
- the server to reload the zone from disk, and
- re-enables dynamic updates
- after the load has completed. After a zone is thawed,
- dynamic updates
- will no longer be refused.
+ Enable updates to a frozen dynamic zone. If no
+ zone is specified, then all frozen zones are
+ enabled. This causes the server to reload the zone
+ from disk, and re-enables dynamic updates after the
+ load has completed. After a zone is thawed,
+ dynamic updates will no longer be refused. If
+ the zone has changed and the
+ <span><strong class="command">ixfr-from-differences</strong></span> option is
+ in use, then the journal file will be updated to
+ reflect changes in the zone. Otherwise, if the
+ zone has changed, any existing journal file will be
+ removed.
+ </p></dd>
+<dt><span class="term"><strong class="userinput"><code>sync
+ [<span class="optional">-clean</span>]
+ [<span class="optional"><em class="replaceable"><code>zone</code></em>
+ [<span class="optional"><em class="replaceable"><code>class</code></em>
+ [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</span>]</code></strong></span></dt>
+<dd><p>
+ Sync changes in the journal file for a dynamic zone
+ to the master file. If the "-clean" option is
+ specified, the journal file is also removed. If
+ no zone is specified, then all zones are synced.
</p></dd>
<dt><span class="term"><strong class="userinput"><code>notify <em class="replaceable"><code>zone</code></em>
[<span class="optional"><em class="replaceable"><code>class</code></em>
@@ -577,9 +588,17 @@ zone "eng.example.com" {
<dd><p>
Write server statistics to the statistics file.
</p></dd>
-<dt><span class="term"><strong class="userinput"><code>querylog</code></strong></span></dt>
-<dd><p>
- Toggle query logging. Query logging can also be enabled
+<dt><span class="term"><strong class="userinput"><code>querylog</code></strong>
+ [<span class="optional">on|off</span>]
+ </span></dt>
+<dd>
+<p>
+ Enable or disable query logging. (For backward
+ compatibility, this command can also be used without
+ an argument to toggle query logging on and off.)
+ </p>
+<p>
+ Query logging can also be enabled
by explicitly directing the <span><strong class="command">queries</strong></span>
<span><strong class="command">category</strong></span> to a
<span><strong class="command">channel</strong></span> in the
@@ -588,7 +607,8 @@ zone "eng.example.com" {
<span><strong class="command">querylog yes;</strong></span> in the
<span><strong class="command">options</strong></span> section of
<code class="filename">named.conf</code>.
- </p></dd>
+ </p>
+</dd>
<dt><span class="term"><strong class="userinput"><code>dumpdb
[<span class="optional">-all|-cache|-zone</span>]
[<span class="optional"><em class="replaceable"><code>view ...</code></em></span>]</code></strong></span></dt>
@@ -643,9 +663,23 @@ zone "eng.example.com" {
<dd><p>
Flushes the server's cache.
</p></dd>
-<dt><span class="term"><strong class="userinput"><code>flushname</code></strong> <em class="replaceable"><code>name</code></em></span></dt>
+<dt><span class="term"><strong class="userinput"><code>flushname</code></strong>
+ <em class="replaceable"><code>name</code></em>
+ [<span class="optional"><em class="replaceable"><code>view</code></em></span>]
+ </span></dt>
<dd><p>
- Flushes the given name from the server's cache.
+ Flushes the given name from the server's DNS cache,
+ and from the server's nameserver address database
+ if applicable.
+ </p></dd>
+<dt><span class="term"><strong class="userinput"><code>flushtree</code></strong>
+ <em class="replaceable"><code>name</code></em>
+ [<span class="optional"><em class="replaceable"><code>view</code></em></span>]
+ </span></dt>
+<dd><p>
+ Flushes the given name, and all of its subdomains,
+ from the server's DNS cache. (The server's
+ nameserver address database is not affected.)
</p></dd>
<dt><span class="term"><strong class="userinput"><code>status</code></strong></span></dt>
<dd><p>
@@ -681,7 +715,7 @@ zone "eng.example.com" {
<em class="replaceable"><code>keyname</code></em>
[<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span></dt>
<dd><p>
- Delete a given TKEY-negotated key from the server.
+ Delete a given TKEY-negotiated key from the server.
(This does not apply to statically configured TSIG
keys.)
</p></dd>
@@ -736,6 +770,72 @@ zone "eng.example.com" {
<span><strong class="command">rndc addzone</strong></span> can be deleted
in this matter.
</p></dd>
+<dt><span class="term"><strong class="userinput"><code>signing
+ [<span class="optional">( -list | -clear <em class="replaceable"><code>keyid/algorithm</code></em> | -clear <code class="literal">all</code> | -nsec3param ( <em class="replaceable"><code>parameters</code></em> | <code class="literal">none</code> ) ) </span>]
+ <em class="replaceable"><code>zone</code></em>
+ [<span class="optional"><em class="replaceable"><code>class</code></em>
+ [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]
+ </code></strong></span></dt>
+<dd>
+<p>
+ List, edit, or remove the DNSSEC signing state for
+ the specified zone. The status of ongoing DNSSEC
+ operations (such as signing or generating
+ NSEC3 chains) is stored in the zone in the form
+ of DNS resource records of type
+ <span><strong class="command">sig-signing-type</strong></span>.
+ <span><strong class="command">rndc signing -list</strong></span> converts
+ these records into a human-readable form,
+ indicating which keys are currently signing
+ or have finished signing the zone, and which NSEC3
+ NSEC3 chains are being created or removed.
+ </p>
+<p>
+ <span><strong class="command">rndc signing -clear</strong></span> can remove
+ a single key (specified in the same format that
+ <span><strong class="command">rndc signing -list</strong></span> uses to
+ display it), or all keys. In either case, only
+ completed keys are removed; any record indicating
+ that a key has not yet finished signing the zone
+ will be retained.
+ </p>
+<p>
+ <span><strong class="command">rndc signing -nsec3param</strong></span> sets
+ the NSEC3 parameters for a zone. This is the
+ only supported mechanism for using NSEC3 with
+ <span><strong class="command">inline-signing</strong></span> zones.
+ Parameters are specified in the same format as
+ an NSEC3PARAM resource record: hash algorithm,
+ flags, iterations, and salt, in that order.
+ </p>
+<p>
+ Currently, the only defined value for hash algorithm
+ is <code class="literal">1</code>, representing SHA-1.
+ The <code class="option">flags</code> may be set to
+ <code class="literal">0</code> or <code class="literal">1</code>,
+ depending on whether you wish to set the opt-out
+ bit in the NSEC3 chain. <code class="option">iterations</code>
+ defines the number of additional times to apply
+ the algorithm when generating an NSEC3 hash. The
+ <code class="option">salt</code> is a string of data expressed
+ in hexidecimal, or a hyphen (`-') if no salt is
+ to be used.
+ </p>
+<p>
+ So, for example, to create an NSEC3 chain using
+ the SHA-1 hash algorithm, no opt-out flag,
+ 10 iterations, and a salt value of "FFFF", use:
+ <span><strong class="command">rndc signing -nsec3param 1 0 10 FFFF &lt;zone&gt;</strong></span>.
+ To set the opt-out flag, 15 iterations, and no
+ salt, use:
+ <span><strong class="command">rndc signing -nsec3param 1 1 15 - &lt;zone&gt;</strong></span>.
+ </p>
+<p>
+ <span><strong class="command">rndc signing -nsec3param none</strong></span>
+ removes an existing NSEC3 chain and replaces it
+ with NSEC.
+ </p>
+</dd>
</dl></div>
<p>
A configuration file is required, since all
@@ -888,7 +988,7 @@ controls {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2570421"></a>Signals</h3></div></div></div>
+<a name="id2570600"></a>Signals</h3></div></div></div>
<p>
Certain UNIX signals cause the name server to take specific
actions, as described in the following table. These signals can
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch04.html b/contrib/bind9/doc/arm/Bv9ARM.ch04.html
index 8e77a6b42b30..e22a0cb7e40e 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch04.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch04.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -49,59 +49,59 @@
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2570934">Split DNS</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2570952">Example split DNS setup</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571175">Split DNS</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571193">Example split DNS setup</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2564012">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2564086">Copying the Shared Secret to Both Machines</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571811">Informing the Servers of the Key's Existence</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571847">Instructing the Server to Use the Key</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571905">TSIG Key Based Access Control</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571954">Errors</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571763">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571836">Copying the Shared Secret to Both Machines</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571847">Informing the Servers of the Key's Existence</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571883">Instructing the Server to Use the Key</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571941">TSIG Key Based Access Control</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2564003">Errors</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571968">TKEY</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572153">SIG(0)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2564017">TKEY</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572326">SIG(0)</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572221">Generating Keys</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572300">Signing the Zone</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572381">Configuring Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572394">Generating Keys</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572541">Signing the Zone</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572622">Configuring Servers</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#dnssec.dynamic.zones">DNSSEC, Dynamic Zones, and Automatic Signing</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571475">Converting from insecure to secure</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571512">Dynamic DNS update method</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563493">Fully automatic zone signing</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563575">Private-type records</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563612">DNSKEY rollovers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563762">Dynamic DNS update method</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563795">Automatic key rollovers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563821">NSEC3PARAM rollovers via UPDATE</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563899">Converting from NSEC to NSEC3</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563909">Converting from NSEC3 to NSEC</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563922">Converting from secure to insecure</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571605">Periodic re-signing</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571614">NSEC3 and OPTOUT</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563413">Converting from insecure to secure</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563450">Dynamic DNS update method</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563555">Fully automatic zone signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563726">Private-type records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563832">DNSKEY rollovers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563845">Dynamic DNS update method</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563878">Automatic key rollovers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563905">NSEC3PARAM rollovers via UPDATE</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563914">Converting from NSEC to NSEC3</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563924">Converting from NSEC3 to NSEC</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563937">Converting from secure to insecure</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572029">Periodic re-signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572039">NSEC3 and OPTOUT</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607510">Validating Resolver</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571692">Authoritative Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572072">Validating Resolver</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609027">Authoritative Server</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#pkcs11">PKCS #11 (Cryptoki) support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2610637">Prerequisites</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2608477">Building BIND 9 with PKCS#11</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2608602">PKCS #11 Tools</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2634916">Using the HSM</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2635114">Specifying the engine on the command line</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2635160">Running named with automatic zone re-signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2611929">Prerequisites</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2610179">Building BIND 9 with PKCS#11</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2612283">PKCS #11 Tools</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2612382">Using the HSM</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2636884">Specifying the engine on the command line</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2636930">Running named with automatic zone re-signing</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572669">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572842">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572868">Address Lookups Using AAAA Records</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572889">Address to Name Lookups Using Nibble Format</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2573109">Address Lookups Using AAAA Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2573130">Address to Name Lookups Using Nibble Format</a></span></dt>
</dl></dd>
</dl>
</div>
@@ -247,18 +247,16 @@
to <strong class="userinput"><code>yes</code></strong>.
</p>
<p>
- When acting as a slave, <acronym class="acronym">BIND</acronym> 9 will attempt
- to use IXFR unless it is explicitly disabled via the
- <span><strong class="command">request-ixfr</strong></span> option or the use of
- <span><strong class="command">ixfr-from-differences</strong></span>. For
- more information about disabling IXFR, see the description
- of the <span><strong class="command">request-ixfr</strong></span> clause of the
- <span><strong class="command">server</strong></span> statement.
+ When acting as a slave, <acronym class="acronym">BIND</acronym> 9 will
+ attempt to use IXFR unless
+ it is explicitly disabled. For more information about disabling
+ IXFR, see the description of the <span><strong class="command">request-ixfr</strong></span> clause
+ of the <span><strong class="command">server</strong></span> statement.
</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2570934"></a>Split DNS</h2></div></div></div>
+<a name="id2571175"></a>Split DNS</h2></div></div></div>
<p>
Setting up different views, or visibility, of the DNS space to
internal and external resolvers is usually referred to as a
@@ -288,7 +286,7 @@
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2570952"></a>Example split DNS setup</h3></div></div></div>
+<a name="id2571193"></a>Example split DNS setup</h3></div></div></div>
<p>
Let's say a company named <span class="emphasis"><em>Example, Inc.</em></span>
(<code class="literal">example.com</code>)
@@ -545,7 +543,7 @@ nameserver 172.16.72.4
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2564012"></a>Generate Shared Keys for Each Pair of Hosts</h3></div></div></div>
+<a name="id2571763"></a>Generate Shared Keys for Each Pair of Hosts</h3></div></div></div>
<p>
A shared secret is generated to be shared between <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host2</em></span>.
An arbitrary key name is chosen: "host1-host2.". The key name must
@@ -553,7 +551,7 @@ nameserver 172.16.72.4
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2564029"></a>Automatic Generation</h4></div></div></div>
+<a name="id2571780"></a>Automatic Generation</h4></div></div></div>
<p>
The following command will generate a 128-bit (16 byte) HMAC-SHA256
key as described above. Longer keys are better, but shorter keys
@@ -577,7 +575,7 @@ nameserver 172.16.72.4
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2564068"></a>Manual Generation</h4></div></div></div>
+<a name="id2571818"></a>Manual Generation</h4></div></div></div>
<p>
The shared secret is simply a random sequence of bits, encoded
in base-64. Most ASCII strings are valid base-64 strings (assuming
@@ -592,7 +590,7 @@ nameserver 172.16.72.4
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2564086"></a>Copying the Shared Secret to Both Machines</h3></div></div></div>
+<a name="id2571836"></a>Copying the Shared Secret to Both Machines</h3></div></div></div>
<p>
This is beyond the scope of DNS. A secure transport mechanism
should be used. This could be secure FTP, ssh, telephone, etc.
@@ -600,7 +598,7 @@ nameserver 172.16.72.4
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571811"></a>Informing the Servers of the Key's Existence</h3></div></div></div>
+<a name="id2571847"></a>Informing the Servers of the Key's Existence</h3></div></div></div>
<p>
Imagine <span class="emphasis"><em>host1</em></span> and <span class="emphasis"><em>host 2</em></span>
are
@@ -627,7 +625,7 @@ key host1-host2. {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571847"></a>Instructing the Server to Use the Key</h3></div></div></div>
+<a name="id2571883"></a>Instructing the Server to Use the Key</h3></div></div></div>
<p>
Since keys are shared between two hosts only, the server must
be told when keys are to be used. The following is added to the <code class="filename">named.conf</code> file
@@ -659,7 +657,7 @@ server 10.1.2.3 {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571905"></a>TSIG Key Based Access Control</h3></div></div></div>
+<a name="id2571941"></a>TSIG Key Based Access Control</h3></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> allows IP addresses and ranges
to be specified in ACL
@@ -686,7 +684,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571954"></a>Errors</h3></div></div></div>
+<a name="id2564003"></a>Errors</h3></div></div></div>
<p>
The processing of TSIG signed messages can result in
several errors. If a signed message is sent to a non-TSIG aware
@@ -712,7 +710,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2571968"></a>TKEY</h2></div></div></div>
+<a name="id2564017"></a>TKEY</h2></div></div></div>
<p><span><strong class="command">TKEY</strong></span>
is a mechanism for automatically generating a shared secret
between two hosts. There are several "modes" of
@@ -748,7 +746,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2572153"></a>SIG(0)</h2></div></div></div>
+<a name="id2572326"></a>SIG(0)</h2></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> 9 partially supports DNSSEC SIG(0)
transaction signatures as specified in RFC 2535 and RFC 2931.
@@ -809,7 +807,7 @@ allow-update { key host1-host2. ;};
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572221"></a>Generating Keys</h3></div></div></div>
+<a name="id2572394"></a>Generating Keys</h3></div></div></div>
<p>
The <span><strong class="command">dnssec-keygen</strong></span> program is used to
generate keys.
@@ -865,7 +863,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572300"></a>Signing the Zone</h3></div></div></div>
+<a name="id2572541"></a>Signing the Zone</h3></div></div></div>
<p>
The <span><strong class="command">dnssec-signzone</strong></span> program is used
to sign a zone.
@@ -907,7 +905,7 @@ allow-update { key host1-host2. ;};
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572381"></a>Configuring Servers</h3></div></div></div>
+<a name="id2572622"></a>Configuring Servers</h3></div></div></div>
<p>
To enable <span><strong class="command">named</strong></span> to respond appropriately
to DNS requests from DNSSEC aware clients,
@@ -1067,7 +1065,7 @@ options {
from insecure to signed and back again. A secure zone can use
either NSEC or NSEC3 chains.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2571475"></a>Converting from insecure to secure</h3></div></div></div></div>
+<a name="id2563413"></a>Converting from insecure to secure</h3></div></div></div></div>
<p>Changing a zone from insecure to secure can be done in two
ways: using a dynamic DNS update, or the
<span><strong class="command">auto-dnssec</strong></span> zone option.</p>
@@ -1093,7 +1091,7 @@ options {
well. An NSEC chain will be generated as part of the initial
signing process.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2571512"></a>Dynamic DNS update method</h3></div></div></div></div>
+<a name="id2563450"></a>Dynamic DNS update method</h3></div></div></div></div>
<p>To insert the keys via dynamic update:</p>
<pre class="screen">
% nsupdate
@@ -1129,7 +1127,7 @@ options {
<p>While the initial signing and NSEC/NSEC3 chain generation
is happening, other updates are possible as well.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563493"></a>Fully automatic zone signing</h3></div></div></div></div>
+<a name="id2563555"></a>Fully automatic zone signing</h3></div></div></div></div>
<p>To enable automatic signing, add the
<span><strong class="command">auto-dnssec</strong></span> option to the zone statement in
<code class="filename">named.conf</code>.
@@ -1141,8 +1139,7 @@ options {
<span><strong class="command">named</strong></span> can search the key directory for keys
matching the zone, insert them into the zone, and use them to
sign the zone. It will do so only when it receives an
- <span><strong class="command">rndc sign &lt;zonename&gt;</strong></span> or
- <span><strong class="command">rndc loadkeys &lt;zonename&gt;</strong></span> command.</p>
+ <span><strong class="command">rndc sign &lt;zonename&gt;</strong></span>.</p>
<p>
<span><strong class="command">auto-dnssec maintain</strong></span> includes the above
@@ -1150,12 +1147,34 @@ options {
DNSKEY records on schedule according to the keys' timing metadata.
(See <a href="man.dnssec-keygen.html" title="dnssec-keygen"><span class="refentrytitle"><span class="application">dnssec-keygen</span></span>(8)</a> and
<a href="man.dnssec-settime.html" title="dnssec-settime"><span class="refentrytitle"><span class="application">dnssec-settime</span></span>(8)</a> for more information.)
+ </p>
+<p>
+ <span><strong class="command">named</strong></span> will periodically search the key directory
+ for keys matching the zone, and if the keys' metadata indicates
+ that any change should be made the zone, such as adding, removing,
+ or revoking a key, then that action will be carried out. By default,
+ the key directory is checked for changes every 60 minutes; this period
+ can be adjusted with the <code class="option">dnssec-loadkeys-interval</code>, up
+ to a maximum of 24 hours. The <span><strong class="command">rndc loadkeys</strong></span> forces
+ <span><strong class="command">named</strong></span> to check for key updates immediately.
+ </p>
+<p>
If keys are present in the key directory the first time the zone
- is loaded, it will be signed immediately, without waiting for an
+ is loaded, the zone will be signed immediately, without waiting for an
<span><strong class="command">rndc sign</strong></span> or <span><strong class="command">rndc loadkeys</strong></span>
command. (Those commands can still be used when there are unscheduled
key changes, however.)
</p>
+<p>
+ If you wish the zone to be signed using NSEC3 instead of NSEC,
+ submit an NSEC3PARAM record via dynamic update prior to the
+ scheduled publication and activation of the keys. If you wish the
+ NSEC3 chain to have the OPTOUT bit set, set it in the flags field
+ of the NSEC3PARAM record. The NSEC3PARAM record will not appear in
+ the zone immediately, but it will be stored for later reference. When
+ the zone is signed and the NSEC3 chain is completed, the NSEC3PARAM
+ record will appear in the zone.
+ </p>
<p>Using the
<span><strong class="command">auto-dnssec</strong></span> option requires the zone to be
configured to allow dynamic updates, by adding an
@@ -1164,7 +1183,7 @@ options {
configuration. If this has not been done, the configuration will
fail.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563575"></a>Private-type records</h3></div></div></div></div>
+<a name="id2563726"></a>Private-type records</h3></div></div></div></div>
<p>The state of the signing process is signaled by
private-type records (with a default type value of 65534). When
signing is complete, these records will have a nonzero value for
@@ -1205,12 +1224,12 @@ options {
<p>
</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563612"></a>DNSKEY rollovers</h3></div></div></div></div>
+<a name="id2563832"></a>DNSKEY rollovers</h3></div></div></div></div>
<p>As with insecure-to-secure conversions, rolling DNSSEC
keys can be done in two ways: using a dynamic DNS update, or the
<span><strong class="command">auto-dnssec</strong></span> zone option.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563762"></a>Dynamic DNS update method</h3></div></div></div></div>
+<a name="id2563845"></a>Dynamic DNS update method</h3></div></div></div></div>
<p> To perform key rollovers via dynamic update, you need to add
the <code class="filename">K*</code> files for the new keys so that
<span><strong class="command">named</strong></span> can find them. You can then add the new
@@ -1232,7 +1251,7 @@ options {
<span><strong class="command">named</strong></span> will clean out any signatures generated
by the old key after the update completes.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563795"></a>Automatic key rollovers</h3></div></div></div></div>
+<a name="id2563878"></a>Automatic key rollovers</h3></div></div></div></div>
<p>When a new key reaches its activation date (as set by
<span><strong class="command">dnssec-keygen</strong></span> or <span><strong class="command">dnssec-settime</strong></span>),
if the <span><strong class="command">auto-dnssec</strong></span> zone option is set to
@@ -1247,27 +1266,27 @@ options {
completes in 30 days, after which it will be safe to remove the
old key from the DNSKEY RRset.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563821"></a>NSEC3PARAM rollovers via UPDATE</h3></div></div></div></div>
+<a name="id2563905"></a>NSEC3PARAM rollovers via UPDATE</h3></div></div></div></div>
<p>Add the new NSEC3PARAM record via dynamic update. When the
new NSEC3 chain has been generated, the NSEC3PARAM flag field
will be zero. At this point you can remove the old NSEC3PARAM
record. The old chain will be removed after the update request
completes.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563899"></a>Converting from NSEC to NSEC3</h3></div></div></div></div>
+<a name="id2563914"></a>Converting from NSEC to NSEC3</h3></div></div></div></div>
<p>To do this, you just need to add an NSEC3PARAM record. When
the conversion is complete, the NSEC chain will have been removed
and the NSEC3PARAM record will have a zero flag field. The NSEC3
chain will be generated before the NSEC chain is
destroyed.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563909"></a>Converting from NSEC3 to NSEC</h3></div></div></div></div>
+<a name="id2563924"></a>Converting from NSEC3 to NSEC</h3></div></div></div></div>
<p>To do this, use <span><strong class="command">nsupdate</strong></span> to
remove all NSEC3PARAM records with a zero flag
field. The NSEC chain will be generated before the NSEC3 chain is
removed.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2563922"></a>Converting from secure to insecure</h3></div></div></div></div>
+<a name="id2563937"></a>Converting from secure to insecure</h3></div></div></div></div>
<p>To convert a signed zone to unsigned using dynamic DNS,
delete all the DNSKEY records from the zone apex using
<span><strong class="command">nsupdate</strong></span>. All signatures, NSEC or NSEC3 chains,
@@ -1282,14 +1301,14 @@ options {
<span><strong class="command">allow</strong></span> instead (or it will re-sign).
</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2571605"></a>Periodic re-signing</h3></div></div></div></div>
+<a name="id2572029"></a>Periodic re-signing</h3></div></div></div></div>
<p>In any secure zone which supports dynamic updates, named
will periodically re-sign RRsets which have not been re-signed as
a result of some update action. The signature lifetimes will be
adjusted so as to spread the re-sign load over time rather than
all at once.</p>
<div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title">
-<a name="id2571614"></a>NSEC3 and OPTOUT</h3></div></div></div></div>
+<a name="id2572039"></a>NSEC3 and OPTOUT</h3></div></div></div></div>
<p>
<span><strong class="command">named</strong></span> only supports creating new NSEC3 chains
where all the NSEC3 records in the zone have the same OPTOUT
@@ -1311,7 +1330,7 @@ options {
configuration files.</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607510"></a>Validating Resolver</h3></div></div></div>
+<a name="id2572072"></a>Validating Resolver</h3></div></div></div>
<p>To configure a validating resolver to use RFC 5011 to
maintain a trust anchor, configure the trust anchor using a
<span><strong class="command">managed-keys</strong></span> statement. Information about
@@ -1322,7 +1341,7 @@ options {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2571692"></a>Authoritative Server</h3></div></div></div>
+<a name="id2609027"></a>Authoritative Server</h3></div></div></div>
<p>To set up an authoritative zone for RFC 5011 trust anchor
maintenance, generate two (or more) key signing keys (KSKs) for
the zone. Sign the zone with one of them; this is the "active"
@@ -1396,7 +1415,7 @@ $ <strong class="userinput"><code>dnssec-signzone -S -K keys example.net</code><
Debian Linux, Solaris x86 and Windows Server 2003.</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2610637"></a>Prerequisites</h3></div></div></div>
+<a name="id2611929"></a>Prerequisites</h3></div></div></div>
<p>See the HSM vendor documentation for information about
installing, initializing, testing and troubleshooting the
HSM.</p>
@@ -1410,7 +1429,7 @@ $ <strong class="userinput"><code>dnssec-signzone -S -K keys example.net</code><
This is a shared library object, providing a low-level PKCS #11
interface to the HSM hardware. It is dynamically loaded by
OpenSSL at runtime. The PKCS #11 provider comes from the HSM
- vendor, and and is specific to the HSM to be controlled.</p>
+ vendor, and is specific to the HSM to be controlled.</p>
<p>There are two "flavors" of PKCS #11 support provided by
the patched OpenSSL, one of which must be chosen at
configuration time. The correct choice depends on the HSM
@@ -1473,7 +1492,7 @@ $ <strong class="userinput"><code>patch -p1 -d openssl-0.9.8s \
when we configure BIND 9.</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608071"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
+<a name="id2609772"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
<p>The AEP Keyper is a highly secure key storage device,
but does not provide hardware cryptographic acceleration. It
can carry out cryptographic operations, but it is probably
@@ -1505,7 +1524,7 @@ $ <strong class="userinput"><code>./Configure linux-generic32 -m32 -pthread \
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608140"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
+<a name="id2609910"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
<p>The SCA-6000 PKCS #11 provider is installed as a system
library, libpkcs11. It is a true crypto accelerator, up to 4
times faster than any CPU, so the flavor shall be
@@ -1527,7 +1546,7 @@ $ <strong class="userinput"><code>./Configure solaris64-x86_64-cc \
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608189"></a>Building OpenSSL for SoftHSM</h4></div></div></div>
+<a name="id2609959"></a>Building OpenSSL for SoftHSM</h4></div></div></div>
<p>SoftHSM is a software library provided by the OpenDNSSEC
project (http://www.opendnssec.org) which provides a PKCS#11
interface to a virtual HSM, implemented in the form of encrypted
@@ -1587,12 +1606,12 @@ $ <strong class="userinput"><code>./Configure linux-x86_64 -pthread \
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608477"></a>Building BIND 9 with PKCS#11</h3></div></div></div>
+<a name="id2610179"></a>Building BIND 9 with PKCS#11</h3></div></div></div>
<p>When building BIND 9, the location of the custom-built
OpenSSL library must be specified via configure.</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608486"></a>Configuring BIND 9 for Linux with the AEP Keyper</h4></div></div></div>
+<a name="id2610187"></a>Configuring BIND 9 for Linux with the AEP Keyper</h4></div></div></div>
<p>To link with the PKCS #11 provider, threads must be
enabled in the BIND 9 build.</p>
<p>The PKCS #11 library for the AEP Keyper is currently
@@ -1608,7 +1627,7 @@ $ <strong class="userinput"><code>./configure CC="gcc -m32" --enable-threads \
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608518"></a>Configuring BIND 9 for Solaris with the SCA 6000</h4></div></div></div>
+<a name="id2610219"></a>Configuring BIND 9 for Solaris with the SCA 6000</h4></div></div></div>
<p>To link with the PKCS #11 provider, threads must be
enabled in the BIND 9 build.</p>
<pre class="screen">
@@ -1626,7 +1645,7 @@ $ <strong class="userinput"><code>./configure CC="cc -xarch=amd64" --enable-thre
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608554"></a>Configuring BIND 9 for SoftHSM</h4></div></div></div>
+<a name="id2612235"></a>Configuring BIND 9 for SoftHSM</h4></div></div></div>
<pre class="screen">
$ <strong class="userinput"><code>cd ../bind9</code></strong>
$ <strong class="userinput"><code>./configure --enable-threads \
@@ -1643,7 +1662,7 @@ $ <strong class="userinput"><code>./configure --enable-threads \
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608602"></a>PKCS #11 Tools</h3></div></div></div>
+<a name="id2612283"></a>PKCS #11 Tools</h3></div></div></div>
<p>BIND 9 includes a minimal set of tools to operate the
HSM, including
<span><strong class="command">pkcs11-keygen</strong></span> to generate a new key pair
@@ -1661,7 +1680,7 @@ $ <strong class="userinput"><code>./configure --enable-threads \
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2634916"></a>Using the HSM</h3></div></div></div>
+<a name="id2612382"></a>Using the HSM</h3></div></div></div>
<p>First, we must set up the runtime environment so the
OpenSSL and PKCS #11 libraries can be loaded:</p>
<pre class="screen">
@@ -1749,7 +1768,7 @@ example.net.signed
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2635114"></a>Specifying the engine on the command line</h3></div></div></div>
+<a name="id2636884"></a>Specifying the engine on the command line</h3></div></div></div>
<p>The OpenSSL engine can be specified in
<span><strong class="command">named</strong></span> and all of the BIND
<span><strong class="command">dnssec-*</strong></span> tools by using the "-E
@@ -1770,7 +1789,7 @@ $ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></s
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2635160"></a>Running named with automatic zone re-signing</h3></div></div></div>
+<a name="id2636930"></a>Running named with automatic zone re-signing</h3></div></div></div>
<p>If you want
<span><strong class="command">named</strong></span> to dynamically re-sign zones using HSM
keys, and/or to to sign new records inserted via nsupdate, then
@@ -1806,7 +1825,7 @@ $ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></s
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2572669"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
+<a name="id2572842"></a>IPv6 Support in <acronym class="acronym">BIND</acronym> 9</h2></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> 9 fully supports all currently
defined forms of IPv6 name to address and address to name
@@ -1844,7 +1863,7 @@ $ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></s
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572868"></a>Address Lookups Using AAAA Records</h3></div></div></div>
+<a name="id2573109"></a>Address Lookups Using AAAA Records</h3></div></div></div>
<p>
The IPv6 AAAA record is a parallel to the IPv4 A record,
and, unlike the deprecated A6 record, specifies the entire
@@ -1863,7 +1882,7 @@ host 3600 IN AAAA 2001:db8::1
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2572889"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
+<a name="id2573130"></a>Address to Name Lookups Using Nibble Format</h3></div></div></div>
<p>
When looking up an address in nibble format, the address
components are simply reversed, just as in IPv4, and
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch05.html b/contrib/bind9/doc/arm/Bv9ARM.ch05.html
index 0779c970ddce..4457cbd99e2e 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch05.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch05.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -45,13 +45,13 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2572922">The Lightweight Resolver Library</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2573163">The Lightweight Resolver Library</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch05.html#lwresd">Running a Resolver Daemon</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2572922"></a>The Lightweight Resolver Library</h2></div></div></div>
+<a name="id2573163"></a>The Lightweight Resolver Library</h2></div></div></div>
<p>
Traditionally applications have been linked with a stub resolver
library that sends recursive DNS queries to a local caching name
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch06.html b/contrib/bind9/doc/arm/Bv9ARM.ch06.html
index bda489d25f19..bd260dc47fd3 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch06.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch06.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -48,58 +48,58 @@
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#configuration_file_elements">Configuration File Elements</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#address_match_lists">Address Match Lists</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574332">Comment Syntax</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574711">Comment Syntax</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#Configuration_File_Grammar">Configuration File Grammar</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574986"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575371"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#acl"><span><strong class="command">acl</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575176"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575561"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#controls_statement_definition_and_usage"><span><strong class="command">controls</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575467"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575484"><span><strong class="command">include</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575921"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575938"><span><strong class="command">include</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575576"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575600"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575758"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575884"><span><strong class="command">logging</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575961"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575985"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576075"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576269"><span><strong class="command">logging</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2577910"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2577984"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578116"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578160"><span><strong class="command">masters</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578364"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578438"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578502"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578546"><span><strong class="command">masters</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578174"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578567"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#options"><span><strong class="command">options</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_grammar"><span><strong class="command">server</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_definition_and_usage"><span><strong class="command">server</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#statschannels"><span><strong class="command">statistics-channels</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2589534"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590613"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#trusted-keys"><span><strong class="command">trusted-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2589742"><span><strong class="command">trusted-keys</strong></span> Statement Definition
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590920"><span><strong class="command">trusted-keys</strong></span> Statement Definition
and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2589858"><span><strong class="command">managed-keys</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590967"><span><strong class="command">managed-keys</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#managed-keys"><span><strong class="command">managed-keys</strong></span> Statement Definition
and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#view_statement_grammar"><span><strong class="command">view</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590352"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591409"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span><strong class="command">zone</strong></span>
Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591902"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2593189"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2595170">Zone File</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2596875">Zone File</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2597537">Discussion of MX Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2599037">Discussion of MX Records</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598084">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598211">Other Zone File Directives</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598552"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2599585">Inverse Mapping in IPv4</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2599848">Other Zone File Directives</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2600189"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#statistics">BIND9 Statistics</a></span></dt>
@@ -409,31 +409,45 @@
</td>
<td>
<p>
- A number, the word <strong class="userinput"><code>unlimited</code></strong>,
- or the word <strong class="userinput"><code>default</code></strong>.
+ A 64-bit unsigned integer, or the keywords
+ <strong class="userinput"><code>unlimited</code></strong> or
+ <strong class="userinput"><code>default</code></strong>.
</p>
<p>
- An <code class="varname">unlimited</code> <code class="varname">size_spec</code> requests unlimited
- use, or the maximum available amount. A <code class="varname">default size_spec</code> uses
- the limit that was in force when the server was started.
+ Integers may take values
+ 0 &lt;= value &lt;= 18446744073709551615, though
+ certain parameters may use a more limited range
+ within these extremes. In most cases, setting a
+ value to 0 does not literally mean zero; it means
+ "undefined" or "as big as psosible", depending on
+ the context. See the expalantions of particular
+ parameters that use <code class="varname">size_spec</code>
+ for details on how they interpret its use.
</p>
<p>
- A <code class="varname">number</code> can optionally be
- followed by a scaling factor:
+ Numeric values can optionally be followed by a
+ scaling factor:
<strong class="userinput"><code>K</code></strong> or <strong class="userinput"><code>k</code></strong>
for kilobytes,
<strong class="userinput"><code>M</code></strong> or <strong class="userinput"><code>m</code></strong>
for megabytes, and
- <strong class="userinput"><code>G</code></strong> or <strong class="userinput"><code>g</code></strong> for gigabytes,
- which scale by 1024, 1024*1024, and 1024*1024*1024
- respectively.
+ <strong class="userinput"><code>G</code></strong> or <strong class="userinput"><code>g</code></strong>
+ for gigabytes, which scale by 1024, 1024*1024, and
+ 1024*1024*1024 respectively.
</p>
<p>
- The value must be representable as a 64-bit unsigned integer
- (0 to 18446744073709551615, inclusive).
- Using <code class="varname">unlimited</code> is the best
- way
- to safely set a really large number.
+ <code class="varname">unlimited</code> generally means
+ "as big as possible", though in certain contexts,
+ (including <code class="option">max-cache-size</code>), it may
+ mean the largest possible 32-bit unsigned integer
+ (0xffffffff); this distinction can be important when
+ dealing with larger quantities.
+ <code class="varname">unlimited</code> is usually the best way
+ to safely set a very large number.
+ </p>
+ <p>
+ <code class="varname">default</code>
+ uses the limit that was in force when the server was started.
</p>
</td>
</tr>
@@ -477,7 +491,7 @@
<a name="address_match_lists"></a>Address Match Lists</h3></div></div></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2574099"></a>Syntax</h4></div></div></div>
+<a name="id2574546"></a>Syntax</h4></div></div></div>
<pre class="programlisting"><code class="varname">address_match_list</code> = address_match_list_element ;
[<span class="optional"> address_match_list_element; ... </span>]
<code class="varname">address_match_list_element</code> = [<span class="optional"> ! </span>] (ip_address [<span class="optional">/length</span>] |
@@ -486,7 +500,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2574126"></a>Definition and Usage</h4></div></div></div>
+<a name="id2574573"></a>Definition and Usage</h4></div></div></div>
<p>
Address match lists are primarily used to determine access
control for various server operations. They are also used in
@@ -570,7 +584,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574332"></a>Comment Syntax</h3></div></div></div>
+<a name="id2574711"></a>Comment Syntax</h3></div></div></div>
<p>
The <acronym class="acronym">BIND</acronym> 9 comment syntax allows for
comments to appear
@@ -580,7 +594,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2574347"></a>Syntax</h4></div></div></div>
+<a name="id2574726"></a>Syntax</h4></div></div></div>
<p>
</p>
<pre class="programlisting">/* This is a <acronym class="acronym">BIND</acronym> comment as in C */</pre>
@@ -596,7 +610,7 @@
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2574377"></a>Definition and Usage</h4></div></div></div>
+<a name="id2574756"></a>Definition and Usage</h4></div></div></div>
<p>
Comments may appear anywhere that whitespace may appear in
a <acronym class="acronym">BIND</acronym> configuration file.
@@ -760,7 +774,9 @@
<td>
<p>
defines a named masters list for
- inclusion in stub and slave zone masters clauses.
+ inclusion in stub and slave zones'
+ <span><strong class="command">masters</strong></span> or
+ <span><strong class="command">also-notify</strong></span> lists.
</p>
</td>
</tr>
@@ -848,7 +864,7 @@
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2574986"></a><span><strong class="command">acl</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2575371"></a><span><strong class="command">acl</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">acl</strong></span> acl-name {
address_match_list
};
@@ -930,7 +946,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575176"></a><span><strong class="command">controls</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2575561"></a><span><strong class="command">controls</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">controls</strong></span> {
[ inet ( ip_addr | * ) [ port ip_port ]
allow { <em class="replaceable"><code> address_match_list </code></em> }
@@ -1054,12 +1070,12 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575467"></a><span><strong class="command">include</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2575921"></a><span><strong class="command">include</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">include</strong></span> <em class="replaceable"><code>filename</code></em>;</pre>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575484"></a><span><strong class="command">include</strong></span> Statement Definition and
+<a name="id2575938"></a><span><strong class="command">include</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p>
The <span><strong class="command">include</strong></span> statement inserts the
@@ -1074,7 +1090,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575576"></a><span><strong class="command">key</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2575961"></a><span><strong class="command">key</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">key</strong></span> <em class="replaceable"><code>key_id</code></em> {
algorithm <em class="replaceable"><code>string</code></em>;
secret <em class="replaceable"><code>string</code></em>;
@@ -1083,7 +1099,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575600"></a><span><strong class="command">key</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2575985"></a><span><strong class="command">key</strong></span> Statement Definition and Usage</h3></div></div></div>
<p>
The <span><strong class="command">key</strong></span> statement defines a shared
secret key for use with TSIG (see <a href="Bv9ARM.ch04.html#tsig" title="TSIG">the section called &#8220;TSIG&#8221;</a>)
@@ -1130,12 +1146,12 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575758"></a><span><strong class="command">logging</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2576075"></a><span><strong class="command">logging</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">logging</strong></span> {
[ <span><strong class="command">channel</strong></span> <em class="replaceable"><code>channel_name</code></em> {
( <span><strong class="command">file</strong></span> <em class="replaceable"><code>path_name</code></em>
[ <span><strong class="command">versions</strong></span> ( <em class="replaceable"><code>number</code></em> | <span><strong class="command">unlimited</strong></span> ) ]
- [ <span><strong class="command">size</strong></span> <em class="replaceable"><code>size spec</code></em> ]
+ [ <span><strong class="command">size</strong></span> <em class="replaceable"><code>size_spec</code></em> ]
| <span><strong class="command">syslog</strong></span> <em class="replaceable"><code>syslog_facility</code></em>
| <span><strong class="command">stderr</strong></span>
| <span><strong class="command">null</strong></span> );
@@ -1154,7 +1170,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2575884"></a><span><strong class="command">logging</strong></span> Statement Definition and
+<a name="id2576269"></a><span><strong class="command">logging</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p>
The <span><strong class="command">logging</strong></span> statement configures a
@@ -1188,7 +1204,7 @@
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2576005"></a>The <span><strong class="command">channel</strong></span> Phrase</h4></div></div></div>
+<a name="id2576322"></a>The <span><strong class="command">channel</strong></span> Phrase</h4></div></div></div>
<p>
All log output goes to one or more <span class="emphasis"><em>channels</em></span>;
you can make as many of them as you want.
@@ -1649,10 +1665,16 @@ category notify { null; };
</p>
<p>
- <code class="computeroutput">client 127.0.0.1#62536: query: www.example.com IN AAAA +SE</code>
+ <code class="computeroutput">client 127.0.0.1#62536 (www.example.com): query: www.example.com IN AAAA +SE</code>
</p>
<p>
- <code class="computeroutput">client ::1#62537: query: www.example.net IN AAAA -SE</code>
+ <code class="computeroutput">client ::1#62537 (www.example.net): query: www.example.net IN AAAA -SE</code>
+ </p>
+ <p>
+ (The first part of this log message, showing the
+ client address/port number and query name, is
+ repeated in all subsequent log messages related
+ to the same query.)
</p>
</td>
</tr>
@@ -1766,7 +1788,7 @@ category notify { null; };
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2577322"></a>The <span><strong class="command">query-errors</strong></span> Category</h4></div></div></div>
+<a name="id2577777"></a>The <span><strong class="command">query-errors</strong></span> Category</h4></div></div></div>
<p>
The <span><strong class="command">query-errors</strong></span> category is
specifically intended for debugging purposes: To identify
@@ -1994,7 +2016,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2577910"></a><span><strong class="command">lwres</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2578364"></a><span><strong class="command">lwres</strong></span> Statement Grammar</h3></div></div></div>
<p>
This is the grammar of the <span><strong class="command">lwres</strong></span>
statement in the <code class="filename">named.conf</code> file:
@@ -2010,7 +2032,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2577984"></a><span><strong class="command">lwres</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2578438"></a><span><strong class="command">lwres</strong></span> Statement Definition and Usage</h3></div></div></div>
<p>
The <span><strong class="command">lwres</strong></span> statement configures the
name
@@ -2061,7 +2083,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2578116"></a><span><strong class="command">masters</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2578502"></a><span><strong class="command">masters</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting">
<span><strong class="command">masters</strong></span> <em class="replaceable"><code>name</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> |
<em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] };
@@ -2069,16 +2091,17 @@ badresp:1,adberr:0,findfail:0,valfail:0]
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2578160"></a><span><strong class="command">masters</strong></span> Statement Definition and
+<a name="id2578546"></a><span><strong class="command">masters</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p><span><strong class="command">masters</strong></span>
lists allow for a common set of masters to be easily used by
- multiple stub and slave zones.
+ multiple stub and slave zones in their <span><strong class="command">masters</strong></span>
+ or <span><strong class="command">also-notify</strong></span> lists.
</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2578174"></a><span><strong class="command">options</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2578567"></a><span><strong class="command">options</strong></span> Statement Grammar</h3></div></div></div>
<p>
This is the grammar of the <span><strong class="command">options</strong></span>
statement in the <code class="filename">named.conf</code> file:
@@ -2108,7 +2131,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> pid-file <em class="replaceable"><code>path_name</code></em>; </span>]
[<span class="optional"> recursing-file <em class="replaceable"><code>path_name</code></em>; </span>]
[<span class="optional"> statistics-file <em class="replaceable"><code>path_name</code></em>; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
[<span class="optional"> auth-nxdomain <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> deallocate-on-exit <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em>; </span>]
@@ -2122,6 +2145,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> multiple-cnames <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> notify <em class="replaceable"><code>yes_or_no</code></em> | <em class="replaceable"><code>explicit</code></em> | <em class="replaceable"><code>master-only</code></em>; </span>]
[<span class="optional"> recursion <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> request-nsid <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> rfc2308-type1 <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> use-id-pool <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> maintain-ixfr-base <em class="replaceable"><code>yes_or_no</code></em>; </span>]
@@ -2148,6 +2172,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> check-mx-cname ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
[<span class="optional"> check-srv-cname ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
[<span class="optional"> check-sibling <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> check-spf ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
[<span class="optional"> allow-new-zones { <em class="replaceable"><code>yes_or_no</code></em> }; </span>]
[<span class="optional"> allow-notify { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
@@ -2160,7 +2185,9 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> allow-update { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> allow-update-forwarding { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> dnssec-update-mode ( <em class="replaceable"><code>maintain</code></em> | <em class="replaceable"><code>no-resign</code></em> ); </span>]
[<span class="optional"> dnssec-dnskey-kskonly <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> dnssec-loadkeys-interval <em class="replaceable"><code>number</code></em>; </span>]
[<span class="optional"> dnssec-secure-to-insecure <em class="replaceable"><code>yes_or_no</code></em> ;</span>]
[<span class="optional"> try-tcp-refresh <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> allow-v6-synthesis { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
@@ -2206,8 +2233,9 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; </span>]
[<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; </span>]
[<span class="optional"> notify-to-soa <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
- [<span class="optional"> also-notify { <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ;
- [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; ... </span>] }; </span>]
+ [<span class="optional"> also-notify { <em class="replaceable"><code>ip_addr</code></em>
+ [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>keyname</code></em></span>] ;
+ [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] [<span class="optional">key <em class="replaceable"><code>keyname</code></em></span>] ; ... </span>] }; </span>]
[<span class="optional"> max-ixfr-log-size <em class="replaceable"><code>number</code></em>; </span>]
[<span class="optional"> max-journal-size <em class="replaceable"><code>size_spec</code></em>; </span>]
[<span class="optional"> coresize <em class="replaceable"><code>size_spec</code></em> ; </span>]
@@ -2258,6 +2286,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> preferred-glue ( <em class="replaceable"><code>A</code></em> | <em class="replaceable"><code>AAAA</code></em> | <em class="replaceable"><code>NONE</code></em> ); </span>]
[<span class="optional"> edns-udp-size <em class="replaceable"><code>number</code></em>; </span>]
[<span class="optional"> max-udp-size <em class="replaceable"><code>number</code></em>; </span>]
+ [<span class="optional"> max-rsa-exponent-size <em class="replaceable"><code>number</code></em>; </span>]
[<span class="optional"> root-delegation-only [<span class="optional"> exclude { <em class="replaceable"><code>namelist</code></em> } </span>] ; </span>]
[<span class="optional"> querylog <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> disable-algorithms <em class="replaceable"><code>domain</code></em> { <em class="replaceable"><code>algorithm</code></em>;
@@ -2281,7 +2310,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
[<span class="optional"> policy given | disabled | passthru | nxdomain | nodata | cname <em class="replaceable"><code>domain</code></em> </span>]
[<span class="optional"> recursive-only <em class="replaceable"><code>yes_or_no</code></em> </span>] [<span class="optional"> max-policy-ttl <em class="replaceable"><code>number</code></em> </span>] ;
} [<span class="optional"> recursive-only <em class="replaceable"><code>yes_or_no</code></em> </span>] [<span class="optional"> max-policy-ttl <em class="replaceable"><code>number</code></em> </span>]
- [<span class="optional"> break-dnssec <em class="replaceable"><code>yes_or_no</code></em> </span>] ; </span>]
+ [<span class="optional"> break-dnssec <em class="replaceable"><code>yes_or_no</code></em> </span>] [<span class="optional"> min-ns-dots <em class="replaceable"><code>number</code></em> </span>] ; </span>]
};
</pre>
</div>
@@ -2411,13 +2440,22 @@ badresp:1,adberr:0,findfail:0,valfail:0]
<code class="filename">session.key</code>.)
</p></dd>
<dt><span class="term"><span><strong class="command">managed-keys-directory</strong></span></span></dt>
-<dd><p>
- The directory used to hold the files used to track managed keys.
- By default it is the working directory. It there are no
- views then the file <code class="filename">managed-keys.bind</code>
- otherwise a SHA256 hash of the view name is used with
- <code class="filename">.mkeys</code> extension added.
- </p></dd>
+<dd>
+<p>
+ Specifies the directory in which to store the files that
+ track managed DNSSEC keys. By default, this is the working
+ directory.
+ </p>
+<p>
+ If <span><strong class="command">named</strong></span> is not configured to use views,
+ then managed keys for the server will be tracked in a single
+ file called <code class="filename">managed-keys.bind</code>.
+ Otherwise, managed keys will be tracked in separate files,
+ one file per view; each file name will be the SHA256 hash
+ of the view name, followed by the extension
+ <code class="filename">.mkeys</code>.
+ </p>
+</dd>
<dt><span class="term"><span><strong class="command">named-xfer</strong></span></span></dt>
<dd><p>
<span class="emphasis"><em>This option is obsolete.</em></span> It
@@ -2691,7 +2729,7 @@ options {
installed along with <acronym class="acronym">BIND</acronym> 9, and is
current as of the release date. If the DLV key expires, a
new copy of <code class="filename">bind.keys</code> can be downloaded
- from <a href="" target="_top">https://www.isc.org/solutions/dlv</a>.
+ from <a href="https://www.isc.org/solutions/dlv/" target="_top">https://www.isc.org/solutions/dlv/</a>.
</p>
<p>
(To prevent problems if <code class="filename">bind.keys</code> is
@@ -2801,6 +2839,68 @@ options {
};
</pre>
</dd>
+<dt><span class="term"><span><strong class="command">dnssec-update-mode</strong></span></span></dt>
+<dd>
+<p>
+ If this option is set to its default value of
+ <code class="literal">maintain</code> in a zone of type
+ <code class="literal">master</code> which is DNSSEC-signed
+ and configured to allow dynamic updates (see
+ <a href="Bv9ARM.ch06.html#dynamic_update_policies" title="Dynamic Update Policies">the section called &#8220;Dynamic Update Policies&#8221;</a>), and
+ if <span><strong class="command">named</strong></span> has access to the
+ private signing key(s) for the zone, then
+ <span><strong class="command">named</strong></span> will automatically sign all new
+ or changed records and maintain signatures for the zone
+ by regenerating RRSIG records whenever they approach
+ their expiration date.
+ </p>
+<p>
+ If the option is changed to <code class="literal">no-resign</code>,
+ then <span><strong class="command">named</strong></span> will sign all new or
+ changed records, but scheduled maintenance of
+ signatures is disabled.
+ </p>
+<p>
+ With either of these settings, <span><strong class="command">named</strong></span>
+ will reject updates to a DNSSEC-signed zone when the
+ signing keys are inactive or unavailable to
+ <span><strong class="command">named</strong></span>. (A planned third option,
+ <code class="literal">external</code>, will disable all automatic
+ signing and allow DNSSEC data to be submitted into a zone
+ via dyanmic update; this is not yet implemented.)
+ </p>
+</dd>
+<dt><span class="term"><span><strong class="command">zone-statistics</strong></span></span></dt>
+<dd>
+<p>
+ If <strong class="userinput"><code>full</code></strong>, the server will collect
+ statistical data on all zones (unless specifically
+ turned off on a per-zone basis by specifying
+ <span><strong class="command">zone-statistics terse</strong></span> or
+ <span><strong class="command">zone-statistics none</strong></span>
+ in the <span><strong class="command">zone</strong></span> statement).
+ The default is <strong class="userinput"><code>terse</code></strong>, providing
+ minimal statistics on zones (including name and
+ current serial number, but not query type
+ counters).
+ </p>
+<p>
+ These statistics may be accessed via the
+ <span><strong class="command">statistics-channel</strong></span> or
+ using <span><strong class="command">rndc stats</strong></span>, which
+ will dump them to the file listed
+ in the <span><strong class="command">statistics-file</strong></span>. See
+ also <a href="Bv9ARM.ch06.html#statsfile" title="The Statistics File">the section called &#8220;The Statistics File&#8221;</a>.
+ </p>
+<p>
+ For backward compatibility with earlier versions
+ of BIND 9, the <span><strong class="command">zone-statistics</strong></span>
+ option can also accept <strong class="userinput"><code>yes</code></strong>
+ or <strong class="userinput"><code>no</code></strong>, which have the same
+ effect as <strong class="userinput"><code>full</code></strong> and
+ <strong class="userinput"><code>terse</code></strong>, respectively.
+ </p>
+</dd>
</dl></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
@@ -3188,6 +3288,17 @@ options {
operation, such as NOTIFY address lookups.
See also <span><strong class="command">fetch-glue</strong></span> above.
</p></dd>
+<dt><span class="term"><span><strong class="command">request-nsid</strong></span></span></dt>
+<dd><p>
+ If <strong class="userinput"><code>yes</code></strong>, then an empty EDNS(0)
+ NSID (Name Server Identifier) option is sent with all
+ queries to authoritative name servers during iterative
+ resolution. If the authoritative server returns an NSID
+ option in its response, then its contents are logged in
+ the <span><strong class="command">resolver</strong></span> category at level
+ <span><strong class="command">info</strong></span>.
+ The default is <strong class="userinput"><code>no</code></strong>.
+ </p></dd>
<dt><span class="term"><span><strong class="command">rfc2308-type1</strong></span></span></dt>
<dd>
<p>
@@ -3210,20 +3321,6 @@ options {
<acronym class="acronym">BIND</acronym> 9 always allocates query
IDs from a pool.
</p></dd>
-<dt><span class="term"><span><strong class="command">zone-statistics</strong></span></span></dt>
-<dd><p>
- If <strong class="userinput"><code>yes</code></strong>, the server will collect
- statistical data on all zones (unless specifically turned
- off
- on a per-zone basis by specifying <span><strong class="command">zone-statistics no</strong></span>
- in the <span><strong class="command">zone</strong></span> statement).
- The default is <strong class="userinput"><code>no</code></strong>.
- These statistics may be accessed
- using <span><strong class="command">rndc stats</strong></span>, which will
- dump them to the file listed
- in the <span><strong class="command">statistics-file</strong></span>. See
- also <a href="Bv9ARM.ch06.html#statsfile" title="The Statistics File">the section called &#8220;The Statistics File&#8221;</a>.
- </p></dd>
<dt><span class="term"><span><strong class="command">use-ixfr</strong></span></span></dt>
<dd><p>
<span class="emphasis"><em>This option is obsolete</em></span>.
@@ -3415,13 +3512,14 @@ options {
<dt><span class="term"><span><strong class="command">ixfr-from-differences</strong></span></span></dt>
<dd>
<p>
- When <strong class="userinput"><code>yes</code></strong> and the server loads a new version of a master
- zone from its zone file or receives a new version of a slave
- file by a non-incremental zone transfer, it will compare
- the new version to the previous one and calculate a set
- of differences. The differences are then logged in the
- zone's journal file such that the changes can be transmitted
- to downstream slaves as an incremental zone transfer.
+ When <strong class="userinput"><code>yes</code></strong> and the server loads a new
+ version of a master zone from its zone file or receives a
+ new version of a slave file via zone transfer, it will
+ compare the new version to the previous one and calculate
+ a set of differences. The differences are then logged in
+ the zone's journal file such that the changes can be
+ transmitted to downstream slaves as an incremental zone
+ transfer.
</p>
<p>
By allowing incremental zone transfers to be used for
@@ -3546,7 +3644,8 @@ options {
for non-terminal wildcards and issue a warning.
</p></dd>
<dt><span class="term"><span><strong class="command">check-integrity</strong></span></span></dt>
-<dd><p>
+<dd>
+<p>
Perform post load zone integrity checks on master
zones. This checks that MX and SRV records refer
to address (A or AAAA) records and that glue
@@ -3558,7 +3657,15 @@ options {
checked (for out-of-zone names and glue consistency
checks use <span><strong class="command">named-checkzone</strong></span>).
The default is <span><strong class="command">yes</strong></span>.
- </p></dd>
+ </p>
+<p>
+ Check that the two forms of Sender Policy Framework
+ records (TXT records starting with "v=spf1" and SPF) either
+ both exist or both don't exist. Warnings are
+ emitted it they don't and be suppressed with
+ <span><strong class="command">check-spf</strong></span>.
+ </p>
+</dd>
<dt><span class="term"><span><strong class="command">check-mx-cname</strong></span></span></dt>
<dd><p>
If <span><strong class="command">check-integrity</strong></span> is set then
@@ -3576,6 +3683,14 @@ options {
When performing integrity checks, also check that
sibling glue exists. The default is <span><strong class="command">yes</strong></span>.
</p></dd>
+<dt><span class="term"><span><strong class="command">check-spf</strong></span></span></dt>
+<dd><p>
+ When performing integrity checks, check that the
+ two forms of Sender Policy Framwork records (TXT
+ records starting with "v=spf1" and SPF) both exist
+ or both don't exist and issue a warning if not
+ met. The default is <span><strong class="command">warn</strong></span>.
+ </p></dd>
<dt><span class="term"><span><strong class="command">zero-no-soa-ttl</strong></span></span></dt>
<dd><p>
When returning authoritative negative responses to
@@ -3634,6 +3749,21 @@ options {
<code class="literal">no</code>, this option is ignored.
</p>
</dd>
+<dt><span class="term"><span><strong class="command">dnssec-loadkeys-interval</strong></span></span></dt>
+<dd><p>
+ When a zone is configured with <span><strong class="command">auto-dnssec
+ maintain;</strong></span> its key repository must be checked
+ periodically to see if any new keys have been added
+ or any existing keys' timing metadata has been updated
+ (see <a href="man.dnssec-keygen.html" title="dnssec-keygen"><span class="refentrytitle"><span class="application">dnssec-keygen</span></span>(8)</a> and
+ <a href="man.dnssec-settime.html" title="dnssec-settime"><span class="refentrytitle"><span class="application">dnssec-settime</span></span>(8)</a>). The
+ <span><strong class="command">dnssec-loadkeys-interval</strong></span> option
+ sets the frequency of autoatic repository checks, in
+ minutes. The default is <code class="literal">60</code> (1 hour),
+ the minimum is <code class="literal">1</code> (1 minute), and the
+ maximum is <code class="literal">1440</code> (24 hours); any higher
+ value is silently reduced.
+ </p></dd>
<dt><span class="term"><span><strong class="command">try-tcp-refresh</strong></span></span></dt>
<dd><p>
Try to refresh the zone using TCP if UDP queries fail.
@@ -3669,7 +3799,7 @@ options {
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2583675"></a>Forwarding</h4></div></div></div>
+<a name="id2584393"></a>Forwarding</h4></div></div></div>
<p>
The forwarding facility can be used to create a large site-wide
cache on a few servers, reducing traffic over links to external
@@ -3713,7 +3843,7 @@ options {
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2583734"></a>Dual-stack Servers</h4></div></div></div>
+<a name="id2584588"></a>Dual-stack Servers</h4></div></div></div>
<p>
Dual-stack servers are used as servers of last resort to work
around
@@ -3788,6 +3918,12 @@ options {
necessarily knowing the internal network's addresses.
</p>
<p>
+ Note that <span><strong class="command">allow-query-on</strong></span> is only
+ checked for queries that are permitted by
+ <span><strong class="command">allow-query</strong></span>. A query must be
+ allowed by both ACLs, or it will be refused.
+ </p>
+<p>
<span><strong class="command">allow-query-on</strong></span> may
also be specified in the <span><strong class="command">zone</strong></span>
statement, in which case it overrides the
@@ -3924,7 +4060,7 @@ options {
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2584422"></a>Interfaces</h4></div></div></div>
+<a name="id2585149"></a>Interfaces</h4></div></div></div>
<p>
The interfaces and ports that the server will answer queries
from may be specified using the <span><strong class="command">listen-on</strong></span> option. <span><strong class="command">listen-on</strong></span> takes
@@ -4145,7 +4281,8 @@ avoid-v6-udp-ports {};
</p>
<div class="variablelist"><dl>
<dt><span class="term"><span><strong class="command">also-notify</strong></span></span></dt>
-<dd><p>
+<dd>
+<p>
Defines a global list of IP addresses of name servers
that are also sent NOTIFY messages whenever a fresh copy of
the
@@ -4157,6 +4294,13 @@ avoid-v6-udp-ports {};
<span><strong class="command">also-notify</strong></span> address to send
the notify messages to a port other than the
default of 53.
+ An optional TSIG key can also be specified with each
+ address to cause the notify messages to be signed; this
+ can be useful when sending notifies to multiple views.
+ In place of explicit addresses, one or more named
+ <span><strong class="command">masters</strong></span> lists can be used.
+ </p>
+<p>
If an <span><strong class="command">also-notify</strong></span> list
is given in a <span><strong class="command">zone</strong></span> statement,
it will override
@@ -4168,7 +4312,8 @@ avoid-v6-udp-ports {};
not be sent NOTIFY messages for that zone. The default is
the empty
list (no global notification list).
- </p></dd>
+ </p>
+</dd>
<dt><span class="term"><span><strong class="command">max-transfer-time-in</strong></span></span></dt>
<dd><p>
Inbound zone transfers running longer than
@@ -4383,7 +4528,7 @@ avoid-v6-udp-ports {};
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2585495"></a>UDP Port Lists</h4></div></div></div>
+<a name="id2586366"></a>UDP Port Lists</h4></div></div></div>
<p>
<span><strong class="command">use-v4-udp-ports</strong></span>,
<span><strong class="command">avoid-v4-udp-ports</strong></span>,
@@ -4425,7 +4570,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2585555"></a>Operating System Resource Limits</h4></div></div></div>
+<a name="id2586426"></a>Operating System Resource Limits</h4></div></div></div>
<p>
The server's usage of many system resources can be limited.
Scaled values are allowed when specifying resource limits. For
@@ -4505,8 +4650,10 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
approaches
the specified size, some of the oldest transactions in the
journal
- will be automatically removed. The default is
- <code class="literal">unlimited</code>.
+ will be automatically removed. The largest permitted
+ value is 2 gigabytes. The default is
+ <code class="literal">unlimited</code>, which also
+ means 2 gigabytes.
This may also be set on a per-zone basis.
</p></dd>
<dt><span class="term"><span><strong class="command">host-statistics-max</strong></span></span></dt>
@@ -4587,7 +4734,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2586114"></a>Periodic Task Intervals</h4></div></div></div>
+<a name="id2586917"></a>Periodic Task Intervals</h4></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span><strong class="command">cleaning-interval</strong></span></span></dt>
<dd><p>
@@ -4889,8 +5036,10 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</p>
<p>
If multiple <span><strong class="command">rrset-order</strong></span> statements
- appear,
- they are not combined &#8212; the last one applies.
+ appear, they are not combined &#8212; the last one applies.
+ </p>
+<p>
+ By default, all records are returned in random order.
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
@@ -5014,6 +5163,15 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
It is expected that this parameter may be removed
in a future version once there is a standard type.
</p>
+<p>
+ These records can be removed from the zone once named
+ has completed signing the zone with the matching key
+ using <span><strong class="command">nsupdate</strong></span> or
+ <span><strong class="command">rndc signing -clear</strong></span>.
+ <span><strong class="command">rndc signing -clear</strong></span> is the only supported
+ way to remove these records from
+ <span><strong class="command">inline-signing</strong></span> zones.
+ </p>
</dd>
<dt>
<span class="term"><span><strong class="command">min-refresh-time</strong></span>, </span><span class="term"><span><strong class="command">max-refresh-time</strong></span>, </span><span class="term"><span><strong class="command">min-retry-time</strong></span>, </span><span class="term"><span><strong class="command">max-retry-time</strong></span></span>
@@ -5089,13 +5247,19 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</p>
</dd>
<dt><span class="term"><span><strong class="command">masterfile-format</strong></span></span></dt>
-<dd><p>Specifies
+<dd>
+<p>Specifies
the file format of zone files (see
<a href="Bv9ARM.ch06.html#zonefile_format" title="Additional File Formats">the section called &#8220;Additional File Formats&#8221;</a>).
The default value is <code class="constant">text</code>, which is the
- standard textual representation. Files in other formats
- than <code class="constant">text</code> are typically expected
- to be generated by the <span><strong class="command">named-compilezone</strong></span> tool.
+ standard textual representation, except for slave zones,
+ in which the default value is <code class="constant">raw</code>.
+ Files in other formats than <code class="constant">text</code> are
+ typically expected to be generated by the
+ <span><strong class="command">named-compilezone</strong></span> tool, or dumped by
+ <span><strong class="command">named</strong></span>.
+ </p>
+<p>
Note that when a zone file in a different format than
<code class="constant">text</code> is loaded, <span><strong class="command">named</strong></span>
may omit some of the checks which would be performed for a
@@ -5112,7 +5276,8 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
statement within the <span><strong class="command">zone</strong></span> or
<span><strong class="command">view</strong></span> block in the configuration
file.
- </p></dd>
+ </p>
+</dd>
<dt>
<a name="clients-per-query"></a><span class="term"><span><strong class="command">clients-per-query</strong></span>, </span><span class="term"><span><strong class="command">max-clients-per-query</strong></span></span>
</dt>
@@ -5157,6 +5322,13 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
zones is controlled by <span><strong class="command">serial-query-rate</strong></span>.
</p>
</dd>
+<dt><span class="term"><span><strong class="command">max-rsa-exponent-size</strong></span></span></dt>
+<dd><p>
+ The maximum RSA exponent size, in bits, that will
+ be accepted when validating. Valid values are 35
+ to 4096 bits. The default zero (0) is also accepted
+ and is equivalent to 4096.
+ </p></dd>
</dl></div>
</div>
<div class="sect3" lang="en">
@@ -5171,12 +5343,16 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
built-in view (see <a href="Bv9ARM.ch06.html#view_statement_grammar" title="view Statement Grammar">the section called &#8220;<span><strong class="command">view</strong></span> Statement Grammar&#8221;</a>) of
class
<span><strong class="command">CHAOS</strong></span> which is separate from the
- default view of
- class <span><strong class="command">IN</strong></span>; therefore, any global
- server options
- such as <span><strong class="command">allow-query</strong></span> do not apply
- the these zones.
- If you feel the need to disable these zones, use the options
+ default view of class <span><strong class="command">IN</strong></span>. Most global
+ configuration options (<span><strong class="command">allow-query</strong></span>,
+ etc) will apply to this view, but some are locally
+ overridden: <span><strong class="command">notify</strong></span>,
+ <span><strong class="command">recursion</strong></span> and
+ <span><strong class="command">allow-new-zones</strong></span> are
+ always set to <strong class="userinput"><code>no</code></strong>.
+ </p>
+<p>
+ If you need to disable these zones, use the options
below, or hide the built-in <span><strong class="command">CHAOS</strong></span>
view by
defining an explicit view of class <span><strong class="command">CHAOS</strong></span>
@@ -5231,7 +5407,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
servers. The official servers which cover these namespaces
return NXDOMAIN responses to these queries. In particular,
these cover the reverse namespaces for addresses from
- RFC 1918, RFC 4193, and RFC 5737. They also include the
+ RFC 1918, RFC 4193, RFC 5737 and RFC 6598. They also include the
reverse namespace for IPv6 local address (locally assigned),
IPv6 link local addresses, the IPv6 loopback address and the
IPv6 unknown address.
@@ -5263,6 +5439,70 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
<li>30.172.IN-ADDR.ARPA</li>
<li>31.172.IN-ADDR.ARPA</li>
<li>168.192.IN-ADDR.ARPA</li>
+<li>64.100.IN-ADDR.ARPA</li>
+<li>65.100.IN-ADDR.ARPA</li>
+<li>66.100.IN-ADDR.ARPA</li>
+<li>67.100.IN-ADDR.ARPA</li>
+<li>68.100.IN-ADDR.ARPA</li>
+<li>69.100.IN-ADDR.ARPA</li>
+<li>70.100.IN-ADDR.ARPA</li>
+<li>71.100.IN-ADDR.ARPA</li>
+<li>72.100.IN-ADDR.ARPA</li>
+<li>73.100.IN-ADDR.ARPA</li>
+<li>74.100.IN-ADDR.ARPA</li>
+<li>75.100.IN-ADDR.ARPA</li>
+<li>76.100.IN-ADDR.ARPA</li>
+<li>77.100.IN-ADDR.ARPA</li>
+<li>78.100.IN-ADDR.ARPA</li>
+<li>79.100.IN-ADDR.ARPA</li>
+<li>80.100.IN-ADDR.ARPA</li>
+<li>81.100.IN-ADDR.ARPA</li>
+<li>82.100.IN-ADDR.ARPA</li>
+<li>83.100.IN-ADDR.ARPA</li>
+<li>84.100.IN-ADDR.ARPA</li>
+<li>85.100.IN-ADDR.ARPA</li>
+<li>86.100.IN-ADDR.ARPA</li>
+<li>87.100.IN-ADDR.ARPA</li>
+<li>88.100.IN-ADDR.ARPA</li>
+<li>89.100.IN-ADDR.ARPA</li>
+<li>90.100.IN-ADDR.ARPA</li>
+<li>91.100.IN-ADDR.ARPA</li>
+<li>92.100.IN-ADDR.ARPA</li>
+<li>93.100.IN-ADDR.ARPA</li>
+<li>94.100.IN-ADDR.ARPA</li>
+<li>95.100.IN-ADDR.ARPA</li>
+<li>96.100.IN-ADDR.ARPA</li>
+<li>97.100.IN-ADDR.ARPA</li>
+<li>98.100.IN-ADDR.ARPA</li>
+<li>99.100.IN-ADDR.ARPA</li>
+<li>100.100.IN-ADDR.ARPA</li>
+<li>101.100.IN-ADDR.ARPA</li>
+<li>102.100.IN-ADDR.ARPA</li>
+<li>103.100.IN-ADDR.ARPA</li>
+<li>104.100.IN-ADDR.ARPA</li>
+<li>105.100.IN-ADDR.ARPA</li>
+<li>106.100.IN-ADDR.ARPA</li>
+<li>107.100.IN-ADDR.ARPA</li>
+<li>108.100.IN-ADDR.ARPA</li>
+<li>109.100.IN-ADDR.ARPA</li>
+<li>110.100.IN-ADDR.ARPA</li>
+<li>111.100.IN-ADDR.ARPA</li>
+<li>112.100.IN-ADDR.ARPA</li>
+<li>113.100.IN-ADDR.ARPA</li>
+<li>114.100.IN-ADDR.ARPA</li>
+<li>115.100.IN-ADDR.ARPA</li>
+<li>116.100.IN-ADDR.ARPA</li>
+<li>117.100.IN-ADDR.ARPA</li>
+<li>118.100.IN-ADDR.ARPA</li>
+<li>119.100.IN-ADDR.ARPA</li>
+<li>120.100.IN-ADDR.ARPA</li>
+<li>121.100.IN-ADDR.ARPA</li>
+<li>122.100.IN-ADDR.ARPA</li>
+<li>123.100.IN-ADDR.ARPA</li>
+<li>124.100.IN-ADDR.ARPA</li>
+<li>125.100.IN-ADDR.ARPA</li>
+<li>126.100.IN-ADDR.ARPA</li>
+<li>127.100.IN-ADDR.ARPA</li>
<li>0.IN-ADDR.ARPA</li>
<li>127.IN-ADDR.ARPA</li>
<li>254.169.IN-ADDR.ARPA</li>
@@ -5427,7 +5667,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2588152"></a>Content Filtering</h4></div></div></div>
+<a name="id2589223"></a>Content Filtering</h4></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> 9 provides the ability to filter
out DNS responses from external DNS servers containing
@@ -5480,7 +5720,7 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
to get access to an internal node of your local network
that couldn't be externally accessed otherwise.
See the paper available at
- <a href="" target="_top">
+ <a href="http://portal.acm.org/citation.cfm?id=1315245.1315298" target="_top">
http://portal.acm.org/citation.cfm?id=1315245.1315298
</a>
for more details about the attacks.
@@ -5550,7 +5790,7 @@ deny-answer-aliases { "example.net"; };
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2588343"></a>Response Policy Zone (RPZ) Rewriting</h4></div></div></div>
+<a name="id2589417"></a>Response Policy Zone (RPZ) Rewriting</h4></div></div></div>
<p>
<acronym class="acronym">BIND</acronym> 9 includes a limited
mechanism to modify DNS responses for requests
@@ -5606,13 +5846,15 @@ deny-answer-aliases { "example.net"; };
They are encoded as subdomains of
<strong class="userinput"><code>rpz-nsdomain</code></strong> relativized
to the RPZ origin name.
- </p>
-<p>
NSIP triggers match IP addresses in A and
AAAA RRsets for domains that can be checked against NSDNAME
policy records.
NSIP triggers are encoded like IP triggers except as subdomains of
<strong class="userinput"><code>rpz-nsip</code></strong>.
+ NSDNAME and NSIP triggers are checked only for names with at
+ least <span><strong class="command">min-ns-dots</strong></span> dots.
+ The default value of <span><strong class="command">min-ns-dots</strong></span> is 1 to
+ exclude top level domains.
</p>
<p>
The query response is checked against all RPZs, so
@@ -5651,16 +5893,6 @@ deny-answer-aliases { "example.net"; };
and addresses.
</p>
<p>
- Authority verification issues and variations in authority data
- can cause inconsistent results for NSIP and NSDNAME policy records.
- Glue NS records often differ from authoritative NS records.
- So they are available
- only when <acronym class="acronym">BIND</acronym> is built with the
- <strong class="userinput"><code>--enable-rpz-nsip</code></strong> or
- <strong class="userinput"><code>--enable-rpz-nsdname</code></strong> options
- on the "configure" command line.
- </p>
-<p>
RPZ record sets are sets of any types of DNS record except
DNAME or DNSSEC that encode actions or responses to queries.
</p>
@@ -5685,7 +5917,7 @@ deny-answer-aliases { "example.net"; };
walled garden's authority DNS server.
</li>
<li>The <span><strong class="command">PASSTHRU</strong></span> policy is specified
- by a CNAME whose target is <span><strong class="command">rpz_passthru.</strong></span>
+ by a CNAME whose target is <span><strong class="command">rpz-passthru.</strong></span>
It causes the response to not be rewritten
and is most often used to "poke holes" in policies for
CIDR blocks.
@@ -5803,6 +6035,25 @@ bzone.domain.com CNAME garden.example.com.
ns.domain.com.rpz-nsdname CNAME .
48.zz.2.2001.rpz-nsip CNAME .
</pre>
+<p>
+ RPZ can affect server performance.
+ Each configured response policy zone requires the server to
+ perform one to four additional database lookups before a
+ query can be answered.
+ For example, a DNS server with four policy zones, each with all
+ four kinds of response triggers, QNAME, IP, NSIP, and
+ NSDNAME, requires a total of 17 times as many database
+ lookups as a similar DNS server with no response policy zones.
+ A <acronym class="acronym">BIND9</acronym> server with adequate memory and one
+ response policy zone with QNAME and IP triggers might achieve a
+ maximum queries-per-second rate about 20% lower.
+ A server with four response policy zones with QNAME and IP
+ triggers might have a maximum QPS rate about 50% lower.
+ </p>
+<p>
+ Responses rewritten by RPZ are counted in the
+ <span><strong class="command">RPZRewrites</strong></span> statistics.
+ </p>
</div>
</div>
<div class="sect2" lang="en">
@@ -5888,8 +6139,9 @@ ns.domain.com.rpz-nsdname CNAME .
the local server, acting as a slave, will request incremental zone
transfers from the given remote server, a master. If not set, the
value of the <span><strong class="command">request-ixfr</strong></span> option in
- the view or
- global options block is used as a default.
+ the view or global options block is used as a default. It may
+ also be set in the zone block and, if set there, it will
+ override the global or view setting for that zone.
</p>
<p>
IXFR requests to servers that do not support IXFR will
@@ -6013,7 +6265,7 @@ ns.domain.com.rpz-nsdname CNAME .
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2589534"></a><span><strong class="command">statistics-channels</strong></span> Statement Definition and
+<a name="id2590613"></a><span><strong class="command">statistics-channels</strong></span> Statement Definition and
Usage</h3></div></div></div>
<p>
The <span><strong class="command">statistics-channels</strong></span> statement
@@ -6061,6 +6313,30 @@ ns.domain.com.rpz-nsdname CNAME .
If no <span><strong class="command">statistics-channels</strong></span> statement is present,
<span><strong class="command">named</strong></span> will not open any communication channels.
</p>
+<p>
+ If the statistics channel is configured to listen on 127.0.0.1
+ port 8888, then the statistics are accessible in XML format at
+ <a href="http://127.0.0.1:8888/" target="_top">http://127.0.0.1:8888/</a> or
+ <a href="http://127.0.0.1:8888/xml" target="_top">http://127.0.0.1:8888/xml</a>. A CSS file is
+ included which can format the XML statistics into tables
+ when viewed with a stylesheet-capable browser. When
+ <acronym class="acronym">BIND</acronym> 9 is configured with --enable-newstats,
+ a new XML schema is used (version 3) which adds additional
+ zone statistics and uses a flatter tree for more efficient
+ parsing. The stylesheet included uses the Google Charts API
+ to render data into into charts and graphs when using a
+ javascript-capable browser.
+ </p>
+<p>
+ Applications that depend on a particular XML schema
+ can request
+ <a href="http://127.0.0.1:8888/xml/v2" target="_top">http://127.0.0.1:8888/xml/v2</a> for version 2
+ of the statistics XML schema or
+ <a href="http://127.0.0.1:8888/xml/v3" target="_top">http://127.0.0.1:8888/xml/v3</a> for version 3.
+ If the requested schema is supported by the server, then
+ it will respond; if not, it will return a "page not found"
+ error.
+ </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
@@ -6073,7 +6349,7 @@ ns.domain.com.rpz-nsdname CNAME .
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2589742"></a><span><strong class="command">trusted-keys</strong></span> Statement Definition
+<a name="id2590920"></a><span><strong class="command">trusted-keys</strong></span> Statement Definition
and Usage</h3></div></div></div>
<p>
The <span><strong class="command">trusted-keys</strong></span> statement defines
@@ -6113,10 +6389,10 @@ ns.domain.com.rpz-nsdname CNAME .
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2589858"></a><span><strong class="command">managed-keys</strong></span> Statement Grammar</h3></div></div></div>
+<a name="id2590967"></a><span><strong class="command">managed-keys</strong></span> Statement Grammar</h3></div></div></div>
<pre class="programlisting"><span><strong class="command">managed-keys</strong></span> {
- <em class="replaceable"><code>string</code></em> initial-key <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ;
- [<span class="optional"> <em class="replaceable"><code>string</code></em> initial-key <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; [<span class="optional">...</span>]</span>]
+ <em class="replaceable"><code>name</code></em> <code class="literal">initial-key</code> <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key-data</code></em> ;
+ [<span class="optional"> <em class="replaceable"><code>name</code></em> <code class="literal">initial-key</code> <em class="replaceable"><code>flags</code></em> <em class="replaceable"><code>protocol</code></em> <em class="replaceable"><code>algorithm</code></em> <em class="replaceable"><code>key-data</code></em> ; [<span class="optional">...</span>]</span>]
};
</pre>
</div>
@@ -6224,13 +6500,16 @@ ns.domain.com.rpz-nsdname CNAME .
<span><strong class="command">named</strong></span>.)
</p>
<p>
- If the <span><strong class="command">dnssec-lookaside</strong></span> option is
+ If the <span><strong class="command">dnssec-validation</strong></span> option is
set to <strong class="userinput"><code>auto</code></strong>, <span><strong class="command">named</strong></span>
will automatically initialize a managed key for the
- zone <code class="literal">dlv.isc.org</code>. The key that is
- used to initialize the key maintenance process is built
- into <span><strong class="command">named</strong></span>, and can be overridden
- from <span><strong class="command">bindkeys-file</strong></span>.
+ root zone. Similarly, if the <span><strong class="command">dnssec-lookaside</strong></span>
+ option is set to <strong class="userinput"><code>auto</code></strong>,
+ <span><strong class="command">named</strong></span> will automatically initialize
+ a managed key for the zone <code class="literal">dlv.isc.org</code>.
+ In both cases, the key that is used to initialize the key
+ maintenance process is built into <span><strong class="command">named</strong></span>,
+ and can be overridden from <span><strong class="command">bindkeys-file</strong></span>.
</p>
</div>
<div class="sect2" lang="en">
@@ -6248,7 +6527,7 @@ ns.domain.com.rpz-nsdname CNAME .
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2590352"></a><span><strong class="command">view</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2591409"></a><span><strong class="command">view</strong></span> Statement Definition and Usage</h3></div></div></div>
<p>
The <span><strong class="command">view</strong></span> statement is a powerful
feature
@@ -6376,12 +6655,16 @@ view "external" {
[<span class="optional"> allow-query-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> allow-transfer { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> allow-update { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
+ [<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> dnssec-dnskey-kskonly <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> dnssec-loadkeys-interval <em class="replaceable"><code>number</code></em>; </span>]
[<span class="optional"> update-policy <em class="replaceable"><code>local</code></em> | { <em class="replaceable"><code>update_policy_rule</code></em> [<span class="optional">...</span>] }; </span>]
[<span class="optional"> also-notify { <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ;
[<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; ... </span>] }; </span>]
[<span class="optional"> check-names (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
[<span class="optional"> check-mx (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
[<span class="optional"> check-wildcard <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> check-spf ( <em class="replaceable"><code>warn</code></em> | <em class="replaceable"><code>fail</code></em> | <em class="replaceable"><code>ignore</code></em> ); </span>]
[<span class="optional"> check-integrity <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em> ; </span>]
[<span class="optional"> file <em class="replaceable"><code>string</code></em> ; </span>]
@@ -6393,6 +6676,7 @@ view "external" {
[<span class="optional"> ixfr-base <em class="replaceable"><code>string</code></em> ; </span>]
[<span class="optional"> ixfr-from-differences <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> ixfr-tmp-file <em class="replaceable"><code>string</code></em> ; </span>]
+ [<span class="optional"> request-ixfr <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> maintain-ixfr-base <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> max-ixfr-log-size <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> max-transfer-idle-out <em class="replaceable"><code>number</code></em> ; </span>]
@@ -6403,7 +6687,7 @@ view "external" {
[<span class="optional"> pubkey <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>number</code></em> <em class="replaceable"><code>string</code></em> ; </span>]
[<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; </span>]
[<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
+ [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
[<span class="optional"> sig-validity-interval <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>number</code></em></span>] ; </span>]
[<span class="optional"> sig-signing-nodes <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> sig-signing-signatures <em class="replaceable"><code>number</code></em> ; </span>]
@@ -6415,7 +6699,9 @@ view "external" {
[<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> key-directory <em class="replaceable"><code>path_name</code></em>; </span>]
[<span class="optional"> auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>; </span>]
+ [<span class="optional"> inline-signing <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> zero-no-soa-ttl <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
+ [<span class="optional"> serial-update-method <code class="constant">increment</code>|<code class="constant">unixtime</code>; </span>]
};
zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
@@ -6425,13 +6711,15 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
[<span class="optional"> allow-query-on { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> allow-transfer { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
[<span class="optional"> allow-update-forwarding { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
- [<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> dnssec-update-mode ( <em class="replaceable"><code>maintain</code></em> | <em class="replaceable"><code>no-resign</code></em> ); </span>]
+ [<span class="optional"> update-check-ksk <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> dnssec-dnskey-kskonly <em class="replaceable"><code>yes_or_no</code></em>; </span>]
+ [<span class="optional"> dnssec-loadkeys-interval <em class="replaceable"><code>number</code></em>; </span>]
[<span class="optional"> dnssec-secure-to-insecure <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> try-tcp-refresh <em class="replaceable"><code>yes_or_no</code></em>; </span>]
- [<span class="optional"> also-notify { <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ;
- [<span class="optional"> <em class="replaceable"><code>ip_addr</code></em> [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; ... </span>] }; </span>]
+ [<span class="optional"> also-notify [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] { ( <em class="replaceable"><code>masters_list</code></em> | <em class="replaceable"><code>ip_addr</code></em>
+ [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>]
+ [<span class="optional">key <em class="replaceable"><code>key</code></em></span>] ) ; [<span class="optional">...</span>] }; </span>]
[<span class="optional"> check-names (<code class="constant">warn</code>|<code class="constant">fail</code>|<code class="constant">ignore</code>) ; </span>]
[<span class="optional"> dialup <em class="replaceable"><code>dialup_option</code></em> ; </span>]
[<span class="optional"> file <em class="replaceable"><code>string</code></em> ; </span>]
@@ -6464,12 +6752,19 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
[<span class="optional"> use-alt-transfer-source <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> notify-source (<em class="replaceable"><code>ip4_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; </span>]
[<span class="optional"> notify-source-v6 (<em class="replaceable"><code>ip6_addr</code></em> | <code class="constant">*</code>) [<span class="optional">port <em class="replaceable"><code>ip_port</code></em></span>] ; </span>]
- [<span class="optional"> zone-statistics <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
+ [<span class="optional"> zone-statistics <em class="replaceable"><code>full</code></em> | <em class="replaceable"><code>terse</code></em> | <em class="replaceable"><code>none</code></em>; </span>]
+ [<span class="optional"> sig-validity-interval <em class="replaceable"><code>number</code></em> [<span class="optional"><em class="replaceable"><code>number</code></em></span>] ; </span>]
+ [<span class="optional"> sig-signing-nodes <em class="replaceable"><code>number</code></em> ; </span>]
+ [<span class="optional"> sig-signing-signatures <em class="replaceable"><code>number</code></em> ; </span>]
+ [<span class="optional"> sig-signing-type <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> database <em class="replaceable"><code>string</code></em> ; </span>]
[<span class="optional"> min-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> max-refresh-time <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> min-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
+ [<span class="optional"> key-directory <em class="replaceable"><code>path_name</code></em>; </span>]
+ [<span class="optional"> auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>; </span>]
+ [<span class="optional"> inline-signing <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> multi-master <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> zero-no-soa-ttl <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
};
@@ -6529,6 +6824,13 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
[<span class="optional"> delegation-only <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
};
+zone <em class="replaceable"><code>"."</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
+ type redirect;
+ file <em class="replaceable"><code>string</code></em> ;
+ [<span class="optional"> masterfile-format (<code class="constant">text</code>|<code class="constant">raw</code>) ; </span>]
+ [<span class="optional"> allow-query { <em class="replaceable"><code>address_match_list</code></em> }; </span>]
+};
+
zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em></span>] {
type delegation-only;
};
@@ -6537,10 +6839,10 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2591902"></a><span><strong class="command">zone</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2593189"></a><span><strong class="command">zone</strong></span> Statement Definition and Usage</h3></div></div></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2591910"></a>Zone Types</h4></div></div></div>
+<a name="id2593196"></a>Zone Types</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -6772,6 +7074,64 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
<tr>
<td>
<p>
+ <code class="varname">redirect</code>
+ </p>
+ </td>
+<td>
+ <p>
+ Redirect zones are used to provide answers to
+ queries when normal resolution would result in
+ NXDOMAIN being returned.
+ Only one redirect zone is supported
+ per view. <span><strong class="command">allow-query</strong></span> can be
+ used to restrict which clients see these answers.
+ </p>
+ <p>
+ If the client has requested DNSSEC records (DO=1) and
+ the NXDOMAIN response is signed then no substitution
+ will occur.
+ </p>
+ <p>
+ To redirect all NXDOMAIN responses to
+ 100.100.100.2 and
+ 2001:ffff:ffff::100.100.100.2, one would
+ configure a type redirect zone named ".",
+ with the zone file containing wildcard records
+ that point to the desired addresses:
+ <code class="literal">"*. IN A 100.100.100.2"</code>
+ and
+ <code class="literal">"*. IN AAAA 2001:ffff:ffff::100.100.100.2"</code>.
+ </p>
+ <p>
+ To redirect all Spanish names (under .ES) one
+ would use similar entries but with the names
+ "*.ES." instead of "*.". To redirect all
+ commercial Spanish names (under COM.ES) one
+ would use wildcard entries called "*.COM.ES.".
+ </p>
+ <p>
+ Note that the redirect zone supports all
+ possible types; it is not limited to A and
+ AAAA records.
+ </p>
+ <p>
+ Because redirect zones are not referenced
+ directly by name, they are not kept in the
+ zone lookup table with normal master and slave
+ zones. Consequently, it is not currently possible
+ to use
+ <span><strong class="command">rndc reload
+ <em class="replaceable"><code>zonename</code></em></strong></span>
+ to reload a redirect zone. However, when using
+ <span><strong class="command">rndc reload</strong></span> without specifying
+ a zone name, redirect zones will be reloaded along
+ with other zones.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
<code class="varname">delegation-only</code>
</p>
</td>
@@ -6800,7 +7160,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592455"></a>Class</h4></div></div></div>
+<a name="id2594009"></a>Class</h4></div></div></div>
<p>
The zone's name may optionally be followed by a class. If
a class is not specified, class <code class="literal">IN</code> (for <code class="varname">Internet</code>),
@@ -6822,7 +7182,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592488"></a>Zone Options</h4></div></div></div>
+<a name="id2594042"></a>Zone Options</h4></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span><strong class="command">allow-notify</strong></span></span></dt>
<dd><p>
@@ -6875,6 +7235,9 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
with each <span><strong class="command">also-notify</strong></span>
address to send the notify
messages to a port other than the default of 53.
+ A TSIG key may also be specified to cause the
+ <code class="literal">NOTIFY</code> to be signed by the
+ given key.
<span><strong class="command">also-notify</strong></span> is not
meaningful for stub zones.
The default is the empty list.
@@ -6894,6 +7257,11 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
See the description of
<span><strong class="command">check-mx</strong></span> in <a href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
</p></dd>
+<dt><span class="term"><span><strong class="command">check-spf</strong></span></span></dt>
+<dd><p>
+ See the description of
+ <span><strong class="command">check-spf</strong></span> in <a href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
+ </p></dd>
<dt><span class="term"><span><strong class="command">check-wildcard</strong></span></span></dt>
<dd><p>
See the description of
@@ -6919,6 +7287,13 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
See the description of
<span><strong class="command">update-check-ksk</strong></span> in <a href="Bv9ARM.ch06.html#boolean_options" title="Boolean Options">the section called &#8220;Boolean Options&#8221;</a>.
</p></dd>
+<dt><span class="term"><span><strong class="command">dnssec-update-mode</strong></span></span></dt>
+<dd><p>
+ See the description of
+ <span><strong class="command">dnssec-update-mode</strong></span> in <a href="Bv9ARM.ch06.html#options" title="options Statement Definition and
+ Usage">the section called &#8220;<span><strong class="command">options</strong></span> Statement Definition and
+ Usage&#8221;</a>.
+ </p></dd>
<dt><span class="term"><span><strong class="command">dnssec-dnskey-kskonly</strong></span></span></dt>
<dd><p>
See the description of
@@ -7249,20 +7624,44 @@ example.com. NS ns2.example.net.
zone the first time, the repository will be searched
for changes periodically, regardless of whether
<span><strong class="command">rndc loadkeys</strong></span> is used. The recheck
- interval is hard-coded to
- one hour.
+ interval is defined by
+ <span><strong class="command">dnssec-loadkeys-interval</strong></span>.)
+ </p>
+<p>
+ The default setting is <span><strong class="command">auto-dnssec off</strong></span>.
</p>
+</dd>
+<dt><span class="term"><span><strong class="command">serial-update-method</strong></span></span></dt>
+<dd>
<p>
- <span><strong class="command">auto-dnssec create;</strong></span> includes the
- above, but also allows <span><strong class="command">named</strong></span>
- to create new keys in the key repository when needed.
- (NOTE: This option is not yet implemented; the syntax is
- being reserved for future use.)
+ Zones configured for dynamic DNS may use this
+ option to set the update method that will be used for
+ the zone serial number in the SOA record.
</p>
<p>
- The default setting is <span><strong class="command">auto-dnssec off</strong></span>.
+ With the default setting of
+ <span><strong class="command">serial-update-method increment;</strong></span>, the
+ SOA serial number will be incremented by one each time
+ the zone is updated.
+ </p>
+<p>
+ When set to
+ <span><strong class="command">serial-update-method unixtime;</strong></span>, the
+ SOA serial number will be set to the number of seconds
+ since the UNIX epoch, unless the serial number is
+ already greater than or equal to that value, in which
+ case it is simply incremented by one.
</p>
</dd>
+<dt><span class="term"><span><strong class="command">inline-signing</strong></span></span></dt>
+<dd><p>
+ If <code class="literal">yes</code>, this enables
+ "bump in the wire" signing of a zone, where a
+ unsigned zone is transferred in or loaded from
+ disk and a signed version of the zone is served,
+ with possibly, a different serial number. This
+ behaviour is disabled by default.
+ </p></dd>
<dt><span class="term"><span><strong class="command">multi-master</strong></span></span></dt>
<dd><p>
See the description of <span><strong class="command">multi-master</strong></span> in
@@ -7699,7 +8098,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2595170"></a>Zone File</h2></div></div></div>
+<a name="id2596875"></a>Zone File</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="types_of_resource_records_and_when_to_use_them"></a>Types of Resource Records and When to Use Them</h3></div></div></div>
@@ -7712,7 +8111,7 @@ example.com. NS ns2.example.net.
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2595188"></a>Resource Records</h4></div></div></div>
+<a name="id2596893"></a>Resource Records</h4></div></div></div>
<p>
A domain name identifies a node. Each node has a set of
resource information, which may be empty. The set of resource
@@ -8449,7 +8848,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2596880"></a>Textual expression of RRs</h4></div></div></div>
+<a name="id2598517"></a>Textual expression of RRs</h4></div></div></div>
<p>
RRs are represented in binary form in the packets of the DNS
protocol, and are usually represented in highly encoded form
@@ -8652,7 +9051,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2597537"></a>Discussion of MX Records</h3></div></div></div>
+<a name="id2599037"></a>Discussion of MX Records</h3></div></div></div>
<p>
As described above, domain servers store information as a
series of resource records, each of which contains a particular
@@ -8908,7 +9307,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2598084"></a>Inverse Mapping in IPv4</h3></div></div></div>
+<a name="id2599585"></a>Inverse Mapping in IPv4</h3></div></div></div>
<p>
Reverse name resolution (that is, translation from IP address
to name) is achieved by means of the <span class="emphasis"><em>in-addr.arpa</em></span> domain
@@ -8969,7 +9368,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2598211"></a>Other Zone File Directives</h3></div></div></div>
+<a name="id2599848"></a>Other Zone File Directives</h3></div></div></div>
<p>
The Master File Format was initially defined in RFC 1035 and
has subsequently been extended. While the Master File Format
@@ -8984,7 +9383,7 @@ example.com. NS ns2.example.net.
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598233"></a>The <span><strong class="command">@</strong></span> (at-sign)</h4></div></div></div>
+<a name="id2599939"></a>The <span><strong class="command">@</strong></span> (at-sign)</h4></div></div></div>
<p>
When used in the label (or name) field, the asperand or
at-sign (@) symbol represents the current origin.
@@ -8995,7 +9394,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598249"></a>The <span><strong class="command">$ORIGIN</strong></span> Directive</h4></div></div></div>
+<a name="id2599955"></a>The <span><strong class="command">$ORIGIN</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$ORIGIN</strong></span>
<em class="replaceable"><code>domain-name</code></em>
@@ -9024,7 +9423,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598446"></a>The <span><strong class="command">$INCLUDE</strong></span> Directive</h4></div></div></div>
+<a name="id2600016"></a>The <span><strong class="command">$INCLUDE</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$INCLUDE</strong></span>
<em class="replaceable"><code>filename</code></em>
@@ -9060,7 +9459,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598516"></a>The <span><strong class="command">$TTL</strong></span> Directive</h4></div></div></div>
+<a name="id2600153"></a>The <span><strong class="command">$TTL</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$TTL</strong></span>
<em class="replaceable"><code>default-ttl</code></em>
@@ -9079,7 +9478,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2598552"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</h3></div></div></div>
+<a name="id2600189"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</h3></div></div></div>
<p>
Syntax: <span><strong class="command">$GENERATE</strong></span>
<em class="replaceable"><code>range</code></em>
@@ -9503,7 +9902,7 @@ HOST-127.EXAMPLE. MX 0 .
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2599437"></a>Name Server Statistics Counters</h4></div></div></div>
+<a name="id2601075"></a>Name Server Statistics Counters</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -10055,12 +10454,25 @@ HOST-127.EXAMPLE. MX 0 .
</p>
</td>
</tr>
+<tr>
+<td>
+ <p><span><strong class="command">RPZRewrites</strong></span></p>
+ </td>
+<td>
+ <p><span><strong class="command"></strong></span></p>
+ </td>
+<td>
+ <p>
+ Response policy zone rewrites.
+ </p>
+ </td>
+</tr>
</tbody>
</table></div>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2601047"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
+<a name="id2602716"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -10214,7 +10626,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2601498"></a>Resolver Statistics Counters</h4></div></div></div>
+<a name="id2603099"></a>Resolver Statistics Counters</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -10597,7 +11009,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2602588"></a>Socket I/O Statistics Counters</h4></div></div></div>
+<a name="id2604121"></a>Socket I/O Statistics Counters</h4></div></div></div>
<p>
Socket I/O statistics counters are defined per socket
types, which are
@@ -10752,7 +11164,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2602962"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
+<a name="id2604494"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
<p>
Most statistics counters that were available
in <span><strong class="command">BIND</strong></span> 8 are also supported in
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch07.html b/contrib/bind9/doc/arm/Bv9ARM.ch07.html
index 3e0dc2257a73..fd1747ec2cda 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch07.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch07.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -46,10 +46,10 @@
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2603136"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2604722"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603285">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603345">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2604871">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2604999">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
</dl>
@@ -111,17 +111,10 @@ zone "example.com" {
This allows recursive queries of the server from the outside
unless recursion has been previously disabled.
</p>
-<p>
- For more information on how to use ACLs to protect your server,
- see the <span class="emphasis"><em>AUSCERT</em></span> advisory at:
- </p>
-<p>
- <a href="ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos" target="_top">ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos</a>
- </p>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603136"></a><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span>
+<a name="id2604722"></a><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span>
</h2></div></div></div>
<p>
On UNIX servers, it is possible to run <acronym class="acronym">BIND</acronym>
@@ -147,7 +140,7 @@ zone "example.com" {
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2603285"></a>The <span><strong class="command">chroot</strong></span> Environment</h3></div></div></div>
+<a name="id2604871"></a>The <span><strong class="command">chroot</strong></span> Environment</h3></div></div></div>
<p>
In order for a <span><strong class="command">chroot</strong></span> environment
to
@@ -175,7 +168,7 @@ zone "example.com" {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2603345"></a>Using the <span><strong class="command">setuid</strong></span> Function</h3></div></div></div>
+<a name="id2604999"></a>Using the <span><strong class="command">setuid</strong></span> Function</h3></div></div></div>
<p>
Prior to running the <span><strong class="command">named</strong></span> daemon,
use
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch08.html b/contrib/bind9/doc/arm/Bv9ARM.ch08.html
index 7205d5bec045..35d6bbdf0925 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch08.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch08.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -45,18 +45,18 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603561">Common Problems</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2603566">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603578">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603595">Where Can I Get Help?</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2605147">Common Problems</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2605153">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2605164">Incrementing and Changing the Serial Number</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2605181">Where Can I Get Help?</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603561"></a>Common Problems</h2></div></div></div>
+<a name="id2605147"></a>Common Problems</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2603566"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
+<a name="id2605153"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
<p>
The best solution to solving installation and
configuration issues is to take preventative measures by setting
@@ -68,7 +68,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603578"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
+<a name="id2605164"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
<p>
Zone serial numbers are just numbers &#8212; they aren't
date related. A lot of people set them to a number that
@@ -95,7 +95,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603595"></a>Where Can I Get Help?</h2></div></div></div>
+<a name="id2605181"></a>Where Can I Get Help?</h2></div></div></div>
<p>
The Internet Systems Consortium
(<acronym class="acronym">ISC</acronym>) offers a wide range
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch09.html b/contrib/bind9/doc/arm/Bv9ARM.ch09.html
index 3a4245f30170..83578ad70327 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch09.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch09.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -45,31 +45,31 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603657">Acknowledgments</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2605243">Acknowledgments</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#historical_dns_information">A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603761">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2605483">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#rfcs">Request for Comments (RFCs)</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607177">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608695">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bind9.library">BIND 9 DNS Library Support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608265">Prerequisite</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608275">Compilation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608299">Installation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608330">Known Defects/Restrictions</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608680">The dns.conf File</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608707">Sample Applications</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609611">Library References</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2610921">Prerequisite</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609361">Compilation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609385">Installation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609416">Known Defects/Restrictions</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2610380">The dns.conf File</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2610407">Sample Applications</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2611312">Library References</a></span></dt>
</dl></dd>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603657"></a>Acknowledgments</h2></div></div></div>
+<a name="id2605243"></a>Acknowledgments</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="historical_dns_information"></a>A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym>
@@ -172,7 +172,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603761"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h2></div></div></div>
+<a name="id2605483"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="ipv6addresses"></a>IPv6 addresses (AAAA)</h3></div></div></div>
@@ -260,17 +260,17 @@
</p>
<div class="bibliography">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2604017"></a>Bibliography</h4></div></div></div>
+<a name="id2605739"></a>Bibliography</h4></div></div></div>
<div class="bibliodiv">
<h3 class="title">Standards</h3>
<div class="biblioentry">
-<a name="id2604027"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="title"><i>Mail Routing and the Domain System</i>. </span><span class="pubdate">January 1986. </span></p>
+<a name="id2605750"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="title"><i>Mail Routing and the Domain System</i>. </span><span class="pubdate">January 1986. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604051"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Concepts and Facilities</i>. </span><span class="pubdate">November 1987. </span></p>
+<a name="id2605773"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Concepts and Facilities</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604074"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Implementation and
+<a name="id2605797"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Implementation and
Specification</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
</div>
@@ -278,42 +278,42 @@
<h3 class="title">
<a name="proposed_standards"></a>Proposed Standards</h3>
<div class="biblioentry">
-<a name="id2604110"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="title"><i>Clarifications to the <acronym class="acronym">DNS</acronym>
+<a name="id2605833"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="title"><i>Clarifications to the <acronym class="acronym">DNS</acronym>
Specification</i>. </span><span class="pubdate">July 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604137"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="title"><i>Negative Caching of <acronym class="acronym">DNS</acronym>
+<a name="id2605860"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="title"><i>Negative Caching of <acronym class="acronym">DNS</acronym>
Queries</i>. </span><span class="pubdate">March 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604163"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="title"><i>Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2605885"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="title"><i>Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604187"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A Mechanism for Prompt Notification of Zone Changes</i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2605910"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A Mechanism for Prompt Notification of Zone Changes</i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604211"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="title"><i>Dynamic Updates in the Domain Name System</i>. </span><span class="pubdate">April 1997. </span></p>
+<a name="id2605933"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="title"><i>Dynamic Updates in the Domain Name System</i>. </span><span class="pubdate">April 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604266"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Extension Mechanisms for DNS (EDNS0)</i>. </span><span class="pubdate">August 1997. </span></p>
+<a name="id2605989"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Extension Mechanisms for DNS (EDNS0)</i>. </span><span class="pubdate">August 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604293"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Non-Terminal DNS Name Redirection</i>. </span><span class="pubdate">August 1999. </span></p>
+<a name="id2606016"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Non-Terminal DNS Name Redirection</i>. </span><span class="pubdate">August 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604320"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</i>. </span><span class="pubdate">May 2000. </span></p>
+<a name="id2606042"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604381"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secret Key Establishment for DNS (TKEY RR)</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2606104"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secret Key Establishment for DNS (TKEY RR)</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604411"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DNS Request and Transaction Signatures (SIG(0)s)</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2606134"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DNS Request and Transaction Signatures (SIG(0)s)</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604441"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secure Domain Name System (DNS) Dynamic Update</i>. </span><span class="pubdate">November 2000. </span></p>
+<a name="id2606164"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secure Domain Name System (DNS) Dynamic Update</i>. </span><span class="pubdate">November 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604468"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="title"><i>Generic Security Service Algorithm for Secret
+<a name="id2606190"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="title"><i>Generic Security Service Algorithm for Secret
Key Transaction Authentication for DNS
(GSS-TSIG)</i>. </span><span class="pubdate">October 2003. </span></p>
</div>
@@ -322,19 +322,19 @@
<h3 class="title">
<acronym class="acronym">DNS</acronym> Security Proposed Standards</h3>
<div class="biblioentry">
-<a name="id2604618"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="title"><i>Indicating Resolver Support of DNSSEC</i>. </span><span class="pubdate">December 2001. </span></p>
+<a name="id2606273"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="title"><i>Indicating Resolver Support of DNSSEC</i>. </span><span class="pubdate">December 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604645"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="title"><i>Threat Analysis of the Domain Name System (DNS)</i>. </span><span class="pubdate">August 2004. </span></p>
+<a name="id2606299"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="title"><i>Threat Analysis of the Domain Name System (DNS)</i>. </span><span class="pubdate">August 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604681"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>DNS Security Introduction and Requirements</i>. </span><span class="pubdate">March 2005. </span></p>
+<a name="id2606336"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>DNS Security Introduction and Requirements</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604746"></a><p>[<abbr class="abbrev">RFC4034</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Resource Records for the DNS Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
+<a name="id2606401"></a><p>[<abbr class="abbrev">RFC4034</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Resource Records for the DNS Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604811"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Protocol Modifications for the DNS
+<a name="id2606466"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Protocol Modifications for the DNS
Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
</div>
@@ -342,146 +342,146 @@
<h3 class="title">Other Important RFCs About <acronym class="acronym">DNS</acronym>
Implementation</h3>
<div class="biblioentry">
-<a name="id2604885"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="title"><i>A Security Problem and Proposed Correction With Widely
+<a name="id2606539"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="title"><i>A Security Problem and Proposed Correction With Widely
Deployed <acronym class="acronym">DNS</acronym> Software.</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604910"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Implementation
+<a name="id2606565"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Implementation
Errors and Suggested Fixes</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605047"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="title"><i>Serial Number Arithmetic</i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2606633"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="title"><i>Serial Number Arithmetic</i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605082"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="title"><i>Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
+<a name="id2606668"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="title"><i>Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
Queries for IPv6 Addresses</i>. </span><span class="pubdate">May 2005. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Resource Record Types</h3>
<div class="biblioentry">
-<a name="id2605128"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>New <acronym class="acronym">DNS</acronym> RR Definitions</i>. </span><span class="pubdate">October 1990. </span></p>
+<a name="id2606714"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>New <acronym class="acronym">DNS</acronym> RR Definitions</i>. </span><span class="pubdate">October 1990. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605186"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> NSAP Resource Records</i>. </span><span class="pubdate">October 1994. </span></p>
+<a name="id2606772"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> NSAP Resource Records</i>. </span><span class="pubdate">October 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605223"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="title"><i>Resolution of Uniform Resource Identifiers using
+<a name="id2606809"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="title"><i>Resolution of Uniform Resource Identifiers using
the Domain Name System</i>. </span><span class="pubdate">June 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605258"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="title"><i>A Means for Expressing Location Information in the
+<a name="id2606844"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="title"><i>A Means for Expressing Location Information in the
Domain
Name System</i>. </span><span class="pubdate">January 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605313"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A <acronym class="acronym">DNS</acronym> RR for Specifying the
+<a name="id2606899"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A <acronym class="acronym">DNS</acronym> RR for Specifying the
Location of
Services.</i>. </span><span class="pubdate">October 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605351"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="title"><i>Using the Internet <acronym class="acronym">DNS</acronym> to
+<a name="id2606937"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="title"><i>Using the Internet <acronym class="acronym">DNS</acronym> to
Distribute MIXER
Conformant Global Address Mapping</i>. </span><span class="pubdate">January 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605377"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="title"><i>Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">October 1997. </span></p>
+<a name="id2606963"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="title"><i>Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">October 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605402"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DSA KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2606988"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DSA KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605429"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2607015"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605456"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Storing Certificates in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2607042"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Storing Certificates in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605495"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2607081"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605525"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Detached Domain Name System (DNS) Information</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2607111"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Detached Domain Name System (DNS) Information</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605555"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="title"><i>A DNS RR for specifying the location of services (DNS SRV)</i>. </span><span class="pubdate">February 2000. </span></p>
+<a name="id2607141"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="title"><i>A DNS RR for specifying the location of services (DNS SRV)</i>. </span><span class="pubdate">February 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605597"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="title"><i>The Naming Authority Pointer (NAPTR) DNS Resource Record</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2607184"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="title"><i>The Naming Authority Pointer (NAPTR) DNS Resource Record</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605630"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</i>. </span><span class="pubdate">May 2001. </span></p>
+<a name="id2607217"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</i>. </span><span class="pubdate">May 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605657"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="title"><i>A DNS RR Type for Lists of Address Prefixes (APL RR)</i>. </span><span class="pubdate">June 2001. </span></p>
+<a name="id2607312"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="title"><i>A DNS RR Type for Lists of Address Prefixes (APL RR)</i>. </span><span class="pubdate">June 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605681"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Extensions to support IP
+<a name="id2607335"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Extensions to support IP
version 6</i>. </span><span class="pubdate">October 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605738"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="title"><i>Handling of Unknown DNS Resource Record (RR) Types</i>. </span><span class="pubdate">September 2003. </span></p>
+<a name="id2607393"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="title"><i>Handling of Unknown DNS Resource Record (RR) Types</i>. </span><span class="pubdate">September 2003. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">
<acronym class="acronym">DNS</acronym> and the Internet</h3>
<div class="biblioentry">
-<a name="id2605770"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Network Names
+<a name="id2607425"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Network Names
and Other Types</i>. </span><span class="pubdate">April 1989. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605796"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="title"><i>Requirements for Internet Hosts - Application and
+<a name="id2607450"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="title"><i>Requirements for Internet Hosts - Application and
Support</i>. </span><span class="pubdate">October 1989. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605818"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="title"><i>Domain Name System Structure and Delegation</i>. </span><span class="pubdate">March 1994. </span></p>
+<a name="id2607473"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="title"><i>Domain Name System Structure and Delegation</i>. </span><span class="pubdate">March 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605842"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Classless IN-ADDR.ARPA Delegation</i>. </span><span class="pubdate">March 1998. </span></p>
+<a name="id2607496"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Classless IN-ADDR.ARPA Delegation</i>. </span><span class="pubdate">March 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605888"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="title"><i>IAB Technical Comment on the Unique DNS Root</i>. </span><span class="pubdate">May 2000. </span></p>
+<a name="id2607542"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="title"><i>IAB Technical Comment on the Unique DNS Root</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605911"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="title"><i>Domain Name System (DNS) IANA Considerations</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2607565"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="title"><i>Domain Name System (DNS) IANA Considerations</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">
<acronym class="acronym">DNS</acronym> Operations</h3>
<div class="biblioentry">
-<a name="id2605969"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="title"><i>Domain administrators operations guide.</i>. </span><span class="pubdate">November 1987. </span></p>
+<a name="id2607623"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="title"><i>Domain administrators operations guide.</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605992"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Data File
+<a name="id2607646"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Data File
Configuration Errors</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606019"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Operational and
+<a name="id2607673"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Operational and
Configuration Errors</i>. </span><span class="pubdate">February 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606045"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Operational Criteria for Root Name Servers.</i>. </span><span class="pubdate">October 1996. </span></p>
+<a name="id2607700"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Operational Criteria for Root Name Servers.</i>. </span><span class="pubdate">October 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606082"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="title"><i>Use of <acronym class="acronym">DNS</acronym> Aliases for
+<a name="id2607736"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="title"><i>Use of <acronym class="acronym">DNS</acronym> Aliases for
Network Services.</i>. </span><span class="pubdate">October 1997. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Internationalized Domain Names</h3>
<div class="biblioentry">
-<a name="id2606128"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="title"><i>A Tangled Web: Issues of I18N, Domain Names,
+<a name="id2607782"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="title"><i>A Tangled Web: Issues of I18N, Domain Names,
and the Other Internet protocols</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606160"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Internationalizing Domain Names in Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
+<a name="id2607814"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Internationalizing Domain Names in Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606205"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="title"><i>Nameprep: A Stringprep Profile for Internationalized Domain Names</i>. </span><span class="pubdate">March 2003. </span></p>
+<a name="id2607860"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="title"><i>Nameprep: A Stringprep Profile for Internationalized Domain Names</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606241"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Punycode: A Bootstring encoding of Unicode
+<a name="id2607895"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Punycode: A Bootstring encoding of Unicode
for Internationalized Domain Names in
Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
@@ -497,47 +497,47 @@
</p>
</div>
<div class="biblioentry">
-<a name="id2606354"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="title"><i>Using the Domain Name System To Store Arbitrary String
+<a name="id2607940"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="title"><i>Using the Domain Name System To Store Arbitrary String
Attributes</i>. </span><span class="pubdate">May 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606376"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="title"><i>Tools for <acronym class="acronym">DNS</acronym> Debugging</i>. </span><span class="pubdate">November 1994. </span></p>
+<a name="id2607962"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="title"><i>Tools for <acronym class="acronym">DNS</acronym> Debugging</i>. </span><span class="pubdate">November 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606402"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Support for Load
+<a name="id2607988"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Support for Load
Balancing</i>. </span><span class="pubdate">April 1995. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606427"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Legal Basis for Domain Name Allocation</i>. </span><span class="pubdate">November 1997. </span></p>
+<a name="id2608013"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Legal Basis for Domain Name Allocation</i>. </span><span class="pubdate">November 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606451"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="title"><i>Domain Names and Company Name Retrieval</i>. </span><span class="pubdate">May 1998. </span></p>
+<a name="id2608037"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="title"><i>Domain Names and Company Name Retrieval</i>. </span><span class="pubdate">May 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606497"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Convention For Using Legal Names as Domain Names</i>. </span><span class="pubdate">May 1998. </span></p>
+<a name="id2608083"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Convention For Using Legal Names as Domain Names</i>. </span><span class="pubdate">May 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606520"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="title"><i>Reflections on the DNS, RFC 1591, and Categories of Domains</i>. </span><span class="pubdate">February 2001. </span></p>
+<a name="id2608106"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="title"><i>Reflections on the DNS, RFC 1591, and Categories of Domains</i>. </span><span class="pubdate">February 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606547"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="title"><i>Distributing Authoritative Name Servers via
+<a name="id2608133"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="title"><i>Distributing Authoritative Name Servers via
Shared Unicast Addresses</i>. </span><span class="pubdate">April 2002. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606572"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="title"><i>DNS IPv6 Transport Operational Guidelines</i>. </span><span class="pubdate">September 2004. </span></p>
+<a name="id2608158"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="title"><i>DNS IPv6 Transport Operational Guidelines</i>. </span><span class="pubdate">September 2004. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Obsolete and Unimplemented Experimental RFC</h3>
<div class="biblioentry">
-<a name="id2606616"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Geographical
+<a name="id2608202"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Geographical
Location</i>. </span><span class="pubdate">November 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606674"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Binary Labels in the Domain Name System</i>. </span><span class="pubdate">August 1999. </span></p>
+<a name="id2608260"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Binary Labels in the Domain Name System</i>. </span><span class="pubdate">August 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606700"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="title"><i>DNS Extensions to Support IPv6 Address Aggregation
+<a name="id2608286"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="title"><i>DNS Extensions to Support IPv6 Address Aggregation
and Renumbering</i>. </span><span class="pubdate">July 2000. </span></p>
</div>
</div>
@@ -551,39 +551,39 @@
</p>
</div>
<div class="biblioentry">
-<a name="id2606748"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">January 1997. </span></p>
+<a name="id2608334"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">January 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606788"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secure Domain Name System Dynamic Update</i>. </span><span class="pubdate">April 1997. </span></p>
+<a name="id2608374"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secure Domain Name System Dynamic Update</i>. </span><span class="pubdate">April 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606814"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2608401"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606844"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Domain Name System Security (DNSSEC)
+<a name="id2608430"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Domain Name System Security (DNSSEC)
Signing Authority</i>. </span><span class="pubdate">November 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606870"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>DNS Security Extension Clarification on Zone Status</i>. </span><span class="pubdate">March 2001. </span></p>
+<a name="id2608456"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>DNS Security Extension Clarification on Zone Status</i>. </span><span class="pubdate">March 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606897"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Limiting the Scope of the KEY Resource Record (RR)</i>. </span><span class="pubdate">December 2002. </span></p>
+<a name="id2608483"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Limiting the Scope of the KEY Resource Record (RR)</i>. </span><span class="pubdate">December 2002. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606933"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Redefinition of DNS Authenticated Data (AD) bit</i>. </span><span class="pubdate">November 2003. </span></p>
+<a name="id2608519"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Redefinition of DNS Authenticated Data (AD) bit</i>. </span><span class="pubdate">November 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607037"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Delegation Signer (DS) Resource Record (RR)</i>. </span><span class="pubdate">December 2003. </span></p>
+<a name="id2608555"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Delegation Signer (DS) Resource Record (RR)</i>. </span><span class="pubdate">December 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607064"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="title"><i>Legacy Resolver Compatibility for Delegation Signer (DS)</i>. </span><span class="pubdate">May 2004. </span></p>
+<a name="id2608582"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="title"><i>Legacy Resolver Compatibility for Delegation Signer (DS)</i>. </span><span class="pubdate">May 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607091"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>Domain Name System KEY (DNSKEY) Resource Record
+<a name="id2608609"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>Domain Name System KEY (DNSKEY) Resource Record
(RR) Secure Entry Point (SEP) Flag</i>. </span><span class="pubdate">April 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607136"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="title"><i>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</i>. </span><span class="pubdate">August 2004. </span></p>
+<a name="id2608653"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="title"><i>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</i>. </span><span class="pubdate">August 2004. </span></p>
</div>
</div>
</div>
@@ -604,14 +604,14 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607177"></a>Other Documents About <acronym class="acronym">BIND</acronym>
+<a name="id2608695"></a>Other Documents About <acronym class="acronym">BIND</acronym>
</h3></div></div></div>
<p></p>
<div class="bibliography">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2607187"></a>Bibliography</h4></div></div></div>
+<a name="id2608705"></a>Bibliography</h4></div></div></div>
<div class="biblioentry">
-<a name="id2607189"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></i>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
+<a name="id2608707"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></i>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
</div>
</div>
</div>
@@ -648,7 +648,7 @@
</ul></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608265"></a>Prerequisite</h3></div></div></div>
+<a name="id2610921"></a>Prerequisite</h3></div></div></div>
<p>GNU make is required to build the export libraries (other
part of BIND 9 can still be built with other types of make). In
the reminder of this document, "make" means GNU make. Note that
@@ -657,7 +657,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608275"></a>Compilation</h3></div></div></div>
+<a name="id2609361"></a>Compilation</h3></div></div></div>
<pre class="screen">
$ <strong class="userinput"><code>./configure --enable-exportlib <em class="replaceable"><code>[other flags]</code></em></code></strong>
$ <strong class="userinput"><code>make</code></strong>
@@ -672,7 +672,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608299"></a>Installation</h3></div></div></div>
+<a name="id2609385"></a>Installation</h3></div></div></div>
<pre class="screen">
$ <strong class="userinput"><code>cd lib/export</code></strong>
$ <strong class="userinput"><code>make install</code></strong>
@@ -694,7 +694,7 @@ $ <strong class="userinput"><code>make install</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608330"></a>Known Defects/Restrictions</h3></div></div></div>
+<a name="id2609416"></a>Known Defects/Restrictions</h3></div></div></div>
<div class="itemizedlist"><ul type="disc">
<li><p>Currently, win32 is not supported for the export
library. (Normal BIND 9 application can be built as
@@ -734,7 +734,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608680"></a>The dns.conf File</h3></div></div></div>
+<a name="id2610380"></a>The dns.conf File</h3></div></div></div>
<p>The IRS library supports an "advanced" configuration file
related to the DNS library for configuration parameters that
would be beyond the capability of the
@@ -752,14 +752,14 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608707"></a>Sample Applications</h3></div></div></div>
+<a name="id2610407"></a>Sample Applications</h3></div></div></div>
<p>Some sample application programs using this API are
provided for reference. The following is a brief description of
these applications.
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608715"></a>sample: a simple stub resolver utility</h4></div></div></div>
+<a name="id2610416"></a>sample: a simple stub resolver utility</h4></div></div></div>
<p>
It sends a query of a given name (of a given optional RR type) to a
specified recursive server, and prints the result as a list of
@@ -823,7 +823,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608806"></a>sample-async: a simple stub resolver, working asynchronously</h4></div></div></div>
+<a name="id2610506"></a>sample-async: a simple stub resolver, working asynchronously</h4></div></div></div>
<p>
Similar to "sample", but accepts a list
of (query) domain names as a separate file and resolves the names
@@ -864,7 +864,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608859"></a>sample-request: a simple DNS transaction client</h4></div></div></div>
+<a name="id2610560"></a>sample-request: a simple DNS transaction client</h4></div></div></div>
<p>
It sends a query to a specified server, and
prints the response with minimal processing. It doesn't act as a
@@ -905,7 +905,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608992"></a>sample-gai: getaddrinfo() and getnameinfo() test code</h4></div></div></div>
+<a name="id2610624"></a>sample-gai: getaddrinfo() and getnameinfo() test code</h4></div></div></div>
<p>
This is a test program
to check getaddrinfo() and getnameinfo() behavior. It takes a
@@ -922,7 +922,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2609006"></a>sample-update: a simple dynamic update client program</h4></div></div></div>
+<a name="id2610638"></a>sample-update: a simple dynamic update client program</h4></div></div></div>
<p>
It accepts a single update command as a
command-line argument, sends an update request message to the
@@ -1017,7 +1017,7 @@ $ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mm
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2609138"></a>nsprobe: domain/name server checker in terms of RFC 4074</h4></div></div></div>
+<a name="id2611248"></a>nsprobe: domain/name server checker in terms of RFC 4074</h4></div></div></div>
<p>
It checks a set
of domains to see the name servers of the domains behave
@@ -1074,7 +1074,7 @@ $ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mm
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2609611"></a>Library References</h3></div></div></div>
+<a name="id2611312"></a>Library References</h3></div></div></div>
<p>As of this writing, there is no formal "manual" of the
libraries, except this document, header files (some of them
provide pretty detailed explanations), and sample application
diff --git a/contrib/bind9/doc/arm/Bv9ARM.ch10.html b/contrib/bind9/doc/arm/Bv9ARM.ch10.html
index 1484ecf469be..d25c0dd856ce 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.ch10.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.ch10.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -55,6 +55,12 @@
<span class="refentrytitle"><a href="man.host.html">host</a></span><span class="refpurpose"> &#8212; DNS lookup utility</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="man.dnssec-checkds.html"><span class="application">dnssec-checkds</span></a></span><span class="refpurpose"> &#8212; A DNSSEC delegation consistency checking tool.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="man.dnssec-coverage.html"><span class="application">dnssec-coverage</span></a></span><span class="refpurpose"> &#8212; checks future DNSKEY coverage for a zone</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="man.dnssec-dsfromkey.html"><span class="application">dnssec-dsfromkey</span></a></span><span class="refpurpose"> &#8212; DNSSEC DS RR generation tool</span>
</dt>
<dt>
@@ -73,6 +79,9 @@
<span class="refentrytitle"><a href="man.dnssec-signzone.html"><span class="application">dnssec-signzone</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone signing tool</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="man.dnssec-verify.html"><span class="application">dnssec-verify</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone verification tool</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="man.named-checkconf.html"><span class="application">named-checkconf</span></a></span><span class="refpurpose"> &#8212; named configuration file syntax checking tool</span>
</dt>
<dt>
diff --git a/contrib/bind9/doc/arm/Bv9ARM.html b/contrib/bind9/doc/arm/Bv9ARM.html
index b66cccce481d..039aa9a650f4 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.html
+++ b/contrib/bind9/doc/arm/Bv9ARM.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -41,7 +41,7 @@
<div>
<div><h1 class="title">
<a name="id2563175"></a>BIND 9 Administrator Reference Manual</h1></div>
-<div><p class="copyright">Copyright © 2004-2012 Internet Systems Consortium, Inc. ("ISC")</p></div>
+<div><p class="copyright">Copyright © 2004-2013 Internet Systems Consortium, Inc. ("ISC")</p></div>
<div><p class="copyright">Copyright © 2000-2003 Internet Software Consortium.</p></div>
</div>
<hr>
@@ -51,39 +51,39 @@
<dl>
<dt><span class="chapter"><a href="Bv9ARM.ch01.html">1. Introduction</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564375">Scope of Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564398">Organization of This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564538">Conventions Used in This Document</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564720">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564378">Scope of Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564402">Organization of This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564541">Conventions Used in This Document</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch01.html#id2564723">The Domain Name System (<acronym class="acronym">DNS</acronym>)</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564741">DNS Fundamentals</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564775">Domains and Domain Names</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567180">Zones</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567257">Authoritative Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567430">Caching Name Servers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567560">Name Servers in Multiple Roles</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564744">DNS Fundamentals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2564846">Domains and Domain Names</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567184">Zones</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567260">Authoritative Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567433">Caching Name Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch01.html#id2567563">Name Servers in Multiple Roles</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch02.html">2. <acronym class="acronym">BIND</acronym> Resource Requirements</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567594">Hardware requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567621">CPU Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567634">Memory Requirements</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567729">Name Server Intensive Environment Issues</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567739">Supported Operating Systems</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567597">Hardware requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567624">CPU Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567637">Memory Requirements</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567732">Name Server Intensive Environment Issues</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch02.html#id2567742">Supported Operating Systems</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch03.html">3. Name Server Configuration</a></span></dt>
<dd><dl>
<dt><span class="sect1"><a href="Bv9ARM.ch03.html#sample_configuration">Sample Configurations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567771">A Caching-only Name Server</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567992">An Authoritative-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567774">A Caching-only Name Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2567995">An Authoritative-only Name Server</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568014">Load Balancing</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568369">Name Server Operations</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568018">Load Balancing</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch03.html#id2568372">Name Server Operations</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568374">Tools for Use With the Name Server Daemon</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570421">Signals</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2568377">Tools for Use With the Name Server Daemon</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch03.html#id2570600">Signals</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch04.html">4. Advanced DNS Features</a></span></dt>
@@ -92,64 +92,64 @@
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#dynamic_update">Dynamic Update</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#journal">The journal file</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#incremental_zone_transfers">Incremental Zone Transfers (IXFR)</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2570934">Split DNS</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2570952">Example split DNS setup</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571175">Split DNS</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571193">Example split DNS setup</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#tsig">TSIG</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2564012">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2564086">Copying the Shared Secret to Both Machines</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571811">Informing the Servers of the Key's Existence</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571847">Instructing the Server to Use the Key</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571905">TSIG Key Based Access Control</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571954">Errors</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571763">Generate Shared Keys for Each Pair of Hosts</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571836">Copying the Shared Secret to Both Machines</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571847">Informing the Servers of the Key's Existence</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571883">Instructing the Server to Use the Key</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571941">TSIG Key Based Access Control</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2564003">Errors</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2571968">TKEY</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572153">SIG(0)</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2564017">TKEY</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572326">SIG(0)</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#DNSSEC">DNSSEC</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572221">Generating Keys</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572300">Signing the Zone</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572381">Configuring Servers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572394">Generating Keys</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572541">Signing the Zone</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572622">Configuring Servers</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#dnssec.dynamic.zones">DNSSEC, Dynamic Zones, and Automatic Signing</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571475">Converting from insecure to secure</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571512">Dynamic DNS update method</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563493">Fully automatic zone signing</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563575">Private-type records</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563612">DNSKEY rollovers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563762">Dynamic DNS update method</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563795">Automatic key rollovers</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563821">NSEC3PARAM rollovers via UPDATE</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563899">Converting from NSEC to NSEC3</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563909">Converting from NSEC3 to NSEC</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563922">Converting from secure to insecure</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571605">Periodic re-signing</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571614">NSEC3 and OPTOUT</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563413">Converting from insecure to secure</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563450">Dynamic DNS update method</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563555">Fully automatic zone signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563726">Private-type records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563832">DNSKEY rollovers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563845">Dynamic DNS update method</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563878">Automatic key rollovers</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563905">NSEC3PARAM rollovers via UPDATE</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563914">Converting from NSEC to NSEC3</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563924">Converting from NSEC3 to NSEC</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2563937">Converting from secure to insecure</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572029">Periodic re-signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572039">NSEC3 and OPTOUT</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607510">Validating Resolver</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2571692">Authoritative Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572072">Validating Resolver</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609027">Authoritative Server</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#pkcs11">PKCS #11 (Cryptoki) support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2610637">Prerequisites</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2608477">Building BIND 9 with PKCS#11</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2608602">PKCS #11 Tools</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2634916">Using the HSM</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2635114">Specifying the engine on the command line</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2635160">Running named with automatic zone re-signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2611929">Prerequisites</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2610179">Building BIND 9 with PKCS#11</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2612283">PKCS #11 Tools</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2612382">Using the HSM</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2636884">Specifying the engine on the command line</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2636930">Running named with automatic zone re-signing</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572669">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572842">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572868">Address Lookups Using AAAA Records</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2572889">Address to Name Lookups Using Nibble Format</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2573109">Address Lookups Using AAAA Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2573130">Address to Name Lookups Using Nibble Format</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch05.html">5. The <acronym class="acronym">BIND</acronym> 9 Lightweight Resolver</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2572922">The Lightweight Resolver Library</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch05.html#id2573163">The Lightweight Resolver Library</a></span></dt>
<dt><span class="sect1"><a href="Bv9ARM.ch05.html#lwresd">Running a Resolver Daemon</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch06.html">6. <acronym class="acronym">BIND</acronym> 9 Configuration Reference</a></span></dt>
@@ -157,58 +157,58 @@
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#configuration_file_elements">Configuration File Elements</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#address_match_lists">Address Match Lists</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574332">Comment Syntax</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574711">Comment Syntax</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#Configuration_File_Grammar">Configuration File Grammar</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2574986"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575371"><span><strong class="command">acl</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#acl"><span><strong class="command">acl</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575176"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575561"><span><strong class="command">controls</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#controls_statement_definition_and_usage"><span><strong class="command">controls</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575467"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575484"><span><strong class="command">include</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575921"><span><strong class="command">include</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575938"><span><strong class="command">include</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575576"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575600"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575758"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575884"><span><strong class="command">logging</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575961"><span><strong class="command">key</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2575985"><span><strong class="command">key</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576075"><span><strong class="command">logging</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2576269"><span><strong class="command">logging</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2577910"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2577984"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578116"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578160"><span><strong class="command">masters</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578364"><span><strong class="command">lwres</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578438"><span><strong class="command">lwres</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578502"><span><strong class="command">masters</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578546"><span><strong class="command">masters</strong></span> Statement Definition and
Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578174"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2578567"><span><strong class="command">options</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#options"><span><strong class="command">options</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_grammar"><span><strong class="command">server</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#server_statement_definition_and_usage"><span><strong class="command">server</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#statschannels"><span><strong class="command">statistics-channels</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2589534"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590613"><span><strong class="command">statistics-channels</strong></span> Statement Definition and
Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#trusted-keys"><span><strong class="command">trusted-keys</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2589742"><span><strong class="command">trusted-keys</strong></span> Statement Definition
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590920"><span><strong class="command">trusted-keys</strong></span> Statement Definition
and Usage</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2589858"><span><strong class="command">managed-keys</strong></span> Statement Grammar</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590967"><span><strong class="command">managed-keys</strong></span> Statement Grammar</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#managed-keys"><span><strong class="command">managed-keys</strong></span> Statement Definition
and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#view_statement_grammar"><span><strong class="command">view</strong></span> Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590352"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591409"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span><strong class="command">zone</strong></span>
Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591902"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2593189"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2595170">Zone File</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2596875">Zone File</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2597537">Discussion of MX Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2599037">Discussion of MX Records</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598084">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598211">Other Zone File Directives</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598552"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2599585">Inverse Mapping in IPv4</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2599848">Other Zone File Directives</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2600189"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#statistics">BIND9 Statistics</a></span></dt>
@@ -217,41 +217,41 @@
<dt><span class="chapter"><a href="Bv9ARM.ch07.html">7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</a></span></dt>
<dd><dl>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2603136"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2604722"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603285">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603345">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2604871">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2604999">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch08.html">8. Troubleshooting</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603561">Common Problems</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2603566">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603578">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603595">Where Can I Get Help?</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2605147">Common Problems</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2605153">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2605164">Incrementing and Changing the Serial Number</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2605181">Where Can I Get Help?</a></span></dt>
</dl></dd>
<dt><span class="appendix"><a href="Bv9ARM.ch09.html">A. Appendices</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603657">Acknowledgments</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2605243">Acknowledgments</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#historical_dns_information">A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603761">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2605483">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#rfcs">Request for Comments (RFCs)</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607177">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608695">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bind9.library">BIND 9 DNS Library Support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608265">Prerequisite</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608275">Compilation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608299">Installation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608330">Known Defects/Restrictions</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608680">The dns.conf File</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608707">Sample Applications</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609611">Library References</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2610921">Prerequisite</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609361">Compilation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609385">Installation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609416">Known Defects/Restrictions</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2610380">The dns.conf File</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2610407">Sample Applications</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2611312">Library References</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="reference"><a href="Bv9ARM.ch10.html">I. Manual pages</a></span></dt>
@@ -263,6 +263,12 @@
<span class="refentrytitle"><a href="man.host.html">host</a></span><span class="refpurpose"> &#8212; DNS lookup utility</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="man.dnssec-checkds.html"><span class="application">dnssec-checkds</span></a></span><span class="refpurpose"> &#8212; A DNSSEC delegation consistency checking tool.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="man.dnssec-coverage.html"><span class="application">dnssec-coverage</span></a></span><span class="refpurpose"> &#8212; checks future DNSKEY coverage for a zone</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="man.dnssec-dsfromkey.html"><span class="application">dnssec-dsfromkey</span></a></span><span class="refpurpose"> &#8212; DNSSEC DS RR generation tool</span>
</dt>
<dt>
@@ -281,6 +287,9 @@
<span class="refentrytitle"><a href="man.dnssec-signzone.html"><span class="application">dnssec-signzone</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone signing tool</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="man.dnssec-verify.html"><span class="application">dnssec-verify</span></a></span><span class="refpurpose"> &#8212; DNSSEC zone verification tool</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="man.named-checkconf.html"><span class="application">named-checkconf</span></a></span><span class="refpurpose"> &#8212; named configuration file syntax checking tool</span>
</dt>
<dt>
diff --git a/contrib/bind9/doc/arm/Bv9ARM.pdf b/contrib/bind9/doc/arm/Bv9ARM.pdf
index 98d816b499a6..b38b393da7c0 100644
--- a/contrib/bind9/doc/arm/Bv9ARM.pdf
+++ b/contrib/bind9/doc/arm/Bv9ARM.pdf
@@ -1275,120 +1275,138 @@ endobj
<< /S /GoTo /D (section.B.3) >>
endobj
856 0 obj
-(B.3 dnssec-dsfromkey)
+(B.3 dnssec-checkds)
endobj
857 0 obj
<< /S /GoTo /D (section.B.4) >>
endobj
860 0 obj
-(B.4 dnssec-keyfromlabel)
+(B.4 dnssec-coverage)
endobj
861 0 obj
<< /S /GoTo /D (section.B.5) >>
endobj
864 0 obj
-(B.5 dnssec-keygen)
+(B.5 dnssec-dsfromkey)
endobj
865 0 obj
<< /S /GoTo /D (section.B.6) >>
endobj
868 0 obj
-(B.6 dnssec-revoke)
+(B.6 dnssec-keyfromlabel)
endobj
869 0 obj
<< /S /GoTo /D (section.B.7) >>
endobj
872 0 obj
-(B.7 dnssec-settime)
+(B.7 dnssec-keygen)
endobj
873 0 obj
<< /S /GoTo /D (section.B.8) >>
endobj
876 0 obj
-(B.8 dnssec-signzone)
+(B.8 dnssec-revoke)
endobj
877 0 obj
<< /S /GoTo /D (section.B.9) >>
endobj
880 0 obj
-(B.9 named-checkconf)
+(B.9 dnssec-settime)
endobj
881 0 obj
<< /S /GoTo /D (section.B.10) >>
endobj
884 0 obj
-(B.10 named-checkzone)
+(B.10 dnssec-signzone)
endobj
885 0 obj
<< /S /GoTo /D (section.B.11) >>
endobj
888 0 obj
-(B.11 named)
+(B.11 dnssec-verify)
endobj
889 0 obj
<< /S /GoTo /D (section.B.12) >>
endobj
892 0 obj
-(B.12 named-journalprint)
+(B.12 named-checkconf)
endobj
893 0 obj
<< /S /GoTo /D (section.B.13) >>
endobj
896 0 obj
-(B.13 nsupdate)
+(B.13 named-checkzone)
endobj
897 0 obj
<< /S /GoTo /D (section.B.14) >>
endobj
900 0 obj
-(B.14 rndc)
+(B.14 named)
endobj
901 0 obj
<< /S /GoTo /D (section.B.15) >>
endobj
904 0 obj
-(B.15 rndc.conf)
+(B.15 named-journalprint)
endobj
905 0 obj
<< /S /GoTo /D (section.B.16) >>
endobj
908 0 obj
-(B.16 rndc-confgen)
+(B.16 nsupdate)
endobj
909 0 obj
<< /S /GoTo /D (section.B.17) >>
endobj
912 0 obj
-(B.17 ddns-confgen)
+(B.17 rndc)
endobj
913 0 obj
<< /S /GoTo /D (section.B.18) >>
endobj
916 0 obj
-(B.18 arpaname)
+(B.18 rndc.conf)
endobj
917 0 obj
<< /S /GoTo /D (section.B.19) >>
endobj
920 0 obj
-(B.19 genrandom)
+(B.19 rndc-confgen)
endobj
921 0 obj
<< /S /GoTo /D (section.B.20) >>
endobj
924 0 obj
-(B.20 isc-hmac-fixup)
+(B.20 ddns-confgen)
endobj
925 0 obj
<< /S /GoTo /D (section.B.21) >>
endobj
928 0 obj
-(B.21 nsec3hash)
+(B.21 arpaname)
endobj
929 0 obj
-<< /S /GoTo /D [930 0 R /FitH ] >>
+<< /S /GoTo /D (section.B.22) >>
endobj
-933 0 obj <<
+932 0 obj
+(B.22 genrandom)
+endobj
+933 0 obj
+<< /S /GoTo /D (section.B.23) >>
+endobj
+936 0 obj
+(B.23 isc-hmac-fixup)
+endobj
+937 0 obj
+<< /S /GoTo /D (section.B.24) >>
+endobj
+940 0 obj
+(B.24 nsec3hash)
+endobj
+941 0 obj
+<< /S /GoTo /D [942 0 R /FitH ] >>
+endobj
+945 0 obj <<
/Length 240
/Filter /FlateDecode
>>
@@ -1396,32 +1414,32 @@ stream
xÚ•OKA Åïó)rl›N2Éü9ZªRA¡27ñ°´[)¸[ºÖïïlWË‚^$0ïý˜y[Š *Z—BTK
ÛÖXx+Þ½¡oFÔ¡Šsåð‡[ LÁ+T\@1M±_8±Eo=C¥BÈÌ~À—Ù,C yÄŠƒÂ•Ë»—Ùrý´š——ì,ãf׺Ãǹ¯ÏÇ~”ž›}Ó7ݶ™¿æ a$/¾äKc¼\óXwŸõûà›Û| §â1'p®äðqH'`Ô ð3‹zšüßÚ±y±n VG³1°™ž07l(%tî[þM^Xúendstream
endobj
-930 0 obj <<
+942 0 obj <<
/Type /Page
-/Contents 933 0 R
-/Resources 932 0 R
+/Contents 945 0 R
+/Resources 944 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 939 0 R
+/Parent 951 0 R
>> endobj
-931 0 obj <<
+943 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
/PTEX.FileName (./isc-logo.pdf)
/PTEX.PageNumber 1
-/PTEX.InfoDict 940 0 R
+/PTEX.InfoDict 952 0 R
/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000]
/BBox [0.00000000 0.00000000 612.00000000 792.00000000]
/PieceInfo <<
-/Illustrator 941 0 R
+/Illustrator 953 0 R
>>
/Resources <<
/ColorSpace <<
-/CS0 942 0 R
+/CS0 954 0 R
>>/Properties <<
-/MC0 943 0 R
+/MC0 955 0 R
>>/ExtGState <<
-/GS0 944 0 R
+/GS0 956 0 R
>>>>
/Length 843
/Filter /FlateDecode
@@ -1437,7 +1455,7 @@ BqÕ•l9uš
!=§ ¨Œø†vGc £I#/'~<1‚ÀÔRPy±´ýl1½Ͷw1 чd }¡þa
Ë9b :žÎÞF" ‹>64”~0IGD˜Ë Ø°$ÙtMâ¯%Z½Gð¾¥Úñ§aÑÌ‘ I¼ ý—/øýzü+À
endobj
-940 0 obj
+952 0 obj
<<
/CreationDate (D:20100303120319-08'00')
/Creator (Adobe Illustrator CS3)
@@ -1446,24 +1464,24 @@ endobj
/Title (ISC_logo_only_RGB)
>>
endobj
-941 0 obj
+953 0 obj
<<
-/Private 945 0 R
+/Private 957 0 R
/LastModified (D:20100412113400-07'00')
>>
endobj
-942 0 obj
-[/ICCBased 946 0 R]
+954 0 obj
+[/ICCBased 958 0 R]
endobj
-943 0 obj
+955 0 obj
<<
-/Intent 947 0 R
-/Usage 948 0 R
+/Intent 959 0 R
+/Usage 960 0 R
/Name (Layer 1)
/Type /OCG
>>
endobj
-944 0 obj
+956 0 obj
<<
/OPM 1
/BM /Normal
@@ -1477,22 +1495,22 @@ endobj
/SA true
>>
endobj
-945 0 obj
+957 0 obj
<<
/RoundtripVersion 13
/ContainerVersion 11
/CreatorVersion 13
-/AIMetaData 949 0 R
-/AIPrivateData1 950 0 R
-/AIPrivateData2 951 0 R
-/AIPrivateData3 952 0 R
-/AIPrivateData4 953 0 R
-/AIPrivateData5 954 0 R
+/AIMetaData 961 0 R
+/AIPrivateData1 962 0 R
+/AIPrivateData2 963 0 R
+/AIPrivateData3 964 0 R
+/AIPrivateData4 965 0 R
+/AIPrivateData5 966 0 R
/NumBlock 5
/RoundtripStreamType 1
>>
endobj
-946 0 obj
+958 0 obj
<<
/Length 281
/Filter /FlateDecode
@@ -1503,10 +1521,10 @@ H‰b``2ptqre``ÈÍ+)
rwRˆˆŒR`?ÏÀÆÀÌ
ò‹KRS€j!îAˆBPˆi
endobj
-947 0 obj
+959 0 obj
[/View/Design]
endobj
-948 0 obj
+960 0 obj
<<
/CreatorInfo <<
/Subtype /Artwork
@@ -1514,21 +1532,21 @@ endobj
>>
>>
endobj
-949 0 obj
+961 0 obj
<<
/Length 981
>>
stream
%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.2 %%For: (Brian Reid) () %%Title: (ISC_logo_only_RGB.ai) %%CreationDate: 4/12/10 11:34 AM %%BoundingBox: 247 367 366 413 %%HiResBoundingBox: 247.0869 367.5654 365.0859 412.583 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 9.0 %AI12_BuildNumber: 434 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0.658824 0.8 (ISC logo blue) %%+ 0.372549 0.376471 0.384314 (PANTONE 425 U) %%+ 0 0 0 ([Registration]) %AI3_TemplateBox: 306.5 395.5 306.5 395.5 %AI3_TileBox: 18 33.1201 594 786.96 %AI3_DocumentPreview: None %AI5_ArtSize: 612 792 %AI5_RulerUnits: 3 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 0 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -381 793 0.92 1268 743 26 0 0 117 75 0 0 1 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream
endobj
-950 0 obj
+962 0 obj
<<
/Length 11082
>>
stream
%%BoundingBox: 247 367 366 413 %%HiResBoundingBox: 247.0869 367.5654 365.0859 412.583 %AI7_Thumbnail: 128 52 8 %%BeginData: 10932 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD1F52285252A8FD04FFFD05A8FFFFFFA87DFD4F52285252522852 %525228525252285252522852525228525252285252522852277DA8FFFFA8 %7D7D525227FD04527DA8FFFFA85252275252522852525228525252285252 %522852525228525252285252522852525228525252285252522852525228 %52525228525252285252522852525228525252285252522852525228FD21 %52A8FFFF7D7D525227FD0752275252A8FFFF7DFD215227FD2A522E522752 %2E5227522E5227522E5227522E5227522E5227522E5227527DFFFFA85252 %27522E5227522E5227522E5227522752A8FF7D5227522E5227522E522752 %2E5227522E5227522E5227522E5227522E522752277D7D7D275227522E52 %27522E5227522E5227522E5227522E5227522E5227522E5227522E522752 %2E5227FD1A52277DA8FFA87D2EFD11522E527DFFA853FD1D52A8FFFFFF7D %28FD285228525252285252522852525228525252285252522852277DFFFF %7D522752525228525252285252522852525228525252275252FFA8522752 %285252522852525228525252285252522852525228525252277DFFA852A8 %FF5227525252285252522852525228525252285252522852525228525252 %285252522852525228FD1852277DFFFFFD1B52FFA8FD1A527DFFA8275252 %FF7DFD265227522E5227522E5227522E5227522E5227522E522752277DFF %FF525227522E5227522E5227522E5227522E5227522E5227522E52275252 %FFA852275227522E5227522E5227522E5227522E5227522E522752A8A827 %522E527DA9275227522E5227522E5227522E5227522E5227522E52275227 %5227522E5227522E5227522EFD17527DFFA8FD1E527DFFA8FD17527DFFFD %0452287DFFFD155228FD075228FD08522852525228525252285252522852 %5252285252522852527D2752525228525252285252522852525228525252 %2852525228525252285252527DFF7D522852525228525252285252522852 %525228FD0452FF7D5228FD0452FF52522852525228525252285252522752 %2752527DA1A8A8FFCACFA8CAA17D5252275228FD3C52A8FFFD145228A8FF %53FD0652FFA82EFD0C527D7DCAFD04FFAFAF85AF85AFAFFFFFFFA87DFD05 %522E5227522E5227522E5227522E5227522E5227522E5227522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522752A8 %FF275227522E5227522E5227522E5227522E522752FFA827522E5227522E %FF7D522E5227522E522752275252A8FFFFAFAF603CFD041413FD04143C60 %AFFFFF535227FD3A52277DFFA827FD11527DFFFD0852A8FFFD0952A8CFFF %FFAF3C3D1414141A141A141A141A141A14141461AFFFA8FD045228525252 %285252522852525228525252285252522852525228525252285252522852 %5252285252522852525228525252285252522852525227A8FF5227525252 %2852525228525252285252522EFFA85227525252285228A87D5252522852 %27527DFFFFAF603CFD07141A1414141A1414141AFD041460FFA8FD3D52FF %A8FD10527DFF7DFD0F527DFFFFA9611414141A141A141A141A141A141A14 %1A141A141A141A14143CFFA827522E5227522E5227522E5227522E522752 %2E5227522E5227522E5227522E5227522E5227522E5227522E5227522E52 %27522E5227522E5227522E527DFF525227522E5227522E5227522E522752 %A8FF27522E5227522E5227522852275252A8FFFF3C1413FD191436FFFD3C %5259FFA828FD0E52FF7DFD0D527DFFFF8B1414141A141A141A141A141A14 %1A141A141A141A141A141A141A141A141460285252522852525228525252 %285252522852525228525252275227522752275227525252285252522852 %52522852525228525252285252522852525227A8FF7D2752525228525252 %2852525227A8FF52275252522852525228522752A8FFA93CFD05141A1414 %141A1414141A1414141A1414141A1414141A1414141A1414FD1552285252 %7D527D597D527DFD065227FD1852FFA8FD0D52FFFFFD0A52277DFFFF601A %141A141A141A141A141A141A141A141A141A141A141A141A141A141A141A %141A142E5227522E5227522E5227522E5227522752527D7DA8A8FD09FFA8 %FFA8A87D532852275227522E5227522E5227522E5227522E5227522E527D %FF525227522E5227522E52275252FF7D522E5227522E522752277DFFFF36 %FD2314FD0E527D7DFD07FFA8A87DA87DA87DFD04A8FD05FFA87DFD15527D %FFA827FD0A52A8FF7DFD0952A8FFAF1414141A141A141A141A141A141A14 %1A141A141A141A141A141A141A141A141A141A141A145252285252522852 %525227527DA8FFFFFFA87D7D52522752275227522752275227522752527D %A8FFFFFFA87E52522752525228525252285252522852525227A8FF522752 %5252285252522752FFA8275252522852525227A8FF85FD05141A1414141A %1414141A1414141A1414141A1414141A1414141A1414141A1414141AFD07 %52275253A8FFFFFFA8FD045227FD0F522EFD04527D7DFFFFFFA87DFD1052 %7DFF7DFD0A52FF7DFD0852A8FF8B1414141A141A141A141A141A141A141A %141A141A141A141A141A141A141A141A141A141A141A1427522E52275227 %7DA8FFFFA85252275227522E5227522E5227522E5227522E5227522E5227 %522E52275227527DFFFFFF7D52275227522E5227522E5227522752A8A827 %5227522E52275227A8FF5227522752525227A8FF6113FD2714FD0652A8FF %FF7D7D28FD22527DA8FFFF7DFD0C5227A8FF7DFD0852A8FFFD06522EA8FF %61141A141A141A141A141A141A141A141A141A141A141A141A141A141A14 %1A141A141A141A141A141A14285227527DFFFF7D52522752285252522852 %525228525252285252522852525228525252285252522852525228522752 %52FFFFA8525228522852525228FD0452FF7D5228525252285252FF7D5252 %52285227A8FF611414141A1414141A1414141A1414141A1414141A141414 %1A1414141A1414141A1414141A1414141A141452277DFFFFA87D28FD2952 %287DFFFF7EFD0B52A8FFFD065227A8FF7D2752525227A8FF8B141A141A14 %1A141A141A141A141A141A141A141A141A141A141A141A141A141A141A14 %1A141A141A141A1428A8FFFF525227522E5227522E5227522E5227522E52 %27522E5227522E5227522E5227522E5227522E5227522E5227522E522752 %7DFFA87D275227522E522752277EFF52275227522852A8FF52522752277D %FF8BFD121413FD0F1413FD0914FFFFA8FD3352FFFFA8FD0952FF7DFD0652 %FFA8FD04527DFFAF141A141A141A141A141A141A141A141A141A14613C3C %141A141A141A141A141A141A143D3C3C141A141A141A14FF7D2752525228 %525252285252522852525228525252285252522852525228525252285252 %522852525228525252285252522852525227A8FFA8FD045228525252A8A8 %27522852277DFF7D27522752A8FFFD051461A9AF848B1414141A141436AF %AFFFFFFFAFAF36FD04141A14141461A9FFAFFFAFAF601A1414141A7D2EFD %3552277DFFFFFD0752A8FFFD05527DFFFD04527DFF3C14141A141484FFFF %FFAF1A141A141A85FD09FF841A141A141A14AFFD08FF841A141A1427522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522E5227 %522E5227522E5227522E5227522E5227522E5227522E52277DA8FF52522E %5227527DFF52522E5227FFA852275252FF60FD061485FFFFFFAFFD041460 %FD0BFF36FD0414AFFD0AFF60141414FD3A5253FFFF7DFD04527DFFA85252 %527DFFA8285252FFAF1A141A141A141A84FFFFFFAF3D141A14FD05FF603D %60FD04FFAF141A1461FD04FFA96136AFFD04FF141A142852525228525252 %285252522852525228525252285252522852525228525252285252522852 %52522852525228525252285252522852525228522752A8FF5252285252FF %A8FD0452FF7D5227A8FF3C141AFD051485FFFFFFAF14141460FD04FF3614 %141460FFFFFFA91A141484FFFFFFA91A141414FD04FF611414FD3D52A8FF %FD0452A8FF525228A8FF7D277DFF8B141A141A141A141A85FFFFFFAF1A14 %1A60FD04FF3C141A1461FD04FF141A14FD04FF8B141A141AAFFFFFFF601A %142E5227522E5227522E5227522E5227522E5227522E5227522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522E5227 %522752A8FF5252277DFF7D2752A8FF2752A8FFFD08141385FFFFFFAF1414 %1361FD04FF36FD04148584856014133CFD04FF60FD0414FD04FF851314FD %3D52287DFFFF525252FF7D5252FFA8527DFF3C1A141A141A141A141A85FF %FFFFAF1A141A60FD04FFAF141A141A141A141A141A3CFD04FF61141A141A %3C616061361A145252285252522852525228525252285252522852525228 %525252285252522852525228525252285252522852525228525252275252 %522752525228525252277DFF7E2752FFA82753FF7E27FFA914141A141414 %1A1414148BFFFFFFAF1414143CAFFD04FFAFFD091461FD04FF3614141AFD %07141AFD2B522852285227FD075227FD075227A8FF7D27FFA8527DFF7D7D %FF3D141A141A141A141A141484FFFFFFA91A141A1485FD06FF603C141A14 %1A14143CFD04FF61141A141A141A141A141A1427522E5227522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E522752275227 %FD04527D7DA8A8FFA8FFA8FFA8A87D7D52522752275227FFA8527DFF277D %FF52A8AF13FD0A1485FFFFFFAFFD0414138BFD06FFA860FD05143CFD04FF %36FD0B14FD2852A8A8FD07FFA8FFA8FFA8FD06FFA87D5227527DFF7D7DFF %7DA8FF7DFF3C1A141A141A141A141A141A84FFFFFFAF3D141A141A148BFD %07FF8B141A141A3CFD04FF61141A141A141A141A141A1428525252285252 %522852525228525252285252522852525228525252285252522752275252 %A8A8FFFFFFA8A87D7DFD065227FD04527D7DA8FFFFA87D2752A8FF52FF7D %A8A8CAA914141A1414141A1414141A1485FFFFFFAFFD071460A8FD06FF8B %1414143CFD04FF36FD04141A1414141A1414FD2252A8FD04FF7D7D525228 %5227FD0B52275252527DFFFFFF5253FFA8A8A8FFA8FF61141A141A141A14 %1A141A141A85FFFFFFAF1A141A141A141A141A60FD06FF85141A3CFD04FF %61141A141A141A141A141A142E5227522E5227522E5227522E5227522E52 %27522E5227522E5227522752277DA8FFFFA859522752275227522E522752 %2E5227522E5227522E5227522752277DA8FF7DA8FFFFA8FFFFAFFD0C1413 %85FFFFFFAFFD061413FD0414AFFD04FFA9141360FD04FF36FD051413FD05 %14FD1D527DFFFFFF7D7DFD1E52A8FFA8FD05FF601A141A141A141A141A14 %1A141A85FFFFFFAF1A141A143D363D141A141A14FD05FF3C1A3CFD04FF61 %141A141A60AF85AF601A1452522852525228525252285252522852525228 %52525228525252277DFFFFA87D2E52275252522852525228525252285252 %52285252522852525228525252285228527DFD06FF3C141A1414141A1414 %141A1414148BFFFFFFAF141414AFFFFFAF8BFD04143CFD04FF3C143CFD04 %FF60FD04148BFFFFFFAF1414FD1752285259FFFFA9525227FD2352A8FD04 %FFAF141A141A141A141A141A141A141484FFFFFFA91A141484FFFFFFA91A %141A1461FD04FF3C1414FD04FF8B141A141AA9FFFFFF85141427522E5227 %522E5227522E5227522E5227522E52275227527DFFA87D27522E5227522E %5227522E5227522E5227522E5227522E5227522E5227522E5227522E5227 %522752A8FFFFFF60FD0E1485FFFFFFAF14141485FD04FFFD041436FD04FF %3C141484FFFFFFA8FD0414FD04FF611414FD16527DFFFF7D5228FD275227 %A8FFFFFF3D141A141A141A141A141A141A141A84FFFFFFAF3D141460FD04 %FFAF363C3CFD05FF141A1461FD04FF853C148BFD04FF3C1A142752275227 %52275227522752275227522752275227A8FFA82852275227522752275227 %522752275227522752275227522752275227522752275227522752275227 %52275252FFFFAFFD0F1485FFFFFFAFFD0414A8FD05FFAFFD05FF36FD0414 %AFFD0AFF841414147D527D527D527D527D527D527D527D527D527D52A8FF %FF527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527DA8FF853C363D3C3C363D3C3C36 %3D3C3C363D85FFFFFFAF3D363D3685FD0AFFAF3C363D3C3C60FD0AFF6136 %3D3CFD16FFA8FD49FFAFFD11FFAFFD09FFAFFFFFFF %%EndData endstream
endobj
-951 0 obj
+963 0 obj
<<
/Length 65536
>>
@@ -1802,7 +1820,7 @@ sÓ ·ÓíÑ·OÒ„ŸuMÊ’ÏyÒÁQÊ—*V€)-z=¦Hèªmƈœ~ÅñÓ×z…Sý[t¸c&4 ŽªªAj^råº;ņÜ(cçç
Dx^QÜ×}Ì
˜ØyY‰Ÿ‹© ¨zŽ…N¬V¥%™­‚¨™@“£=HU˜ü¢³l0¼Tq_PIÐ/u,dÆö¶fý"íŒØ¾MMæu [endstream
endobj
-952 0 obj
+964 0 obj
<<
/Length 65536
>>
@@ -2044,7 +2062,7 @@ qlÞ¯­ò×âô`>
¶“¬ûVG=# [ül&wJ΂fkíY”&{öñß1øÀ ÛÄ%'DSì
 F?؆Fß®U E2,„Ò -[‰Ðð~Eô׈bˆ¨<Þë‹uAhÜš:®—Ú[ɬëxÏ*}ñ
endobj
-953 0 obj
+965 0 obj
<<
/Length 65536
>>
@@ -2267,7 +2285,7 @@ uALŽk‹Š=ŽÉÀÇš?éì•ëðå0ƒ¨Ua¦7S“«ÙŽ®&éÀ­Ó˜çÈî¹m(‚4„Ћz35Ãùd2pnSø׸®÷—fSµNP™š
]×g1ͼ‘ôAÚF¥5³ò(ª®Í
endobj
-954 0 obj
+966 0 obj
<<
/Length 53114
>>
@@ -2464,43 +2482,43 @@ Y‘φ㧻Ç'ÇÕpV— ´Š›·§/ óü8
œ;ø# ñ<Ý°'€å‰íö Ð"W€­
Ö^IYïc­
endobj
-934 0 obj <<
-/D [930 0 R /XYZ 85.0394 794.5015 null]
+946 0 obj <<
+/D [942 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-935 0 obj <<
-/D [930 0 R /XYZ 85.0394 769.5949 null]
+947 0 obj <<
+/D [942 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-932 0 obj <<
-/Font << /F21 938 0 R >>
-/XObject << /Im1 931 0 R >>
+944 0 obj <<
+/Font << /F21 950 0 R >>
+/XObject << /Im1 943 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-957 0 obj <<
-/Length 1065
+969 0 obj <<
+/Length 1075
/Filter /FlateDecode
>>
stream
-xÚÅV]ªH}Ÿ_Á㘌m@Cl\À;ÙìÝFq$™#Ì5óïoA7 j&û¶ñ¡«écÕ©SÕDÃð#šÁTh¦Ð‘‰¡m>°ökó¢0ºÁ¡3“;«c]7‘‰¹ÐÆLGx»DÝ 9EL›†@œQV£Ÿ“‡ÉŒRM Á)×’ÆMd̵•lÿytŠã×)ÛW£“?5CXˆ†ÃX6õÂdFô OcŠL.Lm|û ™Jè (¡r­ó¬Acýi4¦®M£7yoš½iõ¦èL‚{“ô&•–w¨²Ó!«ä,þ*«ì£”§8”Å©Ê??žZì5i&Î8$D†AUFþI©îÅN=À”Ôè7é¤' ¤ç4¥™º®[§=¾„ߊ0¨”nŠÞëÿR©^gÜëŒio²»’»êœžFÄzÌ®uG×úÁ. [š º[„ðoåkÁãKô­z†…(¦¤÷Y§³ÊNyYæÅArª
-9~–™ÊgòŽ!jþQlóÝàKzØNŠ“´·yYò×ÏJåXísÕeåMþ»öOéáKÇÏÓ±(Õò9¯öÒjqõ—âSé¹Ë4½JeЃVÝg2à«
-ðvJ¡([EüØ,¿òm¶mé¦Uk)÷ékñ+ë¥ÖLE•o²Nƒë„WÒàÇc–ª¬rµž¾¿ËD„…æF› ‘M\ó¬”ÛrL±@LgPrb"Á¨Õ@’…«Z-œ%/#AíH}ñb9®¢ð‡7u§rVï^;nõLÚv0m?:Ò˜‚åÛÞRmß—†ŠÙAâ¹jñÅKҊܹM嶄ӚÑaq’ZýPB“EKñùÀñ×S/˜_÷–+ßks¹Ç$œÉqéFÎF¦þh?{¾—üÝ'Z³ãHè–9|æ%Ǩå Ç@ñu¸àO^ôŒZ½žuß³Ÿ}eϨªÂÇ+×ñlÿ©Õ8r†c{ 7ŸÀEÓ
-ܹïÍÝÀq‡‘ÂÆsÍÞÔ"ÃrËfŒFÌ„|Ãu|R9¶#/î¤×ÉIxŘîã~[tûô”µÞø‚‘¡ˆ+7‚ÎYÚ}>³ï¶ÌÍUB GD˜H¼’o¯’<¾@ß^%”DLKt>k¢÷^×]“&¥°Ýê/ ¬ÀûôŽ”—JžßY¥úž#“˜W
-EÙö\êüuòjp99é{Í!OºoPvÓ§¶tÏj÷tHl_UÇ?&“óù\+ŒòrƒŠ†ÔÛäæÖV\f ú ûŸŸ·¿—~endstream
+xÚ¥V]ªH}Ÿ_Áã˜hÛÐÀ¾1ˆÊÁ¼“ÍÞ}`G’1Â\3ÿ~«éD'“Ín|èÓtYuêTõÑ0üˆfpÄmjk¦­#CÛ¾?`íÖDÙèC†ÎL¾XèF–…1YàíÚêÎÚ°38
+¥Œ @E‰0õ=µøì§K‰boáÄ3¹-áàftXœT¨IÓtÙRü‚|è›™.n‚û«uà·¹|Å$šËqåÅîF¦þè<ùŸþÙ'*Øqdë–9|—$¨å ÇPñõ~xàO^öŒZ½žõÀwž…çQÜFUᓵçúN0n5Ž=·á8ncÞ}MŒøPL7
+ï °Ê¡³r·Á«ÏKGDI“‹Ûê%› ùÚI?£•J,Jz‘%Œà`¼)ð&ñÚܤû¦
+ÅùîR–êüu‹zp9¹Ù[ͱȺÏQvקŽtÏ„{:$v¨ëÓoÓéår
+£¢Ú¢²!õ:½»µÕ[—H¼fÿõK÷ùõŸkendstream
endobj
-956 0 obj <<
+968 0 obj <<
/Type /Page
-/Contents 957 0 R
-/Resources 955 0 R
+/Contents 969 0 R
+/Resources 967 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 939 0 R
+/Parent 951 0 R
>> endobj
-958 0 obj <<
-/D [956 0 R /XYZ 56.6929 794.5015 null]
+970 0 obj <<
+/D [968 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-955 0 obj <<
-/Font << /F22 961 0 R /F14 964 0 R >>
+967 0 obj <<
+/Font << /F22 973 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-967 0 obj <<
+979 0 obj <<
/Length 2886
/Filter /FlateDecode
>>
@@ -2510,1781 +2528,1807 @@ x6$a»N9pšÛCcÓ®³ŒhÉ\HŸE.õ]y<çö°þ4ü|U/6+›Íã¹2ù±?l¾žå™Éÿß$5>Ó;²}Ž`¸+äîù?CO$
êœqNLžYç<'\_³È¾já6Vü„×›êªè†ˆâ¶3ŒØ»*䉘øL&c 1L R&‘00LPç#&,#LQ0á“~$q7“¢ºŠ/ös¡å³¤bŸ±d€!†TÁ!†ê|ÄÚ)¢â"à ¯«^lÊŸõ¬æŒ.>ãÉ8C '¨(‚S$ 'ÔyÀIåœäJ†r¥/X:œN6íMÝ,[;ã¹/wÊ•²¹/›þž”íc]²–Š4DØREL" AwΔ$Y–å3e(1JuÉP™Xžo–«¢y~y[Øâµ±9|¯†¨d
€!F¡ Fê|¤@’©L
¸£àⶸ<(nöçNñ9.|ê’¹
-¿Z×U½n— ÷Ð̈ƒ2fûHBÎ’
-‹µÁPá_ù™óœ˜ØûÆ»Õõ Î…~‰‰&Áº"15s_êb["_ø3yoÿ>ªendstream
+¿Z×U½n— ÷Ð̈ƒ2fûHBÎ’
+‹µÁPá_ù™óœ˜ØûÆ»Õõ Î…~‰‰&Áº"15s_êb["_ø3yoÿgTªendstream
endobj
-966 0 obj <<
+978 0 obj <<
/Type /Page
-/Contents 967 0 R
-/Resources 965 0 R
+/Contents 979 0 R
+/Resources 977 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 939 0 R
-/Annots [ 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R ]
+/Parent 951 0 R
+/Annots [ 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R ]
>> endobj
-970 0 obj <<
+982 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 688.709 539.579 697.4212]
/Subtype /Link
/A << /S /GoTo /D (chapter.1) >>
>> endobj
-971 0 obj <<
+983 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 676.5858 539.579 685.5919]
/Subtype /Link
/A << /S /GoTo /D (section.1.1) >>
>> endobj
-972 0 obj <<
+984 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 664.4876 539.579 673.4937]
/Subtype /Link
/A << /S /GoTo /D (section.1.2) >>
>> endobj
-973 0 obj <<
+985 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 652.3894 539.579 661.3954]
/Subtype /Link
/A << /S /GoTo /D (section.1.3) >>
>> endobj
-974 0 obj <<
+986 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 640.2911 539.579 649.1477]
/Subtype /Link
/A << /S /GoTo /D (section.1.4) >>
>> endobj
-975 0 obj <<
+987 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 628.1929 539.579 637.0495]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.1) >>
>> endobj
-976 0 obj <<
+988 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 616.0946 539.579 624.9512]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.2) >>
>> endobj
-977 0 obj <<
+989 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 603.9964 539.579 612.853]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.3) >>
>> endobj
-978 0 obj <<
+990 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 591.7985 539.579 600.7547]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.4) >>
>> endobj
-979 0 obj <<
+991 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 579.7002 539.579 588.6565]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.4.1) >>
>> endobj
-980 0 obj <<
+992 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 567.6019 539.579 576.5582]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.4.2) >>
>> endobj
-981 0 obj <<
+993 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 555.5037 539.579 564.46]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.4.3) >>
>> endobj
-982 0 obj <<
+994 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 543.5051 539.579 552.5112]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.5) >>
>> endobj
-983 0 obj <<
+995 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 531.4069 539.579 540.413]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.1.4.5.1) >>
>> endobj
-984 0 obj <<
+996 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 519.3086 539.579 528.3147]
/Subtype /Link
/A << /S /GoTo /D (subsection.1.4.6) >>
>> endobj
-985 0 obj <<
+997 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 496.5559 539.579 505.288]
/Subtype /Link
/A << /S /GoTo /D (chapter.2) >>
>> endobj
-986 0 obj <<
+998 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 484.4775 539.579 493.4338]
/Subtype /Link
/A << /S /GoTo /D (section.2.1) >>
>> endobj
-987 0 obj <<
+999 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 472.3792 539.579 481.3355]
/Subtype /Link
/A << /S /GoTo /D (section.2.2) >>
>> endobj
-988 0 obj <<
+1000 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 460.281 539.579 469.2373]
/Subtype /Link
/A << /S /GoTo /D (section.2.3) >>
>> endobj
-989 0 obj <<
+1001 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 448.1827 539.579 457.139]
/Subtype /Link
/A << /S /GoTo /D (section.2.4) >>
>> endobj
-990 0 obj <<
+1002 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 436.0845 539.579 445.0408]
/Subtype /Link
/A << /S /GoTo /D (section.2.5) >>
>> endobj
-991 0 obj <<
+1003 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 413.5759 539.579 422.1635]
/Subtype /Link
/A << /S /GoTo /D (chapter.3) >>
>> endobj
-992 0 obj <<
+1004 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 401.4527 539.579 410.3093]
/Subtype /Link
/A << /S /GoTo /D (section.3.1) >>
>> endobj
-993 0 obj <<
+1005 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 389.3544 539.579 398.2111]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.1.1) >>
>> endobj
-994 0 obj <<
+1006 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 377.2562 539.579 386.1128]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.1.2) >>
>> endobj
-995 0 obj <<
+1007 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 365.0583 539.579 374.0146]
/Subtype /Link
/A << /S /GoTo /D (section.3.2) >>
>> endobj
-996 0 obj <<
+1008 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 352.96 539.579 361.9163]
/Subtype /Link
/A << /S /GoTo /D (section.3.3) >>
>> endobj
-997 0 obj <<
+1009 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 340.8618 539.579 349.818]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.3.1) >>
>> endobj
-998 0 obj <<
+1010 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 328.7635 539.579 337.7198]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.3.3.1.1) >>
>> endobj
-999 0 obj <<
+1011 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [532.6051 316.6653 539.579 325.6216]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.3.3.1.2) >>
>> endobj
-1000 0 obj <<
+1012 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 304.567 539.579 313.6728]
+/Rect [527.6238 304.6667 539.579 313.6728]
/Subtype /Link
/A << /S /GoTo /D (subsection.3.3.2) >>
>> endobj
-1001 0 obj <<
+1013 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 281.9139 539.579 290.7706]
/Subtype /Link
/A << /S /GoTo /D (chapter.4) >>
>> endobj
-1002 0 obj <<
+1014 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 269.8356 539.579 278.9413]
/Subtype /Link
/A << /S /GoTo /D (section.4.1) >>
>> endobj
-1003 0 obj <<
+1015 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 257.7373 539.579 266.8431]
/Subtype /Link
/A << /S /GoTo /D (section.4.2) >>
>> endobj
-1004 0 obj <<
+1016 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 245.6391 539.579 254.7448]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.2.1) >>
>> endobj
-1005 0 obj <<
+1017 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 233.5408 539.579 242.6465]
/Subtype /Link
/A << /S /GoTo /D (section.4.3) >>
>> endobj
-1006 0 obj <<
+1018 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 221.4426 539.579 230.5483]
/Subtype /Link
/A << /S /GoTo /D (section.4.4) >>
>> endobj
-1007 0 obj <<
+1019 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 209.444 539.579 218.4501]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.4.1) >>
>> endobj
-1008 0 obj <<
+1020 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 197.2461 539.579 206.3518]
/Subtype /Link
/A << /S /GoTo /D (section.4.5) >>
>> endobj
-1009 0 obj <<
+1021 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 185.1478 539.579 194.1041]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.1) >>
>> endobj
-1010 0 obj <<
+1022 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 173.0496 539.579 182.0058]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.5.1.1) >>
>> endobj
-1011 0 obj <<
+1023 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 160.9513 539.579 169.9076]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.5.1.2) >>
>> endobj
-1012 0 obj <<
+1024 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 148.8531 539.579 157.8094]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.2) >>
>> endobj
-1013 0 obj <<
+1025 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 136.7548 539.579 145.7111]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.3) >>
>> endobj
-1014 0 obj <<
+1026 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 124.7562 539.579 133.7623]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.4) >>
>> endobj
-1015 0 obj <<
+1027 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 112.658 539.579 121.6641]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.5) >>
>> endobj
-1016 0 obj <<
+1028 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 100.5597 539.579 109.5658]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.5.6) >>
>> endobj
-1017 0 obj <<
+1029 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 88.4615 539.579 97.4676]
/Subtype /Link
/A << /S /GoTo /D (section.4.6) >>
>> endobj
-1018 0 obj <<
+1030 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 76.3632 539.579 85.2199]
/Subtype /Link
/A << /S /GoTo /D (section.4.7) >>
>> endobj
-1019 0 obj <<
+1031 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 64.265 539.579 73.1216]
/Subtype /Link
/A << /S /GoTo /D (section.4.8) >>
>> endobj
-968 0 obj <<
-/D [966 0 R /XYZ 85.0394 794.5015 null]
+980 0 obj <<
+/D [978 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-969 0 obj <<
-/D [966 0 R /XYZ 85.0394 711.9273 null]
+981 0 obj <<
+/D [978 0 R /XYZ 85.0394 711.9273 null]
>> endobj
-965 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R >>
+977 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1022 0 obj <<
+1034 0 obj <<
/Length 3273
/Filter /FlateDecode
>>
stream
-xÚímsÛ6ÇßûShæÞØ3'ñ ¼t§×6q|‘r3wm_¨6ãhªW–’ºŸþ@‘ ®$pmä’4¶ÕÎD´ÄÕ®öÿ#vA‚ïáÞÓ†/|ÏzÅtÁuïbzPô®ÂkßðfŸ>ìÔÇ{=üã…´=ϼ¦7|×SZ3¡×oæXáï /:<y}6<=Ž~þpp:ŒïŠ=óBVoùûÁO¿½ËÀ“ÞéÞÇðGÁ¸÷¢7=PZ2­¤„g&ƒƒÅ7D¯®M“Ÿ„LH#EôQª5ïY홑B®?ˆbŽñ£>Eqø]9+£åxvuÔº8ü±¼½9ê;#ÙQ_‡Þƒòþ³½Ù¶ÔEȺ•¦ÍçŽ6‹«^½ñ«v}l¸«ÖîûWz ±¨ŸŠƒb…ô¬(ËLQ˜ÈŠhXŒ¯f”åû²Þøï|¶laöÄÄ@V³‰A†1X5!»‰IÄACzb¤fÚ8‰‘ 1'óÙÏE!®V‹ÈÍ \|(ÕÃåSE¥“Èc6#ÈbëD1’ˆƒb„ônyrL("T5iE‰ˆ‡çgƒÁéÉßk8žßÎFÓñE;°Ü4/Œf—õÆñj9Ÿ†zÕì‡$eÕ7 @§ä•lÉ‘!%9κÐÝ’'â $'½Ã°ÀyèL4›Ž0,„1 m:Þ-Ž¸;œOë¿Æ³›òbµ~ª)1ËyýˆŸ÷V>ØÑ HX6 È‚ BÁˆƒ‚ôÞÀ`¼gÊJa€®b㘣A½±º¾-ù§åòý<ÿÖ˧Qb®r9À†ZÓÉA*‚Ú;pà,SJÄ2{…«Éä¶í7ù?×æz
-ED"ŠÒ;a5S¡ˆD¨†ˆóÅøCúËÛëFÿz𿘯/CiÝ7‘[¨@:³QA†*X.
-•D*¤w@ÅH&­k‹ˆ†"r6øñô?’ùd2¯ç¶û)išÈf6)È"«%l7)‰8(RHï@ŠæLªv¶Á̾Ýèä
+xÚímsÛ6ÇßûShæÞØ3'ñ ¼t§×6q|‘r3wm_¨6ãhªW–’ºŸþ@‘ ®$pmä’4¶ÕÎD´ÄÕ®öÿ#vA‚ïáÞÓ†/|ÏzÅtÁuïbzPô®ÂkßðfŸ>ìÔÇ{=üã…´=ϼ¦7|×SZ3¡×oæXáï /:<y}6<=Ž~þpp:ŒïŠ=óBVoùûÁO¿½ËÀ“ÞéÞÇðGÁ¸÷¢7=PZ2­¤„g&ƒƒÅ7D¯®M“Ÿ„LH#EôQª5ïY홑B®?ˆbŽñ£>Eqø]9+£åxvuÔº8ü±¼½9ê;#ÙQ_‡Þƒòþ³½Ù¶ÔEȺ•¦ÍçŽ6‹«^½ñ«v}l¸«ÖîûWz ±¨ŸŠƒb…ô¬(ËLQ˜ÈŠhXŒ¯f”åû²Þøï|¶laöÄÄ@V³‰A†1X5!»‰IÄACzb¤fÚ8‰‘ 1'óÙÏE!®V‹ÈÍ \|(ÕÃåSE¥“Èc6#ÈbëD1’ˆƒb„ônyrL("T5iE‰ˆ‡çgƒÁéÉßk8žßÎFÓñE;°Ü4/Œf—õÆñj9Ÿ†zÕì‡$eÕ7 @§ä•lÉ‘!%9κÐÝ’'â $'½Ã°ÀyèL4›Ž0,„1 m:Þ-Ž¸;œOë¿Æ³›òbµ~ª)1ËyýˆŸ÷V>ØÑ HX6 È‚ BÁˆƒ‚ôÞÀ`¼gÊJa€®b㘣A½±º¾-ù§åòý<ÿÖ˧Qb®r9À†Z¤â 8 ½Î2¥D,±Wx±šLn›Ñ~sÿsÝa®
D ¤w
É„@S^Tã}0»<n UÙ C
,…A"
Ò{ƒöœqçÚZÀù}0è:]¹y"ó1ž°Œ Ë…0lBÀŠƒ€ö0Ø ¿¶miࢆá¼\Œç—Ð8ÖòöÛ3SÜ=ñ ¡°@B³aA†,X0
–D,¤w€ÅØÀ‡V-,²†•ˆx ëõù°‚æõÛaŒßŸ
,H"
-Ò;\þÔZ³ÂÇyFÕ`èí+žÃ#_ (îpu³l.wÎ.ÞÏõö«ÑltUNËÙ²’Ã>J^:Ñ€ìe£ )4°:‰8(4Hï0v(É
-ç Á¸é:þ]M>G“ñ%ZŸõ¦¼™OB/rÔ—BïÏk¦a„f )X°`,‰8(XHï
-t^Ïnê_oÆ˲:ïéðbÏ¿®,A–³ B†AXEYt”ˆƒ"ˆôÎ…aJrÕS%/ã ¨b¨¢È…ñäÙj<¹ŒÌëër6¼lN¤@s—ŸžÇ•è×eóê|V?¾ÏV„7•ê¯iCã‡Ì•n$QòN SqÒÞ[ `¾K(>AÂÁÉq½aŠ¢Øp0ŸŒã0„x)þÒá<~Öl%‘!¥$Î%¥d"JIÒ{«¤-˜‹¿×BÊû 9˜¿[þsðªZeår“YÈ–¸µ£F9–Ýwh$‚ ô¥\7ÕZiÇœ*d«n3ØÔöÙ÷gÏë-_?|/ß×[U'X÷€F=~?æ,›dHÁ€5¡hHÄAá@zowe˜+PÃÏÔÞÄ;`Ä¿)¯›°tWf£ÌW+¼ð ³õC†”~8ƒ”~‰8(ýHï­~R1k7äŸ _,®nÕå{Ìî>·ŠÍç̱µ£4DY”Ý7·$‚ ¤\·
-Á¬ÒxH†‚›© T^®æ8 ‰È–RãDS"'â T&½CÝ »[.M+rs'qbeXºÏ'á`4…ÛO7dH¡ƒå£ÐIÄA¡CzoБÞ1ã¸oÑQ5:oovo¨­
- Ò;Œº:žàpÁæøò²>ÖošiàËùü·Õuóê6ŽÃ°¢
-ÎÆ¿þ:iöy1_„ÚQmûo^fHE¶ÌÈ’§š’9%óŽwŽ½7_#%¹aBÈš±êþÆ"äbMÜιƒ—ã«÷ËeõïÖ
-¡ÎìƒÆý²† qï¼ï:kÝwñà·£²µã5YI‹p(x^/×ëo˜¨¾U$æ«;=ÍË¿.F‹ÛPNÈR‡Ï}$Aú²$dHIXŠ‰D¤w`CøPµw ¢ac£¥¨x>*§ÕôÉ[½_ÿÒ(“™K
-6$HÙ‹ %AÊ®÷Ô˜+ŒgNûSÓŒ¹;Cm{*7̱`zý¦|W.ÊÙEÙ9xóûŽ·Ø€o7‚–Ý+†ðÛQ™Úñš<¦´eNØZ&ÇÛdj^Œ¡·8¬×-W÷ÓrûTç+|@J³,dHYX2Š“D/¤÷¦iJ3ë \âW@í4­¯FË‹÷P”o*TŒû9í*ÎlT!…
-–Ku/!KÅA¡BzWÑ„”Ì¥[XÖ¸Èê|Èíl9úã¨/½ÞŸ¿(ÊlP!
-–Š%
-é½Epf¥pÑ€ò¼¬êÐlÜV¡xÊûíÍèªüF5K#1KÙ CŠ¬‚ê^â–Šƒb€ôu¥ð̼­+"Þ·?­ïhÔÐÎîG Hg6*ÈBËE¡’ˆƒB…ô‡ î-3Æ«–}]ùDPb*sAÁ†(R ¤â @¡½· 8f9Í¢”}]Ùe
-$ ÅÎn:”k Gh¦¬o+˜úbèÜ£…Öâ!Ò‰ä2›dHA‚µRª›’D&¤wà„K¦”m+“¾““ñìb²º,S˜f=¿«Ûq\<­FRœ2¤ðÁRø$â ð!½>gŠ›HùRôÜ=È|í‹úŸyÅd2’ÖŽb餺Å&‚ ¡\7€8ϤS2bï¤úÆæDã*wòŽ¡EJ·?é )Ï% Ù$aA ’A$‘®áW‡,“Z´Cû$Ý=ÌèâñM¡ µÙ?OÔÚQ¿N„„#ˆIAý6å:þV
+Ò;\þÔZ³ÂÇyFÕ`èí+žÃ#_ (îpu³l.wÎ.ÞÏõö«ÑltUNËÙ²’Ã>J^:Ñ€ìe£ )4°:Âw£‘ˆƒBƒôc‡’¬0qŒ›®ãßÕäs4_¢õYoÊ›ù$ô"G})ôþ¼fHh6,È‚ FÁ’ˆƒ‚…ô°HÎ
+Y¨–¦+9^-ÃH1^V>”x©MhI´Ú÷"[ˆ@³A†"X&
+‘D"¤÷Xj¸cÞ; ŒðºÔœÿxÒœíþ[õTµñs¡‹“ÅíõrþÛ8l7ÏÞ¬®¯ç‹Pe¬zzàtIÍ&RÄ`ÑdÑML"ŠÒ; *… OÅ©çPÎëÙMýïï«ñÍxYVç=Ý^ìùו%Èr6AÈ"«H”ˆƒ"ˆôÎ…aJrÕS%/ã ¨b¨¢È…ñäÙj<¹ŒÌëër6¼lN¤@s—ŸžÇ•è×eóê|V?¾ÏV„7•ê¯iCã‡Ì•n$QòN SqÒÞ[ `¾K(>AÂÁÉq½aŠ¢Øp0ŸŒã0„x)þÒá<~Öl%‘!¥$Î%¥d"JIÒ{«¤-˜‹¿×BÊû 9˜¿[þsðªZeår“YÈ–¸µ£F9–Ýwh$‚ ô¥\7ÕZiÇœ*d«n3ØÔöÙ÷gÏë-_?|/ß×[U'X÷€F=~?æ,›dHÁ€5‘Ý+ëSqP8ÞÛÃ]æ
+Ôð3µ7qÆñÀoÊë&,Ý•Ù(óÕ
+/|Âlý!¥Î ¥_"J?Ò{«ŸTÌÚ ùÄ'È‹k‡€[uù³»Ï­bó9³Elí( Q) wƒ ¤\·
+Á¬ÒxH†‚›© T^®æ8 ‰È–RãDS"'â T&½CÝ »[.M+rs'qbeXºÏ'á`4…ÛO7dH¡ƒå£ÐIÄA¡CzoБÞ1ã¸oÑQ5:oovo¨­
+Í÷çLÓÂ%˜zY¢oô‚ï  ä8 dH„5”Ý·Ì¥â 
+ÐýtÎ؇¼L$æ%[sdHiŽóNižˆƒÒœôšKÇ´h§"^ùßÖ<®E5‚¦àlü믓fŸóE¨Õ¶ÿæe†TdËŒ )™qª)™qP2ïxçØ{ó5R’&„¬«îo,B.†ÐÄíœ;x9¾z¿üXVÿn­êÌ8aÜ/kÈ ÷Îû®³Ö}~;*[;^“•´‡‚çõrq½þ†‰ê[Eb¾ºÓÓ¼üëb´¸ åô,uøÜG¤/ûHB†Ô‘„塘HÄA±Az6„uQ{×°!66úèQŠŠç£rZMŸ¼Õûõ/’1™¹¤`C‚” ±RRq¤ìzO¹Âxæ´¯15͘»3Ô¶§rà ¦×oÊw墜]”Ý™ƒ7¿ïx‹ ˆñv#hÙ½Æ ¿•©¯ÉcJ[æ„­e2q¼M¦æÅz‹ÓÉzÝru?-·Ou¾Òɤ4ûÈB†Ô‘…%£8IÄAñBzošV¡4³ÞpÀ%~ÔNÓúj´¼xEù¦BÅX±ŸÓn¡éÌFR¨`¹T÷ª•T*¤÷xMHɬQº…e‹¬Î‡ÜΖ£?ŽúÒëýùðû€©ÌR `©(PqP Þ[PgV
+‡@ (Ï˪ÍÆmŠ§¼ßÞŒ®ÊodQó׸4³”Í
+2¤PÁrQ¨$â P!½Çá‚{ËŒñª…e_W>”˜Ê\P°!ʆTª{Ue*Ú{ ŠÓa–Ó,!ªAÙו] KÙ CŠ¬Å@"ŠÒ;Ìo¹•ÌqÂ"î7¿ýn1šNGÕÙ#+÷ÓÛ-\ £Ù¸ C
+¬…K"
+Ò{Ó†pÙ>ÐÂÖ¥më„ä̹BÕ^£‹I³ÏƤ™à¡ç©÷,G˲mc"]Vì¿Œ¬Íy6OÈâ kªº×‰¥â x"½OÊ3­„<‰/ÁÓݵÌyþøÆ!Èm67ÈâkGq“ˆƒâ†ôÜHËtœ UkïÂæb>[.ªõ©»ìHÏ
+.Åc‘vó‹K:ñiRœMOkGÁƒTÝ« APèP®¡™²¾­`ê‹¡sZ‹‡@J'"ËlF! ÖŠ¢$… é8á’)eÛʤïäd<»˜¬.Ë&†YÏïêvO«Q†gム)|°„ª{Åc*
+Ò;àSp¦¸‰ô˜/EÏ݃Ì×¾¨ÿ™Wl@&³!ií(FN"»AP„P®@œgÒ)±wR}cs¢ñ È;yÇÐ"¥ÛŸô…”ç’„ì’° I‰ ’H×ð«C–I-Ú¡Æ} ’îftñø¦PÚìŸ'jí¨_'BÂÄ$‚ ~›ˆr+€IÑNžüÀLæWWÕ
+²Dm
+îŒ×wÇùÖ¿ë3׬&Áù?/
+Ì8×±ÎU¸‚i£uO†&]ÖÃéxL,<_ï…BÿÙëÒ’endstream
endobj
-1021 0 obj <<
+1033 0 obj <<
/Type /Page
-/Contents 1022 0 R
-/Resources 1020 0 R
+/Contents 1034 0 R
+/Resources 1032 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 939 0 R
-/Annots [ 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R ]
+/Parent 951 0 R
+/Annots [ 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R ]
>> endobj
-1027 0 obj <<
+1039 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 758.5763 511.2325 767.4329]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.8.1) >>
>> endobj
-1028 0 obj <<
+1040 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 746.445 511.2325 755.4012]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.8.2) >>
>> endobj
-1029 0 obj <<
+1041 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 734.4133 511.2325 743.3696]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.8.3) >>
>> endobj
-1030 0 obj <<
+1042 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 722.3816 511.2325 731.3379]
/Subtype /Link
/A << /S /GoTo /D (section.4.9) >>
>> endobj
-1031 0 obj <<
+1043 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 710.3499 511.2325 719.3062]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.1) >>
>> endobj
-1032 0 obj <<
+1044 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 698.3182 511.2325 707.2745]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.2) >>
>> endobj
-1033 0 obj <<
+1045 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 686.2866 511.2325 695.2428]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.3) >>
>> endobj
-1034 0 obj <<
+1046 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [499.2773 674.2549 511.2325 683.2112]
+/Rect [499.2773 674.3546 511.2325 683.2112]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.4) >>
>> endobj
-1035 0 obj <<
+1047 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 662.3229 511.2325 671.1795]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.5) >>
>> endobj
-1036 0 obj <<
+1048 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 650.2912 511.2325 659.1478]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.6) >>
>> endobj
-1037 0 obj <<
+1049 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 638.2595 511.2325 647.1161]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.7) >>
>> endobj
-1038 0 obj <<
+1050 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 626.1282 511.2325 635.0845]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.8) >>
>> endobj
-1039 0 obj <<
+1051 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 614.0965 511.2325 623.0528]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.9) >>
>> endobj
-1040 0 obj <<
+1052 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 602.0648 511.2325 611.0211]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.10) >>
>> endobj
-1041 0 obj <<
+1053 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 590.0331 511.2325 598.9894]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.11) >>
>> endobj
-1042 0 obj <<
+1054 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 578.0015 511.2325 586.9578]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.12) >>
>> endobj
-1043 0 obj <<
+1055 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 565.9698 511.2325 574.9261]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.9.13) >>
>> endobj
-1044 0 obj <<
+1056 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 553.9381 511.2325 562.8944]
/Subtype /Link
/A << /S /GoTo /D (section.4.10) >>
>> endobj
-1045 0 obj <<
+1057 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 541.9064 511.2325 550.8627]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.10.1) >>
>> endobj
-1046 0 obj <<
+1058 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 529.8748 511.2325 538.831]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.10.2) >>
>> endobj
-1047 0 obj <<
+1059 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 517.8431 511.2325 526.7994]
/Subtype /Link
/A << /S /GoTo /D (section.4.11) >>
>> endobj
-1048 0 obj <<
+1060 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 505.8114 511.2325 514.7677]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.11.1) >>
>> endobj
-1049 0 obj <<
+1061 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 493.7797 511.2325 502.8855]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.11.1.1) >>
>> endobj
-1050 0 obj <<
+1062 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 481.7481 511.2325 490.8538]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.11.1.2) >>
>> endobj
-1051 0 obj <<
+1063 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 469.7164 511.2325 478.6727]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.11.1.3) >>
>> endobj
-1052 0 obj <<
+1064 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 457.6847 511.2325 466.641]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.11.2) >>
>> endobj
-1053 0 obj <<
+1065 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 445.653 511.2325 454.6093]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.11.2.1) >>
>> endobj
-1054 0 obj <<
+1066 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 433.6213 511.2325 442.5776]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.11.2.2) >>
>> endobj
-1055 0 obj <<
+1067 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 421.5897 511.2325 430.5459]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.4.11.2.3) >>
>> endobj
-1056 0 obj <<
+1068 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 409.558 511.2325 418.5143]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.11.3) >>
>> endobj
-1057 0 obj <<
+1069 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [499.2773 397.5263 511.2325 406.4826]
+/Rect [499.2773 397.5263 511.2325 406.6321]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.11.4) >>
>> endobj
-1058 0 obj <<
+1070 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 385.4946 511.2325 394.4509]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.11.5) >>
>> endobj
-1059 0 obj <<
+1071 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 373.4629 511.2325 382.4192]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.11.6) >>
>> endobj
-1060 0 obj <<
+1072 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 361.4313 511.2325 370.3876]
/Subtype /Link
/A << /S /GoTo /D (section.4.12) >>
>> endobj
-1061 0 obj <<
+1073 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 349.3996 511.2325 358.3559]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.12.1) >>
>> endobj
-1062 0 obj <<
+1074 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 337.3679 511.2325 346.3242]
/Subtype /Link
/A << /S /GoTo /D (subsection.4.12.2) >>
>> endobj
-1063 0 obj <<
+1075 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 315.0477 511.2325 323.7798]
/Subtype /Link
/A << /S /GoTo /D (chapter.5) >>
>> endobj
-1064 0 obj <<
+1076 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 303.0359 511.2325 311.9922]
/Subtype /Link
/A << /S /GoTo /D (section.5.1) >>
>> endobj
-1065 0 obj <<
+1077 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 291.0042 511.2325 299.9605]
/Subtype /Link
/A << /S /GoTo /D (section.5.2) >>
>> endobj
-1066 0 obj <<
+1078 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 268.684 511.2325 277.4161]
/Subtype /Link
/A << /S /GoTo /D (chapter.6) >>
>> endobj
-1067 0 obj <<
+1079 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 256.6722 511.2325 265.6285]
/Subtype /Link
/A << /S /GoTo /D (section.6.1) >>
>> endobj
-1068 0 obj <<
+1080 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [499.2773 244.6405 511.2325 253.7462]
+/Rect [499.2773 244.7402 511.2325 253.7462]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.1.1) >>
>> endobj
-1069 0 obj <<
+1081 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [499.2773 232.6088 511.2325 241.7146]
+/Rect [499.2773 232.7085 511.2325 241.7146]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.1.1) >>
>> endobj
-1070 0 obj <<
+1082 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 220.6768 511.2325 229.6829]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.1.2) >>
>> endobj
-1071 0 obj <<
+1083 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 208.6451 511.2325 217.6512]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.1.2) >>
>> endobj
-1072 0 obj <<
+1084 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 196.6134 511.2325 205.6195]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.2.1) >>
>> endobj
-1073 0 obj <<
+1085 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 184.5818 511.2325 193.5878]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.1.2.2) >>
>> endobj
-1074 0 obj <<
+1086 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 172.5501 511.2325 181.5562]
/Subtype /Link
/A << /S /GoTo /D (section.6.2) >>
>> endobj
-1075 0 obj <<
+1087 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 160.4187 511.2325 169.5245]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.1) >>
>> endobj
-1076 0 obj <<
+1088 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 148.3871 511.2325 157.4928]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.2) >>
>> endobj
-1077 0 obj <<
+1089 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [499.2773 136.3554 511.2325 145.4611]
+/Rect [499.2773 136.4551 511.2325 145.4611]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.3) >>
>> endobj
-1078 0 obj <<
+1090 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 124.4234 511.2325 133.4295]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.4) >>
>> endobj
-1079 0 obj <<
+1091 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [499.2773 112.3917 511.2325 121.3978]
+/Rect [499.2773 112.292 511.2325 121.3978]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.5) >>
>> endobj
-1080 0 obj <<
+1092 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 100.2604 511.2325 109.3661]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.6) >>
>> endobj
-1081 0 obj <<
+1093 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 88.2287 511.2325 97.3344]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.7) >>
>> endobj
-1082 0 obj <<
+1094 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 76.197 511.2325 85.3027]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.8) >>
>> endobj
-1083 0 obj <<
+1095 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [499.2773 64.1653 511.2325 73.2711]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.9) >>
>> endobj
-1023 0 obj <<
-/D [1021 0 R /XYZ 56.6929 794.5015 null]
+1035 0 obj <<
+/D [1033 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1020 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R >>
+1032 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1086 0 obj <<
-/Length 3426
+1098 0 obj <<
+/Length 3428
/Filter /FlateDecode
>>
stream
xÚíKSIÇï|
-Ñʼn‘„óé·ZÝU• Õ)j×0 GØw*Sùÿ©YUÝl@ý6°ŠPáäÀ8Iej0¾Ø¡ƒ3ÿovX{Í0\4„W½<ÙùÇkaŽ8Íõàäx/K¨µlprúëî«·G'G'ï÷~?ùqçà$¾)t̨¨ßñÏ_§ƒSïÿÇJ„³jðÅÿ@ sŽ.v¤DI!Âo¦;ïw~‰oþwmšû JX¢,7™OÂ9ø$ŒsbñÑ)G´àbýQ4á>Ôúƒø˸\0b-•ÞG}Ùt~v6™µ×Á·†ít{ÝûÕhU]T³ÕÞ+º»_ýF)ŸMV“ù¬ùÍhvÚ¼ø°U{CÇÌ.Ù*JïçéÜÿbwMhÅ-Ñœ²”ËÊ,ÎÍ‹c¨U°BÛZÝ|ÿ:¹R߈#hŸ‹#õΔ$Æ70Ò­™¤¶ç¿:t÷ä¼Ê@£)¡Lš†ñùh6«¦9h,‘J…ëÞ/FKÏ‚è^Y¸NÊà é-†bð@ù0x2q`ð Þ<Bí¨‚ððx|Cr6_|ËÐ#)Ñö:<’ÚϽ´<!½Åð
-¤y‰ø£¥¦—“ÉbN€!Æ TJÑ~N2q`œ ÞÓX†1b¤o "'lóXæË¢ÊQÁýHÆ–ɼYŒ..F‹úý°Û™ïÒõÒò]L0Äh‚z*ÖOS&Œ&Ô{¤I;×4?‘&~74mK涧¯Šy-¥"ÔttC¨ÉÅPƒ{OÔXC,MØÍÅh¹ª²]S=’}Ó©Ø™‡Þ}o€Úó“ì0|€€Š÷Ós3 ÌubÇ(b…f yWðÜf.î+½„\S 1L V'™80PPï‰-ˆÕŠ'RÔFRæ—µØYR´‡“™ ÍŒeìi53!ÇÅCŒ ¨!FP&Œ Ô{"Hy8œu?}WÝ¢­1òQ·5!—Ť
-cúg ¹80*Pï 姟Üpˆ…m°ø°ÿ®¡âÝ|ÑÖ~š,W5ò¹¥H™+æb\@eLA+Æê=q!%aJÂq o/«Åhµž”®'ß–«ê¢y}\-çWëe\b.&52VªÇµP,/0Ää… ÆäÍÄÉ‹zOò
-¯¨UªS…¢~ g“›5LoÉ÷¼—€£b€!F
-gâÀ$F½'¥%ºN™œÆ—«¶dý±QT?„Ô½t!IÅ
-+ÓÉt
- 4D éȆ@“‹÷ž ±”N ñÍEÛz‰= 5nÓ]0”µOxy'¦»&`ˆÁåtýGKrq`0¡ÞL~<bÁÙvnï„¥Í Ql{z­Õbd’F ÐÌõ/e‚ÀxÁ\ÇÕ@®4±JÒœ 7Ƹv@íÛeµ>„$žê¦°^6B
-‹á
-úyD?>™@0~P÷ a“ñÞ<¢ž¾®:œÕ·mG?./#Má Ýá»ÏþbnÅóT$f±`ˆAUB!É‚A‚ºOpE˜Q2B¢ZHÞ®ÎÃqÙë³ßõrʤ”ŒW“ÏõtEHö”{¡ÅbH€! T‰ÑþÓø¹@0HP÷i¸ÊüØ„J• ‰Ó—ÛÜÞã_™µ:ÿJðpA}Bk´.'g³æ”–Rì¹{ŠY/†
-bPAUQ¨2`P¡îTÔOz„Ð
-™,åØ!˜@0J2Q  ¾Ó3+ áŽ9Àˆ,aÄO¦rÛJ4±Òõða”zRÃááRv€ÂÔÑþmù™(°Gb¾Á³yˆà,¢£ÛqðËãý0Sªúu} |ðuUÍêRÍ?ý ˜ÑÝU4f´'T…Í‘?¼98:8~Q—úNrM’„R!óÈé{*øô!Ð&ª”€d†
+Ñʼn‘„óé·ZÝU• Õ)j×0 GØw*Sùÿ)«*»º› ¨ÿÃV*œ'‰¢L Æ;tpæÿïÍk†ƒ†ð¨—';ÿx-ÌÀ§¹œ|ïe µ– NNÝ}õöèäàèäýÞï'?îœÄ7…Žõ;þ¹óëïtpêýÿ¸C‰pV ¾ø(aÎñÁÅŽT‚()DøÍtçýÎ/ñ Áÿ®MsD K”å&óI8Ÿ„qN¬3>:åˆ\¬?Š&܇Z8‡ F¬¥Òû¨›ÎÏÎ&³³ö8ø¶Â¡n{¿­ª‹j¶ÚrEw÷«ß(å³Éj2Ÿ5¿ÍN›–£³joè˜Ù%{CEéýü#û_ì® ­¸%šS–ryC™ÅÙ yq µ
+vChxS«›ï_'Wêqísq`¤ Þ™’ÄãF¢5“€ÂöüW‡îžœWh4%”IÓÂ0>ÍfÕ4%R©pÜ»óÅhéYðÝ+ wÀI<!½Åð
+žÛ¬ÅÝc`¥’ËbJ€!† Ô
+ã$
+ê=‘¢±ZñDŠÚHÊü²;KŠöp2³¡ÌXÆžV™ 9.&bA 1‚2q`¡ÞAÊÃá$èûé»"èµÆÈG]kB.‹I†)P+ÕߺÉÅ‘‚z«o-ü/¹
+äzñÈÅà{OxXJ¨îС:~©Oà45ãÅééºd¬‹ˆ0æ¹f„´3‘ì0$ (7ƒÀ€À\'´%ÔY0 糪áádÏÑÝÅh¶ü´žN(Þ‰ˆ‰+FbL@aLÿ
+$Fê=a¡üò“±° öß5T¼›/ÚÞÃO“åªæB>WŠ”¹b.€!ÆTƈ~.2q`\ ÞR¦4lh×pñö²ZŒVëEézññm¹ª.š×ÇÕr~µQÆU æbR#c¥z\gccŠå†˜¼0Á˜¼™80yQïI^áµJuºPÔÏâjr“ †é-ùž÷rTL
+øîhÙöÖk‹Ï£iýnÛk|HR1ÀC
+x; ìO–ã«ŒÜ?ÿ'S!$}’C
+¶),$Ùa|
+¥õa öÿU œqendstream
endobj
-1085 0 obj <<
+1097 0 obj <<
/Type /Page
-/Contents 1086 0 R
-/Resources 1084 0 R
+/Contents 1098 0 R
+/Resources 1096 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 939 0 R
-/Annots [ 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R ]
+/Parent 951 0 R
+/Annots [ 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R ]
>> endobj
-1088 0 obj <<
+1100 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 758.4766 539.579 767.5824]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.10) >>
>> endobj
-1089 0 obj <<
+1101 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 746.5057 539.579 755.6115]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.10.1) >>
>> endobj
-1090 0 obj <<
+1102 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 734.5349 539.579 743.6406]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.10.2) >>
>> endobj
-1091 0 obj <<
+1103 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 722.564 539.579 731.5203]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.10.3) >>
>> endobj
-1092 0 obj <<
+1104 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 710.5931 539.579 719.6988]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.11) >>
>> endobj
-1093 0 obj <<
+1105 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 698.6222 539.579 707.728]
+/Rect [527.6238 698.6222 539.579 707.5785]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.12) >>
>> endobj
-1094 0 obj <<
+1106 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 686.6513 539.579 695.6076]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.13) >>
>> endobj
-1095 0 obj <<
+1107 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 674.6804 539.579 683.6367]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.14) >>
>> endobj
-1096 0 obj <<
+1108 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 662.7096 539.579 671.6658]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.15) >>
>> endobj
-1097 0 obj <<
+1109 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 650.7387 539.579 659.695]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.16) >>
>> endobj
-1098 0 obj <<
+1110 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 638.7678 539.579 647.7241]
+/Rect [527.6238 638.7678 539.579 647.8735]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.1) >>
>> endobj
-1099 0 obj <<
+1111 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 626.7969 539.579 635.7532]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.2) >>
>> endobj
-1100 0 obj <<
+1112 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 614.826 539.579 623.7823]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.3) >>
>> endobj
-1101 0 obj <<
+1113 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 602.8551 539.579 611.8114]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.4) >>
>> endobj
-1102 0 obj <<
+1114 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 590.8843 539.579 599.8405]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.5) >>
>> endobj
-1103 0 obj <<
+1115 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 578.9134 539.579 587.8696]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.6) >>
>> endobj
-1104 0 obj <<
+1116 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 566.9425 539.579 575.8988]
+/Rect [527.6238 567.0421 539.579 576.0482]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.7) >>
>> endobj
-1105 0 obj <<
+1117 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 555.0713 539.579 563.9279]
+/Rect [527.6238 554.9716 539.579 563.9279]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.8) >>
>> endobj
-1106 0 obj <<
+1118 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 543.1004 539.579 551.957]
+/Rect [527.6238 543.0007 539.579 551.957]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.9) >>
>> endobj
-1107 0 obj <<
+1119 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 531.0298 539.579 539.9861]
+/Rect [527.6238 531.1295 539.579 540.1356]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.10) >>
>> endobj
-1108 0 obj <<
+1120 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 519.0589 539.579 528.0152]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.11) >>
>> endobj
-1109 0 obj <<
+1121 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 507.1877 539.579 516.1938]
+/Rect [527.6238 507.0881 539.579 516.0443]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.12) >>
>> endobj
-1110 0 obj <<
+1122 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 495.1172 539.579 504.0735]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.13) >>
>> endobj
-1111 0 obj <<
+1123 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 483.1463 539.579 492.1026]
+/Rect [527.6238 483.2459 539.579 492.1026]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.14) >>
>> endobj
-1112 0 obj <<
+1124 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 471.2751 539.579 480.1317]
+/Rect [527.6238 471.1754 539.579 480.1317]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.15) >>
>> endobj
-1113 0 obj <<
+1125 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 459.2045 539.579 468.1608]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.16) >>
>> endobj
-1114 0 obj <<
+1126 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 447.2336 539.579 456.1899]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.17) >>
>> endobj
-1115 0 obj <<
+1127 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 435.2628 539.579 444.3685]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.18) >>
>> endobj
-1116 0 obj <<
+1128 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 423.2919 539.579 432.3976]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.19) >>
>> endobj
-1117 0 obj <<
+1129 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 411.321 539.579 420.2773]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.16.20) >>
>> endobj
-1118 0 obj <<
+1130 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 399.3501 539.579 408.3064]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.17) >>
>> endobj
-1119 0 obj <<
+1131 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 387.3792 539.579 396.3355]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.18) >>
>> endobj
-1120 0 obj <<
+1132 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 375.4083 539.579 384.3646]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.19) >>
>> endobj
-1121 0 obj <<
+1133 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 363.4374 539.579 372.3937]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.20) >>
>> endobj
-1122 0 obj <<
+1134 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 351.4666 539.579 360.4228]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.21) >>
>> endobj
-1123 0 obj <<
+1135 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 339.4957 539.579 348.452]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.22) >>
>> endobj
-1124 0 obj <<
+1136 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 327.5248 539.579 336.4811]
+/Rect [527.6238 327.5248 539.579 336.6305]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.23) >>
>> endobj
-1125 0 obj <<
+1137 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 315.5539 539.579 324.5102]
+/Rect [527.6238 315.5539 539.579 324.6596]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.24) >>
>> endobj
-1126 0 obj <<
+1138 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 303.583 539.579 312.5393]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.25) >>
>> endobj
-1127 0 obj <<
+1139 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 291.6121 539.579 300.5684]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.26) >>
>> endobj
-1128 0 obj <<
+1140 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 279.6413 539.579 288.5975]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.27) >>
>> endobj
-1129 0 obj <<
+1141 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 267.6704 539.579 276.6267]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.2.28) >>
>> endobj
-1130 0 obj <<
+1142 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 255.6995 539.579 264.6558]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.28.1) >>
>> endobj
-1131 0 obj <<
+1143 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 243.7286 539.579 252.8343]
+/Rect [527.6238 243.7286 539.579 252.6849]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.28.2) >>
>> endobj
-1132 0 obj <<
+1144 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [527.6238 231.7577 539.579 240.714]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.28.3) >>
>> endobj
-1133 0 obj <<
+1145 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [527.6238 219.7868 539.579 228.7431]
+/Rect [522.6425 219.7868 539.579 228.8926]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.2.28.4) >>
>> endobj
-1134 0 obj <<
+1146 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 207.8159 539.579 216.9217]
/Subtype /Link
/A << /S /GoTo /D (section.6.3) >>
>> endobj
-1135 0 obj <<
+1147 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 195.845 539.579 204.9508]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.1) >>
>> endobj
-1136 0 obj <<
+1148 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 183.8742 539.579 192.9799]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.1.1) >>
>> endobj
-1137 0 obj <<
+1149 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 171.9033 539.579 181.009]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.1.2) >>
>> endobj
-1138 0 obj <<
+1150 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 159.9324 539.579 169.0381]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.2) >>
>> endobj
-1139 0 obj <<
+1151 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 147.9615 539.579 157.0673]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.3) >>
>> endobj
-1140 0 obj <<
+1152 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 135.9906 539.579 145.0964]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.4) >>
>> endobj
-1141 0 obj <<
+1153 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 124.0197 539.579 133.1255]
+/Rect [522.6425 124.1194 539.579 133.1255]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.5) >>
>> endobj
-1142 0 obj <<
+1154 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 112.0489 539.579 121.1546]
+/Rect [522.6425 112.1485 539.579 121.1546]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.1) >>
>> endobj
-1143 0 obj <<
+1155 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 100.078 539.579 109.1837]
+/Rect [522.6425 100.1776 539.579 109.1837]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.2) >>
>> endobj
-1144 0 obj <<
+1156 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 88.1071 539.579 97.2128]
+/Rect [522.6425 88.2068 539.579 97.2128]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.3) >>
>> endobj
-1145 0 obj <<
+1157 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 76.1362 539.579 85.242]
+/Rect [522.6425 76.2359 539.579 85.242]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.3.5.4) >>
>> endobj
-1146 0 obj <<
+1158 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 64.1653 539.579 73.2711]
+/Rect [522.6425 64.265 539.579 73.2711]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.6) >>
>> endobj
-1087 0 obj <<
-/D [1085 0 R /XYZ 85.0394 794.5015 null]
+1099 0 obj <<
+/D [1097 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1084 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R >>
+1096 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1149 0 obj <<
-/Length 3427
+1161 0 obj <<
+/Length 3432
/Filter /FlateDecode
>>
stream
-xÚí[sÛ6Çßý)ô¶öÌ
-Á• vvl§é¦—´k»³3Ûí-Ñ2'éŠR<ÙO¿ @Gxj$iÇj¦cÙâá9:ÿq#ÅFÔþc#•‘Ìp3ÒFE™MGt4³ï}}ÄÜ1cÐuvuôâ•Ð#CLƳÑÕÍH*E¸Úœ,'4ÏÙèjúóñùo®¾zsuyòËÕ7G_]…³BÏŒŠî”¿ýü Mm
-ê~[9#‚JÀJ¨oŠ…/åò]¹Œ—‘-C’çOAïA¡}&’…†˜Ð0ӨБ@0¡Q÷AèÌÂ9:s§óšÚéü}QY-뢞”¿%¶ÑòsÑuHPÿ‰Sõvˆœ0ŸŒ±A5#Q b¢¾·ZæšØ[)…“ò¢l›ù#šjžñ§W¨u,s0ÃTÞfy/LcÄñVb­UÚ
-z~»lšU¤Î
-I¨äžFÎÄ JKwÌe¹ZWÓØ™r’ô%ûL~jb½¦ÉÄCŒXÈ cÙ0±‘@0bQ÷n²ÇvïÓZy`ÃdO7ñ·œb–Ê\8–&ƒðÚá¡æþ°¯êwU_@ëEYÛ®§ÈÄ󩎃XùÌ'c 1¬ ²(V‘@0¬P÷+e8¡Fm±â«ŸÚªžõ—ÑU”0‘ÜøêØÖ4J4 5íÕºžt«Š~ÎH…¬§" ¤vTÅŠ‚ …»÷×V•SB™Ž)áºj/ß×Å¢šôLýt7-VåÃÞ­VÙ¡7'Æç4™`ˆ5C‰‰‚³ç>6
-RÊŽh3ÆýXu3
-º:aŒ/›õõ¼loíõ«+Hƒùñgxì` ƒÈ^àçÃò±ç6Ú‚¤"B—0Ø9o‹®xvæÇþBms³è†óRÆ6éʧ9¹QC¬QAQx"`¡îý•]…fž¡Ða|½ú‹0×›^¼o–omëú{ÿÛmsß¿˜¶×ýÿRÊgë x®t7k†Û"œöÞõ!gÿ°åƒ‚ûœ$  1ÁaÎQÁ#`‚£îCÕà¶7Ï”Wœ»ªñºžô’u}úЩëFªý¬ÉmQÏvúz~-°ò»—Þ¬×Ýbƒuò„JÁ >MÉ
-A$ Ô}€€„p ø¾×¿oKØlÏ4ì¯ý:Ã?ËùmµR®#BÉ%;™¤­åh?
- £‡¾c2™gÄvÝòïS[Æ9?>½»+ëi5)‡§œƒÙc{aÐ
-¦uK&M}ŸåúP8Pd|V“‘†2P5Ƈä Cuï‘¡ŠE·Èd=2—ÅâÎ?×çôîn^MÜ-Yc%³Ã‚ïB|“ †!P$”H !¨ûpg'7‚ð,ß"ÒïÚ´évCÉßN,kô¸èii«-9íj}Ý¿r«=àÖîõÊݪ¤~"‹v>©2;De˜fLäHˆÆ¨ï­Ä9#,Ï€Ä|GâqѾ¯'ÉBkyü×m˜nõ¯;Ù­ÛJÙ¬Ûùûn_ÿHqÜGHgk‡‰Äøð†¥H˜8˜ï­8™ég€:bW?1a»vÃ…I®Õ²¨ÛbâÇôx2¯6÷D*þ¤†å?a²xÀSf•/¦ê~+ Ò„r”»ÎŠÊ 7+WÝâxUß4ÝjV¿’µ³OÆQ‹rÿˆUX›4S+ºê÷Wδdå€!¦Lª\$L9ÔýV9)‰^ûÔ®rëÍÝ>ín
-o Zƒ[ƒ|£ë^ßõµp¶,'c½³lù©¶‡O’,0Ä„‚™bbøÙ@±@0¡P÷[¡'¹ÒP¨Ì U·.½×^¦i³(ªúEžÕ‚§CMnËÉ[ÿKUû¦µ\´»;Ù.^÷/$Õ2ýþ®AüIÖ b:ÁD11¼e,¦êÞ68§Dk¥ƒJºmì,»ìl³I×T6šÆYñéLfb¬@¹PV"`¬ì¹mÔf&'œ‹~ ù¬ÛÎ!Ž¿/êµß[xWÌýÚÁú±ûµ¡²_{'*&†Ÿ©χäbßmlÓv “î1Ng›e)aŽ§ÕìËØñðäæ„‚©-"-oGo”²H m¨û@›–„*ãiã=m·M×½Tú€Û›$7`ˆágbxî!†ê>à–1b´7áŠ[ݶåd<moúÞÛâmi;"Ï4}0F>ÑÉC #($“Ãc€X F¨û€‘4$7Êc$w0²ðxŽæÅu9âÏ þØñÙMfbì@õ˜Þc cuØšäþ†Ä³ÍºÙ;³²Û·!Õáºö‰hòùN¦ b4A=™”Ã4EÁhBÝš¸"Z¸'kœm–Ô¶4õCÛwÍÛníU±QŸˆ(Ÿód¢€!FÔ”I¤‹ #
-uˆb‚dÒx¢ôQm¹ZUÝTÖ¡@}:œ|“q†NPP{Æ)†ê>àDQ™{˜ÇÉwqªfõÿ6T—R@úX|ª“A†HPJ¦†çèb` ¡î=H¹!2Wž#ÓsÔÍ«OÇ›yô~³Q¦ø ȧ8•`‡àdjøIµ‘(xPßá+¤4‘Ô÷¸íöEï°ãj:ŸÿB>ÅÉ_Ì°/ÙÊÇÔðmû!`_‚87VÄo–³Ø0€Óu˜Žüý§#É fØ#c·ò25Ü-Úa«ð¥ˆcnHžGœcÿgÄ(Å?þ;·_)5ùÐ\qm§Tº¯ÁrÔêr³Áæ(úÿð^ä“endstream
+xÚímsÛÆÇßëSð]¥™ê|8\û¢#Éqê4qRI™Î4í ˆ„(ŒI@!HkÜOßqwXŠ‡.vËf<Q"»Üÿï÷M¨ýÇ&*#™áf¢$Š25™.èdnßûúˆ¹cNýA§ð¨ó룯„žb2žM®o'R)ÂÕöd9¡yÎ&׳ŸŽ/¾sý՛뫓ÿ^sôÕu8+ǫ̂èNùóÑOÿ¥“™ à›#J„ÉÕäÁþB 3†O–GR ¢¤þ/‹£«£†‚w·¦ÑOÂ(á"ã‘Â9ø(Ý›ŠM´2$\l?HFÑ'§ŒSz|6›U목‹ÅÉ)WôøUµ(Ý«fµ,ÖíÉi¦³crrªìÑŸôi̇Ÿå‘¶ÒXŒÍ[Hàž«ù¤q ä v§Ðp_žýów1&ö ózÇÁè@ÝkfßÌ,ºR[L(wxH µœ¿~óÒô4\­‹uÕ®«©Bqú,€ø¤yòOæ b<AE“ã<EÁxBÝ3náLN´PDfy
+‹15NJ$ŒÔýP9#‚JÀJ¨oŠ¥/åê]¹Š—‘!Éóç ÷¨Ð>ÉBCLh˜iTèH ˜Ð¨û tf ᜹ÓùßMítþ®¨¬–uQOË_Ûhù©è:&¨ÿÄ©z;DN˜OƲQ5#Q b¢¾-sMìAJ᤼,Ûfñ„¦šgüùêQûl$ËÌ0•‡L£"ï…€iŒ8$ÖŠP¥ Y:‘¯šéÛrÝKúúÅ÷¿¤uFåç ²ÏG²ÌÀæ›1=.u$LlÔý wƉ±ƒG ·rr_4Ë{«íMµ¨Öï{qªõ]à‹WÂìœMihfcèNÓ 'û£v|Úƒ„Ñî˜|ñ©uG‰ð)K&bD@IËljˆ‚±çž÷~v+“”H.ôÖ{7{Di?AÐ æ§ Êéf°¸h궚•«¢›ajÇçOmxZ€Á~ÄûçífÆ·%jÏml.%ã9’e}¢¶×n.ål:-ÛP ëõê„åÇ›uûÖVÊí{ò0£’Þî|“Û0ÄÚÅ(†ê>àÄ2•ñ8qW@!ðܶ_&™« w«¦YGꬄJîŽ*êYäLÌ¡´tÇ\•ëM5‹)·!I_²¿€©ÀM¬×4™X`ˆ ™aœŽ #uï&{l÷Ž0­•6LötûÈ)f©Ì…ci:
+¯jîûª~Wõ´^–µízŠL|9Õq+Ÿùd¬€!†TÅ*†êÞa¥ 'Ô¨+î°ú±­êy]G ÓɯŽíhM£DÓPÓ^mêi×i±ªè/©õT¤ !‚ÔŽªR±@¤p÷þÚªrJ(Ò1%\WíåûºXVÓž©ïgź|Ü»Õ*;ôÆâÄøœ& 1b f(1‘@0böÜÇFAJÙmƸ«nGA×'Œ±ãU³¹Y”í½~ui4?þ Oì@d°³ãã Èð|X>öÜF[TDhãò;ÍrÙÏ®ÑüÐ_¨mn–Ýp^ÊÃØ&½Qù4'7*`ˆ5*(#
+O$ "Ô½¿² a£ÐÌ3:Œ¯×ræºqÓ‹Íê­m]í»kúÓÂÁöºÿñJù|³Ï•îfãÏpW„Ó>¸>äüo¶¢³ü `TpŸ“dÁ!&8Ì9*x$LpÔ}¨Üöæ™òŠsW5^×Ó^²®O:uÝHµŸ5¹+êùN_ϯV~÷Ò›Íò¦[l°NžQ)…À§)`ˆA
+Œá‡ÁÉSñYMFbÈ@Õ˜_t‰‚!ƒºwȈÜþ‰K=2߯ïüÆâ—Ít
+ÇÙM˜îí‡!Šñ/£r•
+4D@ØÑ!îÞ÷1„Ö$—Ü“ ]ãñ&Ä0Lù¶ºY~Ìzµ¹¿oV‹Œ™Ãä†×Óg4™`ˆñCy‰‚ñ‚º÷…#SDgTx\|ߣ_‘tØŸ7U[u üš¦Å~@>ÇÉ
+"` î=L)8 ¨ž‚ð
+LÌ÷ NfºÇÄ ŽØUÇOLخݸFa’k½*궘ú1=ž.ªí=Q†Š?¨aùO˜,0ÄÔƒDå‹‚釺TšPΠ€rWÀyQ9áæåº[¯êÛ¦[ÍêW²vöÉØ#êbYî±ËcÓffEWBýöÊù–¬0Ä”ƒ©C•‹‚)‡º”“’aàµOí*·ÙÞí3ÞêfðÖ  ¸5È7ºîõ}_ ç«byrªw–-?ÖÖàðI’…†˜P0SLŒ?.,&ê~Jp’+ …ÊœPuëÒ{ãeš5Ë¢ª_ÔáéP-x:Ôô®œ¾õ¿TµoZ«e»»“íòÕEÿBR-ÓïïÕÉd€!¦Lã[Æb`:¡îÝhƒsJ´V:¨¤ûÑÆβËÎV1›tMÕa£iœŸÎdV€!Æ
+” e%ÆÊžûØFmfr¹è—Ï»íâø»¢Þø½…÷ÅÙ¯¬Ÿº_ ûµw¢bbü);ð|H.öÝÆÖ1m'‘0éãt¾]–æxVÍ?ÏnN(è‘Úò !ÒòvôF)‹‚цº´iI¨2ž6ÞÓv×tÝK¥¸ýþ¸yA’q†nPp&Ç{Ù±@0ÜP÷·Œ£µp¸ WÜê¶-§§ÛîØlûÀ?qÀéC9ò™NæbA%™ÄÁ8BÝŽ¤!¹Qž#¹ËQc{ø¶ÇÐ-¿›H
+’Ou2HÀ JÉäxÏ3ê>€$4Éýí‰çÛU´¤Y{Û'—oK;by~ÀèWcäŒ0Ä0‚B2‰t£"`¡îF\-Ü6η+kFÏÑ¢¸)Ïüæ
+°CX‚j25~W$
+„$Ôwø")M$õ=mFûᙩš×ÿÛ~µƒ”‡Áÿ;HŸéäï fØ7ƒ *25ÞUÚûVÄqxÖ±"~眥‡íÐcÇûÕm·¦”ËìäÇ}qŸõä‡Æ3쑱ƒ¢,ŸˆÜa¤ð¥ˆ§ÜúóèƒsìÿŒ¥ø‡ãðU‘R‘}Á׆pJõ¤û,72­Þ!7l¡ÿÒŸæ(endstream
endobj
-1148 0 obj <<
+1160 0 obj <<
/Type /Page
-/Contents 1149 0 R
-/Resources 1147 0 R
+/Contents 1161 0 R
+/Resources 1159 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 939 0 R
-/Annots [ 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R ]
+/Parent 951 0 R
+/Annots [ 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R ]
>> endobj
-1151 0 obj <<
+1163 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 758.4766 511.2325 767.5824]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.3.7) >>
>> endobj
-1152 0 obj <<
+1164 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 746.3946 511.2325 755.5003]
+/Rect [494.296 746.4943 511.2325 755.5003]
/Subtype /Link
/A << /S /GoTo /D (section.6.4) >>
>> endobj
-1153 0 obj <<
+1165 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 734.3125 511.2325 743.4183]
+/Rect [494.296 734.4122 511.2325 743.4183]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.4.0.1) >>
>> endobj
-1154 0 obj <<
+1166 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 722.2305 511.2325 731.3362]
/Subtype /Link
/A << /S /GoTo /D (subsection.6.4.1) >>
>> endobj
-1155 0 obj <<
+1167 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 710.1484 511.2325 719.2542]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.4.1.1) >>
>> endobj
-1156 0 obj <<
+1168 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 698.1661 511.2325 707.1721]
+/Rect [494.296 698.0664 511.2325 707.1721]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.4.1.2) >>
>> endobj
-1157 0 obj <<
+1169 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 686.084 511.2325 695.0901]
+/Rect [494.296 685.9843 511.2325 695.0901]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.4.1.3) >>
>> endobj
-1158 0 obj <<
+1170 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 674.002 511.2325 683.008]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.4.1.4) >>
>> endobj
-1162 0 obj <<
+1174 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 661.8203 511.2325 670.926]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.6.4.1.5) >>
>> endobj
-1163 0 obj <<
+1175 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 639.2482 511.2325 648.1048]
/Subtype /Link
/A << /S /GoTo /D (chapter.7) >>
>> endobj
-1164 0 obj <<
+1176 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 627.186 511.2325 636.2917]
/Subtype /Link
/A << /S /GoTo /D (section.7.1) >>
>> endobj
-1165 0 obj <<
+1177 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 615.1039 511.2325 624.2097]
/Subtype /Link
/A << /S /GoTo /D (section.7.2) >>
>> endobj
-1166 0 obj <<
+1178 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 603.0219 511.2325 612.1276]
/Subtype /Link
/A << /S /GoTo /D (subsection.7.2.1) >>
>> endobj
-1167 0 obj <<
+1179 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 590.9398 511.2325 600.0456]
/Subtype /Link
/A << /S /GoTo /D (subsection.7.2.2) >>
>> endobj
-1168 0 obj <<
+1180 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 578.8578 511.2325 587.9635]
/Subtype /Link
/A << /S /GoTo /D (section.7.3) >>
>> endobj
-1169 0 obj <<
+1181 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 556.2857 511.2325 565.1423]
/Subtype /Link
/A << /S /GoTo /D (chapter.8) >>
>> endobj
-1170 0 obj <<
+1182 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 544.2235 511.2325 553.3293]
/Subtype /Link
/A << /S /GoTo /D (section.8.1) >>
>> endobj
-1171 0 obj <<
+1183 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 532.1415 511.2325 541.2472]
/Subtype /Link
/A << /S /GoTo /D (subsection.8.1.1) >>
>> endobj
-1172 0 obj <<
+1184 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 520.0594 511.2325 529.1652]
/Subtype /Link
/A << /S /GoTo /D (section.8.2) >>
>> endobj
-1173 0 obj <<
+1185 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 507.9774 511.2325 517.0831]
/Subtype /Link
/A << /S /GoTo /D (section.8.3) >>
>> endobj
-1174 0 obj <<
+1186 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 485.5497 511.2325 494.2619]
+/Rect [494.296 485.4053 511.2325 494.2619]
/Subtype /Link
/A << /S /GoTo /D (appendix.A) >>
>> endobj
-1175 0 obj <<
+1187 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 473.4428 511.2325 482.4488]
+/Rect [494.296 473.3431 511.2325 482.4488]
/Subtype /Link
/A << /S /GoTo /D (section.A.1) >>
>> endobj
-1176 0 obj <<
+1188 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 461.3607 511.2325 470.3668]
+/Rect [494.296 461.2611 511.2325 470.3668]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.1.1) >>
>> endobj
-1177 0 obj <<
+1189 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 449.2787 511.2325 458.2847]
+/Rect [494.296 449.179 511.2325 458.2847]
/Subtype /Link
/A << /S /GoTo /D (section.A.2) >>
>> endobj
-1178 0 obj <<
+1190 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 437.1966 511.2325 446.2027]
+/Rect [494.296 437.097 511.2325 446.2027]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.2.1) >>
>> endobj
-1179 0 obj <<
+1191 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 425.1146 511.2325 434.1207]
+/Rect [494.296 425.0149 511.2325 434.1207]
/Subtype /Link
/A << /S /GoTo /D (section.A.3) >>
>> endobj
-1180 0 obj <<
+1192 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 413.0325 511.2325 422.0386]
+/Rect [494.296 412.9329 511.2325 422.0386]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.3.1) >>
>> endobj
-1181 0 obj <<
+1193 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 400.8508 511.2325 409.9566]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.3.2) >>
>> endobj
-1182 0 obj <<
+1194 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 388.7688 511.2325 397.8745]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.3.3) >>
>> endobj
-1183 0 obj <<
+1195 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 376.6867 511.2325 385.7925]
/Subtype /Link
/A << /S /GoTo /D (section.A.4) >>
>> endobj
-1184 0 obj <<
+1196 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 364.7043 511.2325 373.7104]
+/Rect [494.296 364.6047 511.2325 373.7104]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.1) >>
>> endobj
-1185 0 obj <<
+1197 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 352.6223 511.2325 361.6284]
+/Rect [494.296 352.5226 511.2325 361.6284]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.2) >>
>> endobj
-1186 0 obj <<
+1198 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 340.5402 511.2325 349.5463]
+/Rect [494.296 340.4406 511.2325 349.5463]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.3) >>
>> endobj
-1187 0 obj <<
+1199 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 328.4582 511.2325 337.4643]
+/Rect [494.296 328.3585 511.2325 337.4643]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.4) >>
>> endobj
-1188 0 obj <<
+1200 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 316.2765 511.2325 325.3822]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.5) >>
>> endobj
-1189 0 obj <<
+1201 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 304.1944 511.2325 313.3002]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.6) >>
>> endobj
-1190 0 obj <<
+1202 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 292.1124 511.2325 301.2181]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.A.4.6.1) >>
>> endobj
-1191 0 obj <<
+1203 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 280.0303 511.2325 289.1361]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.A.4.6.2) >>
>> endobj
-1192 0 obj <<
+1204 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 267.9483 511.2325 277.054]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.A.4.6.3) >>
>> endobj
-1193 0 obj <<
+1205 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 255.8662 511.2325 264.972]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.A.4.6.4) >>
>> endobj
-1194 0 obj <<
+1206 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 243.7842 511.2325 252.8899]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.A.4.6.5) >>
>> endobj
-1195 0 obj <<
+1207 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 231.7021 511.2325 240.8079]
/Subtype /Link
/A << /S /GoTo /D (subsubsection.A.4.6.6) >>
>> endobj
-1196 0 obj <<
+1208 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 219.6201 511.2325 228.7258]
/Subtype /Link
/A << /S /GoTo /D (subsection.A.4.7) >>
>> endobj
-1197 0 obj <<
+1209 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 197.048 511.2325 205.9046]
/Subtype /Link
/A << /S /GoTo /D (appendix.B) >>
>> endobj
-1198 0 obj <<
+1210 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 184.9858 511.2325 194.0916]
/Subtype /Link
/A << /S /GoTo /D (section.B.1) >>
>> endobj
-1199 0 obj <<
+1211 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 172.9038 511.2325 182.0095]
/Subtype /Link
/A << /S /GoTo /D (section.B.2) >>
>> endobj
-1200 0 obj <<
+1212 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 160.8217 511.2325 169.9275]
+/Rect [494.296 160.9214 511.2325 169.9275]
/Subtype /Link
/A << /S /GoTo /D (section.B.3) >>
>> endobj
-1201 0 obj <<
+1213 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [494.296 148.8393 511.2325 157.8454]
+/Rect [494.296 148.7397 511.2325 157.8454]
/Subtype /Link
/A << /S /GoTo /D (section.B.4) >>
>> endobj
-1202 0 obj <<
+1214 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 136.7573 511.2325 145.7634]
/Subtype /Link
/A << /S /GoTo /D (section.B.5) >>
>> endobj
-1203 0 obj <<
+1215 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 124.5756 511.2325 133.6813]
/Subtype /Link
/A << /S /GoTo /D (section.B.6) >>
>> endobj
-1204 0 obj <<
+1216 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 112.4935 511.2325 121.5993]
/Subtype /Link
/A << /S /GoTo /D (section.B.7) >>
>> endobj
-1205 0 obj <<
+1217 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 100.4115 511.2325 109.5172]
/Subtype /Link
/A << /S /GoTo /D (section.B.8) >>
>> endobj
-1206 0 obj <<
+1218 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 88.3294 511.2325 97.4352]
/Subtype /Link
/A << /S /GoTo /D (section.B.9) >>
>> endobj
-1207 0 obj <<
+1219 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 76.2474 511.2325 85.3531]
/Subtype /Link
/A << /S /GoTo /D (section.B.10) >>
>> endobj
-1208 0 obj <<
+1220 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [494.296 64.1653 511.2325 73.2711]
/Subtype /Link
/A << /S /GoTo /D (section.B.11) >>
>> endobj
-1150 0 obj <<
-/D [1148 0 R /XYZ 56.6929 794.5015 null]
+1162 0 obj <<
+/D [1160 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1147 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F39 1161 0 R /F21 938 0 R >>
+1159 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F39 1173 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1211 0 obj <<
-/Length 765
+1223 0 obj <<
+/Length 898
/Filter /FlateDecode
>>
stream
-xÚíÙÍOÛ0
-Áø é¡‰Ò<¾å³Þ,ëêyæ6G‹æè®Þâå0˜WˆñŠ Š÷óJ‚ñBÓ^\ÍÀz^¢ãµjê©;ó¿Ó:´·¼ùŽ öbÞ⎃ÒýÞ…`ÞÐôÁ›+C+e¼7Ù¦?½eŒXmŠvPK‘LÍ]7òÕ¬
-ÚÉôvähô }§;Œ1‡±P¦ßa¢Ì!š>8 @y‡jwÞ+Zl÷³fRpàã9î°¨ü¶Fb¨â¶‚¦ý¨…`¨Ðô•rF*áQéU]7ë*£ô¨é0šÂ~Õ"š^õtÿ•ªDž>h2šX
-áÆÑtšªÕ²jo'Sã•Ø1?CóŠ1^qƒA÷_ù§
-Áx¡é/-‰*ÜXÚŽ—;G­ª¦^ÌÛ?5ú:
-,¿õƒaE¬¸µ(¬D!,4}€¥8±–ú[JF;Xëiñ0¯¦ÅwJÙŸÍÒù²0Š:(¿çƒEE˜¨¸§ E¿¨D!˜(4}%¡\ú›FþØlʪõä°œ§ª£Àò[?VˆÁŠ[ ZöÃJ²+<¿/(¢¨‹K<Âw¿@¬”ðþ/ v_kM¸1,½\Nc®tÎ%içjû«w©ÛAQåhÉì‹endstream
+xÚíÙÍRÛ0
+“8!Й8hýTF9¦¥ë39a E)ÝQ]Í&ãb4Œ¾ŽæõÍ ÐJ±A¡8›Jçž?Ë
+¤xáƒv^‰B(^dúÀKû«tx™ ¯e=ù#°ÿ;­×¿ÆŽtõ† oO:¦ý+UáN½YǸí³Múã³ÐX!˜ƒ²IÑ j(²õ^p=òɬš+¨ÙŽìÔaèTg‡(rˆ%€Ñí…PÉôÑ¡QÌ•:îÝîºW4Øn'õ  ûkÜaQ…eïŒ
+R¨p[Á¸vT‰B(TdúˆJKæ»IÁ7¨ÆãzµCeµé5HSXïΚP ¥ ÷lû“ªJ™>jR‚q©ÂÆQÀFSµ\TÍæqPÝ?‰½è04 3/Hñ ÛþäŸ*„âE¦¼Jθåac)¶ÀûkÔ²ªÇóYsûÓ½¯–¾3,HÁ­+Úa%
+¡`‘é#,a¶”bû±üÝjTLgÕ¨ø̹øù¸ð¾ô¢$*¬ygQ(…{
+V¶‹JB‰"ÓGQ 6"|J¿šŒä´ZM…“²¿T½¬°ôa¡@
+n- +QȬøEu¡,gF‘ú®ÚÿsJÁó¿ß}_&­éÓ•Üú>mr©˜Ÿk³=ùÞz®aªý7B¬endstream
endobj
-1210 0 obj <<
+1222 0 obj <<
/Type /Page
-/Contents 1211 0 R
-/Resources 1209 0 R
+/Contents 1223 0 R
+/Resources 1221 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1226 0 R
-/Annots [ 1213 0 R 1214 0 R 1215 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R ]
+/Parent 1241 0 R
+/Annots [ 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R ]
>> endobj
-1213 0 obj <<
+1225 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 758.4766 539.579 767.5824]
/Subtype /Link
/A << /S /GoTo /D (section.B.12) >>
>> endobj
-1214 0 obj <<
+1226 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 746.5215 539.579 755.6272]
/Subtype /Link
/A << /S /GoTo /D (section.B.13) >>
>> endobj
-1215 0 obj <<
+1227 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 734.5663 539.579 743.672]
/Subtype /Link
/A << /S /GoTo /D (section.B.14) >>
>> endobj
-1219 0 obj <<
+1228 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 722.6111 539.579 731.7169]
/Subtype /Link
/A << /S /GoTo /D (section.B.15) >>
>> endobj
-1220 0 obj <<
+1229 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 710.656 539.579 719.7617]
+/Rect [522.6425 710.7556 539.579 719.7617]
/Subtype /Link
/A << /S /GoTo /D (section.B.16) >>
>> endobj
-1221 0 obj <<
+1230 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 698.8005 539.579 707.8065]
+/Rect [522.6425 698.7008 539.579 707.8065]
/Subtype /Link
/A << /S /GoTo /D (section.B.17) >>
>> endobj
-1222 0 obj <<
+1234 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 686.7456 539.579 695.8514]
/Subtype /Link
/A << /S /GoTo /D (section.B.18) >>
>> endobj
-1223 0 obj <<
+1235 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 674.7905 539.579 683.8962]
/Subtype /Link
/A << /S /GoTo /D (section.B.19) >>
>> endobj
-1224 0 obj <<
+1236 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [522.6425 662.935 539.579 671.941]
+/Rect [522.6425 662.8353 539.579 671.941]
/Subtype /Link
/A << /S /GoTo /D (section.B.20) >>
>> endobj
-1225 0 obj <<
+1237 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [522.6425 650.8801 539.579 659.9859]
/Subtype /Link
/A << /S /GoTo /D (section.B.21) >>
>> endobj
-1212 0 obj <<
-/D [1210 0 R /XYZ 85.0394 794.5015 null]
+1238 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [522.6425 638.925 539.579 648.0307]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.22) >>
>> endobj
-1209 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R >>
+1239 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [522.6425 626.9698 539.579 636.0755]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.23) >>
+>> endobj
+1240 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [522.6425 615.0146 539.579 624.1204]
+/Subtype /Link
+/A << /S /GoTo /D (section.B.24) >>
+>> endobj
+1224 0 obj <<
+/D [1222 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+1221 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1229 0 obj <<
+1244 0 obj <<
/Length 2174
/Filter /FlateDecode
>>
@@ -4293,56 +4337,55 @@ xÚÝYÝoã6÷_áGXëø%‘ìãî¶ÅÅî’¢½>(c kK®>’ºý 9C[ŠåÍö6ÀE€ˆ¤†äpæ7¿Ê|Éà/M–2iÕR
ìn+×í 7Éz[­‹Žî‹º3k•¼iPÿ¦½1É°ó›ûE†Î•8þдØ(ÝÎmŠ¾ª7´ÏÐo›¶êAÍ#Ž4ŽdÃáh‡¢¦•h+F
žœˆ‡UûÃÎíÁEðëJ€¢ý¶ðîÒYR¬û¡ØíŽ8¾/¶¢)A$؆F~öË2XÂuëRPÂȼŠ¢eÑ(Vuqå
4¨joßñË`wÖj†Ž‚÷f|SHÚê~èÃ"Ùœ?ü¨ßü¾ZEÌs•J• B±b©È%bž§
-<ð|߬o¹ù`&͵KÞºö85ØÓNBƒÅp€ñs°o?||Oñ
-½¢|, äÊ“d?|˔ȆzR笸µÀù³`™P¯7¢
- •"$D‡N=¥JsN¶ä ±ú%=%h Óqžr™r£Í…¡`Z6 FØ|†Œ‰ °'XIvÕfÛ?9ÿŸh‚å)ãz–&ºf÷ˆå¨j©©6ÉlpQô°Æzîyî/L\&äóŠq%I{I0TÐÖÁ²¾œõ€u‰
-ý“NWA÷yŒ) ÄgM>)¬º¿¬Ú”TmBqþèÙ·©©´ü©‹×»ªþʲ3”Ñqî¹ì Ý'Šuð÷³‚1H\Â’«øPèx@¯à'`'ªÿ×jñíÝéûÍ¡¤ðÌ@Ý(…ÿxóÛâ—_Ù²\°å –Jk²åtX*ÅýBIh²ÌÄ‘Ýâvñ¯ÿqVÔcT(\Õ
-Í·Í®¼¥WSýo %«Sf¹} I ®i¶8ÙðeId£¡ÿˆF[¼†žk}…‚ÆZ_@èp^MÝ¿
-nܱ™æP;ƒa¤jüÛßÅo€"P°¿½‚úƘÙ
-ãïp[Kýω³è‘R0µ$¡P‡_˜=þäx^)îö_ó]endstream
+<ð|߬o¹ù`&͵KÞºö85ØÓNBƒÅp€ñs°o?||Oñ
+FŠüäuܹê;´¡’<ÕY®§6<ÁG‰ÐB
+žD8^øú &®*‚îóSˆÏš|SXuYµ)©Ú„âüѳoSSiùS¯wUý•eg(£ãÜsÙºOëàïg7b¸„%Wð¡Ðñ€^Á;NÀNTÿ¯ÕâÛ»Ó÷›CHᙺQ
+ÿñæ·Å/¿²e¹`Ë,•ÖdË'è0°&TŠû…’Ðd™‰#»Åíâ_ÿ㬨ǨP¸ªÎc°5#º§K­â™V܇3üôEjŠfø
+–Q£­¢+O(Ÿèº³ß…Ù¤
+µ¾€Ð5༚ºÜ¸c3Í¡vÃH-Ôø·¿‹ß
endobj
-1228 0 obj <<
+1243 0 obj <<
/Type /Page
-/Contents 1229 0 R
-/Resources 1227 0 R
+/Contents 1244 0 R
+/Resources 1242 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1226 0 R
+/Parent 1241 0 R
>> endobj
6 0 obj <<
-/D [1228 0 R /XYZ 85.0394 769.5949 null]
+/D [1243 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1230 0 obj <<
-/D [1228 0 R /XYZ 85.0394 582.8476 null]
+1245 0 obj <<
+/D [1243 0 R /XYZ 85.0394 582.8476 null]
>> endobj
10 0 obj <<
-/D [1228 0 R /XYZ 85.0394 512.9824 null]
+/D [1243 0 R /XYZ 85.0394 512.9824 null]
>> endobj
-1231 0 obj <<
-/D [1228 0 R /XYZ 85.0394 474.7837 null]
+1246 0 obj <<
+/D [1243 0 R /XYZ 85.0394 474.7837 null]
>> endobj
14 0 obj <<
-/D [1228 0 R /XYZ 85.0394 399.5462 null]
+/D [1243 0 R /XYZ 85.0394 399.5462 null]
>> endobj
-1232 0 obj <<
-/D [1228 0 R /XYZ 85.0394 363.8828 null]
+1247 0 obj <<
+/D [1243 0 R /XYZ 85.0394 363.8828 null]
>> endobj
18 0 obj <<
-/D [1228 0 R /XYZ 85.0394 223.0066 null]
+/D [1243 0 R /XYZ 85.0394 223.0066 null]
>> endobj
-1233 0 obj <<
-/D [1228 0 R /XYZ 85.0394 190.9009 null]
+1248 0 obj <<
+/D [1243 0 R /XYZ 85.0394 190.9009 null]
>> endobj
-1234 0 obj <<
-/D [1228 0 R /XYZ 85.0394 170.4169 null]
+1249 0 obj <<
+/D [1243 0 R /XYZ 85.0394 170.4169 null]
>> endobj
-1235 0 obj <<
-/D [1228 0 R /XYZ 85.0394 158.4617 null]
+1250 0 obj <<
+/D [1243 0 R /XYZ 85.0394 158.4617 null]
>> endobj
-1227 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R /F48 1238 0 R >>
+1242 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1241 0 obj <<
+1256 0 obj <<
/Length 3187
/Filter /FlateDecode
>>
@@ -4360,63 +4403,63 @@ H•²/hÊ
®£fw"®höx׺©;°Çn|>”°ÃÓ¶PˇýjÎÖzýÁ”rþ!È£+Œ­$üE™ Bö‘Q™…­Ê"ôãÇœ/Áò±r=?5M[ô°ÌÏ[€Ì°u¸Âz ÆmÜo<)¶ó=P¿+{’‘OíRzwdîØPÖ6ôV`0ÐhõðlÓã>§¦|êv=£lÁá“xý1‡š[ÚÍ„C9ßšÞ4â¦Å7ɵkù ’ß ÿe¬ˆ¦¯¸Çÿ¤ùâãý×þ{Ôñ¿Ä T0iª_ð‡)¶ˆÌ€
@Ÿ!þêó4Ï©Êendstream
endobj
-1240 0 obj <<
+1255 0 obj <<
/Type /Page
-/Contents 1241 0 R
-/Resources 1239 0 R
+/Contents 1256 0 R
+/Resources 1254 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1226 0 R
-/Annots [ 1247 0 R 1248 0 R ]
+/Parent 1241 0 R
+/Annots [ 1262 0 R 1263 0 R ]
>> endobj
-1247 0 obj <<
+1262 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [272.8897 207.1951 329.1084 219.2548]
/Subtype /Link
/A << /S /GoTo /D (types_of_resource_records_and_when_to_use_them) >>
>> endobj
-1248 0 obj <<
+1263 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [190.6691 179.6723 249.6573 189.0819]
/Subtype /Link
/A << /S /GoTo /D (rfcs) >>
>> endobj
-1242 0 obj <<
-/D [1240 0 R /XYZ 56.6929 756.8229 null]
+1257 0 obj <<
+/D [1255 0 R /XYZ 56.6929 756.8229 null]
>> endobj
-1243 0 obj <<
-/D [1240 0 R /XYZ 56.6929 744.8677 null]
+1258 0 obj <<
+/D [1255 0 R /XYZ 56.6929 744.8677 null]
>> endobj
22 0 obj <<
-/D [1240 0 R /XYZ 56.6929 651.295 null]
+/D [1255 0 R /XYZ 56.6929 651.295 null]
>> endobj
-1244 0 obj <<
-/D [1240 0 R /XYZ 56.6929 612.4036 null]
+1259 0 obj <<
+/D [1255 0 R /XYZ 56.6929 612.4036 null]
>> endobj
26 0 obj <<
-/D [1240 0 R /XYZ 56.6929 555.4285 null]
+/D [1255 0 R /XYZ 56.6929 555.4285 null]
>> endobj
-1245 0 obj <<
-/D [1240 0 R /XYZ 56.6929 530.6703 null]
+1260 0 obj <<
+/D [1255 0 R /XYZ 56.6929 530.6703 null]
>> endobj
30 0 obj <<
-/D [1240 0 R /XYZ 56.6929 416.0112 null]
+/D [1255 0 R /XYZ 56.6929 416.0112 null]
>> endobj
-1246 0 obj <<
-/D [1240 0 R /XYZ 56.6929 391.253 null]
+1261 0 obj <<
+/D [1255 0 R /XYZ 56.6929 391.253 null]
>> endobj
34 0 obj <<
-/D [1240 0 R /XYZ 56.6929 164.815 null]
+/D [1255 0 R /XYZ 56.6929 164.815 null]
>> endobj
-1249 0 obj <<
-/D [1240 0 R /XYZ 56.6929 137.4068 null]
+1264 0 obj <<
+/D [1255 0 R /XYZ 56.6929 137.4068 null]
>> endobj
-1239 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R /F21 938 0 R >>
+1254 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1254 0 obj <<
+1269 0 obj <<
/Length 3415
/Filter /FlateDecode
>>
@@ -4436,60 +4479,60 @@ txÕÁ(1Âùãqt0úØÇ‘C×µLm›§:ÂÄ$è’y¦
·o¾Àbº¦úž&\Õ=¯d‚Ó÷aŠKѨðÀæ@pð
–þvA•c«ÇøÀ†û,¤ÆAg€hCõoœ€}¼ew8ýš*çÐð‡#çô/œÿn1]/‚0Péú\í8 °ef´>+sŒBOD‡+^ .ùRéØ{
endobj
-1253 0 obj <<
+1268 0 obj <<
/Type /Page
-/Contents 1254 0 R
-/Resources 1252 0 R
+/Contents 1269 0 R
+/Resources 1267 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1226 0 R
-/Annots [ 1257 0 R 1258 0 R ]
+/Parent 1241 0 R
+/Annots [ 1272 0 R 1273 0 R ]
>> endobj
-1257 0 obj <<
+1272 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [519.8432 463.1122 539.579 475.1718]
/Subtype /Link
/A << /S /GoTo /D (diagnostic_tools) >>
>> endobj
-1258 0 obj <<
+1273 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [84.0431 451.8246 133.308 463.2167]
/Subtype /Link
/A << /S /GoTo /D (diagnostic_tools) >>
>> endobj
-1255 0 obj <<
-/D [1253 0 R /XYZ 85.0394 794.5015 null]
+1270 0 obj <<
+/D [1268 0 R /XYZ 85.0394 794.5015 null]
>> endobj
38 0 obj <<
-/D [1253 0 R /XYZ 85.0394 570.5252 null]
+/D [1268 0 R /XYZ 85.0394 570.5252 null]
>> endobj
-1256 0 obj <<
-/D [1253 0 R /XYZ 85.0394 541.3751 null]
+1271 0 obj <<
+/D [1268 0 R /XYZ 85.0394 541.3751 null]
>> endobj
42 0 obj <<
-/D [1253 0 R /XYZ 85.0394 434.1868 null]
+/D [1268 0 R /XYZ 85.0394 434.1868 null]
>> endobj
-1259 0 obj <<
-/D [1253 0 R /XYZ 85.0394 406.5769 null]
+1274 0 obj <<
+/D [1268 0 R /XYZ 85.0394 406.5769 null]
>> endobj
46 0 obj <<
-/D [1253 0 R /XYZ 85.0394 301.1559 null]
+/D [1268 0 R /XYZ 85.0394 301.1559 null]
>> endobj
-1260 0 obj <<
-/D [1253 0 R /XYZ 85.0394 276.6843 null]
+1275 0 obj <<
+/D [1268 0 R /XYZ 85.0394 276.6843 null]
>> endobj
50 0 obj <<
-/D [1253 0 R /XYZ 85.0394 200.1512 null]
+/D [1268 0 R /XYZ 85.0394 200.1512 null]
>> endobj
-1261 0 obj <<
-/D [1253 0 R /XYZ 85.0394 175.6796 null]
+1276 0 obj <<
+/D [1268 0 R /XYZ 85.0394 175.6796 null]
>> endobj
-1252 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R /F21 938 0 R >>
+1267 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1265 0 obj <<
+1280 0 obj <<
/Length 2457
/Filter /FlateDecode
>>
@@ -4508,39 +4551,39 @@ S¦…€Äüœºã2±öŠ 41ÑÍ–,÷úBäí]¨u›«˜úDOâ‚ÙLë–3žatÙ±º÷5vxnïH‘šªmÝóìAߌå
M­
 ZãŠÜƒ[æž.ÇñS!L%:P–ô˜¥Hé!”·i"®"!G­š¼ü…3Ãø(M¶æÒ?/ÕºðõwÕNïÉzê-çÕÃÿ­@úÂ?Dþ ÇD÷ÿï2ýý¥Ê2¹ü—ŠÌ OÕÈŠ%ºaÜÿ?sËùy;:»endstream
endobj
-1264 0 obj <<
+1279 0 obj <<
/Type /Page
-/Contents 1265 0 R
-/Resources 1263 0 R
+/Contents 1280 0 R
+/Resources 1278 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1226 0 R
+/Parent 1241 0 R
>> endobj
-1266 0 obj <<
-/D [1264 0 R /XYZ 56.6929 794.5015 null]
+1281 0 obj <<
+/D [1279 0 R /XYZ 56.6929 794.5015 null]
>> endobj
54 0 obj <<
-/D [1264 0 R /XYZ 56.6929 717.7272 null]
+/D [1279 0 R /XYZ 56.6929 717.7272 null]
>> endobj
-1267 0 obj <<
-/D [1264 0 R /XYZ 56.6929 690.4227 null]
+1282 0 obj <<
+/D [1279 0 R /XYZ 56.6929 690.4227 null]
>> endobj
58 0 obj <<
-/D [1264 0 R /XYZ 56.6929 550.0786 null]
+/D [1279 0 R /XYZ 56.6929 550.0786 null]
>> endobj
-1268 0 obj <<
-/D [1264 0 R /XYZ 56.6929 525.2967 null]
+1283 0 obj <<
+/D [1279 0 R /XYZ 56.6929 525.2967 null]
>> endobj
62 0 obj <<
-/D [1264 0 R /XYZ 56.6929 393.0502 null]
+/D [1279 0 R /XYZ 56.6929 393.0502 null]
>> endobj
-1269 0 obj <<
-/D [1264 0 R /XYZ 56.6929 363.1913 null]
+1284 0 obj <<
+/D [1279 0 R /XYZ 56.6929 363.1913 null]
>> endobj
-1263 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F39 1161 0 R >>
+1278 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1272 0 obj <<
+1287 0 obj <<
/Length 2097
/Filter /FlateDecode
>>
@@ -4556,66 +4599,66 @@ hZã|jY/ýE‰áÝN6“dy 8xp]7b~{é0h”~’e±½„3×rÓ,Ã,*r¸2Ư{ë³½ŸØøÎê±×꛼cµ¬Ë"
Ìk
âþî^̲EÑÅk˜èP<sgÕ1B ÚÖP!žÅj˜K±dx ’;mêá6¨BÐ ¾I½Ÿp
endobj
-1271 0 obj <<
+1286 0 obj <<
/Type /Page
-/Contents 1272 0 R
-/Resources 1270 0 R
+/Contents 1287 0 R
+/Resources 1285 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1226 0 R
-/Annots [ 1278 0 R 1279 0 R ]
+/Parent 1241 0 R
+/Annots [ 1293 0 R 1294 0 R ]
>> endobj
-1278 0 obj <<
+1293 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [519.8432 268.1131 539.579 280.1727]
/Subtype /Link
/A << /S /GoTo /D (acache) >>
>> endobj
-1279 0 obj <<
+1294 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [84.0431 256.1579 143.5361 268.2175]
/Subtype /Link
/A << /S /GoTo /D (acache) >>
>> endobj
-1273 0 obj <<
-/D [1271 0 R /XYZ 85.0394 794.5015 null]
+1288 0 obj <<
+/D [1286 0 R /XYZ 85.0394 794.5015 null]
>> endobj
66 0 obj <<
-/D [1271 0 R /XYZ 85.0394 769.5949 null]
+/D [1286 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1274 0 obj <<
-/D [1271 0 R /XYZ 85.0394 574.3444 null]
+1289 0 obj <<
+/D [1286 0 R /XYZ 85.0394 574.3444 null]
>> endobj
70 0 obj <<
-/D [1271 0 R /XYZ 85.0394 574.3444 null]
+/D [1286 0 R /XYZ 85.0394 574.3444 null]
>> endobj
-1275 0 obj <<
-/D [1271 0 R /XYZ 85.0394 540.5052 null]
+1290 0 obj <<
+/D [1286 0 R /XYZ 85.0394 540.5052 null]
>> endobj
74 0 obj <<
-/D [1271 0 R /XYZ 85.0394 447.7637 null]
+/D [1286 0 R /XYZ 85.0394 447.7637 null]
>> endobj
-1276 0 obj <<
-/D [1271 0 R /XYZ 85.0394 410.3389 null]
+1291 0 obj <<
+/D [1286 0 R /XYZ 85.0394 410.3389 null]
>> endobj
78 0 obj <<
-/D [1271 0 R /XYZ 85.0394 348.7624 null]
+/D [1286 0 R /XYZ 85.0394 348.7624 null]
>> endobj
-1277 0 obj <<
-/D [1271 0 R /XYZ 85.0394 311.223 null]
+1292 0 obj <<
+/D [1286 0 R /XYZ 85.0394 311.223 null]
>> endobj
82 0 obj <<
-/D [1271 0 R /XYZ 85.0394 189.9853 null]
+/D [1286 0 R /XYZ 85.0394 189.9853 null]
>> endobj
-1280 0 obj <<
-/D [1271 0 R /XYZ 85.0394 156.0037 null]
+1295 0 obj <<
+/D [1286 0 R /XYZ 85.0394 156.0037 null]
>> endobj
-1270 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R >>
+1285 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1284 0 obj <<
+1299 0 obj <<
/Length 591
/Filter /FlateDecode
>>
@@ -4623,27 +4666,27 @@ stream
xÚ¥TKs›0¾ó+t3AÕtt’:3Nƒû˜4Ç()SŒ\ÀIóï+!°Iâž: ³«}|ì~Ú…
ÕºÕõ«3uEó»$hô®ËZ«¤iëâa׺BÿÚ*Æ‘]…#;`ÞþÒþ{ã¿¡0FLzX¦ñÐS‘ŒÙ¾(Klô¡ða3?VþP%6endstream
endobj
-1283 0 obj <<
+1298 0 obj <<
/Type /Page
-/Contents 1284 0 R
-/Resources 1282 0 R
+/Contents 1299 0 R
+/Resources 1297 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1287 0 R
+/Parent 1302 0 R
>> endobj
-1285 0 obj <<
-/D [1283 0 R /XYZ 56.6929 794.5015 null]
+1300 0 obj <<
+/D [1298 0 R /XYZ 56.6929 794.5015 null]
>> endobj
86 0 obj <<
-/D [1283 0 R /XYZ 56.6929 769.5949 null]
+/D [1298 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1286 0 obj <<
-/D [1283 0 R /XYZ 56.6929 744.7247 null]
+1301 0 obj <<
+/D [1298 0 R /XYZ 56.6929 744.7247 null]
>> endobj
-1282 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R >>
+1297 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1290 0 obj <<
+1305 0 obj <<
/Length 1159
/Filter /FlateDecode
>>
@@ -4656,45 +4699,45 @@ JxI1|«ÄR{}Ö8!S8ÆM§,ývrö‹çf¨qdü)G%§ÀÚÉ®×r›6H–¬Ú‹½‹…¿ðÃJNXV„ÐO^nóëÅ¿_æ’£
Ó–ÿ¼\g¥» ÜE
¾qÂôrœº=ȘZ\ ö\FØÿxd²ó‘ód¦·$4%9‡‹{¦úÃ9šfؼ!¼‚¦ÿH ËI)xáõ8kØ;ߥo…­<©»çÃ¥ÛŽ›­>L/‰ÁÌ ²”Š,`îö$àžÇV”ðl×ØæÚ,˜Lá5]Ö·[öhLs&¾Ñ¡0ÌC/—U5U}hõö5¡æ^uº…®û]}á¦×=}»ž^êáý-Rb_ósoù _dð!AK"8YXù½±é_Á£µ
endobj
-1289 0 obj <<
+1304 0 obj <<
/Type /Page
-/Contents 1290 0 R
-/Resources 1288 0 R
+/Contents 1305 0 R
+/Resources 1303 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1287 0 R
+/Parent 1302 0 R
>> endobj
-1291 0 obj <<
-/D [1289 0 R /XYZ 85.0394 794.5015 null]
+1306 0 obj <<
+/D [1304 0 R /XYZ 85.0394 794.5015 null]
>> endobj
90 0 obj <<
-/D [1289 0 R /XYZ 85.0394 769.5949 null]
+/D [1304 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1292 0 obj <<
-/D [1289 0 R /XYZ 85.0394 575.896 null]
+1307 0 obj <<
+/D [1304 0 R /XYZ 85.0394 575.896 null]
>> endobj
94 0 obj <<
-/D [1289 0 R /XYZ 85.0394 529.2011 null]
+/D [1304 0 R /XYZ 85.0394 529.2011 null]
>> endobj
-1293 0 obj <<
-/D [1289 0 R /XYZ 85.0394 492.9468 null]
+1308 0 obj <<
+/D [1304 0 R /XYZ 85.0394 492.9468 null]
>> endobj
98 0 obj <<
-/D [1289 0 R /XYZ 85.0394 492.9468 null]
+/D [1304 0 R /XYZ 85.0394 492.9468 null]
>> endobj
-1294 0 obj <<
-/D [1289 0 R /XYZ 85.0394 466.0581 null]
+1309 0 obj <<
+/D [1304 0 R /XYZ 85.0394 466.0581 null]
>> endobj
102 0 obj <<
-/D [1289 0 R /XYZ 85.0394 201.2466 null]
+/D [1304 0 R /XYZ 85.0394 201.2466 null]
>> endobj
-1295 0 obj <<
-/D [1289 0 R /XYZ 85.0394 170.5419 null]
+1310 0 obj <<
+/D [1304 0 R /XYZ 85.0394 170.5419 null]
>> endobj
-1288 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1303 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1298 0 obj <<
+1313 0 obj <<
/Length 1768
/Filter /FlateDecode
>>
@@ -4708,41 +4751,41 @@ tèErÆ)LÌ ìÔ)ÂpÉ!è©n½ˆ4ï8Ky^ëéMšezºÈsk¿²å‘µΔk1…éÔ‹T©¦ô0j }z¬¬Ó%ÿn¿ô¡ô1µ
ÊTˆiivíÚÔ«×eΓ=5’´Š£.mÃU;GÝ©ÔE^à9"–JØCàxy¥™Zÿqdkà“µ› jÝ
Na>¤¯xÁã/jY»—|‘´7ŠÂ-Ý M¤³•PQŽŠ2Q£ýëq€:Ž¦­Ö÷£J\„¥r8.ù ¬ "~AªíŪNAÕ1̃`àùFŒ!Mr¡äå‡~-zP©Ä¢VÊKu¦}?N[êÃFÓ=¦SYl‹3¼îb¿§ ”Cˆ¹Ê[öOÂ]Có¬ûœ„èéÌEc½â°õbz|í/×<ÇG,„i¸Ï(ôY«•P=x¢ºù7Û£û_`#~›endstream
endobj
-1297 0 obj <<
+1312 0 obj <<
/Type /Page
-/Contents 1298 0 R
-/Resources 1296 0 R
+/Contents 1313 0 R
+/Resources 1311 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1287 0 R
-/Annots [ 1303 0 R ]
+/Parent 1302 0 R
+/Annots [ 1318 0 R ]
>> endobj
-1303 0 obj <<
+1318 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [55.6967 61.5153 126.3509 73.5749]
/Subtype /Link
/A << /S /GoTo /D (rrset_ordering) >>
>> endobj
-1299 0 obj <<
-/D [1297 0 R /XYZ 56.6929 794.5015 null]
+1314 0 obj <<
+/D [1312 0 R /XYZ 56.6929 794.5015 null]
>> endobj
106 0 obj <<
-/D [1297 0 R /XYZ 56.6929 372.6686 null]
+/D [1312 0 R /XYZ 56.6929 372.6686 null]
>> endobj
-1300 0 obj <<
-/D [1297 0 R /XYZ 56.6929 334.1957 null]
+1315 0 obj <<
+/D [1312 0 R /XYZ 56.6929 334.1957 null]
>> endobj
-1301 0 obj <<
-/D [1297 0 R /XYZ 56.6929 266.1213 null]
+1316 0 obj <<
+/D [1312 0 R /XYZ 56.6929 266.1213 null]
>> endobj
-1302 0 obj <<
-/D [1297 0 R /XYZ 56.6929 254.1661 null]
+1317 0 obj <<
+/D [1312 0 R /XYZ 56.6929 254.1661 null]
>> endobj
-1296 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R >>
+1311 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1307 0 obj <<
+1322 0 obj <<
/Length 2693
/Filter /FlateDecode
>>
@@ -4763,246 +4806,266 @@ v‚_Ñ&-Ë÷–Ðùs’LŒ“é¨úc­º¯ç½¿ªîzWnBˇ¢—ålÊOøQ‚x# £cÇl»„“¬ðܯb¼ocàÁ
p¬xJ´§¹=vrB þ²¡ðÙ£,ˆ†—
N8çŒd¬`—·Àvÿ¤?í.îü›¾ü2õÃ%0'üµµQ†Ìè‘2ÂÒTúÄ„íû&·×ˆã<dÏÄŸ¼÷?²œÿ¿Gd„çùÌ9#×çŒ,ñJiõ‹©âþ^.5ÿ+Lendstream
endobj
-1306 0 obj <<
+1321 0 obj <<
/Type /Page
-/Contents 1307 0 R
-/Resources 1305 0 R
+/Contents 1322 0 R
+/Resources 1320 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1287 0 R
+/Parent 1302 0 R
>> endobj
-1308 0 obj <<
-/D [1306 0 R /XYZ 85.0394 794.5015 null]
+1323 0 obj <<
+/D [1321 0 R /XYZ 85.0394 794.5015 null]
>> endobj
110 0 obj <<
-/D [1306 0 R /XYZ 85.0394 769.5949 null]
+/D [1321 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1309 0 obj <<
-/D [1306 0 R /XYZ 85.0394 744.949 null]
+1324 0 obj <<
+/D [1321 0 R /XYZ 85.0394 744.949 null]
>> endobj
114 0 obj <<
-/D [1306 0 R /XYZ 85.0394 744.949 null]
+/D [1321 0 R /XYZ 85.0394 744.949 null]
>> endobj
-1310 0 obj <<
-/D [1306 0 R /XYZ 85.0394 721.0357 null]
+1325 0 obj <<
+/D [1321 0 R /XYZ 85.0394 721.0357 null]
>> endobj
118 0 obj <<
-/D [1306 0 R /XYZ 85.0394 672.3079 null]
+/D [1321 0 R /XYZ 85.0394 672.3079 null]
>> endobj
-1262 0 obj <<
-/D [1306 0 R /XYZ 85.0394 647.0603 null]
+1277 0 obj <<
+/D [1321 0 R /XYZ 85.0394 647.0603 null]
>> endobj
122 0 obj <<
-/D [1306 0 R /XYZ 85.0394 136.5325 null]
+/D [1321 0 R /XYZ 85.0394 136.5325 null]
>> endobj
-1314 0 obj <<
-/D [1306 0 R /XYZ 85.0394 113.5963 null]
+1329 0 obj <<
+/D [1321 0 R /XYZ 85.0394 113.5963 null]
>> endobj
-1305 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R >>
+1320 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1317 0 obj <<
-/Length 3508
+1332 0 obj <<
+/Length 3556
/Filter /FlateDecode
>>
stream
-xÚÝ[Ýsܶ×_qo=Íøâ‹
-©œä‹ëÛ/‰2)ñâzó~IE—À![¾}ù·W—+³åÕ«w—œ/ÿ?¦ÿÓϯ޽¼lyý槷W—+‘)¶üî//¾öçy|÷ÓÛ×o~ø¥çsùáúÇ‹W×aÕâŒê%üvñþC¶ØÀ‚¼ÈU’/¡“!¬Yì.§ˆ3JýÈöâêâïáà©y5¥9Æ3Ä9ã‹eHÂü)*œ#Esí rcI ÁÊ)¡Aù”/1âJñE ÒÊÿ¥-îÊ‘"€@b±L \ü%" X‘XR$O¥Eª‹]¹Y­ïËõ§uSß^®ò,[¾_}|øüÁ·;-ñ7¯9ðÂ9-3 h.›êP®»æðdI£i9C9áØQz®)žI<ËÛj[jáA~I²<p<U(Fã|!€¡ „¤Ï#Z ©ÆÛ¬ÔSèìsS6S Šæl^€@•€ µÂÀ¬E.b®ïb"i±B8Ê)&!æ oÉ`©ßšýáËesw(vö ›W[Û.ìÏ®h»ò`Û¿fÙ–¶}Û¸Áö©îŠßÝ;õÆ1j궂ëõÓ%Æx‰¦Î@®Œð/8CÓÇ2P=–¹µKA¿D¤‹éc¨R{çŽâæão߇ƒ¹N"ððÜíèz[´mâ
-³¡oÂH²p¤>&˜§™9‚ÇâP'¸Š”ŠÏär[T[
-Omµ<]dý.rlÏÿL
-‘Hd’yCÁÿ•å>SÐÄùuÖk)z¿=Ã&K9RBäÏ ¥â\(Í)Õ±χÒ!Õt( T?×ìö c2˜2ˆi˜‹yUB†(˜Â¡Ï@ŸHˆ«jWm À(_vM"°2Ž² OÖ©ÈšƒE½Þ€Ï4Ì+óË–Åö±xjíØæ¸Û·v¸»/í˜õùzB'ÄÍ.Èf_·Ýv_®+…Ëa±"C$Ïpì‡qZÛy÷´¯ÖÅvûd‡ª:Šð›êVÀÛÒ ;µ ð»¢Óf¦Œ„+‚2zn ˆ¦MÄiéõf}:£€s¸šÑÓŒgŒö‰ Ì æg¼6» ÉÒj`×t®oδðrSÀpmGõYä´µZÇ)p«ËX8Ú~]'‘ iy‚Æ–gŒÍ`
-QëO­e¿¾/êºÜZæ»fS‚qQ°ú7·Öf5òËsžÇ[ðÔ­ã:\Êå1%…,˜H~ÆÞ4©û±êî›cç³ç@›½>.OªÜÓÇJ[£u¨í~[<ENöh2›Q•mß)ZïmÍñþóTRÂ!yÄ"—_” YLçIêlžÄIŽÿ" XLçI*lÛL:Ä)JzûÖŽê.•¾äˆQJOd{&;——äH#§÷g9꣔‚|XüžÎòûT¦’ ˜«üÙ@ÔyÒ‚”ˆ`…Ÿ‹Eg”íÈBRî–J@Bh„#’J<»Mû@(!~¥•;‚éÆ­ýµQ6Ϊ¾OoÉL€R¤˜·ö‘5v™0vOdl½Ü6ÅfA,‡H=7i Í;`pwŒå,šöÖr4š¼;z<pZ
-%`[4© °Ê&À|¯¡ÕŒŠ<U¬#0B>™Ã ò*9•,¿Op1¦œª®ÈÉó7ÉÆŸˆ‡ª|LÉøQjF ~e`ßóº TceÆqN£ %q¬ÍáÖó¿«ʺßäé=C• göx@5³ÇžÊîñ-
-õuä%¸`5«Ë@4Rf{@=ŠSiÓ…ð€F
-­y`â„ÒzÇÙøëÎ š“„èÿ|Ùòendstream
+xÚÝ[_sܶק¸·žf|ñûæ$vêtꤒÒNÇñuGI´ïÈË‘gEþô]`8‚<¥žN;=
+’2I-¥ãã™Á"™cyWmK-\„#ȯX’zŽ§
+¥$£4]dÀ0ãŒÅÏ%Z ©ÆÛè­ÔQèìsS6”rŠ–b^
+S$K”p†Bÿ+Ë}¦ ‘ók­)z¿=Ã&K%ɳ,}n(ÍÎ…Ò”s›é|(RM‡RO5ðsÍn2Fƒ©€˜Fe6/‚§ŠÈS8ôIÐ'âºÚUÛB0.—] ¬B’$¡õE,²¦`^¯·à3 óÊüŠe±},žZÛwû‡»‡ÇÐçë!7;/¾ŽÝv_®+…Ëa±b‰ ,Mhè‡qZÛy÷´¯ÖÅvû„CUDøMu§aÀ]iÐ
+Œ»Pnp¼ª'Œ_i8=§L€Ó2÷QëO-²_?u]n‘ù®Ù”`\¬þÍÚ¬F~i*Óp žš#:®Ã¥Zc"qÈ‚™’gìA“;±«î¡9v.»±´Ùë³aó¤Ê>}¬´5¢Cm÷Ûâ)p²G“q`FU¶}§h·5ÇûÏSI‰„ä‘f©ú‚¤dÈb:OòTgó$ÉR¸ø/iÀb:OòT~ÛfÒ!ÉI–+gߺÂQÝÇÒ—”Îù)€lÏÂdëò¢ì”ãþ,G}”b/
+s€œ!gþfê©Æ Í”ëRX Ò«^¥³›mmÉÝ ­ýN`RÁ)›
+r¹Lœ±‰ÕŒM8*ƒÉªû:¢ÿÀ¹ÆÀ$$ë
+³ÍõÊV$
+¤Š†ÑaS‚l§³O8Y$ËϤç¢iÜáˆô¬:U2á0íƒ*Ôב—(àBóY]z¢‘2ÃØêÉ%g6ðÈ©ÐðÀ#Oð€Q¹=Šú™0f}µ&ëGOK]y &\æ£ G,âHå âH….²<q
+©ÓˆeV©=di5ŽYµ^Û}i(Ëã~¶ÅŽ (xsGÿx¤¯;X9]É”aðãÚ÷°UYFæÎÏj²à… í snÓW¦$¢(¦gkǼ1B§EáËÎø©p9¦ƒ»&³õ±°œ †tv³isd›røï,)³ Zµ¾Q¤ƒABc€BÝiE&‰xbÒ#ð4VoÐG"SŸ Ë7[·­uqlúuÛäô-¾‡u
+?¡ñ¡9êb‹÷5KSv–Õ­%lŸêµ“Ê‚„„úÛ3'e€ñUi}q&Ë—þf€Ï÷ô•
+}U·fÃSÕû–æxÚ`°Àn¿ã8Ü[<´~‡Ûêž~^7ý#©,cíwœÛ'Tr‚¦+ïwôÍ/ô;‚eèwS,úõCú‘÷Cz¼4kÓ^HAÀD/¤ÇÝyÖ/#׃öþ68†ÌðËe@Œ«Ȳ‹ùžMÕ~4ÞÓ‚-¦<ÄBÑZC]ê‹RØï÷:Åž}å°4ì·TÅ–…%Ó_·e‡>7QË—ýkþ8Éq' ¿â±ÄÌ&öÿT`âúŸ "—ø;_ü¿Vý¿ éËJM}oÌ´¥
endobj
-1316 0 obj <<
+1331 0 obj <<
/Type /Page
-/Contents 1317 0 R
-/Resources 1315 0 R
+/Contents 1332 0 R
+/Resources 1330 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1287 0 R
-/Annots [ 1322 0 R 1323 0 R 1324 0 R 1325 0 R ]
+/Parent 1302 0 R
+/Annots [ 1337 0 R 1338 0 R 1339 0 R 1340 0 R ]
>> endobj
-1322 0 obj <<
+1337 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [219.3839 342.7466 281.1025 354.8062]
/Subtype /Link
/A << /S /GoTo /D (options) >>
>> endobj
-1323 0 obj <<
+1338 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [401.2123 288.8914 470.1877 300.951]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1324 0 obj <<
+1339 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [243.8464 235.0361 306.1963 247.0958]
/Subtype /Link
/A << /S /GoTo /D (options) >>
>> endobj
-1325 0 obj <<
+1340 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [368.2917 181.1809 436.8984 193.2405]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1318 0 obj <<
-/D [1316 0 R /XYZ 56.6929 794.5015 null]
+1333 0 obj <<
+/D [1331 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1315 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F41 1218 0 R /F53 1313 0 R /F22 961 0 R /F14 964 0 R /F48 1238 0 R /F55 1321 0 R >>
+1330 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F53 1328 0 R /F22 973 0 R /F14 976 0 R /F48 1253 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1330 0 obj <<
-/Length 2924
+1345 0 obj <<
+/Length 3160
/Filter /FlateDecode
>>
stream
-xÚ­ZÛrÛ8}÷Wèm誃+/µOÙÄžñT­3{o•É-Qw)Ò#Rv¼•ßn4
-îo>Ü^.c–*øòü·~½:~wwùùþ—‹«{?‹îL9“8…?.>}f‹5Lø— Ê4Ñ‹x`!OS±Ø](-C­¤t=åÅÝÅo~ÀÎ[óé”å´LBˆxÂtBtLÇ%“H&‹X§a$…4¶ËªõåR
-ì/yä˼ÊʼÁ>¬_«lW¬pxZg-½A¶ió=ÚmN}eÙ±¶™`UïžÊ¼Í×hX¡ƒ·î3þü§®rÂvèv›½äëáA1Ð`‰F†™.9S­…ÑÚª…+âÕ‡—¢,©UÕô·¬«G‰í‡œþÒT7‡õ,!g
-,¦âEÌ£PÈ8™´¹G-»0cs•tmΠ­¢ã`Fùº-6¯(ø͵Ö´‚R… ÌXÆ€zCŠ4L’8µ OÃè0ãÈVeÖ4ÃH Î
-õÝ竺Ú#Ñ:ã(:'Ú¡Æ¢ûщ0ez¢?æ£BFÖÐ
-&A½!{ˆH…‚§Þ ܳDãèm•§ÑCÑÒßì¹.ÖÍÀõ«<·ÓZšÌ¿
-2¤£V])±‘¸O‡,í†fM$$z²‰¨×¼ùÓÔ,á#Îã®ål\NZN¥‘Kšê'4HsbLÆ£‘åˆ3'-§•Pßb9ÈÝãX;#Ïðƒat–<h†ƒÒÖ‡ÝÓúár1|Zfeùu¹ÊVÛüë‰ÿ³}1‘Jò(eì'h’IÃp"«T1,1sæ%•¶XΣhnŽ3œc`¡X
-Étg’ïa’—KžZnƆ#r`÷ê2ó¶íß™fë|“Êšœ:!izƒ~mÚig$Š÷yc´¬Ç}àTk"!n?GÓ¦ ÌÅ‚›Mÿ(Df7ÉA3úüG›.¸ó“Èöù¼Åj6wlRi
-<XÌ{^vÚ÷<ʆѾ®ag?éfýØø6/‹Oy™€³ŒÏÏÈ£Æ3ê]D‚GsÕŸùšT‰=D«tèkø&~€¬â•žÌb®ÓÀ çBøÖ¸P_`Ç…Œ‹¦°9•ö=ô{ýê8
-8ÔXAn”„±Ð ¹µc‰sð,—ì²—<0¹ ƒµ=8ã!:«^©asœ¼j陎K =ì²uîÄÐ:·Ôq,ÁÕ]¨ ëG;0ì{d
-L~O
-|Øiì¾/Äñh Åì]€ãÃ!’ê
-uÂþU¬ß¥Y¦RãÀ5goóØ’bǤpvßS[M’MªÂD³y®Qaì‹¿$ =G5XÑå7QMÔ¡¹ô8$•ñÜ<©àÔl% @ŽT˜wµ=±á©•ƒhîKîC:tcŠùÓtÃÇúܤe¨%»lƒcÙÆ<bpÏó
-
-‹ø¹t¶ ›á‡29ÿ>[å'«Tór}•j$wºJÕ|SQ‚˜ïˆzç ãã[Ž‡ƒ­­˜›”ü9·éÙƒÍãf+è"-EΘ® ;m:ê™nÿ÷ï4Hß¡v±£4Ug´s¨±v}',Œ–ôÕ»ËÛfÒ®>«Ÿ·® ‡¬rµY*RÙÔ8+sV×I(q®¬Ú…ÍXÝ¡ìµÕ¤Ë AÅÏHv¨±ä¾Eug8¦ú¢ÿ_e3vLYž«˜ta3vs(T~SšíÉ@Ÿ—ë}$w:Ð{‚¯Qpþ †3ŌӦᩆ³«:—[ua§MãQÞ4ÈàS‡ù(IÒM£G
-¦,äJË3
-:ÔXÁ¾ á-Ñ@Ãi>t …‡`TŒN±>ãø^{CÎÏ¢s[N5cm r×"‡ñ½ˆÒXÿÔóRh$u¼ rw‘ôľ/š§2à ƒ §ƒi›Û#æ’Z&:§YslSÁmÝÚWí6k]Ëvù+2‚†þþ šEµ*k÷ä¿*ªc~2<ƨ©ÇU–ŠjýæÝÏ©$¾n7qŽ¸×Ãz•'¤B†”jæö¬ðÍÍí„D.Ì”Ky¶…Û·"‹ãU\·^â
-2t{rOqõ˜á¨Ç«a3æLá…ƒŠQÌÎÑg6ãµe¯ËûÆÞL½æeû£×HöôÑ«'ü½¯Ãú¥,‹¦í_º[Ÿ‰T•%aš¤Éÿ”«º5ƒi“Ù+s=uüኳ‡MÁN/
-$%Bòs¼ÝA^2µÀ¬,ÖöFØœ‹ëêk½ÙÌÕÿPªð×XßYÿÇdKÄRÏÎσFóëGÌ„Vio‚Wæªj÷®†¿.šcçûÛ»»«wÔ>Zð#Öšð…kҹºjš|em5É1éࢀ®5ÝþàøôàwœÖ¿ï[•¿z{Í›i¾QÇ#Öpü|ƒn¸Á[­çÜÕ„ÛÑ 4³w¯á©ßËAâŽ?r›XGøo§ÿÝ¿¥;þÄüK&ɉœ^²¼/Rh·šûÝUÿ/Ý—endstream
+xÚÕZK“ã6¾÷¯ð-">$Šµ§Ùd&Û©Ú™dº÷U“9ȶl+‘¥Ž%wO§òã H‰zXž©ì%åƒ)
+$ø€b‹~l‘DA(´\(-ƒ(dÑbs¼ {x÷Ý ³4+G´ò©þöpóõ¡:Ð1;o®$“„-¶–ßüýÕ¯ßß®x.Ep»ŠâpùöÕ?^SÏ=¼Š¢å¿Å7ïÞ¾¹ûîŸï_Ý*¹|¸{÷öv¥B-aäõ±ï~xÝ»¿ýøðýÍë‡V
+_R
+á×›ÃÅþþ& „N¢Å3<„Óš/Ž72A$…p=ÅÍýÍí„Þ[3tJs‘H‚(ájBuœ{ªc‚I,’…Št .Œî¶/ezÌ7·+Éøòü¸M›¬¦‡ç¼(°%–eE=EUî³µ×ýŸnY²Ìvç:Û‚ò”VË»½i–ä·ªÌh¢CjçÞR˜jKi¹íF€Foæñ-b„±a‘ßüÓÎ,¹Úªã
+É+G±b,ÐQÄI°|‡t»ì”•‰&öÉ€'<²WM^•·+©e^ã¼Ìí3H÷h%Y´}F<$ú¹:ŸÊ´ ÞŸÂµIH²¶=¤ß-u6u’a È6 u‘zLXíÀ†[¾{⢒aÊÓsnxF›E˜Ã16hC°e6vC숴|¡Fö)¯›¼ÜÓS+)>8I±M’bkm{H¨cõ„f1ðJØ©*Œ¥Ô¤U·D+ʵL|£¡-ãv*TEýR‚=Ça¸ü°ÚYZ~´OdQäã ¸úDØ*‘ˆz‹p$‰Ò–hjš(ÐJÅ–`S¤u=1ˆÀÿ¢ès§yʳç)fD [ˆèãÇCõ
+¦
+Ì©·%©·ç"‚Ižôô{oô ½âÚ)þ“ßC£5|pæ‚í]u¢FJ„A·l¹!gšô=2p°o)Éq¤°Ç´n—°Më Žkf ÈŒp”?q.É&°EÓ´ŽïãÃý˜mrœÊ¸„ˆU7Eçî0¶uwolZÔµ†N
+˜é-ý>+ªU%b«h
+±˜ÅÈÆbÞS•oëé—Yf¦©\(gŒÃ×–îXm ¾nœeàËü謦B§Ú€êËÅIÀ8»ßød—¬¥2N“6õh]¸)„¾²®£¯Û÷.)ƒ„Möþ7¦>§¼q'LvzÊ,ê Oh󛺯÷VuCwR_Tä5LÅ׎'ŸlF}Ž
+¥øõœ^Šj?áà/cî?€I&{ª)…;Ÿ~žò$
+
+;Ù6'ÀÜØ£º¦s`®°
+R37µ1k˜Õl‹âeï^:®üU@óà~‰§yf‚—¬þëÔj0DJÇØè†R‘zZ7!õ@7E(ˆc™ÔýSsRc@À¥RŸ£±HC¾¹/£´Œ
+/'¥TpmkOÔ–”?ŸÒ¶‰¬™h"‘EÎæYÉÀ½!e¸fƒÙŒ :*ëh§ª‚X뢱‘Ÿ$_dkê’­qÈ6#²y‰Zª±Dýd’'X–}‘ÈÖ„L\ICm ßàçíæÉléé©
+ïÑäCà(üšã{d3Žï¨ˆÑ¢ùÇŸe sü!ßç€N{îsÞ%ûЙAß9~AÉ¢tÈ–ï­ƒ# 98
endobj
-1329 0 obj <<
+1344 0 obj <<
/Type /Page
-/Contents 1330 0 R
-/Resources 1328 0 R
+/Contents 1345 0 R
+/Resources 1343 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1287 0 R
+/Parent 1302 0 R
>> endobj
-1331 0 obj <<
-/D [1329 0 R /XYZ 85.0394 794.5015 null]
+1346 0 obj <<
+/D [1344 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1328 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F48 1238 0 R /F55 1321 0 R /F21 938 0 R /F41 1218 0 R >>
+1343 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F55 1336 0 R /F14 976 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1334 0 obj <<
-/Length 4158
+1349 0 obj <<
+/Length 3792
/Filter /FlateDecode
>>
stream
-xÚÝ[[sãÆ•~Ÿ_¡rmU¨ª!Üw42Ocg<«$;ÎÎ(v9¶k $!5$ àÈJ*ÿ}ÏéÓݸ°)iw߶ôÀF÷A_Îõ;§!~Åà_i“™BWy¡2͸¾Z^±«-Œ½Å=Í2-ÇTßܾúú;™_Ya„¹º½Íe3f-¿ºÝü¼™Ì®a¶øðö?Þ]/…f‹Oï>^k½ø~Üó÷y÷ñíu®·7ßøt½ÌY¡ßþûÛ¿ÜŠççøöûßݼÿë0Ïõ¯·|õî6žb|RÎ$áï¯~þ•]màÀ|Å2YX}õ
-}©½}Wo—ûºëçÇåRör{5žôléHu¾¶£µ¹‚CæŸ.þg\w)Œ\ô»ŠMy¨:j¶wø+å~O·ŸnÞSësõè‰Ö§ãñšÛEÕôûGßÕ6¿0&¶'ØPï]{¤éN_jõˆg†òÑFE^d\ ÇÃâv6žl|'–HU74cU®wÔúRW×…Xdø.JN-Œ†ñ¬ÐZ¸×nÝ¡A÷öÄh­Ú~G­®/ûz g¤çÄ© ×3Zeã»6°ézM·z÷îcÙTÛ¶¯Ë~üb6—yP¤œçY.FÛFTOh[ ŠÚ¶©öU_Sµ½bl&”âž©°Cä~BFJeRJëé~NÌNƒçÚ8Y$$-³혈~óBûùÓ̈Tçܘè‹E–3°ãĉ¥(ø¢¤Ÿmý¥j¨9•ôc¨qçT¡=Й4ºêø¥:¢§dñ ÓìvW£¢Àt› Ìi%&ãÖäS­lZ¯‹åý}P¾¾ýŸ(¥·Ó e°<¿¤i&×™åºxZÓÆT—5-Rá)ÊÍæm“Ò2•gV°ÜË} šÌ â²6/žP1yn<Áz_v]bðŽÖhýÒiMnfª©¿&¦­*¤&b¹«A( ¬¶™³^‚ÔeúiÞGªsæÏ!Ï F¨ ÷ßn@$g¨Õø㸼”¬X<ìê}ENa±áÖµQKñ÷xm§¦©¯ù¢Ùz/*„͸RjîEf›Ž}84fAù÷SM O‚kž»Ö:: Ðïö¬îa‰ûîîßB@*ˆ­½w|¦ZZ~UÑsWõÔç’Õ-¬ jö˜\‹DôLZŽ¹ çÐr¬(:S̘KZ0›d\d kÂÏ®?ÖÍ6ƒdî«uîL;ç wÌÜË;žçÇßíD2¦# À®Ág”žm0ÜW¿õᲧ¾‡ö´÷·Nˆ›º)µó=0¼r€³úÝ“K½ß—ëà‡jj5 Ì?²ÜÅ÷ 9•`@•<×6ržœ&™a
-&¦È‹!”KOj;û^ÃoW~©`pã{ý(š‰,øæ>LZ ÇDÈÜ™Ep»²Û%Ž9õYóÔ‰( ˜×¨Z,´"“I¬- ¸ÅÈ‘aéé¬y&({lÔMŽ¸>>Þ÷íöXÞï£àH˜’+v¶USCø³“¨gCÔ³N’Ôr¸q<4€±%`îÅ»ªIáƲÜXû<ò+ Ÿ—ðN¦/°Ï×#ÿ†ƒA¬Ø~¨š…–óE¾Ø·å&œ­nÈM€¯ÀŸK–Oµ»ˆÑi‚¶½öÚloMš\p7ï|¢¦€¿ÙÓY— 5î«cÑiy×£ŸvMú;‹æ8±‹Ú/Ú•‡û}Êùj™œ§5‰ÛÆ+ž *œ[ð;x ï)è áÕpð„p™gÊÊ üÕonà
-‰µ§È´ogKlª»ò´ïÑü>± h7x
-¼!ôÓÆõb}{æ
-¡ŸæLù2ôafØ·ëø‚òÕ/h¤ Ø`¶©'€@gfFIæ|cj€:Ю»D´y&uÐü¯«~ý5.v [ I¨ :uWX¶Pfª*«ž[‹`L匦¢î;"¼î`rÓD¼(T1plŠ¯Ë”ˆ°e™â¸<¥¢«¥,1#lxs7L~!â©!Àv°~*Ï@ÇFÐ× a:ìh +¦º$T™©\„M<üC ‰­}Û~¦V2¡ÊU¦ ×g"Å2U2sÎYŒ…$Ú#Mþ
-ßÜ|øÃ…ÍgÐ{uªÆDw…³
-{^þBp‚‘ˆ‰!AWóBƒQJŽììŸ4¸bòÈ'¯ÞYãâã´ºWô;ÄÄd¡CC
-ÍÀy‘)NWA4vÜ^Qããhòå˜þgœÍŠ‹ªÖƒÉ› FÎ.9
-œy£YÊ
-ø…ár‘þÒ…ƒª
-m_ Û‚¤¼É->Tqè¶ÐÊXÆ9S"€Å"ÚÄÅ‹ü“£{NÅŠÅMïÛ=‚Ûû-¤ÈÈÙ5p¸8÷䶅i,ç„‚ýeÌùÖ eÌðçD’3–‰[-•k¬y2ý¿¹b\*üðƒ.ÆÝ—Ö$*¹ ?c‹§]àÀúX3<ºkñ†ÛAuN™c¼«÷Ÿ—à3nüuH‰-U«<Žvq8¹()|AE¸².þ|)÷õ†š›öP:{*šÚÌÚÓvGÝuO¤MUù——á|ëþ䋲£Uv5¤ÀŽAëÊü ÂúÝÉ¥R†}ÄKmxy_®Rð!T‚Í*+,—3+™$‘0 Ã[|Í‘|(ðâߦ? \Æ—ã)Ï/+8w.Ì+?¡Æ“ÏÜY'u¥’ƒÀ É—«Òþ¬@ÿý¬?c…à  ÜEwþÐRÏS@¦2*Br¿màoR·u†Kêb¶%uL1©©R!UpBŒ>¾
--Ó;òYû°—ÉÇ…Ñ…ÛöL°ÂJšRñ¼L‚ã0±,í—àãÀ%|àîÓI)˜OÕ°ƒrl¹â2’ ©~ .äEˆf±ø‘¿
-(s^ŒÜš±üG@aÍ\@áDœŽ %qÆvMŽî>6uMhx1å¾ä9 yPëzZêXùwÔb¯áçj|‰öàé.ÒMé+>pF8´M€ðõì³… ÅÇ,*ænØ ¨K²¢˜ñcò]M¸xò }ü-²ìîq–èŒVš‚xPV?{o>ç,?£['ŸŸ6p–dmž’ž2Méjý£ÂØÛɇ>äÏë¦>¸ ÜKuÄ›±[÷¿dí]êcæjà¶xTK÷ rà¿âÓ?ÝvÃç¹ø¾‰ áë«7©
-û“_ì7³JòéÌÿzséÿP¤ÎðŸG,nòÿü?*Ã¿î ¨²V\øÌ#·ø1• ›Âsq¶sÎ2!¥žoý¿EË: endstream
+xÚÝZmoä¶þî_a²¼<‘"%*)
+\ï.É¥ÍÝ5ç¶(’*¯d¯]i³ÒÚç4ýïá©ÕÚW(ŠÚDQ#¾ÌË3ÏPËÏøçç*cY!Šó¼L%\¯¶gÉù-<ûúŒ[™¥Z†R¿¿:{öUšŸ¬ÈDv~uŒ¥Y¢5?¿ª~X¤,e0B²xóü»WK¡’ÅûWß_(µø \ÌýÛw¯¾~‘ËÅÕë·oÞ_,ó¤‹ß<wå$žãÅÛ7_½þúÏã8®¾={uåwî”')náç³>$çløÛ³„¥…Vç÷p“0^â|{&UÊ”LS׳9{ö'?`ðÔ¼:§9xÌ2®A…‚iUÌÊäŠhHÎ2)FíJhWs¦ŠB{)Ôn?”áŸn•óœÉLñópÄ£y½ÔñÄBs!˜”™Œg~Ùô»Mù
+÷º¯W‡}ß´·G®›*ˆ¦\?>µ—:ž;v] ±™ƒE£É_¶»‰!7MoµÔYÿ|¨÷MÝϘ–'šºÐÖlm¹­«ãBäK-S+å,Û&¥·Ãæ!°’×-¢=m’ vRäÙ& ¤1‰“ÂÞ•›¦*‡¦WÊ’dñC×þÚÝÜ|°w´C¥"`PL‰Âmñ®©ïI˜1FâѬ‡Z$¹•þ0Ý ÈVˆœ?¾C/u¼Å8´2ÅŠDËx¯Úòz&çèxOתéÇΗoÞ¿õ‚Ú£B n%„[3þPp¦Sí
+¾* oª8%^Ãæu7¬­hV°÷‡ùdC½VaV­`ÑÍŠn®þðêo¸Že[ßvCSá‹'½Miˆú'½-”:ím^Ê{[Uoj‡
+Qû36’’¥iêǤ[æ0e
+Ér!òǕ᥎µã…
+ñ‰êS°z¦õ¸î½Ô±ò'HÕ Öf‘öŸW¥½’.DšÓ¤Xܯd ØiÖaM½¯û ½8´msÁí­…Q!4ã˜~ä¯Î³sØövK8˜e–þ|h¨aEpÎîVÊ#øwwaw¿¤’éÿ5”B:³u;â{f‚Ž¦7\
+>qÀC&
+f=¸#ƒ†! ¦eˆcøhdcK©ÒÅ_×u;G’„å™þ„‚´Èx¸;œÂ‚ÌPîa—¾áCgVlß7†ÎBË D‘/6]Y¹½5-Á`]
+Ì"Mò86}¥MUbœ‚·]ÚDݹҼ Î-úiç}t9Ó…ÎÊ…ìj(¨=-os¨¤Œ9ǪÛì›ùpÌ©°ÀWTnw›9ðUŠeyâ@+ÊÛ‘â%g"—pàæp·a‘‚ö09”2|„ùiΤö5\ýѬ `;3wLM‡îÄ–7Í3‚wr
+ýT€«ÿ œÈUΠÖPOøš“:v¶¸ÈIR|*¡:ÕL™N{@ˆ„FCº«×4'yàýµÛ{[kHüŒmï°æf(+sãFñoMjiŒ„å–ö¨ÎŽ`>ÑAÛðL¼¶·ý3­FÜJR© J¬)›õtNÙðÄïJÛë×k^ÙÓÕ2`ßÿM©¹Z—MÛ“ûá}ãÆ:&cú[ºRÑ-3¸ôhfé6+kÔrm•Û:wE Ëþ::þYÕ$f¿ÄØš­'Q÷.B:”Õ)FˆsK<*´ÊXã¡Óä
+á`õ#¤:#v-sÚ‡ëpØ%É–}?Á~T98»ä¼S5+gzxÙѸ B‡¿ØYº†7“#q”
+ž§Âɱ1<†@Ûôk—€eM¸Úå„èÙµaÓzè¤Iβ@Çk?ÃʪÃ'Àn–îÕœ©“˜¢ZcCìŽë‡›0+ÅÖÖŒ'™ŠR2ÈG÷¥³½ÝØ.:Ž…† èD4§ô­Ý7v|•êTh¡•M!¦…ç(Óš4ã,áE\
+„›òŸ8ˆÆv<åׂc-ã(ë¡74I™*¸æø%~’€Í€Ð‚­NÉs@Âä[|J_–Yš,^·ÔU7æ#»‘[•}í^%bPtì,½AëÄ*tb•…Æþ½ìÁVÆvýÑfãxsÌi ¸ì-ýé45Öåô—
+·ÂbŒÂ"ä9æžR!4J7—÷ÒÜ—ïÅ¢™H5ë<ìvž{X’íÖh[Cðƒ"1•ˆÄÎ ƒý\ÏÇ%
+Ôâ°žK*a²ÊwÃÇe Sž3÷硦$ÀK{ê@„h ‰ƒXX.œ½EBAl½1gRðɯ]\hó‚›Ìn®-]Í6ßáyÔsÈ…ß?ÿŽºséØëüú "@æÀŒÆt´ù’~ê‹NËÛÞÞ5ƒc—ôûƒÔø^_n'd—嫤I:°SÇÔc_D ‡snN¥ýª›
+é¢ZUmÊD?ÜÞ•›ƒ•1 ڶƢÀÜ6ýÜ9§Á>OšùÜ1nÈvíÒhÁ;«tX9¥G˜åý7Ï—'—Šñ”=>9ÊÇÓÿ› h|öx
+-NPy‹ÈÊ eà’>`‡ÿ@Í`s®ìHæHÐt_Luû¹õr–rÿû¨OÑH2°Ô®
+W¨â´DXÇSÝfëß묈ýPø.ÞÞ¯Íg]h\Þ
+ûbö‡X˜Ñ<—°|†ùŒ±àSN»XZ´^à”4æÀŸ“qòÛ™eä,—úø`5€Xùc´ßÍ‚c0ˆý€'üážE?ÆÁ„Œ 8O »°A ÞVxãl…#-¸¢Î ÛÀ@ø̶n`J»øì„ò1É„§‘òÍ«¾„ƒ›HùØÁã‹]ÓrFeK?CädÿE Ìýš<U >s‚”œ»eþÇ¿4€/s€A-NYç? ¥nQ&ÅÑÊyÂDš‰™¥ÿ âæWendstream
endobj
-1333 0 obj <<
+1348 0 obj <<
/Type /Page
-/Contents 1334 0 R
-/Resources 1332 0 R
+/Contents 1349 0 R
+/Resources 1347 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1337 0 R
-/Annots [ 1336 0 R ]
+/Parent 1354 0 R
>> endobj
-1336 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [91.7912 411.2559 148.0099 420.4713]
-/Subtype /Link
-/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
->> endobj
-1335 0 obj <<
-/D [1333 0 R /XYZ 56.6929 794.5015 null]
+1350 0 obj <<
+/D [1348 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1332 0 obj <<
-/Font << /F37 1026 0 R /F48 1238 0 R /F22 961 0 R /F21 938 0 R /F55 1321 0 R /F53 1313 0 R /F41 1218 0 R >>
+1347 0 obj <<
+/Font << /F37 1038 0 R /F48 1253 0 R /F22 973 0 R /F21 950 0 R /F55 1336 0 R /F53 1328 0 R /F41 1233 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1341 0 obj <<
-/Length 1558
+1357 0 obj <<
+/Length 3478
/Filter /FlateDecode
>>
stream
-xÚÝXKoÛF¾ëWðЃ„ë}?š“8‰ÔIm¥(#ÒŠtE:®Qä¿w–³¤(ŠnÜÔ(‚Bícfvvæ›Ç’E~,²ŠPáddœ$Š2­63]ÁÞ‹ 4qG©~XÎŽž 9â4×Ñòr Ëj-‹–é»ù³—Ço–'狘+:d+MçgÇ?žàÊl)5ÿ¹£xöúìùé‹·çÇ #çËÓ×g‹ØP'ó˼¯ßœìø.ï—¯f'ËþÛ2*ü~Ÿ½{O£.üjF‰pVE·0¡„9Ç£ÍL*A”¢[)f³ŸzƒÝ–uÊrJX¢,7¦“l`:Fa,ud”#ZpÑš®ºnòª¬±¦tþ§¿Oıָ(fŒ8¥xK—f—ÉMÑÄu¶ý”m‘œqC(üØÓ–Ns|ÌîÀtè·eºú ¦HÎAW~n7žs>ÐœbÛ’,×yÎø•R^dOp’_†ÿ²n’¢ÈRœ&5
-™‚GÁA´•x”5«#¯YUåå„Vm5äáÀÛê¦è)Šê‡Í:ÃÁªÚl’2ý~âø˜Yp”Õ
-F†8¾ór¿ ¤v@ªˆ3F‡ƒ½ŠhúmVTI:¡i‚`´XSJFJe™­œt‹½qz]mSp‹ÀŸÜÔYà^‡A™l¨ƒÆPøvÁì¼ÕÕÍ2ô’—ùwÜU9:¤¨VI±2„Ë&Y­ó2Xü6Ããp¶]ØùMYæåUØÍ›5Ž.+ï®~¬Ò´ŒUp
-E¶­ ÖUÝ<Åùgüƒxª÷èvQ†d!Ú #F°lè{V þ¯“óeØHÁP¹÷O;Åp±3úv*-%œs6ø(§
-&‰6|JQ"™¶ɪœ8ƒÉœ÷ã¡ÈÄ) †4iOåUô÷;4Zmx WD+f÷£ü¼¥3-ÂQÚð`eÁ(B ŒûÄt••GkA¸±2_#’¯¶ÉO¸Í ï§=P?ee)îpo…ñ~BŠdÊC  ÓZ”¹/K*MŒ%&g<È;¿=ᮺD ¨óðaó·“¢®ÐdBh"9ENš××Eâ•f<$&à>[Ô¿¾®ÊÔ›ôÐ’Œi€rgÉ>Tu‡ª…ë‡ØmL<ôÇ¥2k ,µ©V’t·0aF f |ŸöÒ{ÍèˆÝc©5ÑqÑdÛ2iòOx1U-þ—ÜÈ}‹¡ž>¹uaŠép
-lŠΧ°ÖòÅÉ„Šê!í=ÝZÀG|býæ:¤ˆ CøÔ¨Âi:¤ ècbŒ¦6ó„TVáÀM•æ—w§YH´Ž«‡˜]sÂ}´#iÒô•ôFë- uVRF„ ±P„1ª[6ßBòE ý´ŽùU™L‚ͧX ½“ؾfÛ&É[{³ùÛ³Ó_pT~˜ð¾ôÂzè0XW<=iW<ýv…Mò±Û½ÎV¹7à
-çɪíùž ]RãjšÕ«mþû&(Ôåè´½ªéÅ(22Õø-×Y<5¸Â
- 48ûžÂ)(¼wà½AS
-²ð™ÏÄ»O†Ù@ù¿
+xÚ­ksã¶ñ»…&Óò̉Á›dóéîz¹:^Ò;ç2yt:4EKœ£HG¤Îñtòß»‹@R‚l§íèƒðX,‹}ƒ|ÁàÇ™N˜ÌÕ"ÍU¢׋rwÁ˜{{ÁÌÊ­¦P¯®/¾üZ¦‹<É0‹ëÛ ®,aYÆ×럗¯ÿúò»ë7ï/WB³¥L.WÚ°å»—C#`JëåGñúÛw__½ýþýËËT-¯¯¾}w¹JY®`åÓk¿ýî͸îÃå?¯¿¹xsN1=)gðëÅÏÿd‹5ø› –È<Ó‹{è°„ç¹Xì.”–‰VRú‘æâÃÅ?Âɬ]㜖Y¢3‘FX'ø„u\ò$32[¤:OŒÒònß®ËËl½ìëM[·ê¬Ú¾*å]±/v4Ðvm…ǤbŠT‰D±T)Û%Ï–Õ®û\õ´¬hé¿ú­î‡€ý݇7¯%5ËmQ·vM Âr×¥GSô_ÛE‚-VܨD
+- •%Ê
+{=Åp Òz“°Q1Ð, 74Ž$áhAÝ~[¸9TUIýáâ<!¬h†
+Oä}mµ›qà_ßQ«éºOÔªÛ'R0¸†›“+ýT=Än”%)K3ý Ó %‘߃ÚTh*N·0à¤òRÓ?ô(.ëzÁoD’¦šûã=!_WÈËÖZ»WÕR‹ì4^]½û Éô£y:gßÍ¡nP6ÐV!V13¬dZà8.X1a•òô ¸m”’E;Ã'Í`jøäÁYjÜ|SµÕž (ß<Ðÿþ2[ZëÅNEƒ (ÍÒÉþ+äåÙ«WE„¸aNÎ-¢Ã#Kûr_ßÀþĵT&¹Ðù\-Ib¦ñ.Sæ còDÉÌ §¦ÉýfA÷×àWÓäÚgÊv‚÷ÿP•£Ö›õ =©N¤a|FÏI€ ž¢âR᜴æsÅç>ÚZoi¬‰Þ¡ãœ×- ~òÔ…”—
+°®þûzW7ÅÞ-ï<Žt·1[¦A…÷JÓ»j}Î"CÜú•‹¼’¹ ã‹èØ\úd÷®EŸLG<ì´€m”Ü™¨~
+S Uô}WÖè*íÝ8t&r9×dòT™™5YŠŒëiÆFDøO ©c‡›u[ۺ܀>ÐàHtvUÑ:ôéß>rhiyî€ììøÚFX
+l„U¡³gÜmν
+åìL( é(c†?u%)c‘+±»ÅRbÐÃ<eúÇÓx蜻œ
+Ñ’÷*`\MQÚtsFš-= HÍØ#b B)CœhÏ:+,Ôõ¦è’\½*nÏr´ßOÚ3– ±g°…»hÎï;y,ÐTF…P h6ÝìÍ.²©J!ó Ju6Û’:¤‡˜ÔT1—* !FýDnü°­}YΙ•ÖµÉrÏŒR¤¬g–wž·‘ž2>¾ƒVQ–ÕÝàÚí5‚Ø*MÁˆòé•2ÇѦrÎxæ ¨tYöx¶Cã0SV>Ãç6û/5c»+ÊÕn­ã÷‘‰s8уk÷Oç…&~@ÃDê()›æœ“È  ¿›¢¯VÆ!­Ú²s*ù‡À}¬Ö; ÞýÚ½Ÿi•9÷Ža!Ïrî4Ç´ü‘|#7RGB²1ïÉR4LúÓ8Æ=Nžso<‡ð9Íåã*š%Y®eœ"—µ´¸ƒ¥Ê*“þù=ᬰҀª”?3/ ÈL¨K[Ç%øÔq ç¸à—`.UÃÊ °e«Ë2¦jøÀ)äÙ-ÃâGúŒ 0KÇwÀfV®±aí6Mà!Âb!ó:kF3¦¯­06MçèL¦€wÎó‰Y3?ÃX3f
+ãìÏ´äÊfÐ
+…Ç r÷-Ðú½:Þú’×#«­NO7ÁW÷&&e lÛP¬¹?¸Ðlú€I³s&°J%ÉÆGv¡Ôÿ “a—Û¥£ù@u&Û@çp¤9¤p2Éñ §#³b%ŠPÚ?Ë M¾¢þïôGÏ&¸QÍÌ©[
+>}´ Ï׶àÆêÁÛ^èåJ°ëÊ¥lZ®Çžä9¤;B„Ä.–ãŸIAû Måÿ!+WŒ”OI“éb½Î=7%ö¾Mh|þÏæªø>ˆd~îYRgÀ©coëÑg‘†Ú›+­oì§f¸ƒK sƒbú¹jkŸ¹ÁœK…èÓ€(b×£±^c¦µ½³(“¤Zªã/ `#úhvxèömÇ~]×kš¶_ˆ¸B®Ü÷ø‹‰uÝß5ök)û¢ž/\*ÚßuíúÌg
+ø‚š ¨‘(<KŒÌcÉÔìè§!WWâ®V
+#„! ÛÏ(äåcD,zé>Bª?ãwiœszp‹}/)u‚9F>>`!äøŸ¿¥?1ÅI–‰øW ’J‚Qx".)]ž’þ]Mïþendstream
endobj
-1340 0 obj <<
+1356 0 obj <<
/Type /Page
-/Contents 1341 0 R
-/Resources 1339 0 R
+/Contents 1357 0 R
+/Resources 1355 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1337 0 R
->> endobj
-1342 0 obj <<
-/D [1340 0 R /XYZ 85.0394 794.5015 null]
+/Parent 1354 0 R
+/Annots [ 1359 0 R ]
>> endobj
-126 0 obj <<
-/D [1340 0 R /XYZ 85.0394 490.579 null]
->> endobj
-1343 0 obj <<
-/D [1340 0 R /XYZ 85.0394 463.2745 null]
->> endobj
-1344 0 obj <<
-/D [1340 0 R /XYZ 85.0394 433.7571 null]
+1359 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [120.1376 668.2829 176.3563 677.4983]
+/Subtype /Link
+/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
>> endobj
-1345 0 obj <<
-/D [1340 0 R /XYZ 85.0394 421.802 null]
+1358 0 obj <<
+/D [1356 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1339 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F48 1238 0 R /F21 938 0 R >>
+1355 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1348 0 obj <<
-/Length 69
+1363 0 obj <<
+/Length 905
/Filter /FlateDecode
>>
stream
-xÚ3T0
+xÚÍWKoÛF¾óWðHåvߣk8ŽDvcº(æ@“k‡0E¦¢ÜÔÿ¾C-—ZYtl¤Bè ]ržß~3œ%1†‰…DÒP+ÑÀDÄå*Âñ¼;È(“y¡,”ú%~~ÃTl‘TÆùm`K#¬5‰óêcÂC)XÀÉòäýYšQ“«³©Éoð·Ý_\ž}8IOòÅÅò*Í6<9}{r™{‰—mœ^,ß,ίwvÒOù»è,Ÿ²3%˜ )ü}ü„ã
+~aÄŒñWØ`DŒ¡ñ*â‚!ÁóOšè*úu2¼ÝªÎ"G0¢LÒè(  Ó cD¬„A’Q¶…î±{p¹•EëëT'íè“z¥ƒÛAqÝVeVvíí³bT
+*†$f|TÚtN´··xøâþGUúã
+iitàÝÛÇÀ!ÄûøcÚØÑl[¹EÛW]Uß>ÎxÓ
+aCÅh¤-V¶BCz3þ$ETJ/ZŒ–‹¦Aj„ #¤3Ž b
+ðΘ@„`5q–¦ÁxVßµEÓϸÂqF92²”NízSÔ[¼Ir½\üîVý¨
+ùÐ[÷|óy\ 錢vý—]¯;§±)îýÛ/¶¬
+R¸xãßÚÖ¦íâ­¿C– )×þpî릙•h$öŒ)»Õ
+˜‚žV³–ˆ¢b©(âP_¯¨f¶-|¡÷«ùû´|h߈Àéa°5.½Æ¾©Ì§”I‰¡UH½k!ˆ†"¥•Ž¥äPÌ‘ïjqþöúò)HD¤¤`qhñß9™œ‰rÿ%"Ciì…y:ð¿ßQd$§=žšÐ:%:±E5Ó a`«ïè¾ã8ëMWTOB©
+(ˆ¢·tã`!æˆ@2ÃÂ
+€Ü}>þW“c2˜kD£/0X¤À‡g0|íß?OáÀäÑ(|æ<…Ã8_Má²±¾UN_RO@ûw½yžcGËô‡ãØQ»$|±Õ03}›cÌ ¦%ñ[,óç)X<Å¢œ§Xæ@±£eú£PŒÀcE$Ìd0,ªýqü`,‡Qò‡K@&`~ÐÚð¹éÇ/vÆ×ÞvW(˜œ™ÖÏ´ª4 HPúp>`ËÑðƒ«Œ¿Ux± ø
endobj
-1347 0 obj <<
+1362 0 obj <<
/Type /Page
-/Contents 1348 0 R
-/Resources 1346 0 R
+/Contents 1363 0 R
+/Resources 1361 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1337 0 R
+/Parent 1354 0 R
>> endobj
-1349 0 obj <<
-/D [1347 0 R /XYZ 56.6929 794.5015 null]
+1364 0 obj <<
+/D [1362 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1346 0 obj <<
-/ProcSet [ /PDF ]
+126 0 obj <<
+/D [1362 0 R /XYZ 56.6929 741.6375 null]
>> endobj
-1353 0 obj <<
+1365 0 obj <<
+/D [1362 0 R /XYZ 56.6929 714.333 null]
+>> endobj
+1366 0 obj <<
+/D [1362 0 R /XYZ 56.6929 684.8157 null]
+>> endobj
+1367 0 obj <<
+/D [1362 0 R /XYZ 56.6929 672.8605 null]
+>> endobj
+1361 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1371 0 obj <<
/Length 2407
/Filter /FlateDecode
>>
@@ -5021,29 +5084,29 @@ SDôçÃÃ@x´»'¡w˜+ "1f¼ù¤È,Üì£ù™0Ž–ïé3€>5áwâ„K¤`Á.ä›&‘¿——0*«í* {ÿvÖœ¦º
΄£Màõ¿|ŒÜHÖôA-08×I@t98ÔÌÁˆÏùMã혽B†·Ã³å `æp„²Þ"°q—o—^ÇãsÇM´^„ |UÀ1øXžÆÛŒØ<âr“ü–«üû¦GŒ—¼{÷Ö-m»ðhŽ|€Jä¹ùç_4’ÏŸï>~xEë·°•z…)AÃK,¹pÝ׶½ÿ¬&TdÍ9³à¤Õ‚w:|d…êäÛ£dZK&œÈªVŸ±*Œ£_KSÐ=5m8#<ÌÁ,–JÍ#D±”îI—€-`ñcóÝÓ|Ä—×Ç:—üK³›”Œ üs
ý1àÖº@TÿyÀp.ª…aGØ…~æII¨L>óznvFš¥Â¦ˆBE D¨3SÏ>º^÷µµ^endstream
endobj
-1352 0 obj <<
+1370 0 obj <<
/Type /Page
-/Contents 1353 0 R
-/Resources 1351 0 R
+/Contents 1371 0 R
+/Resources 1369 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1337 0 R
-/Annots [ 1357 0 R 1358 0 R 1366 0 R ]
+/Parent 1354 0 R
+/Annots [ 1375 0 R 1376 0 R 1384 0 R ]
>> endobj
-1350 0 obj <<
+1368 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
/PTEX.FileName (/usr/local/share/db2latex/xsl/figures/note.pdf)
/PTEX.PageNumber 1
-/PTEX.InfoDict 1367 0 R
+/PTEX.InfoDict 1385 0 R
/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000]
/BBox [0.00000000 0.00000000 27.00000000 27.00000000]
/Resources <<
/ProcSet [ /PDF ]
/ExtGState <<
-/R4 1368 0 R
+/R4 1386 0 R
>>>>
-/Length 1369 0 R
+/Length 1387 0 R
/Filter /FlateDecode
>>
stream
@@ -5056,12 +5119,12 @@ qª„Ñ«ò^ÿï>‹«>÷— .13×…Óƒ!¶3¢SËAÕ”ih¥Å¨Š^…(€<Îm䦽ªšÛÆlLÊâ³ò7Ù
n*Œ1½÷¨¾x¥Æˆpîâ‹&XîÃœ§³±è\íD¤ßä0}#XŒûž˜‹¸À>#^V°¡|2Îi‰9ÊÎr)`˜¢Xh¡Ò& „hb—H°Œe"Ãê
þrÓGçX5¾ûû8‡´ÕªOª«t–Ô³$Ây°‰—BÒ›ÀÄ5©/¨vp÷o`kA“ôr ±ñœÓ4N.4Žæ
endobj
-1367 0 obj
+1385 0 obj
<<
/Producer (AFPL Ghostscript 6.50)
>>
endobj
-1368 0 obj
+1386 0 obj
<<
/Type /ExtGState
/Name /R4
@@ -5071,968 +5134,1043 @@ endobj
/SA true
>>
endobj
-1369 0 obj
+1387 0 obj
1049
endobj
-1357 0 obj <<
+1375 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [470.3398 467.2776 539.579 479.3373]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1358 0 obj <<
+1376 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [316.7164 455.3224 385.3363 467.3821]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1366 0 obj <<
+1384 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [304.6433 163.6578 373.3153 175.7175]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1354 0 obj <<
-/D [1352 0 R /XYZ 85.0394 794.5015 null]
+1372 0 obj <<
+/D [1370 0 R /XYZ 85.0394 794.5015 null]
>> endobj
130 0 obj <<
-/D [1352 0 R /XYZ 85.0394 769.5949 null]
+/D [1370 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1355 0 obj <<
-/D [1352 0 R /XYZ 85.0394 576.3463 null]
+1373 0 obj <<
+/D [1370 0 R /XYZ 85.0394 576.3463 null]
>> endobj
134 0 obj <<
-/D [1352 0 R /XYZ 85.0394 576.3463 null]
+/D [1370 0 R /XYZ 85.0394 576.3463 null]
>> endobj
-1356 0 obj <<
-/D [1352 0 R /XYZ 85.0394 533.5444 null]
+1374 0 obj <<
+/D [1370 0 R /XYZ 85.0394 533.5444 null]
>> endobj
138 0 obj <<
-/D [1352 0 R /XYZ 85.0394 299.6823 null]
+/D [1370 0 R /XYZ 85.0394 299.6823 null]
>> endobj
-1365 0 obj <<
-/D [1352 0 R /XYZ 85.0394 263.0631 null]
+1383 0 obj <<
+/D [1370 0 R /XYZ 85.0394 263.0631 null]
>> endobj
-1351 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F62 1361 0 R /F63 1364 0 R /F48 1238 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1369 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F62 1379 0 R /F63 1382 0 R /F48 1253 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1374 0 obj <<
-/Length 3442
+1392 0 obj <<
+/Length 3579
/Filter /FlateDecode
>>
stream
-xÚ¥ËrãÆñ®¯à-PÕf0˜Ar’w¥X®Dv$åQ¶÷0@^  P\íק{º
-öV%Åü{zúÝ Æ«~ñJ¥aš‰l¥³$TQ¬Vùî"Z=ÃÚ_/bÞ³ö›ÖÓ]ß>^|s#õ* ³T¤«ÇÍ– #câÕcñs„2¼Qp{÷þþúï×w—: ®þv¹*
-~úáîšz÷Ww7×÷4ü%RÑínî¡/×R'"xÿÝÕ×÷´ž0Ô«ÿºŒã8¸º{ý–>Ü1Œ›ë+¼ëñŸ÷×—¿¿¸~5}xI|Ño?ŒV¼ÿû‹(”™Q« ¢0Î2±Ú]$J†*‘ÒÏÔÿ
-Ž@Õ¦.»Ž†Ý¾Ì+\'^"Ö±Qa¦AžgÔh{‡ª(Ê'þŠž¸~Å—dF$óQðT5öÀôDÛž—›‚‘ڶǚûMË«O ´,*2èïlstx£™
-fa¢#å°&$S=ŠôO•SRèÙºk©×æ¹Eþ±Hã®CÕóa´˜¿‘ÇÝ[²œ¸Ò{øy»Û×e?Œ‡¾cØ›³Í$Ï ˜O©!¦ÃL庥É8‘Ê+p&ßÍ Sh\Ú(Wp©{]vÓ;rÀZió-ï  ÉwÀìH
-M§œìW ’bb0JjjþyoGó Ïì†!¼B‡M>R±þÀì蔇J2ز?Ÿ:å¢1><y¶ô~^ÏG ÔéK'QŽd¬uÉ|Ä›é`×:6g^^s2Ù4¤†mch+àÏ5M÷Û–,Ä4ІAÛÓÔÁ› GéÏ&au1Ñ|vúä”'cÕ€ 0¶G¾há‰1÷b<JÐ4Ì"ö r1áâô„ÆœŸsºÃÛ9»wø•Ã¥SËFyj¹…JBˆg½é>4ß)É~Áˆ'"”2ʼ¥'Û£L蹨Þâ[Œ^Û#u¶öÑ3ìAafGÔLù¿li÷H3„Xîð$b|7å&œÙ´£w‡½ƒ×-Žƒ8˜!zÄ^{øôg°ýFªÎ>Õ‹|0Œ† #hD'Ø!<q‰²Á·¤SHsÑ3ÒãÑÍ¡,¿p~ªÔ´t„à3ðåºYac8°DàôdÄ‹¬Î.súˆ8òiçR¨dqúÕ<(ËD›¼œã F€[‰1æúS¿:$‰Bx÷$€ßy!&i/dù×9¹É^xÎvÆÁý²DÀˆL§spàìi ‰•‰ôW؆±ôŠÜ¤NêÖg“üçØ“Ý®Ëf͵ÐIEQü;":ñµáðèØ–¤‚‹‰
-“ÞÍ(.šÜ‚Û9»ŸÃóètmîñf%¨ÅšŠŒÂL9ñ_fÉ­šÁÄ™xp«4?/sá +tßæ-Ÿu&NZ’…6.-¥NW³ý‰8äâdm¢³+ÙÖCod lzÚwK¦¡¢Œ…J4dÆS´xG¨¡Z4¹F©±ÂT¨¦%!$ÅPÖá9$õΞ?TyÔX˜×’Tpóž&â,Sr<”åyÅ/IUg*]I ¶<RÖÞhñð¼¢Îý¤X7ì_OP±næ8ÞÀEªýü#=dîÚ[„È„*rÎdBÞH
-råE÷ñé8J
-‘ŽP éuñ¶Xƒïz¯B.o%óòT:ìú·Ôt5¤àÀÙwTÔ# ©@ Æu_Ž„}_îö= ¨(Êœ ÃŒÁ)_Á o¯øÒòó¾®òª§2¦
-ŠL ½TŒçÞglJb ¨CTƒe¶®_û°‹窬\ aj3„2,`î©à µ79ZÑq<à[”2°«BéÿUpT(M< lS“ââ…»v°Z1˜°Oí±§DE²Òšœê;ZéJ>î«keë376EÙ凊é0MÛ–9O«Ìœ1âwˆ­T˜ÆC‚•×>ÛþÚ%J‡R%>7àšÒ[ð‹Åiêu¦ëÁÚb
-ž|G“Œ…–œ4hv—š ·Æx©`ð›‘"ìÓ:ÕsÃ+CiqéÛœÇBýKjH늾7I CC“lañËî/{´ZMÙ«NF¡íÚÏåET
-endstream
+xÚ¥ZIw㸾ûWèú½‡.ÉÉÓmg:/ñLlgy³ ’²8M‘.V{~}ªP”ÙÓ‡<ˆµ
+6ÏÐ÷׫Çlí ­;êÛ§«oîd²Éü,ñæiïÐJý MÃÍSñ“ùÒ¿
+÷ñþýÃí?n“È»ùûõV¨Àûñûû[*==ÜÜ?ÞÝ><Rõç@ÿ{÷
+ì´ †wÐn Ð—ÝKÙQù|(›‹n\¼ëª®C/§úÄœ¡?®BñTë!²”¥0“Kíþb™ ¼`ÍpÚÅɾömw4lj2:¨>ʦ IA3‘†Bùy(›¾jÒ(t4$MSIŒªŠdý_›zED ÊIdÔdZ
+ÞÔ¡k.7-÷î˜hYT¤dP>êf4ûF˜ò'&~&EjvM›Œ“Yý |®Œ‘BI×}K¥6Ï5ÊUGuÕÀ“1"*Æã ¿„œØ3Xúy{<Õå0ÕЇ¡gÚû‹Á¤ÏUXNqJB‡–ÊN4]+š9p$•5àLxöK<ƒBA¤±ëª\Á¢ætYèéý`Ø}¥Î<~¨Ð&ß°ÜÏõØ3±á y3
+îlgÛR¡¯Û3"s‡’^ƒ’š`í ˆIo¡dÎß™]PÙ“®ÿ6'É›=~lú¡ÔìXȈ™-R…¶¤W”µ~µôŒe›Eèk„
+ÒÝÐ#XXDË+Ó”Ç~ÐMn$‡Ú§´úË ÊĤ´ÄŸ#`\±TÙ¹ƒÆAâpìÌÚ<¯@ø…íº!$¤§pè…ZX ëõž¬ò¹±ÎüÆ3ç?´¡ †Šx†3h"µV|8uÇÆ+‘w\£qýaŠöÌ[îÌ;ÝŒvÁv곚3mPÙWêaq ¨Là/8ÐÁÝ5àŸNmGÜ4PE*+vcc"ôÌŸÙ” Âðƒ¥¶ýD%cL<‰‘ÍŒä¶Z÷<e&Žò\õïçÈÍ]ŒÙ;Ö\' jÖÇ6pgj¬R`¢Ö5ÎKëÝ—¯á„uuI³_­­·»p£}u¬:Må¬W`â8A%§0JÊ…ÛS;è3»a¯Ða“Tl?Ð:;eÁ¡’ôìÏ]ç¡L4Æ“cKëç…÷<jàÎP9‰z´¢#è`µaHf#Þ,ñŽ­sfõ5'€Ì܆͡9ô€?O¨y8´„n  •¶!§™xoœµ?sÂêb.âùböÙOƦ
+ˆG—2È,Ò6ü  ]ØÞG<Kšx¯íH…ƒ~Áí¥ìA¡åH4uåÛ­iôÌ…t
+±Ìd'b|çJæìÛÙ»ÃØÉëã¤é=b©í>ý°?UÞ‡ª×»zΦ
+j=§’úq’IÇ¥kn5 . '·JíË4¶°AmÞò\y0SS•:5×R*ô5ãOÀ!O ´ .–d¬‡Ò, üÔïÖ ¡¢ ¥hÆcD<Ž#Ô”-r–QjÎð
+´Úl8 <ëfXžŒ (Ñq–zxûȦÐOžüö^þ‡9žï Ä'“’G³¡ÄÝ?õ‘³ŽÞj¶š %&êÀ*½ñâ Wð]Gjä]$’cä„D"é€ FoŸH¬a™ú™®¼Àè™2i+ê‚ó1/=Ó’ Ü|ꊞW°Òâ“I¿| À)%í6N”+qì­xfß¹¥(wF$Œà ÃpbrÁÃÁÄ'¸M¾
+Gg\ªà 8"À`xbílgC‹›d¬.â)h¨Ký©§¢cDߣɑb ÃЯ¿Tš*%„$¼Âî`ªˆ ™qÄgylþ;
endobj
-1373 0 obj <<
+1391 0 obj <<
/Type /Page
-/Contents 1374 0 R
-/Resources 1372 0 R
+/Contents 1392 0 R
+/Resources 1390 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1337 0 R
-/Annots [ 1378 0 R 1379 0 R ]
+/Parent 1354 0 R
+/Annots [ 1396 0 R 1397 0 R ]
>> endobj
-1378 0 obj <<
+1396 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [464.1993 375.6003 511.2325 387.6599]
+/Rect [464.1993 393.2115 511.2325 405.2711]
/Subtype /Link
/A << /S /GoTo /D (proposed_standards) >>
>> endobj
-1379 0 obj <<
+1397 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [55.6967 364.6613 105.4 375.7047]
+/Rect [55.6967 382.2725 105.4 393.3159]
/Subtype /Link
/A << /S /GoTo /D (proposed_standards) >>
>> endobj
-1375 0 obj <<
-/D [1373 0 R /XYZ 56.6929 794.5015 null]
+1393 0 obj <<
+/D [1391 0 R /XYZ 56.6929 794.5015 null]
>> endobj
142 0 obj <<
-/D [1373 0 R /XYZ 56.6929 769.5949 null]
+/D [1391 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1376 0 obj <<
-/D [1373 0 R /XYZ 56.6929 748.7225 null]
+1394 0 obj <<
+/D [1391 0 R /XYZ 56.6929 749.4437 null]
>> endobj
146 0 obj <<
-/D [1373 0 R /XYZ 56.6929 444.9381 null]
+/D [1391 0 R /XYZ 56.6929 458.7525 null]
>> endobj
-1377 0 obj <<
-/D [1373 0 R /XYZ 56.6929 409.3397 null]
+1395 0 obj <<
+/D [1391 0 R /XYZ 56.6929 425.4132 null]
>> endobj
150 0 obj <<
-/D [1373 0 R /XYZ 56.6929 234.0098 null]
+/D [1391 0 R /XYZ 56.6929 270.5184 null]
>> endobj
-1380 0 obj <<
-/D [1373 0 R /XYZ 56.6929 196.2021 null]
+1398 0 obj <<
+/D [1391 0 R /XYZ 56.6929 234.9696 null]
>> endobj
-1372 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F55 1321 0 R /F48 1238 0 R /F39 1161 0 R >>
+1390 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F55 1336 0 R /F48 1253 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1384 0 obj <<
-/Length 3163
+1402 0 obj <<
+/Length 3172
/Filter /FlateDecode
>>
stream
-xÚåZÝ“Û¶¿¿Boáe,Ÿ$˜77¾4Î8Ž_ÛLãÌ”'ñ,Ž%R©“/}w±
-ÛI´»æ&*ò†ú:º¯wô¢)Ú¶¬>Òè~KϜ޽߮˖FˆŸ8ÿñšGM[l¨[6ô¾­©Ÿ¯×õ†Êª-vU¾¦^U´‡z÷©¡ií*w„sÚ ß«²Z¢€sÎãLkaö1±zð½LE„»ÇgYÑó—ï¾ÅxÆ 5Û|QPóÓŒ–iŠÝC±¤Ñ×/®çŠ‰(wô—õb¿)à
-\®UŠŽÑ¬H‘pë.ÃÄÑm±(ÉرèÇ_iðHî8h£{W§á±–FÍ Ø1›—Z¨™[.º¨Í3Âæß_åÁ¥¦À¥¢m nÊÕx¥óÊÛrØrxël9x+íͺG©*Š¥õKøY±È÷ÖËÀ„ÀƒÀ+¯
-ªSï‰gisáSeáø‡-rLÐð¹4¹³iŒÖuý‰ƒ¶p4¨ê)\f$ ^—ž†/…ö¯[8¯[4̵EÏžDÿ¼Ö:¢ª¬ëò%1ÇÄG²x1J·úº¬Ë.ƒ‚®ßµ¦jO½Ø4ežnŸx2ÆUáZƒÄ‹²C—-Žê¾ÃÒÃiÿ½ÛæW¾dæèa©wTvY“’àsȳo&”+Á ˜œfvù¯ížÀfxAÃãTIª¸½~{=OQÆ'gôôHÄýSÕ¸¹':(ä½E€I¼ð š«mÔÂÊÒÖ’x±e#«0«|}ïÆÜn].õì-ƒô%™ÁŠì¯PÐdꤟԇEÐq•lº¨È~XL"ÔÆC,‹>UöT,#ýé
-GÌôúƒƒîLÝëlÿvà\™„ =–u†){ïä+PCZTÒÁ–K¶Ån}Í£G{·g#oÕW«Æ¥>_AbÙ©;–#…iÆêgù4,¬8
-סyË&üà¡Ý,mÅó8qMG,M—Û÷Dü“Å&‘>($Þñ ù¥ˆ”a¼§F±þ“ï
-'®‰ '€ðãÞïíLŸ¡ó—žáÝÖ7§þþÀ ‹›<ûgŽp–ý·$Aš
-wŒƒî¯±Ç[ÿâ=l†endstream
+xÚå]sãÆíÝ¿Bo¡3'v¿¹LŸ®9§¹Lr¹äÜ6Ó$3¥%Þ™=™TDÚ:ç×Xì’KŠ’ìfúÔуö°
+ú[5w—<Ùµ_®‹»rMeaäøÎr ¨£çìÅå„‘¼®Wé N¯÷üÂ4# X€d*yЖ„6E®fðé4ÓR ø8ñ|[„Õå®ØÐdÕì¶Í®èJj«®ô`ÝmÑ…'JZ+j$b":Wz±ì´ªº+w5b™Nê²Û7»4ÙWÝ-v—Ü&e[î@‚nåµ{¬D­e&yë
+–³/êÕ+ò¤¢´†Ë«MUö0Èþß”JLÇ;^›ÍæÁƒ
+ÀíÛ¦íð®x|N]Ã㽺-êéÈ…ì+p=RÙ4Y²-wáqŒJÀ'>·@ºÏgŒH®Ã2\aRlÚ†FA"0¬úÁ ˜EGÜy€Î?ì/"\­ÊÖíÚ~wUªçl+PX6õæ‘´Ž†ÙNM¦ âÞ®šnÖ€zàÍÆÛ#I`lœ½yE·t0Ö´çr°¯×(YÎð"
+ ¶z[­n=Þ0,y¨-¹ÍOÎGÍÖ!šÚתð.¬+6Çîè¦q}©SP}]UOl üëœeÑ¥Ô£›3¯`œØ MX¾ñÀ«¦þ…1ñážÎ¾¦UgŽðÿ¾ÙíI*kBP„ç»/wUélÓ*t9å¶íôæ¯ÉRiLp yÚ³}èo­„„ÂþbãRiž2™O¬Ä,þæ,å—#NO§
+œŸå6ïq.UFö{ˆ\Øl-–ƒxö rT—†LD¯è•Ž«h@Ñ® üŠH%ä€Aj<XR  <ýÎz´8![Âyl9çUve
+ °®‚ê¯÷ȃrP1¡N^~8¢¸ƒP‰Áp_„5WÔÈdÓ4éP°ˆ•©ÃáÂ# :}]nª‡€Ãómwp^O4.´Å n’\jPG èújIŒÕ1"&ºx1)¶3!ßuUœß \‡,`®ï4¨MSÝé „²sT/Þ–~4ª»¨6ôµb=¦3î;ð_{.? Ý2¦Œ»¼“ŽÛÄŽ5Ýü‹ì‹™»‹M`ÁÂ’ÿܱ¾0ÇN8O3%5ù™7—KÃ3þsFÿÁPGYÿ\'nŽÜ×´/)uh·ºQùH#ì*mý*iG.aq÷å¶Ø¼÷kþ ÝE\šUu1,ôY“ÔQñ.µ€†¬&¾m€CŸ¹ËõÜ téË“µ;Ëéúô]#f‡ëƒ‹þLýv>Ê~û4p©¬!?=q7
+3ƒ¾ý4ÆEýùa[î6—<yt/Q\Þ­†VÕ´ÍÚG,?Ö>:¸/íôö99»*Þ€góÊù×#·tÒ¾sõu¤CÞC—rò¤?Þ=ò<¹x¤½ú¼ßJÁŽ¼˜•qC7CKú&zÚvùÜy¤ÿ>×cRw‘‡Þ,EˆOÿÜj<3Ë9Íg]aä°‚ÜoŠÕǾuzDîÑÛ¤HÐM}Ή¶ÇZ«AdÌ8¥srík1n¼U»QCÿ¾K £í¥Ë2(ƒy‚¶Ý¶2–2Àöm}‡‚dÂu0н“>ph =”vÚyœyAéF*m_»îöLö“§ÖÈ’èxTùR>Ê0ÛSöP³O²wo?)5€}âá.Õ)®_ÞNne‰=<ï*XÆCUr|åóà!Q6`×ç 3†pª±î£¾‡ îÚ™KÑ~Bt¥v1º„Á…5ϼ~ÔY
+åk~ðú1yAä! Qwìeë»7ÊùÅ/µ¾8ö–Y
+CEÕ0´2ÂE¥ϦD1ÑÎÊNSí¡ÉNÒv+3&û-¤thÊYÈ6ÙÈ[NÚã3õˆÔ©6Lž¯ñefõj.õÌ‚NgÆ5þ1 J“f"³g4AÐ`€:¯ÁST# NÉÎk0&û¿Ôà™~ ÏŒ}Fùü”# ÌÇ-Æ㊧Q÷œ"#¨Š PçyŠj¤È)ÙyEÆdŸ®Èw>B8*+µ<øIYÅPÇeÕC•ÕIªƒ¬ÈÎÊjDöjè)MjÇðÞox8Ž”£igc¡ÜKùдΘ1ãóë!G>*ÿcYÛ“B 7?¿1gtAÐQ€:¯£ST#MÉÎë(&ûÿZ¸Â¯¡Ä™êb¨ Pç5xŠj¤Á)Ùy ÆdÏß2Ð(}’t^‹Z¤áeOÒ¢yvTù/µ¸XJ ˜³<Ÿ\ö²ÿD!SÔïË”ÿNKEݘôµ4þ+®SVŸ…Îb¦ü—|n¸÷Kÿv¯Âp´.ÛÕ®º¡¯3€ÔMó€_A=’¼iº2 *º0
+L…ÿ1NÌÑlyÙó¨G¯‰ÿ<©EFoc§wòæPdNŠ-Z|lîwçAQÙQ†Î_[–S“V «¤]púÒô1'mî>,hðcdÜ=ü2~àиñ¢ ÞÅ_ÁÉ”pã>3sp¿Ð9¦¸¢WÄÒ²Tkk¦oâð4©ßÇ‚?QÀqâw¬3|³þÕ?ü¹ìàØÔoÖŠy HfR+ò,0…g<tjýwµ‡¬ÿíp~endstream
endobj
-1383 0 obj <<
+1401 0 obj <<
/Type /Page
-/Contents 1384 0 R
-/Resources 1382 0 R
+/Contents 1402 0 R
+/Resources 1400 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1337 0 R
+/Parent 1354 0 R
+/Annots [ 1405 0 R ]
+>> endobj
+1405 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [417.8476 110.3446 466.5943 122.4042]
+/Subtype /Link
+/A << /S /GoTo /D (sample_configuration) >>
>> endobj
-1385 0 obj <<
-/D [1383 0 R /XYZ 85.0394 794.5015 null]
+1403 0 obj <<
+/D [1401 0 R /XYZ 85.0394 794.5015 null]
>> endobj
154 0 obj <<
-/D [1383 0 R /XYZ 85.0394 714.7215 null]
+/D [1401 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1386 0 obj <<
-/D [1383 0 R /XYZ 85.0394 685.6298 null]
+1404 0 obj <<
+/D [1401 0 R /XYZ 85.0394 749.3028 null]
>> endobj
-1382 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F39 1161 0 R /F41 1218 0 R /F14 964 0 R >>
+1400 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1389 0 obj <<
-/Length 974
+1408 0 obj <<
+/Length 735
/Filter /FlateDecode
>>
stream
-xÚ½WKSÛ0¾ûWx893µ¢‡ŸÍ‰Bèc:LKÒ^ ãHDZRË!¥ ÿ½’e;–C§”Nf"iµÚýv÷[ÙF6?dûbÛaì"ßNW´¯ÅÞ[ Õ:®VrÛZoæÖø„„v â
-HÖ>+; :Dá~î©Ú¿"zª{HäKa¾kM´àY¢s×g6±ÿ-+*WÆ°[¤àã¾câdžFdo«ýa…Ñ \-/[á^k›Ïî^4Ô½‡Éë¥ç÷Îs‹ÿ*±¦ÀC Ðͫ鳈ø@~ËÞ.aƒäÙŸL_‹âýS¼bbók*#àEÂH J…¢rýmÕ‡þþÏÄÔendstream
+xÚÅWMs›0½ó+˜œà Y€a|r§m¦“IcÚKšÅrÊ Gïɯ@ ܤNÓÉL‚–§ÝÕ{om›Hü`Óõ ÀtvÍ83y!Þ}4ð´QBctHÇf
+:=øncŒ­éñþì µ¥z8œMí±c…ßNgsû<<2faÓiû4ѪÍKãì™ q¨#Aø®y#â ff8.…®C©Š¤ÆÜøÚ$l½­·jÙÁê =ÖÑãУ„ÖôDqj!+Y•Œ¯¢´Ëù Ŀш8“M0¨‚>Äíàã¤"Ct…FN7=»Õ¥ÿe’¯@².ÀE~1ÎÒÉnóuorTU ` ×%5B¨¶Ë0Ö‡%z™ó›ˆ/dÖ|•ÞMt¨ÑH:è2ïO®
+Ư/t-lvWo{‡ Ý‚Zr*4ÐÂ'ºzªë"ÊÖ)“ÏQšæ7 äѪX2.c?‹V¹¢€‰%Ö‘ ÛºÑr%¶õÄÓÈYQò$.åêòŠñ»M_qÌ
+-k²l úðÌ´“g.û‹F8‹¯x!>÷d[z!¼§Â@ëcýè4Í„Y” ÷B ]­:^#öŠ¤d²Û:Œól¯mGµ©s€ònÝ©¥¥v™¨†ö²Q¿ÈV9¹2ÏÔ$‰ <*“kÖ(–§We£@åÚ§meg@ûšÀ-Vy[ãm™ž­úÏZ-Š4RÜõ]u® /uy抺ԟLQŒú5´ã"=6ôeD·Òü_Æo¤ð¶Áï °Êù^7½M…É»ÍÒî³óêÑéÍÀKˆÅ» À¯d÷ÿ MÞMÝ5šº°ºûj.½¨cç+öÓÎRß'Íí™Ö홌}èø"ɦ©ªsì÷:Wwñ~ë¿ÈUendstream
endobj
-1388 0 obj <<
+1407 0 obj <<
/Type /Page
-/Contents 1389 0 R
-/Resources 1387 0 R
+/Contents 1408 0 R
+/Resources 1406 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1392 0 R
-/Annots [ 1391 0 R ]
+/Parent 1410 0 R
>> endobj
-1391 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [389.5011 743.8714 438.2478 755.9311]
-/Subtype /Link
-/A << /S /GoTo /D (sample_configuration) >>
->> endobj
-1390 0 obj <<
-/D [1388 0 R /XYZ 56.6929 794.5015 null]
+1409 0 obj <<
+/D [1407 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1387 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R >>
+1406 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1395 0 obj <<
-/Length 1076
+1413 0 obj <<
+/Length 1364
/Filter /FlateDecode
>>
stream
-xÚ¥WÝs£6÷_Áä ÏYˆæ)wq®¹‡ÌõBûrw“Q@ØL18â¸þï•°Á–}I3ž1Ëj?»Ò
-dAñCVH
-"ˆˆ•¬&ÐZˆµO¤eœ^ÈJ}ˆ'³7°"ùØ·âl`+0 ‘§ßì¿]}‰ç_§&ÐöÀÔ!>´¯®ÿœ"„ì«»ókµt}w¯ˆ›ùÕ4ðìø¯sÉA8’zDkÆ÷·Ÿ¦?âÏ“y¼‹o˜‚® îiòí´R‘Êç nk#^ @Q„­ÕÄ#. žëöœbr?ù}gp°Ú©š0!nHˆ(€ù Š<b$¾‹Ý”å «ùÔñ!´ÿQ`€| þÝKÅù÷Rf*Ü9ˆÜéfU½¡uz¨n¦EQmœ§–ÕÛ‘t^
-ÿ%-¸Y ”›š–<cµY¿µÓßibPÆg7`®\|ßëDæ/Êœê€ïÀGP^•Š±¬x#˜è S8«Ÿe\’Nªò;„xñ«ò5*ÁΗN+)Œ Õΰ§óC‘d†
-ú ÄQÐ%ÑEÑaä»Ï‘ãÐÿÔ”fendstream
+xÚ¥WÝÓ8ï_ñÔJ$µóÛ§…]¸åqл@È›8mtiRâd—ºÿýf<N7-î‡*Õ“ñx>~3öØÜaðãNy,ÈB'ÉB/b<ròíŒ9k˜{9ãFÆ…Ü©Ô³Õlù"HœÌËb?vVåDWê±4åΪx?þûå›ÕõÛ…ëGlz 7ŠÙüòê¯ç|~ùúùõM]½~GÄ‹ëËEÎW¾½F÷3\™•«w7/W¯f׫ƒÓ8 йϳ÷™S@(¯fÌ ²4rîáƒy<Ë|g; £À‹Â 9õìÝìƒÂɬ^jÃ$
+R/JýÄŠïÛ@‰2/ü@ƒrý¥—]#jŠø‹Ø­P}Õ6ÄØ´ª&?AFÉîNvDçmó1ý‚±|ò‰Iæ¸ï± ü@c";1cóª!«Š>¿ÒÀßã±ÿl釆™!3õø”ùïCõ~àeˆô‘zùŦÞæV;å®[w#;yF]¨Õµ;?è@ ν,Š|Ç%‚êÊó¼qù8ÿ{¹$…Jlwµ$ZÔu{ïöhT‰°"SÑ´D·ÔI8RGÆmKM¼ ,û&@›+…,ÅP÷ôñyÝÞ¸•çR)ÛJ²:5&E³?c‘Yì¤ê»*7&s‘oäO˜t' ¾žÔÅIü
+¼¼Ý>y¤üÉÑ~¿3«·°Ádg ²¬Fžl—d¤l[màâ'ËúQv­ÎÚŽ
+غ–›ÅØ‹cQRtù†p9³e±•cg<îgþω¶’8/À¸ÃC/cߤú|4ºƒ…Ë{¸·XRÖxB[bµ© úü8ž£ AmÚ®G2š¯‡ªÄí[3+û¾jÖô1ìh\-àâ„õ'r“`‚è‡nÁÓ¹4&0+èžÉ$˜€Äɘ8Õ ð®ú½qÓpŸÝ¼¾òˆ¼ém°Rå]u‹6ÍóhÖㆡG,=k.7C'È02‘SaVÞ˺>álDo1!(bú *˜ˆ‚¸%Ö6EU"·-N7F_)€{j+•ªÉë¡ <L·ÁN/ju‹¥Rš;iýÚ#´ñ·Ü›E¢)ˆÔyqU­Ó ¼ûªßEIOb¸ùÂíG>H$¸ZmEWÕ{úTÃnu‡Š’˜JXó5TZ`¼‘&”ECނωC.·Û¡©rI(‘ Æ2Obƒ™vTPGÐÊƃ^O•úp±ê«r¯Ÿ O­'®(e&½úª€=Yæ΄$lg% .À•ñù[}
+ÑKL æ—Ä£´ïéãÓ©
+ñ¦lÌ.Ù´C]çÚ¦§‚7nœ¿\ê}Ÿ¤fß'Ùƒzä’£4>U¹„J9$iè‰}óÆ5 ÃÆž9ò'+eÆF z{ãq’W°»Š8ƒê&' €n¿ëÛu'vre‚íÙD¾-Dv¸ºüò“ôá &^¦¾ýµ°ØKý,B˜yvêùáíú­ëÿ¨6Eendstream
endobj
-1394 0 obj <<
+1412 0 obj <<
/Type /Page
-/Contents 1395 0 R
-/Resources 1393 0 R
+/Contents 1413 0 R
+/Resources 1411 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1392 0 R
+/Parent 1410 0 R
>> endobj
-1396 0 obj <<
-/D [1394 0 R /XYZ 85.0394 794.5015 null]
+1414 0 obj <<
+/D [1412 0 R /XYZ 85.0394 794.5015 null]
>> endobj
158 0 obj <<
-/D [1394 0 R /XYZ 85.0394 146.2062 null]
+/D [1412 0 R /XYZ 85.0394 223.4026 null]
>> endobj
-1397 0 obj <<
-/D [1394 0 R /XYZ 85.0394 108.682 null]
+1415 0 obj <<
+/D [1412 0 R /XYZ 85.0394 185.2496 null]
>> endobj
-1393 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R >>
+1411 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1400 0 obj <<
-/Length 2431
+1418 0 obj <<
+/Length 2265
/Filter /FlateDecode
>>
stream
-xÚ¥ËvÛ6vï¯Ðé¦ÔIˆ
-²˜ð¡”Íœù÷¹¤(™yÌŒ½ pÞ÷“â³
-‡Öÿ8A™G,‘¢§ŒaùX†šÃ? 9‹0q;…s§ðª¢P0¾¬ªÙu.2qÓÒ³¨Ð
-ø„
-ÇRÀQÀUµ7sN}ôE»0Ã%[†ðJÓ9Ã# Ã&|ì,Cˆ=ž}lð²Å¾k*(Â9!qN1󇡲ƒ<…R€–eóPÔw´7EYÒênðfhY°l ‹Ô}Óæ}
-«æ^³©Ôü{Sßa“„ÈÐÊy+mÀY»¡É‘t•N ¢µÝ7ÞÖÊý
- éšµFw‹bïMÓ¹ËÝVuýÊ*õ¹¨öÕ@ƒ¥®ïÐÔˆ­
-Ži#ââèqØ—SÌÀ¶‹‡„Nû®¿E¼œ*T™„ôrü¿xÂcù$À?}ÏýtùäiÄ$8æ1{„’£9·6
-jʳ©d)Y†ÓJ0$4BJ­æ(EéÏ6ó®çgCEu–¿œ]ìz¨Ö{Ó¿¥\YSN¨Q ±û¡=›ÈçIÂx*³S—µ‚Yoû]ýt]~x•ýñ¤1üç@‰ëÅ/¿|¯ç©ù zÇNì¿ ÉCÉÂX|[Õõu¬_ÔØTaðy=Ì‘SB¸ñZÕ{UþOÕAÈä”#Ÿ´xnãáEµ³ñ0E˜õÖÖƒìk0«Õ¹Cj;€bÖ¼Ž£AÆ”àž‹;ÔDÞëÆ8¢‹ÛË›‡ØZÔ8ÂCn„ͽ*‹õTn=F¡LOßǦŒÙWä$Ò0xÔ§of$g
-õ¾ìŠ]y"[ê9ü%¯I=©cÌsÐ.FSñöX
+xÚ¥Y[wÛ6~÷¯ÐéK©“%
+@aQÔyµ£iïŠ8yÈ‹‚F»Ïx=M‹\$>hœ&W]sN³ë7‹Kÿöz!”}mԆݽMÖ®çÜkòU¶±Võ}fô‚íò[]í2 ±D¨¥‘Å+M
+Nƽ“š2:Š`
+„®ìNgx8»u+–ª‹8¶3й=¨©¶Õ;w"ßU„¨Ø~ŠŽRâ×êçSîˆ(•AHÅ
+€u¾}¤1¡
+/ ‚3ÉÝýsÑÿdiÙendstream
endobj
-1399 0 obj <<
+1417 0 obj <<
/Type /Page
-/Contents 1400 0 R
-/Resources 1398 0 R
+/Contents 1418 0 R
+/Resources 1416 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1392 0 R
+/Parent 1410 0 R
>> endobj
-1401 0 obj <<
-/D [1399 0 R /XYZ 56.6929 794.5015 null]
+1419 0 obj <<
+/D [1417 0 R /XYZ 56.6929 794.5015 null]
>> endobj
162 0 obj <<
-/D [1399 0 R /XYZ 56.6929 662.3153 null]
+/D [1417 0 R /XYZ 56.6929 726.8027 null]
>> endobj
-1402 0 obj <<
-/D [1399 0 R /XYZ 56.6929 634.3021 null]
+1420 0 obj <<
+/D [1417 0 R /XYZ 56.6929 697.6944 null]
>> endobj
166 0 obj <<
-/D [1399 0 R /XYZ 56.6929 587.9857 null]
+/D [1417 0 R /XYZ 56.6929 648.8841 null]
>> endobj
-1403 0 obj <<
-/D [1399 0 R /XYZ 56.6929 564.9659 null]
+1421 0 obj <<
+/D [1417 0 R /XYZ 56.6929 624.769 null]
>> endobj
170 0 obj <<
-/D [1399 0 R /XYZ 56.6929 418.0778 null]
+/D [1417 0 R /XYZ 56.6929 472.4047 null]
>> endobj
-1404 0 obj <<
-/D [1399 0 R /XYZ 56.6929 395.0579 null]
+1422 0 obj <<
+/D [1417 0 R /XYZ 56.6929 448.2896 null]
>> endobj
174 0 obj <<
-/D [1399 0 R /XYZ 56.6929 306.0653 null]
+/D [1417 0 R /XYZ 56.6929 356.0575 null]
>> endobj
-1405 0 obj <<
-/D [1399 0 R /XYZ 56.6929 275.4022 null]
+1423 0 obj <<
+/D [1417 0 R /XYZ 56.6929 324.2991 null]
>> endobj
178 0 obj <<
-/D [1399 0 R /XYZ 56.6929 229.0858 null]
+/D [1417 0 R /XYZ 56.6929 275.4888 null]
>> endobj
-1406 0 obj <<
-/D [1399 0 R /XYZ 56.6929 201.0727 null]
+1424 0 obj <<
+/D [1417 0 R /XYZ 56.6929 246.3805 null]
>> endobj
-1398 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F39 1161 0 R /F48 1238 0 R >>
+1416 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F39 1173 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1409 0 obj <<
-/Length 2729
+1427 0 obj <<
+/Length 2935
/Filter /FlateDecode
>>
stream
-xÚ¥YYsÛF~ׯà[¨*s2ƒ\›'Ù–%k'‘è­ÚÊæ$@ (hZ»µÿ=} ²*•âæìéùº§/š™†Ÿ™%¡Ò6u³8u*Ô&œ­wzvsß^Y³ð‹ÃU¯—_¿³ñ,UiD³åf@+Q:IÌl™ÿ2óÝÕOËëÛËEê¹S—‹0Òó«·ÿº4Æ̯>¼¹~ËSo?ÜqãÝõÕeìæË·×8¢SXçT$;—?\ÿûò×å÷×ËŽ¿áŒ¶ÈÜ¿üªg9\åû ­lš„³#t´2iÌv.´*tÖú‘íÅÝÅÏÁÁ,mÂ$´‰
-“ ž
-Û Œ<ý{ñÄ ¿ji’y±®ï«ò¿EØ /…H4ßY%+Û‡LÎ(7~D¨6ÅþS±ç¶,ÊO…lÌ<©¦ÉîýŽò¾*rž_=²Ž\¢0_¡\
-TE¡,EÛŠD6õž×ƒ´ûõÖ(›TÖ#f‚j`T'~Õ+¹ÇæDæ7?u-–›Ö›‰““TÅ6H'S';¥£ÔßÇCgÀ.ª@ÙL *mT†)èZª’$fåöòt¿{ÿ#™y¾žÆ/¢´ f|óÿohÿâ„
-8¶éÚ“±pnÂêà<
-%ZÞÝ|ÛG3Ôx5^+¯(¦ãö0ŽûzûrÄóúæ&‰™g<vœ8ÖË…@À¡*çÆ>«XÏ
-¢Î@‘,þe‡LŸ­öZ–¦’ë¤R‡¯`E˜ C{Þ5ôÜ/ -[j5°&
-˜Òb,ÜðIËHU ¯7õï¯ þe;‘:è.¢þÛÿ ÷…»XÙ$y&˯’ =Sh`N9ïþB>gýOJ|endstream
+xÚ¥Z[sÛÆ~ׯà[©ÙnÍ“l˱’ÚI%º34‰ˆI@!@Ëj§ÿ½ç¶à‚„¬Étø°÷³g¿sö\Ô3?=ËâHÙÜÍÒÜE±Òñlµ=S³{ûáLËœ…Ÿ´g½^ž}÷Φ³<Ê“Ì–w­,RY¦gËò×ù›÷¿,/¯Ï&Vs/âDÍ/Þþã\k=¿øøæò-½ýxÕw—ç©›/?]_bÊaž‹Y¹üéòŸç¿-<»\ü…gÐÊ"sœýú›š•p”ÏTdó,ž=BCE:ÏÍl{æbÅÎZß³9»9ûû@0¥¥S˜Ä6‹â̤ =Ó:ÊãØŒP‰ó(±Æ*°"rç ­”š_5]¿Û¯úº¹gúuÅ•›j÷¥ÚIgË姮:šõSõ„ˆÀ¾&†šÁ`ät–Ò†7u³‚ùVeóÏÕSǵbw®³9uçón-Í’o«þ±ªnô-WÖm×Ëê¶Ù<‘_AÛXf:aëÛ}×3ý[íÛìð¸öäŸa©o=+\=pY<_Âfph<æ€5ó®ÝlÚÇɺã²(K<VˆcϾ{çt€šÖ„”€ä‰\SlaÇUÛÜM œ˜È$I,Sÿ¥”ÙˆDîÚÏ·y0ßêȦ:—ù¤ž jt§™ŸõJÎqw$ó«_†ƒ1`œ´½›Ø9Ë£Ôš,ØÙLíì"•äþ<: 7$2‘ýëZ ët”Äq5 [àR/ÿD–së?$3/°‘äXxЂ˜¸çûÿ~OëGØÐðàé-`Îršóa¿éëSšË–&--ž¸ëV†ÕªéQ p·ûž‡Hí©ÆÒ€å(û]'㔢¬6O@YkÙ¨¬™0Üö/²UÙV²¢i{ž
+×uýE#ÛuÕŠ÷ñ”Ì»v|ˆºgÉñ¡ r+JCQi¸xlw›rÁ$‹²¸õÚËš ¤³ÈÄ)[‘«)íÊ#g3û’Z»È:èQ¢!MI‡N‰”
+n2³ì«N¢Û<ZÜBÉÄ4Úã±Þl¸v+Ã]}ß• Ñ~-;¬eA÷P­jÄæZ¥™ŠOÔ˜lb4”wblò2RÁ56A,ÕW`@DË:9êCÛtU76pÃqPøäG3¼^„3åà¡­éÀrmt¸ÙÂLs«½Š$Äð_—®ÞÖ›b'¾è«-Ü%n²O KUq\7î
+ï~¿+úºm¸s0ÚT~bc ÇÎrû}}„4wN;ˆ$Fcª_6ÓàÕý6$KÂû¾©^â8ëåøæL©ÄÄÅVplÿÔ±EïÇ!p~Â*°Ø6€+uCK´¼¹úáÎPåuÑy­¼X­÷Œã®Ý¼ò¼¾úˆ±e¦ç$Þûr!°«)¹²+Fæ3ÀZTUÌ
+oþÆ•²Âá¦F5"HÙãà=`'З ž§]ˆp¥‡Àán‚R
+–ÈÉ8Èx÷4E%‡ðc~Ÿ ÒH½ZÝ]µ› q¯Ñ¹û…‹pŒaAè—ö%˜)Š¶§Þ,ÞO6=°6r¡zØØz›ÄóuAÃèkÕ×ü É &@¡—àæ.Q>蔀†»–ˆ;Š5¹ï¶%¯ K>“–Bßc»ß”~G++ðäU9‰ŒŽÒ\§§>ƒT{òLêwèŒ/ïŠíƒwÞí÷Ûg˜Ï¤éHßB©‡·™rz
+u?ðÉÉ“L†‡ÚÙÈ(ÃÃѾaÄG8|3ô{.ºc¢xzá¡^>A_¯¸Á»{Ê=˜oj$¼›
+ºOlècÑzÐÛ§Q”5—r ‰°ŒqSö G{0\­´!Ƭ3ö’Ü2\äÄ%cm¹©ªã¼Y+Ì•‹áJÛH¥Î`˃»ûW®ƒ”w˜¿pÊrvJ—X‰ãÈ À¬¹–’,Ê3ðBá'¹÷0ë%FR¹1‚Î7”PYw«}× ¼µÇr߶>)•ðØV_k —OE¨c°ÕÆx[Íê¶xh7õj*IOÐäZ!‡0iÚ‰ZÈ¥RK·éȉ&âD/w»v×½ìÙ éTâ®+çÌÐGÇ׉7ŠÐ3h7Ôƒ°Z«¢áÉâJ!½ârŠ¸´‚L°Øp£Úñv;´Ú&Ï0 âÙ}„ZÇ»H|=tu+›¶YL¥Br¦ûqxYÀ¦¤¨©£ ÛäDúßý|ýáòúš‚²l)µ€öÀ¿rÐ%á¹ã¥¤hûEhwüö‚£¬SŽˆp•=ø+È(9"‘uÏb“Y?)ÛTÆ›AÏ}Y„¬‰ ›$ å.À8:FÆ­:0{Æã€ñ!7ÈC I
+¨zÝ“ 5aÔퟖˆXëi5eÀ¡8â‰sNä2c.WyÎÄÜÄ|”Î&>]XCÙ%¬-Ö¤¡¶àÀð u¼Âà#Xh,­†±Žæ5\î›ÏMûØð*ŸRáš“lûÃÄŽ—±–ÁÊ’m&ã<ÎZ-$¡"dz*ˆ°Pkn®Ú²âi]Õ ‰–Ë×oñù•S@ê!¡,x…ßB„æ€ Ô´ŠWë
+»¾›m1½U*ÿVy‚3,œU*ÏŽÉgêÆhC!"dž®
+öÒ÷rÜò0F ;Ráû“Œ43€-Ȩ£ìæäÃÇ€q–ï"¥´O2žÁ
+Ò*­†'Qg Höî‰kÌŸ­òZ–ç’ìäò¥`E˜ C;^PttÝÏ5-[k`N.0§Å`¸ã%’—!‘¦
+7[døÙ/ÏŽl©\˜G¨Ð½7Þf«ù[Hï4?ÝW‹÷Õf³¥ëèSª¯¨÷•g±¥§Q:xçÙ: ú}‚XÒäfàªâ‹ì]pÇ4 8A„òípc´Œ®W±é×íþ¹³h„k
+ò-?ÎCño _iòvËõT‚du¹|Hyž¿ª1¾ð¤ Ká$î´ô‘…»‚H½R”hcð|æB±­=„” Wào8¦Í9}‚Aìie:l5œÑJ"eò£Ðú™›g 1O•Ñ/žÝ©tôÎç'ù‘‘ÉŽŒLîo*ÔØ»ù¤eø{”Ljeñðflðe]åÉø
+Ÿˆ_–œœž/Ëâ÷âñÌCysI/6ÝÑW‰}wüɶ¬6Uï?J„@>Žù콟㿇­ ™+Šü¥n÷ì UôÜ¿ ,$ÐÖN½G¨!Mÿ¿ÿypø«…K#›eÏ<lÀýŠ2“§ž)„Òèc·¿(œ²þ?G°±endstream
endobj
-1408 0 obj <<
+1426 0 obj <<
/Type /Page
-/Contents 1409 0 R
-/Resources 1407 0 R
+/Contents 1427 0 R
+/Resources 1425 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1392 0 R
-/Annots [ 1413 0 R ]
+/Parent 1410 0 R
+/Annots [ 1431 0 R ]
>> endobj
-1413 0 obj <<
+1431 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [101.3082 326.601 169.9802 338.5012]
+/Rect [101.3082 379.428 169.9802 391.3282]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1410 0 obj <<
-/D [1408 0 R /XYZ 85.0394 794.5015 null]
+1428 0 obj <<
+/D [1426 0 R /XYZ 85.0394 794.5015 null]
>> endobj
182 0 obj <<
-/D [1408 0 R /XYZ 85.0394 718.5038 null]
+/D [1426 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1411 0 obj <<
-/D [1408 0 R /XYZ 85.0394 691.1994 null]
+1429 0 obj <<
+/D [1426 0 R /XYZ 85.0394 749.2913 null]
>> endobj
186 0 obj <<
-/D [1408 0 R /XYZ 85.0394 491.8561 null]
+/D [1426 0 R /XYZ 85.0394 546.785 null]
>> endobj
-1412 0 obj <<
-/D [1408 0 R /XYZ 85.0394 464.5517 null]
+1430 0 obj <<
+/D [1426 0 R /XYZ 85.0394 519.0032 null]
>> endobj
190 0 obj <<
-/D [1408 0 R /XYZ 85.0394 313.1885 null]
+/D [1426 0 R /XYZ 85.0394 364.477 null]
>> endobj
-1414 0 obj <<
-/D [1408 0 R /XYZ 85.0394 288.6895 null]
+1432 0 obj <<
+/D [1426 0 R /XYZ 85.0394 339.5007 null]
>> endobj
194 0 obj <<
-/D [1408 0 R /XYZ 85.0394 127.0564 null]
+/D [1426 0 R /XYZ 85.0394 175.6792 null]
>> endobj
-1415 0 obj <<
-/D [1408 0 R /XYZ 85.0394 94.9508 null]
+1433 0 obj <<
+/D [1426 0 R /XYZ 85.0394 143.0963 null]
>> endobj
-1407 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F39 1161 0 R /F14 964 0 R >>
+1425 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F39 1173 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1418 0 obj <<
-/Length 3319
+1436 0 obj <<
+/Length 3227
/Filter /FlateDecode
>>
stream
-xÚ¥ZÝsÜ6÷_á·[O³*ÅIlžÜÄiÓÎäz±ïn®Ú]Ú«©VRWZ;î_
-!Ýú{Wׇ²!ößÝ3±¸OÛ}Ù<8°6ÅêÛvØǾ퇞xÊ#ΠQûSE± -*yí’Ë" Ã7ÿÁ
-GQÖþ== tÊ‚ŠUO}Kü¡¯ib)4v{¡á¹qô쨷w «ê(éñgÛ8ô¾ÈVw`fP
-qj_ÆÉ_áÇ}ûþÃ[([Yzø…˺öbâ™î tíÑ#7
-š*Ð6eÄ m`€‹ Q£É’(ò˜ÜùÌ+CxVŸWTÐ1#ô²©ƒµÜáyÅ`{ J!ÈÔ6t
-Ò6,ì\î1„Y6Ïã,K;äSäë33…ÄIˆÏ‹Œ6kC•ÃàÝ0ÇeuKÎåšÝ×ak˺ÚÅžÙN`º´ g6GÀæ‚qWïÙ§
-¦<ÁÇ`’_Œ¾oŽÏÝÐÂíöÕ–É$öT”®3ÚBkøÎÁf3€A„žž]Û÷Õ¦vô6@$ÚSl"l‚´=wÆÉnÝöt¬†gzC3“àÊNíg3Ð8Ö ¤àzm=»XP
-Å ‘
-!!’<Ëóù)YL“‰L>EÐ@ Wë*‚Ÿ+Ó̽mÄ0Ê ³ DÚ !ŸÇ©1Ñ‹dá^¼)\Ge >3\÷pjÆTfL\:$"·ƒâœÒ}{ì©“@Ë„©+§âeÌËì«zGlòx$Ëâ+’ Ê…ãÉZ‹Õ5f?íÇÿÍçREá”ó¢†Pe ÷°Î@õšZoBvL~&2'[5Ÿ×¡ž{¯JzÇHÛ²+9™«p%ÓÖ„5¡T\P*@Úp‘ǨÐN‰Ç>! N0ގ͆1Å S¯²·n^N”›)‘áf¹t¶
-Õ—¿%¤ES29ЕR@×’À’üQƒguèj‚ÈC¤M`Á¢×QûýÍÝ»×Ôœ
+xÚ¥]sܶñ]¿Bo¡&>ŒŸ[NœLÝÔRÛi>x$¤ã„GÒGžeå×w»À‘'ÚéLG3°X
+Y\æEk‘èËj!.`îû‹„q6i3Çúîîâ›7*¿,â"“ÙåÝýl/ c’Ë»ú×(óø
+vÑíÛïZø—\m¤ÈU½úáúç»›÷0ÔP ñúõ¿®’$‰®ß½ºyMS¯ßÝRçÍÍõUžFwÿ|s{õûÝ7wÎ9/‰PH䇋_—5°ôã…ˆUaôå# Dœ…¼Ü_¤ZÅ:UÊCÚ‹Û‹„ g³néªlK•ÉáH¹&]Ä™’Ê çng‘ @Mf¨vÔ:‡ýÎO7ÿa¤ù~JĹЊ‘†ÃUb¢¾²ãxµQºˆßvÍÔ”“­i¸}‚D\Ò°jÛMÔïÔŽöðÑ–製J¢®nº‡Åò±yè`çò,.„ÈþRFúp´‡'ÚͤéªöÈ'¨ìžp‡K˜Xgùå&IâBkéÖ– `8 ³°$É#8t$[ÃÑÔS[RãH*d´)K·”1÷`bhŒ`„¨¢ùŒëÓŠqè;Ëh_
+îšöttº(
+vDw’§Eá£ÐÕ&â,
+=pÖ˜ç áwoß½F‚²¨ Æ\¶­#ïô
+¶<wÁ†]0ûÈ/8_ºð¯OÃÔÃvME ÉÌõ4­3Ò`¡¹F(²E~A€‘Ú¡ÇfÛZMàˆväš(5AØŽ'Ãf·¶:šé‰F(f"\sùpl|ÊN n¶AÖ‹B@A‘{ ú0²ÒöKm–NÏ~šl7'£»ü8'¼Öì3¤ó™Øº˜ •ŠR¡£2L",e_m¹˜Ôà·•€ªŠr<Øb5‹0j;V‡fë,†ìBÀµó•8a†Ý!¤(gÅQø(ynªö×îÏ[ ep>ëòp¡)"xt9
+!šs
+9ÅZ˜oàwu¾€ˆZb¹óŒA.ÁÑ9'úè‚â6GlxÉ,föñùrûih¡0¡­²°Õ¾Ÿ#Az^6LØÖŸXU9N k v§¿bÄVgÖYqJ¹ÓEN›Æ2-|M³Ù­\'p<ºH}FÛlŒ™ÆàO…HFñšû£ ?ÐkÔ’ÌRrˆ^ ŒC­YŒÒ:z×»8“iïx3>³“e9 é»$™ÇÆ‹O‹03±¼ÞâÖŽt÷¡¦5©:KõqKCf$Y•Òp‚ €ÇþðÈ
+Þƒv‹è—•ýXªÐãgÛ9üø½.ôV©\çæòK¡7= Ü£áÌ(3"”S¿üýÝÍúƒ·’…w†/h;
+ü&„!èmù¤ãÈñÂøÀbÔYA‰ñN@ÞÊ+9ô»ßÛ®¶|
+/\øŽó8«úÁjÜ(,ÿñÃ=½•8 «þXÒЙv¦òsð \}6 óiÁ@È»Ÿ¾û¥ü%Èã;VÅ —A.T¥föµ4ó$N井¯™QqfÂWCd
+<Å^Ÿ"ßX=³°ŸDáS¢“+(}€¦þº7ILç©ð¯¿`yZÐ÷+/a´~¨EJG:š3&<¯§væa´üP„ÁNr9M|zvÜÎî!}Ì3-%Üeàñ³3×>e~æfC‚™Šd¹Õt0øè?ü¶ÏŸ,|(þ̯;”Žñ'+¿Å!}þ¿ùqúÉKšÇʹþ£™›85° å>µÉg”ûŸˆ<'ý¿w€=endstream
endobj
-1417 0 obj <<
+1435 0 obj <<
/Type /Page
-/Contents 1418 0 R
-/Resources 1416 0 R
+/Contents 1436 0 R
+/Resources 1434 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1392 0 R
+/Parent 1410 0 R
>> endobj
-1419 0 obj <<
-/D [1417 0 R /XYZ 56.6929 794.5015 null]
+1437 0 obj <<
+/D [1435 0 R /XYZ 56.6929 794.5015 null]
>> endobj
198 0 obj <<
-/D [1417 0 R /XYZ 56.6929 626.8646 null]
+/D [1435 0 R /XYZ 56.6929 678.9507 null]
>> endobj
-1420 0 obj <<
-/D [1417 0 R /XYZ 56.6929 593.5117 null]
+1438 0 obj <<
+/D [1435 0 R /XYZ 56.6929 644.5195 null]
>> endobj
202 0 obj <<
-/D [1417 0 R /XYZ 56.6929 468.186 null]
+/D [1435 0 R /XYZ 56.6929 514.5361 null]
>> endobj
-1421 0 obj <<
-/D [1417 0 R /XYZ 56.6929 436.0669 null]
+1439 0 obj <<
+/D [1435 0 R /XYZ 56.6929 481.3387 null]
>> endobj
206 0 obj <<
-/D [1417 0 R /XYZ 56.6929 238.9445 null]
+/D [1435 0 R /XYZ 56.6929 279.5586 null]
>> endobj
-1422 0 obj <<
-/D [1417 0 R /XYZ 56.6929 211.6265 null]
+1440 0 obj <<
+/D [1435 0 R /XYZ 56.6929 251.1623 null]
>> endobj
-1416 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F39 1161 0 R /F41 1218 0 R /F48 1238 0 R >>
+1434 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F39 1173 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1425 0 obj <<
-/Length 3360
+1443 0 obj <<
+/Length 3255
/Filter /FlateDecode
>>
stream
-xÚ¥ZÝsã¶÷_á‡ÎDž±àÐ7çìK.m¯­íëL›æi‹s”¨”ß_ß]ì")øΙŽ/ÀÅb±¿]JœÇð'ÎuÅÊ$ç¹I¢4éùz{Ÿ?ÂÜg‚×,Ý¢åxÕ÷gß¿Wù¹‰L&³óû‡/ÅZ‹óûò—Å»Ÿ®þqs{±”i¼H¢‹ešÅ‹«ë]!WßÝ\ÓÔõÇ;¼¿¹ºÈ“Åý§Û “¦
-ÞÓü&,»»ywñëýÏg7÷^Âñ)D¬P¼ßÎ~ù5>/á0?ŸÅ‘2:=†âH#Ï·gIª¢4QÊQš³»³z†£YûjH+©ÒQªeP‹”!µ¤&Ê”TV-»b[],U¢ÿÓÏóýûDŒÞR"RKØ
-—¯7uSFÕïÅvßT-Ÿn¢¢Lg‚—Oq ìs¹(šÇ¶«‡ÍwËínŠ6®{"]ß]]E&ôâöîêo×)óIOæî~ºr›TÃ:ï¹+iõ°áC~®^˜R<¢ôçK!àRE¢pÁ%K'x,¤J`7)Å¢ÞáSÜ)뢯p'0Ç‹{Ü
-6H( NÐxž*y¢O0»€&³ ÄÐÞcXJˆã9ˆzz}K¥cç±v Œ1Ljp÷M{Àƒ#uÅ+ë]FZ•î?T!®«/íŽG¤~ýŽ°ne½{<¾ÈRE*NÕ7œ>2z{}O»zÜáT“ 3ïüéÃÇwýt}à½Lâ82y¬§~Ðàä[ð´>òÜý­? s@´K ¯Æ¼/Äêï ÒØS»@gÿA]î| ¢ÅJ&_w2‘åfjо„™æ9@… {c¤u ‘4*èìÙ¨L©D˜ØÔÕî%p¥R¨’Î(ÑÄÀmO…P¢ScNî4†ÜÙvœwöí®¬!.Z#Š)WáàC9¦×þ°Baù}oÌ1s,XU7
-žšd‚=¦ØŒcÒ
-üÍ YEqú2À.”V.6"ÒŒrí’ Æ®
-_éÌttQÔM)ö®)ÐÕÉ­Ã:Z/¹ãè_üíPõ
-·d«KþJÿüSVÕÖÉf<«ßk›æp­cÝînIÈP¥L̬zqàÉvÚ†¨]“bõj'ÁrÇœ¡øF”›/ü(Ø«pè(dà3÷­p‚?·k¸Ïݽ ŽFºF¹¾ 'o`ÆÛBLXS=I/íö̶%&ûòT4¸}ÿŽi,ÄTÞ€bº½*’{ö} *
-ߎÛ*= !ÊûuW¯œu¸/¹Ûvºh(j6´”×Mó—íú°µ½xÊéIe ½éé?íšú3CÚ>|Ä`@¤ÖŒªE- M”mŸœÂ;ðïà ƒâIkŒh¡!U·EÉl{†ýÜ̃Iö"Äû-ã{°¢ þZ é‰W¹N+Ì–-‘PŒÉ'VrÕ×±£Vð\q®µë1Ëk¾û3ûjK)ãê.Af£ê0Ã/©= –„‚£î7Ô}V¶W$„æ ±xÙ£ŸÐÿã×O¥
-O#Õ\rÿ ³SÑÿÎ)Bendstream
+xÚ¥]sã¶ñݿ“éLèö„
+)·‡ù±éòR–UOÏC_4ZznÊ9=øúi°Ï«ŽFk¶›¬[uO{‡c›ÛÅ#=K^ØðQËCU»S·åñdð):ÍÇ1bÌOR†uÙƒÎk%ƒCO¦qèóMIÊA}µ«ê¼£ h†Àñ4Öá?Aíf8™$@h<­L%èp
+¤ž‹o¡3ì˺ZÑ÷8RA¿mxq„.yeÕô ¤eáÞ…¸vp¨~kxû“Û°ªEÕlŽ»ì ¢ñ…ÁÄ„–±vW`^ŸÜ3LEb€ïrÌp:åÐã 県p˜Þò‡¯ÿúíû›Ü‹HJaR™Mí ÀÈw`i½ðØýüCÇ°M‘‡@Ÿ‚”RwÕ¦±·¶RÞ²üyu~:à c¡•Ñ/™JR3UŠŽùmiš‚ÜgÍk¤Œl^¤‰¬ž›†F9==+•I„Ž„‰N½mžfD†PB§”¨b`¶çD‚CÎbcÎd*ø¦ŽŒ³ß·MQ_´J3Vá 88ûÕÀóþ°Dby¿WfÉÊ °=c‰‚¥F‰b‹€)VcI@oŽÐǪ®iÄ.ȘÓàEê…ÑÔ)|äÀwªÈZŒyté73è@2í|#bÑs¼ Eš)^„¾ëè Ä0‡èööîÃWÏ!’ΰˆEÀ}ë!QOŒ Ö-:,Ãfä×bM΋KdŽ
+•±,PMt|˜;a¡Y
+Žzâ4ž?*’j|dlvÇ#ßx§Á†øžó¬Û[0"ÞH¬û–±5à»cU|dXžü’×çEᦠüòº~²Û>“?NLÔÔuûH^^!­ØÙ`Š/hN= )f˜Ô)r6ïûÃÎï¬~ö´°jè=§‡0xPX³Ñ$‚
+ü¸ÕsXGëCîµø¿ÊÞf
+>é|Ê™ ½Ÿjµ†œÏIÞºFxçOF»Ž ';0ÞíÀ#¬¨–¤MûF‡=£m ¥|y¨rÜ~yMƒX*5%‚ nEtŸ|Yƒ*¼fU¾Ä•WÛ» ýß>ýl ãÔù„O{mŸ;JÈûUW-nTܼڵÓEC^±šÕÀ¼nºxðù~Ñ®;Û…§ˆ%"îuâÛ¦®~ædö݇øѼtÆù´ƒèÀÐDÑ–œ‘“k„çjýÄéð¤%F0Jž!L·yÁh{Nø¹‰“lA˜é·œÙƒˆ+ˆiÕ¯rV˜-Z!3ŸVŸoÀŽZÀ§ls-]Ÿ¸˜æû>Ó¯µôafM“QU˜à÷ÓžFPCB¡Qõ[ê9keÛ*!8å+<íÑFè}¼ýœ
+=º§u|ü¤ 3ìt¹§v½g¸”Óþ=!ãö"È‘ÞæK<‹Ã—xöôÃÐS_hŒ•HÙäMõóÅN·ô\–s7ôîSmìÃÄ»êDºvZl\Û8Ájô:笉oùìP ³2ñ
+dlVÕïóU9†ãÂ3ê
+¢èêuÏ$º¾Zrôô“‹‘ÛÚ–GÁbB„½žþ0séÄaeø¨(üTŽ=þ(W>€²Úí”hKæ½ý·VvU_º… /Ú21NÅÝP¶fèi²‘æŶ‹U O~šœXŠ0;탆þ[Œ˜É±•%…ŠŽÁ8zjÛtÿ¯=&JEÊ“¨ò…ÂFXŠiºH#M¬?Ú '›ÑÄ­-ºí7üdžض³ôÌvÆ;‚á{¨©<- >Ÿ⪩†*¯öÂ8¥ž<>{÷ñ‡è±û×ßTs½þúO×ß²ûîû§vírHû››õ7zUß.¿Êïïžû‘Žþ÷gæO?Ò· ÿï¿ÿUBÐYÎÿ{Hc54©#
+™êSÊý‘ÎIÿݳÊZendstream
endobj
-1424 0 obj <<
+1442 0 obj <<
/Type /Page
-/Contents 1425 0 R
-/Resources 1423 0 R
+/Contents 1443 0 R
+/Resources 1441 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1392 0 R
+/Parent 1410 0 R
>> endobj
-1426 0 obj <<
-/D [1424 0 R /XYZ 85.0394 794.5015 null]
+1444 0 obj <<
+/D [1442 0 R /XYZ 85.0394 794.5015 null]
>> endobj
210 0 obj <<
-/D [1424 0 R /XYZ 85.0394 626.7436 null]
+/D [1442 0 R /XYZ 85.0394 671.4386 null]
>> endobj
-1427 0 obj <<
-/D [1424 0 R /XYZ 85.0394 595.698 null]
+1445 0 obj <<
+/D [1442 0 R /XYZ 85.0394 641.1061 null]
>> endobj
214 0 obj <<
-/D [1424 0 R /XYZ 85.0394 395.3576 null]
+/D [1442 0 R /XYZ 85.0394 444.8166 null]
>> endobj
-1428 0 obj <<
-/D [1424 0 R /XYZ 85.0394 366.9621 null]
+1446 0 obj <<
+/D [1442 0 R /XYZ 85.0394 417.1342 null]
>> endobj
-1423 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F48 1238 0 R >>
+1441 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1431 0 obj <<
-/Length 1600
+1449 0 obj <<
+/Length 1913
/Filter /FlateDecode
>>
stream
-xÚ¥WI“ªÈÞׯ0îæUµ!™Œqã-(œ˜TèèÊ ¨t¼ÿÞVQU]ÕM¿žÂ…ižé;'ó;'âþŠÆhr†#1Š
-~|$1{º{ ŹiJÂÓp……_Z’ñ4‚qWêTxqõ
-~x¼«~EqéÜjaÓY#ì~.°ÇüÍï§ý.Þˆa0†`éw,ðoØ·Îq’'—ÄK_2è6 Åt ôåëÛxî·r=¹°S‡Â& ÊÕ¦q²Â¿0gIÚih›¾ìY7³K‡ä0qôרu)ju]¸WzÂ,[õŠK\T“¶
-Ðæ27>ö1
-°KEÞ§ÞêâT<Í)—?î¨/z¼Ò;)-³é!ðÚ®.3.„œ 0â39{Œmà~(*ͱÏ•¬­ÍÚLèMV¨S_æÌíiˤ ¡‰§´Úh†§¶½2üCØ—A&KÕL‚LCn#¤iLnLÍ߇8I™Úu«Dùͦöánv9õE§éH+}?œ%<üÎ^…Ì•ãÖ­5½×í”Öb\;º‰g½ÏœcÌáT³­£¾=AÆ`x á+*6ôÚÜNæ§Û¶%÷ÎÉáNïDµ¿-!µ ÁI6ÓÙ¼ÝÈèÛ÷Á }§þ—°ÿûþî "Œ{é /»—òz¾ü îQĽN ½bW”Ý¢¸¾/ÊÈË“Ö»$EþŸó‡ÖÍ+ƒîG[äÝéAĽt2Ôò3_©Ï|…4€~“@X{Ù1 ±m‘aýD¥ÞˆÊß$ž÷êålkÀšP|}E®CwL’¸–„>£»”¸w;šýzD”æÇÖ¾\×ãlK®"‡Kv‘t=1•‹·}÷Bví@’çëf¨ºíõL¤öñr‹öò-¶M@Q¬â÷Y‘ªfûþÂÚÎØãm“î )Ù B|^e{eA’d4í»D‡ñÂÖìž ŒRínŽ‚Cå\HË$×Ô#XôÅŠÈæÖ.¸u”ÎÌÞß­Šl­JJK)!%O³ÏÊÒívìSö¹¾°i”7–­œÁ©7Á¡bÍ¥…SÂç:ãWîId%u’ã`º-£ ®Í$9ÀýäZõÅz&OªÐ×$T®‡«ƒr3ã·Æ°N<˜Oìe•õYáE³6Øñ×A»¨rS°âTÙ¡:qÒPô/xч,,àx⿼û¸ ÃÈ8°þiÊ°
-Ësø+A°Î Ea$¸Ó¿1Ñ
-­VìgøÐ =“ñÐÛÉ6êS>'Þ"0‰f1¡ÇÑò|:nЦÎÌëƒ1Qå9#ƒ¦Ð&q¸}G/÷MŸgœŽ‰T`¼E~ž5Ž¦(NhTËzߧ<Ñ7YpŠª|Vç°’ º]AÝ[ G¹R˜ìò È/܉êéR†ÕÆêó,âF>Ý Ed!{Ê(ª£¨1ïŠÔ´ws«jo.Ï®ª„¢`7k§¬–nxvû`ˆ£ŠE‘‚¦VùqZªÑR|èíƒÍe>‡æœ£uãÀîñdÂ&þ;Å B€ûWF[q|->Õ0 ë³ùùnGaîùéášðü½ñ›jå¥Ið:Ï~£>êÛ¡î{º£;›ê{hýâ_?ëý'sG‡X~¼Ø!üôb‡ ‹‘ìÝɨ×&Aþùûûÿ÷ÐÏ~endstream
+xÚ­W[“ªH~ï_aÌËê:B](.qbPlñ.
+^˜AQQؘÿ>¥h»³—8Ñ•·/³2³²` Ð?X"<ÃKH* Ç
+5kó}p‡Ö¡š¤ølV…×Âh,:ž7Úëp[·Úq¯½Q %s½†ÂŽÃÞ¼ª`=Aí,ÔŽ'›
+)ì Dš&›ÉèhvTGiél'#Ó9šEÌJ{œxŠBФ›,=ÇÑ;ÆŽozÛÂ>˜ž4H¼6ÞŠÖo‹þòYbc"ò¥ß~½Úò‹ö·«åßÝj¹4Ã0…÷lx<:«šZËàQp©süV„øÁšXoßï³/ìµB»9ê¢Qò½¼8þ¿šE!b$‰pų(*P¥@­+—T×cù”ø¬êû$/
+ 8îcbE裋ё•G”
+iÇ!€D.÷upsõÎ)1„§#.e¤#0l)ð;ÇÆ –uú•›_Cu T„b ¹3¥mj€“$œ3½¬ï®~Á}ƒmïPI‰¨C¥ŸžŠk¯šïNñèe §ÊEíC‘†FÌG§Ám>©!A*GëÛ¯X>ym²sûw›ªn¤À¿Y9ÕŸìþ1ßq*”óÙ$'YñCSRA¤|Ë+Úƒ1GÊí0ßß[ôFà@ùä¯Î]ÓGί_@ÄQtÊ·^à<<P…”£ õ_Œ~9Ž—$Jbé%~.«nùK$ž¦Õ÷çÒÏåüK¢òôò#Òk¢þøâäéý„€tw|æ9·ø"ñãÁy[¿Öõíû=ú›·;ÿ°Âû‚žL\"m>NTà=àts…ÿ
endobj
-1430 0 obj <<
+1448 0 obj <<
/Type /Page
-/Contents 1431 0 R
-/Resources 1429 0 R
+/Contents 1449 0 R
+/Resources 1447 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1433 0 R
+/Parent 1451 0 R
>> endobj
-1432 0 obj <<
-/D [1430 0 R /XYZ 56.6929 794.5015 null]
+1450 0 obj <<
+/D [1448 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1429 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R >>
+1447 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F62 1379 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1436 0 obj <<
-/Length 2638
+1454 0 obj <<
+/Length 2465
/Filter /FlateDecode
>>
stream
-xÚµYÝsÛ6÷_¡éuS!
-Q¤q:™¯Y¹y®&óå¯ÑÅwç?Î/ßNg±‘Q"¦3“ÊèüÅÏS¥Tt~}qù‚¦^\ßÐàååù4K¢ùOo/o¦:Í ¬*x0Ý\^|Í+Þ]ŸÿpuA?~ys}yÃç×,óü§ùTåÑ›H¢ç½¹zu}uýjúÛüû³Ëù`fè
-%5ÚøûÙ¯¿ÉÉ<òý™ºÈÍä~H¡Š"žÜŸ%F “hí)õÙÍÙßÁ¬[:æÚ4Zõ_m«bQ&ßVÂ9¥"Mdü´,Z'AýŠcQ‡“O‹X“ÆÃÉÇñD)QãÑRd
-N<3àÒÑ_£‡g!Lš(dTRƒæŽãÍt–ªhÿÇÑåéy€ÌD¡j°O®ÝΓß'JȤ(4ñcgêÁŽðìê>ž¼hÁ I`“—; ;“Ò8
-Ôa X«8ÀÓ:@:¬`Ó“sHŠL¤:Õ“Ÿ+°)Òb2;\Ïý1R•É²©ŸÆ¨4‹E"eælÿûÚ¢‹ãœ Ðe_µ<ç_Û”·µ;WøQ6n
-—lVnç¢Þ-«æŽ7¬º~¸É8²lªàü€ÝoS5nÞ¼]ÎÆ®VÏŽw»%iTâÇDìžÞÿ0\¶Îè$q×Ô‘îËÞÏ’ï`ð↾oßv–Ù\€ y0Zà®MOñÀY§?°”_{„ °Âîˆ2
-E/ÖU½<$£ ÐçN+L!ÊcS™lºû˜š
-@2ƒÕËj×#ŒÌ)°Ùgb£ËqŽ¶Á½!š$Pо—Fþˆ&@MÔn‰ Ï }{…í8Ž
-‘&´G%’¼‹p»ɇX?pŸOš‚¦·˜UÑPæÌ×¾ÑÙZç:ë¡oON|¸S|u¸=zÀ$ÀRõdƒfôϬþŸR"sú!GÇj¢¡“4[$æB«‚`’ˆŽWÊÓ7˜}SÞW ~ƒÁ–â´O8ßõ-”°žç²Ö‡2ƇD8Ú¸€ §žì¼£D…×@ëF@ IDR U̼i¡p¿Å†gºX—ÍÓJ"-½Þøã#åX˜=¹NêQYJô9ÇÎRœ¼-˜t¹Ÿ¬2°44cÜ•\áî:¦X¨\wãkjN '0¦h^ºÆ (ص*¬%a{B„’¹?L¡ø8/ÚZ£~¨Í¹~ÂêüN‚šiãçgD–pO}N'©ZSQ{;´ZŸ6 @qÛÁŠS:ù.üÃrYñLÿØÒà±Üwß` QàÍSU a°Ûø^Ws›„×vpꑽᑖ€óÙ²é@áç˜CÁùþpÚík8N¾ÌsÔ ¿t:@)? 
-w³­èiÁ¸·7W/
-Ç_®g¿³ÏŸÄ‹g'V‘Âÿz>âYfÍŽÝv岺æîÚí×7¯‰Âé4ñS:ú…¦ŒÒ¯¡í¹|G?Ýû2Ð=@ݤ ÷
-çLè<Çÿ² e
-@/²A+t\lNu7SXœ)ÿobd”endstream
+xÚ¥kÛ6òûþ
+¡Àò¡VDQÔ£p7›t›ë¦Íº=¤M?heÚÖU–\KÞ­s¸ÿÞÎP¢¥w@°Àj8g†ó"-¼þ„—© ”yì¥y¨P(¯Ü]…Þæ^] ¦™[¢¹KõõòêÙK™zy'Qâ-ׯ,³LxËÕ/þõ7‹ï—7ogóH…~Ìæ* ýÅ‹ŸfBqw}ó‚¦^ÜÝðòf1KcùãÛ›û™LR«r^D÷7×_òŠww‹ïn¯iðó›»›{žXÜ1ÏÅË™Èü7ßGK{ûêîöîÕì×å·W7ËAM×"”¨ãïW¿üz+°È·Wa óLyO0‘ç‘·»Š• T,¥ÅÔW÷W? Y³tÊ´JfÊ¢t¶Q4e[•‰Œ¤±mWm½b­;]¨®¦ñ‡¶ÑO۪ܸ.ªš ¾¥ïcQW«¢×̦hV¼¨ª™’¸öÇCÃöƒãTÊÿé%ZuqûÏs~ý–(ëJ7}€f]ç" D–§Fð·ºÛ·MgäËbWœ`é2EÜ
+„YT»ã•ôAžçST¬Ç”ekÖ²}_¨zöÀQVë­ÛöX³§m‹Gv™­›Ko>§
+–Ë¢t&BÿØ™Qâ—mó> #”§ ÅSÕoiÖh‰(âd‘³¦GQ‘à G($NUM+«¶)êúDóµ^3ƒc3Ÿ
+JÒJ¥”‰‹j«!á( ê÷0‹BÿD0Í«õ‰³"ÔÚǪ ŠÁ¸JÙê Üó³swPšŸá?Ic8Ïö°êP«/'³&Mš±W
+ë‹ï£(¶Å×DXbO?´¦u±þ
+^!õ™l¹a°iY+×j£6χؙlN(…)¬^U%„+f˜0£Äh[‰F“ãmƒ{C6‰eä¿Uø=ª
+>!­W"Êš°‰=æ:à>Ø Mgs&Š„6gIiÌÀ˜ØÚCèÛ‹bŠCÇäŽþSnDh*.«jœ§Ðt'Òs+úgv Ø‘¨<ɽùx;ø¼.æ¼ñP"kt$<2N"÷.'9ô‚, —,8Þ0¼¼dšbW•|ÉÂ+Åå=aqì[ha-Í=T ìÇ6ƦD8Ú6T EÑ¢£B…a åàF€7
+BB'TÅÄû÷‡ZÓ¬ñ@À–Û¢Ù0® ÔÊʃTcavlr ׳¶ØåhkÂFSœ|(ÊßµZ„wÒôŸòÛ©Ëߊ
+îpc4ô ú@0–O‚Z#yé+`À¦n/ ÛK膓<·‡>Î붫Q?ôæÜ?aw>¦§ggÜôù©@ŠŒÊæ5¸JIMUdõ„sòò³¬¸Ä“}
+cT‘öí/.v“;8¢[#‰'¤Ñum:ùÄ_4SÞ5ö¦É¸|~ààu“®˜;¹Þ­/½jª¾*˜Mǽ!-¢¡ÔÝ_¶4éÐÐD¶?u[Òág
+&‚©~þïfirÜØ Y-ÜdÅ*òkHè´æSÙd2(þFq×t,ì„›ýƒHú¾&@¿O=€‚yð×…‰ŸÂÁŸý#Æx«
endobj
-1435 0 obj <<
+1453 0 obj <<
/Type /Page
-/Contents 1436 0 R
-/Resources 1434 0 R
+/Contents 1454 0 R
+/Resources 1452 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1433 0 R
+/Parent 1451 0 R
>> endobj
-1437 0 obj <<
-/D [1435 0 R /XYZ 85.0394 794.5015 null]
+1455 0 obj <<
+/D [1453 0 R /XYZ 85.0394 794.5015 null]
>> endobj
218 0 obj <<
-/D [1435 0 R /XYZ 85.0394 386.1448 null]
+/D [1453 0 R /XYZ 85.0394 486.5796 null]
>> endobj
-1441 0 obj <<
-/D [1435 0 R /XYZ 85.0394 353.5014 null]
+1459 0 obj <<
+/D [1453 0 R /XYZ 85.0394 454.3582 null]
>> endobj
222 0 obj <<
-/D [1435 0 R /XYZ 85.0394 310.2645 null]
+/D [1453 0 R /XYZ 85.0394 412.0822 null]
>> endobj
-1442 0 obj <<
-/D [1435 0 R /XYZ 85.0394 279.5106 null]
+1460 0 obj <<
+/D [1453 0 R /XYZ 85.0394 381.7503 null]
>> endobj
-1434 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F62 1361 0 R /F65 1440 0 R /F21 938 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+226 0 obj <<
+/D [1453 0 R /XYZ 85.0394 150.1125 null]
+>> endobj
+1461 0 obj <<
+/D [1453 0 R /XYZ 85.0394 122.4306 null]
+>> endobj
+1452 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F65 1458 0 R /F21 950 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1445 0 obj <<
-/Length 2874
+1464 0 obj <<
+/Length 3336
/Filter /FlateDecode
>>
stream
-xÚí]sÛFîÝ¿B/7‘¦Íý —¼»vFu×Mâ8¶œ8iû@‰k‹Š”MÊŽýëXìR¤DÇ™ë=ÜÃMfB‹Å ¾2øð ‚Ð cT,½ÀgÁ`¾Üó×°v´Ç,ÍØÛT¿L÷ö_ 5ˆ½8äá`zÕây~±Á4ý}(½ØøòäüüðàÇјðòédòöø€^>¿;9<· ““—¸˜ŽX4|÷v2Rr8u´çÇG'Ç'G#ª`xðëätzxF+Òž3yùaÄN‡–MÀ«Câvqvx>úsúÛÞá´Q³m
-æ Ôñfï÷?ýA
-ùmÏ÷Dƒ{xñ=Ç|°Ü“ð)„Ãä{ç{U³µ×´Ì÷¸ym90æÅAÀ;Æ b/\4Æå£1ó}Ðñ¡H–Ù|Káõ*MjMðR׋2Eµ9o}8
-?ÌXtç×úõT>LŽ®~¹zé÷Q’‹àñQX¦Çl¹>yÿË×ã›·Woêãû›§éu½¨Ö"LÞO.£ŸþËZ¨'µH÷U™^쇲äoŽªìjö¦~¿¬ßEé«—õtòùòü’ÿp)ôþÅI~ÿz#>ù´û²>ð×É}¾ó%yýáë¥æyÔ?¤oà ½x8¸ùòÓ7¾Y¥‹>—w=ÅfÏÇE–£ùÂ:
-¢ûL!„F!P#Ñ"ÁÈR>
-p‡ÓHX\ó…ö´$¥5|#Žh‰ÓjΫÞÂëz¿Ø¥ïØo¯˜ê¿)·øBÍKDißU¥xS•â¦2Æ1Ü*z.’ÕJ#+Ô"±4=„Y¢²tIÓXÀ˪¬ªl–÷æýÄ6÷:ϽÆã[—7 ÇB5×6a¯m¯Ö¹é)±gY×åäµ·(ÛÓÍ¿ÿæñ¡.’™1h$:œaÉòÃmçhÛAl…+ C/`"¶ˆ¬ÆiQUzÞ#ÜReÄ]3[®¬ñ‘yI¢Ð·„UPÆ¿—#²¢§$3é{±Š¤ål’†7/‹«>!bOÁ5Ù’z=:F2îhD±)!ç‚G¨îç}R[Á½˜…²Óºc÷qo;ÖÆgèówº^£¦Ußå˜q1'WŽáÛ{ªPÍ…⹇ó¢0p‚-!"êÄ™µÃË›–©Ð£„Çü˜¹øŒ(>GA
-åÖRÍMÿ §Vš >Çî)›£`á‹~ ÍlÚ­ËÛ"¢<ID¡ næ jóßpA÷Åü!D3#±§,ÉŠL†žqÔ­vð%L‘rò
-̈nwƒS©o%æs‰Æ Y1Ïשq åœOEÃdFà®ÖÅ3~’gu3kÓ@CV…uKÜ–‡\SœS Íbú¯uUo„v{QÙà"Ñ‚np¹K†ÛíjEH,Fø¬æ ®11K§Í™ s$À`3Ï…&
-7³RÀõ c#¼?Õ‹rí8$Ðõ›F_ÙŠŒ@o%âØCDM3dÓµjW¢®«B³4™¸¿
-}Rñ&í—uáR]ÚütÓL@‹k]ÙkëÞï¹8Ù¾ ]Tö£DOÜÀ¸¾ÿ¢
-QÒÒ ®ñš@¸ k_¯ioÚ&Œlj7?WÞ^úŒ+ÃÙ‘ÀµÈÞ¹¨Üø,d[×¾>dBÞîáÇ›‰á¶ç¨÷>Æ¡¼9$NãU™gó‡~WäAì©ÖÅJ0*jæI=llm)°In G i4%#ÚUÑ6˜H3Ó¦‰(uqØÌ¢Ç,@T°=蜶ýsÀU’}÷5ZÚkô)ÍjÆ4¦1c^,þiõ—fK7gë$K7H–­áC m.纪ˆœ~uö'
-Š5Iž4s¤F6±Ûœ &̃ô–Ð#ÕWÉ:¯i›c ‡wI¾¶ 5 !1v½¾ÅGJ*
-&CÁâ®ÀJ6™>hæþ$6 Š²x¤¬TÞ k6£;ã~Úl9¯Íïø-êò)iz†¬÷‹l¾°¹„Ûü(Ô.h™àÅœßر¯}Ä_õ{:¿ñÖ¿üÇ›îîè"ŠxËùË“0±B¡î<Ü‘Üý•Á®èÿì#Á
+xÚÝksÛ6ò»…¾ÜTžV4ð…ë]gÇqÝ$ÎÃr’¾>P"eñB‘²IÙq~ýíb|‰I;Ó~¸¹É8\.–‹Åû„ÄÄ…bâN ¥ž„Ús|Wø“ÕöÈÜÀØù‘`š™%šu©ž,ŽNž©p¢È`²XwxEŽEb²H~zŽvŽƒ;}zyuuvúÝñLúðòóåüåÅ)½üòêòìŠæ—O¸^‹húêåü8ô¦ K{uq~yqy~¬‚Пžþ8½8{K#Ï3úîXœNϘLMÀ³3âvýöìêø÷ÅOGg‹f™]UWáo~ýÝ$ ‘ŸŽ\GéÈŸ<À‹ë­åd{äùÊñ=¥,&?º:zÓ0쌚OGU+\Gª@ŽèÖÝ
+F…
+&¡¯@Ie”ûÃñ,pÝé~—ÄuJpœ$¤Ÿâí.O"­ Jx~ö3ÁÒPôé18›Ï)D¸»~æ>ß-_Ïå*<ÿï–"ºwëôùB=ÎÏ×OÖ/¢ôMçÊÿüY1Ó ±=¹š¿yòéâöåúE}ñpûþurSoª½
+âÏço梣Òaå3!íûò¯®"üâ*’“°L®O¯”/Ϋl½|Q¿ÙÖ¯¢äÙÓz1ÿåÃÕùí•ž\_æ·úâÇ[õ³K_¨OÝ‹}üŸÜ~ŒŸ¿ûô!•yÖß&/ƒëtóxzûñk«¨Ò"Áá“gRvöoæ…N$Ýp2SpÜ€Œãý&ËaÅÒUÓzÀUÂwhéí>­jB<dyŽœ®JÔ‹%Œómii²í6M2à‘?;@òàsY¤}njZ”üñ’‡,{àaÞ«ì¦H–°¨³œ×Ø=£BhqE rŒ¨B)'ˆ F¢M\ÓÐ ! Î¶(C(¦uI˜‡8ÿÈcf
+^•æ™TàAP.† ×æÌxA½Ó@óƒÇ‰wé'‚XÛ
+¿ñ›8+œæØFŽò]m½XÚÁk>–{ˆYm…‚ !̾ʊ‘·¢ñ¬¨ê·ñåš—äë;¬aE›rŸ'4n,‘qÑ~ ^k9¿¿¤±¡Ö»R¡†GÌ0+²:3j tkKÍ[Âm"³t¤2ò!@Ko x™ˆ3:$¬Ù"xnâûtðÁ«×¶ z™÷eVE•š †èS¡/Ã1;Ô°µL~s]ß°eÀ‹Lódl±¨l>íŽw•ˆ¸¾²È^pø&ÃúäΊŠuøeW×9{aøïoöïÿQJüÿE©?·
+:Mt’ð]ô.Ë"¤òü Œ´ûwÅÅù ˜Z‹‡Fa|œ×±f€û‘ÑÓÖ»zQ×¾‰Œ
+š¦t—þpö®%@!ŽÝ¦/jA( âJwŠ54T ‰P¾@uÝ“Äx`Œ–m¢jÚ: lM.çXɆ¶‚ö…}ÛýZÓÍ­Ëáb)§¿febíJQ/ 7%"
+$ˆDÑ2ˆ¨"THz\ØýK(;(§…Ál}8Z’aÃÖÓ¶Úpƒ–.€ÒXðÜ+CQ<€EÓéÔè¦ …xÓˆƒç6NRû1VÎÈŸV{£ dXH!9Ÿ„á¦NhQF@OC÷åGÒr êÒöf#f‹±ž-E ÐÕŠ‹!¬ƒ¬)U๊ïî2S¦Àp¹Ç—§ýé“GNÒu¼Ïku›Ì@ØÌ@fÒÔHNpõ‘8Ûª
+ç3úd, ù«À¥'8¿=ìÇ÷cÅÕó
+|*=„CÎcm "Ƚ›™û€™˜š¤Ý&íBjsÙ¾ó2Nð(Í |¥w÷q>À<åxl²2êsîH“„(³køº?eÛý–p¦4…§ôhŽÕWzàµãk!û+_Œ×ÚAØO.LG˜…‘ ÓÆÜ5yŽUZ媑ãI%ÿ(§Džb*Û€6{O`ã¦È øÝÊÝÕàÊÁ±9a|¡29è8K—µ…'¼ì襢úÙ±˜’uÒ· }Q—§wsák…v<²NÁ‚ ÎÓÄt‚D˧¥c¿ Ð’1ͽˆ²í¥ÙhÅÜ»1íªLM«‡Ê~ã!`„TíE㹨¡#uãÈù¸
endobj
-1444 0 obj <<
+1463 0 obj <<
/Type /Page
-/Contents 1445 0 R
-/Resources 1443 0 R
+/Contents 1464 0 R
+/Resources 1462 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1433 0 R
-/Annots [ 1452 0 R 1453 0 R ]
+/Parent 1451 0 R
+/Annots [ 1467 0 R 1468 0 R ]
>> endobj
-1452 0 obj <<
+1467 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [411.5778 224.7212 489.9929 236.7808]
+/Rect [411.5778 302.2913 489.9929 314.351]
/Subtype /Link
/A << /S /GoTo /D (man.dnssec-keygen) >>
>> endobj
-1453 0 obj <<
+1468 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [55.6967 212.766 134.1116 224.8256]
+/Rect [55.6967 291.0037 134.1116 302.3958]
/Subtype /Link
/A << /S /GoTo /D (man.dnssec-settime) >>
>> endobj
-1446 0 obj <<
-/D [1444 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-226 0 obj <<
-/D [1444 0 R /XYZ 56.6929 769.5949 null]
->> endobj
-1447 0 obj <<
-/D [1444 0 R /XYZ 56.6929 749.3199 null]
+1465 0 obj <<
+/D [1463 0 R /XYZ 56.6929 794.5015 null]
>> endobj
230 0 obj <<
-/D [1444 0 R /XYZ 56.6929 358.1001 null]
+/D [1463 0 R /XYZ 56.6929 436.3593 null]
>> endobj
-1448 0 obj <<
-/D [1444 0 R /XYZ 56.6929 327.7578 null]
->> endobj
-234 0 obj <<
-/D [1444 0 R /XYZ 56.6929 131.9404 null]
->> endobj
-1454 0 obj <<
-/D [1444 0 R /XYZ 56.6929 104.2481 null]
+1466 0 obj <<
+/D [1463 0 R /XYZ 56.6929 405.7905 null]
>> endobj
-1443 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F11 1451 0 R >>
+1462 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1459 0 obj <<
-/Length 2589
+1473 0 obj <<
+/Length 2453
/Filter /FlateDecode
>>
stream
-xÚ¥Y_“Û6ßOá·“ob•")‰º77qÒ4Ínn×éM®íƒÖ–ךȒkÉû§Ÿþ
-+¯amÛ¢W[Öër&¶nVÞÍú«©¹WźÅÝÍ¢(ÌâXÚõv SÉ,¸-°5A[ÞÕÅšhe·%ª•ˆ¤¯ÅQ`Á«mYß™ÇÍ™<Jg|±´ùóªêÕåÝ‘¦µN±±’†Œ5L£ w’Ûms¬Ö~-#+¥‰»æ¾X‡8þÃ[Dƒci&FQ4äÕ]s
-±Öp¼''Þ±‹Z e¨ôÆØmÀ4¾ù¶­£g­îÈŒŒkl­‰Ÿ¦„èõüãXX!*\—bÁçÇ÷e;c㲨*ƒT
- ×ì‹CÞ• «Ca T,Z§y[° Ï7¦í¶ìÚïÎœâQD”=®>-¯
-Æì éiHz_ìn‰î™ɺŽID± @Š?Íп¾niÔnRüFÙóa7*YœÒI¨“È°¹ß·(
-6­Ùœ© í$#Gqb6TФÊÜñ
-ã}°£!68PL×…ÜJ›±Õû’ä#ö `?rSÛþ®,µ?AŠ¯ÔØYU%Æø * –ï¶âžµZ(dåæ‰ä9iUAçwÓEÀà®Îâ9ÖœßU6¸Tõ¢1*F
-*e6¸ `r± [ñðpÂß(Á}ÖbÀÔ³OÞa¤’Á6o©S7uè}¢¸/›ckmT
-’e_ HÞmèQR—6 0…ʲ´;…UR%#œ’XW3$× lŽä–ët9#ÿ<–«¯Î¨¼Ëò€wÚ*¿füÔ<ì2®Û¹'u8ë9[g¾ö3‚ªòc€Ì?§eÛyªŸÙœ o!@8Ñ9Ç¿ò,õsKµž©Ø·ƒ×ïÙézY¯¸&AQ¶á……â=“õìÏßÁ›PtíΞØzæ6î-Þƒ¡ÞôÍóGüïÓ1²<¾Zð% žÝyc/Žå¡¿žœ¢ ÝçU¹.;ž×é²YóÄÆÑR?>ÑÀºØäǪÃÝȇáÍðÚÍÛ• ¾ËÔÔ*Á‚ò§–¥P1‰Ê‡m‰ÿ/Xœß½ø|›oŠá`
+xÚ¥ÛvÛ¸ñÝ_¡·R=+$@웚hÓl;µ•íI7û@SÄŠÔŠ”ï×w3àE¦»îéÑ€Á`07Ì…
+f~ÁLG¾©š%©ò#D³üp%f;Ø{w0ÎÂ!-†X[_ýåG™ÌR?Ãx¶Þhi_hÌÖ›_¼7_~Z¯nç‹0žòç‹(ÞòíÏó ¼åõ›Õ[Úz{}G“WËy¢¼õçÛÕÝ\ÆI§R>Hw«7?ð‰/×ËïßÐâß7׫;ÞX^3Íåçõ<ÐÞÍG¢èpïÞ¿»~ýnþëú§«Õºs¨Š@H”ñ·«_~³ hä§+áËTG³GX?HÓpv¸R‘ô#%¥ƒ”WwWÿìvíÑ)ÕFRû‘“ ݆Á,ü4ŠÂ‘r£Ôe(­rQ3j¾„Þ§SñµfÑ> Éy2y}Ú4('P –3@ðã ‰-™õÞžP^ÓœJ¯Þ¨íöŠ]UT;ZO¨Ø:7MCèEÓce¥ÙÐêþÉ¡y“ž=üá¸áÃ_E$‹vO«Œ†Ùfç²¥cŽ€ò²òÌSÇjERÀG‘QÈN ä¿ö¦<𧦘žÖ–ws
+©ì™¬ÜÕ'ÐÂa¾ˆ!¡¿²q M]eµ„ņNJÆÊ´õé- zÙ§‡4d—/]tByбk[f»Irêùq2~ÎñàÎGîüEœíXYHÈJSÔ¾©Jô%ž©|2Ûí¬NÖÐø5 •cç„œgm[÷ìHZ#ÆC‘ÑÎæ©ÊENÐóq>x3«½eۚñ廬ψѩœì4¥æ>@üd çQ^¸ Ï86Eiª¶|âX´«è
+øk
+uÝ#ÁÕ=.†vîaAœ‚’a
+JzÊ$ðžê³‹Ÿ†#iË×dpʽ.)_Ä‘b•}°F‹ü4ŽŸ(Iúøó„pÐ=I¥f,Œ¥a¾måínfî;q©©Ĕ綇èú*IÔØ@fJÝRú:HÆ:t¨%õrW`æ
+¹¡kÄ®õm)mikÝ @lTÅoJ¥N1Ê)F9Å`ízG#D 늵âjrŒìßÑå·
+û½·##Ö9LÛ„Ô—ÖS5ù~,ˆ>"†âÔ”ÂMß+‡ª{B’[jœäeŒñ~‰’Š‹w_òÌr #d²bûDôµÒÐCDk:õêLž}Íé]¦£¦ª÷8 ^1]qô>òâ±WéxÛ#—b“ѸAD
+ªvpùŽ2þû‰
endobj
-1458 0 obj <<
+1472 0 obj <<
/Type /Page
-/Contents 1459 0 R
-/Resources 1457 0 R
+/Contents 1473 0 R
+/Resources 1471 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1433 0 R
+/Parent 1451 0 R
>> endobj
-1460 0 obj <<
-/D [1458 0 R /XYZ 85.0394 794.5015 null]
+1474 0 obj <<
+/D [1472 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+234 0 obj <<
+/D [1472 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1475 0 obj <<
+/D [1472 0 R /XYZ 85.0394 749.2278 null]
>> endobj
238 0 obj <<
-/D [1458 0 R /XYZ 85.0394 464.1469 null]
+/D [1472 0 R /XYZ 85.0394 398.6362 null]
>> endobj
-1461 0 obj <<
-/D [1458 0 R /XYZ 85.0394 435.7636 null]
+1476 0 obj <<
+/D [1472 0 R /XYZ 85.0394 370.8109 null]
>> endobj
242 0 obj <<
-/D [1458 0 R /XYZ 85.0394 385.2856 null]
+/D [1472 0 R /XYZ 85.0394 321.6035 null]
>> endobj
-1462 0 obj <<
-/D [1458 0 R /XYZ 85.0394 356.7468 null]
+1477 0 obj <<
+/D [1472 0 R /XYZ 85.0394 293.6228 null]
>> endobj
246 0 obj <<
-/D [1458 0 R /XYZ 85.0394 181.1837 null]
+/D [1472 0 R /XYZ 85.0394 120.47 null]
>> endobj
-1463 0 obj <<
-/D [1458 0 R /XYZ 85.0394 152.645 null]
+1478 0 obj <<
+/D [1472 0 R /XYZ 85.0394 92.4893 null]
>> endobj
-1457 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R >>
+1471 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1466 0 obj <<
-/Length 2407
+1481 0 obj <<
+/Length 2247
/Filter /FlateDecode
>>
stream
-xÚ­YKsãF¾ûWèHWzûÁçQ±5Éd˯-o*•ä@‹”ĉԈÔ8ί_ æC¢=®JJ5Ñh
-}¯Ùä8¼2&
-«A¬h‡K{ù²²ÿ¼’ôÂÊì¥LwÅ’¨Ç}–69š Œ÷Ë&/j|§& 5D[nÒ‚ù6iMƒ§œ–Þ:/s«wŠÛ´„€²ìh3Štœí
-lO¼ú¤¸à¸‚ ¦ríˆîl{™ªÃC„@¾z;&𜴧T7yÊÑò» dÅ`/šÓ𠧘€Q&ù) ?¿ô5§ú»üPT™Mž(“äuùëdnÏ9
-!¡¼ÐÀ‚ž/*|检Ñó¦Xn˜é¸ßW‡¦¦§6sã…1æ)_FF^NÕŒöl­M–Òóîï!rê¾Þ‘RŒª<í‡^Y¡cýȵWþ@¤Í[@²=þ/§ˆã¶!rµ¢ÿºÚåÄѦ$\´Ä0TòP‰€¼ý4N¤m±Ê›b—³2>jkKÊ°šwFÕͦõØ}äòI½'TmÖx ÛÊñ`/ÍÜÅα§°²Í¼)¯ISÆgU.ówצßÓ³œ’mø|·øü¸ ¯“>ˆprŽVã ß—®8¬J 
-w‰jlÊ°òÉADµ÷¡H»7/g6I²‰x0k ɾ'ç¢ÌŠoEvL·DïIØz$â82o½ÁKMiÖ A7_Ñ"Uv=B’Ø75Qññÿ©ã¢ë ùì-e's
-h!j‰Q¸°Ý†Æ²ó]Ï@Êè¯-ªk뱃+\‡F:¸RhdS žs‡†1äã²|ÛpËù©$ízçœ>YØQãÚÂ¥«t\_¶ªŽ®D¡~¤ÿmÅÄpEE¾ž„€žàGš;¬'4¸ï}iÙ§=~ú(2ˆ¾S©¸‡|Ù™
- MЩ5¾INQßš³/3-ÓÛ6œÉj»À±oKøAhDŸl£çowê>ÉùЅƱ·\G±ðcÂF¡á:>³Ü} :7ýÿ:¬*íendstream
+xÚ­Y[—Û6~÷¯ð£}NÌ%E]݉›¦{2™Î8»§ÛöAcÉcnlÉÉ3qý¨‹¥I¦§{ü Aø
+¦›ÃDN ïÝD±Ì -ºR?¬'ÿøQGÓD$¡N×ÛŽ®XÈ8VÓuöÛ̉˜ƒ9{{}w·ºz3_x4~½^~xEÿ|¼^ÝqÇòú-ŸÖsÏ>~XÎ#¶v²wïß]¿¿~7×aÌ®~ZÞ¬W·Ôãó<Ë·ÿš+¥@ÓÕŠuÁÔDü¸"mŸnWwó?Ö?OVëf™]W(©q_&¿ý!§xäç‰:‰ƒé34¤PIâM?Ð"ðµvœýänòK£°Ók‡ŽºVIáéÐñ­çù6HD¨=m}›îÊGSï°8íÍviEDQÖDÑ…ù“)OÕþŒ<=»Ïó‚zOUžU—ô­Ì÷Õ»œˆ?Ë"ÇÐèyc½¤öÙì÷Ä»ç¾íiOs’^7—3òËÉl>;£€ Ñ
+ôçüÌ"}ÉÇ}º1ű҂d󯦪n3²¼T^¥‡œF4ŽÓˆÂ춞YúI{1[¶p>Ò]lˆ{È‹:E7" a2íÇ ¯ÞÑH’Ö'­ˆ·µ­ò@Š¬9È.÷vyØuŸÛ%· oœuŽÞò(ñ)qÄCŠ<0`€y$²§XOéÞd¦æ1Çüє̿ ‰"|OÎ~8SG–oÓÓ¾Æh$ˆSÃÈÎý¾DØX}›òpÜçuΦ ¯–¬(=W¬%ÝÖ0h$nÏ;³ÙQhMÝ ±¥î9èUºeÊæ|9 `
+ówLØд˜¢õoOªØ?W¿}{[åµ@ó P¨icß­õ}!7õ7ž/””rv õWß`þ,o—Ø,vOEÍ'“ñéæíržx³õŠ'éV#˜Ã‹E‡c™á
+BŸM >pxJPÄS<±)í—GÒ¼02;éÁlˆ{:fimÓ?гS’µÓønš€¦!Þf—–£‚×<|È‹Üλ -L–a–iÅ™£‚Á
+÷»”:}hh/·Ù R÷<üOš®ÄÍI³eMlÂ(RÇÒÌ<—'$
+çÖ–¦ìèã“¢Õðå”Wœ"Mâ½´ ƒöª,
+æ¾`•‹š)}š#¶jΞÀ­yÄ©hû¡U‘y·f»…0Þ†,DzÃX'£²]ÞÈÑAD¡@uˆql×Hv§Çü+ÖF-â:P€kí¿מ§Xë‹Í–¶Byúâ0kÏÓ®,àì°+Æè@–EI*.’ÞaªrcgÍ
+눔$À‚’`Q—‹o$„R±#‡òXóvÙfSsøÎë¦Ãêñ㎞X úNÏ9¯Fæ‚uú^ƒ7ªB FõÌ*ŽI¸fs;¢ îìQÄ (-4Ôj(ä^ß©ïí­ñxapoèì‹]Íï¡OcOQâô#PäXÒu
+¶áãÍúã§õHz]Àp2D«ö…ïKw<, ¿@hñ#UJ§äØ 9n E)»…ý¼ËcH,4}¾Ù\Œœ,i¯7Ýœ'@ñõƒ;©Æò2z±åg¼X£—ì3xʶmÑ#^KB‘¨¸[êÇ|uKiç³ÖS¨Ù¾¦àÃóêŽ`ðEóY¦ã+±cÂÅ7Ö#‡-`ÒVg€;Ñi}B'h-E¤UØOåƒùJgÙs†öÔËÎPR‹H*ý=wø°?:od%½J*V?9ˆ¸v_à÷H÷ö2°I’M$ƒUYö¥Ú¦ÈÌ“ÉNéžøíU–â#݇Aß—¸©)~ØÖT°ó™©²½%$‰} ¨ˆ‹QÄï}+EÛÊÙ=[ÊVgn àV]%ËÚÕHÙ[ Šº´€®ñéÇÐñÒÿ:øçÄÈ¿²)=û?ö¿#Ž;qìÿ½áE±ðcPÂF¡ý^<°ÜýY24ý–æÆendstream
endobj
-1465 0 obj <<
+1480 0 obj <<
/Type /Page
-/Contents 1466 0 R
-/Resources 1464 0 R
+/Contents 1481 0 R
+/Resources 1479 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1433 0 R
-/Annots [ 1476 0 R ]
+/Parent 1451 0 R
>> endobj
-1476 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [379.778 61.5153 440.978 73.5749]
-/Subtype /Link
-/A << /S /GoTo /D (managed-keys) >>
->> endobj
-1467 0 obj <<
-/D [1465 0 R /XYZ 56.6929 794.5015 null]
+1482 0 obj <<
+/D [1480 0 R /XYZ 56.6929 794.5015 null]
>> endobj
250 0 obj <<
-/D [1465 0 R /XYZ 56.6929 769.5949 null]
+/D [1480 0 R /XYZ 56.6929 687.5192 null]
>> endobj
-1468 0 obj <<
-/D [1465 0 R /XYZ 56.6929 752.3958 null]
+1483 0 obj <<
+/D [1480 0 R /XYZ 56.6929 659.2346 null]
>> endobj
254 0 obj <<
-/D [1465 0 R /XYZ 56.6929 692.682 null]
+/D [1480 0 R /XYZ 56.6929 590.6286 null]
>> endobj
-1469 0 obj <<
-/D [1465 0 R /XYZ 56.6929 665.3376 null]
+1484 0 obj <<
+/D [1480 0 R /XYZ 56.6929 559.3791 null]
>> endobj
258 0 obj <<
-/D [1465 0 R /XYZ 56.6929 608.5887 null]
+/D [1480 0 R /XYZ 56.6929 493.738 null]
>> endobj
-1470 0 obj <<
-/D [1465 0 R /XYZ 56.6929 581.2442 null]
+1485 0 obj <<
+/D [1480 0 R /XYZ 56.6929 462.4885 null]
>> endobj
262 0 obj <<
-/D [1465 0 R /XYZ 56.6929 536.4505 null]
+/D [1480 0 R /XYZ 56.6929 408.8026 null]
>> endobj
-1471 0 obj <<
-/D [1465 0 R /XYZ 56.6929 509.106 null]
+1486 0 obj <<
+/D [1480 0 R /XYZ 56.6929 377.553 null]
>> endobj
266 0 obj <<
-/D [1465 0 R /XYZ 56.6929 404.482 null]
+/D [1480 0 R /XYZ 56.6929 258.7201 null]
>> endobj
-1472 0 obj <<
-/D [1465 0 R /XYZ 56.6929 377.1376 null]
+1487 0 obj <<
+/D [1480 0 R /XYZ 56.6929 227.4706 null]
>> endobj
270 0 obj <<
-/D [1465 0 R /XYZ 56.6929 320.3887 null]
->> endobj
-1473 0 obj <<
-/D [1465 0 R /XYZ 56.6929 296.0091 null]
->> endobj
-274 0 obj <<
-/D [1465 0 R /XYZ 56.6929 211.2169 null]
->> endobj
-1474 0 obj <<
-/D [1465 0 R /XYZ 56.6929 175.5135 null]
->> endobj
-278 0 obj <<
-/D [1465 0 R /XYZ 56.6929 119.4006 null]
+/D [1480 0 R /XYZ 56.6929 161.8295 null]
>> endobj
-1475 0 obj <<
-/D [1465 0 R /XYZ 56.6929 92.0561 null]
+1488 0 obj <<
+/D [1480 0 R /XYZ 56.6929 133.5449 null]
>> endobj
-1464 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F41 1218 0 R >>
+1479 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1480 0 obj <<
-/Length 3064
+1491 0 obj <<
+/Length 3154
/Filter /FlateDecode
>>
stream
-xÚ¥koÛÈñ»…€ÕD,—ä’Ëë'_ì\rn×òÝáp¹4I[D(R©(ê¯ï¼–™F-x‡³»³3³ó\E-<ø§F»^„‹8 ]í)½È¶Þâ æ~¸P²fe­Æ«¾¿¿øë» ^$nùÑâþqD˸ž1jqŸÿæ¼}y{}·\ùÚsBw¹Ò‘ç\^ý¼TJ9—ß^_ñÔÕÇ5ï®/—qèÜÿtw ˜8Ñ>lSJvÞÞ¼•uRŠÏžöÞÞ-ƒØùõö~©ŒóéæàdvýÓíí'š½_þ~ÿãÅõ}/×Xvå(Ô¿.~ûÝ[ä ‚/<7HŒ^áÃsU’ø‹íE¨W‡A`1ÕÅúâŸ=ÁÑ,mÓ¥Œ«Ï(ÓW 3ÑÚŸhS'nøiuýåJyhñÐmš}Ù¥]ùµi‹ý×b‚9t7Þbå×6ѹ_&¾Ó,WA;mÑ1pØñ˜Ö2Né#êßM-Ðc³gàîÝ[@ÅP·_çÐv–\¶±‹·iYwE ¨â `’Èy*êbŸvBµ;
-Sx©ý&
-Ÿ¸z
-(sáÀecàI ö„&rÓ*†Jü‚BÁ‘;/ÂPFQTù3XÊ:É[¸²”©t·+Ò=Î ¥Ý„I‰á3¯.¸¶ MzJ9±†|шJ)Àr”Э´­l) mÎKeK”NŒ“xqÖöÅ!•:tÞ7ÇB0ýLß/6ÂSÆ ];;.³‚ùÒp0Þý©mm8<xŒ‚öF½ñ&•ð#ÑðYIùp:ë”Ïú$¥…ÝZŠ‰Sksb²Cɼ áÍ©ëBŽá¾
- W»¯=O¿Æ7o&º« vC†“¢ŽíöÚö¡ÚwéSÃÜ¡ ²?v¨$” ¨Öc{÷¨\7Š_×|c«DmRò$€>\½ð‘uÔˆº4Ʀ;ˆÔ¨V#m!"9¿©½:·clënl–
-S™åš0¶TÌÏ%ôhÚЭfÛ‰-J!•™ïú¾2óo…·¶­ºü¶$U!, G y×ëoÔš,pM–ö —ʺ—²:JYËRã÷F¤·/»Žì@)éŸÕÐ6·éVÖå¥48]³—cYˆ™¬·iªÜ†câä(M÷6®¹?‘ûõqÀåkßIgãæ§*'Š!äÊbßB&kù‹
-¿ÿðñŠ¡„‡œjÊÝFœ,Ô¶j m,À¬1;Êóïõ7~öÊÊV6È<”räAb+€l¡î¯o¶‘ź_ÔΧVßDαèoË oò9Rü6=Ë_ËæÐò #*öœ
-AÕ‘/=4TE‘1ýoXJ~Ázé×¼ýi×AÏ3üŠ×v»fÿrƒ%ÿ°%C_(€o銿oØe|‡y‚dC˜ÀYc=—Ú·¡"\ÀG^`ûV“)ÂgÊîJ;ˆ(Û–u^ì
-øC—·à°
-¹¹»²½ÎFX:N:!ÈG«'[;懪¯7@ä÷ë´ƒûv|!³A~ÒÍHÏR€~-³b¾œ”¨¹(áeSÓ—º9Öòô!9÷Øì¿0ƾÊ}ˆB6¿ÃWÅPr·>Ô¼jýö’1V_„:g“)ö,i3ÀÑ¥2MÑ¢gÏ$¨5Iʲ‚ò™ÊÜÄùf"ÜJׇó|k0w¹TÎõ-Ã`L;K .:u•vòXÁþð/=é“Ð`ÝÒže&DE°þªx(©]ìßËúðm¶ð¸†®Ï®û—¥ÆX’7Çvò 1Á¾çîK¿ŠCÅ?eÏü†íõ?Sÿß¿˜ÿµ ŒÝÀø1|ìä¹êË
-î'çœ÷?­?gý?û”ƒendstream
+xÚ¥ZÝsã¶÷_¡‡ÎœÜX,@ühŸœ;_âxr—Zºt2¹<Ð"mqN"U‘:Åýë»_
+¬Òv¶Þ]¨ÙŒ}w¡eÎÂMZ g}»ºøË{“̲ ‹Ãx¶zðJ•¦z¶*~¿ýþú§ÕÍýå"´j— «ùõ»Ÿ/µÖóëooÞñлK¹¾L¢ùêÓý Pt&°L+Yùî—×?޾婫ûOËwÓ÷e—¯?\wóã͇Õåo«.nVþ$ÃÓjeðÿ¼øõ75+àÐ?\¨Àd©àC:ËÂÙî"²&°‘1Ž²½X^üÝ3ŒÒÒ)íY“6 “ õ…z¦£ÀDq8ÒŸÍ‚0MBÒ
+
+jP
+Îþ\ç»j-g'Žm'
+¨×›æ
+Èëü©Ü•u‡
+€mÂÁ-©Ù€´ ñÿööÜ€ÕfAÀVÆfóªî—:7Åq]¶<Ü÷ûæÐñÇ#n…3ïß¿e
+ðÓWÐM“yáäD:0Jç$%NÏEJÙy)ánc“Í?µUý$«6•lûXæÝ‘„)ñ0(¾ÖAf-«'ßn›S+ÇÔƒc˜ óqTÊ0 ÞXñ¬®=a§/e¹Ç^Òçë/Ll¹]oòú‰”‚ã²b}¨ºjoù lyyó–g|)Ÿ[¦žªnÓ;þÈëg¯KŒH¬Sèt›’Çš}yÈ;OnH‹8FïJÆzØå_J¾|/~ |DlêÏJ…OGàW55‘²-ÛÀkÏ3d+IƒLÛÞ
+-vȾ›o«˜á!³û²m¶_ËôŅqëy­.³pŽrE½\—zî.™è97_yå}€Ä³d¯EhøpäØ–L ›D
+Ú$÷h ír0møßï‚ ¼‰‘M è
+ z »€tG¯.ž0ÔcëU•O™kDF9se×(d</§à¿:4¹íòι‘Ñj~[ƒ%í÷œ?Ù‘=_‘Eä2ú vóØë‚» Ÿ3àŒTèP%³8L
+Zµ¼‚Ì^õØ Mè?ºŽç+ £c×nÓj'£¢7^A8aQƒ PÞd
+
+ÇØwˆœ 1:pwCâê<m·ß–pPT[è$Î¥p¹)6cçAf±¾6_„AÊ—L»9N…¸ÙùrÎç·ÛRÖ5 R:äÒL™ª+0í³ ¶,<0‘éM‚[:d$eÞV%¹=8Ø)f*ã Øñ6GÕáXΔCkgŽ*cÖÊÍOÀvÌ‘‘Ke¹Vwù¡“ 8 ÀÂÄA•!¼
+ŒÖŽóð1já¼Î+êºO¨¼qÆ-ù ù,ˆ›óˆ6ÎâvœgRˆgìý_&žÔ‡†{&ƒ¬€G8'Ï) J’;í¤›ðR.vØ^¬ZJ´´ª¯ÞÈ> #÷OÃÊ…ÒòÑ”© ¾Côj@•Þ(U`Í~äìÉPä†ÓF£$…
+{öFç¦5” 
+üB¢‡9#PÊa3@m RæÏÝJæIÜ™• åû}™(q¶È(ïFB
+†O¨´.9·¡Lzâg'ðnºh$õ©P%,£•u™-¡A_6á¸{èENÏL¼8+û’ˆÒÍ¿oN¥PýR_/6"?‡='Šë’å²òp5q¸avèrÃþÁc
endobj
-1479 0 obj <<
+1490 0 obj <<
/Type /Page
-/Contents 1480 0 R
-/Resources 1478 0 R
+/Contents 1491 0 R
+/Resources 1489 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1433 0 R
+/Parent 1451 0 R
+/Annots [ 1495 0 R ]
>> endobj
-1481 0 obj <<
-/D [1479 0 R /XYZ 85.0394 794.5015 null]
+1495 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [408.1244 623.7385 469.3244 635.7981]
+/Subtype /Link
+/A << /S /GoTo /D (managed-keys) >>
>> endobj
-282 0 obj <<
-/D [1479 0 R /XYZ 85.0394 769.5949 null]
+1492 0 obj <<
+/D [1490 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1482 0 obj <<
-/D [1479 0 R /XYZ 85.0394 750.8067 null]
+274 0 obj <<
+/D [1490 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-286 0 obj <<
-/D [1479 0 R /XYZ 85.0394 180.7476 null]
+1493 0 obj <<
+/D [1490 0 R /XYZ 85.0394 744.1913 null]
>> endobj
-1483 0 obj <<
-/D [1479 0 R /XYZ 85.0394 140.0669 null]
+278 0 obj <<
+/D [1490 0 R /XYZ 85.0394 684.3648 null]
>> endobj
-1478 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1494 0 obj <<
+/D [1490 0 R /XYZ 85.0394 655.3895 null]
+>> endobj
+282 0 obj <<
+/D [1490 0 R /XYZ 85.0394 606.8822 null]
+>> endobj
+1496 0 obj <<
+/D [1490 0 R /XYZ 85.0394 580.8718 null]
+>> endobj
+1489 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1486 0 obj <<
-/Length 2645
+1500 0 obj <<
+/Length 2887
/Filter /FlateDecode
>>
stream
-xÚ¥]oÛ8ò=¿ÂÀPˆQßêÝKšf¯ÙÞµ¹&=à°ÝZ¢m]eÉ•ä¸î¯¿ÎP¢¥[\ ‡Ã™á|‘3þÄ,ŠÝ8ó³Y’…nä‰h–oϼÙæþ~&˜faˆ6Õ«û³‹_ƒd–¹Yìdzû•Å+u½4³ûâw't…pçÀÂsnß^ÝÍ~ä9¿AÀ'/ò®>̃ÄùÏíý\¤Îû·7€ãÙ»··ïõìýöŽ|çêÍåíýõš™ïåëÏ…Î廫ë×4õúïôëõå< û®ïæÜÿvv}?èeë.¼
-§EüWŠ¾u®&½ó^»oš9;Ùç0‘ŒnƒBÁ¨èh€‘†_8|?ƒ„éû!» )"³QõIàBÒæ¦d6æ+éÓm$‰YÛª\¶²=ò–K<g ‚ 8Ï…30§ z9e€
-ܸŸ­Ð«§žÏ~
-¨²îU»’¹"¼>8@“ßB'$Ä°xÅÅD}âœè´[Yq¬å¶Ì¥5œ¨Y N8¹dÜ€”Ì¡§Î¾îË­uJ–*÷&ÉLÔ,ÛÖ„É›­N‘Psœi)¨¡½ë(™U·S¹Ž£œ™5Ï153Keä©9§V•*žsC²,¬
-kóÔ>*À®öuÎ.Ø][n¡Ò Lj7t§òýÈ*¡  al¡‡ l¡ }€ëMu·ºÅŒ„SIÝaFâO·ÝZ'¬
-” tcó3Á]IÊ&IÉ$ 9RëSsŠ
-ƒ~i·§ &¶n l ë®|`†c¾Ã¶ÏËtižðµËë[òØ·ê¸3½˜éž$gõUnw»¶n%Lþ'2;€¨S+¹™ǦaJ­Ž0IíÛ™b=o
-&Órà·Î«}aˆuê†oo¸ñe–f„ ­”ìt”¦ÑÓ5x§5ZŸDß ñƒ}ŸúÚÓ (µgŠµÄ úÈiª—x?GƒÄЧ¶ì¥0 ³ÅFUG‰¥8Lynæ¦r#;Âõ\qc‚‰¡‚RÍOÆÚ÷Wgc´N¬êÔN¶äÞ02Ú±„änÀQÉÇ•|ôé(u†1Ü=ñ¦ê™ ¯7xIÇ膾+蟛Ã<óõ RîÉu `Ý-<²¦ô)µžlÑÉ­¢;|±x7ßbøâë ×]‹ñÄ1i³>[áƒ4rÃðdz„ïBM §³`×L¸AB à4/Zç/ÍŠSVcgág¡ëÅ¡°‹¼õæû°\ij ñ]_øtUyg=mE¸…çF’kŠ÷óE,ð0öëdžž^¬?rý´…­g_f`Å0Ë"²`­ëh¸¸Ùú³× h4³”2Œ6g­Tlw.$ˆÕYf®—†Öý2„zebáÁ™pð0÷#‡œ¶#Œd²Þ¬ÅË A 'S”VB/vZÊ%Ì¢e@»ªá[ϺÙjxXZ£ â¨3‡sz
-ÙpI:çg¤ž°äˆH¸ä=LËz¤¡nZp·&ÔXµNöìé—oð¯’;Š]%ÍkÀøfSsQF¸?m6†×à¼yþ)gñø½ç‡žžÌöz“=ï—½4’[›«U÷’’+¸ßÉïI+£Ký_ ¢°6­ñi¡Mßï^^\Zµºë*·i×]³osuÁ¨ñw{ÙºëoÓ¿NØ»\í[i^\»Àê%´ˆß‘2°er¾}]ðJs¹ÛÑ¥çôøL×øÌ+ûtD>yv3÷ã†æ}\ìÅ”:„û$‚PŸ<\Ì“@œ:í߈fYÖEvÿ/vŸóNˆG§´œ~²¥€Ž"¦nïÞP¼ú·³1Õ„‰¤©?i }uØ°P¨cà=‘ÜüÈöTôÿZ’SLendstream
+xÚ¥]oÛ8ò=¿ÂÀPˆQÔgï)›f¯Ùîµ¹:½Ãa»´Lۺʒ+ÉqÝ_3œ¡$;Jv"@4‡œá|ÒbâÁŸ˜„‘¥~:‰ÓÀ =N²í…7YÃÜ?.ÓÌ,ÑlHõóÃÅÕ/2ž¤nùÑäa5à•¸^’ˆÉÃòw'p…p§ÀÂsîßÝ̧3?ôœŸ„ à³z7§2vþ{ÿ0‰óáÝàxvþéþþƒ™}˜ÂÞ¡ïܼ½¾¸ýHÓó½~ó啕~sû†¦Þ¼ç~¹½žÆóðéãí|úÇï·\CÙ…'Q¨¯¿ÿáM– ‚_/<W¦I89ÀÀsEšú“íEJ7 ¤´˜âb~ñ¯Žá`Ö,Õ¥ð\_Fþˆ2}1+˜j3L]?‰ýN›Ó™ð¼çµYwmõ%ïµØìw»ªnQzØÃ\˜7™ù©+ã04Ì™cà3G
+Õ®ªz;£a^.õNÿ²%Äõý@DÛ´Sál4ÁYU¶fê@éP0¶4 IYÕŠ°áSè«Y-:Û×y{¤Ñ¶Zî s8ÖãÛù?›^‡ U»Ñ5Y¯£žªÍ`©óL7nw´Ä ¼(6Gûùî=Zj;)~"'ohø¥¬%¡ÚŠP‡ªþB˜CÞn×*Bá1_Og2
+ãðÙ7Æú
+|(u69³±_EŸ†ó˜ÙØù¢Võ‘·\à=£¤À"lÇœœèÕØÍ`ÆØlVm-]z\ */[]¯T¦ o.Ðdw€0 1çiå‰2: 3f dËc©¶y¦Œ«áDQ©%Ê„“ Æõ~
+*s½ïŠÔœ¹wãÔÝMgUMÚÈìÊM•gÚÖ_Ö%±n+Ÿ»‘s³}ý\›„¡ 5ôr‹4¤2U½é=Û£/TÁgOÄç›ÆÀO$þË›Z¢§›žÔ‰pÃ4 O7ýÔ°"^Q*q¡â0u6f%°úWDÈ¥éΔñPlìmÔ£&Üx¹}^xáYážÆüK[Rƒ%DnÕpñGÍ€àb0\쪫cMÎîB+ÐdŠ Œ`sq‰ñO@R¬á¶(É.cœ  4¶cy˜wÎ,ð”#ÆoË¡QsÒâðÏÌm@õ‚¹Yª?5·—6íÍí|ÓqsnJæÇΫ&_—³ª,ŽhVq×Ôı5+À±Y®·!@/5.6ê‡)sU€]íËŒM°»:ßB dê8˜4fhÓíu¬bn+€ o+
+ÛrTHåiÍV
+R[dEuq‡)ÏMÝ„@.d#G¸žë1®0dPÊùqŸûþŽã´÷Ö‘UÞ©šÌFV:>!™pÔê<³“l OC¡3ˆ åÄÕ³}®×YIÃ芾+¨Ÿ«Ã4õMã !÷ÀäÆ ´éÀPúZO¶hÔVSë_LÞÕ’›îw½®Ë01{£Ög3¼Ån{é_zx>Ôna0þð ۦ•qò/Zç/íŠSV}i! ß@7Hòƒ7®È‡Õ"šøaàFG/Èï/Za$žJn(>Lg‘ÀçüÈwnÏ<½Ø'¾Cå ÍÖ“¯Ðb¦’ˆ°µWA\ÝmýÉ›
+š d²ŒgCÎF¨hX¹¤‰ T°¿„F ºÊ
+%Ì¢fÀXªå[Ž¾Î+[M¥‡™5”!?Ó@š9äÒ%>´×ÕT„¿³˜wYšØï–ÊT´ˆ4=áÍ |!×ø`í4*ª4‰Ÿfzïµ5oRëÑ÷A#'å‘äfNBY0`Žé”SèõöÛæ $ÈßÚFft|í`:p^#º¸²Î@³NÃŒ‰0“AÉU ðyâ®A„?À¤Édà?æbèÌa
+uù¬ÿ¡èÇÀ©×z© ÇksK&
endobj
-1485 0 obj <<
+1499 0 obj <<
/Type /Page
-/Contents 1486 0 R
-/Resources 1484 0 R
+/Contents 1500 0 R
+/Resources 1498 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1504 0 R
>> endobj
-1487 0 obj <<
-/D [1485 0 R /XYZ 56.6929 794.5015 null]
+1501 0 obj <<
+/D [1499 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+286 0 obj <<
+/D [1499 0 R /XYZ 56.6929 769.5949 null]
+>> endobj
+1502 0 obj <<
+/D [1499 0 R /XYZ 56.6929 744.5025 null]
>> endobj
290 0 obj <<
-/D [1485 0 R /XYZ 56.6929 769.5949 null]
+/D [1499 0 R /XYZ 56.6929 659.1833 null]
>> endobj
-1488 0 obj <<
-/D [1485 0 R /XYZ 56.6929 749.1444 null]
+1503 0 obj <<
+/D [1499 0 R /XYZ 56.6929 628.6281 null]
>> endobj
-1484 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F14 964 0 R /F62 1361 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1498 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F14 976 0 R /F62 1379 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1492 0 obj <<
-/Length 2124
+1507 0 obj <<
+/Length 2097
/Filter /FlateDecode
>>
stream
-xÚ½koã6ò{~…;`e bøÒë€~H“ì^ºm6Ýx[Ýâ Ër,D–¼–œ¬ÿýÍpHYr”6w‹;‡œáp8oJL8üÄ$W‰žD‰fÁ$[ŸðÉ=àÞKã;"¿Oõýìäì­Š& KBNf˯˜ñ8“ÙâwïâŸç·³«S_ÜÓlê!÷Î/™
-!¼ó›‹«KB]ÞÜðöê|ioöéã¬DI a›vçíû K÷7!øÌ~ñqª"ï·ÛÙTÄÞ‡÷×°f±wŸno?ìlúÇ쇓«Yw¯þÝWx©/'¿ÿÁ' PÁ'œ©$&O0áL$‰œ¬Ot X •r+åÉÝÉÏÃÖlÓeGãë˜I<^s¬,I=~,ÃD, Ã?¹íãÀË‚nÇÕÁÔa³P„¥¥œ€’ hꄳH€…#¥Ç%°ô ê×&,µ@:ÁY $Èm(>LýP€üPzWÇÖ
-eÏw…Œ4è…Ã-5ˆŒ£kÝÔm>õµV^»J[„4@vi“¶ÙŠÀÏœË2'ü:*îí QÕ-s»)«×°¯˜O%÷ÜŽ§¢]¹S,Ùg)µá
-2]…Ýg4tòÏÓ¹QP4ààF€…­Ú×»­Å›
-¦¡à¶ÊqªܽOvùØåma–l†ÁŒ2MdŸ¹åÒšXÎéê!-Þõ¡ ¨š£Õm·PÛi±vU`™6mÞé7µZL+›ë¡M<*†_³JÝ3gîzD’Öï ꃤoF+Ûuuü6êz«AQJû/¡awyìfò5‡XwÇóŸ.C«÷’üÿÕ²†D„~äû Yö§uKŒÖ-W¬Býªz%GêÕ˜þ—… Ô[ç4ÑFuïeÌ\Vc¨/P–ÍÝÆœ6ñŒ–îîSѱ»¹:xcÛjZ&S@ÇÊ&‡»+U/•Í’$,Š8Â)a*ˆô°va
-cKÎ^ú¼¬†ß{G>óî“ê7z>|ÇÒpÑ8–ã…JñÅ2‰œP(¸zöá.P1 bˆþo½Òendstream
+xÚ¥X[oã¶~ϯЬ D oº´Ù$»M·'›³ñž¢èöA–i[ˆ,y-9‰ûëÏCÊ’£´iF¢g8ä ¿¹PÌ£ðc^*RéÅ©$!e¡—¯O¨·Þûfe'ô¥ÞNOÎÞ‰ØKIñÈ›.zºB“„yÓùoþÅç·Ó«O“€‡Ô—d„õÏ/ÿ7aŒùç7W—Ⱥ¼¹CâÝÕù$–þôó§+‰ÓÃ4ÆìÌÛVî;ÆøBCzñi"bÿ×Ûé„%þÇ×0f¹wŸoo?îtòûô§“«igWßvF…6êëÉo¿So.øé„‘&¡÷/”°4åÞúD†‚„R7RžÜü·SØãš©c¾ EB„Ç#ΔlÌ™2&Q£3ÿ5 "Jý6Û"ñÇÓ‰z£ª¦)JR’4ÈòmïÙ;Î{Z©J8ºóͦܣ›Ú•Bb“µù
+ÉÅV{³^I¼½¾±g–âÈ©Reú7®9°d¸¦5Á.£É`Ã,13Ǿ0!µn/f$àG@D†ÜèüefE5OÏàÿÙæ>o;*
+pÍ@ F¢4J_…ÆIš†r`o gE‚(œGA—%ÝŒ¡ªCä…¡ŠFXàX;,¼”’˜AÄE,!·Üô
+Ÿ²õ¦T øˆSî?Z©|U×¥ÛŸôðÅ ëÈ€¼Ûº¼k¶zˆŒÙòË$å¾-*…1P»F¹‚S4HnDÍÊJæu¥c}¹sž8*SÄ&Âãª$ —6¯˜~`…RòvWXähÝÁ˜ªXo
+âùÕ-Ô^‡¸¡Ýn.ªÝÓx%æ!‘"²8ÕÊç¨ 0ß)ÓƒÚú™ácU,Wºpk±FåÙšw¯öH4m½Í–
+¥æê¡ÈÕ©N1P'w-Š @5ß
+Hqh0 ;Ïx(ìö?ËfÆA Ñ
+–`’Ñ,¿@Ù´r:æbçÀMi’±&õ™êçQ9ƒ-¿º¿Ì7¶Ï4ÓÉû‹ („“¦&@„ÈY@ÿÙ9ØÿªžZYßÌwƒúä‘ʲ¢Lr›C`³ŠØI>fÆ@CK«uë“ö1xôzã==©Ë|ð¢»èJ°Ç`˜‰Š#yPÜ-ÏmŒ‘;—Ž+•«¦AkC¬.1Â&Ü)føèìp0·3³³ xûüÁZp»\uNfºÍ®XšÑyÞ*Kt×é‘Š~†>Yw‡ùº+hÜ<|ÍæÕÔÔø_ïšv`ˆµbs˜J^ÙñûÏÈ‰Ø ä좮Ô=…¥>Ï`©*µ-ríGs­Zw”ÞìèWª ØÜ3€ªl­~øËHjì¶ËúÊ¥Î}?tIñ¥IݶjQ<¯=”³ ·]´æ eØk
+áÅ@+…¦Qò%ípÝŒ©ä}åf^«
+ÚÝL3Am£X¨»› í²±ËÚÌ Ù£o/Â4}åVKkbYá
+Ø?Z¾ëAÁ=P3GkÛn3<@i_‹µ«‹¬iUçßÌz1«l¦‡ñ¨4t‡0ìöšUæ®83×ânƒþFØé›Ñºv]ß‹º¾jP’²þ-hØYcÀ¼<%Ñël<ÿÏedýán‘ß\ÉÆ>½ :1öµ”v߸¾ùÛìá«‚Œ!Ç%|<u‘„§±Û”6J<ûŽÒ}Ä}¾õÿã}Ó{endstream
endobj
-1491 0 obj <<
+1506 0 obj <<
/Type /Page
-/Contents 1492 0 R
-/Resources 1490 0 R
+/Contents 1507 0 R
+/Resources 1505 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1504 0 R
>> endobj
-1493 0 obj <<
-/D [1491 0 R /XYZ 85.0394 794.5015 null]
+1508 0 obj <<
+/D [1506 0 R /XYZ 85.0394 794.5015 null]
>> endobj
294 0 obj <<
-/D [1491 0 R /XYZ 85.0394 603.0093 null]
+/D [1506 0 R /XYZ 85.0394 491.3865 null]
>> endobj
-1494 0 obj <<
-/D [1491 0 R /XYZ 85.0394 576.4312 null]
+1509 0 obj <<
+/D [1506 0 R /XYZ 85.0394 466.1094 null]
>> endobj
298 0 obj <<
-/D [1491 0 R /XYZ 85.0394 268.713 null]
+/D [1506 0 R /XYZ 85.0394 166.668 null]
>> endobj
-1495 0 obj <<
-/D [1491 0 R /XYZ 85.0394 242.1348 null]
+1510 0 obj <<
+/D [1506 0 R /XYZ 85.0394 141.3909 null]
>> endobj
-1490 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F62 1361 0 R /F21 938 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1505 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F62 1379 0 R /F21 950 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1498 0 obj <<
-/Length 2224
+1513 0 obj <<
+/Length 2160
/Filter /FlateDecode
>>
stream
-xÚ½Xmoã¸þî_aÜp2Ñ"©×®@Ö›ííí6Ém¼-Š½ÅA¶éX,©’'ýõ7Ã!eÙ‘Ó
-Ã9C‡Ã™g†äc~|„,LD2ŽŸÆËíÈßïÏ#nƸvÛõv>š¾—Ñ8aI(Âñ|Ý“3/Žùx¾úêøŒs6žsûqv7qEà9ßsNß¼À›}žÈÈùûí|Âcçæã îÝ—ÛÛÍO`í@8³Ÿ/oçWŸ‰í¹—ïþ:áœ;—׳«wÄzwmVzu9‰|gþåóÕÝäÛü—ÑÕ¼ÛWïÜ“¸©Ž¾~óÆ+0Á/#É$Æ{èxŒ'‰oG~ YàKi)ùènôk'°ÇÕSmÉ=&d(Œ)ø1ƒ„…Rȃ19“—{žç¼Ýeù*+îi«7•*îî>Qg]ÖƆåºýùî/¸wXAôVðÆ0€ù" µl;Е‰ïd ~'¥O¼}Zã)g‹:­Ÿ‰]iNù˜­ÔŠØ Ãi7Š¨ÊÝÕŒ˜)ÿPË– 'lÚ¶z3î÷ûI"VÂœUÑ4jÉJ=ü^»ìuK$A ´îûM¶Ü€Ïïë‚{ðhÀ@ïÓ~‡¬hU½N—Š†´%‘ÍÐǬnwiN<°É…™´­rµU0ue¥˜éz—@
-ö4±³, tÐû]šøÕ)]ö ¼ßO!nA:ÂT#!çð˜ ü$Éc G±}Ól]H+Ì:‘nBY¬3X[Ñ<×­jµÎž~š–U;­– çÓ]SÁš±MÔkKh¾–ŽNøÚ`ˆ°²ni¸q–ßñ4Ž2»c¨ükš©å¦$Qßyo†¬ßÿOôù¡¿äkjž˜gºÈ
-+ÔÃÊmË„¤x–Ñäe{B
-%'¤8ÖD£,FÔÙí— ¢‚·w ‚¢“I9ª¼Biðá,H…ˆ uà&ya#-žÛ !°Im 7Ù}TÌd Gä¤Õ-”¡V"töŠFƒg”vÊô@üe¸¸Ù‰a(ÓG»0Á:¶¶Fp>ˆl v½Aöb+£¦É]%,nÎxdÓÙqÔæY±{rŸâð÷Ð7.Uµ›Z¥Fòo\úZ^ÄY$ù±PùÎ]¨+Št«N
-tü…5å‰Ä“Íaë­öSgÎs“: ΂ÎI ¸v};^®¡î;S8 ¢érÄ⪾Û?îÌ“>$-Ð"ÚÉâ*/ Ì -Ê$ùÕ«Ò%g1÷¾pÊ
-ÇËe|É|&½e¨4phÉ1åõK„
-V‘Pµ‚MúhHè§-5{yzÖ&RÄgmLÄp$=Òªj¦ÆEI†*î³Â,D‡6°."–ð˜ gè8‡¯91 YHÞ¤FaºX¢‚Tà©ÙU:;5É„Çã“KCŠð$¡º+·UFÅŽ ¨¨×Ôšà`Ù‚WâýR_7}SiÁˆr×VR`Våp¾"º.¤$B¡¸&Bkg®K¬# ˜€A©kNDÅ•Â[OÇ*6fjpÀ™Áz;mÕj¨ð# /:¼tÑyÐ¥CŒ‰-mLlØãÓIÇ–ÂæcäT‚ðµ7´Ó`\þ¦þ¿jJ©úér Æ‚´VÖÿ•Ê×ê©E°ˆãXÄgÃ9€™"
-ã§Yu±mâB·Ý¡`ç2dìÇÑw1<Rßb¼eäFtÚB¢­Zêè²2özõ»¡oLÃ<ÍÄöi.~ Ü@=½w>¬ #Ódi
-‘ôLǸ1Þ¬_±`÷°ø +ÉS«v÷ÖË«[j|TÏp}xÍ̽_à“Ÿȇg%¼"÷ž‡j|í½°SÈéª9½~/”½³#4˜š,+N–z±yíìÜ;²„íH9ôêëu^ü?¿1ã!?É8Ã"Š™ƒ£šXŠšÛÇè—ªÿ::,±endstream
+xÚ½X{oÛ8ÿ?ŸÂØ[`e ¢ùõ(ÐÒ4¹íî^“­Ým±m9ÖE–|’'÷éo†CÚ’«¤»·À!LÍÃá<~œ¡qø#²0‘É(J¦¹Ð£ÅæŒî€÷·3açøn’ßõfv6¹VÑ(aI(ÃÑlÕ‘3Çb4[~ò&ƒîÝþ|9ûRsï/BÐà3×üòÃXEÞ?ogc{7?¿šåN?ÞÞÞîl {ké]þxq;»ú@ìÀʽxû±»xyõ–XoßÛ®¯.ÆQàÍ>~¸šŽ¿Ì~:»šÎÕ=»à
+õï³O_øh &øéŒ3•Äz´‡ÎD’ÈÑæ,Њé@)G)Φg¿v¸fé -gR…rÀ˜2¦NX¨¤2Æü~쇜{lrY•«ünWgDhª"­ó& üÇ8ü ~ b|*Àc"Á"Ûƒ3­¥‘æûÛ{!ü"Ÿ—é&{=Ù5õ>&a€?ÛûE³›êD²*Ò‡ª~½¨Ÿ¶m始EVduÚVõs«…[]g«üñõ¤Ú¶ÚõÀ¹“k);ñÝX7¢å>׸º:¥%ýyÞÒx¾Ë‹å9wMfcNÊÀ ͶBŠ•Q.ip0F×Ì„¦;FÌ¡c£ÇŪͬ‹ªü̹ßäåݺÇÞ®´gê:YpθV䡘MzŸ œ\FN‘°“PÅI S:
+º‚ÌÖmÖ´"ÅÆv:è‹5b0x
+l9Ò*dW¿«n,‰ãx¸jðý®HSôðRÈ
+=¾‘Ž1ø’0È°ªniº•ßÐ=…ìé*ÿ¢°ÅÚZßñWC–óïˆÿWúù¾»åKg:1Ïdž—N¨3$f•ßV÷HáŽÑU{B
+±~€Õ 9ªÄ+šŒ23Ð#(Ub
+K$„½»p–OíšðHp«6›ü®*^d‰@ܤÝ¡V2ôö͆À¨ÜtÑñ”áãa $¡Â
+œØ„ê8š»
+màHÙ@æ:ò¤Ûw¸”Ũi
+Ÿ³„ÅÍ3a=بy¹{´MŠ¨m»®³tù?ô+'}Z­³óèô-s~³Ùù3íÊïkMÊ`àWAü†!` ]W1ÐÝ<#]  þ±&"élC…/AK÷]¯@¸¡d• +8X§–„qÚÒ°sK×3Š’ñ³F 5“±Š\ƒ´Ý6¢$#+ïòÒnDN8€6+±èY W˜<‡_ë2YH^§Vaz×@©¾R³ÛšËÌ‘(&¹ˆOz†áIAqWm¶9•:JSMo¨5ÁÁ¢…¨Äç óÚØ: fT»vk V5P K¢›2J!º‰+"´nåªÂ2’€ 蔦äDT\fØôX•ÕÆ.ÕGœÈŽzþ´C¥@±Xòè«îÜAO>˜ydK[âÀyÏ\9Ö®”¥°ׂd¯ëÏNsqh÷›úÿ©'ÝkôÝyù#
+¿Ï[DŠ8>"Eül.kèÞeæ.sÚâØæ„ûC™. à„Lï§:´a¢Ñ´ 16…¶pÉn[ú0eÌ;•»¥¯íÀ¾
+ÆîUz>Ð êPÏl"¼w++ÃÊ´74 KÈté~«]WÌ.íoã~wà¦Yí
+›Z€óC¯dŽb S\iS Dˆ Ð…C OÖÏ®_¢Ï/†…uÃÕ€i W}EC¨Ðe2 Ú7 uãœ;
+Üç0TIE'H8¿SŸè®#¦@Á\Â÷‚CcG£›•Ò×~S-s„Tƒ}¡>> áG³ËÛŒVƒ¿¶¹TŠéÈ]ræB&ÓR±Pë /^Ö:ÃëÞsØÐC±Ò, æìôYþí^úùøÚ  âX7ƒ2‚¸ˆAˆU
+Wò+ÍÝkóתÿ
+ú*sendstream
endobj
-1497 0 obj <<
+1512 0 obj <<
/Type /Page
-/Contents 1498 0 R
-/Resources 1496 0 R
+/Contents 1513 0 R
+/Resources 1511 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1504 0 R
>> endobj
-1499 0 obj <<
-/D [1497 0 R /XYZ 56.6929 794.5015 null]
+1514 0 obj <<
+/D [1512 0 R /XYZ 56.6929 794.5015 null]
>> endobj
302 0 obj <<
-/D [1497 0 R /XYZ 56.6929 769.5949 null]
->> endobj
-1500 0 obj <<
-/D [1497 0 R /XYZ 56.6929 749.8188 null]
->> endobj
-306 0 obj <<
-/D [1497 0 R /XYZ 56.6929 169.0885 null]
->> endobj
-1501 0 obj <<
-/D [1497 0 R /XYZ 56.6929 140.0535 null]
+/D [1512 0 R /XYZ 56.6929 655.8524 null]
>> endobj
-310 0 obj <<
-/D [1497 0 R /XYZ 56.6929 106.2012 null]
->> endobj
-1502 0 obj <<
-/D [1497 0 R /XYZ 56.6929 80.934 null]
+1515 0 obj <<
+/D [1512 0 R /XYZ 56.6929 630.3608 null]
>> endobj
-1496 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1511 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1505 0 obj <<
-/Length 1981
+1518 0 obj <<
+/Length 1877
/Filter /FlateDecode
>>
stream
-xÚÕXKsã6¾ûW¨’¨ª!„_HÕ8“µ½¶œÊV&Š‚,Æ|hEÊýûm Š¢9“Ì&—Œk
-Pènôãëل›$!¡B“X$¤,œdå<ÂÚ÷gÌîñÝ&¿¿ë»ÅÙìRÄIdÄ£ÉbÝã•š$l²XýêÍ8¿]\ÜM}R/ S?Œ¨wþîç)cÌ;¿ž_¼Ã¥w×÷8¹¼8ŸÆ·x¸»
-öÈ+Eô®ÙeÀzag#,¦‘9óÍÔ(õ²Ž„ÌÀ+9ÆÞn%3Pgƒ2
- óùÛ¯³ èke§¾ªÀëÊo7;•®¤~`•B‡"8•áû/y»ñë­ªš¦x;Û̶OYÃØlßì:ýXÿ,nAtëÿH!M¦á}ÓøJ$"
-­ÁNøÔgT߶ó…q·6õwW׃$˜<;ê"Ý™Z;œaNéõù9Nà^ÔjÄOÅ#’ð0ÆìJîÕŸ>Éwä¶&vêç|¹ ðøÆÁ˜2þÑL=[ZfèEVy5õêò&7>yñßy]à}LwÙæmZ®¢àÏ`ÌH,Øh }aüñ±øsAcq×÷²ï4é›G¥KG)N:3['Ö¥£‚E `døSÅ@™5Œ^#¦´9ý%á, Dƒ³`´qÄr[¤¹†).…—.ë}‹+7`«ûûŸðGU[êK½{‚ÑK…w¨÷H.Ó2ؤϖsŠƒà3ІjõÎ[•µ=M„WæM™¶Ù†Œùঋí8²Rc'5fN*Ìò*«mÉÊ°d±Ùª,×w7ÑŒr˜lS“cšTãx¼6ÐÎ2šk&›z_ØóK5àÓ¤¥™Ø_ßD[ ð ÂGäŒvxÜûcˆWB¹µéXÒò¨^ØÇ,Ë>ddÿt‚Æ$ ‰ìŸøÿ€oÝþpÿ¯O @Bâ„Ê¿ þu†Ö™~Ÿ¯[e­—õMms|7M¼½_×
-êÄkî ˆ’w‹`®/ù„°D 'ŠÄiÓ¢‘F„…’õ$!"èÔ'\²äÝtŠ^×­úø&Ô€“¨JÓ¿ô¥Pgýk mkƒS]ö̆:žC÷7‡¦Uå‘“¶+åCšf`HO†Œl5ë¶UNDm¹©v óþæra“ªÿ
- 'qÄØ„'X.þ'Þ!œÈ$IÆ_!~ÇÑï³|ýÄr åQ²y°Ý\_¢'AI Qyš{ªzα©Ž
-¦Ç¯ÝßâÔ¾°#¥5Rl$ÃLâ[ƒžn…TûrÐÒŒc“îBLyƒ‡*Ú
-éøH%cõÐ ëÍâB#+4_¦„±ãÔ±‰í÷1`‚íThðô ?4®"%̃èݘš¨7nÒªÄ}™€‰kÎÌÆþ’E˜}íT{%&´+T¥;Ü:øv"/9T$hc°Á3#z§v‚Ox˜œH4Ç€w
-µ¶ÇöÕÊ4€•‚W”C÷üШG¿Ä½bç;äØmÒwglX- ¶ Mâ
-P` ÐCÓõÄã®ýý\é¹ÌwØ'èw¼¾À1K`²ß˜c7Øæe÷F±PóÙGAבTOü˜+ûM K«ÓOE®ÔêÛO}! 0
-†_/igÑ¿ü­ôøQ9ˆ‰H>uº’&\ÆN)mu!^õPî£êkÕÿy”¼Üendstream
+xÚÝXÝoã6÷_a´}•LŠúâûõ&mº½$]{{-º}e9Vc‰®%'ëÿþf8¤,+Jo¯=ÐÆH ÉùâÌCò1ƒ'¡Ç„ Ʊ ¼ñpœ•#6¾‡±¯GÜÌqí$·;ëÍb4½ñXz2ò£ñbÝá•x,Iøx±úÙ™}sq·¸|?qý97qÈ9o˜p΋›Ùå[z{3§ÎÕåÅ$œÅ‡÷—@‰eèÃ2ÎÍÊ»w33ïKΩó‘…lö~"b移ń'Îí»k ™Ñù‡»»[=º˜ü²øvt¹híêÚΙ@£~ýü ¯Àߎ˜'dŽŸàƒy\J\Ž‚Pxa „¥lGóÑ÷-ÃΨ^:äËP$^˜øñ€3}>;eúgÞ ¥ _hojOø—3Æœ7‡b»*ª{2ôÍõq¥¤æ©h6ÔC§¡»À~âw¶Œa‚N–šý¿6yÌ¥p–-oü"ÞØ“¯€% f“a«²´)”Y¦ÖÔšáÀÉu£JÙ54t»Ë«ùü;³ºXîÓý‘>J˜k¤æõ.ÏŠŒùùŠEjøª
+é÷‡=îxîÛø¹m|‰¤ã:çÍZ/{p­öÔù®¨Ÿú^Õ6bçâòŽ:ïòã.ßÿž›I•ÅDúŽ¢5Û¢zx‘ó@´ï´Áê±X$È“Wv 9"]ÕD gboi˜åUºÜ¢#ñ£¨z¢ž¯#@ûÕçµ<I}½†V=.Œz@j7©ä? 6v¹
+†Œ«4±¨‰–ödDÕl4¤*ÛKÓb L¸cx¥µiiµðÝeÑiYT¨B à†/çzM³žìb’d¦Û`·Æê,$üÂÈ<D)‚GN$mTÝ€û…ð5[&¯ã Ú²ül¹UIZ*‘—G3kE9‡´¾¸¥ð±¥ÑFÑH>س©&aMD«scg!^Æh¶göúÚÞL•eZ­Úà´©ôS‹yA$#½æ«‰AJe+j=o
+°’CìÍTo
+ê¬ P&'Âlöú‹û,£4û Óu)l]p
+n¤~ä‚” «Bœo™ëb*¹
+€¦®·¯§à›éî!«9Ÿê}CO?³–¦÷—N!ºñŸ(^­PÇmU
+bqÙÅÿ`Ï\mÓ}Q¿ˆóÙuÀ,ö·ÃžÿKàµq÷)Ýg›×i¹Š‚Ï‹¿˜{±àƒ!ô_†
+?sQ0vÝ]v­&]÷`eteã(¥¦…Iëf³‰ª´TðˆÆ‹Œ>Ñ)ÉŒcpÌÓõÕÙÑh‰f!Àz`c‰ån›ˆR>œåéRikü¨”¡>©ý$B,ÎQˆ\¦Gb°I ç”áO->kªÑ»hò¬éh•FQ—i“m¼¡H¹mc;ŽŒÔØJ¹•
+½¢Ê”9±2:±€xV² ¢:»Tç’µ'³A
+Ä€²ü‰SÆ<eºù~±nr㼬ëi“âûIâ öÚã¿·}œá­#H@aéC> 
+ó :<)Ðr8&žs„ˆ(ép7
+!M£v…´*4ïUÓäV„2Üò¦'s~{µ09Õ½ ‡Ü÷âˆÃýSßIÿsî¾'“$¾ »-G·Ë’®¹g[À!)O’õ£ÁíÍíD
+6ð?VUÅ„Ô(&<¶‡U^1%bYTE™n‰¦7©xgFB£E™®‚;RÚ䆨q¨°¯ˆDRÌÍ¥Ÿ £Ûfšûï!JžÛI/‘ør¡g“|éÀÜV„¬N•?ÑÞÈÄâÛ@ØP-¦‚‘”ººÄðG*YDmÅ
endobj
-1504 0 obj <<
+1517 0 obj <<
/Type /Page
-/Contents 1505 0 R
-/Resources 1503 0 R
+/Contents 1518 0 R
+/Resources 1516 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1504 0 R
>> endobj
-1506 0 obj <<
-/D [1504 0 R /XYZ 85.0394 794.5015 null]
+1519 0 obj <<
+/D [1517 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+306 0 obj <<
+/D [1517 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1520 0 obj <<
+/D [1517 0 R /XYZ 85.0394 749.1709 null]
+>> endobj
+310 0 obj <<
+/D [1517 0 R /XYZ 85.0394 714.4776 null]
+>> endobj
+1521 0 obj <<
+/D [1517 0 R /XYZ 85.0394 688.8412 null]
>> endobj
314 0 obj <<
-/D [1504 0 R /XYZ 85.0394 638.5372 null]
+/D [1517 0 R /XYZ 85.0394 535.7123 null]
>> endobj
-1507 0 obj <<
-/D [1504 0 R /XYZ 85.0394 609.0615 null]
+1522 0 obj <<
+/D [1517 0 R /XYZ 85.0394 507.2665 null]
>> endobj
318 0 obj <<
-/D [1504 0 R /XYZ 85.0394 430.1605 null]
+/D [1517 0 R /XYZ 85.0394 332.8138 null]
>> endobj
-1508 0 obj <<
-/D [1504 0 R /XYZ 85.0394 403.4942 null]
+1523 0 obj <<
+/D [1517 0 R /XYZ 85.0394 307.1774 null]
>> endobj
322 0 obj <<
-/D [1504 0 R /XYZ 85.0394 256.4314 null]
+/D [1517 0 R /XYZ 85.0394 163.8619 null]
>> endobj
-1509 0 obj <<
-/D [1504 0 R /XYZ 85.0394 229.5399 null]
+1524 0 obj <<
+/D [1517 0 R /XYZ 85.0394 138.0002 null]
+>> endobj
+1516 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1527 0 obj <<
+/Length 2117
+/Filter /FlateDecode
+>>
+stream
+xÚ­XmoÛHþž_aàXùP)šÑ{€ý6î5›^ëMÜ]m±­q¬‹,ù,Ù©{¸ÿ~ä#˶úìÁÄáÌpHùc1pá'A脉LQâ;+‚Ályæîaîg‚×Øf‘Ý]õ|rvþÒ‹‰“„2LæY±ãƱL²–ïá A„ko^Ü m¸Öß„ ⣸/n‡^d½O†"¶ÞÞ\gïÞÇoõìdgÒzñêr<ÝÒ´Ïr/¯~
+!¬Ë7/FW4uõ†Oz9ºF¾5yw;º~šüz6š´vum®‡FýûìÃ'w ~=s/‰ƒÁ# \G$‰,ÏüÀsßó §8»;û­Ø™Õ[{})\Gz¡ìq¦”}Î 'ô¤§ù˜ÅÐöbaM7yÑ’‰fÁ“«5º´Úæ™ZÇ­€BÍyÛ¦ÌÔGו¥ÊÀ±‘ëYïju$Ñ^Ò·Z5yU2½&‰í"¼g¸à#oûAàD¾Û±èü-$Žã~oÛ­D»+òÔ•~;‘L¢C_Žoßþ~}±z‚,W:®ÆÂ5 ©×¨r›“Ë¥*
+©mºÎÓi¡hÔTô­Wj–ÏwÌ\ðì*m‡ëöSÝËut܃2 ½´ZÌÁVÛN7³O(h ×uá†òòþHð«»²˜®@ŠŒœ(¾–ò2_×Í3ÚðÈ—›šM¬›Õ‘ðõ0†@iò%{=TÛúv¥Ê»»×4HËŒˆ<(òéÜ«jÎÒ’ˆ) *ª4SÙÙç‹Cû<áÄ2Öæý4´Áa–ú¼ªÖ ѯ¯þ|}ýüöòöýŸãËÉ«_Î!†ÏW³ZˆóM½>‡£/~úÏѪÿö{²sÒ …:†˜j6t0L™}9q£v+ºjô{è[yC9ZJ+-´ã€Sª™ªët½£aÃì}Œ…œ“HÕ,¥lÔZ̦¥õQJ™Îy©¤YÌóB±‹|¶Ðià†ÝTúnñ:<OZy9¯ÖK> é´Ò ãyœýÀc35=¯˜ØÔ<;ÝÑ—î7ê»GÖZ‡¢a§Á±>­ëùÑql È,V¶Uº'Z|?r‚0ˆÀb4ôœAÀpÙ TÁ0NȨsB¶ñš”<7gŸÆˆH"G†PSH>'x¡/tívõwBøfô~<ºí ã^õ¾ºdÙd¡ô½$Éi·HWÓÂœ˜ò.H<B¨­¾7˜&(u*àlZîˆhªª %Í"å­à”ÚðX, Ø3¢òrVl2d€ñÀ˜î5Q*Ûjw¯ÊÛC¸[íœ
+Ärì ^ÀâŠl>æÇNEâ‰Â2U7ëjקtL¡/¿'Ï,ÈʺV3´u¾®–E:UEÐ$pD,å*ÉBëü¾üRõFuäCO’øOøõ áöbs#Ø
+î‘rÑsBᇈDý çROÝÓ„F]¬ ÔTK¢ËÍrª˜êh¨®J¬¹ÏöeéÔ j­ÉeºTY%žë$‰ò*‡,à® ŽBÌo'ŽL½&ÒÂ8wMyƒ0/«GæÞ¦ ¯ ZIYBðfMTΛ)m\í
+¿Ï¯ß\•L=Hí`z¸Xb™ QÞ…m]k ºu[Ös×›&/òNúVVé2)=m,vCžÐyŽ“œç0iòÜç<‡I~ó¥Ë6,bÏÑNæiôD¥8§YJ+Óúh+ìÐU£ÚŠÀ ë1 e©ÏZ´SªæI
+endobj
+1526 0 obj <<
+/Type /Page
+/Contents 1527 0 R
+/Resources 1525 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1504 0 R
+>> endobj
+1528 0 obj <<
+/D [1526 0 R /XYZ 56.6929 794.5015 null]
>> endobj
326 0 obj <<
-/D [1504 0 R /XYZ 85.0394 110.5453 null]
+/D [1526 0 R /XYZ 56.6929 725.1329 null]
>> endobj
-1510 0 obj <<
-/D [1504 0 R /XYZ 85.0394 81.3565 null]
+1529 0 obj <<
+/D [1526 0 R /XYZ 56.6929 694.9784 null]
>> endobj
-1503 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R >>
+1525 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1513 0 obj <<
-/Length 2308
+1533 0 obj <<
+/Length 2294
/Filter /FlateDecode
>>
stream
-xÚ­YmoãFþî_aà
-T.ÖŠfôà>d7ÙÛ4½ÔM¼=,v…lc5²äzdg³‡ûïG9²l+m}W8j†ä9²è{ð'úaäF©Lûq¸¡'ÂþtÙóú0÷ž`™¡¶¥^{goý¸Ÿºi$£þxÞZ+q½$ýñ죸B¸XÂsF7oîCzÎß„ â“zoî~ì|"q~¼¹ÏÞ¿~4³ãìJçÍ»‹Ñøꎦ^÷âò繸}suIS—·¼ÓÛ«‹A8ã÷wW÷ƒÏãï{WãÆ®¶íÂóѨßz?{ý¸àûžçúiöŸ`à¹"MeÙ Bß ß·œ¢wßû©Y°5k^íô¥ð\éG²Ã™èrf»Q“3¿ #ÏsÔ—Uµ®‰þáò—®_ß]Ü}øet1~÷÷³jUŸ­§Zˆ³^Ÿùäü›Hý]qöVÊÖ†^(a©Ùê_ U‚ #áT+µÎê¼| aÆì‹«7ê$Ð˯8yM¹Æ§t²BWÄ)ÕTi­ŸiX3[¯Ô4Ÿ[æBQTSض²ZÌ÷¦¥óIÊ`™My©¤ÙOž' Åz<-òé-EÛ
-Ó0”Æ6]Wk 6
-ú¾tòr^­—¼2²Iµ©‘ôi?ä±™†q"6šg'Ïô¤ÇMŒ#keöª¶ù̾g²F'`Ðb ‡‘s=?ØŽM£™ÅÊ6JÓ!îEM
-Ea¿½>d-/Ç—Áa—7¦j¶±5ÀÇÆmRm ÞÅaƒj!51ð˜ås”+zÅ\mÈ‹6Ì{‘ÖB…¹ÅØo¸ùW»>e8ðªe^×Í^ˆ^1HÄ0Nb+Ê#¸”„clš!¬+€k÷§†õ°Áë™þKú%á¡š°ù•ú¥CÇŸ¾_-øž„µ4@%4ç[U4ƒö›Fb™qëEA¢æ¶­¯«½öžó%kZº-âBUfìЪÎrÔ±UÍU³ÓÛ¿Åü/%ªñû‰5‡¾`¤í#?Ì$a
-vÙ¬©Eðͽº$>=mÒ£‘çLèÓ ,
-ú¨"æF¥«%K€ñ-&
-}ãGšÛ4ŽUÿ/¬TÜendstream
+xÚ¥YmoãÈ þž_a N>¬F¯Áµ@.ët÷ruÒØw@owqåq,¬,yõâÔýõ%‡”,ÙêÞE>˜âp†Î|8þÄ$ô,[Fî$ˆ\˳…7IvWöäÆþv%XÆl…̾ÔË«ë{L"+ò²ÜôÖ
+-; Åd¹þ`ܽ»}ZΞ§¦ãÙ†kMMÏ·Û·¿N…Æíünö–†ÞÎDÜÏn§k,yž'ˆ<¦ Á3ŸîXîOBñÑöì»ç© Œ>-§"4ÞG¿<==êÑåôÓò§«Ù²ÛWï–¸©/W>Ù“5¸à§+Û’QèM^áöD9“Ý•ëIËs¥l9ÙÕâêÝ‚½Q=uÌ—ž -/t‚gºbÌ™n`ùA@ÎüóÔômÛXçU¥ó³:¾¨œXê_ñnŸ)+W5nóúÞqz‹ÙSÚ–'<©—YnÓjjJûVÒ©0ÖŠ™™ª˜-M™ÖGü
+zçħßÐx·ø;1À} oàNiÕÔ¼@š'ª“åU“vúJ±TV¼§(Y¤Ù­TY;–¨ o*fl@ö‰;ƒ»yž£wv2؉|CoNÅU‘Wh˜iM#»˜EÐ'òŒ]AÂÄUüøhÛN’ªœç  §U+Ux®öŽ€*¢Ð<Mhƒ‘Hs®·Ì /kaZñKÓ©‚…Ì*}ÉÓüe¸KºÅ^•q¹…î†XÑkú¡ñï"WÝDÍÁƒÑ„vºã´c`ÐÉg™ZÓwÏðÕ·)ëÎÖ ¤‘nHâX4´àkZmyL»•»½Ê«¸nWÓî
+J#ó¢V7ôù~C¢yQÑTäT˜ÅÓmÃä\TìO6ƒ(
+‡0h‹P
+ì«ÌJòÍ%xÇf,=ÇWñª8¨A怃¹LÆuà´¨æ"áš"㺩ÊkÐyÝ×}y‘<IèºFÄc lº.oxÃÊ@í·ÌW$1W])(éËÖ~y¾cèv,Û.UrK‡Óª,ÓõZµü#ýBæÄ/ÅiíǧÙ«ØÙ— 5<t¤?q\pŠ÷Mo\ŽA¿p™Ý‚foEýz5ÄyN`…Π•ÒOó{²V凔ÊY¾£B {9ÄejrÓê:ÂÄÁe:U¤óÖŽÒêYÂ}XèksqÇ*´¡cŸµ<çwè–7TeþB?í
+ÂqgUÑRú-IFÎá©!65Dò¤6_ögQžÔjÚ¢ ”ÑËöÊ”‘§SÖ²LQɪÆ^½Ú4GŠ5`å
+Òë?IQ¡8aX¯Šîí’ðéÙ¨ªÏ^Úbõ¥aë!¦ë°4X¹ëžNÆÓ¥gá øÈÓ·Ýaÿû¡ýô ¸"2 ñ,$m.P´F¡›¥wny÷"iú
endobj
-1512 0 obj <<
+1532 0 obj <<
/Type /Page
-/Contents 1513 0 R
-/Resources 1511 0 R
+/Contents 1533 0 R
+/Resources 1531 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1504 0 R
>> endobj
-1514 0 obj <<
-/D [1512 0 R /XYZ 56.6929 794.5015 null]
+1534 0 obj <<
+/D [1532 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1511 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R >>
+330 0 obj <<
+/D [1532 0 R /XYZ 85.0394 519.9229 null]
+>> endobj
+1535 0 obj <<
+/D [1532 0 R /XYZ 85.0394 488.8874 null]
+>> endobj
+334 0 obj <<
+/D [1532 0 R /XYZ 85.0394 326.6298 null]
+>> endobj
+1536 0 obj <<
+/D [1532 0 R /XYZ 85.0394 298.4037 null]
+>> endobj
+1531 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1518 0 obj <<
-/Length 2186
+1539 0 obj <<
+/Length 2424
/Filter /FlateDecode
>>
stream
-xÚ¥koÛFò»~; TRûà3èàØJã¦gë,µ‡kµ²‰P¤"’rÕ_ß™%EILS 0àÎÎÎkçµâƒ?nE¾ËdìYaì¹>㾕nFÌz„½FÜÐ8-‘Ó§z½MÞÈЊÝ8µX÷xE.‹"n-Vïíë·W³ÅôaìŸÙž;vü€ÙW7¿Œ9çöÕÝõô†¶nîæ¼™^CÏ^üü0LûŽqnNÎÞ]ºpNÀæ³ë‡± íÿÏcÙ÷ïngvç?Ïf÷zw1þ¸øq4]tvõmçL¢QŸGï?2k.øqÄ\G¾õ Ìåq,¬ÍÈó¥ë{R¶˜|4ý·cØÛÕG‡|éËÈõ#8ÓãCÎôB7Cræ?ÇNÀ˜½*ªJ¥N•=”…"¤3§Uýžl¶¹r U£Á Õïž/4‹iQ«QÎnï^’”_Ô.[²â‘Èê'#á(«©.w×ež—Ï>ÉË]V?mªWCjÜͧ×òa~5{W;@ðk' Íìئ%W«AůZ™¯ˆ¸/Ä ~¿« È_Òú®‡2º§u¶Wf›Ñ²Sûò“Z"«:)VÎò0d@ï\4A­jòFp«#[ã!¢%€€ÀC:Òý±ÃpŸoUÚ^†²v5ªxÌ
-—ÅÙ&xhZÑGŽt$Vô‚ ¤ŠÀ•Q,µÔž•h÷[UÌç?á‡ì¤àFš,mV¨ÛƘ¥7²¢3ï(‡Csað£œ"Ùt^è«#1<ÏPiå‘e’ç$¬\¢~2Ò_ßÞÝ ˆ‹¥+X$ “%ß ô8æTKX—e^ó$ÀxO¨°?á9SâÆûba `æI4~? 8tC/
-\ãàK†"vý°#û÷×ø bpÝP4wút÷]në¬, ‚ÊHÚ·kBjj(&ú¬¢Ïe“å5ÏL´Iá( ÚÙ~J+]‚;"â@š¹]Ñ9Ú!ª•Z'M^W:[
-\ðÓ¤©Käj“H
-oUånZ¬Û÷]Ñ·Ev>a%Ër¯NJ\ÌeíØ~(Ú±f©0¡Ô˜4Õn2'}Ù—„Ó“„‡LÛætMïä>Ô ÈÓ¼ãRí¼LÓv%§ª/[ýå¹Å@ÑY,™ñ<
- ^qœcÍ~UžÌ¾]6þÒ#Y.»BQŸ#su:×uó4h¹qõ=_ø]‡ã³Œ…Þßúa‡Cµ‰}o¸Ú€"éF,¾Ì‹Î1àeÀöÄYá:þ˜Æܱ¨_¶zÓQ »<‚ ÞªœIúyà½Ðô¨Ø%8v™À4‰+ˆca?èÿÓܾí`aÿpî*âqÐ5Ü8dÚSÖgðAÌ=Ojš>¬m?úD#&·iÝ”`¡Õ3²åëôk#ƒ“µîí†~‡TØfmC—Âä
-]
-Í+wF!èèšÇÖ ’Ïí8>ICr¥®æi‘ä6˜Öm÷¢éÇ¡@Ûµz‘þm¹ƒYêÇAl9Ç_X¿9³% l üZˬ¶ã|óoÃǼ‡V"£H +’ÐhâÐ’¾ ¼¨ÕIÿܵݯÈ-YOù?Ø­ùwendstream
+xÚ¥Y[Sä¶~çWø!UÇSÅ(ºY¶yc¯!•°`“‡lÌXÎzìٱ̈́üúÓ­–=cÈ©Z¨B-©ÕjõåSˈ€Ã¯"ÃL*Ó N5‹¸ˆ‚Õæ„÷0÷ñDxžeÏ´s½¹=ùñƒŠƒ”¥Fšàv=’•0ž$"¸Íÿ5’-@/®~3‹¥ŒxxóùêêÓõBÅá- \\RûæâòQéb)„à*|ûÓùÕíûkÕ^Ôù»ß0ž_¾}ï¼»¼!âÃûóE¬ÃÛÏ×ïoÞþ|òþv8Êø¸ Ïñíä?yé>áL¥Iì¡Ã™HSlNt¤X¤•êGÊ“›“ÿG³néœùž¥N˜ ãÿÙÌ–¦‘žß–ËD±„ó²,ZÇA–'ûÇ¢Þ5F2Gñà])!XEÝ ³*&ˆ•dIœçÞßÑÂŽ3e‘ÑaMCHpÇq¾X^»¿àe#‹–áÇ©‡`Ë80IÂb°*|+¤Bkå˜Æ´;ýÁ*nàÇ‹
+ÞÕpÆ`tÌ^ðr,ÙÓÈQCìWÄ<f&–‘;ÃU™­Šê~±T2 ÛKÄO7¿þg×P÷
+ƒ‰¢¢6óüv¡xøwK½/œËÒ3¶…—±ÉªÊîz×=Qggóne'
+4vÕ³ˆÂ¢õ|Y¾D‹b€ ®ƒ<.dfU›ÝÃRiâ°^SÛ5î\Hfµp,FÔÇ ûÀ."ôR§ûvÿµD=-$ëÎ/„Û“zmMmîÛ;»ÆãÕ;¯Ðª®Ð4÷ý@«£sš|ÚÚêææX“ù°õE[’Ùç!›F—6)“IšãXÿ¾ôÁDRùs€€ïKîãŒäq,)¡™ÒFŽ×HÅbÄ•pÁ„œ#à>ö€Ûm·õ®¥Ž³ÛlYÜ'X^&©rb=3™±Yweù„¤øpÒšÈÊ’Nˆ›$´UKœà}‹N®lîeÔ»MC2\@Âר*ÛX¢\ì ä<'_”UùìÌaÉAHY×_»mÃæÒãÂ[f_8ÝÊʦ&ªk¬¿£kŽv³ µž{“}õìß:»+úéýƒõFß-’°«*Ê:è×~<«¦»¬²mvWziÍSÓÚÍAù˜¥îNù5¤Œ”
+­¹Ïœb9 ø#Ÿb/é=ã)5ÞmÚ Ô•óPçðCtU“\0ßRq^xKÓJETn· ɳg­õ:8°B‚숻¬ýfv‡Ó¹¼'G›4\•„Ó²)rKÍÙÐY;S
+µW
+lÝì페A ²îŒèyÏÉ‘ç0ÀW+»õyæ€y³ƒíÖn;èÑÈ<å;:ôÏMŸN“ð<Jx” XxPn™~ÚÒÔ(UŒœìÊPœ! RLÃ0hŸmQWYI3_¤ÔUqi‹1!ÈÑéÀ$§QÂ(âÁøªt¾*JµA5T±5,Ûm³˜V0ŠÔ3æõ¬DŽ€›)f<âzâwWÊpo]hÅj¡cQ—ù(žLíq^?WWh…m”ŽÔ-àâ®­Ä*Qª#m1â8üä6uû£_À¨ ©çðF½S€JiÂ;ÅYt¬>šþ®¨²Ýñ•Ù-?œYDÌY'òa¾€¥<è›(üZÕûŠH 㥶M»ƒ ĬÄB>%X¸ëZ!Säë­(ô‰%¤$ªæ7x €ÇZ¿÷ªÞlKÛZ¦hŠMQ¸u&ƒÅÈ3Ù‡ðŒöÕ&ü5«œfÛmY€+½‰a„‚q0±‘}ÜSµ&ên‰è*ðRÓz<îÄá`’ Nä!øaß¾-ýä Ñ†òמz“÷ÒÝ}<s,ân»Ð:u—'¶– ó»ÅšÚ{€a 3ƒõ…gÝf»¶XueÖºÂLèå¸"Ó •RCA6ÑTA¸y4„ÜN,5„jHùÇÀÌ…7Å»Á¼@;ó6¯Ô£rBe÷Xؽï­=ê>ØpÉ=n‰Gjq,RVmGv>^ûBtê×Z;­¹UÄ™N ßà ÌŒ†B5K“»{ÿj»=—þåxAÿ #ßT.Zàî³¢/ªÎ™dâÙ
+~È:ûw†€}JÑbâ”%Iœ:µ~øt}ñ?>,c
+­€EâØ¡îÕíµ§ðá„Ãkˆa =ÃqvöNm÷xá€øŸƒ™
+…ÈñÝÿÄ8|pÔ1SXRÍ–:ðÄRGõJ¹†y¦¹
endobj
-1517 0 obj <<
+1538 0 obj <<
/Type /Page
-/Contents 1518 0 R
-/Resources 1516 0 R
+/Contents 1539 0 R
+/Resources 1537 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1489 0 R
+/Parent 1545 0 R
+/Annots [ 1542 0 R ]
>> endobj
-1515 0 obj <<
+1530 0 obj <<
/Type /XObject
/Subtype /Form
/FormType 1
@@ -6052,87 +6190,40 @@ xÚm”In1 EOPw¨u€$ÅIg0²Êľÿ6¤¤êV5 oʯÅésÀóή¯ƒÖ×O²Î Ž¢‘ÿ¨#h8Çùø:„5?ù
6\>RgÈbÏWÖ¹j[†›
WŒÏ¢®{6;»²þFÃÇñ÷ø]š¨)Õ/Ô¬Mu;pk;Ì©Ëdh<åE–ñ¬AÏw³ð¬±±Nê¦ó¡Ä½t•‹ùD„™Â²]°Ä(‡;„ ·åŽ°Š­r²ÂÙÄLûˆ T¥Í¡誋ŠŽt’¹w_ =Î]ˆ‹=¦uSä÷—ä"ï±yl±‡µÃ-ËkHsŠöreOÚ³êvg›<7ºt,‡Ýe—;ãÒèЭ/I…B÷&ê(ýê³ö󻉨YÙ¹Ç,çkRÔšÚ'^ m" ^˜h±ÎW9AVªy­Â©/fýÆ"•œãûFy-Sng \Çdª¼˜©Æ¥†Í}B©•µŒÎ$âw1.¶&Øíþ²C¶O–ÃVç X×9g¹E{îÇ< •ãóP)!ÍZÜÅŸLÞª~ÑÔ'¯UâXLµüc“ÅXsЖõÚ¯½˜Ó’~òBL–§èªÆ¹O¦ºNZ_[Èü.øšŠû*]3QôçÇñ!Ö-žendstream
endobj
-1519 0 obj <<
-/D [1517 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-330 0 obj <<
-/D [1517 0 R /XYZ 85.0394 646.4943 null]
->> endobj
-1520 0 obj <<
-/D [1517 0 R /XYZ 85.0394 614.9326 null]
->> endobj
-334 0 obj <<
-/D [1517 0 R /XYZ 85.0394 450.402 null]
->> endobj
-1521 0 obj <<
-/D [1517 0 R /XYZ 85.0394 421.6496 null]
->> endobj
-1516 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R /F11 1451 0 R /F62 1361 0 R >>
-/XObject << /Im3 1515 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-1524 0 obj <<
-/Length 2039
-/Filter /FlateDecode
->>
-stream
-xÚ¥XIwÛ6¾ëWèÐõž…bãæ››8©ûZǵ•öÐä@‹P̆"U.VÓ_ß H‘í*0
-½ ÜÜRûÃÍí[¢âÕZÁ•÷æÇ«»Íõ=j'êêío+˜ö®nß\»ooˆxw}µ
-µ·ùxý°ú¼ùiq½é2<.Çsüµøã3_¦pꟜ©8ò—Gèp&âX.÷ í+æk¥º‘|ñ°øµ8˜µKgÍ'8“*3ö“b)4S&‡ôcêû½Áœ£Ÿ;¶‡CY5ÔÉŠsãÁ¹Aºx‡/×2bA++Ö1ó-Í®ÍóoH^MÒkšHòœˆm[U+y¦hˆ3ôRó‰sY˜ÔÉ(«}M2Ê 9*’½!ª)ä4%µ[”éìÌiÉIH^–_ÛCÍð¨x8!XìûÒîÆYæ˜YÝJòº$ª­‹¹ÞšƒÝLMCãÞ'_û_­©²núødœÑ«UäµE‘_¨_ºñ¤˜î²MÉcî¤ÕßêÆìOʇ,V2²Ê¿++à‘
-­yL¬b) ¸#_`/ê<ã15Îm+áÕ4PÖO@]Á(:è¶$¹`¾µâ»÷†¦•
-Q©9€$Çž4ÆéÐ<"ÈŽ¸ËÎíÌîp1v¡9:ˆ½mžA8­ë,54P÷‘ 5V6´Ù4xL‘l»p‡=z¿d_>·åÎŽ”{è…}ÒÀxŒ¶BïÇòhžM…‚–†&i›§²Êš¤ÉžÍ\¼u®ˆÈQ¦@Õ¦aµë4@æe’õOY8^Ì¥Ü8ÞmY4Iæ údÞ¨79'$+HÈÎÒeç³ÁµW
-l]ME‹OA ²îŒèyÏÉç0À·[spy掀ySÁv;»ôhdžòNý« K§IxŽ$$H ºÜ
-ºehhCSƒT Tïd{­àô
-M¾w°&ƒÅˆÇ3ɇèŒöÕ÷KRX)ÒK‡<W:ÃÅboâ@vaŸ–Ô-ʆˆ¶
-<[lïNl !¦;v³µ_
-3¡“7Âo;D¦A*¦†)Bl¢©€°óh2$¸­XjÔ"üž»ï¦p×›hkÞú•R`PM@¨TÏ™9ºÞÎî“éñ–Üc—8 †Çe öµv¯}¡
-ºpk™–ÐÊçLG‘„j5f:‹Yš¬¾,‰¸T¿=ÿz¸€ªß1ðMå¢à:˺šêŠI&¦úhÂ:À¯¡ø³¼çú-Î¥¡ÌaTë]ØîèdalÈà©œÞ;ÂìW`R*aAûŸéJ¢ÎÇútõQmÔ=^|pŸÏïšÅÚ鳡"Ìï¼Èyþ䥱¬¦6¡æ€•%æ®Mm°/¶ÙxãIíÍJµÕ… 3GµEž}5#!zzתÁ+òêƒÙf˜H¦žƒŠ>Ô¡j̆ñ<Çã÷‘+BÐò]>V¡UðSÖ™¿ì rˆ‡Ä,ŠÂتõ݇û›÷øˆ x¿ŒÜϾNžÊr4”Àª€öÒœžÀØíâÇ€E\¦Ñå¥x!(:|ÄÚG)mS[)rà:+ÖdœÙÃ]^@zòèÁ¡¬¦…„u0Йg¿7pQ¤öñ­¼›“@ ×Ù+ÏÎÔRáÔ`7gߧ÷ÉÂâå«a#຾NE‹]t/¾æiÆ]Bð>ï+•ËËü.E ©DL;X™Øñ@GnQROÐvp¦y€J2í‡r!äBtÎ[z=¼‚·¶&uß;ôÿ4~·oVÅéiEa§=P›¸ÉQúà@æ&
-·'Ò}‰¤àb 2» ¸‹Æõ“.c±Sg%߈Ôï©•x¶6¬¸¶†wŠÌ½õ!Æœ"xåû^CE-b5)½ÙŒÁ|…HtŒÎ2ü¤ ºGû3»·yã,ªm)©¢C%ÈÖCÉØb»2ÏËcï‹cÙæn#‚ÍòÆTçrÍ b&uîøჹÑÇ=æb”³}ÂœáæLż tè¬ó:2> }Õe›‡Ï2耵_ÆQÎÆÿˆ=²Za{’\9 ÁøkH?Ä_¡5°ˆ
-_V8¼†ÆÐŽ³Ø[µíCâ…ø±p¦Bá=rüïo’§ïµ:d
-KªÙRž‚Xê¨N)ûÀÎ4ï>^ž«þ/»œdendstream
-endobj
-1523 0 obj <<
-/Type /Page
-/Contents 1524 0 R
-/Resources 1522 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1530 0 R
-/Annots [ 1527 0 R ]
->> endobj
-1527 0 obj <<
+1542 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [349.4919 566.941 408.4801 577.7254]
+/Rect [349.4919 431.1147 408.4801 441.8991]
/Subtype /Link
/A << /S /GoTo /D (ipv6addresses) >>
>> endobj
-1525 0 obj <<
-/D [1523 0 R /XYZ 56.6929 794.5015 null]
+1540 0 obj <<
+/D [1538 0 R /XYZ 56.6929 794.5015 null]
>> endobj
338 0 obj <<
-/D [1523 0 R /XYZ 56.6929 769.5949 null]
+/D [1538 0 R /XYZ 56.6929 640.7425 null]
>> endobj
-1526 0 obj <<
-/D [1523 0 R /XYZ 56.6929 745.0977 null]
+1541 0 obj <<
+/D [1538 0 R /XYZ 56.6929 609.2714 null]
>> endobj
342 0 obj <<
-/D [1523 0 R /XYZ 56.6929 552.7519 null]
+/D [1538 0 R /XYZ 56.6929 416.9256 null]
>> endobj
-1528 0 obj <<
-/D [1523 0 R /XYZ 56.6929 524.1722 null]
+1543 0 obj <<
+/D [1538 0 R /XYZ 56.6929 388.3459 null]
>> endobj
346 0 obj <<
-/D [1523 0 R /XYZ 56.6929 397.0585 null]
+/D [1538 0 R /XYZ 56.6929 261.2322 null]
>> endobj
-1529 0 obj <<
-/D [1523 0 R /XYZ 56.6929 368.4788 null]
+1544 0 obj <<
+/D [1538 0 R /XYZ 56.6929 232.6525 null]
>> endobj
-1522 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R >>
+1537 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F21 950 0 R /F39 1173 0 R /F41 1233 0 R >>
+/XObject << /Im3 1530 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1534 0 obj <<
+1549 0 obj <<
/Length 1913
/Filter /FlateDecode
>>
@@ -6144,59 +6235,59 @@ xÚXQÛ8~ï¯È£h\K²-û±½Ù[tqW,º³O×{Ple"Ô¶²‘=¹ù÷GŠ’gœn ¦)Š¢Hê#e¶ÉàÇ6U‘f¢Î7²ÎÓ"cÅ
¯“Ä `ÄЖœè•
Hg‘…žEÎJŸ°ÕËûkŽ½.{²úöúâ-Tšz§mØÀ"'©3V‡+úJZ•ø?Õ“²Û¦t¾¦¿  ,çóýÃì(êTÊ¢ºîUÞýò4KŒ_E‘â÷Ƶ¯Qd{‘¡O‹“‘ä
endobj
-1533 0 obj <<
+1548 0 obj <<
/Type /Page
-/Contents 1534 0 R
-/Resources 1532 0 R
+/Contents 1549 0 R
+/Resources 1547 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1530 0 R
+/Parent 1545 0 R
>> endobj
-1535 0 obj <<
-/D [1533 0 R /XYZ 85.0394 794.5015 null]
+1550 0 obj <<
+/D [1548 0 R /XYZ 85.0394 794.5015 null]
>> endobj
350 0 obj <<
-/D [1533 0 R /XYZ 85.0394 769.5949 null]
+/D [1548 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1536 0 obj <<
-/D [1533 0 R /XYZ 85.0394 576.7004 null]
+1551 0 obj <<
+/D [1548 0 R /XYZ 85.0394 576.7004 null]
>> endobj
354 0 obj <<
-/D [1533 0 R /XYZ 85.0394 576.7004 null]
+/D [1548 0 R /XYZ 85.0394 576.7004 null]
>> endobj
-1537 0 obj <<
-/D [1533 0 R /XYZ 85.0394 544.8207 null]
+1552 0 obj <<
+/D [1548 0 R /XYZ 85.0394 544.8207 null]
>> endobj
358 0 obj <<
-/D [1533 0 R /XYZ 85.0394 403.9445 null]
+/D [1548 0 R /XYZ 85.0394 403.9445 null]
>> endobj
-1538 0 obj <<
-/D [1533 0 R /XYZ 85.0394 368.2811 null]
+1553 0 obj <<
+/D [1548 0 R /XYZ 85.0394 368.2811 null]
>> endobj
-1532 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1547 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1541 0 obj <<
+1556 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-1540 0 obj <<
+1555 0 obj <<
/Type /Page
-/Contents 1541 0 R
-/Resources 1539 0 R
+/Contents 1556 0 R
+/Resources 1554 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1530 0 R
+/Parent 1545 0 R
>> endobj
-1542 0 obj <<
-/D [1540 0 R /XYZ 56.6929 794.5015 null]
+1557 0 obj <<
+/D [1555 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1539 0 obj <<
+1554 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-1545 0 obj <<
+1560 0 obj <<
/Length 3198
/Filter /FlateDecode
>>
@@ -6209,3708 +6300,3846 @@ q@ÏÉÉ
ÖgM± q^Pב"Ü*ïJ¬}9ÊôÅ9u•½Ma®¨«„¬ÖbP„sÉ dKFè±2dw£CF:ñPïBFã!¤C‘Ÿ·(9˜p@Ê@èë‹òˆq6F™‰xT¨âTD_ZÈœW¡¸8öõëýGz<i=Ô°…¼¦BNƒñø¸ˆ=º†s/ÞÎß0^pw$Vóz]®®;¼¿‡ä‚6žq)^i·¥‘ºé«' Ìaüs¹Ú…ÞðøÉþð…`¤1ô¦«6å¶ì ÞÆÚ×åüÜ/Rü‹ý‘êb:ÅÅ#¡.³©k @;“‚®*kÌÌkå7V°
*3ëÛk
endobj
-1544 0 obj <<
+1559 0 obj <<
/Type /Page
-/Contents 1545 0 R
-/Resources 1543 0 R
+/Contents 1560 0 R
+/Resources 1558 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1530 0 R
-/Annots [ 1551 0 R ]
+/Parent 1545 0 R
+/Annots [ 1566 0 R ]
>> endobj
-1551 0 obj <<
+1566 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [356.2946 363.7923 412.5133 376.6291]
/Subtype /Link
/A << /S /GoTo /D (address_match_lists) >>
>> endobj
-1546 0 obj <<
-/D [1544 0 R /XYZ 85.0394 794.5015 null]
+1561 0 obj <<
+/D [1559 0 R /XYZ 85.0394 794.5015 null]
>> endobj
362 0 obj <<
-/D [1544 0 R /XYZ 85.0394 769.5949 null]
+/D [1559 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1547 0 obj <<
-/D [1544 0 R /XYZ 85.0394 576.7004 null]
+1562 0 obj <<
+/D [1559 0 R /XYZ 85.0394 576.7004 null]
>> endobj
366 0 obj <<
-/D [1544 0 R /XYZ 85.0394 479.565 null]
+/D [1559 0 R /XYZ 85.0394 479.565 null]
>> endobj
-1548 0 obj <<
-/D [1544 0 R /XYZ 85.0394 441.8891 null]
+1563 0 obj <<
+/D [1559 0 R /XYZ 85.0394 441.8891 null]
>> endobj
-1549 0 obj <<
-/D [1544 0 R /XYZ 85.0394 424.9629 null]
+1564 0 obj <<
+/D [1559 0 R /XYZ 85.0394 424.9629 null]
>> endobj
-1550 0 obj <<
-/D [1544 0 R /XYZ 85.0394 413.0077 null]
+1565 0 obj <<
+/D [1559 0 R /XYZ 85.0394 413.0077 null]
>> endobj
-1543 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1558 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1555 0 obj <<
-/Length 4062
+1570 0 obj <<
+/Length 4323
/Filter /FlateDecode
>>
stream
-xÚÍ[[s#·±~ׯ`žB¹L,î—¤ò°q´>›c¯[©<8.Ÿ5’¦–äÈœáj•ÊO7nœ!ARŽ˜ªSªÝ1@hôåC£‡M(ü±‰ÒD;î&ÆI¢(S“ùò‚NîáÝ×,¶™¥F³a«?^_¼y'Ìħ¹ž\ß hYB­e“ëÛ§š0r èô«ï>¼{ÿõß¾{iäôúýw.g\Ñé»÷ß\…ÒÕ7Wß^}¸þ~Qá¦_ýÏÛ¿\_}ÞéHäï?ü)Ô¸ð8@õû«wWß_}øêêò§ë?_\]çÅ ̨À•ürñãOtr ëþó%ÂY5y‚”0çødy!• J
-‘j?\ü5¼õ]K ”’Í•˜Ì¬&ÜhuxØ0…acQ9bŒ²;£Î´%šQÜj çÛ-‘l°%FgÍÄ
-ÂÖ–Y2KgCŠû³s”(¾;½ÇvÝãß¼ã|Жq(C`«·+”;}ÿ|šA¯ÑÒ#¬ŽV›åM½.ŠX­Tl¢Æž^?ÔŠÄÆÊ“ qB¸Ø¬éÂdͲéëÛ0ã¾ •4þ|X_2;m7÷¡æ#Ô—H{2cRÌ#N)î©>5=6efú©Zlê.”oêEû„E;e”ËPÙ??6ój±x?ýHuׯ›y˜‹ÓêÍ%›vu(ßÄöajóºë`œOe} W«fu9TO«Ÿ* Ô¶=pTجUxݵË:4˜W@ñK(s:­V©s_¯›îchñªèÿ}ñ[x°ðzþP­+˜÷:þ„n£³sƒ(3Ýt¸@,ù9) ~>.ªyýÐ.n=!€Ï®^Ôó~Ôv]­nÛe(?4÷³¸ïÈÅÛ?PÉ®–IBÁˆûVc_g$è„
-Þz©^x÷m–X)“]Ùg0ŒX\çÙ8”)ž`‘€´è£G<ªnoKÖŒ \ð•a¨®àaïÚÅ¢cñäY,@káY8Ó-ªî!š/ï´«¨×ì7Q³%òr”$PèêU¨‚R(Dó¯Û»PwÓô](5«Ü16¯ûeÕ}»c¥^_:
-JÜ,Ð@ÔõŸA—[ÜKÃ<5|Ve‡â„“w”[Jœƒ.Ú(â¤f¯ÞÑLq6$¹¿£ÜÂ.Y@6¹Ù±5DSvtY=‡·àŸÀ#
-À hIó „â_ÉCQØ䈣ËTY@
-´5[ËÒs¥ŽÓN¤Qx ìqô?O”p"}ÃK,’ÒŒ C˜ç,ñHžq3V¢ ‘ãqKûↃ&öÐãìQ ]öä²4‚6ðÂØ ­‚A°
-ø"Ìx¿ÿîÕ`r0³wÏOàï
-<âíïçð¢Y}jŸÆí˜îO:ôèæí£G8øUÁŸ.T$ñÛ±¾´<(nbÅVA xkû‡ª%Ä3©.v& 5OÍb‘è÷ó‡Ø¬šœ•LÝwaOî‚‘Z†_Õê9ütƒ¡4Ø¢àä¯ ™<È!´¡,”ŒÇÑ•„³È–õóîšĘQÛv¯5½‰àlH±
-À… ÒžR©Üîl*5¤xX¥Fó[4]ÿ¥*Cc_BYBMÛU+Öá¹lƒP´wšŠäå
-ŒBƒóWî|œÉO°F ì
-⼜dêqPƒ8œßœ9[SJÃRaG1éBŠè®]ÍVõ}Õ7ŸP65
->ƒcMxÛ¬úúÞ‡'àž–RÜDkBdb{,Â7
-¯–ÍýCjï6k0äëPS— Ì6þ¥ÂqÑaoý¡0oa½Ÿûð£‰ùé¡™GájÒ«ˆ‡Ð °ÁÞ½Nþ«6šz!âÇ%Œûx† aŒªسÒpÊpÀãÜðÕV:œ )îÏQN¤…#Ðh†Ð
- íô—M ”1éˆÚ¤mÇꀖ±äczðŒ1=(ùè >Ãyƒ££P;3í6‰FÕlün
-Ó—ä07<›)‘ÃÑ Á…]9ëÑ‚R!¸„5Å€~iv¨…èðYéó­?Ò;±|î,Qˆ7hÿÄ“H‘„B~µááûx6
-€Å—¡Œ ·£Íâ„š|Æ-DbPcxr®>2ù”†D?ã‡|j ;já–¹ƒ;
-:A·|"­$Z‹×Gh3ÅÙäþ®J´0Ìl>¶©ñ@žÞþBለ‹+½S±'Å€U(u N†C-½'Š³!É‚$cxÕ›šÔÌ+rûTZ3H†Ìqº~Ó£ @
-s–Ö*hîžm­™â‰µ
-°CŠÁ’FkÅ륓 þM*‘œ¤d|ÿpqÐÜ ²Ø" Ť¬D€S;†g9ÀT`$@#nÔFbdÀ
-ŒÔ”
-¬ð#ÂÒ Ó³÷³ £©X{Ž°Ü¹Êw.&&ÐAbÖŽ|‡mbþôÇT炈y2 •Z±2<àHÝÜž>£'@
-ào6ž8Œ¶¾Úì&Š³!É‚Ù0ØÇÜì$@'OKÃsȹn+0~¥¨þ54s—Cç%n ÁÇÑãEôa"nþY<.¥†ç;. (;.fXý%Ç%=ÂNFúü0ˆóbª·ƒáÑ.ž6« ÚŒ¶qvà°rÚ¿`(0”‘C¼D©ïªÍ¢$–`©¬Ì™d{­Œ[†·E/
-’ríð"›pôŒ#f=ð{‘t£Š¥§ªR̓òÄ»ö>uõúS½ÞéÞõÕºqÖÝpnqk@y¾‹9œ‰yYÂæUŒZ·xñwÈâsƒ½¯o} ÜN»yµCl ¸]ÿ®`8@6°?É’ýo.jE¤æ;²Ú®K‘ A8¸ÉtCT æˆ¥Ùˆù;Gaåôc³hožûº+a*
-ÚŒ8‹Áµñ.pÃ\bŸ®šîN N!‚š æP³‡yãKΨ ©ÐCËxMU›U×ܯ°ÔùÒ¨0 D¬x/DyHvkͬ”ÚHI0×¥™¿bjïJÚMÿÖÅ º½8‹A¼¤_âÛ5±ŒêmšSØQ-1ØÅÇüͦé¦î²]K×Fm4PÕ]½H©0u?º‡ ŒŒyÏh)ÓánŤ ÷JìøßLŸÁc®ã‡âÃr F×Ѐӟƒs)Ýõçvg»ëR<|×?š_0ÃéÁBm!3Î5¿LñÄ},Øh‚«¶–) '%’¹
-ÇÉ} ((º™dàâ^좀Ë*§2¤Ô™üuC{2
-
-›¬s짼h "”IŒ)%F*<zé“'â¡jÿÿÍ”àxÒ‡BvÉ
+xÚÍ;Ùrã8’ïõ~[¹£„Â}ìñÐÓëš©Ù™êÙnoìÃôD,-Ñ6£t¸Eª\ž¯ßL$@‘$¹×šˆ GA
+4íÕ4fµP¿dþÅ1µb…dƃ~?¥WlÌ«Ïè•~ÚÅôÊâq½2BïiSß7ß^§Y”âQ³(&«º{^o¾PgûTÏš_8—‘«`4r•ŠÌ{¨+„òÌkõÊ!”Ìã>/F¡â)8A6zD£j>/i3©€qÁVÒ6P\ÁÂÞ¯‹5(‹çH
+ j‹H
+¢L»¨ÚǤ¾0|°v,¢Q²?$ÉÖHË@Ò
+Ññi©#³ßž6ˆ¿Z’``ã.uìDqòg°·{¬:j¡?“ûRcièyn‹ ¿›=¦iÕìË´äÉÔ]KgrOJjIoÕê…ÝãÎÆÐŽ¿Í5Øydôo
+Rˆ'ÍU¶rÂ(eÁø›p9ÊôÏF¡Û&uL›²ºIìO»ˆq¶1ÀäOAwä¶ëä¶c÷²™­ëUKýÉ¡!R‚)°à#iªWóduùÀm¨²%P'DhÇœ—’ œÄy=Èü‹£$!~ îtnÍ +h}:!„#t0)zwëÕtU?T]óyÓò‰’Skh´YuõCLOÀ
+çÄÉI渗oçã q:YàdL¯FU“§EA^?—ö œ¡û<]Ÿ~Ãã \€œæ,íU 0 Ô½Ø^{ˆgöª@[íËKgì›6*I-äap‰q\YœAžbV , ¹»g}‚©@Hp¤3'‰™¯Òr4¿@N"CœA–r
+³r·òI¦Ñ†g>¬¹Rý/ØSÌ Æ"ÊÅöÜC<³geaÏΆñžO2Ï |c¢&N?+lT”“'åF;Á¸äör[ï!žÙºot‰~Íqcš,¶ÛSzË-Z{­A*Ö©¾¥Öj² DS »4¥v‹•=ÊÔyyŠ9°h™C5ƒ{»WÞCœA–˜KÈyÚ«5 Ì ºŒ•Üþ¸ò32ÍÎ0emط̨ìJë1Íé2‚åœ.6”*
+œi¥ ÑÕ÷&’:5w q|£°5ºJqEØšsöKZÍìåÚ
+ae9•Bº˜À°wt1!þ`w1_c˜±X“½‚•:é!u3?£<Np}88W ãYÀlë›Õn†8‚,¨]eÁ
+ügIÚ5H=™Õ›“$ð'èÀeÝE²à R¥ Ü¢nÕTàÁGŸŠo}ž_R¬‰ML4Ç’ŠFCƒ‘êè×˺-/Vf .å
+D"è¾lQPœ2&bàGŠƒ‚E“·@ÄédÁꡤàýá~Ú Õ)-H•è³©ê8¯A\)‰+ñÒ&¥Ã_r
+˜ œúîv¹ï¤šæ!åžjú¼]‚§2ÃÛ›vt;oKÆÎõãîJh¼à
+w ¹f‰!
+X1z}¦;g¯®d)±›JÚý&¬Ý¢ìt5ÎÆk'¹Ðb}Ò¯DkoÛmbFA÷#cã.R[ÏU[Ó³­îkš/Ñ“¡ÎŠ_ëMšÝï"±eZ{|Ý’jÉà¼B¾NøÏÓÛY³lÛhztØÕy#Ir_•,Ûs•¦åÂï=y„³šºÓ9õõbèjëÍ×x*8\¥Ìf^}\†èÀ?9U,†so ÿ‘·ä N`
+;§¢N¡¡ Š¸óú^£t¥§Ÿw±+=CˆÇ¯ôŒð#ã5D6
+t…U.†_ñ ‚±ÖVt„àj]
+‰¹gÚ¨lo(kth…gÚÊliÒYìûˆ‚ApzÚRŒï4E£ÑM¼¿íEü€iª@žOEÛàIÑ¢Ðm¶õ‘ëâJ©ƒZË8lgƇŒå}µhTꀗ3åªõ!–ð ÔiÑ̲@¥ðöó ¤ù}ºr”<âÔèNÉ êqPY Ìóþ&¿(O8½>Å[Þ4
+z_ °<^„V—£ÎT‚˜P{ÐQ:÷ôžBò#ºLtèùî™P¥³¯ñsÔƒoFyè?amÕךºbhûºíµâŪãšo S.uOo÷%öÙO»á7Ž»½O»ÿo¿ê“Sàoxf"jˆ¡E~~ði¸À̽Æoq|éûqÞ ý›¿Vß}˯S~p9aÏà{¬DZ#¬xi”|K/À<+ÛÏ þ¿x¯õendstream
endobj
-1554 0 obj <<
+1569 0 obj <<
/Type /Page
-/Contents 1555 0 R
-/Resources 1553 0 R
+/Contents 1570 0 R
+/Resources 1568 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1530 0 R
+/Parent 1545 0 R
>> endobj
-1556 0 obj <<
-/D [1554 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-370 0 obj <<
-/D [1554 0 R /XYZ 56.6929 165.9801 null]
->> endobj
-1552 0 obj <<
-/D [1554 0 R /XYZ 56.6929 136.242 null]
->> endobj
-374 0 obj <<
-/D [1554 0 R /XYZ 56.6929 136.242 null]
->> endobj
-1557 0 obj <<
-/D [1554 0 R /XYZ 56.6929 106.2766 null]
+1571 0 obj <<
+/D [1569 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1553 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R /F48 1238 0 R >>
+1568 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1560 0 obj <<
-/Length 3065
+1574 0 obj <<
+/Length 3057
/Filter /FlateDecode
>>
stream
-xÚ¥ZÝsÛ6÷_¡>En,˜ø ^ŸR×iÝi“\âÎ=4”–`‹cŠTHÊŽ§wÿûíb’’(¹£
-éLxoŸNgIaåS¾ ú©Èæŧ2[Ù-â¾o±¨mÓ|Zeí|ù©È›–èÿ£âcs´Îùk1ÔaÆ5K%êª@iÎS§Zž3q:ã ýÎ~Œ"Qæm^•dî¬\På—&»³^¬ˆ&3‘0såä½ÝN¹™‚~0NË©S’ª¨©£ŠiFLD_×ù*«ó≚›Æ.¨ÖVT.lkëU^Z?x>ïÄÏ«²u²ª‚·UM•Ymü|­¬ï¨Ö¶Îp… øœÔéôz +õpÎÒ8n-%aÒ¢©¨¶9åS¯¢˜æ%•íÒŽØÜð¬\ÈÉÃõÛr¦Ý7£’,Jcí9ÑêûÒxÊb­¸çiªºu{¿/L*&¤ š6kíÊ–-­7Æõ’Ò¶ :µ—9íG«6mÞnÚ°x¿Êl{w…ß]´ÝŒÃ ä‘2Á†¼[39Ð<ó.ucƒk=Q¥º¥²]úžÛª(ªÇ¼¼ûסSž(ÎtªÓãamÈå%8io¥ªFd¡¾#®w'…UÁ ¥ÏÚqíO»µ9<‚ºJ¶§ ¶¹zçm³eèØêèê݃ò«ûCŽû¨™„`FjñŒ™\G̸ž7Ó±YfÚvÜLÃiwÍ´&#aÐúÒÛ)÷\¿Ÿ¿ JYµîÀ5U$™ÑÉ3å눩×ó¦:6ëÀT»ÓŽ›j8mFKwwŒ3ÙwgÞµ¼G-(Ö[ßožúC8z ö(ÅC칧€¹«G
-1ÌÈÝ°sÈâ±åñØ·øë°Å;®g-~tÖÞâ{ÓŽZ|kÚ.|ѽ=ŒlÁo÷Žu¸¡ÚGÊyÌÛå±½BÁ¶«8Üóblob&¸0zo’˜bøñ½pÙ›ÀõüÞ›u°7»ÓŽïÍpZJ 7ðâ¯ì…-çEÕ„1!²ÜÔ@º÷Àúi”$x‚ùÂe³Jé¯>¨¸«O
-Ðã.#E€è÷j…ÍpùQÃ~™Ù*óˆLâ•[ßSƺ߿zQ ϶L<Zƒ.òEÙÃ/)â †Ú´à=pcádhG)«Òi ù-„Ž¢šgŲjZ?P ?¹LyÏPÚ¶Á‘;8… ¹;Wh¢A³Ÿ«ž Í h.¬G…²…©½ ¿¬:3cåÆ÷ÝV› SÞ´cPoa›y¯{Ü»‡IðX¹JwvX'Èm¼v‚[Å ºW£/.â’—“)ìî¦ñÄU¶°;|!– tå Õš§²Íæm>§1Íù¾jeÓyÑ`pF¬«¼)¡Æ$Ë] fÚäå|Ô4oê¼õàôvÐOy§ÖÞ©¸]u¸ý!+òEF RmÁvôùjÓRƒ¶üŽücGDFºux¾õX¹“€¢ÃYFhî`®áÓ7àÄ`Ç&=·µ˜\xô€§á™¸@í¢A<"/¼slºPÑ.)-ÙÜù…iQÍ7¸WεGýè?K‹æ5d(îrXÛC :
-"è1þ(¹q$1o*?¾Íî­¹. Púù˱`’­IÓê 䀭ÅP
->}‹±;¼æÚm¾²øB Äô‡êÑ>t®+eJgIŠh HCÃhŸ7yUPÖ2kCÍ“(4b 
-Š"?GÊMVg0­Û_lnJØuªfcÞålæÏß
- –^P‘p»#r•!ø°/ü€‚ŒðÚ Õ…Ÿ¢Uº¤QïçKý³î(ÚxK žÀöÀBà ‹ xÃx€ !é¸+s¼ç!™
-¬_²Õº°n–Ô§X;‘LjÉRÓaXΓçB}ƒY™š~E•qùÍX|ë$Œ¤Ï\tc©ÕƒZN‰
-覷=èv/P>ÂQl­'æ^r) \œùòåË3ŠKU=ú”¸´Eq¾¶u÷”ú„ËÍïe‚€=éýƒqï!C§Pü°Sœ;bH›4†.¦•¤ÿ(|í:‚bƒŽkw_á(B™QAû‚µÎŸ\oà.©¼ ÁÒ¡ÈÁÁÝ9½2ú¹ÿˆ¥L
+xÚ¥Z_sÛ6÷§pŸ*_-„ À—¹‡4uZwÒ$—8sM'¥%Øâ˜"’²ã¹»ï~»ØHJ”ÜöF‹]ìb±ø-(yÀOž¦‘T¦O“L‹(Ñéb}œÞBß'’yæŽi>äúþêäÙ+•œf"‹Ãøôêf +AšÊӫ寳—?½xwuñþlFÁ,gó(fß_¾ù(=^¾}óêòÇï_œ%zvuùö ‘ß_¼ºxñæ异h/Y¯.__PëâõÅ/o®>œývõóÉÅ•7fh° Zòåä×ß‚Ó%ØýóI T–F§ð™eáéúDGJDZ)G)O>œüÓ ôÚ¡SŒT*¢4L&<ÊS)EEáÈ…Q&b*ëB´ZžÍe³ËecÚ–lü%ï+j¾.Ú®E[­Ä~M‚Óy‹ I¢¼°U—¥QúȨœ”~^£¾Ï%¨:›Ç0þôØïþlJ³6³=G Þʹ7$ÿú”„çÄ „ ÆoVÖ|G˜<0Íñ<xº¬ó'Ð>>QPl>çν–ñYiªÛnÅ,ÿ!3‘©0›qg‰Ÿ‹¥ã'Ûåç*_›ñ߇ì&úý¤äÄšÎýt"â(KKòÒþ`>AX]QW!yµ¤ÆÇ6¿5,6<¼èig2Q´%j¶æhƒfi£ šá,'&¢ošb7EùH¯ÛÖ,©ÕÕô\šÎ4ë¢2<x±ðâuÕYYuI„›º¡Æ=ˆ¬·¬¯5ͽáŽzcš-l!:T’Í®V°¸JÁx}“¥e[Sk{&g<ÅpVTôìVfÂçi
+{?†Mnå¡ý¦šƒk÷ݨ•²(aNôú¾4™‰(Ñ’yÚºéìÚï SZ„*uÂÚ.ïl<“½ÚK“æ8g=¬
+Z)‰^m»¢ÛvÎx¶2¯nÈ«K› ² t:Þ]@‹œCêÚ¸Ðz¤F}CÏnÅ=7uYÖEuû÷Cy8Š"FizüàrÙ´)õÀK4S5…óýÈdW)Xƒtr\«çÚW;Z@[ÇcµÎ7—ïØ7#GG”i.ßÝköXãØïc·Ý'ݤbÑü”›\GÜ丞vÓ1­7íªvÓPí®›6ä$LZ_{?Ìõû³o©QÕÝðG]é1ÕñS®pq•ãzÚUÇ´\µ«vÚUCµ9™nÏë²Î9´8¢–”ë ç÷ëÇ~N¤È=ZK—{î(aîÎ#ƒ–ªÝ´sÈãÜ%uð„LJ\‡=ôøQ­½Ç÷ÔNz|¤Ö§/:·‡™ÍÅíÞ¶^÷X¬Ï”;+óPt«ck†Z¤‰ŽÜÙ±(§Ö’„]ôG×& „Vú©µpYÇõôÚÓ:X›]µÓk3TË»¡2p/ÿÌZ˜jQÖ­ã2Ëu“¡s¼ŸqŒ H‚ت»èV¥ø䃆=ùTÓ¸Íi@äå…VNÒäK8ûèÅ|]”ù:g@¦ðÄmî¨ SÝïß|‹I ·¶Š¬A…¢êÑ—RÎ&ha|¶$íœÃø°2K©êÊiaGY/òrU·Ô!+W™ì*ÓµøBd¦ð…·t@& Ìì—ºgBo˜s¶ã(÷ì@5 b[°iÝŒk·nN…iÆ6JYšvÑ›öîAÜU¶á·Žð‚úu'dÅ\DÇ,-rÒb—•ã,î¶eâ:_š>—IœˆºŠ–Z-–a‹®XÐ_³Ø¾zm€ÓÑ`pN¬ë¢­€¡Á"Ø
+é¬-ª…™ZíÖ,¶MÑ14‡y[à§9¦Žéj×µßçe±Ì Bêhǯ·½ÐŠßRxìˆÈé‘FÜCh=Ôv# h·“˜[›ÊÙˆaðc J'Ãد,–Œp3<‘(žm.h]@%ÇÆÖ'ŠnEEÉö– ÆÒ²^lq­ldO…Ñ¿V½›’àq[€i÷ŽhÑvŽæ
+ë4Ü…EÐS0Ç¢^ox#.‰b]2ÄŸêR
+Á€ádÇ‘Ä¢­y|—ß¹)!K²þj²ÀÚÐLë¯P
+ÊZåk1‰#¶pŸ (
+s¤\»aMjíòâ붂E§f>•O¬Ïxû 0˜ ›˜Îw
+l˜MôÆ'AŠ¿ÇqÙ„{ûÁZaß P"ÌGÊ–©Di82:—T¡Ëµ>¤[n¤,ÍÆTË–èŽýaeìL-±sòÙ‡@*Z¢\k?’h[ ÑçHrÙ
+ŽÛªÀS
+‰¿Ò
+„€Ø*YjøÓÐÓq½xùz¬Ê• ¹Øjp '!Ø“
+°³cŠ$ØÎçîƒišd;qî®+rw«Q÷å iû½à­Œ+h=óàâCxÇ þª`P‰8KBÿùÙ}|~Y¯û’hø'ƒcß›ù[¦v “ñ •/-‰£K%WÒ
+ÂÛmãn}ãÔ†H‰— *–³«³ Ûa”4ÒΞ8·M65-m¾Á%sßPÛŸÓ÷Þne¯( ›îõ Û^7Àó¶bg˜Xðt(¤€ðòœŸß}wNy©n&¯W¦,ŸmLãoQÑœ_T$ð¯1_Kÿ÷?pŸ1(ÀÒpús‚‚­ž†Yâ&…Ö软ˆþ¯:ûSÿ+/yÑendstream
endobj
-1559 0 obj <<
+1573 0 obj <<
/Type /Page
-/Contents 1560 0 R
-/Resources 1558 0 R
+/Contents 1574 0 R
+/Resources 1572 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1530 0 R
+/Parent 1545 0 R
>> endobj
-1561 0 obj <<
-/D [1559 0 R /XYZ 85.0394 794.5015 null]
+1575 0 obj <<
+/D [1573 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-378 0 obj <<
-/D [1559 0 R /XYZ 85.0394 730.0812 null]
+370 0 obj <<
+/D [1573 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-1562 0 obj <<
-/D [1559 0 R /XYZ 85.0394 700.9798 null]
+1567 0 obj <<
+/D [1573 0 R /XYZ 85.0394 752.0459 null]
>> endobj
-382 0 obj <<
-/D [1559 0 R /XYZ 85.0394 216.5924 null]
+374 0 obj <<
+/D [1573 0 R /XYZ 85.0394 752.0459 null]
>> endobj
-1563 0 obj <<
-/D [1559 0 R /XYZ 85.0394 187.7778 null]
+1576 0 obj <<
+/D [1573 0 R /XYZ 85.0394 723.5337 null]
>> endobj
-386 0 obj <<
-/D [1559 0 R /XYZ 85.0394 127.6814 null]
+378 0 obj <<
+/D [1573 0 R /XYZ 85.0394 642.6584 null]
>> endobj
-1564 0 obj <<
-/D [1559 0 R /XYZ 85.0394 101.3894 null]
+1577 0 obj <<
+/D [1573 0 R /XYZ 85.0394 613.9312 null]
>> endobj
-1558 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R /F14 964 0 R /F39 1161 0 R >>
+382 0 obj <<
+/D [1573 0 R /XYZ 85.0394 133.1977 null]
+>> endobj
+1578 0 obj <<
+/D [1573 0 R /XYZ 85.0394 104.7573 null]
+>> endobj
+1572 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F22 973 0 R /F14 976 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1567 0 obj <<
-/Length 2310
+1581 0 obj <<
+/Length 1991
/Filter /FlateDecode
>>
stream
-xÚ½koã6ò{~…~8{3|èÙ~Êf“\ŠÛ´—õâîÐ8EæÆBeɵäMÓ_3R¢låÑf{ñ1ç=c1áð'&aÄ¢T¦“8 XÈE8É×G|r{—GÂÂÌÐ܇z»8:¹Pñ$ei$£ÉⓇ+a<IÄd±üq1Éf€OϾ¿¾¸ºüxs:‹ƒéâêûëÙ\†|zqõs]Þœ¾z3›‹$Ó³¿Ÿþ°8¿¡­Èâx{uýŽVRú<‚ôæüâüæüúì|öó⻣óE÷ÿ½‚+|ȯG?þÌ'KxöwGœ©4 '÷0áL¤©œ¬‚P±0PÊ­”GŽþÙ!ôvÍÑQþ ΤŠä1ÆÀ0e‘’Ê0ð«Ù<â|ºX Ü7£±Gy½^몵»ºê7k;þx}õo5+]– 2 ( ÁÒ0”þµYµ¤ÁFoK„;¹>ÉpJ)&D'mò– BgÞéŸ8—UÑx3ÊÅ ÃÁÇ&»ÓŸâ“K|gô¤†­³‹f³ÑÙÖ¡|¸_éíL$SM+í*kit¿*ZÝl²\? p´Ñ§W±¼®þ»Ý6ë_€+¥fËb–*™±ó¦}(á*¥¤Fƒ35mÚlÛÒÆ}Ñ®h±]YØö¾¦•|•m³¼ÕÛ†6NÞÐúO<äM™5«c˜‡„ÖA¦"˜¦Ç›Z1àš‰C‚ ÚV˜Lßê<Û5z¨ $V §x<Í£qoÜ”ºÕ¥Ý\ê²XÇ—4µTðÏ7îL÷D$CÂãgbڡϳŠ·²ØÚº»”´'uåîÎ賩·$+³ûÉí(xYTV+j«x~Aa¬°×»²-6¥…ÃÍžäã¡äå@òR |QU·´sk!
-LHE(ãÍã{¦˜…“«µš¼«á‰ï•ïÜClùÖœdC¶ïŽùøÿÌD
-̽·%1SA$ýfŒ)‹Eœ¸n–ímœ5.
-—ú\n³õ:Û>ZÅÖ:Áö$™í:À(¥Ïaó!R¸Ø š
-Œ[†,Šñ6ËËãgÛ¸¸¤þ¥q¤QjÜ%ć*[›š V®~ ¥l¹$4tµùÊÈ ·K°Yìv¥)Hrk‘å9AǦÑØRñVŽéh×4­Û•ÞvSsè€ãsqÏŽ×ñ%Š(î z9Jwâ‘AQ”<#2òqh›†M5µ«Ÿ‘[^Z›hºVnÇaZXAŽ ËfØù»Õw-ËoúLþ°û-RŽÅ‡Ë£¶Õ2!*”ÕŽ€vmQíÃL1}\‚w^Çî¿P‚ DC!¢§%˜@ôLÛä
-ós.ÔÓ‹c–Šš¿è‡g¹Õlt^ w Ã"nË ¯Àݬ»ü“÷Áê·D¶î„o¶ ‡’7ï²×î²›õhøß¿{éÏ®éBÔâÃÕåã²òøð:Æ`[‰â È*bI”¨±ßßøäYÕé¯}}öÄ ­Dú…˜gñq‚¨!.dU JN÷³ …òHÿ’ Q>endstream
+xÚÅXmsã¶þ®_Á™ûPébÁ
+Dűô›Ñb+ž¶]±íhà±ìVÔÙ­o÷ØPÏrUl‹eg¶- œ¾¦þ_¸æmU´«hk‚ƒ>A\Ö¨Èfˆe¼>¥‹
+æR¦L¨ N#2gYFÕªdl*ƒ ZÎGt 90˜fí¤ Íb+8~Ã4ká|†¤&/+BªÞyØæ@Žñ|èU{#›ÕS;ßwS2x¹,*L‡‰M2˜ã vÁ¦EèôIi›±Ï-âžšÅÒÆxÓ¶ÔR¶Pð¾Œö; EiúVÅ'ÇÛÔŽ¨š‡aÎv¡a3äH´äË¢M±\ ½>»úlBI+L6vK4†hik&KÁ]²D<J–_“„ŽÏþ“Ô2Òb‹ŸÝ«Îˆ)¼ØƒÓZm÷O¨e>™Ú/ªÙ=¬ÜÜnÃm”¼/üBRÛlͧ²ÙµÏ£uä†!—æú=žèÃ@ñ;CsQS:¯jvŽƒªÏG³béßÅmï a¸Žl6œ ˜J §qwj}®L p‘!\y½[ßa³’ˇڭª?ž†NI2æ,‡îƒCQsà³Ænm܇#CøùpaQ´ûgP¼¸³'Ùç¿÷ûWÿ·õ?öúW/pú±ë¶Ì8KE"¾ê¾-$Ës­ÆïÛ°ÐL²4çê8Íã€åH?cjx×9ì°Ôép-—ýA\ ‘,†ÕG2IY,$Uú¿1¡p`„9:·¡ 8ÛÈé­ý¿1½îi9½:´Há)x™”póKsk«è7°B.”Š-SH[í«ØŽÓëu½m@Ç(PÓÏCd«ftž1àùJ0¡娿τ‚݇”£øP0‘¶ÅEÑ-„ˆÖ¬ËeSá5›˜þñÝŸ( ¨”Û„3ƒ¨£¤Cs7ïP@MxáäùêhyvXëìhKߧ™´kqàGÔì*,ãZÙD€—³‚šÿš í
+2´èî‰]xBH&Žáì²¾‡«/vž.ˆÀ`oFÐáÄ 7]«¶»AÑE³3óÑR?E*É™Ìò,
+ýôe®A¦ó|x·zY`îG“–© ¹„b±JdøÊ%tîÌsÿLè^7ÎÇž.Kú¹Úëu±=R]3–¤yì£OB˜¹w rú<~HbìlËÖÖM`±…¾v›|=MÜ‹
endobj
-1566 0 obj <<
+1580 0 obj <<
/Type /Page
-/Contents 1567 0 R
-/Resources 1565 0 R
+/Contents 1581 0 R
+/Resources 1579 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1573 0 R
+/Parent 1588 0 R
>> endobj
-1568 0 obj <<
-/D [1566 0 R /XYZ 56.6929 794.5015 null]
+1582 0 obj <<
+/D [1580 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+386 0 obj <<
+/D [1580 0 R /XYZ 56.6929 769.5949 null]
+>> endobj
+1583 0 obj <<
+/D [1580 0 R /XYZ 56.6929 749.9737 null]
>> endobj
390 0 obj <<
-/D [1566 0 R /XYZ 56.6929 730.9277 null]
+/D [1580 0 R /XYZ 56.6929 670.1208 null]
>> endobj
-1569 0 obj <<
-/D [1566 0 R /XYZ 56.6929 704.9004 null]
+1584 0 obj <<
+/D [1580 0 R /XYZ 56.6929 644.0935 null]
>> endobj
394 0 obj <<
-/D [1566 0 R /XYZ 56.6929 236.9993 null]
+/D [1580 0 R /XYZ 56.6929 176.1924 null]
>> endobj
-1570 0 obj <<
-/D [1566 0 R /XYZ 56.6929 205.1553 null]
+1585 0 obj <<
+/D [1580 0 R /XYZ 56.6929 144.3484 null]
>> endobj
-1571 0 obj <<
-/D [1566 0 R /XYZ 56.6929 146.386 null]
+1586 0 obj <<
+/D [1580 0 R /XYZ 56.6929 85.5791 null]
>> endobj
-1572 0 obj <<
-/D [1566 0 R /XYZ 56.6929 134.4308 null]
+1587 0 obj <<
+/D [1580 0 R /XYZ 56.6929 73.6239 null]
>> endobj
-1565 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R /F62 1361 0 R >>
-/XObject << /Im3 1515 0 R >>
+1579 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F22 973 0 R /F62 1379 0 R >>
+/XObject << /Im3 1530 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1576 0 obj <<
-/Length 2383
+1591 0 obj <<
+/Length 2555
/Filter /FlateDecode
>>
stream
-xÚÍZ_sÛ6÷§ÐÛÉ7  }r'çNâö÷)Ídh‰–x¡HŸHÅõÝõ»ß.¤(‡’ìF7“ñ°Xì.v YŒ8ü‰‘3Œ+¯GÖkf¸0£éò„æ0öúDÄ9“vÒ¤?ëÇë“¿½Rvä™Od2º¾íñrŒ;'F׳÷ã?ûåúüêt" 'ìtb>þñâò%Q<}^ü|ùêâõ¯Wg§V¯/~¾$òÕù«ó«óËç§ጀõ2rرàÕÅ›sj½¾:{ûöìêôÃõO'ç×ÝYúç\áAþuòþÍàØ?p¦¼3£{èp&¼—£å‰6Š­TK)NÞü£cØ K‡ô§¥bRz5šδ»w¥8ì›°Ò£œÛ›N„0L…&ÑšqÏ7&‘¢g!³Ò›‘5ž%Jª`“¢šÏórŽºù²?Ÿ;&´Å}pb}—Móß8—Y ZUv|¿Hj5‹ n\g«ÏÙŠˆÀ¸þššÓrÖ.QáÆÙÖº0—,³S1®ëtN›¸qçƒx œ•yc$ ”• {lSÃ-s–‹Q__§_å%3"±£I;á˜&“0ÓqyÈdÊ@Cx2Ùý
-ÔsÐ`ÓªDsÍפÂvEŸ¿GH”é2› ðUš%VÅIMu:Q‰§E- Ö6‘TÇ/Ñ‹|¾h&÷~h
-RÁI2K³I°íÄi¦B\!SÀXV%Ýà߸áòKÃœ–>Šô2x
-F'ÏVMšÇÐ÷¥‰P»‰°‰)}î(ÇN:;í&­ó}ÚïëëTõÿ½4*aÚëCÊ7pq¤Tð=ˆOù´žLiYfÅ“â„™6kÄLÀËåºÌ§ÑÔ² =L‹øg 5Òé4«Ã ÅÁÜ¥ãRªÉwÒÍÛ?ݹöXu£®oùJI¨#”;”É &’FY­!'Ì&Ÿ²‡ç¥3¼ Ý8¬§þËËwïÎ_PîQhOÔoùšpÎ@]s‹H˜°\ElPè~ªF1å£6mO{Ví¯Rn2êÊîj­ïh„fp@€MF
-LçG« %´œ.Ú¼³„ÀÙd%²=†ìiè¾Æ9DÞ‡²¤ñ”m>çÙý³¯DÌa­—ãÝŠëKt¬Ðþc*Î&Ì
-w¨ª26áÚm
-¿oÊ2(3Ûʱì /eºúv7Ȇl기-Zë@mwZ4V´­étÝ¢aGt6„ëX'YÙnÑ¥%ƒŠ\Z&§BŸ¾ ,
-αú.ˆß»V øæµJ—Ë4ÂNÝ?/GLÁ¼¤àÀ !ND!ÔûO´mÔÛ·³ÚõÇeÚLCùJøG“©„ÿ㇡ƒ <'‰( $è%ݼ|‚©4Ưø`4`±G'ÝíJµ®„»P~¢ücÓãëÔ²uÏסVÆOý°¼©Š|J=Ò*¶BÖÃieü‚* g†õÉ8è”ÆP± ªdîÆq«9•ÐÊÛƆ÷-•|Ë-AîV9xÁu r&K)ͤ“nÛ¬ÕmTë–LÁµI&Ã)ñB >>‹7¼Ùn*N"¼‰!¾Ýœ½xSwï.!}C]«¤ _V”õ„'E¥’  ¤l ƒQCaþɤ¤.×uäq)mÌžù>oCxÜ:(µ»@¿ÃpZÝÆ€› Ë]zÏÄò¸ñ´•ž$HPñ3¢@Áu¯ ?àˆ—U¼?œÅõ=#ÑÛiímä¥ÍEÝÓ*vŠ¢ºÏfƒú¾^ÄI·Î"Ô]4Ò
-ÿ ¡ 6k „ÌjE¥Õ_ã1í è§Õq—»jÕt¼7[غã˶§˜ÉùP J E.z—Œëñ„¸{P¢öe°t^¼_GŒ±þ²¡ÿ+’]ÓSÙc_ᣃØë©ÿs²ù‡ÐrnÇÛJçœQ(<“V_\eðHã¤ý|[moendstream
-endobj
-1575 0 obj <<
+xÚÍZ_sã6ϧð[™šÇÿ"Û§t7»—Înº—¤Om§£ØJ¬[YÊYò¦éÍ}÷J–ÙNwf'¦@¢
+Õ$óÔöZÎÈ;ªfž-i¸ª³š=vÃæ.F}¼NËhO#lÒîH¼@dû Û /M¬uû 'Z€ÊºªŠú9Ö›i4 )­¯g"ÌӲ̊8ÝTô{u:ŽŠ¿~ˆó,¾wc£ž3m•‰ï]–³éÀî$ ô>bZ5y‘7ÇBˆñ;öô:¥?¶£<¨à a÷ÙxGN—Ób5Ëö›12F¥ôƒç²Èv(®·£C)®=!Œ\Ö%Ìs¡ö)Ž+¦µ
+êøœ=ì×Y}—MsÔQP$\Šó Mˆ@òª¤™p¼(yœIWàîe“O[n`¢P'«ÉP´Zæv ð …(ˆÃ«Ë³÷Û-ÖWÅ¡BÖßk¬Ï÷å›xf”¤\ST··¨…šM%ãûyÚÐ# ܸΖ_B
+`™ö­ÍagÐÒ°íD¡COʪÉo†r¸L¢;^üæ·oœ¯8]ysoºÀÏâ‚ÒEu‡éóyѧ…³ʽßÕuŠØ*.Q
+8DŒ|ZOº¢î…¢±¬°X¬ÊòRW#âæfü½Í´u¼± N$P-G\±L:¾MÖ}׳öôõ5*­™VÔFÚeVí@ÆZ® ûÌ&P¿¼,«†j}yìÆa==¿=¿¼<}Cc¸C£½­~Å壑œéöe£,ã Ob:/ú?W£! ƒÆ’žö´GÔÐ3Jè™$¨×»†F«;š!8´ÉˆÒÖ„@¼x÷†† ù£Õ†;aÓy›y:›¬ÒŽ>@_C_óÑ
+ŸtåçÖN
+Ö"¶«EÍÊR¦«²·Ãl—Œó.¬mãÎC‹ÇŠv4®Z< áhφëvÖE¶tiɬ·àÒÊ0! 8ÆwãÍ„EÁ97AÞe»¡xe´L‹4OÝÿ^¼mÑÌk¡»+‰%I„!ôôßhÛ¨·ng3(÷ëßÃmÆï¡
+ „GÌÔHøß÷C{Ðà96æsü ¹çƒÞÒÉË×0¸»
+Ô›JÙ  ¤l^¡©NA8‡›ù&’I H]¬ê(ã:RÚ˜=#ò}Þ̇
+endobj
+1590 0 obj <<
/Type /Page
-/Contents 1576 0 R
-/Resources 1574 0 R
+/Contents 1591 0 R
+/Resources 1589 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1573 0 R
+/Parent 1588 0 R
>> endobj
-1577 0 obj <<
-/D [1575 0 R /XYZ 85.0394 794.5015 null]
+1592 0 obj <<
+/D [1590 0 R /XYZ 85.0394 794.5015 null]
>> endobj
398 0 obj <<
-/D [1575 0 R /XYZ 85.0394 513.3136 null]
+/D [1590 0 R /XYZ 85.0394 433.214 null]
>> endobj
-1578 0 obj <<
-/D [1575 0 R /XYZ 85.0394 488.974 null]
+1593 0 obj <<
+/D [1590 0 R /XYZ 85.0394 408.8744 null]
>> endobj
402 0 obj <<
-/D [1575 0 R /XYZ 85.0394 420.2055 null]
+/D [1590 0 R /XYZ 85.0394 340.1059 null]
>> endobj
-1579 0 obj <<
-/D [1575 0 R /XYZ 85.0394 390.0916 null]
->> endobj
-1580 0 obj <<
-/D [1575 0 R /XYZ 85.0394 312.7536 null]
->> endobj
-1581 0 obj <<
-/D [1575 0 R /XYZ 85.0394 300.7984 null]
+1594 0 obj <<
+/D [1590 0 R /XYZ 85.0394 309.992 null]
>> endobj
-406 0 obj <<
-/D [1575 0 R /XYZ 85.0394 159.3 null]
+1595 0 obj <<
+/D [1590 0 R /XYZ 85.0394 232.654 null]
>> endobj
-1582 0 obj <<
-/D [1575 0 R /XYZ 85.0394 131.3824 null]
+1596 0 obj <<
+/D [1590 0 R /XYZ 85.0394 220.6988 null]
>> endobj
-1574 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1589 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1585 0 obj <<
-/Length 4330
+1599 0 obj <<
+/Length 4374
/Filter /FlateDecode
>>
stream
-xÚ­[_sÛ¸÷§Ð[åŽÅÃ_‚HžÒ\rõM›»&¾™vîn:´D[œH¤+Rçs;ýîÝÅ )A–;ÉøA$
-lþö‡ﯿûéã›K£æ7×?|¸\Íæï¯ÿòŽž¾ûøæ¯}óñrÁ ÍçoÿüæÇ›w©+÷4þtýá[j±ôs‚èÇwïß}|÷áí»Ë_o¾¿xw×2^/gò¯‹Ÿe³,ûû –I[èÙ#¼°Œ[+fÛ ¥e¦•”¡esñéâo‘à¨×}š”g™¹HPñ‘
-Ó‰4-sû“Á13Ó½lAÏJ/ÃÜÌÛ;ü-ÜG®¡)·5uÕî7P,8ŠÎ$P~ï›LŠŸ «Ãn/
-ꢥá.-Lv¼’.0Ž„wÍj™Ø!3.ãvíûzS÷OD%BŒ7~Âe»Ý‚–x® ßÉE
-›IÅ´5jñÞïêê·ŠZš¶Y|ûáÓ¸»Ûoz¯§w$ˆ­WJÿ ‰žÆbÄéA)¹Í”…5à´oš„(¸Î
-àØ/²nª>!  b .ÆŠwDD}×b^wÔXÒëÍÛé½k—Ÿ«žžÑ&TMÝÜÓ˜Ò7“f@C÷P-k<ƒ°‰c¤r0†:°üph«¥²c…œÕÈ
-åÖZÀ
-‹"m«‘âbLÒâ©^iØekø03røÐîRB<c6h—;$/o .OŠ@ipSÆ_O‘â(m2žçf*‚rµÚ §ð
-.åüq]/×tzôk¦Š©YY–(«¢pM iþýúÇßµ´»Ø’Ó“cÀ¦LŒúÄi
-&Ó`ÙG£~aš•p€wu÷ž9IØ{}Ý@σ·lΣø;ú%õ†Qa¯Šùc½Y-ÉŠ¯ü~{õšA€Ó×LæS3
-v¨©–è`œ§ÓHÊ9&E¾ZÊå²zèÉßiwÈ°·lž|Ãý:¶ð<á:GL::K*P^
-epc .ѯs±“YGþóêpŒÕr:q#"OÎr'tå-½ý"„JÈVÆr°‹ç¬¨Î€õ|bE‘¢£ ­i=k·ÕÀÑ ©„zÂ+ ?lžYSiàP&ùr (.Æ$ÈÂ3‡ÅÇaÏ` Þ…ÛáÔhÎÀ`ÎoyC*²Å·ˆ£±í½®»nïû$îL<"bºŽ&aŒð«£tÉçþ[Ÿ/£¹}¬{"°P`ïòx¦Êͦ}LÙ ‹»Ž †É` TØaZ'm§ÉU8ìî"ôÒÓ@âÄh¼;M¡%…2Zx[ Sx Þð!Þ‚L$Ô=yyx½-½Ö
-³H=8*l;š;oê&*œ
-¡ûW“A¤xFRÎñC¤†a™.
- œEa ÀLf
-¥ b¾b/ƺsÈãøås û_‹2U™ÆÄ4SÏX³<Q<Hl6ì Ö¶_¢8ù¯¾‰íc¬ˆ%ìÒ×¾úº7å?,4uÕ¤»²é³ÂR`í”`ñGºüöÂSqåë™k,W¸H F¯j?-hqFÅÉÅ°L(up¤Võ}ÝS‰&†7. ,3¾¤YxcÍÌp¨±u¨›ÀË,~y>ŒcúõÞ79î°Éq‡dòÜðd-Åd¹Rç+ ÌvÜ™<¶à®{"¾-?[¸o¯ øZ0ÚSq<´]WߺL—ô`[*Ácƒ»g"}ƒŸ$/ Ý~S ½ Ÿæ$ÍBƒµ§¾4îR*4ì”è=U,¥õ÷Ä ¦sÖ††=ªº9\¦Î€"ˆHD¼ÑöØî>û¥Ë
-9ѽ1W·.ýU¥Q^^‡«ltsiçÛ×þzÖ`šX°ÏxÀíQºº¢¶ª;Ïòxš!ºÄ¢W‘ƒpÇ€~1\Má™$¿ »à…Kq˜x•Ò/Lå6I“«“4ý­€ûdè»"ÃÞ¿N©+Žåã8èð?aR‹ÌXéÊ™T~oñ?b´ÿ@"›ýªJþCÌw»¤
-kþï%A\uWo*´>¯O¦—u†ÿ•HL²Èüÿ£Õ†xB…8‘i5EAƒ Láj”:â<üGÖ1ëÿnI”endstream
+xÚ­[Ýsã¶÷_¡·ê:C|Àåéz¹Ki/é3ÓN’ÉÐmqN"]‘Šã~üïÝÅ )A–;¾ñƒH
+nf‹È ü‰FÔMÕÓÓϹÊ}Ûý¯åjµ£—ÿ ¢Ð0ñ‚eZ
+åHüÑw!QXëФ}íg¹ow}¤=¼üâ,¤Î Ï‹)åfÓ>„U,‡_dªêº_·e¿\ÿº©»Þwü×ÑÉÒÎÏÕc”‚ûÿ¾ý÷ë Zg:7ÅeY6ù,OŽß7õï~Ýe¿öOÕnKOÍ~{Syá¶Mx7ßíÚýý¤y4É*Hœàúp•‹¤i§S5‰H“q£UTpùÿ¦ú9ÏyS÷uÛPKÙ¬èáÇ®¼«ü\ü´æ_¯«ÈÐ0ˆƒí*­aðÄ:Ž©I°cp4®˜…¯ªåŒ™yÜ íׂ 톆,×eÓTßÝ·ÔzSÑᆱVÔsóH-Ýc3P[¹ÚÖ lÙ®ìÛ]GýÂt"$MËœÁþdà6õtSZгÒË°ÐóöûÈ54嶢¦®ÚýŠ®5Ù8ʯó}“Iñ³auØíEA]´4|Â¥…ÉŽ7Bä  ¹d^»fµLìq»ö}½©ûG"!Æ?Ჟج<WÐïä"¸Í„dfj'Q›ˆ÷~WW¿UÔÒ´Í⛟ÆÝÝ~Ó{=½%Al½RúOHŒð4cð ÿÖ¸Yß4 I0î®0~ι ‚Á£a|¬·qCxT7|1óº£Æ’^¯ßþ@ï]»üŒž ŸÑ%TMÝÜјÒ7“b@Cw_-k4AØÍ„Éb›
+,߆^!m–çFÌç™IŸ|9¬Ð˜tè]DŠ‹1ÉWGj¥`“­fÃÌÈ¡ 1 íbYnƒr9y¾4|k˜8)©
+GWÛ{÷[wÝÞ÷0Ü9x„Ã4tLr5 WGé›ûo½ 8_Æró8øöDV!%<G‹¢¢AÂkXܼ`0˜ $3EHyû¼:é9u!ƒ©CV¸wщ°`vÅ"N\ÆÛqÈäJP£¸÷DÐ0÷ØÁ= ’-èÁ*BÝSŒ‡×›Ò+-'4‹ÔÓY°sa×}åHƒ ð˜é™|Ä
+€d/Öà@q1&™Ð`®!¿ˆÃMWæ963Ìî¤ø‚LŠg˜”9‡øØy¤+µ$ÌLf ´vˆ6ñz]{ _|²˜wõö~ã7ùê‡`•9†iv°xVFÏ…ÞwƒNÔ¥yŠBîסœò˜BßRBóAéÐ7(uQä oXg\¼}Š‹1ÉúæY!-fvŽw•F"BŒ_Eµq¥/žÖ®´a°÷ܲ3†!`÷/&ƒHñŒ „c‡2H†Æ@Á—c2P<ǤÆÚ0ú1“§ R¯"BÏ‘slp×´ô¾
+q ‚½–JLk*)5KÉã6ºJfÂwóL V¤K*z\R)|IESIEÏüpõwêXµÛ²n¨u¨¯èi}¥ðõŠ zR\p#¨4Œ]œ[‡ï\z„$çó7[€*`5ò°üçb‹)BÒW ,åÓÅâ€hp…;ÿUÊE°Œ"l™+d'q¹Éc…è2AG6‰µW÷>¦" CæöÉ0 ÞC3ÆP¥<𭎹IŒÓ Ézþ¡í½t\ÐtRÚú–ûMÙƒSÞv$2ÄûŸöÍ÷Ÿ¨×s„ÙxT¸‰ô?µ›
+0·‰/vÀâbL2ဠ€zž-{62ÁL  :U
+°€VJ\’„‘£â3¼
+:õÆöº÷üɈAýØ»s£‹´Øõú5¥›_54¤w ì[–]uIð9Ò,7]KãÖî$ÆÈSàIÙŒÊ<ë†1¯aà"BêcÑLóåí7¦Nr~³÷«¶réªoZ—îôžÊ”Ês,({¦( /ŠPrŒ”¦A¦†Ùg Ò=1U4d¯ Ü{®]@â¨åÊ·¬ý2\‹/C*+]”v_n2p9Ü#á<K,¡œt¸4q>Q€+7ãk™Ç‡ñ'ÇMR¬HžuøUÕ'=K1.ËbÞDÎ/­íø­J¢(T¨oCƒÊÝbŽsL¿à°z4îÁe=:?H’ñ’Nf­zò±-tÞìëM~:£Ë:áÀû–¤Ÿ%Eß<(Þ„o:š.ôAbù´”!5Q<¸k—áÈÌ÷Aìf¬k0‡ˆ(‰/P>w¸0¼õµ(S‡ÒXµzêââê¼8>8Hì5l žj?GoŠ¡V} ÛÇD¯Kê=ÈÓŸxSñÃBSWMξáaW6]¸[f,¥…ÐNÕOpdÐåwžÌ¥?É\ãQ…Ë“`ôªöÓ’OçSè2ažq)íÔ?­ê»º§ÃI˜òݸ0ô±¹ö‡™Æûê\6­Ã™ ¼lÁá—wáÃ8¦_ï}“ã›wø@Ï Ož£è¬òüéGn7î<ÂZW=ß–Ÿ‰-\‡w×B-øì©Nß·]W߸2—ðP[h:|ÇwÃD ö†0IAºý¦@»¡Ÿä$ôP?ƒµ§¾Ôîv14ì”èV
+ë/ˆALçœ/ ;ztà~‹çò $‚|„Ç«líî³_jp¼X.eÒØzG \‚¾•©Š½Ë´Y؃ôÔ`k¹.ÆS;‘–Ä¿^Òk7ßâ Ä#µ¹‚ Œ¢Ä‡¤/CEE”c×Â!€3ˆàÿŸo±
+ "}9Dˆˆ¬jw>@³zæÛ‡†âëÛ gxß©[ñ>l^€7à&¥èÞvñ¬«^
+µp¬"©â¥€.LðÃÀë”za¨°IšLž¤éïÜ%ó~ضþ딶fÒæÅ8 JrU†ÿ6–(æñÖä‹ÿ;m¨v‡”œŸ¨ij“@)d\Ê#Îÿ±³þ?tâbendstream
endobj
-1584 0 obj <<
+1598 0 obj <<
/Type /Page
-/Contents 1585 0 R
-/Resources 1583 0 R
+/Contents 1599 0 R
+/Resources 1597 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1573 0 R
-/Annots [ 1587 0 R 1588 0 R ]
+/Parent 1588 0 R
+/Annots [ 1602 0 R 1603 0 R ]
>> endobj
-1587 0 obj <<
+1602 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [55.6967 387.5149 256.3816 399.5745]
+/Rect [55.6967 314.0348 256.3816 326.0944]
/Subtype /Link
/A << /S /GoTo /D (rndc) >>
>> endobj
-1588 0 obj <<
+1603 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [268.5158 387.5149 332.4306 399.5745]
+/Rect [268.5158 314.0348 332.4306 326.0944]
/Subtype /Link
/A << /S /GoTo /D (admin_tools) >>
>> endobj
-1586 0 obj <<
-/D [1584 0 R /XYZ 56.6929 794.5015 null]
+1600 0 obj <<
+/D [1598 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-410 0 obj <<
-/D [1584 0 R /XYZ 56.6929 692.9565 null]
+406 0 obj <<
+/D [1598 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1338 0 obj <<
-/D [1584 0 R /XYZ 56.6929 660.5438 null]
+1601 0 obj <<
+/D [1598 0 R /XYZ 56.6929 752.2372 null]
>> endobj
-414 0 obj <<
-/D [1584 0 R /XYZ 56.6929 112.3379 null]
+410 0 obj <<
+/D [1598 0 R /XYZ 56.6929 610.516 null]
>> endobj
-1589 0 obj <<
-/D [1584 0 R /XYZ 56.6929 85.6994 null]
+1360 0 obj <<
+/D [1598 0 R /XYZ 56.6929 579.8656 null]
>> endobj
-1583 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F14 964 0 R >>
+1597 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F22 973 0 R /F48 1253 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1593 0 obj <<
-/Length 2372
+1607 0 obj <<
+/Length 2364
/Filter /FlateDecode
>>
stream
-xÚµËrã6òî¯ÐQ®
-<,Ÿ&ÛëìÆÙxœÓdjŠ&a‹>‘²W»É¿§)R¤,ﺶt`h4ºýB‹-(üØBKBE.TI™\¤å]<ÁÚõó8A‡ ±¾»?ûöJ¨ELâˆG‹ûÇ-M¨ÖlqŸ}^~üÛ‡Þ_Þ\ÒeDÎÑåw7·ßãLŒŸ?Ý^Ý\ÿr÷á\…Ëû›ŸnqúîòêòîòöãåyÀ´d°Ÿ{
-G6\Ýüã¡ë»?þøáîüËýg—÷½,CyVßÏ>¡‹ ÄþáŒk¹x%,Žù¢< ¥ 2¢›)Î>ýܬº­sú“B©¹šQ g ÆH,%iPÆ$\8 Z¡#P
-Îq³æ_I¹.Ì70âùrD÷ú±Dà’Š Wzg±óëMþ ˆ8øÍìÎÙ²éxIüÞÄÛ”‹Žo´“>y(¼÷ÕU±CèÁQU
-gRLöõ„ÝáÉC)’g~.™‘ R‹ë„zÎÍË\D€úQQy($-ËåßÍ®Á2x{Œ{ Çöˆ‘ÃU?–3ü‚¼Š:åN)"B®Ni<éDã RG•ð`ð qgÄ
-·Önꢙ+ƒ4x¿d»qÚ ÁH!>Èq;æÐ4$“j*A4„”SÝáà 3®4¡ûF‡– ZmH~êÐÖ).&ÔöaÒ²PnŸA|UÒ%,Ÿ=“ö ~AÀ¡ –8åÇ¢‚ö'¢)€sxE‘ ñ‘ŽÂ·¼Ã8‰µÖó¯° § I:eYƒz Œ¡êèÑ\-žÍy‘wS”âkÒ <£©âjù[U¿T& ~QvÍ•0<r• ÛÉña‘q%«Ë$÷û}½жÊßWXÂÂTÕæ;,¹y4>€1¶t®É—7-N£kðÐѳ®U:Ø!c|}^sT¸D!iWùBvÆK)¡ŒÏ=lÑ&}hÀdlºÇ`3AÇ‚ÜÎøSq¶F-Ø—?õ &Ü›û Õ©È©‹…QˆË2ä¥ñøeÒ¦+\@ôÈfÒal)rdžBŽ­—ÀÜŽŸC¦‚gG]úW’>ÖWɳÁµc*œë…Ø £]%i'К
-¢b-N‘Ò¤8gˆE·8½™/.££ÄäKLèYÎ kF}Yêýä€P…ò€ždü(½.ú‡#Ù]ÉTˆƒVÑÐb¶6îÏc
-q„Ìc–!l4+׬‘¢oT¸oFˆ'|7búz EF ˜öÉ],m“¨Ü–ˆTmË`aÁUÔr¢óþùêÈæ.~Áúçƒq\Á ™, c߉WÙaìÛÖ Ø½!OdFÙ1ÔÇLðC 4ѶbD‰®6´"ÈÍG¢Vy,ê3ö.B–`‰ `ΠryoÈêCŠÓ%lK0fz0fQ€f+b%µ„-«Y¼Ù˜: n¡ö7á×}?¸¿•Óvr Ú.æmµï·¸£m¡èÛbm_Jú…ÄœIc‚(Äm f"ÊøÖ¦Xì[CEýôä-úiŒaïhìûaLA½jÛóCa?#Fß0 ¾bÁ6 à÷<í$E¤Ç¼ðèë¤]áî£}8.Ô „„G{ZÇZøül«"/sw—!ôe.õ{úMþo3 Ç w³rùS›]ªÂ_}oz7º]mf6›9¾þèä+Š½C>ؼ Æ–aín¯¨ÔöžÓ¤) N­Çj{I6UoÝé5ì4Ý”=Ûš‘,yõX¶eæaë y®|§u9BÝÁõçéPÄ¡ÆÇÇ]ƒÇ´Íà«^ÜñÒÉVÕ§ï)÷fJlJ©Í;w8EeÞ¢þ|Ïc¹»Ñ)Odæß
-­ù|ƒAЊËXuLYÎÃIï·ÿ“sÊú_—0‰Äendstream
+xÚµ]sã¶ñÝ¿BòLˆÃA€sO—‹}uÚ8©OyºÜÜÐ$,qÂE¤ìªmþ{X"EÊvëéè `±Ø]ìVlAáÇZ*âp¡âHÊä"-/èb kŸ.˜Ç :¤`ˆõýêâݵP‹˜Ä«‡-M¨Öl±Ê¾,?þåÃ/««»Ë€KºŒÈe #ºüþæöœ‰ñóñçÛë›O¿Þ}¸Táruóó-Nß]]_Ý]Ý~¼º ˜– ösOá̆뛿]!ôéîÃO?}¸»üºúñâjÕË2”—QaùãâËWºÈ@ì/(±–‹'PÂâ˜/Ê‹P
+"C!º™ââóÅß{‚ƒU·uNRh"5W3
+älÁ‰¥ä# ʘD‚ §A+´PJ—y•ûÌ ˆŸÛ¤5¥©Z/ñ.)Ëdg%~w²ÁÅÐ .¤r{"P|È S%¥yûÆüÀF!‰ÒT÷œD¯àäó¥¼ÊÛ¼®p&©2~m’µñGñó,®6¦ççˆÄbB9 y(Æ”˜ˆH†^3`NHØÖ˜]Ûà Ýš­Is˵±ŒŠhiáÂ/&í ö¶Î;rO³»dzip[;Ë85‰ÀoãÜ3mª´ÞW­?7#–\TÈ×L/‚þŸS¤¯aG&#5ÃŽVˇ$Í‹ÜÎY¾täÕ+IVæUÞ´»Ä[
+$hOÇb¬§]Ž4E.…ë®Kƒ3휽߷8YÕ-ÎÔp讘*µ¼†sܬùGRn óŒ8E¾Ñ£~,¸¤"ÕÞYìüv—?"~7‡K¶l:^¿7ñ6eÅ¢<P;é“ûÂ{_]„îýU€õl„ÀèÁb Z’WzºòžnY|S¼q"¤ô-Ïþ—“ Û0<º±¤X×pi›1ÁŽàŠÞu˜Iw¦¢'tQsž‹q¡"JD½àúÁÿ_áSp~{o³§O ŽTb&@@òYfȘu$;LðÓl¼5e~ Jsc¿Ë‰igß
+oó°
+,Oµ9ïÐ4$K3„@§¼àÐ~0Ü0ãJº¯th ¢…6° ÈOºÃz‰‹ µc˜´,”ûÆgÐ{_”t ËgϤ=)_Ðß
+RœØŸˆNlt¤
+´k®„á‘+ÝNŽÏ‹Œ+Y]&¹ßïËE€öUþÇÞ¸ºF¦ª68`ÅÍ£ñŒ±¥sM¾¼iq]€ûŽžum,ÒÁãcyÎQá…¤]YäëØ/¥„2>÷r²q #Dšô¡K ±éÞ‚Íëq;ãOÅÙzµ`_¾î'L¸7÷AªS‘S? £—eÈKãñˤM7>¸€è‘ͤÃ2¶È‘ex 9V´^op;~™^uéIúT`Xß$×î©p®`/Œv•¤@kÀ±ØSö¢jÕ[Y¬ŽE|7öåÐLÅ(é—_tk[(+ѹõñ¹pêܸ(Ž}KH¦o÷mO0RœqíH«ÁÁç][‚*Xÿ5†”YuÛ¾hÆ[ ÁÅ\§ÞŒ®YÑà\·Á@é’·‡wÉ<6õˆ#Ú© \ªªå-ÜUæ÷í·ÛÚöD¦O¹ Á­(ßÚ¦LÒ ÌäŒDð–Òœª>XMIB±'ûºÁQ‚
+›!%Q±/‘Ò'¤8gˆE·8½š/.£³ÄäKLèYÎ kF}Yêýä„P…ò„ždü,½.ú‡#Ù]ÉT=+C‹!ØÙX]Æâ<+˜Ç,BØh6®W#Eߧp ÞŒOøfÄôíŠ4Œ0í“»XÚQ¹/©Ú—÷.À‚«¨å1DçýóÕ‘Í]ü‚õ-Îsq%5Xƾ);¯²Ã Ø·°{CÖdFÙ1ÔÇLðS 4ѶbD‰®6´"ÈÍg¢Vy,ê3¶.NB–`‰ `¶¥½=buô‚ÁiÀ¶3Ý‹)ÔEŸÙrXI-1˪¯5f£ö‚[¨ý5øu_ä.Æo¥Ãœ](õ„ ¸£öP×lqGÛ*Ñ·ÄÚ¾Žô ‰¯6“ÆQˆÛ<Í:D”ñµ ±Ø÷…Šz½öæü¿7Åz"ÇfSP­Ú †Ò~AŒ¾]0|Ãrm@Àïùµ}Š[ým“vƒ»Ï6áü¹PY4iuþjáãg_y™»K𸠡¯sêé7ù?Íúf“ÛpS0+’?°94 Å!üÍ÷¤s'v»ÚÌìvÏ Tû¢8Šð~ÈóÑÉ`lýÕŽ:JmÏ9MŠ‘~àÔz¬±§dWõ6Ð^ÃNÓMÙ³}„9©—êѶÌÜï=!Ï•oQ .G¨¸ù<Š8ÔøÜqžä¼¥ l*
endobj
-1592 0 obj <<
+1606 0 obj <<
/Type /Page
-/Contents 1593 0 R
-/Resources 1591 0 R
+/Contents 1607 0 R
+/Resources 1605 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1573 0 R
-/Annots [ 1598 0 R 1599 0 R 1600 0 R ]
+/Parent 1588 0 R
+/Annots [ 1613 0 R 1614 0 R 1615 0 R ]
>> endobj
-1598 0 obj <<
+1613 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [406.6264 524.1437 456.8481 536.2033]
+/Rect [406.6264 463.8552 456.8481 475.9148]
/Subtype /Link
/A << /S /GoTo /D (tsig) >>
>> endobj
-1599 0 obj <<
+1614 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.5805 512.856 196.7992 524.2481]
+/Rect [140.5805 452.5676 196.7992 463.9596]
/Subtype /Link
/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
>> endobj
-1600 0 obj <<
+1615 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [103.6195 470.0794 159.8382 482.1391]
+/Rect [103.6195 409.8565 159.8382 421.9162]
/Subtype /Link
/A << /S /GoTo /D (controls_statement_definition_and_usage) >>
>> endobj
-1594 0 obj <<
-/D [1592 0 R /XYZ 85.0394 794.5015 null]
+1608 0 obj <<
+/D [1606 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+414 0 obj <<
+/D [1606 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1609 0 obj <<
+/D [1606 0 R /XYZ 85.0394 752.3146 null]
>> endobj
418 0 obj <<
-/D [1592 0 R /XYZ 85.0394 769.5949 null]
+/D [1606 0 R /XYZ 85.0394 717.6455 null]
>> endobj
-1595 0 obj <<
-/D [1592 0 R /XYZ 85.0394 749.3189 null]
+1610 0 obj <<
+/D [1606 0 R /XYZ 85.0394 688.3332 null]
>> endobj
422 0 obj <<
-/D [1592 0 R /XYZ 85.0394 679.8163 null]
+/D [1606 0 R /XYZ 85.0394 619.0499 null]
>> endobj
-1596 0 obj <<
-/D [1592 0 R /XYZ 85.0394 652.1211 null]
+1611 0 obj <<
+/D [1606 0 R /XYZ 85.0394 591.4512 null]
>> endobj
426 0 obj <<
-/D [1592 0 R /XYZ 85.0394 573.4726 null]
+/D [1606 0 R /XYZ 85.0394 513.0222 null]
>> endobj
-1597 0 obj <<
-/D [1592 0 R /XYZ 85.0394 542.9681 null]
+1612 0 obj <<
+/D [1606 0 R /XYZ 85.0394 482.614 null]
>> endobj
430 0 obj <<
-/D [1592 0 R /XYZ 85.0394 335.1831 null]
+/D [1606 0 R /XYZ 85.0394 275.2452 null]
>> endobj
-1601 0 obj <<
-/D [1592 0 R /XYZ 85.0394 307.4879 null]
+1616 0 obj <<
+/D [1606 0 R /XYZ 85.0394 247.6465 null]
>> endobj
-1591 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R >>
+1605 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F22 973 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1604 0 obj <<
-/Length 3489
+1619 0 obj <<
+/Length 3170
/Filter /FlateDecode
>>
stream
-xÚ­Z_“㶠ßO±“'ïÌYÿJê=]’½tÓæ’^6Óé$™ŒlË»êYÒÖ’ooÛéw/@€”ä¥ïÜöÆ"A
-@ø²¸Lá'.Ml!‹Ë¬Ð‰I…¹\7éåŒ}{!xÎÒOZNg}u{ñåk•]Ia¥½¼ÝNxåIšçâòvóËÂ&2¹éâëÞ¼¾ùöç·¯®2½¸½ùáÍÕRštñúæÏ×Ôúöí«ï¿õöj)r#_ÿñÕ·×oiÈ2¯nÞ|C”‚'˜¾½~}ýöúÍ××W¿Ý~wq}t™ê+R…Šüãâ—ßÒË ¨ýÝEš¨"7—ÐIQò²¹ÐF%F+å)»‹Ÿ.þNFÝ«Qû‰4‘Êʈ¥¸")Œ‘3 š"±Jª`A‘‚UÒ4]캻»º½#-Ê¡jªv î7Õ¯i*Ûz¨»–(e»¡ÆÏ}yW¡-`E9Ù²ô†“ãò°Ôí½Ÿ$&“dš¤*30çx ž3S9hYž×Â)•-Ö]‹ÒÝöW"_T=RóEIƒõ¦¢Öûr_WÃuº-Í
-J;âê×SgÛí©1ÜW4·-fÕWû÷Õý'“‹›¡h§ÀÖ*‹½¾/Û¶ÚEÔ[j‘%&ËÕå2l¼ðp¿/{XR*°wßwëôî±/Ýax8 4ÖTÃ}·é_`O£àMÉ#A#|…¶ ¨}Ò×h
-ìí ·ã)õ•
-09¤ …@Ã&tž™‰è¯øìÜáÀV¸ÚÕ½ .v`+ð…Ý­½od”O¸/yUÌfÆãZî{çÁ&ÍH3a¼fÂ.rÔLÉE=ÐÈ£ãsi@fÑwNŽ %Ï$z/¦í3r[*U$µÁ~™%ÃÁø
-›0©j‡òµ«½ìöüJÝÒ“ó¨Šl*Œ†M…ö]Çot³7u8\‘}öQŽƒ&ïYR ð±ÔD bR·ÞE•_¥Ô‘P!¬ •ûýZÆvÔËES#êa’JÎ4ýCµ®Q{Î0Gn´™N¬Á¸ª
-¨}ùÔ ‚¡Ë«Ä{Ä"8Éš
-Žú†šbƒ#ω³
-‡H¿nêˆ$'ÐØÎD¢âœP±ŸN°7÷8h+~©\¯«‡ÁA2_=-0îPMMFNÀ‘ºÂÆ<)„)øDÔí¶‹Åš<ÉEbMjÄ ro­³$SFÌ]ÃÁ?%²Ñß°ã-<ƒ'c§Œ!7a’\ûœ†•Á&v’Ó¤(” !²j+õ¯<Ô ¯
-Ð]’Fâ$F˜ü]¡PÐ^"…<­˜Æ1¤vDtþ ýÙƒ «dê6q(/@¡‹€Îy y˜
-’˜ÈT&ya—~&[a‹Ë7há¶Àtú,[¼vQÈÕïc€©ÀF*í4Ö÷]G§Nòq’‹wUõàסµyB·ÛPc¢’·A*l¨Y˜áöôøè4À(Áý|¾ ¦H²,@QÜXñM—’ùâïùakUm»P®B¿fº+´àIþ«"`§m–†+ úçò@P™÷AÏ<ìK¬@ºÈJŠ†,²ŽŒ­I‰ ösf (Ôœ™Ïð.Ø~~^q¡4æçš 8…ÒâH¡ô´BPNÈ3-7×̤\œ{Îê!‹b§Ÿv¨
-0sÈèi.AëÆò9¤}kÂé e5ð¬=Lò×å’oŸG\d¹Ø-ÆRˆoÍÒĤG †o¹=
-ˆÒ†–/º°µáúØpˆD ;&9^UÌÅúHáÈÕ‡uUmú£ëvS¯Y!˜„–Á{Y™-Þt4Ãg
-
-̉ˆµ·üƹ|Aƒ*ŒEN ( #Ëì§Ñ0Ai‡(ö*›•Ã~èÐx!”J´qŠ¯|½…„°Ð†X
-íISÓkè K¿ q:Ö©J”ÍåÜF‘#%ón·#w‘|×+±vXïëU ¯º÷üWÖÒ•ðh«Gj€¢‚ØJ8ñw‡Ã`aØ©äôs
-vk^)úåDa%“…KåãVYH13ø ŠmG+4ÝtÝM9”\k
-ü“Ål7·5Ú'}Á¯"´ú‚HcÀÀž¢í¶dÚ¼Œ~?Ú×í°¤jç=U}ô#Í›ª s—QqÏùw2Eš<\{ðõl$a@Z)ĉ+&9¹b’ók$0L’Óë#Ép2
-kî²Úc¯0¹¿C8_Pø;v! ¹(Éï3S|µŒ@x"BÉ_– IJ,Ç÷xc$†âÖ•Æ'Ëý н.ô' &
+xÚ­]sܶñ]¿â&O§‹Á’Õ““È©2:Êt:qÆûÃéXIõȳ¬vúß»‹]€ä‰g{¦=p±
+‹®Æ«¾»»øö•ÎERXewÛ­<y.w›ß—6QÉ%PËïß¼~uûãoo_^féòîöÍëË+eÄòÕí_núñíËŸ~ùöòJæF.¿ÿóË_înÞÒ”eßݾþ0}Î}{óêæíÍëïo.ÿ¸ûéâæ.Þe|_)4^䟿ÿ!¸öO"ÑEn0‰,
+µ¨/R£“j0û‹_/þ ŽfýÖYùI‘(mÕŒ
+8dßÞßWÍ=©è×¾ì]íšž†?¸wB¨¦ê«¶!LÙlø­+Fâ‚£”I¤ÌRÔÝÎE††EJ$BgãšÀÁsb:’×usZgËuÛ w÷Çå̗®Cl¾,iò±Ú8‚>–‡ÊõO4h·´*^Ú#ð~ ¶í€~çh-éQ;|t4j´üL-oûnæv,E ™1Ûl 3×»JA‡&ËõTûCÙÁ‘Jƒ¼»®]WpïÇrÙû‡cOsµëwí¦{£¯Kž‰7Â-¤2Àv¸¯P8ÚÃhÏK«K æõ4O×F¨ß]¹\—M@9†VŽ¦ŽÛLÍ• ò±òtß3'¬"FQÁEïÛÃÓŒ¬R‘Ø<ˆ4JɶôíÜÞ­Ùnwí#¨üöØÑ`½i: %à·vZ2cK²% ‘¸ {[V$`Ò]Enô¦Ù£,ÓtÙ6sWKUR¤‘çÏXy–h™æÏ­IWÈYjH¾ã/ ˜ 9§#lÉëê²a¦ØîOV€h’qåÂDÇâÕùX6=^ýJ‹|y»%$(pXã9ó’É!ŽZm¦6Ü´3‘:ÉTž~•@laNòb°£¨Ÿ¹†hPÑê±Úï Z¹?ÑA“ØI EV½š c>ÿÛ_RIžûu£;Fkõ 7n[÷}Ø5ƽïž: z=EnÜêp¶OCýô€cþ½Þ¡ŒŽhŽûý”ÈÕ ³'‰á$XkÅ"Ëýš[ž:BÈ2(C@ ÏdŽH4Xü¶Þ;r ÁÕ¾ê<ëˆxôÑ¡HÔ[ã:K1{^°+ùœ•b3Â{(7a#2º™4áfÒ.s¼™V˪§™GO&¦Ü‚&̲k=#Ì|DSh¾Xu|EvJÏ$78â1œ1¹ÆßHp0ßCÀö²˜Óé>3Iª¤™*ßërrè9ï¥ËãÊÀ@@/ÑZÓb:ŠŒ8"åÜS”ØÄEÝSÓ—Ÿv?ÙxKÕЗ3©žQ*ÌF¥|ßòŽv²3Î5ç$æ8:`úž¤…"sM˜È& «íIXy§T:+¤UP¥æA_Ws |ÑOˆ˜zŤ’sM÷àÖÞžs̉A}—&Ö``ÕPÍʼÕn‰äêí.pª ?ø…ò㫳—!<‚â™ÓP_
+i
+v‰ªÙ¶sÁ&OrYÄ`#Œ|AöB¯—é¡©¤à @-³ÁÞpà#-|£%ã œ«Ý¤Iò4$5l6s®,’¢Ð6ÆH×8ˆõŽOî«šO
+Á bòðÔ&¹ÎíÔBÁcØç
+â>o+àf›3YûlýœÇ$xÞrkN-
+C£3Wh UF–Ù/—ÒÄKûò€‚¯¶‰ÑÙIyØõ-ƒ3„v‰4§ù) ô\ˆˆ‚TàSÃlè™YÅ`˜*õ…ø•²§.‹dÇ®ª£«âëaï~01`*Z8À£(¦ÇO0@›~14ãä×B'ÚæjêØ#Q -%9z»ß“¹(~ðUØ=¬Õ*¢WíGÞÁݵòM|÷H
+MK'ÔíøÜMÙ—Üm@”fâ¤&ärTPe_´«ÞWE‚š
+ÿÝñ,y
+üW‘‰>·ÕžÿÛâÞŠÕÕ7„BŽ4}H)Q_ϵ‡ªé¯¨cÅuO®»>÷ÿ+ÐMá?Ìü·‰ˆ? üÏÿÛ2üãOš%:ÏUü·•©b³<Is ÂLá]RûŒóðO0ÏYÿ/.ˆÅendstream
endobj
-1603 0 obj <<
+1618 0 obj <<
/Type /Page
-/Contents 1604 0 R
-/Resources 1602 0 R
+/Contents 1619 0 R
+/Resources 1617 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1573 0 R
+/Parent 1588 0 R
>> endobj
-1605 0 obj <<
-/D [1603 0 R /XYZ 56.6929 794.5015 null]
+1620 0 obj <<
+/D [1618 0 R /XYZ 56.6929 794.5015 null]
>> endobj
434 0 obj <<
-/D [1603 0 R /XYZ 56.6929 769.5949 null]
+/D [1618 0 R /XYZ 56.6929 696.3453 null]
>> endobj
-1606 0 obj <<
-/D [1603 0 R /XYZ 56.6929 749.2381 null]
+1621 0 obj <<
+/D [1618 0 R /XYZ 56.6929 666.0554 null]
>> endobj
438 0 obj <<
-/D [1603 0 R /XYZ 56.6929 540.3599 null]
+/D [1618 0 R /XYZ 56.6929 459.1977 null]
>> endobj
-1607 0 obj <<
-/D [1603 0 R /XYZ 56.6929 517.4049 null]
+1622 0 obj <<
+/D [1618 0 R /XYZ 56.6929 436.7104 null]
>> endobj
-1602 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F39 1161 0 R >>
+1617 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1610 0 obj <<
-/Length 3318
+1625 0 obj <<
+/Length 3640
/Filter /FlateDecode
>>
stream
-xÚ¥ZYoãF~÷¯ò220êôÁ£9ó4™µ“ 6“]Çû”-Q‰THÊŠv±ÿ}«ºªyÈm{‚…a°/v×ùUUSj&áOÍl,¤É¢YšE"–*ž-÷Wr¶¹o¯¯YøE‹ñªo¾5é,Y¢“Ùýz´—ÒZ5»_ý<ÿø݇ÜßÜ]/t,牸^ĉœóéóßh$£ÇÇ?ß~úö_w®Óh~ÿéÇÏ4|ws{swóùãÍõBÙXÁûšwxæ…ÛO¿¡Ö·w~øáÃÝõ¯÷ß_ÝÜ÷¼ŒùUÒ #\ýü«œ­€íﯤ0™g'èH¡²LÏöWQlDãGvW?]ý³ßp4ë^ É/6VÄV§j`œ‰ÄhãXÕp”©y¾ÛQc/Ë]Ù•EË͵²ó‚:íñp¨›®XQ·®&/Ëy}(š¼+« /?·]±oAªÀÃü»ú„²Ôˆ,Æ"†0ƒÁ+»zÃëÆä%+ý²SééÝæÕjÇä틶Í7žò¶¨˜¹®æç¶lqëÙÂÈTè4«SJdq¬Ý®Ìû•læ%îGóUÑ.›òÁ1Ã=»m`G©X¨46vIJ®Öž@»©V)¯Ýç¼óx
-eÓô¯É =UšùöÀÞ‘¬ž9 ŽðGù¹+ò–›õšÖ Õ»Þ0xåc±£æ¦|,˜„$ª4
-³ÒÔàÁbØžÛbW, Á¡·®›ÁÕÈöALU±{O½¢¢¯é¹á߯'zŽH^Í=:;_¢õx—‘SWA¨‹TFV^pØ9^ ‡Õ–n
-Ò‘'ö±ÌƒKÄÚD_fL„ˆÞZÉxf–ŒÔ#ßÄ ôM½ˆ&S|SrD¿iY­ëŸ(aMoòaÕ@
-$mR_
-8”\Rá°y3œC@6 5›c“/zõó¬)pÇL ”Yr êÒp,þéµå#¯Ó]¸fïí
-Sÿ&t«&b_­À’‰ÌG)MœJH•œÃBÇe^0CÉóèXè ùÂlÂd 0—AÎÚ¢#h-Jʯ‚£Î4^Ñ0FBï¹*YC g’×±Pº/“HÞ=¤»Sûý£IJ(!†Å> Y„öÆ:]Kþ`¨&g’×õnWŸÊÆlåô8Ô~œÁa½¤½ÙÄÙ0éß¹a ÂÖÀ˜h¨pÈ7šjµd
-ˆü"Š¤{'BEc„LåEiÇ3¢å Y=ˆ&Òñü¹D6u;iÖXûÖŽp5ów/ÖÂÙÁg¸:sNjYR0ß×Iµ|à†ÀË¢9¡\ˆy˜° õB^î|­ÝáØ¡æ•œ¤àå/Pú«—öP,Ë5Wgùh ¡yIýÞ@FÕœRjþö¢Fdôp¸ ïCi"= åò7wÎolƒ8óÇ«6‡]jw]b˜ÁE_­ëú«÷¡
-au–z¢³(½¤¼ÿµÕSÒÿ:[)Žendstream
+xÚ­Z[“Û¶~ß_±“kg,Wtž×Nœ6NëlŸ’L†+Q'©’”•m§ÿ½çà
+k®ðÀ™(
+y½»ÒF1£•
+=Û«Ÿ®þºWSü3Ê2cež` #
+nY¡‹ü:7Ë”TŽƒû®n†ù¢ªuÛÝßÌ3Îg÷Uÿ5íz.+ð s!XaŒt¯ü× ¾x+åhu~=Wœ¡iÎí¦ò“&$@ifa2Îéïûm»N¬¥Ë
+¡ü´eÕuSuÛ
+àAcï¼>÷ÕŸ­Úîdj¤û”}MO#DE;^Ñï˜_ua½H$<9"ýlÑ£½ËjO0>5„:-
+lDÆáÃR¥ bMW€îŸÏu&¼õãi¬°ÙÉRGsÃT=ÔÉ|h}â†;—3 g[VCÕíêÆŸñè
+[ÀÅf8€[½§ç}Ù#pЀx•†(ebÃÆq«=¬7˜½Y1{‹¢U¹›-wûm…'æöDiœ†4 ­'ÅÌN~Ÿ00qSO¢vÝ}‚_Š &¸•ŸÊ–4ÇäóñÐr!SðSFw¸Æn2?ëî0uärjØÜ;ýBC0ÅÍÔBÖi­‚D#·E19;–]sš>&äÄ~¬Ë¤ãbF*ý4eÒãüŒ”afA>@q9²M@ÛÄÞ3o2Å7)˜‹ÖͪM§æVE•¿•b5ˆ©UJ4C¶À„i$ôΓ¿$…Ýï£ U6g…²v*Ÿwî`†
+} ¦A•|<V'ÏfÔÆȦZ‚Æ+x:Ö1ÕžœÁ@[˜pЦÜUËÔ!4ã*àÁ9¹Ç0^
+yFéCâxëm{W¢6ÙÌ;/hæ1Œƒ^’S6[{-H€yUaèßn­„ É
+L™°<s”ÒÀ‹ÊÎ^áÁ^0\BÆóуø £I
+³…ù¬Nž¬¯BÖª¦ðZ ØêžúÀ(:‘ðt)I–Á©ìÓÐ ³$âwDt·k\rk‘spa&!óÔÚ˜¦KÀôT•žäU»Ý¶GWj«¤Ÿ} ÞÇ)>¡ñ·×'`V†Û#+L$Øâ¥Ïœ®Y.<þteÒ·jÍ2ЈQ¢2/Yx+JÏKÖØ(Y»Òc#Åæ–„:F¾±êA¤ì¢@œ8Ö<˜æ5_<tMåœ!²ò9åÝ=õ>Ê
+püLk°Þ±€@Q)Æsþ°ru50$+O¬ÑÒÌ^‘ISñcf-ဠ¨oíV‹Pz±–
+„Bþ g·@CYoƒmÃþ0 äŸ½&ßê'±òÒï«E½òÉY9êCd^ÐsTQ2'„˜=?K=ø¿LÜÀ£#Å{A¢ ^üæ¶ùÍ« ŽüÇ5y[¸ªÑÉयVmûÕ×SÓ²‰›çMõgï!}´mвjŒ´FEÞÓ‹ûàן ›Êt4{ :F=esO¡ÞU¾µñp¾è„}î¢ï|{álÑ&ñîÚG!§¨œ÷ÀåºÍ¬Š
+¬}²u.Bc×1ú êwåýx“º„ ~¦ešÙÌœe©DÒÀL˜'ÜäñÞÀcŽKŽ„/p_½-°äç«)ø°oáxd*øØ×Í"¥ä‚q‘?â_ø„ua¶ßÁ…FÃ1à2ú(“§ÕJ¨ŒåÊNE?½xHM–3‘ÛàEÃ}‡ÖÓ’Ÿ9 _rÙ2Fõ^Í
+¦d,‹Ñ/¤»<íSœÞQÞO·¥²;¶œ3Á LÐvw>O~îq3ƒL¹KŒ±‰:]…ÐÖ "Ír{,ï{êu‚†>Gn姺HJ-Q
+«)î¢(Ù@»—TB3@Ñ@’Õ-¨„²ÓÀ„Q©ç»êTY7$aøuq-ìwJU‘ðÍhnæêIïH“’¢ìR™ù¤d€…,Î%sºçªÂX*Œš…¥l=õ6ÒÎßVwsp³œa^ró›)êYWMÕ•[à%x=î+rá©›„ÜòbØv;bR¦FôfX+8tÔ½÷×^TFvâ†ÞÅ)þÌdˆ?§‹¨p-ï¨?¤…/>•rV1y¤b «ò°ˆ
+Átž¹/íh°[_SãÃèÓ¼8>~Á}š7Í`¬‹þT-BÝ‹»gòœ$pËLqa'$=øF0Îú!W£¼+¡ßÂ
endobj
-1609 0 obj <<
+1624 0 obj <<
/Type /Page
-/Contents 1610 0 R
-/Resources 1608 0 R
+/Contents 1625 0 R
+/Resources 1623 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1573 0 R
-/Annots [ 1612 0 R ]
+/Parent 1588 0 R
+/Annots [ 1627 0 R ]
>> endobj
-1612 0 obj <<
+1627 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [173.6261 273.4719 242.2981 282.8815]
+/Rect [173.6261 190.3209 242.2981 199.7305]
/Subtype /Link
/A << /S /GoTo /D (the_category_phrase) >>
>> endobj
-1611 0 obj <<
-/D [1609 0 R /XYZ 85.0394 794.5015 null]
+1626 0 obj <<
+/D [1624 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1608 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R >>
+1623 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1616 0 obj <<
-/Length 2400
+1631 0 obj <<
+/Length 2058
/Filter /FlateDecode
>>
stream
-xÚ­]sÛ6òÝ¿BÓ—H3B€ ^žÒÔιÓ$=ŸûpÓv2´IœR¤JRqÕ›ûï·‹]ðC¦ß%ã‹Åb¿?`9 àOÎt,âT¥³$„¤ž­öÁl {o/$ã,=ÒrˆõÝíÅË«0™¥"U<»Ý h#g·ë_æ±Pb‚ù›ﯮßþ|óz‘DóÛëïK¥ƒùÕõ—´z{óúÝ»×7‹¥4ZÎßüýõO·—7´3ï®ßO”~!zsyuysùþÍåâ·Û..o;Y†òÊ DAþ¸øå·`¶±¸D˜=»‡@È4U³ýE¤C¡£0ôââŸÿèvÝÑIýÉ@¨0V
-Ί@&q
-NØ5©q»°)$x ë±Ìöv-êc9¡qÈAʘ”1ó’/Ýñc¹‰¹ªþÝ~¬s'Ž]µU}ZH)ç‚´±ˆ’$öžž8úWÐRitWG
-kü"YS•Í· <Ê&À=b¿*MÈ*£P˜TJ–`yœÒ[ˆP!GrUí÷.áG‘—î& ^Ôæ_ïL¿ÇÆ®oÚq4Á‡Ë“±~žÎ•úhí,:¸mÅiíšYB×%Å&J(©¢±ße›–òçy^PÂH£†LM…” m¼
-]¤)¸øÛ:´a?L¼k˜yiï òóõ÷ßÒŠt {- ÒŃé" Á[[Úš¥Ópy1•Õ@Û"2iò?±Ÿ3÷M›Õ-;ª™¬¾HªHž©Ï1NÞ´9–\Ö 8U–D¾VvÖªBI’nè:oV™ÛZƒÝÁQŒš_ohïTiQZË÷8mÂï*;´G26Ñ£:‚[¤/Ô¬ zûcÓùcrÎ(È?Ç+®ïóv7®BTܺà~$¢”„”ú”°Ü>7 €b9:ðÎpt÷™‚3K ¬1‚@gáT[?‘ø|v …Š´ìË(²ñ¡\q
-ù§ÿ0ó½KBî›G¡ž7m8Y×)!Ô³"ˆJ?€@s òU†í®ÚŠ¶ËØ÷ž#†N1šßÓ ¯%‹€_ÐÕÊsê\¥*_´CzÎ%SÊ4°ËhIÆm’sÔÎ&RmF±Â¹¡:ÝáwÖ!ç„Àq
-* Ø$´½mšlk™ç¼œ’Û2e&U
-*ÁÄ‹pŒ>„P“§e€´“½¯Œ4t
-ª÷ .k}ü “sgó'í—<œ_÷§^G4ΞÅÄñÛ+‡ôÍð8‚¿yõ5§î!±×õæû ¯ò½šª†ç.;ÁÁ™O ðôÜ=4­³ªŸzºfKeÁ“Þ bœ–£æ<5LzÇD/µHÂ~šÃŒ‡ìB׎çæ)Ïù ±'2ÄŸ[/±< S½] ’À¹AÆ4 rb=Eáé4r5ÈŠAÔ×vü 0Bè§,/²».†ŒºÄpm(,î
-;Ízm×c?Ú¾@´€Ú6âÁÃOB¤3Ç"ÔÐÚ?ãéê–H‚äì¥ñÿ;åÁ^ju¬õãй
+xÚ¥X_“Û6ßOáéK䙘!©Ôõi›îæ¶sIz{îÃMÛÉhmÚÖT–|’œ­ïæ¾û(K¶²ÍMǦ@
+VØ5¹qTaR(c¼û‚7áq¨äÚ˜Œ9‹Š•îXÅxßd\Ýüæ €ëÂmÇ®ºº9Í•R ï„2Qš&>×S'ÿ¾Y:‹@.”Mlü"y[Wíë9.åà™ƒ_´Ž&öª¢P˜L)ÞÁâ8±I!bq‚œÈU½ß»*„eQ9M1dQWÔ¬Þ…þ­];ÛbgÑ„î´Iâ¯óyª3Ø>¢m+öHg×l¦.96ÕB+}QúòMGô²4ha”ÑC£¦`‡ol¼ Òtœ:üm±á<L}j˜ ²ÏDùéáû×4"_ÂÔK¢ôx0=¼µ•mxw1OçkëÁÛ"2Yú™_°õm—7'ª Žv_"u¤Æ¥— ‡$o»6sXUU$¾WRNֺƤ!iêºhW¹›ZCÜ!QŒ64wª4¨¬e=Λð¿ÊÝ‘‚Mòè$Á)òzÖȳˆý±í†ö±8´ŸñŠãç¢ÛMC=¸¿€(­ $d¾$,¶_ (Ø#'–>$£û\)¸²tÀÀ#
+vèÚæ…Âç«K(t«óAŠf|¬V `\’%çói­ƒ’*F3H_oÍã'KØr¿ÂE ÂG–EQ-N‚¼ìì\ }qù™Ç¢ì®Àâ2­%¦³oJ*¢¯§š¡§#»ŽÔº€}½¯×ÅætQ»}'@§Q½ÝöUû‰YuQu=u€ÜB§æOžœ—l*ßåŸ{E½ƒ®1,]´”\d°‡ë‰„vi¹³#ålØ»&oíÚ¡Hd‘Š|?äÁfPÎ&Ø»"„äóÆ æQmMn/Èë‰êZ‘DG?Às-‘˜êUŽ Žºš¦ZËÜÏÞ"ëUl
+ù¦.Ëú¹Ç!–Óvùã\f}?‰MÉ_&*¸Æó^WE _O-óÛ1ÑáL{ñŽ’fNÝ-ÂECFLé$°¿çûCi/ Í²Ý«–&ÚüDœìèÄ Hò˜rË1÷#’^UÇb<kNŸtP°6W3G*ò²e~¯, ~³öÀjê4È¢K„ŽK©…:÷[|8ážþŸóLÃéýŠµ3þ†Å¹ù‹ñK¯o°ûÓ'ïŠO£‰Éë¾¾|ü.GòåÈŸ»w©ã¬;‡ïž&&ö7)þ2e_`áþ£–묂hé¢êo=}³ÇGeÉ7½ADœV£æ²4LfÇD¯b‘†çÛ>a\› ][8¾7Oeì?…3l«ß7¶Yàñ4,ôz1(/ÇÚ!·­—$¼\FîUQFç³?FHýœeþTBÃÅ”Qƒ® …ÁÐ64\ÛvÕ®We®z3 }øé`/æ蘃â®ëÜêÒªk¯«./*1å ÷u¿…‰nkŸŸ|Eá¤Y¯ízœG›ãà²ßq‰ZÂÚ¶âêíGfЀÉlf´HÒ0ýš·8¶D*Ó/<×.b-"ef‹(…F\¦Sïµ²¿%üé×áóÓ9è Ñç·¦R×ÅPãA²Ð鑹z»öÏÈÌ50ý¾%+endstream
endobj
-1615 0 obj <<
+1630 0 obj <<
/Type /Page
-/Contents 1616 0 R
-/Resources 1614 0 R
+/Contents 1631 0 R
+/Resources 1629 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1620 0 R
+/Parent 1635 0 R
>> endobj
-1617 0 obj <<
-/D [1615 0 R /XYZ 56.6929 794.5015 null]
+1632 0 obj <<
+/D [1630 0 R /XYZ 56.6929 794.5015 null]
>> endobj
442 0 obj <<
-/D [1615 0 R /XYZ 56.6929 520.4669 null]
+/D [1630 0 R /XYZ 56.6929 436.7807 null]
>> endobj
-1613 0 obj <<
-/D [1615 0 R /XYZ 56.6929 495.6849 null]
+1628 0 obj <<
+/D [1630 0 R /XYZ 56.6929 411.9988 null]
>> endobj
-1618 0 obj <<
-/D [1615 0 R /XYZ 56.6929 178.7136 null]
+1633 0 obj <<
+/D [1630 0 R /XYZ 56.6929 95.0274 null]
>> endobj
-1619 0 obj <<
-/D [1615 0 R /XYZ 56.6929 166.7584 null]
+1634 0 obj <<
+/D [1630 0 R /XYZ 56.6929 83.0722 null]
>> endobj
-1614 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R >>
+1629 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1623 0 obj <<
-/Length 3175
+1638 0 obj <<
+/Length 2918
/Filter /FlateDecode
>>
stream
-xÚÍZKsã6¾ûW¨j‘+ƒssü˜u*cÏÚÚªÝMr EØf E*"eóë· H”L‰™OUìšx£Ñ¯â#ÿ|”¨ˆÉ4™4Žãj4›±Ñ´½?â¾Ï$tšt{ý4=úñBšQ¥ZèÑô¾3W±$á£iþëøôŸ'§ç7Ç¡ØXGÇ¥Ùø§Ë«3ªI©8½¾º¸|ÿc§—×WT}s~q~s~uz~<á‰â0^øö ¸¸ü在÷7'>œÜÿ>ýùè|º>K÷¼œI<ÈG¿þÎF9ûç#É4Q£gø`OS1šÅJF*–2Ô”G·GÿZOØiuCûø3q¡äh"“(V*Ù¿,-Á`YOr¥Jí®:áÒÀLïD鈹¾Á;wÂc%Rª‘Qi¤¥îRfuõcâ¹Dg
-&€9Lû3<ö¹ç ½°N}'@Öš¥ã:€ÛJ£6ª…}Ș1.‹@5«ù<[¾Ð‡³ŸPfeSûŽõÃC†¸æJbÓ®p£Éšï{UI$WágYkjXžsN€¶p;•‰ØfþôÑmNªÍøÒãP{JF5 éÔ¹ C™QÃøBÞ—ëÜævéàÎX‘J‚¹½ÏV¥Ÿ²hûPXÇÛx…w zçôšC
-ð¥”<ˆïª,ûØÃ#˜ó˜U•=d‰;*ùujþm-1‘Jä %æ:↑%®lû\/? Ú+ßl0`f貶Íü]?c‘É°Ò,Ž÷Ú½Zä ÃË XÎbF,£1‡øÕÙÈߘ_*I x“r€_*‘PiÚáפÁ ¬h‡1Óɤ§¬Ü‰˜s[¡2 _€º‡x3^§<‰ø"yCör[¦†ƒàv«°˜"+8ü²
-µ½Uë!‹0)Î~ÌÇä¨SwN‚žð±ªJ@O}&±H:|‘=;„3qðLõÂ'‹`îÇÌAð‹ÖV¥‰L¶¡…c zX›÷²˜Èí‚HÜ‹#À†:ºîE½lýÂmHˆâ;_}ù‘6˜å¹Ï¼øÔÉžõqFtæïüÎn\¾òZ,…_Jòõ±7 LßÏã?¬Ý yYX@^ åàŠ>ïÀâ €À};'Ã
-n‡݇[‰Ê áàç™m
-™SðXf~†ÌOÕØ^„òSì{بVã­’FtÔâqt:žP5( ×=`÷½B3ñšo Î-S;¨Ä5o×èñ9fÈzöFƒ€ÎŠÊUc‰ÀÎà LÒ ~zú‘ˆõP’oÆL×cÄzÌÙõ¦6r{~Js^ÂÎ}×E<$<"¡±~nlpXêq ü>=Ûô;}´³ON3±å¬hPƒs·–ë³;{J£°C¿µºo]rÃI'a]äã—¦-ªÛ…–mm؈´Øˆ4÷샺€”´?
-ÁwUÅ/‚á†Ð¨Í³úÉn€]Ê]æ Kz]G*¥´¬"
-P2a ¤k*ɱ÷8µö±n¶ÞH¼7Ï!Ú YëíGË"Ó¹¯»áo*4,f"Ó!™a
-‚-åíª-탻ÎI]•ÃI€³u 7äØ ¢ìåDB<òKýÐPËÆÙœPÙ“%Ê…TŽÂô1\ÄŒ2­r»úÏÙõ‡“K÷[ ã”…Òá!Ìt¼(}SÂÐ{¯~uP×ö§^3j{d(ë‰*Ù&IJÃÜ3qÇ,ÄÈEµõ NÊgNkÿ‚×´«;¢þ\¿üå"/R¹ýÚ¹ú·PÁôü¢Ÿ"øQ"¥M ì3²i¼Å$÷qÄ°Qs5Óác:SAø Î P[‡½kêëã1=^”Yáûº_; ‘¯z­¹útÜs ¨m*œ($ï¡JðR×TT…S¹ºõ`’è-‹ê:tÌXêâÕ‰½³>/¢Æ7§D
+xÚÍ]sã¶ñÝ¿B3}=|
+®ð žüöÍàØ¿œp¦âHáƒ3Çr´< µb:TªéÉOnOþÙ.Øu }ô ¹`Bj5«EÖxŶ*Œ˜åö…m9¬¥a-­_^‹à8¬å› ÄîRc¡, µEþJŬ1QË_):ü¡b‘Rzdµ`Ò
+&ŽY¤M8$
+Bã&DõyZ¤ë$(ˆ8DÞLã$ÏA«e,‚IñD#õø]Q»ª³<§fB¬+~¨ýyRUŽméŒz²¢.ÛÅÇ}²á¥áGâXR̨Âöä»p7l¤ÍØfE¿è¼ÌÝ.Ù¾ûÜUGå®Õ,‰உ #“¢'ur—€Z ±÷cZUÉõMiÅrТS c'òÈý¢$(¶‹{ M…üÄàgº.€%O4r÷Ô¯ï)q¨H–¾U¥ë`ñ¶ô}uÙè>~þ¯,Ò=)˜&Óf)Dé
+cW@p‹ }¾"Õ¤ n$ñ°X+@G”Ÿç•\q¸ñgxÈÒÇžƒJÉ„2±ŸɯáqpF'2dQ¡øÎ ÈšZäYÓª6Ëe‚•üp~“¼*ýÄr>w±†%ª¹ßEÚƒ³°ŠÙ¨¥û‹ª„уnxØn„r
+¬~²®7+0ùaÄ©hÿä¯Tsa ¶ž¦ÇÛÈ ŒhLõËTãV´Ñˆ«AãÚÎÅz'™RRïú»Ô‡+ÒƸú©ÈIÇÛk üØ9DN}JËd(£‚O
+¡viË“üX%k×
+) µ l9“Š%%Ó(²&B_ùHR6We¡îägû§êÈÑOd9•ŠËéÚÎbà –'[ ™€Wt¥VzRp¤„*«Ïöt—¥è™7wFJp’›€e[ Àîö:ÐÙ
+0Ó/i]µ&|×â·Uqh/ËÙ&O«^·bw/ìt—»vç‚ðЕ.•Ž{OtT…±es 0“ ¦°yYÀɧ¯¹¤˜£›+Nn¯><¯¶ÝÍkåc©É¼F°ð ¬ˆb¦,§L1³=&é6U¿:¯tìå½Â¨²˜oT~ Ù–`ã`™U{²ÐMîÌN ÉË’ª(ûÚâ7Á¬QTèiùnãóX¸â!þÒËDlÅôŠVP ’rÆØ.é—<TO”ã mï¹|P6Û¬Û‹‡Ý›çBÓáƱ^Œ½…ÐHÃ8†ÔQàƒI®½mMótîø9.‹|¸”sÑÎÇ´Qˆ*Ðcyå¯å¼¢‘­Ã³ªqxÐZ$)µü£=hÝÓ£ )UËÕ³°šdèúߟ>ž]¹‡¦Ö= Ú4·™¶ãI雪I–níͳƒº±æý‘ ö_1’%=Õ ¶mjÃÔ³! CÞÔ:²bç%8*_ý.×Íû¨ÍÝþÓ¨Y
+4éÜíðþÛä)äœYi@DcδժïE- º“×¾ßÝ>n-SQÔyu°S â†E2¶ˆvˆWHÏ0Þ'ˆVÓ‘ÜNë ÿr3Çkendstream
endobj
-1622 0 obj <<
+1637 0 obj <<
/Type /Page
-/Contents 1623 0 R
-/Resources 1621 0 R
+/Contents 1638 0 R
+/Resources 1636 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1620 0 R
+/Parent 1635 0 R
>> endobj
-1624 0 obj <<
-/D [1622 0 R /XYZ 85.0394 794.5015 null]
+1639 0 obj <<
+/D [1637 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1621 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1636 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1627 0 obj <<
-/Length 2903
+1642 0 obj <<
+/Length 2959
/Filter /FlateDecode
>>
stream
-xÚÅZKsÛF¾ëW°jKU‰ãya
-Xd‚àh×…à1ð?‰’L¨@u2‘b !¦£p13J*+“Û_ÿƒïSå`*¼HèøãœëjUï6I[Ô<iΓ婘×û–zùnw*¢y½k¨_ØYfn©y³­«&§‘m]éþYWŽú;ç²Ì›3<츂ÅA íÖÄã°+Ú6¶*Ò#¶°h¡¡›T &-}ÛuNuq¿Î›ÖÝqôg17‘»d–/÷÷OOj¸ŸTæ_óÒt!ˆ[èh|âMN$ðõç/ª{"%p•Í¶mØ1u2-bÐ@Œß ¥#¦@ÿf‹’Ïaׄ<<Âøÿ¶ÊD˜˜© ·!ãáX7éˆ #
-íEÈb%#;㢥M[Tbl›´šÚöò𮻣¯µoöÉΈ'ö¥;ÛÓÙ_±ñnvRZgùx—àmƒ`þÛr¾¸~GÔÂeøX‰£­ê²¬
-•Oœ"xÿhd¶X:qw-X¤•pó@!Ã@ÍßÕ÷„e- Øh;¿N_`rúêí±XºÖ6ÙµEº/“Z= ê¼Ü:Äuæk„Ú4Ù7/BìÊë‰54øÝ·ëÜ1D3_‡&ß}ÍÕñP9VP£ÜæFw
-
-´NAl4I»±ÑG
-jB¯ƒ4NKk°ð¸-ŠQ 5àI`J÷»†NÝ‘šºÜãtw†v´£a€í¤}vï%ŠŽÆX \)P©áÄ},в®?»Vñ9ÿ+fB‚KÂØžl•·hÉPKA™A§[o¼òîðú :Ð_ð\ük0iP%q²#ĹˆÔ9õÛbãwƒ8÷U³OS¸+>fõ&)ªóóéØ5_MHÊsy'måçáÙ—ÝC>Îp à}œ•É&?çgÜp·ƒÆ”œ–IL¶çâ,É–4m®­#4¿&%µ>=Ìà»F],³ÜX#±k.<´:HäåÐarã`SÒº´°ZQCã‡Ç"!Â1T;’‡*ÑH1a™µÐÕ´{æø[ €i MŒj†z¦RLGñŠXôâ%r»T¸vl(„“ìM‘‚/S%%Q‡QÒ…±Uæ~a퇃ÇJ…Ó¬Ça4ð» Øs·¾chM<¶,œ' åÝÐàcŸR¨
-"ˆŒcoì{…™ŽPÃ0ˆ:{oͼ@ÈÀûAÜW)§Í”Ú(íQ!ÊÛM¥~ ÉÝ#cgJÂT+“Áb°´é5nt<[Ñ«
-ÇNq¿µUR6¥æ¤áɆ"°~È»šñm‘RÕí(G×6áñ *‚ÎBZÙ‘žçUZB®•Ýæ<ðm¾ìûìúË]’~ÎÛÆ:m€å F Ä;g0tùeéÕ$RÎNFÊQî,/Ko^'ÐÙ\ú[[…ˆú¤vd0¢…ª«w§›ÊrÐ,HŸÏ¢.çeF»øËjï;4Æ<ù–ÔWw• ;ça[ù(y´fŠ†:PåÙ?q´cDYà`qÏùà³?gÆ ZåRcuáä t!ÈÙ(oÀŽã!LºòNôú
-]èz×Dœjýü#°v”4‡Ø'ó“ [ûûõ¤‚RUÇÅñãp hΖ¡+rè»®Ž–%Ëú«k:Ÿâ'=à&l©t…_£Aó8,anê¦í£y¯ ¹ÄÊÁv™=]ÚŠñG•6}àòr–~Å“hQÌx¬Í3hÓ‰|l…!þËÀïÑ Û6ü¦i‰Ù3¶É8RË-ãÍí
-Z?¸©Û|
-f#%P'ì<v´ÛÄæ9
-rö¦ ÜaYNXX´g>…ß}1Þû]èëÌp<ª§QõÉ×ôuu7h}®lh„K(B¢+2çUÏyºZ68Ï7]p`äèýŸR»!ž¿OGzµ“ŠÅâ/i2­PßP;0iùmµÃn°ÂjËW”N¿ÐÄÕ›x#»êJ_ÕîË<êظL+W]I5¡Ç”<`Jéø9 ZtGF”ƒ7ú¾w?¥ú¡¢ÔXWñ3¢ ‹àŽ¹làe²„dª“%´)ì’žICÔ¦¨R7¹õ«ŽäÚQ:§H/×GÁtâ]áÐ|CVƒGøQ²"½Œ¤·‹ÓqôŒ¤”d1„Ðî6ù 0½£ôÒ,Ké’ÉÓõÈÓÁP_=À^ÒNÉgZ!µ!ÈgSšRŽýÖû. à¼ÆYplÛ$Ýæ5]©óÌn5–ШO—ÄV^8?xb?ÊCìïzr¾| ¯ýMA`vh³["ŽÏAJí–Ù_`z2šhë#vÚŠ¾X—Ýo=ç©Ä¿©ˆÿn+À5Ë'G€,;Y&vs%­Ç½xû=áQú¤ ºÊ__ÉNÆS?Ä CÍÔfyOëSÔæÖƒ€6iÈ Íä_jÀî˜ßýw!ýÍè©(êýÛ€îgo…/òÂç ø£¿ZœIe¤Ÿ58úEQendstream
+xÚ¥ËrÛ8òî¯PÕ–®²‚
+¼›Û7× ½¾¿zûöêþ|)t$¼Wÿ¾úåáúž§bËãåíÝOŒIùó Óûë›ëûë»W×ç~>»~èï2¾¯$^äóÙ‡Á"‡kÿ|ø2ÕÑâƒÀi.vg*’~¤¤t˜òìýÙz†£YZ:'?_„‘\,C%`Ú³ûòìkÁPD
+G‹@8I¤Ø ©ßÔ Õ ö>wæP˜†í6kŠ¼möÅ0neLÅЦ>œ í­=S×LÛ5–t_f…¥ýéî=ygð0°íR?…‹Ñþ´6J½¶Ø™ºkÐ)#ïa[4<Á_íÕ›–ö²"\¿xk s™]ÝZ‚ƾ˜ƒåTÕíÜ V¦¨PIäÝß¼b
+ ²ò˜=5 óÎmw¨,·Ø»yw¿œnÈVóöú5?”ȾÊkŠ]QfFÒ¥
+¶UÀWX‹;>Œë]·uxèá„è&„èݬ‚ùÚ^úÂÄž÷øb*û¦$ b|Þ­çý»8f·[‘EöˆðÝÀ+šå¾nŠ¶øbé韾–ëŠV ¦ËÊòɺç±O×Ê— 1vÏU¶›uâ2öEa©ŽE FÁØ]G"%ñ#ŒvÏPËGÌHNxÂ¥?’A2½zÓ­·øVqï”y”Ù/»ßØú}ø².`u x-FJÅLª|NÜ`cÔ÷4˜0Â+À0Zñ Hd# ÎV`šme™HH=ðÊ'ƯˬiŠÍÓ¬?fµQƒÕ!ŒœÊì—¯­X²øåk`¯ÊRÃQ+†'7ªb·œ»9lJÖ¡G2ÓäŸß_¿bÜ—¬,rυಠzíøsWXÈ6l
+ågV‘R¾’)Kîþ—ÿ}7Ÿº­@ì;÷`)ijºõ®å‘9köɉ*1Ê¡`f_—Åú‰g¯+‹ý-ÂÒ@<Ñcæq<-eJR« [ Â
+†”@à$F>ürè`[<nÁÎ8%¡? bçor³êç¼RèÇ#*ÁÍ•ö¤ËP@&-”žªâÎô W/<¿uä±5»½õ¨óÚ6zÆSAÛ†lÿ{å®I‚ä¤|ø{«ÜADœbÀ‚"ñÁŽ&eÇ7åG˜hPTB!¢S_ÅÑ3
+íj#€TIØ×oNUYMÍ"=-AWYO±ËZóXžf=ÀÊÞ@(âùÀáûTR_‡½‘LøË«™ ²´k·3ü˜òFü6{³.ÐÖFy®½Ï1ýÀe;RD¬¬L
+½‡ó4¤¬ ä—!Jð踵
+'ûõN„5›¥@Y p<}ó5ƒÅø©¼¸½{qæ†ÌîOùëK©u0ïÆ'çÔœxù¬² UAã0ÈèÁ:lΧ=ÎîôŒpqý1³ ±¸XSÉAì[ž.©Ú@ • |-ü6ug»<¦ˆ
+ef‚¢K=q[þzæîJøZIaé0$µVH—UƒÉiðëíu¤Lm_ÑB;],-´‡4¹Xwev(mµº5åÞj\ï¾&Z»ÎºæOiìÆÙIf3جk·5„ãl¨r¸ d¯ãTåÔ@ci7Uo €ë ÐtÀ…ü¡cub PÛÃóZ•F²u þ«Ý¢˜$Z#ž6•í ŸºG5uÙµÔ$!z×S#õãjߌßû3†N…é(”R;
+âËà¢Â¦Â€¹wZe90Ù_Š‹,_1ÙB)zG
+˜m!ɺ.kÛ
+àûâpCRIåάS;ßÚ¥à.ƒ¾.¥ðzËÇ Û[–Ô¡éq+ƒ–rqÇÇo—åØÜåö²6$â¤Uh²•HaS $™úrâlÙ8EC=›íÄŒRŒ ²}Ãz•­¨¾
+;tŒê›­4ß·Ña×ÇŠ!Êxð§’Êv¹Ö[üoÃÒd9g@@Bm{äd‡ìyPXv2p[“‘úÏ4¾û6Ϥ›„qÈ…šém¹•ÕNjp“ÏF|VJG*Õl­<S­K¨µrÆSÍßæs7T0^¨ïÖØYk °¼ÁÌ£|§q Æ!_cBP–ÎL´kpké’({Η˜¥s¯³
+Ðû\•¸[“A表8 ø‰ìûéæªt ¡«gÑ– 5§awYåb‡ÂœÇìÙ|Ußù´ ™IñHnŠ§z¥2ù¿y´eÄUàhñÀùèª?׎ý ’ò›ö¿­™†Ô}¢AÖG9õqì4Âb oï I¯KPíoZ–È©™&YM·Ûe‡âwWQÕ ‡±—E<Z×7Ý£¾ §àòCý÷[=ÃÏ衯v*ñ§çTÏýT ÿ¬²ýðÓïö*ñ¡Æ ‡¦ÏXóúæŒ|ä…ßül.?”qO5:úÿ<{aEendstream
endobj
-1626 0 obj <<
+1641 0 obj <<
/Type /Page
-/Contents 1627 0 R
-/Resources 1625 0 R
+/Contents 1642 0 R
+/Resources 1640 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1620 0 R
+/Parent 1635 0 R
>> endobj
-1628 0 obj <<
-/D [1626 0 R /XYZ 56.6929 794.5015 null]
+1643 0 obj <<
+/D [1641 0 R /XYZ 56.6929 794.5015 null]
>> endobj
446 0 obj <<
-/D [1626 0 R /XYZ 56.6929 689.473 null]
+/D [1641 0 R /XYZ 56.6929 474.28 null]
>> endobj
-1629 0 obj <<
-/D [1626 0 R /XYZ 56.6929 661.8816 null]
+1644 0 obj <<
+/D [1641 0 R /XYZ 56.6929 446.6886 null]
>> endobj
-1630 0 obj <<
-/D [1626 0 R /XYZ 56.6929 297.0896 null]
+1645 0 obj <<
+/D [1641 0 R /XYZ 56.6929 81.8965 null]
>> endobj
-1631 0 obj <<
-/D [1626 0 R /XYZ 56.6929 285.1344 null]
+1646 0 obj <<
+/D [1641 0 R /XYZ 56.6929 69.9414 null]
>> endobj
-1625 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1640 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1634 0 obj <<
-/Length 2618
+1649 0 obj <<
+/Length 2586
/Filter /FlateDecode
>>
stream
-xÚÍkoã¸ñ{~…¿UÎ<¾ôê~Ên’m·Ùk’=H Å¢m¡¶ä³ä¤Ûâþ{g8¤,ÉJ²kQ,Ž†Ãáó¦WL8ü“$d\¥z§š…\„“ùæ„O–0÷öD8š™'šu©^ßžüx¡âIÊÒHF“ÛE‡WÂx’ˆÉm~¼ùËé/·ç×Ó™ y±é,ŒxðúòêŒ0) oÞ_]\¾ýp}:up{ùþŠÐ×çç×çWoΧ3‘„ÖKÇ቗?ŸôöúôÝ»ÓëéÇÛŸNÎoÛ³tÏ+¸Âƒüvr÷‘Or8öO'œ©4 'ðÁ™HS9ÙœèP±P+å1ë“›“¿¶ ;³véØýi.˜¡‚›„ÄQøô¶´‡m¦,ŽÃd°ëL¨˜é0Fð„IyP‰•­X¢T8‰O¤¤²:)Mcv;¼š/¤ìåġŽa $»]™éLi”ûͽÙ\-hD" ªÒTûšPaêýºqˆf•5²¬”§©Öž¡)g( ì9‚¥a(íæój_‚”–<G•FAQÒX›©ʼ(—ôýÛÞì
-SÓîˆ#îhØ¿0f‘VÒ0¯6p=¾•0 WìÈþ§»S2Þ—–-ÈšFŒ‡Q:”z³©J<˜æYm*jÝ-hw ›ªqßµÙ¹ûðÄa°/‰*›¯²ûµ#ÌʼYädÄXEÃëm1sS<à )
-Ó—|(JS–„‘¶ç¾Ïò©·_æDQµN„0:ŽûÒüskæ Z8~;õm«²Fm!êï<äè×­—*Gìz`ëlcF$“Š¥ôH2à,¦3-DÐT4¶Ž„µ)‚î?;2<
-}+CLÖHF¼.LK½äu3ÉC¦”8¹ßS&ÖUÞ÷ÄÁÆtÌÉã¯`éW<mcR§æ/ØX:Jyjžå÷_§/²b½w:옆6R†)—.P"ºvðÛ‡$Íòܱ¨=´RœWê <J“$M:¡
-×VFÅ•‹]€8={ÍõÞÓ´á.œÖ¦ »ÒÆJnc¦ Ê~¯Ap´Y(JÝV
-(¡K”my¨¹K¡
--ÜF
+xÚÍ]sÛ¸ñÝ¿Bo•g"¾IöžœÄN}sq®Žï¦3n&CK”͉D*"eŸÛéï. H‰²”Øétô€Åb±°ß€Ä€ÃO bøJô J43\˜Áx~Ä·0öîHxšQ µ©^_ýt¦¢AÂ+íàjÚâ3Çbp5¹¾ùÛÉoW§—Ç#iøв㑱|øúüâ-ajÞ|¸8;÷ûåÉq¤‡Wç.}yzvzyzñæôx$b#`¾ôvL8;ÿõ” w—'ïߟ\ºúåèôªÙK{¿‚+ÜÈ×£ëO|0mÿrÄ™Jb3x€g"Iä`~¤bF+0³£Go¶FÝÔ¾óÓ\0!Œ”f±|Vé˜E<ÚñY¼ ð2f7/šÇ—ÃŒ.«‘PÓ&BùJÅ"kãF¾Z´ä+´b±RfÁ¤Ù£€—Ù4[.ÓžôOgR¶&ÀGFGð$¼ºË@4 ®b5¿É–—SlÕpy,â¡çTÑPèi¬*g÷aaÆY~ŸM±Ã•«Û»®H–#ÝÇËU „:ñ\h¸®ê¼,· &㬪@Ï”àÃóbcZzSÞ{0û3/fY È+Ò<h; ;¯hôá.ߘҨ3/«š Yþ%›=<.瞶˜à?Ê`„m*·íñÉA[ŽÏÓ ÔBÆ<™„E‘I¾%͈w«›µŠ% Oö©›0øéÕ­ªÓe}˜¶ÁgmCµ Ûñãx–U×wi ?¥«pnh™£¦­çeõéY•-a°6 <ÈØpR·ÞÎþ,Ø·M¬_卵§yѳ-ÍY¢¥ñdÿ*‹ TSð8qº‰ì³5
+?èöE Û ŽÒzÉ(`ÈDHÑÕÍÆ´¬€ Tdð±ð)Â}]eËGÿÉ _”U•ßÌ<ÆLË‹[š˜×¨ìV'Ùð½Ù;Û³~ÁÒ4†¹(‹*ƒÏ ?\RK›EèKQ>4¥Hç!éü=çéšóöño¬gçù+0
+Ûõ¢°‡ñ@i;¼É¨O›D(Ë}°ƒÃ6‰J¶–|…Þ<R›Ø*ˆH÷é,Ÿ²­v„)ý´´"ò´C¸šÕžlJí¬,¿¬s_FˆEPò䦀ëdâ9yÄ$­Ó›Ô}zvOÞ¾ÆpøŠ0¸J•RaûJ62îY'áC Í&»Mª­«/ËÁ š”N,³"ÞË ¬K`„çP€&-—‡•Ò²1*„|¡EX+à+B­UÁ#(µ$ȱڌuŽQ1êÓŽq¹*j/bç+-ª‘kA)À%ût úë¨j,Lcw™§‰˜ÕØgÌ4œq×>•Œ†ŠÌg’pîÜØ ë‚ªdŽ ÒÌi/@dÁ:œ‚nçЮ¿6÷@l†«‚¨@MÓ›™'Ä2h‡/å·›ÇÛ`\Èq–eÈÞaäüÍûßÚþ ƒ€=ŸyVõÊ©JoŸˆKmí|)#úu¿¶_‰=F¤ã˜A%‚Û¾I'P‰-³!­ÂhCØ®ŠìÏ…÷éØo;ÝŠPèøJòÙØ‹*öçò;Bfˆø´2*-´.”`ÛØv(Eã„#£x)¶â¥pFHzŒ.LKmH–ÚÝK•úҌ·³ 3vk˜,Qr_æ£d*Ö¤céäæ7}–法— ”¼‰qŽÒ$¨<\z?‰è¶×Á~ð:HÚŠ¿ j)=»|Œã$nyRð'\»5*î« D@xg„úho
+HïM9]™ÑLç*¹7N£ð­Žúø dý÷ ýp‘º|ĆŠ¡I™\éÝ¥÷~0-=Ð_å·’šu2?.];©žÐê–º<O¨ßTQĸµû.°4×ÌXEÉÇ4/&SPÙoÔk¼j¡2ºí€ü-Šèˆ´{"ººÍ(¹¢ëJ mÚXË:QB±®­¯£á´»D—v4÷°tåêSl]¹ åÚŸ¹{Ø]:Ò>üÿcϧdÂÀùË=:¢lÌlÓe "ߣ"qL’‰£áÛ‹OßΕ5)9_K9üã8Š# ‰hºÅ*T =jAÉ)–‡‘Ú¹w÷:R["ÇÁÖ-;awÎGgù¼Wr*ýŒ¡ÒÛ^Çl@0 ÏT š«¤å—CqCÈÇ}(LµaK3ÿÙ²À+O„îÒÅ"+Îûò‘Qœ0|î9,Bx¥¤•<¡ï-Ez)Ÿ¸~´ú¾ç¨ç=b ›0I|°5.Û¯g[¯hŠ[ØMAž”@ãõ3dç<ߌ [#Ê%NÜ=bðEÖ 'ÙÍê–p³ì>sNÖxk‡ŠšrIè»üsPPO¼ÙŽøšO寞]…€Å@E½Ô3¬ïÊÊÐ]¦ sm{ ‚†ÜR<uS¬#¾¼½ue LiQ°8—÷˜JSºøŠÇeÍúxzy JûÇnåäüWFÅÍ¥DZTd·àî=~#5GTµÂ›xWQUžÍ?Þ~xr~á±ëû ãs‡†Ñ- NœI·8´VÞãv•kñé»ä«ÿÇò•/#_¹-_ÝÈW÷Ëпø¨ˆ=à_2 ¥ºñ×ÍBT¯(Å[ïßÍn¤«×ËÇ 9·|D¶Ho(ëÓÚ«ö ªko²qºª²ðêßDÛUc놘®]èf«ó©äS¤Ár`ì.êé”pÐ ¿ëçù„¥ÉWWËÊç+Üó^<XŠ+ ¦D†'n7øW!ð¥Žóáìa™ùÅ}¬Ó:›ÓûþMa™Îçi_‘ü¤eI”ȧӬòÖópJÍZ^²“nˆÒ‚ ­«§RŽ 
+ IFÕ]qû¶#_¤:fš‰EÄ„ËbÚó +(¹iªq.gÙ_ûb©„òYĪmíþ<ñÂøßN•Biß1“k¢˜åU# MpM¾øìòb×¹^”˺Ácçõ~vÜ#Á"µñfzýml\Ø¿åöèÿüº®|ë~¦³‡û<{XCŸñ`;syï¬*K—è£[Û¦,ä3•w­¥]?=üôÊyïÑ“²öB¢Ú¡=§ï?9áizþAÃC{öÿuÖfÒ¨ä±ìO"šdÃ/
+÷eÄæÊ TÜ&–QÏÒÿ Z†Tendstream
endobj
-1633 0 obj <<
+1648 0 obj <<
/Type /Page
-/Contents 1634 0 R
-/Resources 1632 0 R
+/Contents 1649 0 R
+/Resources 1647 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1620 0 R
-/Annots [ 1638 0 R 1639 0 R ]
+/Parent 1635 0 R
>> endobj
-1638 0 obj <<
+1650 0 obj <<
+/D [1648 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+450 0 obj <<
+/D [1648 0 R /XYZ 85.0394 189.8991 null]
+>> endobj
+1651 0 obj <<
+/D [1648 0 R /XYZ 85.0394 163.5217 null]
+>> endobj
+1647 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1654 0 obj <<
+/Length 2051
+/Filter /FlateDecode
+>>
+stream
+xÚ¥]Sä6ò_1¦*£•dùëò´Ù… ©„ä€<Š¶fÆLl„»Ü¿nµì±g lQ5n·ZýÝ­– b„,Ld²ˆÅ.‚EZžðÅÖ¾œG³ì‰–cªïnN>œûÑ"aI(ÃÅÍjÄ+f<ŽÅâ&»õB&Ù)pàÞ§Ÿ/Ï/¾üzõñ4RÞÍÅÏ—§KpïüâÇ3‚¾\}üé§W§KÂûôýÇ_nήh)t<¾»¸üL˜„/0½:;?»:»ütvzwóÃÉÙÍ`ËØ^Á}4ä“Û;¾ÈÀìN8ó“8X<Á g"Iä¢<QÏåû=¦8¹>ù÷Àp´j·ÎúOp&ýPÎ8P‰9 }é[þï[´áù !XIùb©"‡~0xYHðçÜ+žÓ’®;Ý™ÒT½~6¿q.«¼ËëŠ0ºÊøµÕkã$É‘N HL&"²‚n6fPgO$G
+íE’ÌJBZ$è)KÕîUó¥ðÒºBÝÖ»æTÄêØÄY Ò¥…¸×šæÑ4n¹¦§.ÚJ?í8hzùzÓ=ü%„SŽÙÀò“MúÞo<à×ƦJ$S‰¿ã©(KZkÖ ®FÁïÉ—czû‰sŽ¸¢®MºDñÀÅXÌ9ð’
+îþ±3-Wë
+
+jÆ»X¢ªé‰Æ”;Ò½£²o°ÚÃM"Iè‰w­É8;/ §QH@qkÕm]æ]gEakjŽ˜§¼(±}ØZj\3ƒ4aÂq"¥íñ'ÅA®ù¯÷g•„.‡só4W`
+õŽMƾ÷WYK ¹¡}Bà&>5=ŠüTx£œ@Ü´ÓÞ2®' ¬šNN/Ù‰ú|yM
+mß!Sˆ¦ØêÔ ïüØÃBÚ„ÆÔ–6É N¯m]µ†ˆ @ ~A/Ž šLÛ5§±·K)R¶(z®Ž¨µB¥®*k'ÖeK8MªnJí¸“1€„ižû­]º±Lö%8É2¹d"íqÅ…ËU5䪚æªïõè}vú>wG,,gf¥¡M y¡~V…­„†»6ˆÚÿXÕ£:à ŽuŠ; tE+¦¡^Ú ‚gŒîš|½vÒ²w´[(¡’!½nÒÍLø‚I¥ÔL¨ØÚ…O¨åüQÞf®J¬+g$Ï0ôÅ׉v'Ãá¼8œ L—~hlq1HÔÕŒ€$`¡ýÈŸ'ÞEGº»sì1ÏŒ³RӃ΄êUš£Hôó¬.5t×à69ØH­Ï û²Ýš*ëÛœõÛÐ ÝåŽÎ6¹ë…Xï;a!äÈÜ*«»Ù¹"bIœˆ¯”û2¦<)¼ð$Rá›$Ë$¿ï8øþ£ˆÃXk#`ëÊò„¶Î&ÛÁ
+i¾ÕÅ[ùôsˆ …ßcI¶Ÿy÷ûÌ·N¿%lò/WyaÞï‰lWnß¾u¢>Þëm"üÍö¹OèÐbñ»÷ÌWE>4å¯þ¼¾ÿßÌ~Ëùï“2‚V§š}¾Ã«þþ°}Hendstream
+endobj
+1653 0 obj <<
+/Type /Page
+/Contents 1654 0 R
+/Resources 1652 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1635 0 R
+/Annots [ 1657 0 R 1658 0 R ]
+>> endobj
+1657 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [519.8432 183.6871 539.579 195.7468]
+/Rect [491.4967 682.6714 511.2325 694.731]
/Subtype /Link
/A << /S /GoTo /D (lwresd) >>
>> endobj
-1639 0 obj <<
+1658 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [84.0431 171.732 117.8035 183.7916]
+/Rect [55.6967 670.7162 89.457 682.7759]
/Subtype /Link
/A << /S /GoTo /D (lwresd) >>
>> endobj
-1635 0 obj <<
-/D [1633 0 R /XYZ 85.0394 794.5015 null]
+1655 0 obj <<
+/D [1653 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-450 0 obj <<
-/D [1633 0 R /XYZ 85.0394 402.0723 null]
+454 0 obj <<
+/D [1653 0 R /XYZ 56.6929 731.9325 null]
>> endobj
-1636 0 obj <<
-/D [1633 0 R /XYZ 85.0394 375.8082 null]
+1656 0 obj <<
+/D [1653 0 R /XYZ 56.6929 701.4683 null]
>> endobj
-454 0 obj <<
-/D [1633 0 R /XYZ 85.0394 235.594 null]
+458 0 obj <<
+/D [1653 0 R /XYZ 56.6929 475.6865 null]
>> endobj
-1637 0 obj <<
-/D [1633 0 R /XYZ 85.0394 203.5557 null]
+1659 0 obj <<
+/D [1653 0 R /XYZ 56.6929 450.9966 null]
>> endobj
-1632 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R >>
+462 0 obj <<
+/D [1653 0 R /XYZ 56.6929 381.4304 null]
+>> endobj
+1660 0 obj <<
+/D [1653 0 R /XYZ 56.6929 350.9662 null]
+>> endobj
+466 0 obj <<
+/D [1653 0 R /XYZ 56.6929 305.6252 null]
+>> endobj
+1661 0 obj <<
+/D [1653 0 R /XYZ 56.6929 277.9066 null]
+>> endobj
+1652 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1642 0 obj <<
-/Length 1423
+1664 0 obj <<
+/Length 1132
/Filter /FlateDecode
>>
stream
-xÚ¥X[sÛ(~÷¯ð£ó
-èÊö)mn:Ût7uŸÒŒKØbª[Ê¥»ûßR¤DÉÚÎxÆÐá;÷šCõCs?
-aw4–f)§R§Ÿ^ÍÊòGS™å Û–6»$jB}aê‡]âVTZŠemdÄ ú<èý´Õ\ }gG®êÖB¥¢¬¶_‡ÁW}½¦y®Ä<Í
-ÙlY+2ÚõÔ_eaÛçSg[“lºúÎö­³ËJ»rt¹ê‘OW)ïšzgmj•ÛYŒ‘cži¯(žïù6
-§þ
+xÚ½Xßs£6~÷_Ácü ŠÀØ0}Ê¥Nš›^®uݧ4ãQ@Øš‰“Dlßµÿ{…elp Åär“É
+)"‰¤m±\p±`ü\õî4Ö¢ÈHÜ3G¹„-û&ð­®å ƒSþ’œRs÷¹(,$®I˜ÖëàÊÕ
+°MÌSDØùɉ1¢”GHa ‹oˆê„Q‹0&ˆæYõ~Á3¥‹®ƒý=a@¾äXlÏw>Á*Z%ÍñùN'4—+P$G‘ËU®b¾îÁà
+i
+ÆIN‹ Öx“Q•º¦HêÞÑ)¤ÛîÓ€÷ȳÀºJ5ÑL’øüèD¹ž
+ºƒV>7úaÂLPn2¾¯« B:•ï‡üF·ØP1™”Ãû»ù|²}?·é4Êóíâ©áìÈ9,–o>©:ã&¶îáÊu+‡Pž3¶7œ”N±ûÞ©ç‡#­—®ÿ¿^fendstream
endobj
-1641 0 obj <<
+1663 0 obj <<
/Type /Page
-/Contents 1642 0 R
-/Resources 1640 0 R
+/Contents 1664 0 R
+/Resources 1662 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1620 0 R
+/Parent 1635 0 R
>> endobj
-1643 0 obj <<
-/D [1641 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-458 0 obj <<
-/D [1641 0 R /XYZ 56.6929 687.8224 null]
->> endobj
-1644 0 obj <<
-/D [1641 0 R /XYZ 56.6929 663.4753 null]
->> endobj
-462 0 obj <<
-/D [1641 0 R /XYZ 56.6929 594.6899 null]
->> endobj
-1645 0 obj <<
-/D [1641 0 R /XYZ 56.6929 564.5686 null]
->> endobj
-466 0 obj <<
-/D [1641 0 R /XYZ 56.6929 531.8042 null]
->> endobj
-1646 0 obj <<
-/D [1641 0 R /XYZ 56.6929 504.5879 null]
+1665 0 obj <<
+/D [1663 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1640 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R >>
+1662 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1649 0 obj <<
-/Length 1194
+1668 0 obj <<
+/Length 1207
/Filter /FlateDecode
>>
stream
-xÚ½X[s£6~÷¯à1îŒTnâ2û”M4;ÝlëºOiÆC@Äš
-G¾NîT%nš¨Ðp¤lDC…šëêJ<1‘‘iUO4ùsòG Øz»›Ú§2ˆÝîÐÔZjª]Óµ¹Ð2tc§àýXªz“„Ä^æ)M8æ²{‹ù’²eB?ÈöCá±0 4 ºéˆ<ÊHaà'^|@B3n÷æÉæwùÀ/iD|’u:cg˜šDÛ~#ZÛÃ~Î8¡Ép~,ôuCu@¶M±6|zÎ1 H)NšÜ¡{$ÉÄ? /!Çà 즆ŒÆ aˆNüj™þV‘Ú/¹T·ÓÅ#oÅ í›AÂ9öN¼Çw»œ¾ö"xY½jÇézyF‡Q‹(}ö8 pÝ@UØŠ¦¹Pг»`IgÌž-ÖMÈXÎ3à%þŠ–r¶ßpýæºÜãò^5>D%¤çû8Í€Øi„á`øŠ…”m<ì‹YìÎÎB…„ñìˆïýKdÌʘý&Up§K/JeïSʲº¿h<ÈViBXÙÛ=þ=EŸ\¤Gžyþ³›­kGm}Ûét‹£ £U£‹\­e‘1ÿ®
-BI¬Ãð4ß ™+ÊëÁª¥éjzý(¥ñWX¨ÒÊúÇÒG§§:tZ<{¤Ó÷¤ÁtCÊ#Q§ƒ<%”ác¬¾ãQ§â@ô) üz£qõã—e¬ÇÅ ‰¿Þ¯Cò…œ/N%üÄH¶ž)*oe½ðŽ>s¶~›ä1"ÉÓp•¼(¢à ø‡&¸›úöŽÀS²X ת´J¬"`Η±—ù«eDªä|:è׳7ajG0AuìKøžX›‡üFÚ=jdÌKxX¥ÓÑ8ï•Äã㎯DžŠrp쵓  ¬3êÝ:~‰,SÁ3>»g¼- š‚êŒ"OÖ‹ £"·kǽ„òá5¨LÄyæd(tY›ÙÖàÛ$[aNøhz?F¢L[Ñh¼)>ÞÖ&ȃ%U—jÑ34Œ×T| ¾ñ¡5^ÉÐÏçb4n’Á}Ô)W;•ùKW›μ¯eypš3ÿ Öh~‘Ôl•ïe™o»ÐÐm$`¡mæõ§Î@ëE]1Ͳ¡aëf¯þ‹mã-Ï«O "ÛÔJÛè˜mÔØnëö½d¢#ˆt·¿¼.E=I ƦcšÃÙH¦ Mõziœ'È)‹Ñ¤ýÝõ5íXèÔqÛ=Ö¡f® uKÕh&9¢5¢XgEOß•ª`qÚsªÖÀo¾nmî¢M±G¯oRu½u“j¨tt×®Hž cŸy}/{Hý?=š
-endstream
+xÚ½XÑrâ6}ç+ü‘jI–mMž²)I³ÓͶ”>Ñ ãµEâb,Ö2ɲÝþ{edll †±,Yçž{t%] ¦ú!ƒÚÐf˜³ 55üYÇ4žTÛ]å߀õG úÕ‡açç[â 2ÛÆpRÁr¡éºÈ£® 1ì)³{óùáöþî¯ÁuϱºÃûÏ=€©Ù½½ÿ­¯KwƒëOŸ®=€\Šº7¿^ÿ>ìt“c|¸øE×0ýØ:èßöý‡›~ïqø±Ó¾TýE&ÉùÚ=šF ÜþØ1!a.5^Õ‹ cؘu,J µY×D?;€•ÖU×Zý 1±q€ªèšÐ6”C´ &+G=`›f׋"ñ
+î/ŠˆX×ÿ›7AÂ¥ϼÔG¡LuýWúù˜ ¡Ø
+¦rªk—\ŽE2ŽE†A,%÷×g"ÈÿÛ¤¦.ͼ0NÕ_¿ýÐX¨QáS\|šS)_f|E-qF50‘ð…#âÇ“/Ê©-f_xҜ̢‰ƒT(]Þb¤_¯A¥É¤þ\i2Q²<·wIÊ‹ ä2NŸ•²òb1ø%òü鳈.Õ ÉÁ‹ÁÌE’nRÍjZF±÷"Âà\Ä]†öåðr†öå|ξæå6*t)œË—Ç‹ ]aV9ó¾–¿.¸š$R,g‰)KáÜgVÖ‹M†‡ v¨‚…ŽE¬êOº)·SiÈ–¢U@¶‰ƒ­ZýK«Æ+žç¶‘Úص?iÛtŸmZÚ®êö#g‚)¤˜‘úØÒ¢6R‚8Ðr-«=MÃbÐ"Ì®¥qš M£*HYquÚ:EÜÖG½«s ¶MÜB3ÍÈ¥¨· Šõ®Ñc‹žCw|ˆÞG¦Ñ³³¬"(#£oµÏ’6ûWw€CÙ:
+™ãØõkãh'u{¬]#íg[<76Ù›*yªØ$‡í9R§ •¬´ím¯ÊÕ:•+ƒQºçT·Ãõ¨´#ˆÓn.튇ã@Çt·wÀ†¡qlûÜ«y›#n,Òp²¼åzýòEÈJõ“1Gh4—ÊÜ¿VEzÞ\r$cÇYŸIå´|ƒèD AìbçЀ¤Bqõêï<šÜpI4ÒÆQQ±Z¹šõdÚ" cs4å9”*ÄÞŒží­µµÃÚìG^= „Ùææ©Ô{Q¦1á·I"ñdøŸý£&VÛyÙ=+åœû f—/²û¸žÇQe£^£þu÷È„Âìò·æÖ×,òú³ï˜Ë xKÍm×ÅÅõ1Æ•ëcì¸ê”£@rR™ÔÚa¾¾ŒÞ¥þ?š!<Íendstream
endobj
-1648 0 obj <<
+1667 0 obj <<
/Type /Page
-/Contents 1649 0 R
-/Resources 1647 0 R
+/Contents 1668 0 R
+/Resources 1666 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1620 0 R
+/Parent 1670 0 R
>> endobj
-1650 0 obj <<
-/D [1648 0 R /XYZ 85.0394 794.5015 null]
+1669 0 obj <<
+/D [1667 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1647 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R >>
+1666 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1653 0 obj <<
-/Length 1155
+1673 0 obj <<
+/Length 1069
/Filter /FlateDecode
>>
stream
-xÚµXËrÛ6Ýë+¸”:
-×#d=š¹Û®Ö€Ý"P_õv>úñƦV
-PLmh;A{€6X^ΤCZ~¤0$>¡çÌ©¥áÊŽüÙÙ',Î$(‘Ê¿÷¬ªža›#û6ôü¼n±fWœâBØèÿmZãè;'ˆøºR – ßø€Fæ/ãòÄlÈñüi™¥<ì°Õ„Ò´#§’=aúIöù•ˆwMD'áf+£Yøé5_cΑ<‚-ñgJäL÷
-° d);é¦:+Q¯ŒŸŠCü0˜XÒÂD›ƒìeˆ¶›7Û…ùuYË=Ú_ ½úVîpeé˜öÐ÷ÉþÂÚ…¡>t|R‘ÊÕtæ»ë»Sêÿ¶%Œàendstream
+xÚ­XK“Ú8¾ó+|„ƒ¼~cלÈ,3KjÃdYö4KQ[€*~E’ d“ÿ¾íØà!¶g (!Yý©ßÝ–*)ðU%Û”Ý1¤±cȦ¢š’ i Ïj±•›Puׇåà·},9²ci–´ÜT°lY±mUZzÏÃû?&Ÿ—ÓÅi¦2´ä2-eøa6ÿ=_qòáþiþ0{üg1árö4Ï—Ó‡éb:¿ŸŽj›*ÐkÂ+³?§ù¿ÇÅäÓ§Éb´Z~L—'YªòªŠž
+òuð¼R$Äþ8PdݱMéLYuM
+†©Ë¦¡ëåŠ?ø{ð× °ò4#mÒŸ©Û²ikãjEªbˎጥ±éÈ–®é™ŸGÈR”á†ú„ç9ýNÖ<&n>½Ë‡U*+ˆTUvLS«sÝ/)Y_
+pe¤L]z H‡ÃE!Úùò¿Š©4jéG>¼@¼|A^‡º'
+µÛyí*a ]
+ˆC/sÔ96éBÈBèšÅ/ëù |0A¸õr<“ZÐLàS[˜?ͧ¢‡
+øg½ù^ä|id€çÚ¶vºòдʕ‡®X²­9ã’©TFÓ¼äütrÍúÿ²›íÕendstream
endobj
-1652 0 obj <<
+1672 0 obj <<
/Type /Page
-/Contents 1653 0 R
-/Resources 1651 0 R
+/Contents 1673 0 R
+/Resources 1671 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1655 0 R
+/Parent 1670 0 R
>> endobj
-1654 0 obj <<
-/D [1652 0 R /XYZ 56.6929 794.5015 null]
+1674 0 obj <<
+/D [1672 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1651 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R >>
+1671 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1658 0 obj <<
-/Length 1536
+1677 0 obj <<
+/Length 2456
/Filter /FlateDecode
>>
stream
-xÚµ]s›8ðÝ¿‚GgæDßLŸÜÖé¥sMz©ûÔv<2Ȇ)
-²÷zÿýv`°‰CÜ^ò õ²»Úo­D þ©âZªfx¦âx¦jiÔRüõHSVðííˆV4¤&"mªW³Ñ‹kÃQ<Õ³u[™-[²\Us]ªÌ‚Ïã×N>̦÷WD·´±­^ËÖƯnnßHŒ'—×w·×7o?ÝO®s<»¹»•èûéõô~zûzzE¨kQà×+ 0\ßü5•ÐÛûÉû÷“û«¯³w£é¬±¥m/Õ 4äûèóWM Àìw#M5<×RvðCS©çéÊzdZ†j™†QcâÑÇÑßÀÖ×’µÏ–᪖«;=4iËTsUÏôű<Õ6t£ôàç+bkÚxÍHÎE¾'"Zs‰K6ëÏ%üR._ÑbØ–Pªz–¥·Edi.$esü1€‡A$¢4a1Yæéš°å—=/æi>OÒsûÓs²|æ‡üÂ:Šå, @FÀ·‘_ ɘç «½3@:µÔ‚ÑŠ ¡y‘q°]k&ü¬Y–ñ€€‘9/
-^6@›e ž$MÈÖ”è/š¥õzé§\9gßHÀ¦~ÃAŸ·ŸDüÓÄ M˜—vÍ㨨²æß¾
-þ ~æl‡7X_gbÿH[ÒÃKöGºËàí¤ /žŸ6z_U$J<BógÙôƒç)IRR¤Œ_ªÐ‘˜_œÏx‘ÆÛ:sÊ¡5݈‹r1àÉž°¤Øá°Ò¯ž:„;#ÏD9{èŽ/ÏÆ®­R±c…zEþ~5Àè,M
-N²4Žü}GÜ!z¦.Ú½˜W0R$ƒ±JÓ ƒÌXQˆ0ßtÉC»¡×È4`‚uPþ!¹Û ;îßê_Ò®CE´Ó®9üÎ 9ÿƒOÅåÌŒöø NLGuuÍ>Øàã‹k* z‰¾¶4Õu4«$Âë5µá®­´4Ãñ¢·é‚ ¾†Ã@þ|ÿhšž”—9‰Ë˜>lÅ«½ôÖݶÒmÕ¦ºÔgòF¡Öî¿žg1ÒÔœ
-3@’aX]ÑRÎ0ÆÇ B›L®«8]àiŒðÁ,ø!R\Íñ‚W ¦9B‹½\ñ¥B•à,Œ*¶£ ׬"ÆËË«}Ê$‘/KXªM»‘Áì7l{ÌpqÆp0¡oW›œIïâ7ÄÄô°-o|³”HB&QwÌ%#*‡hÈÇÚ®êz}Ú³€šsìÙ?@¶gA”å^qÃEœúß$¸‹ðq
-Ÿøzâ©5íô—_ϬÐÁ ×Õû3ÃÀJÑ=§V
-lYÇš7OŽ§ªÿò¯¿Žendstream
+xÚ½]sÛ6òÝ¿BÓ—Ê3!‚I4OvjçÒi“;×½{H=H‚,N(R!)ÛÊ]ÿûíbŠ”%é}Œ°\,‹ýN8ü‰LX¢„š¤*f’‡r2_ŸñÉ=̽: Mà‰‚>ÕåíÙóë((¦‘Ln—=^ãYNnï¦ ì8ðéË·o®_¿úíæâ<§·¯ß¾9„äÓë×?_ôêæâ—_.n΃0“áôå_.þz{uCS‰ãqùúÍ„Q4|†éÍÕõÕÍÕ›—Wçw·?]ÝvgéŸ7ääãÙ»;>YÀ±:ã,R™œ<Âg¡Rb²>‹eÄdESœýzö·ŽaoÖ.Õ_È™ˆ1¢À8ì)0ã,áÀ*•Š%‘ˆ¬ß çS³Þ´»àSUš&0¥ž†ð;Ó¼¯ê÷eEŸ/h¸ÃsÃæA2%¥èsZä .ö ÐûR¯ÍWsúdê*(« ©tжÅ7ž`Ìõ|õ§OW›¦*L|Üšz´ùÚTÛ–æÊízfê¯W”)w.›Gঠàܘ†¦þIƒÃ¾_ëv¾z_äÛè¼éžæfÓ˺ZV£®Öܽ8¥ªHE®eù_ãPÉ›ªlL°©Š|¾°Û»®Sgc\ú‹ïóSø¯›.ÈnšvUoÈòiQ­u>\^V Ýêj¾wîþ‚Sú®Í|[7 [P•ÅnÔ'ïJ^ë'§”}DôÝîÎ{îŒjghµÿ_²Ë¬6úC°(ÁÝç_³a^e,ª¶9qÞÞÞAœ²Lðt¨ñ?¬Nž_‹pÒÉ´D³ÄSQ&ºj&P!8p«6m^Hÿ×V·fmÊ–>4¿s.Ê)£Ë¿5úÞ¸½D/ûÂVB²4š†[Ý®L'О(a”Ji¼ÇÌ"¨3Q;º¦'\MƒªBh»¡ñ¾¨fº x,øh+ãé̸ FB³X·«Ü-;Øp­±ÞlŒ®Ý>ÖŸšS´R¢ØáÐ-0P¢$™jÒé¼*Q·÷ÛZ“vq1…9©¦¯—„lWàa65´…C4¸Ñˆb“ŒeJ…_Öl
+ Ï5û x+ V¦½:%↳¢š ð1oWDa ÊŽh ÓÐ4*yÛ¸Xå ˤRC¯]˜¥ÞÎéó¢ Èš F4;êAB–†a2‰³”…!?Ó3QЧ²-Ã@m¾Ÿé¨P(ݶp8WG6CÁ  OïÞQlß7HñÄÃý/Š¢zDÝgÉt ÚÉ7Ø­à×Cnü„U0ŒÍJwN’‘“!6/ïý"× ˆ9}U-…5WdCǘ •¶¤ÖrS=–}FÖš‘„v-QCG÷Ü:¤
+‡Î×»Iõàž: ™Â,‘³Ê<7%*ƆÕ·H`K9OúrÀ:n‹•§r9tÙ ÷9ú0h<]f,â2¤'ØW)J®vƒES
+Ã1ÍÆÌs<„MÚ0‘—crÄë11ñ¶®|,
+é;àC+&Œ‹®xuî.ì…
+ïk…½^ø:DDñq›wM R¶žÇ²ÂºacñGâóÔlz•‘î’D´MÞ´¸ûصZd*B×wèšÏF²ž ®t>%æÌÍxÎKâî-ïÙ7 }Wéç…Ñ%œ0ÈK°ÁCw7ê³LSãUà ,¥# 7Ö@Ïí˼yÚäõho®“™üV¶ b¾Ðþ†}À2ãL@>Á2ˆæãƒk!>/[·¯ËÇ|¸gñîásŒo e©»g »ò$¿îm<ù~Ä®É?º$cpßË×½ \t¡Ñ‹2¿õáŸ]#¬ÁRxÖìs=F’áÿ…#Ïn¼+`ÿñß’ûÿl¡ ˆ²LŒ¿ß‰šÆ ˜8¡Pp™?Xºÿ/Eÿ73sѺendstream
endobj
-1657 0 obj <<
+1676 0 obj <<
/Type /Page
-/Contents 1658 0 R
-/Resources 1656 0 R
+/Contents 1677 0 R
+/Resources 1675 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1655 0 R
+/Parent 1670 0 R
>> endobj
-1659 0 obj <<
-/D [1657 0 R /XYZ 85.0394 794.5015 null]
+1678 0 obj <<
+/D [1676 0 R /XYZ 56.6929 794.5015 null]
>> endobj
470 0 obj <<
-/D [1657 0 R /XYZ 85.0394 179.8868 null]
+/D [1676 0 R /XYZ 56.6929 587.7171 null]
>> endobj
-1326 0 obj <<
-/D [1657 0 R /XYZ 85.0394 148.102 null]
+1341 0 obj <<
+/D [1676 0 R /XYZ 56.6929 556.781 null]
>> endobj
-1656 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R >>
+1675 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F21 950 0 R /F22 973 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1662 0 obj <<
-/Length 3141
+1681 0 obj <<
+/Length 3745
/Filter /FlateDecode
>>
stream
-xÚ½ZÝÛ6ß¿ÂèK´@ÄðC”¨öi7Ý´)Úä.Ù»{h œl˱[r%y7ÛÃýï7Ã!õá¥7
-ü j8‡3?ÎP ?±Ð)Ks™/²<aš ½Xí/øâôýp!Oì™â)×õíÅ‹W*[ä,Oeº¸ÝLdÆ‹Ûõ¯QÊ$» <zùöÍ«×?üãÝÕe–D·¯ß¾¹Œ¥æÑ«×?ßPë‡wW¿ürõî2F‹èåW»½yG]©“qýúÍ÷DÉéqFè»›W7ïnÞ¼¼¹üýö§‹›Ûa-Óõ
-®p!\üú;_¬aÙ?]p¦r£÷ð™Ès¹Ø_$Z1(å)»‹÷NzíРýgR¥2`@)'4‚é<׋Lç,URYõÖÄÓhU¬¶Uýá9¼‰4ê·MWRÇ]UÞwž§ÆFuÛ¢½&r,…£ÂøÝ¥ jf%:†¾qÅ£ìË}Ó>¸á¤Cš®«–;G®ö;IsçÒ”]³;öUS£íÁ
-e7r7¤5DZº÷!\× 75‹þµ-ëqxÀ¹
-‰]55*ùáèb–ôñP äsäI¹‰ùÜ‘F|Ñ ÿñ
-§LA‡¯““Ëo=¹/0:JÑ.«¾-Z§)ú®ÃPˆD8àüŸnåUÝ€òà#Jç0ÚJ¦0O9l%t¢ylí ï~[¤ÍÒ—]ÙSýÕvÙ‚ß±‰„鎡@êõN
-ˆD‘óÍ0~P^‹éK¿¥7÷ê Í«çô¼vO›ì`ãå)¡©1d혓žë0rP¨HÐ|
-…†ò1£G(Ìï©ÔqÆM“ ζ¯HmDš¤§© H·.;jáÀÐØeáã7®¹ÅOๆñ¬£â`ËÁ#ªÝР1á)‰öv¡’Àù±ÇÆÑý¿¥U$³5;ƒ(0-9æRq
-ÙÎ7WßPã?vB?Íl^¼ J)±5ŽßŽTõ®a=/å|ÌHN÷•1§'³Ñêþû]hÌDã뿦q‹&wT´7>¯žugu}Å[î»à2ä—-ãåSËÿWÃO5> ‚8è?ÿ¼Ô:r rЯè©5:x-è1
-ˆœ½—±iðÜ°±ôGê ñ
-UO¿F‰ëª?C]j”ð£~.ËZ‡Š\Èó”ñSÿY¶M\7q×çT…MÐÒ‹öéYúq9ËÎÞ4½Í,§éHâ"èKGðùf80âFaB|ìÜ@¯Í±£8JpPùð(ó«ž„£íÆâ(—ëÊAÍ: 2øA-ÌÖ§9|B9¼¦~žÀÇI&]ÞÄ1oS0Ø*nÅ
-Ì'[—ˆ7µë8£¤±ŽÝ汜q-ïIé5Ù9ç~A¹ ZI.)=¶î=4qŽþÕÝ;1‚ªM’WRÃÐúã¥!eM}c99c'in¦tb!ãíÓ¾øhÓH˜¥¬;פ| OŸsò¨¼³wÆÕGÝv¿9îpWàœ}ÝÕ–SFDÅz_Õà'PK ´LEÏ\; èGËj‡˜ß?P¥|0YÝÇ —?*2¿ÀßV¥+¥*W!LRP¯]­Œ–r%¡ݵ—&:†‹0W÷.§…ôìÒX°Lˆt!ÓÎ.Î\òS<å¢;^¸$¸È-œïxÝz2sžÁyfÌÓ3{¦ÀÌS,R¸5›šR©¡®o?’cÂËÚåtÀñÞ>•JEíK<í/”
-{Ñ@“Ü° ÏK‹eU¯]b?ôÌöÏ
-|ôQ,ü¤*JÎV1m½^1Üñ
-`hŒñš›3ñª¥ó4lHÄáu¼w†ÁuCDŸB{}2ߘu¸¡Ì$ø„ɆÊ|Üe†qðFÀûáÃÖ¼÷Uç•s—eLbþ2™÷?^IRb€²}âûÚx‡ì*ˆÎÿ¡Àgö6õVž²D Ÿ9°ý™hW†)
-ÇV~‚bºÊŠb½.×gcˆG%?S3Œ<çÌñ ©`ü ±ÿ4¤8@˜€óõ‰YžÓiU>ƒHºr
+xÚ¥]sã¸í=¿"o§Lc-I‘’8}Úì^îz{í&Nçîf*Ër¬Y[òZòfÓ__€
+–ýÓ…#›šËGø¡´V]î.´‰B££Èc¶wë´º®sò3QšT%3Tj @)
+€^Â?o2ñÑl|¸»[ÜßÝ~àv—£àQoDêÒo×›£éxMÇÇ5EKcbÂAô(Ú¾8µÀÄj¸},¶œ`È
+Œ´G¯Š6õù°4aïd§'¼ÁRŒ®Æ—Gc=¬ˆÂWçc=¤5ß²Äǯ:¨A‡rµ*¸ã±¡?öuf
+…`’)çݳÚSÖÿ JYendstream
endobj
-1661 0 obj <<
+1680 0 obj <<
/Type /Page
-/Contents 1662 0 R
-/Resources 1660 0 R
+/Contents 1681 0 R
+/Resources 1679 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1655 0 R
+/Parent 1670 0 R
>> endobj
-1663 0 obj <<
-/D [1661 0 R /XYZ 56.6929 794.5015 null]
+1682 0 obj <<
+/D [1680 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1660 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F53 1313 0 R /F41 1218 0 R /F39 1161 0 R >>
+1679 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F39 1173 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1666 0 obj <<
-/Length 3769
+1685 0 obj <<
+/Length 3662
/Filter /FlateDecode
>>
stream
-xÚ½[ÝsÛ6÷_á·“ç"Ÿ$1÷”&nêöšölÝÜÜ´} DÚæD"‘Jâÿþv±
-|Ú_ñ|Ñ>싼»”jqÓà+æA‹ù¼‚ß”/š–ž»ê©Ø}…okðx •%Rj” goŠ]U.¿ÞW{ÇË£AX£c¡UêŽ~›ª*«òo(‚XÔ½£ÞšM_·M±­ûçx€Y¬õ¶w¤¦w2÷VÜË¥`<1ÔÆáWkä¤íªýg¶=9Ù\–0 v—ñ,ɸÓÆ옖1íŸ2fÏ…Rô«çåC×Oõš}±‹À3žÈT¿ Càšb`YšH•Ž¤X¦–’§‹n¿ÑÔrÂØö¯Œ‰­ã@åâ„lqßî‰òþîn¹º»yïúŸJ0—‹å‹›{7úw [ín%µ=­«zš³hJÇê¡MLÓD1¦†›è4·±†6Óôu±…]U‚LCI°àž 0_ôh×Jƒ ðP5Ôãd¥‡/õÖÍ°®ˆRl·í—ª$â—†¹y&ÈH”]ÑoëæÈŸöu³©Ÿ‚XnMoœÌ¿·î©ÚÔ¨o»'íìa¦©LriÎÛeÄ4o–žil•›}ÐëØ2ah¦ÎËàyNeX¥aI& <ÅBX£„ظÍao]ŸÆ{4ÚÛz¬7®ÙÇ[ÿ¦öc{Ø–Ô.À³l0®Y
-¼vG-ZäÓ¡êzØ k€ Î,KåÐ
-¡œóH'–†ˆ¥RÞ}¸{=¡k!ƒ°‡˜È’²ÝèNõœAÒayê¸qaû6ébueÄ¢%ÉljÁ†÷¥W¨ÃˆDKágŠò„b:±Ð2¶ïY$`mü4»Cçì¯Øv-µÖ%¸®úþè+H÷{lÇÚy[íG“¸4‚öb³Á^g*aÆÈóÑ>æš÷+¨ï¨£AW2áú…µ=ÓÄÚƒ0¯ò Çhqr3ÀkN
- Ô "™„e©gª¾n‹æÁFL0Ë­·+ž©Ñîi¹@°vŠ kÔ÷ÏÔíi
-º«ƒ^-¿ÅÐœ¢ ‘3FmÎù¦=n ’)#V¼ý+Rg,Ñ"K‡
-¢}6™[[v›á7t ¶Ùä”(°ƒ0¶ÖÕDÌâ©N¸2¾bñ{‘2çÍ÷5ΈPôôjæ g•ëÌMð׉5 ed‡§ÙÒdZFÉ'ƒäó¼åþKÝUNK2ƒr0çf×HÒï„”NK2=v ´ ¤%èpZ‚ÖŒ–`EBìpE»#µ<V_©QÖXžMhˆ)h}VCàæiH§Æ­(ü®Å o¶)ºª{Ežíðõȉ–R±Dq9J¬´°ÕáÄâ"4àßÄH‘J ¹‹IHðJÉ¿tDòA ùpW„Ñ]dq°µ~»é±i›eõµ „†‰ŒÝa}œÊ,¶õGWÜzñ/äSú ’s ~†¡œ«D
-ÐÁï8ª‰Éó|ú bf\ÆSNÄ}ž'š¬l~Ë]„˜€°M¹ðÖqv´\®ó!¦àûr3‹çö€82v
-6òÄ\èUîÛPßO½WÍfÛvþ^Õ—e{ ’ÚŸ­½²ž ¡¸FÉô|¹æChà²8
-/8±vœ ¤J'cÒó® ñ@Ø‘#(Ýj§[í¬~û+¾ðÁfµ÷­£Ë?í!ê ÿÓó÷u:ŠžZÇCxØŒ.GµvfêD$‹lÝeÌ|h#´k³oë7ÛáÍ6º…™ª²¡€V©OÁG˜6júŒRgñåÿ éæhpN¦UN¡g /é™P/vÌ5oØËâ ‘$žð0ظ³"® †çE`Ñyª‡BP¦c*Æðd1s&Š„ÿ˜:F
- !¤‚c‡HÅ}w)}D*©œ±DÐ4g|h‰sÒ
-\/Èq:ÛùÐ!K³N˜c®3¡ÃsÙkê¦ÄSÄó)Ñœ pMH0‘ÅPʉ™ŒsbF©=+’Í3ðë¾üpz?ýJqi‘2ÛàÐQ’Ê”?3Åõc®Kß·~žº¥æÞÇÇãýdñE$¦%¨^ïªH4:¦6" ÝRèݺÎY Ÿ>“ÖxÕÉ|â+›®«6ËmÛ~,:TÁDVÂû^æ/Ôº§`Œá³7éçb[—ô%ÎĬ
-qák'w0ÉÁ¡û¢Þv6+—¹ÏÇâ$ûSnèŠò1Ÿ‰‚hà*\=­×ð$´éÄnóK_Æ̈š%"Kù ß¡™Î|†ê˜è³Í¾mûYg“&)àîs«¦Óå‡9Z%™óÁú+ÿ XäiŠÊxúfÌ‚¯ÅÄ
-ŽÉ¢FœÑš9#•*‘Œî6ŽàÑ+yú
-Så©üŸ’&gDzéXÉé?UŸ0øëÌÿOüïø©y>wB$Yšä^Ñ …‚ël,yøtþTôÿ
-Oendstream
+xÚ½]sÛ6òÝ¿Âo•g"Ÿ9÷”&N.wW7—¸7sÓöi›S‰TDÊ®ï×ß. @Š”;Ó™&“\,Å~ï‚â’Ã_qi–d2»´™f† s¹Þ^ð˘ûx!<Î2 -c¬ïï.®?({™±,‘ÉåÝ}´VÊxšŠË»âçEÂ$»‚øâÝ·>}üéËÛ+«wŸ~¼½ZJÃ>ýë†F¿¼ýᇷ_®–"5bñîïo?ßÝ|¡©Ä¯ñý§Û÷ÉègfÑ/7n¾Üܾ»¹úõî7wýYâó
+®ð ß.~þ•_pì\p¦²Ô\>Ãg"ËäåöBÅŒV*@6_/þÝ/ͺW§ø§MÊŒÔÉåRi–ÂþÓ\Ì
+HÖd,QRõ\–bŠË ¹\¶»å/œËM9>±à‚›ÇËžlÞcMì.£ÝO˜ÎÌhû»Çòj©T²ØåÝcoýSsO¿]˜öÂØ.º+±xôã¶Ü?•{ÂÁ£´£÷Š¼ËWy럺†~ŸËšFUÝvû«tqXwe1D*¿Ex©ê‘E#®.%H&K4pB°Ìéε¯‹5)RU¬ü‹1CɤI$p_
+O_oâÎæV.ïóÃÆãU-m¡cÚ„2,™õ{ ‹±”G|!.­¶,±VüÍ–,KÓtZ¯—ýŠËxI§ꔀet–w
+É&¦Kµ=ÃÆê­ÀŠöK9"1„ÛmËmÛå]ÕvÕº3•0e”>KBtJÃÀ\à´Ji; ÂY‹Lyd-ø„Ö‚¿]˜ÖEo*|ÞW]ÙÒNÖì_h|hóÿÞñ´~ÆoVÓoù{ÕÒj.HiSRZ` °9cV% LâÏi2W`eY¬ÈÌ‹¤P•T±$lkFU «rœÕ•k^Yz,ÜqW3:’f ,Gß: MlŸ2s1!n}\cìQSïQmðŒ6ò¨éxt§¶×D¨ºÖ/º¿°Øºl=àÓ{Qc µÒ)N8æÖÈ]%ü¸]/w|˜”»_¢Ò,ý5é—–’%&AÁÈs<åûëý¡¾vÚAÿ3Ä„ze™Nµ>úÞ$É<ç`ðÙÊíUK°CëŒV/4ãyò°Ï·§{Ì;š{Îëδeíßo«‡:ß´ý´;ZOÚÀv¼›…‹Uu]Õø¬Á ˜ :HfÐ*…^|E¾ß¿ êiÔ‰fWçc}u‹ÕM]N…,õ‰HýKEÕæ« ¹HÔÈ ‚[2‹œàŽ«ø|ÜH/~‘Ò†-OgŸ«Í† «’Ø#%xOaÅ=¨ª†t™ÉEŽü¥zµL «GæX`<šøÕa´ò'Hp‡O 9ÀDe·MççœLO)fÚªÀÈÆIˆÃRBBUrÒÏoåËsã¶vÂ¥þG â ÊÚ#à‰)g9´åžÖ-{Ï:L.Êz½iœ>»éÚ{ãæ°ÚøW¾€í¬5™a\òô¼±æhåò§r}Ø· ³¹P+,ã<üY
+z¬ þ@óRk†4P´5&Ž¶Æ«µA…‡<ÔÃz¥5ÁŒ9\ûÜt0ÿíPÂ
+ûªì'òŽFùQjfŒ ÇºÛ¼ˆž=‡äRZrŽ°¥6ZÈ(ÏuÑ· âö™¦ÿÉs· Òü‚ n/ª)‡a˜±JÿÕ9.;G×$Qék¹pê<c^QíëŒj,—½šF
+È^LjÏ“ÐcMÐ0Ðm‘²²´!븎³xrY÷:Š€>¸öY`æ»´ÖOD9£{£¡__oú¸ÞŠ
+ÿëê-@=´Ó¡ Â%ãš›©‚K%DÄTN¨53¦O!1æJ]ñ%ÊVðía¶âISÇl%Q3º¨`±¦©sô$ÙX:_ÜÄï¦z&C@ÿ®¥¹ÈxŠ*ï :Ìà…áX(^Š Ä• ÃD…mîmª¹YÜÑ•FQ¶ë}µŠÅHe¥TÀ\Ð-#S¨ ëSÐäþá’_"åíñ—ñ §Ê{º.Òÿ\5uhðhuè E©òZ%ŠNŒ¨ÇzŽ“ÕÎúY&Õ+®#Bš÷ ·[Uu¹B{>$ê³»÷H§ÛOD;ØŸâ¡Uq<´ä3šÓc¯?
+ ÓáÀ€/êe5 €òc5ê(8o©Àç¹n&÷ГIÚ«O{Ø7ö/,7S:-1}ˆO"¡$Ô(Ÿ„žø`È=ScŒ/TP?Nç¡Pƪ>½vÆ<KÑïNõÆŒaZX9$ñn8ÆÈq7S0H©Í¥²Pè©4{%í èËÿTíNV$}J
+w7™˜>QBèj@Щú¬Wè8] A‰¨ŒÚL^)sšvù*ŸÃ&ßœDq΀ÎP¤©Æ8ÎÛŒAYøOµÜ5›j=%®XÑI,5Ê-”ß­HcÝS€Ú7=7Í:ŸÒP¥ÏxPf’ ò©·õ}^ÁÛa¯©¦*£ÏÓóUs肃…Å}™wzŠ‰Y‡ª ƒê•F}ŒuÆ¡¬‘CužìäFGÃÚYzž€k‚‚aÛDË…’@a>SäÝpàc}Fµ1B¨§
+â6 (È
+¹Jõ®2,æ B­}ØÌTè,ª±‹ å=NÃf¦|¯Ò5jµS™¥¿âI±Òᤥˆ8eŠHÕy9ÆXórì±FrÌ7§Q{%`Èg÷ï±&FÅ/°“!NŒZ@´yh  =n© "D°!œÒ…7H„8׋Á‘SÎÿ¹Â†0äû„
+©ÿ;‡nË`yøð¸Í×Ëö1 Wm =ûDŠ?5u€
+"{C×8áei’7t- *ã!Ñ‘ñà
+Íl ƒWA’”ç)®ÁüHéúë(åjˆG¹He@hDÛ¼‚áwʾҎ±Î(XÀr7$;oŠQ*å󛤉MG% Î”nê»téâ§÷Ÿ¯ïÞ}¦G
+Œì¢>lWÔˆ wx<ºsXN»<@¥„@¾cTVO®wŒ ’Ÿ{µ.zèûÛ¯ôª/¿»fÝlü^ûüa(Ê5z˜T÷-'~!©X”ˆ[ßTJŽP ÙóáÀ†hã¦l›W5õ½±é€BjCÙylÔhÒJwÕó7xJ„ëIŒ¡gnÃ,ñçwqâ€Ýc^:§”Ñ_ŕȪ ‘.ôÏB‹}Ýl·‡ºZ»Ü°ï±‹•‡M³Êý’ÀúY Çü Kì+.4Æš×ðËÕd ÍvY”OÕz²®°‰ç·ï±&ö×”fH€Óv‘áMåkÿŒ þBbCª¸{!
+‘P§£û–f‡õ (sûÆ×1Wõ€Ï[ú½ûçÍiæT·¹Ko]´ É%L˜–Tkzè« Î}§ž.‘Kü¿¦Æ»:ðú™7*‡¹ó ;tôÀË¡BSIîÜrKM!_ÂaËÛ)Œ•+œ¡Éç26÷|O¬ÜÒS_â)_âiïuò‚žbAúgüw$´}å ¿y ·u¡ƒG,Ž·øv¨öäÂFûÌÛ°Áæ•ùÞ‡ m¯è+
endobj
-1665 0 obj <<
+1684 0 obj <<
/Type /Page
-/Contents 1666 0 R
-/Resources 1664 0 R
+/Contents 1685 0 R
+/Resources 1683 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1655 0 R
-/Annots [ 1668 0 R ]
+/Parent 1670 0 R
+/Annots [ 1687 0 R 1688 0 R ]
>> endobj
-1668 0 obj <<
+1687 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [250.9056 159.9586 314.5963 169.3682]
+/Rect [222.5592 527.0395 286.2499 536.4491]
/Subtype /Link
/A << /S /GoTo /D (statsfile) >>
>> endobj
-1667 0 obj <<
-/D [1665 0 R /XYZ 85.0394 794.5015 null]
+1688 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [80.6033 371.7332 149.9876 383.7928]
+/Subtype /Link
+/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1664 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F48 1238 0 R >>
+1686 0 obj <<
+/D [1684 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1683 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1672 0 obj <<
-/Length 3345
+1692 0 obj <<
+/Length 3717
/Filter /FlateDecode
>>
stream
-xÚ¥ZÝsÛ6÷_¡¹—£g*š ~LŸÜXÉ¥W;=Ûé\§é%B§üPIÊŽïæþ÷ÛÅ.(’¢œ¹¹d‹°Üýa?@‰…ÅB…n˜øÉ"J¤«<¡›òÂ[<Á؇ Á<KË´rýðxqõ>ˆ‰›„~¸xÜÖŠ]/ŽÅâ1ûÍ ]ß½„<çݧ»÷?|¾¿¾Œ¤óøñÓÝåÒWžóþãO+j}¸¿¾½½¾¿\ŠX çÝß®~\ÝÓPÈküðñî†( =Î,z¿z¿º_ݽ[]þþøãÅê±—áû
-/Àùóâ·ß½E¯ýã…çI¬/Ðñ\‘$þ¢¼*p• K)..þÑ/85Sçô'Uì*_† ÉÀ ‘ÌkY¸‘ÀIáŠ0 {-ûbNË– µÜê¶Íëjù‡~ýây~¡§ï-|‰Ò‹áâ'"ô\32ø„Ÿ¸"ö±;}¹ „ïìÓnW¥%÷ê-=;;Ìšv^u5µ^vùfÇœ–Ôäó¥ôx|øøZüÆÔצƓ®t“v:£îúõ0Q` <× }xcå̘køŠË ‰ÜP¨á&Jù†}[7°´òC«©1»‡L\?Œ#»G{ØgiÇ–ÅÌvÊÅ+É
-§¥]äP,!•ë!þh›«ç´¹jÕ•Q«ÔEmžJ(”r¥ˆü±ˆ_<å=è¸ÅÂUI¢‘ˆ\_%æœÑXó´ Æý
-‚ '­|>B›dÚ§M—oEÚLYÞnÅ> #Ã)¤D”¸Qä[ý¢–ûºÈ7sæ
-AqÈÌm¼¥®º¿ZTÄCìÀ*-öŠz“Î!4\/ñ,tê½Q:°áIIÜ؇rzRЗб£©—W0P¦d2$¤ëúÐQ³Ûå-µ¶:í4͈‰7ξ2Œ¤Çp˜ßt¨C®óµçš8Tãɦx
-$¬Äo ÐsÍH0ÂS
-”™Â,Î'Ðá8Å5Ÿ€.°q xŽq ørã¾À*,(¥˜ÙÎLE€Ë3éY¯ÓyxY&Üy_7ÝtÇHíaæ[;ZžÓGáÎseÈÑŽ”cy±óùæç«Çw?SÇÈ­È©åZ7Dí,o«›gK¸µÄJ© $?çÕ‘Èrfj•õÔ›»šº7Sê®ÞÔïÕ¤[¤¡7è[bidEsAŠè…p}‰ŠÈ—¨Ø@„Ö‡4Ad㌶´2Í«â•iUb¾‡#s¢þ‘¥Óm¯ð=ôB‰ä”áК7D2’>q¬%òšÝ.­¬œs0|É‹‚¢9Sh¬µq·Œã†ç¦.ËC•oLVˆ„ð 6
-2驨×)/ ª?mðO±
-ão€{Àõº-¾Q0¨Ëe¦ŸóÍlE…‘x{ûžkfÿiEhÆ´‹ÄsÚš² ÷1UÂ'¤4Åý+P¿ø\3#À=cŠåè×$@Ýèb(óœÕt1>÷M^¦M^0¹Ò:³«Äa ô°zÇîΫŒ“1âë=V&
-ÑMÌÑcÁ 1çEºi‰UÜÕ{"úY<½Æœ¶åèÛÊ fP°ª;ÂS§BLë4ã§Idj1µÂM݇ŒígÆíƒ D†ÐÌ‚7Tø#
-G‘nY=ªdñ¹æÑ2Íôx„“—# d7/º÷}fä•žGMRŸÕ ­>—‰çs§£3ù 9Ü(Ÿ–Hýë`§ã\„>ŽZ.ÍcÔ›¶aùkzžX‰\m°b7'JŽ’Œ¶å\ ÁÁ£ß–ŸIMîþyóéöúãÝ©Gh‡G¼~Î3OØ‘¼»»¾]ñxY?ëQJ»I!2ðDx5 “©…fÏ c3†ž5cH))µú²˲¢­Ôv°Äà]^dÄwœwüli„.pRñ’¾òû¬`Š/ì8á:Ý”y¥gSÀf7(€y¼š6”nFåÐ<&¹Ø#}AcøòØgp@‹Ä7´f2‰_Òr™|I9Ÿ®‰†¥·„ % @Áå 'o•µ<¯G^
-Öñ×Ñèeª¶Lhu³ÎŽIöÀ˜µf½ó @ô{ß÷ghl)%•sm–k-¯Ù˜AÉOŽ§š§›w¦57Œkb¿]l•ì'ãeù’2zi^þóÒ\Ý@?··>©É?©$i™¶ÙéÍmO}<arÛõwMìãÉÑå~ùë^Çùä¬ÎåXeüÒsŸ/`17w®¬$|j¬×†µæ#Ç.;› y™icœ¿”Vl‚ÄàÂ…CÒ eƒÞi“[®Ñ §Ë½·Ä™‡YUUSûä›õ:zÈ$}Hád Èy5å 3Àe—9R
-WÅg‚æ1Ç>‰¿×w¿ò}ÇŒòîjƒ N£.¹Eɤ/‡È´ 4F±ú,-´PMÚ}bâ瘛Õºá7ÃÐü ?%üÒcCüü€ÿóžTá÷íç‡Õç[lQÉÀ>42ù%µ,¥â<v‚6¾+ ¸3Àxøå9”û°`èyοÍr2rcß‹Æ‹ÎÖfRŸÓ
-æñ—Lÿå{nÏ}óÐöÍòÐêCi»ÿù¾ÿprº5 ÎUOQäúQøâiÀôƯ?˜ÉÜ¥ç-^0/ûLíéçoPå©7è™N%üŽ\)E<á†DÀ+vûÁ0}K¤¾$5ƒi͘IB®a­‹úå[+R>º ”pn¡
-¶…w¨ÜXúÁøàî‹Ùïê¡+db?«Ïërúa&v!\ûÓë|¶Ó¡Ç_¿Ð- DÂO½ëèÝDY·ö
-ɾÛÆsÖÇ÷Ÿöû"gG;÷£¦@¹øK¤ãÂ?èÿýƒ§ã¯Á
-e“+cX„…BM©øô``­ú3¢ÿ•MÇÚendstream
+xÚ¥]sä¶íݿ“'yæ–G‰¢D%Î8gßÕIΗھ¶™$ò.íU£•6+­}n§ÿ½
+gæ‘fC¬ooŽÞ¾Wéq&²$JŽoƄÇ7‹Ÿƒw9ýñæüêdi$âd¦|{qyF=ý¼ûtùþâÃç«Ó“4n.>]R÷Õùûó«óËwç'³ÐèæGLáÀ„÷?œôáêôãÇÓ«“_o¾;:¿éö2Üo(nä÷£Ÿ•Ç ØöwGR¨ÌèãGhHfYt¼:Šµ:VÊ÷”G×GíFÝÔ)ùÅÚÅÉñLÅÂ$@cRÊRH R›¥:‰ŠT'å(œ’²ÇB)oêº-liï󶨫Y]•O»[Sà"MÍñþÖÑ€ÐÀ¾uŽù¸9Éd°ÝT'3edP»ß0°'aPÝÕ›“Ðs»²UKýõáí2î: &róÃYCè¿H-ÛzMÝ¥}°%O¯WyQ50RG^-h†[Dƒ¢€ )‘„
+÷ŠLëÈqü¯º² ©ÌcÑ. Ê+ú­×ÈT^RË~™—Û…¥FY4­pt%
+MdÈ ž]ÃÚ2~ßÚM¤±‘;N,5ì—µ·vA­¶¦ß[]å ;¡í Pòªy´DÑ<Ño/Ij³8rûã‰S\oçË1“~Á¸U£4#!Úf]W“tuÛÁFKÜíÈz,”bjPnvM<9üš~÷N;×tdsÛ4Euïé,&–­àX0¯«»éVò»¹üÇÙ§§ì&v·]¼ðC±p„P Ø5]ž~dŸR0.- À¢hæõCnµKÖ”ñOÌWvRi.з¦JÂñ1&Ò#@xŒ5vƒ+;ü¼lêAo3 &ƒù²(„×Ï.ZþmhÄmÉM*ó'&°®ánKžâÔÑ1×Úͪ
+à~¾:x^¯œÈ¼#‘¯¨Eò`¸yl³r
+Þñ÷t,z™jn=žº£³ä.o0ŽÖ¤wîÏIEOŒLgëÐÇ'¥cœ:rÇuËr)EYoÕ<Ýí ny|¸ q®:»åŒr”É’_AÎz/Íä'4ò/-H2gÐ.Zö¬y‰7sœu¢ÑÛÙùoM×Ýë»oènÚ¢,G>ž]Q¨´ì«ë;ú½ƒS·4±r~é¡‹–¶š¼9='l5Þk¯[Ë&Ç.{±s-dŽÒu±*Ê|ãœ{VŽÁ…‡qƒ=sô¶ä›Âc  Zvµvê+8–…Ÿ‡QUU¼gÇŽ^K¿¤d8n1¶ »¨FãdâˆÙeŽ„âyðÒlŸÖöÀý{zùÓI†Á¤ð.k§'18 ¸s¢`BñWn"Àèî6s ŠÉŠ{VÃ_¢(>;Ç¿oxÀN²(ø[×i\ççküËkºû€±?~¾>ÿü!”%Ó½Y’’¦.¾$È÷TÇîh›ý²Ì· ª¥“ÂÛ÷ñ0[
+·Û¢lg·ö.‡«˜p’[wŒ°þË_3.{ Ð+Îcƒ¨T3DT–[›N„ŠÍŽílêÒ„ØÍY­»ŒkŸµ Š¥ŒÞí[lz’xF ÷¯?ÀL„‰Nþе¤eªçG VÛéÔÄùi¡!2â9ÕÔé…#µxÓ ¼×=Ʀ“”£ðN/¡Æ¡\-"B[ò
+íõ
+FH¬’“ømÚº¯>¶“¿·áÈÙ¹Œ|Ø6Ê ÂT ï궨ÈO…kpɤYwÉ|3@ˆ‚a¾¢zÓ…ŒòX¬gÀaYçÌ<׿†ûô#nZçmq““Æ® @SQ6Ö’7DdÂdJÕþ9M‚ÜD÷÷jÁµò‘é5iȪIÍ«<—‚+Ð$Á)—SêõÑw/#}a'óÇè=7ER)K_RaãD 2N줗6„²7˜žö W£°2³Ý
+¹g™ˆê÷ø[ß±¶ÊL(•Nøt•øçÒæ wà½ûJÃeí¬Gîý•°_Ö{É,£Ò5\ `É$ž©ÉG:±z.fªSƤ¢ ½õÌ×*¤j2({9JápQHHb<Ëd,˜?í…÷`ã`æ8Š_Žïiø·c}?ˆõýŒÙpŠ öÇ&¼GX¶íºùúíÛÇÇGQ4sQoîß6u¹u©ÿÛEùðv—CˆrE¦€æ˜Ã ¤ÃÚçj$—}jÈÕŸ§bQ‘Æ&íLÁ)[‘*­Æï#­Ü ê`ˆ*Î8ìélû2ÏUC(Å”¢„Â_©ôk%Yï¤JõLXð®ÞVx-öV
+cStRqñ󹄌¸õj]ñ"·õv>c¤ÞàÚ"ˆš_r° ÷L%cyƦç;:zeË'~^Kz—Cïë.•TÓå=üÄÖ¿:¬V.ÜÆÐDÁs|‚‚pž{ržXŒæý¾õÖ=µ7HX!ñ‹^¾<Ò8ô 'Ä„B”!,QÜ(©‹^ÝnÀ™Ðm A&Ú‘I±LT#Y ´¸-1
+}Š{ùéæüë‰mÃ~t¢_±é$ö›ö¤Æݘ s»i)­„ƨ
+z³àרaw¨†Q, »¡ZÝ|é¾tÀÎÇe ˆÜä„¿N 8’3 :ž†Û™?ȧ©üæmÒ
+k6á8ü5þm¡|ŽßIøoøÉ\1ÁHÿ&jäøKˆ^fX/rzÏ‘Tàh£ðåD'œØ´[µ+
+Ù… ¥v'aàƒméÊÎw6]ÑßA\Ö•
+5xé2Š9ÅE
+ Wî³kvHû‹ŽM Cö)1§ð ´‡/ü9¿½R/&b®Ì2o›É2dŸq¨^òh6©„8H›ÖkÑ‚ŠºVXö\|ñãCL‘c¾Xp0â¾iÂÁ–CÍSøG=ýGiÐMŽCìÊ)ድH¤JvL 3F÷½þJ&=;õv4Ä8
+.Zu!%~oTµ¾b ½-S¹eª|9#~E#óºú続û‚sèÃ:üè‰0.éPˆbhÅó€+I1xI{ý'=ÚMÏ3ê´{̲è:*ÛúŒTiß~Nè›ìªFÿ÷'¦ý÷·q*”1•L„‰@Á™)Ü€Îv9×Ê€~Géëÿ6ƒendstream
endobj
-1671 0 obj <<
+1691 0 obj <<
/Type /Page
-/Contents 1672 0 R
-/Resources 1670 0 R
+/Contents 1692 0 R
+/Resources 1690 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1655 0 R
-/Annots [ 1674 0 R ]
+/Parent 1670 0 R
+/Annots [ 1694 0 R ]
>> endobj
-1674 0 obj <<
+1694 0 obj <<
/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [80.6033 713.4536 149.9876 725.5132]
-/Subtype /Link
-/A << /S /GoTo /D (dynamic_update_policies) >>
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [116.6985 242.3486 321.9289 252.5104]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.isc.org/solutions/dlv/)>>
>> endobj
-1673 0 obj <<
-/D [1671 0 R /XYZ 56.6929 794.5015 null]
+1693 0 obj <<
+/D [1691 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1670 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R >>
+1690 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1677 0 obj <<
-/Length 3944
+1697 0 obj <<
+/Length 3596
/Filter /FlateDecode
>>
stream
-xÚ¥Z[së¶~÷¯ð[噈 .$“Ngœs|R·‰“ú¸ítÒ>Ðŭ"‘²âüúîbàÅ”í¤öƒ@\‹½|»€<ð/ÏS •éó$Ó‘Òœ¯¶gâü3´}s&¹ÏÒwZ{}}wöî£Jγ(³±=¿Û æJ#‘¦òünýãâýŸ/¸»º½XÆF,lt±4V,¾¾¾ù@5ý¼ÿþæãõ7¿½¼Hôâîúûª¾½úxu{uóþêb)S#a|Ì3œðñúÛ+*}s{ùÝw—·ÿ¹ûËÙÕ]ØËp¿R(ÜÈÏg?þGœ¯aÛ9‘ÊRs~„É,‹Ï·gÚ¨Èh¥|MuöéìoaÂA«:Ç?mÒÈÄÚž/Ž”QzžË"¸¶L4¬¤¡ä¹Ë9.û^ÈåuݶÅjY5ÍOy[®‹é¶¥U0¹UçùŸQzÍHX%vLÃ?Šx¯ãE[t_ ʵ‰2‰“$OÖŽè8ñvû ™.šGèÛÒ:ÝCA…Ǽ*×y×ìéóXvTÊ™¢¼êŠ}w®¿\l‹î¡Yó$M?lj
-÷‡²ê–%­‹M~¨:ú€“<¸c„õ7¨ XI'…^p[ìêäÜue¾±¶)t £óé•Lyï9hIk¡˜WMýÙ÷s–+¹{Ø~±ê ¢ ½åxûf‘´Æþ&·dDbç‡+9›??Àú£©çNOŽÄ‚yѱ[Ï  uÝt=#oô’H„CÜ95A]òƒîõ
-Zˆ­Pp³ÃoÛ‘:µÞŽÿ^‡c§ç"®˜Wz¤‰Š”ÔÞÜ—õ:‚éÛ™ýƒ“äèYôÕ€ˆ,
-¤c*|oÚnYŽ¤ÆÓ³c'þÐu»öËwïŽÇ#î.*ÛUDZùù]ÛT´yí»uõHäÈ‘ÔZ%Bzzþ8 âxŸYtëHd™¢ð€š:÷¥¿>ÂÈåp¨ F<_ ùÓtŒ&ArI6’„b¯‘%Cpq‡¼@D!Å#‰˜Ô>b¸¯ŠmK]ʹs•ЪPæ-çj£,–CÓ³:ã‹ nšC^¬W*¨K>t'‰„?>¯Ú†û6Û]Iº†ÔÖTT|ÄQ°D1€Ü×졈€ÛvÌO[ˆÛìX×n‹ê©tŽ7± ‡¼4–Î$†|Ô§‚ÇgÛ­CÇè°ÒxñÐáö–sMÎËѸŸ^çö&Äiñë¶>ÑÒsÀa9˜ß!Š!}ÌQÜã‰ÄM·Ð}R:¬Hã OÀ8?ÜÃÌÔÈÀÊD#¤:Ü›ï﮾œÙ6ìÇXó†M[í7ÝÔ• RçàZ*®Š}GQ |„(pEßN²]ihu¦*au$ã€7ßDƒ†bÓ´¯â ˆqP@ÆIÇ8øÀ˜JÒw&qj"0º§a>h
-†:Pçý–Á°4Ÿã€ žp¼íi6@Ⱦ_²ž¥š8Ÿ£-xìØÆ/'}†½N'}B¯øØb{_,¡|Ø?Ïü¤I”é8y™ŒÐk†ŽFÍb0€:>¡„mP ãdñPûܱnÅ–*åêŠH-•óá×1[rž‚ŽgÐÃíÌŸFì£Êϵ;4ø&É‚HרylëR 8IǾԇ#ˆ
-jc/ÇOÅœ¬Kà€™DO‚è36 ™1é´9•c´š
-¯ÖPÊW«bç,'à•º=û–\ìŸ:{ä»%Ù€gÞ 1¿çX(0´±|=.‘3›v«†N*úNJ‘Ø…\xl,œA™„„!Çè4ßí*mÀ#VÍ‘œ‘æˆ €E‡¢€K´åT{
-pÍG’³ó(*m~oì˼XÒ|Õ•Åi[(`||êš!ØÂA¯l¡ïŤ[ýÌöûL–%//zͬ;Öö@Ñ48!vû«¤x@µ=¹ÜȪkgsG2j©^³¨<‰
-ðaݵó(Zšî¼|ÿ­Wfd4®±.ºb¿-ë‚×怛ü¬D“g)¶äüØ€G÷fâþ‰Z\V„¯Š (ÇÚ°€Cîà®7“ƒ
-v› gê]^¾}á6AZ€"‰Šƒ¾=}õêuO¥eŽÖ%©ßpÆ
-eb^;ã4²·?;d—Yw7鋇GIl“€q‚™9ã Ÿ¨áÓ%ïSüªXùu}Ä õ„ƒ1c„½‰”l‰à¸¾{Zè S@>ãƒ.§I¡#Õ—ƒÛÈWåá7‹Cl Diú;ÄÁåeS— T.¦«èzø Nª,Q›ú1jC¥Ð )5]ãb*¬"3Œ%VIhoŽhÞ°Ž5Ví©br/øÅU›)Žü
-³øî’¿-æüì³·ˆg
-¥iÈýáÕŽð‚/;ܳ oR¡éÃ÷C:ROG²ð†˜6N’hš·*ëU³ à5!@ÁQj§O>Hoo?]ÓŽ£ÐàpÏ^õaê>~ŠÍèùXpÈ$?Ñ©÷Þh•šËÿŠ`¾ÿï·àýCy Ž=MO\¢)a£0‚'
-9n²)åì¢Iãd†ôÿÎxendstream
+xÚ¥]sÛ¸ñÝ¿Â}:y&B€
+.pQ¯Öy[ÞFìW_ìÓÈïó†[Õ]{ÏÓõ‚~µzEƒ4‰ÇcyiÏ«9K›÷Ëٺذ ?\ð+‰Q£ÄŸÏçe[ÖU¾\î€UÊOrüq"ý¡Ø4Í_}±âüúË™W“sù30×Ëå’F·­Íèý¼-æ´°¨74hï¤Ï^ªé—Vê‡rΠ9ͯòõº¬î!­ºSIáQáT´G’ 3U¾BQà0l—˜=ô¬ÞMͺ®æ´"ù<=ÿþúiDÛ¦ƒmv kÊ?ùùÅçóO—Mà=è³ìéóÍóª±é´)6Às†îk¿E#ÑÞB`ý1FéÁجaB8««6ŸµcSaÓL24)½% âï¶Á#àù„¿Íº˜•‹OÞ3òFA‡ûK|˜0&e…A$(<­ˆï  §2MEª2™C~U­a[¾þ² å$.zhŠ¶Í;+Ì[ú%b`ðP4zÍ&·FÅo¢1>Ë6¨êvl§š½E¾7>xg:TïàNò¦lF­ð2ŸÝÈS;ÌT֗爕.Õ Ôl×ëzÓ6lË@šÖñ¨ùrdo…Î
+±95±pŠçõ*Göà¹a±IÂzýˆî ç(RãÔ†&Vug†ðt´ÎFE«óæ-Ìúyßcö
+ƒ²iMôsÅ·Ùr;/Æ”8˜%öý`V× S…q a–ãv¼õ‚égY6-AÇ…Ö‘@S ¤ìõ”BÔ¡æ ǤÌœ£œ2”w‹`N å‚PÏådGhù†*ž£Ç(|œBáÿÀ›’,qt œàMÌõ> fòFÄ`TÁ2ZM0á~î–w¤ «Ý“›Ä”c'hèw8ïuð™Èdâ¾Gtê#Ü‘¥ó–UÁƪµ‰M|7‡µÏ©§‘"K•étˆkûG½¹WÆö3/DŸ/´oKÞgzþ
+§ƒùÃ4x8PæŠ/”!¼âÔ&/—”Žâ÷Œ‰ýl“·ÆåžÎÒâyXã'ïvÄ—k¡\F_â#JγwC¦Cõ2'œ&‚¥"Ô‚Û4+3?Þ¼aYÜ<zV¨]ôݶK„vvOÇ—]­‘Ö’óQzƒ9#}ä ’?à ‚m>ÃmÌTAURg²ƒL•Ò¿z4ÏÉÚ‘dY ›b¶Ý4ÓLëj¹KÛÈë¼ ^1‡SÙqx°…vBYÉ]1–à
+¢%Îâ.&É®¶á-ÙÍÃB 4ÌÝ3Á{=RÑö ád¸N³l‹MòzãLfÇXí•~BåBänFN™j‘BÚÆ'¨êq5‚‘híIŠ œE¬·6JêvSä¿O!ckŠÙ˜œ$¤åYOLJ&$&Œ‹)PíºçÅ”‰D›˜_tæ¸Ç^LøÈ¡G&A8(C¹ÒFOqG&{T¬÷ÀkŒ0Žù²œcEÏóõvS7’Ê ˆl–o©{Å®ùõò‚¦E`x^€ãÚÒ樠p%Ôá}òÀ4Ks«¾rã<UVaO+{V+Rá\yúkbvYÔ:˜“˜¤¥Ñ¥ÂÒûŸût¸HG6‰v5­Ê2aÜÐO”Õ¬^uÉ+ZB—
+z;€¤_ƒ
+Òëë¯W›aÚܳgû2u,àüb_mL§6ý€LúíŒt`y™p
+ƒ¦N„K2ʇfð¾M`ãÅLzéèá_ô#“×î-¡8‘Ö½–6Nd8ñZ*~þ÷ÛèJ)½Ö½J)
+%5ˆø©Âdªc‰š^¢ãàà·ã[€¬Çü_ˆÐ]£±ª§›"ÊéÐj‘ù®×ˆÊãÌ“Êã…‘‰|YwŒM²¡î
+P´f¬u"ñZоÄN%¼r~ÀNDM”ÿ³À+|î| ¡¦Éœ~ N‘u ìcH=%µ™lv<TSÈše:d3x£n§½ƒÂÞX.艮´*€¢‚r`\­$d/Þ¿Ä`ºë7¬O´ áìœ0¯—yE!·¹§Ë‰9‘A¶ôjÔ^¤Ðºkß ~ïûKê(ÃÎz沯ÀaGÖæ 7ó@™3!µ=èPt¾”Îõœ=Ä&v|ÎÄpŽÃX³áDdè9jë4ÛÛUÙ†k|í¯%MÜqôPòÔ|—W+"#ªö›½¿ü9p‚ÑPº’dWĆÀj½,VÙƒõ„HõD¶+µDA¦Ïg»}¨§³Ý*ÞPN›øÚ
+Ý’zgØÚ=Ôn*¾éŠD™î66~«`é–‡;â‹mö<Gîrgßõçåµá3‰cÎBÚ­t÷j½õÆÂJoŸÃŽíé1äxs¨u¿„P66Ž#h’¤®·Ë˜¤ÂiÝ]2¶X¶qI™À6‡e1˜ÚxÃ|PèÆ*çz:çºNÝP+-^zÆàÿ÷ðbÛe¾§—>ë}ÂNËMVeU®‚êÁCŸyøÐeÞ9ªBÊ
+ òßHÀˆ= ¤[¾f¬ÚØã‚b!5p02’íêô-Kcs†¡Ã¢FåiXÓñæ¶B&3GbÿMì°ËÁù´Thìhá–(ͧŽ¶"g‹Óãz!3üx@ÊžÌ ù3¢ªsNö¿ ±ðÓ70#MÙ*ŸNÔ›j>ÛŸc¬¿™†
+ çŒ°“+Ux/^.ÊÉ|»ZsœK ÞÕ»£€VÃ{ž®7†&öÅ𦯻î5ÑÆLU ç»>aYŒo$Ë…Ô·Oð¦ëk[txás(4˜šN¥9µFhØþùJ¸ƒžîÁÃÅ!ÎAL×ÅQÐÔÖ‚0|Ö£å(du0ÏSp€©ë¾}}ˆ÷*z´”t÷@ÿ÷—‰ûÏ6!µ‚’ó‰Ê]e¿åБ¨ðÑfrœ]ð'ŒÇ¤ÿîG²úendstream
endobj
-1676 0 obj <<
+1696 0 obj <<
/Type /Page
-/Contents 1677 0 R
-/Resources 1675 0 R
+/Contents 1697 0 R
+/Resources 1695 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1655 0 R
-/Annots [ 1679 0 R ]
+/Parent 1701 0 R
+/Annots [ 1699 0 R 1700 0 R ]
>> endobj
-1679 0 obj <<
+1699 0 obj <<
/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [278.4002 570.2936 280.3928 582.3532]
-/Subtype/Link/A<</Type/Action/S/URI/URI()>>
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [406.7896 280.3845 476.0457 292.4442]
+/Subtype /Link
+/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1678 0 obj <<
-/D [1676 0 R /XYZ 85.0394 794.5015 null]
+1700 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [303.3452 64.1455 367.0359 73.5749]
+/Subtype /Link
+/A << /S /GoTo /D (statsfile) >>
>> endobj
-1675 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F41 1218 0 R /F11 1451 0 R >>
+1698 0 obj <<
+/D [1696 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1695 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1682 0 obj <<
-/Length 3076
+1704 0 obj <<
+/Length 3375
/Filter /FlateDecode
>>
stream
-xÚÍZÝsÛ¸÷_¡><"ø"
-™1-¹œXm™±–,˜ÏVç‰á|ºYÌD&Ýü›.‚¿t¯™I&Œ{)L°8ðRÈpÿŸ×h P)‘Še¸{?¯£‰ÁèWWWÙ›W¯^f&®‚3@'¹$B°,M¥Ÿ7[•EµmÚäÕÓÁZý9ëüþ¾˜¦ü!ìêõsÈÅÇÙj7/"új‡É¯^-àï‡?ÿ_÷d\±f·X”ã\bIF·Mó_^ÉþÁ%`i+­‚9)ãV©úÂ0€¦oêzUäôýý¶¬«æ
-´\#È>žUÆúÆ@…· ² v}Vð^äYžH³}q–eJÚÀóâ<QNL·ËLªR3¥ ™NgyEÄmA×|>GÜyrK×͹›îªm¹.húC™œ¬È8ãZé°è¦šÏZ‰¸àˆšÎ=ÓqF½!þy±*¶Q‡ñµ`¢PFô—"ræVfDxD•²Ìê,ÈÈ©ŸÞ, BÞ¼Xä»Õ–nÊfä,Œ_. ó«zì(‚"q‰c0Ö3­{ÅÓ &áÝv™Tçõ:/«K1 vjí–épñ!~Ó\êÁê£ð͘U­ÅO¡×õÐ+[ôr‡Ô$ œHm#$..Æä:–YnK„7·x²þš¯ó§@7Å–«+¸þûwïß]¼½¦»Í¹pÓ¢¹‡¸T4AÁ⡼傮¨¨Ò›‡bÓ®æ¡*´`Òº½˜YÕ7—A*Ûî =…;8Çz
- pÊò¡
-o˜ªfù¶Hê*)>ÂŽr•e
-ªÓ:´\#J ö«%ÓNf Å á,Yû„Môcîœq<2<ê
-TG,ˆîšÈ¢ÊoW!
-Ï–ÅìWÜ-0Kø³-Öõæ‰Ø¡Xø5.¤£|<´Ç”áÌ!‡.Êãò®ªƒ[@Ä4ÐßO^…]Ä`ô}±µÖûó¼âÍq<hÀ–2ö<ô¸Nà!rùÒ±X7[Ͷœ–-βÓË·\#ë 
-%ÁÔ÷tð_VöNÂó÷Ñøù]¤4ŠYë>³‹œ$Ò¦ÐL)¬gB¡B¬íÎ!¡»ØwuAr¿!–Ìé,6´m哹PKc8 ÃÐmA×½ í(Å„è5¢Jê ~l»æ‡²xÑD¦Lp—ö
-¬y}¢+½y1e-“F?ïøY¡mpcÉ ‚épÂ]7D¶è5 *¿Ã·›c«s¦œ6ƒÕCnTÐEÙlÿü}Þ4wÆ|-eR¥bOCÍ[½´èôÒ¼Õ‹žP ­ù~¹çRüÖ]‡ƒÄÔ‚˜€Çö
-s ÝkSð¦â´Ãì\ôw$²Cq,ª†ôj8’Í æ„V-¼…òÉFG'·Ž‰7¡«äGÜMiÇRןänI;iØuŽ÷¢{qvhÜ4eÎe±*=Í”RvûÏ]²Ì¼lðasX¸XÆ¿³˜õà5E¦àЙƒH—Ÿôõ[Y(GEš ¿~ÿ¾YQ^ì=ªÍã +qÆPT÷”@ƒ~Íù™e”ÝD*ÊzxßþÔs_±éô´™Ì&%£#\Â*{ÀÕųþ¡h+ñsݤ¯ÿÿf4¾Vw.û­¬ ”ørüÕUkdÍO9ùžPˆˆü½B?®@áŒo–Ç¡ý vDAÔ¨ñ:µ¾¬í¾(B±iÆ=c<éð—)úÄë5üˆÔUr­y:‹=~Ùo-ÕSâ+6I©æSá¯+´“§«…¡µF`uÊZ==¾bkqÎ 7úkqpºL=“ðŸÅÖ '$5Ò¯ÛXÎ1“
-uÚV™„úÍfÏ$ð#¶ú„xÕSâëµ”Å/Fœ¶”ãLºÐ6†’ù÷ì„'ö”ùRë~±÷ÿ(‚ð³‚3ʘB~½á“gõS¨ØýŠS[¨þœ/”¤…2Ä)‰¿"Òñ‡lüðƒWøEcàê©þ_ì¶Aendstream
+xÚÍZYsã6~÷¯Ð[äª!qÔ>9‰ujdzqœÚM%y $Úâ%:"eGûë·‰’<Ù©Ú)=  5€F£¯A² …›˜”PaåD[IRÊÒÉ|uA'Oðßw,ð$‘)és}ýpñ—¡'–XÅÕäá±7—!Ô6yXü2ýæoWÿx¸¾¿LxJ§Š\&©¢Ó¯oï¾õ=Ö7ß|¸»¹ýî§û«K-§·î|÷ýõÍõýõÝ7×— 3)ƒñ<ÌpdÀÍí߯=õÝýÕû÷W÷—¿=|qýÐ_Fnä÷‹_~£“lûû J„5éä(aÖòÉêB¦‚¤RˆØS^üxñC;aï_7tL©0$5\(óžZª‰N-Q‚ §À›js™)§³lþñ5Û\23]øžyµzΚbV”E³ó]¯E³ôTžmÊ"c_òM]TëÚ?U¾õÇ€”}­2Óf™£Æ@.Ö“‹[NˆO@ÿ©ÖyR7°pÝó:ð÷÷¡4I­¿zn`é qˆ¬¬+9e)á˜0Flšr7(›ÏóçÆÏ-Monzæ© sïò±õ9%’ ×ߌLk•F–u52Kdz¼ófõº,æKO.³—ÜS¨5GÔÙ*Pù#žÓc>oüsV !41”Ù°Äã¶,Çv£ˆ¤,ðdëÅØD–ˆTG…7pØùØD–£ípCΞòú$-^òrwÉ›’#HãÄr0ÏDÂXðotI¦¥<»ªÊçþàN¾>ðAJh
+ÕÖD).ÇcN`Jú\ÞeØHÌi¹œ’ʲzMÖùk‚¶z°>SœÐÈÓ´\# ̬]«‡"Ü>ŽX:â¤í2M¬à¦;$aúMª¦~C@¦Á—€˜å¾Í‹|ÈÆ·›K3Ý®›b•ûá/Å%›f#§Ë,è[¶²mÖ‹y;)®9æåpôVö¼Ìñ/ò2o¢/ÅØZ0 ÅúK¹H ©Sj `Â#ˆ”X-£=CbŒN¢/.òÇl[÷+ÆÜO¹åÒ·Ç
+4sªñx]›•¯Ù.ÐuÞøÅ\}ûáýÕíŠqâS^ó—<ð¾u‘'©óÍ‹K¦~5g¯L2µÑÑ^Y°#´9c!…5[ˆD»ð'Ym@`ð?Œ´`®’ë`®ðg®ÆŒ›+3œh“ª·Ûë_£¶Q?¸Hl3ßÌ—Ùú)÷K>:…T+ÿO
+¨*9ÎíжÆì$R¦yl×e^Óù*YõqõÜä⫆øÐ5PKÏæ;Ë«V«ÖRËb=¯W†Ì³:ÆÁÑíA" BRþ iû¨ÝK(ð…
+‡4@j]Ž£˜ÄK‡à¯^èB°­×®ëÙ=Êù§`°ÿj=‡56¿ÃL7Æ!‚o +«ï¨«Èëª5 ŠÐ:ƒ@b™=?çë0'ú>®– ÷â©péÜŸOq™ÍKV¾ó•[©<B³ýÚÃoÝ~™g›fæ™Ä™Æ‚¯ &•ªw+á–XVÏ9^cìüãb» iŸÇІbût ÐeÖbN1øPoŸŸC>¯óˆ¹Ái¹Ö{·Euï]ðjkH¬`VGq°²wŽ¿oŸ^Jr%ˆÖæ<4gýØ:I¸N¡–¾Bèõ@,-щ’&&.TîWÅœiÓ½Ë7nMÀÒJ§bèšå¾ÝËÓÆ'šÀFDI ‘]éüRä¯c÷M)aÔ¤û7Wû›2¢EçG
+}^ÑhŸˆ òø›+ÛmeIÄI7Òø¶zñ± Š‡4%Þi÷íhS,°ãSYÍZè‹Zj©ßpB™áy„ÓgÏJðáéc¥%L
+í™eDèv®«Õ0â%P(u6VˆTÇ*ƒXrt>i O¥Þ‹¶VÁ+®$¶èo\ÅD8 œ& ÅûÅÚs…WÃB[7ÛY7
+S®JƒæŒˆ´w@7a/Ãí ðÝOÛ2 £~å\v’! rü•o‘#ð‚‰û ’±s k.ƒ%+=÷Þ.öÁƒOç@Tk—É
+²
+KzÄÝ„ÄÍ-ø{“»%í Á¦{Ž÷®»8;TnšclD¥'ŒDB±-ôÐHpÚoëeEw†õ!p?ÐŒ»³¨õಂqØ hÍSE(‡C}û~¡2¼Ùé¿ëÿs£¢ ½à{T?ŽÂ\ŒG1œ*i7@¤2Ǿ$àX&Á<\j¢¢ ÇJÞU@ÕÂ6™žÖ´ LxCJÐ’Žp1-ôWÒú百¿ƒÿM+¨ÉtÌNE€gøÖvô«S´H‰²Öž¼4d,:ÀÆw,€ŸñŽ)1j_˜!ÁÂ(L5®Àžd_²9pâàr(¡¥Ô'.Ûð}RêZuZÛ¾ìï´Õãójëóú5}гÖóhcÕiè0Ô׈qÔW'Èl\ 0Ä8sF_01BÊ3
endobj
-1681 0 obj <<
+1703 0 obj <<
/Type /Page
-/Contents 1682 0 R
-/Resources 1680 0 R
+/Contents 1704 0 R
+/Resources 1702 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1686 0 R
+/Parent 1701 0 R
>> endobj
-1683 0 obj <<
-/D [1681 0 R /XYZ 56.6929 794.5015 null]
+1705 0 obj <<
+/D [1703 0 R /XYZ 85.0394 794.5015 null]
>> endobj
474 0 obj <<
-/D [1681 0 R /XYZ 56.6929 636.8504 null]
+/D [1703 0 R /XYZ 85.0394 729.6823 null]
>> endobj
-1370 0 obj <<
-/D [1681 0 R /XYZ 56.6929 609.3387 null]
+1388 0 obj <<
+/D [1703 0 R /XYZ 85.0394 704.98 null]
>> endobj
-1684 0 obj <<
-/D [1681 0 R /XYZ 56.6929 172.736 null]
+1706 0 obj <<
+/D [1703 0 R /XYZ 85.0394 268.3773 null]
>> endobj
-1685 0 obj <<
-/D [1681 0 R /XYZ 56.6929 160.7808 null]
+1707 0 obj <<
+/D [1703 0 R /XYZ 85.0394 256.4221 null]
>> endobj
-1680 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R >>
+1702 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1689 0 obj <<
-/Length 3726
+1710 0 obj <<
+/Length 3924
/Filter /FlateDecode
>>
stream
-xÚ­ZÝsã¶÷_á·È3' LŸ.ßÕž¯ñ9ÓI“<ÐeqŽ"‘:û×w @¤DÉÉ´ãñÀûõÛ%Å5‡?qm4ãÊ&×™M˜æB_ë+~ý c®„§™¢ùêûÇ«¿¼WÙµe6•éõãr°–aÜqý¸øeöîooÿùxûp3—šÏRv3×)Ÿ}wÿõXúy÷éþý݇ŸÞÞdÉìñîÓ=u?ܾ¿}¸½w{3F ˜/ý
-g&¼¿ûÇ-µ><¼ýøñíÃÍo¿º}ŒgžWp…ùýê—ßøõŽý÷+Δ5úzœ kåõú*ÑŠéD©ÐS_}¾ú1.8uS§îO
-ˤµÙõ\%̤°Æ€ê„Z!µQpÛÚ²TIo[ÊÁm í$½ÎTIânû¾íK:¿Ê{j5ív×Ô¾ÿôx÷þgjo¶7ÂÌڢ캪y¦¾ª süä|‰D˲èËõ<½à3bÀŒL4KlšÁ E•×»§2--3Yf<;‘g\ƒâdÎdD2­žh>¤¢ûSÚ¨pÇeþ¥œW¿ïÊíËñÞB&RÒÅÍ#ÕÄî#é$Š -Æ»ß5p…Fõ7É̼_›€´ÜÍÃX»é«¶¡Ñ²ÉŸjwï0ÐUë]÷$*xîW%QµO][—NîÐýÃýgjÐ!Eÿ²ñ£w?þ¶¨²ÙÏ7BÀˆ æ·*¨˜äN+˜ÕZ:æ›òk¹%X´¥×“Ázî90Ù6ge›¦–e™’—e;¤:/ÛHåd[öÅjþ\ïÊSÑr˜ššË{Gª‰ÍG¢U oxÜý‘$˜šƒÓlû¼ŒàÂUªH Û_<´@œµ$f¸“«2*õæ28à<å|öR851“2¥Ñ¹9E¾ëœÁ¤1ÀUWnI–ØÙÒoÞ÷åzÓAèt;’J@73ÊŽu‚x‘ÖÌœ/)»vçŨ·hÝΪ§ßEµh¾óíUþÕOٯʆZEÛtýöÆÌv…×zÎ
-Æ­ûôi¶%g‰Œv‡"œØÞB,ÍB,Ý. ©¸™#œS—%™‰w5m \¿¶ž¤‚øVæ‹óF ,Þ|) ©.e rro»~Þõ€Óº¾*N232ir™H5ÁÁØ(Ai–Yp2ºCttPz<†Á_ ¿”åÆ»]AQ~gpDËvë§~%ð M<ì8%E`,†ã—
-˜ÚhYÛ¼ ‹
-NÎ7D½?[÷†žw]9U8€
-œH¨l¶íWÀФ°§VV2Iú:௞D&L¥ /ÛÛ€ê‚Å*gsUS­óz¾õYÆ©wÍ€CÄ—YˆT<ŒƒoÊ bÀwˉ˳€3MúB¹„r¡³tÆ Cn­gбm(Fèt”WuDâ}¬xVX¡ªkšÑ6õ õA&GÓlèHË廹‡é€ñ¬=ªRô«€8® ðžr0%ÆÉ"¦”,*’ÅŽúý•‹ab‹º©ýû®:d@ò+×¼dÏÎÆÐÓÔ峫8ÕWÌ
-Ÿ]† Ô£»‚©‚MÙä!]ç/1¼PÉîk¬ñ•!'Ù.±Ê×ÁR—G^Þϼš¢ŒG‚=(®“ÿCž¡2Î4W¯„¹!Õy³‹TÎìàDßyá²ÆÓ'˜²R_f RMp0:lš2•)3fÁKÌjxЦaÓ« «òCÞÕCˉÓuxÌëÚ°I?ñ:*Y 7Їꉎ×@”ïîß~¼%cÌ(‘˜A uìÔà¤"}­ZªäQ·Ó(è&‚*4B€°f‘û5œ DX£àuüÍ>m”×ûü¥ kl+J½p¤l–­¯#uG»ŽtT¸q…¢ˆŸÚ~5†`ëÀ¶/»@’-#i,Ô,^àf«ÂG« øÌçÏ)²HYª¬}E‘T9P‘uõ˜7ë¯,Z]Þ7RMl<6ÖŒ¥6MÇ;O ÁÄ
-]4¸}¾¦ÆÃP.~>œ0!—“u‘¯Ï¡ž‰¼%LœTç‡Ùš7§Õ¹@õ
-§«y
-ÃÕ‰·"XI¥MÔ‘csù[á0¹RI()&Ñ `ûPZL°nÛôúÇ’¢„b4õó§·Ôøè\kº õ"¨7¢“ÆÏw‡‡_W7<l×ÑC<üÑN§
-CÌ
-G°»½žHŸ1aW”tº(¾ì•ÉÏ„op ›—ß6uUTý—IÆŒäÙŸà2ð&#¿J¾'tŒå¥‹Á#ðR{à¤Mi‚æ‰RØ]¦3êQåœ@TÕI6ÈŽÑMßRb” czÞzÄÁñš\´ŒhX“oöê…EýLÈ ^Ö#¢É”³TêdgΨq1Òe8(Àˆ±—D­§’~]Ù1š±ÇZ80m\XBÄô›¸€2ß4ÓJN°æäR^,þ*wدªbEÍ«,®…ïºð ûv N¦»Ä $ìŠñ$㸪£siìùëJ3ô1‹è¶eJu˜¼owõ‚š>ý2Æ][¹Ä/rzgl [Âp¿Û6~
-U˜ý°am/¬Í¬ò£•ß0¾}„±®”ÚÅÅÖÓ#C*¶y·: »D†…(þJItHuvEªƒÎûvÞµùiA_æssyûH5±ÿ¸l˜@2b`Òz \—Á:ú6|¯%¹ñŸo@£X•ÅlZ¡q0¾Vë¨ÃAdnÙÃïÃCWö4;ÆTDèb"6\Ld~¶ûÞ„â¾K‡ø,_¦ª_£ ï'DA•‡ýtŽ,0pzyȤç>.cãìÿôp÷áîc4=ç~ñªoÖí6›–Ô×oi¿¢m° HÙ—TÁtã²OÊTJ‰’J=ƒ*›aJ¶vï:°ÛǸPðÓ³Ïíº‚’Šv¶j÷¥OÕ}ON3QÓ± K×øòÊÇxt';lú»F¸E¯±xU-
-Ó!mŒÔÎ&ð“4´‰óþ‰
+xÚ­]sÛ¸ñÝ¿BoGÏD<|ü˜>årNê›Æimw:íÝ=Ð%qB“ŠHEq}w± ˆ¤(ù2×ñx´Ø°ß€œ ø“3‡q¦²Y’E¡ÒÌÏWb¶†¾W’qæiÞÇúéñêÇ÷:™ea«xö¸êÍ•†"Måìqùk‡*¼†DðîÓÝûÛÿ¼{DÁãí§»ë¹2"xû·‚>Ü¿ýøñíýõ\¦Fïþúöï7÷Ôó?ÝÞýL-ýœ™ôþæýÍýÍÝ»›ëß¹ºyôké¯W
+ ùrõëïb¶„eÿr%B¥fv€Ê,S³ç«ÈèÐDZ»–êêáê~Â^¯:µ‘IC£¢x6×Q˜ýé]–a"% %& c­´ße%§vÙaá.¯Šn±™¯«}1^°*Œ¬´?ë m5A\õˆK‘„±
+ò%Æ œÇB/EKƒì¥q¨ ž…³È÷m±$ݦ ®Úb÷µØqcC¿y×ÏÛŽ\£¥ˆ4fئä_Ê03FÙÙ‰•¥ÁîZ¦AÑ6{ ,­‹Æþ.[j,;ú]–Ëú†7ùWrØ5A‹¦n»Ýuì]Y¯©‘Ö
+3"zÐã+F1Õð,öžüY_«
+:Ãr´ª‚Ù´ÐÁb“×À 2,ÑsÍÆ„*Ž¢™÷yµ­IPçn=#à¾oSþ¼?`¨œÌ‹|=¸’&òþ}Ì äÝT€ïO~"ëNgãØ;ŠSòÈFïÀDÏ;b˜ ¨»»ïÂÓi飂 ÎI
+! …ÀM"è© _[~ôZÌqvLë–ùU‰çÅú“ ÷fB£µÛ ¬=Ùd+ÀZy
+‡M¹Ø¸À:‹…ð¶ !XßíÀÆ´—¸T݆ž£*°«’ÎUšß®8 ½ðxÑj«˜*&0øÐì«%œx¥©Ý:;s±@›nËgðiãJèîö»š‡P¥™»)ÐÅfèrɽ%ô÷Ð×V¡¶~r+5Äô`µ‹]ÞnΆ\*N¯ËúXçC.uÃy×ÌÛ&?-ŒFa* \¸HÞcMÐê[&©I† Lj/ôG™¼{ зØÅgx¯¥DJ÷Z,6Åâ3‚ÇÏØéoÖZj°ñ±H6¬‡ßûû¶èht¾ÆêS7B´>ëCIhEþomÀ?«Qi>§Þ…€sDA%Çü´ï,0ú·‚yLó
+ó}•D›,ØãËÕ5$àûËž.o2å+lEÛµ„ÅÁ?mÀŸWÔ„ÏCÔ±ÌC¸Ìˆ”üó–LrÅD‘­ÄNÂ’ÇIÍî3Íøâiºd2(ÿ Š÷d)yÝ,"rv2â¥I)QéUf#ZÛ1XM`uºŽþVD¼i.C¿R,6ÒKèfÃ*š:_¾PÏgzÊÒçŠYeC#u@ÑóX™x•{@Ã!|çýæ„8ù
+‚µ(ú3wwl´ ±8<¡ÚÂOñ§Ÿ”ßÛG ¤é™Xr
endobj
-1688 0 obj <<
+1709 0 obj <<
/Type /Page
-/Contents 1689 0 R
-/Resources 1687 0 R
+/Contents 1710 0 R
+/Resources 1708 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1686 0 R
-/Annots [ 1691 0 R ]
+/Parent 1701 0 R
+/Annots [ 1712 0 R ]
>> endobj
-1691 0 obj <<
+1712 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [182.6146 300.8791 231.8861 312.9387]
+/Rect [154.2681 390.6622 203.5396 402.7219]
/Subtype /Link
/A << /S /GoTo /D (notify) >>
>> endobj
-1690 0 obj <<
-/D [1688 0 R /XYZ 85.0394 794.5015 null]
+1711 0 obj <<
+/D [1709 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1687 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F48 1238 0 R /F39 1161 0 R >>
+1708 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F48 1253 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1694 0 obj <<
-/Length 3742
+1715 0 obj <<
+/Length 3535
/Filter /FlateDecode
>>
stream
-xÚ­]sã¶ñÝ¿Bo¥gŽñA|tîìÔž¯µi:IhŠ²9G‘ŠHYq}w±
-o¿Ü]†"Ž‚›Û^Sí‡û«ÏŸ¯î/Cnb|üûÕ¿¯ïiH»9¾¿½ûD=)'&½¿¾¹¾¿¾ûx}ùëã?.®ûµ ×Ë#‰ ùíâç_£Å–ý‹ˆÉÔÄ‹=4"ÆÓT,Ö*–,VRúžêâáâßý„ƒQûé,ÿxÄ„Ôb†B h8‹Ó4^$qÊ´Ò20«aI2ŠÕ%7ÁªÈ;lë YQ^•Eíú~Û—<Ø–E ü’‘>fùKY?ä:{£JÛ•UåfÉóÝ–z³Ö•5 ÆA÷RÐ@[l_ ø8þ7÷MYwŶÎ*j5›b›ueSÀv´»ü7¸rÎÒ8´´–vëîËãíÍ©ž-—[Ä[´n°jš¯»]‚‡¢ppUÛàœÀB>`!ך¥F(@…VE—¿„Ïð…`‡ìV†)n¸Ížš×‚Mä…³„s½H8Ì+sb (BÑöò9ýðPˆv»Ê…ŒLؽm
-~Œó„E\Ëóè{¨üÃõr¼O=&à¡è:+"2J`ËÖÕw•Ì Kt;Ž½í WEú Ø[Ià ól×KAâé%É!´e[ÔKªÝ=PIò7¶\¶ôiV5žè}Ù½Œ&N‚‡/W6þÖ
-aÈ…f\%éXWÍ–$«.žAx_½œÕí¾Øzñ{|qÝËb•íªŽe;Ã+JœðÔ‹WÝÌðÊã'‰ðy{ ÁŒ0ú[¬•4Öøšyk¡Œ0éøô\ô]s¹ªÿb<Uè© uÄ™ ê©ë9 V-a kb¡!1è¦]ëÝ€±VÜr#b±ìU÷Ëe¨yðÿE01ãléBó˜)­¢^ü¶à,Ri* hP·k=ðÀv|w»‹O ¬h1\”›8Îl¥Çª$ÁB+¹ÐB€AÆÙE5(‰ Þ.E®Q®7U±],]GM¥sfPK'[¯tÊ„IÍbÈÜ?·_6B§àóƒ«úsÒŠ”ƒŠ$À0$<9oãD³(æéyëØC!GÁd„å2Ü4M5±‘aI”Ä‹á´SÛ衦Øe:ÒDØP\èý£5‡¨âÍýY¯îÔ÷Ô6UÑ͹`›ŠµéÛIð’Uûì­õõªÉ³®pMðäÛ7ªÞ~r}+kÄšµû€
-dÍI¯«˜ÉHèwöe
-ö/eþBß¹  Xîà<°ÞP6dM
-–äI¶{IŸÎ
-n·6„8Äûý"¶„nÞéÀª¤Œ ä$¸Ùˆ7”‡G)S2±‘·Ïέß­‹‡‡ÌX—ɼ烯0œM¢s¡$ÈØ›!‚‰•ë¡Þ¡c:ÛlLè­¶J 8¬÷$C¨Ó¦½‡ê]îïàkŽ§îÅÜœG즈GÞ6ÕéI>FLÎV&iïl±Þ÷v¶©`’­NôñDÁ[³£ êÂ
-5Ô¬ôC¹,ÛìÉJ=4nº¹gTl²-ˆò®Ê¶4akØtl&žŒ<G ʨ8‡–›Ö)"Ç‘“²†cÇ:;ˆš/çÎĹun¶Ík¹<ìÕ±‚:£¼M…/õDáЬbA§ãLnøŒfyðp?#ÐdzÎè•`ÜS#Áúƒu‹GäL$­‡z‡Šélßjp¤6,VÑ7³¥‡¢É¼Æ(&'8@ñWz¨wh˜ÎvÞØÈõR¾clPgŒ‡šâqò ³½>‹½‡šA?öð NŸ#ü½
-oAŒ$¦ÂØ*Ë˪Ä3-µ«&[Ò Ì`ou “NñX£#”Cm7I¡âǻ۟¹oph[/YèѽÐþÀB(CPP빨ñ–†dÁå. ;såÝ#•viP~úò@•µ½R*ì“ n¸!¤¨|j0+5G%ÔNí?O(Ùùû_Ïì?ìªéS[ÎÒ¯ç;·„øIÌàØ•þA)¯d(…Ñ:\.B2påGLJºØWeís†Y¿½Ç¹Å</6°Óü•ÆòÈÍe7ËçšnMŠåi[
-‡£Óô[:€:cK=”½Œ[.K$)«ÂÕ¶Y‡Ù®{ùÐ_Ž†rlj™1¸¥DšóöP3$ŽO2–ù|L£O¥Êñ¯¥FÞÔdL¤ÒeYRL ½d¯¥=1âG+*Qãl kl¶hðò‰F°(ÆHo¸ëÞ+YŸ¢ÆwUÖà
-\Ó‡£‘¡<Ø•0ÚoòQ¤j;{ãA76‰ ý.mOÅœ`XVQš;¥$5.7j»|>Ý /< „RóæHUìhŸj7ξAßð{ã“üi`-ø/Çä¿ ¯mÖn´-»]æÄ>³1M]vùøî†`¾Üb&ÉÞ&Hzî
-q#g´
-¼›Ý^k³ÿ€ªIŸhÌwÛ–>˜d)œœØø±â°{å‡(iÛÅàQÅ€‡ÓeϧH˜´Ž“£pø >ÃókÕ<ÞÂì³mM±4Ö`ÿ²çbV˜ÎqCf¸ö'‚ùã&DºâÔK‚„qÝÛÇ,‡h’xÀ•U^ ¡B,SÂÅÖƒ‘¶ÎÕ~:RLå™tóÄ“g3…—®3'á¨
-ï<Uö­¸˜&ÜËéâÿ ëpendstream
+xÚ­]sÛ6òÝ¿BòLÄ
+7òçÙoijlûç³8R¹IgÏðG"Ïåls–¤*J¥<¤:»=ûw ØuS§ä—¤&Je¢g‹ägÔ´ã(NAh‹LH…9YŠ)!{,òn½”*6‹îekÅñ–E’FJËlÖ'<Z>`M¬/{ë‹6š­k»®¬Î*ÎæÝcÙr¯A^ÞJL€N¢LÇ)¬Š3_lK8ƒEdå6I8ÏeUÁe±o­_Åuô¼µ»'» º¶µõŠz×·ÔîÎ…™ÛeãÚUKS‹ªñL?—Ýã€p6¿ýzAhùÈ.ˆKêH$Y=åi*§kÀqÖWÛ‡¢+Ÿ,}uûlw-˜®ñüî‘Á+».öUGe;!+‘æQ&rÁ‚¨› Yùõ %i?T0= oò\ÿˆÅ+ãØL[| &""ëôuZ4/ZÜõ3†¤ž»…–*’¹}£ ’ÅM¦‘–I6Óé\¹Í^÷Ä‘êD8Ì8J•ô¦óõ|¡Åüþ—óË‘h€¨’©™i•Á¤ÔùåìÏ™ˆâ$‡%V¯ïv{‚¼¿ÚÈÙÇö4ëoËS^ôI»}é¡3ÁM $2ÐŽÛVƒ6‘™ù˹Œç–?ÊͶ²vÅ€šZ¦ÐËGÚOò,ÒJ«Y_¾MeÊ
+Ñ“/ÀƒãG‹÷q{êr[dP ¨Xœ¾ÝF•†ƒ5&(Rå+aJ"nmw‘bŒ¯tR2{÷–®Þvë£-O;\÷¸ñ=§#f…wýƒlÔ3ˆW¹Ó y,È¥ÜÔ˜$öaA/k—p‚›'þ¶÷ôîh¤o®J¥Ýœå VuÀ8hÅmõBpz À{;e.—UŽÃ<§ò#7PPúËÃNØ»8˜ˆ+:``è,nEÑòhÍÄûó 3 `0 w%iJ¹ `m³áѶìöMsÑ0ÏùUà8·îk(çËÞ'½Ã|¨æíÝ ¢U È“âöÀˆ´Dõ-íŽq*®|ì ñ?|t°M¦ê4A4 7ÆL4L¢d¢|Køa.&ÔV.HH}ª6ò_vÏc`.N‰Ú `›fU¢~-ß¿Âc"*¹ó# U~ÁqîªÍºG­çUÛ uBÝT<5%WFÚ«P£ERp‚†o|ë™Ø
+ëÎÈ¡qá FØ^ÖnÝE!÷[jC¥k0 a­Ä†$;j‰)@Ø6m[ºkEÛï[[·<äT5bC†8=U³5}÷j›Ê?`=S1‡½f_qwÎñ\¶6¸Ý%“à%Å*Ü
+ADзºy®fŸ\Ì(äŠý
+á"ê “ q>j÷Ê2ÌᑾQ9
+@®Š‘Zª©U¨Wup&#e¤:ù¾œà톯çgŒ–à`Ô•&Â9:+w’¸–`!À!‡µËáÚ¯’ŸÒa`,`€Ã¨V|å%¿Ž´œ—CÁRvƒçøá{Ødµè+n¥z!|*B…lt¶v¦‚_ŽoììÛ0Ží°Ü†Àd´y:¼ç¨”ò(Bi¢–a–š?•ö¹Wåö6ÑÁ©|ÛáeJa]j*]àÑnÂÐØ(DœD^sŸ²
+<rŠÃ/4Ðà™º{Ü ·vY®_Ø^'Vn.—û]K%™\45QŠ:. óÏBpIR;À‚•õp8[9°#^vTܧz­š‡ÁÛés±«©Z€ „¿âÁNÓí)i$&2Bû3Áôyj]ùÚo@²Hháãc±„z²¢êXö]6ñnY"¹ºî Vë©öäÈ1vL0dòM:Vè4Êo¹Èa•FÑ5ßö[ô¡
+5´„’½`jVDL:Õ
+¢?åTSnHÕ [š+”lÿ6$¡q1í5,üjpêÝŒᦤÝÛ‡[—i(õÔt›(’“‚O
+]ïɺ•ˆœûHß
endobj
-1693 0 obj <<
+1714 0 obj <<
/Type /Page
-/Contents 1694 0 R
-/Resources 1692 0 R
+/Contents 1715 0 R
+/Resources 1713 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1686 0 R
-/Annots [ 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R ]
->> endobj
-1696 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [180.4479 508.2615 244.1386 517.691]
-/Subtype /Link
-/A << /S /GoTo /D (statsfile) >>
+/Parent 1701 0 R
+/Annots [ 1717 0 R 1718 0 R 1719 0 R 1720 0 R ]
>> endobj
-1697 0 obj <<
+1717 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [265.4578 462.9269 326.6578 474.9865]
+/Rect [293.8042 549.7735 355.0043 561.8331]
/Subtype /Link
/A << /S /GoTo /D (server_statement_definition_and_usage) >>
>> endobj
-1698 0 obj <<
+1718 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [367.5441 462.9269 416.2908 474.9865]
+/Rect [395.8905 549.7735 444.6373 561.8331]
/Subtype /Link
/A << /S /GoTo /D (incremental_zone_transfers) >>
>> endobj
-1699 0 obj <<
+1719 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [280.9692 432.1776 342.1692 444.2372]
+/Rect [309.3157 518.1046 370.5157 530.1642]
/Subtype /Link
/A << /S /GoTo /D (server_statement_definition_and_usage) >>
>> endobj
-1700 0 obj <<
+1720 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [277.6219 401.4283 338.8219 413.4879]
+/Rect [305.9683 486.4356 367.1684 498.4953]
/Subtype /Link
/A << /S /GoTo /D (server_statement_definition_and_usage) >>
>> endobj
-1695 0 obj <<
-/D [1693 0 R /XYZ 56.6929 794.5015 null]
+1716 0 obj <<
+/D [1714 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1692 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F48 1238 0 R /F62 1361 0 R /F39 1161 0 R /F14 964 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1713 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F48 1253 0 R /F62 1379 0 R /F39 1173 0 R /F14 976 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1704 0 obj <<
-/Length 3806
+1724 0 obj <<
+/Length 3757
/Filter /FlateDecode
>>
stream
-xÚ¥Ërã6òî¯ðm媈K
-Bã…1R]}¹úÏ°àd”¦®ñ/4‰&:^a Ö*ÚAt‡©mˆEÖe7[g®šæ©?¶Ð ÓÍCß14«Ú†[ç½­y1Ëú‘Áý‘ÝÞÊŒº=Û2˜™ts¿/[*eõ¾í³ªzaà0±°myºQÉÆB„ÝgÏes’ɵ[¹Gß*å¥a¨éYßí›SÙe]ùl·M«ãEµöô ÔPNÀës—6ÆFÞœžwµm[6»%V–ï‘2l3×°U
-:P%ý¶·Þ@aâÜ Rø ñO«`ƒS•ÙÔÙÁ2`  ´ Àê¦Þ
-Uý©…Cщ
-›3Þ#`Á{2KSƒ';Ä?úÑÜ"”mÉÔä šªÇ›™‘”ƒ¡ô.ÜŸïù!xf°úž¯ýxÝÝ ÒvŠÅÞJ­¸û sȺ|¿=dÇ£-¶ 1' .aA†ö}/J‚ôm:¬B¦‚¦ýЋ¢ÈÌ)¹Û±LÉ”f/ ý@ú… [:áØKN%P“b’kHØÀ÷îÓs çD@Š€HPàØ|/-Dn‰ØãzaØú©*ÛŽäo«´†ÈÁ„sekç„ÜwZn…UJZCÑ‚ñ"‰#«îqÔ•æè¤ Î– °RHðŠ>gM­<7§'FgqoúZ02þ<ÙSm+§¸%c§d~I9rš´µ½Q›|
-¼ î&fX¢¼º‘¢8G)…®Q>pÊYæÖ.ƒH·Ô(ÜcìX”mÞô§ìÔ+&5 ´gT¾mR§X¯›Ô ŽŽ±ê80ÞfðÁó®fA‡
-QWMô6!Ö
-%3+/ÀöÎH`ôÈ%h3 ‡cz€dÏ )œ`—lIâ­”ç¸õ j:–Ù œÀîÚh4-̸ŽS/H#gÈ·[[ãnÛ]‰ŒÚ²Å4F{iš…ÁߊØéÈK “‡Ó¥ÁÆ}ÙBC^0x-=«GÁ8ç8ddÜ S•5†™DHwƒè¼øù¬ +ˆd'á»·Õq±›r$gŒ)±'Ö; q :µ;ÈÒä¡oò£ÍÞK¤€Çò™M)´Z<73<H4Â÷»_'¯Jp?2Ú×û/èÀˆì­l ¢e”‰‘<Y‘Ï:ÛÿŽÔ×vÞš {êûr`ºà/A¸‹@G¶³
-–(W£™ã¤ì4˜‰HEl&p´°»¬¯ºa³KI4*
-¤h¬Ïº‡¦¼Î«¾°b†B ÅÓxn‡€_nßÃe'ñÃŽ¬ŠçÓiäâlÎ(d†Æ;øã–Sî1¥B¼!‚Na+Kv&–z,dÃ*|4ÎZ;·ƒŽwlqùã±*—q$k—f¦tLÆhå¡èT,2»±ð5+ˆ­¬°„¿"ŸqªŒ\æÃÉfOÛ¢˯i„òâ!Ë×\T?e„ßغà7~cgà7¤úþd )D"“AíRV`_™~&›wmûÇGÛvõnå…Z/|79¯HÉ]J‡j à`ô=Ùv†¨LSéB`LQ¹có/K=XÎûç{ ² @ 7»&o*)QÈŽc8s
-àNÞ­%!Ä9t…o¦ZÑæ`ó}V—-…µ!ø5Ã-'s“4}ËmÙ€(52„µ5ì°Ð†NÉÿ[n‰¢Áॢ 3IEKYY¬dK_k¸Ì5=™ÔHI«ô¤œ
-m‰õ õи–x³é!Ò„’Oê`TèÀe€Ð @Ð!¾áz¢t@´Ó;€
-=+ÄKR6Of—âƒ+Ì–¹´«TN¶°uéü«ã´¿Æi_‰±d'¥s ÎL““ ‰È·…@EÓ Ñ íXIt`¶sÅ´˜¨–Šð\ɲuµ©æ@¬ˆ_ÌQËCâ ¤‹ïxÎà±VI'Y¹…I˜Ë× -Ž¤$C, v2Ђ¡¡ãÈÙé4.u€tOðE}P[®)]Sšáô- ]¼Ž¢Í$®fp#Á“Ð(ßÛüiQî[–UËñ…+%jð›€zI½šúMø¸C+ Ê¥¾Å1Îp)hUoWWÇÂjš¾6ݽy,öMNp%¶NÊÒKÛ¹bû†G­YõÔ¶NoFV¾­z´å³»—™r¿šüƒÛðT¬ÞÎý'H¯§þ ZþÉ1 ×Û °ÐÙÙ“­óËšª‚},~¾EË€tIÌ,šj_ψùex$˜§â)ÖøÍ›Á±V­…s˜JHfÂd|í
-é2„€s£(ÐòKUÃL4•Œ–G2`ò ?’P"Ï!U¨( Æ‘éâÐ L°Ð~BÍ[aÚDoJ0.'W{ä*›‹‡äÈDTLqúµ¸rXŸ8ÒÓ)éRí3éˆÆÑŽ}.AÝxHÈI\Ê€åÖ*ï+ÈöÎЖj›Ðgv¤›Q†ù­.§"f‡’s¯£ÈšCäÉÄ­¾2W „‘¨ºAÀ¶*pµ” $6þ£eà›ëƒÜqw‚myA
-_3®
-ö\Ρì:GSø͹n¹<n³ƒìƒ"ÑòĬ]dréøB$È"Ažc"«>á[ªÊ…ìo8V€Þ媃 é‰ µÒmøû Ã\gÆ)®dŒmàâ¢ò2g4\r;”+)†“â!h†pf?€4m×.õ\ô0íN–}ydžýóh9+õùeÃÙ2)‡›ÍûO?Ë
-µ@öÐЃ0´!Œlûƒµ²Oà ÿh"ˆÀà &hZW¢ì: >¬Ü½ªxšªNgn Š‡®Ek~Ñà K5ä")&\ìǫ́*7dÅJã:œ¤¿®¹2Ó¶ôéíH’YWJD £³"»î½f7{çiË¿,¿ò°’ñä©HhHᡬÝK’›8®(ˆpÄʽ%¹G%ao:°p°pò <`»¿BIWÎ$›]k=›Sv*‡(T,'+ÈyKØtÊ^Èæî^ÝcÃ’×î‡2\] eÿÛ˜aá›ÓÄ3c%HŠƒi,Xíʆa©yèJž¢— ã™4Š&N¥rÁƒJŠì$WkóÚ7‹ãWÐU"¡%ÞAl`ZîTOUÒ>ïK²îi<y \¶ÈxzóÛÿjÆÆ^»Rn·(¹J dœfÕZñ3I½X 7ô:¿µ—êÈmØœÖØ­¼$
-ƒ¿cwèÅƸˆŽ,ø¼:…ù6ýÚiò²v·HJfœúÅåÀTN5Š†“j£ÌÛQôéõ(Ú!Ç`Ër;òm4Æ‹’$ysëérïYÐ$^ûj¶ùýP–~`i„Y)BÉ ´^šžqäá Zx€cåzt–‘XtТñG Þ`âܯš²xÓÊb;2|‘Þ°Ò¯ƒÅ ìÒ,!å1ÞùÌ4U€RõJ}2»‹¾îg+vÇ3*2ó| ª‡C:"e˜Ø½wŘ_<rCX;KS¥¬ÌÜ„þð@|v3G³ lÓýâÂüþEhò È­[é‡ñâ5îŒqåÊãO
-!D!á‘YR>ü<÷’ôÿÚßÌtendstream
+xÚ¥ZÍ—Û6¿Ï_1·õ¼W³"©Ïc’NÚéÛ¦ÙdòöÐö KôXYr-iÜé_¿
+¼ÕÛ‡ßSëǯ~ùåÕ‡»µŒ¹zóÓ«÷÷h(ä9^?¼ûzz\˜ôÃýÛû÷ïÞÜßýñøóÍýc/ËX^éiäÏ›ßþðnsûçOè$nOðâ ™$êvãZ¾Ö®§¼ùxóŸ~ÂѨýtQÒJ‡jAJK$Ip‰µÒV»´A™âÕƘ
+[ɪ9˜¬øÝó”ÉA/Z«‡ªiMšã¡\-}q*Ê’¾8ÞÉxešC]å4ÔÖ<U—í¨çÏÎ Ó¸/Û€&?}¼ÿAPÿã®høÃ]Ý•<YU·Ô™¥]cPå ÷ZJ‘²B¤Õ mÌÁrRoJ³o¨§)ªÌP³;œR;žó±½5ÇcZrð¼°#ü³+¨‘Sï¶>R£Ý™1]S—][ÔÕ„¥Ì483)")ÃÛHF"R¾¼°½D´SÑîÊ%÷pT¨˜}Úf»õ>=L¾Nóü\À&ÌØ‘Zƒu]壧Z`dlf2Š„–I<åäa‹«~ÿÖÇ)âÀ `z¤x!ÆÎf‰VÓ ª
+<MûS;4U댭"eóq3ŒM%«#¯)ª'êF9Ø>Doó Œ$ŠíZƒ¯Ôgm [Ê°b /ï22ؤ÷ÊS}üLädîuW1EJÏæX™Ò9nAÔ8';g½7né;¹2Ç´e`ìBÅž™p*`×m–|—$Ö¡^=¾y º©*“¡P l¸N$ÇCùøïº2ÔÓÓª'v´(%Rlx<Í2shQØ‹Š²½½“`«©3æ³iéµk¬LØd»Z
+<Ã&ئµ¼1Ú‹IèœÚ³Ò^o{8†fÅŸä¦)ž*÷‘0HÌJò(²Ú¡´(iÌõØ ™‡Ÿê“y6G<µ¾c§Ç
+D"ô5;U•îIº™ë­‹LŽ\Õ'Ž¬uù<ØzÑœE`ê
+®GÓ1ÕåhÚS¡èx&– J¸Náo]Wkؘy8Õp”C´¼ÎHOµÀÉ$
+éúÔ ^rS‹¹ðe)ጬŸ…dÁଔ;Ö`ÐéŽB"N8”Å2„tÆLœy˜Ù%vU>Kêøı®ÝÕÇ\¤x6 3,âï ö•ófnŽ&ý¼Î+ˆÜÙ’G
+3âi4?©YßØ:Ó7vöúÆ—^ßZª@?ž‚Î{K@lØvÁ3ÐYI¾ŸÄ«WÜÛtOO¦ið®±j æñÌ^¡ä½8Ò–|à`tŸ~6Í„PÎ Ø~j7† [
+ÿ<ÕÆPÊ?]«·]èd¸ÙÖY]ru‚W4~“ƒv²vÉx¬æð(¼še…«½ÉviU4Ö€í+ê7”ÇA:Rw YT¸rla |©·1G‘ç#£ œ=ÚóßP‹ Ï­ÿÒºhÁ3s4ƒD ñµ‚Í\•g뎔ÚÀ®2KÔf¬­MíZ  ç&R=ÒÀN%•?ÊwÉ´†Ú¼X½á|ìtÀ´ó;èe~˜ç|lš"L6Ń£0§Ñ®H5²¹©
+w¾:M{KšöØ‘ìAÌÙIáPw~Œ““‹¨·+¥ˆŽx×>Ù-vSœËéÅæv08‹P–ŽéO¨ËU9í¬à>ûF΅Ī'$‹¯è›þD„6Ir1[·0—¶Z„¤%†8 ùgN½#£#äì|ç¾vŸà‰þÀP›·)Yrû…ó7Ë7zÓ&„é‚á4Êv&û<«ô-ËâF¤"‰ìÏM =ç^ŽÏMx8¡%ƒr.mQÏ€ó¡»`²§²3‹³cM5I.}ÎÛ7_Qø«®Y0° À…؇'ms2ÇiáÔ4ÎoU^w=î4 |Á¹/&ÿÚEèë¹ÿˆèrêïˆPÐâ/Â0ëí±Þ¯sˆð²5GSe åÔ@ /òõU^z¢sf&h6
+x;_C‡lh8Ü°ùµ¦ç†‡©†Œ-Šð-ïù `î"£œÌfn:vèz‡Ò œ†Náj¦´^ïTä­-IkJ…áÉÛ ¹Â_C9§ç³éA°”ëÜzõæý'ž¡âž½Ù×ÇjHlº=³µ°Žï‡U0X+œ_L nÖhøƒCFË.¹“²5¥5zĪ4+ºìPn#¸ˆ…OtjL§èDÓƒŸÜ9EÈO3[WeÀÆÔíš•MÆDÖc~ô²;" 7 Žµq·0ÛÉíMSümè—G@ÌC‚›¢r÷CîÃaF&KwC䮊X·I¯¿Äi™¯‰{Ê~µ‘áÔ™LŒÉ̇µf¨é±è8Wfã¥
+W:g˜ wóäëàÀìÔMb¡‡"×ý’ˆ¯¦š…ƒ
+e8”îÍÊÒPh>8ìõ.TC‘k~iÓ×½¶6ü…ª¿$ÂR>þDbZ’š'ä<Bdí XÛO"/ cHú븯ûIÅBôZö“\ºŽåL˜ë,‘»ÐŠ0x¢«<rñ$²¥°"utûÕ ´ë)áN`Ûî/NL\–,­8€ˆéÑìºí„¸rávLJF_Ðû[ò¬;ºípÑ.mæ×Ùý=ûéùa¢ãAîó-U—\B»D¯»òˆêŠ+;*k€¶XÌw¹g¾ ÞG2¹¾|Oµ°þÔ—ZM¸¯´Ä£r/´›î
+ö@Ô1ΘµŽzcÆöˆ%û~á²dú
+3™ÛsÉÕ»º]ºÛFäEΤÎ|}6s‰ Ÿ˜ +2‹8½¡fË]–‘J4pn1x=!"?QÓH}¡\å* ÇøNÅt¤+<Mé”´HIP–ø°¥1r_/ó =Oø2–_ŽÁjôÃC­‡X3·ßíéϼhܵÚ7p{"ô|ÇQÚµK<)-üYñ×ðtá—É:øsâ÷z‘ÿñ¯–‡Ÿtû‘Ðq¬–½²0 3eÐ퟇þyó9ëÿhRíÏendstream
endobj
-1703 0 obj <<
+1723 0 obj <<
/Type /Page
-/Contents 1704 0 R
-/Resources 1702 0 R
+/Contents 1724 0 R
+/Resources 1722 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1686 0 R
+/Parent 1701 0 R
>> endobj
-1705 0 obj <<
-/D [1703 0 R /XYZ 85.0394 794.5015 null]
+1725 0 obj <<
+/D [1723 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1702 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F48 1238 0 R >>
+1722 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1708 0 obj <<
-/Length 3567
+1728 0 obj <<
+/Length 3591
/Filter /FlateDecode
>>
stream
-xÚÅZÝsÛ6÷_áGy&BñMðÑMœž;'g»wiûÀH”­‰Dº"Çýëo ðC‚¤xz3Ï„àb],~ûˆâœÃŸ87–Ù\æçY®™áÂœÏÖgüüú~:g™¦C®ïÏ~x¯²óœåVÚóûÅ`.Ǹsâü~þÛÄ2É.`>yûñæýõO¿Ü^^dzrýñæb* Ÿ¼¿þçµ~º½üðáòöb*œ“·ÿ¸ütuK]6ÌñãõÍ;¢äô80éíÕû«Û«›·WÜÿ|vuß­e¸^Á.äϳßþàçsXöÏgœ©Ü™ógxáLä¹<_Ÿi£˜ÑJEÊêìîì_Ý„ƒ^?4e?m3R[°¤b™i# – <™æ,s¼72 H9r¡‘çUÓ”³iYŸWåî’…äÌeb0$%¾ãJÈ—ùB挒c®HòT:9ywswwõ–ÚÍöé©Þ´ô²¬Pµõ©™æ`Vî'ªŠu9lC±Š³<´ As;ù¥Z•M$•AJ[ÓpííaÆä* )›„‘±\É(âMBWÃT–ŸRT1Ç¥\ŸËÇâkT,Âs¹Ï ñ¼ŽUÝâ”çS%%LM…`¹1ÒÏÕÛ
-êíB
-¡2sî¸WBÑ’-ØÅr1VäÒk€QUL¼rŸ4ˇªhšbz~,+êýZn–‹Âtô Hì ĤÕ²ßCìíý^’{U<³âóAßM\îʶõŠ!JÚG@¡U?… ŠÔT,È¡©»œt0sh©b’[•¾xÚ÷™³ÌºÓ•˜v:BõëvU•›P¥’ŠþIf|Z/ô^´m1ûÒD­É
-þ¹-7/«úaWpž1k\~\pdJí'—Ìjˆ¤#ÉwOå Àë×!yaƒI*'ˆš=Ю½y¬·«9uø¼Ž´¶Ø´å¼›%UI ELÎÅéSŽë>\mÚÆçe‹i'eÓÖF˜ ¹31ˆW¦+l=rAY¬ºi `ˆiH9à$Fíæœ%f
-’ÒLÊ?·>ŒKK c$1ê¤t
-‘Ç«?5¬–T8­ª4Bá8+é~°ûn„‚4B(Õ’ygüÝ“Ì
-ªõ¦¥NF‡ÆpÅDYíì‘nv¼jõfÙ>®I
-ðràÈ&UKÿE@ãÕo>>¬Åß•x¸ŒÍó+Фâ€óݽ†®VâqL2+L>ÎÜdtük¶!¨ôÀ°¦>ì¾àæ:ß;î¾®#î¹z÷]Vmù
-|*7`[*Ž×ãNu1'ý쇭^KÏâUo¨‹~>å„°?Bw-D àèG‰XäÕg8x¿ÝÁ†\Š g]ò¢aP%*1L|JÉð£¶f:" x/©I7b Š829; UT[«mI#öd$§(¿-›0” ­ðüŽ-Ý}ï±:GëÐ=Œ³d.—s¡?uÿ0uåËU‡_(LÞyxï€v1 úüVùø =h±E”_oÛi½è¦ÉÓ$Ò¶I˜ãBèáÝÿÔKô³î ç¿Ê0ƒ eu®ƒU¸˜à•¦ä‰½Ãΰ~èŽËâçrU?µ­Ÿã‚aqÐêÂÅÀ(ÐÓŒâa›C'T¾®ŒELŒG"_W
-æ õ…{dhÅò\w1ˆq%ž}ÝCÕ`<P
+xÚÅZÝsã¶÷_á·Ê3'ßúàÜÙ©;=Ÿk»Mf’<ð$ÊæœD:"eŸû×w» H‰’sMfzž9‹%°Xüö ”<ð'O½M„ÎÌiš™Ä
+iOg«qú
+,›³©Î²IQ埗ÅüÝÙÔh7É«9’ý$§Ñy±È7Ë–:íúÌO6M;Í«Ùc½&Æ5`ô± Æ‡ë;ZŸI?©k~û?uÅ ´4NUÌAï©M'W "5E\«Fwi|o#Ú™D¹ ”¶ðZ4Ä4ÜmšdZyæá}Lwï‘ûtª½J”P @)“ÌZŸóe9ÏÛ²®@
+!4€WT:#©ˆ²=ÐÁ½y¬7Ë9  ¿ ´6_·Å¼›¥;:£• ùöÙi/ÌÖc­[„º#ψŸõ‰q."µ¯Ê‰aymUDa
+ú ¤ð µërÖòHð¿04{Ì×ù¬EóAzSœÉ óPª<ÍkÕæ_‰ˆgÞ+Öm^òÊózEm ¥@U̇’T³›4´*$OˆÑ%•!~Wó
+Qn² |pE=Ú"4ª¢}©×_BîcäqýÈã 9 H#f³:Ì4çxæ8@ÀÑñ¨DØ4Ä
+·TY4yÌjZ„ì)íM¤–cÇûD½Ö"/—cáÒ&&“¾.aîqÑ\–ºèß–èÆ¡…LÊe¢ä/ùº[œ²é¼bOò°H^5/źaðA2i3L‰úè‚ÝÒ<×Åà¡Î/Š‘¥R‰µqÛk†é˜3µVt[0›ÜYm4£¬Òn=$¤Võzô$²Dë,í;ÈS˜4÷*PòfiÆÎwj*`†Êi*»¼,ò%Ñë¦eûÆ‘à ¾B|yž‚‚GÀ—“²¡ÓS6ðÝ^¾'288~³bFÒ¯$/Ê“¯êy9Z¥bµbÀ+šRtFÔ*¢Nü˜ß-OTx‹ç?=-Éw@E<nªÙù
+rö¦¥4NEC‡FÇDYåíì‘nx‚hõºlW´
+äþNØ9. §j3A-âúõ¦Ö‹nš´7ÍÈ6Íh²™&BJÓÿ0 +†Y÷=‡‡…²=ÏvfX+BNðrS‰‘³ÃAÞ? Çíñs±¬_ˆÚÖO̸ oZ[¥ÙS
+Œl•‚/ö”›ù$“:Û/1c:(\æ×U
+~xeSaÑy…Ðbõ·/5QÐU5ýCOQ`P¥öM½,g|Æ—kP_4
+9Ž<¼ûŸîp„ïN†¡÷!˜Âðó_›§…ÄÖäéhQÀ›Krà‹’Ó|h®i¶Î%„m¡$Ín|^WiydeØÿˆW»à´X•-]¬ÀH¹Õé+QºIe”•¿ãá¶7Oñ#T³ë”ÄA# €‚„ÒD“¦øZÿ —Bà|+VB'B¼õ±µÏu8öv\ýÂo: W>{W#"ñƸãëw\# ¿Â)› %ýŒ™%V 7Ðß ?Ø™­Ðv%{úð“åmü: $ÌIßlB©FNœy(r:·o9¸¸ñ0Âöéí Úô|Ÿä÷×ç/îØÜ¥v‰·~çcÁA?3øñÀÐß
+Ôí‰óhR¢ÔûÒëoMKÆNÒg‰Òòƒì1>ÇÈ´w/SüL{lÝŽiáÝëÆT¹áÊt~ÚûÁùa¿w~ØíÎÏ(O é\òøø»Q$ab† NÌ°¾ÄÁ3&fØŽ‰¾Œ‰YÈ˨XIñg>cß’ûu“Þ&kØåÉäOü#ÍùZxy˜¯×rz›¡a‡².lu…šâ
+±?ÈÙÓ€¯7%_2ÚhúDi;'þuý «¢ýö„\Z‘iäscñšÂ&øÉgƒ¢ûMàþÁôö×äoýÛG- …ÀŸo°P(¸³»’w¿¬Þý¿/œ|endstream
endobj
-1707 0 obj <<
+1727 0 obj <<
/Type /Page
-/Contents 1708 0 R
-/Resources 1706 0 R
+/Contents 1728 0 R
+/Resources 1726 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1686 0 R
+/Parent 1701 0 R
>> endobj
-1709 0 obj <<
-/D [1707 0 R /XYZ 56.6929 794.5015 null]
+1729 0 obj <<
+/D [1727 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1706 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R >>
+1726 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F48 1253 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1712 0 obj <<
-/Length 3339
+1732 0 obj <<
+/Length 3626
/Filter /FlateDecode
>>
stream
-xÚ­]sã¶ñÝ¿Bo•g"–
-oùO»mu³h›bÑuÕøÔBÇQ–‹lÖ_új‚Ùã@heF‰! ÿ~´5\½óí¹Èæ¶Ûmëò\Ìë»î±Ù–]Ñ•ÏQñ¼¶áÍOkŸšºµ-¡º†o?^âÝ–4Ï[Û1Ù#/xw÷aš5!xD¸àRPQ. žVD¹ÖÄ;m½lÜsE
-t<…eLYÓ“Àé@¯­]veã‰z‚dp¡ôV!‡~îÊ®‹]ÕñÊ-27´4I$Q!bÇãÁz¢,’(OTÆ4Ñ ugJó4Jóܼ®x}ªÓŠ¨&o±,–p±ú™ŒMg¯³¨&ø9KÀ½1d„ÔOäÉY(QëD®æ᎚†o}M#2”Ž0¹Ó7Ä£¾ç´ '~tÚæ0<»'k™ ’5⽬‚TE"‚’—œT€<JEmÝLI_D
-wÜ=­ŠÎ.@äËO‹Oí§‚OÁSˆô Õ ƒÓš82¹ñ@‚WŠ%¤”vò@„“ÁØpô¹¨vŒ7á.5“Ê"£Ó7ìÎD¹’†i¾‚å´ž»{`üÖßß~OÀ}Éû—Ì®=%è“= _ÙÎn7emIe¤4cb9tZÍ~äÜ:Î=6»Š½Ö=îZïÇöä©z°µÝ‚a8ñöæöêCKð¼!y¹àÝvd8ìØšÚ:ƒ;
- G:Õú/øë¬ç¯3§9GÿÌ7»¶£ ï-= Þ·²…êö -)¡Àqï¥4yMÐV4ZT˜%>nh„¶|Z‚A„’bÙDBÚ‚èËÊŠ™i
-¸ÁÇwÃù” çˆ9Æw7Ãé)ŽóŽ †²A7b‚IŽ«†¸0Åu7^t£ÝÙ“D‘|Â@$e2÷IB½ì%ïe`øB[äœ!@Ì{MrÄqžÀäªËM öWeP”õ
-ý¢\Mߧ¡dl"K»ßu#wRäpq.ÛNC]#i¯šŸŽ¤Ô,Ε8Iaæâó”€zšÜG®¿@1êG±‘é0~AW!•‘Îý%U¥» «õÄb"‰L’¤_dö=Nì«^.-ºpÍ/í\A†(Sùv†({f~201ÃÁig/$°go8ûÕ+ÎÞS!‡Ýö°è–O‹­]omû8Õ®S
-üñ« ª Æí:%ôƒ»ó­KP—C>ü®9ùxäAªŒ|U \)Éœ˜ß½û‰
-)…4â=eH‚›À8'#èÿ£÷e…-µP7†üÕ5ïTšý×Û*Ùj"ÒôÿÑGSie(ÎW5¢OuZ#Ußg`‘m]³(k‚ÇœÈXDª’×Y T¼ô-ã4’ñˆ—‹ªÂÖ‚9ÖþJ‚[9ÔŦ\Žõ@Pí‰Ãݶ¨Û’óvÀ“5í7Â,xò ýPb¸)#¡Ø¹ré¯ôža¶ÈSì‰5`W%—ý™™ß£bgèFe©»Ø#Íš†9—6½\ÚŒzÁ-&¿R’‡¥%QÝ Ôîè}Rã\–e_æeqʱ W<Èb3¥Ð ¬4d[E¡áFXžÓ~*\ñ,KÈ_Ülˆ–R…4@—fHÉQU*Ÿfà¤9G O'»B§,3’-w{õ縘Àõíå;Zy$æTBr*!C–Ð<[^á¨yøæO7ÑÄá|ŸƒÁÞVÕd…zåZ©ï1¤¡5âò´–pȶrm Úéœz)÷ «Ú†0µ]Ú¶-¶^›ÑtQƒý4­ýÓy.ç7?Ò —€½ó¾àrªé|ªà££Jýµ"´,vØGL#í]qÁDÎxàY„YÍöØP_‘µ¥$LÕ_£oR)·Æ®:¢ ^’¹ýü¦e—Tö¦ ×fÄ™ÚøL'kÆ—% ­ §«]sgðA‡;œë]7èpŒu´œo(ˆÛüºA‰a+†S²-ÀôÊî¨nˆº·®ï¨eSÿÇòa*SweÄDšKìEy—Qì LPÜ Å0[îàoÊÄqdâØ»ò±oSÖOÛò¹ðgáv i¸O?!ÓñèóY±D….ï±
-õ*|Ö­¨J
-võ¢ä“"ÒFä¯o¨&v¸{™FZ+5Üšz
-r‰ÐdÏé;Ñ€³±6ƒÖ»ŠF\@Ë}%ˆžã!3
-í«iãCªL¹ÎŸÿdÚ'¥
+xÚ¥Ùrã6òÝ_á·•«"..^;OÎÄ3qOÖãÔÖæx %Èf E:"eòõÛn@$EÙ3µ•š¸Ùh
+`k8ú\T[ƃ—p—jä`› ô0‘/Û]åZ¥Ló ,Ç3wÌ‚ßúÇ?p_òþ%³kAO úd÷CÆ—¶³›uY[R…þÖ5Ô™Çf7rGn爛mÅNëž·­wc;rÔ
+œ!9¹àܶd8ìךÚ:ƒ;€€‘~ ZÖŦ¬ö</^Nš;úy[>Ôn7kd·%è‹î±èè«lÝ”¬G°+ÁÑnyœî
+j‚M$y$€³\¿9¯AN%>\,ú¯z9•¤‚—L½‡žÊG[gröØ{ý¢ï3ï 5›½ãdÊìe*K¿Àê³^äÐ!„Âý íŒQ›<ʲ¡)rèNã^~5å'à{ÛSNü ˜”r⇘Clw3œšâ8OàRè&PHHÍaÕÖ¦°îÆ‹n´;;r€(OØçoƒ„Lå>!C¨—¹ä½ì ?h‹œ³/è€y/û¢Iî€8Îø€\n¹ tÀþªlÿEY/Ñ!ÊÕò}JÄ&ò™ûm7ò!7çÒ\à4ÔãÞ‰ø¿‡@ګ⧩5¹–')Ìœž²PÏ4yÞÄO ú‘HU2Œ£_ÑMHTgƼ^NšPNº º^M,& ”à&ù*³WIê+ÕpÕ¶ ×|lç:Æ.“þºñd\b>Dƒ“¾Þ û0ùË®¾GtÚÓ{¢žzTM±DÛš—ã7PùúT€LÒÙDÇ| ý`I‘ øàä+‹±´Ã?s.Àyü]4õB¨‡mˆ›ˆu^nBbmCß„*¶]3§³Ò44æþ½™ ¨µ1¹×¤²c¨$ÎBÎÔ´e×lög 3´}Êá”a‡
+™¾ÓG*•\rS6ËrQTTFQ×ÉZk AU å3n¤¶;Âø"ÎÌ‹gëw¡2êÌåÒïâ‹þösÙr}Íëüƒw/ÃÁgä—!Á)Àž°ìÎ2ØwÎr¿ ÈÜ–ôžO0Ò!¬^$öTtŽ)DKPÜ<œpÛS§@?ïO8Ö§ãu{š Ç{°5r”¹80âIC¶ç°\‹#ÅT¯p¢E™TzÀ ')ƒmU)aô—^E £uû1Àv a{ò.ŒPèkÓ—ï"P½ÂÊñjÈ
+î NܨØʼn‰ð•ãM§ÃèÜÛw"óQjÔw]ãkªF…Њ:¡ÐÛ£u ßpÔÊçý¶^ìi £=¡)ºrA_#7à(}»^‘䮂Um;Û⹓Œâ#¢@øðñqm’<¤ðÑ/'ºíIê
+Wò£T¢ZÃȨC·Ý \{Pùž ã±\o×ô1É ºEm2¿“œà%‡B\ Yñ‹Ãô¶¥ŠO‡ý%8äϯío ÉÈ…W iÌÔu€/P2”ßȃ2´(ž¼EÞ`'O‘?tåã+3Xϸ¡\D)èCØ–ÔƒÕ¾_*.·‹8ü„¼W"xŸêtTÈJ·ÙÏ»ÅÓ|cWÛ>¿³ÛÔC/2¨&8¾³J&Y2dáî"‡KpÉÍL)lNí#R_Ó·õ´ësûUÎîÞþB
+Dp¥ŠCOö3A®V‚¿Nv‰u•ÊH´ÜÇë÷<Ç•­
+rÓt–^S˜S‘q ªŒ…WD¸: QT‡!j¢H†ñE²Šž“¦Šdq(’'kdHŠ„ðþ€ðoÌ°åÓ¦|.üYøEЇVšo!ipÀb”\ Ôèòß3¡°¦DÚwÎ4½g0ÊÁC”7l9ƒY|sîÝÓiË1xø5æöTŒ#*Ä éCá˜ðÏ™ÔösÇ;@Y5q¿#Í‚˜g—SÕ $™9êCuŦãtr´î<Î" È\t ô?j“ð¿‹9G`b´+6K.èG[gX)Ê8>´ìP<+7‰ŸËHx«bA)”£X¬i÷<…±ÿR
+‘h
endobj
-1711 0 obj <<
+1731 0 obj <<
/Type /Page
-/Contents 1712 0 R
-/Resources 1710 0 R
+/Contents 1732 0 R
+/Resources 1730 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1686 0 R
+/Parent 1737 0 R
+/Annots [ 1734 0 R 1735 0 R ]
>> endobj
-1713 0 obj <<
-/D [1711 0 R /XYZ 85.0394 794.5015 null]
+1734 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [226.1733 390.233 304.5885 402.2926]
+/Subtype /Link
+/A << /S /GoTo /D (man.dnssec-keygen) >>
+>> endobj
+1735 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [325.208 390.233 403.623 402.2926]
+/Subtype /Link
+/A << /S /GoTo /D (man.dnssec-settime) >>
+>> endobj
+1733 0 obj <<
+/D [1731 0 R /XYZ 56.6929 794.5015 null]
>> endobj
478 0 obj <<
-/D [1711 0 R /XYZ 85.0394 227.0652 null]
+/D [1731 0 R /XYZ 56.6929 146.0228 null]
>> endobj
-1714 0 obj <<
-/D [1711 0 R /XYZ 85.0394 197.3345 null]
+1736 0 obj <<
+/D [1731 0 R /XYZ 56.6929 117.3366 null]
>> endobj
-1710 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1730 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1717 0 obj <<
-/Length 2753
+1740 0 obj <<
+/Length 3122
/Filter /FlateDecode
>>
stream
-xÚÍZKsã6¾ûWè¶rÕC<’ÇÉŒ'ëÔffÖã=l%9Ðm³†"Q²×ûë÷k4@ñ%;µIªR®2ÁF£Ñht÷×
-ÏjDYì“L…ŽmæX?TÅ *^®óšyÕ6Ür‹¥®¦&{ÝØ*¦6Ÿk¸i¶yé»nò¶lß ­#ˆ­š§n6¶l4îªæ&¯ºÞ‰~ÍþlêÖjÜꢡœ¾V/›Çb·+7›‚Ô°féÔ=çÇc¾+ gnô5·L|ÊŸ[ì™F8þûoLg³€±-öLyÈwûr}¨ò¿ó‚[ær~"üÃ÷–·´Ž[¶NQ·B„™ÈÚ¥³ :ïóÇb¸>ÎN9§‹©HðŽâÎ$"Aˆ@B/àxxSWÏoi?wmÙšT k2éGÞP¦„bHXoüø?ëfÏÞZ˜ûl¹ÓÅ8Ôµ¡ EÁÅÂDYF1Ì»»7®zAßñ¯ú¦A?•ë‚¾X“û„ü¬„J&
-eø(4É=×kjL¤‘bf«°2E¹T»„k£¤¤´B`¢(Z~8äÕªÝçëo¼†¯ÅîÑ'ÐÑÌp‹Øãäôjm±x.—ëÞyç
-~á´¦5¢ºí±3oì‚…ˆUN9Š(>O6»=÷ÿý©Ù}ëËoõ†ßhnGº©Š­Ÿ…"”ž,._ßç7eURŒ’°ÍÁ«GÉb&î«Î*.šÉßN'ïŸÜ(JðíË/fèÏ Ø!üäÜ„Æ}ÓzY[èVÖ…˜ µ‡Cii^ÆÌ>×iÌì¸h›nWíqëØ©3!í/ª˜fT §AÁCÈ©Mìí¢]Öù6Éžô¡(q9ÿA—·¢ð„máþ|½7S'vÓpoì·Ì‰v΄N·g笱4éÐ1ö»¼nÉ(µÛ ü¤@’R&ÕIæô'Í™H¨LT
-ä-#=@SÛœû··jPo
-¦äpe¦8­A qQ=†Ž{Ïæ£yJÄá½QZæÖ /ïOLÕ²ôÏûœg¢Ä-Ž(ì¶hx3{þ–ŸäHÔÒKçMn©*sÎ^ÇOÓ¼_d:UæýqŒ%±P± C¬¹\Uƒgálí×r¨+Ú·¡ˆw!ÓÌŒ Ð{ˆ ÏÆÃŒíÙ‡b6÷l7EQàli§6'¢|Ýl·Î³è¥báEeX!îæR·JQW&‘õ ¤­õÃWfÆñŸê`Ž®H›à€¶
- Ê`úáPÉåÓ}¹¾§¦rˆà©]aDt§2Ÿ|üaO¿Ç°¿/ý8G¾`V àÔòŸ'¹(
-ñùIц•Îõ8#âÔ«”¡Nð I­-ª4ä幓¥"K2ŸˆÆÛ1²¡„–:%¶ù3Kçc"µnü|mg× \Uçu›ê µBia‚`§÷tv¤/›Ä3ppä!|†Â ~©¹FVòöBºL2™ V:ìVá芼îųj&(Îm´ìN¡4æÃÁÈÒÚ‰êTŠ$¨f¼¥ð°]ä5Ráí¡¢wÃàæã‡s$n’Ñ‚¼[&ѱÌ-_&Ø”nú
-Úa+$*g«úqØy!¼)*Ÿk•¡÷×ÁŸz†BYº­ŽPwiyÃ>#ÁÊå5þ«åäŠ>µ„¤Gº¥î&zñëBÚ²L3S¯íÖz´#¼½ÜªÅ‡+Zôå¯ú’Ý¢Iz^©´°ØD±6VIÃçGkç“tdX>¯ÖùúàÜvpRËè»@H·ph­Y¿ø+oÈ¥ç±È¤#u8[ôØCå5š5ñ,c3T•.ú{÷ûÜAcŸm! Ž_9~Ÿ³ú ÷Ì]§km^)‰•ÞhýÊ'‘Žk”tW\ï ðH‘3@»¾ä)®x¤6’C †x¤x„fլݥN&ßFtê‹š]àaÏíÂ`=0ÂÏ.¯¹tÖT±~ BK/ç¡iýG8¢S±âJ[â@ÿ†*ãë$Cu'rl½t¾IÊB&¤f— é…Qô,k*‹]W«Û|íN£ž^ì@ü7‡=7è>á(ξ
-,þ³gis×9a®˜ŠÖ'uº k>—×ÅT¾+CAõ­ßPúùß)XçU´§Û×Pb 6lþ£á·¡©'ŽÜ±‘É 
+xÚµZKsÛ8¾ûWè6TUÈoòèIœ¬§fœ¬ã=lÍÌ’(›ŠôˆT<Þ_¿Ýh
+ÊT @”7îý==mÃÁ`/D(ܹ{§+Ëi  !è€H‡Òm´´1L“ûû n1øãá §A*×}¹¦ÂNŽ'Pz&
+AuD›™‘B§8Ès½¢Æ©4T#™9ªX@Š6ŒA8 ÄaŠXQI¦°1MÓèý¡¨ã®/Ö_i_l9èfœ†«„A±r†/
+¡©Ž`¥èè7\I?(­ @"E7`'^eƒ‰ua! P\žl÷=Í ÿ#ý©ÝÊo͆~?âÚ–´ªË[#Ÿ$®X?«ª®0FQØæàÔóUm÷u°Šfô·Ãã£ÕÉù' Ê
+¸ñõçorìÏ@Ñ>BèI¹ mçdí@·ª)ÏVL§Í˜þÅŠ9ä:_1—fáãîxô£Ê© Tú\½¬CàšQbT; àfc-FµSHå,#¤Žšbç‰hQ|Nê(rY‚)gG÷ Íë5pÕúÐV-Í*whV´u'˜´§f+æ‰b2›à¿=€7tLî:×Ùba2Ì¥ÂäVÔœˆ Ã
+û9°FmáØVeÙøÒÙáImÎÄùºÝí¨5FÄÊä~.yó,O´4OÄ£u¯ÇrÆÐtšL0Ç`ÚIEPø5”﹊ ]E¸â]Ûôû¶~½„—$'ëIBZ îÙ•›tþÜï«uo÷4Àw4ddKÉÂ,˜–#0M6G9]5(©³hUyîúr‡€ ÜúË)z™L¤ÈÔYm[á—ÁC`ü3E{*u @/ðÈ„M•Q GÆÍP™“Ę^VÁ'h/ÍEîñ›óß²/ªº»ïCû4ÛEnŸ}Ys12:ëß]¾õ`
+HÿüåB6ä:_È—_ìb
+iÿ…bD÷+‚‹Wqàš$Þ˜ÐÞÈÉ”u¾J>­HžkFQIB<‡ßFŒk’8Ö$ÖíÚ^sò]Dd®Mä
+6Eí_êñæÕ¬Ñ%A“Á— ›¶·]¸¢O®3Vu}Šœ«Nü ñ²HÙ0“Èð•RjhtJ¼q"2µµR ª“ÔþÛ/^ò $í÷¥]Õ»«­žç ¤ÍÔ0õ}ˆ"Fr¯ªõÇ ?À£ôðå“TªÉÇ6º¤Ë¥A±õ—?+wftu‰£Ëw¿v“(UïÝW`/‹ö½Åœ;ܪï>É̺1é¿óÁÈ.˦ 9ÆÄ9PÄ!C‹ò
+J€œæ0šïtÙ£±€Ñ˜Ãhð´jøóŒ.ÿ®#ø©ht‚¹ÄÜ8é¿Ë•Vg ›ŸÄÿ¹ù+Ÿ€ÙN#|î/…´ÑBÌŽ4€¤þ+¢ãŸXI(-Ù¹[ÈúIÆs㕲7›æì•Ú©êÿü&vøendstream
endobj
-1716 0 obj <<
+1739 0 obj <<
/Type /Page
-/Contents 1717 0 R
-/Resources 1715 0 R
+/Contents 1740 0 R
+/Resources 1738 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1723 0 R
-/Annots [ 1719 0 R 1722 0 R ]
+/Parent 1737 0 R
+/Annots [ 1742 0 R 1745 0 R ]
>> endobj
-1719 0 obj <<
+1742 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [339.2005 701.7636 400.4005 713.6638]
+/Rect [367.5469 618.1183 428.747 630.0185]
/Subtype /Link
/A << /S /GoTo /D (zone_statement_grammar) >>
>> endobj
-1722 0 obj <<
+1745 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [455.0966 503.2689 511.2325 515.3285]
+/Rect [483.4431 422.7733 539.579 434.833]
/Subtype /Link
/A << /S /GoTo /D (address_match_lists) >>
>> endobj
-1718 0 obj <<
-/D [1716 0 R /XYZ 56.6929 794.5015 null]
+1741 0 obj <<
+/D [1739 0 R /XYZ 85.0394 794.5015 null]
>> endobj
482 0 obj <<
-/D [1716 0 R /XYZ 56.6929 686.5799 null]
+/D [1739 0 R /XYZ 85.0394 603.6296 null]
>> endobj
-1720 0 obj <<
-/D [1716 0 R /XYZ 56.6929 663.4862 null]
+1743 0 obj <<
+/D [1739 0 R /XYZ 85.0394 580.9712 null]
>> endobj
486 0 obj <<
-/D [1716 0 R /XYZ 56.6929 548.1865 null]
+/D [1739 0 R /XYZ 85.0394 466.9592 null]
>> endobj
-1721 0 obj <<
-/D [1716 0 R /XYZ 56.6929 525.2522 null]
+1744 0 obj <<
+/D [1739 0 R /XYZ 85.0394 444.4603 null]
>> endobj
-1715 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F63 1364 0 R /F62 1361 0 R >>
-/XObject << /Im2 1350 0 R >>
+1738 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F63 1382 0 R /F62 1379 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1727 0 obj <<
-/Length 3497
+1749 0 obj <<
+/Length 3416
/Filter /FlateDecode
>>
stream
-xÚ­ZMsã6½ûWø¶rUÄà‹
-¥¯— ¬µ•ùUf+aÕ–F±¢’BÄU<·ÊA
-W¹Þnûçå‡fÿ²\Õ«M3Ÿ7× ‚-“×r*D©Œ"ј´ÑfªÄ§ÇfÕþʘh†›¥”|ñ¼iW*núaôµõþ†W‹Æ? âÍØbì©ò¡}k7<7{ÿÞ½{¯ßÑÓ¸ñ=¸é"*J¹xóž-˜dºJ—0ÅùR¡ôõRj6FÀüyaË’f—q6wQŠ©Ê÷Ö¢r¥XtýH…¡ñP°Ëh£ Z(³oV‡ýÐö]f8£Šª²v6Üapk¥ö>Žû” ¬Œ¼n‡&3:ç
-Q‰†QñâÄz?£Z‚ŸsùÁ¥RçQ”Ê:£%!{â*ð 0ËZD©ŒT¡ƒezªÇÄ fF@›jëõš<Ò0 uÔöÐ>5T]V]69`upEÂjtE®Ñ9l¢6€%·g”6Ò-£Î €EDá"ÑCâ¯[b*’ŸrE\ò¶ñ¢hUN´{ñ…ã<¿È SH^pŪ9:3`T¢¨L´¥º[çÀnÑÑL°ŽØÎõÆ
-«t0ðópýÀsòWàšH]€k:ãƒ'H-u¡Ä+ã¡ÌøœjÁCÈ©Ó¸©«èË â&qbÜ„7áwWÿî›IÔÍèÉWEp¸76„àÃÃ&T´¾ihöOÍi Yë2T—%̤Ôr
-ÞÏ
-g¬R&q°Âpo$Ƈ¬9=ÑËñL$?­+ Œ¥å³ñ(†á€ð†Â§0ærø*Á%Ÿ>™*/MôœWÅŸ.¥W ùrœ È:ˆs!‡k`§\eB¾u1ä8µ´˜„œÔ] .À–¯—Tê¼µF© Är¡ÅðBj`huˆR%¦T×±G>Õbj²"†)bhÁÚYhÁVZ\ÛjÕ<ŽT97WhöæŠÄV1MPh¦˜EÇ@FÂ?¸ pE'púÜh2Óä|TÙnO¢
-j{Ž[¢|Åy§Rऎp8<®ëñôÌ£JˆAÂ^=Je†Ÿ
-¹=€Êáp·kG*ûÒÕ»vEß~øDµ4ÉÀ@ú=Õîêal|ù_ÀjÏ?n ¼‚‡çà
-öÏm÷@õÇ¡é®&gˆ¼ºó:l|´`€½aÄ©B8ú›ëýOnblzŽ8œ‚¼íijkónohN°"€?3£ÊëNHð`Ô¸¸¦ÂÇ5Q~™¾pŠšÓ~jšÕØS2…<ÑFÃYETf¢Í r£Ôk:hYHŽ–“ê@rqd¬ÛíyÛUÆB¨·¯¸òTê¼íF©¹í.Açz¿F Ìƒ1 ¦ºº¬H”Êh2Y V‚õ¦Ó:5c-£C1˜1fŒÑŒálGÍÊG3ÆgÆPHl*ym[?y{µ _%fîÛY6n—NÝw =Ó¡^k§ ¦z/ºñ2ÞI§“Ü8ïàZ’¸“_¾ƒ¨˜,˜Ðã*0ù)dÌ ]ñ?9î# c«À¾ îÚ¢B œ§¼²ä) ²ój{oîZ¥05Ÿ©°gøÞi!LŸœŒ‚`Ü:ç¤*Z$¨ylöÐÓ ËR2»¸½±bÑ“LÓÕw[/‡V&]Xèù vq÷þ%·NÎO¥n˜7Ì#ÈN6Ù/-ØÂÊ~uvie<.-a¿÷/n0“öTo”…óüÑ'Ø6u—QÌó׶Ø`’7èÛ”éWZ«Y·Éôr½ÂÂ
-«å`­iç§wAê”Â|¶”S"9Øõé’¿F$œy¹‘â2UH¥ÎS…(uô¦Oz9¼t
-’w~.Ú릃n¹©üÜDHM‰'¿ný霒ϑ²yr4°ú¸P¦ p‡Ò¡@Mûr¤ÆìøÛ…CoûÐy˜{·áÝ5zƒ~ׄQö]ôJ;ð*õÃ…/8ñ¢dF¿b ‰ÔKRGKpÀ¹oö§G^[Q]>e†ŸxU!˜•Óñ'LY‰2°:,z¦¬„>2e¬Loøë÷§qy¬@ŽëEüì|_G«p/•&*3·~eYh¼ªNé˜'
-àv+—ú™`+YÒ¹Ÿ6H¹B¾Û…7!m€”Í„ß$+Cx;…¿ã&›NÎ,2Ðd·
-¯A¿}j‚ºtd‚©Y­¦6K©wÎùƒéç4W™DSQH¡ÏoüœÇ؈8¼kÒ”(Ö!>Œ½ïö2OCÌ@f’è3Ǝߥ¼r&ÜE%¼¤R@¤(ÍÏÄv¤½¬á/‡V]ñê²
-Q*£Ã±ZK>UbšÁ óײ.üߟÝÉ`ìä3nNó¢ñJädÂ˾[>©ÜÕj•~‰á4x|ÜRžþ/â3[”ÂTñ5w‡ÄÁuÊx0? ¤«Òhu©Ôy8D)úBÃY"­Ý´í®éã .,Ã4‘¹¬K”Ê(3™·U…µšOµq«‹é›z‡9
-] œŽbÁ7•ñã™ÄO?&§ðFùS3Žñ õ×ã _ô™AJ[#âscTà1b†Èm¨ÿ†ÃY•Ë' GSì.QŠ»&2üx»9¿ø†@d™Öȃ
+xÚ¥ZÝsÛ6÷_¡·“g"ߦOi“´¹¹ºmâ{jû@K´Å©Dº"e×wsÿû-°
++‰¢L-Öû+ºx€¾ï®XàYE¦UÎõÍíÕWD±°Äj®·÷ÙX†PcØâvóËRN®aºüöÇ›¿û÷§·×…\Þ~üñæzÅ]~øø¯÷H}÷éí?¼ýt½bF±å·ß¿ýéöý'ìÒaŒo>޼Ë?gýôþÃûOïo¾}ýÛí?¯ÞߦµäëeT¸…üqõËot±eÿóŠaZ<Ã%ÌZ¾Ø_I%ˆ’BÄ–ÝÕç«ŸÓ€Y¯uN’¢….€2„3ã ¦ÆkÑÌOKa3ÑRËócá{Æ
+d|c<ÔÊ0¢¬U‹•.$È©lÚ^ÎŒ«wûk
+Â ÃA¨k‚í½q
+öŒ–(-™ãc”(Á% î8~¼^i¶¼…ÿùòd;Œ&¶b¡a±–7ñâ#TZ+'£ýJ ø†¯>îùâ] ëYäK
+㮲ýŠ´È
+Nl !¨ßu×øPõ¡·éž«CxïÞ¿×îñÉ#Ã~±Î*±üxŒ/W— š·ËôDQŽ¶d‹Â-?š6ð%%NÖžKRi2l Å—MÛ#ÑU
+³2ðo¯À5ãº
+ŸR] qÍH0BªÏÕD„qäÔ&y3 cärˆœî!ENù’ûÝ—¿‡ndõkz
+M þ-bøø° uèêªÃ¤yp|
+2® Pˆ\Ž›²?=í°NHú/Ξ¸f¦ဃ:MQŒçŸäfÈ/Šèµ]kòÚþ!zmÇä÷
+–já cøÄq{›vÛ^³ö]…Ϩ8'×Æ ã
+m`Ýžà0¬ð~Á÷d!!¿ú M®!@ʘ¿ÿAJñٓÿ›Ëw)à€ÞyƒÃG:*8EaÑG@cÄ~Ü÷:”ÂÒB}†–ÆÕX9qùè^$„áÚ»%iPIÐòX`¤½KRV‚ÚåíµåËyª¦¼Û¾4µ,rÅÂÈo9Ö)gôdáÔ¤ø8œ·«z^1v^AµpL‹šýúUÕúrCüÞ¿x ¸úÙS¹;bí-䌡¬¶-›Ñ]9‚‚‡úk[\¸*g\.lÓ̸œhüÓåÍ
+ŠÌ:/»—^AŸ/ø°n  ùÑ渎Å;š'§hÈ`\nDÁÈêfíöÖFË
+˜¹‡ptc‘©ëÓûªñõ@ÉÒ 1µÒßyA'@»Ç–u¨7þ
+?»ºë‘jïCÇ´ZhHUH¤|ópÜrT(Lò¬¬É³ËxÈ®îÝœa„£Ï9n]C Ý=UQ\<8Ib¬žD9,º3Æ–T?çµÊ,®"˜bñ|zÛç}ÄHÂã]•—DÝAa#E߆ùnÏ!ôôH$ÀdA‹ìöùŒÑ3*^»c®œÃõ+•õœëT#ø)ßõ«W%üÍAV%.‹¸fd˜BV
+Td˼È[‚«¢>X»dÕÖCH‚xç½îý·qì„c>l¼ñ~É(8GMo[Ð/ù:ö]u?œ¥
+pJp’‚ù|Á<Vã
+:.Èc2 ľnêý1TÜŠF7ö`7ZŠˆFç@侉Kõš4xçÞ—†Yð2àt ^I¥ObÄì$aù©8ån‘?W}ŸJÿu¸è¯Ù²™DYR"ÚÃÜð“*D~CÃw/
endobj
-1726 0 obj <<
+1748 0 obj <<
/Type /Page
-/Contents 1727 0 R
-/Resources 1725 0 R
+/Contents 1749 0 R
+/Resources 1747 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1723 0 R
-/Annots [ 1729 0 R 1730 0 R ]
+/Parent 1737 0 R
+/Annots [ 1751 0 R 1752 0 R ]
>> endobj
-1729 0 obj <<
+1751 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [213.0783 507.6843 261.825 518.4687]
+/Rect [184.7318 419.6605 233.4785 430.4449]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_security) >>
>> endobj
-1730 0 obj <<
+1752 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.1622 385.1227 446.9089 397.1824]
+/Rect [369.8158 298.4384 418.5625 310.4981]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_security) >>
>> endobj
-1728 0 obj <<
-/D [1726 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-490 0 obj <<
-/D [1726 0 R /XYZ 85.0394 131.4374 null]
->> endobj
-1731 0 obj <<
-/D [1726 0 R /XYZ 85.0394 107.8521 null]
+1750 0 obj <<
+/D [1748 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1725 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F41 1218 0 R >>
+1747 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F63 1382 0 R /F62 1379 0 R /F21 950 0 R /F48 1253 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1735 0 obj <<
-/Length 2819
+1756 0 obj <<
+/Length 2832
/Filter /FlateDecode
>>
stream
-xÚµ]sÛ¸ñÝ¿B}:¹!ø$€äÉ—8©o_Îu§Ó¹»Z¢-Ž%R'Jöe:ýïÝÅIÑŽÓkG‹Åb±ß¢˜pø‰‰ÉX楟X¯™áÂLæë>¹ƒ¹'"âÌÒ¬‹õýõÉëÊN<ó™Ì&×·ZŽqçÄäzñó4c’>}÷ã凋¿:;µzz}ñãåéL>ýpñ×s}¼:ûôéìêt&œÓw9û|}~ESY¤ñýÅå{‚xz<AôêüÃùÕùå»óÓ_¯89¿nÏÒ=¯à
-òÛÉÏ¿òÉŽýà gÊ;3y„΄÷r²>ÑF1£•JÕÉßN~j vfÃÒQù ΤÊäˆ
-NšSTùÍ
-`Õt·,XåëjŠíC±%(ò…0â !F䶎(-…‹Ï4“/$⦉KH¯ðÍOójñm:3Âê[‚äÕ4i1í>"Öu>_–U¼ä²¢gUìh
-£p]™<-»øü “xvÅö6Ÿ v–f-zÀŽ†_/ÇlRxÆ3}tØÙC6r^4x¡r½Ù•)…¯ütß ‚ìj‚iÜ~‰À Ý嘰H¥Z € 
-”>…é.¿àîsJ‡cA´s a?O¯%$ZQ°®ÂJBÅ£s„DjÑI°0‘ =QƳ,!-C…„!íž7Å2@_–¹>?±¡\@y3v°CØ¿MjϨ[>ÃÔP’ÑÂH„Ô! ü»r¾_
-’æo¾ s¡ xý“ÿe ñ¤×´¢E&¯™ ·Ø*R|ÿ¶Â[¦´r}MëñÓÍü;Ñþù¢]ø\!9o7îÍ›×J¾ßá%•„⦭$u
-%t+eMHjUÛðˆÈ,.©)·@hŒ:-͘”u‘­yJ³¦ÞoçÅÈg-z?ijU/%‹E”ÊLßq†â â¥õ8FqÍ>¤y0Û ð™±”J BÛUØ¡«€Ø5‰`1qV_RƒqÊÄIZ|H5¤{Ê®lƽ_j‡t½£+5U­w긡0´%Ë´'tL JmLÄøókŒk“8ÚƒnËæ>;¨Uð ^.ƒø¾.w;òÒ$.œì§ˆšœÙ°!
-?®(ÊÛÔF *UuP ¨v*ª:šÜ‚M×kBØ„"tG/Õ~}SD
-·A7Z\¾”ÿè=îö‡
-€î]ÑßSB‚· Ø~iUE  ›Øà•4`bKÕ§F‰·©¾yR‡»ÕF…./ñe‰¯ÐÙˆ¶Ó2hS ~¥ˆ(UB)F“Ô˒U
-–@„Túàö&I¹;mgSzÈê¬Y…-i›uQb&¬bÏŽÙÓŠiücøÿËÝ0‹‚¡“ö¨
-‹;F8ñM^ T´?F”E2)Ú
-%zž—Ó¤Þ&¤U¯”ñpY×£>Y¨(¨ÜÚ?b òóe1¿ÇaFÝjgR¿Õôºç0߶|aŠBZ]™7T‹‡rÜ›2! U©óQßmó5ýs†sXé@8 $Ôð$Ùm±å[<¤Éev`fý]Ü$z†¸œ+.£7òÓ0(6Ëby2Ô\ ·¾»ÐTÙ
-¿‡ù‚·Zý‡?»8|“‚>Ñ99þE…´Rg ™
-…ž;â<}ŸqÌú
+xÚ­ZÝsÛ¸÷_¡>Uî|@òäKìÔ7/çºÓéÜÝ-Ñ–Æ©%û<þïÝÅ)QŽ3ÉøAäX,~ØoZŒ8ü‰‘3Œ+¯GÖkf¸0£Éò„îaì㉈s²4)ëÎúñæäÍ…²#Ï|.óÑÍ]‡—cÜ91º™þ:~ÿ÷³Ï7çק™4|œ³ÓÌä|üãåÕ¢xúyÿóÕÅåÇ]ŸZ=¾¹üùŠÈ×çç×çWïÏO3ጀõ2r8²àâòçôôñúìÓ§³ëÓßo~:9¿iÏÒ=¯à
+òÇɯ¿óÑŽýÓ gÊ;3z‚΄÷r´<ÑF1£•J”ÅÉ?O~ivFÃÒ!üŒrÌ8i
+
+¾t rÇ
+4è™Ï0?”d·ð$Bz‚ÐÿÍ|²]kz'\qF·PÁÁà$”pðP,ššfaBŒ”~ÐWÒ†œG h¡±Ðú¦¤eáa]*#¢táƃ€i«4¯c©üˆ…v¡ˆ&ÚÏGjˆ˜ Ðë}Ô¢E[\Ô1Mzš• ñz/›™–ÍœVFƤ\,*ÈÑj†ï;G='^ßóœQºp‡UÍë+ o™ÒêX%òtÓÿNÀ¹h¾TKHÎÅÛé­{ûö’ï†wxM9¡¸iË Åc1€D*'Ôê(PƒZ-¶-€‚ù)R‚æ!¤ ‡hK0¶oK0ˆžöi¾™Å DÄ+ Òók4ô'šЩcBR ØÉõ~„Ox4)$>íɆ“ȳàà<RB „Š~L8²¢Åh_ÒPïfˆ´;,.im9ŒÑ©â>D¤’ùâSHˆÊ/ºv„eÈŽnN½שWðP¾P‘´•ÓPAn5e¿ÇüЗóߣRÕUùú˜Gk8ËÍë}D.¥;(k92}PÓéÔõÔ®§ꃰR‹e[Ljˆ¥n±Ôb/]‚¡mµˆ¹ú~Þ(4s<¥‚ÙÐy8Hot·.EA;q ä{š'ˆ5}¥zj‹˜> –yy4ñDç0ØYi&±)>ÖÁµ­ðÞÙçš)ë_<äß9÷{¬{ÁMÉ1‰…ŸÖ½JüÔcviÛz°Að€@‹(Á%´,%Ç„À®Üň„”rkÇw² ¦å]áo¨6
+|ðÐlC¢ƒ±‡
+ŸK¹Nh[ avh-àìšàZL˜ÔçÄ9ó$IZ¼K5¤{Ê.6ÃÞ/õDxïH¸‚ASÕª{uØSØ·%Ë´'tÈÉ3«MúRò·!Ñ×&I†A´
+°&
+w/$<SÆê~Gƒ¥ÑùP7!~–|{ì_H mÃÿûø‡>Jøó¿—ìþ÷!wNîÂE/6C4s`cI¨Júƒp–þåPôÿp¦‡endstream
endobj
-1734 0 obj <<
+1755 0 obj <<
/Type /Page
-/Contents 1735 0 R
-/Resources 1733 0 R
+/Contents 1756 0 R
+/Resources 1754 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1723 0 R
+/Parent 1737 0 R
>> endobj
-1736 0 obj <<
-/D [1734 0 R /XYZ 56.6929 794.5015 null]
+1757 0 obj <<
+/D [1755 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+490 0 obj <<
+/D [1755 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1758 0 obj <<
+/D [1755 0 R /XYZ 85.0394 752.051 null]
>> endobj
494 0 obj <<
-/D [1734 0 R /XYZ 56.6929 291.4983 null]
+/D [1755 0 R /XYZ 85.0394 219.3808 null]
>> endobj
-1737 0 obj <<
-/D [1734 0 R /XYZ 56.6929 263.1273 null]
+1759 0 obj <<
+/D [1755 0 R /XYZ 85.0394 190.7166 null]
>> endobj
-1733 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R >>
+1754 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1740 0 obj <<
-/Length 2567
+1762 0 obj <<
+/Length 2802
/Filter /FlateDecode
>>
stream
-xÚµY_sÛF÷§ÐÛÑ3§íþ'Ù<¥‰“s§ur®2s3m(‘²9•HE$íúnî»°
-•¦z²>³Îgé)«³_Îþ¹8˜ KÇüçL"\¢ãj=æ@—
-o´ ,«¶Ø.³Eû‚½– ~]”Ýeå*›¯Š¿ãAJp±· %Tٺșk¨Îë¤çº/W+RÑ5éhoYé¢ÞnÏUͦ®ò²º¡ùæ¡i‹5±äÅ2ëV-Ml³ê¦xã$Žj²½/0~˨dž}eÛ ™“©Ò©0Ò&0R"uN ëûŠÎ–u5ßÓ¦ìpër2ÕZèD§a ÈžÞÙi—o¦›z ò§^Êè?ô fÒPImiä3î ÿû&Ø#í2ýëdh0Vh“Wu[|>µÚGëìfd5þJèhpô54ž3­é–Èú›”zQU»z ú* "nXâ²Þ2±è¶eûp®”Š Álb£·4•My®@ D3—ÿ.ú¹MQ嬻®è{—m˺câ&›Ž9p  AÝ`DXÍ; “F÷ ¬Šm¶B³‘Lû^Ôë5¨#Ž’W,êªÍÊŠ~d-M®Š¬áyåMbiÈG… ¿IÈA&ÏK¢¦Q½¤YpXÐXo€Q ÜŠgÂjVMM£öTì0òFyN¿¡R¦8N~[TD„ÈÊi´Îhr΢ں&B³ÎBâ
-ïcÇ 0,Fœ …ôÎ…úõ¼ øü¼( l` o‡BF v˜ãl¿KÀ@e„Ñq|˜Ncp†e`
-kRÓ‚,\W`¸*AÐW4Â& ”].yÏÝâ–û¯„(?p 4Úí#ÙhèüªÅªË - WªˆÊIÍئX”?ÄaC• &s¨·‹¶È± ÑlS´4…ÇŠ„¯]±} R°
-Ôø„7kèÐÈpQì/ðȼ
-¡ôšš««P¦½&J° Ç:ðvèÍ Hòê3Üä+À27Ö´âKz¸>…‘гÅxëÝ°LºÎæDÞíàQžÚ4Ìš SáuÙ…iìRŸN¦û?•¼:õš<îý[ÈŠ½ð1ÄÞËwÚ¯8…#)^C ðŸ†åbaµÖßF”‚~<Iô·‡‘¡ä'`Di‡ºƒþR‡ÖTQïoA(EÃðn‡ƒ‚y ‹¶DÉë‚ùCÓŽº¹ôy(EËï1?[*u±¤¡/ü±ƒ
-üI7òZÑÔ Ìø?ð¿¢å,=•!ƒC~]Øü_Äá;YbÇê¿Üã«ÿ
-ºy 3ŒŽÃç8éE¢Óš-²Ð×>=öìîÏ¥Ì50ý9”©
-endstream
+xÚµZmsÛ6þî_¡oGÝTÞI6ŸÒÄιsur®3s3m?P"ds"‘ŠHYõÝÜ¿],H‘2eç­“\, `÷ÙTÄ„Ã?11–ÙT¦“8ÕÌpa&‹õŸÜBßÛ3tf­Ò¬¯õÓÍÙ‹ OR–Zi'7Ëž­„ñ$“›ü·È2ɦ`G¯ß]]\¾ýpýjëèæòÝÕt& ..ÿyN­·×¯~ùåÕõt&#¢×ÿxõþæüšºl°ñÓåÕ’¤ô8aôúüâüúüêõùô›ŸÏÎoºµô×+¸Â…|:ûí>ÉaÙ?Ÿq¦ÒÄLöð™HS9YŸi£˜ÑJµ’ÕÙ¯gÿê özýÐÑýœIeåÈj1¶&eVIå7ðÓÎmfuµÛ.Ütf9²<ߺºÆ¥M„4ÌÈTMf‚ÅZ?äïÔ%XjŒœô:6Õ¶ñ}2eI§#£ KãØö½ôò™ˆɬ5{ìÛìÞŽ¸§Ó¸ð¿Ö»Rööq&RÁd"ãÉL &¬%o/—A·¿ç)3"Á“B] Ëг]¾™¡3õˆíÎYÈv@µ1)$“ÜïÙ´_`³¨!†íÊzãÅïœK—ÿ02µL%V‡ae¶vùˆq¥X¢l´öÅjEæwnñ›6*–$jî5ªÛfMQÞRýP7nM]›íT$Q5£ €Mf&9‹û"w°¥L”áC·£n·ÙzíÍb_Q6n*¢í2ÃÈFISÑÓk»f[@·»o;ïBû=ë¿…Ir·Ìv«&ŒÍÀ> £·%œo¸Í[;0e+’øÓð¸¢14¼Ÿõnq/ý
+ùpeèrðWàø£ŠAù>+VÙ|åÆŽ)… ­yþ˜b™èá1Á>4HÕ–ö§ÞTeN‡›Ã!J·!Øâ^âéÅQV¶û¢GáGEЙ¯ P…õC:*®Óv'׫}IP檤E
+.5µ¬1ʼ¤öÿ^ŽÈ£ôú
+›GGÁ‡°qU5îÇéLK­³W<†@¡3À·$„&4ü„5µçAVï–¨Šy¼(\Ù¬H¾Ê¼‰Û`‘"õÝb·-š‡)l[ñ©½¢.H+L‰-†ZP.þãÚ¾+ó0wUÒó>ÛÕ.7Ùll!'Du!¡E4ßaL¨4Úc (t°4X¡Û(¦u/ªõ¦#"ŒXTe“%½d u®\V‡~aU¢©Î
+~çPƒx^4ª%õ†vl@Q0\Šõg¦YÕµš»¬®¢ŽG´0† ðÜËè
+‚òý+I¡•Sk=Pç<˜jªŠõ:ó™2€(kî<.€h³Ûn*J6©
+ÝŸÙz˜ 6Ø!ùaûpuùoLq0²¦—À
+ UV 5 Ÿ«ý(çM`íZ=Ÿ²’Ûx°ö’(ŒŸ¯¹«víLô h§ßl‹{À9c€¨˜£(&Ò‚ý¡¬@s…wß‚/©…$ÀWáŸ_02>â9VÀG ƒ=TÒâXI`~åbµË +É’4¤±s§,r¾ÀK¤«[4.ÇzF½µk¨ ÏþbE"ïT@ñƒýx4,kà7Ã:WO:€·¢ív£] %‘ÌAoXDèªV;J„vd€Äš$-ÉÝ*ë‘IH‹æ‚bÓæV̉*Ö¸Ô¬ ÚáyŒ¿}‡ÃÙ—ä´èx¼èPtY ®ó
+L’<íN§5âÜ
+¡°i.†}íFµ‹Ó ãÊÚÏú5D@ø¦Fÿ` åÞj}Ú ã`*4ý
+F,g±JÄ3("$P¦„ëï‰"€Ô\[ýýA¤gø4†¤ ?.¢»¿Vž•
+¢ý*á„Ôôì°á‚dЖ$y傾çëØ KK›s^âšðé Ÿ«¼4üpígh _:˜ÀL¸2_W ÌöøÇ5!COeG-dþšäÐ,åv´øó.¿ù#Â]ÇL%‰<Á"â„éŒ(ÃÐîuÌó¨ðß‚VÏõÿGç“rendstream
endobj
-1739 0 obj <<
+1761 0 obj <<
/Type /Page
-/Contents 1740 0 R
-/Resources 1738 0 R
+/Contents 1762 0 R
+/Resources 1760 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1723 0 R
+/Parent 1737 0 R
>> endobj
-1741 0 obj <<
-/D [1739 0 R /XYZ 85.0394 794.5015 null]
+1763 0 obj <<
+/D [1761 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1738 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F62 1361 0 R /F63 1364 0 R >>
-/XObject << /Im2 1350 0 R >>
+1760 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F62 1379 0 R /F63 1382 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1744 0 obj <<
-/Length 3435
+1766 0 obj <<
+/Length 3271
/Filter /FlateDecode
>>
stream
-xÚÝZÝsÛ6÷_¡·£f*Ÿ$ø˜6NÏ«ÓK|Ó¹kû@K´Å‰D*"×ýëo» H‰rÒëÃÍt<c€À»Xüö€ÔLŸš¹T¤¹ÎgYn…“ÊÍ–Û+9{„¾ï®Ó,"ÑbHõÍÝÕ×oL6ËEžêtv÷0˜Ë 齚ݭ~NR¡ÅfÉ·ooßÜ|÷¯w¯æ™MînÞÞÎÚÉäÍÍ?®©öÝ»W?üðêÝ|¡¼SÉ·õãÝõ;êJyŽonn_SKNÅ…Iß]¿¹~w}ûíõü׻ﯮïúµ ׫¤Á…|¼úùW9[Á²¿¿’ÂäÞÍžàC
-•çz¶½²Îg‰-›«÷Wÿì'ô†¡Súëi@6a¤S_ÄVi‘çÎN³•°J¤©²—ç¢qæâj1žê¸½iž gŽ»«õL)‘;§q{S-L¦ÒYælyJÛ{‹
-”¹p©UH¨$Ì¢Að@ñv¾HUrÿur¶0§Ìt’)áFγ3%¤ÍsC4ƒzXéQ¡áë›­ž½n`=³Á’⼋ÁÄaI©
-DÈ*>Mƒ¼ïË0”ù¤Ø´ ­.5ƒAVÁê
-€9bþÏ¡y AeÒÕ„‡© âÓÞèTdà7¤”Éšº$'p7WJ%aƒÊ};
-S$ú² å
-p ÂÒƒ|Î%ër³ãjʲn½Z±´ 5XyU2uX{èe2”…ûžªÍ†jÕòÚ ¯Qµ0ó# *€–Xlº5ÐòÅ”i¿ ¦Xl`Jtq Wm6Ù5ûŽjÛâ™*÷%•í®\VQT%6<UÈke±\³‹™–
-OIRG|Ž W§Eêòl¬¸d0˜rUVS#³/ŠÃ&’>P#$g q™'7ÔÃΡR/´vé—*"ÓR1-Ù<Î\µÄò±úT²lUMMÅOˆ¿ØcdVuÎKƒÿqýµ}¶`÷_Ñ´s&,bK¨ÚW«’ôi”CéØ\Pa*È„V2¦&}80V Ô!pJ#9$NI‰i½×ÉOkT‡±rR >6“ùP éeõ§ yÆŒFaf©)úB¥k¦ØZC¦OÄ&ø€Ê ñŽÞ-5ì `ÒàØ­<qì¤u KÒ:£8ø5g€
-ŽsÑ\I’Õ_†ELÛõ‹89{'¨ÁPªÜ¾:Æ héãÔv‰_Í>J[01î l¨Í=åØÖ[~TíqAà¼à< éïHåv×qnÁ¦µ_`GkÎ4b@Å:®=Ú² PG½º˜~Xi¨»pZëÓ!Õåô£§BÑ·Åo‹˜ýàž/ºj[.ªú,qpFò/ËÁ4bŒ0§1—NGrÜÔ÷2b¼ô6Z Ô†i¨7}r¨ëáa÷¦©CÐGÒà=©öÍc<©Ÿi䶪]ÉÍŒ$Oq& )÷ÛjA{œU8ìLrušo½³£ÌK¥%Uz– šªk8µ´Ûãé`/ªíaKŸŠÍ¡Ϭ=³-ž³ZiN8¾Œ$“a|ôŸAÒ€ê$EªI$U«Í$’l&<$­/KÒSMˆ2F“Y®üX–#šT&5F“Bt| $)ŒçTî‚ìÍã1ÀVrt=²T,åPéà \ªO¢ƒK€KÁqVð?‚+½„-uÄÖÿ Z&w¸êeh ©.C«§ºì¤šCwî¥R¡T®^¥§še„-8´Ã Ý…y{è\²w>Câ1`pz…Ï¡«Âï €„½U ¦\/Ô*B˜
-µ~{áƒ3!¨ÝGVC@å ×økz+¹n*3ûH ¨^€T¤ºì­&!ed?Ÿ¥§še쮼0º…9BÊÈ)#åÈ_IuôWR‘¿‚rÂ_ÁÀà¯dÄ þJ¶æˆ!îa% ^a«„–Š ¼Ø`0É_ÄgÁª¬6Ùg
-eÓ—£Á€èr0ˆD'Z®èFe
-ùÑþCËÑdñ… š,t“ÕÁ8–‡=mwØæ0 ‡Ã9‰‚cÔYìó°ˆÞ<ŒïOBá"zÂU9”!ÓâVÛJ(­BêŽ:([2ýÅ'öᡯÿ2Þ ?§bÕ?ÏwS@ÎA °]3¿¸jì‡UO„‘‘Dä©Ygþ<€§uÃþá&.C=lmîÌØZ%u:ÚZ75^üS¬Òtc;
-Qñžd9 Q–žîÆm§á,¿à0ŽË½ìŠ6fžôÅhûWÀKWÃ^8PÉóƒ™Íü‰B.8e2!Ýgž D—I$¾†ôü¡Ùo‹óóŠv0‚ÑKôDç"ŒK)Ò̦#è¹Zånx<ÁÏ%†o¬Üs?íÖx; §†*+¼z÷ ¯¦'¥Uµ_MÅ.Âç6æ Çx‚ &.‘-l¯S§?\8±áe/¥ñ„ÄóMšÄM×›…~LMƒ§á÷np9xÊ^  yŠ8%\êϼ«óœ„d!e¤–ØÃÖã0ëSÛ@ÐP¹*Ã5BÍä},Îx ˜—øFaód]Fá¦øÁž°j¤G”»±n.îa´ê“ ÊçMXVxrÌ’×·ï©…³j 鶲lè4üÔ¡o¯¨4$ªžúVSkÒ`{ ¿ýBdäªþÑkW,?°ìá7À1œ½)AŸùà;ÈÄ[ïPv­²Ó`j,¸Ü5m[Ýo˜òå†û©`‰IjL
-ë‡*æý§ž|Ê(¦Ôor!}­Þ.ñˆÔRÉé¸4­†Ô– £þ
-•ö‡åÁ+ô…_‰'ðg›1_ö¿ŒüÓ¿ =þøÍfÂx!{ÐbY“°P¸‚Lž'LR€6ô„èÿ=?}endstream
+xÚÝZÝsã6Ï_á·*35Ë}sOÛnv/kÒÛõÍÍ]ÛÅVbÍÊRÖ’7Mÿú(KŠìÝ^n¦“™¢@~
+Æø±J ç’x^¬g(‘¦*>=õ“0“¡Çx¨£{Ó,©–®w¯Ö ¥„KþuRd
+Üš#$6{oÐÀžÑ‰$ò))£AqÏq{¹LU´‚ÿ:ºšº†ŒÑ©µÂ)‹‚JÈØ9C<ÚÏôhßðÍõN/^70ŸÅ`JaÜå``?£T
+­÷MU5OeýÀ½»²©y´üñ±zæQzþÖ¾—üŒVBꀒd"4Iç×fZ¹Nƒ¡çò1A»¤¨™ÊV Î>/¼çš‘>JÆ %ñ¯‹Ÿ¥ÔužÔBð‘EUs—WÔT•mG”÷$|½þ‘™7›ý¥²QѶ¡`©ó]A-m±ÿD0ÒìyêK=ù—gh‹šnnW×oþCô$ä…ˆ
+/h·bC¡ÿHÞW,éæý8(IêëÆ?7
+f^Ìíçî¿2êÂߞʪ"êã¡\À€¡î5šF~à>Þð„)æU·åš¾˜‹í[‹yCbŽ»ê8A?é8Ž›}GÔ.&â® gûX¬K„(šžJ‡T‘¯·œ#‡QiV¸,6aÍÇ×$(X0l–þ I„ϨEQ³xÊ@@ð¤uÀç¨SÎpM´H—íÁSN d`È=‘à°:P›â>?TõžžPžÅ‰^1{ÃÖ¥·Õûë·D}(ž‰X‡)Ôºc c C[(oaê6² *ØÌvZÖ‡:½¡€
+YzÞ1g[>ÔÅæoðbÐÐ%³‘î>q¨ˆÆ¸çÞà#Jý,ÔÏi"j¶,+èSY<ÍÃõº~¹ÝÓ³øõ±*×eÇËÊ0~V«ÐeOÏ]Âß07næ€ …”MM
+áæIi A ª:ÑÀÞ‰ð|(?yGa?ó‘©àÅÃø¬üR–6"U:Ø©ÅòeëZ_éÈ{Fb¢¨°º¡—Ó¾Ü$±ùR¶2P£iÆ=V¨ëÙÉÛ J¦
+±åÅí‡ÕãPù7×ÍÛ\¬ú´Äu
+°ž6»Ã4žj@½¼àék7$ºfF¤ÕhzÝ×ñ3R@ ‚pm”!#¨XøùŒË¯Ÿê€— Œ9'8¡â4ù2ÐA%Ét0:-cl0vB{|cÜ8ÌCœPÙT(;|س•/.÷¡Í»c9­A ›Š‰QÝZì;®BY] ~–‰¬¹& •—OœÄÖ9Õ¡ð«“…j å‘KÌg
+Õ!×éBµç¢|ôë2ÔÉèÞeWîŠeY¿¨ZÁÒN§ñyMz®UFƒàq2³c]®ë;Ø``qeãP»5Ü´X%”uíü\5õƒ¯‘Õ/µDù’ÊbñQ?SÏ]Yº‚›¹(²T”ø.Å~W. XPL»TÙ1®jˆ¿Í!CiÉ` ""4‘[ØI·äññpàrwØÑ˧¼:㑵e±ùó`ÔXš‰Ä³h‚âW(%“óhrFSÏ5‹¦rSÍ£)…L[÷³šô\3ªŒÑ¤„2ŠGºѤz4©1š¢ã!IañGÏG¯{óp¬°ÕWûªG–ê‘¥otX–\ª¯¸ƒKMÀê:­ÿWp¥§°¥ŽØúÿA+N…N³ø3ÐpVà:¨šC÷[6°Ô¤çUé¹ftcˉ8F¤•¹=t . [=^ÉqÏ88ë€×aªÒ~÷ ¡lå¹icà©’»¦<Õ»^xíê.ˆÊAI'Ý_5[Ip•ŽÍg 5à:©Àu:[ÍB
+J$XΫÒsÍè2†T*Ò,›(s„”‘RFÊQ¾’꘯€öù
+ž3ù
+:ú|%¶¨¯ÏWRó• ðBÊç+éáåMÂ
+=׌#`¥ l× ª)ñ¾Ê?¡ÕŒ>ždiÓ§h~5›M¹öç8þ›×˜>Ò†•šý5m¾áéO7Ä€±ãË{jàÔH²ËœÖ‡Ýo‚KØäs,µhµ%­‹ðàûÁ£,ÖitEgÐÞ”ò@{ rzû¹‰¯µå3h£‡«z‰4ËËeG_ñhuÑ=5ûôr—×›§rÓmgÏV—NGhXôýi:’|.‡m½@{-°H#/îïqÛ«U¸¢7²Œé¡E£³¸§-^¬y@´?)ô,ý©…òG`°¡…M•å˜n
+³™©yu¥>±ÑÖ©H,Bò4ô'xÍ2XQ5Ú™ûí¾Šü¢ʺ+p½_ð:zàãYd9¦EAÝãì¥
+{BéQšÖM½´—]ÑÜ`âÒ‹õÁ–³¹MË#†‡08“ N—ñ¢ÆâákGi»ª¨>0át v(Pïo_q“÷ÚàìS3ƒÃwüR¶íÁý¡Ýœ»ð²Ñªìù+ÕrxKãæÒ†}¹ŠdRáöÛežž³±)®t&yn«žÛŽ{{2IÃkÄ]ÓmÃÒÁ‰ »ú…Ý8Ìy›úfH%±p6Îί C®ÓkBÏ51tIw£!΄”êÏÊï¹f-°è9 ÂHLíBnÑ6²[æÔ ZŠÓPö%PXÿ‰Ð4:ŽãQT“@:©ÒáZŽ± ­}ì»ڇÉú°'Ç{‡ûax%¡>\¢(ØU™éŽÝg 6ú@1¼Oô—8ÆÒ5‹¡ƒs|ÂÖv9:{îŽ>Pñzâ7܃àOA²$ÜÚÂwGMCò¬?®òì¼x±[–fßaÖ3Çï#(i³^¤vsÜ«>Ô|8=X*fŽå¡.1ÀµJêtäZ^=®k¼4¢e‹OkG«U8%]¦«UÌáOÚ±ƒÍqæN¤ŽãtO'„¼ …(]‚n©y…|™ ˜äeÄ,ÎìÄ 'R
+ì$¡$úÌ6fÀt:¡¦áõº¯Öï›ý.¹}è‡~ö¬=ÓKÆ)Å ëðHú­ƒrÉp·‚¯þê‰;þN^BŠÝá;=5Dl l„iðlzVšUûõÜ*f2a]Ÿlêb òŸ ÿ̱r Þí«þG/“€Vºã]MýÌãÍF, ‰ýàÏ=S<éžÔ„óx ÆýÑü ?N§D’N.3èꎪÆ7~ÍôÖñ¸"f}‘Ë·~|+éjfïåŒ=À‚ø‰7s´~No9úÄ|¦‘VdJ%ãìvÒ_&ZõÕUöÆOËßVgÑë›÷ÔÂeµú²[9ÿ5tyî&Ó·† xêLOß6ssÒI*@ÿø ‘áð§ùúëîÏýNüÄoM"ðGz31*ûŸÁýéß é¥„±öÄŽÒÈTXí² N'SS͉ÓêlFõ߶ò‡»endstream
endobj
-1743 0 obj <<
+1765 0 obj <<
/Type /Page
-/Contents 1744 0 R
-/Resources 1742 0 R
+/Contents 1766 0 R
+/Resources 1764 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1723 0 R
+/Parent 1737 0 R
>> endobj
-1745 0 obj <<
-/D [1743 0 R /XYZ 56.6929 794.5015 null]
+1767 0 obj <<
+/D [1765 0 R /XYZ 85.0394 794.5015 null]
>> endobj
498 0 obj <<
-/D [1743 0 R /XYZ 56.6929 676.1712 null]
+/D [1765 0 R /XYZ 85.0394 654.332 null]
>> endobj
-1371 0 obj <<
-/D [1743 0 R /XYZ 56.6929 654.351 null]
+1389 0 obj <<
+/D [1765 0 R /XYZ 85.0394 633.0122 null]
>> endobj
-1742 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F62 1361 0 R /F63 1364 0 R /F21 938 0 R >>
-/XObject << /Im2 1350 0 R >>
+1764 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F63 1382 0 R /F21 950 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1748 0 obj <<
-/Length 3130
+1770 0 obj <<
+/Length 3272
/Filter /FlateDecode
>>
stream
-xÚÅZßsÛ6~÷_¡·“f"
-¾Þ·'¤ãHj‘^Þ¾£Ùh@i$† 8 Ò2;Xu‚i%Ü¥Ñô&D=6!jõLˆÈÙ„h™5î<eß„ˆôŒ ±å€YkÔðæÿë6uwè7å/ñû¾hÚ&(?‹?EãÇè Ãû/7Ð4×|*×^îŠþš«}S,#ROÁ¢¢©Î‚©ã-Øm:fÁ1\¯È¤ú>§…¸iÇò-ìQ]ÐÂ@5ÔÂ-Ûì¼jN”11‘M3s™‹Žj„Á‰Œ¬Ù–°e¤NPF%2¾C)îœ:¬‹Ôêé¢ë:]¤÷œ.ÒЧ<ѽÁû;ï4œpÀJgC¾rïÕÄ_&¦9?îËÇ¢â&/»©Û‚ûU¾ñ­¦Ø‘[„‡&G­2䬯TÙA©²3J¥´Ž¬‘Ԙώ2kMbñY¨
-›À.û›*Ž>ÒxZ?’R.—¤a4^ûgÎÓaiÏ¿ŠKn|ó™Éö ‡/j9D9âš%±‰`„aØ­ÑY Ü>ìX¸ÄÛŠwßb›±h2´(Ïøé61‚_c¿MÓæ€iìY™d
-©z©ûTç}dGÕ—˹ÞïÅ©‹TQ¦ô LtT/p!e"ù<6Žµ R³iꥶ,Úb·)a4°L¸§‡rñÀÍÅrš/—¬òM cLŒ½Ó¤§÷¹ nkºùø¨¹uûö#7`ÆU±hËš.`Í82ÿ¦pYÊká¹*ZÇšÎÄýlðÉŽ9ÿÊÁÿ'™SoGÉ
-ú~m;ýéÛ<²­wí+ b°ÓU½Лƒø]xaήd¶ÍaO¼ü”;ÂeXoù —U.x~¿]Ât’‡Â¡VLRÕíð$Áw tñ‘Rî¹ SÎûЃƒgnãò[FÇõÚ1‚±€fhÕ£&«Zûfï…¥Øã¹=|c¨—Šý‹Rð/39e¢ú€ë\å ÿÎ/Jéźnæc÷„(‘¤€j¢£¶ßŽnEEñ_YÜ>8
-šKD´Ù‡5óí¶Èw<ZV~Ÿ¿Öpí˜ÖþG3â#ci¢Dš€ÃNý4ï,ÿÔÜ´PÁ³úñ¤S‚ã(C.uNN~q {ƒ0+ß¹+L(d²GÆGZ›i¹bBŽ»@V6<
-‘Ý!Ã`Í÷áDâói10@`êûùœ»ËâÉì˜ Ìø¢f2S󙉢¬÷KFg ç£JP_* eô1|@Сӣ°ì©lÊ^ª|ʉ¶‘MD³;ñéÎ
-Q¡²Ûz7²vMM˜sò]GØ,²w
-O³.]Œ‘e]xz‚:×höÛ-Ù¦†êø‘¢mÙôÐagM£lS¼>;{tV39Þ¯A Ç@–¢ˆÅL‰éoô˜:ÑAY$N¶û·üuŠƒ4,2™ˆ'óCUøëÔ©\D“sØaŠSž«±»FòO9ÁŨº£:ãÅææD' ^1X­¿Ãi`¨FhÄmu|ÄIWÝi8YG+ÃæÄDReò‹¼0ð9M»*î«Cijë‹Hž¶|ÍŠC:?$¦m
-_ÏôÙ5¤š³)
-Å&¯¬òrÝx¦«åÆ"úÉtðØHæ$mÛl1‹“ñBË!Rl;Ì-½šÁž…HåÌEÈ¿"SªÄÙxºðÆ9ˆ”´%N÷D*ú&²ôoÅH…˜ âü_€dé (‰ød–íàÆ}_Óg‚zÏ%•Ã„ô
-Ÿf[ѵÇI¤‘”]|^ Gܧ:ÒR«!89ÆÇÁ ®Ò
-Û'6 §œ*«¿×ž ŽÙ€ó]Mù8…°E*4Œx¡ÜÛ§º EêÔ]Žoèê ]ý%f:ªnŠ„äÈèÔ ÙùÉ}×Nƒ“H³J¥i_¥Ò¬§R O×~~Í}xJ¸ˆJß¿dlb¼WÊáÙ–+9iÚ/Òx=Vå‡ÕX¡ÌPªzì㧆Ê]ªq¾
-ÚƲ4݉¹ÕÓñŠ¯ÉèLJïpô£ŸÝbúEW¬Žjfc¿4£’P<š)‹.@þê_¡~¢§mØWãN !!€ÙšgŠx·ò˜ó„üaý/´5ݲendstream
+xÚÅ]sÛ6òÝ¿Bo'ÏD(> à1Mœœ;×4—ºs3×ö’(›S‰TEÊ®ûëo P¤DÉÉ$37ž1ÀX,öbb2–yé'Ökf¸0“ÅæŠOîaìý•ˆ8³„4ëc}wõÝ;e'žùLf“»Uo-Ǹsbr·üuš1É®a>}óÓ‡w·ïùôúÚêéÝíO®gÒðé»ÛÝôþÓë|ýéz&œÓ7ÿ|ýñîæ eqïo?¼¥OŸ3‹~ºywóéæÛ›ëßï~¸º¹ëÎÒ?¯à
+òçÕ¯¿óÉŽýÃgÊ;3y‚gÂ{9Ù\i£˜ÑJ¥žõÕÏWÿî솩£üœI•ÉJÙc Ìxo&Öx–)©w×ÂM‹¦Þ`QÀ…½‹:|— uæñ»­›¦œ¯#jYµu§Ï¦hšü¾`È @ô(^2¸98MØ{“Wϳ¼jžŠ]±ûôfpÏBùˆ\ÆÝ7DTܽXaã7Îå¢,ªöôJ5ïÛH\œTWëg‚šýv[ïÚb‰Nf2ãÌy¼‚y
+!0˜}BÔ3*Dšã˜°™Þüæá“M-ZâÏ}Ñ´Mú- ä‰÷¿:¾ÿrS¶>•ëõÐâÓš«}S,¹ù»4ïàë 58l:¦Á
+¢Dî…ü>#…ÆgÌK%/Kaë¼vXC)LŽ¬jN„Q:°»J\¦¢Ã!cpbV\j3¤ƒ8,øA±‘„QBÔîPðƒ9ÇÉ"B=Y Í
+‹¢,b×<bžÈÞ`þ.ÍÀV'C“EJHŸ§
+!=ŠÄgQq,LÀ4ëRÔ¸,Úb·)Ag@1Á
+<=”˜#˜" %¦ùrë \¢Š6¿Ñäv¨+ Eùø¨ º{ó‘
+®s•/âœß¤Ô‹uÝÌÆî ‚Dä,P#Âq;ìX}(* ÿ ðâî!˜SÀ„H›}Z3ßn‹|G½e÷yˆk ×V¸ö?F+%"cFdÉ sê§Y§ù#Å8Ë4—ÉwøÑ(SÑ+æ˜ë¡o
+LV*EP
+ùO%
+èl¿CåC©PÙ´\B7)Ô9 \þ¢Ä‚ÅÌ\G¦…±dºi
+ÈXwŠCê,ÍX ç’Ù“¼‹´IŸ`ƒœì˜Lq1ÄJì29”üM˜˜þ‹Œ0t 0¶ãxNÍä€K*AÂŽÒH¬9ÀHrÌ>D(ëý’œ3tç£BnC~)Gã2ÓÇÞ3ÉÄÚEeOeûPV—ŠTÚ2kxbs8ñéÎàä2iµõn¬â ¡ufq?£ëpëS;‡õÇ0Ãë²90=(z÷û]N
+€Ø³.N¢…Tn×\1•ùìs ÄÅ· 7þ
+“K-I×
+X­.»¥ë‚[‹* ÄŒH—SÏ”°FˆH qL)î†Ô¼’Àûž ›½×+h JNVPzmSfcy̳-ï<Â㞉;&D—ŸgÄñÏÀ­
+-‡Þ)>îÀ>~€*Kº¡9\¯´êø½öl¤pL†ÉíÞ™/y§$" |öBtÓC:/E éÔ]ŽoðÞí)éNIÈP²Æ¡«OË/áEÛ%áü@˜œë “ó=ajh¸Ž`Ö““¡êŒ`æÞÄ%»Hú{Um©ˆã\¿ˆýõX}|³å2VªzìÙSƒ°ve®¸•SÛÁck”…Ñ-dñVvE‚çbì½b6­t*HüÆ ×þO ]*%l¶y[ÎËuÙ>ª`ç~L¨ Ã_
endobj
-1747 0 obj <<
+1769 0 obj <<
/Type /Page
-/Contents 1748 0 R
-/Resources 1746 0 R
+/Contents 1770 0 R
+/Resources 1768 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1723 0 R
+/Parent 1772 0 R
>> endobj
-1749 0 obj <<
-/D [1747 0 R /XYZ 85.0394 794.5015 null]
+1771 0 obj <<
+/D [1769 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1746 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F62 1361 0 R /F63 1364 0 R >>
-/XObject << /Im2 1350 0 R >>
+1768 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F62 1379 0 R /F63 1382 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1752 0 obj <<
-/Length 3275
+1775 0 obj <<
+/Length 3358
/Filter /FlateDecode
>>
stream
-xÚ¥Z_sÛ8ϧðÛ935—ÿE]ŸºmÚëÎnÚK³O{û ÛJ¢©my-9ÞìÍ}÷P–m9ÍNÛ™ˆ"A
-m¼0 Ö=%\ž»Qærá6Ñ€³E±mÊˉ1v\oèY­ðiÆÅ
-×\T‹Ï…õʃhœ^,õn²ªÛêû"AR–ÇÄ$+ÚZoª†Ä5mÑ–ËrÕòkÙò@ûP( ¬2÷‰)Éž4õv3+TðFxSߥ5‚âÔø«^•Í+h;;žnY‡-}„fyv4QJäÎéÈe
-ÓY×åfSÍçåŠßã3ôº.7—*Œ'(‚ 6‡#U¹£)Ó¢A{ààô‰žÕj¶ØΫÕ=½¶Ðœ3gýËm!s™¨{vGþ»ª}¨xÖkdB[0Â5âòN…i+d–'a°ò­T"xg™$c×YÚî颞}%/ŒÊ•Y½ú”ú~»)ÚªæQìYÀ¡;òÔΤüæ%®jBDž0ìªüÜ?­Ïò¢yxq3Í8d5IÚMÀBKúÝÙ\ö# z临ͣ…®{6tÞªhh)œÑÉП.'è€ðWO ,x‘£=¼u”ŒþËÙ<7DÓkÇ•î-;~ø¸Ô£w5¬gÔ_óôÇùþf+ îj¬y— dˆ
-©xŽrãˆ>ká„¢f±šS£dšEUn¨g^—LžAf»^£Z87ÜS¶mt2|‰g)ö’‘„ù|S6ÌéîÒH>͸å}G¸}û™\©©g—ZŽ¿âD3Pêä
-f„çO׬$ŠžŒ»4½S ZHèŒ4ã/ey‚qÖ`þy±†(«lLˆipsÏã¦çÇý¤?áÔ‘OùÆ(QÎ8ìƒr|ÞOð¤K–ûžI©ŸW$AÒ—ó¦Mëäøõî(G)‹jQLüš Œ#ä×ô2/Ûr³¬Vå­« Ž‰æ‡‘òÏb¹^” 1˜´I¸«1'§´q )Š×öÏ:¸»QàkYv$DÕñé±)V÷%5Î| ¦wθ×Ôþßë¡Ð8àA}¶0I¾>á°›Eô(HÄÑV­"žR£; ­¢×a9öìqû w±ÿ.îE½ÊY!øBÜN¸´*–å|@‰yð†©È-Qº%Jˆ5¼ÇÒ ¯e ¨Ã~±?š¥ù'd.P½²í‘ CŽ›þ½"0Ñpmæ²Ã=@#«Ã¸bi¿ˆ5ŽL}D7x(Úà6CA˜ãÛ‹&ØL3Œ¿*@VåÿßÃß[¬à&Z*ÂA©ØI²ö¬Éáq×O5È!=s]°8»ÍPQI™Š“îØD9³‡ºnÈAZ„Xè­¢¿ClèœNVRHmØ[Bcja@±¡×Á
-¦ÅìëŽ8ÌSØ_®Á§Õ¢jŸŽ
-ìUð ˜s@œÔÂì¯û”„èmUÐvèVN&oŠl»Š _ŠÞªi©1?Bé+Ö/¦Om9Xi…·RzÐvÅ›8 ”ÍDZ³R´
-oéý7ƒƒ… b»{èó›b2!Ý7nó{DÏl EµŠ¶8³#Fšç¤&šS©Gû‘Y§¤’sÕÛx¡@Kí¸!¹Œú1i¹¬±œÂv›æwîyñ(}°¶Fïåì· ^· ¿gyæþöv Ã_Æ÷Ì5s-²à¾»Æµ8¨»¼?ßhFćç~]¶·pG2Ê„Šõãõ±1ú“ iiaÖ—`ª†©j
-“é³_‘NUÿ?Õ!¿$endstream
+xÚ¥ZÝsÛ6÷_¡·Ê3‹o’—§4qrî´NÎQnz} $ÚæDU‘²êvî¿]ì‚"e'×dÆÅb±
+aW%žúø˜mòÕX"†AÆ)ÎEa <‘8‚O³àݧ]ãˆ{  í:b½wKõà,Vߣ˜OZ¡]§ðïሶ[ò$ÛC'Ë~H1Ô‰öŸ‡K®>‘ó <hp™€h§¾Ó!‰4IpÍ8ô‚Ò$Öî¡Ô†PIÜL I(TÀ9AÚ¸G\õ¡)° Û†þsË •hð¾Ù6~œåCYVta4®P[øó° +Úa˜XQiÜ_°b*a,1I§‚ÁJ>‹„§O”ü” §”Pù„} 1æôÙ0Öyˆ1”¾ö†jgovT—°qY·g:K7Õkîw×1<þ~È÷O}œ äúHGÐ@tôé¸q qX•Ñ£wOd'¶4sö/O^îd¯ºD…¶ÕÑç P>–‡õŠ:QÂ
+²ˆµ1¢bÑ ,dëª$ñ7Q>…¡{¹]óÈ~)ÆA ¡ö"H[v†}á‘€„èÿgvþªÇ/…<w¥aT”(ÕÇ™±cÓ32¨¦ÛÇŠô6a_Øí‡í*óûª<ÐË@Ï°|[å¯yyò§¾p v%iÿlÐÒ”Å*_…PϤ`‘-¿IÃ*„ýÍNà¢XõÓ ÀTß•UU,ÖÜ\À+šd¤¡»&7ðl·;í3á`$ßH9ßø¸Ë‘„fòù©ªó ßüç!Õ¦,dSŒ.ñIR2`~Û¿?eÊ›Ýs«'Ú@d7Ùö‰åÃÐPæ ߀
+֤
+ü܉¸7‹grâF~ÄÆÞÖèígÅþ“¬$èx«/MÚ³føQ3H½`ÃPÚñ¦ƒ£/ckûYÁ¸Ö½Ô^›8«èËP¨m£¼6På!tbO‚Î0ž
+u“¸À;j9ÖB4 › 3ý\¹Ö€ô&s$ÀÄÊíw_‰äçšê+¯ KÈáé#Êy˜K›K:À ;ý¸eÿýK4`‘:˜Q%P-%ŽøB¹gB©ÖUuðÈŽåÎx#|ü°eÃåà‚ß_øðc˜\l‡¯ÛÒøïåÏï¿2B>T•û| ¤Â¯9êùa¡á¸½à¨6öžDkAÞS§?ó׈kÖ»Ô9lv ‘ó çƒG‡×3
+ÌIâ^ ˆi®ŸÏ¯ˆb`¤{aI:RϬIò–eu6¾(xU'Ôó#7R#C÷—%ŽD*mlòg*;ë/m©ìW&ÞJÍ7%æTX®Cÿ¼.n¥×F«vœvÝàetÝðëqœÆß¾n0PøyA«ƒ€ŠâÄ©þõs±06ä?m
+b© ÜPºv奓ð£¬å…släá‡=—Ö¹O­}ePßNÓà1YC’ž€÷76ôòîæsÛ«Xý|| ü9ó)䊜iÖ3íÇ6*‡º='>Ývžß»ö×GX—Ñ㘱ŒŽÃÀ ÑÅùtEÃñ+`KûDÅ3±€Ý95Yp;ÐGŒ‚Ÿ”6ÏôiTðM‘fwBË>+*n$a×é¶Ó]8¯Pb”í2\×0\Gá9oY²ü†n¶ è/© ¡é÷û™Ÿ‹iáo¼FpJ4ŸßÿöOÉÚßÙAî¡“D!uˆ'Þ ²Q¸±>ûUchúÿ
endobj
-1751 0 obj <<
+1774 0 obj <<
/Type /Page
-/Contents 1752 0 R
-/Resources 1750 0 R
+/Contents 1775 0 R
+/Resources 1773 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1758 0 R
-/Annots [ 1755 0 R 1757 0 R ]
+/Parent 1772 0 R
+/Annots [ 1778 0 R 1780 0 R ]
>> endobj
-1755 0 obj <<
+1778 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [442.7768 519.0086 511.2325 531.0682]
+/Rect [471.1233 483.7823 539.579 495.8419]
/Subtype /Link
/A << /S /GoTo /D (query_address) >>
>> endobj
-1757 0 obj <<
+1780 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [361.118 239.5449 409.8647 251.6045]
+/Rect [389.4645 212.4953 438.2112 224.5549]
/Subtype /Link
/A << /S /GoTo /D (configuration_file_elements) >>
>> endobj
-1753 0 obj <<
-/D [1751 0 R /XYZ 56.6929 794.5015 null]
+1776 0 obj <<
+/D [1774 0 R /XYZ 85.0394 794.5015 null]
>> endobj
502 0 obj <<
-/D [1751 0 R /XYZ 56.6929 578.6855 null]
+/D [1774 0 R /XYZ 85.0394 540.8756 null]
>> endobj
-1754 0 obj <<
-/D [1751 0 R /XYZ 56.6929 554.0828 null]
+1777 0 obj <<
+/D [1774 0 R /XYZ 85.0394 517.8101 null]
>> endobj
506 0 obj <<
-/D [1751 0 R /XYZ 56.6929 323.1321 null]
+/D [1774 0 R /XYZ 85.0394 293.4989 null]
>> endobj
-1756 0 obj <<
-/D [1751 0 R /XYZ 56.6929 296.0587 null]
+1779 0 obj <<
+/D [1774 0 R /XYZ 85.0394 267.9627 null]
>> endobj
-1750 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F62 1361 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1773 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F62 1379 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1761 0 obj <<
-/Length 3222
+1783 0 obj <<
+/Length 3373
/Filter /FlateDecode
>>
stream
-xÚ¥]sÛ6òÝ¿BoGÏT,¾‚sOIÎ鹓¦=ǽ>ôú@QÍ Eª"Çýõ·‹ R¦ävn2ÀXì÷.Å þñ…ÉR& µÈ •fŒg‹j{Å°öÝ÷8Ë€´c½½¿úö½ÌEZh¡÷›Ñ^&eÆðÅýú×äÝ?ßütsw½Ktz½Ì4KÞÞ~üÍôx÷ãÇ÷·ßý|÷æ:WÉýíiúîæýÍÝÍÇw7×Kn2ï ¿Ã™Þß~¸!è»»7?üðæîú·ûï¯nîã]Æ÷åLâE~¿úõ7¶Xõ¿¿b©,L¶x‚KyQˆÅöJe2Í””a¦¹útõ¯¸áhÕ½:Ç?•™4J/–€Ì„”ó\f)Ë€kË\ñTåFD. >Ç倅\þc¢±ýémᆩQ&_Œ·|qpÄš9YŒNæ̤FN¾´Ào™'Ûòk½=liж+»'¸ÛÐ3èCx­·û/s[>#`’Çò‹_îv¶%¨êÚê°ß_s“Øvhž¯9ç (ƒdÙ‘ˆµÝ”‡f ]êkž8Ž|û^(s™*- \oph›z[vM¨“ƒ¸@™…ÇL_(“—XÎy*µ)^ëë‚XžØeõ¹¯ÿ°/+²´È3}ùèˆ5söD°’¥E¦‹éáÄU0¥£haPn»C;ìD OG¦ÇµÛnÿLð6ˆBv›ùÕCoQ|œ:Šõ¬ì€Rìô /¼”è¨Q’%wÂð¥â`•Zƒ[“ ÿ™Q] ×àÀå0Æ’O#Úïlßö•§öªM?s6[Àz*´ÎŽ|”¢H6]ÓtOuû€Cº=Ô]ÛÓZoÚ•0ZšÂ‘àóþæ_$‹è;Pöƒƒ+ ӶKéÏ(é%:Ķ›Î¿¸¦åºì¾-027^=ã%ñZ E–‘åÏJw_Âô>ˆ¿lOÌ0Ü›Ïý`·gÍJsð¸y¡/›Õë¼YE,$zYݸ[/›îa9kbš§¹aÅe2"Ö Ó:Í5LM¹¬QŒ…ôÊ€°Hâܪï;Ø¿_/•VI=L—˪²»Á GíÚ/?´$Ï°‚âu
-^\foÄz…Š—»Qr•qL; K~y´žòÉg8èlG
-žj•Sã)w;gˆÀeCyȆ
-$îûš6uìhrå÷ý Á e¬eò±È„4¡ó«_½Ý5v {9#ù‹q@åÄÁ_‰c¬óXÎ(,”'}ýÅ.«¦â^ÖbY‘æ*Ä‹$D¬¦@¥9+Š)s);?
-iœ²Ãr3”­í=a‘UûKRÓuŸ»~’ÄñI¾ç½™oB¡ì
-vû3'6¶ïÑ®FgŸáÆX]/?ùÂ÷e ,…ÈJ¯=°ò´J/š¨Ûãí|fÁ@sò“ªss¨;hÓXÑA…›)>êCQ‡îØ_y,ûw‡¡ñnÜnp› D‹i…õËu,l×ÝÓùr
-Òþ´
-˜
-«éùþ ~r)d~ñðˆôòô‰Fg&eyÆ'ÇS{W™qÓ¥ˆmr\p©"øÞ8®» æ\Š€ïÍ„f/Ìœ6{aÊ]“¾\:ÉãœKA‹4XWhOG}P fQœ8’ØÄ×—m"Y—CIÓ)xú’Oбú,Î÷.4$§:°ä²3Ìsuv|5f
-í²A¾e`ð¶lÑUÏt]|û^ñ—,ÃÉcO_Ÿâ×€—nÃu»»-a{%ãA´v­køôäÕÈáÕ{Úàþþƒ?ê(דÉà‚kû㪿½ôÙ>?y:½s5Ó%c±]ìå©.ŠLM=µ²é&™̆B¨ b §¤X®B ýÐöõCK rî’‹»÷¢kf_ÉË]þÝ7&J"ŽÕ®£êèx¦ÚÐÅ´O ª•Lè$З[,ŽÑã“ÑÃ^«üê¿r¶¶[•þþ°Ûu{?ØvQ9Lø.ƒô\Ñ'Cí÷FpU¸Õò.ü0ÀHz¶#¸ëúz¨©ø“Ä|Ü+ ‚"Ž;3Äøá-OH?ºPµ¨N>ap³×ÁoÕÑ4ì’ÒÌmK3% ƒ×Á)*qK¡z×*kûD4‹ÞòD!£½3lÛ6”Z¹öâ®D—Ñ„ÝÉw®à0G ß`
-Š¶9³2†ø·¦¹º³ãp{Á9™=Oeí?Ú€ŠD 
-ò8­çÀýO
+xÚ¥]sÛ6òÝ¿BoGÏT<|‘çž’œÓs'M{Ž{}èõ’ ‰ŠTE*Žû뻋]P¤LÉíÜtR-K`ý^XÎü'gI§¹ÊgYnâDÈd¶Ü݈Ùæ¾½‘L3Dó!ÕÛÇ›¿¿×Ù,óT¥³Çõ`- kåìqõK”Æ*¾…Dôî‡ïï¿ýéáÍmf¢Çû>ÞÎU"¢÷÷îúöáÍ÷ß¿y¸K›ÈèÝ¿Þüøx÷@S)¯ñöþã? “ÓÏ…EîÞß=Ü}|wwûëãw7wýY†ç•BãA~»ùåW1[Á±¿»±Îm2{‚ˆež«ÙîÆ$:NŒÖSÝ|ºùw¿à`Ö:yRÄJ§jâ•\ •q’çÉ,Kò8ÕJû |nŽp&‘GOe»EÈF]C˜ªÜ•£¶ŽpÅ®9ÖŒlÖ„Û¹]sx&ܱu+Â.žÏ>mÝá‹;àE~™!í‰.Ø•v&Ó9Ý_çËb¹uó¶ü=ЗÁj™3yQ¯&Ö”6ÎÑLspËã¡-¿¸9’ÎæÚêØÊDÏæRÆy’(Oµ¬JWwíÄŽZÅ:±†Wkö]ÙÔ-iHY·+Vñ ‘q&e:Ëd›7-P"š©HžrÊ rñ_!TåÚó}³D~uß@4±ïHDl¬NÇû>z1ë åTîŽ;ÔÇÝdîa¯.ð8ôƒ.|ÆÚÁK îhm‹/<Ýì]Mв©Aj‡[i#Kõ|+¥ŒÀ~µHNL¬Üº8V J–^žÎtlRp0$¼cíµÝ­&Ä &>'(ÍE‘¦6‰µ’¯ˆtHuY¤=îØvÅòsPúáÎy§
+îÿêÎhbçá!¥Pq*E2Þš.ôù$UôN
+è¶+„ѧï®mŽ‡%sû•fÊ5ˆÙ\¥1XIrºG­òhÝTUóTÖÚ“ÏÀ¹ÖuT´*QÔ„ëÂ
+á"Áþ?$c
+úˆ6qõºáW4]Ö;ÔEöåÇàÍÑEŠ±kœ”î¡
+㯠zOÏ“‡H
+Kïù'<>ù–]óÅAn;WyÆ‘BxE!eCì€;‹†8æ}¿Õ‘Iщ!JÑpSnŠÅsçÚñ’r È É€Ê!mÔïO§qŠ)} b£§m‰æ€›UÛ´sp,H9®²ÙØ*r8C¾)‰)Û³ ‡hчÊ9Õ#W·åÃÑïMÍ”‹¢-Û‹>ͤYœi®û´!ÕeŸÖSáá¶MÛÍ!ëÊ¡ƒCyáÖŒˆ³,µ×™è©&¸96“ÄYýˆ{¼žÔÿžf‘E™ej`)-‘vpÊRÓAí‘r©
+¿x6š=f –8”´`F0 ¼îgµ(ãTG›Ž4#…
+?Š|dån_¹¬å•þ/F)£Lœ
+ÐÐëP]‘h ×¹ƒZv¦ v[Xè* =Õã@•ÆpUfÌÄT)!OB–0]uEíšcKTäuøDT5Íçã¾%—r”‡²w#ÓÂÔ‚H(w /Ÿj;–ßÂm‹
+Ù°’Ø¿Ïwò‡ÁÇ°ÃBh'}“ÔylsúXJL¸%¥!!¦¯R`½uË‚Ú#°8El„÷àóçž;š†/Z‚
+š\勲žJ†" Ó>dl12ÕP_I;vyó0xy&VxËZR@B´4þ\V÷‰°ªÖIø. îß/±&ÔtßGZÌ•Eú¢Is¹IµMT>jÄÐVÞã^ÔJ@7b<^¹%Ýká{WþP|*…R0ÕgFŽN¤ :ÖmY9î +`Ê©/X»N2(=MvÝÚ‡T—­½§ò’Zî/Ú9ä8™€Œþêæ=ÕÄîã–S›%ãíÉ@òt`ç0èí`¯‚ð{fç€é•àÇw?2²©k×'5€ "– GCo÷€d»ˆj¤˜e™a×x,É¿ÐuHUœX“œlyB %ÔvPN¿Ö(ÒÒ@Íx©ÞK~@uEòŠLÅßÃjÞ6ËÏnÚÍçÉõý™fbûsŸk©Çûûë„2·—¶‘$mÄ…aHY—‡rß5‡–ÜÁðÜÓg¾^Á)Ô©rôR8l»UÙ œd‘ë–à/­H9óò[;·b Ž–\”výI¬µ<ÓW7Ç ³1ÿ –ȤUˆòª@¯É0ï5p¾[².–®ôg*Îó,x§ºØM¦§ØHÀ¶QU›8¯ð°|S3±.d¦iÚŽ3«?/nòØ4³àuŸœ·8HÀÐÁMÄuÊ—r刀ÆÍŽ³b Ö „‡/2¥AäÇnÓP„ÒÁøíè8Å‚ïX PÖËf×sö /fÖîà“k/bžôvÓ B‘B¥ÜÞDª‹Æšâî  Î«¬C;í+—K½d(÷ ˆ§FŽ5J*;ï&QzðL\™ºMsÚÙ$R ™cŠš?³cåÚ6lé›s´gp~Œ €ù'®}qs®l`*Wú와ó>¨ QÖ§Óqr!@s²3Û[»#}÷Eg+¥†2jž@Û¢ ¡·ë*vänˬ!^Œ‹¬Ÿo¸ÂzÕ<]®¨”„hÿJûþDsÙ'3Íô£ÕÈC~œ™L_Û¹§y±õH™è²époê9;ìðpÂçaHÀ {œ÷Ù‘±ô8‡
+½“ü¤ ¾é“Ÿ™Lÿ²*®ÙT´*º‚ ¯MðËõž¢m äŽ+©"¯40åS3LrÓäôiŸ1
+úñ…—Å*¹-AÒµkÃRÑ÷ûæÀƒ]Ó+‡ ïEiE¿ z ³Ôð_o…Kí!éÂg !@Ò“Ë}Ó–]IÅŸ¦ËÇ¥áHˆo óêû·„Ÿ
+º9x«Cí*‚Ù€Zú´¨‰‰•8®£­…ÿò¢óú‡#¥ ÆVŽœ«gDÐÅN„¨”áùéŠç¶Í»¢~&ÈçúL}*ÚiÉ‚¹ h‹7+kéþV„+ë)…§Çî¼·yŸŠ’_’a@åÐk ¾Pê lµî Î,\ÿݾhÛðFÑñ @èøæÂÐ(Øoà$gÐHN4@š¢LÂoÈÌ”ý™ÊÔcJQ¶nâo„ú®þI”Ã?^æÿþ³Ó_ß™ Ê„K=]HÙñ~t`
+ÙÏÌKÀ‰ö’õ?
endobj
-1760 0 obj <<
+1782 0 obj <<
/Type /Page
-/Contents 1761 0 R
-/Resources 1759 0 R
+/Contents 1783 0 R
+/Resources 1781 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1758 0 R
-/Annots [ 1764 0 R ]
+/Parent 1772 0 R
+/Annots [ 1786 0 R ]
>> endobj
-1764 0 obj <<
+1786 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [375.4723 564.3095 432.5882 576.3691]
+/Rect [347.1258 530.9792 404.2417 543.0388]
/Subtype /Link
/A << /S /GoTo /D (journal) >>
>> endobj
-1762 0 obj <<
-/D [1760 0 R /XYZ 85.0394 794.5015 null]
+1784 0 obj <<
+/D [1782 0 R /XYZ 56.6929 794.5015 null]
>> endobj
510 0 obj <<
-/D [1760 0 R /XYZ 85.0394 692.8552 null]
->> endobj
-1763 0 obj <<
-/D [1760 0 R /XYZ 85.0394 670.2188 null]
->> endobj
-514 0 obj <<
-/D [1760 0 R /XYZ 85.0394 102.3833 null]
+/D [1782 0 R /XYZ 56.6929 664.3011 null]
>> endobj
-1765 0 obj <<
-/D [1760 0 R /XYZ 85.0394 77.0969 null]
+1785 0 obj <<
+/D [1782 0 R /XYZ 56.6929 640.0948 null]
>> endobj
-1759 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R >>
+1781 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1768 0 obj <<
-/Length 2691
+1789 0 obj <<
+/Length 2719
/Filter /FlateDecode
>>
stream
-xÚ­]sÛ6òÝ¿‚÷tôLÄà‹$8yrS'çÎÕé¹¾§¶´IœP¤"Rv|ûï·‹(P¢”Îä&ãX,»‹ý„xÄàÒ,É
-QDy¡’”ñ4šo®X´‚µWÜáÌ<Ò,Äúáñêí™GERd"‹—-0­yô¸ø-Α\¿ÿtÿáîã¿n®s?Þ}º¿ž‰”ÅîþyK£7?ÿ|óp=ã:åñûÜüòxû@K™£ñÃÝý)ès†èÃí‡Û‡Ûû÷·×<þtuû8ÈÊË™DA¾\ýö‹ öOW,‘…N£˜°„…ˆ6W*•Iª¤ôúê׫ ƒU»uJ*ÕI*TͤJ4œ?­ežäœRžI&…´,ø”–=jy^›²©šÕ¬jz³{.ëc¹9œÌ3®£ø Ö"àË"áJò1못žI-â š9¨Y^s/ͼ¯žMýJÀö©kkÓ_óØÀç,‹Ù!šy®Ú}XœóøÍõLñ4î׆6u@ÝìhüÒîë iã¦}vhæë¶"Øõ*Îñ®@Åœ'Eš
-Ë6atíÞæ¸7-tÞÚï¢#àÒÎÚ ÍˆÌ˹àë;º5ž§‰Pª
-¸šÂHºk Î;çŠÎpH–fv>ßäëìLº>xb€uÁ=òhcYÎÍO„Låée¬ &ÆžÈ ¯h=æ‚÷D‘ôÐyÙШ÷ˆé_ÚÝg„ µÂ>Îe7!$Ö"wž6­„ÓôÆS}’ݤԖ}›´dB¥ùØ ·âEf ¿èVø=… =X°·o^äÞ¾Ãíhßø%ûÆQ`ß]gßHíW¬}ã
-Ó̦•²·LÉcqðe9Þ4©¨
-9w4'uݾxJO£';ÎZ£/¥Î&€ÀíTÊð¸#Á®­å …$[£T×·[ÑICõâëPn
-{eïK–gÿV<ñ„—’Šå³A/…ìžkþò#Ä:ô,»ëA\, »‹ýG¦‹o01`MpqÜd9;bã¾ÜैÌáÜ$¸òä°ëvµ²Âôùú½H¡¿>^‘x¢‚Ïdzã”–®J`‡*( y>Ž ¾˜ÍHÎ||gAÞ†‰ÏÛh:n‡ÍÛðuy;e£¼ÆyhÛ¼m‹\gl½+‹Ù›q™*vlÙOŽ Rì‰=‚ZÒ¢H#Uð$Ë@ƿЄ£¿1 yn² ‡ø“-–¥çiÑ>´ÜÐï“šyî ZBm›B‘˜ààìp¹y"r-"•ëDI¥É+H3Å­é@n”B9+ø៼Nè,)òBE@/h¬ñèèK„`QHB
-ÆVÖƒ,àíÝFD?¶ Q
-åÏBÊV¨läWBB;¯d¤O¤¢bâ¾µœŽ_¯4GnRm¶µÙ˜Æ6ƒÐÐ×=ÑÀ¨8¹y• ¤…ºý¾ë‚2"ƒ–åð
-ƒÁ}‹á˜ ~ChxW£·æpǘ1pX¯9ŒÃN^ªÖpnyEÅ)O €åbáÞ®¶–œ!Ñc° iB¸—u…z Ïå~GÌ5.oƒ^}˜±ïÜó+ôqãämëÁ˜#á*ÚþÝÈ|-±jyCQBñq<ÑÆ)a–AÿÓ
- µQ?l—³·úÝ”NþÆ¡o…š\ý“Î[ž½£‰DJvôßwîÍ~êDZ<-#Bö}Ã΃DKs—ŽéÎ6š
-È*KdJ¥ l¿¦ebæëÜø‡ÀÄ ‚`Ϩ¢7\
-(*˨¤á˜M@ôlZV}c§;Û‡=•£}ÐyøãÓ‘Lµ)½Á·®ã‚²føu#¼Í¡Û^¾¨-ó&êüîÔ¨û¹dÚöS·PT¡zÞs¿YäÔ©2Mð×ωnž ÝÒwÿÈzøZåTkO> lÅ4qL¡¸¹:}a‰€:q‚õÿ)æÈ÷endstream
+xÚ­]sÛ6òÝ¿B÷tÔLÄà‹ 9yrS§çÎÕɹº§¶´IœP¤"Rv|ûï·‹(P¢”Îä&ãX,»‹ý„ø„Á?>É’˜É\MÒ\Å ãÉd±½a“5¬ýtÃÎÌ#ÍB¬æ7o?Èt’ǹz2_´²˜eŸÌ—¿Eïÿqûi~÷8‰„E:žÎÍ¢î~$HNŸ÷>ÜÿôïÇÛiª¢ùýÇ?Þ}¸{¼{x7ñ,á°_8
+6|¸ÿç~z¼ýå—ÛÇéóŸoîæ½,¡¼œIäËÍo°ÉÄþù†Å2Ï’É LXÌó\L¶7*‘q¢¤ôêæ×›õƒU»uL‰Ìâ$éˆS`’ÇZ
+iˆ2ss:`ŒEŸÌ¾l–å‚ÄœO9çQÑ~¦é}Ý™ýsQµgr³˜%p%©à1—Bß³Cš…XWØôXÈæ¢2E]ÖëYéX8å€k¢gò: =Ö"àë4VY®‡LÌ7e;ÉLD=4sP³šò,Z™EW>›ê•€ÍSÛT¦›òÈ€q¥LGŸöˆfžËæÐjøÍt¦xuC›Z nö4~iÕ’†´qÛ<;4óuWl‰ú
+j‚«žb]öÄ y´Æ±*æŠ'ÊXsu4ÂÂ0Ci“'rÈÝ*ÄLï‡BµÐEQÓ¨óˆµé^šýgÂìE µ
+‚>.å6!¤U¨Øœ'7ždg¹MÊ̲oS–L¡ªKô‰[ö^Åsmí¿èUø=R¹ EX°7ož§Þ¼ÃíhÞø%óÆQ`Þ]gÞHÍW¬yã
+ã$Zq‹ Ù[d2ƒPðñhÿ‹èîL5@T
+È‹ŠiàÚ58|òe‚`žKÂ
+ÆVÚ£,àíýVL~l@¦I(–§< I[¹ôÀµ@š<cÀ—1C¯ ­á²èu* ?r“r»«ÌÖÔ¶´€š¾î FùÙí«<µÔrê÷û® *ÙXçLNfÇW ï3¨¡€›~ã-FBMêàÅH¸#z#jv ¸ÃëH”
+›/‡¢Â§‘„» aö]
+#çQ‰ýØþεⰂ
+Öùu‡ßµ¦Zao¥úzò4Û30š$÷2Ýå R
+.9üÖäÝyPãŸã®¨GÎÁÂ\§Þû‹%UL3%s(€S9¬—{Ó¶cñRaR \ìí¯Ø·
+ªYÑ£¥íMúŠ[0ÂÉ3÷'@2;,Û±FȺ°ÌÜ ,ï;‚a¤A[Ëz.4 ð7ÍÞö8*èÒ=ÆH,»cjB)Ý)Î*‚c\|´
+pÑItKð£êeÞKpWcJl˜Æ"bpߢ?&¨æÞÕàá9Ü1d bVoãx'¹“—j7œ[^QqÊ`±\º‡,‡íÄ€%gHô2,CîeS¢Â2tuØS2smL훢W_Rfì;"÷K}ÚFyÛºD0$æH¸úöƒD2_ ¬_ÞP”P|˜’y3¡ø07Ì4äó?­Ðb þ‚5³·Ù»1üCQ ß
+õnÌäÿ$€ó–ëw4‘HÉŽþûÎ=àH‹ç±/O <ȹ4w™™žãlÛ Àã[L8£¯{Ѷ±‡«Æ÷Öˆ½5~7€p•"hzMš`7«[ú ¶ˆ$‰ñ0°'ukJd•Œ$2¥¶ÛÐ2± óuaü¯
+Õó.˜ƒüíÀ"Ç~וIŒ?ÆŽôö¬ï¾û7ßãâ*¡ŽãúœLä©g
+ÅM“SÎû‡ÏYÿÞ£éendstream
endobj
-1767 0 obj <<
+1788 0 obj <<
/Type /Page
-/Contents 1768 0 R
-/Resources 1766 0 R
+/Contents 1789 0 R
+/Resources 1787 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1758 0 R
+/Parent 1772 0 R
>> endobj
-1769 0 obj <<
-/D [1767 0 R /XYZ 56.6929 794.5015 null]
+1790 0 obj <<
+/D [1788 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+514 0 obj <<
+/D [1788 0 R /XYZ 85.0394 769.5949 null]
+>> endobj
+1791 0 obj <<
+/D [1788 0 R /XYZ 85.0394 751.9325 null]
>> endobj
518 0 obj <<
-/D [1767 0 R /XYZ 56.6929 390.3986 null]
+/D [1788 0 R /XYZ 85.0394 369.5823 null]
>> endobj
-1770 0 obj <<
-/D [1767 0 R /XYZ 56.6929 360.9106 null]
+1792 0 obj <<
+/D [1788 0 R /XYZ 85.0394 344.1885 null]
>> endobj
-1766 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F62 1361 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1787 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F62 1379 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1773 0 obj <<
-/Length 2947
+1795 0 obj <<
+/Length 2949
/Filter /FlateDecode
>>
stream
-xÚÅ]sÛ6òÝ¿BoGÏD4>Ipò”&NêNë´Žoî¡í-Q6'©TO§ÿýv±
-àÜb|<'<º†ÿEt>ÖÐTܲÆc#ž<û2ã1SY& '€íU÷"°g1{WÃ…fÁ<Ýy@Ø^)År‘Æ,Ux¼‰MÆ¥eøú® K%2ÄPjw§®ÞÖëúöÁá…4•‚ó¸G¬·]YW`’©‰Ê–ƪîÜÄf».6EÕK7á0Ýû
-OÔ!ÑÑŪ ±Z¸=Ö™ 1 ÒL²“¯üXß(!
-´‚.Q`)[¿ÕÊÇx3ý²+®£ÔK$žbýé¤7FV­IBä"ý@ú ó!ŽØlãžHO=å%I¢|²Õ‡ÈC'!w‡,úÐÁIˆ±èU­3Å›b]ß»¸”òòÏxw\É«)$&OYâ(£lA®‡þ ’àÔ¤3­8¦ és² È1Œ1GrŒžâ<$y˜dHð—:Iõþdds“w‹»&){ß‘IOñ)&UÁøÉ#ªäi  ÷¯–¤2ÉÆù¦Îi¬ìH‰àp*šÙÔÞ-àW»-%ÚóÂÆyò¼z%ð­ø¨~$Ø¢@r:™!¸Ç'¸˜ˆ´@{YÛwµšäAÔ•”
-ŒƒƒRÉSa×ãÏà q÷€î0ð&¼¼âаYl¸°4w é >hQ,):ÏÁfIõ–€5hvM‰²|T] Nf}¡ò¸ãà²÷0›]ëéwm±^‘É(Ô˜ÒC·‡ž\¦Â¦{‚añm».e7ÁN¢b¨ûnaPHkxÂdêÅϳ§8I>OnÒ8 –í¨h%FgßÉžâL
-Œ)ZqÈä1b ô5þ¹bâNºª«‚”…YNt÷5«1Á›Rˆˆè=4Š
-ݾ×”ܘªí­&lýîð
-n­‚
-.f¿]CÁ±ÉkÒ!.¹$E§C²6ÑÐ>ê±>,QYõX!TŸxùL˜Ó^Z:KKžñ¾àqÒ¼º¢ÇXÖŸ®Üé¾Xš@ÑciÙ‹ÐøŒp_ž9afN˜Ê¿etˆUïˆÀe9èccÓ4xÁØ^ %vö^ñáCï¹ÿ‹bÂXô—eJÈ8ß X;;#”‹÷4Zy àºÞZÁN(Éï½þñü’ UÙø3W¥ð¦Ê#ÇÏ
-[zBû+à9x}ü!*’ QÕçðݼ~äØД_§ä~êïѺF¶ç™>.j/˜Å:ÇÀàÛáI|,ß]ëdóWŽHã&Äè[Nilt¹½ë1lõ¿ÿ/'Ž NŒÇÜ#—{®àÄ1Á=¢”ÿ“ÅÉã‚“O N<Cpò˜àøs°Õ3ìó˜¾Hp±ÝUå´m(§Ë»Þ·=ò Gü«Cþõ€ÿ#?ù’:Æß`MtçYÿ+§ÿlÿÃl¯#ŽôùYâÌRÏÞ6ÕcÎ5ÔpÚˆt‚õˆ^§—endstream
+xÚÅ]sÜ6îÝ¿bßNžÉ*â—DMžÒÄiÝiÖñÍ=´}we[Ó]É‘´q2þ÷PKiµ¶ï’››Ì„ ‚
+/òñä·?’Å®ýãI«ÜšÅ|$±Ès¹Øžh£b£•ò3›“'¿ƒU·uN~ð«Äˆg+dœçFÏ›€2DœJÒÅ<-Ú—
+P€Êð•úæ¾Ù4·_/$©5'<bsßWM 6™Ù¨êh¬›ž'¶÷›r[Ö}¹æ Æd+(§ÓiK›ÛE¨¬¯Ó?ZšÉS0€½ uŽMJd©Þ›”˜ñ©ù'p†÷"…G$‰Ó‡{Ô]Óö›ªëéëC_ôNzzºð:d
+ªeŠDAé¨=6*»û¦îÜŒMÒJAŸo/>Ð÷Ç]Ù~!p[|¡Ål£ãa¶¹¡ÉínÓW ÇÑÍΫÑìªq㺣¿'&¹¼ì`„uÓ´Ûª¾¥Õâ?¡À+O®Ü•Èg®ý1eÕZ±<`±.¶ ueû©l ~¨6^–ŠÍæ }ѱý®­é»'2&ú~gWWuäN'Я5m¬NET¯Ë¾Ä›ƒ:i–ïìŒ.Fþïs½CzI\—ôþÍŽÍ ž¾1ŠßbÛ˦e“1I,…ð¸Ý`\Ž<ð=y†Rè8Ms³H Öšghà´ØÞ²sº BÀ€¿ 7x'»gã.²ó¡\±füûÐ<YðË H <â  XOqr@ÅV$ó”­ZmªARÞ`7dM¸Ú¬¯»kv›uˆW´mQß:t
+TŠžÖ«ÎMeÑ®£g…{ê/ ¬×ÌjW2=òÓ‚ù
+0[RCsOÀ”»!¡M¤Y=ª1¡ÁŽò¡ZyÜu¥=âv×yú}WnnÈjtÔ`xäøЗ«LºœÊǨü|¿©VU?ÃNªc ¨{Eƒ±P­xP é¯~¡ÅeHòð…
+%nf²ýÉG݈°”à¿“žâSLæIl¥Uc&¹ Uò0{']5uIÊÂ<'ú‡†€’*VŒ™if(DDt -E€äWLòpW­˜´«¦¸æd2:ÿ…¬H ™¸žä|ûh TA඙·¹‘½òñy‚òúÍOP¹ƒ»ŒP’—á‡)%¶2ÌMA1œZ`Õ$&VJËo4˜â2$94LœfzðñÀN7W™ý†<zŠOñ¨Ó8—i:fò˜EêXe&gySâvCcéœBÎù!ÀÎÏXP:+„Ìæp\Ý•«?I»ÀtõU’O|Tq[Tµo,ôû~CPvc®¶7Bšp=€p‡ï
+•J„ò6FE¿† øÃìÀ0á« -LQ#×QwÆFÒœ»‰¿®2™·I€‚‹¹oîé"85yC:Ä%NSL6&ëR ã#¢™êÃu±ÕLBŠ—ÏŒ9í¥eò©´Ìèï+–fÖ5Í0cùpºæÓ}µ4ƒb¦ Ò²¡õ9á¾>caæ,ÌeLß2:ÄzpˆUKີ²±o¼`ì°†{ùN‹ñŸCï¹ÿ»bš$Ñ_Ž) µ þ>`ÄÚË—„rþŽF'¸ñ 쌒üÞ«Î.º©ZæMÅ
endobj
-1772 0 obj <<
+1794 0 obj <<
/Type /Page
-/Contents 1773 0 R
-/Resources 1771 0 R
+/Contents 1795 0 R
+/Resources 1793 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1758 0 R
-/Annots [ 1776 0 R 1777 0 R ]
+/Parent 1772 0 R
+/Annots [ 1798 0 R 1799 0 R ]
>> endobj
-1776 0 obj <<
+1798 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [242.0197 604.364 315.2448 616.4237]
+/Rect [213.6732 604.364 286.8984 616.4237]
/Subtype /Link
/A << /S /GoTo /D (rrset_ordering) >>
>> endobj
-1777 0 obj <<
+1799 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [238.0484 525.4389 311.8142 537.4985]
+/Rect [209.702 525.4389 283.4678 537.4985]
/Subtype /Link
/A << /S /GoTo /D (topology) >>
>> endobj
-1774 0 obj <<
-/D [1772 0 R /XYZ 85.0394 794.5015 null]
+1796 0 obj <<
+/D [1794 0 R /XYZ 56.6929 794.5015 null]
>> endobj
522 0 obj <<
-/D [1772 0 R /XYZ 85.0394 674.157 null]
+/D [1794 0 R /XYZ 56.6929 674.157 null]
>> endobj
-1775 0 obj <<
-/D [1772 0 R /XYZ 85.0394 651.0501 null]
+1797 0 obj <<
+/D [1794 0 R /XYZ 56.6929 651.0501 null]
>> endobj
-1771 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F62 1361 0 R /F63 1364 0 R /F21 938 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+1793 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F63 1382 0 R /F21 950 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1780 0 obj <<
-/Length 2656
+1802 0 obj <<
+/Length 2649
/Filter /FlateDecode
>>
stream
-xÚÅ]sÛ¸ñÝ¿‚“'ºsBðIÉ“/g§¾¹sZÅN'—Z¢mÎQ¢"Rqt™þ÷.°
-Ñ9{–&Á‡S@8Ÿ7…“Ä»íD¾gÒ_q0'ÉÉ?ï ëT¼ÚUmÙ¹(§!µ}.Éq6„hwÛµUø\®½ràëæÁžùæ¼Ó*ßãÄC³kŠÛ]…sÖ‚Sí©×¿QÊïvá–Îñ©Ø‘U8‡h‹Y„ú‰SÙTùÂ.nw–Òa€)§ØV?ãu5®ýðP˜`¼Oø ÚíaVùO_Q¢RˆÛ´y[¬ÐÁ–›b»*­É!‹Žÿ¼-­U„åž•0ÎÀº)Q@Ìg$ã:Šý.µnBÀÛO8× ‰Ñø}áàóª©qÔNË-K!”KåeáMñPhB
-#™ý0N6O¶Š,à‚7„}ü¸½‹p0ò„~.°yÂpû¼†Ž÷à.ñ\l„–(hÒàm2-4d,Ôc”`3”<R!Au"‡îl=%ú„PÀå$ÚéjH8ì”dY)€åIš>%uã@\–M'n3pbD¤QÈÊÒTõÛCß‹ ÅàœHª¼5•.0, c8蔌ºiÌÇšWÎé™jª†Âú°¨ò¦Á”7JäÃÌmÔA…cLT
-"yÔ¾E[òmÚ¬r¼!`ŠŒ%Ø=$ׇ[ç¹æÅ{Çß8—S„Ó Jt$ê/dKàLx²h!U4oZP“æw3ŽŒ÷T¤SÕ1¬ªŠ»Ü¥ïŸójWtNz;A\–%×I©îÒ+—­¾:pZT" ¦.ãO±]!3’Bê=´Þÿn•'„ö}†£à:
-¸ÜWˆ¿é™šIP åÕ‘
-rä|›¯—ØàøŽóS¡Ø»l¾;?E»‚ ©W7…‘TÆÇ¥²ó<õR—)”/ô{PúÇ¥®+IÔ·….4¤D,ŦÀb¿¨ÊÅÿLè®
-s»ôÀõn½œáèÆÃÅØ6.]]èzj¦èµ6̃JÓ’âJ⇲½U’ÆçÃoRØåÌ9™­x]<0%éÆ׫<ÎÛ)RõjSÚ²R€Q›´`U˜Ø%lù½vóvWqy]¶¥‚Žë]ŽM¸¼ï‚ˆ®E“«¼]ÜOu—º`i\
-êzP‡çÑþÑÁ>æpzžšöšß7¾ÿ‹%šˆ’Ï$–ðLÃzö ®åiV#¸©µû<›®ký5 fXÖ^Ô®ëç:篎´ó oap{/AGÏ' C%ÄÄÔ@]^áÓ8vt†ÌÁÌè…iúG ~óÁ^è_O¶0{(´f×ù›$ìØ%ƒ $M4Æëþþ`‘ïšÂwÝöaó«o­&ipu`y4£³£}¾¤kä9!™¡’ÁÔbW×\/äþê¢Ï)§Ã5ea>o‹p‚M­H"Ù(Ç4¬9"r|4»[C­u@Æq¤Ì÷Ž!IÎe|ÔØÊ«‡|ß ›ÄÇï7bœmqùÆsК>ãÓ}èá8ò@É­#»s‡ù²„˜ÖW°v$¡Õ¸»æ9ØlŠÜÒÒû æº<œ+%Ï!œ`:rž QíÈãÂ&UY4äØí!S’)ŸÔƒ’ Šl­äÑ„; bB‡Kö+F.¹¿¦ätàÚ:݃\ÀÚ@1i2‰¾í*8Q‚{Ýî‚Å×ð—Çת€2¿4Ò&…Çâ!ú1B¥Öa‚±å´—€xy¹âÑO5ð,y¼³
+xÚÅ]sÛ¸ñÝ¿B“'¹sBðI¹''g§¾¹sZÇN'—Z¢mÎQ¢"Êqt™þ÷îb¤¨Ø©¯ÓñØÁÅbw±ß°˜pø“Ì0®¬ž¤V3Ã…™Ì—G|r ßÞ 3 @³êõÕÑË3•N,³‰L&W7®Œñ,“«Å‡é›¿žüíêôòx& Ÿ&ìxf>}}~ñÍXz¼ywqvþö—'Ç©ž^¿» éËÓ³ÓËÓ‹7§Ç3‘ë¥Çp`ÁÙù/§4z{yòë¯'—ǯ~>:½jy‰ù\!#ŸŽ>|ä“°ýógÊffò
+¾Çƒ¯šwvøÍû¥e¾£‰kæ¾)nî+šs¶ OÐÅß8—·÷ñ~Þß™©§©ð~Ðù\|w€ô‘#YWùÜQ­Pí¶ÕÚc€)¯ÒN9Ñ߀®¢Gß?¡g“~D»ÙÀ Ìjþˆä g&•ÖÃ6Û|[,ÉmÁ–ëb³,±!ÿù¶töŽOx¶T¶r ðëö@ÆDq]°LBÌ뉄Ü-w‘6À[O<× IðéûÂÃçUSÓh;.·,…®ME°Ã}¡)Í8L döÃ0ÉPF³$50$&9×íéÛævBƒË(=à³Þeý͇X‘ˆ÷à%éP\zE6¨†i™0¥LÖ£h/Mi¡!dRÂè<•%´‰îû¶“Õ˜ÜÌÅR/ÎVQcÂ…DP
+À2IÓ§$l’Ù,ËÆÓµY‹q£$&{ÄI g­»Ý‘¯‹ùˆZHÉ47ÁîJš ù#ÔB?MIXóÊû[¥åi}˜WyÓÐFFÅ% ’_á7j¡zÓ’oàOC®”¶Ï—XÀ8‹Q:‰õˆ.ènc—®a´‘˜Ïe‰‘$™ÛݺáÜšHdГ
+W
+Ì3ƒeáK¹ú{åçÝ®BóªÜ–.\(>,x%õßzð¡¢ÚL.óíün¬·ÔÆKt*¤ì]LíŸG úG û˜Ë‰”êyzÚ©~×ñþ-‘X¦R© v%Xˆ¸¦Ý«mO|›AIà Ò¨mÃý€â)㢨tVûžŸï˜¿z¼™7_¢~^HQ{ïsS„:¿ §+rÜè„”†áè¶ü˜§„¿ ùh/r£í¿Š¬Ù÷ý„}ûr!dóÓÝÌóû¦=·]Üýê«I]8qtr°Ë—´m</$¢“ïéâµB®,º´²w:ÒJPR·¡GØ´êºv÷)Èš'"§GsƒÔ:„Ž#¡s yrƸƒ<9¯ò]Óov¼ßr®ÇuÚÎQcz_ŒOwô±‡?àÈEV¯=·Ÿ2k ¶©ŸÜ’LÐöíµÀÁz]䎖®¾Ø0×6àá\!(áÓóÚ<.lR•EãkH2®eß²_ïzUÍ¡ÇX=_úOOi‚›ZC-&Å“î1TìÖèƒ5@¦¨•ñôV BD{_œp–y±«mmL ¾ŠL¸¾µ0‚tê"R HE!3JÅxîKL¯à¯œž8µ@ÊR°=êíM>MãÚZE0ÑØqÚIÀM¼<_ÊÉO5ð3‰X
+xgbÇR"{MÃ[`À%„.¬78^-ðN
+¼žÝ~ÒfSð„pèd?âù‰¶o,èÌw$mú ¼¹ãI2v—À[;ö?XtÞDcß©ïM¢†aHð”aÚßI¦éP²íbx¨ˆôÿ
endobj
-1779 0 obj <<
+1801 0 obj <<
/Type /Page
-/Contents 1780 0 R
-/Resources 1778 0 R
+/Contents 1802 0 R
+/Resources 1800 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1758 0 R
-/Annots [ 1782 0 R ]
+/Parent 1772 0 R
+/Annots [ 1804 0 R ]
>> endobj
-1782 0 obj <<
+1804 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [325.3322 530.3947 398.9856 542.4544]
+/Rect [353.6787 530.3947 427.332 542.4544]
/Subtype /Link
/A << /S /GoTo /D (the_sortlist_statement) >>
>> endobj
-1781 0 obj <<
-/D [1779 0 R /XYZ 56.6929 794.5015 null]
+1803 0 obj <<
+/D [1801 0 R /XYZ 85.0394 794.5015 null]
>> endobj
526 0 obj <<
-/D [1779 0 R /XYZ 56.6929 600.9849 null]
+/D [1801 0 R /XYZ 85.0394 600.9849 null]
>> endobj
-1304 0 obj <<
-/D [1779 0 R /XYZ 56.6929 573.3935 null]
+1319 0 obj <<
+/D [1801 0 R /XYZ 85.0394 573.3935 null]
>> endobj
-1783 0 obj <<
-/D [1779 0 R /XYZ 56.6929 447.7048 null]
+1805 0 obj <<
+/D [1801 0 R /XYZ 85.0394 447.7048 null]
>> endobj
-1784 0 obj <<
-/D [1779 0 R /XYZ 56.6929 435.7497 null]
+1806 0 obj <<
+/D [1801 0 R /XYZ 85.0394 435.7497 null]
>> endobj
-1778 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R /F53 1313 0 R /F62 1361 0 R /F63 1364 0 R >>
-/XObject << /Im2 1350 0 R >>
+1800 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F53 1328 0 R /F62 1379 0 R /F63 1382 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1787 0 obj <<
-/Length 3112
+1809 0 obj <<
+/Length 3271
/Filter /FlateDecode
>>
stream
-xÚ½ZKsã6¾ûWèHW…<€<:3žYgOÖönÕV’-Á6k$R#Rö8¿~è_¢ä¤¦jíA n4>ô‹â ÿ|‘©„É<]˜<Mãj±Üœ±Å#Œ}:ãD¢xHõãÝÙ»Ò,ò$×B/îke Ë2¾¸[ý½ÿÇůw—7ç±P,ÒÉy¬4‹~¼ºþ€=9>Þ¾þxõéß7ç&î®>_c÷ÍåÇË›Ëë÷—ç1χù‚V82áãÕÏ—ØútsñË/7çÜýtvy×íe¸_ΤÛÈ׳ßþ`‹lû§3–È<S‹xa Ïs±Øœ¥J&*•2ô¬ÏnÏþÕ-8õSçô§d–¨L˜
->§@•'Z
-éèöÌuÂè€1Ýs‘Gûª¬6Ǧ@ï†Ã| ÙÃ$¢xHuB–@ådY·ízʘ –¤©–§9wT3¬Å€5*I…ÑcÞ·¶màhSµOÖ5dTí7÷v‡õ>»¬«UƒmËb‰sDTàˆÛI˜°{‹”Õª\mYW
-œt–6ICªã&©£
-š>n‘Rpú©ÈN³ï¨fø-¢"åc(xR:˜x=ô×*Ü5èÆ»—§rù4š303nœŽQ÷^EGhyVeUì^±ÇAs[7e[ÂÕ{¶!‚н!Š¥ðN1“‚ø&›@¦o2r˜ð¬+Ç4SÑ‹µ_°Ë13Øt Ák§\FØâ’Œ<Ìþ½q½›âËbßeá7
-¤_÷–|&ô¶4ƒ,×~Wáû-$; ªÿ|t™ÉÅÕÏ?àÜ{‹+Ž<;š'‰”Y´®›ÖµrÔhƒ½8šƒoìª4ãÈÍMãÕµÝΛ½;0G[Pïõ->½Sq~û®ëþÞ]`;D˜xxå!O$ð
-+ÇÃ¥ý¾ôØáÀ3pP˜ÄøÚãÌ
-âB©L­A/¥
-Ìaôž¨&Ì‘Ìoù»3Â,_;p$Á~øò¹Açí¹¢þ}»×´›ÐA§f¢*gþpëæd&TÕ Bø¡`Äð&Œ“4o^<V`Èà£_¼†Uw/e·`;^j$,rħϊ]à‘ø]0F}जÙØ@æ<›ÏÞS“n2r×r.wçi’  Ú¬÷X>»:¾o;Û”:áØÁ¡ á­< Nàï¾»e•¤=B_ŸåÁ‹Ï~ˆs_Ÿ„_æ…¥^m±k¨8".s3†®¯3hÍú<¼/Á²P}FÃBŒq]eå"I*ôˆ®Ð#¨x$\ö¨,ÑPx“Þ×”%€Ðp§‹­á…÷¤AŠå~‡ýU;e–N΂„‚ÓÌÍ¥ªÂºÜ”]m¢«*³Ëu½üB•‰/öÅUêè°HÃóD(ª.G£€ ÂréÒþA7 ’õ*õ.Õ,*(áXÛ¢i©¯±x`ÁÀnC¹Åï]ºªŒÐqûù{z›ï($øa¥P N= 8„‡Ê˜ ¢(MaQ¨u‰߯ç·lÜž/µìW“bõs±+ë}(Dùî&ß(‚ÙGЂO?š™r<Á뽑™©ŽsU8FºÒqU¯ìa†ª5ÙRŸ¡£š‘ado
-†. ṧb2>4|ÑAÛŸ? ¼8©Æ®{8kšn¿AÈTùë
-†uK™NÀ¬›ÓrtT3‚Œö 9˜ÈÆrôHrŸècÆÅ.Oõš¾ath‚¶G“+ÃOƒ{?ÕÛ&"ßgw€+_ìò?úºB£gìFPÊ
-&ôØ™½T‚©ÓÁKC®#Ó¹ïÞ®°Ð•Ëèk G²T#ˆ+ÇŒSMœ+çé MDcœ†kå[b[ìŠÅX›‡z74¼ÂxØö¦~ÆE(„æxðeð0슈蟹+É/m`h‡TȽ[¤iÁ7cJ\Ü &Ç~¬#Uâ~a35Öݘïþ!Oÿ+'ˆç¥+–Ì'Æ®– ±rÊ‚1SÉ»_üŠþ?¿õ5Dendstream
+xÚ½]sÛ6òÝ¿BòLÉà“ ÝÄɹ×:w¶ïfnÚ>Ðms"‘ŠHÙqý-° ~‰’{ÍÌÅ3áX`‹ý¦ø‚Á_è$N¬° cU¬׋|sÆ0÷éŒN¢!Öwgï>J³°±MD²¸{ì•Æ,Mùânõë2‰E|;°åûÏׯ>ýëæâܨåÝÕçëóHh¶üxõó%BŸn.~ùåâæ<â©æË÷»øÇÝå N%´ÇW×pÄâãȦ7—/o.¯ß_žÿ~÷ÓÙå]w–áy9“î _Ï~ý-VpìŸÎX,mª/ðÂbn­XlΔ–±VR†‘õÙíÙ?» ³~é¬ü8‹…LÄŒ
+”M²tÉp|U6Ùýº ]ÝnNô|IX¿1ÍîžJbž ›‰,e
+0äàsýùŽ†çŽÓ Bjq[­…ÇÝót §ÚlŠjU¬b Æ.=ð‡]_Ù~ÝâK ¯†ô¹T±MAŸ~ÂØ }Áb%¤"w*ÎpÏMYíÛ¢AÒn «V´‡Mö­Üì7øòœ­÷Å)vŒ‰…•žÎó“ÄŠñ;òØ­[DìltŒ§`8 çç ¬p1j™­›!P‘Ö‹µ^ûKÓA§
+‘ô^(’ÂGDÔY´I'*Ó'8)EKxÖ•#šêåKQ|Á!GÌ è”Í R\./p4$&)EwXý†âG7Ù+y¶o3óÔ¯û‚&Œ¶´‚ÜÖ~Wáû-T, ªtõÈÅÕÏ?àÚûw…ut9Ž)ÓåºnZY”hƒ£8kÁ‡oŠU ÚŒ377¿V»“7{wa7£Ñë[|úˆâ&ýñÝÐü{wpH1ñò(ÍCšˆàÀ PT©×{ï¤gr”-J3‡´à¸q'J½eg¬v°¼•U´«ë¶9°1Æ`¥³±S¤;¬Ú#ƒ<Ý*cÆÄ)r¤>#˲}‘¢SJÛHÞ5úRKFÕà$Q-B˜q‘Ý—”Fà,™iŠž®Ç*šv‚@ÆkGTÓ ÕQîÉ…Š¥êÕ4ËóbÛbûvõ‘Žä•Ä©6)1j4:-D8Pœ”ÇÚBèSÆU„°ðOí2õ=ˆt¾h­…½´±üø^¸ŽÁ^âŠéVQà|
+ɇZÓÙD_(zL*J§1œÄb)8†N +ðòŠµ!ú|%Ê(˃nF
+QÁ@ɨ8\™4Ö‘^|]ð˜)k%" `Ö^~àÝÕF,>Ôp¢ÅðP´q4ÜÙ*‡ õ–’ qGj¸v(¯e”x³]P¸b(w>©=¸m•ØX¤6] åù}W$Aö‰e`Ù}“æû(6NS‹3–„+{Ú™I£!Û7Z-–ÏðÊÇÈ™eûyïoŽMÈ
+¹Y :¶€5ÃÇè6µp-€1·Û"/]yâ#Ÿ é€1½oƒAïÛL—°\ã-€äbßî»Â׸£¨¥«¬a^eí –†ùlßÖ¨a°.Ž ‹Sáj³aèÉ!P»è öcQ;J áÕÅCÿÄíŒN‹‘_†çêµÊ6eŽ/û-T÷-táu*z:•Â ™@A •W*œÜ=’yÝ .¡Ã† /áp_Ìàrª‹€‹)7Rª˜'zÄ̤788Ø‹0©SæPñmKa ‚‚°É¨±Á(†9¹ßõÖ!£ÕXÂPÄÍÓ‰žÜ¨×ºµË] ©›¡Jº§úu]="t_<Ô÷îy}E£,B4=U:OÑ7Ã'NwÚå’ËD.¯pÖ—G¿h.ÕC¦WJmBZu¨ñRê@fï kBÑüA`’¿S`¾«|ÓÀ¡ßá;è·§Šò÷p/i· !„NÌ„UΦ|Áä5Öc&´Ó
+ ö{,Ÿ]ÙÃÎ1YC79uè¦ÆLxWOƒ ø;ïn[§ZÒa¬¯ðàÅW>D¹oL‹ïñÂV¯E¶k¨1•£´ÉXu}!IX_ƒ÷ýW6î»"BŒõ‡ÊÊe‘Ôá]‡GP×H¸Ê´²DGáýyß8ÔITüàn¡¡Á{ÔÀE¾ßáxÕN‰†í€’ó ¡Ó4£ ÔQX—›²ëKtÍâAK6_×ùêJ|)^\ð¨Œ42ÚâG€é÷C¶’ç$²^…|ÞUŸ [fTk¬‹¬ii¬) 
+à-a\œÎã†XÇó¸+\#YtTÕ«â°8•hJ#N³ÐaÍð0v72f’Ù>‰{p‚à!ãCÁÙÀþþùÅE5>ïimñ r¥Ê›Œzgë¯Ñ7`äë>«Ú°7%z€à$AI\ÂcÅS;õ¹£Þhé
+uXS
+>uF´qýZqšk†‘Ñ™!
+XúcNz=rèÆ%.Oõš¾\tº°×%×|Ÿ¦õ~©÷L"¤;~¬Øbù.—ÿäÑ7”P7zÂNÅH— —ròå´ ŸËHû|§9DÖÿ§†ÿ%‰w*6§aÄ÷[&’X3ýF±9Ä:¡akªaíë¶8ôQPq)%NsÐaÍ°0:­ÔPâ@¶?â¡×-‹ßBá±Ý•Ï¨
+ðróäá;«8äyEÈù'«Ñ?Á;}}ˆ® Ê)·RË/Qd\jÚui•’}‡ZCõîX‡ú˜€[V< QJ©æ¾ySWa PíB€gJˆ+GŒS;œké DD¬‚ay(`l³]¶)0Õæ¡Õ
endobj
-1786 0 obj <<
+1808 0 obj <<
/Type /Page
-/Contents 1787 0 R
-/Resources 1785 0 R
+/Contents 1809 0 R
+/Resources 1807 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1758 0 R
-/Annots [ 1790 0 R ]
+/Parent 1813 0 R
+/Annots [ 1812 0 R ]
>> endobj
-1790 0 obj <<
+1812 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [315.1789 349.0138 363.5077 361.0735]
+/Rect [286.8324 359.3488 335.1613 371.4085]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update) >>
>> endobj
-1788 0 obj <<
-/D [1786 0 R /XYZ 85.0394 794.5015 null]
+1810 0 obj <<
+/D [1808 0 R /XYZ 56.6929 794.5015 null]
>> endobj
530 0 obj <<
-/D [1786 0 R /XYZ 85.0394 769.5949 null]
+/D [1808 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1789 0 obj <<
-/D [1786 0 R /XYZ 85.0394 748.9943 null]
+1811 0 obj <<
+/D [1808 0 R /XYZ 56.6929 749.6432 null]
>> endobj
-1785 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R /F62 1361 0 R >>
-/XObject << /Im2 1350 0 R >>
+1807 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R /F62 1379 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1793 0 obj <<
-/Length 3955
+1816 0 obj <<
+/Length 3972
/Filter /FlateDecode
>>
stream
-xÚ¥:Ûnãȱïþ
-¿EVܾò˜ìÎl&Hf73Þ¼$y Ä¶Í3©){¼_Ÿª®êIQr XÕÍbWuuÝ›òVÀŸ¼µi’ª¸Í
-“X!íívw#náÙO7’qÖi=ÆúÓýÍ÷tv[$EªÒÛû‡ÑZy"ò\ÞÞWÿ\¥‰Jî`±úáçO>þôëçww™YÝüùÓÝZY±úðñ¯ï úéó»¿ýíÝ绵̭\ýðçw¿Ü¿ÿLR^ãO?ýH3ý\Xôóûï?¿ÿôÃû»ßÿåæý}ÜËx¿RhÜÈo7ÿü·¸­`Û¹‰.r{û‘È¢P·»cubÖa¦¹ùró÷¸àè©uI~Ææ‰U&½]k“ä@YÊ2ɤ¤ÌIª•ŽRVrIÊ ¥¼«ÛõÁ=\ÿ´êûŽÄ°+¿-N{ìáðzŽ&çrÓ©LR‘šÛ1sg[ˆX {P£=è4MlžeÓMÜ?¹ÞÁébÕ퇺k{l»v8ÜÉ|Õ541<1ZïÏîp·†³ÿC,ß®Un’•o-eRX«üÒ÷T>× *­W]K¿~QÿéŸêö‘æKúù½kBfõ/aÅ\ývt‡WÆ2«‡°Ü—Ÿß°}*ÛG׶dB‡1¡!¾¬WeݸŠàáP¶ýƒ;ô äZØÕ¯ýˆ•MóJ„p»¸71Ý‘-ŠÕsÙ]O01Uä$#œá]
-µòÓ–”ѨÕcÓm¼rI8#¯ry.‚ƒÓÑÃ
-5#CT[›dF›©Î¡ 4$»ç¾z'·Ä–I“L3Ùù8¨Ì˜J‹Ä˜<Ê"Cþ¼Â¾ã‰ŸSÊ€lb"€+”2GœfŒ.•(Ò5àFÕl£ÉYÁ±:•yRhùF@c]èË›xÕöëcµ_÷õïgÁ˜OòL×ÉG¬úcÁHe“Üj5eà‹CUWB±PVàg‡º÷6ã÷?~úBЯ?þBÀæø€Fùན
-žt.=¯°‚!Ñ
-0wìeC í³ì}îcòà
-]¼­‰lÛ—·±:Ú€]tS(éŠ&)k(V®ÝvG8rGþ&:# To<2Îb®PȯÎV_v¥—. °ÃˆTÛ/þ{XœO ÎwÈX`ì}'ÑZʛܷ­ëûú™ÕçØ3àe ¿÷?ür'U±ºÅL‘%JÛëAl„t9†¤‘/F05RBÝwtD:§=_:…N'Ä)|éœs@ ^ópÐ)JÅaL§(d«
-áà5AóaÊŸ)dá‰Ñ©šžé$xaÞ3^J˜óà…H¼<:"ÇÁ ßeP:¯É;&äszŠ|Zþ®
-UÈ ›ì…o ø<nü7vu¾.)Ûƒ8JHƒÎøÉ¡ÔZ_—mÄz‹‹³ÕN6Zb‚ÏGq
-΃Æ.ÞÃÂŽRCþ•p`ÓØå7PÀÑì‡qï?€hŽ­ Y*ïóSŸ‡{ê"|ÒR‘H<¸i¥Kþ ÇG¼Õâ& ÏžîPâ6·ÆRÌnÊ¥Ó«nîQp\“iäÀþ RÆŠ`Z|‘†‚¦ž|ÇB¢µxÍÕ•:üÒ‚7ÛñBÞÑÁ/©º¤û
-÷¤10ÅìÀT0@šŸŸŽGŸÐ7^´šO Þ}¤ôHÓÑëx^H=P| k.x83uxÈ«·Ô'F.3§FHkkÿUOø( ç\zù6×mN†4ž¯Á/¶„±ágM÷rº&¾ä‡JÐâÉÑßá$Þ…y$æî ó\Ïœ_bWÖ-§·3U=¶ä&ª¥oR@® ¥O¢„
-™åÅ°|žJ\<)“á
-§6Ýåƒ 7 èý²%Ôz·ï|—Ü#¿.åÆRZˆGj! ›^Ê ÁÍ‹à¿.fªY–¨ ’¼ëŸ¼ž®|ñÊH|©[?¼®+×”¯ç—‹*±˜Æ5Òéœöä,eyÓcâŽ3ðž<~††’sž¥ãï—rìº /ÎÅG-—HYêG€¨Ÿ“òÆhŽ¯#ùêœÂ(L—ôƒ^Û7ÓŠ1C!?€Aì,ؤÈ̬)ˆõE¸.ÁÓr6wú*¹ôí4~ܦ?
+xÚ¥]oã6ò=¿Âoç
+iWÛÝ•XÝÃØ÷W’q6i3Æúææêë7:[I‘ªtus7Z+ODžËÕMõëúÛ¾úùæõûë²b&×›Šõ7oß}G‚~¾ýéÝ›·ßÿòþÕufÖ7ozGà÷¯ß¼~ÿúÝ·¯¯72·æ+^á„7oÿõšZß¿õã¯Þ_ÿ~óÃÕë›x–ñy¥ÐxOW¿þ.Vû‡+‘è"·«'èˆD…Zí®ŒÕ‰5ZHsõáêßqÁѨŸºÄ?«óÄæ*[` R#Jm“®2[$©VÚ3ð©|¦ ý®e¾v»îÑ1üÁõn<´íüoÕðÎ÷º²6”ã ­J”È
+ ·ªÛ¦nݦ¯ïÛº½gü1i–(•Fÿ£k]ŸœqX$ÂÂågªH”4fY¢i3Æ"†È%‰
+X¸í®n7wwpýÃf¨wî+:æ®ü¼öØÃáù7
+!|h•D uŽ½«@
+mÊ–Z$¡Ððš´ä}f­-w®Z¸,­“LÇÛzª½ fbÔ¦¹-ñ*KéJ
+,ʹ/>Ö„¹m‡Ë[ˆ[š]4UÈꊀ:k×n»#ܹ£n_Ó># ”Ï
+qg1—(¤Wgë»ÒsØhB‹dÛ/þGXœoZô¶@ßÛOÚk)xrŸ·®ïëCìy ¿7ßþ|-U±¾èÉLŠ:•§/{²1ÖeO±‚c¾ìÈÒÄØ<{y÷ˆµ°ýÔ‘I&¦»“Ó9ƒL ä X“CŸnQHa¡‘dïï;#[7>¬i¢„ €‹Zf’ìuÑýúUúÑø1-5Y¥7™c…øìy8ÙU‰É2;h@0wð¢SËÉŠa?†­±Ã~ôcÝû1³Ã&S ­[F;91ʑЉE–Zö?8M>vØäc“¶±ì³ì!­ mð`Ø{0ì{†<˜Ê’<á‹Ò8w`&±6³#†«—ô3ñ`Ç‘–Ž#mœâí6H¦pö`4ï«üB4žÎ
+†ñÎ؃)aÎ="‘óèä°9ö`83:% l2Ç„¸NO‘OËŸ| }ÖbzwɃ'À@Q
+õg£ˆ—£ßŒéÁ
+Å9‘*ͦî÷‹&“^ÏrÔ’+Xxˆ™)§ì ÄÔṫ³ô²9wZôPú£Tl/äÂh¨¸“™Ëþ@g*ɱÀù¢?c]ö‹4 EHaã6 À;
+‡&n!ÕIªtþ2kŠ‰[H!S P2>Ä’€WI.™if^Ãm¦Ï·Qüð—Jj'Ì>t¬èÝy²+ˆTÔä,4x¸_Qãý¸–ð¿pªóuIض(DQš@(4§ì-Joö2o#Ö¨8_í¤+M°âùÈ@'Μö¯ß˜‰Ñ’õP ÜçaA •N
+|· ¤¯8ùS)ä°éÔŠ>=Ô[Ì
+º† Sû•ê¸Û'””gIjÄcEpC…NãEQ`‰Ò©žz•wÝàK*xch==ø¨
+3ƺœÂD,¯MoË›póŸŽîð<úžbq|N%$ŠI‘ÈËdF¬:§aÄßRSBû®Hùå^„« +UWE,e ~ÊæODx¾…Ñøœö¸»ålƒOyz*¼’L“ó åÌíñÀ5Jÿ²ƒ ·l]wd£Á|£aþ΢€­Ÿ©qS[jGã³ ‰–œX8üÐ(‹å¹¿/½&ÙééñÚÀ¯>AL
+ÿ· ×ef‹æR¥Ñ‹þãÒšÙ¨6À¯Il¨Ãzô!Ügúä!ŒH ~"3}ØR¢¡,ÄwÝé© XWTÚï¹ÈÏÊ‘­‹Õp¢TèüË~À¦±>ê°Ó
+FQ7ó|šž-K)f¥sÜtó¸sa·’/»æƒÔLSåʆUB†Ë×ÛHÊÀ^jta³g¢vÃÛwm0UiL¤2–
+
+Hð‰òéxõ }DâY«ùÆ4Ƈdîèêu¼/Ü=ìxG€08SuäÕ¿Z|ÆX´oJFˆgkÿÝSøn a®9‚_lNŠ4†×à‰-aÜòXÓ=ÞÐpÀÇØ0 õÁ™ýóñ¡Ð#1uËzâè[βn9Zž‰ê±%3Q-**0v!–I >‹Ñë%§|MŽl<I“a÷i5[9³þƒ–é¼Û·ÌðE”`jt\ åyMM)ªåï­ zfFzfXÏôÈ'Zú´Ë7‚ÿ³á»+ÚbËŒu.§Â0RW±`L£dýöJ‘ÀªÑËÊŸå±k#Å•y#`Äcˆ‚ƒè©|Ìcì†ÚŽæ÷žQºíŽÈlry‹æ—-¡Ö»}çß<òRéØhÁ!©™C:„`&z)€ð6/Ô¸ž³ô6~,¦õRø'VaËÿûãìÓ—ëiiüRv¹¬,R,êe($<+æ”ǯ¸ÏIÿÚ!Vendstream
endobj
-1792 0 obj <<
+1815 0 obj <<
/Type /Page
-/Contents 1793 0 R
-/Resources 1791 0 R
+/Contents 1816 0 R
+/Resources 1814 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1796 0 R
-/Annots [ 1795 0 R ]
+/Parent 1813 0 R
+/Annots [ 1818 0 R ]
>> endobj
-1795 0 obj <<
+1818 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [324.9335 395.6435 381.8296 407.7032]
+/Rect [353.2799 369.0217 410.176 381.0814]
/Subtype /Link
/A << /S /GoTo /D (zonefile_format) >>
>> endobj
-1794 0 obj <<
-/D [1792 0 R /XYZ 56.6929 794.5015 null]
+1817 0 obj <<
+/D [1815 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1791 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F11 1451 0 R >>
+1814 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1800 0 obj <<
-/Length 3069
+1822 0 obj <<
+/Length 3338
/Filter /FlateDecode
>>
stream
-xÚ­Zmsã¶þî_¡o•gN,^ùÒ|rξT™žîj«´I>Ð"mqB“ŠHÙq}w±
-š{»r" „tã |¹P± ‰c§µ)Ó¦Á
-*ìxg¹q]DJX•ï:ôñû …ó´z%…Dz¾OKa ©Ý$\¤qGrÄ4 àÙáÒ6Tif
-’hžŽùÌbÇÖ!àßú…¨rÄy°,Y§›Õd¡ª[*¤»]ùJ¶h*AÖRô`ÑDTóåÉ^ëò¼ìzÐUnXEÖRV4é}ÙÙL áD”QØ'cfR†ñü`BX)ËHPè&I*=¿Ïöe"æFÂxOò-ì _Ò#ë/®L|ŽjxÀŽgIG~%£Yþ c¢*ªG’§}ó?ve±)Zª¹~š8$§¶åB„:ˆâD÷§g‚ 9Oµu856Ûîwçô¦,ào‚7TÆ
-BÑÎÀ!263‚BG×XA¢ÇoëZiÚÓ’jÝ’a¥Kr l¢Èôs#Øu„´ F2œßíòMñðŠ9r>1 D4X
-k˜h2¤12ìS¹e9i6ÕÛ@mÁ$à.㶙4n"?…Zc~«’é(ôµNGa§…¾n!·t{³†tIÈÏ& ;¥ý=ù¶HÔÀ2a]0µÖ‰»(IJ‹B ö^BE!ìÇE!Í4ûcžŠÂ˜9„‰]zçЩ0„ù–a?ÑÈxB~ ÑkÙß#ßÐWŸÎ§ áL¾;ð`È5…HºÈkHŽÇ´ùÒ•Å_Ó5¢kÖp¢l¶Eåéґ竸ޡwýÑ6“ ùV¬úDóPÃm¦TEæ@ʱ(óÖ¹„¸M>AãáP™t²Äî-è°ÛO©ÙX9ìwµIf”ehÚôJÅ.I\دÉ\ òˆªî ©ËKiœ‘{îEðãÑÞÍvT56á iá&mZªÐ¼ 9“YÔØ´8¢_~ó¾ö€*ä\{*u´ Õ9zƒ½%b¡{œÆA~ûnìÀÓ™…õyÒØDL±÷ý_ØNEQÀáhœf;_ë4ÛuZ^’ .Šì-å!;ÅbÚ|§5b¿Oz n­³õ Góå5}['èèËŽîâÝŸõòÊoÙäÅ3Í4ˆRú¬ha¡tçº4[SS'ÁZÝ-¯m„È“sŽìƒ9|½w#›E
-ª·æ–qyB/ <±K‚Œ‹ª¹ÛŒËëàîæöŸ7·cW¸l&a?çÁOå<2ÐIwˆËâp'Ó›7ù·±lxdYrMsÀŽ$„ÒŽ„°…¦‹[B‰#!šíN• 21ÃÝL[Ã÷HMX³Ô„EÃ×ðMéã‘Q¯Õ‘V:22Ûï‘ŒH¿##¬aéHF*<CF¶ì‡%0Ktš‘D?{ÃH¦Ï{PFYaä²ÉÈó2ÒbÚKÁa3ÅÞ+äÐIG¢cŽ&°oEÒmÛ²¤.›ôÐœHd
-²oç´ËÍQFN ÆœZz@~ÕÁ|=ˬÇM×v|y…ÛOI §Yl­w2Åie´@fõ\GpxÂÚð×æul·¥eSS÷¢Ú”‡,ïÐQ¡Ú(ä˯Ï!•ÌÆ´.±‘
-kùB–-äÆö‹§ÓÝA²2¼½ùÝÌf»þ”Úy€ñ¾‹ZîÇÑÔÎn~<
-ß°&{÷µÌÅ@/qb,½±èg8‡÷%IH¨¢i«Ö[³£¿X÷Ìr,W‹«ëëÛàêö+¾ï_„Ž?ÌHœîiM@wZç¡OYõ ÍŽC÷ÍšD|3| Ø ŠÕ4zOé4x§tû”É#ô¡ÍQä¾M½x¤%!«›FîiM@wZç±OYõÀÍŽ£÷ÍW¼ ¾† jÌäøžÖ|§uþ”UþÐì8|ß,ÜÍßÿRDœÝ÷žÖ|§uþ”UþÐì8|߬`ïƒú2
-Ã3ð=­ øNë<ü)«ü¡Ùqø¾Y¸Ý½ >êÌqçkMÀwZçáOYõàÍŽÃ÷Í
-ñ.ø± BØ9Óè=¥ÓàÒYìS&Ї6G‘û6…|ðPgÿ¨s¶Õ9‹zÂÞôÀà(fÏ Pï‚,ñˆå[øßÞ+þç¿@<ΞŠÇ'ž¶% ƒX$‘s
-áDÉÐóîOߺþ_,ÉF–endstream
+xÚ­ZÝsã¶÷_¡·Ê3'–ø"€ôɹó¥Îô|©­fÒ&y %Úâ„"u"eÇù뻋(P¢äË´sž#> ìb÷· @l’Â?6QY’Yn'ÚÊD¥LMë‹tò}ß]0O3 D³˜êÛùÅ_?
+=±‰Íx6™?F¼L’Ã&óåÏÓ,áÉ%pH§ï?ß~¼ùî_wW—ZNç7Ÿo/g\¥Ó7ÿ¸¦ÒwwWŸ>]Ý]ΘQlúþïW?̯ï¨+ó<¾½¹ý@-–>'˜Þ]¼¾»¾}}ùëüû‹ëy/K,/K
+òåâç_ÓÉÄþþ"M„5jò•4aÖòÉúB*‘()Dh©.î/þÙ3ŒzÝÐ1ýIeÅešb¥²q-³D3DZ¦‰•ÊöZælLË
+µ\7]ùø:[Uþz(2c<Q–›IÌ÷höžjdzMϘN”–l8ÿ|U€âµžÒ
+cÓwÐ`Ä´¬±#›¶Å¢©—­k•Ó‡¢{)Š¾«^–õ1h‹®¥RóHÝ$µ­‹¶ÍŸŠ–z›-5çôù£© 0al¼ Ç|WuT)[TÎd&Tb5îc‰UŠ;~ISþ\ýü’ªTÁŒª~ñ‰Â0“d&“‘è@Ô<Û¼ª¨²Í;ßÜ­òŽJ·Ÿç7ÿMåH¨åÛKf¦E˜¬öH>ìlQB?¦ô_XYç†7UU,©íÁÁáa­•pÝm±-ójöeWl_gn¹4$Þl­®4ó#’#gò›i›dØÎY³Ž©N›uO…3®óßgÛ6Ÿ¿o@𺛵åÅ‘}£w±Tž_FO5²Ž}g"‘–™áBh“m†+*×»5Uî §a}ÔŒ‹;©!뇦‡²k}“·h|)ݶb·çž/Ŧs»ˆý+ç!Àÿ9¯ÊeÞÍÈz KŒ…E¬L?cvúã¥åS
+R{ˆô^•=P àÌ&Bi1Pw]¼ÌN¡?$VÙ~{â|-¯^ò×6DŸºQ  5ÃtJˆÌôJ³CoHQÆqG@•Z9L<o0?†ƒÒk³£B]„ü·[–e›?TU:L,:)ßQy×îû}"Ì[
+P7¬SJʦ+ˆqƒq@z Ü<°Ž§ŸFöÛr)׊œÜ1õ"è_5ž¼ qiàƒ¹æ˜Uå¢ô›¸¥t¶P§!ƒ¥àŽÌ|¬1fƒí3}ˆä‹UŸÜ‡ä}Q•ã´'Óhi “ɘ8ŸFÇT§ÓèžÊi±è]%ž×¦‰ToLëiFfõ`U"xÓ`V3ýô®Ò…Ö> ÃòªÙUK*“kmšmçG—9ü‡@Ñé„ñ¬óu1’»pÀižŒŠÖ“œÈa4Þq¤*Ī²[ùY^7ciŒD§¶Ácç?ÍǼŠBÅ(…l’žAO†0‰Éà)å>Q…Â>zBÅ…
+ém–½1sO52õÀÊP·RÌMn˜eûE¸Zš{?ÄrðÃLýúÈ¡à?Á¡èó<å‡H…ptÊMšô>ëÝ'wC8ð€?%†VòUþcÕI×]ZžŠ?ízÀrNNb²à{-µ»L ¿t†Œ·›é\×w+'‹UYG´ÎÄ$atGÕ4÷÷]Æ$
+Ò N‡÷2­§Xt;Êi‰¾}µ9ü€*$V[*õÀáîeÎØ7\Ø8ñA„ûÛXȉV&À{l”àX‘¤2ÕÃÝû¿à€
+?†TÑí¶5ÕoúðùÓÕÍmÜÛnšº Ò<#T5$%‚ íâlloºr±«rwì}×~\Λq·vw¢áH EõD±H@½PÈ—K¿ê–úxtŽwßS3D5ãg÷mb*™Ã6>UZhÏÛY‡ç1"V¦¬q‡{è®Y¤ÈÃRY/ª»÷Ó2ܺÈÑ´Ú‹Fýþ™ûÃsF%g²D‰K}èˆ{“Æù!Ô<ÕÅ]Íý~ 9•õoĈxŽb…¾;È‘='(UM³yÈ¿ù[»Á²°¡^žº««›—úhäè<Tq. 0^´wÂUœïq|s—[»“VKÌï¹t (A kˆ-žUåïr–¯ÔPü^¶îGø±õ¼|ÒŽòÙDÅ“épỢIa/_È-–3„¿1#Šhú³É²€äÞDö?«èUêõ
+}þWT1•;Ò@lŒ’/A2‹xÑ›DʃIµ»¢æç' DÇ“¯Z â[«†“²4¹¹]}øp—\Ýý€o
endobj
-1799 0 obj <<
+1821 0 obj <<
/Type /Page
-/Contents 1800 0 R
-/Resources 1798 0 R
+/Contents 1822 0 R
+/Resources 1820 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1796 0 R
-/Annots [ 1803 0 R ]
+/Parent 1813 0 R
+/Annots [ 1825 0 R ]
>> endobj
-1803 0 obj <<
+1825 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [84.0431 671.8392 144.9365 683.8988]
+/Rect [55.6967 566.349 117.601 578.4087]
/Subtype /Link
/A << /S /GoTo /D (view_statement_grammar) >>
>> endobj
-1801 0 obj <<
-/D [1799 0 R /XYZ 85.0394 794.5015 null]
+1823 0 obj <<
+/D [1821 0 R /XYZ 56.6929 794.5015 null]
>> endobj
534 0 obj <<
-/D [1799 0 R /XYZ 85.0394 740.6547 null]
+/D [1821 0 R /XYZ 56.6929 638.6405 null]
>> endobj
-1802 0 obj <<
-/D [1799 0 R /XYZ 85.0394 717.7278 null]
+1824 0 obj <<
+/D [1821 0 R /XYZ 56.6929 612.5722 null]
>> endobj
538 0 obj <<
-/D [1799 0 R /XYZ 85.0394 401.004 null]
+/D [1821 0 R /XYZ 56.6929 275.0395 null]
>> endobj
-1804 0 obj <<
-/D [1799 0 R /XYZ 85.0394 372.9762 null]
+1826 0 obj <<
+/D [1821 0 R /XYZ 56.6929 246.5203 null]
>> endobj
-1798 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F14 964 0 R >>
+1820 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1808 0 obj <<
-/Length 2192
+1830 0 obj <<
+/Length 1319
/Filter /FlateDecode
>>
stream
-xÚ½š]oÛ8†ïó+„¹Y¨Y~ˆ¹{•6N׃´›z¯fæBµåF€-¹–læ×ï¡HJ´,“1
-,‚ÀùŠ/ŸÃOK&†?ñ¥’Ê(“ â˜ðh¹½ÁÑw(ûtCŒfjESWõaqóþže‘D2¥i´X;u „… Ñbõ{œ"Š&PŽ?~~¸ŸúÏãí$KâÅüóÃdJ9ŽïçÿšéÔ§ÇÛß~»}œL‰à$þøÏÛ/‹Ù£.JMæw:Gê •>Îîg³‡³ÉŸ‹_of‹ŽÅå%˜)7¿ÿ‰£`ÿzƒ“‚G/p‘’FÛ›„3ÄÆlÎææëÍ¿»
-ÒöÖ±øuš)K
-S °*å?0Ɇ¨ÔGÜêÎL­èÜ”RÇTĥ䧦”#’Q4˜ÞÞÝ=¢ÛÇ/IãÛ‹!O¢‚‡à•Þª‚ð>Ó~h:ïšÒô:xJ‘d"ï¨<ðV„÷™öðCÓqx×”f×ÁcX6$ Á;*¼Uá}¦=üÐtÞ5¥â*øTÀ˜$xWu¾S…སü™é(ü‰)•×Á§2#xGå·ª ¼Ï´‡šŽÃ»¦ _ŸHÄa» À;*¼Uá}¦=üÐtÞ5eä:xÐSÌBðŽÊoUAxŸi?4‡wMI
-“^^AO(< À÷"»Ñ=Ž=ùÀqÜqÄo&æíÑPú‰Ñeb+
-û;â¡ã(±ëH`o{33Ø4°²;"³™=Ž=óÀqœÙq¤é|;7‡E1ô]Áy¸(Èíq칎ãÜŽ#EøªYÍ™DIš…¹£ò[UÝgÚ³MÇá]S‚1Ⱘ÷µ7€‚žg¹£òÀª‚ð™öšŽÀ5%„Á
-‰HPBÓ@\Õå(tªP¼¦]ÎLG£pbŠÑÏýÍ¿¤áˆ¥)™ˆ9*OĬ*1Ÿi±¡éxÄ\SòÿˆX’¡ŒÑPÄ•'bVŒ˜Ï´ØÐt<b®©@ÐÚlZ~ú¶ÀW-&x(ŽÊ«
-FÀgÚG`h:×ôÝ+Ú·‘ˆY€ÜQyÈ­*Hî3íɇ¦ã䮩@³+ØGRIì®ê2{§
-±{M;ö3ÓQöSy{– ó&Àî¨<ìVd÷™öìCÓqv×ôö:vØ¥ÌBìŽÊÃnUAvŸiÏ>4gwM?\d¦4A§i4%‚ež¬Ì¶»ÃëdJ ÿª«¢QÉ$Î÷"âBç7ÅáÛ˜«ü %‡'“ñ\/:µ)ž‹© Z鼺ژêóÝN'áÞº¿µ1ºµ.ZnòÆdÍNÜ•ò_iE1ÒbÞµX‘b@$HróÀØ4ñ¸¬žŠ}yhkbi¼nï©·º°ÞʺjtQ¹Ö™@Ù…²û¸@YUëÌUß<ȵ̓Û<ÈmvŲücj½Û0jaÂÈLa/TÿŸú¹ØïËÕ€Qw£®†c‡.6es0Ùkýé´®Ú¾Óé×ú¨˼:Ñê‹Î@Ǭ>ô5èT~ j†26ëz¯ÅóínSü]Ѽ¿OÈétÊL†ÃTw¢iÌ´ ïTۦǿ _þ¡«8™Ó±:æ*25¨ÒíN¸8NHÜ”Õw}¥1”fµÒªvXBÆ>¯¾&½T}Ò–®t†.ïT÷e½SóT7F“o´&_©q"yü”?3]
-)"w&ýÜäTË
-ÇW#]ca–^xÅÛ>¹>Í2D³ÔyÓDÆ~/cDªôÁB¯„Ãø@(IÕ«í¾Ö3ëNtîíÎ\B JõjÛ1ÿªŽ‡kµa2¿´›J™Ö´iµ©™òvü¨”Þ§uZõ¶úÔ»2$ôçR»ŠÊùúùÖ-ZÖí§)lwO•0£Z%ÛÓ‡ú 8<µß"˜DÖµÓÉ[uÇÀÒ=ï»n#ª[’ªÿoæͧRf~@ÊnŽprY¡Ë_àú…ÏH—ànøé9O?2ÄÄ¥ßlÀ,C‰€JL£ÚÇø¬å°ÑÀžŽ4ýU„oendstream
+xÚ¥šKsGF÷üŠY‚›~?–XB
+®X¶ Y9^Å•lâEVùûiŒzøhzîUWÊ¥2’s8S-æÒ 'Uþé)yR6»)fG^i?ýñ}¥¦¿ÊïžWú•ÙVh‹Ô»Óê§'§L9˜0þ„c%R)ééôíËúáçݧÓþ¸Ù¯Ö6[ÔúÝáåñò“|ùïáãËÓáù·ãnÝútøørùñqÿ´?î_ö›­N^—û›×#,ÜáéðËþrëù¸ûðawÜ|=½_íOs öjeÏ!ÿ¬¾|UÓ·’ý~¥Èæä§Ë7ŠtÎfú¾rÞ’wÖÖŸü½úuõy> üöÇ]{çof¶ÖQ
+åüYö™‚5v>ËÚÁYÎåf²¥ Rç³ü»Ò±MÕÊ•;¹8áñî¬3u¯5´Z•Û.Üju" ^¶»ÇÇ#펟6Ù¬w‹'Ýi²Ae!(&¿Rr>g…üVÛÏG­ÎcùÆ–¿‹„| ˜üJÉùœò[m?µFåWÒIZü@1ù•’ó9+ä·Ú~>jÊ)”' ,~¤–ógJÌg­×ü;m7ÿFkÌX~Hd¢.0H1ù•’ó9+ä·Ú~>jËÂP¾W¤”?RL~¥ä|Î
+ù­¶ŸZãÆò­¦hMòbò+%çsVÈoµý|Ô?–¯-¹ MWH1ù•’ó9+ä·Ú~>jMÊ÷¹œ®¬4ŸÔrþL‰ù¬õš§íæßhM˲NÂâGŠÉ¯”œÏY!¿ÕöóQkƦ>ï•òbò+%çsVÈoµý|Ôš±©Ï»òÊ iñÅäWJÎç¬ßjûù¨µcSŸ?Ï ª¸ø| ˜üJÉùœò[m?µvlêóÊR²VZü@1ù•’ó9+ä·Ú~>ju™t~{¿+7|Æ€–ë+$ÆsÊk{ë즣3œ7 ÔÛÃC$“•°î‘bÒ+%·sVˆoµýzÔ?–ï2)­“_)9Ÿ³B~«íç£6„±üò,pň‰…ävF é³_β†Âµ!ƒ°Ç“^)¹³B|«í×£öüt7_¾È(/,{¤–ógJÌg­×ü;m7ÿFòX~ô”­ö8bò+%çsVÈoµý|ÔF5–ï#…óñø| ˜üJÉùœò[m?µQåÛL6káb“_)9Ÿ³B~«íç£6š±üó† ÎÒâŠÉ¯”œÏY!¿ÕöóQíX¾2”\ö8bò+%çsVÈoµý|ÔƱyÏ$G>Fañ#µœ?Sb>k½æßi»ù7Ú86ï™2 Yå…‰)&¿Rr>g…üVÛÏGm›÷ŒKå†?RL~¥ä|Î
+ù­¶ŸÚ86õ“)+ìq ÅäWJÎç¬ßjûù¨cSŸÑš\ÖÒâŠÉ¯”œÏY!¿ÕöóQǦ¾ò‰ŒQÂRËù3%æ³Ökþ¶›£McSŸ.WŠ\Γ_)9Ÿ³B~«íç£6M}Ú
+1
+H1ù•’ó9+ä·Ú~>jÓØÔ§m"§‚´øbò+%çsVÈoµý|Ô¦±©OŸ?`…ë@Lü+$·3JHoœýrp¦±yO+M)XiÙŤWJnç¬ßjûõ¨Mcó^Y&>aŸ åø
+‰íœòšÞ:»åèLc“^ðT^%IoãW†{ÿó†·ð}øþpáíûY˜âà¶?¼ÖyåKSöÞüÿÏÑÁæ`$›–>‰cU dr¬êrÁj¹/Ïh>™Øyèÿ–†b3endstream
endobj
-1807 0 obj <<
+1829 0 obj <<
/Type /Page
-/Contents 1808 0 R
-/Resources 1806 0 R
+/Contents 1830 0 R
+/Resources 1828 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1796 0 R
+/Parent 1813 0 R
>> endobj
-1809 0 obj <<
-/D [1807 0 R /XYZ 56.6929 794.5015 null]
+1831 0 obj <<
+/D [1829 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1806 0 obj <<
-/Font << /F37 1026 0 R /F14 964 0 R /F22 961 0 R /F41 1218 0 R /F62 1361 0 R /F21 938 0 R >>
-/XObject << /Im2 1350 0 R >>
+1828 0 obj <<
+/Font << /F37 1038 0 R /F14 976 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1812 0 obj <<
-/Length 3381
+1834 0 obj <<
+/Length 1333
/Filter /FlateDecode
>>
stream
-xÚ­ZKsÛF¾ëWð¶TUˆ'€9*Žœ(•ØYY©’
-4ãz•î¯Øê ú¾¿ânÌÆÚŒG}ûpõÏ÷2Z™À„"\=lGkÅ‹c¾zÈ~_¿ûáæ—‡ÛûëÐlײõ·w¾#Š¡Ç»Þß}ÿëýÍu¤Öw?ùþöýíýí‡w·×kó…[áÌ„÷w?ÝRëûû›Ÿ¾¹¿þóáÇ«Û‡þ,ãór&ñ ]ýþ'[epì¯X M¬W/ðÂnŒXí¯”–VRzJyõéê_ý‚£^;uI~JÇ*\m`°dB-K™LƒÔ6‘â¸ï¥,ø’”ý(”r¾?´§MZWm’¶ó3se!`åñ¯¶ïG-ì/Fûs­Áæ |:äi±=ìcµ~Ù%-¶ôÚsdÉU²Ï‰üR”%Ñ’Ã!OŽÔ.*êmw9Ž×<^çmw¬òŒº>}¼w¥µ}ºÎmí²Ò æ—ºÊ°ÅÕún‹’uÀB æÌy`´ö
-"RÀÕ0ð0à1äÆØú&ËŠ8Jœ}}ÊÓ–Ä“¤»¢zr‹%Ë`y„QH"}Àø#•^'£å¤RëÆ/‡),—ƒèdƒA75 IÁ¶áh¯ÀcH8"†<a÷Hìô^„ â(2n˜[Enªh—¢jó£cËqBmM¤b°:¬ŸÝQZ?‚TÛêªq]‡ü¸¥8º!Å ®ÆB1ÕÜ>©RÔRdÖõƒkŸÆbÐ:L¼þ"$ô¡ìÀ<zm
-¹´÷X˜Ü ‡=U6òŠmyºæœ¯mL×ë;·Evˆɱ-Ò®LŽ0náLùwÜâIžsùr‡ÞœÍð_ãÀ^ã(•{ïZðÑ¢Mü:z°èîñ\B}_(AÅŠÊÒv‰[{"R–—ùS‚Bv]/E»£.;hr 2·§²sv ºž$ùÎÚžôO¯6Þ"ù±M
-7ÄÙ ²ô¹Øw{z™¨ #}îɸ%’›3É?‘&ÛE’#hï`2ŠaoÛùOóÛø´Ã²›í±ÞoÎÅÎT*ésœu!­‰ äÆǦª^ZFZÇãð%îüŸÙx¯
-U C&ô Ëô † ® ¤É „4cRTÖ
- ñóñÓѲ¤M£åGn!˜ásQw ½ pËžÁÙ“'ß½$$.Y`”_‘…Ô®ã,K:O„Vឤ«¿ºÂ…%¢î;›+±UèS¼Ÿ¨‡üÝ.êå6x³œeîp½,6<”æÊyØu ¢'
-ª‹àÍÂ<SKD—°!š@ǃ‘Su‡ƒ‡*e±/fNÞÛ­žéÝú´¯z“‘÷>žüÍÀ²T…æ–2ôJK>oœd›âË’\# E©Žz‰ÐY NÒ¡‘Óìu³ B(Û zœ¥Ï¬’²/¼ï‹ŠüSò?uÑJ="Ñ„˜ˆ6Le¸}{ü2…HÚsçÀÉo×B~»Û,%îºk 4ˆ"]©÷¥Öë…
-LИ$|6†½ØéVzÉËrJ¡ùœõuˆí´!
-eú5]‡—7XIOÃâ&½ëê—Ñ@[„³Ü66$=6$èA¤ùÙFí †Ì¬A÷ÀÑêx˜ylÚaÍÜU‡Ú!Gã Lû[¿ñ&Èäf1¤zÎ͇£‘Q©ãQ‡0rÝÐe¥yeÁFù"Ô(
-¡ðü­°e­×ïÒ4Ïm ì§ÓNã6&ÚݸdeÞ4nÓí„Õ‡cßû&Ê;aʦ>¢%¾¶YCMÙƒ2¼TÓ ‹N\òˆjŽ‰Ùš3P
--s¿‹«þÆ‹¿ì
-@ –Œ{Íãܵ<†™îÃÐÍ[º[„“~Ém]BUگ篇k»ý>ñ9ÐçÅúà ¯3× ‰Â5ã2úïÂõÙû^÷ŽZðË÷½ãQçï{ûQ‹8gú% ÌÅíûQ ûOK&‰ø-ž2p·äõ&à¡ö á
-_€N
-
-MѾè/ê pžåyu•&¨œœ}øöW§ig³ÝY›å`p ³‹6;uÞfûQgª…‰©ê8`‘~ƒ~Ôå@ÁÍt8cÀ“£k/xIöugïm M U53´)ÓUžZJž’îÔàÙ5nA‡“¥Çɲ÷õ?Ü,:=~é û á§XÝADåœÍ>úzî>RSöfZE5–jTÎy0‡ï=Æ-\Ë–‹ßíçWß=~„–µ/jŽîEp«§'¨Ê“[¤ö{%íÀÛB]ÔW¬Ü…oá1
-q
-ÔñW:¾~.òN`Œ; o™eArÁÉ
+xÚ¥š=s7@{þŠ+É‚,¾QÒ¥ÐËÃTŽ+{œ&.RåïG ‡%ˆÛŒÇã±,>Ýã»uKqRùN΃O:M!Yp
+ÝôõÇFMçÇž7øÆì ´§Ô»Ëæ—'¦Ék?]¾“cEP1âtùöyëAÃ.Am>¾<žÿ<vÁn/§/»½vjûtúíøúÕóùðáÃá¼Ûct¸}øõðér<¿>äߎñîôòøúôúÏÊAÏǧãùøòpÜ}¹¼ß/K íEeæ7Ÿ¿¨é[Î~¿Q`RtÓù?
+0%=ýØXgÀYcÊwþÙü±ù}9 yôú£½ó·0{c!f¿p–]o´YÎ2Zr–æ}.(Ô|–ÿRÚÔ‡QOôpwÒÝKµ&ÒˆàRr·Òó)TpzÙÏp8Ú%½=¬žr‹`¼JB<¡˜øB‰ñœ´Æ·Ò~<•Æ4¯M~M$/ÄŠ‰/”ÏIk|+íÇSiRcñ*/ûÙÅÇŠ‰/”ÏIk|+íÇSi¡x}~ñ{aÙSj=~¡¤xVºÄßI»ñ7Ò¤Çâ}œpY¡_(1ž“ÖøVÚ§ÒdÆ⥬°ì)ÅÄJŒç¤5¾•öã©ôzÁˆ7Áè(ÄŠ‰/”ÏIk|+íÇSircñhÀziš¢_(1ž“ÖøVÚ§Òä‡âÝ|²’B>žRëñ %ųÒ%þNÚ¿‘¦0Ÿ] £°ì)ÅÄJŒç¤5¾•öã©4MxÎEð6X!žPL|¡ÄxNZã[i?žJÓØ„çl~¼´ì ÅÄJŒç¤5¾•öã©t.ª×ó``ƒPO(¦¾Pb='­õ­´_O¥¨Æf<§ Dc¤…O(¦¾Pb='­õ­´_O¥¨Æ†<8/Œ9Zo/”ΗòÖØ §FTcóõtRš§S^(1“ÖöVÚ§Ò¼øÇêm…Éõ„bê %ÖsÒZßJûõTŠjl³FA°Âež@Lû$¦3ÆZÞûáĈjl¸³¨Á/ìcPŠ)/”˜ÎIk{+íÇS)ª±éÎä7AZ9aÍSj½~¡¤zVºÔßI»õ7RTcã ’1ÂN¥˜úB‰õœ´Ö·Ò~=•¢›ïŒ àçòõ„bê %ÖsÒZßJûõTŠ86ßå³&¡p‘§S_(±ž“ÖúVÚ¯§RıùÎèÌc’V>¡˜úB‰õœ´Ö·Ò~=•"ŽÍw&σÑFa7ƒRL}¡ÄzNZë[i¿žJǦ<-¸„•O©õú…’êYéR'íÖßHǦ<í=å„A‡RL}¡ÄzNZë[i¿žJǦ<m#(c…•O)¦¾Pb='­õ­´_O¥ˆc³žÖ ‚7ÂŽ¥˜úB‰õœ´Ö·Ò~=•"ŽÍz:_#lBi助/”XÏIk}+í×S)âج—ßÖJØÑ ÔzýBIõ¬t©¿“vëo¤ùÒ7V,¤|î„zB1õ…ë9i­o¥ýz*E=6ëáüE¾¥˜úB‰õœ´Ö·Ò~=•¢›õÐD°ÊK+ŸPL}¡ÄzNZë[i¿žJQÍz×µb„ ˜ö7HLgŒµ¼1öÉõØ”7ïøFo¤5O(¦¼Pb:'­í­´O¥¨Ç¦¼hòA´°­A õöIéœq)oÝpjD=xŸÖA~g$ÝŸ/ wwþÊÈ÷æWuäÎünå¾ü¢Cíw1`þ Zç)ä¿É9ýóŸ‰#L\ûtùU4º<©ëǪôÝ3GÚxÝyêÿˆ­Y™endstream
endobj
-1811 0 obj <<
+1833 0 obj <<
/Type /Page
-/Contents 1812 0 R
-/Resources 1810 0 R
+/Contents 1834 0 R
+/Resources 1832 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1796 0 R
+/Parent 1813 0 R
>> endobj
-1813 0 obj <<
-/D [1811 0 R /XYZ 85.0394 794.5015 null]
+1835 0 obj <<
+/D [1833 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1832 0 obj <<
+/Font << /F37 1038 0 R /F14 976 0 R /F22 973 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1838 0 obj <<
+/Length 2325
+/Filter /FlateDecode
+>>
+stream
+xÚ½ZKsÛ8¾ûW°æ²TU„/Ø=9±œÕÔŽ“u´§Éh‰ŠY%QŠöx~ý6Ð
+Î}ËêêëÕ¿ë ƒ^;´‹¿ZgÌQ)ÌÑϲÔ$åŒ×,S°¬ATx-Ãò·„f§Pi"`È¢p¾3«µÖ¹YƳ4Y¤m³”eÀbB¦wãë››{r}ÿe¤Y|}‘u‘Ee:€?ÐêÁ﵆ñ÷Y ðŸšíÆšý 䌭•@hõ ÷ZÃÈû¬ÈOÍv#Íš•5ö„ªÀhõ`÷ZÃØû¬ØOÍvcÍ2 ¹#կƟ*Ax*E?þPë2þZk¯Õÿ™ÙNü-³Œ˜LÈ^?•þT6€?ÐêÁ﵆ñ÷Y ðŸšíÆš5OR @½ž‘’Œäý@©‡
+‹ªØ˜„†]^}/œ<7 b{ØàcåY»¬1³ÜWN'_¡N¾xA³ù“3†0çÞ5øøñ¶ZþuAà­Ç¥@ŒpÜR)ãñ´Â–í.ŸÊyo‡ÇÒ }Zä;÷bvªyVfÁð`õ]Üš†y¾wÒsyxDiW/(ý8‚ÛÞ™‡Â"@EZ—0•Õr—ﻑŠóñ^°ŒB^Ú²ðã
+„*_®­¬ð Sïý˜íˆÆù¼Ø›ý•ñøëÛÑãpÐØñÃs'íóùÎîây™¯:œx.Bÿª¢XØÐ0slÚà°N}p[eQlW›¿+mv4ñ1¯*›PÃme}qûj“»!ùsîÚ‚œŽºD#t9äÒ iˆ$Þó?|SF´–¢ûÃ7 WœÈL°Ësá¸ær¢Ñžª9›£D&¢õ º 8œaÿSE#¦)QÂÕwAÆ)ä{œÉxn5>Ã^¡}aÇÄ“Sf`NAÁ5&2˜ÑD?"¸m­9*²ÅÚp`ÞO×,ºÙ
+þè%?;ŽÕ¢Ø¡xa›×ž*ŽU˜ÀØ ¾µQE³‘SßÖ@”?TApT ¬³)€˜ÄN*sIÐ(ù'bS»ŒÇruÛ¡šƒ>ðxuà›áÌ@ÀsYÓUµy¯×NÚø•4[vi\ù»`PŒ(ìúÕ¾­¿(Š­'º¬ÂQØEí_ÎBg$å)­ô¶Ýiò€Ô©ŽÆÍo\oËc(^嶊ʹèþeJÁu_*SCÀӰr¦¿:ÖZf…°°ÀdxV¸ 3ÔÚá¼ç…»×ê0ßÚ¾B©Ûö¿š
+qiŽM®ãg{äÉ9des´¹~DFÂÓe³äæ‰g3˜æ!†*s¶˜–¯Ÿ¯Ã®ùÆ>]§=CàBÛˆ¶1¿ BAýd/\C*ÕºáU] –®ú jÞwõqTLfþ¿¹ˆÏHn“€äH¨_çG”[oj~-UBE Õ^« Šù¦:˜jà,*4alÈ|­Õa¿R–œ:PG…ÉA&áxl³£ šmJÔaadŸ°\V'aaºlX4]MX˜N,­Tsóч…€ ™ –Â=ø añÁö6ÿüoa
+t·½˜TÍuÌߢZw´Ü³åÊ_ñÌ çŇ_n.óãêаïÚó°,Dœ—É6O%¶\ t™j¯tášwÆ´$L$i¯µÒ¹mžØ›p; ]¸©)åæ6°(ŸÊÅÑ–ð^ßîiÃl"Yh ˜µ*7MðÝ€Öwp;–ûÒ€3sw‡Û \ßñ/â0àK¦qÞfR·ïí/ °pkp ÜÖ÷ör]ôÔö’˜ÿdÒAaRÑoþÿ.áw4ÂÕ¥¯y<I‰b:óNÙ¹üÔsÉdG–u¸þ_ÑyP,endstream
+endobj
+1837 0 obj <<
+/Type /Page
+/Contents 1838 0 R
+/Resources 1836 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1813 0 R
+>> endobj
+1839 0 obj <<
+/D [1837 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+1836 0 obj <<
+/Font << /F37 1038 0 R /F14 976 0 R /F22 973 0 R /F41 1233 0 R /F62 1379 0 R /F21 950 0 R >>
+/XObject << /Im2 1368 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1842 0 obj <<
+/Length 3646
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZKsÛF¾ëWð¶T•9;o
+rþöã‡wWßý|}qžØùÍÕÇç íäüÝÕ—Túîúâýû‹ëó…Jš¿ýþ⧛Ëkêò¼Æ7W¾¥–Œ>'½¾|wy}ùáíåùï7?œ]ÞtgžWIƒùóì×ßålÇþáL
+“¥nö)T–éÙúÌ:#œ5&¶TgŸÎþÝ-8è S'ù§¤ÐÆë j5Å@— o´é¨¼P)ðEJ9¿X­Ê¶¬7yEGýT,±ÊìÈ—åæO këÁÚr¶Ð‰Ðk°êÍCq¾0ÖÍóÁrÆÚy—ÃÎ%,W¼²OçyÕÔ4d™WU±â=†ô«˜ªS ›áy˜>A‹ÎDš$)ãõˆ ÚÐ.å¦-vLSBmMMåz»;Wé¼~䣴qDh.šm½i¸k[ìîêм@z€Ê
+)ñJ”™s:²Î7K˜¡“l^ßÁ7í$Z2A¸âù/ņúwçjÞÝ4uìÃK¾ÐƒçÃÆb“ßûÞ`k2\ž>OeÅKñ‘±1ç{ž„½ê]»XîÛp$Bz‡\Ò:!¦`axÑZ§J¡sYÃÊ›–*È©P(€œoš§‚[¯¯>Ôm7ÉÛ yЉ Ëîsò`@­Šò…3mƒC%=O¡k],òMÙ¬éRLD&•_j¸I7²oè›oVT[ÂwS·T ªò¶àø ì„·>Q¡'Èáõ|·ß‹îz2aÑ€ QC-6p³½Ú åÆÀ-¯ê¢¡æ@]è‡CßT&¡‡Â‘У
+öÞrJüÉ"aär¿£ÁIYЄ*ð,g›
+x®Û‚PPsQíö@½§Í‰J¤Hm6&bAÀm‚ï…•Ö¼jE”°^ºW­ˆPŠ«RÐฒ´±e[7M‰ô„Z€'x¦m±,ïÜÈ\`&\Ú ñ¿ÝF¨R•ëòHÉ;¹uG÷tºæ‰ù@{oyô¾™æªvJ8c|¼´üyÁœmÊ¿¦øš!K:ŽÐY4DP>3§áÔ
+Œ7!ëµ™_?ˆÆ
+Òëï—Ë¢pœ6t; oLm÷9íQMÛÞè±9Ž½ŸEy»LYÔ;”Ä—2kSˆ);P†é# Êz(?Rp£Šq:æ ÎÐØg_­¨õ–g‘… a1ÆÌFâƒ-Þ)
+_qß$€VIç±´a½WuزdzŒäýjDÈßÄò
+‰¢ü%Ã…VEÜ…£¿áâO% ‡ IƽŽã±jE 3
+Ü#† e@%“pò&.yWW•vëÅ4@θv¿^çÑF¿Xocàu"M0áøÀ\Ke’¯3×âEêR±V~f¥ZDšN5Ò ÅpÔéLc7jç wWZ
+ð½êõí»QûÀŽv¬ƒp5¥õ™PÞEÐp€ Ÿ€N
+T*7#Hi\„qXïÐmÉ¥(¾!ÚÍí“Þr„R,*2"¸Õý=Å"…êÀ‹Ôq¯¼íi›@]¬ªØpëèýÕ³ÛÅŠM¸ 9MlÎéÓÓ©cÊZ× `å6X¨=–ÅS0$0†¨†[æÛmU_pÁm¾çOgÐüH ú‰=W5CÚ™fzbAÏ;Ÿgzþªû‰>ÇŽ“
+œn—3Qþý”ÁIDfô\iÞB9 ¾V¢Š¤`ÒÓÑócÆÏo»—"|»-«–ðØ+Ž.¬CYsĵ}br¸\íPi„Å€oËŠÂ9¶cøŨ©¢üÎÛ3ryD,Œ‚j$›±ï¹{PÎ#©àŒbéíæ,‹]È{OÅZ‡mƒÄ“~%IÔ¯„>~I’¤@Kü0üO³ù'LÙгEůámÐP¼˜ø˜ÏŠ™ÇÿPZ" OzQ“h
+A†çwgÏ'b=¦T=»ç˜öÇY'É;€©Ý3nsB
+zƒlÂO¯Ò` ˜€ A íí¤ǘg̨ .>õ_$…™MÜðAÐ\e±¢†€á^ÊeFÌvÂN?xïÀS;Yüa–üÉL˜Œ°ÙC@»2Qc±•EJÙ^#±ÂHÆ£™Ø‚ƒé·Ì?­á˜NEšùé ÆÁêéì©Õ¤™–ÃlèÑÖ8—ÒùåÅSÙà¹pNy<7/(²‚RÀÖ0*ç{é÷>†u¡C¶߀Dx{¤X-œñö2)ºËœ xF‘#ÃO þð/,Ç;Aoñœã³;ÓW<†¬= ì‚~43aÌ9…XÖköž™cG"Š¸úÒ6‰€sê±ê|ÅyAót÷’öfB×qÈ(ñùôô$øœx
+endobj
+1841 0 obj <<
+/Type /Page
+/Contents 1842 0 R
+/Resources 1840 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1845 0 R
+>> endobj
+1843 0 obj <<
+/D [1841 0 R /XYZ 56.6929 794.5015 null]
>> endobj
542 0 obj <<
-/D [1811 0 R /XYZ 85.0394 637.344 null]
+/D [1841 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1281 0 obj <<
-/D [1811 0 R /XYZ 85.0394 611.827 null]
+1296 0 obj <<
+/D [1841 0 R /XYZ 56.6929 749.239 null]
>> endobj
546 0 obj <<
-/D [1811 0 R /XYZ 85.0394 133.1815 null]
+/D [1841 0 R /XYZ 56.6929 258.4984 null]
>> endobj
-1814 0 obj <<
-/D [1811 0 R /XYZ 85.0394 105.0145 null]
+1844 0 obj <<
+/D [1841 0 R /XYZ 56.6929 228.7653 null]
>> endobj
-1810 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+1840 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1817 0 obj <<
-/Length 3447
+1848 0 obj <<
+/Length 3431
/Filter /FlateDecode
>>
stream
-xÚ­ksã¶ñ»…&_BÏœx$Àg®q.öÕiâ¤wn¿$ù@IÅš"‘²ìvúß»/P DÝ]›ŒÇ`,vûNø 'qâ'¹Ê'iùqÆ“ùú"˜<ÀÜ»‹PÖLí¢©»êëû‹×7:ä~ž¨dr¿tpe~eáä~ñ“—øÊ¿ ÷ö‡»›Ûwu™FÞýíw—SÞÍíw×Ü{÷þêûï¯Þ_NÃ,½·¹úñþú=O%‚ãëÛ»o’sséûë›ë÷×wo¯/¹ÿöâú¾çÅå7 42òëÅO¿“°ýíEàë<‹'{~˜çj²¾ˆbíÇ‘ÖR]|¸ø[Й¥­£ò _éDP©1ƹŸh¥I€Í¦+›ø‚À»í€¿,ðæEÐ+ª¶aÐö2Ì<óO3—%o﮾¿æn³åö›ˆWÏj-Ë%·ÝÊpçg¥¢¢*‹; ª‹µá£â ôÿ
-‡éa“s0íuiiÜ f†~ÇŠ¸lw³¶+»]g°nú×Ù¾pWŽLBo±3 ên‰# $äáºèæ+ÓÊš•ìz(ŸL‡¾¾‰BGÜ*‰ý,ÈS IÀcª²íxåðb?
-u( ›åá
-
-Qz~Ʋù’Fu=„HIÚç ’¨#tõ2¢1$;ijÝH¹9­¡ óþÝdÛ#ü¸pu6
-ÓÃÉt‹1õüä)\œ:ʶ¬ I«Äë–5§-Ös‚à?N¢äȃb2‡57‡ÐM9@Ö`ŽÅƒ (ë—aÝE)X&U
-v°JÑRóPÇa¸(0Ö¨OŠ`
-è-ûLþÜY‹²KÚcÃ|¯Ùu<˜™3IƼ€<lñÊj†„¥‚›PeDZ÷¬¡¯n¿c¨áÜ¥9NÃUe±­¼ 3¯Jàk®ˆžû±” DÂ
-ÄFÁ!ÔƒF¤íÐ>˜Ž×azFµˆ3IDÀ’°Å
- u³”” ½Ð
-Ò[-ÍSveôÏy Ãýß 7åÙûƒÔ¤mùÁ]§©óÀçž>|”Ày‡ Î9&uübNsÑ“ÿèf~À»Vö#t(ìa7ñVàøðP->Õ]6LH`1*{Ës¨íØÜTæ¡ìJˆlu|'ìãÀ½RB|¿ß_æê ÷—Œ¨É%«ôÜW“_x,©¡ ?š«Ÿ|ZJÏkýÉûÐ>®îêÓf%:}Hmån•æ»…ÖyüU
-J;Òvœ[ÒùX¤Ú¦¤Ðû„pµó±Hp>Ðhû*íŸÍ>ñlžøQœ$èX*ëƒîÔ~%ýTÑð6
-GJ¦»¦ë½e‚Qî ¿LçòœÛß8g}8aŸÙGq¿©-ãºN€l¬ß¤¼P‡</æÞ²˜w½‰7×qHXõ*¹g¢!î¶iÒð%”-…®f4w¥" \<•\)ç¼8^› û˜Xæl&=Äg­PÊ?XG%ÌK¤”k \Ð×giÿ) Kfd-„¬„.=a~Ó”T’"¢%·O¥aõC?á·Ûæl¾“@Ñ6ïvraIÎêP)PžÊ¿Ÿgöuž
-J<îØm7 ÙHµ×î°Ê%ü-o“ýøˆ0Û=<È7‘$ö®ZAÈ÷…'D¾¥f$ñÒΖíG**K0bQã…»Œ(ßFè{uj˜ o•æì`Hjó¬Ù
+xÚ­koã6ò{~EÐ/U€XE=»÷@º»iÓk³{ÙÜáÐÇY¦m]dɵäxs‡ûï7/Ê’¬th $‡äpf8œ—¬Î=øSçIèz: Îã4pCO…çùæÌ;_ÁÜ7gJÖÌì¢YÕ×gW7:>OÝ4ò£ó‡eWâzI¢Î?9¯¿½~ÿðöþb懞¹³0òœ¯oïÞ0$åæõ»»›Ûoþq}ÎÃí»;ß¿½y{ÿöîõÛ‹™JBû}Áð†›Ûïßrï›ûë~¸¾¿øåỳ·/}~•§‘‘_Ï~úÅ;_
+ÂO1šDnu}»3Ëâã«`´ò"Ë*é)x`à@¥Ü4 }~4&«ŠjµÜ—¯Ø¾eÕ”Ä`^ÒÔªÁ£y>ygqâª(mb7Šcõûß™Å8룜xg‰rÁ øÇ“éSú¸AÚ;>eÉ<Ï ·MQšª…w@£bUÕ,¿…ËTÊÝ "è¥n ˆÈŽÂcÕ‰r2nxG³­«Æ0dÏ1[É húËþmòÖ,²ØË’¶–v-€Ÿ=Ï/[³ƒ{‚Ǩà8ärÇ/Ÿµ(šœ5aa;íºÞ·<˜ÀLzCåȳ|m—V1Òáæ8ß0tþyƒžòúö{†š‚£á©Œ™Úv¿«ŒàC~©]Ë’¼,€/·£ˆdÍ×ú°&¦¢PÀ¾ST­©˜ÑH„ í–Ï}IJß÷ƒ7wxO΋jÑ¡ËÚ6Ë›K\'TÜÖøÚ—UýÅ`A—(Ô´[=Ò‡Ž$Ø<93øëÞì@ÿ´—8K¢öRÒ,/êMFXTeÃPV\Õ^
+tƒlÒ»òqœÌt6ÅjÝJ¤±5y±|9¾e}´ä*g_šæ«‰€l(Ç^ÐK
+A¾Ç$Ã(T£öõã×J!¯78w9%ÊNŽÜÁÖ/R¼Bêƒ^ˆXÖ­õc«A¤6 ARÆê^ñúe©éóàòE^õKM_k?†£p"Ž$rŽd¯Ôo "FC X“ÄùPT¹­æ@6k3¢¸yž@»Àälº ûÙ ½_|¼<X¡sÁ4£céÅâ³7‚òeK ^²Lãô•œFÊ'ùÇHŽïð–ýXt:ä’±9k°xx¨cÚ_6 –`1ªyÃs¨çØfÜ”fU´D¶öŒ&ìãð À:BUûp8\¤þQã¶Q“-‚&žÀ‰Kj(ÃßÌ$NêBé§ôè?­êþg¨:š{ˆ»år¡G— -S[Êý|߇ēô'äš4ú<–©¶ñ2ô>!]}T^‹ë´~¤ýÐõ㮶׷ÿ§ …6„‘­'˜Òl ƒBÍò“ÎÝÎÄûC"k/>ƒ…“Z|W·)¢@5H{ï„Z€TuÛ¿tJq"«úö’ûueј¾ÝÈÖM
+[µò¤
+š:Ë,o»WjlÔ3"aÝiåß q·Íw-9,~,t9Š.9ØwÊcÉq¼É¶[63¡ÌÙ@{ˆÏ>DÉNaep0;ÌàbN…pA—>ÆAwtè,™‘²
+83†ùm]PÆŒˆ–Ü>†mtàܶSÖÏÆ:ä”y»— ‹R~
+kȤ¿eG}tƒ€Ub çb`Ð¹Ý hj®Ž¦]4Ù¦Öë…6ðIû¼£˜täÜÇÇ ¨LƒÉÓQ‚Ô0«ÅtÛìå¥Ãˆ‚ˆ
+xI›Æf¤gåä£Nܽ{ÿì V^÷ÁJž
+‹ýÿ€ÂÒÍê£ÁB¸Ô4±ËÁ”ÿB.‡?¥í‡Ùœ4“CNu=@ÂÞð
+4T_L•“}7H;Uw_úÅ–]ü™ÕÄ7ïÜrþ»Íuü©[»:Iüéj²º‰ŸÆ–($< Ç”w?û:%ýÿÙB‰endstream
endobj
-1816 0 obj <<
+1847 0 obj <<
/Type /Page
-/Contents 1817 0 R
-/Resources 1815 0 R
+/Contents 1848 0 R
+/Resources 1846 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1796 0 R
-/Annots [ 1819 0 R ]
+/Parent 1845 0 R
+/Annots [ 1850 0 R ]
>> endobj
-1819 0 obj <<
+1850 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [63.4454 494.9289 65.4379 504.5687]
-/Subtype/Link/A<</Type/Action/S/URI/URI()>>
+/Rect [91.7919 633.8696 410.5963 644.684]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://portal.acm.org/citation.cfm?id=1315245.1315298)>>
>> endobj
-1818 0 obj <<
-/D [1816 0 R /XYZ 56.6929 794.5015 null]
+1849 0 obj <<
+/D [1847 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1815 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F11 1451 0 R >>
+550 0 obj <<
+/D [1847 0 R /XYZ 85.0394 189.4262 null]
+>> endobj
+1851 0 obj <<
+/D [1847 0 R /XYZ 85.0394 161.9629 null]
+>> endobj
+1846 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F21 950 0 R /F11 1353 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1822 0 obj <<
-/Length 3643
+1854 0 obj <<
+/Length 3959
/Filter /FlateDecode
>>
stream
-xÚ­]Sã8ò_Á£©t–eËöìSø˜9¶v˜YàŠ«ÝÙ“˜Ä5Žøõ×­nÙ²ãÀUÝAõÑê–Z­þ’䱿ò8‰„¯Òð8NCù2:ž¯üã%ô}>’ sjN]¨³»£|Rñq*Rèã»GW"ü$‘Çw‹?½óξÝ]Þœœ‘ïiqriß;»º¾ –”>ç_¯?]}þ×Íì$½»«¯×Ô|sùéòæòúüòäT&‘„ñc80àÓÕo—Tú|3ûòevsò×ݯG—wÝZÜõJ_áBþ>úó/ÿxËþõÈ*M¢ãg¨øB¦ip¼>
-#%¢P)ÛRÝýÞ!tzÍÐ)þE*QÄ ä£Th(Ã@\³„>ðÀ÷'y³©«&§e~«ËbþBå?êŠ[¿û‘óíøHfdþ¼-Ú¢Z"?€jàPõO-"å=ÚåǸ7ø)ªy¹[ä Õ2ú”źhóVoÏWYU4kêkkú®ëEñøBå‹ë[*lOdâñåc½uûþÞåMk©UYY/ë]ãb˜uVœH¯¤ZVµÅ). —"¥H£(0Ki6Ù×ù
-½‡2›ÿ(
-$RÚ2¥S&²/ëqöc†¯7mQ3B¢d¦ôTäÏÔd»²u 'hµ,뇬d¸ ‰!ðC‹X‡r(ŽH ™¦àLá.ªÄ3¦…›fî®júº‡Å.ÊŒ³3G Ún(È@ÁÌ< <q_{  oÖKpUPYU¶}¡n:%PàÁ"Kª3êæ¦ÉátNJlÖLêó!J%"h€#½-Ì!‚JUo×YY¾PÍp@¡¥~Î0åPIïŠ1†Àw×ììÄÚp·9ðe>µÛbn{VµQ‘
-u ÖÑDá×1Q È
-|½Î€øIÖ@”çñÝ÷ƒŸÔBÈ©¼Þ‘± ј›µƒD‡j¸ø‡¼}Îsä¸L=IÚ((¶•YYRË#™(=¼´¹±àlœ…¦ ½3e[népI9}Ž2½³zŒ²€/Éù¼Xg<™§¬Üq»Ñ9Hû–yfˆªÈkŠeU ÓÀÛá&\
-• Yù:)
-ÇÂᦛ/I5€^ŸÎ..nÄìæ:q3ÑaÐ<`(^¦©³ÎPé­³ƒ5£Ï#i‰Épimô
-’ÙŒ½Ì‘½€–Î^@Ùî„Ï;á÷–+œ2ÚÜÔƒdäRŠ]t³R7¨)sd¡h½ö7bÞAè·-PbÁÃ~Ê©µÉ·O
-õCk  `F‰2‡æÄCˆwÝhyK©ÝyÆB˸jt“.>À"…íI…`Ñ`{y ; ¬÷²ï¼°Z*aöŠ1ö •Þ{LŒ¯a¾ŽŸg1ï‹p`FR9ž ¤m.»!„BùBIyÐõ;=ØL¹~6a+`qŽäÇx}‰ëMcÍ
- ¨/`bC­F;ÔŒ>ä~`¢(q&Ä”I¤`XÇJCÚxÖX2,WVùü‡Ñˆ8ƒ%Ži§D¨?“; ÔØéG'ˆí²¡ßY6Œìýèêýè1yÓL#ƒÁHÕ©Mƒ…Û\‘Áöÿ‡ÈLZì@‰³ôƒ†mì÷5kö(«psQKÁîRÏ}tȘûT1*0iflxz55µÏ\ ¸!òÖuïv…ýà_qn <bœšÀ®ë®ÌotA¤N|ï,Ÿg;³<PX”dÕ^’šˆxÌÄ;¼hsîÊæó.)¸$(ãåÀ×2€¬kÃ)h!G(vÖ¥øú¤G®¤eþ~Þ† ³5?lxÙ\gsÎ{Bš·.Eù’¬šJëDH?°ÑÓÅÕíìì·Ë‹)ÝA˜Úè•(5ö
-eßÅ€ýÄc%èLÜ`² Ü1ÿßMlà0̇ž‹Ñ$× Ø±ŽåС³-«Ä5ÛÏÞñyœ¶©FÚó±Æ”%3Ò·Iß|ûñÐ͘’J€‹¡Þ¾ t¡ÌEÖ {™B1Q.\Éw_Æc¢Òa¸FoRí öÉ]Ê¡’=_Õu“¸2:y“`cn¾vWlœ5Á½ØlòlÛù\~°µÐÞðé|>n‹Éç‹C{á·ðu¾½'.Ôá=é ÞÝ“7©ö{²GvrOd¿#m¶ÒIJZóooœl½3„ÃÆÌ9z=ã9çÉš§ÛÁÃ|Ž¡&ú>;PoðÙB½Ïç·¨:|“æ³KvFVÔÿdÔq }MÐ]w;¤½Ô”ºO¸R«‘xÉN”Él! ƒ™Ä[ºš‘Ú戡}W-…º½<ŸÌ›Z{vxŸB¦ø½ãн±K ôþ&½AÒÙ£Íé-rhÚr$Þ^¨î ÷‡A
-âã7Íysؘ3Ì»¦ü z½!œ4ãÁ»é·`©º»|¶/í&Scþ(M9H÷I¥}ùÐgKñ¾ "Šó>y^õáe÷,äÀ
-R5uë>ÏësõÂ$…å‘ÀW¦Œ„?–ÿù1k/a,T’Ó{¢|-’ í¤‰ϼ{õº?õÿ
+xÚ¥]sã6î=¿"o§t–¤¾;sÎǶét³Û$Ü\·Š­Øšµ%×’“ÍþúP¢dÙ¾¹ÛÌF$
+Ò»út÷áöç?î'gqà=Þ~º;»Ð¡ô>ÜþvC­Ÿï'?NîÏ.T*ïê—ÉçÇ›{ꊘÆåíÝ5ARzì!zóáæþæîêæì¯Ç_OnÛµ¸ëUÒÇ…ü}òç_òtËþõD
+?MÂÓ7x‘B¥©>]¡/ÂÀ÷-dyòpò{KÐé5CG姤Ð~¤G¨õ˜
+ÃFª+jz6–8 «OœF.³¦x-¾ç<×Ó
+ŒD»–Œ˜–bæí‰Wo#Zh-¨“LkWаš4/8?ÄÊJz2Ïl6cՌȄ{ûÊ 'ðZC1 ¶ÝعNîžÐe𼛢*ÇÔd¤žFFêðh-Ì wÂèöNÃnßaW»ïð§ÖÑv ÍYd µÙkN¤¬y
+Nñ@žnáðáqß)R¬Fظg1¼°–Ù”âÀ.Àk ©À¸øþ]ŒX§Ž…
+졘•Ù²šW[æ ¶F*Oc!e<0øYµ}^r¤5­–°"j‘¡üé'ø­(L4ñÀ8ì6°´8ä“,³™ƒó íym« ÉšÝÉ€/ŠcÑ’9+ŒE†øc”•ºy¼—2;š6fØo#ám³€ âëל u¾ym ¼˜c?°‡4lÀ$Ñ„!Ó˲f¥'o9µ£Û¸xÄf™–£Æ(0i³lšY`ÆÕIà°½<о›è²ëº°Z“(á+¨Š)v /]ð˜˜PÃ<0ÏRÞµà@c²è;Ù£…÷\PYÁ`#(_í‹ü´äÜAÚãFÚ$Ev‘¶QR‚‚)“<Ò.n†7¶lZ„a\&yOÀsÂ%Oƒ’Ãÿ¾Æ,ÖËóï©™5yŽcUxŠq(‚̆@À"Ÿ~%=@ú2Ç1ŒÚš=öØT;!>ž]¬ðÒ7UGlG뱫õÈ[_ #GLÖ¡£ƒÎej¶=°íïI‚P„*v쥬Gä ‰–qw$ã×IAsÊ ^¬“ì /hqjåòÀ¤"m³|£K•úÂȸo¼Æ…“‹j¬sæ®ú…Ùæ:«¢„%^̪¦Ye ÝùDúÔYþ’m—Ì‘ÃQÎÝw9+ÒCý?ð¶I½ê'ê èåv–[àÚ®ü5_òüHå6îJ"¡?².[9Ù¼ßUUü —ö¤àˆµÕ”‰‰í&0/&G€ì|
+' خԼqƒR·Ð[U]ätÕ+¬üÀiÆAÇ3‡°ëÝFÌ# À é]æÓlk–‡ÆõÝ6übM b3óç Ž«&ç®ljgLA!`™@žhˆ²ªŒ¤bŸcÑØYwKÔRù’Î2À«è2?^9£ØÈF
+ûÓNØC¦ãÂv™²°!ôv<¾‘¬$¾FVª c«÷7z§rêB=]º4^m" âÒ¦ÃÚòÃ…àvc9düncMÖ<œ¼ÒFÈHeõjO¦èäG1—¢„'_Ma …{ßzA_F¯ƒ:⋯®§É6æþÀ®Že4¶š}&r½©Œâ‘P9²÷cЛñ\é´üobÇ(õ g¦ÆÂ$Ž0¾¬òLÅ (í¨Ï˜£ÄÇèŸÐºH _0U &Öî iÊ™%%yWf„uº
+-¤˜.øÚ !ø~<VÊÀêC^H“!?Î?ƒÂ_“~¼4¹»úôÇÝã?Õ~ SýÌÅ:`Në¨9bÚ™Óé¸9¹L÷xH´àìg•üVMñ
+#ë¬ÉÆkâqèž
+i@QÓsôsì@÷ èvæÌUty@¤lÃæéh9G½9'¾lk˵oºËúÍN®÷?½ˆàP ‚¤oa¿
+ÝdÒµ‹ÜÍóÆ'6MœàÛ‡ Š%R'ðM©ÞÌ¥ýªËÜØê[© à„©áN¤kY3©•{ÑŠ!úÔvÎPa¦UÔcGcF_Ù@
+šìN°éº“ÞçJŒÙs&©·t­Ó) ùAäß²Õz™‹iµÂb#^ÿ6üY㎺QÐóÂòVZÎWR=ÓY“õ1ø¥1©LlÂjˆÙê¯ôb|»8x¥H/–6À‹åðŠ4n“"—¦½
+ ¹ý
+Û,lÈ0•R^4ÛT?Þý°ÕÜû· VªúFŒ½ô§¦IÓÒIÀœZÈ3Ó©À§lŠÙ,g8»ÑTyÙ˜I‡±ˆµûjäƒ(%”/-ÚtI×XÝÌÔž(Ò"ˆXÚküA=}—Oˆ$ˆ,¾SjÇêµ:Pƒ/)'FE6™geñ½Uœó&§³ä
+’%+íMÕÂÚ[óEcy䳧ŒòVùtêwTôä¤à°¦;…ºs'”&ƒ¦¯¶8ûkƒ¡À?
+qèðŸ¥ùÿíSw…Ÿ$zühÐ1¤Ê áI᪓hgæöv§þ£Ÿ–endstream
endobj
-1821 0 obj <<
+1853 0 obj <<
/Type /Page
-/Contents 1822 0 R
-/Resources 1820 0 R
+/Contents 1854 0 R
+/Resources 1852 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1796 0 R
->> endobj
-1823 0 obj <<
-/D [1821 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-550 0 obj <<
-/D [1821 0 R /XYZ 85.0394 769.5949 null]
+/Parent 1845 0 R
>> endobj
-1824 0 obj <<
-/D [1821 0 R /XYZ 85.0394 749.4664 null]
+1855 0 obj <<
+/D [1853 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1820 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F14 964 0 R /F48 1238 0 R >>
+1852 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F48 1253 0 R /F21 950 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1827 0 obj <<
-/Length 3566
+1858 0 obj <<
+/Length 2739
/Filter /FlateDecode
>>
stream
-xÚ¥ko7ò»…Qpr±KîESl'q‘؉­múa-­¬EV»ÊîÊŠ{è¿Îp%õîÄä‡äp^œJž;ðOžûbŸ‡±'|Gúç³Õ™sþcoÏ$㌠ҸõzzöÃ7<E¨à|ºè­ 'ŠäùtþÛ(J\À
-ÎèòîöÍÍÛ_î'¡7šÞÜÝ^Œ•ïŒÞܼ¿¦ÞÛûɇ“û‹±Œ|9º|7ù8½¾§¡€×x}s{E˜š‹Þ_¿¹¾¿¾½¼¾ø}úóÙõ´=Kÿ¼Òqñ _Ï~ûÝ9ŸÃ±>s„Gþù>!ãX¯Î<߾纒Ÿ=œ}jìê©6þµ8c×ì‚Ë~,W¹-—¥×ãr(a0€,äògG†»G a=©óþr{›¤ýM•êmIáDZ?Üt¼v@·“(AGŽ¶Ë²N Ú$Õ…ŒFOiCCYÍð%#l³|>#¤9¡4åzœ§ÏiNór•d }v|ç{%|Çî¨^§³ì³ã¨´·,œÈ–=²]¥D¤BgE‚oï®&±MñÏ„ñûÇôB¡œÀgôdÖdeñ
-6@î2›-q
-1t„ã‚ꥱï+­O’n«¬Ñ4ùæ¨Ð¡¡z]5Cš’ZMj.þ™¬¬¨Ü^Þýr;ýIŠƒJ¬@1r\zXGÔÉ`T§c›vê´»©]ú›N­"” :‹ä}9K@=$Èï*i›cúžˆ& bKÒX³PÒ¢Iç4ðøBmBMª‹’”4+’Š1®núk̓7h– Ï$õNécS›Púz¸¨·iEý¯›´ÊÒZŠ‘p=/jØ'B¹» ð Tì I Xó²6xEÙ0 µ;ú\*Ž;êÊ´ €ÙfÍ’zC-œðjh‰(&jE½rAmNÃî¦{ <¥cŽG7z¡q'Øew‚ݾ;q½H á<ièLRofKF©iÊ÷"ý–¬Öy*få
-€_¹i'c’Q7 F¼CÚr G ¨ÆàL$2ãC`ð¢AYc—Âê¦Êê/ô¡}»8ø\"ØyLÓ‚z¬¹y2C*B2¬‰ŠôBÝ"Y¥(-èNiXŽÖ›j]^ÈQÍßZhŒ74"µœ‡ŒÞ)c'g¶óQÖOOYñÄãÅŽÜ&y®É†þ‹*-þÎË$›fY‚ï䥴a§N«g`èÝA/®ˆ¢88îûX‡½`‹uÊ Ý´õ‚{›Z½à`S»TŽð#ãÔ>j3|x˜¾»ÿÅâáŠv‚@2òºÌ³pÕeˆmw{Î ðÈ 5ÆãöFGèÀi5 ¡Ê^{¼{µþc—ƒž#…
-£`ÀÂS1˜qEölÜ®háwŸ6Ïñ„
-BoÈðuR×ͲÚûeAḃ¹áƒÏpÌJŽ;0(" e8ôiÛßubíû±e¿ƒySÛÅ Ú;‚’bN-8hWeͳÊE‹Å>«·ögºü /Ë<­Ÿ’ ÁZ1ø:‰Íu.o®î™0ðÝ_øBÚqèª0Z ýÎÃùmôÚ9ˆþ`ˆ\‹o¼”?zNª,yÌùkT MÄ{COhxF¹-ÈmúÚõ—ó´ÖH5²áÑV½g ÝþeÑQ`9ÑG²MiÏÆ#¥Qà©Å ê ÑJ9•t½ÖfáFUn q`:+ÃQíõµOíýÇ_ sf ¼N >¯Êæó”áìæ5±ÙœŠP)hñûÚìJ!]ǘæ,G5îS&DÑ>„`ž2Þ§buÜ'„$ÇkP¹Fžp\ËåI5´’‰–‘ ´ž’"û£•œý¦K%dΈ8
-ÌœôVÔ,Aœ)ïÈÉ÷,[ÝgZÌL„y9H9å¦`ãeÒúL/„{Òiö±›j‹uÊTnÚšêÞ¦VSlz*ðÇ0 wÍÕ‡t•dõ4#´h¡ÏÚ죢7<•HšQ«ýŒá&<´0‡0¸Bš=Éó†:(³óYŠÁ#úy
-}*4°ûΪö‚5*c2`©3`N.9hhÒYs²P· \¾QÓ6¿Åàà‰­ÑªyA€>èD©·uDó ÖIÍ;¶i§y»›Ú5¯¿éí¿®î>Lnl×6äR1de{Zç­s8\ó›ft’¾™,£vÃ.7Õ1+·½²Fàvë· ÖInÛ´ãöî¦vn÷7ý+uêÐq ÏM,Äü4–ÖÓk[™¹ ß­ uá9ÇghëC ÖI†Û´cèî¦v†ö7mSûª`ÉZ ×÷Tô—ô¸s£'t:1.&á¬sW<¿ïF)Øq¢ÛRKÉ»e3Ϊ¤ã ǃ³²Ò×/T«œ§‹d“ãõËÀ^Ð媈7n97¥O]!@Œ‚¾õ±uÕ³+Aä™™R9ï¦k0üµ-V{&¶¡²ê§‚ƒ×Þ›ªÖ1:‚°¼põ“Ä´ÛZ˜r¸™ÃáGÈy4@u8-;i¥J'@j0­ÌñÂ3-\Z4-vüøkMKdÅ`…ç,ÝÒ
-{OL¨!_…=~×ÓC_»"ŒZ§óX¥É—ñ¼¨ëtÆ…nƒ0éKZ[˜Ä(¾}¼íXŒn4§c“öBo–Ô)æ ‘oê{=…ÖpãN¡UhjSCÿÄ3¨è³ÞB槰¸{‡Çbºâ(ê&ß´| ËË?xF2ŠÝ·ÿEÒeI3H3@ÈuÐU|²ôAÌѱ³¤hKaàK0lÖ…ê¡÷p{Õiáäô=v$W)ºÆäÞ 2­ÊyW%MŽ25k
-øîr;æ¤^©€=~üó¿?i?óÛ?*…n–sîèÂß´‘âÖòÍœþq1–nÃwÂ{w9yÿîîa*èë|¼zªú¿¸ !¼7%¯¾äÖç1×™SG-Û7é¹ï¼é_ߨáÆäž 6±‡ÎÃ|üD9 vûšV¡‡ÁLŠV#¯X\‰é`ô¡§£-1Ò0á¤idúuG`~hƒ®CŽÔÖÊmñr<Áæ”ët¿«“Èj /FŸ¥«ŽôŽcUQbœ5XÚë~²§ùK¡"=ˆÐs}=í{=ä‹8 ƒó¨ˆ¼wW“éd†±ŒC¡­œ=Z@ë„ýˆH$ÿ€™^ÔmPá;›®Ò«jVSc^Ï°7?¾•¨e¸¾À_ZŠ
-ðŸ)ü¿Ú+Š„Â"eÿÍÂÛ™‰BÎDû/MFPä}Òÿ#Îë.endstream
+xÚ¥]sÛ6òÝ¿BÓ¹ù¦B~³Îœb;‰{‰ÚêÍM›>ÐdqJ‘*IÙqoúßo» @‰’¯sÉ$\,ØïÅR# Õ( …ôÓ`§¥
+Góõ™=ÂÜ»3Å4K4q©ÞÌξyëÇ£T¤‘fKg¯DÈ$Q£Ùâ—ñÅûé§ÙÕÝùÄ å8ç“0’ã7×7—„Iésq{óöúÝOwÓó8Ï®oo}wõöêîêæâê|¢’PÁzw8²àíõ‡+‚ÞÝM?~œÞÿ:ûáìjÖéâꫤŠü~ö˯r´
++§
+ãV@?T¨5¢ó²1W1Äfؘ!²Ú¶.–wo/¡R•4/ª-/áµ1ˆ‰ò ¸žƒQr AŠèB·šà¬l &à Sãgêy ëú9oxÁ¼*ÛŒâ]²h
+»x°4_K§öÊ Ð<k4Þ?“ÚØ h3Ø97Ý´ÛËô#, >ñ
+s9€/Å bz3
+¾}ÖÙ—|½]ÓÀÔÜ< óE%žH%t¾ã°zBÂMÚ¶º2E‹eÿL'^”Ù¬&XöåqÌ
+£¼ej[2LŒzt²10íÁÞ“ÃÁykÏ!ý%[o
+“‡0z©¶Øw8
+|è÷b›åõSy¶ÔÖ<HÍvü‘‘Vc…Á›íI^³»2 `÷a–A¡­°Ó°ŠêY ñ²ÅÖ(’\úàw(k‘fð*S~¡;žà±”/a _ZšÄKǺì^Hu†6¯°ÏêmxÝÖƾ©^bn"|ú9àïf*iG#R$#Åíåt6=a¢ÒXx‘ N'l ê{‚D¨Ï”RRà_0fìÔz‘×æ•.â^Õ˜š>Ï7šNþ….Ìþ@ ìÀM}ë}û­z=b•õkåÁ#Zïà?ÆîâàöŸ‚\#.n?¹¤ú­o…hÏÓõæÉ&kšvUo»€q…{0ç]Ï¥ÉÞd7ùöv
+\5ûVþ"¸Ö?œ‡ì:Å}¥It$¨B
+ªC~~ÔÑ$>X˜c4<½Ý1å°ôC‘DaèáúÓÑÒ`³:ŠÓxÀ^=Mͯ8ï•“¨¿Ìõ¦íÐï’N ÂhÈ7=‹Ø‚0°Ò÷„:\*ÿj„Ùô¾¿Ü•Lsˆö”©Ž¼'‚Áñwìw=øÇ
+üß?©ï&ƒXøIâí{?2ËH$^[¡ŒÉ%C?!ÖÅCÑÿ ±IÌendstream
endobj
-1826 0 obj <<
+1857 0 obj <<
/Type /Page
-/Contents 1827 0 R
-/Resources 1825 0 R
+/Contents 1858 0 R
+/Resources 1856 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1829 0 R
+/Parent 1845 0 R
>> endobj
-1828 0 obj <<
-/D [1826 0 R /XYZ 56.6929 794.5015 null]
+1859 0 obj <<
+/D [1857 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1825 0 obj <<
-/Font << /F37 1026 0 R /F14 964 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R >>
+1856 0 obj <<
+/Font << /F37 1038 0 R /F14 976 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1832 0 obj <<
-/Length 1742
+1862 0 obj <<
+/Length 2641
/Filter /FlateDecode
>>
stream
-xÚ¥X[WÛ8~ϯÈcسºX–Ô>Q
--ݺ>QNk+Á§ŽíÚ·Ýþ÷Yrb§„¬Œæúi4‰Œ1ü“±ä3å…òÇ„£Åç0÷nD×2y]®7ÓÑþ1c…T@ƒñtÖÑ%–’Œ§ñÕäðýÁÇéÑÅžG9žhÏãž¼99{k)Ê~ÏÏŽOÞ}º8Øþdzr~fÉGÇGGg‡G{‘œ€<u¶Ÿü}dGï.NO.ö®§FGÓU,Ýx f&k<Ž!ì#Œ˜’||?0"JÑñbäs†¸ÏXKIG—£V
-;³è~œIÄ%
-ºÎ}}Ì3ÝÓáË ó°Œu†ô}¸(Rm˜64±n˜¥Ž“RG.Æ{ôÔ€¡×ù¶yôÔÜ*p†%ƒÆÚ ‘#%D0&HøÌÆ3`­A12·ˆ o-¶Uݶà=¢¢Äî1ŽdÀy„“ö[äi=´ÀDyW.þ›p( Â4uƒ¬ºÓ¥cžå¥*ö¥êûHõŠŒ0ü“¡ ‘ÍL“Ɇ¤è!b—õ%i#É("OEñîÖË‹³Ë·Vʆ·ÔŸA5àTVusÅϪ8 Ú¹ólT¾DPµÌÎuò&.Ÿ ïS2^IÏŒ.N‘¤T5ºLõ# (•.ouikÝeÖz¡³Ú•¾2\,ÂÒj샕€’¡D£°Õa@HŠ/a—WûE©gÉ}ª³k;ñoV q/¸+Ëñ5Ÿ/]î<èêK^~ÉÜ~s‹q=”)N¸(óÛ$Ö^r?+_ £ç@©¿/uUÿ–g¿ƒ‘õ–qáUÉ£ÛZÙrñµ…vë‹ðþ÷Ô%ìáÙj?/M†¤=Øû‹¶T˜3ÂŽ Äy¶DØßÿµNg^¯t¬’ÖèÏ|þ¦ª6ÇšOU—I6ï)¸Ú>ƒºv9úãÅ8yU¾,£Îi˜~³Ú›Ú-bJô–ÚÍ»µ{ûU‘—õjW™×þy“á'+býônƒ®«ÁSWWçCãßrÌð_s•b†(jRè0’ÙÃn€1Aý×*‚Ÿõñy0_rf¿ÜMEmºÁu‡BVö±tÆG]U›[Ó•í®÷”8&p0
--2ƒ¹Ðºç+ä3 ⸎°çšì
-×=WKÇÖñ “Il}Ó•ýÝ„edIU'‘#š Žù~Õö r% &¶¿ï’úÆÍØO¹GäD/òº ÛÓšç$\«áªM›œÌz’…5>Ý[ÙTï‘I6 ÍjAË˸ýÕJŒ£ ´:JŒ¬Žÿ4wm g´1
-»Ž†#IÔÆ[QS±†,q±5{4™gùz×ú7+аY†Ûª‰1m~¬a3p%ÀG(ž’ï€O $‡ac3Fz±mÚ">´n>ýU[x@݉Ù¾@xŒ›6V‘~ÒÅz.ÓºBÛ^4Gæràý¯Èß~í\?ûÐÉKIW™ñpÃàœj^†ø¦ç«gѧ®ÿQÀœendstream
+xÚµ]oÛ8ò=¿Â/8‡ŠIQ”°OÙ6éuqMÛ$ûrÙ¢P,Ú*K^QvšÞí¿%KŽ²M["r8·3c> áÏTÌâT¤3FL…\Íë£p¶‚µWGÜãR0Äúõêèù™Ô³”¥±ˆgWË­„…IÂgWùõ<f‚…pþâíùÙëW¿_œëh~õúíùq T8?{ýïS½º8yóæäâ8à‰âóÿ:ywuzAK±§ñëëó—IéóÑ‹Ó³Ó‹Óó§Ç®~;:½êeÊËC‰‚üytý!œå öoG!“i¢fw0 OS1[EJ2IÙAʣˣ÷=ÁÁªÛ:©?2!c1¡ÀˆO)P¥,–B:V–åõ:+*¶¨×¬Ù| *›WÙÚ žBÐÀùÉ›S?f(.œpÎR¥„#%ìË°‚Cî÷›ã S›ŸŸ 1àHILp2æÅ»ÿ€~y2_d ²å1ü_šEKskših¼1ͲnÖYµ0`>‘¦óÓlqë ÔÕa(VÛ÷›œ 4±›º²ÆÓ¨ËbqOã/ue†xn ¿ í­yÈD[˜™R#+EèpAÖù²¶$Ëó¢-ê*+ižgmv“Y_Öõ§íÆÒ¦ô;~+}þÜšæž0œÒvÓ¡TöÎx ƒÎYíO6Ÿ³õ¦4Ï`&“ŽØËóK"å% C&º+ZTq(½"{%•hŸ¡NÄÜ9
+~ÚºEûˆÄó ®ýR±î‘ýüñžF{câÖÞ˜Cd‚-ÖE™54qFÀ½›Ð+FUMßÄ›aB<gð
+FrT蕧øv÷€f`x›9%(ÜZ¯$ùî’^bDóÃP9‰U8”¸c<a2Ž):{™üÙ$æ]S´­©t㥢8Žgt '‹z[µÆËSø-Té]¾T"LX*"`À? î 8úá –„ªm³¶°m±°¬'Ûë~9 „æL‹ž˜)•Æ}7š‡ðLõÖæ.šY›Ê«éU“­×YC„G/+(J(¦´Nˆ O#zÅæ#Dùæúù¦1Ëâsiª´ð_§b!YÊý‘‡\ÆM½ÚZÞû±n>âåÇé/ôù0uKüæMSïŠÜÅçeó 4F 4Œmˆ†É«ï–÷Û|Øâ‹!Pµ]ßtª}Âép ~Œ@ÛÀ+ºtîi»ùÔîÀ%*-ÿUH#¸ü¤ÝüÓÕ½‡Û~ úw<2÷¶ó1÷±5ªÕˆÀõã+Œ±ÞGÿúf=âàÂì%-6‘»
+}ŠØ§LÉ×S¦—Ëðʹíï6[™éžÀ0—ºšL!-¸Šá0ßzHK¤,Ö©$‡o!ŸçÄ›Ëgaº¸Íšl*£ü‘€®¼¹+©ñ›Y[/ŠŒÒØ°¯hp…>”ð®ëÖ×­ÔIÁÏ$•"…ºu9Ú¹¡­ÈÓgÚ[šc>¯Vp‚³è_ªT­UX*žìÆ,
+Ükr,|¥Â̺ò–¯Ò²jå 1WÇÊŽ'Kh©E½t °f|[•¾ö£ ÖµmN^<,'e¶íJÂl³) c‡ãŠêƒ¼t1Å•”Ë)/§SÁg¨’wÎEÄÃ\\Së8õ6Gýç *¾å„{¨”i­:TæC„ ­°FÔ>xaŠM¹èk^ˆ-®Tó /ÔÒ·º`P/®‚„aæ×Hnð˜¶Þ¤„R·ôøË’ô¼2Ý
+³Ø”.7Ël[¶vÜð€˜€‹N…‘šß×[ä…¥èèfí-^TÅNÇ
+ `µå÷^ øX’Ú…”„®™ó—Ü〢̮۱©­-nJÃȯý;íC:“‚ ©™
+û>æ| O?¨`°ïT¹i=JÄ83uü4»C!¥òÖº
+|‘
endobj
-1831 0 obj <<
+1861 0 obj <<
/Type /Page
-/Contents 1832 0 R
-/Resources 1830 0 R
+/Contents 1862 0 R
+/Resources 1860 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1829 0 R
+/Parent 1845 0 R
>> endobj
-1833 0 obj <<
-/D [1831 0 R /XYZ 85.0394 794.5015 null]
+1863 0 obj <<
+/D [1861 0 R /XYZ 56.6929 794.5015 null]
>> endobj
554 0 obj <<
-/D [1831 0 R /XYZ 85.0394 525.2179 null]
+/D [1861 0 R /XYZ 56.6929 608.2484 null]
>> endobj
-1834 0 obj <<
-/D [1831 0 R /XYZ 85.0394 495.5406 null]
+1864 0 obj <<
+/D [1861 0 R /XYZ 56.6929 583.2725 null]
>> endobj
558 0 obj <<
-/D [1831 0 R /XYZ 85.0394 193.8668 null]
+/D [1861 0 R /XYZ 56.6929 285.9067 null]
>> endobj
-1701 0 obj <<
-/D [1831 0 R /XYZ 85.0394 161.2246 null]
+1721 0 obj <<
+/D [1861 0 R /XYZ 56.6929 255.1565 null]
>> endobj
-1830 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R >>
+1860 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1837 0 obj <<
-/Length 3988
+1867 0 obj <<
+/Length 3830
/Filter /FlateDecode
>>
stream
-xÚÅËrã¸ñî¯ðQ®1Ä‹
-7òŸ«þœ^¯`Û?^¥‰Ê¹~„4y.¯wWÚ¨Äh¥d{õåêÏa¯×OäŸH©29Á@)§hò$SRyÞ®oæJ›ÙSs¤Æªj—ÍCy ¯î¾è°•Í
-n„›•»¦+é»-qpÕÒï¦z¨ê µ›#Ï_+^ èŠwÐÌòÙ®8|#«Ž~ Ʋh6Gn>VÛ-µö´þCY3ÚõñÐÝpÀ¹InŒô[ûϱ<TeKGÖ5ô[upÖJ¤³»û’ «r]·}<Û#Û5"Š…v‰q©…µp ¢‘†õY­à0³,ŒªÚ LpB9Q7H`/ÐR<$ñ[œƒŒ$¹³æz.e"´ ­âfΗi¢5 !Øš‡jUΫoëÃÄj6–™°Úr[[<b›ƒ:`°˜íª¹‰ ÇûÒsÝt÷~ ›m›e±%‹h µvËŽN:ý Ãø]Ñv½A"œ3 ¡cn÷°lS¯xѪ»g51ÃæIŠL{U/YHAH<=i6ûoS—ÔêEÝ®=í©ÁÔ ¿ç ½6vøìJ‰Ü+·ÅC‰ ™ò½¶k©×‹œ¶–tÍ£éxÍfâÔ”Kks>ˆ§rJ¾„Nr­Â^y¼qÏ"•›ÄJ´®Ä#2›'&H«˜íÒÊÙ¢$©™——F•aƾiÛj±-:HÜ‚ýÆÏäƤ²`Rýz™‡Øܬ òT$»åφ½*òýó"zãM*Þ¤ê91Iê<ôõ9AÂC”‚öê,ÌF:s!+͆‡w“*¬IŒ0ù+UÔ& ¡AŸ›}W55a¯êÓ*DAU>2úÝl›jƒ‡ù©-},@m¿2ꯘ3J%Ëõ3Õb`A“`„_¶L"O´S’wr u¹¸m“ä'™–I:I–‰Í’tâd–°“y!‚YBØ@e~2K8Îï
-<–•Zº<“}õ¦Y“ZǪÓÜ •Žl´ÙPŽÍlMÚ¶ãN’f †‚mFû`šaÜÉ¢¢fºŒ53ciõ3»w}þ@_VèmÖ'&, –Ñi½|l.3gÒ
-Ø+6ßZ¨¸«†ÂÕÇÌ2Œ®ø@¿Q†e>‚ £ƒg—a’Ò×Këíß?bH¨ôÈŒƒµâ}Ka÷Š»‰Ó8î¸ß7î=!fQXqìš]ÑU Û'ê\“©ƒÖ¢ðê­ûP$Ô¼C!GúÖ ýâ‘*¯þô=yƨí.üºY]z„VÀp¬>ZÀ›W^ÄzûjyOÍÞæ]‡yÜ!zçõ÷æ5¤£ÐZ…å›î·ÐÒÁ|CW<^è>Ee8{*Ó
-"–<7Ï:Êy5PÅö¾9n‘JB‹ícñÔRû±9|EÍÉ2Ž¶?ÀÝñ‡W,¿dÎL X7¯6çÚÊ$"×& ¥ÑQ‰^Ö8›ç;Éûªøן´¼¿ú 9uû]²Gã(z&9FH
-êÂéA#ZeryQæ¡U’!sŠã-µh0šC-ß&Ù†·¾4vRíx±†{£äÁGEþWÌÖ c)¿; SDëñªr’òžAY7›'¶$5›–å¡hïCŠ¬Ô²9nÜì¸ï¸3jñö¡Å̬·¹P§E°Å媞©«£<Æ ^¸ëTÂö"zè¤X !¢XLô Íq: (º®Üí;žÖÐ//bg¾ÿô…gPœ °e³Ûk0zÞñ’€¬Õ5TQŠö}êÂÀ Â÷É >›ÓM¦_"³I*…~C˜20Tb¦ôÊ LF•ÄCšWûy[ý·œXHÊE#©¬1}ÎÒy  ¿|ÿB´¾Åi;úÚ– Å
-XÕUÞ)â÷âiŠ\8 •™˜•»r5•Ý¢TÅ€ŒpbÂýÄY^Œ!ÀˆdhèÔȈ r+‘Ó
-8x£Ñ‘hÁÄ‘téX $ vGúÉé‡fÀyü;‚­ƒEôöx[¾ÁS¼2°„l,ÿ•¦’º),®î%›P…‡f} ŽQ"…ûðµ%)Ú í·UÙ¾Í
-[“+²+¾=«ß\éwšýi(C ‹þVíŽ;ú†4eeÇþ²m‹ î-8̸qƾ¬Ï©ZÏr頻W˜õ:7TÆ4(#©·#çä8EŒ+%©¨„äÙûo
-ëÆ–CÂá¤&ZŽú‰75ˆd.Ñ1«€Ì°¥¥}f Ëáì>1Ï“8šÜü±œA9‚ð2‹¸‰?S[˜‹\ù3C.½¼È0N•qŸ5ZBZ‹(Ë
-´݆†Œop0M‚<£özÔÄš€žzÍE>ø>Ö+ £kšßÎW=
-¹jóØRÛlìŽÛ®ÚoyâÄdK9 Ë἞î“ìF™è ¥z-êeþb»âª‚Ètb…™½°bË\äìó­µs‰ýTDˆ©Órªx9¨’¹{é¶F‰XÀÀ;È&PCD-2kÏ.nðyUH
-¤7Ã
-´Zò©ŽhÌà‰©z¥G/gÌø匋|Ðœ?”Û ÿs .ìcïs|jØh¿âÕçx}R8•ëp&.{Ó‘Ï㬡¾.Ä „ßžUóU&9ûQ߶8ôÊ¡*\OÉlFóm839ºß—£‡F8÷¶¤ ÄHóf‰SIn3^±ŸDº=%ê?*I
-PÓ†~à¡,°@Yy-ü+‰—b 8|Þ€œaÄ@ôvÌD)czðâ;³Ò§ç,Šƒž§â W¿Pˆ×aø(äµvW¨ø
-„Sè5 TöÒª˜Ë¡JæÏ]½úTM6tå¸Ø¢ õ0£S7*VÿH¢ýµæõfà\³×ªÏÔÿb(ƒo²¦Ü_z„åWÿŸÆéŸX´M”srÚ‘Jëðá«
-Dá¦\vFyø‡ŽsÒÿj¤Q©endstream
+xÚÅ]sÛ6òÝ¿ÂòMÄÃ'NžÒ6ɹsM{‰{Óv:”DÛ¼H¤*RvÜ»þ÷ÛÅ.(’¢b»}¸ÑƒÀ°X,öç~òÜÛDèÌœ»Ì$VH{¾Üœ‰óè{{&yÌ<š÷G}quöç7ÚgI–ªôü꺇Ë'Â{y~µúaöå_^}wõúýÅ\Y1K“‹¹MÅì‹Ëw_$£¿/¿}÷æòí÷ï_]83»ºüöß¿~óúýëw_¾¾˜Ko%ÌWŒáÄ„7—}M­·ï_}óÍ«÷?]}}öúªÛK¿RhÜÈ/g?ü$ÎW°í¯ÏD¢3oÏïáC$2ËÔùæÌXX£u„¬Ï>œý­CØë S§øgµO¬Wn‚JM1ÐfIª• ¼º-p0Tö†Ê,1^+ÀcvÅ/û¢içå§ëîãµ6ÉTªyðräÕlU´ÅnSVEƒßrv[´·ÅŽ:¡EÐu½Ì×kŠÝôÓ_
+uË]Ã}0Í0n“7-ÁAдOg—×ÔQÕmœÙ¾èóúîòõžñÖ׎OM[—¥ý“ͧÖòàzÛ–5怜ˆKF긫‡l"º”Ý•Å=¶ÒY½#Èͺ^„£DX@ØPÇÎø#5ˆúAHVÉ’Ó窸Î÷ë$Ôì²%è&àQë¦f¤L°ŒºÊŠ
+]Ý¡B7‹(ϾžPEƒ69Ë¢v=ÀÇ8ïF xÑÜÖû5R™¹ëûü¡¡ö}½ûˆZ‘¦ÁjØv¿ÛÖ ë
+ã†Zº*›œ†úxzÐè\Rà‘ïdZYqh{ªhÔ¢no Æ;´Iv \„”^¬æÞNò࣠æ<“¬é¸Þ§|³½
+XÕ–!"ÀïÅùp:µQ¨ª|S¬&èÔ(U]4ÊG 8Á8í‚ßÕ‡
+ŒHŠ†N»áùöSËlx˜
+0Ëd*˜¹"¬FŽR“)F(Éõ~M0f!@ê=5îËæ–:öŒ8œ`CðœÀ+0nÀŒköüUKà;0ÔâWÄÁíy„æLIN?ÌE’&ldGN? ÞH)CDÞ¼‚=^/ÆFð¯ ,!Ë…PÔ}ŸÇp0Fp§mBÙãp¯³à¡vqᚤèf€h».‹æyVr½hE6ù§Ïê7§Ž#ýYÔoÉCà*7û }DC*XÙ±¿hšü†÷è³V‰4Ö=®ÏÂuZÏr¨ªÀ#Í÷CeQI½-9¯ÌH<ºƒUŠTT)Iþ
+{’¬”}LÇ`ZÉ$D¥Ä~S€i
+Ñí˜ú(ªg#lg8ªÞÔT’úÄtI$† -²zXg÷‰ù<‰£ÉýÀK9”"È ²ˆ›ø3µ Öo”Z=¾H0x/Aâ!ÜÔÒY-~ @,KPfôâ}Kƒi¤UPs€ "V ÔhÁ¸öÕ
+èhëzÅð‚sý ã?@|ò‰açÃðmÞ.oIyÎç¼…Á®1] ZŒv>¤øO8±dbAæÓÌÌþ…¶4øyèX× f[,ËëúàÌ›¤/ÔnÜÅ
+¦xÞbN%Â+ÝôJ¡À‚N(p ŤÀj“VæÄF}†éÅX¹·‘€RõñzNƒf3póSª ]¢³ŽÿM›·¡€JK×F¶(”KܸE1ÊGDŒ¢—C¹õ˜6S+ß×I'bñбÓȺ܄j‹á4ªýfrwG•SÌ«å~wGVV‹z´É‰®
+,‡U`1¨÷ð§ ?A"™$oeÀªªž²¿`º”7#©8Á­…×Þ{{(ˆƒð4ò¬?º`@¾Œ&¹söÕö”`)H'žŽæù–ÅyRÊœI”é/**Gn2Y&Ÿ˜ÉJ«"¿>'Ê V¤j\n0õ¬@ˆG Aò)MÕ‰9Ð
+‹Œ/Ä*Ú@D£3Ÿ8 ‘í®T’yï§/æÆy%Ýì CiÐj­åaå ,Sñ”T‰?ÓªÀ]WÁt6æT\‹×vÄ€1“Ú&?6hæL/£œþI±E¾—FÁÁ[Ÿ}ŒóA_ALåìDC*2Ÿ_}¸|ûb|*R¦A¦)¸”4q^„Ë1êÜÝœSã}ï6­?ïO8¾M;Æ‹d|("éÞ_µGÔ¤6‘Rˆ9ºÐ‹ƒ£`Œ‹ù iuÎÛ}:kó5…ìgàçrÐÔ:`ôÀ~9%fÿ`D.8ònß±! x¿0µj?»
+œb\È .ÉÂÉz8X±þ0WƒÁ6­i1«¼©òvß[lWù³,`ðSTÅdpEŸû†Ø`c1&¡Â#À![¯n…Æv ©g„‚YPf‡°tžj7{5•ž ¯)C}¶¼)«¼w3tp7O(3Œ8ÝòtƒÙ—ëíø¢«JÜT±oñ׋È?X6™¬;¼ZCü·¿PÎ&7»|³Ô0| ç½S®.K\jÓGl·M„<ºbF¬ªÖ÷ µƒÁÆf¿nË횇 NL¶4°³ÂÂûÂCÝ(½¡Ô@¯E½Ì_l—\T©…“£(»V¬™‹œ}>·t.!¯ŸŠ1uZNÕn Õ*ó]Öh°Y§ñÎïÒ ÔQKŒïÆ÷6Æ’eâ­8@/¿»3â%€RžÒOþpÈjÅY!ã¤)åÉ’‡ ¦g
+ УJù abF/l?£&&ÂÆâ•<1º¬Çû
+¼gÕøFýD}ë|׫†êx;…×ëa¾‹g¦FoT:zÛ
+¿»H¡¥zbf®S-S¸ƒý¬:eB¤ŸU'@hM—¿öžÜÓoí´IÇÊM(j¦1xw"úsÇ)°N%LéiSÒ×&ÍoX°cÁzñ‹”Û¡¿¦øE§a'%Ýžº˜G8àÓC'ŒßÂæ”Ù”§Ð5j7¨Ý ¤1`±§–oî:+ùø©ÚtèÐq±E«bL ?
+¦ÿ
+¤Ðþ:ût ³p®©|ªþ„庭b '€›Ó^P]¡=1 øÍìb.&!-$†M[.›ùò6¯ªbÍÉÙ‡C]6¼Jæ¼+,cFWÜWšª®0s„0…•þEâ[q¥òQVX"Ä–\¶ý9hBøø/¡:±Î`5_ù˜€âOÜEòßë ªÎæUèã>|üĺù U‡‡©²O`Èãn`¨ 5ýyƒ7%?ÓÛÁÐñ£}ÙG/Ùw’$/‡ävžüöòÔãpmñÞT¼#:ÁøÃǯêK´÷j:p›T¯2‰BÊ}6¦¼{a~Lúÿ
endobj
-1836 0 obj <<
+1866 0 obj <<
/Type /Page
-/Contents 1837 0 R
-/Resources 1835 0 R
+/Contents 1867 0 R
+/Resources 1865 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1829 0 R
-/Annots [ 1839 0 R 1840 0 R ]
+/Parent 1845 0 R
+/Annots [ 1869 0 R 1870 0 R ]
>> endobj
-1839 0 obj <<
+1869 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [87.6538 269.6318 137.7628 281.6914]
+/Rect [116.0003 382.9749 166.1092 395.0345]
/Subtype /Link
/A << /S /GoTo /D (tsig) >>
>> endobj
-1840 0 obj <<
+1870 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [370.941 153.6184 439.613 165.678]
+/Rect [399.2874 273.03 467.9594 285.0897]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1838 0 obj <<
-/D [1836 0 R /XYZ 56.6929 794.5015 null]
+1868 0 obj <<
+/D [1866 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1835 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R >>
+562 0 obj <<
+/D [1866 0 R /XYZ 85.0394 170.053 null]
+>> endobj
+1871 0 obj <<
+/D [1866 0 R /XYZ 85.0394 143.9886 null]
+>> endobj
+1865 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1843 0 obj <<
-/Length 3264
+1874 0 obj <<
+/Length 3891
/Filter /FlateDecode
>>
stream
-xÚµ]sÛ6òÝ¿Bo•o,”ø $Oiê´î]Óœí>Ü$™EÑ'©”]ß]ÿû-° ~HTìNz£.¾»‹Å~A|ÀÏtÈiÔ,6Š…géö,˜­aì‡3Ns~Òb8ë»Û³oßÈxf˜‰D4»½àÒ,КÏnWïç¯|õîöòú|!Â`±óEóï®Þ~=?¯yûæê‡_¯_Çj~{õË[ì¾¾|sy}ùöõåù‚ëÃzAN,xsõK„~¸~õóϯ®Ï?ÞþtvyÛñ2ä—Ò2òùìýÇ`¶¶: ˜4:œ=@#`Ü1Ûž©P²PIé{Š³›³v£né”üB©Y¨E<!@Ágœ3†b$ÁаH
-é$h™æ 'Á¼i“6oÚ<mé&)ˬhßȶYÙûu²Ý&µeÿÛ7ŠN)˜-„bFqå°O"Œ`§ÿص33#-å•°æ=ÎÈˬEèCÔ·û-Y­jlüQpP 4,8‹•ÄmÿFCˆt0
-¾Àõ./¬ÆØÖCÞn*òåïÛBÀ­Z;nµ_ñ
-“ï£ÇL†JÏBÉ™2`žwàPëé¨cÑa\ Qú¢§Lj@­À”wÓ,…ÎV Up˜ÈÎZ<_1,ÖàUNÉ@ižZÉ¿NÆ'd  ¬
-¹äc¸0eZÒ_U{W¤œ?lòtCªãa â±ÙKʃAqæG›¹o_½»WØ·À÷D9œUkÀê)ž¸p/byR°"  °—"ÅøjÁvC”Ç‚¡f<ŒM¿ó—+™ ”¿±à8CSi$AbØŠ‡¡xö ž fÙ
-»Ž;ü:²,€QÎ7 ÎC"žž¤Ì*P¤!:7b^á8Z4\…» ¢=¯}°ÍšuÄ:;¬®‘a:ŽO›BAôÉ!`W&d‘ˆÕWkk‡q1Dy¬­<Ï&ªßùËÚÂ?¡­BÅ~Ê‹S^ŠT§0Ÿ²Àe1RŽãÁ+Š$K
-=)œ³A'Ÿó{q8Gã¹,[èÎ
-ÀøRpЄÇnÏ6ÉiC`±ÉÛüÞ-Ùëí]UãdJåò8ùOÚäëËðFbm¹!+WÞ–ûJÊÐê”Lš
-
-i6®©Œ„Ö¡ø¼,´{²£JÆ®Î!§.0Á,· ÜëÄ`ÑÔŸ«v‚‡r5㲜—Îúe‹»Tã”zIp·Zù蟲qÇmfǽäÆ%Ÿ‘ÏŸ(E‚ñU,Œ´½áŠÅÞƒ¹’$§’d[ï!<X->e_YqcêKÍ6A°%ùÑ5²c½œVî·Ë¬þ2<œÿrJßÏûóx±>ÍûHußIÚŸ_÷Ïòÿ±à«¢Ø«óˆŒ‰ÈÎ
-‘}Q”"†ÂRðG8X¯g\^bºù‹át`£ŠÝ^ËêMgŽ€Åôq
-’QfDÌñcMz‚‚#\Þ9‚š¼òòôIŒ sQ/lÉ;ac CAÞ•‹ƒùÃÆYé½
-{Ë5]Òv»ÉxN6 WœrfiUS»ª\Q;=i¨r%c,ÞЊ|²*hBpÔqôL‹­a²ñ¥Š>Oì«,Ûú0‹çÙïî]Ô‚8uM¢Ÿ ÓÐlFB3š.1„˜ÂÄ>Ññ T4o¯AVhæ7ù6/’ÚE“0ŠF
+xÚµÙrÛÈñ]_Á·¥R"Œ9
+úÞœ3sƒfÝQßÞž¼x­¢IìÅ¡ '·w\Æó“ÛåûièIï0øÓ‹_Þ¾¾zóëõùi¤§·W¿¼=ÉÀŸ¾¾úé’ 7×ç?ÿ|~}:&Ó‹ïÏßÝ^^SWÈ8¾½zûµÄôwéõåëËëË·—§n8¹¼möÒݯðnäÓÉûþd ÛþáÄ÷Tl‚É|øžˆc9Ùœè@yVʵä'7'mvzíÔQþ ß“*”# ”b"„ìq0ˆ½PIÕpPúÀß÷§UÔYUg‹j¶X'E‘æíø:ÒMZÔôù]ú›ïË"«³² –¤Xðk•¬Rä ¬.;ÇçOfÖòÜíÚ A"ö"§îÛ1cÔ ›Ðó#væ0¡JÈé2]äÉîT˜iZQË¢ÜlöE¶Hˆv%Ä´Ý*¨KúŸ§ô¿¯Ò%›?RKõXÁ'ËMV
+¬g)Æ ãE±™ñ"a—Uø™uZ,¹Ï""Ëü†ãVéçlž§Ý~À±ßnËcØìó:Ûº!ŒÆ¦­=‰².e^¹U¡Ý¬x·¯÷t`gÐ áö5õ,¨}ÖìªÃ_šQÔ9‘Œ‚iY8èûÛÛw5Œ8ã¦?]‚P&˜^áZQÈø>í³Fvpt½Nj‚XS
+ì¯Z`G¹³2¨ò– òV–|žíY½"A
+• ç7ÒAl¾ZZŒ³.Ê¡´
+{A(¢v姥5
+V,<a"qܾD‘§`°ÖS¡ùz-èκG¬‹Ì>HS3ì  'nD,û¡µô´
+Åa|’õIj¸ÿÛš>l¼¡à’o³‚#诬ÀwëÁ„Œù2×»lAªÚ0žÂR…;ª°$9ÏÄ*æ-$y^>ŒÝŸÈ‹¢Æƒ†ØŽåÍ×Ó‹®Ž´Ë–íò–!JìõAèÖÛ^lx{§bšÓ7‡—ô±Mw›¬¦Æ>%$]ÐcÝhwý¥ï{‘lÌjô„Mn,AË)8óPz¡êëM®Ã8ë¢1¹18Ç7ÃLˆHÉAéùœÜ#ê?ŽÈã3D*8}p dŸH4HcWB{`‡âæJ€[§HÂ!6A@-åsh<-LÜ“@’
+s¿ø‡{ÅŽ¡FÂ^¢!D´ÀegEú€;ÃØV…Ò‡ •0‘²€–j±N7I.H B?ðïÓ]E• èR6 1²'f¼’6€GDR#”±Ãm{þU)õt¹nç`u;`m×D X@¿bG­” M ±yS:…‰Íé~ «Uj`È6}+ä6øä6
+ÁæöÈƼ„Vº°R@ÄIéühzS–«œá‹u²³6àówW<²¤. ,q#ø½Lê„ ’8ë ‰©AE•/
+[âAFŸÕ±ÍŒYwÊPÇ1?©c_°* "
+Ùçü½<¤;„€PCh*.Ôq<ªÝ YwÔPp5i¾'MìbXN¤Óæ¢ã‡¤?rZçÕ…À;Ü¡â¬Q+GÀ #ŽšI£lðâ)3éf Ó7“ÌOá½æø¥ç‹Ð<}Nͨgjˆí<)ʲø¸sJ÷EMÙzcH®oä*fQнgäÒ†íÑÕ-iÈüÑ(SžÓ­_+œ_q¯I·ÅÎj[K®OÚ‚ŒoßΗGgÕû]ÁåUjÆlÛ–Ÿ
+îŽ5¦øßÇý~¼öï½çy>¸«G;-õŸWG˜¬7ÊD-“å—2ùÿø$D‡Mº»GÆHò7ŠM0VðöÁZ
+SŽá¾{{ssyÁ!^ºØï²ú‘¾HËÚÖÇÀmìŽtÑç2E>§ªŽ‹ùz: "h£‚ /ÐAˆÊ†:w+V–×]íäÆϺ(ÉÕ¯éâÅ­Þ4) ,â€ã{±NùPCºQÏÑ0Àærh )玥îÕ‚ÔpÆñaÅÊñ[‰†ßôEcÑ—MûΣRι`»ŸƒãC0¤…• ì´
+v5MYdKØVSÃÇ¢Üuœ.ôDVN*®o«ˆrk<#};°f~¡ÒF›çmj °/ÓtãV¢rM4M?cBß‚4tÅeäœÞA;U«"Ð ìH>YE‚ø°Ôc÷ 48P‰Kë΄?7Ù&ƒHÉ&¡—”
+MÙzsF)NÍ8#À· ØÞPÓQ§$àÞ½BŸ}óÑIú\VÙLŒ™Þl“Eêè©“¹‹ô!Ï
+Ê…–Š‹±Hv» ¿Ž¾ÄˆÁURyEm·*Ê6•ßQMɆ…Uä™+ã jíNGÛRyª#|Õ6wE¥ýÖ-çªFQ°’P¤T¿{é­ŸgxS~ãZõ+ðö‰¼Ž<eŒwË$– a¢ðb@¹{.>$ý¿æôývendstream
endobj
-1842 0 obj <<
+1873 0 obj <<
/Type /Page
-/Contents 1843 0 R
-/Resources 1841 0 R
+/Contents 1874 0 R
+/Resources 1872 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1829 0 R
-/Annots [ 1849 0 R ]
+/Parent 1885 0 R
+/Annots [ 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1884 0 R ]
>> endobj
-1849 0 obj <<
+1877 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [134.0621 486.6122 267.5615 497.4265]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://127.0.0.1:8888/)>>
+>> endobj
+1878 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [297.4503 486.6122 448.8825 497.4265]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://127.0.0.1:8888/xml)>>
+>> endobj
+1879 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [353.8228 406.7994 511.2325 418.859]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://127.0.0.1:8888/xml/v2)>>
+>> endobj
+1880 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [55.6967 396.0896 69.6444 406.9039]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://127.0.0.1:8888/xml/v2)>>
+>> endobj
+1881 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [283.6482 396.0896 453.0131 406.9039]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://127.0.0.1:8888/xml/v3)>>
+>> endobj
+1884 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [461.1985 234.8652 510.2452 246.9249]
+/Rect [432.8521 194.7399 481.8988 206.7995]
/Subtype /Link
/A << /S /GoTo /D (DNSSEC) >>
>> endobj
-1844 0 obj <<
-/D [1842 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-562 0 obj <<
-/D [1842 0 R /XYZ 85.0394 769.5949 null]
->> endobj
-1845 0 obj <<
-/D [1842 0 R /XYZ 85.0394 752.4085 null]
+1875 0 obj <<
+/D [1873 0 R /XYZ 56.6929 794.5015 null]
>> endobj
566 0 obj <<
-/D [1842 0 R /XYZ 85.0394 660.0457 null]
+/D [1873 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-1846 0 obj <<
-/D [1842 0 R /XYZ 85.0394 629.9318 null]
+1876 0 obj <<
+/D [1873 0 R /XYZ 56.6929 749.0409 null]
>> endobj
570 0 obj <<
-/D [1842 0 R /XYZ 85.0394 388.2848 null]
+/D [1873 0 R /XYZ 56.6929 357.3808 null]
>> endobj
-1847 0 obj <<
-/D [1842 0 R /XYZ 85.0394 360.9804 null]
+1882 0 obj <<
+/D [1873 0 R /XYZ 56.6929 326.1646 null]
>> endobj
574 0 obj <<
-/D [1842 0 R /XYZ 85.0394 283.5376 null]
+/D [1873 0 R /XYZ 56.6929 245.5328 null]
>> endobj
-1848 0 obj <<
-/D [1842 0 R /XYZ 85.0394 253.4237 null]
+1883 0 obj <<
+/D [1873 0 R /XYZ 56.6929 214.1573 null]
>> endobj
-1841 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F41 1218 0 R /F22 961 0 R >>
+1872 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1852 0 obj <<
-/Length 3794
+1888 0 obj <<
+/Length 3651
/Filter /FlateDecode
>>
stream
-xÚ­Z[wܶ~ׯÐ[Wçx\HhžGJ•&N++íéqü@íR#.¹Yr-+=ýïÁ xYQöÆíÙb‡¸ sùf@u*á§NS+¬×þ4ó‰H¥JOW›yúÞ}w¢¸Ï2vZŽ{}s}òÕ…ÉN½ðVÛÓëÛÑ\NHçÔéõúíÂ
--Î`¹xõÓë‹Ëï~¾zy–%‹ëËŸ^Ÿ-u*—?œS뻫—?þøòêl©\ª¯þòòo×çWôÊòß\¾þ–(žÏLzu~q~uþúÕùÙ»ëïOίû½Œ÷«¤Áüvòö<]ö¿?‘Âx—ž>À)”÷úts’¤F¤‰1‘R¼9ù{?áèm:+?%…6VÏP«S¥„OS=‘`ê…5ÚôÔ¤"¥\lò:_¬—÷ÅcK[}Óå]±)ꎅ¸Ë7›|‡ûþê"Q£ã‘§KŸ¨$L;ÉÂÜÿÆA§Ú¯drºìù‚Îm·+ë÷Ô­¬Ë®Ì+H„z¿¹)vŸn'ø:¬#ã
-¤'oŸöû?,o…ïÞ…E—³»ûÏ×$®éa
-=’&²§k9ÀÀ«U‘·<Õ¾¥èC9\‘§ÍÈùaä|5ÎÓ‚‘¶<ëÐë¦ü§±‘Ë `Æñß¡+¤•&å ÐÞ…ß’
-™^IyoÆ@Š›±âÓóп5u@j2"Üî3PË <ãT„°€&ê`ãÙ˜u|»)
-N ô‡µ”Ö†8T‚ëãx"4ú²/´NC>šK£‘^¶ÌâÿÊÛƒm±§#M‚%Öiœž:¤€»¼ž?>Þ˜£³$3ø¥Qb
-<9`al¢=S‹xð_]?ÁJØ4‹È±a“9Xüó:vú3™RŒÝ¼*ú°K¦”ÌW—ßL"` È¢ÉY4ìÅ}Ü9ýàs‚5YŸNe H-¿ oRŽyìa×ÕÅ+j¤R©еɱSçT•´UѶbÎÛ{T^ ÿ h˜9XP§ÔZó9ìù¤´Q¸á¼0 㼘T°ÇðèE¤XýB´ÙyÏá_ƒÊÍx¤L gÓ/³-“p¤8ûmÑ­î
-泋Rùöõ›¿žÿ‹ÚWWmÁÎèD(eüÁrx[V²n\C³1-„§…ãNññÁ.:s EàÞÒß sÖEÔ?™ˆÎí¶X•ÁÅó$Á>ísÀÇh †™;ÚDScž”jŠ@Nt! Äk•ž…4²—dÐà Iª;r…:lºb-Æ_ÀÛ¬÷\‘,Æìû¤#olL)öº¥˜ü 22O¹jåÑgÍå¢?P£eŸ}™5eÍͦF? é3fÔ¡t2À©¾˜ñ¬%–¹ß°%ñì%/×E¹™Å¸F@šš‘dªõLQ—ûXÝÇÅznòP
-EF"%mP –êíT‚ëÂZ"¹.,„ö͉ë¢*hK]òŠÀú1V"CÂœè)fÅWTVJ§zjøfÝàR¸'ókœé–Þ¶ ¿)¹
-hËŽ3ɆkdQaF…øÆ{Æ7*j¡1]_qåV™gÎKY)Riþ@Râdôµ%sS75ÈBÂb =GUebU
-ÿ3`EÖ¤Šãð(\п*±J}—×\ÛÍbÈ|CÙwTñþŽzÉùR¶GêHÕ²p„=“Ó4áô¦\¡QÒUè Š±ÄJKtò“Ø
-Uh¤ìÊ® Ûƒ?àjåôøµÙïÂU þ!¡¿˜«¤™Ð*þAÒâ׺š“¶†”^{=ªåØPËyd&b-ÃÈp-CƒÓ"K2Ý ncÍ%®fRêòQŸ1ªN¨¾ÅÒ\
-ìÚ÷”mÓ¶åMßcñ±³FGg3®§ù¡ž¶â›.QKmƒëÔ>^©LbŒIÜL•“ô–c›Ã\m¾¶šØ(5{«‡¶‘ô¤"~f’ètñá§öÙ§²mœÆWhÎ&j ‰3
-ÊÐì? ¡¿ñÀ n¸i‹XeK…ñòàò¿{h(ÄÒ™ñ—0ô¹Jêý¢øX¸‹1œn6ZÒeg­™‚þC³»ïQÄ_7»¡î-UÃé„O'Ìˇ ³‘o¨ ¯‚‘¶ŒºøiO\mLצpr7ÜpÅ“Wyħ‘††Ëו„Œg@¿Ë„tV}îH¥ðÞÄH7TЗZ9!3ï¦À2sˆ"깯 ð¢¯Ò­ëqY5Í=¤Îë¹¢™ƒÐ§úëéfË7F°@8<)ÀÒ ä{Ü_Z!mtب|ó±Üã—Ï£†D8í“Ïë>têïÈÉ.ñc‘É·PÄ{ŸArz AÒ¨xÁaÞ RŠÒ©JÍT[Bø˜ñ¾Ð×öwßëêƒ(Û•hvï©ž#f»Ž¥EN§|7]_+ ”K“øf¼Åq’gq‡eC?.N+±7
-endobj
-1851 0 obj <<
+xÚ½ZÝsã¶÷_¡·Ê3gH$OÎ}uš\ZÛi§sw”D[ÌQ¤"RvœNþ÷îbüéœréè,‹ýøí‚r&à'g©‰„vñ,qqd„4³åæDÌîáÝÛÉcΠ³á¨ooO¾ºÔÉÌEÎ*;»½ÐJ#‘¦rv»z?ý×ó¿ß^\Ÿž)#æ6:=3VÌ¿½z÷†z=^ÿøîòêíO×ç§I<¿½úñu__\^\_¼{}qz&S#a¾b
+/L¸¼úþ‚Zo¯Ïøáüúôãíw'·Ý^†û•BãF~9yÿQÌV°íïND¤]jfðGDÒ95ÛœÄFG&Ö:ô”'7'ÿèÞú©Sò3:Lª’ *9%@ã"«•ölwû¦ÍWgŸò§wsÔ`ŽI#'…‚…pð&{‚íÇé|‘Ó³É[jdþéæíšß´õ–eþ—Ô¬ïh…xÈ•Tpœ‰°¼D•mòU´¬«» n¬Š€Žä¡õŽÈ>íº¨˜z<ùã©Ss8N-Åüꎺ æ¶hاén¾¨Û5õlËl™7¯x3ëü Ù™á H©ÔÍΤŒœ1Ês’íNe:÷;Wólµ*Úâ!ÿÖvîë_¬òB¨*_á_Í"SAd*ˆLõ"ScÊEµÎwEKÔ|ñÄ„JŒ»&–õ|±o©ñÂúŠ÷¬Hd4ùÙšz^W%m]Œ·¼o<0…NüÐn×~WÐêO€ŽQκÙwHK[<Jãi¡Ý) F(„
+&éíí9ëg
+N/Óx|ºŸ—’6jüàeÆÇå}½AÚò‘î·lí5=AÏxL¶oëMÖKðIO§RJ/
+võžçU›ïà
+ô¸ÀiÌüŸ—¨…çWßg5ÛºjxÁe½Êñ$ `ÈŽZgâ¸ó´EµgÕßßòxsðÿüQ’¢$VýôçǦ4øçô‘Ç0<Úóc ¶}Ài屄wA!)è8„76Ö«;ôJÍ×õcŽ{±rQ”†[y‡Oà_Y4´Sh{Ï)5•VÌÔöè€!D§ÓÃýúe`ÉlÕsÈËNðÊÆŽÍ%é—çoµ0
+RQxKåX>(ÃÊÕêlñ„m˜¢Ù$6¼óÕ)¯
+¼*´¼à™­2Ñ”8 éF’ Q÷„@IÀF‚ØDtƒJǧ ìnÃ=³!Ä’?ô?’̆»ÜUVöI4ÂF&d$ï~•.Žc"„ËH¹Ô~~“V{°I î#<ÉÙ`Ë ÝÂQﲪ ú› Dï5:Œ~{l9ØxèŸ!fͯZ꬙•M=ÜÛ²†øó[ÎËr¸ŸA¢ç
+T'pé!Þ‹°ù—}A ”[äõ`Â+¼F°öËž4Ž#•Ž“I‘Ä‘Òêhg!U:u~
+j»Í³]CØU™í†î40Xås])îÏ棸«>›dgL…/|²SNç[™>×$õ…ušø2¸0Q$˜ÑÖ>~@':…¼ôN ô‡µ”Ö짤¨#VS…A—D
+}ÙZ§&„ M¥ÑØ_4Ìâãš_eÍÁ¶ØSC#M‚%VGB§ñ×ã.§¦‡Óúè,I÷~i8E–OoI2Ýi:ß3†þ88EeK⨳]ÒÁMý@SdŸ}??„¦ˆ3Ž(ÎÓIbÒÊ X˜Eràd §ƒxÚ&ÚƒZE‡ë ãYxNÉ56äWÇ»Õ8ŽÝT㨦OX›½hOå<üW—ÚðƒŒ¬Ir¬Ùd•°=§Â ¯ÉÌ(bìæU)Ðû]rOÁ|µÙ§œ»X²¨3 {qvNzøãõ3cÙb]páÞ¨òØ®ëË×Ô0BÊеɰSeT•2‚}G½Ì›fƒy{”Nõ ÿ h˜8XP'c­þv‡|RØ \^†‘.&éíÑ?:IV?ß
+µßtÉZŒ>·Yï¹"YÌéï;²æÀFÀ”¨»PŠÉê óó¾V,ql.t3wÙ§V¢K¾ÀÊê¢âf]¡›…ìj_9™Â àdWËxÑ@ÉÒÞ°!1õ‚—kò¼ ÜLB\A–š ‘„Qj¢&K‚y,?…Åjzn2_ EF%e1VêíX¼çÂR"y.¬ƒvõÌ‘ç¢"hCC²’qÀê)"}¾«1dÅWTUî+§jløfUãR¸'Òk¤tGo›šß\
+`Õ5&Oˆ½$xÙÉ7±ß;ë«cÏ®2`±`M‹§{ìT0ÆÞÞº²Õ*ÜDÌýSv: kXž©ò_[.ÔLÇ4‹’ê#êQZ=‹iH7»k}v„M^Ó_bkŠb^”hEÉHöheˆ'x°‘RÃÐb^P¦XD±8ÚøSüNÁN]ÈY××Í–5WÎTÔफ़éŠWIïü.À_Œ'ü¹B¸gëoâ†KB¨ƒF¯IÚÕJÒN üõßò`?$h0HJB°L»À'AŸglâ6¸âû4ºŸß¾õñ§‹1}•ŒÜÌTwRþÀù÷GGøsÏ;—µB=uÉ T'¨qª…Æ®-B¬çY¶ÂTå…«W-Ud¤³_–ëN`ÉȺä0u'•ŠE%R&ã“xa%hZÉdô5 ú™*€‰pZäxVǤ<ðù##^ø.ÆH»ã/Ú=êöù÷ÙÄÇø)
+¿{-hð¿<PÔádµ‘…Á‚þù@‰%êuVqa7 EpèæëÉn  —w¼Ð9Oçò¯Ïמh •Êü vLŽs„'P›b‰6I÷ ¯(Â+ õ“—Ä–/AcÏ®h[¿=ø ¦VFŸëýÎßÓàú«©ÂI"%Íê÷’Ž~®Ê)i+Èç•SƒBŽõ…œ'f"2´ðw!0¤*Jâƒ4wƒÛXq}«Õ¹\Ð'ßTÇ—ÞB]®öÕu庞mÝ4Å¢‡‘ø‘ØY¡Ÿ³ Ó\_L[ò5
+ק‡u¶Þs*îSFFûïÎKœ¤·ÙRLÔöþS ÿ§^‚R³3zhkAOªÐá7&±2óŸÊ%”;(-á4Ž¸?Km,À8£ Íî«úK±1M‡0Üó‚®›ü¥*µ‰ðKȉO E÷µÒÿüÁeÿ5jœ`ÙSõßRŽö,l”‚ôS¸s'9ï¾Ì|ÎúÛ“Wendstream
+endobj
+1887 0 obj <<
/Type /Page
-/Contents 1852 0 R
-/Resources 1850 0 R
+/Contents 1888 0 R
+/Resources 1886 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1829 0 R
+/Parent 1885 0 R
>> endobj
-1853 0 obj <<
-/D [1851 0 R /XYZ 56.6929 794.5015 null]
+1889 0 obj <<
+/D [1887 0 R /XYZ 85.0394 794.5015 null]
>> endobj
578 0 obj <<
-/D [1851 0 R /XYZ 56.6929 769.5949 null]
+/D [1887 0 R /XYZ 85.0394 719.5795 null]
>> endobj
-1854 0 obj <<
-/D [1851 0 R /XYZ 56.6929 749.4437 null]
+1890 0 obj <<
+/D [1887 0 R /XYZ 85.0394 689.1253 null]
>> endobj
582 0 obj <<
-/D [1851 0 R /XYZ 56.6929 672.0805 null]
+/D [1887 0 R /XYZ 85.0394 610.2286 null]
>> endobj
-1477 0 obj <<
-/D [1851 0 R /XYZ 56.6929 641.9666 null]
+1497 0 obj <<
+/D [1887 0 R /XYZ 85.0394 579.615 null]
>> endobj
-1850 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F41 1218 0 R /F22 961 0 R /F39 1161 0 R /F48 1238 0 R >>
+1886 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1857 0 obj <<
-/Length 2928
+1893 0 obj <<
+/Length 3406
/Filter /FlateDecode
>>
stream
-xÚ­ZYsÛF~ׯ`ùe¡*Ìcý¤$r¢ÔZÉ:ÊnÕ:.D-”I€!@)Ú­ýïÛ=݃ƒšÚ$Åôèéîù¦“™€_2ËM,T¡gY¡c#3[lÎÄìŒ}{–𜹟4ÏúêæìÕ•ÍŠ¸He:»Yxå±Èódv³|}ýÝÅ7—ïÎçÒˆ(Ïç&ÑWW×ßPOA¯¸~sõíÏï.Î3Ý\ýpMÝï.ß\¾»¼þúò|žä&÷%s8ò›«¿]õí»‹·o/Þ¸ùþìò¦×e¬o"*òëÙûb¶µ¿?±*r3{€†ˆ“¢³Í™6*6Z)ß³>ûéìï=ÃѨ{5d?£òØä2 P&³$‰ cäÄ‚¦ˆS%•³ *- X@ÝWöü©+;»±uÇúîÊͦܡ¾¯Þèd´-bbcò̱#)óúX—‹/Í”‰óÔ˜Ù¼—&¿_¬Ë¶ý@óÿãæ‰éŒMÙ-îæ‹u’´~ž{”ËåζíG7ããºj;êÿïë)ŸdÄgiÛ®ªË®jêßÇl,ÔÎ.ö»¶º·ó¦^?ÒüGÛ~lv놚Á·ßÌÓlQ–×ÔÇñ‡ìü¿›Ú~lý¶¾3˜ä?Äð×y¬3
-¦ž²^ñs[~²¼<›;ÛK3LJŠXÊÁÜÃç)'©ã4ÏsžÔŽ%K£ª¥gImó`w«ý[Y´²ewžDûÝy’G–úšÍô~"%?‘FÝ]É<׶›ru@vo·vwow<X·=Mo®"â×½Ý=¹¬V¸üÊ:)æ´aZÅE’Ó½¥K2Ë£¥ÝÚzYÕŸ¨é¬χ»†§6<Ëö3LÇ¥
-]uÓÁm¹ëªÅ~]î<Û}kÉ8@¯šOßl×΢ýrív]1/Òûl·ß2㇪»kö]àwå=±ht =wç°2ãf³_w¬G-2g÷œòXrM—åâ.€
-•H°¬ƒ²m±™àÆa/!)Ät
-•ÎŒ”q¢À<#&ʸp§=ç=Çù˜¥ wù` 6…ÔÃʽï>RèD)ÅŸ&dÏñ„Z&±Ha“'Bº
-H8¬!1
-¶Ô`sSÇ`ÃŽlØ8647ýÊGÁ¦b•)93 lKùã`cŽó1ËØÒX¥£…¿€µ4Îu–ýy2öOÈþ0Îq÷&BÃZøíÃ2ù©Ü{Äü8ÖR‘X?k“”ì©
-ñ7Ë¡¸y¦õT¬•_´
-ÅþVb…û’1 !¬èïêrôÁuvÁ±8¶áê¯@¸†åb¯I¨üT,‡ªÚ·eí®ßC(¸ cËWSØ` YÕÃÄ
-ª<Á<CO¼È?ÎÁ‹WLTö÷›3…²åþAc X5á€ôtnÅO]™èñðÕõt ì7vÉ|¯›ŽW÷!.åÒÄ-VÏýë÷ƒÐ›½K_P
-ÈDÊð™` n‡=,"’y[ ÛC€÷ÂW×Þs“È¥dbÑl¶ÕÚ.ç~ôòbÁIg=ƒv¸PNFÖ‡1°l ,V°Ãâ~Që"”+_’Ô»è
- êÊâé'^bâspù¦¦g=G4[YÛ{»¦> È£IIoâýŽï±p”,Mt¿ó<»­–ŒŒ¥O§³835»K sAžxKO]ê!ˆáó10³!>½¤[Z
-•ù1ÿ“düOñ¬È!Š"ôyxsÎ ”¸¹è5àËG/æ9€‹ÚãH*dQ3ûäL‹ª Ö¥Šû¢È%Û³#
+xÚ­]sÜ6îÝ¿ÂÓ—“g²Šø¡^ŸÜÖIÝiÝ\âÞÍ\šÉÈZÚÖD+mWZ;îÍý÷P+­é¬¯íìƒ(@
+xž(ÊI^)à PsɃúT.wêS¹ õ!Ô©!îÈ#UØÉ\ °ÕQËæ.®û*î67=€]ç©ò{
+\ ‘ªÊÞ¢Ëщôô'¬ ·å@ ÔB¶=ñ/§t3S¥o&XœL„Éc b÷2!G°*ëv°mÙVì„ÖdŸ•íÙWÕÞgmëf`P;ê}& @òY®*̓¼cËî’"ÃÄGvwv³©—KËðkbpb
+0XZÔO9ËøXg.¦ÁcÝÝÛÍõ]l
+±Ì‚ÇÑ–‚u×´Òç°å°»'5v˜cu†ì¾îíÎ1O¶ýý8¦ÇwïhðÛÖR•A^u䯭ãbA
+Ó[r3×5lÊELíÚ¶Ë1/ôùÝý-g¡”
+Øtç¹ð†ß]ï”ãh¿ëC9*ð’%Þ{Rôb “2NSWRMœ·ÁD6Q™ç
+ì<È¿Iñ“F@7gñ)S˱ÔSóºqƒ'M ÒЬ3â/™w¦Ùc6Àr…)ôÌÞ°•W÷+¥¢ëOôk[Õè×í+ÎTSUÊ­fbÆäÓ6ŸéXdc&ŽvˆH ˜"c<°5ƒŸŒji¯ËmÃ;q•<ߪì=µTr~VKWK‚<&§ÊbQ*såÏy›á˜l"8s÷PžoxB[G•cM|Pz*Ö*‘_”¤€Z§éÿ#½?‘£#*ýF›ž77”ŸBÙ&$I9úÙ½<k«'ÒÎIƒå¶®°ÊÍ´/-ï°3
+0‰™×Aò]KNznЭi¦±w¶!†äÉ"1Šx»áVÎò5œšçÕx]M ¥O©ó8O÷êv—|7OlÔÓˆúz‰ÿ‹G1µÌ|¡^PŸ–‚eñ”¹dž;cB7,€›Ó^ù[$ã¸ÿèÙ<ã¢÷i,M:8ˆ¢eö3¤MU=kÓ
+|cò?ø ONæèØ{Ÿm$ÎE…þŽ€ÀB0@]²ì ÂìÜÐ5UPëú€1ù;ãßô9a¡­úHG»âmâ±¾·S øKp9Í©13z=Ëk‡‡5žöI.ãõWH–ÓèmÏuÇ~]u3äVlŸô†a×*N
+=n[îÝDå“ý¯¦7Í{¦$«—/iÉ¥;|8ò€Â1×l8Ä{7ð¸é­µþ¿j:žu™-’Øý^_ï_<û¿ L¹{³áÖ¾lvǯÝÜÕ¿ Ý“®<Ò_Lã§þ²’ÃÿÙþ`—Œ×Ìúï|»ÿ:ê<†rR†ÿ©'s°¦0S¸##qîÿ÷÷˜õÿõµ»6endstream
endobj
-1856 0 obj <<
+1892 0 obj <<
/Type /Page
-/Contents 1857 0 R
-/Resources 1855 0 R
+/Contents 1893 0 R
+/Resources 1891 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1829 0 R
+/Parent 1885 0 R
>> endobj
-1858 0 obj <<
-/D [1856 0 R /XYZ 85.0394 794.5015 null]
+1894 0 obj <<
+/D [1892 0 R /XYZ 56.6929 794.5015 null]
>> endobj
586 0 obj <<
-/D [1856 0 R /XYZ 85.0394 769.5949 null]
+/D [1892 0 R /XYZ 56.6929 675.8159 null]
>> endobj
-1805 0 obj <<
-/D [1856 0 R /XYZ 85.0394 752.2115 null]
+1827 0 obj <<
+/D [1892 0 R /XYZ 56.6929 651.4464 null]
>> endobj
590 0 obj <<
-/D [1856 0 R /XYZ 85.0394 622.2614 null]
+/D [1892 0 R /XYZ 56.6929 522.8339 null]
>> endobj
-1859 0 obj <<
-/D [1856 0 R /XYZ 85.0394 591.5303 null]
+1895 0 obj <<
+/D [1892 0 R /XYZ 56.6929 492.6901 null]
>> endobj
-1855 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F41 1218 0 R /F22 961 0 R >>
+1891 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1862 0 obj <<
-/Length 1239
+1898 0 obj <<
+/Length 1144
/Filter /FlateDecode
>>
stream
-xÚµX[sÛ(~÷¯Ðä)Ùˆ.Ömú”vn:›´ëzŸ²"¡”­$TÀvܺÿ}A€-Ùj"§Ýñx>¾s87äX¶ø9–À vc+ŒÇзßJË‘m=ˆwoGŽžÌ$Оõz6:¿ôB+†qàÖ,oaEÐŽ"Çše·§tá™@°Oß¼¿¹¼zû÷ôâ,ŸÎ®Þߜ׷O/¯þœ¨ÖÛéÅõõÅô 8‘ùãâÃl2U¯ñúêæw5«Ç@§“ËÉtrófrv7{7šÌ¶²´åulO
-òet{g[™ûÝȆ^ùÖJtlèık•£±ïAìyf¤}ýµl½m–öêϱ¡ënÇNŸýžë5
-üþJÊ €€ëÁرÇÍè£Õlûô=rD«¤8QýoÍtχQàûpû¾:‹ós5å:áé'ÕLŠB5Ò£Š3Õ©WRÎD™êܯՓB†’Bw;è5EKLJ…}ÓhÐÙö›æT­_©Ö¾ì^g£)Ê ©6Eé‚2¼Ô]†è§ºÃ‰zEuîå¦ÑHeÔñ$”,q¦7K Æ)N¹ÑÝî¼H¾Ó¢¦•”u`JʧÔú•TzAJ*žà
-W±*ôÉÔ‹û§¦—¤)b ßzÝ'ÂäU†±Ã>i±é”Ã(
-ã.7¾®‘1&”ûªO€{àÀœÌîOÔ°‡ï´mìY³Ûzy~é:Öv8—›Các¡· ?n(BŠ½U¡ŒyÂQ)Î_Gš”eB^Ç%å‘ûÐñ|oOQ²5¯’RwoÓ"a쮣1m*‰iìvë›d¾,]wý#Ë„y±yãAó3¾õ–æy7 ó~¬sËiR±Ñ_ÌvQgâ´~¨‚5®¢[Ô„…Mg5w®æÎéÂXò-„ðîõ0DPÅy÷$q=—’hÌšP¾—½ƒ²‘ȃA$sHHCqš‡ n÷
-d¨HÖ¦ìµaÆŽ$ 8Œ$ÇGKQn~FëC5ý¨ý¼¹õÉÇD1¥¼ ¸·ÜuÓ
+xÚ­WÍSÛ8¿ç¯ðp" ËŽ{8Q6°tÚ¦é‰2Ç–A‹m¹’’–ýßW²dÇ`|Їõ~ïû= Y¶üå{Ðvƒ5
+г‘gEY϶nå¿ó2g@u4O}šöŽÎÜ‘À`è ­iÒÀò¡íûÈšÆׇ§Ÿ|Ž'}àxöáö7´?]\ý¥w=œ~¹:»8ÿ19é‡Ó‹/Wz{2>OÆW§ã>@¾‡$½cž!8»øg¬gç““ËË“Iÿfú¹7žÖº4õE¶«ùÕ»¾±­Xªý¹gC7ð=k%6DAàXYoà¹Ð¸nµ“ö¾÷¾Õ€¿%i—ý<ׇžïŒ: 8@ "dž=¬‘À¡ë¸¥ŽŒš÷Áжט+­$4p\ {P;:Òÿ¿2º$1Ö‹PÍŠ ³¹$x¥g4Ñ£¸3¿ðC¨NBIPñ@ž‡Z<~ÓÜ<J1Éo ¿8f˜sÌÛø$˜åaªWw” ÛøN‰¿Á=hHr ·þ”®ý¡çµéĺ0tYÈ%«ã.á’nƒJ.Ï4 èÄÿo‡Ÿµ;´×6F–Ü4—×õ¨ì{ŠèÎX45V‹R‚sa ›SQé+OâX/æë;_ð^Áð’ÐßDC§3JhÐbûÇÈ”¯õ¬[÷ŠÑ' nln¢xi–³%‰ÌBÐ*úšab8wʶ•9}QŽ®”a*‰De»·$…óLRD4!É묠yj<S,æ)‰ªUE2YȼŠËw%†@ßm—¿’Îs‰Qy¢‘[ø/&jü<:sUÓ$Šù`$‹àHûH•tg$ë»]›P•ïï"8“þ7Õœ…Y2ת™ÊåD®çnJÍfy˜™åu”†œß´,fBeÿRr]ç&]_ ÌÖíüÐUpVfÐ,%\ÔÙRŽ7]^xŠ ªðþ0XÁÂœ'˜½¶Ã‹"«æò²j8 ëZtîù}Ý÷f”ÍTª¿Šç²E@÷x­ 6ø
+ ê€IiK®ÛŲªOù"›«øØUŸ‚ÊÔ7R¤4ª`[vÓggúìŒ-ªÌ¼†ÞìãnNl$iG&)fÊ3³ LÔûja8è˜÷]8ô‡N§evÅ))z%q‡`‹OK*‹Múi{ö*dùc’ô‘Üæ”a¹‡Z _²ŒFÌÞ‡žÂ­HG!‹÷TMÏ‹d#ž)©Z¢$lmhik:´37Æ·ŒˆíŒØY阄é¢hÎg´u7ÞAMËQ]¸ê“;ꢬÈAB™¬.» Ù´Y¸ÚËÿÒÅæƱ·,ÀÐN~W
+ÉÙŒ8ÚÅ ”­ê°Q:¨:õ˜ÆÅ^ZÌÚ÷´OÖn5ÈCÂÀ<äosiI0š˜$²9á<ª²}Ÿb]ˆ¬
endobj
-1861 0 obj <<
+1897 0 obj <<
/Type /Page
-/Contents 1862 0 R
-/Resources 1860 0 R
+/Contents 1898 0 R
+/Resources 1896 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1864 0 R
+/Parent 1885 0 R
>> endobj
-1863 0 obj <<
-/D [1861 0 R /XYZ 56.6929 794.5015 null]
+1899 0 obj <<
+/D [1897 0 R /XYZ 85.0394 794.5015 null]
>> endobj
594 0 obj <<
-/D [1861 0 R /XYZ 56.6929 540.8995 null]
+/D [1897 0 R /XYZ 85.0394 445.2582 null]
>> endobj
-1724 0 obj <<
-/D [1861 0 R /XYZ 56.6929 513.5566 null]
+1746 0 obj <<
+/D [1897 0 R /XYZ 85.0394 417.9153 null]
>> endobj
-1860 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R >>
+1896 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1867 0 obj <<
-/Length 1226
+1902 0 obj <<
+/Length 1201
/Filter /FlateDecode
>>
stream
-xÚµX]s£6}÷¯à1îŒT$ñ¥ÉS6uÒìt³[×}r="¡ÁˆEò&Îzÿ{;¸';ÆB £s¯î¹W¦ú!ó¡I¨e¸Ô‚¶‰l#X Lã^=» êP¿šo}˜ ~½"®A!u°cL¢–MÏCÆ$œž]þ~ñe2¶Í3í˜gnnÓ=Tÿ]~¾½º¹þ{|1t­³ÉÍç[Ý=]Æ£ÛËÑ ÏFj<® ¸ºùc¤[×ã‹OŸ.ÆÃÙäã`4ÙØÒ´™¤0äë`:3P™ýq`BB=ÛxR7&D”bc1°lm‹º'ü5øsØxZmóŸM<h{Ømq …D¦©E]õ)t&¥§Cà˜æ™ˆïºÒ8½r•1Ý›.w,×ísý7+lV„ µmÜ }éßù¢,d®Ð:^Ä)ÈY”3ñ
-²:5ö÷¢ŸÞ¦ž8›Ë[É6ã¹Üô7³šaìèxnµ¸+Nù!¬·Ø›gÇHE¦Û0PA›®#?NÖj½yΊÅî^ób?YfÍöœg2®¥Ûaµ£89±búB²¼^HOÉkk’dÏrûO½Lù—/óÔOºryUx«ñjñR¤Zs‘± ÃìUöØÚPhgŹ½¬¨pX.v"õý­Ýñs”ƒ“7Aåè(ç Uú#•¨YÔ‘ÚG®%Œ\d Olí­§NŠ`Ïžþ¹GG©8âñﯳr9¬Q/Ö»+ẌlZÈÝ×zË$m–ª½ÙjͶy~Dz©Šö4s`î­JÏ%ü¾¡‡v‘uÉq¨t^W©¶Å»@|)ßN©ØÛö t¨¥ãšei/<«aÏYñné
-Ý´ž
-„,ñ«Aª.ó4}d¹¥î¿3È–w›¨mºéP»gúÙ,ˆP©<hì”âÌjä͵ŸK!Á®­ k»ú¥|dC꺎Ñèß
-ëXҭ奾¥‰Ô…'øæ4©:¯©Rb§ü|((Y¨Z§QÅ&˜¸ôÀ~^‚^nm ý·b“B¬R×]Þ+®G]‹1‚È5îtK® ]ÓsŽ'î¶Ð°(´uÚ¿}Þ§†VJí¤Ç…ÄÅÖ!ØoS‚K ±(=Îò¸¶¢ú :@A\Dµ¬Kñ‰„ô¥ªçq NÝMt;bj;“#ª\Òv‚¦®j¢7Ÿ×m3-ž‡7Gq7Žâˆé@S·&UHÑ>óÍÁÞkêÿqA”½endstream
+xÚåXÉrã6½ë+x´R„àÎòÉãÈOe<‰¢œ•
+&A1·! Û²5ÿžæ&‘5CÊÎ)¥b ñÐ ¼~h(*üˆbZØr5W±]›*1/©Êô}‘êT„š_}˜~¾ÒmÅÅ®¥YÊ,h`9Xu¢Ìüù™…5<õìòËÍÕõÇ¿¦cÛ8›]¹#ÍTÏ®®›”¥Ó‹ÏŸ/¦cD“œ]þzñûl2-»¬
+ãÃõÍ/e‹[¾Ž€N'W“éäær2^Ì>&³­/M‰ªçŽ|ͪâƒÛŸF*Ö]ÇTž ¢b⺚ SǦ¡ëuK8úsôÇ°Ñ[ í\?¢bM·´Ž4Hc[*@Ù¦‹-]Ó‹œ‘¥ªg}Fü9ÈP˜Ü!Á_XÙ¯¢[–•åóòµÈ}†‰!Ø5MmEf4Ë÷C†’•|;’äÑ $ÒDŠɃuY^3±L²eœ”ÕMùbÏiÈ=.[¦NâpÝÛèr*ä³Vƒó’ØCd‚DB÷lîákºº}`ëÃe:V2ãñÝPëD²Ê¼Š «¦ÊScI}?«×/ –u8†¶ Ý,`~*ºLìÚ¶¥4Ú„”ƒçi’UûÀÓe^YtX‡ˆ­cÝpÝ[‰­¦¡Ö¡¡Ž‰u˜¿2Ô8b¨q¢¡.Áš£Ù»õ’Ä I%’{I‚U¶ˆ,¬Õø»%øz¤!÷¹\#Ô90/+‹Þ,Èqá‰9(N|&N
+Ë&Jþ¦r•õ‡:j\§§I—O%½¥õJÿ80ZÎD<F ÀûB¬N–¼·ƒ–Èl=‚Ú1¢eˆòyÆ<™d•¥TÞ/cõa.]
endobj
-1866 0 obj <<
+1901 0 obj <<
/Type /Page
-/Contents 1867 0 R
-/Resources 1865 0 R
+/Contents 1902 0 R
+/Resources 1900 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1864 0 R
+/Parent 1885 0 R
>> endobj
-1868 0 obj <<
-/D [1866 0 R /XYZ 85.0394 794.5015 null]
+1903 0 obj <<
+/D [1901 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1865 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R >>
+1900 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1871 0 obj <<
-/Length 1013
+1906 0 obj <<
+/Length 1187
/Filter /FlateDecode
>>
stream
-xÚÍX]sÚ8}çWøvFŠ>,Ûš<¥Y’Òii˲O,Ã8 OM%Ñ”–ü÷•± 6˜‚¡;ÙÉd,®¬sÏ=ºâ^„-dþ°ÅèpÂ-—Û!̬ñ¬¬G3wßÀÙ;  ßzÓo\ÝQ×â;ıúÓ–‘ça«?4H`Ë  æíÇî]çþïÞM˵›ýÎÇn †šw÷íttß»ùðá¦×Øc¸yûöæS¿ÝK§œ ãM§ûgjáéã
-õt0©5ZÌ„LÇ×éc˜„lüŒ!gŒ”@üï¿dÍDËe-¼Ï£.D™Å"Ô˜ùJç‹–Bb9Šâ“1~ƒ(*öÖáq@(äÙå ^®sùtbýGYdÉhùy ƒqè+5L?ü\/­„ÕËy¶â)ˆôuUÓ Ì^QZÑcNùpÈŠG_qâ(\ÖP®´ã'1þ’˜Tjø1ôìËh5õƒp<F±Ɔw׫«ôÙu:èÌ桘‰H‹ ¬Ô™TêL/Õ™ìè¬ôâáWâùa?ƒ¯ !—9jjŸLÌ‘R£™¯ÇO£0PY\/'(YÀ4;r ,ùô‹Ì üp1/ŽGñ<I¤““æüÜ+9”ô'|û%_Ér0¥Qu«ŒßõJúÏÇ)Åc@Œ¢“-JÕjH¥k)›á©JÛŸÍóQ’™mK½±'†%7ÂÒQ{9YuÄÁÏm˜¥e…¼\• '1cÐÆ.ÙѯÂI¿/"K3nü—…˜+ƒ»¾÷*¡–~¤¦B‚`bR"ˆÎ.e ¤šÕ
+xÚÍX[oâ8~çW䱬d7¶ã$VŸ:]Úíh§3˲Ol…\bZkrabgZ¦ô¿¯sJèEZ!dlj?çó9ÇdÙæ‡,ŸB›0Çò˜©¨5z¶ukÞ]ôPõ X}ê_}õŽÏ‰g1È\ìZ£Y ˇ¶ï#kŒÎþ8ý6 û
+™ç¹V­Ý€ ²óxž¤ÕLÈù$¸ná—Ç,$¦Sžà§[§ê>§Ê<ˆ]²%UgUçuT±M &k1jp¬5´Û bDi«¬-\÷J‹1‚ȳÝît ž=Ûw·htt ‡A‡0·UïL °Só=¡Ö©"Áõ ñ°³Kú¶Hð$cûYîƒMP}@ † .–ª–yù•Ä(͵TZN«„9Ë°‘”MFV¢Ñ›~fKÉ[ð“‡2za–$ƒcžžçÃqùpÝ9#æ¸æ›,
+â$êUKT%/¹ÎÒîP; éÅ\¼
+$àšßð•Òû‰†1‘ŒA*fÆ€»bá~õòÿv‚‰NA ç<…h°0 2d*¦:I«¥yÎõÝ$æQÏå™Ù ±2;‰U“ûeÄ›ÿ2™Í:Ø!ãPæVzÆáÙ.ÊB-A¹'jÝJuÀø%ÒÄI¾³Z‡ûa
+Ï“EÞÌ’Ô¨ºQF‹½Lùý>Eö£h°AÉ­ZÎdªôAÊV8f'јþñz³ÙíÛØ@¡öÔYµg€Ç™n5¿\6 û7J¡ƒ<¼¥_Ë müÖ'GS¹^ßvlLn5l_¾`è~-€>ä~á|R~ïm÷ÖI½ãIùãsmlÄx!m×aæ_ ðæË·ÍͤcNo¾×÷j×îÕˆíB3oE*7ŒÑmæë[ºçÔÿô |endstream
endobj
-1870 0 obj <<
+1905 0 obj <<
/Type /Page
-/Contents 1871 0 R
-/Resources 1869 0 R
+/Contents 1906 0 R
+/Resources 1904 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1864 0 R
+/Parent 1885 0 R
>> endobj
-1872 0 obj <<
-/D [1870 0 R /XYZ 56.6929 794.5015 null]
+1907 0 obj <<
+/D [1905 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1869 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R >>
+1904 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1875 0 obj <<
-/Length 2961
+1910 0 obj <<
+/Length 1066
/Filter /FlateDecode
>>
stream
-xÚ¥]sÛ¸ñÝ¿BôLÄ€ ’“§\ÎN}Óø®Žï¥i&KÅEª"E×éï~¢lú¦×LÆÃÅb±X,öJ2Sð/™•y¬t•ÍŠ*‹s•ä³ÅæBÍaîýE"4sO4SýpñúZ³*®Ljf÷«¯2Ve™Ìî—Ÿ¢wyûËýÕÝå<ÍUdâËynTôÃÍ팩øóîçÛë›÷¿Þ½½,²èþæç[Fß]]_Ý]ݾ»ºœ'ežÀúT8¼°àúæ¯W ½¿{ûáÃÛ»ËÏ÷?]\݇³ŒÏ›(ù×ŧÏj¶„cÿt¡b]•ùì
-þ•=+Û2Ú6}7åpà†s ªÅ„Ó3ˆ›ÒvÝ!X†›"<îÕƒpCÑGÆ-ÝÊî›áßþ°\…Ö«]“Á,'=Å~¾q‹$âôi”kÆPZ/«
-„óâ'OâZ)Ü7Ú#³œ¨&L‰%rê«Žúq=ð.ÛÆ.œÏNêŠTÅYž>é®Ä“!.Cr8¿â¨n)0
-Å ¬Ãº&3ÑGÑãSÛ–ð™0Î)Dü¶“Äjy ɳ]2…$έ¥¢YIöS>ŒâÇÛoêȸ÷Àtåì°ãCiµ˜Ôcçs©¸ÉéY³Æx†U“ñÔjÒ
-„–ú&B¯Àb€)( ê±Ù ¾éìÉMO]
-½UXùÇ
-ʱ)×Mœóð#ñ Š?Ae)‡VþiÁ™¢B¢Dˆ˜S1¾Ég¶O•Î•|žû(j8µ<ß(™°Æ× *=é
-¥)̼ôJÆ™eü,}ª?Cîë%þª`ˆˆä3å*œ)WÏÎôGÙQ•!;ªR²#
-¥^ì©ìÃ1å0\€¢Ýùã>ÓÐeNêèšó¼ñ à+~+“Š
+xÚÅWÝsÚ8ç¯ðô nƪ$˲5<¥)äÒ¹¦w”¾Í0DðŒ±©,Bé¥ÿûIÈ_HÒ›X}ýv÷·»ò
+9PÿãS@fNÀð!òé²;½vÕBù·ØäÖw½¶Þö½Àa€QLἆ†ÈÎFm
+0èhؾütÓ¿¾ú2¸è¤=¼þtÓq±Ûýë?zVº\|üx1è¸(ôQûò÷‹?‡½]¢9Æ»ë›÷v†Ù¿'@½~oл¹ìun‡Z½aéKÝ_=ãÈ·Öè:3íö‡ }g£ Æ°³lß>ñ¼b&n}nýUÖVwGùC`â ªB@¡†
+|¨‡½£ŽK!lóX¹Jò$› éféZN…]ø
+}­È˜ÏfÒÎ<§ =­4€xþì·Ý’XP§6¯A=<Z¥RY1ZÍàÖŽºöïv‡àbÈ
+ =ßÜ¡hh˜Ý3ã<ñ
+ì²-Ví*îã„Ž¦1ϲ< ÿ±ß«¶«2Æ:g¦:uÖ“î:x§÷ÛZÈmnçu}‰,/¹š.ƱÎ>;ÿó ~2!ïuÊç"Û•…U•pŽ
+‡¬Íí¸øTyš®¶VJçv“* L“d%]nV(×òT1˜»LÐS›(Ž­4MÏ'qs•Úÿ•ì °ÞG³|¯Õ"•‘ùÊÜSI¶ÙÝ°f`íÐB¤Àa¾€zº±­±ûº€“± ´¾v$ðPÓ{–Õõê×Oõ4$ð—²r„€„ÄóÁ2ì2úèmV<“ò]5ÓÿÛ«¤Kendstream
endobj
-1874 0 obj <<
+1909 0 obj <<
/Type /Page
-/Contents 1875 0 R
-/Resources 1873 0 R
+/Contents 1910 0 R
+/Resources 1908 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1864 0 R
+/Parent 1916 0 R
>> endobj
-1876 0 obj <<
-/D [1874 0 R /XYZ 85.0394 794.5015 null]
+1911 0 obj <<
+/D [1909 0 R /XYZ 56.6929 794.5015 null]
>> endobj
598 0 obj <<
-/D [1874 0 R /XYZ 85.0394 648.8056 null]
+/D [1909 0 R /XYZ 56.6929 278.1954 null]
>> endobj
-1877 0 obj <<
-/D [1874 0 R /XYZ 85.0394 618.6917 null]
+1912 0 obj <<
+/D [1909 0 R /XYZ 56.6929 248.0815 null]
>> endobj
602 0 obj <<
-/D [1874 0 R /XYZ 85.0394 618.6917 null]
+/D [1909 0 R /XYZ 56.6929 248.0815 null]
>> endobj
-1878 0 obj <<
-/D [1874 0 R /XYZ 85.0394 594.2803 null]
+1913 0 obj <<
+/D [1909 0 R /XYZ 56.6929 223.6701 null]
>> endobj
-1879 0 obj <<
-/D [1874 0 R /XYZ 85.0394 594.2803 null]
+1914 0 obj <<
+/D [1909 0 R /XYZ 56.6929 223.6701 null]
>> endobj
-1880 0 obj <<
-/D [1874 0 R /XYZ 85.0394 582.3251 null]
+1915 0 obj <<
+/D [1909 0 R /XYZ 56.6929 211.7149 null]
>> endobj
-1873 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F21 938 0 R /F22 961 0 R >>
+1908 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1883 0 obj <<
-/Length 3404
+1919 0 obj <<
+/Length 2618
/Filter /FlateDecode
>>
stream
-xÚ¥ÙrãÆñ]_Á·@UË1æÀ1É“¼«µåÊj­\IÅöH‚"l  PZæëÓ×€ Åvv·TÓè鞣»§êI ÿõ$IUêŸdÞ©$ÖÉd¾¹Š'OÐ÷Í•ši š©¾~¼úê½Í&^ùÔ¤“Çå`¬\Åy®'‹£Tu #ÄÑÛ÷ïï¾ùááæ:sÑãÝÇûë©IâèýÝßoúæáæÇ›‡ë©Î½ýöæûÇÛîJeŒ¯ïîß1ÆsóÊ ·ïonïßÞ^ÿüøÝÕíc¿—á~ulq#¿]ýøs<YÀ¶¿»Š•õy2yXiïÍdså«gmÀ¬¯>]ý£pÐK¬còs&WIê2Y¦’yu^ž#†y4‰Vq§óNs­Ò4CíèTygl¯§Jñ
-8sÔ‹„‚¸eFe>ÉÎNýø ÔÀyžů`¬Ëùl¢2ãòÓý`D¾j`H/Ćn.‹ûŒÈ¥ÁsTl·tæ]‘P!s*¡Ìr¢oô$£8“°N°7@>U\
-0 Ž€¡(N«¨T 1fÎ4žŽy¹îºâ*e[ïZî³9(ÐÒ|¸2Î)SOåö×`>W&OC5%%ÍØi†Ñ˹·|L,Ò’è}˜lÉ“š=/¹•”ý#b ¢Ó‡“g2íÎÒœU(EÉÿL zJ‰}ÇÚ‹Ãr’䧀[ ù¬\ÏU‚™»)\‚ä›Y±; °&—œÔ˜<<±ïåÖ;(§\æÝ©ÁHÂï8ù– §Á1ÿrî2ì`/F‘]ÛqäAæ®!r+†Jã16õú€28 ÐÏ%ÀÕp[¼³¤ÙžŽ[*zCˆÜ´{*± ÷"UØ-m@ÊOk”öZ2Äy P—” ¦aç0^@lË9eŠgê$]|jÿêÕ”g˜I|avrLy2 AUÿ‰!…áÕt¼r»×Ò+ÃL,ä8M=‰h…¹æ¥µ¦¹Êœ þj^¥|UW]Ūfu!Àñ_
-ɦlMÊfBQ6 !-é-–K_ æÂ×›0PÁ4IZ}…¤j4ýþ'¸wt
- ·¸p¾¦ó¼ÚsÚýHÁѯ*M%]à‰$ ~‘
-vœ‚Ó{‹«£K äå{ùž¡»{á*èâ#åÛÙ¾Zw¸¸ÊR%èÈŒ¯:ŽÁ™ü¢S~t@QðÈöUÇat]Ñ¥ãÈ¡ÓY3±q¢ [ó"„uùDSSŒ#.DÇ0¼îó§G Ó&
-­ÜT'F‚³‰ÊZ²wŠ;I0&è9ŸŽ˜Uìe0Úï©wEÛí®!o˜wûÁ%܈#o¬)Æâ ‡z¢Ü×Eo?~xÃ]÷·TöÓW}|øC’â¾J¢b¼:h_ÈÒcb¹‰u€«g¬éŒÄ|½ÙwcæEÆ ™[ùy»®ætUcÈ«Í{‹ôÖ'ù`Þßäß–ó@œ÷h†èØý¯œ/´7§µ·Ñý¿Þ}üpsw¯ÍšEhÑ”BRãé$.gD-c-ìj˜ªüL²×<Ú˜
+xÚ¥]sÛ6òÝ¿BôLÄ€
+< c›Å(°0QíïJéo¤_)–÷ŒØ¶|þºÿ…g‹å’Ñ]çW®d»uåþ™¥‰~Sô’Cœ0·hfR3׋ÞmÐâhƒa·,zYVñ¤…õ»ã˜ëNñ"6F_EzD 2Š².·eã·*FuמóÄ^ümSlñöâ¡4©{3¯)ÂãY0
+>·,WÅP÷Xûý¾hº•_P8±2˜e9%œµ[`7‚]»Çû¤:H cÚ†G
+
+Éœ»‚ªf%éO¹8
+ˆž~ð¨#ãF»ûMWeÑc¼¯­“rl]2?9=
endobj
-1882 0 obj <<
+1918 0 obj <<
/Type /Page
-/Contents 1883 0 R
-/Resources 1881 0 R
+/Contents 1919 0 R
+/Resources 1917 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1864 0 R
-/Annots [ 1885 0 R ]
+/Parent 1916 0 R
>> endobj
-1885 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [251.8681 217.0669 347.399 229.8041]
-/Subtype /Link
-/A << /S /GoTo /D (root_delegation_only) >>
+1920 0 obj <<
+/D [1918 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1884 0 obj <<
-/D [1882 0 R /XYZ 56.6929 794.5015 null]
+1917 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-606 0 obj <<
-/D [1882 0 R /XYZ 56.6929 167.2075 null]
+1923 0 obj <<
+/Length 2502
+/Filter /FlateDecode
+>>
+stream
+xÚ¥]sÛÆñ]¿‚ÐŒ ã>p
+Òv¾+Wó¶;,QAïï´±¤@éÀ²ÑÞ€FS{ÂüÑÔ/•-cÚr[V~ÏÈ®a¤ïÙ™Ï|&x)»oµnªªy)ë'Æ¿Ïñ|p’¹RaÇšŽ´*v]ÙÔí_®ç&Ízîl¹ïpã,’Ãer~_U¯<_5õ·(ÒO‡ýµJƒ"‡äY°÷ mϬÝÆ×LÜí}ÝNe]ìEÀ5˜9Ö4k¶8³xyDn}Û¡P„Ûbÿ\ìÿ
+î¬tð²)j¦d!«Ã¾…‹1%žǺXmë÷¯L¹nD’?=?·ßÅ^nÇïÚúnµ)Z¾•ëc°'+O”À
+Úª]«€”ós¥”=¡›oQÕ~[ð•V™€æ ú:gà©:‚Ês–ܶE ìŠÑdCê¬^ü«pÚBØ‹gT"Ñ­yÌËõ[Æ"éuÇQºM³/QÏ£Êô ú"+¢åqåA…y8¥ó‘ÛÅ&·‹uFlˆ¹Ô®>—ž—QÓü
+"åL=["±µÂ„Ú½”¬u¨(X ¦{ÁEÓÐFYzª6¶Ùå†F…©Žb&TÕðëd]Í{ª‘èa&ê£B¬;„Pw8n}Ywð‡Z#|ÍcÙó£µjÖ<>|á‘Ü tÃR‡·DÎ5aKöEïì‡8À×FSøǘŢeœ®Ø×R”R<c!ªmÊÕ†)W?rY0¢-Šóʘü°Ýa¸›ðVVë j–­NSུl
+‰Å¤½1öu¾^Ø _2<‡³N9Ž #ízVÈ´)¼5²2]z0bI V%g4ÛZ%$º3[ƒ€¶Ì‹cÈ
+ÑzÒxÊApÊÁÿ}pfÐÆ iRä;Žìµ©ˆe-Í° 2Ù©¿?fc“‘Å)W&ç<ÊшⲊÖÀ”hçDáëXÕ LèäUª¶ ßµ¼os2Q ¸t|2®)]Fí®M÷`YêÔõÝ”´4S¯rÄ çÁó±°p1ч~³5oöÚxñVÇGÄ@G+®/O'Êž•9›¾¥ø3×)%÷{/†í*ÉO=n#äËbãŸË> ö̼Lé4ß,}5õàL6>w¨)}dÐLDÙ ·!@ÙÐ&™=u)ø-ßòÁÂ*pB¬¿¬½L;¸ŠYdßvœy¹kˆÜˆ£’¼)Ʀ®^qA„“"
+[0¨M@ÄF€‹@Ôa·<ñm Oj»’Š1äÔ•@£m88L7»bE•â™9É–ŸúøfÉ3®$¾³:9–<‰‚¤ªþ„Hax³Ü¨œDö­rGGabfrä\F*Ú`­yé­. «ûøN=¯†V¾¬Ë®äU±¹àü/dÓ¶&c3¡›DÈH¶AåÖW»ðçMäƒ.Iç£Y_TM–ßÿdWý7:
+endobj
+1922 0 obj <<
+/Type /Page
+/Contents 1923 0 R
+/Resources 1921 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1916 0 R
>> endobj
-1886 0 obj <<
-/D [1882 0 R /XYZ 56.6929 139.8789 null]
+1924 0 obj <<
+/D [1922 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1881 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R >>
+1921 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1890 0 obj <<
-/Length 2820
+1927 0 obj <<
+/Length 3024
/Filter /FlateDecode
>>
stream
-xÚµ[[sÛ6~÷¯Ð£<³Bp%€G7µ³î´v×Qv›>0k"‰ªHÇõþú= @ˆ$HÀ™j'“~<7|88
-iš-x³:ÊCÑYÏQûðøef—=>ár(׺¼:9gA 0I0¨TëDì=*eH Í‚&ÙÆLtABœmT„m-ê4N>DzAvS„Ç•{Ôˆö>Ùb¤Ãžús’Í;1äšDŠâi®ÁtÁƒ G¹æð C¹oçš4‹©Ìâ¡÷¨”!´8×°€ŒÈU‚kT„k-j0L‹2"€ VŒ¨~1 G· h‰!Ù÷,ø{tS!Ýœå’")31Í8HÐT Õs5ƸŸp:”ûfÆq,‘–‚Å£ïQ CBiQÆ iÊ)™XK»¨iÆyÔi¤êc¾¯¡š
-œF”ª¸ú4¢¾Ç7ÁÅšõõŸ“o]/ʳ etOòj¨{ ëyã[‹O8Ê}{†ÓI…Á÷¨”!´8ß`ž(‚«iá[‹:ÔóJä"dd.Au\»G¨ïó òã´¯ÿœ|;y1dE
-ƒæi¶pôÃe›Ã'\å~Gí+ ,ñØ{TÊ@Zœm†4ζ*¶e4ÚZÊíf5R½)D(åqõ5¢¿O7fvβoÀG¿Ÿ«lüsûñ $~Üì[GB£g»á´ßk 7(ûÝy@(B}…"ÇVt æëZ£U‹O¸Ê¥ìÃE“f0þ°‘ŒÆØ£†„Ò¢´âPÕ1&‹f5M+Nÿlñ_òãz³ÿ2´ƒbˆlã†xÔˆ%]ç)
-„vÝúÿä³CCš‰„Vd2·q†ÍÆU÷œŽÐãî‡rß^¹³Q<>•2$'!ÏLÀ+i!a‹²cV•S‡ J-ÍÊ=jD{oÈÔwR Ôßï·¯vªç»"ßYŸ·öûfŒoàŒ^[ðOžz@¹¤…lw­ÍáHÌa¿¶mOÔ Q?µÿ[î “1›/Ÿ¬*jÛ
-˜(“7äLõº¯ó¿lgà ó^q¬óÓ¼.w¶ÍmʪœA{Ÿ$åƒ\kó
-[ÅLF~’g e×¼Ôý›Ã'Üå¾}U…ݘ™ŽÇߣ†„Òâ¬ÃaÂ÷o]T„u-Êh\﫪X-àãkñj«4—CêÁöŸ©,a†GØÑ£°…™Áïržt7éÎÐP­˜œN{ÜÃØu}‰Ý½µø„ó¡Ü·PQ„¡öB J™1”eŸ”0i²Ä*ÛMs¯uõñuQ¯‹cñx,ª§±5–AÕîA¡úá
-Ë`§ÑUÂ81\_a§9%aŒ€iPUwˆ.¯w8ú‹+ì;4‹…݃V e³¬=Ƈ™Áؘ>øïŽÿöSœþÒ„CRSµÌl´)Lg”1\‹¡åþ¯.BÓÿã yendstream
+xÚ­]sÛ6òÝ¿BÓ—ÒˆÅ'?rsªã$î4vÏöÍtÚô¦(‹­Dª$eW÷ëo P˽K‰¹\,€Å~/h>aðO2™ªIœªP3®'ùúŒMaì÷4SG4R}wöí{OÒ0D4¹_ ÖJB–$|r?ÿ%¸ø8ûñþòö|*4 ¢ð|ª#|wuýŽ0)=.n®ß_}ø÷íì<VÁýÕÍ5¡o/ß_Þ^^_\žOy¢9Ìv…&¼¿úá’ ·³OŸf·ç¿Þvyߟex^Î$ä³_~e“9ûû3Ê4Ñ“gxa!OS1YŸ)-C­¤t˜ÕÙÝÙ¿ú£fªO~J$¡ŽR€$—¡*~y_ÚƒÁ¾I¦B¶rÎBÆe«'<dq”ôJQ| .ãPr.&±NÃH
+i´Òó²)òÅóí{!†Zda”Æ
+vAÂ[$<çI€ÄS‘êà?uU´FAF#„߶ŜÐ]M˜®ŸÊ¹%ɪö¹hÚCª?¶ESºŸ—EEèª6³§È!ðç S­…aj­€H¤íßÖ«mWÖážëíj~0¼]uô^Z’ëŸÞÝ|š]]ÓÛCQVà ݶ©Š9šd2¸©V; 44içHI+#%/[z¶Ûͦn:#$ Ø áŸÊâù<Ahuq ¼8 c©­.²Õª~ž¢¼v½é8L¢È’æYE«?´Ñc*À "ÆÝiÈK2Àk¬Äº¦¤ƒ0ÐH™/ ÌWeQu-½´EA@·,Z Zý†>y]-@žB!9´Áˬ%€ö‡#¶FPˆzw}wwy°¶Ã9™ÆÜÎùÌ4{wóOON˜¬š6»þÉkH½쾩+wœÒµ|¬Hmæ´A•Y»}h»²sˆ"+W+‚ê<ß6¡F"!¡ß£Úa•˜1EiŠ§á½Å"zÈjK¨@â †ý/h¥á9»`Œ¿]àJƒ_Lj·+¾è+S2~ˆ;ÎÙÌëê3câqë‚‚JDÑX·ÛØ GçôpF¾#STÙÚ˜AÊ‚ÏB¨ J@¤(»%’ÚÍb`de±ÀW—••ñqíÌsŠ\s¢[•GUÝ2CˆD°©ËÊ€œœP†DÌ‹ÖlN#Ù|nuŠzKN{Ákc[¯ýÊl­Ã4Ž!®ó0Vàû8ðÍp`€‡ÅA1 xÎè1T9= øÇ/Mà+Oá@ l¹˜CÆ3bT¡E,þ6¶á‡ 2Jø¡_oO¢£¥ ÿ+±ÌîI‚°H¯#Jé çˆ5ŽˆÀÝ&«ÊvI/hž-„¶Õƒ:¾†—w6Á ™%
+=$è =Ä#“ƒi R~Qå&T~¿”NfÊÃŽFÐ ~KmŒ×[Wõ[)¡i+¨—ƒß‹MG(¬á”Kíˆ ñ#jU׿o7„í2#pD“ÃÐr)»ÎÀ+¿!ÛUö„Æ ’V„q\˜
+cáZá 9çÁ$KŒ>Elk>˜føG”VJF&8¶·
+|3Z).×"JÂX³ÄƲ¦šç¶˜sÊmŠUÙ¸­õ`ÉC¼.¶ã¡P#¾bB®N]ái˜“®ü2k›÷ ÊWKÒ‹©¡uð±~.ž
+S¡ dâê|‰…)fæã#O¡« e,sò©TâàŒ‡¬C‚ˆ´´¬£òk:aN»)òr±£R@™êDª¾nP{ûŒ´Ï'”è}f™*¯OI¸ã§ÅБWçÀÙª6ý†‰i ’5ØsC µµQ㪡s ›½/k “0AWŸê0R\þKº/ö¤úlÈöú…ž”G¡LÒh¢bÆ,!‰Í‹Uñ˜a=­mÓ5ÎèŒCm’ZÕÞ/©@{ÚT[w‚gQ-( 涣Z FÆ»dÛeÝÖ.†™Ò,^-ˆÍylóÎU·žêcÆMžÃ>†ØÍ*ÌtohèúòÞùÔ;7·0ý…46«v„¦FŠ¶ôd¶a}½Z”O°…91㽡ûBj…ÅŸ›U™›œ£ /o[®‡Ø½Xì¨}R‚l û4e·#| ®a‰Ûø ú¡ð1Òç™Éeê lûx*ûö&$4i¡y]XJÍœÍÕ… jÇ sˆ O&ªâO#{N«yôÕ.÷Uj
+ݾ?X‚Ewlž˜)[ñ™Ñ#GLPaæ:k<D`év¥€Å¨êÀ‰bn¢¾°ÔÇÁCÆàq‚»K<h=9P†‰Š]e†‰½Ûs³‡)®Ô»ª Ø­
+ß}¯ŠAI}MˆÙè Å y ,]
+w)'خ閔³>ï/Í ýÞˆ2„ÜOV Zg¿Ùœbj¡… 5m1ˆF)X¤õ7T³çÈ
+fx‘˜aï mÑUwÈ
+©NÂ4Å2š²†6š=˜ÊsàSÖ”µ©lÐ wÐú¬[™gÐ*¡ ±î…:¢Ýšë^œn)€›†FYðHçØnù¦)Ñ´ìÊԌœ¶¦g]Á•ä䘈ù½Ø=ÛÎôõôùñÎç*TJ»^¨·G{»«êj·™Ù‚»²ó­EÑN³ÊUà‰FÅ!  >Aé¾Y›‹j1»Áób™Õ-ø:4 a˜]Ó<û士ózECù°ô1+UDJÞ
+hÃñÖ\ALb~zóžÊ³ý¡ÝF¡Š’Ñþwƒï(Ì‹6oÊÍþ{ÄÃcé¦1dT•|ÚŸbÜC¼‰û¦w\µágIh¬¢ƒƒž¨ÚzúWŽ|¼.9ßÍò¾:b t*ÒôÙ÷T¯1r´š·l#;1MɶÀ€èe[sDžïw‡–µXÂÕÉ{¢ã­íL‡2‚Ô?Üûï4³S_ e_rø¬ …Š÷¤‘YòÓÇ=Zõ¯›XŒ§G'…Þ½ÂÅx­“ö†^hDzóÚÓ¼l]–f¤hƒŽìK#%dÕ;÷4G[XWFÈ ¨öþ2ãJŽËž`´5^Å‘~Ù¾ ‹òÀžÿSæå¨Ow¼æ_6.Å 
endobj
-1889 0 obj <<
+1926 0 obj <<
/Type /Page
-/Contents 1890 0 R
-/Resources 1888 0 R
+/Contents 1927 0 R
+/Resources 1925 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1864 0 R
-/Annots [ 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R 1906 0 R 1907 0 R ]
+/Parent 1916 0 R
+/Annots [ 1929 0 R 1932 0 R 1933 0 R 1934 0 R ]
>> endobj
-1893 0 obj <<
+1929 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [280.2146 384.4392 375.7455 397.1764]
+/Subtype /Link
+/A << /S /GoTo /D (root_delegation_only) >>
+>> endobj
+1932 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [312.6233 664.9538 381.2953 677.0134]
+/Rect [312.6233 123.81 381.2953 135.8697]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1894 0 obj <<
+1933 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [310.4119 633.2165 379.0839 645.2761]
+/Rect [310.4119 92.6626 379.0839 104.7223]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1895 0 obj <<
+1934 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [340.2996 601.4792 408.9716 613.5388]
+/Rect [340.2996 61.5153 408.9716 73.5749]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1896 0 obj <<
+1928 0 obj <<
+/D [1926 0 R /XYZ 85.0394 794.5015 null]
+>> endobj
+606 0 obj <<
+/D [1926 0 R /XYZ 85.0394 335.882 null]
+>> endobj
+1930 0 obj <<
+/D [1926 0 R /XYZ 85.0394 308.9113 null]
+>> endobj
+610 0 obj <<
+/D [1926 0 R /XYZ 85.0394 182.7451 null]
+>> endobj
+1931 0 obj <<
+/D [1926 0 R /XYZ 85.0394 156.1927 null]
+>> endobj
+1925 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F55 1336 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1938 0 obj <<
+/Length 3198
+/Filter /FlateDecode
+>>
+stream
+xÚµ[[sÛ6~÷¯ðôeå™
+Å•
+¾`KxÁkN‹‘}•ïÒêh}í¬w¾ÚóÚ.5H"ð§Î(Xœun@Õ~{¨m)-Ž¶pó««X¯í8ÔuVÛ÷j¿„®-æ%ož&(Fa×EEr: ¦ÇxÃ\:¬9%*¹xçÌ+«Æ–v©3ï!ÙrE`ŽíèAÌù§?ö­‘KÊù"æM˜ËÂZ‹WY a"Ѹ‹¹½>²šÒü
+ÔbíjÚy
+4ŒMB¡ºa3VŸ?V3 þñ¤®-<Bˆ(N®ØMY8„ ó­€¾vˆµ¤É)òÙ°B ·Øh®»à B/<Ûà…º9<Ø’™uµÛ2ÞŸ¶Ý ÂC^6Ùnßmѳ+›`°Àæ>¾²õQçW62þ­ž²ÕóÒ«:ܳ rF¹GMhîÙ¡•²‘ú{y9DU·‹b®›L°omk gL›ŒM•¯×bcžOÒ
+V¯6²šaÉ[Ÿk[¨E“þe[Ûn^ʪ&ÍÚu¹³enÃwí¬)|,–0‡3ÍÆb
+ĸ›…_\*´PióSæ·h²jo3˜öâ U‹Ô5¦öǤµm©í#
+é_J!>ÿ Qtp#›Ü}·û®zh¾›¾~¦”¿~ö½‘Ǻ¿ÉúWdQÛr‘º;iFc±Üe»²:ÚGÛ ëåÃ6…³Pc;Kgí}é®ÐÁ$maeÖééÒ­mWîÔ4é³ë¤Á€NöÖgwËñÅ×t{°)yv¢ŠiØ—µù"•Ù¦|ckÓõ:7±=ÝÚú~@á‹u•»«dÐôdRØmõCfîȘºm^<Û{Ü𤴵.`qwÍüN{€,îÊ]6u' NO÷¥½Ò“ïYGºÕö°î(è®a È•›Xõp8­VP¶…¢ qÈÎ>§Žƒ«4èÜ 1Ì_ùLøçœûÛLtúK+.Sê\rL
+¤M¢Óe:BS¸dbDYB'lÿ ŽÜendstream
+endobj
+1937 0 obj <<
+/Type /Page
+/Contents 1938 0 R
+/Resources 1936 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1916 0 R
+/Annots [ 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R 1952 0 R 1953 0 R ]
+>> endobj
+1940 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [328.1051 569.7418 396.7771 581.8015]
+/Rect [299.7586 737.5313 368.4306 749.5909]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1897 0 obj <<
+1941 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [320.3548 538.0045 389.0268 550.0642]
+/Rect [292.0084 707.2808 360.6804 719.3404]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1898 0 obj <<
+1942 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.1386 506.2672 427.8106 518.3268]
+/Rect [330.7921 677.0302 399.4641 689.0899]
/Subtype /Link
/A << /S /GoTo /D (dynamic_update_policies) >>
>> endobj
-1899 0 obj <<
+1943 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [429.9426 474.5299 498.6146 486.5895]
+/Rect [401.5962 646.7797 470.2682 658.8394]
/Subtype /Link
/A << /S /GoTo /D (access_control) >>
>> endobj
-1900 0 obj <<
+1944 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [286.0435 295.6317 354.7155 307.6914]
+/Rect [257.6971 460.3869 326.3691 472.4465]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1901 0 obj <<
+1945 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [339.144 263.8944 407.816 275.954]
+/Rect [258.7928 430.1364 327.4648 442.196]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1902 0 obj <<
+1946 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [336.952 232.1571 405.624 244.2167]
+/Rect [310.7975 399.8859 379.4695 411.9455]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1903 0 obj <<
+1947 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [322.5463 200.4198 391.2183 212.4794]
+/Rect [308.6055 369.6354 377.2775 381.695]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1904 0 obj <<
+1948 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [331.4327 168.6824 400.1047 180.7421]
+/Rect [294.1999 339.3849 362.8719 351.4445]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1905 0 obj <<
+1949 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [361.2812 136.9451 429.9532 149.0047]
+/Rect [303.0862 309.1343 371.7582 321.194]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1906 0 obj <<
+1950 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [414.4213 105.2078 483.0933 117.2674]
+/Rect [332.9347 278.8838 401.6067 290.9435]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1907 0 obj <<
+1951 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [330.3165 73.4705 398.9885 85.5301]
+/Rect [359.5147 248.6333 420.7148 260.693]
/Subtype /Link
-/A << /S /GoTo /D (boolean_options) >>
+/A << /S /GoTo /D (options) >>
>> endobj
-1891 0 obj <<
-/D [1889 0 R /XYZ 85.0394 794.5015 null]
+1952 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [386.0748 218.3828 454.7468 230.4425]
+/Subtype /Link
+/A << /S /GoTo /D (boolean_options) >>
>> endobj
-610 0 obj <<
-/D [1889 0 R /XYZ 85.0394 725.3455 null]
+1953 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [301.97 188.1323 370.642 200.192]
+/Subtype /Link
+/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1892 0 obj <<
-/D [1889 0 R /XYZ 85.0394 697.9265 null]
+1939 0 obj <<
+/D [1937 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1888 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R >>
+1936 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1910 0 obj <<
-/Length 2986
+1956 0 obj <<
+/Length 3103
/Filter /FlateDecode
>>
stream
-xÚµZ[Û6~Ÿ_aô¥ æò"ÞÓî$;Å6éN¦Øš>ȶ<Q#K®%w:ýõ{x“u¥Z4E˜"ÎÏ…²Âð¬¸@BS½’:A¾Úoðê ÖÞÜO³ D›.Õ×7ÿxÍäJ#-¨X=:¼ÂJ‘Õãþǵ@ݼþæÝÛ×÷o~xxu+“õãý»··Êñúõý¿ïÜèÍëï¾{õp»!Š“õ7ÿzõýã݃[žÇ×÷oÿéf´û™aúp÷úîáîí7w·?=~{s÷ØÚÒµ—`f ùåæÇŸðjf{ƒÓŠ¯žá#¢5]oÎO 3ÅÍû›ÿ´ ;«öÕ)ÿ%\!N±Ú°)?íe‚$!@$¹F‚QÖz™’)/*ãå}ڤ۴Άæj8cɪËr$8M¦ÁÄI"û’ߟ²]~x¹Óðºù˜Á€éuórÊÜTup¿­†n½r³[Ou©³½ª³#©›êœ—O]Æ0ø½*= ÃРBáõc[7×WUQTÏ=àœ37Æ„S¤9 †Þ8!a
-µ[A²Þg‡ôR4î€`Á“¨xEŒ`éÁóÅyÛ|11ª‘RR{ª¯ ?pÖ_Þ’uíÆeÚä¿zñy¹9fÇêüâö›m‘î>m÷4õ–!³±,È-¿žÉ†¬Ê‚œªq0Òb }5é'ï¤Þ†Nzë¸×ðdýkZ\Œ
-ŸÄúcî2"9S@erÙº‘©`LO¹¾?øÕÌÓ‡qÚ
-/ô]ªÈÁ TF"TéÏéy?j7¢”ó¸Ü@4!·ø¢X¨¾Üw4Œñõ1KK(î—Âçôƒ›÷·Bå@í¦R÷ã”·•ª/[ŒÛÌŸØ?N€7$±Å[ØêÑþ@Ü”ÄÙ
-ÇÉÜ¥ÐâxY­ŠEU}‚äô®Üâ!Í w)¤>ÂéŸÁôИŠJ87çÛÞPIüù–xdœYtQŸ²¦i_)+7™–õ³+}L­)…iCŠi$”bÞºÐzLxÁöÂÁ ÏÕ¥ðòSÓ’yÜLY¦¢3SÁÖ¶ÊÍ…€D%EX‰¤_ðC •ígÑŸHƒ E—jý-UýÆ¿Ãøƒ¡ªÁ
-bœé¸ô@4!}xA‹öÅÿ÷VS[¨.ÜщEˆ™q-¬)·`àkëp…d¬ÇÍj™37eÔY‚ÁbVê«bC[TOnåæøçêr†.†$LbZx®v×Íäþä;¯ì ºIi ì€‚Wö´…÷ÿ{ý€ÜзäÂÝEÂDþTº [Š”E@Œ›lYí
-ˆ‡ñ3Ó¥š?3-UïÌ4ÇÓÆ»sÔÁ*á J´TZôƒº@ŠŠíÙqáÇG‘r_íìeJ(¸«N‡.®wâÊ\è¼¾o¸Ÿ#Õóž†RW,äÌ+MÄËŽÆâÇCvxM ‘2eBDb IìUŠP›Kt%¾ò…†
-GÑÎýœjOÑ—µ{tï
-´ÃÊ–ö×gØ}VšÎ sß*Òçj³Œy=¬|ÏÉ°·B.ä@E,µ\ÎÎœ[þH©>™P…jóqcx2]d0™ÉÂÄßûuû5ÓÍîÒm¸à
-íè ’Hˆ$èpLkS‘NÞ¢èk‚7ao‚—†|#ƒ¦ua.î&ìá’Yèè9øb¨Ó5[p‡*á@åìümãQ³©óßÇQ‚1„ù‚hBþU„B˜_z|ž[¯);â¥BŠ39{ÿÅ`C
-1†Êü5 êh<œ¢6_¢Úz}*-spéÍÊŽ|Áú×?B
-u %º -Õ‚cnq&æ_±v¨" T1÷eÃv:1_­U\l šÛµT™¾ “¾ØÏ·«òÃ]†ÊKˆÈWw*‘¤àô®ê±¯î~ÁÖ1ß?ñÕ=A V:îó–jI‘·8¼°FË…{]ª¼Õu‡Ì‡ÍtüÉPÄ5Uqé-Õ„øþ]˜D\&¤/ÿóäסÑ& j,æÑ'…H™ô ¡-Ð/˜<æ;‹6>.79ôPFßR-h2æ…›”ˆJ±pÛ!Šüåª'êìRSmê*ƒÍ|uOXTvK4Þ‡šFRqÙ“þY‘vµa ZJ)‰@M¤•ŽQ¤yò¸Á#®8ª`ÀÙ9Ý“Ä5ð™FW¸jãÈüõ„,øïoEÿòßj_ÿÚP¦ÔÜ•
-%
-˜x¥ŒâZŒÏ†ÒXÐ Õÿ#¦ Èendstream
+xÚµ[[sÛ6~÷¯ÐÛÊ3–¸nêtÝÙM»Ž;»3m‰²ÙФ*JqÝ_¿Wñ
+¶Û4™ !ð#Îß9¸¯2ø‹WŠ£Œj¶’š!ža¾Ú>_e«Gx÷õö˜M
+¯v?¬ßüã滇Ûûë áÙZ ë ÙúË»w_¹ío¾}÷öîëïïo®%[?Ü}ûÎUßß¾½½¿}÷æözƒÇð=ñ-Ì|ðö®ôõýÍ¿þusýÓÃ7W·Ñ–®½8£Æ_®~ø)[íÀìo®2Dµâ«ø‘!¬5Y=_1Ng”†šêêýÕ¿cƒ·öÓ)ÿ1®'L¬6
+“^ÎPÆÁkÉ0¢Tèèe‚§¼PÆË»2¯Î‡¡±3¤±$«n‹#¹5!˜tc¬‘2&ö$¿/
+çðÓ“/ìŠv{,§²©]E³7Š ÌÐe„iP¡¯ÿ@(%ˆ
+é`e=4‘ˆ 1©eÏD÷òø¸r…ûŽ±¿`ì¸]gìöb–!#U¢D"Ìõ‚×#jA‘qkF4âµ'ÄbO°†uP †”í¡¢*scý¦©«×Õ¸@Zé´ü
+âÆŒÅiJ”Ç|q½¡™4ÁQ{Õ‚F¼“õRV•7¢j½æ
+Ó4Ð$Ó(ÓJ™0Ešsb[=¯±Zù©Ø9.æ­{–{ÿ<ù§¯÷ ›RÒ~wº~=ø6ÊYŽz¨Iûá¾Í?ü v—XB¦cŠ®NQ¾—¿é~0ææ¸]£Õ±iN›†!PBö4Q4¢&ôèç‡akÉ°<C\ñ…°ì¢æÃ2¢ŒÄ}s|É»‘û F\bQ’{”&qc\Oô·–7”òõs‘×eý¸?Wæ7³,4õ–ë¦à¸n^=¦šªÜ=œþ†Í»âØ:LU¶';Ì3ôã±(‡dÎw1z{ØE),±}‚Æk³ÍÏmáeE«¦ù#Ó»q/÷yY¹0$#L1î‡a¾?Gˆ
+Ž¨ ÉýäD!0=ñsâHûöù¹:¹Z¯ÛßZ÷ÓñÀó°–ÒÊÎHìÓ»»¢6빌ûÅ"¼éµjGóyxkè>'ã¥<=ù$&H­û18Æ°ÀÅaV†¦\¢1,o‡ê…­,kžÂHWqf»Í?TEŒìñpŽ™DB°ÐüsÞšIêäΊ¾Œú& N´¥dß`N[ÁšoÊIš”_Vϱ™€v^p»¨›ÊÙùëƳfÓ–¿“†Àˆe„¥5ˆ¨ ú[QEU_‡?·¦b-ˆ—
+&­TÎîŠQNãé›X}Gü‚ÙãvgwŲ¡N h‚ñhAQ[ÉÅ7ÿRŽß]Ô<ç"*ô”þì ?f•ÏÅfj3D™XciM"jB•÷äLª¾.Ÿ{s Ô€…•2ÁA¥ÓŠôŒNq0àÌ·;ÇA9¢ 7C=èœì‡ˆZPdÜZš…BBTd ™¯‹J°0 &û¬ÜUÓ,„°äB§5‰¨ Uú,4;"¦ºº|žÓ€”ECRH
+{PØß´'è¶öTnÇW`ÑN̶EJzÅ÷ˆÌÍ ¡yOþÝ~âúš†à¦êÿº¼nÇ?Ù /P¾\ZûX‡p·ÎœûWe½7wJ<y¡Â1Û^ƒ+ÛË=8+H™Ë.Û'W»ÍëxÎ>wççC±st—©,\9èsNÜ—‘ˆ)&—žé1§1¿ØXð"Ë¢k.—f)§ _)^¦; yʵÉi`Vˆùnw,Ú¶ó†8l®ú¦Tˆ ±ý#næ$¼§„»FTÿNQ¡çá…õývãïaªÎ=L,™ÀÜSØŒ ?ý ¨°ùjî¾sOc¬ |{©Ë@Üñ |‚ª_Îi|VÙ˜[NxŸ?í“¿Ť#<ÛÂÞeÂu8Ô8QÛó±-?ݪ¶©ÎžçLzkYˆ&üJsŸs}ã^Õ\<N¯®èÍd¢Û‚u”âÀe~LÚ‘Çœ¹;pÔ¹mjCÜÇs÷nLdm~(~u¥wïý{Sßž~ú«¥m³-/WMí=:Sºñt÷´¿?¡‘ ò‡íŽÌmù âÁ?ßúRþå,0‰¨Rdf¾“1D©ÆA)ã0œ&Yœ*Ä‘ºÿŒ7t’endstream
endobj
-1909 0 obj <<
+1955 0 obj <<
/Type /Page
-/Contents 1910 0 R
-/Resources 1908 0 R
+/Contents 1956 0 R
+/Resources 1954 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1922 0 R
-/Annots [ 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R ]
+/Parent 1916 0 R
+/Annots [ 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R 1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R ]
>> endobj
-1912 0 obj <<
+1958 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [231.137 624.1678 299.809 636.2275]
+/Rect [259.4835 737.5313 328.1555 749.5909]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1913 0 obj <<
+1959 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [143.8055 560.4651 239.3365 572.2657]
+/Rect [172.152 677.1897 267.6829 688.9903]
/Subtype /Link
/A << /S /GoTo /D (root_delegation_only) >>
>> endobj
-1914 0 obj <<
+1960 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [324.1075 296.9881 397.7608 309.0477]
+/Rect [352.4539 423.7962 426.1073 435.8558]
/Subtype /Link
/A << /S /GoTo /D (server_resource_limits) >>
>> endobj
-1915 0 obj <<
+1961 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.1555 265.057 427.8275 277.1166]
+/Rect [387.5019 393.5457 456.1739 405.6053]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1916 0 obj <<
+1962 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [353.6164 233.1259 422.2884 245.1855]
+/Rect [381.9629 363.2952 450.6349 375.3548]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1917 0 obj <<
+1963 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [370.2338 201.1948 438.9058 213.2544]
+/Rect [398.5803 333.0447 467.2523 345.1043]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1918 0 obj <<
+1964 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [364.6948 169.2637 433.3668 181.3234]
+/Rect [393.0412 302.7942 461.7132 314.8538]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1919 0 obj <<
+1965 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [226.7331 137.3326 295.4051 149.3923]
+/Rect [255.0796 272.5437 323.7516 284.6033]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1920 0 obj <<
+1966 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [283.1811 105.4015 356.8344 117.4612]
+/Rect [311.5276 242.2932 385.1809 254.3528]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1921 0 obj <<
+1967 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [287.6042 73.4705 356.2762 85.5301]
+/Rect [315.9507 212.0427 384.6227 224.1023]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1911 0 obj <<
-/D [1909 0 R /XYZ 56.6929 794.5015 null]
+1957 0 obj <<
+/D [1955 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1908 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F41 1218 0 R >>
+1954 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F48 1253 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1925 0 obj <<
-/Length 2961
+1970 0 obj <<
+/Length 2798
/Filter /FlateDecode
>>
stream
-xÚÅZKs#·¾ëWèHU-a¼ßäµäÈ•¬­r²}‘Ci²$Gæ++¿>Ýh`8/½åMÅ[.`€ÐÝøºñ”¸äðO\ºŒqåõ¥õše\d—‹Í¿|‚¾.D”™'¡y[껇‹on•½ôÌi.V­¹ãΉˇå/³÷»þùáæþj.3>3ìjž>ûîîÃ÷Ôâ©xÿÓ‡Û»þu}eõìáî§Ô|s{sóáýÍÕ\¸LÀxg81àöîï7Tûáþúÿ¸¾¿úíáÇ‹›‡Æ–¶½‚+4ä÷‹_~ã—K0ûÇ Î”wÙå+|p&¼——› )–i¥RËúâãÅ?› [½aè˜ÿtæX&µ¹œ+Íœ9F½ÌÏÀks›yf”T—¥ór’B/¿?o}c…€a”jÏ8X·‘YX¶”wÞuW¾Û‚¿aâ–BͽƒÒ‰Ùþ¹¬©¥zÙ—U”{Ícc¹ÝÛe±Ä¯l¶ªvÔ\¿‹rõVnŸè;§ \— ªÿ§Ú4
-mMÍðÏÅ®ü•s¹ÈKV+’®Ë§m>G'Ñšy­ZÏ|–É`Ëþ°»nV †5¤òû?Þ¼§:Ît–¤G}}.¢ðþ9赜&£u•/Ó¸Uè¨6ôµ,ëO
-†Òëëë•—36ˆ0 °Pš»ÿžÊÇrO•€Ieô¸>„C¬•ÛrùbÌ”~úxÒg›âAŽµ”À)*â‰ßŠá8ì›”º€9y"k/˜õ*›>‘ÛR§OäFªú„•„CÈÁ­kRƒFjD….„SÛhÛÕNc—Íöi¬LBttNcìI§±¤Ó[K
-Û±˜:wO—T¹oÙÞÈŸ±}8/Ù¾8Z‰¿È ÃDÖ× ÷fÓ»ÐHÑd8jr€˜äÐg
-‚)£}W‰¿>ßßÀ”Þú¼®š#À¢¨…ìZ;¼$Æîá¼_
-|IþŒåÃyOÏŽeaaÕô$¡3j æšž7Œ uw-¡Ó°KB'6jþÙŒ1=kä´ÐP‹>ϳZuÕøŸ¡.ÓçzšI¡&€‡9/B-K&©^Ÿ¶|0ëŸGâÌ7r’™Ö¡?Ó$äLÆ”<ƒ¸£ÌÄ  ®•¯÷ó?“éŒe.sS$‘]°I`õÀ$Z*|¬MÒ,ͽš
+xÚÅ[[sÛ6~÷¯Ð£<¡¸“È[š:Ýt¶I×ñ>5} %*æ®.®HÙqýžƒ EèLÙv:
+"ëòðPZ²‹bµ:”u]Öþ¥îdeQ&ܽ´¿oªýî•£¹+]e½ßlöÕî‹WÅuí*Õfãj·Yíšò°+6›'÷<œ5âÈ.í…qó\‚£1¹–Ig1@´šÒù‡O®ìõŒLQüæWœf½÷;÷üãjñ² &‘ö¹ßÜ•5LˆÈÄÜù½ÜÛrU»Æµº‡î”áó±Fqa­ÙwmÔû̓eWlKoê¸[Á";øí–V… Â*¨ÛP…èWfÜNp#r·Ä­ ©Ä­02›ÎªdAO¶î½*«ËZ
+Wüy,O®ºÞ{0î¥ÇÇÇKÃç$ÚbpûBHzìú'WÞV«XQ
+-Çù8!b­ÚUMU4å˜+žõñPW^¯íÔQ÷~kánÄJ]†ºU•^õ¸,Xv6±ítë}Á(z2’1¦gZ`ÇØ™hç@‹.Ê;6rZ´¨ÁÞwZ
+]õ3ÎHÎrÞçðqg §Í¶,v<ÖG\#”6\¶*…Ti2…•¼¹ÃЋ­®¤VcPlªºqûµkYí·Fl {š]·o²3b'bj'œåÙPè…ÕZ>/–¡bÅÍ‹cs·?TÈÖnAè
+öìƒJ¯Ílàô„íGE 5p…jPpnC)Úèìú•7¿wåûß<½ÕbLæ+ÿfmËõüñ®ÜšÁiš ù‘Ëj$´Á’r)[TY®¼U»  ô»j§]Òénœ»œ«0g0‚òù Úÿ-¼òêã=DŠm¹kŠklV»”Șöby}\.Á J[††9ÇêöˆB²{_¹õ¨Âõñ6h q±t#6ª/¡ ÷a=`ƒWTPø!«úÕØ*ÚEòýÔdW6>nbÀFíPåe Ž­¯]Y¸¢¯HêÓ6Ç ‚YE£»:„çÓ6"›¶E GfˆQq`YàÄhãæTÖ¹/—f¨gì°3§Ý¶Éf(%*ã"NgÚ6ªæ$ç”E© u·ÇÆÙwô4ŸÈƒìÞslõINǧÃÿ”Ë&xrûäÔÈ´€ô•Ë¾Û<ê” §ãæ¾8Ô~VÛiìä‚pf@¡çýlï›'Wu{mDÅ&¿} É¹ïZ½ Ìôó3ågäøBoq_~uM˜{aËõµ{vG¶Ñ¿Õ_^îwÚh†æ3¼“‹KFm..²l<G¸<”q.Ž­…ï-œ•¾â³Ü'âXó GtÏb=XC»ÕX¦èÞá#² p"?§œp­Ô7)Z ©ÿŸÉ9Ó’Hgž›fó™úém½çÚžD®»¹6ÏXœkcc›kãCoàÙåÚX³ÇUkÃçÚØÎ D»\ÛÂï|w?Æg,Äx̯­ÌÝ°m¢ÍA™¨ó`dD_!±å&$ÚÜäîdÊB¢U·ùM–N´ñ]¿kêO°Ì&ÚXÚD1.ѦæéòiÓk‹í'Ôg3îpbÛ ^®3R$6!t†´ZH~~ç!ÐeGÂgGð⪓ù¡Ýq&í]içj6}¡>šò¦ŠÚ(‚!Ùßî[‰aë@¬Ý£µoî±9{!Îh ’‚.êü… EYMU_ŦZUÍÓÂîxŠn2#R²,M£EðèÝ
+'ŽïOe9_«²^ªûÓy¸_„N“Êeûiãœ7
+rWÞ¿Uí† %Hžµ®'®óðeæ*××[ü„ë±]çûòä%~σëSCN’+¢Ä„h‚Gd iœDúŒj=!¾*!¾€
+Ëÿáp±Û¯F®£"'Td<M¡Epè O
+BY®ú$þžòòŽò"W†ŸañE«ÕÕ E€ëy›R]ÀOøÛýÕQM2ÈdÓ+Т&˜ÄÖÒ€Òù„îN „ì<h¸TXÍñ0"=Yö)-(fѤkFÝ£ñòºë;3ä@ÉÔyíe’äF‹®»)éxÚñÈê7Oj¢TÆ’óß‚Ò4"[iÕQ Íš]•Ð]@ תyº/ãhGI.%O3hQ#z »>çp©èqxyÕO†>€,ì8%:‡ëC׋”â~ÂíØîó57t"$5éhQSL"kIÙq»W
+b»Ï£ù0‘^Š
endobj
-1924 0 obj <<
+1969 0 obj <<
/Type /Page
-/Contents 1925 0 R
-/Resources 1923 0 R
+/Contents 1970 0 R
+/Resources 1968 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1922 0 R
-/Annots [ 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R ]
+/Parent 1984 0 R
+/Annots [ 1972 0 R 1973 0 R 1974 0 R 1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R 1981 0 R 1982 0 R 1983 0 R ]
>> endobj
-1927 0 obj <<
+1972 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.2254 245.6678 454.8788 257.7275]
+/Rect [352.879 390.8395 426.5323 402.8991]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1928 0 obj <<
+1973 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [362.4163 214.9757 436.0696 227.0354]
+/Rect [334.0699 360.9009 407.7232 372.9605]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1929 0 obj <<
+1974 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [402.2465 184.2837 475.8998 196.3433]
+/Rect [373.9 330.9624 447.5533 343.022]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1930 0 obj <<
+1975 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [348.0303 153.5916 421.6837 165.6512]
+/Rect [319.6839 301.0238 393.3372 313.0834]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1931 0 obj <<
+1976 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [335.4973 122.8995 404.1693 134.9591]
+/Rect [307.1508 271.0852 375.8228 283.1449]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1932 0 obj <<
+1977 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [363.1733 92.2074 431.8453 104.267]
+/Rect [334.8268 241.1467 403.4988 253.2063]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1933 0 obj <<
+1978 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [365.365 61.5153 434.037 73.5749]
+/Rect [337.0185 211.2081 405.6905 223.2677]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1926 0 obj <<
-/D [1924 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-1923 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F41 1218 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-1936 0 obj <<
-/Length 3435
-/Filter /FlateDecode
->>
-stream
-xÚµ[Ýsã6Ï_‘·:3k?Eª}Ún³{é´Û^6}¹¶Z[‰uµ¥Ô’“æþúøeÑ’©Ìto:[Q$Ä
-û8ÃôöúýõíõÇw×W¿ß}q}têK GEþ¼øõwr¹µ¿¿ /´¼|†’Ñ¢`—» !y&ç¾g{ñéâ_á`Ô|:µ~BêL2‘ÃJrà‘ŸYeš)JH šqr\dF§Ùá—Û~Ùï˦»¯öWT/–]{دªåS~ª>¸(äå`Ž‘ h, HBA+ΉŽDùTUÖýÆ5ÖU·Ú×}Ý6¶£½G©NÔ*TF˜(@€y…Nä(ŠŒ
-Åܧusª3Ï%,Ù@NÐÆŽí.mãv } Ok?âjµ_õDäÓ<S§òÎ2®
-Õùy*
-Åãé¿Œû)q2wÎ2Máè=5Vp`Çu¤hj~Fç1ßWCË"?ÅÓk¨fsK£M’LH¥gÐ6 J ÍS 5uÜr’i)Òx¢ "Àq™i.y,ÁÿpÓ§¬ý%=9ðÖ°@…ŽtM¹7O?£ö˜ïë1§ŽO/ šdÄ-9›*0ksªæ<θ«›å¾ºßWÝfÙ×»ê]„]ù×d·¡î÷/cZß9Ž—h–“\¤UT:ÄqRžI­T¬„--l±Á;Æ0%Í©ŽK@,Ðψ8æA …q£rdnÀÆ i{{ªIÆÜ’“ºÈtÁÓG˜'2{û¯{ëÜïÛÝr]ßã Ä?U³ªºq8Ç2¢OʈÆÂÄ 8%)óHƒ¶-Rx.b¤àȤƒ£„f²Þ_Íé4Î)Ïç@[:T;™S8òôŒ¸F8DU=Ç9…‚@ê¤QZŠ/‹Apbñ‘äcÛ“”½µ gl8ÏA`ˆÑ1ªÊ
-)Ùk[ :«tÈïve×C,>6‡ŒA枬lÖœh4Ê›µÛ–OSá•É©B$¿Ú´5Êe<giw'-œš®÷©¬·åç­ë/û“#ù¿mãZÛê©Úf°Šôìž
-Ú¹scH•ØÕž
-õø£zµÞšÚýËTd,•HÏî‰&f#c–I J4ý—ÉÉFJœFÆ*ª‘1di¢‰¡
-ÉÈØÑÏè<æ{&JÇÅXkQ<½òjFŒ1·ôùA1¤™;?ŽD ¤9"³õ}»\7]W­Æ0#<9s OÁŒJЕåÑÜÿ†[•ƒ«ZµÍo„°‡ƒÝ²kÛ{ßîmcýÒ”»ze_¾ûø ¼Ë‹í)·]k[‡®²~S;Ö­?|°·õlÛgÛ|*÷/uó`9n¯è7}g_-ÆÁ¢òNcLj+·+{”
-R}º~gÛ
-©›þ}3Y¥Â¨›Õö°6ÚÇV{úÜ>™\©ÅçCoGíŽ0-ÓÒXÃ|±þÏ¡ëc>Ô¨û•ë `fÄ"ÁX$șĸLÆÝjS­[/J¹ZµÆìk³»¢o£)™aý•ë«wnWõ%`¬´oÅtÕ8ñDœaª)Ðjr6¨óäËý„O>åŠZ{-AÚ‡ªAqôTL dµ Guž(-† :+8
-’ˆ ¾§ÉUDi9F¼Pœ4³x»h¦eì—ï ºK¸ÈrÕ*v ðÅ9· 3&5›w ’d’žïªgÖMLÏ)œ…Ôg;Èk=Ø¡C˜lÍÞ·m¹¶-롱eôvgßz¯¿=…uÞΓÚbfÐ8î¡Î—¸kAO
-eͫ}
-Hˆ!‰µNåûž~Fÿ1ßW{@¡(äè\§ ¨æq;[_ƒ:SV.2Á•
-?`e:WKJY|çëƨÂ/¦piÛ?·ÛzUOÞ&Ü,Ç;¹û«ÈÍXáÑÛ½)Ÿ ¹èŸ[Û]nÁÓ4%f¹¶cñ{»î싉êáù°/›¾¾¢ §@Çj[Û| _,Р±¯6½ëkíDG ³¡Ž/¶ Û ÉAœ©Ìs£7¾fzZp7ÉÍËñS·´
-üøÙÔ¸°/ì=ÃÈÒLfò/VðÅ[ûaW¹ïpµð¹¿Ò‹Ã¶:šHáo´ãä%.ä¢{ÄË©U²Vë73σû$ ©ÊVæ
-á»îڔ̀‡
-ö·®o]5uåúŽ@èì -k µIà¡Çw×{ÑÞŽ‡t}vóû+£ —d<ŽRŽ96¹ÒCæÐ[ƒˆ}݃”ˆü‚-nîí€+OªK„—€Zå3Ð?U×ÛA³+<ãÎ>ýÕ~ɲ/c"ú-L=Ìtk ðÖ>,§Û»O7Üqõ!èÀ)ˆIo'6ö¿9Ù2n^â͆ø¾üT6q©j]õhÔÆ{¦þÂbuü³ˆ‰³þ9sýí¿¾8þiŠP×úÜWà˜8¡p =ŽE!mà9›ýR†K‰endstream
-endobj
-1935 0 obj <<
-/Type /Page
-/Contents 1936 0 R
-/Resources 1934 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 1922 0 R
-/Annots [ 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R ]
->> endobj
-1938 0 obj <<
+1979 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [364.6945 737.4993 433.3665 749.559]
+/Rect [364.6945 181.2695 433.3665 193.3292]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1939 0 obj <<
+1980 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [374.6372 707.2169 443.3092 719.2766]
+/Rect [374.6372 151.331 443.3092 163.3906]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1940 0 obj <<
+1981 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [292.0276 676.9345 360.6996 688.9942]
+/Rect [292.0276 121.3924 360.6996 133.4521]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1941 0 obj <<
+1982 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [319.7036 646.6521 388.3756 658.7117]
+/Rect [319.7036 91.4538 388.3756 103.5135]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
-1942 0 obj <<
+1983 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [460.1655 616.3697 533.2211 628.4293]
+/Rect [460.1655 61.5153 533.2211 73.5749]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1943 0 obj <<
+1971 0 obj <<
+/D [1969 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1968 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+1987 0 obj <<
+/Length 3618
+/Filter /FlateDecode
+>>
+stream
+xÚ­]sã¶ñÝ¿Bo‘gN,¾ ¦O—‹ïêLã¤>gÚi’Z¢-ö$Ò);ίï.€ø%É3Éx<K`¿±» Ÿ1øã3«&35K3•hÆõl¹½`³G˜ûtÁ=Î" -ºXßÜ]üí£LgY’afwµl¬峻ÕÏóÿxÿãÝÕíåBh67ÉåB6ÿæúæ[‚dôóᇛן~º}™ªùÝõ7¾½úxu{uóáêrÁ­æð¾ð+yáãõ?¯hôéöý÷ß¿¿½üõ«»ÈK—_Î$2òÛÅÏ¿²Ù
+Øþî‚%2³zö,áY&fÛ ¥e¢•”²¹ø|ñ¯¸`gÖ½:%?¥m¢…2³…I&¬˜–2K˜©-RÅJ¥,ø””J¹üýawÉí|ñ°«·‹Uù€Å®¨–E3”‡”`鬻шœˆ5AèЊI}z>ÅåB=o×n æ«¢Yîʧ¶¬+š©®sœÁ"™B"ÞÄÖ€–,KW2¼] 9 %R1Ýãœ&w3ÜvdñÏÈ`¼. ay`M—›„IR€FÈÓʈXg¯†„€Ï­æ¿0Ínê6j&oI5¨£±*RÍÜÀžœ'™Öâ­*Q¶«’4±©ðÙæM[ì&'A~Ú´¼ZM¬Ä3ÀIƒr›Mþ\L­$™Zã±–ëºDº\HÈá=Tuë¡Ïy¹Éï7ž{°3\üQW~´)ž‹MR)1¸®4à§ý»‹uÜ¿#òñ¥xYïÀ êÝëÈŸ•†¨ÂÔéí#ÖÄþ=Ö,É·}œC÷äÒshL:4¨Ÿ P#›fc°·‘ <ž÷_!eÁNº,œò߀†çñº=ÿ¥£ ýwDå‰Éà<)úˆuŽŒÑjä½Ç¬Íd‰¶YzÆÚ:X'¬-`9ÿÛ·õbU5M±ÙxjÊR{zóˆ5±{ÏÖ”LŒÍxûÿ‚ÇËJY˺ú…1ñ¸'×]ô¡ÞÑ`õZåÛrIßÞ|Ɔ(óJ|ÓÔ4Ú7 Úué—®ÃY„Ð:¼°©_høœï^Ëê‘VÜ\ò9:Cdé W™¤Jò yÞ6o‘*´ êóÕƒùÓ`›Wùc±-ªB³äl~·.ºÁ©©Ú5=ùǧºiÊ®š¢mÌæë ßcxˆƒd#¥å’˜ýû„Z›€>´÷§b·-Û†ÞÜÈ‹ ÷ýîŸVyë„KW+µöÓEqô°ßl^i–øZ4åcÞ|YHzGOñuÐߎdˆëJM³Q>¨e½ÝÆ“¤”àUÓ„]µòºBB]ë+xrV7uö(8ë0cb¿ªÜ*ðl£«FöQV-üOiS$Ãø!ÉYnö+Ç<¼HÌ ° ûú¹x‡ãt~¿oi–üÁ‚‘æNîÕÿöMÛ_‡;n¿òÀhÊ‚‘!8…DzzqaSˆy³\«ý&’/—µÓúÊùb´uoKá–þÊÃÊmÄÛm&–Óæ2MQŒâ1dÚFA ×pð€œÅ¹"à/º/LDæѺÈ$©l?Rd§’%!Æk{43¼€u†%ÓD¤)ïSâí¼·-¤oR þVQDüsŒÖíˆÂ…£mqTÒ³4Uú´,"ÖRÆ«!)¸oB¶©à\·Â¢Å³´TœˆF+nÓ~„€7ŽEmåù¹•YXw™C\k&¶—ʉèâ¸Öj*Յ㇉°˜ó# qSç+Q°Æ¥ìõ–žÚÀ?G)÷N–Ò%fnÒÅð.Ï3ô`àKÂîç—3!S†ÑKÙ®iñi$ÆøÂÃMÆc Ùz.¦‚&7L^¨6Œc5¢F@™äæmIyöX©ß ¥²žFLÔˆé!j„ —s«A ¥ÓO{=á`¨'„ÑY«¡vðŽ;K€{¨Ï
+;•B"ÉÎt ;HÇ˺€äœì,ß,(Q_@:µ®WãÖ @Ñ«“$D¤1 ýÆ`Šã´G„¯íxÆ&j;„:ÁA¬íðÁÕv8pµ\E‡ªèp*:­é”Ð<>ñïW‹B˜-R° nÒaý ±£o üz¢iDR÷=§ýö¾Ø÷¼òù‡÷=OòyrÐÁnÿ} E(±SûÄÙt¬ +†™é^+7`±×:in)(1v®X,GdÆ1n`è’1—O=SŽ/ &Šà^¬
+ Ç8¿"ôõaðÓÍõp¤ð@\®ñàT
+ø¤óª‡Çq
+®}tQý›œD@²èùuòº†Ã!E'vH«c‡.CÒz¿¡ÌÒÎBÝï·O4EIª Iªã'µ ¡¸iÌ™˜Ó#Æ
+»ú´à#Ö9:F«LÀE
+XœéÓ¦ÖÅ:njëpŠiï¦X@Ú¸¥£ªgqZ€æ$k‚
+1èÎÜ#㯹Í;ÂÌð6',Õ' OCuÉ»';¶„~†ïѪG O§P=k}Në !ãÕN[œÄ63òŒåu°NX^Àê5h—û]±€Šµ¬h<¤D0žHÄO“±&hé²/È™ hùkÞIŽF ¼ê¨*)–1ÛcúT³<àŸa¼î› Ê0'ƒ²ù¤"Ö9BF«½¢Rb¥DÞ$~ÚÊCT$SØ’+Îä¡:G~ò%5Ž¬7岜L÷ µ:áÂPmå?SÆ}?Íþé©Þ¹+(yàKMà|Q¦Ê±;L
+$оÜät{ÏÒùK½ûÒÐr^4ØקYwïƒÜã¸ä›™ù1™¨Ÿñi´ry4ü¢E&4¼né×™•G{T4 ÆEWÒ2ª‰æ½oïn˦‰þNµø¡åîû«×©ÞO¿ß‘ÜMÆtéP‚úG´‚wé¼ÝH˜±Cµð,#}¢›@`ØÖ¡œÂjö.@ŠeE¾ ¤¥ÊgC€ÚÝ÷ãË/®Ý†°èznýî’n3ìÖ,D&çïéEßæsÍ ÷»»„"nS4D­ÿÑ
+òq–eo>Õ¸9B½ókØç¾8ö½ºÔx±5•¿ôŸþ–ýð¡¿Jií±a˜J¤Ìx
+âLŽ¿õ°‰¶P"Œiÿ?
+endobj
+1986 0 obj <<
+/Type /Page
+/Contents 1987 0 R
+/Resources 1985 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 1984 0 R
+/Annots [ 1989 0 R 1990 0 R 1991 0 R 1992 0 R 1993 0 R 1994 0 R 1995 0 R ]
+>> endobj
+1989 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [368.9978 586.0873 438.8121 598.1469]
+/Rect [397.3443 737.7676 467.1586 749.8272]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1944 0 obj <<
+1990 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.1435 543.8497 354.3435 555.9093]
+/Rect [321.49 695.7982 382.69 707.8579]
/Subtype /Link
/A << /S /GoTo /D (options) >>
>> endobj
-1945 0 obj <<
+1991 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [329.3035 441.0473 407.7186 453.1069]
+/Rect [357.6499 593.8005 436.0651 605.8602]
/Subtype /Link
/A << /S /GoTo /D (man.dnssec-keygen) >>
>> endobj
-1946 0 obj <<
+1992 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [427.0093 441.0473 505.4243 453.1069]
+/Rect [455.3558 593.8005 533.7708 605.8602]
/Subtype /Link
/A << /S /GoTo /D (man.dnssec-settime) >>
>> endobj
-1947 0 obj <<
+1993 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [288.6803 278.469 357.3523 290.5287]
+/Rect [317.0267 306.119 385.6987 318.1786]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1948 0 obj <<
+1994 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [328.5503 248.1866 402.2036 260.2462]
+/Rect [356.8967 276.1048 430.5501 288.1644]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
-1949 0 obj <<
+1995 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [403.748 217.9042 472.42 229.9638]
+/Rect [432.0945 246.0906 500.7665 258.1503]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
-1937 0 obj <<
-/D [1935 0 R /XYZ 56.6929 794.5015 null]
+1988 0 obj <<
+/D [1986 0 R /XYZ 85.0394 794.5015 null]
>> endobj
614 0 obj <<
-/D [1935 0 R /XYZ 56.6929 202.79 null]
+/D [1986 0 R /XYZ 85.0394 231.6054 null]
>> endobj
-1327 0 obj <<
-/D [1935 0 R /XYZ 56.6929 177.4286 null]
+1342 0 obj <<
+/D [1986 0 R /XYZ 85.0394 206.638 null]
>> endobj
-1934 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R /F55 1321 0 R >>
+1985 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F48 1253 0 R /F55 1336 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1952 0 obj <<
-/Length 3565
+1998 0 obj <<
+/Length 3395
/Filter /FlateDecode
>>
stream
-xÚ­ZÝsÛ6÷_áéËÉ3ƒO¼¾œ›:iÚKr—ø¦sÓö’h›‰TD*Žïã¿]ì‚%ÊvšŽFC
-1ZŠ=Ë&W£|Y—(!õ(Lžå#|e*¨D¦'åçbUÕ^¡¡â›Ûê¦ö
-¯©­ êªlÛâ¦üWf¢ÍÖ¯c^R·b±àuµÔ¡â9ê¦c•R:Éñ
-ú”‹Ä¤
-ëe1|w£ü£’,Ës’¦Ò*1@v D Œç ž¸é¶è¨D“[Õ÷bÀàn\@qá—f¶â»{j^”×Åvé‘ͪ]obŽÊ‹Ö $Ë-UPgŸŠÍ³Í¶~æeüŒ…“ k‡ò–Ö&FfŠÇžï8õ²0toO¯üµ~±äÙò-¿‚®zµ›.u‹5j÷ÂÂ_Žè‰Ë›fÇaEÕ@é‡×ϧï¸P6ž´J'³m×ÓhK*~*–Û’GôÆÉGø?[–=~D«à#hÅø×y"l@Y–á¸æ݈ \ˆÔô‚<$i’ÜÉ’^Ž‡H,œš`F±AÂÎÛÌÒ±Žñ˜'»#H>C{NR`”參>•KX§• àÄ¥&
-=cÁ)€
-;[•‡•À^óKÕ‡r§Gö6–5Zƃ½ü/=eÍÛ0E¥
-»ªãvÔËî~]Rí—]#•~´cÇ6¼xT . ïí¥i´z¨x.[Žµ8 –ª’Û
- Þ(RêQvµm»h÷6%RÔG6æjL·óX5]¤¬ËuÚi²?àÐRP<’ż—E8ì¼i6«Ä9c»Žl Ë`’ë½W½EóCb¾ð>r¬)d
-"[äžù¿¥Ø‰Í'–#ó‰Ààâ3Zþ]ÁNÛO—ÿ¤Rù9¸RXó0ŒSÌÐÏóƒ¤Øç
-† OcÙÝ6 *WXšqðýòýû)êGÒ!?EÐ
-&:Mr£˜^M¹Û*™ÛÉOåfF©¨¦¥°ôõ¼Zc¤ƒU”'>û2!s›÷[j.BlïbœsY’æ"ÄößÀb7A/Y4«¢ª¿‹é„¢y:Hð(VùÀÈ!¢ˆ uˆN{qR‡~YjBÇkpŒ5œ˜2‰q&j
-"K‡'ækgÊýbÄy„Þc8#“ìéÌ=f=e"JYOPùˆTHÁ=.ú>©5ÎB-Ø/?wå¦.–G×™öîÐÞ·b6ƒIt•ÊÄj¡žòõ6.ÉD¶÷õÁïÁ<£ÐQhœ
-D®`$ÿ\é Ç—Ÿ‹y7åVãÝo¹*0ÀWê ð!¾é-¬ôy ¬PbGg|…ŒMaò}{VöÉK
-îà 2YSº`ˆ2¤Ý.g[we¨±m;´P
-&V;C}Ìf€ãÑ›±8PÕËàešâNí6âë6ÕH 炾˜?T_$œe‘ÛÇôE割R?j ‡JsÅ—
-Içaú/þŠöæR!2Nò HsvT…¤‰PÚ<¦B<f#±cúcÒèê+¡±­VÕA¨ÐM½o Ú Ûi¥Â D¹îèݨaïŠ[‚*ŽÝX…ÌøÜjTÌ3PÔªõº¹K–*ŸÂlcZ|Õç[0éhú¯)Æòô8ÀéÏÐN¹»;&ñ»¶'~Ù’&.ï/®£O„p.ˆ‡Ëbƒˆž Ú›Ù§j>àEÏòýï%:ñ*dYfq¼@íŒúüó }J‚M,Z|yWÍ11 5_=`cYãÕ~K£ŽÜãÒ=¯±œ~´”ã´Ã|ï¡ü2
+xÚµZÝsÛ6÷_á¹—“g,†ø$x}97uÒ´×ä.ñMç¦í-Ñ6/©ˆTœÜÇÿ~»ØJ”í6½É8ÁÅb±Xüö§)ü§Æ&6—ùi–ëĤœ.V'éé-|{y"˜fˆæ1Õ×W'Ï^¨ì4Or+íéÕMÄË%©sâôjùÓÌ&29éìù›×/^½üûÛ‹³LÏ®^½y}6—&½xõ—Kj½|{ñÃoÏæÂ1{þíÅ_¯.ßÒ'Ë<¾~õúêÉéq„éÛË—o/_?¿<ûå껓˫a-ñzEªp!N~ú%=]²¿;I•;sz/i"ò\ž®N´Q‰ÑJ…žúäÝÉ߆ÑW?tR"M¤²rBRN)Ðä‰URy®7gÂÍÊ®lzP‚ʲÙÕ]‰Ë‚Á"ì™
+ÃÚ®—E_Î×m]->3u<•5I–g9Sw=¯`Ð^&gmSÆ–š•ŸŠUÕ”õ÷0±ïîªÛ¦Ü0ñ õôº*»®¸-¿‚7§£íÖ¯cQY±\òº:"¨xŽ¦íQÜÓ¹*ÉQßs!’Üé%¥Auù±@u a
+Y’+é<(‡hP€”س +s¾,NSÙ”Ë Eæyâ´OW¤Ë¤fêÍ™›mkžûþ®ZÜQsQ4Ô¸æoÝ}Õ/î`~ÿÖòWèä¤8Ù®VE3%§”:É´rÇ=«<M´+gÒ‰¬ÛEQ5±à—ÚÜ0?06™ç³w^Ъ¹…WP—Tä Ÿ×,ôì– /UCÏ‚ÿjþ°(¶˜Ñá*Df©u°Ä¦X ›˦T"¬Í˜ªo‰ëm f«MzõîÕKjÁŒ]$~_~f²fIu],‚Üý¤üh$uyNÚ”J&Ú 16Hâxåe‚gQ×í=wÝ=µhr#*Ú­@Æ Tžq¡`f“~ý™º—åM±­ûsæ¨I8jW¬Z=2,O”Á@ž},6Ï6Ûæ™×ñ3VN‚¢ê[“h‘I{¾“ÔëB+°=5Ö„_£©ßCly±|ÏÏ`«ÞìæËeÓáõ{åaÃ/
+G LŠú¶ÝÀqXÑkàôíÏçᄑƂLJÚÙõ¶xt%5?õ¶äE€d¿hTÛívS\×å€Ñéà#hÒ°Ø={Uy’š€²¬Ã9HÍ»1 ¾Õƒ"Yê$wb‚¥×ã!C—&N ÓOcƒ€7™>ä j’1OvG°]÷@Ü“¥×墯>–5¬Óˆ„H⬶c
+H×/Öó®¬o¦ Q$JŠLó’™@bûVe–%³K¢¼kïË´ŽÇQ^H‹›eÁN2ZPvL²‚xÄc'~}FN2QwŸBê%J ;Þ<F‘Ó
+"ôç4ŽÝ:Š1>.£Inö>qò͈ù©‡ôc1ÆW¼-©…NÅ¢èÌ÷ø-E"öžØŽ¼'€ËOð[Á1Û÷—ÿ Vù)DRøæa§¸Æ0Ïé¾ð\pø¦d¶Ý]±;(hÉ„ýùÑS®tlø†ÊÃçðyÄVÇlyxÇ@æa %kÐ*º=vÌFŠ×ò5EžÕ¨`ì‚òXcЯ·(ËŠ— )Ò(w»v”ËYSÞ¶}žÆ²¿k—Ô&©°u͹÷Ëwïæh_œH‡ò 4Á ¬:ÆM9+˜a|èéRzuà4Ån«Dnfß—›kªDµõ€§oÕ|E}âsA
+—z÷~GÝEHí]Œs.Klž†Ôþ°ØÍŸ1ÜK–íª¨š?L¥ô)d¢¹Õw$›|äQ5¤†*$§ƒ:¹]fu °ÇXÃu)h§³½J
+:p»4Žü"ªXù: Q4€jºþ'd¦Dçc_èüæõ»iV¬l]4ˆ¸žŒç!>ı›ËBÝ€òÙa–Õ¶î«u eÍTÆMX÷Õ¤n!Šv(Â> \“&JˆåŽ¸“¾¾¼ ‡ç¶E=òød$»LÃz,d¾â¹ùÄ
+‚ÆžL•š2På¹÷›ksÔïª$Û%Bç¼l1 e‚UwŒ‘‰ÓJ<•É´½æ¥O”U ár6*x©Üìª+ãšMrŠHÄøf&QÙ°ÉÓ‡ ô­­vO0„™Ý3.ÉfMæƆ7öóq<ñã™óÔ,Û{þÒrî6F®]šYÔœ-z§³ZX!æ—ë²n›Û! —˜lPë OcPökRrÌØŠžT
+œÊ+N¤âÎ#Å6¼„À{¢ãV†:ƒ>ddùOfÅà5U ×Yâdš=Y¨éDKÓ¿† –G~ËI<`„‹ûò…=Ž3i{®3 ‘íEå_‚8£Jî¯FœGø=†3"Éž.ÜiÖS6!âô`’õ“X…
+ÜãªjZà¬!ÕrAüòS_nš¢>ºN;„C{7Å"ï ÿJg­Só”»b¥]’¥ÙÞ]ñoÁ:£ÐQ h\
+¼¸FŒY͇EÍ¥‰Q©n¢GJÄœ\ƒe–%i&BHpý¹TÁŠ/?‹~Îù«Â‹ßrU`&€å-ë þ÷i!~B-|ªøBe•ñý1v…É÷«ër¨\Rj·—É—ÒíBTíwÛ¦/›P==Û¡’0±Ü¹écÂŽÁ‰Åizl\Ú€Ç9(8Ú†/ÛZ4"•:÷ÿ±ù>b-oi…}ÔŽmæŠ/
endobj
-1951 0 obj <<
+1997 0 obj <<
/Type /Page
-/Contents 1952 0 R
-/Resources 1950 0 R
+/Contents 1998 0 R
+/Resources 1996 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1922 0 R
+/Parent 1984 0 R
>> endobj
-1953 0 obj <<
-/D [1951 0 R /XYZ 85.0394 794.5015 null]
+1999 0 obj <<
+/D [1997 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1954 0 obj <<
-/D [1951 0 R /XYZ 85.0394 273.8839 null]
+2000 0 obj <<
+/D [1997 0 R /XYZ 56.6929 297.7942 null]
>> endobj
-1955 0 obj <<
-/D [1951 0 R /XYZ 85.0394 261.9287 null]
+2001 0 obj <<
+/D [1997 0 R /XYZ 56.6929 285.8391 null]
>> endobj
-1950 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F53 1313 0 R /F48 1238 0 R >>
+1996 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F53 1328 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1958 0 obj <<
-/Length 2360
+2004 0 obj <<
+/Length 2363
/Filter /FlateDecode
>>
stream
-xÚÕZKsã6¾ûWð°i+‚ñ&x[elÏ:Éx¼Š·öÍ’èk$Réqüï· R”DùQÖTeËUÐh¼¿¯»JDþDd,³‰L¢8ÑÌpa¢ÙêŒG_ îã™:£FiÔÕúñîìüJÅQÂ+mtwßéË1îæ¿ ,“l=ðÁ‡Ï7W×ÿ=c=¸»þ|3IÃW׿\RîãdüéÓx2 gÄàÃ?Ç·w—ª²¡¯o.H’Pr¤ÓÉåÕåäòæÃåð÷»ŸÎ.ïÚµt×+¸Â…üqöÛï<šÃ²:ãL%ÎDPàL$‰ŒVgÚ(f´RdyöëÙ¿Ú;µ¾ißþi.˜FE#! gÝñqi ㆬSÌ:»?ìHð„Aop(Öi¦„ŽÛCÑ¢s(B¦]Å&aVIå¥Ê–÷¸3çWRvtcΩptTº[äœE6C7xXfX°ƒUZÏY¨y\dåêE¨/ÒUF¢i–_Hø°ž§u6'ùNØfcÂæ°Ä韕E5()©å=¥Aùü
-ör;m›0)D¦Ï¡]^?õ¬ÏÆu¢‚â9—ÙrŽÈRVÛ×µŽaótÓÂ/í°[3¡’Ý^i¾y˜þ¥(7CáÙü¿ZXºf{ÞYõô¡†Ö ªEùà;ü4ÔO•~‡1—V”öï‹Ðœ°zÍÆhœÃþÆX£·³+ èãq³è#xIÀ¶Y¥h·±~Zã´ =Òr°*«š$Uvÿ°$) ¥érY>z@‘NÈÊAY„ž¾fO$Yg›>L2•ƒ­,1U–? GZx,ÓEÈP· ½ðÛÝ­
-'uÛ¾»JG'!•ÔC1(); ¢‡5È<S`ó·GP)„ËÝ+Œˆm˜ñH˜òÂ8aÌjÍrä¾Îƒêð¼Ë·x,ÖJûþþÞ{ä`g¸Ñ-Ñ’ exZmN«:ÛäÕW ’䡦ös³´ÊؾíÖØ6#êZ¼÷YQ¥Sà«`ÞŠ%‚ë7tI-Ô3†Ùr¦¹VÏf–h+Z"UÓWÚf ±µÍ°ñƒFXå«|™nH`ï9OT9ù<¥e:±ýÈþœe뚨iM½Ãlçå*Í‹0tyß3š·ÿ­æ"¸‚8˪¤œç ¤Á­<ƒ”μïX÷‘¢NŠ…;­_
-sÆè‘’ÀR÷âûôHÁ\Y,ŸÂ Ìøš>ÌŒ„Ô,‰Íž‹|ª\„ñ[ļ'Û8LÀƱyK¤×´8
-[ `íó8‘£M²Ñ«jô†`ÏÅj Ãé¥_³ O)ùÏÐ0Øóò±"•U:[äEFµëM^Ìòuº¤"šýU:ê ð°Ñßþ1¹ÿò‰<$ÜC˜µí 9x«‚²^ŸtÓbN²6AãÞXdU¿eI
-ˆÄŒ¢íŸ‘ÇO—+ªî D~Äíl°ü6f WÎñun‡Áh3Þ¯”rÍz”Š)(Q1Å{ª “çTð|…tÇ[cè;}ëÞHao2ÏG
-JˆƒØøaºP|¼÷“œ”1 “–/¸`ca
-àéZÆ4öéÿ6J
-¢’¼Tzh@Ú` ²ž*¨TiXš5¥ä
-^ZRÚóëß³@¼êIãň8ÜÓ¼BXfý(&æÞm™ƒB
-)Ý^œk<szÆ?r•²ˆQûª€ûM4êàó´4:©ãÁù
-kÍ 4⎙XQÄÿu35oq=pYí„(¾XäóiHÎ6Sº¦•MU 8_ÚR©ÉH¬Ü3ÏC›.œTÄ#ÌlÙ‰·wr?˜  C¤R~ˆa0¿àD~çÖÐõŠjº®Ç5®Çu]Ó‡u¯qh8÷³Ç¿ƒ
- {l8Øc;~ t£Øõ;=»½Áõ±GÆÝ{ÄéØÓ…å_˜=*‰¡5áNÃâ$N:ìy£úÎ’ߟB¢yû Ì‘ „Ì‘RLeoä†Õo$Cä&»³èv¼QÏêvn&2¶—OFóÇBëcC'éQË Ÿz†kž;ö|O1"Eé“ó© ÔSñI¨„Inìú MÌqFûfø‘àyF)—0.%ªž­_çŽÆ$|›n¢ÿPíÂEÅ‹ô[F¹iFÏß]Àì[žRæîÃ-e¼K@%Ï ”<.òÙ‚²Gž «Z¥nþY‘¼^¾¡pOü]Q‰ÐÁQ^äužÖ­Úõ-¥é|NÈ­*ä…ç¶-èÞôú”ñÅÅ„'·ÃDÆá¦(½¾µÝ*ø×Íjβ
+xÚÕZMsã6½ûWè°i+Âààm{ÖIÆãU¼µ‡l”DX#‘ŠHã¿Ýh¢dʲ˚ªl¹ÊßÀ{¯ Ä€ÃŸxøJôÀ%š.Ì`¶:ãƒ/÷ñLÄ2ã¦Ð¸[êÇÛ³w—Ê –Xi·w¶<ãÞ‹Áíü·áûžßÜ^LFciøвÑØX>üñêúYz¼ÿ|}yõñß“ó‘ÓÃÛ«Ï×dž\\^L.®ß_ŒÆÂõelá@…Ë«_.(õqrþéÓùdôûíOg·í\ºó\áDþ8ûíw>˜Ã´:ãL%Þ à…3‘$r°:ÓF1£•j,˳_ÏþÕ6ØÉ UûÖOsÁ„4j0ñÖî—úàÐoLzŬ·ûÝŽ…rL›b½fJh×nŠMZ1¯”8“0«¤
+»ReË;\šw—Rv
+;Ω°{,t»È+XøÄ 7#?¼_føb‡«´ž-²˜ó°È
+JÕ‹˜_¤«ŒLÓ,/¾ñ~=OëlNö°Œú„Õa‰12t>+‹:+j(¤¤–wôŒ…ß]Âbn‡m&…pqØùêåõcÏüŒ`\'*ü/ç2[ÎQJÂlûšÖ°Ê^75ÂÔž6+*Ùm•Æ›Çñç_Šr3~˜Í³…©kæ±åYOïk¨`Í°Z”÷¡HO3|Òä)3¬0¦ÒŠžýë"4gÆ
+œŒ[±DpýŠ&©†zF™-gškuD™­3,ÑV´Lªî§/g ®°gXùac¬òU¾L7d´÷l(tª¼|žÀÒ2ØF@²?gÙº¦êEZSë0Úy¹Jó"v]Þõô&„Çõ­^D_Ð"gY•”
+„gô+Ï@¥³oÛ×}¨¨“BEáJëcH1À{e|»†9úePQ\n¡‚/±…
+¾ôCâ9côQ¨$0×=¨„6T0UËÇØi4!§4c!5KœÙs’Ï`•‹Ø ™—e»§Â (¡sæ5Á^Sã NŒ³Ì  í H'Éôª¿"ÞóNmqâl_ú5‹ö”ÿš=/**²Jg‹¼È(w½É‹Y¾N—ôŠÊ¿Jǽ1VúÛ?&ç¿|"g`
+w)ABm[E+º4†ÂdJ‹9ÙÚ{‘¨~Ë6!’‰!EÛ8#Ÿ.W”Ý 2 ùy0·CÁ—è·1I¨jʞ䶌6~}¬”o棔£ D9Š÷T&Ïé%°ž;ÞÀ… µ{#…½Á<)(!žÄƇèÒâÛÀ½Ï—ä¤| KZsÁÆÂÀÓµ|iäéÿ4J
+"’¼ƒT°lÀ³$W° p¥¡–¬éIú¿ÏŸ²H›tÈ‚o,˜h‡¬%=¦`º#þ=ijž4þi§ǃZ(g…ÉЋqQíý–:h¤˜Òïº&P§§ÿg)‹ µ/Š¸_Å£@OË£“úø kŽñˆ{fœ¢˜ÿëfj^ãyà¸Ú QÂ[¤QH§ñùs¶™ÒA­l²ZÄ…·-—z ŒÌZÀIó]¬Ó%’—Šˆ„‰-=ñü’_P2¢‹ —z
+7Þ~|¥ƒâp"kf¼LN OÙœTñŠb{DA!˜–aëR¿J‘•10ÆÏÉP›LkR6ônÆB%• ÞÛ›HO)/-Épƒ ;ŠlVtúDi+¸°”q wq`*²ú¡Ü|%s8‘ƒñ@­Y¹‰r¼.‹yü˜åAN¿i*Îû#üFÄY{ü c t=+æ¾ëÛÇ›-*pý+™p„øüp}þ邲&“*««ÝšÓ^çTêrOÝiˆÀUÈ“%;¬ã’sf¹'ÔqyJxÛkyrLÇ…‡øÉqRGòHeÝwÐñnÓÏè¸0Šéä»è¸x£Žw÷æ/®ãþ’«*NZÐq¿=¡ØgÿG'¼Eç›â²ýýlûÎLJ½V\3ˆÆÄ@†máž
+nöwÍÀ®ÁB¸¦Xgìÿm¯³ºendstream
endobj
-1957 0 obj <<
+2003 0 obj <<
/Type /Page
-/Contents 1958 0 R
-/Resources 1956 0 R
+/Contents 2004 0 R
+/Resources 2002 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1922 0 R
+/Parent 1984 0 R
>> endobj
-1959 0 obj <<
-/D [1957 0 R /XYZ 56.6929 794.5015 null]
+2005 0 obj <<
+/D [2003 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1956 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F53 1313 0 R /F62 1361 0 R >>
-/XObject << /Im2 1350 0 R >>
+2002 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F53 1328 0 R /F62 1379 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1962 0 obj <<
-/Length 2898
+2008 0 obj <<
+/Length 2887
/Filter /FlateDecode
>>
stream
-xÚÅZKsÜ6¾ëWÌ‘ªò xñ•=9Š”(IÉÞѤvó:P$¤a… É‘¬üúíFR¢,;>lé@ Ñ
-ýCKæÖt´ü°3ž–—}Ù6Ôkoiøag€£#"L‡@!<-j -ÁÒ–ÇÅ­ ä}îÊ{ÓPó°/²ÁP¥°\nlÔ황ۆÙø|‡-ʪÃ4¨A¨¶€6x!JŠ´¼­ëCSæÙP6wDz(‡1 ~&­NmT7ö{“¯çûQà”¿s.A­ëXª lè‹KY=ƒ—õ ®“rí­Q¦ÊáqÁ !„…”Â1Ú ªâÍé:Ñ‚¤Ä=nÛ®Îjãùðû°+ó6%
-Nv 8P<WÒïRjÚwæœè¸B¹m«6Ϫ¯Ž¡B–DaèØöèïù$œ#šûüa*ÐYºS‘K
-Ò!KãqÒK+§Lˆ(òZû„NãÐVìÁºhèƒÔŒº?_]þwíô¢R–@èÏôR´u†6Ô: ú6ÿÓ ÆR®À!?;t$y3T§Bˆ
--Í;Ö·-&
-kÛt–XRTeš;<û²8$ñG¶~n{RÀuy×LOÙªj ö®Ë&C‡²ýÐ~b^AÖ_’ñ“Øž½wí¡Ë×ÊŠ¢3}ÿ™’mÐ_–Î9<îÍg®õ£yü²Cþxþ µ†öOã¼Ê™ñ…uÿ‰Q÷ZÐ
-¿*0x~µ>bß×À4ΉyüLÿ³Y^ð0‚ðšÀM¦ üW<b‰LŸè8ª“7ÏÛW
-:„E•$ \º»P%5ò¬·±èïœ –
-$ÖY᧶D)Leürt<•¸äž»tÛ»ÑÐZI—ŸÝ’€Ž,YÊ)|Üœ¹$wtE º©+ز|çK·²FÈ7Ðí6acõ*4Sr#"Çj²‚¢àˆ˜:…Âá׶q»_”•9Nõ§°SgQ,Æ©L¸ÉSO ébµ¯Æ× ÞÆIúŸ/V}úsï&À][/äCBŽ\=-ࡲ„y"ȱTAçN¢ "­ÞŒiä¸i©àhP»*L‚[ê×4¾¹8#2ZÚ-R˜>ïÊÓÓUî¶òmÈÙ‘j ÷­o»tp\9wÜ›‰ãj³!c'>½¥{ÆØWépo!c+¡œ/ ­tc‡ÞŒª§kjCT’&ì7Uéë8±׎ d FV<HoÌ-±Ù¸­vÙ½[þÆx¨övÉf Ïz{—õ¾250{ÿöy| Œo¯®Ùè
-³? êYA#Àx©g2=y÷\¯H¢aHÓb.‰»tfÛª®x~ª*Fþ×x¶î‹ªÐOe
-y 
-”UÅÈõŠ$ÏWCI\¡¥d2„3+!¶þj²ª,ÿèdS¼ãÓäx±Lp™»Æ¾~zÄñÇ¡¡Ž¹þÕš“ØüôÚç¥Áp'"|Á"ã/8v)%ò‡ÆÇ4%N(%â£)ž–€ît| ŸcŠÍÆ¿xP}hŠ—¦ò~™Žoô~ÿY¿Œ¹ÿ—ÕÊSúýãµÊiÅÓ—@…Á[T_¦É‹Ø- D´¾±ï,0࣠éò10«ÊÞy»4òظ˜‘Qè <Qä_³ëìiàÌ‹šXj¢‚/SëÑR:†œÊ£ÏX’f|ä'ÌH2žèWýŸ ªÈÕ5ÛŸð 1åÎçcPgY›5\—"XWå½#Z]Ç^×q¾ÎˆB•’Ž/.@öÄŒºJ:ƒ©X~g£ùš—ÍuhJ›Tüö`­¦°7¿öõKǶïÊ:ëJûºÝCoãÌP‘l½³€}à¨8)‚jà´¡&!C¸r¾€dUˆI ‡ÝýÅ4âAÕZ$YJ‹øujܘ%Èb·-<à¸m§9Ç?Rö»öPsPR”}ž9€ú§žxË—9 æœÅ2Âì±(„Koáæä«W3þ§þ³Àñ&@ •$ò\Ä5\Á©À>q-ûöËų{_%,LdìÙ&²ÿΞk‹endstream
+xÚÅZKsä6¾ûWôQ®šføÒ+{š8vâlÊ“mwj7¯ƒ,ÑnUôèHj{¼¿~‚TK¶lÏd[S5AüÀ¶Xqø'VaÄ¢T¦«8Õ,ä"\åõ _ÝAßw'Âɬ½Ðz*õÍöä« ¯R–F2Zmo's%Œ'‰Xm‹ß‚ˆ)v
+3ðà×Wç§kòàâòG „Ò¡ ξÿÓö|C‘ýæòê[â¤ô9ûpuqùÝÏ›÷§±¶—®ˆ½9¿8ßœ_Ÿþ±ýáä|;ª<Ý–à
+õýëä·?øª€Ýýp™J“põ
+sk:š~ØÏË˾ljµ·Ôý°3 цÃ
+d•j ”`iÓãäVQŠ‰Œ>wå½iˆ<ì‹l0D£VÊõ²­"3uÛ0»Ÿ¯°E]u˜5(Õ@Cœ¢¦ÈËÛº>4ež esG¬‡rØ‘ÐàGÒìD£¹±³ß›|=_ÎMù;ç̺Ž¥
+ʆ¾8•µ3ÙÑÎ9)×Þeaš¡†ŒK)œ ] *Þ®-HK\ã¶íêl ÷‡ß‡]™ï”¨8ùA$@ñÜH¿K©iÝYlbÜ
+å–­Ú<«¾^؆
+Y…¡Ûg`¿ç[°WÁµß¬ú‡©À`éNE,H‡,¹|cf<gQä­þ ÅVíÁ†hè ƒÜŒš?_]þgíì¢R–ÀÉŸÙ¥hë }¨uômþ§ Ñ¥\B~vèHóf¨O…lI§±Ýµ–5«lþS@´ Œ¡yû}Û tŸFSmò]Ö”}Í`E±ßó×ÁôÎ/´=&ök×âxN°5F2Й3»mô° ¤Â ½Ç“;›ãh%¾l<‚dwH{,‡ì®Ëjפ£eOóÎëÛ€=|ÔÄþz!1âhnœŸºvhóöq€Þ”Š°ÑêÜÒè+MäÍã`úwäðùŒ´¡Æ m÷çQ˜¨¶+L÷Žè¼N·MaýbIç‰%CU¦¹Ã½/«C¿²ôsß“®Ë»fºËæPUkðw]6”íè‡ì{Tó
+²þ’ŽŸ<Áöì'×Ѻ|q®¬(:Ó÷Ÿ©ÙãeiŸÃãÞ|æ\ÿ4_¶ÉžÿBÔÐþi\T97¾0ïßqêâZ Àù;ƒ§­ðÇT†ß}†χȓä(”t2æ]{F¡A‡ŽòÀ¾*MOtN#{'»Üèf™íùÜC×´1
+Å–.ðJÇí`sØáµH”!oïñ¢FÆ5p¸×´nØce€PA=ã0Èb®”æ«ÛT—¹¬XúoÏžÂ^ÆL‹4^M±âP¥¦
+Ø€û6ß×C†›/c>æf?{³¹¾üîÑW׎¸þð~dŸ¹‰š‚F#K-óÓ”n™ày†šëÆc~F±ã‘:Ðd° âxÖòêPP€Ä[ï¯~!Øe6Aã;MR·SàGÆÛm%›âÈRï–N¾ƒÙÛqèXZ ¤gw,J2¦j†úGÁU;¸>—&@
+?´%Na*㧣í©Ä%÷Ü¥ÛÞõö€ÖJºüì’Ì°gÉSÎà3àæbÈ%¹c(â¡Û¸‘Šѹ‚-Ëw¾t+ûa„|sÝ*à6V¯B3¥#‰‘c±YA%þâ
+K„_ÛÆ­~QVæ8ÔïÂUœE±‡2áO#1¤‹Õ>Rp\ t,ü~§é¿w¾XõêϽ
+*<yXñ ¿14Åfã–Úe÷núã¢ÚÛ%›%<ëý]ÖûÊÔ ìãÛçññ`|{uÍÆ
+š…pˆŠ=ïRú,Šö2@âÆIcþ£›-%`‹k•nq ìâZ,-®ùtq›fDlSF´=ôÙgÝPæ<“¶íì¦ .âœy[ïÛÞOà×ï Œ´Ð[„øR
+–Üî §#,†m§Î„© ^ ÈmtR÷¶¦[¿³"ÑCih ’cÙ ¶BÆOÄÉÎi°wö2ݽ•tíZY)˜©:,¶­ÛôhájÂk½þÀ/ìÍiñ%ÉÝ£"2Ü Ö÷éî%‚ˆ¡äìÜÕ1Yª¡ÜWn¸µ•t6AÆß©I7*·ʺü¯‹+yèÐ…½[l”43<÷‹w¿Ïû3üwý NÃÇÂ>“u7N˜ÌIôîìJŸaЉ]OèkcžÀX"À°°sEöÕœ:»»› Äå×ÓÏ!öóy훃ÉÁ컿d"bB=Ó) 
+…\º6ùêÍtÿ©#pü; PH%‰\Žw5ƒ#üÁç²o¾<zö' ‚3©"éÅ&ºÿŸéj2endstream
endobj
-1961 0 obj <<
+2007 0 obj <<
/Type /Page
-/Contents 1962 0 R
-/Resources 1960 0 R
+/Contents 2008 0 R
+/Resources 2006 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1922 0 R
-/Annots [ 1966 0 R 1967 0 R ]
+/Parent 1984 0 R
+/Annots [ 2012 0 R 2013 0 R ]
>> endobj
-1966 0 obj <<
+2012 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [341.1654 175.0606 414.8187 187.1202]
+/Rect [312.8189 175.0606 386.4723 187.1202]
/Subtype /Link
/A << /S /GoTo /D (the_sortlist_statement) >>
>> endobj
-1967 0 obj <<
+2013 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [434.6742 175.0606 508.3275 187.1202]
+/Rect [406.3277 175.0606 479.981 187.1202]
/Subtype /Link
/A << /S /GoTo /D (rrset_ordering) >>
>> endobj
-1963 0 obj <<
-/D [1961 0 R /XYZ 85.0394 794.5015 null]
+2009 0 obj <<
+/D [2007 0 R /XYZ 56.6929 794.5015 null]
>> endobj
618 0 obj <<
-/D [1961 0 R /XYZ 85.0394 385.3709 null]
+/D [2007 0 R /XYZ 56.6929 385.3709 null]
>> endobj
-1964 0 obj <<
-/D [1961 0 R /XYZ 85.0394 353.2653 null]
+2010 0 obj <<
+/D [2007 0 R /XYZ 56.6929 353.2653 null]
>> endobj
622 0 obj <<
-/D [1961 0 R /XYZ 85.0394 353.2653 null]
+/D [2007 0 R /XYZ 56.6929 353.2653 null]
>> endobj
-1250 0 obj <<
-/D [1961 0 R /XYZ 85.0394 323.4096 null]
+1265 0 obj <<
+/D [2007 0 R /XYZ 56.6929 323.4096 null]
>> endobj
626 0 obj <<
-/D [1961 0 R /XYZ 85.0394 266.7517 null]
+/D [2007 0 R /XYZ 56.6929 266.7517 null]
>> endobj
-1965 0 obj <<
-/D [1961 0 R /XYZ 85.0394 244.4404 null]
+2011 0 obj <<
+/D [2007 0 R /XYZ 56.6929 244.4404 null]
>> endobj
-1968 0 obj <<
-/D [1961 0 R /XYZ 85.0394 158.1241 null]
+2014 0 obj <<
+/D [2007 0 R /XYZ 56.6929 158.1241 null]
>> endobj
-1969 0 obj <<
-/D [1961 0 R /XYZ 85.0394 146.1689 null]
+2015 0 obj <<
+/D [2007 0 R /XYZ 56.6929 146.1689 null]
>> endobj
-1960 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R /F53 1313 0 R >>
+2006 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1972 0 obj <<
-/Length 2922
+2018 0 obj <<
+/Length 2923
/Filter /FlateDecode
>>
stream
-xÚÍZÝsÛ¸÷_¡Gz&Âá`ûäØrâkNq%g¦íÝ=Ðms"‹®HÛqÿúîbA‰’-1©•©“c øÛïDÃÑ3–ÙT¦=—jf¸0½Éíï]û"Žé7ƒúíQï/~9U®—²ÔJÛ»¸j­å÷^ô.¦¿'–)v+ðä_Ÿ‡ƒÃ¾4<9=û”PÚÈäøãÑùÅ`D/lúþlxB=)5ÇŸ‡§g¾ŒŽN.Î>©{48ŒÃãÁ៿ .–[n–à
-÷ûïƒßÿä½)|ݯœ©Ô›Þ#<p&ÒTön´QÌh¥šžÙÁøàïË[oÃÔ—`Ò\0!À8ÓBlÿUú¿I©XŠû\ÿѾà)ðךñ”¯—²…¼†iïzΤÌ*©ò“YVU‡}«´NŽæ
-Ù‚âuð*í™Iíõ›û䘄‘žËŽ)Ãœi
-ö VU[ä£1`Öiæ×þÀaDúªœÍÊÇb~Õ‡dA“œ¶–ñ¸e;ó‘ÓZû1@ØHaã¨F)Á$ÓhgGÕ_6Yº”t‹F‡;ýÿb
-N¶½ÀÚî±woqc|]')èÉÛ_PH@ ½*ïçSÄ’§ÉàÛ]¾
-ÃÇ|öD#ƒ¶a
-Osšƒ2¶ ¡¿º¿¬é9§!,L),\ üHz–ßÊU³sÇ]ªcйÈâ§q41YšÅq°ŸY3"Ú2´SzŸUôŽ~¡±QÐ1Áç…8´Iûë¦ÈmåÿŒˆ.á–ÖÉÂݛ׉âϵK’C©;„[YÆáË¢pÿ6ø'p[¥<×e r0ôN๻¿œ¢¿æOÑ5·ì ¾ˆ‚½šU×ómøêüO9_Y›þvûÔaˆ¸Ú‘´@د Ù«+W©…8Su¤Ø3¡L4DcÌV¥Yã“H£†ˆÔ$7YuCê¶hXˆ]…áÝšËБ…ËYfÉB¤‘…[ Ó[_û6*ûM%öäBðìò€òž»H¢?œöiíxéª Ãu=+/›8÷®¬
-Lú"®ãû»ÜÍb†Û˨ŠŸ>ï@´µÕ7Ù*Ë™“^t ê,“6¥3‡gÃÓÏ
-Äñù"¨ÌjƒŒÀŠ¿
-H
-:$‚G,€2:j‹3¼ â _⶿ô ‡¸
-¼„®#[V”*“ÚðÝgçãÁqð&Ò)œÓ™ØÄ´Õš1ºÍë›2š•ù‚­›£^+UùÊZ-»oÁV-B¡ ŸÑ2½¢p¬¹ÜŬ
-o™Yà&Rîºì‘ôLC˜NÌŸ û†‡Amt'X° B“‘T4X©§¡r­:˜c(žŎзŹËïpî»KMí/ÝC~B-Z:1VÇ ªâšåÉš½„Ö£0¥‚Ö`Ó¸p¤ƒ ïZ.ŸÉ…·f…È ‰˜çk’/U3¼˜oç¨ãu1ÞˆÖåþ+=ÐöB&4¥ž`@i
-<ø õ’eº‘
-Øm8Ú_÷†²6í’q ã¥p‘ ƒãPòM@®b¡]ÆÌôîy@ Y1]¢¤˜0-ð 4Ž `‘âÔ˜
-öçÈb-ï¡Áýáf°'£^3ê“ËQ" ¦íó\f\¥¬‰È¿U½¹Þ á?–ñÅR¬ŽDëÛà鑾 ¨ÑˆZº¤[Þ# ý­l–:‚ÔÒÒÔ†Mõ_òË›‰?r.¶³¤Ù׉#æ ¬Ç;ÕL*ºp±yO“÷:Mø÷Þ_Ýž‡ )ï·¤³Ò“-ºl\‹J`òÙÅvÁqÓ²ÖÚû"Üendstream
+xÚÍZÝsÛ¸÷_¡Gz&Âá`ûäØrâkNv%g¦íÝ=Ðms"‹®HÛqÿúîbA‰R,1©•©ã™` øÛïDßèyøJuÏ¥š.LorwÀ{7ðîÈcúÍ ~{Ôû˃_N•ë¥,µÒö.¯[kyƽ½ËéïÉñÇ£‹ËÁè°/ O,;ìË“÷gÃêI©9>žž}ø<::t:¹<;R÷hp: †ÇƒÃ¾PÚHX@Å%þu>РӳOƒÃ?/=\.·Üþ,Áî÷ß¿ÿÉ{Søº_8S©7½'xàL¤©ìÝh£˜ÑJ5=³ƒñÁß— ¶Þ†©/Á¤¹`BÕëδÛ•~ïFR*–â>×>Ú1m"¯5ã)_!/e y¡óJ™ž3)³Jª
+?àˆ·æGœa3c+~Æ;æU]ø vO‘\dV‚ìoGO€ù*Ç‘E䮂AË [ÔE6ûfÜSt5×ø
+ÍוBßEËÍ_RòaÅ|Zк“º(Q!²¬ËØ}bžÝEêé6æÅjDÜ[MOÁ϶XÛ=vàîñ-nŒ¯k%>yûk
+™Š‹fùt|ò”[zž|*'q"õèé4Ž  Ž®²*§î*_<æ‹ ½R|ƒ8t­ßjp¿5"«í\X}Þ¶°ð’qÁ»,¬1†™ÔE {ñ \ŸQ"9Z×k¾&þÔ3+ª:šÜMØWVøP$[ ±rÊ­ýïË7&fŸ0kθ1]1$¦ÌjIòv ɶrB`öÀ“ålZ­%YÓ⦨;É”àVä>ànÐUñ;Ðmm{_èþ„
+=-ï²
+uþ§œ¯ìM»…ê0E\íÈ Z(ì׋ìÕ«ÔB°©º2Èð™P&š¢1f­Ò¬1J¤QGDj’Û¬º%
+µÛŒF4<Ä®ÀÃðnÍkèÈÃå,³ä!ÒÈí¦i¯¯a^–ýf{ u!
+Aâøâ3TpÅAN`aH(Á#CµÞ†¯tÛŸú†]ŽÂ ו6+ÈN•Imøð³‹ñà8xé”N.èˆì"ÛjÍÝåõm-KŒÁÜ€Y‹±¯•ª|e°–Ýw`®¡æ†OÈŒhœ^QEÖ\îâV †·Ì-ð)w&Iz¦!Z'nO†‡}ÃÃÐ6º,]PÍÉH*¬ÛÓP¹V)Ì1ÂϲGèÛâáåwxøÝU§ö§î‹#?¡0-ƒ@«ëDUqÍŒòdЂæ
+yS̃G¢u@½ÿJ´½M©'ØPF&€oM½*ð°H*Ÿ\=Ô/åU]Ì¢û‹¶¨[5>û€uiŽUçÎx£ZVÌZ½ºRµ#—mñm¿•å½úKø,ˆ EW
+$šÚA½qË"‚Z/
+Á]’µJ½¤â;˜ÑúÌ7\b–Z0álWî%!‘ÄC 
+B‰bFT#ìôD²Þœvã„eÅ:£1’ªYfy/ èèC¯w8¾x:G—Š¼X^eòt`8+Ÿ‚ÎyŠ{Ø}•×óă6x¦ÛAðí3µ´Y˜FçøØ‹3@¡r²Ì:"@5H|g2—:ýä[ŒÜ—mý Ú,R!­éŠ|$«©–d[‡G—#¬ñ*ž xt9ç.Šú¹IéŠ9ð/LýÀñE*v ÚÞë~‡ö ©LsÞå®$«©w$ŸÃñÑ ê|¸£êÕyýT.¾ÄCõ|ñX4wó²Édu@‡(oà xn 6ßq ¢½ñý¦Ï{ ÿ…*å]¥má㪣ëã=-å–Òša™º¢ ŠŽ—‰&©|4!ª)€ßcÖ„Zm Äz°Ûn´?ï 0ž2kÓN)×)R¸È†Áq¨ ù&&ײÐ.Ãfz ÷> …Ô˜îUR©?L˜x*Ç…K±HFqjL
+€ÊvÅûOsä±–÷Ðàþp3Ø“Qƒ§°õÉå(‘Ëöˆ©‚.3®RÖDä_‹ªÞ\ï…
+an<Œ7^ºfXkïÿdûá endstream
endobj
-1971 0 obj <<
+2017 0 obj <<
/Type /Page
-/Contents 1972 0 R
-/Resources 1970 0 R
+/Contents 2018 0 R
+/Resources 2016 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1976 0 R
+/Parent 1984 0 R
>> endobj
-1973 0 obj <<
-/D [1971 0 R /XYZ 56.6929 794.5015 null]
+2019 0 obj <<
+/D [2017 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-1974 0 obj <<
-/D [1971 0 R /XYZ 56.6929 671.961 null]
+2020 0 obj <<
+/D [2017 0 R /XYZ 85.0394 671.961 null]
>> endobj
-1975 0 obj <<
-/D [1971 0 R /XYZ 56.6929 660.0058 null]
+2021 0 obj <<
+/D [2017 0 R /XYZ 85.0394 660.0058 null]
>> endobj
-1970 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F39 1161 0 R >>
+2016 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1979 0 obj <<
-/Length 2985
+2024 0 obj <<
+/Length 2982
/Filter /FlateDecode
>>
stream
-xÚíZÝsã¶÷_¡·P3'_$ÀöÉñÙwNî|®¬´7Mò@I°ÅF"U‘²Ïý뻋%Jч/öMýÐñŒ¹X|ØÅþ°»€èpø3®RÝ1©f1qg4;á;¨{w"B›^Ó¨×nõÃàäû e:)K™t·­±,ãÖŠÎ`üKtöþôzpÞïödÌ£„u{q£.¯Þ'¥ÏÙ§«‹Ëw?÷O»FGƒËOWÄîŸ_œ÷ϯÎλ=¡t,a
-·€ÙHÙÌ!%ýd“ÑgäuF<¹j% Uí÷Ù”øã2ŒRÖD¸/yUo‡óà›3øOYà"âæ9&¢µ6(=ÐÚ€ê÷é[?ή26QFR!þœ
-•+B‡ÛrÑ M_?©Þæ4È&òâ'Éýa?[ U9Îoqì[·¨ˆqë«œQéª+"hLZ.Jñœð ¼‡ VdöæŠåÌ- ?ȹ,ˆ7\ÖDøÝaT4+W«͗uVCûlê· 4q_殨ò{·ëçüÀ —aé·ŠŸ²#VªÅ4éˆPË£Ñ4'{f†Aq1jðÖU£E>t¡c^ìyÿâŒÐ"q̶áB^˜¬¯mdÏ3\0¦
-\ƒ?5ž¨ë–Ÿ§˜µ®|‰¿÷›ûuÍ9K¤é:–päÁ@^ºŸpJj¡‚†µM )l£aâ¡Hñ» ùÔºEߎÐ(ùHä#õÈ*äËT7¯µ ºA¦ß¹©ŠÀžîò׌\ÒÔ_©@¿=Ÿf£¦Óð‘¾W^a˜X™ô­<˜CVÓÚŽÏÛâÛ©^!c“0#¬<b5q*™ŒÓÔ êzÐGßR¥Ñ):3:š—~RÜ# º†¬aγEMTyšy|b\Î2ò´tØÕHUsP º° í·®·ßrëÖ~@GíÅ¿²}ƒS –Ê,7ö˜Ž˜ƒNÒÑg8¹`‡F×äÝçc´UiM4Ëæs0³PºúÁ¹‚
-$7 ¬”Dx0@â3œ<ðÆã`á•«Ø~Õ5 ‘¨Êi­úe•ó²$-³©9vìÄZ3­RLÿÚ+GF—@ãÌ»‡ #£æ;Ÿ¶ô‡=‚°çÀÈ锦ÇT Þ¤7$ä!!xƒéûí4€µ3@èlúD¸ÂÒVK ¯Y[aÍQ¸“œÁŠîúý›ËwpâEgeQ“¦­h;ÚʨÊ^6G!²ÆY|çq[ÀXE~†ôÞkBš+}@è­Õ¼”Ð/m›{…®“â}q,"èb‰°„_ý®2Ñ
-»±#*8?è¦iˆUPËÅï¡j*{¶1͵íYcW'Ü–3ôƒl ýyŠü¶{C)p,’c©!1±"±xsŒmš¶ÌÑ`€<v¤·lY-"M.¥ ‰Nñʥܜ5n¦ñ–› ¡°w3±&À²¼[¬N¼²!i
-Ñàˆƒç Üóop IÊÌ™Cf€0$W†-{s SµÄá¼3ܳ›ƒë®iô&dî)^Áí£ˆèj9Ÿ—‹ºQîû¼ªÁûa ±W…-Ù¼bL“p®€pDƒà¸2e¹ñ²ü,côbõ]+ÝÜ@VQž¾Ÿ6Ej}ä@a;03<Ý
-ÌþtZëp\ÖZìK©d}Õ~ìîûn¶îîÿ\¯f"Me¤B=2n6ïüÿp÷¯x¬LMEÅÔ¾À¯y— •dZ†´Ù`n¸nËé´|ÀФüýHsÝ3Ñ0I«á×°Ëhš¡‚©ÝÆ/ ¬*˜µó>ý
-H«’δ‘Û ¯;®àà¤bQûÓX÷Ù4ßÚ"u³
-@_ð¸“<fJs1%iDTÊåU·—àuÑJñ—xÍ
-ù©ÚC:ç5U|¼ÃoÐæÒ‰Y>î‰ÔðCéý~Ör…¢ PMnX¹ÏÄ1YVTž/ó²r¸É)‚lpÇ@øê»jW~d¸Ì§uouH†›u²ºvrÂWá¨u쎽!XТ-{z@!X€±*èÎ0Ó¸C ¯J„¶û÷d[Û¯8'”bGS*Â$nB øܨDÀþyï@Lc­Õþ’b­-ù›U˜G…±»wÓrN‰K—´ÆoI4
-õMØ
-u÷Ù"/—a¤ê±Ú™¡­Ý,˜]fÕjƒýÑÛƒÙ,šÚ»Êž7 þø‡LÙº*¼å€=¸{­ôöR›ëÕ8 ãÂè':‚&-{Ï}¡Ö>
-Ï/TxjFí"¨¼­]X³ù4åµÏãÚh‘…nzXá–ò×Xh˜¨Ý»Â–Âu¸|㑸‘ýð\ë¢ #»/ü¬ ¿9ËŠÇ];‘æöG¢{¿«ÂÛ3¬ÄÉU“!8j縓Œ|ˆì¡–£&‰^­ý'¡kë—ñÒþ =ÑÇšž-QKÿ(y%=Ü£BQŽ½ ®…öÙñ4ƒf€±Ý÷há¡H-½(+b­=2ݤtÀÜÃ3Ðzâ2ŸM¤Š˜ãœ°Vä*z0ø€‰%jâ@잇_áUlUû.X&¡@ƒÌ'?üôš±HÚ?ãÁ&ˆ+þ±Öž§¸
-S†Jìz9Ë;GóO}§»~«¬ „Uû€(®ñ8aVMºz{î±²
+xÚíZKs㸾ûWè¶TÕ‹ 09y=öŽ÷áqdm2•Ý=Ðl1+‘ŠHÙãüút£A‰ÒH”gÇSñ!å*³ÑxèFèn@ô8ü‰^œ°$•iϤšÅ\Ľñü„÷î¡îûÚ šFƒv«ïF'ß^(ÓKYšÈ¤7ºke·VôF“_£„)Ö‡xôÏ÷WçýŒytqùPBéXFgïN¯GçCªHBÓï.¯Þ'¥ÏÙû«‹ËïžöŽF—﯈=<¿8ž_÷ýpr>ZO¹½,ÁÎ÷ß'¿þÎ{XÝ'œ©ÔƽG(p&ÒTöæ':V,ÖJ5œÙÉÍÉßÖ¶j}×}bÒ\0!cÕƒØÄþ]ú ¿H«Xb“ÝŸž2 dŸXÍ”Ðf-{)[²"fÚšž‰S–(©¼ì¯nÎÏT •¶Ñ/•›ôHå}ß^Ý@ým^Q±.é[¹ñjÙ6r³§¦Ã$gµ í¦YMÔpº>æõ”¨¬@MôŒfiK8›ò±pK˜Q‘ÍRÒO9}ÆnYgÄ“ëVZÕnù͈?)Ã(eM„û˜Wõîx8¾=ƒÿ”."N`ž"ZkƒÒ#­ ¨á¾õÓÂá*ce$â/¨P¹"t¸+—ÍÐôõ“lOƒL"/îq’Ü/v¼²Q“üǾsËŠwþ·Ê9”Dê[ŸÖʃF<'|Ãì`vU‡ À–\±šƒV@`u^Ä»]ÕDø­aT4/×K/VµoŸÍü&îãÂUþàöýœ”r[ú}â§ìˆU^qW MJ"Ôòh<ËIÀž™…aPŒ¼uÕx™ßºÐ1/öÉ{xqFp‹8f»P¡cÃ@®¦×6°/3Z°¦
+Æ^½6/_xÈòYv; Eœ ~WÚ‹[ŠÇ
+\ƒ?ž©ê– ¿L/Uðä7=«šs–HQu,W0Žî‡¡Z¨ `mS Û(˜x(Qün£=µnÑ·#lÊ£=„öHýퟋö2Õ Úk-ƒné7nª"0§û¼À5#—4õW*Ðo/fÙ¸étûD_:
+Â0{$°¶èg ø.]FÓÚ_¶ÃwñQ½$>Æ&aFXÙm4q*™ŒÓÔËéz4D¿S¥Ñ)º1:Z”~R# ª†ã«a.²eMTyšytbRÎ3ò±tØÔHU к· ì·npØpºUKïPQ{í/…k_ქ2Ë=¢¢¦ Ó„TôŽ-ØŸÑ59Cù-UZͳÅŒ,”n]ýè\AVJ"< ñ
+hZ.ÿUÛ89°an,Ï»>Ývü /1Ƕ̿L_wk(NErÄ5&V$oŒ±MÓ–1 lƒ¯ŽôŽ%"«±D¤É™4!!`À^;“‡²ÆÁT"Þq0!ö&Ö°@–÷h€µF‰7PV"$  AUç>P„6+œÑž-@Û´ £þÆcÎáŸ8Š×ÕÆ9 Áaã,:6MK/µi¾‚3¤R:>â i©™µ†ðäæý)y€—°¼ü7Î¥÷†ŒØœŸUí]T ßÑ7£&mU„€þ©/„ˆü™»…ðØ&gy'Âw»§í¥¾âSUY¹Š¸@à>²ÔZ÷Íõš±j›±æ6ªû"B… }㊉‰¾.gùø‰è‹% e9¦cZN2¼Õ ‘ö}îó,ÆÛ4#rãB=Ã!¸·‡U×–É+Ž,T"ÀÕ¡tª<JÆ“„¢›a?Ž£¿c
+‡ónXpÌn~]÷…L£7!YO
+¶hCDW«Å¢\ÖnßåU ŽÇƒ‡ƒl‰æš„C€n‚ÇÊ”åÆ‹òƒŒÑiˆM4t­ ssøXE¹Eø~`Ø©Íq…Ý€Ìðt' ûÓ¹¬îx¬µÖ—ÒÈæ^ýØE=ö1Üì\Ôÿ¹^ÍD˜ÊH…jdÜl_ðrÑ0hSHATL
+øšGRI¦eH–¦áN뮜ÍÊG ùAÊß^€47= “´~ »Œg*˜Úmý‚ª}P;ïͯa´*é@»½àºçÒ N@*µ?*õÍò-R7 €Hð/»;dm‘*IÄÿJ¡­ÈóÏ:Éc¦ÄïRò;D\^õ ^­õ~‰7 `ÆÖµù•—:±¾B²MFëcQ’H–Bðê…qöï?
endobj
-1978 0 obj <<
+2023 0 obj <<
/Type /Page
-/Contents 1979 0 R
-/Resources 1977 0 R
+/Contents 2024 0 R
+/Resources 2022 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1976 0 R
+/Parent 2028 0 R
>> endobj
-1980 0 obj <<
-/D [1978 0 R /XYZ 85.0394 794.5015 null]
+2025 0 obj <<
+/D [2023 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1981 0 obj <<
-/D [1978 0 R /XYZ 85.0394 229.6198 null]
+2026 0 obj <<
+/D [2023 0 R /XYZ 56.6929 229.6198 null]
>> endobj
-1982 0 obj <<
-/D [1978 0 R /XYZ 85.0394 217.6646 null]
+2027 0 obj <<
+/D [2023 0 R /XYZ 56.6929 217.6646 null]
>> endobj
-1977 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R >>
+2022 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1985 0 obj <<
-/Length 3016
+2031 0 obj <<
+/Length 3019
/Filter /FlateDecode
>>
stream
-xÚÍ]sÛ6òÝ¿BôŒÍ
-¼›Û·
-¸Y—Ymç¨$²« ²£ÞÈ»¿K䯬
-j˜–z3mÖ<¼2kÓ²©é¹jvÜ×Ð*¡—Õ„™Ï©g<vÁd>”¦bꃕò,_•`Sqª`Ž ZÕmRø:Š¤ÝdÑ”vˆðêÆ ¼l³©ž×5Œê»U³5]֙ǒºŠ¬Ë"ï¦.Û¿Ÿ_†
+xÚÍ]sÛ6òÝ¿BôŒÍ#
+D4Ë×gÁl }ß sé]ŽG½¾?ûËJfÚ×±Œg÷#Z©¤©˜Ý¿xWõÓýõüüRFûç—Qx¯oïÞFÓÏÕÛ»›Ûï~ž¿:OBïþöí¡ç×7×ó뻫ëóK¡ÂHÅ$þýöîšÝÜþp}þÛý÷g×÷Ëãm‰@!¿¿Ÿýò[0+`wߟ¾Òi4ÛA#ð…Ör¶> #åG¡RS½;ûÇ@pÔk§N‰)R©¥2™“”SrŠ´+©¬œ6Ù¶£ýüDÁü Iÿ½„ ®n• ƒÙµ[P—eÁ¸æá¨o{.R¯l›Þ9c¥©—e›oÍ¢,|&ìèR$¾V2µìÝ#ܬˬ¶sTÙUÙQoäÝßÿ@䯬
+j˜–z3mÖ<¼2kÓ²©éwÕ츯¡UB/« 3ŸS;Ïxì‚É|(7LÅÔ+åY¾*Á`âTÁ´ªÛ¤ðuI»É¢)íáÕ%xÙfS=®kÕw«fkº¬3%uY—D Þ§¦.Û¿_†
p÷1ñ¬j™J¢ dÓw0<Þ¢çµna’®Óá«rÅjÞ¦©LnïÍöpsäˆDE‡–5I
Ö*àHošU¥•—µ­YÖ–9ÀZNt¸§‘kS›¶Ûf¬fQ¨Ã…Ú­Jbú€Œrrtiê¬+[Ëšôþµ2U9¥¤„N
-äº%Èšhøì[ä!T>‘áµù£tr”߶4XÎèñ±Û Ë°!ìÊ,L×NÑ!o4í6«LgÕ‚(ë‘ð¼­»r[—“¸)· ÆuV£*)½¶_.˶£y?AeË#ЄZ¼jzër
-l<ª” F=mJoãâò
-„É4ŽfÚ=#pµ4LDbõmy4q]—ë¦6y;¥¡¢D¿¯‡½h­sÄ.Ç®ŒÅÂ`HÄœæÁ·—d¨ã‡fû¸z Þâw;ÜG((4bÞß;¼!töØÇT
-ËUsPŸ€³µ\B£‰â2„¶¡B'\÷"±Í½½@£0í0Å#Y•ºW…ãQ¼õÖŽJö‹Ð® ]ÃVD2DjÕÎVÎcX« äà
-öÇhá¸Ôö£@‡°ywB‘ðöÝ­ýæg<ôQiàýðþü2Q‰„ú 0PƒÿóúîzþʆI4Œ0œ€DGkÿµý äÀ÷fö%%”D~”DjZBR~ªcØL¢} m%ô\$¯Þ9-ÑJ_±<€ÝXâS'¾ brãC‹Àjì¢U¢QF2õµ,ÉÓ’¡5åW.™H€ÿFŸ2”(òe$b+˜A°ˆ zA{â_±”ö“@§Ÿ²PùRÇôŠ}àPä-8©Èä´TF ~Åb‘‰ŸDaü)ËP‡rOZ†óuZD>ù‚BØ_Áü?R€@¨B­g(ü 9¼ zv'Á³•s€Æ’$/ß ÉTõP.]¤²![ÉŠD¬²Gî¢SÒg¥v ¥6v+“¯h(Ÿ{2):VtŠz"¾\Ø @ÕýzAÅŠÏ$éè•/Ü$5Íaž¯¼|—bíQ-dßzFõ¼Z×Õ‚\ Ýþt‚0žäáI@vTR)Iûja<Š?&ùBõñÛÕAå·¯ò˜›Ö|¶æÊBzEGövÍѾãe–¯Žßž‰§Sg “/¸ïè
-wà”p×*
-fŸŒÿŸûUÓþË®ÂVšÊé8$¡äµi‘™BuˆàYÆãïŸÔïÿWfendstream
+äº%ÈšhøÛ·È;B¨6üE†×æSé&ä(¿ li°0œÑÏ'b·–!`CØ•Y˜®¢CÞhÚmV™ÎªQÖ#á÷¶îÊm]Nà¦Ü‚×Yþ©¤ôÚ~¹,ÛŽäý•-@jyðªé­Ë¼ànëV4ƒ–µ¢Üró~‹ì‰©ÇSº§É³Š«¦í0ËØ»å¹ý䫬^–S¦G+5s…òîÀ`7 î$§ÂÔ-¦Ùx6‰dZô¹µJ@l¶†xÕä›rD†™uê‘`ËÔyS·`Ãe?ªè·äS’T9¡!¢{A!“̆¢lMPeÝ“bŒÍò<¬áA.r£²Q?fU_:tU5»!21œ?ŠÏÉ>>KÈ‹äRa(’1‡D$BµeÞ™¦¦†µP7oi¦i ‘gÛ­±ÛFÆH^%oÖ t\¦"*ˆÝ>ñ2
+ÖM¬™RѬ3Çd­Ñõ'$~ïv? ÇL—Y«·Jp‘ÅJŽ¿÷eÝaÜF\?h"ã)¿JnƒŽØ"|¨¦[9°0#æXoîÞYv!·‹Qnæ•ò…àêëáK(_‚
+†¾¾úv]=½È¤ecÂVf¹²Scí»6£vüCnÜ‘ ®íÔ6ŒÏèM‡¦´åöÑj° ÿº2©Âðu*N hÓö%àâc¶ÞTÖcí„ðhŠãEç7W4ªÐðb*8bô xwOUÉ D©*ÛRï`þKmˆ³Åü®3ˆb< /Ë6v%0Û<Ïç‚a)ydçe– TBœì˜šMð ò ãØʇ&˜vJ6«a#eä­Ìh–& zd)ðƒë×Z¿¤;ì(R•„ªLmã°„j¤‚Š¬_®¨y5uïBLá-£…@m ¸Þ¢âeû–".vð°Ú&ÚötE,cš£Ò@Š}Ê™‰²+#$½%‹íQ/l“ìobæ|îpË=ÑqäE¨˜˜äÎt«Ñ0謲úŠ”ÃÙéÄʆI@Å×c5:U:6î´p[ò¥QhÝŸPž@ØÛMÓ·.Êù¼Fn tº:ŽìÍC7ʱU_¸ në•ý '+²…ºëÉÆÚIÍÝìÓ+ú69
+ö×há¸Ô*ñÓ(Ò°ywB‘ðöÝ­ýæg¼ôQiàýøþü2Q‰„ú 0PƒÿóúîzþʆI4ZI¨@¢£µÿÜ~Pr`ƒ{3ûšJ"?J"5-!j_†õT¢} m%ô\$¯Þ9-ÑJß°<båÇ2Ÿ³˜8ñe“ZVë`7­2’©¯}`Iž– ­)¿qÉDü7úœ¡D‘/#[Á 2€5@Ñ "Øÿ†% ´Ÿ
+R‘Éi©Œü†Å"?‰Âøs– Ü“‡–á¼C‘O¾¢öO0ÿT' ªPë
+?Hß‚ž½ © öS©„ÐX’äå7!™J êÑ£‹T6d+RÑ€ˆUöÈ]tKú¬Ô®¡ÔÂÆneò å{O&E7ÀŠnqCOÄ— û`¨º_/è¢Xñ$]½òƒ€›¤†«9ìÂû•—/ò²¢àB¬=ª…ì©gTÿÀѺ.¨äéö§4è†áð&o²£’JIÚßP ãUü1ɪ߈OW•ß¾ÊcnZóqØš+ 鈎ì횣};ÆË,_Ÿž‰§Sw “Üwtä.@§
+Ò²|^LÊØפоŠ…ü2ÓÈÃô—“_#ιM]Ê ñà >ý•¯0úKë@Žàû÷þWïüo﹤G¦#–Màeq$l"À¿0|cˆGKÿÙ¨¿vä#tä‡Qp"=ÊH¢Æô ˆA¤JB~Ü‹Bx{I!òFpR&ãå¾’Pþ—¼ðõ­V@º¼ 0ôeyA@-š0½ó‚€<CÊåHdÚ—ãÏbFA­ÜGJz[8ô€DúB‚ƒ ÓŸx‹H¡èMcÁÃ/NÅ/Žº…y@.Jw¯:Ü8p°µÏ(C¶x
+WT…žSÜcÊÓæýÄÓ æJ\˼Ù§žQ@¬qBqý•½…“û °©†;4¥÷añôjÀs†·ê35¥!ʺПñ¸l˜KÏô1_¢îù]
+ö6çKµÖò!X¾ãÙ”Ö§*)÷Ù«)z×Vöª­3yolÛ”öòFñ³~¬0Þ‚ºhðƒ©GÅÝÇ
+@ø ×–$3á^€ð~é‚®ÇDš?¸°ËÙ µ“/%BÙhü$ŸtÂEà[cï½°vøôñDhûª!ìÓÞ1#Ê
+OHGÐ~WMûíƒP¤4AÅ°ÏßÖ&
+ô’H‰‚8„ç(Q5@«œøv ?8šøÒ(˜}6þéwMûo»BˆZi*§Ã
+BˆiZ8¦P"ÐǬ_@=çý¿ Pfúendstream
endobj
-1984 0 obj <<
+2030 0 obj <<
/Type /Page
-/Contents 1985 0 R
-/Resources 1983 0 R
+/Contents 2031 0 R
+/Resources 2029 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1976 0 R
+/Parent 2028 0 R
>> endobj
-1986 0 obj <<
-/D [1984 0 R /XYZ 56.6929 794.5015 null]
+2032 0 obj <<
+/D [2030 0 R /XYZ 85.0394 794.5015 null]
>> endobj
630 0 obj <<
-/D [1984 0 R /XYZ 56.6929 622.0858 null]
+/D [2030 0 R /XYZ 85.0394 622.0858 null]
>> endobj
-1987 0 obj <<
-/D [1984 0 R /XYZ 56.6929 597.3835 null]
+2033 0 obj <<
+/D [2030 0 R /XYZ 85.0394 597.3835 null]
>> endobj
-1988 0 obj <<
-/D [1984 0 R /XYZ 56.6929 411.8393 null]
+2034 0 obj <<
+/D [2030 0 R /XYZ 85.0394 411.8393 null]
>> endobj
-1989 0 obj <<
-/D [1984 0 R /XYZ 56.6929 399.8842 null]
+2035 0 obj <<
+/D [2030 0 R /XYZ 85.0394 399.8842 null]
>> endobj
-1990 0 obj <<
-/D [1984 0 R /XYZ 56.6929 231.7148 null]
+2036 0 obj <<
+/D [2030 0 R /XYZ 85.0394 231.7148 null]
>> endobj
-1991 0 obj <<
-/D [1984 0 R /XYZ 56.6929 219.7596 null]
+2037 0 obj <<
+/D [2030 0 R /XYZ 85.0394 219.7596 null]
>> endobj
634 0 obj <<
-/D [1984 0 R /XYZ 56.6929 131.5008 null]
+/D [2030 0 R /XYZ 85.0394 131.5008 null]
>> endobj
-1992 0 obj <<
-/D [1984 0 R /XYZ 56.6929 107.0349 null]
+2038 0 obj <<
+/D [2030 0 R /XYZ 85.0394 107.0349 null]
>> endobj
-1983 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R >>
+2029 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1995 0 obj <<
-/Length 3209
+2041 0 obj <<
+/Length 3197
/Filter /FlateDecode
>>
stream
-xÚÍËrãÆñ®¯àÁ¨ÊDæ |“m­C—W»‘•*Wl Q†
-Á[ Æ¹Œ<Ë{Òâl[ì?Ð.±Œ-7Më9Ú{ v³­Î¥”ÑhÕ #ö8ÂÞésd© ¬§üÄe'vš9¢Ý5õª¬ïð¼™âk8Ñ®ƒÃÔ¾£n~WxÙv(¶ìsj™è6_þ›×5ü (ëâ#ã¨è wø&~ª?4ßßH½ïY—Ð;µ¾j¦x²n›rÑ&ÿ€[ª ˜ø†òÛ¶©]A½m‘×pg‚ùM©”†á¤¼'
-ðí©‰âˆj !p´YØß?+À±xMñ+ ›R,lÖ…Ú8O-æ lzI±†åÁâë.7^!úц¾AæÆ€^ölxll݆mII‘ó™^ÈÀ¤fSf"&EƒWØZ†@"KˆÞ·É‰À`m’ž°tÛ6Ë2ï¼)e fƒßd¤½ŠÇ~V\PÓÓ¾ðÃ’ˆ'Ц_]¼½Ûâ3h´‡5"Eµ±,‹GÆ!õ|ãwHHT“£¨B“Þ %/UQ¹¦AÏ4Ì|Ðõ›Â÷¶ñ&2Ižp°Ä=¾"îV÷ úz|Ì›“Œ> 5<
-éhì{Òé{tw<"í·àZÖ™ð̃ßò®nŽ¬c€ç5ØìÜ+q°$¬5² ˆ`Éc$#¤!Ò:¯‡^õf'fÒŸ¢æU ±ÃO‚l‚q`l×”u7ØjB Ý>sÐÅìåv+>æÛ]U|sêòei,-¤!UŸäó©,¶©LÇ>ßÿ·*œcð~Ož€Ö ÀÅÍ°bŒjî4·. V½?iä@üÁÁzf3¥K<5™Nñ²Ù¢†Ñàµ-À­ÖJ
-²,y‰-„‰“àPRy÷\áTG—9&X•²4©,ÛBh„œµõÔ„Qû-}I¡)ËÎ
-EÝ㟩„<mÿ,êX„Ó9Š~8ÿ'ð£:Ú‚ò/w/ Ë@ãqI:ãbdÿs
-´@¢à¯•¼ `cÝ4Ï×Äe{¾eþ\GݤLbо¥IÒ©ŸŠÙ‹¯÷©?@<þB{í¯7ò$0ŽÒàUÎÀwC\Þöѳ„Ÿ*2ØàìÿRý'ûendstream
+xÚÍ]sÛ6òÝ¿B} g*¾H‚}s[§çNãä\ÝLç’>ÐdqŽ"u"Ç÷ëo» H™v’‹;­ý
+ù*ÑÑbÃØ€¶õÚÝ9À,Ë÷B¨°CYóN||<
+§¤f·/›}Ùñæþ½hvD&’‰UgÂ=LÕÅÖÁéR!øt06ÀeÒá=[šï Èíé“p¦ðNårCCþöÔa[‚-:xî]çVÀi:“ÌP£]ªæÞµÝÔ{ׇí-n®´€ûžy®E]­q4ºû†¦ùN¥ké»\üð[!x Ô€÷ð\ïI‹³­Û ]râ,[nšÖ3#ô÷@íf[=œK)£Ñþ6ªFìq„½;n©¹²ÔÖS~â²Ç[ÍÑîšzUÖwxÞ\ñ5¬‰ˆè×Áá
+î‚WØZ†Ù@"OˆÞ·)ˆÀ`““Ôž°tÛ6˲è¼5} –ƒßd¤ÀŠÇÞ‹D\P×ÓÚ øƒaÉ
+ç<Þ“' upq7¬£š‡;Í›ƒøªÞŸ4r ûYsÆÎ’\?iSOL&S¼l¶¨]48mWà5k%è c#)Îç™`M–œP×äYl™Ï'ùº»!e¦ÕB®,‹AÚiz bÀlà."N­6ž`§ÔÉu´§ŽúLò v~YúÈ—¤OšÄÒ
+“Ì€$±ÈÆ †G‰•ÙØX<u"uœ%F?Ÿh0y[%É0¼&—
+k^A͛څS(öS `A¡I‘Ï´5qfäçhkƒ†™þ2m=½jàâÐbJ|‰#VœX p%ðÒ8Wâ UòŸƒáÕÈl¦Hþ~}Ó€ f¢ªðI!ðÉ‚¦™Î&ˆ£¦¥Š“8Ð µ»+8“Ÿ1 xþ h± ëÆÉIœCnF^WÏ‹ÑHž˜Ã“¤Ïï@÷˜›Á ª-é… ºu3»™‡\ Ž¡Ž¿þíÇ7¯/®®Cî!äåZ×NñüšN»%>{hñ”Ü÷R°->–ÛC£ž ±–áH.1$×1ã¡©iÜ·Ç ŠÞࡻʼ¹Ìá¥ìðu†¼¬…µ ¼5àþ"”aÅ“L þ‡Ï³¬²1Ÿò9ßx%a0'I 8°Á4¦Uúˆ3DQœÄœžVœ!F˜®ÙшÏ﫦†ÒØ#íAÓH롆!1 ÖÁQÌ-µ¼ëÓ¼rëâPu'*¯çw4ü¡‚õæÐ4]ŸKYž j]÷ OôÔþºç;åó‚¡0?çéó<!Lœ7"ÐÉ;àÛf:º,0—ªTB“*a žN<)¡!ÒáwK-©2•° @ý£:„²>¼¹ñþ`_9Á±à'£BÓ“|AF®Tœ8ª81Tq‚ïÂêÂä¼ÊgÞHÛ—â€Ï{þK*sp»3¥¿4îñþ,<Øóq2¼ÞœâÏ ŸÏ¹0HÕôßqˆXWX~b ÷@ A°‡‰C´^<LãÕPs¸Ûœ
+‹ æ´6 QÆ¡Ã<Š GW5².³çëb·;Z8æã«·̧ÅÇxt.B¥ÅæG×ú@eiœE¥Mõ„(‰Æ Ó*._ãÌј㪫·4:ªbhNkãnÊú>'ûìÁÁfÃÑV4Š?Žb•‹—Óƒ‹Pô>©Ïœ<EYÏýþ™‰âb¿+&è‚ž< ±j_²—m½]ÜPç¤æþW¦Dt
+ÉWRq-NÙªù“#øéÑ>½5„‰m±rcL•7ºmÃußy8óÈ—jË»š¬÷¬T¤¹¬‘‡êy±"ˆÊ­»aSEûònƒuc#²àYÂ(µ}PïvM[v\€”¾q2àbhÏŠA®ÀvÀŽQ*º
+¢’CQU\0½ß—Ý|Ê1ì\í+.ÖZ.·¡ØÂuAª·ø’ò—Iè '쩘¿pB‚ŠŒFäGo0Á6/ïw~ CAæôás}¿ÑÄ•4ì‰Iœøt¹ObªÞÙ·ÄË}l™ôãÇ[b^ü¢}ð¥£éÇ5Å ì.çR,ÿ4!Œísl(‡‡¡
endobj
-1994 0 obj <<
+2040 0 obj <<
/Type /Page
-/Contents 1995 0 R
-/Resources 1993 0 R
+/Contents 2041 0 R
+/Resources 2039 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1976 0 R
+/Parent 2028 0 R
>> endobj
-1996 0 obj <<
-/D [1994 0 R /XYZ 85.0394 794.5015 null]
+2042 0 obj <<
+/D [2040 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-1997 0 obj <<
-/D [1994 0 R /XYZ 85.0394 613.3608 null]
+2043 0 obj <<
+/D [2040 0 R /XYZ 56.6929 613.3608 null]
>> endobj
-1998 0 obj <<
-/D [1994 0 R /XYZ 85.0394 601.4057 null]
+2044 0 obj <<
+/D [2040 0 R /XYZ 56.6929 601.4057 null]
>> endobj
638 0 obj <<
-/D [1994 0 R /XYZ 85.0394 465.8716 null]
+/D [2040 0 R /XYZ 56.6929 465.8716 null]
>> endobj
-1999 0 obj <<
-/D [1994 0 R /XYZ 85.0394 438.5672 null]
+2045 0 obj <<
+/D [2040 0 R /XYZ 56.6929 438.5672 null]
>> endobj
-2000 0 obj <<
-/D [1994 0 R /XYZ 85.0394 397.0946 null]
+2046 0 obj <<
+/D [2040 0 R /XYZ 56.6929 397.0946 null]
>> endobj
-2001 0 obj <<
-/D [1994 0 R /XYZ 85.0394 385.1395 null]
+2047 0 obj <<
+/D [2040 0 R /XYZ 56.6929 385.1395 null]
>> endobj
642 0 obj <<
-/D [1994 0 R /XYZ 85.0394 216.4249 null]
+/D [2040 0 R /XYZ 56.6929 216.4249 null]
>> endobj
-2002 0 obj <<
-/D [1994 0 R /XYZ 85.0394 186.4354 null]
+2048 0 obj <<
+/D [2040 0 R /XYZ 56.6929 186.4354 null]
>> endobj
-2003 0 obj <<
-/D [1994 0 R /XYZ 85.0394 97.1422 null]
+2049 0 obj <<
+/D [2040 0 R /XYZ 56.6929 97.1422 null]
>> endobj
-2004 0 obj <<
-/D [1994 0 R /XYZ 85.0394 85.1871 null]
+2050 0 obj <<
+/D [2040 0 R /XYZ 56.6929 85.1871 null]
>> endobj
-1993 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R /F21 938 0 R >>
+2039 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2007 0 obj <<
-/Length 2116
+2053 0 obj <<
+/Length 2117
/Filter /FlateDecode
>>
stream
-xÚµXÝsÛ6×_Á‡{ fJßnn:u9§N,÷µ¾i’Z¢mÎP¤"RqÜ¿þ_)ÓqziÇ3æ
-X,v±»¿]€DþH$$’šê(Õ LD´ÞNpts¯'Äó$)ésý´š|ÁÒH#-©ŒV·=Y
-a¥H´Ú¼‹%bh
-püûÕb6M¨ÀñÅü P„qAãóŸý²š-Ý„ô¬?ͯ܈vŸó«ÅÅüõ¯Ë³iÊãÕüjᆗ³‹Ùr¶8ŸM?¬~žÌVÊ}³fFß“wp´ë~ž`Ä´ÑüÀˆhM£í„ †g,Œ”“·“ÿt{³véØ1QFP*X”0ŽlßgzÊLYcÃÍÕZ~•Ž„"­×G‰b°3œü³²Ü: ²<V E].9E\rÙ¹œÒˆ¤… Æç’"–¥„ÁASn}¾0î°œ ɉa$ óØr\MIâü§ñçLœÒ4’RAl)n¶Ž>Fa®5sL=ÚÚz<;ðý|K£W5XõŒ
-‚“¾dk”¤½8†ð.Ø_¥(å0e4^ÝçÎ*Éz¬àD,H°êWËùë¹·~ ’CD,=_YTy3M˜ÆqQ¹o â-‘OŽ?gÛ]X²½Ÿº5SõÞýØíë)ñ§bSTwnh]W­[Þz¡õ—„ƒ–piL£¤s)¨WWå#ð¿§4u”AqìÇ7µûVuë‰|7MºNEXžív¹c„8CIÐÅL®ÛCV:úÐdw¹1òŸslû¸›;
-„–¡GDú6øæ<–’sžôs>ð é­
-8”¦“œti—P¥âË Žzïh/Jéø¢Þo­Gaô!kQTE[d¥‰ós“¿Ç˜VÖOvÖ-]^œ»¨ÂQYåyî(7‡›&ÿxÈ«6H»ÉóÊQùç6¯6ùÆÄ,ÄÈõ½Ñj$&]´€Ý ƒÓèL
-Hòr\ßÛ°cÔAPÌùFœ£€(³›¼tsfƒHf¸ÿÙ]ü ¦y¹1¶2Ö²8kvùÞ%
-ñ¦ÚB˜vå‡Ä…«'Ä×j;8Sã<gí¾YõèˆCõz¸ÂBÊÆ­8©DÈôk,À—‘èV†œ%>=‰ÍÝ}Ó:L ¦ @Á‰ÎìFÂW7‹`nÂ7î›ÙiÐØ뢫7$p6 ƒÜ1ÚHF¿ "\DEÊ"©Êû 0"HLú"G@B¤
-Ñ#kó˜8àÉÿSÜÜóææù¥_ΖÐY¸}±4v=dm^ÜŒo!•ïïFÂ…@¬
-ÎÕWQTg~›_°µÍ/øýp¬)fÖ]Y¼zEe!bD/;µa²ðÂw5,1Іe<¿»Z†°ê@óy7A—Ç™ölA|“\ñÄæµI§Ï\C;e{8Ò;ò€lE{?Z4Á‹ŒÒ? iÐœÂk¸ôBÏ^›jþP4ù ¿TÀû)ÿ³:ãÍÊßåXšBË…Õ0F(p<ci®<D×'˜é*оßÊñ|Ê÷žËžÈQŽrÒ8™0øèFï3¿ßn_ØëÙÉÒ¼‘¥©øŠ[0à ç!®êjÄšÇ&i
+xÚµXÝoÛ8Ï_¡‡{—Ÿy86›:=/šd/õ^ÛöA±•D€,¹–Ü4û×ßCÊ’£4ÝëD49Îço†d…?iE¨02ÊŒ$Š2­6'4ºƒµ×'ÌÓ$(Rý¼<ùñ\d‘!&åi´¼ðÒ„jÍ¢åú}|öÓ_—óëYÂS2KTJ㟗¯pÆàçìêò|ñú·ëÓY&ãåâꧯççóëùåÙ|–0!³øýêrŽDç‹7óÙÇå/'óe/òP-F…•÷ÓÉû4Zƒv¿œP"ŒVÑü „ã͉T‚()D˜©NÞžü³g8Xu[§ÌÄ#™Q"$Ñ)°=%æ@l¨¥„“~“ŒŒc”œ–‘‚§œ ––î£ÀËÃŽ1«ƒËSɉLeÚ»œóˆ1b”âÖ熒ŒÁöŒ 04—Îç—ÖŽÒ•Jf %JÀ:uW³$eñþóø‰ó€§d Zšjˆ--íÑѧˆ*H4;]6p?.6<zÕ€FÑ@©À8rvJ¥|ÇŒg„fÐÉ$¬Y‘—÷ª•Š-x‘*ÔúËÕõâõ«?â)!$M=]UÖE;K„¡qYã·önPÌ¿ä›mHò_ºµKÍlwÍŒ©øs¹.ë;œZ5u‡Û;Ï´ùsL¡ˆ¡`’Þ§ ^SW@Ïhüó G–§±Ÿ_7ø­›ÎŠUѶ9È2•a{¾ÝvN0†Š² ‹]\uû¼Âñ¾Íï
+«d·”Ôûp
+бè÷…¥å™vºÛoY¯ËUÞ…Ùû¼ #?5°‰ßÑâwWTyW~žqñì÷VeÛ nÜxåïÊš‡´4IDÎ0¾/C-(“š(9@Ò÷áÇ8éiš²CÒ³aÒ:e ¿5@—µ¼…f ”ÆW` ¢óïM]xœ.+?zUîŠXcÐEÈp(䟡’õi—p­ã‹L½Ã±g¥M|Þì6Σ0û·8(ë²+óÊÆŠý¹.>PÊkç'·Š[¯ÏÏp
+„ÂQ^{š{deâvÓŸöEÝn7EQã¨øÒõºXÛ˜…ywo¥šˆIŒлWad^—][T·~ÜâwUå­B,[{fíéAIìf Z5î»îÉ=Õ׎ßì[ÏìÆÏ4^€^î6ßYH¯$xMz÷O3O£`èm/ÕªÚ¯=˜B` €J¡ÎR6…¦üM9´!H÷Ã+IŒf"0Z\ž½ùíÕ|‚“‚$ÊøÚ«^O°ä’¡³Às¹|ƒ†Hx
+µÍPH a U¥<äa>#–Á–?áçU4ï’¶¼«aÈ^΃w÷.ìG胑@ÿ :
+U~ST¸f°ˆd§kðŸ;ůP^Tk««Pa¯ˆóv[ì0` n…ÙnÆb'æíOÛÇÍMãODOoñÓBˆ¶GÒ­ö;\tÑ ;š]–Ç9sÚÇ`—ïºgâóc¬nUñCH¦q"u¡‚³QЩ”pÊCÐý IäÄv½ãÝaGðÎ3A¤Ñ"’
+Teß‚Å€ÄZëg¸g˜ 8:$ Ƴ”€d¬?×
+h½=¡'ÄØVµøûDÄA‹Æ-¬#…õômSU̓ 7‹ÞŽ»¼¬\Óa­›ÎÆ™ÈhrdF&Cf¨AfðãÌé>./gÆÛǺ˿üuâ|§³t²9SÃ&NfD0Î=ݺÙäeÌ8::G.eˆ–÷Ü0Ë¢¬šÍÆÆû†1¢¥Œ>N™M—ŽÒ~A.C ¶…Ë@ÅB¢0¯š#(„e,?,~(±ž0_ ¸ëàló” ~óúûúôp¥ƒ”5î8ªDÄök"À—åˆ;CÎ2ŸžÌåî®íSƒ*#P@Ö¹;Hùêæ üt‹ßÜ-§q ]¹*»©zÃ2ðS2Ê+M*øwA„†JCá¾, U…ÿŒ“!Ë €vM¨q=Ù‹(!PâYMÉTI%™àâQEÔEÔEÁÓ€ jT2&ü—Qè2þb¿HªIÆÙQ<…Â0 rêƒ|P^Yeh[¬á~è±úâ2–P°Fú²„cÊÒwûMßè•·Ó5Í]Àœ7mSí»‚L'[¸ÑJmq˜YàÔ#i’`¸ÀÀš,ÈïÞ½ßXÀ>»<½°2Ƨ‹Ëäíüú_óëi Æ󲑹¡Ÿ.?çU¯ü©Ìt,+Oæÿ>½øõÍœœ]]Ú‹’Ž%>u
+°†HÓlxq!âI9
+Mãÿ­ºÒQ QpÁ:àÍ-´ÓÏT#Íú>÷Åj„ ×L§JõÅÈé<ÅÎÆUöß7|£’gãrv€.ÂíKd1ö}QÀßBjßßM„ ƒXU‚å[LÆt`¹?Áåíò ~?jŠ]Å+‹¯¬DLÈå–ó.,–žù¶-Úh/n§®Lª{Ð|ÞMÐåIa<Y`?Ä$,žÔ¾6™ì™kh/ì
+ÊÛ•¿Ë‰,ƒ–‹êqŒ"(H<ãÆ®2D4GXé+Œ}¿#¤ù\ì<•³ÈFƒ´È&qö>÷çmw¥»žmÀ›”‘¬Oþ¯Ý‚o¤ qÕÔ«bÄÖ>6¥0Í8¢†„/&‡oùš<÷:¨cŸÔ'ÞÒiÿÜôÝ/÷‡W-ë|­ùð%{˜ZözoXÊê¡~,ºš( öTöÿ
endobj
-2006 0 obj <<
+2052 0 obj <<
/Type /Page
-/Contents 2007 0 R
-/Resources 2005 0 R
+/Contents 2053 0 R
+/Resources 2051 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1976 0 R
+/Parent 2028 0 R
>> endobj
-2008 0 obj <<
-/D [2006 0 R /XYZ 56.6929 794.5015 null]
+2054 0 obj <<
+/D [2052 0 R /XYZ 85.0394 794.5015 null]
>> endobj
646 0 obj <<
-/D [2006 0 R /XYZ 56.6929 617.17 null]
+/D [2052 0 R /XYZ 85.0394 617.17 null]
>> endobj
-2009 0 obj <<
-/D [2006 0 R /XYZ 56.6929 591.42 null]
+2055 0 obj <<
+/D [2052 0 R /XYZ 85.0394 591.42 null]
>> endobj
650 0 obj <<
-/D [2006 0 R /XYZ 56.6929 518.3317 null]
+/D [2052 0 R /XYZ 85.0394 518.3317 null]
>> endobj
-2010 0 obj <<
-/D [2006 0 R /XYZ 56.6929 489.3118 null]
+2056 0 obj <<
+/D [2052 0 R /XYZ 85.0394 489.3118 null]
>> endobj
654 0 obj <<
-/D [2006 0 R /XYZ 56.6929 437.3327 null]
+/D [2052 0 R /XYZ 85.0394 437.3327 null]
>> endobj
-2011 0 obj <<
-/D [2006 0 R /XYZ 56.6929 411.1024 null]
+2057 0 obj <<
+/D [2052 0 R /XYZ 85.0394 411.1024 null]
>> endobj
658 0 obj <<
-/D [2006 0 R /XYZ 56.6929 208.889 null]
+/D [2052 0 R /XYZ 85.0394 208.889 null]
>> endobj
-2012 0 obj <<
-/D [2006 0 R /XYZ 56.6929 179.8493 null]
+2058 0 obj <<
+/D [2052 0 R /XYZ 85.0394 179.8493 null]
>> endobj
-2005 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F62 1361 0 R /F63 1364 0 R /F21 938 0 R /F11 1451 0 R /F41 1218 0 R /F53 1313 0 R >>
-/XObject << /Im2 1350 0 R >>
+2051 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F63 1382 0 R /F21 950 0 R /F11 1353 0 R /F41 1233 0 R /F53 1328 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2015 0 obj <<
-/Length 1853
+2061 0 obj <<
+/Length 1844
/Filter /FlateDecode
>>
stream
-xÚµX[oã¶~÷¯Š
-õ}î}üÄ£X÷k3•g&úœ‰<—Ѳ§bF+ÕÌ,zw½í
-ÉòÜèn±<JrŤLó·±h¬@6;¡öQL­˜åû(J Árc$†1çÌ
-ˆž5È–RGèaÏ™3“jŒ‚3£$hî9nûI*â ü—ñ«x
-O• MBYƒMBA_ëMÞ¯ëG¢ÖsA½eØ;y,Û”Ôð;\3µªjŠÛÖÍ»ì 3×W<þ\äz~èòºD÷H›ÅóÍzI”O&$0™~ ²LˆåŠz»q}1spD;ØËzѹe©‚´h×ê·•?6PQ²oaßÖœ;Š±bßPDDZ
-ÔiÓ¡<¸g2íz“)ËtÞ”ÛÌÍ‹í¢NêzÑ!9͘Ժ)ªh
-ÛšÀ0]/—X'¯À™V Ð'ª
-ØȬ…ã
-(–+™‘y
-MæœÊ‰ #}LúJx隯\Æk¢oÐ{žú“Æà hbj{_¹ç­/füÞôE»éÚ³Š&¿”XjHmW3‡íq…uãåMn*¨9 þ;Š.ek)JÓX¬1¥z@±z¹À)´Õ™Jµ¥™
-[Í*Öi~è³}¨¼N¡n¼Ž-aÛ&Á'ö2ùð „Tp¶ìd¶NʤÁK Ñ„àé.µÓØû‹Îû¢òmßßX Ñ5ü«v«
-ÚÉÐwDb,„«áh×!pédø·WD“Ÿ‡R^'sª窩ŸVlU‡F²ŒËS‹£»Âš(6…áÅuaåLHc›B[U—F2gYfóv™½€1 rÖè\}
-n: Ôo¨ÿ¤ü_*Q<g
-Tymß
-Øa’ÌšTµ\Â)WùܪÆÖ ÓxJ%YÔŽæ *·)]Øä Fâ¬Ö[OL¼îˆî/K~ójñ•¨Y9G–¹Ï}øžûþÔWLúf y¶+K(œN~|tÕ~ÒX}pHÿWWÁË Ýݦ(L¥)]R|†3è3]¤¯D?¸êx}ÕâtåêŠ('¥W~ÂEš|Þ–DȱВŸžÖ›: nï‰x'u{óg·©Â]ª1äÀú™[¸‡/*»&WM7åý‘&'lhBçXL W…pÿ\\ŒÙ`ü9hð!$º³‡´½__]ã.…žÈÞ&$káX×5+Dûî‰$â'Fw4Þ Ç¿ÇgløÇàý‡›áiPð òŒ†óÑà}X<c¼»Ã¶-jÎŒâç‚îÍø A<â :œÐ].è°J¼a•ø_äQ÷ˆc@-×߉á“'‚ÊÓ@Édƺ À÷Ýi&Î7äuœ«áA1W»²—ôVÀ¡ò÷3K5ƒ°¼šñþ_ôÐMei<Z7xtøû ßW ¬ð¶| wU9 ¼>÷Ê<onFìðÈ)W^Œ Wì†#À)‹.wÞ‡SžžšžoÁÐ5v×”MPÈ î"å°Ë„*y¢¦?…ž‚Ï»Î
-iûù _üuýËíÝ$ Å=h²WÂÕì¬+­NÃÁ@âø§‘}w¬QdßÐ(¨ÉxÙ­ˆŒ¬rgŽèrK÷ÆFýFû7wÊã"e—»7ž,R©Nßx\äÑ.Bnƒ±‡L_;2ãô½]Ú´úBÀµÝXYxð[•ò*Wð·ܾñK%R.2xðKx«ò¬ë§J¾{Å|ó£û´e*ËdûWÅÖ½˜k¦<•à‚X¾isûÒFeÌdþ­¥û
+xÚµXmoã6þî_!N*._$Rì§s'M‘uö·(n»›ŽØr"É»ÝCiËÅç»E ‘ÃgÞ‡¤YDáE™$Rs)’Œ²,šo4z‚µ›ó<I`Jº\?Ïï®…Š4Ñ’Ëh¶ì`å„æ9‹f‹±$‚ Æÿ¾ŸŒ‡ Ïh|}{iÆãË_Ffã).HÏúóíä
+g4—÷“ëۛߦ£¡JãÙíý§§ãëñt<¹?Í~Œg{•»f1*¬¾/ƒŸh´
+A ”B¸ öó‹Ùì©«²6ó¶ül:}' B8xJtÊëákÕý仢¨Åd*É‚;¦¬[o\’<ÕÌ3-̲حۤm×=’eNxšÞ=h[‰óífcëä5ø"OE
+þ»]¬ËΊ¥X\ (NÛb Æ•–ïEõäs&œ¥*Í…LÎ4 XµhHO¤é±Ï¡>òúq¨m‹°°]“àÓö2w·p p´ìevÊ$à%hŒQ¹Oméûpy_4®í»ë4Z¤Æµ¦j ü}‡…ÛB¸OÆpÛ—ÎÆ_EIyÌRJE8à;±Y¯š-2NrÊÏ-Žþ
+ Q …áÄõaiÂx¦B¡­‹¦O#®Iž+Ý-³o`2P9:·_Ÿ½u¯)Äêÿo)ÿo•ªá¦C^«·vÜŸ8Q™ÝçpÊ5.·jmkà2žcI­Áù‡ÆÔ¥ñ›\¡ÂˆœÍv爹A€×}¢»Ë’Û\­¿"µ(—–eér¾—n‡;5Æó•ß× K>ú­E…c …SÀÉo¯þ}µŸ«éÿê*xHB0·Â„”xIÊûÌÎXŸÙÑpAúŠô“©¬Nž×U­nLÛ åî$°ôÊOv'_v%Gr´äççmÝzÄÝ#ïxÚÝüÙÔ¿KCŽ¬_˜µy*ìEeßäšy]>žhrLù&ti‹im¿««)M?XgŽ^àC’ö¶cŸ¶÷ÓÛ›[x³I艔ØÛ'Üé»fùÚþg÷±„#ñO&8>Œ§¿§düÇèý‡»ñyPŒ+$/p¸œŒÞûÅ Bû;l×¢pvØ(~.ðÞl¿!ˆ'¼‡“u@Ÿ z¬boXÅþW ~Ò=ìPÇ5Èwføø™ ü<P4™~¸:×Ïù†¼žsÕ!VÌ;ì9¾ìиû™Âš·#¿\-xÿŽßôÐMä2žlþnÃ?„Vx[®¼€Õ²)ž×%âA™—À-9eõäÄdþŠ8<ü—r½îsç£?-Âósèðô]cM©½r@zåì.TÎv_%ÏØôçÐSìó®·Bº~>êÿ_]ÿrÿ0K|qBör¸š]ô¥Õy86vüâH~8Õ(òïhØdœìN HXŽÖ0¾7‡õ¹¥cP?hÿæN~Z$ïó`ÿƳEŠÓ"ÅùO‹<ÙEÐmÐ òµÃ!3ÎßÛ§M÷¡ŸÃã˜Q)E¤ù9r|EÕ¿SÚ:Ò,‡÷>‡§*Íû~¨¤ûGÌwÿ,zø UDä9ïþ¦Ø¹‡ÛŸ14Ððþ°X®g3þêW[F ’¶Žîÿø×WËendstream
endobj
-2014 0 obj <<
+2060 0 obj <<
/Type /Page
-/Contents 2015 0 R
-/Resources 2013 0 R
+/Contents 2061 0 R
+/Resources 2059 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 1976 0 R
+/Parent 2028 0 R
>> endobj
-2016 0 obj <<
-/D [2014 0 R /XYZ 85.0394 794.5015 null]
+2062 0 obj <<
+/D [2060 0 R /XYZ 56.6929 794.5015 null]
>> endobj
662 0 obj <<
-/D [2014 0 R /XYZ 85.0394 655.4043 null]
+/D [2060 0 R /XYZ 56.6929 655.4043 null]
>> endobj
-2017 0 obj <<
-/D [2014 0 R /XYZ 85.0394 633.1281 null]
+2063 0 obj <<
+/D [2060 0 R /XYZ 56.6929 633.1281 null]
>> endobj
666 0 obj <<
-/D [2014 0 R /XYZ 85.0394 552.1893 null]
+/D [2060 0 R /XYZ 56.6929 552.1893 null]
>> endobj
-2018 0 obj <<
-/D [2014 0 R /XYZ 85.0394 525.0283 null]
+2064 0 obj <<
+/D [2060 0 R /XYZ 56.6929 525.0283 null]
>> endobj
-2019 0 obj <<
-/D [2014 0 R /XYZ 85.0394 90.0274 null]
+2065 0 obj <<
+/D [2060 0 R /XYZ 56.6929 90.0274 null]
>> endobj
-2020 0 obj <<
-/D [2014 0 R /XYZ 85.0394 78.0723 null]
+2066 0 obj <<
+/D [2060 0 R /XYZ 56.6929 78.0723 null]
>> endobj
-2013 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F62 1361 0 R /F63 1364 0 R /F21 938 0 R /F53 1313 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+2059 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F63 1382 0 R /F21 950 0 R /F53 1328 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2023 0 obj <<
-/Length 3601
+2069 0 obj <<
+/Length 3608
/Filter /FlateDecode
>>
stream
-xÚÝËrÛÈñ®¯àÁUªDì¼€rÓ:’£-GNl¥*¯ ’(ƒ
-·ûí‚ù2Ž‚Ù ˜ÏãX̶*~ ¤t3ÅŇ‹´
-,ŠcÏ í¡ÎÒ+
-
-»!± jÒl™o“‚Æ}™o*÷5#”æ»$M}‡„¡U[rc2§¾ØÅD*î]£oyLò"Y™]m\-3Á(u[ÕÅ5-vtVÀ¦ ¤I5Z—žNp#„´H‹N]ù±C2Œ¨øH«ec"õÉ#5HpìĨš81ðO„„"ö6 ½Éetêú: û2i‚¤jtcBÇ…¯e«gÿšŠ5ÀÐnNPÃðևݎx½¶¦LÚ¿—ùÂpñ …¸
-ås,¡àû’qWŽ?Bþ[ S+­-¦¹§¼°&da?6]êBŒ!†ùŠÆyCã'ú …††ö=BlC;#4"ó©ì§gYL.ìRfršÍÀÁÜÐÁ§4_à[b3»Ä‚Êv l6ž˜ƒI·1ëØW8ô= òrYÒ¬Ñß@¤®=ŠbÃÉÏRÞ²Úî’&_äEÞ˜ W¹{ÂÇ,Ù¹IFa‰Áp=3p­ý(nù«©xŠKÓÿN¦ð„º! Õæ®ë2ÿJ‘u@$„6/ÓÜ|ù°8TÃû,á&àC9µô0²¥È+GºÑÈž.Vô‹
-ÐHŸcîg FS|³Vña’mDϘ$[}0|›Í›j^ävÆ„-ŠuKÖY‰ù‰1êYeÂÆ£d;¹³u $í‘©;’|Âså(,k™ãí&Ûç³O6µš(ˆœD<<¼ìKÊ¥]µ¿Œ¼C‘Õþ·ì%dÊS](0€±‹¡mú5Öˆ~íTfšÀ1¥¤ã&{W#OÎ6K‡ò
-ŸŠ"N$Ï:c0)é}úYe¹ÿ «È×±>_”Sj¬¢³,:'êp2#í~3gd¼ÿ­/ã0?!ã\»Â2,·µSX¹Mšå†&H»¼¯Xiž°Ö-Ì8:Ó6¶µó=Å9+·üÿNn{ñ³äÖÑþå ÝŽ“r+C?Rã•[Å|a5ö¸ûö£…)Õ"± jÊ]`Ï«‡ÈÝmL.þ3É‚E:<O.ašTd‘õ<d3½‰L¤Vñ®2i$¬«îqÐì쇪u"þ¡fÏŸEÍîî¿{}û±7; ¯ Í—(²|F¼ÿXøìÑPh`AŠ>—J$Ä01ñ¶
-v`ZÃ<]©ëÂCݦ(onîoÞ›ºÇÃÍTMBBî--Jsk
-KzæÑÆ„ÝÓlö¥ÉJŒgí÷2u!‚5¬AÛ^µ…5 )•X쮯ôDh#õÂö± “46'Š øÒ;Î…ÀªÙៈš´rq}‹H )uåpéW+»£`¦½Çë·×> ’‡^<Óúã0)ÔP»o}9çŒ1ï:Móþ!·¹»Ø­¹Ø”šá“/ಗóZ̃”d.çÔ|þ¨¼ãèhŠ?Ž…8ÛÍDŸz3iSšÞ‰6}´‡P©ˆ~Øî†ëˆŸØ#~N† ¦ÐÉIE> »„)zþ@„«„3æ3Õ>£ì“§)GÌQZº’ @µ™Íˆzy>=N@²Ô•û¹SbÑLzììpµ¨ÞÀ'Ô,ò2Ùûëmø ®G¾}N³ÅRÀ¬À{‰ø“ d0he+Mš¤5¹/›C[ÃÄï­jµ!=~X]ðŽ£m²ÿ ”°sù–pªŸ§E•¤ÝlîJl¨§T7+”P³ÛCÆ„1&öûǬ}†aí"k ×è›P'î=K …CKˆœ¸>/ÌdŽ¤Ã
-åx!‹«ƒ“—±É¸òVÄr`x3]ê¿jß°j”α
-ÖÅÅ¿ã"'f&ÂYyX»sá­‰3B¤± 
-ú&Ú7JƒV¯¡ïæ 0N˜G¶Pžz cüO“n.kÐ*âмSØq,$|Á"·‡<‰­PÃOø‡’‰g!L Úö ÐXŵ{ÕEÃjïEv:mŽcB‰h”šT`Ì Œñg«ÆåmöIY¯zy‚iŸè0T¨,Ž­Rƒ®º%‡Ø›Øw*nË“èå Sî4¦:å…¾QÞn‘3ØoÕúøt_SD•tû¶ÚŪªD)㒤̳¯íÀfŠx„9ëtå#ÈN¶'…¥ŠºNa->ÄqÊ{'üsEøÊÙ«‰÷”4ˆþfh È2«k¢ ‡„ ¹zS¨Â©½µ©-‡¶Æ¬µÖæ†Ô#®/¹õÒN¸/„œ£—©¦•—Ž"ma§*Û-›mLggݲ)Å„ðY1ñ”ä2RÒJô:ÉKß=F~H=ôP×E7_cáVòÎ%~Kþ­ÀlŸG
-1— àŸgB‡R³èêœQÅîÿ1‹TÈendstream
+xÚÝËrÛÈñ®¯àÁUªDì¼ðÊMëÈŽ¶våÄVªRñú
+„úçó ÞÏ×7£™„š×ïnÞ\¿ý×ûËóÈx·×ïnhúýÕ›«÷W7¯¯ÎçR›@
+ôl®‡
+¤¹~@þØÙ ácä˜ ›:+о细òpW,ï° z{gÝ“&Õ6Ö,ƒX®¬ýÆñÊŠi½¡-ݲN!ô@RGÚº‘¼Ìø˜"k廓¦|Â\/ÒÅ6‚`ä7@ò\z=žI4P•$¡m l¿´÷†¨ø-`¯Œ„/Bé„e5IòDËp`#Ê|ÕÄÅT’MTl6yV€Á*ùD ÿœi˜ähDs`ŽleÔ M1‰Èà)‰ˆ|Á -H›)S$}¸¡ÃQa$¡«S2îôŒÿxa¹÷ñYôéÓäÎg‚×/Ð-"ï5Y@”üKºÙ–ùÅJaàKÝÙΓ·2/½øç }‘M™€Ä×ú‰Œ8ÐìÌrƒu72³¼‘iQrãØS‚ÚæÄNs ³ÜïH´«–&¬2Jy[ðN·ƒ½í¾ä )/H©Éòe±IKX÷e¿M¨ÜלPšoÓ,³ör‚NmU(9ÌN}±‹¹ƒ6Ò»DßrŸeº(s^m]-³ñ(u;ÕÅ5vtV ¦ ¤M8ŒÓÆl‚!$G‘êÕU^;´À Ji`½l-AttòÈ$8qbTOœøNÆ'BZ‘xw ½=Éu|ê„õ3töeÒiÓ)0èÆ„Ž+?Òžý{*Ö
+¨¡ À£#5|tmkyë—Áò„ «Ôêz߈ãs—‰¡Æ:ùn;ëdM\ˆi{$!û–ò›ljBÉÜeÚÏhÝD?­ªX9Ùü àUuKDIM]îÛœõMiØ)åØ®P, Ž|hÛ&wÂÐòÝûë·×7S×Ë+•" S`mEF+ ¬Â¶îdLV(Ÿ˜c!%j,×Õ±àÇÈV2µšm1Í=%›lûÔ…>XC Š‹–Æô!²Úw± íŒÑˆÌ§²Ÿe±é°K„ÍMh6Om
+â$'··¿Žö¥Õ’WíÎco_æÿ|š½„|yÊ®+f0q1'aǬ8ˆœ˜f 0ÍíÌ1U(WSO.7ÏÆRžƒ"[ÏŠ‚N$Ï{“0)ïC9úQõ¹?CÜMìGIô\uÎDàY?É¥§>PNl4ï·sV҇߆bób.#Wd†å\G…•›´]ÞÑ$SÞW,9OØìaÝm[ny~ 8OÊ­ü¿“Û@ü(¹u´9H·ã´ÜêÐ „zÏÈ­¾øšh{Ø>ÿ€ak¶H/Ÿ
+¡ÁÆ'(6@åû®wL1ùC)ÂÇQøÅTŒ%iR”DÙóPÄÂö&²>]#û*¥•³¾Ò'!XãÙ?öuçJ(|‚ LAûW»ÿí=îû^ñ0Ô‚”_£ÜB"Ëáóá£gD-@ DxsCÐDb@,S¯­`=
+l^!šæ^½:
+&2*·ð®¯ôbÈQ{É},Τ-çG1Daä‘s¥°BAÖ¸Ç'¦&«]Œß!Ò@z];\ú –e÷(¤éîñú×ËF‰Ä ªé<Œu˜ F\#BøhÏ¥»̲bxÈ›Â]ì½Ø”šá#0’zÿZ ŠFöqJ —ÿÔ~þì©Ôãèh AŽ…8ðf¢Os3íÒ›Á‰œJò!T¶¢ï7Ûñ:â'öˆŸ“¨-úA¢R“çÂ.aŠÎ?ÐA/áf$áBøÂtO*»ôaÊK”–¾üP9+âìhóÓC$N}™p˜G¥Œf:`g+£z}>¥fQTéî0\Ï à§dt”íóÓN³.ü‰â/.œÁH “­,mÓÎäb¾l÷]=¿wª=6Ö–ôøaqp!<Ž6éî3P‚çŠ áTß?N Ê:ÍúÙ•3ÄXO©†V(¥f»ƒì £Lòw÷y÷$#ºEl ×èÛ€'<QŒ…#Ò?Éèiá~¬»XÍI‡ÞP›øAzKrdxZM킱¯0ì‹æx!Æ¿ÓÁÉËpbn|…Õ±‘X^€ÄLWÇðÀto XAÊæX‘
+ ô0~ä÷U¹ïÛºiŠ ™1G`\ PØ ÃËekØßö·Ðî÷¥€¬#Ëû¿)X”û§/‹~÷ÿ«ãRPs
+ÃkúÏaGêþö‡Ó€ŒMp.¥)iaÂ4œµ1l˜œ°-~ å³
+óHb
endobj
-2022 0 obj <<
+2068 0 obj <<
/Type /Page
-/Contents 2023 0 R
-/Resources 2021 0 R
+/Contents 2069 0 R
+/Resources 2067 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2025 0 R
+/Parent 2028 0 R
>> endobj
-2024 0 obj <<
-/D [2022 0 R /XYZ 56.6929 794.5015 null]
+2070 0 obj <<
+/D [2068 0 R /XYZ 85.0394 794.5015 null]
>> endobj
670 0 obj <<
-/D [2022 0 R /XYZ 56.6929 306.3415 null]
+/D [2068 0 R /XYZ 85.0394 306.3415 null]
>> endobj
-1797 0 obj <<
-/D [2022 0 R /XYZ 56.6929 275.1221 null]
+1819 0 obj <<
+/D [2068 0 R /XYZ 85.0394 275.1221 null]
>> endobj
-2021 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F14 964 0 R /F41 1218 0 R >>
+2067 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F14 976 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2028 0 obj <<
+2073 0 obj <<
/Length 2797
/Filter /FlateDecode
>>
stream
-xÚÝZÝsÛ6÷_¡{“§ƒ ïžòa÷œ™Ú­íÎÜ\ÛJ‚-N(R);Î_»X€%ZNÍ\&“q-‹Åâ·‹Å1øÇGi1™Å#ÅQÂx2š-OØèê~<áŽgâ™&!×ÛÛ“×çR²(SBnïYiÄÒ”nç¿ßýûÍÏ·gק‘°±ŠN'‰bã·—ÑçÝÕåùÅ¿^¿9Õñøöâê’È×gçg×g—ïÎN'Y–
-h\Û›[läZÞÜ^¼»9ýãöÃÉÙm7€pœIÔþÏ“ßþ`£9Œõà ‹d–&£GøÁ"žeb´<‰%±”žRžÜœüÒ jmÓ!£%2’Tè« >âq$c%zfK2š$Öl0ÒÓ g¬?Ò6o‹¦-f ŽäˆÀúl4i¤t&­
-`Lo©&çyQæÓr‘~Õ¬ÜÌ=oYsÍêMu
-’®@hyK¥GcG>Ü[QÑ×YR"Ý°àZ niòª¨îï6%Mµ–ô<å}Ij0ÈÚs‡S§2V5ôÕUóE8 0ÐaÔ飣L`Q2)ðô¬3ÔU×AÞšûz]|öÒµ×Æ »«Ë²~„q:Ùf†ršhÀa³$)-£T}™»òH3Õ÷Ö¿ÕÈ«€î$£ì`¸ v D¹¢oÑ5qÙ¨Ü5Îô6„œ‰Hʘ”J¢8㱇‹jV/;ƒ]›?7¦i›]{I =pžÂ¾NçNä ZËXD"MûZzt6®6Ë©©N)Îhë…~Hðëýå U2ÝølÆW1ùlAæ¸úùÝÕû³=ô$RGB%êˆÖ@¨H¦Õh²øÿGLÆGĤH"³ôLÆ<â)Òö0ùËƬ s
-37$S nê²9̧£¡^~r‰¤_çW> y(Ìãi&ÆÏ{Áñ&à ÈGLXHÙKN¤,R,£\í2_ºüêƬülô7 Ãþ°íêX‘ù öÞzÚz‚eÓoʽñW>‡ b¤¥
-Ó…>HiÛé¶(¸§€&y,|Ç€ŒY{Sñ"ãg™µþëÊ!Ò SåÕÌ|9,ƒ†Ëƒƒè€¢LÕ¦òø»§-Ýœ`©ôø³92Øý¶™ EÐÀ5DO»™r»¨fã“ÛÜQ>w¶l×yÕÜà|4Ó}Çi‹a§’¼„g – Š&×~Müb}-Ó8¨wáPﱊÇ*ñ±+*»„ ±K6v‹?€^@,àò/5·'R J)ˆàS
-üµŸRL|0.L†÷ßÍ,Žfðoø©ŒTªþʈ|‹g€ Åœ%‡VŒ´ð§·iºèóþ­;ƒ¸n̈°“¯S{‹üÊ{ä÷§;K¶9v¦(Çš‚¥­¨2±É3~)yÆ*<iŠÞ?WÙÔZ3f¤© Ïëî„ «Ð9n 3kÐÜÏó6Ÿæ l!a¾ØøU•îè æÓ¬Ìý¹–ùú#•~g ûüÇ©iÑ zíý+õ'²PÈéc÷°ðűã1cšŽ‹–Hx0Ù¸Z:T„Ò*_CP\Û6en7ÌÚRº“¤X»S±h¨êcU?VŽ¿&ÒÔÐokçÁá/ ¾]Xq‚#ñ›— J¼ë@Њj›_þçúúæì‹h¹cotŽçßo^)3qÆ_8 aFT,é\ñ¦ž}4î`ûâõÕ/ÇaWÇÊ(«ß¥žúárœ…eœén9†ŠÊ´µuo S@)sôÞ¡ãÐð…)áñÆþm@Q€k¥Æ3:✫ðömïN2¥¶š“§Q’ûþ|ùK8™ÀÖ4ÖtPó
-l?f›5ý¬Úò IÐÃcMux-K¥ðæVº[Zdµ·´2¸¥ÝV:HÊÞ2&ù±_U®¦h¼|×µo²*s¢á}ë'× ]0źùf¹²–R©»Av©~gL”®Ü¬Ì¬@qgãé“kEÙ×ô9ìû5WûÛLœÐ}œ&Y¤dæ[Ìê
-9ï7ëî¾Òž–°¯¢+1ÐÄ_Ûƒu対–ukÊ'b";SêBW‘„`Þóã‡"²8Ñw ÏyU™’*­Ó»4nÐ1,lxô±g'fÈY!jj-TÐÆ,mf†ýØÑ¡Z½¹H XA3‡ŠîYj»éLòcž{×!´ˆ2hƒ¡êÖ÷#*\=c ùŸ_
-:.»tÓUµÆ"`eÚÕ†Çq$b•õÔÙ[:®´Ø—fã¡Mó÷gopL'˜ D|û†$‚%Ô½#énôov"èy1pLùb
-{hˆÅyµÉ×OÄÌ_ EJžiæ^Çœ.b¼fA㻧+î¥KN,´ˆÃo›íì>‘‰Ý#SPÝú+N`¼ÍRyý7!±;Ô„Š¹ifëbjüØiý`"ÜÙÞåE»&ôÀ£ƒŠØ_¼IqøzGgôHë@o®è=p€*k^ø¢Â j,¤Ý
-ÎË]ÓsÏ6%¬?`v
-ùû®y˜È)íQ
-ì‹üÁ-'‚¡rs ]Z´ªn‰êÓ@¥håQÚ/»N³Äh z.×BïM{m¤Ð.ða!×!i”øí|IAÖrtH¤îXæn±§˜Ù³UA)’[¯L¯ øgÕ“™’ÛXD ŒUú×Nj>Aœ*É…†V^HèñäÀBNöW¿¶Ü.ܘ‡§Ï­˜’Å‘”÷JÙ0Ȳý±{—¹¯ûÿ
+xÚÝZÝoÛ8Ï_á{sÐZå‡DJwOmšì¥À&»I8Üî>È6 •¥Ô’“¦ýÍpH™²§»5pEQ¤¦†Ãápø›áðƒüã£DE*ÙHgq”0žŒfË#6ºƒºŸŽ¸ã™x¦IÈõîæè͙ԣ,Ê”P£›Û@V±4壛ùïcÅÑ1H`ãwçï³ã‰HØøúæXÇã·øßÍùõÍùÉõñ$ËR1>ù÷Û_nN¯ˆK ‰âšŸ\^œÿôÛ•pyAä«Ó³Ó«Ó‹“Óã?o>ÞtÉ™Dí?ýþ'Ía¬ŽX$³4=‹x–‰Ñò(Nd”ÄRzJyt}ôk'0¨µMÆY$¤V|ÄãHÆPš-É@h’x³O8c}³µy[4m1kp„ GÖg£‰H#¥3i8£)n¦Äx™U  Q˺m¨¢¾%J³‘néEu[¯–@«+bÈ«9ÕܯŽy:®Š¹qÒó`Vyé¶fu›Ï|%ˆ¡ŠucVŽÖÖDº3­>~×3TÂøpDœGY’;¢va Zf¢
+5Ú:¢|½¿¸¦j§ ­ÂÐ1à-&Ÿ-È—¿œ\¾?ÝKaL? 9,`’d4Ùýÿ#*ãC¢R$‘ŠYú*cñi;¨üumV…ÙÊ ƒƒr¯ÒP†Z[PJ-;PbA‰¿Pâ×'7$ûaW0,Xà
+8$Snê’:L±£¡^~vù¤_îï}2òP˜ÇãLŒŸ÷ƒÃÍÀw”™*
+–>Gm¥;LÂù<+s‡„e¾úH¥?XÂþÿqjZ4ƒ®»BçDïJý-rú±ZøÅ=<¦é¸h‰„G•«¥cF(Ýç+ˆ,ƒKܺÌíîY» ‰tAH±¦§bÑPÕǪ~¬M¤©¡okçÁ@á/ ¾]Xq‚Ž'ñ7/”&x× …Õ6"¾øÏÕÕõé Ñr‡ÞóÎ~àSf*⌿p<Ô¨XÒ9ãu=ûhÜY÷ù›Ë¯^•Ã®•ZîW™zú‡«r¦–q¦»U**Ó>ÖÖÁN!¥ÌчÎGÀö䆇ü÷FΕjÏDèˆ#”‚¹›9¡Ó(N¥„ Si”dľ;aþbN&°K5Ú¼„1ÉùÔF.,ÛSmÆýþ(ÝþËá
+|îwV—¥™Q
+6 º]䮟®6_·‹zU´OCôqa*w©È 9uœ
+os¥»¹EV{s+ƒ›ÛM¥ƒ¤ì]*c®‹ñeåjŠÆËw]û&÷eN4c>»NèÒq(ÖÍ×Ë{k)•º[e—\!áÆDéÊͽ™H îl<}r­(ÿÚ‚>÷×\yìo2qBwqšd‘’™o1«+ä¼[¯º;tH|†íÝ‘&þ*¬Ó(¶¬[S>Ù¹˜R×ƸŠd¢ú~üPäA'ú®äÙ"¯*SR¥uz—È š N¢ Ï@vLàÄ 9k
+i·*hc–67Ã~ìèP­Þ\¤„¬ ™CEw¬µÝt¦y1ϽõZD´ÁÐNu«»®†ž¶„üÏ/—]ºéúÚ?V°2mkùµ`ÜSggAê¸^ÐbWš‡6Ñß½ ÀQØ¥YʈoÞ•D°„º·%Ý-ÿõV=+ŽI_ `ÓIÿ‘
+ÌåÃ0³…Ÿòë×¾øÑüs`h[AîÕ«WÃÃxßõر l2-u–fqXN</žn ™ÞÜ2Ma‹¥¸ñq1×£ÆUºßœ~ÀÕÜR«ßªâ3¬¤O¥“Ü°´ùòþ5íQ`Õ¬»}#¶ÈÈÆ€gÌýGaO±ø!¯Öùꉘùë¡HÉ3ÍÜ‹™³à!FÌ‚.h|÷œÅ½~ɉ…qø¶ÙÎö³™Ø= Í2íHqãM–È뿉Ýé&TÌM3[SãËLëÑàNwnº(Ú5¡TÄþâ­ŠÃ×Ë8:¥W \zsE/sèÅTYóÂ/*Ü ÆBúç@^ÜÒÄÁ7…K®û³Á»mU>äåÚñÑ kcà²+ P ß;:òھ゚ûá“9¿Š¡Yì*Ò ˆÆ¢öO¾TïTppîšžy¶)aý³SÈßÇ8pÍÃDNiR`_ä†h9ü•3 ˜cèÒ* UuKTŸ*E+Ò~ Üvší FKÐs¹zoÚk#…vk ¹.СH£ÄGhç{Hz ²¶£ @"u0wsˆ=Å̱
+JÜzezmÀ?«žÌ”ÜÆ"j`ô¨Ò¿¶²PóâTI.4´òBBO#:øs²¿ùæfáÆ<<}nÅ:Áp啲aÇ;ªû·š»ºÿ‡Û_þendstream
endobj
-2027 0 obj <<
+2072 0 obj <<
/Type /Page
-/Contents 2028 0 R
-/Resources 2026 0 R
+/Contents 2073 0 R
+/Resources 2071 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2025 0 R
-/Annots [ 2033 0 R ]
+/Parent 2079 0 R
+/Annots [ 2078 0 R ]
>> endobj
-2033 0 obj <<
+2078 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [84.0431 269.7901 145.2431 281.1822]
+/Rect [55.6967 269.7901 116.8967 281.1822]
/Subtype /Link
/A << /S /GoTo /D (statschannels) >>
>> endobj
-2029 0 obj <<
-/D [2027 0 R /XYZ 85.0394 794.5015 null]
+2074 0 obj <<
+/D [2072 0 R /XYZ 56.6929 794.5015 null]
>> endobj
674 0 obj <<
-/D [2027 0 R /XYZ 85.0394 769.5949 null]
+/D [2072 0 R /XYZ 56.6929 769.5949 null]
>> endobj
-2030 0 obj <<
-/D [2027 0 R /XYZ 85.0394 748.5408 null]
+2075 0 obj <<
+/D [2072 0 R /XYZ 56.6929 748.5408 null]
>> endobj
-2031 0 obj <<
-/D [2027 0 R /XYZ 85.0394 686.2137 null]
+2076 0 obj <<
+/D [2072 0 R /XYZ 56.6929 686.2137 null]
>> endobj
-2032 0 obj <<
-/D [2027 0 R /XYZ 85.0394 674.2585 null]
+2077 0 obj <<
+/D [2072 0 R /XYZ 56.6929 674.2585 null]
>> endobj
678 0 obj <<
-/D [2027 0 R /XYZ 85.0394 255.5751 null]
+/D [2072 0 R /XYZ 56.6929 255.5751 null]
>> endobj
-1669 0 obj <<
-/D [2027 0 R /XYZ 85.0394 232.5802 null]
+1689 0 obj <<
+/D [2072 0 R /XYZ 56.6929 232.5802 null]
>> endobj
-2026 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F48 1238 0 R >>
+2071 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2036 0 obj <<
-/Length 2917
+2082 0 obj <<
+/Length 2914
/Filter /FlateDecode
>>
stream
-xÚÍ[ÝsÛ6÷_¡Gj&Âá“ îÍíÔÖId¥×¹¦´HÇìH¤JRv}ý-° EÉ’iÙjFã\‹Å‹ý
-£„‹oA³m¨)CBÁ…Cí+çÚCUÇuVÕÙ´Â÷³å|¥U¯TQ£àn¤fpÝ0FŒRÜöC#¡cT·ó†#FéÓ>Þ˼NËʳái —ÄH&—É]: ÁƒÛb6dÁ¬xÈòoH©ã›YZa¹ZÂÇù<.³ÿùúU§K!X0mºÄ¶wqtœ{K3HX”CÅ}–¤•Õ¥‚‹¢Ä*i<½ÃZXéÉÅ-ëFXíž‚„êŠu fém=/*+³âÍ–ó¿d>}UÄ77®¿ô>‹ëFš ½zœß
-'ñM6ËêG»Øü™à4I2Û8žaͼ¨Ýòƒâ<~Ä"<ñÙYN R2ß=ŽÎ–Pùm7œÿ¹K}…xÛ\ͳ$q¨qÝ.[Nÿl+,ÃxÒÔ}-þ•¯_?݆•EVkV#µQlÔÔ,‘jQ䉳=HFµp/¸ôlÉ©í¨iî¬Ë–QDhW*ñ Ù->ãÅb–M­!­©]³‘B€¥íx@ÖÚÚ+”ÆZö´¼w2ªç-pד…Œh!ÂÒ`Ê#¾È•IA$ø¡5OöªF´vöí(°òŦÅ:«Q3"ðôü¥”«ØÂt0 #ðÜFƒ· IÄØko_Ci¸›J?m ]pɃ34,nYm†Tm´V]¿m46
-^Ról¬ñ„eÓb'@ÂÛF´
-mzU†p.UǼI;³ü>žeÉjŸd¥®EùöôUö-ë%ÎÀ3ØwFuÄØï0â=±ˆ”šðЈÖ.¼ÿd7àtŒ‡Jöµw\›ÍØ`/eîˆzÄæA@‰ëžhA
-E“-œ.ë»Ïåã8ý2“Hª`üåámU”™MïÓ•çÞk í>]i¯ Ò²t ø?Óiý,ð!±&3C´æ}!B51Å´]*Æö—„ÕãÓ×ãÙ‘ôˆñ„€6bº/b
-Œ~»-š¡‚müå·‹q?œÿ-rd]ÆyuÛì{ì²½àvÄ>^pD¶Q؃­0†H ¡¼ÅéË"‰ë•5äàJ?¼gy<Ϧ>ðu<Þ†¯—üÈC
-¬¡aOH!"M¤MHaw
-íŽ#Ø\ŸæÕKŒ6òVi^?]G¨#†NÛ
-¬'"ZjQ˜¸´¬\æÓØæUýáÀÐX•‹‚¦EG÷Á´#íc
-±«1¡êÁ4DE‚µ˜Ú¼”î­„Ïn"ô ‰r¹§‡•P{Îø<šŠ‘G+}a¶°ËUvÐaG¸#†P„„ö; aH¨;¾4‹ÝáÓ4¶ËŽ”‡Â2™ˆÓ}ìEÓb–<Š 9R}‹›k¢™FgaçõÒ¬ö£ù¹ 0!hìãræ,¦¤þ€¾Äø¨ííræÉyõÐ Û½Ý îíBËy£‹{rªŠ‡µbµ¡+ÚÃSŽ
-N¨E»\ÿ.Ë*­÷YŸ\o®O dþ2Íʯªµ±¼¶w_üš$®c²M[Pµ˜yªZŽh•É=·*€ë¥ÏwS"µb›Êd9[%±Ïue²{9Hx%lÄ@!#³½N¼ZÛ:óø6Õø'3’Ù㘥Êhë®ÏÇÖvüza7íO/0"
->â"Îfs¶`Ø‹¼—?;ˆãõÃ,¢$ìÛIb‘£¨Z_pñqü ¬D‹H¨àó²<Àž÷3¸®$>^ËTH éÙfbšA©jíåog9½¼Úö
-Y„è3v
-|®´Õ·¹YÖXH²jëüiác1ÜŽ
-ÝìÓÝêv·®í›ÝH²àß0µ%'œ-Tîî³-]~òŒ’Ä+ïöŸcØû[î¸l·©¸ .Ï Uá?׋¿Æv)Ù¯ÓY\Už6k.Î?â·›/‹‹Fe‹í#w?‹°WßM»%¥·­9øºçöU†+ Cí'2içË2ƒ©Ã'©—å Ë£a{gÎþ
+xÚÍ[Ksã6¾ûWèHU°xÄÞœ±=q*ñÌÈšlj39Ð"=fJ"‘²ãýõÛ@ƒ%S¦e+S*5€FãC£
+#ÚH¢(Sƒéü„¾A݇æÛŒêF£v«&'ÿºz`ˆ y8˜Ü¶xE„FL’߃÷?ž~šœ‡#®h’áH…4øáòê )?ï?^]\~ø2>jL.?^!y|~q>>¿z>qè/[|ßë‰íä{^O.ß_ÿ˜ütr>i&О$£ÂJÿ×ÉïÐAsýé„a"5x€”0cø`~"• J
+QSf'×'Ÿ†­Z×µ 4%"¢"®;P㬠5eH(¸p¨}å\ûÙUq••U6-ñ÷Ùj¾ÀÒºÍWª¨Ñp7ÒÀfpÃ0FŒRÜŽC#¡cT»,”l8b”>ã}±Ê«tYz6¼%-pá’ɤã2¹K‡#!xp[̆,˜Yþ )U|3KK[fA¹šÏãeö?߸lg«§õxØñ.®Žjbi ‹åEAqŸ%iiA©à¢Xb“4žÞa+lô€äâ‰U-)ÊõÎÎÍÎB]Å6Œ³ô¶š¥ƒYñf«yŽ5Y‰_ß”ñÍ/½Ïâ* ¤—óÀÄ5Îã¹gì¤a¬ž#PüÜ­öÂŒ¤aÓÒ7G&¥ Çñ5wÅC-R^óL7'ÅݤÊÅ5Ðü¶XÎV@?[)žNÓ²L¬†i`!öÕ?N&Ÿ²Á j¦wqž§3bqPl³eöíΣçZ9Íp
+"C¾éÄ^Õ©–¡…ÕÎñ±V¾X÷Ød5Âù€;„ )×A…iái
+CqõÚÛÖPî–Ñ/YM\òà ŠÛR[@*»BR„ƒöÐo›‹†À´–˜gƒŒ',ë;à†À„XwôÐÀ£$‰B9|Æé_«´¬î%8-d0þÜáÉA‡ *Àƒº>—Ÿ°¹ôVÆq(O™¦°°&bÁ˜GZEÞVØvha,·K,ç¸
+†NEaÏbQM¨ô8Àb'yIû—hÜ,Š͇P:?»º¶uqz ÑzÅv"Ú’öP¶êЦÂWÀ@Èç•RS£ôCœXL~2ˆaÁ%¾ÙU^®‹bYa(‹Pc \m‰qä‹ánOåháÖ
+E“!œ®ª»ÏËÇqú'ä!‘TÁøË :Û«Xf6¼Oלoù¬¸±ût­¹6,ËÒ ØÿL§Õ³°·¦t´ZÌ Ñš÷…0
+UÇÓt©Ð_FkD_fKÒ£E؈é¾(˜H*0Jøívé° Ädã/¿]ŒûÁüo‘{«eœ—·õéÆ.ûÐ mKìc…V@$…=È
+cˆ”¸[”¾,’¸JQQC.
+øìaA–(çQ{wHE µˆÏc© y´VÎæ;\ç=
+/âíwQ_Þ«r㬰Ül×z±²[åÛêô6ýüçRZHý Y¥=Ö—kC"ÔoÓÓ…RŸŸ¦PµÆã¿B}šî¶µ}'¾-ÙÕ8óPBVªzŒ3µ}DÕ
+[>N!Q]Ƴ}Œ¹”[P[Š3æMgê(v\Q[A)ŸXÁ.‹^ø¤ºÛ&BîAXŠ".wOœ1ØïÐ7ü¦°µ‡ºÿ6eÝ˺Ö=vh •DiÓg
+'T‡¢Ùª/—eZí³7¹ÞÞ›@Éü㘵ï]7k"0 yçkß²ø2ýǤKWP±˜yªXŽhUÉ};U  Ç=ŽÒç;§ K,µbÛªd9[±ßMU²ûØHøÄkÄ@#k½F¼Z×Zëø6ÅøçÜ3ÒÙã8£[¸>[»ñë…=–?½ü ˆ(x‡‹8›Ì9ØA€= bŸÑ^þ¼èö$ŽÕÿ²ˆ’°ï̈EÌ¡j¼ÀÅÇñ/° -¡xϗ˃Áëy?ƒêZâcõ­L…2ž%¦9”ªÆRþvöñ—ÓË«¡í°Âï}Ü,Ûn–y7 55o‚?½Ke¢#±`ÎòíH–:ì Ę·6f0)æq–w.#"yÄ¿›Km/±ºTÆ)ä ¢ÏÌtÂP¶ÂÜ=Œ{ûjmÇÉç=UÅg¹NâU‰ú"êwÚ"(ýƒKG,ð»H—ö-t[×jA:ÔÅ©ž0ö2Z&Ž™¤È Èöožx>6÷D éV ¨ë„Þ¶{ªµÈyÇ#õ>­]¶ç±­¶Š0Jå÷SÛ–JÊ;+{릢=XÖ=ºÕ6d„1Ý2Ɖâ²qg+÷ØÞÄ.T0Â>ZËCӜ̈́ÍkxÓhª-ÇU•ÎèSl›¿k]õ}nV’¬ì|F?-|†‡O¡{Þo¿îm¶{;mÙc£! ñ†ž¶ä„³…Ò½`¶¥ËOžQ’xÕíþ§
+û"Ë=æ–Í¡7Á噣áÿFøêêq‘bml7’­Îâ²ô´YýüýënR|ò-j…-ºgîþ¹Á>`7Í”îÚqñußî=f+ Cí2iÖ¿c“ÁvÔMËf“YÞ°y0¶¯à¤›ÒtëµÔúmÛDÂÌ…ÀF$a$E×<ÑAïYÕKÿ¿jýgRµ_¸md"øƒõ´—x¡¾1¦žâÿ«n×’þÿ›ãvendstream
endobj
-2035 0 obj <<
+2081 0 obj <<
/Type /Page
-/Contents 2036 0 R
-/Resources 2034 0 R
+/Contents 2082 0 R
+/Resources 2080 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2025 0 R
+/Parent 2079 0 R
>> endobj
-2037 0 obj <<
-/D [2035 0 R /XYZ 56.6929 794.5015 null]
+2083 0 obj <<
+/D [2081 0 R /XYZ 85.0394 794.5015 null]
>> endobj
682 0 obj <<
-/D [2035 0 R /XYZ 56.6929 741.8766 null]
+/D [2081 0 R /XYZ 85.0394 741.8766 null]
>> endobj
-2038 0 obj <<
-/D [2035 0 R /XYZ 56.6929 717.2979 null]
+2084 0 obj <<
+/D [2081 0 R /XYZ 85.0394 717.2979 null]
>> endobj
686 0 obj <<
-/D [2035 0 R /XYZ 56.6929 609.8545 null]
+/D [2081 0 R /XYZ 85.0394 609.8545 null]
>> endobj
-2039 0 obj <<
-/D [2035 0 R /XYZ 56.6929 587.5432 null]
+2085 0 obj <<
+/D [2081 0 R /XYZ 85.0394 587.5432 null]
>> endobj
-2040 0 obj <<
-/D [2035 0 R /XYZ 56.6929 587.5432 null]
+2086 0 obj <<
+/D [2081 0 R /XYZ 85.0394 587.5432 null]
>> endobj
-2041 0 obj <<
-/D [2035 0 R /XYZ 56.6929 575.5881 null]
+2087 0 obj <<
+/D [2081 0 R /XYZ 85.0394 575.5881 null]
>> endobj
-2034 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R >>
+2080 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2044 0 obj <<
-/Length 2524
+2090 0 obj <<
+/Length 2532
/Filter /FlateDecode
>>
stream
-xÚÍ›[Sã8€ßùy4Uc­î—}£˜ejº³Õ5—‡˜Æ³‰Žhö×ï9–+äâÒU)"˺}::G:2¬Gáõ¬"T8Ù3NE™ê ''´÷Þý|Âê2qS(K}¸;ùÇ¥0=Gœæºw÷´e µ–õîFDÿuöéî¢sE#MNc¥iôáêúÜç8ÿóñæúòêçßúg§FFwW7×>»qyÑ¿¸þxq;g9Ô—A uÝÛ;¬T×¼½»úx{ú×Ý/'w‹„ƒdT ôßNþø‹öF0Ö_N(ΪÞ3<PÂœã½É‰T‚()D“3>¹=ù¼h0x[U]MJ ¬¸éÅŒsÂ$ßÜ­ï‚B·uÒ)¢%¯z®½XN„rí,pÌ‚HJ³žQŽhÁE5 Ÿg/ç³|:MFÈjð ³$>´*ÛO†óY‘>%§±04ú6OfiRø‡‡|† =?¦ÃGŸW>Ö%‹dö”Ì|z”ߘ ÓªÎ ÃΡ—˜1â”âUwÉ÷aRÔÝ eóÉ}Õˆ`Qþàó’ïiQ¦ÙWÿäÛle„‚­ŒðÞË lM‡Å`Õ×Q©Ÿ éTT¾LëÌA6ò‰áxP¯òžëù§b~_$ÐwVŽ_–{òº?ª
-WØAmw)¶ „šß
-&š‘cGŽ¿A ˜ÑŽt͸Fó„ˆÊýø« /ó È3ÿ"ù>Ò ÛÄ×ÏiùØÖðújÓ‚-jõŽSpO=Š%zY£UqSmIH$¹ÚgÄr¦ë&ƒïñ®½0*‰ãÕêÁªù´Ló ÈJg¢?©¢E’àƒõ00w”ÃY:+„0)š…«*œ8lˆ@µÁ}>/_Û!$‘––¶†8Ê*‹â_ξö|¢˜‚Eù8¬°ºtWÛÝ
-<I2° ÔÙ%‘VmRSj !ÕÕÖP@@T²Vc4Ìg^½ŠižêÌJk諳]AR¾RÑF%áB5s<ÌçY‰ ?.üz!žÒ|^ø0>…×…°\àyÈk†J°ÓBõBû>‹ ƒ$TC“qSàPN@P\fùv' a :G]ã.éx>KºÀ LšQ­"¯oÔÑCUÝO7X4­t­ XnE°j¾\¯ œQb´tu§¥‹%—Tf¡
-à‹«)–`ö—Uß´ª€ï}9Q«æ€*ÀÇF×y™ü†ePÞ´XgÒ=¢C«Fnšó§tÔ¸º ˜×ñ‹»ð™÷ƒáŸUÙ‘5Ì'ÓA™Þ§ãxEOKl‚ÉÚBcÊ;[H,R°v”¸C¢3› Æ㺅ÿ™äÿ§?)åY²¶ë¯³ÆAÓ ºðOÅ=?¦Å:o¶T¯Q¤³yùŠ×Oþ^3­°EáÔšºèzßÀ`Ãj7'[‹™c°œŒ~eÌ%.y=çóqåó€Ç¸È}æ@òyiVÖy¥7oJ…Æ*5ððM8é?a–n°²áÀ5@›V1Õj]H…É,/}â>ñ¿Õ~'sAu”ž²¨ª[­´²ÎÌ|±él0\;e:L6ۻЖÊÞ5½ïÞdScƒ½Ó €ØnàXœ®ÆüåaÖO¾çY²Ëž¬\Qúþ‡•ªT9dŃ×}xÄ;NJÜÏm„Ù
-ú¾ÿ@–ŠK퀩ÀK;)+@¿MGƒ2L—Ï;!|iÌkj…·†±1ƒ[AR-II‰…£@I û:áøÉbúF”è^‹dO–œ‡eÉÇ’[bé8Ö*Á‰´’p€#îkºYž¿À‰/zró
-æpÚ4Lt¹e\¥l‰ß>*¸7¿P°#Ö?nà@£l—Cæ–ã}­wÈWoп«½ù‚3?ØïY*º\17Љuf‰ß>ú·?¿@°c^¿°Ó³g:®,‘B.nunçCüd¨“ßï+·8›n$
-l1m%ÚŠzÌ
- ›>ëx'Q©‰4N6D7D,ߊsC
-Àzo€z€pG«Õw…ªãJ’1î¹úË ß*%©6Q¿¿®¹2ß jq¢-N
-Uí¸¡dT'êë—N½Ný^œ¨ÇŠÓZüÞÅm§é  ˼+¾þr~óëÙÕ5~n.UÔ‡çn˜m¥ÝéU’õÊ6¿péø¢ÈBY®kÏ{ÑÇÿØøÏå©RÑÙÕ¿ñ»b+£þn—çXêAmü׬½;Ì@Ôc¥©%~ãÒᨵ%Ô0ï§/oú¿^ÀRŽe¥ˆ—³Y7ÄE¥ÝÙ‚½—ì—¨äÕ†™*¦×}¯N{`wýö˜¤³xøÝtHHPI„p¬'Á¶cl•‡%ÊrÓ dÿ?ûÞÿendstream
+xÚÍ›YsÛ8€ßý+ôHW ±¸}s|ÌzjÇNdÍV*3ó@KtÌY‰TDÊŽç×oƒ EH¢DÉvjY©Š@Gãc£»Ñ¤É
+V°– óhÝ•A
+¥Ÿ hDP¼Ì«Ê(¸ÂxåùFÝsµ"w•/ïóæN‹éËúLNû'eã;(3¡À`ô˜Ø1Pý[â³…zå¶lWn½lE³Ò–uM–±Ý ,(2ûëÖ_V8™£<KÝøû|%©ÓÞ~NŠÇ¦‡Ó_£ˆdˆIØAN?ÆÓVœ‡sÇ"´"½´¨U¸ê·&¦e¹=%HS"«)fÑ÷ðÐiæ¶7­ºfó"ÉR`Ë
+þÀçql/´Ãak'q>^$ó°„E"%°^tv`Ý¢ûlYlÚ†%"TØm
+LJ«ân.¾\a虃UûÐï°½y·ÇÝK|M$Í`Æ×DÚ²K«V-‚øT·G³‚
+Ð%eø&ömV‰°dbÖ ÞϪK4Ýï$lCc°©ÁU”L—‹¸ÛÜÂó¦TŠÀieðPvw¬š²ÒÛnKl« öf».P‚‘’¼¶.;¥ W-×”f¥ à‘ˇÌÁô¯+ƒ½Ó(ƒ½ïÚ±Jl (C¨…n²"þ',KYy“¼Í¬¯f´N­\¹ªgÌž’Iíîf`b§/îîÊoÞGãÿ>GeÛ‰»5Îfó¨Hî“iØfÕ“ÂAxe¥mÉ9\(¬¯’‘f•6v³˜EÓi5Bä~fYíÃìÕÓ4núë¢vJÕ‹ÎÝU¾´Þß–¢¼ÍcŠ„$µ"-‹GP¼aüWËc…0…b­ª¦íÞ@(C•h”£…ÄØPJn˜óǨ°›^ÏÙrZú=à1Í3Wù
+÷±û-£ ø•ÌÁCÉ) ʾåN+ªÊÔ5›/¢qëã,’q¼Ûâù¶ä½,^=ûáCÖ=vZ< âJ¶ßà (0nd¹êÏ‹aüí"KãC"_°syáâ"üm;•¥b¥ùƒÓ~¸´[v6ªÛ‰³ômKÿ¡4E+ÝPÌp^"úm>‰Š@]=p”p­4§­%à
+#ÅÚîEéIÙc–# ‡‚–œ#Î ]c™Ï_ Ó:Ù<>’¦'çûÒ$ïI“j¤ê8â
+Fלxx€¤oºi^¼Àé/;vK­Ç±ª€ñöõdí±~‰ §]¦“bë1ÑÃLg Î#Œ¥'[ Úƒ¦V¤ƒ ÖH(¦||­Bæ* Œö706ë8«€×F’héÑûM>.âEüí-½ü+¯œ{•-ÁU¶du~¬ÝT’'+‹Ðœxv?oy=~š ¬d‡Ã“Š¤=û—1ÑÇ/Ãøy‘q~H
+‘JàMCÃI!=†íùÈ „)œ†Ê™»1º uÆF¾>«"’2Ý‘hD ®ÜêíÙ±Žº¸ÂêðÑ“¬Ï
+x<>O®>ãƒ8OcÖኩ‚9´q®øúÚw}4>O®>o^ô4ïðTÀ)™q¹Fïå;ž^#VŸu<mh=.W†×oÉî–cû!V'¾/[oÅv½ßÉíˆñd/POÔ>…pÏ0ÕáŒ)ãHÀŠj¢;ò¾¯Å¹# Ü°ô„|/–‡§Ì~DƇHƒ˜¢¬NšÉC’fJ#Í°ØŸ4#R#®>tI3V%͆qžMŸêGqhž¬N³Xqÿ?™Fü#Ç„AœI„lÏ’Õ‰c 8J·³dö;]Ѭêì”}Ù³U*ØŸ»¿o, åˆJÜñÆ’PD¹pó“ý¨Êzr!¤ 'ŸºSìïïÙ„žpý};a¿‚]ÛñŠÒZ[mˆñÊ£ÊãzÂõ!X>&pÇ;J‚x
+©ÖÞÙXµâXª`8<F [¾DØ›j€z¢ö¨ÖöÛ³Ÿ§Atõöe…S‡S¾g)hÏ7¸’öã—Ž·#L¥ Ko>_Üþzv}c¿çç"Âu7̦Óáô<Éú‹OrûµKÇFð‹!ªq.ørhÿFæ?W§Bg×ÿ¶_nk û Áö†~ÐÛþµŽí}8OOÔ·ò´ëâ´ ± ²í«v<è„}èßö4íÄÍýo«}TT å€AèÏ\IˆÜâA0¢ "µª™'ûÿ
endobj
-2043 0 obj <<
+2089 0 obj <<
/Type /Page
-/Contents 2044 0 R
-/Resources 2042 0 R
+/Contents 2090 0 R
+/Resources 2088 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2025 0 R
-/Annots [ 2046 0 R ]
+/Parent 2079 0 R
+/Annots [ 2092 0 R ]
>> endobj
-2046 0 obj <<
+2092 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [333.4761 684.0956 413.3061 696.1552]
+/Rect [305.1296 684.0956 384.9596 696.1552]
/Subtype /Link
/A << /S /GoTo /D (clients-per-query) >>
>> endobj
-2045 0 obj <<
-/D [2043 0 R /XYZ 85.0394 794.5015 null]
+2091 0 obj <<
+/D [2089 0 R /XYZ 56.6929 794.5015 null]
>> endobj
690 0 obj <<
-/D [2043 0 R /XYZ 85.0394 447.7394 null]
+/D [2089 0 R /XYZ 56.6929 435.7843 null]
>> endobj
-2047 0 obj <<
-/D [2043 0 R /XYZ 85.0394 422.6188 null]
+2093 0 obj <<
+/D [2089 0 R /XYZ 56.6929 410.6637 null]
>> endobj
-2048 0 obj <<
-/D [2043 0 R /XYZ 85.0394 422.6188 null]
+2094 0 obj <<
+/D [2089 0 R /XYZ 56.6929 410.6637 null]
>> endobj
-2049 0 obj <<
-/D [2043 0 R /XYZ 85.0394 410.6637 null]
+2095 0 obj <<
+/D [2089 0 R /XYZ 56.6929 398.7085 null]
>> endobj
694 0 obj <<
-/D [2043 0 R /XYZ 85.0394 197.6003 null]
+/D [2089 0 R /XYZ 56.6929 185.6451 null]
>> endobj
-2050 0 obj <<
-/D [2043 0 R /XYZ 85.0394 172.4796 null]
+2096 0 obj <<
+/D [2089 0 R /XYZ 56.6929 160.5245 null]
>> endobj
-2051 0 obj <<
-/D [2043 0 R /XYZ 85.0394 172.4796 null]
+2097 0 obj <<
+/D [2089 0 R /XYZ 56.6929 160.5245 null]
>> endobj
-2052 0 obj <<
-/D [2043 0 R /XYZ 85.0394 160.5245 null]
+2098 0 obj <<
+/D [2089 0 R /XYZ 56.6929 148.5693 null]
>> endobj
-2042 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R >>
+2088 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2056 0 obj <<
-/Length 3512
+2102 0 obj <<
+/Length 3456
/Filter /FlateDecode
>>
stream
-xÚÍ\[oÛ8~ϯðÛ*Ø5Ë;EìbN.³ì&mâY`13Š­4Bmɵì¤ý÷{ŽHI´#[ÎØ-‚j‰"Éï|<’6 ð(M´åv`¬$Š25ÏNèà|ûù„ù:úÒ0¬õÓèäÝ¥0K¬æz0zdÅ„Æ1Œ&¿EšHr
-hôÓÕõ¹=rE£»Ñ©‘Ñ{ügtu7º:»;Zóèì_ï?Œ.n]-4t%¾ùÙÍõåÕÏ¿Þz7×®øöâòâöâúìâôÑ/'£fá$8ú/'¿ýA˜ë/'”«Á3¼P¬åƒÙ‰T‚()D]2=¹;ùØ ¾VM»@“2¬
-E g¶ç?Y9K–ãG ¥U&º=_Íoû!m[qÃ<Ëy‘—)²Ól²s( F©ûêpí®ÎÿöRÀ_Jìúñ<sê. §£1Ê,J&ߨDBEI>ywÊ"\`XaùèknÈ®Ê6¥Í‹ÅÒ=MŠt£^õŸXA먞6<>?&¾ð9)ÝCúužŽ—nÊ*ŽunÚðÍw‚2V¥º¯¾™H ÷^,º:¯¤[MÒß)åy:ÁWÝsÅ8U§±PÛƆ^À)¬êü¥Z90‡‰r•Šù2+râ–‰4FYéúš%¾³jÄð›äîC–O²q2¬†=d”K©\×
-uk­xp¿‰û'ã
-xœYYäYþÉWX.ÓÙ|¹}=†L?lñ|O»¦ 'BÙ»¦"VjÖè”wX¬òq<ê_‰£S‹«-ŽêshWäÞþ"ñÛõZS"©=¸jA¬¥ÎÎý;™Õ E×[=÷"ëZ t“tš~JƯÃ2åq±dÇÄ%)-ïÁRqBÁ¤UÈܦKôž˜wà0>öƒù±u¸¼å"«™9OÅb¶Ê`o˜–Âm˜òn$%…ðœê–÷÷Ýƹ³ÛÔ«}²òD]uxS,k[äK8NwÀÛüXèBŒkõ;R·ØŠ.8Íã>cÊá+ÙÂ{WŒ?ï(^¡  GÑ»¹ßbžzçDÛà‘b 1þœ.!n_(£›<uÅãb6+|S'/ïÖåÚ0^aVDå
-fùZ@ê¾e¥û’¸× ‚+G·ŠšQ•óôÙ½»¡ºB$LGUÓÇSgšÍ²exoÿ‹AÈ´1åx‘Í—–ì W ¹ÃÈð=W¯ŠcH/DSQ–®¬mù5:U*Êfi±Z¾Ê.]›¸…#z»D AdÜã@T ]PéÈÏÓUz™B ý$172º»ûVîáF®>` D¯Ê!«m"àó9”[›É,*>ïr,áàß®cQ†«û˜ BZ½°~5Âú¸·cÃ
-ê1Ì>ýúbö³l:ÍÊt  ÷s•Ñ¥;L¦­c²–h*͆cJ>#Ó´;ßÄ_ò”æ™÷VPðìëÜ.K'A¡Úèíd„>µÔ$ø—‡“±–8 Ev‘Aä(ahM5!í4uªn'ã¤ïýä)À
-Tr°`š”Kp¬FglØ4¯Î™D,¢ò±XM'ø,<(sk|îC ¨œú
-IÙ‰¯$¼u;]øÂ, W‰§Øh™Ç×K†"»ð…5¦ahMµÊ•üµk!Ó›ˆ| 4K˜áîB2K“ÜÛWf$šq¾±ÅïÜãƾ‚÷Çòqk_±ÐÛW,_·¯ø±±¯øâ²dêÊÝ BìnaàïSºèÐÅæ劺àÁf`]Œ˜_îÕ‰ÃPäK]pHÀô4•¶9u?øìšMëÆc[*¦¦-m.ÔÞë½Tm Ä_èO5jÔÄÀµKH‹ éÀ´È„Wñ^\Éã&†é @6‚u« ¾/(Àkq¥š{ŒŒÈS¼bB£;–…ùçÕ»«ϪÊe6ö›~gE-ÓEÙ¡<ภë³~×yqøPâð}\‹«Þ’öümí^¾ÎÓ…È]~›§ÕU%ÊëÊéˆM,þèÚñþzþAv]ౘñ°ÀµAÅw¸ÕŒž­+¢V VXÕŠÕ¯«·‰KÙ¡0ñúÒuÛ@ÖmL *î¶.Ô.*ë×HÕ{Iý5ϾvI¦è8„ë 98šób–d¹^åßÝ!”eÄĵW¼<®®u¤Eâd#ƒžüñ²ë Ow«|^-Ël’º—6mæ1o^«‹ŠfÅd5­‚ q¸®Ro®tíTôPL§Å³¿ˆ¥ýE5V¶æMÑœª&,üG×40 qÛè.:Äpˆ¿µ¬­è?»#W
-ë;™ßN[>nœ¬gá±{:}¹Óƨ% þ`FÅ÷sbjÄë|Aw«zôˆÍœ†œsÜ|h½µ°k^Ø%pˆd!ˆtæüÛ쾘b¬iytÀ¸ðÁê—Ìbë¶ÃÆ ŠµÛ–‡o·P0ð0ÞöÐg}EÖP
-¡Þ¡ü@Rm9žX'Öúµ-A­ß0¢í…(,lïj[òäÂJ ¹°Ræ%Tä¯o•\ÖŽE®£LäÒ0w%{¸¥5aÒ߈üAä:›bv»¿É›”Ød²C%í\åD¾ƒ?e
-·cÛ£éVìs¯¤’Ÿ²|ò'Ö{øw÷™?nj#²r‡Â(Ž«±ã®!›¦Gc’.èuûgEž¨±1ˆHÇËW(-@ã-+k¢ã¸'Vc°qócÝ**­Wag^-MÚ’–˜ fåc¯tm[U`q,•ízy«2ˆpâà"P·Â €ùÛ¿?HaïǘAþ‰u¦„¬Ö™"J*!Õ2Ãâ,³æmÜhÛ½7çôå²û
-Ì™¬‚§S¹àÞërœ3áâ§:T‚U¨åÝ¡SšX«e»;Õ½!õ¨wº·\@OÖÊþ˜ /ô®äF~_eðÛÝRå0ò}W>ƒ ·ÊôX ˜©üÖÊç^._5ÕÂ-± nì¯2AU¡cyõç—LVršuþ5iòKãB~ü­(‹!eñ)[ýn¡,ío»›²xW ¹9ÓMYÎÌ!þN” ØpàŸ`@ï†kt›–(.;ÿüžz}ê¾ìßþï¤!€Op†¶¾÷«`ÅÃ3 eU§áŒ¿8‹ÁýD<óÕ‚±ÿôW
+xÚÍ[ëoÛ8ÿž¿ÂßNÁ­Y¾¸ÃÝ<ö²¸MÛÄ{Àaw?(¶Òµ%ײ“ö¿¿‘²hG¶’Æ-‚µD‘CÎo†ó"Ãþ±U„
+'ÆI¢(Sƒñìˆ>·_ŽXè3l: ã^?ŽÞœ 3pÄi®£Ûˆ–%ÔZ6MþHNþýöýèìêxÈM49*M“Ÿ/.O}‹ó?'ï.Ï/~ùýêí±‘ÉèâÝ¥o¾:;?»:»<9;:g9Œ—…0öz„ƒÂÈëÑÅÉõñ_£_ÎFkb&¸úÏGüEàõ×#J„³jð
+Ñ´L®>¬ F_ë¡] Ii+nCa‰TÊîžÖOAaÚðÈqJmÏ:tp)(M¨Tf-Î")8
+E g®Æåìôòšž§ù´Bìú'U”ÂÌC÷y•-¾úÇ[ ±òPV{Pô+”‡D6—ö ’~„Ý¢6œåú”’ b´¶54¿åÕ,]Žï@%2ÉÕéj~Õh;ŠÔ°š—E•¡fšmÍ
+ÓÑ]æ¿0ü¸‹ÓŸø[…ÓÃ<kà «ÒKhŒ4KÒÉ$ ª†PIZLÞ³7vXÞ…ž[´ë¶mjór±ôO“2뜿(±ƒÖIÃ6<>Ü¥¡ñ!­üCöež—žeeÔ9Ï6| “ Užnêo&Q¿—‹Íɽᨩ;šL²?)åE6ÁW–Ü|õÍȪ—X,mãC÷éVOþX¬œÃÀºûNå|™—ñ›D£»¼òsÍÒ0Y½bøM ÿ!/&ù8ÖË2J‰£Tnb‡DýN+oýoêÆé¸çe^•E^| –Ël6_îÞ±¦¿lë|?›¦5%’Ê›¦µ ÎQoÓFÇ üÂbUŒSТþ}8:v¸×lÒŒˆÜB»Ÿì)âÖS°Ã¡
+‘”Ž÷ ª8DkÊÛ¸ÿ¤3P3CÑåÖϽ¸úÜ$›fSTáç!­òµú\-
+ÿ
+ßoï*£!
+'HåÖSùì ¤KßÏRðkÂïK½.÷v3¤ jÌ}—jžsÌüpYV]—Õsì.Ú2ã¤Î?ñûí
+M¬äæ)ç´¬¯µÝ§´Ã†à0¦øX{„2\G41®u@Œ¶ž5Bø©ƒEM˜•r7‡`¬´Qú€,6ûx´’h KÛà‘÷ó9 h!]Ü2P »s»’s•= »kŠ=ìJ®—f‹ÝY»G*m6Ùõ[Ej´¥«}­‘Ôð
+&„'Åjvƒ'Û¬5lûÜT;ñåᮬ2ÿ=6…þcÚÔÂðå&[>dYÑeòÀ Ikö€+ ç´ Œ£µF
+Í·
+úþPÝ® ,W&½ÛÖÀbc0°Ø¾i`ñãÚÀâgˆËÒ©o÷çÖß´ÀßûlÑ!‹í dÁÅ€I(DŠ/wkkŠÃ˜d‡Q¡Œ®e;ó.¿
+§Z²ú9dõ.²`‹ ?ÆnnîÑI÷²ëŒÈDô¡ãþeCH¤'õs¨ê'Qý½È¿tQMÑ6†û 9¸šÓr–æ…'^gàÝA”£b¿x~úP_ëÈŒ„Êk“‚3…ãd?žæÖüø¼ZVù$ó/mâ, ÐcÔn_k6‹Jfåd5­Ã r¸®“o®tãTr[N§åC¸n¥C¢^+Û𧌅Z†ÿìºf¦Á6¸þ÷þ¬ƒ ¤QRËÆ+ÿ«;v`›y9ýʯ:õ«YÅ ˜¼¬¯èÁ÷t:õÛÍ\nýô¹OóiÃ5Ø Ht ƒÇôuÜS¤ÑÔa¯ÿ#\Ìý2ÎæÑ%¡h.Šw›+y(§-ï¶NÒóø˜=›>®´1aˆT 7’Wó)¾@HpˆÔˆç9ƒîQÍBè+›k¦@
endobj
-2055 0 obj <<
+2101 0 obj <<
/Type /Page
-/Contents 2056 0 R
-/Resources 2054 0 R
+/Contents 2102 0 R
+/Resources 2100 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2025 0 R
+/Parent 2079 0 R
>> endobj
-2057 0 obj <<
-/D [2055 0 R /XYZ 56.6929 794.5015 null]
+2103 0 obj <<
+/D [2101 0 R /XYZ 85.0394 794.5015 null]
>> endobj
698 0 obj <<
-/D [2055 0 R /XYZ 56.6929 328.1878 null]
+/D [2101 0 R /XYZ 85.0394 316.2326 null]
>> endobj
-2058 0 obj <<
-/D [2055 0 R /XYZ 56.6929 303.0671 null]
+2104 0 obj <<
+/D [2101 0 R /XYZ 85.0394 291.112 null]
>> endobj
-2059 0 obj <<
-/D [2055 0 R /XYZ 56.6929 246.6387 null]
+2105 0 obj <<
+/D [2101 0 R /XYZ 85.0394 234.6836 null]
>> endobj
-2060 0 obj <<
-/D [2055 0 R /XYZ 56.6929 234.6836 null]
+2106 0 obj <<
+/D [2101 0 R /XYZ 85.0394 222.7284 null]
>> endobj
-2054 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F11 1451 0 R /F39 1161 0 R >>
+2100 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F11 1353 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2063 0 obj <<
-/Length 1362
+2109 0 obj <<
+/Length 1514
/Filter /FlateDecode
>>
stream
-xÚ½XmoÛ6þî_¡60±|§ ÒÔn] y±]`C׊Ì$Âɵäý÷;Š”,Ù²³,à "¥ç^x÷Ü`ø!A$fšJs$0Aò4ÀÁ|û8 Ö °z¿¼›0h¤%•Áâ¾¥+B8ŠH°X~^~º¸YŒg£
-<”h
-‰‡ï§WÜí—×W“éǯ³‹‘âÃÅôúʽž'ãÙøêr<
-µŽ(Èó–/;_X!/9_L/ç£ï‹Ïƒñ¢9@û3ëýÁ·ï8XÂY?0b:Á6­ið4à‚!Á«ß¬óÁm£°õµí Ç*X
-Œ8!§­: ¬ú%eH[?»FCÂâBÙ<pŽ°Æû<€ú}g(bLJh$eU"~µQy7¡m¤BŠG
-´[Àâ›±Ãt´Q¸ä̃~;¥%ò€¹É–ãÍÆÃh 1Sšj³ óM1
-™bÃ4³O>,òä/Sºwèr«|m6q™æYù—.S/˜äÛ¬4'äN­ ­`*$i!he³XçÙ²p¬)óž“p8+­rQ¥ÿ”B:EµÆ¼Ušß÷)UˆIRǧ¢~RÈnR¡C
-sà°’’íÔ¿NŒGˆAÂJ HŠ×¨¬%N3GˆÒ
-z%úÿ$èÌ$ϯ%(ÅŽ Ó† öãZbÒgã>vxJ5÷<uòÉj»4~göÚ{ˆ
-<>)_
-jgaåeú'Æ@“®OßýtŽ3÷œ^~¹q«ÆU·}2E?˜3 ݧþmlÚtßf_êÛVFauзÿTí‘1m4¤
-aÕí÷G}Ÿa‰"ªU`û”%^SNÖ3IB{T»°ó 1
- Æ0ó§5äü.]¥¥ÏÎ.-se{òpÌ&ò¨Åtê$B‚ÀÒ·?x]û*zÊ!$B",™„ss¤9á•à—¼°í™B%”à]Q¦‰íĔԭ°p_ËÇØãvÆÕ‰CÅÏqºŠïVÆ}„²êqÛž)ÅùžÉ •”îÏcÕÅS«"÷®n×ë|SÕÇI£Ç9£¯0ª½Q€â1ßeSU›NÐYÔ-ôø.¯Z‡H6&¶m0‚‡ŸšU5ÙÞ@?Ã@z[úɆ|îÓP©­Ò`W˼QàÅ×k{¡4«á¦8pèð2…p¹°ˆ¸àý7F
-Û¨ÓEРª=Ù-g¿ÌíïCÛD€
-¡´d\w¹¹‹7Ë4{èsRœÕc9.úNKÔ’¼êÒãiš.OsŽiŒ½À¹ê çjTŹ‹ß'Çl#Ð÷%æçÍ6¨»¶Aeœ¨®a?Ø—­/Ǻ“ÆmZu˃2õc:Kò'›¥jw»5›´î\€§ƒ‰5"„¿TÀ-Ô™`Ö¨*˜ÓÛ£Pbè~XÊóFTÕN(á+‹”îšýoC93?¶¦(ÿa,¹Òpç‘â|,Û¨Ó±lPU,¯×eqLL ’€{ÊY³ ªÇn'š–Àö®á¢Ù ‘Vÿ³Û3ýnQõš– ëÉeÍ&™Ø„Sk…þXß–{rmïÁ›Â‹¬Wqr|Ÿ­Ó—Sû—~O„qP·Ë7ÿCaÿ/û×bÑþT1(Æ4©²1"„º× 5U=¾ÿ 1Ž.Ëendstream
+xÚ½XmoÛ6þî_¡20³|†iê´.Ð4M\`C׊Ì4Âɵäý÷;Š”,Ù²½¬E "©‡wÇ»çŽ'“É„DÒP)ÑÀDDéÓG_àÝë ˜IštQ/ç£WLEIe4èÈÒkM¢ùâS,Gc€ã—³ëWf<¡Çwó±âñ…û7ŸÝÍg—wã‰1šÆ—o.næÓ[’~%l¿|}5{ýñ6xí—o§WÓÛéõåtüyþv4·è’`æ¬ÿ:úôG 8ëÛFÌhma‚1†FO#.œ±fe9º}hvÞÖ[‡œÆ1A„
+M$ELJz\­WAm2´bOë„`ƒüƒ@0Š¬ !@"×*R É(«ñ»óÊ‹+Ú*¤×€ù_7Sé £ Kr@œ“r‘¦vUí²ƒ!å‚àa³<-ž²üËx"™ŠÓ"ÏmZeE^º—S–co–Ëï~1©EÛЂpEãùcV:E rB2BÐZvZlòʮǮL ú™•$«Õ2K“û¥õóªÏG;p6"RX7f|u3p4*‘ÁRL’/Q¡Ð:`®^m“*}5¡#
+ä꟩ú¾²%Ú'6
+qb Ò>üÇ׈Aö‚! ™“Ùr ²Ùqœ¶X#JÅÖ‚%¥þ•¬½³ùbº^Ÿ¥­Ãk`S,Îr÷äqY¤ÿØʯ• ËŠ•]'5«²RcÏØúUËQ·;-¼X;¢s¹*òEéKõð$ÎJëHÔG>¥ÀÑœ·Uï„CB-Òðµ.ÁB¡¾àÖ‰ú?wÿ1.íèÙð÷'VU© R s†ŸÒ¤…ä¿’Ÿ·6ýö\~RìùI1mùéÖ<ÕR›}³þe¦Ôð@S¿?]n6ÌìNz§þ¦Tà?²#Ø¿)rÿLü#T}Ю¶z±0†²ý1µ‹¡Ô¸ÿîœäþ9»|wãG­©~ú—IòÅ'h7ô?«€îšƒs݆ۣ°Úë6þß®Æ" bPK¡+„U¿K9èV¨Ò@nF! 8GZwŠt•M+%! ʸéñp-c ÝYñ´‚¨ßgˬ
+ñÙfU¸ëd·a$`™cÏAéeŠF€M  ¯_åÐJÀF ]Š#É·ñ]QºúL!*°®¬²Ô•bJšZXú·Õcp[ë3Å£’oI¶ô]ƒ{ ‰5`*vE³mŽM±¤tw'.é©Z–E0u³Zë:CŽ*%ÜÏ}†R””Å6o5/ÔÍPä®'Ý®îç]r_ÔÅÃÝHÎ'®p0‚ã7­Ëê¬ìN ‘m¸Ä`÷¦
+W(
+)º C-¶ƒ-ŠV@ؾZÙ$lÊònË=ƒö¿€¯„ÈH
+¦÷6M6å`ëk(n|ŽX
+LZEœ,ŠU0Àq«y™¹+Á›„™®œ ̹ÒŠµo&ÔÐ#»+»ËÊm²^¸OŠ#%ÀYSC’rè´àZ#ɳú@Ðlqœm˜A_½ìi¶uP'ØÖ j¶]üyuÀ3î"ÌœÖÚ€´vj2ÛÓƒ]¶†,l»þhËê"¹—á~n¿úÜìÃÆ®³¦(”þûï¨'¹bˆr}&o»¨ãžlQµ'göu*w`rZgÐÙõ£v†”íéü¹~¼µ_7¶¬þ«#9sý?î@'Ü@µ߯ªr_¥ªOªl0‡*{lÄÀFNz*Ï8±½/:ÏMO<蘄&ê95À4—”ÝW›ö®¿Î7 -*Ħ5±kz×eزZ&éaóÚÄQ÷[Ô€wqÔÔÇþÉk÷# û2„q8PT¹ºã`”ó!úŒQ&é€íÿVоendstream
endobj
-2062 0 obj <<
+2108 0 obj <<
/Type /Page
-/Contents 2063 0 R
-/Resources 2061 0 R
+/Contents 2109 0 R
+/Resources 2107 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2025 0 R
+/Parent 2079 0 R
>> endobj
-2064 0 obj <<
-/D [2062 0 R /XYZ 85.0394 794.5015 null]
+2110 0 obj <<
+/D [2108 0 R /XYZ 56.6929 794.5015 null]
>> endobj
702 0 obj <<
-/D [2062 0 R /XYZ 85.0394 665.5626 null]
+/D [2108 0 R /XYZ 56.6929 629.6971 null]
>> endobj
-2068 0 obj <<
-/D [2062 0 R /XYZ 85.0394 637.9713 null]
+2114 0 obj <<
+/D [2108 0 R /XYZ 56.6929 602.1058 null]
>> endobj
-2061 0 obj <<
-/Font << /F37 1026 0 R /F11 1451 0 R /F21 938 0 R /F22 961 0 R /F67 2067 0 R /F39 1161 0 R >>
+2107 0 obj <<
+/Font << /F37 1038 0 R /F11 1353 0 R /F21 950 0 R /F22 973 0 R /F67 2113 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2071 0 obj <<
-/Length 69
-/Filter /FlateDecode
->>
-stream
-xÚ3T0
-endobj
-2070 0 obj <<
-/Type /Page
-/Contents 2071 0 R
-/Resources 2069 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 2073 0 R
->> endobj
-2072 0 obj <<
-/D [2070 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-2069 0 obj <<
-/ProcSet [ /PDF ]
->> endobj
-2076 0 obj <<
+2117 0 obj <<
/Length 1242
/Filter /FlateDecode
>>
@@ -9922,144 +10151,144 @@ xÚ•WÝoÛ6Ï_aäÉ*Z¤¨¯å©M×-C1 kö´î‘iKˆ,j•Ôú¿Ç#e)V³†ÁÓéø»ï#EW¡ùÑU“0Êù*Í9‰C¯
3í} MÑâ+Ûz̦.«Þ—†.=O.Ö+ï¤p†éiko8ÜËîy:Ø<Þ
Ÿ »|!öw
óÈ Žñm1ÚªÅëé$³þõÌfBú{z_šZéMÿŽItñFó
-€:]C¦ˆcq¿h“‡ ž‡-ÖXd¹_UãT]º9GLs^¾jw…9¶nßAôæ_ôqWy?.›)ü !=χhŽs·_òïâÇ»ñ[ËAÁ¥É|-}y‘à$ƒŸb³;Yh>‡¢œz ;
+€:]C¦ˆcq¿h“‡ ž‡-ÖXd¹_UãT]º9GLs^¾jw…9¶nßAôæ_ôqWy?.›)ü !=χhŽs·_òïâÇ»ñ[ËAÁ¥É|-}y‘à$ƒŸb³;Yh>‡¢œz ;
endobj
-2075 0 obj <<
+2116 0 obj <<
/Type /Page
-/Contents 2076 0 R
-/Resources 2074 0 R
+/Contents 2117 0 R
+/Resources 2115 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2073 0 R
+/Parent 2079 0 R
>> endobj
-2077 0 obj <<
-/D [2075 0 R /XYZ 85.0394 794.5015 null]
+2118 0 obj <<
+/D [2116 0 R /XYZ 85.0394 794.5015 null]
>> endobj
706 0 obj <<
-/D [2075 0 R /XYZ 85.0394 769.5949 null]
+/D [2116 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2078 0 obj <<
-/D [2075 0 R /XYZ 85.0394 571.259 null]
+2119 0 obj <<
+/D [2116 0 R /XYZ 85.0394 571.259 null]
>> endobj
710 0 obj <<
-/D [2075 0 R /XYZ 85.0394 571.259 null]
+/D [2116 0 R /XYZ 85.0394 571.259 null]
>> endobj
-2079 0 obj <<
-/D [2075 0 R /XYZ 85.0394 538.9404 null]
+2120 0 obj <<
+/D [2116 0 R /XYZ 85.0394 538.9404 null]
>> endobj
-2074 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R >>
+2115 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2082 0 obj <<
-/Length 3284
+2123 0 obj <<
+/Length 3285
/Filter /FlateDecode
>>
stream
-xÚ¥ZëoÛFÿî¿Bߎ,Šû ¹,¸‰su¯Hz‰»¢íZ¤-^(RáÃŽú×ßÌÎ,EJt b.g‡³¯yüfVbÀ?±#?Jd²ˆí‡›ÝE°x„¾^æY9¦Õ˜ëûÛ‹õ;/?‰d´¸}É2~`ŒXÜf¿z±/ýåï·?®ßÅbÄ+?”
-Ä#Ï›>~øpK\‰ÚøZÉlWïßÎIŠ|©„fžO×·w7ogD “Ò*†¼úùöúãr%Ã
-°+!ü$ ¥]Wz_æ™?ô?ÒØžwuCǹ«I$½ÕCÝìÒÎÎ î¹­Ÿ©ÑÕôì[þäêÍOí´‹&Ywù¦#¡îy4Þ!ÐœKG`1¸C¤¯Éè´”~l§¯WwŸÞ€º†¡Çv29Zû& ó¦ÙSÑÖÍħÝwô…[ÍJE q»ÍIì§?ÕèHûZ‹xƒ’éÌÌj õ~^¸Ö¿ŽÚè>X¿°Ê¨ÇãŸÉÅѺýwë5üõÓ¾ÝäMç×Í#´×ûþ~ͤµ[Ýú꧘màÙ$~h?«ÚÓékfr2ÿ×LRú‰1fÞ WƒÄWFë‹0™.0«Ïg
-?HÎvøÄÆ®óQ'Çz. ‡ý«ŒXí+ ®Âj
-¶ëÃTâi¸À%· ä÷õWl²‹~Þ›-7‹²¤VYìŠîè¹m#Kwé£kו )l<“@]86µ[ç®h_XWU á‡ÚŸ‡g¢…÷§]?Ä0a@Í l}@‘!lRtƒwŒàÈÁV;%í„ô¾(í&[jMÏÁ"ÇÃdi¾s‚S“ò{_í›â©(óGÒŒÓ@ â=Aƒ™Q_ IÅ¡SßžXB5V_ &¡³'+ñ\'êÁ
-ÐÖ|D÷Ÿe"hûÇǼåÓ¥¥VdûxŒ­ó…ŒÆ+sÈ qš“;®v0ï<dB¼fâ<ælHø2–çŽÎÞggr”2ÑTy~È‚(‘x„õ»|æ_ÓݾäNÐÅõóøR“ñä-¥N¹m Ä,'[—‚phõ ëJÂÄ/áåŒ@­ü@NÞú)mÖ/ù8\ibÇ
-Ö¬Tä ks+b]žuj¡1êÔ©a „H©“çѾÁíÅŽYÎ?²–È@26Óf‚Íø»ÉI®û¶Y—õ&-×í}QñÚÁ“hö ò˜ÐÑól“Äàê)d«ØW&Œ†LMpì¿užm3× 98Î
-ñªÆ€"¨!Úž…m”Ž{Ã=×Íg¢°›Ýç ¦ØWTn&Ä6]±éË”gšœ˜tJ# z¨al;—3.Kš˜„ØCpú£ü( õT^ÒbÀSÆÄÉÈe¡&dz
-Ši•°Uå¨ Ø²Ú3ï¨ÑsHM9žm˜ýj›r«¨6eŸåšs‡nËqÕŒâ*ŽØN‡$ƒ²á]{ï\hWîÖ2A2(ìoèU“
-´ÝÆ€tŸ¶”)òí‰vi”òn~&Bše„O[þˆ.å8µ·­)erƒ_ [bH9f£»dëâI–ÅÀª©N÷ÂÐ3+¥ˆ…6ÖQÕ@†•.N²ý%Åï¯D·•Öмxû:NÖ²7«+>êÙüÔ˜Á‹ýÁåcÃé‚qr±É»¼ÛÖOƒi r×™`æÆçÇ9Zî¶&×1= ñáX#Wd-“lå˜Ai±}÷w7ÄòÉæ3a3L+OÛÂ&1!]ÀXVaÁzWe[óŽ×Ý0ÕÔ‰x˜L>¦SœN:çaìþR Ö*¼x2*Q¾”,|ådVûL^ÃØ"’­–Ð MÓ‚Õrì G[¦OÌ:Ü
-`µŠAV£@ßò¯¤["@ó™R;NÀFR—‚/´{ϦÄqJ»r±fNñ7TÐ&7#C0Z,ksú ä´ëðl3ê¼gj;d‚¡3óPTC34s& »êKjøN W+z¼Fꢋ–Q¼þÞ
-B¼T<±lR\¼^'°N§†
+xÚ¥ZKsÛF¾ëWð¶`•axíM‰åD9Ø^›ªÝT’@$Ö @ æ×o÷tÏ  •«R)‡ƒF£g¦§_÷H,øO,ÂÈR™.âTûa ÂE¾¿
+[x÷Ó•`ž•eZ¹~X_ݼWñ"õÓHF‹õãHVâI"ëâ7/ö¥¿ücýËÍû(ñÊÀ¥ñÈóãÏŸ?~\×D¢N|-Él·ÞÍIŠ|©„fž/wë‡ûw3¢„€Ei¹)o?­ï>/W2 `KØcàýp3JJ?_î~|ø|¿þ•ž~üøáËý»»Ï·ËX{ë{xÂy®îÖNScmŠ@¡š¾]ýöG°(@©¿\¾J“pñ /ÒT.öW:T~¨•²”úêËÕ¿œÀÑ[óéìéˆ
+~86uÙ¿œ¬mˆ´Ëøݦ,šê@lOU{\
+¯¯OD.ª~…§
+¶€r8VËkÄÈÔWq@ó}„eÊ$ô>ÜÿG«¤¿†§T{Õ@TÔ6òÚ¾¯`DZ¢vËTC46F V,;c³žX¿ˆ}\Yu¾#Ý·C9·fùa[æ²yªˆ½Ù—Í@sü„Á±¯š-/ NÏêpäKAä'Ú¹on‡_Â?17oâË(H™ýñØäµa6“nNæW*M}H==ÊþPæÕãɬIé˜-J'ÞïRjšMW _È@ðl«afAV<±9Ft{ÈAúcÛÍlœ(‰â„¿l²ý¼¢?M]¬èÒºˆÎ³†æÛ•õFÕž ¼}âÍõ§~(÷ô²G暴=mNÄq¨³Ü)…¬ÅHâõg¤SÃZT[
+·åŒ|Óþ‰Ãk2öç]•ïxXÕ5êj_±WÍã ÈöÙÖŽÛ†GÕ#;ýؘ`^õô›·vŸûªg5® >P´¶Û¦…‰ðCxǾ|<âJ´ðËl8R —Æ1à­ ì}@™!L˜ÓÄgŒXÈÁ^³$m7„lSÕFɆÚÒ¯óÈñ4EVî­àŒÅdü|l]õTÕå–,ã20Á†X'è03æ+!"©8´æ{$–PÍWûZ‡ÖŸŒÄ—6yQ;/@_ó1bÞ¿—©ôøÄúãv[ö|º´Õ†|±·±~';#ŠÛËó®´\½0<dúi"’Ið˜ó!áËXÚ¼>:{ŸƒÈQ*‰¦Æósi D‰Ô£Ü–š-àoùg¶?Ôülqoâ<>ÔUÃd<yCi3~Ǿb+–“ÍíKAZMµúŽ}¥ajÏ—ðzF V~ +ïæ)ën^‹7p¸2‰-+x³R‘çöfwĶ<ÔÂ$Q—A ¥”
+ñ¦½€(—k_$m”ŽšÆéžÛî+Q8Èʾ«»bȺ¡ÊuÆ+-*†aCÛˆã“Û
+C=M=¯Ù0 ©$‰ÓQÀB;Ž¥wÄg2å$5%ÚŽŒmcº,9¡fœ_(Ì|µËxT5y},JNÌ%¤Ó°ã¬šŒ²*ÎØO§$w2É]{ï-è5;·{™¸
+ûÆÔ4øW™µ€ñ™Ì¤§ª|ÆÐ<§bÀEq’Šï ‘ôã0¶a³âù3gñ!‘íÜ”Ù`ð{H@æ{ÀÎt˜x¿â¢ðð=¢#0·ô›ÿ=öÃÅ|OY},{7A’£JNÕCØ«· ãk9½tž¶)#«°^¶Ü—
+0ªq2âÄ 8hÉŸ•v¨Š)bÎÁë“è"ÄeyÞÆg(ÿU½oQDhM"ÜCûÔð\ ;ÂeÖÕ¡ƒbzVŠfK*Ò5 o¼r:T+ë“•ç4S-hX}*ìò›Ù€#€'vÉ„ÏáC"ÄpUýÊ¡„2|+¨e]5ÐÙ0^yÓvÜÁ+Únˆ×I]$¢]FQ WcßtU©2AÀb1¾!OÐlŸ‰bQQšx?·ÏèüXÙ£j“‚ø¡l
+3Àoð
+c¥/E÷Ë‹U;PÕ>ÏŽ’~*#õb?\•Ù°î|ÒþËZ€ýÜØm)¨X®
+nqÀ¸m¬x“`Ylû¢î¦À´Ìæ“sWÒñwÕ@eÐ\óQAå—Êïì>
+ÐD
+m¶ûF !&L£èuYô]
+0„›û½\¼ka;‹ÑŽ¬ÜÕH°ÙP46µ4 Ãì $GD´£v0øH[$
+#ìž…Í:—üQBZ}¢ p"°×3Ž,½§_°Tº¸ƒÓj fxÆ2ß0k}CFËÛ»¦.BÅ«¶€P0a›’1O
+¯˜R ¾gzèÊ~àEåCÉœS›€WôôlÚO(aǯ*À Kz„BÄF$øÜ‚›‹†Ó” Ó±¡þ=ÛG/:ÿ¹ÿ÷<sìN x;(×¹Ó¤Ûmùd
+>ÐnÌ%›ç%í3¨Åº9ÃÏ©›MaF†à´ØÓæòÈÙ0àÙôrÃÔÞU‚¡uóPLC34³. ³ëk;|§Ü½Šï‘^Ñ-ËŒ(Þ o!Þ(ös1 /׉lSÁ¥#@=Ÿgêœó¤gÜ™F—Táö¶ÜôÈÃЙg.wÞ·&'óé Š9ôe=Än q˜öKb¬oZw[“/¶îKÓÞ6’B9k ‡ KÏ»Óah·]vØÙ>¾ÎŽ°‚[CÉ‚6<Ǿ̚yÝ¢ Ä 6#Â{¦mãî'zbÂBbýåþ'¾zA¶5y<¼¬ŒÉFúµ˜šF¾Ö®,{;¦¦Â¹¹sX˜ÆæUœÓQMú£Áúˆöµ<Ñ _ÇÞ’–ÚNµú#yÑÓ±-[ãØÚh”i{™orLÙóÅÔm j¬žJXŸÂvœMbóf¦âœDÊöIM«C[Wùi¾}ÆînÖiË86çj¯x½Ì
+}üÃŒ™¿È\=ó·ÿþãŒó4€¶$‘óÚaîÔ ¢µ‹Â ¼XºýK‘—kÿ2¬2Vendstream
endobj
-2081 0 obj <<
+2122 0 obj <<
/Type /Page
-/Contents 2082 0 R
-/Resources 2080 0 R
+/Contents 2123 0 R
+/Resources 2121 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2073 0 R
-/Annots [ 2087 0 R ]
->> endobj
-2087 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [63.4454 707.8911 452.088 718.0529]
-/Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.auscert.org.au/pub/auscert/advisory/AL-1999.004.dns_dos)>>
+/Parent 2131 0 R
>> endobj
-2083 0 obj <<
-/D [2081 0 R /XYZ 56.6929 794.5015 null]
+2124 0 obj <<
+/D [2122 0 R /XYZ 56.6929 794.5015 null]
>> endobj
714 0 obj <<
-/D [2081 0 R /XYZ 56.6929 690.9391 null]
+/D [2122 0 R /XYZ 56.6929 730.0613 null]
>> endobj
-2088 0 obj <<
-/D [2081 0 R /XYZ 56.6929 656.5891 null]
+2128 0 obj <<
+/D [2122 0 R /XYZ 56.6929 694.6148 null]
>> endobj
718 0 obj <<
-/D [2081 0 R /XYZ 56.6929 517.028 null]
+/D [2122 0 R /XYZ 56.6929 556.3845 null]
>> endobj
-2089 0 obj <<
-/D [2081 0 R /XYZ 56.6929 489.6469 null]
+2129 0 obj <<
+/D [2122 0 R /XYZ 56.6929 529.3116 null]
>> endobj
722 0 obj <<
-/D [2081 0 R /XYZ 56.6929 373.2709 null]
+/D [2122 0 R /XYZ 56.6929 413.847 null]
>> endobj
-2090 0 obj <<
-/D [2081 0 R /XYZ 56.6929 344.9674 null]
+2130 0 obj <<
+/D [2122 0 R /XYZ 56.6929 385.8516 null]
>> endobj
726 0 obj <<
-/D [2081 0 R /XYZ 56.6929 184.6919 null]
+/D [2122 0 R /XYZ 56.6929 226.4875 null]
>> endobj
-1732 0 obj <<
-/D [2081 0 R /XYZ 56.6929 151.8489 null]
+1753 0 obj <<
+/D [2122 0 R /XYZ 56.6929 193.9525 null]
>> endobj
-2080 0 obj <<
-/Font << /F37 1026 0 R /F71 2086 0 R /F22 961 0 R /F39 1161 0 R /F11 1451 0 R /F41 1218 0 R /F21 938 0 R /F53 1313 0 R /F48 1238 0 R /F62 1361 0 R /F63 1364 0 R >>
-/XObject << /Im2 1350 0 R >>
+2121 0 obj <<
+/Font << /F37 1038 0 R /F69 2127 0 R /F22 973 0 R /F21 950 0 R /F39 1173 0 R /F41 1233 0 R /F53 1328 0 R /F48 1253 0 R /F62 1379 0 R /F63 1382 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2093 0 obj <<
-/Length 846
+2134 0 obj <<
+/Length 534
/Filter /FlateDecode
>>
stream
-xÚ¥UKÛ6¾ëWè(KŠ¢ÇÍÚI ÛíZ9I´ÄØB$Qé8î¯ïPCïº[õTg†çñÍb!… A(/Ó0/S"(aÝ4<ÀÞû€yL|Å·¨·UðË;ž‡%)³$ «o7¾
-B‹‚…Uó9ºÿõî±Ú<­âDÐ('«Xd4z»}X£¥Äe·¹ÿø´­>¡vÿûÃn»Þ<Ý­ò4ª¶ ­â´ œçÞÃúÓÃÝoÛ{Ä|\#tóÊÛ×êC°©ž ¹-–Qîªø3øü•† Ôü! „—…Ï PÂÊ2 û œˆ”ó«¥ vÁÏovç£Kä ^Q$ù{I²Äž(IÆ>³÷NO«˜Ó,²Ge”óhZ±"RÒèÁ¼KB£³B±óžÝå[ë¾WCsõ$-J§±‘VTöÞ{=]F«“m-;t”Eò LVyG{£Wr0Žj¨7fŒ”B$sòú´#K";@Ö¶Õƒ3°È´‡AÚ&gô…
-Zí¶ïaeaÕœ©Ûl]¥I–:\$ ŽÝPÇÊŒ¤)ÈtŽ YësŒÕyô-ÑYBJV¬Çk^IdŽúÔ5¼k®GÂœ䇶ïê‚°b‘\Å,êAP˜¦ˆmgB`K³$ý'1ÛGœSÙ4ž3Ó
-“ÚZ¬8‹ê£ÖÆ›­v«
-Íe=N¤omƒk÷:Ìi%Jí€n¼jNûF÷­àrð'Õ©ƒ›ŒÓvÅÇKíð3ååT£F9¡+ÐþÒƒ"xIªcky–/]J¯]»ÕcÜ)hâËY”j=Xˆ×¯O­»óպاúˆ’ô¡¼ïÍm¼4ÀÀå\(p<ía°gµ÷cŠ„QW~‡’QÓ5™ëœ)psGÜDÑ7Î^Jļ`ɽÔ\÷¼.¼«ð÷yÿïWüåû–¦(’åšÓ”p^²kRŽ/Æòש?¿÷ÿÎýoÊàaendstream
+xÚ¥TM›0½ó+|©¸6ÆÄ>fmY©iš°‡Õj¼ *Ái e}MÆùЖ=­¢ˆyã7o><@1?ŠÇ„Édˆ9¡‡ •9ûîPËñÏ$ÿ–u—9_¿±’XFA„²—-‰eå“;ù1žeÉÜóNÜö|÷.Æà‘ðX$“‡yš=šüš.Ò8™½Qèf©Až
+"L<³
+ñãtü3
+Wµ­²ý2Ôàv¿¬«öî –`Ø‘¾ý¬Ví^Õ®Ð(e îlH]ë˜öâ
endobj
-2092 0 obj <<
+2133 0 obj <<
/Type /Page
-/Contents 2093 0 R
-/Resources 2091 0 R
+/Contents 2134 0 R
+/Resources 2132 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2073 0 R
+/Parent 2131 0 R
>> endobj
-2094 0 obj <<
-/D [2092 0 R /XYZ 85.0394 794.5015 null]
+2135 0 obj <<
+/D [2133 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2091 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R >>
+2132 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2097 0 obj <<
+2138 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-2096 0 obj <<
+2137 0 obj <<
/Type /Page
-/Contents 2097 0 R
-/Resources 2095 0 R
+/Contents 2138 0 R
+/Resources 2136 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2073 0 R
+/Parent 2131 0 R
>> endobj
-2098 0 obj <<
-/D [2096 0 R /XYZ 56.6929 794.5015 null]
+2139 0 obj <<
+/D [2137 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2095 0 obj <<
+2136 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-2101 0 obj <<
+2142 0 obj <<
/Length 1965
/Filter /FlateDecode
>>
@@ -10071,86 +10300,86 @@ i ·¥Ý3éÀ–yíˆùðŠ&Â8K<æcø¡›‚hïCû™<»úÐŒ­êhüýÔï Æס\@•‰ó÷w= vV
ýf3GÕ51b‘æi‘diNŒ‘Œâ±ˆ±0·"ð0àâÄßZÕ7’\sÂw"ó‡&0ÍåþF—?$cRÍZº”í(õåŠ:éH^04g¢°û(½À ÙWáÓ7˜¿S,[>°úŒ¹…;î3`ô¦'bÕÀ¤Ö^ ïöEy˜]¹œ­Þv‹íçÞa¯Úák@n@þzh|ÇütÓOÓ0J¿mºã—¿ÞeÚâš(°ÁiÇEðá êÍâÀz҃ѣm§žæˆ§çOŒ$
­è×ØÚ:‰óÎÐÃBYn?z·XdÌqâd¾©Üä¤ÚNí:ørðï»QÕaáƒL·CÕMucVìâªV.Wª4 Û8Hü»Uoy)”@»Zìo+B)ˆ×­©ôD9ƒ©;B.ÊõTyåvÂ)Î6™îZds§¡ÁÓÏMí­µ°r=¶öä&vÓž®é^/yr€¡¶¯ÓP;«y Â1{9B€FãŸà{ËוÂM>p\×-ž‘7>å èWˆÌ¨W
¥Ìrcø-Š¼ûãËü
-“¤%œ¡i±Iæ² —â~ÚøÑŸ/¯6³Âv¡ámÒ¥ß;»è½‡CÀê/aïoãã<,EQ^Çsór4 ÝÅpµö;[ÃïVÎy7G)JΑOü©5­¿|hW°hpk·IQ„"é5¶ÏÍŽûª‡]Ù)C™‹_Ú‘Âõ%KÄQXDñ¯oʬ±]ªÜïʽe×SX{üâññ|>‡¼+¾,}w¸ÉÀdñ:Æ›š¥îãºÊǽµÿ¶Uø]5èTíŠË°ç§ð6hÿ˜ÈŸ%×"ö"Û‹ ½H.ƒH"h<H# a(B”·îæÎ{ÿúÀendstream
+“¤%œ¡i±Iæ² —â~ÚøÑŸ/¯6³Âv¡ámÒ¥ß;»è½‡CÀê/aïoãã<,EQ^Çsór4 ÝÅpµö;[ÃïVÎy7G)JΑOü©5­¿|hW°hpk·IQ„"é5¶ÏÍŽûª‡]Ù)C™‹_Ú‘Âõ%KÄQXDñ¯oʬ±]ªÜïʽe×SX{üâññ|>‡¼+¾,}w¸ÉÀdñ:Æ›š¥îãºÊǽµÿ¶Uø]5èTíŠË°ç§ð6hÿ˜ÈŸ%×"ö"Û‹ ½H.ƒH"h<H# a("NnÝÍœ÷þþùå
endobj
-2100 0 obj <<
+2141 0 obj <<
/Type /Page
-/Contents 2101 0 R
-/Resources 2099 0 R
+/Contents 2142 0 R
+/Resources 2140 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2073 0 R
-/Annots [ 2108 0 R 2109 0 R ]
+/Parent 2131 0 R
+/Annots [ 2149 0 R 2150 0 R ]
>> endobj
-2108 0 obj <<
+2149 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [348.3486 128.9523 463.9152 141.0119]
/Subtype/Link/A<</Type/Action/S/URI/URI(mailto:info@isc.org)>>
>> endobj
-2109 0 obj <<
+2150 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [147.3629 116.9971 364.5484 129.0567]
/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.isc.org/services/support/)>>
>> endobj
-2102 0 obj <<
-/D [2100 0 R /XYZ 85.0394 794.5015 null]
+2143 0 obj <<
+/D [2141 0 R /XYZ 85.0394 794.5015 null]
>> endobj
730 0 obj <<
-/D [2100 0 R /XYZ 85.0394 769.5949 null]
+/D [2141 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2103 0 obj <<
-/D [2100 0 R /XYZ 85.0394 576.7004 null]
+2144 0 obj <<
+/D [2141 0 R /XYZ 85.0394 576.7004 null]
>> endobj
734 0 obj <<
-/D [2100 0 R /XYZ 85.0394 576.7004 null]
+/D [2141 0 R /XYZ 85.0394 576.7004 null]
>> endobj
-2104 0 obj <<
-/D [2100 0 R /XYZ 85.0394 548.3785 null]
+2145 0 obj <<
+/D [2141 0 R /XYZ 85.0394 548.3785 null]
>> endobj
738 0 obj <<
-/D [2100 0 R /XYZ 85.0394 548.3785 null]
+/D [2141 0 R /XYZ 85.0394 548.3785 null]
>> endobj
-2105 0 obj <<
-/D [2100 0 R /XYZ 85.0394 518.5228 null]
+2146 0 obj <<
+/D [2141 0 R /XYZ 85.0394 518.5228 null]
>> endobj
742 0 obj <<
-/D [2100 0 R /XYZ 85.0394 460.6968 null]
+/D [2141 0 R /XYZ 85.0394 460.6968 null]
>> endobj
-2106 0 obj <<
-/D [2100 0 R /XYZ 85.0394 425.0333 null]
+2147 0 obj <<
+/D [2141 0 R /XYZ 85.0394 425.0333 null]
>> endobj
746 0 obj <<
-/D [2100 0 R /XYZ 85.0394 260.2468 null]
+/D [2141 0 R /XYZ 85.0394 260.2468 null]
>> endobj
-2107 0 obj <<
-/D [2100 0 R /XYZ 85.0394 224.698 null]
+2148 0 obj <<
+/D [2141 0 R /XYZ 85.0394 224.698 null]
>> endobj
-2099 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F11 1451 0 R /F41 1218 0 R >>
+2140 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F11 1353 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2112 0 obj <<
+2153 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-2111 0 obj <<
+2152 0 obj <<
/Type /Page
-/Contents 2112 0 R
-/Resources 2110 0 R
+/Contents 2153 0 R
+/Resources 2151 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2114 0 R
+/Parent 2131 0 R
>> endobj
-2113 0 obj <<
-/D [2111 0 R /XYZ 56.6929 794.5015 null]
+2154 0 obj <<
+/D [2152 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2110 0 obj <<
+2151 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-2117 0 obj <<
+2157 0 obj <<
/Length 2544
/Filter /FlateDecode
>>
@@ -10162,41 +10391,41 @@ FXЭ‚dƒ\#åS¯ÐyOpBŒšÈª†¨n4\Tòi¹^¿È=õvÂÀ3v·Ù”¹<ƒZˆLPO–`š8I9³€øQ &ŽÀ6 CÆg”ñ
¼
–a“p¯Gkଯ ëÃá5³îǪÿêÄ- ÜȽ¬Í|µ/^ÄwxÒH‚
D¤<ÐÎÿ—yÇ‘sU@E…ÎqÌ*Š‘×8P”Ì Ë¿/@f4áRÊ}^º¦ÖÒRº#›Úv°/×ˈÖFtÅŒ‚þ[åSr Òéú@Øèªé)ŽL½"Ÿûæ¢@ù<ñpJµÙ>~æÜpËLtGY­Fgá±[A —(-̃ÅÙ¶Ä ˜Þ°)Ëx™AaíF¼¨‚ÕáPâ¥V)§8·º>@ÌÔ4ûôÜÄP‰BÍÞ(dv P&máªëæßFD3zœ`·“¢ÂEàÛ=ÃBj{ †rh®ÔÐq½ ‘®³«zß&Å(uùJ¸8…B×ò5ø?Š²9Òp#ªf'Ë’•ú&_æ ùM_—¢±J6iðU£ª#E}ïãÏ^5X*‰eÃÏÖJ©>KF\¢P¯SSŒo&Œ>Ï! ·LÝ–è@±¸ˆ¤ægH@Ä9³ZI( Ž:ž()6Sq
-UŸiQc¢õFêƆEiX*×5ÔÏ]OÕ-ãÖXXE p³Í‚¥¢o¹‡šMÔºõÁùˆ4òs®øbðج–×
+UŸiQc¢õFêƆEiX*×5ÔÏ]OÕ-ãÖXXE p³Í‚¥¢o¹‡šMÔºõÁùˆ4òs®øbðج–×
endobj
-2116 0 obj <<
+2156 0 obj <<
/Type /Page
-/Contents 2117 0 R
-/Resources 2115 0 R
+/Contents 2157 0 R
+/Resources 2155 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2114 0 R
+/Parent 2131 0 R
>> endobj
-2118 0 obj <<
-/D [2116 0 R /XYZ 85.0394 794.5015 null]
+2158 0 obj <<
+/D [2156 0 R /XYZ 85.0394 794.5015 null]
>> endobj
750 0 obj <<
-/D [2116 0 R /XYZ 85.0394 769.5949 null]
+/D [2156 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2119 0 obj <<
-/D [2116 0 R /XYZ 85.0394 573.5449 null]
+2159 0 obj <<
+/D [2156 0 R /XYZ 85.0394 573.5449 null]
>> endobj
754 0 obj <<
-/D [2116 0 R /XYZ 85.0394 573.5449 null]
+/D [2156 0 R /XYZ 85.0394 573.5449 null]
>> endobj
-2120 0 obj <<
-/D [2116 0 R /XYZ 85.0394 539.0037 null]
+2160 0 obj <<
+/D [2156 0 R /XYZ 85.0394 539.0037 null]
>> endobj
758 0 obj <<
-/D [2116 0 R /XYZ 85.0394 539.0037 null]
+/D [2156 0 R /XYZ 85.0394 539.0037 null]
>> endobj
-2121 0 obj <<
-/D [2116 0 R /XYZ 85.0394 510.2426 null]
+2161 0 obj <<
+/D [2156 0 R /XYZ 85.0394 510.2426 null]
>> endobj
-2115 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R >>
+2155 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2124 0 obj <<
+2164 0 obj <<
/Length 2811
/Filter /FlateDecode
>>
@@ -10214,66 +10443,66 @@ EЙ­OƭܨŒÚ›-—e]s÷Z_ÔU×.Ê‘zE)míë¹®¸ÊWñ•¿ÉUêº0¢Æ÷j­bqå­¤7‘Љ’-9ŽÂÐák
â”mÖöÑëC½Ã
cåàföí÷¹àRõvùÀw²½šÈöëvuyùòò‚*p
]8*?\ÕÂXé[}ãú&?kÚþù+üM\O:‰p-’Ó~å‡1ÎCN("ÛÿùøÓ‰øN”±iÙE˜øô­ƒ–¿ÌìèÇþ»G·c1Üb¾{øÃO)Ô1T~ß!¯½<æÏGþã8:âïè[L‡uÊÓH§Ô§¿Lå]ÀĈ90&ºÒK÷ðxj7ˆ†žÄ˜-t|×âÚv ª{ô^Ù¶Ä>±t‹à-Ö‹i¦'¾}¤¥¶Ÿ4žÓÂ>©]¶£÷OtJµùï‘ÊøÙJ„b¤‡7
-}Ç÷èUHÇÁ{‘Ý°î8u¢º¦Nh{'RíÚ©›Íe³ÎN|Çs#'qå1WG¾Óa²2RÄ)µ·|'r"?Ž†<ÇéÜ4†`“6MKÎü=B¿õ…S~–œÃíóÿüõ³ÿ
+}Ç÷èUHÇÁ{‘Ý°î8u¢º¦Nh{'RíÚ©›Íe³ÎN|Çs#'qå1WG¾Óa²2RÄ)µ·|'r"?Ž†<ÇéÜ4†`“6MKÎü=B¿õ…S~–œÃíóÿüõ³ÿ
endobj
-2123 0 obj <<
+2163 0 obj <<
/Type /Page
-/Contents 2124 0 R
-/Resources 2122 0 R
+/Contents 2164 0 R
+/Resources 2162 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2114 0 R
-/Annots [ 2128 0 R 2129 0 R ]
+/Parent 2172 0 R
+/Annots [ 2168 0 R 2169 0 R ]
>> endobj
-2128 0 obj <<
+2168 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [253.7995 149.3637 417.685 161.4234]
/Subtype/Link/A<</Type/Action/S/URI/URI(ftp://www.isi.edu/in-notes/)>>
>> endobj
-2129 0 obj <<
+2169 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [63.4454 110.455 208.8999 120.6168]
/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.ietf.org/rfc/)>>
>> endobj
-2125 0 obj <<
-/D [2123 0 R /XYZ 56.6929 794.5015 null]
+2165 0 obj <<
+/D [2163 0 R /XYZ 56.6929 794.5015 null]
>> endobj
762 0 obj <<
-/D [2123 0 R /XYZ 56.6929 662.0717 null]
+/D [2163 0 R /XYZ 56.6929 662.0717 null]
>> endobj
-2126 0 obj <<
-/D [2123 0 R /XYZ 56.6929 624.1661 null]
+2166 0 obj <<
+/D [2163 0 R /XYZ 56.6929 624.1661 null]
>> endobj
766 0 obj <<
-/D [2123 0 R /XYZ 56.6929 624.1661 null]
+/D [2163 0 R /XYZ 56.6929 624.1661 null]
>> endobj
-1531 0 obj <<
-/D [2123 0 R /XYZ 56.6929 593.0972 null]
+1546 0 obj <<
+/D [2163 0 R /XYZ 56.6929 593.0972 null]
>> endobj
770 0 obj <<
-/D [2123 0 R /XYZ 56.6929 294.2701 null]
+/D [2163 0 R /XYZ 56.6929 294.2701 null]
>> endobj
-2127 0 obj <<
-/D [2123 0 R /XYZ 56.6929 255.4568 null]
+2167 0 obj <<
+/D [2163 0 R /XYZ 56.6929 255.4568 null]
>> endobj
774 0 obj <<
-/D [2123 0 R /XYZ 56.6929 255.4568 null]
+/D [2163 0 R /XYZ 56.6929 255.4568 null]
>> endobj
-1251 0 obj <<
-/D [2123 0 R /XYZ 56.6929 226.1045 null]
+1266 0 obj <<
+/D [2163 0 R /XYZ 56.6929 226.1045 null]
>> endobj
-2130 0 obj <<
-/D [2123 0 R /XYZ 56.6929 53.5688 null]
+2170 0 obj <<
+/D [2163 0 R /XYZ 56.6929 53.5688 null]
>> endobj
-2131 0 obj <<
-/D [2123 0 R /XYZ 56.6929 53.5688 null]
+2171 0 obj <<
+/D [2163 0 R /XYZ 56.6929 53.5688 null]
>> endobj
-2122 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F39 1161 0 R /F53 1313 0 R /F11 1451 0 R /F41 1218 0 R >>
+2162 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F39 1173 0 R /F53 1328 0 R /F11 1353 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2134 0 obj <<
+2175 0 obj <<
/Length 2825
/Filter /FlateDecode
>>
@@ -10292,692 +10521,692 @@ Zî–ÁÅ“ž„N(ËEHq¤;#UO«E;õ4:É$£ÇgöHm)7™FJ“>2½Ð-™'ØÃdvÀ›
ã3­¤%ä¶B-dU™Ï}¸­ ö‡MÐFžŒ¯ -3wÊ,Ÿw¢^ [ÖŒ*…ÅÈ´<Øû©ÍØ/cŒ ­±ïÖÙN­>Ë^vå›~¾Ñó
åçú«d>C¶K¡`Œidå7ÆÁâU<2³û»I_å Cæœ:& ôÚäLcjKy¨ÖRמZ/´EvÛÁ¶ >-÷{¹ëŠõfëÀ·@09—¬–‡JÊH…‰Åq³N¬é„`ü]þmøèœÆ(æØ>F¢aóù XäýqŸêSW±ïÚôy°Úc +ïÔàT >d mâŒ^·Ãs§÷œ¥ÅùÆgîóÝÎœø~ŸIð‘0Šüa ¹ B µT$žƒnk}àak°‘Ù!×G%ǶÚ4[Y¯†ªLÆ,<=5G±Žö\×~ïGI ¶àÏÔÿ–[áZ¨Íø¾Ï¾|¸­ÂûÀÃ
·‘÷AŸWÏÙ6}ÍE5#P}m kkôÓÒ9áBŸÔ6"²€ÑÛÇ×H^MÖêD2ì #FEÐ|X|Ö~ѼJyÈ«m^§DRãKá%Jæ./öY®P¯ÙÙC²7Ü…¤jñ î€j“Ûÿò—¾ÖÎaŒh’8Ó(4Ÿ”r¬_Jü
-LhÿÕÍ7Á§ïþ_$Gb’endstream
+Lâþ«›o‚Oßý¿$÷b–endstream
endobj
-2133 0 obj <<
+2174 0 obj <<
/Type /Page
-/Contents 2134 0 R
-/Resources 2132 0 R
+/Contents 2175 0 R
+/Resources 2173 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2114 0 R
->> endobj
-2135 0 obj <<
-/D [2133 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-2136 0 obj <<
-/D [2133 0 R /XYZ 85.0394 752.3015 null]
->> endobj
-2137 0 obj <<
-/D [2133 0 R /XYZ 85.0394 752.3015 null]
->> endobj
-2138 0 obj <<
-/D [2133 0 R /XYZ 85.0394 752.3015 null]
->> endobj
-2139 0 obj <<
-/D [2133 0 R /XYZ 85.0394 746.3107 null]
->> endobj
-2140 0 obj <<
-/D [2133 0 R /XYZ 85.0394 731.5461 null]
->> endobj
-2141 0 obj <<
-/D [2133 0 R /XYZ 85.0394 728.1497 null]
->> endobj
-2142 0 obj <<
-/D [2133 0 R /XYZ 85.0394 713.3851 null]
->> endobj
-2143 0 obj <<
-/D [2133 0 R /XYZ 85.0394 709.9887 null]
->> endobj
-2144 0 obj <<
-/D [2133 0 R /XYZ 85.0394 651.9592 null]
->> endobj
-1381 0 obj <<
-/D [2133 0 R /XYZ 85.0394 651.9592 null]
->> endobj
-2145 0 obj <<
-/D [2133 0 R /XYZ 85.0394 651.9592 null]
->> endobj
-2146 0 obj <<
-/D [2133 0 R /XYZ 85.0394 648.8377 null]
->> endobj
-2147 0 obj <<
-/D [2133 0 R /XYZ 85.0394 634.0731 null]
->> endobj
-2148 0 obj <<
-/D [2133 0 R /XYZ 85.0394 630.6767 null]
->> endobj
-2149 0 obj <<
-/D [2133 0 R /XYZ 85.0394 615.9121 null]
->> endobj
-2150 0 obj <<
-/D [2133 0 R /XYZ 85.0394 612.5156 null]
->> endobj
-2151 0 obj <<
-/D [2133 0 R /XYZ 85.0394 585.7959 null]
->> endobj
-2152 0 obj <<
-/D [2133 0 R /XYZ 85.0394 582.3994 null]
->> endobj
-2153 0 obj <<
-/D [2133 0 R /XYZ 85.0394 567.6349 null]
->> endobj
-2154 0 obj <<
-/D [2133 0 R /XYZ 85.0394 564.2384 null]
->> endobj
-2155 0 obj <<
-/D [2133 0 R /XYZ 85.0394 549.5337 null]
->> endobj
-2156 0 obj <<
-/D [2133 0 R /XYZ 85.0394 546.0774 null]
->> endobj
-2157 0 obj <<
-/D [2133 0 R /XYZ 85.0394 531.3128 null]
->> endobj
-2158 0 obj <<
-/D [2133 0 R /XYZ 85.0394 527.9163 null]
->> endobj
-2159 0 obj <<
-/D [2133 0 R /XYZ 85.0394 513.1518 null]
->> endobj
-2160 0 obj <<
-/D [2133 0 R /XYZ 85.0394 509.7553 null]
->> endobj
-2161 0 obj <<
-/D [2133 0 R /XYZ 85.0394 483.0356 null]
->> endobj
-2162 0 obj <<
-/D [2133 0 R /XYZ 85.0394 479.6391 null]
->> endobj
-2163 0 obj <<
-/D [2133 0 R /XYZ 85.0394 464.8745 null]
->> endobj
-2164 0 obj <<
-/D [2133 0 R /XYZ 85.0394 461.4781 null]
->> endobj
-2165 0 obj <<
-/D [2133 0 R /XYZ 85.0394 446.7135 null]
->> endobj
-2166 0 obj <<
-/D [2133 0 R /XYZ 85.0394 443.3171 null]
->> endobj
-2167 0 obj <<
-/D [2133 0 R /XYZ 85.0394 428.5525 null]
->> endobj
-2168 0 obj <<
-/D [2133 0 R /XYZ 85.0394 425.156 null]
->> endobj
-2169 0 obj <<
-/D [2133 0 R /XYZ 85.0394 355.0758 null]
->> endobj
-2170 0 obj <<
-/D [2133 0 R /XYZ 85.0394 355.0758 null]
->> endobj
-2171 0 obj <<
-/D [2133 0 R /XYZ 85.0394 355.0758 null]
->> endobj
-2172 0 obj <<
-/D [2133 0 R /XYZ 85.0394 352.0499 null]
->> endobj
-2173 0 obj <<
-/D [2133 0 R /XYZ 85.0394 337.3452 null]
->> endobj
-2174 0 obj <<
-/D [2133 0 R /XYZ 85.0394 333.8889 null]
->> endobj
-2175 0 obj <<
-/D [2133 0 R /XYZ 85.0394 309.8192 null]
+/Parent 2172 0 R
>> endobj
2176 0 obj <<
-/D [2133 0 R /XYZ 85.0394 303.7727 null]
+/D [2174 0 R /XYZ 85.0394 794.5015 null]
>> endobj
2177 0 obj <<
-/D [2133 0 R /XYZ 85.0394 278.3282 null]
+/D [2174 0 R /XYZ 85.0394 752.3015 null]
>> endobj
2178 0 obj <<
-/D [2133 0 R /XYZ 85.0394 273.6565 null]
+/D [2174 0 R /XYZ 85.0394 752.3015 null]
>> endobj
2179 0 obj <<
-/D [2133 0 R /XYZ 85.0394 246.9367 null]
+/D [2174 0 R /XYZ 85.0394 752.3015 null]
>> endobj
2180 0 obj <<
-/D [2133 0 R /XYZ 85.0394 243.5403 null]
+/D [2174 0 R /XYZ 85.0394 746.3107 null]
>> endobj
2181 0 obj <<
-/D [2133 0 R /XYZ 85.0394 173.5556 null]
+/D [2174 0 R /XYZ 85.0394 731.5461 null]
>> endobj
2182 0 obj <<
-/D [2133 0 R /XYZ 85.0394 173.5556 null]
+/D [2174 0 R /XYZ 85.0394 728.1497 null]
>> endobj
2183 0 obj <<
-/D [2133 0 R /XYZ 85.0394 173.5556 null]
+/D [2174 0 R /XYZ 85.0394 713.3851 null]
>> endobj
2184 0 obj <<
-/D [2133 0 R /XYZ 85.0394 170.4341 null]
+/D [2174 0 R /XYZ 85.0394 709.9887 null]
>> endobj
2185 0 obj <<
-/D [2133 0 R /XYZ 85.0394 144.9896 null]
+/D [2174 0 R /XYZ 85.0394 651.9592 null]
+>> endobj
+1399 0 obj <<
+/D [2174 0 R /XYZ 85.0394 651.9592 null]
>> endobj
2186 0 obj <<
-/D [2133 0 R /XYZ 85.0394 140.3179 null]
+/D [2174 0 R /XYZ 85.0394 651.9592 null]
>> endobj
2187 0 obj <<
-/D [2133 0 R /XYZ 85.0394 113.5982 null]
+/D [2174 0 R /XYZ 85.0394 648.8377 null]
>> endobj
2188 0 obj <<
-/D [2133 0 R /XYZ 85.0394 110.2017 null]
+/D [2174 0 R /XYZ 85.0394 634.0731 null]
>> endobj
2189 0 obj <<
-/D [2133 0 R /XYZ 85.0394 95.4372 null]
+/D [2174 0 R /XYZ 85.0394 630.6767 null]
>> endobj
2190 0 obj <<
-/D [2133 0 R /XYZ 85.0394 92.0407 null]
+/D [2174 0 R /XYZ 85.0394 615.9121 null]
>> endobj
-2132 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R >>
-/ProcSet [ /PDF /Text ]
+2191 0 obj <<
+/D [2174 0 R /XYZ 85.0394 612.5156 null]
>> endobj
-2193 0 obj <<
-/Length 2889
-/Filter /FlateDecode
->>
-stream
-xÚµšMsÛ8†ïþ:JU1†
-<
-}w„°i5LX[iÂã¶J7„O´{ ·´Xøé«M|§–=w¦í½˜A;ˆ‚ÈÀ öHü¿HiþM|˜øh²÷²ÈX–%òž.w˜C
-†•…‚²Ò`¯·P°IºÚýLíù&?ýã⯲s¬Ø,¯dSšwç]ù?ý
-?â7?Òù1Щsàží’º(
-ü6¡¹$´HÊ*K^˜l¦µ£ïÞ©s±ðûgM,&†af0 †•…˜²2ˆb6iƒXW»Ÿ˜©½ÞÄÜÎ=ØYEXž(E_q@ü¿Ø&ÁFQã‚Z}ƒ¤Æ¯G¨ù
-\'4v¹@`ã£Ø\ÇÄÆ?5ØÄaFÔÊ'­0ÝÐA>Lº¦i5 S[0-»Uºy¢Ý ³¥½©ŠC½KáˆN/ÙAlapød%osk†¼¯fÈCÞ(ò+Å[Œ0$aH;†ü~Îßkºžã)†Â¦^aüâ“4¾:îöG8ÔÊùŴ‰´ÿÄs]8Ç4 #° + leeÀŽ,°mÒì®v?lS›ÃNÄ>ŠsÁÙô©>µœ_³º2#zas,E*[dè ÐéС7[
-id„ý4¦Õ0m¥Ñ¡¥
-°I+ «Ý¿Lí{Ôu]î‹5e×¥ÓøX=ö[½‰®»"ååÑÇ¡®â»ûµðOÞ_3æ}í¬“wÉä¤?ÈúžÛð†hÁSÃú.•®‘Wä‘ÊïlEÕ {…ø¡Ó;G
-ÛðÈ‘·±±06Š ÅØ^-¢¿¶j?½F•t7×ñ90d6BäQ—Â-D‹L^àJj±ªÞ£z‹uõ7®G¶Ëx8›c°ˆ¿¤uæåE\#þò‚tò&™ª1ZP"¦}Ä Ç‘…£4j@KÝΦkì÷£4„ã&]ÉøZ?$üÑ`'¿¿IËJ¦ž"ö:íbo¸ùáé+‡²w7Jcðì··T#ôB^UlŸOj4V`qÅ‘˜a4 Li`^d) Øt`]á^`¦°¨¡†p"üU±¼¬ŸTÂ숚*ü/¯¯Å¡FË;ÑøƒJQ6‡F¿¯2`äø‘±ºÄ›n¸ãþ¹Ø‹|·^ÊÖëc
-¾šÈÖϺ`]Ë4OòJv‰šU N«µƒiqLË2í«ÿ
-ŒÛÏiueK×±ôƒƒæÏBŽãŒÄaÓj˜¹¶jÞLpð0s«tÃüD»—yK[ÏÇ"ß»ø+Vý,/MÓ­ ~‚é;üd'DÄñCK˜ýl~h½u Äë!ÍTò'/Ø‹PˆÇª¦•…’²j(ÙöK«´A©«ÝOÉÔ^³ïÇTìq{–«íPo‘Í#/þéºÐ湚»×,Ý…ô¦¬+#wŸ[<¹ÂùÅ!Ù±r¹
-…º#õ:ÓÊEYi(^ds›´¥«ÝÅÔOï7ÕḭD˜d™7žmôl‘‡ü€ºíÉÿ ã
-.Wçñ|¾FñZD—øw¦~TЙìkUUIw9SAèJ6î$Í«z꾅щlÍ£ü~dÃÏu1dwGÛ›VdÊJ# ‰å4i•6uµû‘™ÚËøBm¼DÁ¶Ï9„§L½Î´ç1NîC݇MyúýȺ‡ лéz~ÐÛ–±DÇÊŽ§^I§‚ö;•“~f8ö–…a4LK5eb©TÛtV]á^T¦°Žqn¨bœñ7ƒ´ºsnÔ©b‚å2^Åâêr…tÇÉÐû¼¤é“ÖÓ?±N©áv3¥†f#¥æÒè¢.lå¹x òüßµ·eYšìÕ‹Z¤uö×ÎÚyÍnð i©³xˆ¿OÛ3ùŽ>“þϯíUñ
-endobj
2192 0 obj <<
-/Type /Page
-/Contents 2193 0 R
-/Resources 2191 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 2114 0 R
+/D [2174 0 R /XYZ 85.0394 585.7959 null]
+>> endobj
+2193 0 obj <<
+/D [2174 0 R /XYZ 85.0394 582.3994 null]
>> endobj
2194 0 obj <<
-/D [2192 0 R /XYZ 56.6929 794.5015 null]
+/D [2174 0 R /XYZ 85.0394 567.6349 null]
>> endobj
2195 0 obj <<
-/D [2192 0 R /XYZ 56.6929 748.5056 null]
+/D [2174 0 R /XYZ 85.0394 564.2384 null]
>> endobj
2196 0 obj <<
-/D [2192 0 R /XYZ 56.6929 748.5056 null]
+/D [2174 0 R /XYZ 85.0394 549.5337 null]
>> endobj
2197 0 obj <<
-/D [2192 0 R /XYZ 56.6929 748.5056 null]
+/D [2174 0 R /XYZ 85.0394 546.0774 null]
>> endobj
2198 0 obj <<
-/D [2192 0 R /XYZ 56.6929 743.7078 null]
+/D [2174 0 R /XYZ 85.0394 531.3128 null]
>> endobj
2199 0 obj <<
-/D [2192 0 R /XYZ 56.6929 719.6381 null]
+/D [2174 0 R /XYZ 85.0394 527.9163 null]
>> endobj
2200 0 obj <<
-/D [2192 0 R /XYZ 56.6929 711.8197 null]
+/D [2174 0 R /XYZ 85.0394 513.1518 null]
>> endobj
2201 0 obj <<
-/D [2192 0 R /XYZ 56.6929 697.0552 null]
+/D [2174 0 R /XYZ 85.0394 509.7553 null]
>> endobj
2202 0 obj <<
-/D [2192 0 R /XYZ 56.6929 691.8868 null]
+/D [2174 0 R /XYZ 85.0394 483.0356 null]
>> endobj
2203 0 obj <<
-/D [2192 0 R /XYZ 56.6929 665.1671 null]
+/D [2174 0 R /XYZ 85.0394 479.6391 null]
>> endobj
2204 0 obj <<
-/D [2192 0 R /XYZ 56.6929 659.9987 null]
+/D [2174 0 R /XYZ 85.0394 464.8745 null]
>> endobj
2205 0 obj <<
-/D [2192 0 R /XYZ 56.6929 635.929 null]
+/D [2174 0 R /XYZ 85.0394 461.4781 null]
>> endobj
2206 0 obj <<
-/D [2192 0 R /XYZ 56.6929 628.1106 null]
+/D [2174 0 R /XYZ 85.0394 446.7135 null]
>> endobj
2207 0 obj <<
-/D [2192 0 R /XYZ 56.6929 601.3909 null]
+/D [2174 0 R /XYZ 85.0394 443.3171 null]
>> endobj
2208 0 obj <<
-/D [2192 0 R /XYZ 56.6929 596.2225 null]
+/D [2174 0 R /XYZ 85.0394 428.5525 null]
>> endobj
2209 0 obj <<
-/D [2192 0 R /XYZ 56.6929 569.5028 null]
+/D [2174 0 R /XYZ 85.0394 425.156 null]
>> endobj
2210 0 obj <<
-/D [2192 0 R /XYZ 56.6929 564.3344 null]
+/D [2174 0 R /XYZ 85.0394 355.0758 null]
>> endobj
2211 0 obj <<
-/D [2192 0 R /XYZ 56.6929 549.6297 null]
+/D [2174 0 R /XYZ 85.0394 355.0758 null]
>> endobj
2212 0 obj <<
-/D [2192 0 R /XYZ 56.6929 544.4015 null]
+/D [2174 0 R /XYZ 85.0394 355.0758 null]
>> endobj
2213 0 obj <<
-/D [2192 0 R /XYZ 56.6929 529.6968 null]
+/D [2174 0 R /XYZ 85.0394 352.0499 null]
>> endobj
2214 0 obj <<
-/D [2192 0 R /XYZ 56.6929 524.4686 null]
+/D [2174 0 R /XYZ 85.0394 337.3452 null]
>> endobj
2215 0 obj <<
-/D [2192 0 R /XYZ 56.6929 500.3989 null]
+/D [2174 0 R /XYZ 85.0394 333.8889 null]
>> endobj
2216 0 obj <<
-/D [2192 0 R /XYZ 56.6929 492.5805 null]
+/D [2174 0 R /XYZ 85.0394 309.8192 null]
>> endobj
2217 0 obj <<
-/D [2192 0 R /XYZ 56.6929 467.136 null]
+/D [2174 0 R /XYZ 85.0394 303.7727 null]
>> endobj
2218 0 obj <<
-/D [2192 0 R /XYZ 56.6929 460.6924 null]
+/D [2174 0 R /XYZ 85.0394 278.3282 null]
>> endobj
2219 0 obj <<
-/D [2192 0 R /XYZ 56.6929 436.6227 null]
+/D [2174 0 R /XYZ 85.0394 273.6565 null]
>> endobj
2220 0 obj <<
-/D [2192 0 R /XYZ 56.6929 428.8043 null]
+/D [2174 0 R /XYZ 85.0394 246.9367 null]
>> endobj
2221 0 obj <<
-/D [2192 0 R /XYZ 56.6929 414.0996 null]
+/D [2174 0 R /XYZ 85.0394 243.5403 null]
>> endobj
2222 0 obj <<
-/D [2192 0 R /XYZ 56.6929 408.8714 null]
+/D [2174 0 R /XYZ 85.0394 173.5556 null]
>> endobj
2223 0 obj <<
-/D [2192 0 R /XYZ 56.6929 382.1516 null]
+/D [2174 0 R /XYZ 85.0394 173.5556 null]
>> endobj
2224 0 obj <<
-/D [2192 0 R /XYZ 56.6929 376.9833 null]
+/D [2174 0 R /XYZ 85.0394 173.5556 null]
>> endobj
2225 0 obj <<
-/D [2192 0 R /XYZ 56.6929 350.2636 null]
+/D [2174 0 R /XYZ 85.0394 170.4341 null]
>> endobj
2226 0 obj <<
-/D [2192 0 R /XYZ 56.6929 345.0952 null]
+/D [2174 0 R /XYZ 85.0394 144.9896 null]
>> endobj
2227 0 obj <<
-/D [2192 0 R /XYZ 56.6929 321.0255 null]
+/D [2174 0 R /XYZ 85.0394 140.3179 null]
>> endobj
2228 0 obj <<
-/D [2192 0 R /XYZ 56.6929 313.2071 null]
+/D [2174 0 R /XYZ 85.0394 113.5982 null]
>> endobj
2229 0 obj <<
-/D [2192 0 R /XYZ 56.6929 298.5024 null]
+/D [2174 0 R /XYZ 85.0394 110.2017 null]
>> endobj
2230 0 obj <<
-/D [2192 0 R /XYZ 56.6929 293.2742 null]
+/D [2174 0 R /XYZ 85.0394 95.4372 null]
>> endobj
2231 0 obj <<
-/D [2192 0 R /XYZ 56.6929 267.8297 null]
->> endobj
-2232 0 obj <<
-/D [2192 0 R /XYZ 56.6929 261.3861 null]
+/D [2174 0 R /XYZ 85.0394 92.0407 null]
>> endobj
-2233 0 obj <<
-/D [2192 0 R /XYZ 56.6929 199.468 null]
+2173 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
2234 0 obj <<
-/D [2192 0 R /XYZ 56.6929 199.468 null]
+/Length 2889
+/Filter /FlateDecode
+>>
+stream
+xÚµšMsÛ8†ïþ:JU1†
+<
+}w„°i5LX[iÂã¶J7„O´{ ·´Xøé«M|§–=w¦í½˜A;ˆ‚ÈÀ öHü¿HiþM|˜øh²÷²ÈX–%òž.w˜C
+†•…‚²Ò`¯·P°IºÚýLíù&?ýã⯲s¬Ø,¯dSšwç]ù?ý
+?â7?Òù1Щsàží’º(
+ü6¡¹$´HÊ*K^˜l¦µ£ïÞ©s±ðûgM,&†af0 †•…˜²2ˆb6iƒXW»Ÿ˜©½ÞÄÜÎ=ØYEXž(E_q@ü¿Ø&ÁFQã‚Z}ƒ¤Æ¯G¨ù
+\'4v¹@`ã£Ø\ÇÄÆ?5ØÄaFÔÊ'­0ÝÐA>Lº¦i5 S[0-»Uºy¢Ý ³¥½©ŠC½KáˆN/ÙAlapød%osk†¼¯fÈCÞ(ò+Å[Œ0$aH;†ü~Îßkºžã)†Â¦^aüâ“4¾:îöG8ÔÊùŴ‰´ÿÄs]8Ç4 #° + leeÀŽ,°mÒì®v?lS›ÃNÄ>ŠsÁÙô©>µœ_³º2#zas,E*[dè ÐéС7[
+id„ý4¦Õ0m¥Ñ¡¥
+°I+ «Ý¿Lí{Ôu]î‹5e×¥ÓøX=ö[½‰®»"ååÑÇ¡®â»ûµðOÞ_3æ}í¬“wÉä¤?ÈúžÛð†hÁSÃú.•®‘Wä‘ÊïlEÕ {…ø¡Ó;G
+ÛðÈ‘·±±06Š ÅØ^-¢¿¶j?½F•t7×ñ90d6BäQ—Â-D‹L^àJj±ªÞ£z‹uõ7®G¶Ëx8›c°ˆ¿¤uæåE\#þò‚tò&™ª1ZP"¦}Ä Ç‘…£4j@KÝΦkì÷£4„ã&]ÉøZ?$üÑ`'¿¿IËJ¦ž"ö:íbo¸ùáé+‡²w7Jcðì··T#ôB^UlŸOj4V`qÅ‘˜a4 Li`^d) Øt`]á^`¦°¨¡†p"üU±¼¬ŸTÂ숚*ü/¯¯Å¡FË;ÑøƒJQ6‡F¿¯2`äø‘±ºÄ›n¸ãþ¹Ø‹|·^ÊÖëc
+¾šÈÖϺ`]Ë4OòJv‰šU N«µƒiqLË2í«ÿ
+ŒÛÏiueK×±ôƒƒæÏBŽãŒÄaÓj˜¹¶jÞLpð0s«tÃüD»—yK[ÏÇ"ß»ø+Vý,/MÓ­ ~‚é;üd'DÄñCK˜ýl~h½u Äë!ÍTò'/Ø‹PˆÇª¦•…’²j(ÙöK«´A©«ÝOÉÔ^³ïÇTìq{–«íPo‘Í#/þéºÐ湚»×,Ý…ô¦¬+#wŸ[<¹ÂùÅ!Ù±r¹
+…º#õ:ÓÊEYi(^ds›´¥«ÝÅÔOï7ÕḭD˜d™7žmôl‘‡ü€ºíÉÿ ã
+.Wçñ|¾FñZD—øw¦~TЙìkUUIw9SAèJ6î$Í«z꾅щlÍ£ü~dÃÏu1dwGÛ›VdÊJ# ‰å4i•6uµû‘™ÚËøBm¼DÁ¶Ï9„§L½Î´ç1NîC݇MyúýȺ‡ лéz~ÐÛ–±DÇÊŽ§^I§‚ö;•“~f8ö–…a4LK5eb©TÛtV]á^T¦°Žqn¨bœñ7ƒ´ºsnÔ©b‚å2^Åâêr…tÇÉÐû¼¤é“ÖÓ?±N©áv3¥†f#¥æÒè¢.lå¹x òüßµ·eYšìÕ‹Z¤uö×ÎÚyÍnð i©³xˆ¿OÛ3ùŽ>“þϯíUñ
+endobj
+2233 0 obj <<
+/Type /Page
+/Contents 2234 0 R
+/Resources 2232 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2172 0 R
>> endobj
2235 0 obj <<
-/D [2192 0 R /XYZ 56.6929 199.468 null]
+/D [2233 0 R /XYZ 56.6929 794.5015 null]
>> endobj
2236 0 obj <<
-/D [2192 0 R /XYZ 56.6929 191.7053 null]
+/D [2233 0 R /XYZ 56.6929 748.5056 null]
>> endobj
2237 0 obj <<
-/D [2192 0 R /XYZ 56.6929 176.9408 null]
+/D [2233 0 R /XYZ 56.6929 748.5056 null]
>> endobj
2238 0 obj <<
-/D [2192 0 R /XYZ 56.6929 171.7724 null]
+/D [2233 0 R /XYZ 56.6929 748.5056 null]
>> endobj
2239 0 obj <<
-/D [2192 0 R /XYZ 56.6929 157.0677 null]
+/D [2233 0 R /XYZ 56.6929 743.7078 null]
>> endobj
2240 0 obj <<
-/D [2192 0 R /XYZ 56.6929 151.8395 null]
+/D [2233 0 R /XYZ 56.6929 719.6381 null]
>> endobj
2241 0 obj <<
-/D [2192 0 R /XYZ 56.6929 137.1348 null]
+/D [2233 0 R /XYZ 56.6929 711.8197 null]
>> endobj
2242 0 obj <<
-/D [2192 0 R /XYZ 56.6929 131.9066 null]
+/D [2233 0 R /XYZ 56.6929 697.0552 null]
>> endobj
2243 0 obj <<
-/D [2192 0 R /XYZ 56.6929 117.2018 null]
+/D [2233 0 R /XYZ 56.6929 691.8868 null]
>> endobj
2244 0 obj <<
-/D [2192 0 R /XYZ 56.6929 111.9736 null]
+/D [2233 0 R /XYZ 56.6929 665.1671 null]
>> endobj
2245 0 obj <<
-/D [2192 0 R /XYZ 56.6929 97.2091 null]
+/D [2233 0 R /XYZ 56.6929 659.9987 null]
>> endobj
2246 0 obj <<
-/D [2192 0 R /XYZ 56.6929 92.0407 null]
+/D [2233 0 R /XYZ 56.6929 635.929 null]
>> endobj
-2191 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R >>
-/ProcSet [ /PDF /Text ]
+2247 0 obj <<
+/D [2233 0 R /XYZ 56.6929 628.1106 null]
>> endobj
-2249 0 obj <<
-/Length 2542
-/Filter /FlateDecode
->>
-stream
-xÚ¥Z[w£º~ϯð£½Ö˜Jqé›'Og’ÔÎô´kÎy ¶â°ŠÁœ9s~}·Ð‘<=]yH>Øß¾c<Að‡'1õI‚I”E˜N¶‡+4ÙÃÞý–2s%47¥®Ÿ¯þrG¢Iâ%¡Nž_{ÅŠc<yÞ}›.žžn–«Îæ>EÓ…7›S„ÔêÍíf6„o¾¢éõêúóêñ~½xúø/qѯˆ¢ÅÃRœl¾Þßßnžoåéúv±\=܃žýöüéêöY?¶ùjþÌÿ¹úöšìà ?]!$1|‡äá$ñ'‡«€„¨•üjsõw}Cc·½tLU”ÄýhDW>ž`ì%”ú=eÑÄ ‰OZe-6⵬J›¬,jë[ Oq.-#À#KÈpôoë»Pùmˆ‰)òâžßªe†¨pØ¡bJ½8"Ô„]–‡4+Ä{§»CVdu/_VµX+;]´çûS¶cÆÁ+ázAÆð@ü¾„øOüÿ\6pÏY¨‡ò^X%ÎpGžUÙ@œ/mÈ¡nCÊ¡p%¥UNIäP¹ ÚPúÛ¢vü¦<J©xmyË´IÅÑ]–3qtS¿"äïO‚±x[U3O9M#T€2ƒ0 }*žfØO¦’kƪ†R¹÷¸mJƒŒ„XÉ èB¨2¥ìdh)MF‚};N莌3ìq2zà£dè0æÒ?ŠÝŸ¥ÄÇÔ ãØïS²Tl¤•éw쥚ÅÓSZýÐŒ„vF"xsŠâ ŒRF””bÄG9qAŒ ±-Œ˜àgÊ¿©²†U™t×Rëº,QÒƒô˜ «ÞYUF©(ŒÃ>×’‡/iQdÅ~ÀvÏqþ1£tšýž1‹ç8x}„¾@S'ä`I
-i’|œ8Hrà €-È_k©îòuà8‹<KkV˜z`Í÷²úwGQ¶eã…±ùA0žI>¦‡,o”Ói’ÖrûîGU¶k,E
-²WÌ}’x”B]1|DXáª
-)ÒI8² ×à|
-D}`k°ùzH‹v;–<óç‘<k˜¹mP7,ÏKÍt ²}Ó|Û«"
-éÿBp7¥Œ+)ƒrì Ümp>Ķn‚sF…‹±#ø4¥ w}vÓT`j¯K‚^ñÒ•‹µ±ŸïÄQ¾¯Ì‡‹è8:4‰8Œmúp€ÂŽq~ƒqq¯–p¾óE®nÒ#ü:O‹íkþáAL ƒº”ÍM);áZÊ ÜQ;¡;ÂÏ°Ç ï?ŠÛrÇx
-ÈLíª¯ÝƒïüÂÙ)óWy~„{¹ÿý_ýò£ Šòr,4æ0[ÄV>ýˆzQx)]˜Rv>µTÇ'uNèŽÏ3ìq>{à =}gE7½S.%«‚ó©êÏrjÇtå¬Q„Gõ1þYoÓm»›x1xé„´H!]Ò£ÈÑùp RÀN ä5ƒnŒ°­Q3+ZÄpEdôºP•:¢ þ0yCA»/ÁóêÁЯ%k”"J¼8 õ÷'IQ猣o(À±&B½
-endobj
2248 0 obj <<
-/Type /Page
-/Contents 2249 0 R
-/Resources 2247 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 2114 0 R
+/D [2233 0 R /XYZ 56.6929 601.3909 null]
+>> endobj
+2249 0 obj <<
+/D [2233 0 R /XYZ 56.6929 596.2225 null]
>> endobj
2250 0 obj <<
-/D [2248 0 R /XYZ 85.0394 794.5015 null]
+/D [2233 0 R /XYZ 56.6929 569.5028 null]
>> endobj
2251 0 obj <<
-/D [2248 0 R /XYZ 85.0394 748.4854 null]
+/D [2233 0 R /XYZ 56.6929 564.3344 null]
>> endobj
2252 0 obj <<
-/D [2248 0 R /XYZ 85.0394 748.4854 null]
+/D [2233 0 R /XYZ 56.6929 549.6297 null]
>> endobj
2253 0 obj <<
-/D [2248 0 R /XYZ 85.0394 748.4854 null]
+/D [2233 0 R /XYZ 56.6929 544.4015 null]
>> endobj
2254 0 obj <<
-/D [2248 0 R /XYZ 85.0394 743.3452 null]
+/D [2233 0 R /XYZ 56.6929 529.6968 null]
>> endobj
2255 0 obj <<
-/D [2248 0 R /XYZ 85.0394 728.6405 null]
+/D [2233 0 R /XYZ 56.6929 524.4686 null]
>> endobj
2256 0 obj <<
-/D [2248 0 R /XYZ 85.0394 723.1655 null]
+/D [2233 0 R /XYZ 56.6929 500.3989 null]
>> endobj
2257 0 obj <<
-/D [2248 0 R /XYZ 85.0394 708.4607 null]
+/D [2233 0 R /XYZ 56.6929 492.5805 null]
>> endobj
2258 0 obj <<
-/D [2248 0 R /XYZ 85.0394 702.9857 null]
+/D [2233 0 R /XYZ 56.6929 467.136 null]
>> endobj
2259 0 obj <<
-/D [2248 0 R /XYZ 85.0394 688.2211 null]
+/D [2233 0 R /XYZ 56.6929 460.6924 null]
>> endobj
2260 0 obj <<
-/D [2248 0 R /XYZ 85.0394 682.8059 null]
+/D [2233 0 R /XYZ 56.6929 436.6227 null]
>> endobj
2261 0 obj <<
-/D [2248 0 R /XYZ 85.0394 668.0414 null]
+/D [2233 0 R /XYZ 56.6929 428.8043 null]
>> endobj
2262 0 obj <<
-/D [2248 0 R /XYZ 85.0394 662.6262 null]
+/D [2233 0 R /XYZ 56.6929 414.0996 null]
>> endobj
2263 0 obj <<
-/D [2248 0 R /XYZ 85.0394 599.7666 null]
+/D [2233 0 R /XYZ 56.6929 408.8714 null]
>> endobj
2264 0 obj <<
-/D [2248 0 R /XYZ 85.0394 599.7666 null]
+/D [2233 0 R /XYZ 56.6929 382.1516 null]
>> endobj
2265 0 obj <<
-/D [2248 0 R /XYZ 85.0394 599.7666 null]
+/D [2233 0 R /XYZ 56.6929 376.9833 null]
>> endobj
2266 0 obj <<
-/D [2248 0 R /XYZ 85.0394 591.7571 null]
+/D [2233 0 R /XYZ 56.6929 350.2636 null]
>> endobj
2267 0 obj <<
-/D [2248 0 R /XYZ 85.0394 565.0374 null]
+/D [2233 0 R /XYZ 56.6929 345.0952 null]
>> endobj
2268 0 obj <<
-/D [2248 0 R /XYZ 85.0394 559.6222 null]
+/D [2233 0 R /XYZ 56.6929 321.0255 null]
>> endobj
2269 0 obj <<
-/D [2248 0 R /XYZ 85.0394 534.1777 null]
+/D [2233 0 R /XYZ 56.6929 313.2071 null]
>> endobj
2270 0 obj <<
-/D [2248 0 R /XYZ 85.0394 527.4872 null]
+/D [2233 0 R /XYZ 56.6929 298.5024 null]
>> endobj
2271 0 obj <<
-/D [2248 0 R /XYZ 85.0394 502.0427 null]
+/D [2233 0 R /XYZ 56.6929 293.2742 null]
>> endobj
2272 0 obj <<
-/D [2248 0 R /XYZ 85.0394 495.3523 null]
+/D [2233 0 R /XYZ 56.6929 267.8297 null]
>> endobj
2273 0 obj <<
-/D [2248 0 R /XYZ 85.0394 420.5376 null]
+/D [2233 0 R /XYZ 56.6929 261.3861 null]
>> endobj
2274 0 obj <<
-/D [2248 0 R /XYZ 85.0394 420.5376 null]
+/D [2233 0 R /XYZ 56.6929 199.468 null]
>> endobj
2275 0 obj <<
-/D [2248 0 R /XYZ 85.0394 420.5376 null]
+/D [2233 0 R /XYZ 56.6929 199.468 null]
>> endobj
2276 0 obj <<
-/D [2248 0 R /XYZ 85.0394 412.5281 null]
+/D [2233 0 R /XYZ 56.6929 199.468 null]
>> endobj
2277 0 obj <<
-/D [2248 0 R /XYZ 85.0394 388.4584 null]
+/D [2233 0 R /XYZ 56.6929 191.7053 null]
>> endobj
2278 0 obj <<
-/D [2248 0 R /XYZ 85.0394 380.3932 null]
+/D [2233 0 R /XYZ 56.6929 176.9408 null]
>> endobj
2279 0 obj <<
-/D [2248 0 R /XYZ 85.0394 365.6884 null]
+/D [2233 0 R /XYZ 56.6929 171.7724 null]
>> endobj
2280 0 obj <<
-/D [2248 0 R /XYZ 85.0394 360.2134 null]
+/D [2233 0 R /XYZ 56.6929 157.0677 null]
>> endobj
2281 0 obj <<
-/D [2248 0 R /XYZ 85.0394 345.4488 null]
+/D [2233 0 R /XYZ 56.6929 151.8395 null]
>> endobj
2282 0 obj <<
-/D [2248 0 R /XYZ 85.0394 340.0336 null]
+/D [2233 0 R /XYZ 56.6929 137.1348 null]
>> endobj
2283 0 obj <<
-/D [2248 0 R /XYZ 85.0394 325.269 null]
+/D [2233 0 R /XYZ 56.6929 131.9066 null]
>> endobj
2284 0 obj <<
-/D [2248 0 R /XYZ 85.0394 319.8539 null]
+/D [2233 0 R /XYZ 56.6929 117.2018 null]
>> endobj
2285 0 obj <<
-/D [2248 0 R /XYZ 85.0394 295.7842 null]
+/D [2233 0 R /XYZ 56.6929 111.9736 null]
>> endobj
2286 0 obj <<
-/D [2248 0 R /XYZ 85.0394 287.7189 null]
+/D [2233 0 R /XYZ 56.6929 97.2091 null]
>> endobj
2287 0 obj <<
-/D [2248 0 R /XYZ 85.0394 272.9543 null]
->> endobj
-2288 0 obj <<
-/D [2248 0 R /XYZ 85.0394 267.5392 null]
+/D [2233 0 R /XYZ 56.6929 92.0407 null]
>> endobj
-2289 0 obj <<
-/D [2248 0 R /XYZ 85.0394 252.7746 null]
+2232 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
2290 0 obj <<
-/D [2248 0 R /XYZ 85.0394 247.3594 null]
+/Length 2542
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Z[w£º~ϯð£½Ö˜Jqé›'Og’ÔÎô´kÎy ¶â°ŠÁœ9s~}·Ð‘<=]yH>Øß¾c<Að‡'1õI‚I”E˜N¶‡+4ÙÃÞý–2s%47¥®Ÿ¯þrG¢Iâ%¡Nž_{ÅŠc<yÞ}›.žžn–«Îæ>EÓ…7›S„ÔêÍíf6„o¾¢éõêúóêñ~½xúø/qѯˆ¢ÅÃRœl¾Þßßnžoåéúv±\=܃žýöüéêöY?¶ùjþÌÿ¹úöšìà ?]!$1|‡äá$ñ'‡«€„¨•üjsõw}Cc·½tLU”ÄýhDW>ž`ì%”ú=eÑÄ ‰OZe-6⵬J›¬,jë[ Oq.-#À#KÈpôoë»Pùmˆ‰)òâžßªe†¨pØ¡bJ½8"Ô„]–‡4+Ä{§»CVdu/_VµX+;]´çûS¶cÆÁ+ázAÆð@ü¾„øOüÿ\6pÏY¨‡ò^X%ÎpGžUÙ@œ/mÈ¡nCÊ¡p%¥UNIäP¹ ÚPúÛ¢vü¦<J©xmyË´IÅÑ]–3qtS¿"äïO‚±x[U3O9M#T€2ƒ0 }*žfØO¦’kƪ†R¹÷¸mJƒŒ„XÉ èB¨2¥ìdh)MF‚};N莌3ìq2zà£dè0æÒ?ŠÝŸ¥ÄÇÔ ãØïS²Tl¤•éw쥚ÅÓSZýÐŒ„vF"xsŠâ ŒRF””bÄG9qAŒ ±-Œ˜àgÊ¿©²†U™t×Rëº,QÒƒô˜ «ÞYUF©(ŒÃ>×’‡/iQdÅ~ÀvÏqþ1£tšýž1‹ç8x}„¾@S'ä`I
+i’|œ8Hrà €-È_k©îòuà8‹<KkV˜z`Í÷²úwGQ¶eã…±ùA0žI>¦‡,o”Ói’ÖrûîGU¶k,E
+²WÌ}’x”B]1|DXáª
+)ÒI8² ×à|
+D}`k°ùzH‹v;–<óç‘<k˜¹mP7,ÏKÍt ²}Ó|Û«"
+éÿBp7¥Œ+)ƒrì Ümp>Ķn‚sF…‹±#ø4¥ w}vÓT`j¯K‚^ñÒ•‹µ±ŸïÄQ¾¯Ì‡‹è8:4‰8Œmúp€ÂŽq~ƒqq¯–p¾óE®nÒ#ü:O‹íkþáAL ƒº”ÍM);áZÊ ÜQ;¡;ÂÏ°Ç ï?ŠÛrÇx
+ÈLíª¯ÝƒïüÂÙ)óWy~„{¹ÿý_ýò£ Šòr,4æ0[ÄV>ýˆzQx)]˜Rv>µTÇ'uNèŽÏ3ìq>{à =}gE7½S.%«‚ó©êÏrjÇtå¬Q„Gõ1þYoÓm»›x1xé„´H!]Ò£ÈÑùp RÀN ä5ƒnŒ°­Q3+ZÄpEdôºP•:¢ þ0yCA»/ÁóêÁЯ%k”"J¼8 õ÷'IQ猣o(À±&B½
+endobj
+2289 0 obj <<
+/Type /Page
+/Contents 2290 0 R
+/Resources 2288 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2172 0 R
>> endobj
2291 0 obj <<
-/D [2248 0 R /XYZ 85.0394 223.2897 null]
+/D [2289 0 R /XYZ 85.0394 794.5015 null]
>> endobj
2292 0 obj <<
-/D [2248 0 R /XYZ 85.0394 215.2245 null]
+/D [2289 0 R /XYZ 85.0394 748.4854 null]
>> endobj
2293 0 obj <<
-/D [2248 0 R /XYZ 85.0394 149.4956 null]
+/D [2289 0 R /XYZ 85.0394 748.4854 null]
>> endobj
2294 0 obj <<
-/D [2248 0 R /XYZ 85.0394 149.4956 null]
+/D [2289 0 R /XYZ 85.0394 748.4854 null]
>> endobj
2295 0 obj <<
-/D [2248 0 R /XYZ 85.0394 149.4956 null]
+/D [2289 0 R /XYZ 85.0394 743.3452 null]
>> endobj
2296 0 obj <<
-/D [2248 0 R /XYZ 85.0394 144.3554 null]
+/D [2289 0 R /XYZ 85.0394 728.6405 null]
>> endobj
2297 0 obj <<
-/D [2248 0 R /XYZ 85.0394 120.2857 null]
+/D [2289 0 R /XYZ 85.0394 723.1655 null]
>> endobj
2298 0 obj <<
-/D [2248 0 R /XYZ 85.0394 112.2205 null]
+/D [2289 0 R /XYZ 85.0394 708.4607 null]
>> endobj
2299 0 obj <<
-/D [2248 0 R /XYZ 85.0394 97.4559 null]
+/D [2289 0 R /XYZ 85.0394 702.9857 null]
>> endobj
2300 0 obj <<
-/D [2248 0 R /XYZ 85.0394 92.0407 null]
+/D [2289 0 R /XYZ 85.0394 688.2211 null]
>> endobj
-2247 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R >>
-/ProcSet [ /PDF /Text ]
+2301 0 obj <<
+/D [2289 0 R /XYZ 85.0394 682.8059 null]
>> endobj
-2303 0 obj <<
-/Length 2928
-/Filter /FlateDecode
->>
-stream
-xÚ¥ZKs㸾ûWèºjÅ
-/ágP´¸hmÞŠ† —ö´z, ¾j枧Dãª;®cÝ"±ts/r/êë¾®Ö2//§¾Çœ;¹Î°Åù®i³5Q÷„#7?Ú¬lòªTÇt°;37Š£Ö…²‚)¡p®]=U6m!_³KN#¾#êK; Ò#KݸÒüŸåöe-K-å“,·²Þ¡VزQ4%Øi/`W‘{=§Ä}ï z×z†«C‹h½1Õz‡º‡Ñ³u+lð 3mÕMlšÊÄ5šŠcWÊužRç·ÍB¶Ù w}/±€Ts]ú 5Y£¨{³MÔÅ#Œ…ÂÆÇñ°¹NãÑquxbÄ›FUïñ8Ò=ˆGO÷ùóqoŠ„›$Áÿ€Á¯RuÓU‡Cr‡Ðw!žFgp°¸Fp0\ÁX<‚Øj ‡CÝÃ8غ "Ž5Ø28¨v‡ƒˆ#ç d„ùÍ´¸æÈ—e^.©3Û¶«Jñãä…’Vb=Ïs>¸4ñŸ—^³¢
-þU6M¶#šªÔ’\­£j0
-p¹ë,µ]ÌÈœve"ù˜wÒ ö]Á‚3õ‚ÍuÒŽ«ƒ4 F U½‡ôH÷ ¤=ÝÙ"Cç)srq¾ÊÿDÄT¬ËÊ6ÃjYÉVR ¡›]ë( ýç¼ÂÅnÁ"÷1‘qŠ‰0§‰FXBã^3ý²]¬·å¢i0jˆFhÄ.–/§!…K†ŸÐueR‹kRÃeA:’êFU[ê†ÔÖ}ÙÒŠ…˜¶Ìi¨´6'°Ôí¦ç•D!¯4Ü'½’Ç¡ëû1ïÇÍ{7{`Qbüï/À"|¸¦±3• Í5‹áê`‰F=mLµË¡îaXlÝ_
-*Ñ"§¬Z­ºêoƒP¡™Ki^Ü<0À‚R}…cn<ù›,Жb"UÿYUÛBS•Vl<gôýc[Ñ+0ª¬´4×$_ÒXja/hõm|¡»- 8fÍŸ¦Õz:„ÏF–¹’Ιó¼£/Y4y“2_«ªdÛ±hæ½Bç›çùhs uÕráK(VKbmùhˆ+ù¦…HúùKÖÀò¨§¬¾MþƒëªlWz.Ø»Yâû*‡+çÀFõŠ{ÅÐYdÖ«vwdØV{zàYO!¹®'¤zÒhƒ;
-B…{aª / ;ÏÕVÇ
-õkD'. ~ØÉõ\°«H_G^²ýèä›»y.‹#<›Ø\ÇÙ„sæ›Ø Sé„ŸN$£Z÷‰äHí`"éi¥DÂíW,´Ê^tÙ'Vȇ9r[ФY÷®?$]Y8yúª ô¿ä[œÈ}(97»:_®Tv™ð(† ø1þÖÂô-"¥%
-اÅ÷ñ`èv
-`+•Z1†^ž@¼lÐÛeg˜sŠ÷Ó¬[M”›M‘ÓëY3gÖU^
-â§.|Rƒ¶Im 3ìê\ñ–/²ƒI/UQTïT`7“­.›ŸO@6á™Ë±Í¥"QÏ‘#÷ÒÐ’¥=9:T<{ãJ Ó±ÒžÓÄÜ ð׋žÒ'uIâ”Ù»:_h¦t4  ñ‹âh‘£e=A]-¶…ªÙ‚H{"’ÍWÒgÁNe)hXXQ̺€–…–Qj‘è˜/2Õ+.«Jº>
-® ,¸è«ª íEšN¡hKÂsÚZ–LµYÃÈ{Þ®¨%éƒÞš§ÛBÖÔo²úm_á óAÖ¢û9Ø(ããûÃ÷VSì¡Á ø9-]@ v´tŸa€¢Á†ÂbC=¹x“¯Á§D°ØLÀ'sŬ(žCW$¢Ae™/¤y}æÝσ€ug¹ÄÚ7JÙÁà„ð“ÿìW¦*œªÕ/õÍ®LWkYm›ƒ»­¹ÙÉ+mœ¸p¼gž -¦Óh˜Î9à˜ÆÎÿ5ºŸ­QyŸz5Яnçä^Š€W´Rå# >f-„·7ÌQØ¥‡ý ýBgQιƒÿ9ÁÕ¥¥¡¾w!Ej™–wa#»š ëÆÌjÁ_+Ê jUq²7â7ZHZ•/4‚Þh3"Ñf€Ä}–Þ6ë…ú}ÎW¹¤Ùd)ýÐD, {ËmmNæ@´zÄC"-|¿¤–zꢗ0Ê{¡d#ÓW¸î_ šì0À)¦u¾Ù¿v‡{–²Ñ['1´>å p½|§{ÂÎEàâ¿à ë.ÿ÷úXo@‘+âøÄO'^¸094‹Ru¥-ÝüOÐñÚÿ Ôy Lendstream
-endobj
2302 0 obj <<
-/Type /Page
-/Contents 2303 0 R
-/Resources 2301 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/Parent 2336 0 R
+/D [2289 0 R /XYZ 85.0394 668.0414 null]
+>> endobj
+2303 0 obj <<
+/D [2289 0 R /XYZ 85.0394 662.6262 null]
>> endobj
2304 0 obj <<
-/D [2302 0 R /XYZ 56.6929 794.5015 null]
+/D [2289 0 R /XYZ 85.0394 599.7666 null]
>> endobj
2305 0 obj <<
-/D [2302 0 R /XYZ 56.6929 749.0089 null]
+/D [2289 0 R /XYZ 85.0394 599.7666 null]
>> endobj
2306 0 obj <<
-/D [2302 0 R /XYZ 56.6929 749.0089 null]
+/D [2289 0 R /XYZ 85.0394 599.7666 null]
>> endobj
2307 0 obj <<
-/D [2302 0 R /XYZ 56.6929 749.0089 null]
+/D [2289 0 R /XYZ 85.0394 591.7571 null]
>> endobj
2308 0 obj <<
-/D [2302 0 R /XYZ 56.6929 745.2843 null]
+/D [2289 0 R /XYZ 85.0394 565.0374 null]
>> endobj
2309 0 obj <<
-/D [2302 0 R /XYZ 56.6929 721.2146 null]
+/D [2289 0 R /XYZ 85.0394 559.6222 null]
>> endobj
2310 0 obj <<
-/D [2302 0 R /XYZ 56.6929 714.4694 null]
+/D [2289 0 R /XYZ 85.0394 534.1777 null]
>> endobj
2311 0 obj <<
-/D [2302 0 R /XYZ 56.6929 699.7048 null]
+/D [2289 0 R /XYZ 85.0394 527.4872 null]
>> endobj
2312 0 obj <<
-/D [2302 0 R /XYZ 56.6929 695.6096 null]
+/D [2289 0 R /XYZ 85.0394 502.0427 null]
>> endobj
2313 0 obj <<
-/D [2302 0 R /XYZ 56.6929 680.9049 null]
+/D [2289 0 R /XYZ 85.0394 495.3523 null]
>> endobj
2314 0 obj <<
-/D [2302 0 R /XYZ 56.6929 676.7499 null]
+/D [2289 0 R /XYZ 85.0394 420.5376 null]
>> endobj
2315 0 obj <<
-/D [2302 0 R /XYZ 56.6929 652.6802 null]
+/D [2289 0 R /XYZ 85.0394 420.5376 null]
>> endobj
2316 0 obj <<
-/D [2302 0 R /XYZ 56.6929 645.935 null]
+/D [2289 0 R /XYZ 85.0394 420.5376 null]
>> endobj
2317 0 obj <<
-/D [2302 0 R /XYZ 56.6929 631.2303 null]
+/D [2289 0 R /XYZ 85.0394 412.5281 null]
>> endobj
2318 0 obj <<
-/D [2302 0 R /XYZ 56.6929 627.0752 null]
+/D [2289 0 R /XYZ 85.0394 388.4584 null]
>> endobj
2319 0 obj <<
-/D [2302 0 R /XYZ 56.6929 603.0055 null]
+/D [2289 0 R /XYZ 85.0394 380.3932 null]
>> endobj
2320 0 obj <<
-/D [2302 0 R /XYZ 56.6929 596.2603 null]
+/D [2289 0 R /XYZ 85.0394 365.6884 null]
>> endobj
2321 0 obj <<
-/D [2302 0 R /XYZ 56.6929 572.1906 null]
+/D [2289 0 R /XYZ 85.0394 360.2134 null]
>> endobj
2322 0 obj <<
-/D [2302 0 R /XYZ 56.6929 565.4454 null]
+/D [2289 0 R /XYZ 85.0394 345.4488 null]
>> endobj
2323 0 obj <<
-/D [2302 0 R /XYZ 56.6929 550.7407 null]
+/D [2289 0 R /XYZ 85.0394 340.0336 null]
>> endobj
2324 0 obj <<
-/D [2302 0 R /XYZ 56.6929 546.5857 null]
+/D [2289 0 R /XYZ 85.0394 325.269 null]
>> endobj
2325 0 obj <<
-/D [2302 0 R /XYZ 56.6929 531.8211 null]
+/D [2289 0 R /XYZ 85.0394 319.8539 null]
>> endobj
2326 0 obj <<
-/D [2302 0 R /XYZ 56.6929 527.7259 null]
+/D [2289 0 R /XYZ 85.0394 295.7842 null]
>> endobj
2327 0 obj <<
-/D [2302 0 R /XYZ 56.6929 501.0062 null]
+/D [2289 0 R /XYZ 85.0394 287.7189 null]
>> endobj
2328 0 obj <<
-/D [2302 0 R /XYZ 56.6929 496.911 null]
->> endobj
-778 0 obj <<
-/D [2302 0 R /XYZ 56.6929 464.7873 null]
+/D [2289 0 R /XYZ 85.0394 272.9543 null]
>> endobj
2329 0 obj <<
-/D [2302 0 R /XYZ 56.6929 439.0859 null]
->> endobj
-782 0 obj <<
-/D [2302 0 R /XYZ 56.6929 352.4521 null]
+/D [2289 0 R /XYZ 85.0394 267.5392 null]
>> endobj
2330 0 obj <<
-/D [2302 0 R /XYZ 56.6929 326.7507 null]
+/D [2289 0 R /XYZ 85.0394 252.7746 null]
>> endobj
2331 0 obj <<
-/D [2302 0 R /XYZ 56.6929 290.6891 null]
+/D [2289 0 R /XYZ 85.0394 247.3594 null]
>> endobj
2332 0 obj <<
-/D [2302 0 R /XYZ 56.6929 290.6891 null]
+/D [2289 0 R /XYZ 85.0394 223.2897 null]
>> endobj
2333 0 obj <<
-/D [2302 0 R /XYZ 56.6929 290.6891 null]
+/D [2289 0 R /XYZ 85.0394 215.2245 null]
>> endobj
2334 0 obj <<
-/D [2302 0 R /XYZ 56.6929 290.6891 null]
+/D [2289 0 R /XYZ 85.0394 149.4956 null]
+>> endobj
+2335 0 obj <<
+/D [2289 0 R /XYZ 85.0394 149.4956 null]
+>> endobj
+2336 0 obj <<
+/D [2289 0 R /XYZ 85.0394 149.4956 null]
+>> endobj
+2337 0 obj <<
+/D [2289 0 R /XYZ 85.0394 144.3554 null]
+>> endobj
+2338 0 obj <<
+/D [2289 0 R /XYZ 85.0394 120.2857 null]
+>> endobj
+2339 0 obj <<
+/D [2289 0 R /XYZ 85.0394 112.2205 null]
+>> endobj
+2340 0 obj <<
+/D [2289 0 R /XYZ 85.0394 97.4559 null]
+>> endobj
+2341 0 obj <<
+/D [2289 0 R /XYZ 85.0394 92.0407 null]
+>> endobj
+2288 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2344 0 obj <<
+/Length 2928
+/Filter /FlateDecode
+>>
+stream
+xÚ¥ZKs㸾ûWèºjÅ
+/ágP´¸hmÞŠ† —ö´z, ¾j枧Dãª;®cÝ"±ts/r/êë¾®Ö2//§¾Çœ;¹Î°Åù®i³5Q÷„#7?Ú¬lòªTÇt°;37Š£Ö…²‚)¡p®]=U6m!_³KN#¾#êK; Ò#KݸÒüŸåöe-K-å“,·²Þ¡VزQ4%Øi/`W‘{=§Ä}ï z×z†«C‹h½1Õz‡º‡Ñ³u+lð 3mÕMlšÊÄ5šŠcWÊužRç·ÍB¶Ù w}/±€Ts]ú 5Y£¨{³MÔÅ#Œ…ÂÆÇñ°¹NãÑquxbÄ›FUïñ8Ò=ˆGO÷ùóqoŠ„›$Áÿ€Á¯RuÓU‡Cr‡Ðw!žFgp°¸Fp0\ÁX<‚Øj ‡CÝÃ8غ "Ž5Ø28¨v‡ƒˆ#ç d„ùÍ´¸æÈ—e^.©3Û¶«Jñãä…’Vb=Ïs>¸4ñŸ—^³¢
+þU6M¶#šªÔ’\­£j0
+p¹ë,µ]ÌÈœve"ù˜wÒ ö]Á‚3õ‚ÍuÒŽ«ƒ4 F U½‡ôH÷ ¤=ÝÙ"Cç)srq¾ÊÿDÄT¬ËÊ6ÃjYÉVR ¡›]ë( ýç¼ÂÅnÁ"÷1‘qŠ‰0§‰FXBã^3ý²]¬·å¢i0jˆFhÄ.–/§!…K†ŸÐueR‹kRÃeA:’êFU[ê†ÔÖ}ÙÒŠ…˜¶Ìi¨´6'°Ôí¦ç•D!¯4Ü'½’Ç¡ëû1ïÇÍ{7{`Qbüï/À"|¸¦±3• Í5‹áê`‰F=mLµË¡îaXlÝ_
+*Ñ"§¬Z­ºêoƒP¡™Ki^Ü<0À‚R}…cn<ù›,Жb"UÿYUÛBS•Vl<gôýc[Ñ+0ª¬´4×$_ÒXja/hõm|¡»- 8fÍŸ¦Õz:„ÏF–¹’Ιó¼£/Y4y“2_«ªdÛ±hæ½Bç›çùhs uÕráK(VKbmùhˆ+ù¦…HúùKÖÀò¨§¬¾MþƒëªlWz.Ø»Yâû*‡+çÀFõŠ{ÅÐYdÖ«vwdØV{zàYO!¹®'¤zÒhƒ;
+B…{aª / ;ÏÕVÇ
+õkD'. ~ØÉõ\°«H_G^²ýèä›»y.‹#<›Ø\ÇÙ„sæ›Ø Sé„ŸN$£Z÷‰äHí`"éi¥DÂíW,´Ê^tÙ'Vȇ9r[ФY÷®?$]Y8yúª ô¿ä[œÈ}(97»:_®Tv™ð(† ø1þÖÂô-"¥%
+اÅ÷ñ`èv
+`+•Z1†^ž@¼lÐÛeg˜sŠ÷Ó¬[M”›M‘ÓëY3gÖU^
+â§.|Rƒ¶Im 3ìê\ñ–/²ƒI/UQTïT`7“­.›ŸO@6á™Ë±Í¥"QÏ‘#÷ÒÐ’¥=9:T<{ãJ Ó±ÒžÓÄÜ ð׋žÒ'uIâ”Ù»:_h¦t4  ñ‹âh‘£e=A]-¶…ªÙ‚H{"’ÍWÒgÁNe)hXXQ̺€–…–Qj‘è˜/2Õ+.«Jº>
+® ,¸è«ª íEšN¡hKÂsÚZ–LµYÃÈ{Þ®¨%éƒÞš§ÛBÖÔo²úm_á óAÖ¢û9Ø(ããûÃ÷VSì¡Á ø9-]@ v´tŸa€¢Á†ÂbC=¹x“¯Á§D°ØLÀ'sŬ(žCW$¢Ae™/¤y}æÝσ€ug¹ÄÚ7JÙÁà„ð“ÿìW¦*œªÕ/õÍ®LWkYm›ƒ»­¹ÙÉ+mœ¸p¼gž -¦Óh˜Î9à˜ÆÎÿ5ºŸ­QyŸz5Яnçä^Š€W´Rå# >f-„·7ÌQØ¥‡ý ýBgQιƒÿ9ÁÕ¥¥¡¾w!Ej™–wa#»š ëÆÌjÁ_+Ê jUq²7â7ZHZ•/4‚Þh3"Ñf€Ä}–Þ6ë…ú}ÎW¹¤Ùd)ýÐD, {ËmmNæ@´zÄC"-|¿¤–zꢗ0Ê{¡d#ÓW¸î_ šì0À)¦u¾Ù¿v‡{–²Ñ['1´>å p½|§{ÂÎEàâ¿à ë.ÿ÷úXo@‘+âøÄO'^¸094‹Ru¥`GK7ÿt¼öÿÓž Gendstream
+endobj
+2343 0 obj <<
+/Type /Page
+/Contents 2344 0 R
+/Resources 2342 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2172 0 R
+>> endobj
+2345 0 obj <<
+/D [2343 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+2346 0 obj <<
+/D [2343 0 R /XYZ 56.6929 749.0089 null]
+>> endobj
+2347 0 obj <<
+/D [2343 0 R /XYZ 56.6929 749.0089 null]
+>> endobj
+2348 0 obj <<
+/D [2343 0 R /XYZ 56.6929 749.0089 null]
+>> endobj
+2349 0 obj <<
+/D [2343 0 R /XYZ 56.6929 745.2843 null]
+>> endobj
+2350 0 obj <<
+/D [2343 0 R /XYZ 56.6929 721.2146 null]
+>> endobj
+2351 0 obj <<
+/D [2343 0 R /XYZ 56.6929 714.4694 null]
+>> endobj
+2352 0 obj <<
+/D [2343 0 R /XYZ 56.6929 699.7048 null]
+>> endobj
+2353 0 obj <<
+/D [2343 0 R /XYZ 56.6929 695.6096 null]
+>> endobj
+2354 0 obj <<
+/D [2343 0 R /XYZ 56.6929 680.9049 null]
+>> endobj
+2355 0 obj <<
+/D [2343 0 R /XYZ 56.6929 676.7499 null]
+>> endobj
+2356 0 obj <<
+/D [2343 0 R /XYZ 56.6929 652.6802 null]
+>> endobj
+2357 0 obj <<
+/D [2343 0 R /XYZ 56.6929 645.935 null]
+>> endobj
+2358 0 obj <<
+/D [2343 0 R /XYZ 56.6929 631.2303 null]
+>> endobj
+2359 0 obj <<
+/D [2343 0 R /XYZ 56.6929 627.0752 null]
+>> endobj
+2360 0 obj <<
+/D [2343 0 R /XYZ 56.6929 603.0055 null]
+>> endobj
+2361 0 obj <<
+/D [2343 0 R /XYZ 56.6929 596.2603 null]
+>> endobj
+2362 0 obj <<
+/D [2343 0 R /XYZ 56.6929 572.1906 null]
+>> endobj
+2363 0 obj <<
+/D [2343 0 R /XYZ 56.6929 565.4454 null]
+>> endobj
+2364 0 obj <<
+/D [2343 0 R /XYZ 56.6929 550.7407 null]
+>> endobj
+2365 0 obj <<
+/D [2343 0 R /XYZ 56.6929 546.5857 null]
+>> endobj
+2366 0 obj <<
+/D [2343 0 R /XYZ 56.6929 531.8211 null]
+>> endobj
+2367 0 obj <<
+/D [2343 0 R /XYZ 56.6929 527.7259 null]
+>> endobj
+2368 0 obj <<
+/D [2343 0 R /XYZ 56.6929 501.0062 null]
+>> endobj
+2369 0 obj <<
+/D [2343 0 R /XYZ 56.6929 496.911 null]
+>> endobj
+778 0 obj <<
+/D [2343 0 R /XYZ 56.6929 464.7873 null]
+>> endobj
+2370 0 obj <<
+/D [2343 0 R /XYZ 56.6929 439.0859 null]
+>> endobj
+782 0 obj <<
+/D [2343 0 R /XYZ 56.6929 352.4521 null]
+>> endobj
+2371 0 obj <<
+/D [2343 0 R /XYZ 56.6929 326.7507 null]
+>> endobj
+2372 0 obj <<
+/D [2343 0 R /XYZ 56.6929 290.6891 null]
+>> endobj
+2373 0 obj <<
+/D [2343 0 R /XYZ 56.6929 290.6891 null]
+>> endobj
+2374 0 obj <<
+/D [2343 0 R /XYZ 56.6929 290.6891 null]
+>> endobj
+2375 0 obj <<
+/D [2343 0 R /XYZ 56.6929 290.6891 null]
>> endobj
786 0 obj <<
-/D [2302 0 R /XYZ 56.6929 241.4457 null]
+/D [2343 0 R /XYZ 56.6929 241.4457 null]
>> endobj
-2335 0 obj <<
-/D [2302 0 R /XYZ 56.6929 201.7704 null]
+2376 0 obj <<
+/D [2343 0 R /XYZ 56.6929 201.7704 null]
>> endobj
-2301 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R /F14 964 0 R >>
+2342 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R /F14 976 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2339 0 obj <<
+2379 0 obj <<
/Length 2293
/Filter /FlateDecode
>>
@@ -10994,48 +11223,47 @@ bsب–
²y<ChR µJH%âWÇ«jØb€;WP§ªbu8›ZÎURC—iÑÁ„&L^š
P#¢ &6æ0wV}-±b]íO«–í%9µ2¶žTû¾Ò“žAäíEÑѣ̀~ãÊ»Ì^¹¾'åe ±)ìúŸ`ÖnqaSx¿áÄ«¶´¥$ÓÕå„á#áQàY1Ó½|Os‘ï¤Íw¿”Æ
惒ÊáNšë¥jÚZÓ‡„—8@Ääܘêån zs€{Uêq€»;9Àˆýp2ßh0á–ÂCP˜XÃg‰±ˆ€âLî€×Û Èwƒã´‚ðYÝ26iàÞ.‘ØO|)Úˆ8ñKD˜‰••@Åt"'%M_ñX¨Ù«9÷}WúL¾qŸ#ªWzû>_“:ºÏs±Ó÷9K^"áÐtÀ¼¿TF¹ ‘Ë¥é:$ã˜b¯¦m‹ì›ýpG'ßNìWšèäúÍÖ’žm/zèᢋÛYìÜå´dF+ö‰™Ú¡¾™ 8¢oX/dîpŠ³:áØ8Ò WÐBi:–Ž™ .Ó>÷7ŠCßfœÈ²‰œ#„‰¸§Ú¯ua‡H;B£x“kéƒÞqàõÁûxÁÏD‚…¶êÚ³IÙªJ¹’Ì Exêìc…±dÐż³@©ß•%±3Hqøñ….oÔ~½9»åη¨ks“ÓÛ;‚W%0þ5=ÿ}Ï ÷Âòÿ?]¾}¾‘Ž_§œòÕVx*åW1ùQž %ìoÿ{☻dèŠ(ò¦sˆ€\Sï…
-qï"qù
-uä…gÿ/JD»æendstream
+qÁÏî (Ô‘Nœý¿Ii»áendstream
endobj
-2338 0 obj <<
+2378 0 obj <<
/Type /Page
-/Contents 2339 0 R
-/Resources 2337 0 R
+/Contents 2379 0 R
+/Resources 2377 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2336 0 R
+/Parent 2172 0 R
>> endobj
-2340 0 obj <<
-/D [2338 0 R /XYZ 85.0394 794.5015 null]
+2380 0 obj <<
+/D [2378 0 R /XYZ 85.0394 794.5015 null]
>> endobj
790 0 obj <<
-/D [2338 0 R /XYZ 85.0394 662.3711 null]
+/D [2378 0 R /XYZ 85.0394 662.3711 null]
>> endobj
-2341 0 obj <<
-/D [2338 0 R /XYZ 85.0394 634.4781 null]
+2381 0 obj <<
+/D [2378 0 R /XYZ 85.0394 634.4781 null]
>> endobj
794 0 obj <<
-/D [2338 0 R /XYZ 85.0394 566.8617 null]
+/D [2378 0 R /XYZ 85.0394 566.8617 null]
>> endobj
-2342 0 obj <<
-/D [2338 0 R /XYZ 85.0394 536.3186 null]
+2382 0 obj <<
+/D [2378 0 R /XYZ 85.0394 536.3186 null]
>> endobj
798 0 obj <<
-/D [2338 0 R /XYZ 85.0394 411.7882 null]
+/D [2378 0 R /XYZ 85.0394 411.7882 null]
>> endobj
-2343 0 obj <<
-/D [2338 0 R /XYZ 85.0394 386.7645 null]
+2383 0 obj <<
+/D [2378 0 R /XYZ 85.0394 386.7645 null]
>> endobj
802 0 obj <<
-/D [2338 0 R /XYZ 85.0394 230.2565 null]
+/D [2378 0 R /XYZ 85.0394 230.2565 null]
>> endobj
-2344 0 obj <<
-/D [2338 0 R /XYZ 85.0394 203.9874 null]
+2384 0 obj <<
+/D [2378 0 R /XYZ 85.0394 203.9874 null]
>> endobj
-2337 0 obj <<
-/Font << /F37 1026 0 R /F14 964 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R >>
+2377 0 obj <<
+/Font << /F37 1038 0 R /F14 976 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2347 0 obj <<
+2387 0 obj <<
/Length 2527
/Filter /FlateDecode
>>
@@ -11052,49 +11280,49 @@ A! zBΪª zÊaÄwIl3H’ ²R7IK#«pˆ1‚¾‡JʤM.“]²È‹¼=Ð<QÊF,\zÔya`,öºu1ƒâA
ävXíÐð0Išõ›  ±ÕFM-‡ÇJ ðk¿ãètw«é¬÷˜Øšwg=§
H¨ã
-e0ì>Ùr${ÑÁãÍðÍtÜŠzéÙüDñùîÏ¡9rP#nßÔ“±ÏOè(µ”GµMo£g~ÿÑèþ¾–Ž¥4úøôyyyI´î KyÅK¶˜¦C7c§±¯ë)ÆãØ£‘8hyøíÎ,|¦ïO ðOcŸõ;²2ˆm–h CnÚwš‡i3ÁE HèówUfÿ4ûðU‚ð`¡É×%Ý(í6O!•î‰%[VÏ¥!Ø£Ò``Û.X»+ÛÚÐÝUù‡ž×]DÎïa38îÈË­-Õ6oé+ª&i6‰ ‰yÊÄ_ì E\áê⃣òþR5âѼ«ÃÿïÄŽ/—T•Ñ¥^A†Ð±Ä06B¡„ŒÎ#©ùéì\öÿ=k-¢endstream
+e0ì>Ùr${ÑÁãÍðÍtÜŠzéÙüDñùîÏ¡9rP#nßÔ“±ÏOè(µ”GµMo£g~ÿÑèþ¾–Ž¥4úøôyyyI´î KyÅK¶˜¦C7c§±¯ë)ÆãØ£‘8hyøíÎ,|¦ïO ðOcŸõ;²2ˆm–h CnÚwš‡i3ÁE HèówUfÿ4ûðU‚ð`¡É×%Ý(í6O!•î‰%[VÏ¥!Ø£Ò``Û.X»+ÛÚÐÝUù‡ž×]DÎïa38îÈË­-Õ6oé+ª&i6‰ ‰yÊÄ_ì E\áê⃣òþR5âѼ«ÃÿïÄŽ/—T•Ñ¥^A†Ð±Ä06B¡„’ç‘Ôütv.û<-endstream
endobj
-2346 0 obj <<
+2386 0 obj <<
/Type /Page
-/Contents 2347 0 R
-/Resources 2345 0 R
+/Contents 2387 0 R
+/Resources 2385 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2336 0 R
-/Annots [ 2350 0 R ]
+/Parent 2393 0 R
+/Annots [ 2390 0 R ]
>> endobj
-2350 0 obj <<
+2390 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
/Rect [344.9397 501.3201 406.1397 512.7122]
/Subtype /Link
/A << /S /GoTo /D (trusted-keys) >>
>> endobj
-2348 0 obj <<
-/D [2346 0 R /XYZ 56.6929 794.5015 null]
+2388 0 obj <<
+/D [2386 0 R /XYZ 56.6929 794.5015 null]
>> endobj
806 0 obj <<
-/D [2346 0 R /XYZ 56.6929 609.3932 null]
+/D [2386 0 R /XYZ 56.6929 609.3932 null]
>> endobj
-2349 0 obj <<
-/D [2346 0 R /XYZ 56.6929 583.208 null]
+2389 0 obj <<
+/D [2386 0 R /XYZ 56.6929 583.208 null]
>> endobj
810 0 obj <<
-/D [2346 0 R /XYZ 56.6929 484.1849 null]
+/D [2386 0 R /XYZ 56.6929 484.1849 null]
>> endobj
-2351 0 obj <<
-/D [2346 0 R /XYZ 56.6929 454.463 null]
+2391 0 obj <<
+/D [2386 0 R /XYZ 56.6929 454.463 null]
>> endobj
814 0 obj <<
-/D [2346 0 R /XYZ 56.6929 405.4622 null]
+/D [2386 0 R /XYZ 56.6929 405.4622 null]
>> endobj
-2352 0 obj <<
-/D [2346 0 R /XYZ 56.6929 378.8348 null]
+2392 0 obj <<
+/D [2386 0 R /XYZ 56.6929 378.8348 null]
>> endobj
-2345 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F14 964 0 R /F22 961 0 R /F21 938 0 R >>
+2385 0 obj <<
+/Font << /F37 1038 0 R /F41 1233 0 R /F14 976 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2355 0 obj <<
+2396 0 obj <<
/Length 2458
/Filter /FlateDecode
>>
@@ -11103,42 +11331,42 @@ xÚÍZ[oÛ:~ϯðÛq€c–w‰yKÛì"»9Ù&vÑöA±åD¨,¹’œË¿ß!‡TD[¶Hv±(ZÓähøif8ó k6¡ð‡MRE¨0r’
‡P¡‹¾¶Ù}ÈœC¡‰¿…d:žÁ8gD =QüL¾=}³Â‘RU˜Œé· é˧‰{‡ƒ/_vpJ©Ìû
7‚$B¦òîe{ÈEµÞì&!ç“wÛ+< VHM4$ì¬QWŠ¹o%š‡€2NâÏuWÔUÈ­.Œ-¹vι߬ ¿¶gû¬Œ¤F¡¦C©ý ¶—RÓ=…˜[ú,U´ÿÛ*qÐx,ãˆ{„v_){ Ãåa3õR#[Gõ@ H IŠ·¶9Kj(ÅGqý• f=XðNïÔ_©0ÁL s¡þÂðµþÚ úúë´õ(ŸqY`è¹tÁÄBò$‰aUûÐnÖëºéòE8g¡ª>0\²Á™Ùèuy|OŒÊÔ@3æpŒ¥öÇh/åbtoºbÔÀù‚`j}[|G€2Æ ‰Ž‘ÚŒµƒQpB5OÛ§—Ù7&+ ¡R²xß×ndÈHÀ^8aQ3DoËÜmÏyòe¶)½ÙC$ôõ{ù ¤<Hçé±PH… e_t´0Fm®ÐѶoì¼Æ#m_¡ êÆ _KAœKbh*§—Ù9ŽNÒÔ¤ñΞ5z"6pø6‰mãà.j§Zø˜È³Ð”EåÅæPÆ`‹­¶£§¬Õ}¹‡;{Ͼ-uÌTFl,ŽË p ÅÜûôôDMë³[=; ¨ò.@UKžŸŸƒš1ž.4I5³'P‘$õi‰ºˆ‰z“ùi»ýT½¿üꚬj³¹MÞte¹ô8%¿td6í/œ9îÃ|Ÿá†è¾~¥¿/ÀlÎC±I$v ,°>]7E…þcá\³àý5x7G±§¢{ÀµUQ«¬Ä/kdÐs(9àlçTÕ#^Ôy[ýæ¿À«{ˆã|ÜòuŽ­v7ðm„]3s£§E‡ËmW¯[zÂÏ·
¤px—í¾¾ã bzéQ×Nñˆk¡!µíïÛŒbÓeÑùbq¥‘Gåþ`…¸Þ=·,M‰N(
-É)´ ½ n»v—?dEÈ€Ò‰£~v›.û™±)8±sY©F)á ¨
+É)´ ½ n»v—?dEÈ€Ò‰£~v›.û™±)8±sY©F)á ¨
endobj
-2354 0 obj <<
+2395 0 obj <<
/Type /Page
-/Contents 2355 0 R
-/Resources 2353 0 R
+/Contents 2396 0 R
+/Resources 2394 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2336 0 R
+/Parent 2393 0 R
>> endobj
-2356 0 obj <<
-/D [2354 0 R /XYZ 85.0394 794.5015 null]
+2397 0 obj <<
+/D [2395 0 R /XYZ 85.0394 794.5015 null]
>> endobj
818 0 obj <<
-/D [2354 0 R /XYZ 85.0394 650.8348 null]
+/D [2395 0 R /XYZ 85.0394 650.8348 null]
>> endobj
-2357 0 obj <<
-/D [2354 0 R /XYZ 85.0394 625.7398 null]
+2398 0 obj <<
+/D [2395 0 R /XYZ 85.0394 625.7398 null]
>> endobj
822 0 obj <<
-/D [2354 0 R /XYZ 85.0394 378.0874 null]
+/D [2395 0 R /XYZ 85.0394 378.0874 null]
>> endobj
-2358 0 obj <<
-/D [2354 0 R /XYZ 85.0394 350.2627 null]
+2399 0 obj <<
+/D [2395 0 R /XYZ 85.0394 350.2627 null]
>> endobj
826 0 obj <<
-/D [2354 0 R /XYZ 85.0394 153.7325 null]
+/D [2395 0 R /XYZ 85.0394 153.7325 null]
>> endobj
-2359 0 obj <<
-/D [2354 0 R /XYZ 85.0394 128.6375 null]
+2400 0 obj <<
+/D [2395 0 R /XYZ 85.0394 128.6375 null]
>> endobj
-2353 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R >>
+2394 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2362 0 obj <<
-/Length 2394
+2403 0 obj <<
+/Length 2393
/Filter /FlateDecode
>>
stream
@@ -11148,30 +11376,30 @@ xÚÅY_sÛ8ϧðtîAž]sùWsOé5·“Ý6—xgî¦ÛÅV]m˵”¦î§?€ eÊ–Îv(Aø€ÅˆÃ12)K­´
=GƒjÁ‘žÓ`§y½„´ÏŸV‡;äf‘9}¢Øƒ"Ÿ26Ç ¨rÅR®ÒÓŒ¹Ž°ãBåW`’CØ+¹W€‰o(À΀3+2qz×À.úg`XŽÖÛÆ-Þ(AÐn×{‡»r½.7…OQ0£¸¬¨Äå#˜ÅUŒÄMø­vs˧ !V£ îhL(£˜0ù ÙdÌuâH—;Ò¥o?ÕàPÀʜԤãP¥Ÿj(ØSÓ×¥;%C“¨‘'Õô¼ó3¤÷K È.<Óv]ÍŠ½”_
j[á ëÉϾh’Y²¨¡ò«?ú—ê£çE›Ì€ÈWL+¸½zØ;þF6¼¹ÙùÒÍ› ¬¦øç…°c­GÈ\™Jõ7ÝÁZÀ-l¾…¡pqÇeÑwdùaøbïBïš¹Òõì²^ u»¿Ám¤2ðAiS&”²Î"o£FŒIáÎuU3J xõ«À¶m*“Ë}Ë€LžÉlW ìÖ:_} @S,ìS4v{ÝÙÀ~ºZÊÑ›v4Š6ObÉnSi쥬Ÿq@ß÷q-6ž»¼³Á¶š•c¸½±½&²¤ô¸€,ØÁg½¡ºdâéKüÒÁ
ÔGÏ^¬×›zí¿éú¨ ™"ù<–&qp‰¬¡që?ÖÉW4`Vö·!ŒîÇÊé@5Nßfy
-—„oÍ98ŒÍ již–î•.¡UÔèj”ëй^ÖQ›ENj¾×¡ËÚB-3s½h˜£üG®ù…ßQ‹GC.ý9òÃtRr.Îçwùù9”ªúG ½ÿ«dZgNÂ_
+—„oÍ98ŒÍ již–î•.¡UÔèj”ëй^ÖQ›ENj¾×¡ËÚB-3s½h˜£üG®ù…ßQ‹GC.ý9òÃtRr.Îçwùù9”ªúG ½ÿ«dZgNÂ_
endobj
-2361 0 obj <<
+2402 0 obj <<
/Type /Page
-/Contents 2362 0 R
-/Resources 2360 0 R
+/Contents 2403 0 R
+/Resources 2401 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2336 0 R
+/Parent 2393 0 R
>> endobj
-2363 0 obj <<
-/D [2361 0 R /XYZ 56.6929 794.5015 null]
+2404 0 obj <<
+/D [2402 0 R /XYZ 56.6929 794.5015 null]
>> endobj
830 0 obj <<
-/D [2361 0 R /XYZ 56.6929 740.3318 null]
+/D [2402 0 R /XYZ 56.6929 740.3318 null]
>> endobj
-2364 0 obj <<
-/D [2361 0 R /XYZ 56.6929 714.7319 null]
+2405 0 obj <<
+/D [2402 0 R /XYZ 56.6929 714.7319 null]
>> endobj
-2360 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F14 964 0 R /F62 1361 0 R /F41 1218 0 R >>
-/XObject << /Im2 1350 0 R >>
+2401 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F14 976 0 R /F62 1379 0 R /F41 1233 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2367 0 obj <<
+2408 0 obj <<
/Length 1890
/Filter /FlateDecode
>>
@@ -11181,2024 +11409,2209 @@ xÚ­ÉnÛ8ôî¯ðQj–›¶™SÚ¦ƒE›IR`i²DÇBµ¸’'óõóÈGÊ’­$t’ƒžÉÇ·o$›SøgóÈ'TÄrÆ’ø”ùó´œÑ
Ÿ8k…“,C#µ­Ó-¯¶»îXnÁ Êþ?¹{Š¯È-xL"Åc¹¿SÊ ug|ù*IƾóedP¾nµ›Û“*M õ¡Ø:Xh<Ý},Îr€„’±‰’ê4Óev̪²”òe~ç”ßÐqL$÷ÇüšEäíª£¢ç*ðwÎe¦V»{ àRYgŠ` îónãä®H›!|ÿûÜu‡lWnRP¿žŽZFÞá×Ö(} %Ϲz¡œ±—ý0ÄzÞ=–ñÄÉ'‰âà–i‚åȉÂðˆ%TMÔ9i­ÉÀ:«ºÍ»§qªÁE¶SUuS&Ö¬Em{h é…¨µžºéýcŠ¡œOÚ­Js ®Â•»¢ËM-6žÍÔ³¦÷9aBðWL?ÀzÁô˘þ¥
È8%aàÙÿR%é)¾"+ã‚„þ‘¬º
`4‰i_õÞÛ‡XxŸª|.ò9ºõ €2°ÅÖZUe¦„¦óÁ–­Å°ós§šÜ¤,›á&èZ…û‡«.¬c±Ö¤ëÒîŽæBËMdghR½‹é7M»*s“T?öj‡þ~4¥IQàÄ{̲þɺç0%ýÜκÛv´f'Ìì$28z¯ñ=PW…O È†ýCGhŸ9>» ¯™£ÕZ5ªJQá—_'δ·1ýµY# 5y
-jm¥ -·Çª¿k7„ÂA­k™T»¤°ZÈ[xC[úê1UÛ 8tIMw%D­EÚ¨%\±nÝŸšH˜p°™µ}k²Iò
+jm¥ -·Çª¿k7„ÂA­k™T»¤°ZÈ[xC[úê1UÛ 8tIMw%D­EÚ¨%\±nÝŸšH˜p°™µ}k²Iò
endobj
-2366 0 obj <<
+2407 0 obj <<
/Type /Page
-/Contents 2367 0 R
-/Resources 2365 0 R
+/Contents 2408 0 R
+/Resources 2406 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2336 0 R
+/Parent 2393 0 R
>> endobj
-2368 0 obj <<
-/D [2366 0 R /XYZ 85.0394 794.5015 null]
+2409 0 obj <<
+/D [2407 0 R /XYZ 85.0394 794.5015 null]
>> endobj
834 0 obj <<
-/D [2366 0 R /XYZ 85.0394 741.6375 null]
+/D [2407 0 R /XYZ 85.0394 741.6375 null]
>> endobj
-2369 0 obj <<
-/D [2366 0 R /XYZ 85.0394 716.9352 null]
+2410 0 obj <<
+/D [2407 0 R /XYZ 85.0394 716.9352 null]
>> endobj
838 0 obj <<
-/D [2366 0 R /XYZ 85.0394 420.5643 null]
+/D [2407 0 R /XYZ 85.0394 420.5643 null]
>> endobj
-2370 0 obj <<
-/D [2366 0 R /XYZ 85.0394 393.2598 null]
+2411 0 obj <<
+/D [2407 0 R /XYZ 85.0394 393.2598 null]
>> endobj
-2365 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R >>
+2406 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2373 0 obj <<
+2414 0 obj <<
/Length 69
/Filter /FlateDecode
>>
stream
xÚ3T0
endobj
-2372 0 obj <<
+2413 0 obj <<
/Type /Page
-/Contents 2373 0 R
-/Resources 2371 0 R
+/Contents 2414 0 R
+/Resources 2412 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2375 0 R
+/Parent 2393 0 R
>> endobj
-2374 0 obj <<
-/D [2372 0 R /XYZ 56.6929 794.5015 null]
+2415 0 obj <<
+/D [2413 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2371 0 obj <<
+2412 0 obj <<
/ProcSet [ /PDF ]
>> endobj
-2378 0 obj <<
-/Length 1945
+2418 0 obj <<
+/Length 2016
/Filter /FlateDecode
>>
stream
-xÚµX[Ûº~ϯ0Ð>x#†wI穹µÙdS4[ô!Ù­MÛBdI±äÝEÿ{g8¤lyåcÅ+r8ü83œ-fþÄ,3Œ«\ÏÒ\3Ã…™-¶¯øl k{%6Š­L&V£2f2™Î’S·÷¯^ÿUŠ™äÌZif÷«á,›¦Œç³ûå×ù›¶uõ²üy“HÃçooî£]š¥Y*p‡Rf•±~ǧ¢Þñ·ÅÚuá™ÒV†=Ö0ËMæ÷¼eâ&œóù²\#?2¨”)kIŒ»b뎜å,·Ò%˜Ê@fäÂÍþÜoR¦4z÷…UÓ|ß·4Þ÷eUö‡£`‚åÆDÁ´`2¤Ì—CÝ´]éuxõá~°©åL(°¨– “«)» S}áR2Î@{Ç!ühq¢a¼’kÐÓ‚µ¾þ¥s»'·{Óä‘t2êBð”™Ü87ËåÎuáVFgâ™V"𠘋 LeXfM„\TÅ$ ÌY–¥ù9àê*બ\=\ùXÈ”e’§ç˜ßÿ˜ÛaÔN '
-½ÞdÙ,üv·Í®ÿÓ%[dçGü¸*ö‘¥b¹à꯿Š×ÚÿïçU<t§)<ͤ}qó‡«p_7Ûbñëjýëww˜@Î9Ó9·çÐzÙŸAȹâr|?_:ò¢1âØ;qœüػݡi{ÆØÃ¥ØW©d:$öO!.ÇþÀ5ŽýdsY4#™ÍUúGD;øÑ"×X´uÕ<U2²b"ä`ÙhÖ+Ù÷ý‡/ïþqû÷ûÛÏw÷(ùKŒ@qLþ/+„€"¢xtÄoÜðe³-Ê
-æó²^5»mÑ— T>_ïnD6oZ·V˜:Z+húså~–•#rß4­
-È/Û².oļëwEßxá¼ïÜ„K€°ùPq.¸tCÊÆlß7Ø“’{¸×nÓ4(ºåG1ZZ†ÕmGKnQ ~¹YÑ·ìÃjôj4@®ù/°Šó=„ûÛ£‹VœIh•¢ID¬²;ó- nöß}ßî{ôÁçŸánv/ÛôÐ. zé»)ž\Ø‚]­öõc¢¨†óà6ë ƒ+Ì&Ƥ¿opÍr­bíc1;k–å¹s–¦)Eü›ªß4ûõfâ(m ãTêÚÕJÈ”W)9¯1Æ«ê€3oî%ÑŸË~C´E³Ý‚õ“ª¬­QH¬÷[W÷^‘p¹Ä]T]C\›¢ $š?ý"@n›e€ò÷Œ_kJ5Þ
-åzìöC
-¡ˆ)–”<ôÉ…B~ E¤®9â¢8;f*Y9Ÿ[ìü Ñ!öV4ìö ôî@“&½ãc“xÔS“’÷&ÜÞ¢bÝ0'"ºÝaZD~«çÏWÓÓÉË"ŸæL«ÃE&›i¯2™}
-ÅP¡Ւ(þx øÂN¤‚(]ë%:á‚æ±ì©P0nR Yñ¥%ϼCä5Jx՞粪‚`QW`(Ê€^R¯>
-FU—¨UÙ‘[¢–õ„/
-c˜"v¨¯]¿x /¨¦zŠ©,ƒ‡“jì^MÈ=n´B$ŽÌÿ/Š™AÃozrm@ £óÀ’O#°ã—_ØäƒcÒú:ƒÄl²«Ö2[PCçB‡A|ßöÀ7z WQ@x©k†ÿˆŽ=]LÈw›{Šh( Ï`žÙ±¥|ßd³ø)¼Áº.4h@õ
-Ôζ–ú‘*ÁŽ––nU@€u´ŽÂMô©…2&ô5»XžG»<•Å”?
-iô¦?ÿûãçOþóšÞn1˜)f3+NAÍï7QUÊñ§êgCí r õ(G§ÀM¡É\3-äY=òaoø‰ëà¤m!.cÖAs/ç˜S¤à¬“içÞ7˜P²nïèK]- Þ}¤/ýÞà[fÌ)Qˆéªhij;Œú«p}ÓXåž\E4z%d˜^§ÙüCIMÒ©s gLü¬
-§g=42¾ûùÁC#j*u[ø a;xs»icŸì½‡ÁKØù;üø<fø³ìäC;°$GúEöÔfГ/UJ7üÀûò¼ÿTÆžvendstream
+xÚµXK㸾ϯ0=¸‡oI{ʼ’é¦'Øé ‡™>¨mÚF–´¢Ü=Fÿž"‹”%·¼F°h“ÅâÇb½)¶ ðÇ™"Tär‘æ’(ÊÔbµE[Xûû+x¤DI!`2³š(‘•ñt‘ŒAÞÞ¿zý7Îœ­¹ZÜo†³tšš/î×_—oÚÖÔëòÇMÂ]¾½y¸ÿwI’f)s»(œ-”ö;>õ¡¨¿-¶Æ{˜$BjöhE4U™ßó–°›„QJ—ërëøƒH‰ÐŸ+ö&àðENrÍu€Œˆ dv\n³?÷ç)ŽÞß}ÁAÕ4ß-Ž}Y•ýñ$#¹RQ0ÉÏ^æ˱nZ[ú;¼úp?èTSÂhT2M˜ÊÅœÞÈÉ•¼`”Œ¸=sÇ ¼M$Ý0šdàî©A[_ÿjM÷dº‡0MñNJŒ M‰Êµ‚sÝæb½îŒ V™œϤ`oÀ\Í`
+E2­"äª*fyN²,ÍÏ7W7eeêÁäS!S’qšžc~ÿ?`î‡Q;ƒžçõ*ËÉà?°»mºþ/—t‘ñûU±/ˆÌÉçxýU¼þØþx?®â9wšÃ“„ë–?^…ûºÛ«_Ü­ùnŽ3È9%2§úZ#ýà3H"
+qÍ´2eàq+_Ö.Æ«êèf^Ýk¤?—ýi«f¿í'UY\ÃØö¦î­3â`\ä.*Û ×®°„óÇ¢_È}³PÞÎîÂSW€–B©œºýB0bŠ5&92(ä\„@²}ȧu³S¦â•ñ¹E/ß íboƒC{€KwGœ4èØ1U‰G«$¼7¹í­»˜æLD·K‹Ž_ËåóÎÔ8réäe‘Os˜–ÁÉnÞ«T¦c€ ¤OØð»-ŸLí®¯ÄòŸuU~7H7EW•>P`âÒ¯ýg7M1»q­–ooïÞ#GP÷-?ܽ8Ôlfc^clè£/Ö%•ªèÍàÍ3j-‘îi•39 þý¡ê˶2ãè¶ÓH~ ‹¥µ¢|ä>ˆK0n
+©¦õ 5#úO´õÈû†µªYÅçÿŠ{ÐÇ’™âSû¦žáÍy:òL †Ü£óÜ$Ÿ)aÇ)õ |a“ÿY“Ô•_u0Ƴ©:
+c§ý Eú’ ðéãö.&Xž ÐêB£‘ž=㻑Ü1ôZ¡mÀ†ÒÕ˜vðf»iãSÀ{‰/!çŸN_
endobj
-2377 0 obj <<
+2417 0 obj <<
/Type /Page
-/Contents 2378 0 R
-/Resources 2376 0 R
+/Contents 2418 0 R
+/Resources 2416 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2375 0 R
+/Parent 2393 0 R
>> endobj
-2379 0 obj <<
-/D [2377 0 R /XYZ 85.0394 794.5015 null]
+2419 0 obj <<
+/D [2417 0 R /XYZ 85.0394 794.5015 null]
>> endobj
842 0 obj <<
-/D [2377 0 R /XYZ 85.0394 769.5949 null]
+/D [2417 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2380 0 obj <<
-/D [2377 0 R /XYZ 85.0394 573.0107 null]
+2420 0 obj <<
+/D [2417 0 R /XYZ 85.0394 573.0107 null]
>> endobj
846 0 obj <<
-/D [2377 0 R /XYZ 85.0394 573.0107 null]
+/D [2417 0 R /XYZ 85.0394 573.0107 null]
>> endobj
-2381 0 obj <<
-/D [2377 0 R /XYZ 85.0394 538.4209 null]
+2421 0 obj <<
+/D [2417 0 R /XYZ 85.0394 538.4209 null]
>> endobj
-2382 0 obj <<
-/D [2377 0 R /XYZ 85.0394 504.6118 null]
+2422 0 obj <<
+/D [2417 0 R /XYZ 85.0394 504.6118 null]
>> endobj
-2383 0 obj <<
-/D [2377 0 R /XYZ 85.0394 432.7569 null]
+2423 0 obj <<
+/D [2417 0 R /XYZ 85.0394 432.7569 null]
>> endobj
-2384 0 obj <<
-/D [2377 0 R /XYZ 85.0394 303.3232 null]
+2424 0 obj <<
+/D [2417 0 R /XYZ 85.0394 303.3232 null]
>> endobj
-2376 0 obj <<
-/Font << /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R >>
+2416 0 obj <<
+/Font << /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2387 0 obj <<
-/Length 3825
+2427 0 obj <<
+/Length 3818
/Filter /FlateDecode
>>
stream
-xÚÍZÝoã6Ï_ õk•)‘ê}à²ÝMÑM÷6)®EÛÙVbamÉkÉ›¦ýÍp†´$KÉ÷rÑCŠçã7CÉsò<I£4‹³s“é(29_nÏÄùô½9“<fîÍ»£^Üœ}ó2çY”¥qz~sÛ™ËFÂZy~³úuö"’Ñ3˜AÌ^]¾y6ÓDij‹÷ï__½ºü~'†À
-…œ|:ûõwq¾¾¿?‘Êlr~?D$³,>ßžéDE‰VÊS6g×gÿvzÝ«£"ŠUH –çRFY’Ä=$Y”ªX9\_¾{ÿÃkÚ×O×°)ܼwd'Ρ;2Æ¦î• Ý>ìÊe¾¡eõ¹^æmYWô»¾åydgI$,,Ü<«ònd1i"­tÂc6uý±¡)7åÇâ[zAwgK©#€ìæÒÂþcfŸ§prÿjŠýçbO?ª|[P Ø/F–Ÿ'QfLêç¢߯á}ig´~ïÄed¤LÏÓ4…S'DƒæÝQQÑ0
-—fæËfq”$V?¾¬tºloÇ™‰•™þ²%
-Ý‚”Ö ®Ød,8$Õ{z^¾§ž|µ"á4üœýÔ»þ(ÚÖDût(öϤ”305•e³›µ_}™W4vÁï»ßníÏzbõ’‡¬ê¶-Vs”&œª¨!ÞPCŠe¹u
-lÕ¬ª[¯¾ð‹ö¨x=…ë¥L鯧x=5[Ö›ºš¯ŠM¹-aáþ¬°3-²ÙÖ&Ù@£9ìv›Æ;ULTç`”1‘ÍŒdS8jÂà
-÷íãö¨¤[ô(êá¢ã²î.ZV+À:­3LpR‚–ãƵœÐáIáÌ5KN‚þt(©±"êoql°PòêÿžSÇ?ßýÌëË7ÜûŽÆÜ[F'…wÐ&N#+…öNÅÅ6˜sÁÈ+fûs¾)WÝÍ8ÃVð: ƒ´oظԗ8` ¨[fêIµ=ç;«|Èu®6²ÚÊ¿€0ïË cØ]±‡(´íDÔöÃŽUÍŽ(g{1fGQઽç1 Td =e@Q|sùãÕõcˆ; îóÔ÷Ë p?LEû˜/ƶŠ AæãH½ó
-vr€Ä~T½=QÑgâÓÙô¹˜)>@Š€P픿W2J”õ[›ïÆwŸešoVÖ°Ùb5 ˜(Ñ £_€,Žm'
-Öop}èzîÇì­“»ZH5ˆ“GYa4­zÅ©Z»Üƒä‚ý$WØêÔôq6Y8ǹ¨ÂÄÉP…¥ò¥·åxT0dB,™Œª"•Þ:œ ´u…UlÁaQƒÊ¶Øb\§$ø´}^5¸,’ºòïèMŒ±*ø¨ôÿw‹)û8 H*³}= ©’ènü¯ 'e¤çuÞNaÓӜϟó郪8âëPÊ0b<‡DÔyªÆ
-+µÌ;ÁPÞóýó˜ KÈU³là*^Þº0ƒHM¶q15Ž»hÖe¢Øõ@].E½¥Â=Òs"“(‘àÐ1P.~þîCD$ºA¢_¨¬–´–~\b Ži×ÝgÏ¥‚0e}îõf,Öàž©
-\ƒj3DÖÒß ‡(ŸðÍ\w Nó5GÉë/¦«Ò÷y3q©‰º?Š1‰òe®()}
-bÎDü…îR
-ïóæŸÆíWéd !ËôîVû룻UÇ»•)w ˜‘GŽ Ü©»ƃ(˜ùð 5óö°¡Ÿ«šŸ€YÀFe³>ò7Æ‚…Œ:
-”®DXð9I;܉
-ô½¿ù@„0È•œåñú¹X¶åçbã?^¡€™ À° õW¶ÖƒMw›gÂW%fèÂphðRØ.]¡Ã‰h¾,¤ª\,6<ÏËe³8´Z9ÿký¾ÅEÓèâ}ÂÆLÁ©—îÀS7ØQóëEÚP8d½¡é“löá»—)Rú±-Ú5˜³Àe’ù¸Ÿ9.¯nè­NmÆÇácÕyW­ µãrâÖK…zº÷¿
-"BV˜ñI§ë†¾xÀfHÏqàÛw/çï^%cÁ8`–Y(bOud)ú O¨&y¢álD ×Tˆc÷Âà)†Ì‰HÉ´ õ0QÉÓÁù âþ“I‘r5Æ|Äï4K‹0ANEÞóTS_Q-ëÁ'ï Ñþ´ôŸõnx’»¢ÂK2œvE”'0«
-‚ÕrœÀ4d‹VM}­°¢Æ¾ÌáK‰ÿù{éã×àÚDÊÚ‰o|b‰amfÊ¡¥O¿eâ/«Oyÿ/eRÈpendstream
+xÚÍZYoãF~÷¯0‡h€ÓÙdöÀz’ÉÄAâÌŽl‚$´DÛÄH¤"RãL~ýVuU7µìû²0`5«ïê:¾ªny.àOž§Y’ª8·…IR!ÓóÕöLœßCÝ›3Ém–¾ÑrÜêÕÍÙg_i{^$E¦²ó›»ÑXy"ò\žß¬^¼JdòF‹//ß¼Xª,jqñöíë«//„ïT@h Ä⻋«.¾%ÚÛ4{óúúů7ßœ½¾ ‹/X
++ùíìç_ÅùÖýÍ™Ht‘§çð!Yê|{fR¤FkOÙœ]Ÿý; 8ªu]£ "Q:S(y.eR¤©š° -’L+íXp}ùÝÛo_Ó¾~¸†Máž §ñNœCu¢Uf]— jÝÜÕ«rCuó¡]•}Ý6ôÝÞñ8r4°$&nœu}™LÚÄh“r›MÛ¾ïhÈMý¾úœ:˜ñ¨K)MbRàÝRæÀÄ4 ¾ÌààþÕUûÕž>šr[Q V_Ef_¦Iam6êñºË|A³OÎ[&VÊì<Ëlb³Ôœ8j´·rÇcòˆ€†V85¯}6m¡’4ÍÍÓÓúFÇÓN6\Ø$Õ…N[#Ës`ÒpKÙ‚ù†¤vO¿—o©¦\¯‰9÷“?ÕןRû–h¿ªýÇRÊ(š.ŠÅ̓Ÿ}U6Ôö–û»o7÷sböš›¬Û¾¯ÖKäœ%ª(^P@ªU½EñÕÈEÛ³ðê¼p{DjÉß0_Æ”ñ|H¨¹ÉªÝ´Ír]mêm OG…YU,þóPqkÇlÑv»M í$¦zt0ÐZ©XI˜Klh8Ù^éÖyØVMÏ*ÊzTÒÏCÛõx4/cŠ
+&%•&û ŠÊli7*ž§(yf–
+p'\M ßm¸û©ñv6ȑᙦ¿»©Y]×ÝnS~DÆž@ )â.côÓ(aÜê4J­enѳIs‘d€ã““úFÇ“NN*O@ÙtÒº;É:§¨ã*ï®°šPWäÖsN‡ñ[ï:ü1·ï+n}Øf¶{^€j?ÍìQ«'˜í[9 ÈÀ1Êì§&˜=Ÿ4Îìñ¤5¨7Àk§……Dê¸%·WrL‡_¯"P¬¹91ú·CM…5QQÊb B™«Ÿ{IüûÝ\¸¾|Ã%ð?IÌÃY˜Á;ÏØZeI.ƒ&tW°U‚ß²áe(7õz¼¶˜YRˆ4›ZLœŠ5ý’¥.Š D}²ÐÏ.Ð_{@yг|]æ&—8 önWíÁÆo'( ¥ý°c“Õ²9*9ȺˆéQV5
+ý–
+0p&
+àž0œçnêïßÞ\~uýTÄ—¹†7Q+ ˆ;¥õ®ò6î*Sœuì*qј×Þ±Óz+¤‰}°b
+ò@öeÔ3¸… ÍED>ÁÓäYê—Šâ`Çë5ŽOûãCÁR!" ·‡®§inyæ’*¼È¯Ö.üŽÛ¦"IV9BM!§~7¥uʱΜû´#bSõíþ=UÔM’R®*®tá
+ÐA¡HÜÇ•©«üüsüï2vqÑpw(.‚16 }[~¤Â-¯§ÛAÄô Äï.¼ÁŠTQîvÁÜž˜n gü„8-'Š‚% „£&÷ ܲŽ BíaÆ?ŸÅqÅ1‰°“‚p‚?^Ý•
+ù\Ôš‡Q«=¸t¶æáoËØJ3µk®$Eó~¼$¤„03ÖõD #"ƒÛz$w}G„TøË¡ìŠÂ@ PL‘68*™gú(D0 4›*&u
+¤Î ç]½©<>[›äJØ‘±Í×Ã0¼“5ˆuû²~QJG„’~šÃ¬nÑ}:¿
+Áf¥hq¹ŽK<o¹ýŽ½ ,ÖéT ‚p¤H©Êƒiõ>‘©õöàÐQ`9^óªÝnËf½D.úm±Oâ,”LdNefƒ½ÛÆí1i~#†«l8¶Õ¶õá!ı÷1¬«ÛÃý=ì¯ ÂN©ƒù—CI8ÉÒÂ
+=UñdRðÿc‹›8tGº˜%oÇÙ³aã᜵•~©Ëþ.=÷¬ðážõÙK;äòlÈbXß
+J‚8 Z;s¥4«ó¡°ªj–h¿ZûK€àãS¾7Äa>eyýýÅé„ôcÙE¯ ÒýQÄ8Ê <CIè3`s!ÔŸ³¶Nx“·ü-®¾Ú¤s\ˆW>lmß°¬­ò攵@pÈÃÆÁÛ±µÖ#(ùðóî°¡ÏuË¿
+Ùԉ½‹hú˜k…žxý¯8¦ºY¢`%å~WFmoš¤ÆÚwÝ4ly¥·¼bÈ!C‘CŸVü$
+êÞÞ¼#Bhä’Ír¸}®V}ý¡ÚøwSä.  Èf˜óÎœçjºk<ë•'·GWüÐtô†Á·­PáX4ŸRSßÒk ãyуħkzµ‘ûÇ 8i–\¼£·“¼(8õ_G@S7XÑrw‡!ó4™+d»¡áÓbñî«/ÀQdô±­úJ-a•iá½~á–pyuC4;•=Ícyy—© iãúÄu—™toÖØÅ+÷R§ê÷aa›ò¶ÚtTF4 ›N¾B
+û”¦öî Ä”ã7W`l™
+†x»ë9u4ÃqÀ’ëûfr˜çTòbüð'ÇÌMOäÛ±§QNiij¦!—áN‡¶@Oæj–¨á ËìpØØÁh¹bk‹‚Õ—='P¸=2ûæúò rú%o2ˆ
+ÔȢ뾫6wD$Veƒ®r‚—¨œå ›;ñèYcÀ}g"ÂUôÿü zxîml¢ó\ÅQ( ð»€2/ÊYw?á§ÓÇkÿ/À(ÅWendstream
endobj
-2386 0 obj <<
+2426 0 obj <<
/Type /Page
-/Contents 2387 0 R
-/Resources 2385 0 R
+/Contents 2427 0 R
+/Resources 2425 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2375 0 R
+/Parent 2431 0 R
>> endobj
-2388 0 obj <<
-/D [2386 0 R /XYZ 56.6929 794.5015 null]
+2428 0 obj <<
+/D [2426 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2389 0 obj <<
-/D [2386 0 R /XYZ 56.6929 752.1413 null]
+2429 0 obj <<
+/D [2426 0 R /XYZ 56.6929 752.2855 null]
>> endobj
-2390 0 obj <<
-/D [2386 0 R /XYZ 56.6929 501.191 null]
+2430 0 obj <<
+/D [2426 0 R /XYZ 56.6929 474.2043 null]
>> endobj
-2385 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R /F53 1313 0 R /F11 1451 0 R >>
+2425 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R /F53 1328 0 R /F11 1353 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2393 0 obj <<
-/Length 3111
+2434 0 obj <<
+/Length 3270
/Filter /FlateDecode
>>
stream
-xÚ­Zßoã6~Ï_‘·sÐZKŠúÅúÝl‹-ÚÝ´ñâzØæA±•Xˆ-¹–œœÿû›á )J–œÃÝa5E9ÃáÇo†d䥀ò2‹¡tt™ê(ˆ…Œ/—Û qùm?]H–™[¡¹/õ~qñîG•^ê@'ar¹xôÆÊ‘eòr±ú6»¾½ýøùæÓWó0³÷ÁÕ<böëõç¯×¿PÝí•g×?}¼ƒÏ$!IKÄìæÓOW÷‹Ÿ/>.œ1¾ÁR(´ä¯‹o÷ârvÿ|!¥³øò>D µ/·Q¬‚8RÊÖl.î.~sz­¦ë˜b•q¦#Ã1Ä:HT¨Œ>䇶¬««¹é¬Yׇ͊Êý¶ùsÁͯk[:4eõÄíë½ðîÇHzºdY&b°µÌ$Ó³G‚=RI©wöw{Ø´åüÐ{¶ïشŶ¡¼é 0…ç∅d¶Ì«þ^ʦ|ØðGY¡-—sðvi•@I:ŽCc†-LÕ¬>´»C‹åhö¸¿’Ù¬ÞRË®ùS€—á?É¢{ƒ‘Í·£Y›ÍßúX—M[ï$ú§á¦
-ò46VèE•Ì>UÔúþÓç›ï­’²é¸ª«‚1'ðôˆv´Ò/åŠUˆY¾ãÊݾÌÛbÄëRˆ@gZ³GqF#^×ЙbœìÈ@:PqjeØÕ§C) Š$I¬X Vm ÙKøìÇ,Ô"â.¸Æ«`YW#£;¤@,83
-/ç¡>J3 ]a›eûúñ÷«8žý“ ùr»øôåóÝÈ<Áé!€PËs(MÊ”ÍèÖ¥ÀiJ@ þd³ê°}0x„ªú‘ê…G®2¬Â]^×å•œ-×<À#ùX,[ú&DBÕkÎÍ~ÆŠui;mêúù°³&£¸×6_\m€,3;¢ž‘\lÖ0÷ðäz[kU6»M~$@ÝÕ[ì¯2š˜2T×pUS´Ü¶§6Öa«`TþDå‡Ò`C¥4#e-S« m]À öW@8¸{"1kœþUÑûmYñ§õtjÀ}ì`ggfcB·¹B}óJÜ!fOÆP(À®ªÚbõ=o6"1«aŒ=#ÚWŸLP(·E}h=É­™|6íöÇSY4³)”%±±écNK›v¨É\,ÂjÃPÈFÞ6ü-,Ó'lû×Ú(çå'ÌËb5Ñc·9ðàMùÄê0´Œì_ÀC%™%íïÆöm ÓÔ’'€Q¨µ…‘Ì| ÒFp‘Œ"ÙGʱRÉ0È¢$ê¯'¹É¨‰g Ʀˆ`+à<Elâ/V <-Gj¡µ„
-X&dÜ‘Lr­2KU=Æ
-È$´ìf‚ Œ]OÈ×fxÖ¶yEÔµ¯Æ
-b ÆsÏë ‘Äzþ3~ EÆIÙ"yCë ^›½ä›R–’ʆuŽ”°rS>TM‰ ,®±wÇFs"¢›Ô°Î_†ëýv <2 ÒLÛ¬à;šÇêcÛˆ;3$Yº`“^Ú'œ!ˆ JãQXðÞeŽüûI¦,CÇ1$ŠPMíYhîK™Ä6ÊF['efù­ªïÛån¨X*€r"ÞÐì¤NU—ÂÆÝ_q'(˜ý·.y¹PÝR $,÷TZ|¸¥6N«¡Ê¸–2k샙˜©§L
-6$¼{&ÜaB§›*@¡)È=ÈÇ*Á4¤±"5ý·9.v¿,Þ†Ë4¯†%$£:²gHâk#ˆB¡H»»¥ÝìÀøå#ÙÖ슥˼M[•œ-çJé †”§O/¾­ýÃtD‰NÜ §ªmi²«DŽŸ§ã(PÙ“ú»¢]¾ÛM½y™:UkX̺‰f|Rĉ€{è~
-ôõWFz+ù„Mô­}_Éî:®· Rgœ¬½ß¡ŽåzÄL0 rÅ“[1w  ^øûê üTMî)•&AÆoì)_jzO9)G“Ý,Fiò¬òŽ&O´ÓdO½ ÍHI&4CŒ£ÐŒ5š±ÄgÝ[Ql Å–U°®è|(ø|8Ú“ûHÎÂà—Mãôa‹Í£°…˜åØ^Ë2dùŒ7ºòp†Ä&²;l
-ÄeG>{ö¢qϱs—Þ‘9Ï㸴ç¦Q¦¢ Ž²ä ”yRgPf¥:”­ë× ¤¥Q
-õ†NêÔ‚Á…—‚â¾ ··È„6ßYÖî{©ôÐÙ8wiΓK:»ŒÝÜNM»XDA¦ox¸:ã`rþ…ÕŠ1À1ÑYÕNèDwßµ‰ ÒX¦=å7…½–È»“JKUXÃ.mú®=VuuÜviä×&ô‡¡öÓãqüXÇ…!±:ï]_jÚ½NÊéÎóºÚ'Yò¬òŽ%O´³dO=dÍàÊ“ê<ï²rwMé0.)¹Ÿr]ú2õÆÖ÷¥Î¸ÎJy®{ÜäOÓ®;§ÜsÝPû„ë|õ×ÿ1Ü “t7ûƒèJ@U¬bÿjÔ©p
-Í©ßpª'uÆ©Vª³nuÞ©ç”{NjŸpª¯ÞdÁRÇÄ£X0<Š…¦hï©dЇ…ëúÅèæžà¨j•·9=ÿá×CɃ”Õ`ÀóP‡|èÆ&ô²Ol¦²öÅÛþ:sày]|Y¦pªÇ#mÈ—ò!¿“š{ oÊ+’Ââ«Û‘ê½{}ø¢«F#F£âÓªy³„ÒK¾)WL˜!=Ë¢$Œpp‰"Ö/—|wJ¡-ªIôä¹@òûŒÀe³]½¹‚d|yôg•u³b¯¥‘¹ 
-ÖïIMeµÂÇÓ¢±]Ìm¯ï#ÞåxoÖ“ÍüÉ‚qÞ|³Î³o=†hI9üRX‡‚÷à¬)ö@å—Û¾®Í¿|]PÅ>¯žð 9Rf¶‚ãÙÒOV»ç¨Ûå{Öc¼¨%{
-¾U¯ycGôsd*ö6Åe%ÎK“ƒ÷¦€}žb|©iŠqRŽb–ç)æ¬òŽbN´SLO½¡ؘœªevM3Ƀ%ò6>ÜÐ/RÌr],Ÿik@ͪlðD¸â?2€Ã2X0aÒ¥Ç2 ŸX›ú,fa×Ë=äãPõVæšôqóùîîã‡Þr»býØK,ébh
-p2£·RKOhV¨ÃÁfòÞöœÖîÚv¨vüÖÖ×{C¸Sù:¿ñÞ2¿\ßÝÙ;ò¢ò^F]Þîdû\5éVˆõ*|ãY¥“™v*Ët7½-,ö‰[!wÉ$
+xÚ¥ZßsÛ6~÷_¡·“§üÞMœ8͹Ó$níÌõ&õ-Â'©Š”}úïo € EJ½¹ÉLKìbñáÛ]Ð|ÆàŸÉ8`"‹fi1ãñl¹¹`³gûxÁÌÂ
+-|©w÷oé, ²$Lf÷OÞ\2`RòÙ}ñm~u{ûáóõÍï—‹0fówÁå"flþéêó׫_¨ïö2 çW?ÜÁc³„8Š%l~}óñòáþç‹÷Îß`ÎZòçÅ·6+ÀîŸ/X 2Ï^á<ËÂÙæ"ŠEGBØžõÅÝůnBoT¿:æ€XÈ –a:â0ó@œ‰…ö@»R¸ˆ·?EÜå)šÃü(³8Ho6aĤ©·mYWÿ ¹Xxr"
+ÀðÐÈ­6ùrd²ôeqf„Êær!Ó¶Qã°ÅV˜Íë§ÁÐýÝÍÇ7Ô,ÔS¾_·$øÏOWã7#&…, XfM¯òúßMÒoM›D­ïJ{nri 9‚”ó ‹Á8i^#Öñ,
+–Ì﵌é×Âöíœ~óF-’ˆÆTµ¬ UÐHÓîÊêù ŽpÜ’r™¯×f’gU©]Þ^ò¹–†žÇ½UTM£– P2°˜IøŽù% â$¸å}¾G0¡½é¼YÕûuAíGE¿mþ]™áוmí0ÎŒcZF”,9jÆïšæ´¿@X¹Ø7jgì;4­Ú4ô7º¡Œn_æU /eS>®ÍCY‘;€
+1!ä–v»Q¸NN
+]Õ~ó¨É):`Âð`º4­˜W^W%ære&xÂ)ŸÔ²¥g‚$t½ææe} ±cUÚ—Öuý}¿µ&h£Ì[›¼P¦[#™K;c6'¹è¬1äc×_Q6Ûu~ DÝÕ?$-Lh®kLW£Z3¶£1£ÃvÈü™Ú¥‡HiEÂZ&:WÁØJÁ
+v—À8o(ª4N¡ZµÛ”•y´þ€— ÜX;;¥
+ÃÓ•WÍ+‘±–p¬ªVoÌi#`óæØHûêcf¹åFÕûvð&9¢ÕË‚Gˆ¤p@žKÕÎ&ÈδMrÚÚ´CtÁ»5u@ H‰[Œ<éœáÜ¿ÖZ¹Ù~¬Zªbâízo&oÊg£cËÈ<2‘–µ;¸A–¦–(îÃAÍ,Œ¸ô-lHÁ…ñ>ŠÐP,%ƒäܤÕĘìhl²Ž®“Å:
+
+“'’¥§-pRÇ&ô÷lH x÷L¸Ã„N$6U€F£È=ÈÇ"Á4¤±"5ý·9nvÿ=ؼµiÓºÆ.ý8$£Yd‹Hák#ˆB¡»€ÃËÅŒÑÕÌ_>‘mÍV-]æ­ŒUùHq¹xÑ)Ï ¸òlíWÓ7KÜ•‰IUÛRgW /¨ã(PØRý­j—owª©×/Seu»‚yB·Pi*E\¸‡.¨@_g¸·3†"—¢‰Þa´ï+ÞÝÇ î9e
+]QehnpÇß4ïp“Á¯Á2ÍÓ,¢9´cû™Á€ÕTw£{>dHi"Æ»2“!ò(_<˜ª³‡{.ˆ ¼ÄŽh2<ñ¶ò×ü?/(‹“˜§g
endobj
-2392 0 obj <<
+2433 0 obj <<
/Type /Page
-/Contents 2393 0 R
-/Resources 2391 0 R
+/Contents 2434 0 R
+/Resources 2432 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2375 0 R
+/Parent 2431 0 R
>> endobj
-2394 0 obj <<
-/D [2392 0 R /XYZ 85.0394 794.5015 null]
+2435 0 obj <<
+/D [2433 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2395 0 obj <<
-/D [2392 0 R /XYZ 85.0394 679.319 null]
+2436 0 obj <<
+/D [2433 0 R /XYZ 85.0394 654.1216 null]
>> endobj
-2391 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F48 1238 0 R /F53 1313 0 R >>
+2432 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R /F21 950 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2398 0 obj <<
-/Length 2837
+2439 0 obj <<
+/Length 2877
/Filter /FlateDecode
>>
stream
-xÚ¥Z[oܺ~÷¯ØGITÞ%èC‚¤9hOÝ-øA^Ѷ­´Yic8¿¾Ã«HÝö´Å>ˆ"GœáÌ7’‹w~xÇE*
-R첂¥a¾Û®ÐîÆ~¹Â–æ#zR½»½úÓ_i¶+ÒB±»}æÊS”çxw[}IÞ¥8½†Pòþã/×oˆàˆ$oon>üöþã¿á# „’¿¿ýíóÛ¿™¾›ëÈ~ùðéúîö׫·^˜P`Œ¨’äûÕ—;´«@î_¯PJ‹œïžá¥¸(ÈîpÅ8M9£Ôõ4WŸ®þé' Fõ§K
-`<O9aTAS‚2²¬&œfQÆpJ
-F½šX¾¤&G¥ÔôêKÛÝäþ|êåtɘä)#4øb‰»§š³'$`)Mâ$æ«ôÝ=>6òú Íq2<éIz9 ×8©ÛGóÞ=D8ùý½y~E®qžèEÔ]kè+Ùצ»
-lhïëÁ4êvÂîûYž^®1Æ €"C,¹}ªûéG¶D3Ý¿(•iäˆg  œ–¨VVɇòÜ ¯“äù©Þ?ÄŠ"9ȲíÕ‡  (Ð+2Î@«úóúÑÒDJÌÒ‚ˆÂÒ´ÝéP6Í‹™·—m¥$Dúø!ͨZ`-{X€*ù=PЫ•)¢ò<t‡r¨÷fV5TÕ}yßÈʬ`–
-Dh¼Ôç'Ù÷QúÔRsHÍÀò™àVêWmßËò꘯0JòÜ­¯;-LŒsáÕôj8•{¹0ÍSʱdƼZÄî8Àº{óRM™—s/«tæ÷Ö¹Dž¥¨@ù¶†Të詼†*‰\2p|›ì=ÕœÿÄ‹p›ÇüK[â ¬§!-£$Óv}
-arFáàJ6ò±´Ð‚c9<™‘m›î} Œåºn0ÝzE½ÂA¨=Ÿ‘Ð Hãœ/çˆÇVt°RÈ=UA‚©Z€Æ-Ä»`>cÝ{ÿb{M¦ÑïÎy ‹`
-Ùê–<™¢,rÙ“}:”ߤuÀz'惡Ë7vé„CÀq¼víù„Z÷è»FK˜Õ#ŒX=BËz¢õ*ƒn£2Š’ƒ|®¡hhóòÐ5M÷2y§SÙôvx´9x¦ÍÈZZ¥q©ÿ©{ö‚¸HãÓTžÝŸïŽ,O‡Vèßc$x.û1ÙÁ. !VG‘×+u(5¬ø="ÍH.¶ý>¤Z÷{Oåý~¨f^ VÇôgO5gà ² +Ø„÷èõJaÂ"†šOu;˜  Ý*
-:¢XŽ Ž²S¤JýíÒŽgØѨԢ]‡´²Iiém¿VÖŒz*`î¥+ÒÊ㱩U©ŽŠl¡«úGep[ÂS+Ô¡ñÞ2óg t
-’]H6!Õè•8áiXM6›¼Çd3c¾œl"î7Æ›
-^f¢óá^žÜ¥›õl(š˜9{™a–f9]Ü&QÎÖ¶I<åLø‡ùtgÚ(0v{$W©Ã´:ÇÃÓæx@  8ùø`zÍ|º© cZFhûß ©Ó†Óª\€ ¯Å&åtsÈÖ¨]-¯3ZÈYZÐŒÇé±×v‹ÞwgÍmïšÆ¸‚ @Æ4ªåL£cßÃtÂÅôzÝ·Zö5í¶kžz/rz!‘†Tžä¨ÆDjbo¿îI[ìOšò_ñ¤P€°†Ž´2nk%GY¢©[ÙÇ!Êm²çÿBÖí•(¿`€jÃŽjÌ1°åìWsÌ&ï1Ç̘/瘈»MÇ4÷ÉšÎÉU{ðuzÑj…FP÷(úóT«¨û¡Þ÷V§9L… ¨~ÚÉÇ'S‚BãPVòµÚŒâ‘®¯JÏ`}Oã`œøؼL¼¸·æîÚMtÜK¨^j·Íý#)3¨‡Æ¥¯"ˆŠ,eŒ\È!Õ:‚<•GÐ÷Ó”o‘§œ^`kiæ\'U1…ê¶ÀÛ›Q#_*«%“½ºîÖõå¶õÄ5{pBk¥wqõ÷z}2÷qÌ}ãtÒ,ÅPåo[b$Ú0„%í 2˜òžµÈºÅ{ ¬SæËq5äîÌ¡*mW™ø}Š2‡ ãN‹ªßz¹_ÌN†êÐPj]CÓ¾Â<¥¥õ…#´µ%„ÛþçSk
-Vh§[/Vþër5^Ãf?¾8l•Qh_2¯@èB¦ ©Öáà©<Æ2-¾ë àH‚n3÷Tsî“ÐnI`Û±¦Ó¹‡Úl{·± ˆ´êr9 ¶öã§Ý(Ï׆,(»rCª Ã8ªÑ0ö¬w¾›`(¥Y·ù{ª¹
-gÚGXûkŸÌÛGSQ¤Í'цÑpAR$.ĺ€hÝdŽh´XÓ¬Îm±Ïæ¦|—æBÆŸ¤1®lÛ7²´M%Ï<Þ|Eˆ–ëUê
-éVìÍ)OHjŽ}>«CŸ¦þ¶tê ž€Òœ4>¦5qféø™«ÿß8Oð˜th«:9Ýü×í¾9WÓÃE}ç þýjåwÀWý[nhçœëÿþSÞø—C–AÆÌÉ2žHÆSøX8¡”&
+xÚ¥Z[sÛ¸~÷¯Ð£<‰Q€A²3}H&i&Û6u×(‰¶8¡HE¤âõþúààÊ›ÒÝÉLqÎý@f+
+ÿØ*DäQ¾JsNÊ’ÕöpEWO°öáŠiÌÝø¨·÷Wúkœ®r’‹H¬î½½2B³Œ­îw_Öo #×°]¿ûøáú& Öonoßz÷ñ?ðžP€
+&΢uWöý5[+‰É÷ö1
+ÚS&#ŽÍ˜ýë ³e4',J“e»Í %e}_Ž½Þ¶oñù ¥Q³3Œ”8
+Ýò·¶‘êæùzÛ6}Q5ƒ˜ HAŽ6¥]­Ûö+xš>ñYH~½4€³vŸ»¾™
+òUèR*2„ñh¸¾/T´
+¢šâD,‚ÄTöŽËÕl’2ƒ‘ÙTE Þ”¦ƒXaLf®’s^´/ŒlJc¯ÅñXW²ºƒØDum/ç0<CV5¸y LuÖèxšŒçò«š7:‹²FqçÔÏæ×EÚ.¿ŽˆOç×€ú-úáw°…ÀÁ±;3ƒñNy¤ï”{éšè ¤<ˆ~謚€ ˜Ü¦5$!ãæ5Á’$
+u´  ²j01[¦/ÑvUúøt‘îS¿Û«<®÷Eàvò.BN¨»9!sÓÎa.ƒÁÇ[\+v;A:\P¥«\9J÷My2f×3ºN°17šÂö7%iÇaÄ\'|®'„ÃqaÛ8kàÃÜÂÈ3 ¡iK`[UÐÀS4`{"bë8‹û©¡4!Óú;ÛúÉClézYAw¯­2NbgÆ>Y»<^‹RÈ8ÉãtPÞuJowíYQ3é3P :=¨•ø´jTÔ{n8YKãl)…‚Ì¡}Ž’e'òQó^dQ.…bÔífÝh‘¼ó£ýiG
+ð†°ñoúŒƒüPW)Oªfð5æÍß
+‘³ª•ƒç±Tv}3l©åš=„ú\]ñ¹ý¨-mäX^bÛÈò×âp¬KåöÙz>Í ú´ÈIgŸFÒÅN†ì¾–/ØT 6¦Á„•bÓžu#ñîÓÝßÞÿ×oF ÷¼ Ô}Ìý^÷@.è
endobj
-2397 0 obj <<
+2438 0 obj <<
/Type /Page
-/Contents 2398 0 R
-/Resources 2396 0 R
+/Contents 2439 0 R
+/Resources 2437 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2375 0 R
+/Parent 2431 0 R
>> endobj
-2399 0 obj <<
-/D [2397 0 R /XYZ 56.6929 794.5015 null]
+2440 0 obj <<
+/D [2438 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2396 0 obj <<
-/Font << /F37 1026 0 R /F48 1238 0 R /F22 961 0 R /F21 938 0 R /F53 1313 0 R >>
+2437 0 obj <<
+/Font << /F37 1038 0 R /F48 1253 0 R /F22 973 0 R /F21 950 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2402 0 obj <<
-/Length 3256
+2443 0 obj <<
+/Length 3119
/Filter /FlateDecode
>>
stream
-xÚ­Z[sÛ6~÷¯Ð̾ÐÓ
-!®òàÔNÖmš¤±ÓíNÛJ¢,N)RI»î¯ßsp)Rr§Ýx2ÀCœà;WˆÎbø£3-IÌS1KRAdLål¹½ˆgðîÝu4sO4ïS½¹¿xõ–'³”¤Š©Ùýº7—&±Ötv¿ú9ºúôéæÃõíO—s&ãè ¹œË8Ž¾¿úðåê½ût™²èêÝÍt•ŒQ$Sqt}ûîò×ûo/nîƒ0}iÌQ’ß/~þ5ž­@îo/bÂS-gOЉ MS6Û^ɉœû‘òâîâ‡0aï­ùtj„ÔD2¡fs ¦\&ÓÛ“X²牠„+©Ã6 =µMž
-·é«jU·ÍëëãåRΈV1õçqTcÖŒõXSž-èﻼ½œsžDí&·ªÛ.ò=¶UT¯íÊçÉ2÷Á&{t_´µ}f»]~I£lo»E… zõVòž,N‰Ò‚ìȾʶ¹¥ÈÊ”¢ŽæOD‰w×s¤„s&ÁºöBµ}™U´pkXÖUS¬`ÝTGùÊ­gÑÔe×ægŸÍ™V„1Š[NI*%33ß›}“°Gù:ëÊÖv³²sãEcŸnç å/qÌ*ú]SÀ®UžÌ}W¹M‡fÓfm¾Í+÷½ßXAû[¦a€-·àWy»|µÏaÖ¶žÚ I” ~ ¿†¹µˆÌ>êX!
-Ø>,Y³³8-Ÿ/)¥Šœ&ÑB ¹õ\»-ù€µŽ£}ûG /è ›vÝU«|5eºU ¯û«úÉé48<ûín_€…îÉEã¡\ø9`aïmAæføÓzœÚöœA‚Ö2맙}à©ÛÖï]¾v¹ŽÖšÕSºÆ(¡B½¤k=ª3ºæ©Œ®å«ªyý¯‘¢1E
-ƒnñ±jžDÐŒ(T°³(èSFA 
-(XgE9®h<,užu ó>Šf9D½é÷5¦ÊÒºµÝΆ™Wùî]“ïMõ@¸äžÏugéÝ6æ&×À7™}ÜÝ|¾”2úñíe"¢«Û÷Äßûé©5Lbòiá2ø ±|
- ¤F,¸Âº>4^TymŠ¥H1íðЩåCÓR¡½-=šºEŸs#?ù"ßd€Vw:"&B‹s :Gp³È!]ƒ¢µ#ô$œ?Ï=Ø™KSÙ‘þWm›ow¨´Êz
-¦@“‹fWfÏnÐl34 ‘lÑéX³Ç0êÒ¥Æöü1)Ú‹É*+ÑŽä+ƒç±ðÅÁh@§hœ„”k9´>”2p2a~:·Íàáäaò²ì2¬³§Ù§:}œ*œ'„nM¾<é Î2?xƒ÷io0`ÿ9‡à³Á3¢©Œ à»»ùƶGÁ µeólL1ÈŒ<û+cÇ@àxÂß¹/
-÷):šëÖÅPS
-bXœç¨Æì%‰¤Éÿljnw2W5 éÁ™Á‹cgF½3³m—»ÚNf?‡Í]y˜šb±ÊZS
-“Ã >pú
-¹9%:–G˜ý{£XëÓfœ0moµÿÆüŒóþ”­–‚Éç¿„1šr+¥Ïc¬Ouc*` ¯uO&ÍgY’æïɤyÀû¶Z–Ýʇ•Õq‰ÔÜ{»ó…Þ^÷SHjûô4¯B…÷PŸÈ&ãP㠌ր- Š¾zÎñÛâÿû/ï1½¿ýôþÆÎòכϷ7wÆŒ"xyÁir¸ñf^¿¹ý€‹4Jí@±Ý•ææ7sQ³0—@c§…[+£/Ößhê½VÓívÁ6–Scëþv'€‹)…îJ'nHaT ¨ì õ0€ÕM[î:²ÕSla~Q8¡1pÞ¡TS~”-šõñ˜Û2D,¼|F"3>}ßSÀsì]ê|êê”
-’&©ß›EÖbT‚,0¸¤®»õ¥À„oÒêâdn~·$íÆ‹q(ì Ž/3'ý"?H_æ 0j- Ž›ÀÅÌøT9JóƒËÃnU$F‡?0] +Ïš¯]ØcDmŽJm½‹ G0á¡pîïò µ„ gæÊ–šÇw ‰$2öA‘å3qJ¬ýFÛ‚ÂCç~¹
+xÚ¥ZKsÛF¾ëW°*¨Ž1oààƒÉ^'YÛ)©l9>€äPD…h´£üúíž„R»Tó@cº§ç›~t–Â:Ë$Iy.f:D¦TΖ»«töÏÞ\QO3Dó.Õ«‡«¯¹žå$WLÍÖµ2’f=¬>&7>ܽ»}ûÛõœÉ4yE®ç2M“ß¼ûåæ'7÷á:gÉÍ›»{*™2 ¢H¦Òäöí›ëO?\Ý=DaºÓ”£$Ÿ¯>~Jg+û‡«”ð<“³¯0H Ís6Û] ɉœ‡™íÕýÕ₧öÕ1™É„šÍ¥ \r1®¦”¤¶=×8 è5‰lLM
+ÕôíǪþTl·çÛ¥œ‘L¥tÖ]sÀ9R Y3ÖaM¹&™ g¼ïMëN¢>¸v¹5…ï¢H¶³*›ý¶xrƒßÓ” Ž×€N3Ù3jêPM¨)PY5µåμ|h‰)’eLN3ŽTCÎgZ¢ MžõYƒ–ؽ`I»1¾Â\Ó¤>¶n¼¶
+„NášÏGsxò¤5Êüâµä=F‚h©ˆ‡IO–ŒðL‚Æ,ëjjŸóT'AŒ•YÇm{’É D“ÒK,]Óÿ¦ò¶­ÙíÛ(§'mGžS§¢(ƒ%¹”tBp¡2î·«n¶¦i\¯Ý•ëQ×|-Ò×4KLãvãÒ® JÅEâ^¼ëÞzn¯®¿0eõèÙï·¥Y]D®‚ r*ž¹à]ªËÈT¹‡Ò4#Ð Ww’óé‚X_ðoÝ\yèB§:îæàúVsøÔèjßZUCç—Û®ƒê/ÏÉsøVE:#›SpSHÏ™Ì<AY5­)Vgòá=à¿s8æ€g!²äízìŠ1¸Ëòïóm >¼&)—çÌ>ƒo°™æó±ð
+|©ƒwmÊ•³ph’ì~M½=¶†8#Ê2E£´S¶p©Oa ¾Û£ŸG\bë5g)!àd•eÃcSâíx dþ½Ê+ºM[@LÖÓ¯è+hWe™ °å7ü´ËøB`oë1I¢å§{Ä3aí?ò ž@‚­¸ÎDò,`ò¢²\ZQa7^Zœ)ý“ýµµ[:AŒ4ðØú9‘¼+¼›–4µì‰dm¾:,“°¶@`áéøe«ÖöÞZ'‚~!7½-Úò‹qOª—¢òÔ>Fƒ©…!h¢w´q—›à¤ÖÁ=† .“U½+À0ú¸°lÚðJ—rxjîbFµˆqqXnÆlÎ2Î ÅÈRåË°’“çâJáj­J§ª¥×”x¸¸d„*®þ_p]¶© 5c©~Ʀv¨&lj ²6uq\7å_æå«UTG<É;R ™÷­ªÈ‰Î•ìs÷)¨øÐÞEC`Ø~„Dõ¯]ø$ÆžJŠøì¶lŒ¬‘p1¿Nînßݧ~ùQw®4Ö+X^ºsÉcž¶xjM¢À{?ywÅŸåî¸s¼1îúSI„–yÿžìÀ“:ZÛ-4®kch½o†^o¿0>Ýh€OçÒÏÛ+
+Ô5>‡Ú;œnƒ£žó\'¿b½ÍmàzlÑ’÷Xgp ?jyÁ¨Ç¸‹öÌ€³n!2 wU­böåÞÝJ°Ð¹hÚ— _,ÎÃíSŸ'Ëâؘ^žˆ§>Ìë†,Íê…»&$NšÒé»Ö¥º|×"•½kfU5/¿¹XŘd|ªb 8W1z¬ïåÚj# —-‹ºÊ¸DMYWþyíÚ¨ÀÌz }Ϋ\ù7ãÑe´À í/”_
+Är[,o„`Žuo(BœŠB«òqä†QM|ÕþxÓ@H¨¦ÏÔ»T—1©"¦ë
+"¸b
endobj
-2401 0 obj <<
+2442 0 obj <<
/Type /Page
-/Contents 2402 0 R
-/Resources 2400 0 R
+/Contents 2443 0 R
+/Resources 2441 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2375 0 R
->> endobj
-2403 0 obj <<
-/D [2401 0 R /XYZ 85.0394 794.5015 null]
+/Parent 2431 0 R
>> endobj
-2404 0 obj <<
-/D [2401 0 R /XYZ 85.0394 147.4749 null]
+2444 0 obj <<
+/D [2442 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2400 0 obj <<
-/Font << /F37 1026 0 R /F48 1238 0 R /F22 961 0 R /F53 1313 0 R /F41 1218 0 R /F21 938 0 R >>
+2441 0 obj <<
+/Font << /F37 1038 0 R /F48 1253 0 R /F22 973 0 R /F53 1328 0 R /F41 1233 0 R /F21 950 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2407 0 obj <<
-/Length 2054
+2447 0 obj <<
+/Length 2543
/Filter /FlateDecode
>>
stream
-xÚ¥XKsÛ8¾ûWè°UK×D0^|ÍMŽíŒ§2Ž7rjwËñ&!‹ŠTDÊŠvkþût£Z²¨r¶¶x Ðh6ýøºA1âðˆQ±(•é(N5 ¹Gùâ„ž`íÉp<cÏ4Þå:¿;9»Rñ(ei$£ÑÝlGVÂx’ˆÑ]qœ3ÉNA~û4½;Ë0’<˜ÜÞ^Þ\\ÿ çx€ƒóàÉÍ—ÉG¢Ýž¦2˜|¸œž>Üý~ry×k³«±à
-Uù~rÿÀG(þû g*MÂÑ&œ‰4•£Å‰ µRžRLOþÑ ÜYµŸZ@p&U$L å ”EJ*k‚ œHEÁSÕ<fŽã 5›½¿¯ÍjëHË®lêöÎÒ`3/ó¹ûhÞ¬«‚˜ ½³å²*MA ]ãˆUõ"µ4^TžÕ~½mè /¦]“p„âap77­!§58,1‚¥a(í±œÊŠ ¯2Nd°X·‘—«S‘&7…¡¥nnhå+çrEl@]/+GGs ©Î´VBy•µ­wÛ%‘Ã+áÈSÙ“ŸeuAbŽ©ÇÉÛRë A[éTFBÞ,V0R«²6ÖVI0©·ÄÐûÖ½;Qßé_yÈÍÜ,;ZDé ÇÙ•;Q$“”q!CPµúå¾nòEAœûñaFÊ1ÒV°‡p*gîî ͳY­Ê¢0µ=ýX©”É(I¼(e·”‚½ìYÆíÒä%º-'*E0 l{6G¢#£®š‘ÍlžþuàÄàˆ„2¦(ŸNÇ Â/ßW4Øl6¬lsÖ¬ÜJ†fÇÁø½…Œ‡GÐtÍoÅÕ <4c¿=…$Úë
-
-ÕîN ïa`0t¥€P½Î$ÌU4¹´kˆÚͳn ˜ɤ?Α`N<Ë’ihPÖeWړäÇ] wô^d…ã$_ÁÀdXÙpDÎKêDcñAjl‹D½/ÒSD!H—ûq8Ï0e•|UMNÕö%â•îMnÇC&ö¨Q†’LŠ— ñ5’ÒdµÓ㘹!¢ÞÂHÏÈ‹/+wºéh°\•uç·14è=ðêÈ›¹±VÖdšæ›SRÎÚTꘅ±ŠömJ²º1›ð}MHF+­¹üŸ³É[¬×c:IÍd‚ÈÜ)©å½¾¸!¦_no?}> ¡qwÀ‘: új6à”” ù6ž«$õ.§hÓЈ
-
-úî¤(Ûe•m‰Z7õØù8bÐdžû.žLß__cŠ©^ ߀µlÀR‚\@ä¼e«4â>ƨÀAÔf©¶´]ÞÔ€ÿkÉòy¶Êr0-š:oŠ²~¢µ…‡õÑÌ( ݼ5µý”ÀBrDÞxÿÔˆQêÂr[Q$ØÚ%Á… x ´fõŒ:á¸qog^PDODÚ“·Äât§®£l›L ÜÉ„ú˨&^ÏhaÛ¬ÿ^sUÚâÞ«ïõª&6°ˆíIM]˜¡Ê1ûý-‚^) $XãAq •³¶©±ZÀ-¡0wMKœÃª€N€Ç}‡Š{¿º¦I)›†)´¨ÓØØýÄEM²4ntðš6î%ŽwEÚ;Ø~瀞‰Ž_vF/®§“ó—C
-q‚Ž:#ª3(8& ¡›z…¸~'¶²}Õl[,¨)З ù&~i¥½ÇV§I°®Û#p ä:öpKš]]¤Ëøaë¾ ¯g¦ËÏV¦mªg>ëÿ Wüí¿¿}úãòÏ3Š®ò! øÞÎÓËK:ýäãôÓÛ
-$&;Ä¢n[“¿™í“©wí lÇv4bº7Þç«÷‚«p¨/HXö|ÃÖ•€ :M÷ŽxþåÃôí“AÜyœ³÷³Ý‰ƒØGw 뚆 {W:vGëUÔLé¨7?D€Gs&O!&àþ„¦õUp¿Q©¶7ˆÅÇ®UQ$’Þ1´ùW)c]øÎÂ÷ÿ8^weUvÛŸˆŒmÝ,[È’Wà»Æ D[œ@o¼¿t0eˆ%jø‹…€ÜÜ‘pˆ4ýßÇôrH¼lÞ³÷EU¯Ú»Íóƒ'åC-§ÂËö%Õþð¼Ÿ0 Ž–©x3 P…,‰B…uÑtGåÅékŸß¸^<šÁ‹cĤÔâµÄîM‰ø_gHCwr®_Ëûç›ò6YÙ•§zyt5KÁÑë¶è~¼Øe_¡Y•= í¢™Ž“+è~¹u0–F-Áñp:üA9©¼OŽÿû?èËo^­n"‡qÊ8dðqä•ÂC
-•¨îÿ˜êþ:šendstream
+xÚ¥YKsÛ8¾ûWè°U+W"/¾ææÄJFSŽã‰ìÚÝÊä@‘Å
+E*"eÇ»µÿ}»Ñ
+nYÚUÝ"u6Az–:éf/}Y`ŒA*ŤmãV|¬§i»=È@"d\&ÁaðYUzß¼&l‘¨w‡¼Ü>ƒ0âM€9xà\ X´h¨•¥Á…U86¨²5a z&ŒHÜ¡³ msjg%!®ÅÞΩõºû—¶!7ܸˆÝ‘S'OžøP仴ľ촱C^dã$&ÈMÚ€Ò<—ü vnšl[,Lî Ê#ˆzZ4]ÔKÈî %æˆp=$èÙc‡ñ´zêàkÁFÓ‚¤jN¼ÝÑà°=lìO©h?â–]±¦é ×/ëú›q“w7Ï¢LúÓCùÓíéÕAû´1GÉÊ´9†Õn?nUêg³ªw¥›æÓiê‘nYëã)GÑôŒ»û²^йGäHDcã·BèŲ`M Œxnv’ ˜¬`ðÝ †&¯±,÷«‚ÿº¥2B!Ž75ÍðËxWfè¦FëƇ“úùCP\ôð
+(78üu˜Ñüv¹ª†‹•þöàhx`Pë@k ûç<~© #8žÌ¹.,i¾»Æ8ÊÒúI½¦!.ê#:. àxMßuúÍSVäh®‹au·i~ó1¥ ^\ÿ‹þ pãz;p0 À
+
+#^¤ƒ’DƒDÜCèÕ t%Ô†\t2Ób.+ É%D»š¨6_‚9–,ˆÕ euŒÉó8ÿ 5 5Šªh «9÷qè-}×iî8鬠a\é»ÃÇŠ4ÖtUP<²I¢:\’j0`ÒåaÔ‚;9f,‹ü”uFÙvx¥;“ÛöÉ…UUy›?0° {ñ9œÒ¤•“ã9s¢!0¼;À=}-úX”N‘ªn©±ÙUë·1ÔèNàHewijõ¦©¿9!Áå¬M%Ü¿ƒH…‡
+È]”ö*-}†ãY›[{:›ÛŽÍÂ0
+8ÁI¹£.‰ê Š7Ä
+:¾aûJˆ¡:Iu|{÷aþröèuÿ.à­ßqQvøñ#µ{ªXÿäýƒ=÷ÿ‘
+þé3ðÐÍ;uþòKûÎ4&ØX¿˜Ë(`09ôB¡-„–§À…X…r@öÿSÛendstream
endobj
-2406 0 obj <<
+2446 0 obj <<
/Type /Page
-/Contents 2407 0 R
-/Resources 2405 0 R
+/Contents 2447 0 R
+/Resources 2445 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2416 0 R
+/Parent 2431 0 R
>> endobj
-2408 0 obj <<
-/D [2406 0 R /XYZ 56.6929 794.5015 null]
+2448 0 obj <<
+/D [2446 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2409 0 obj <<
-/D [2406 0 R /XYZ 56.6929 562.0317 null]
+2449 0 obj <<
+/D [2446 0 R /XYZ 56.6929 663.9757 null]
>> endobj
-2410 0 obj <<
-/D [2406 0 R /XYZ 56.6929 444.3852 null]
+2450 0 obj <<
+/D [2446 0 R /XYZ 56.6929 361.3763 null]
>> endobj
-2411 0 obj <<
-/D [2406 0 R /XYZ 56.6929 354.5963 null]
+2451 0 obj <<
+/D [2446 0 R /XYZ 56.6929 244.0091 null]
>> endobj
-2412 0 obj <<
-/D [2406 0 R /XYZ 56.6929 284.7704 null]
+2452 0 obj <<
+/D [2446 0 R /XYZ 56.6929 154.5575 null]
+>> endobj
+2453 0 obj <<
+/D [2446 0 R /XYZ 56.6929 85.0109 null]
+>> endobj
+2445 0 obj <<
+/Font << /F37 1038 0 R /F48 1253 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F53 1328 0 R /F39 1173 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+2456 0 obj <<
+/Length 3447
+/Filter /FlateDecode
+>>
+stream
+xÚ¥Ërã6òî¯ðQ®qðàóèÌL§²Ž×v6ٚ̒ ‹ŠÔˆ¤¼Î×o7º‘%û€fl4ý†äµ€yFÐYxda ]/·WâúÞ}w%yÎÜMš÷g}ó|õþ[\gA«øúyÝ£•"MåõóêóìöááÓýÇ»_oæ*³o‚›y$Äì_·÷?ßþH¸‡›LÍn¿ûô„±ÂI
+§ÅböýOOÏ7_ž¸úôì¹és,…FV¾^}þ"®WÀøW"ÐY]¿Âƒd–©ëíUé
+µv˜òêéêßž`ï­ýtJ‘Nƒ(UÉ„”¼–a ÃX deJee
+-‡pÙÌþË”ÖϨ,’CåÿøééÃãÝÃóÝO÷þ£¡ñ@tªŽ:yj¢J‚í»ó;šƒ‡™å44ÅvW„So’öźÞ°3{€·EõBÏÖš knÀªLÏîZ"âèWðM^–L­kÌŠ ¶¦qYW þ%Ô ßß=0Ÿ«ÕþF¦3Ó4¦¡“äýð9’ßÉ+ ¯âtv(–†!³oràNÇzöËÆT„­jsKõ¥Ûš
+ŒÆ¢pÇvܵE]5ýy–d2{)¦z7qFNå΄G¹“Øí ¿tNC³©Q$ì¶Û|ÿFëÖkBnþ²†·°e’G‚ÁLª¡f—EeÈÕŽ·Š(+.
+õ–Yu<³ŒÁêЄ½ƒ2Ù§Vá,ïZ÷E›·UÊyŸèhÕˆ&þ`Ç î+Pˆ1Ïþ‰Ó×äÖŽôÂ!=òž.~BUŽ!Eì*üfz8o,T®û.ŸCºÏ6XC×uçÌeí–÷f´Gì¯ø‘ÌÇW`õT…ÙXMµ´^uî ­É]à28Ää„°é-hy7röFOV¢0öŠ¶¡
+I$xÜ'µÝP‡µ`¤`»se3\fah¤¼¹Ï°Ø€ûÞ4E½b÷.„‚@ŠQ2øa“×Meøˆˆ; r8¬; ,Më“hÈ‹žÝÁù4cDÌùæ»{n€#¿«Z³‡•Ñ›Oö¬ 3ûEÝXòtí®k &’y›ÊìsŽm ªêD
+éEy9ïx3•zoC…A”œóŽ:ˆ!^8­[M‡ŠHÆNë¦êe< Åâ ‘'ñæ(T…€Îšx~­Yd¾d‡ž&½8ÉQBÃq–Hb˜ “Ù&Go¤Â”ÐÊp;rv‡be
+«{Ä ;QD‹8nqÒž2wqpwÿL®b{Züù1ÿâü=ˆR µ«à²ãñÛ2cú³Pì⯫&:çP“ÛGºÅø—ȼYºô8åÒIt’s… 1ÌjB—OŠÊi*ÀÙž5O³É-à(YÆLÄ•µ£ >
+B_gœOൟC95Òky©šž¼4”à Ä;:ò½ËP)w­Í¼3é¤1T^ÞCˆ;;ÄàO>³Ç(Ιê%â8¡kÈwØ9†
+6š3¹{Iâovçû3ÚšºGi:{rRZ `vŽ!Œ³÷ÄøÖy€Ç„ û}Äô6éj*E‹ ã“€Ø>ž*!Ýo„˜-0 #Êz=áÎIH¯¾
+¼R‰;åèâ]xù¾4„D¦×#G¢Ûb[,Y&V)XÈ j]—Zù±<© *’ÞÅ6Ê CÊ¢‘ŠÚh’¡~q$x•}jÈ€Æ%+†›GèTÌÌÿv©Ý·–iªaÜèd›á¬vc{
+endobj
+2455 0 obj <<
+/Type /Page
+/Contents 2456 0 R
+/Resources 2454 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2431 0 R
+>> endobj
+2457 0 obj <<
+/D [2455 0 R /XYZ 85.0394 794.5015 null]
>> endobj
850 0 obj <<
-/D [2406 0 R /XYZ 56.6929 241.0985 null]
+/D [2455 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2413 0 obj <<
-/D [2406 0 R /XYZ 56.6929 206.0104 null]
+2458 0 obj <<
+/D [2455 0 R /XYZ 85.0394 747.9963 null]
>> endobj
-2414 0 obj <<
-/D [2406 0 R /XYZ 56.6929 168.371 null]
+2459 0 obj <<
+/D [2455 0 R /XYZ 85.0394 712.4426 null]
>> endobj
-2415 0 obj <<
-/D [2406 0 R /XYZ 56.6929 95.6233 null]
+2460 0 obj <<
+/D [2455 0 R /XYZ 85.0394 646.5299 null]
>> endobj
-2405 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F53 1313 0 R /F39 1161 0 R >>
+2461 0 obj <<
+/D [2455 0 R /XYZ 85.0394 574.5487 null]
+>> endobj
+2454 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2419 0 obj <<
-/Length 4190
+2464 0 obj <<
+/Length 2714
/Filter /FlateDecode
>>
stream
-xÚÍËrã6òî¯ðm媃I€[µgf’x7qfÇÎ&[I´DY¬‘HHÙq¾~»Ñ ð!j4S¹¬}@³ F¿ÉKÿòÒ&‘ÐY|i²8J„L.Û qùï¾½Ügî;Íû½¾¾¿øêm.³(KUzy¿êe#a­¼¼_þ:»~÷îíí››_®æ*³¯£«y"Äì‡ëÛŸ®¿'Ü»«LÍ®¿}{‡©ÂN
-»¥böÝw÷W¿ßÿóâí} ¦O±Iùxñëïâr „ÿóBD:³Éå3<ˆHf™ºÜ^ĉŽ’XkÙ\Ü]ü; Ø{ë>â@¢m”Xe&X ä¥”Q–$jÀƒ$‹R­´ãÁ›·w¯ßß¼»¿ùñWã¾éØ&.çÊDJã:¯ë¦å^ª×KÉHÇ:cŸ²¹šÃJf95M¹Ým
-„íìЖ›²}¡«zOÀ®Ø¼-«Gz~s{GÀ¦®?v ð[ezvÓÒ ~ü
-¾É7íÐK‚ÚšÚE]={þ¨Ê·E3|óŽé\.÷WÒΊ¦.°8X2­gxËÊ+_¥vöT.
-†Š}“u:Õ³Ÿ×EEت¦6w£>¶EÕ6„»v×–uÕôû¹!Íì±|*ªWÒ‰8‰™É§6BÁ'~'vû2LSÓ¬kd‰Ûm¾¡yë!KßQÃ[X2ñàÒHå9BÚ³)«‚´d¼TD9vÀkˆÚD…KfQlX¸p¦Ö IO¸”³v]°¬·y‰œ—’à×yKPø ¦>Üe %áÃΉ˜q"†ˆE^ošÑw¹Ÿ¶m‹å|Y,JBÂݼ{Š©sO¤è•ÛøîëE½©«9ó––7µe±)·e‹ôi™âÀ)BIàW€Ñz†kÇ7Ïër±¦î‹¼)&$HÅ*;+@‰TžÛÏåfCc>¼Ð4Ëb•6-!Yqé!§DjFAxRb‚Ê#@û3ZÑ”ˆ€€ÄQ˃šbSLЯ³HJ#{Ò¢ІLR†e÷Ëa{RKÏDèê?-Jµ=áœÐ!’ ¡š_¡1qcöwÞuXü–Á¯óvbÏt&;9³góXƒ·1©ª'¨úaÃJøñP8M°¬š¶È½r®¨%uÀÓä^îû8ÖëMÙ8¹¤¡ˆšx`¨t ŽŒhþªh_틦Þ<E`‘WôÃÓXjþ "µÐZEÚ:Åp&º—÷ëbbJè!Sã¹4Ï'æqÇÁ0þ&®Ù7R¼*^iññP>å'ŽGµgGÛ:_å7AP
-V„%ÍŸÎRÔ' ˜Î¼ù€‹…U‘ÔRQeÙÄø <õÛüƒ7ÚG¢¤áeÇ}®oÿ{%Á ùM1Ó8³C»M®OK}‚q
-; á 3ãõ3@ÌŒGÌÀ!B‹þ}Ê/§…Òê¬U‹m,GVMÏr0âÛ]ËÄ×تٲlv›ü¥[‘î~¼&€Ô{Q»vÉÔ±aÓ³?몘0c
-"îypÊÓX‹ñkY¹ê-“êifƒÖ Ö>´Œ^?µŠgù¡w_¶y Q¡¼õI:­F4Ñ
-íb“7Í”IÜnš¼×m(CYdm°…¸‰‚å–L•‹lpš‡‚ZŠ›û‡ ¸ïŠ¦¬—LàÞƒId¥ƒ¯×yÝToQç@v‡õÁ‹¢ ŽA4ÄE÷~ãB˜1ÌÛæ›[jÑßTm±‡™Ñš6›ìÓœ +öuㆇ8àÐî-Á4$DÞEUìsömEu"„‚ð"I‚ˆœ6¼™²ÁÚPb˜SÖQG)ø /uËiW‘ÈÔKÝ~JraJ¤gü "üMÇ…ˆöš7h~®™e!e‡žšžŸd/¡Àà‹4åO0$º™ØÌÖ9Z#[BÇÀíÈØ=•K·€!mÆNùâÃsÌ-¾ƒädFí²IrPs- § W<•õ¡¡QÐ6• m°†W„™ÞÄà­R}f?b"œÀJ˜·y.ÛÅš–
-p˺ëæ‚[À‘ r8ô >ð >­EðI‡<ãt
-"¯@îÇ.Äï ð|ðw>sÛ(Ž™êâØáÐíp}
-*b‚ ¤ •EÜp“y~b`wC©è‹óüWdu…)%5劦tEÔ ¢¸h¦IˆÆ†ì`Š•eGe}иàæÓ³[*ãKg·´*žÉÜ[–„º Ä “GcÇGZ†/ ½á4 1U7 Ù]73oÊ’¥‚¶)hŽzïç£)|¶7J†HקK2ã‚ŽŸcXÔ uS„K6¸¼€“¥Ð‹G±´ƒÉp¬Žíh€B¾ÂôdO¤ÅjöÓ¬°ÅÞ7´û²hÁz¦\~Í5šSx¤Œ
-Ó]Ví5À;R²ä®O%+͉Ø=K#c¬íùþ„ô‡î‰µ³;_(¥ J&§sá œ0OŒo½xÿ†¿AÔM˜Þ"}N¥ i‘qzä›2øS%$¡„˜= F”³zÂï“A|¤€‰Ä‚|cÏ\u’/—®¸s¥Ø'10i(ÊÃdÛ"¤äL%üY BI^„À¸(ŸÈ/ƒ2º4æ;t\÷†4®
-.>ÖWl6O“ù,SÅ:þœ|§3üóØÊS1 ‰„ 锌‰®zh¥wÊÐ¥ ]|þ¼4†@¦W#ÇA·å¶\0OœPðP@ÌX:W#è¸ÔñùIUPazSX(ƒ)KF"êj &Cù å0x”}¬È€Æ%-†Gh+fÅ;ôÔþ[G4´hþ4²Í°W»v5€£Ñ94¶½ê*¢ÍÁ±BZuƒÌuŸoFYAMGfÎ’w§H“ÉÁ×/¤'l§êüƒêLÉó~+ uþCC"¦à.ÆÓðìG,s¥4>%¥x¤£UWºŸÎf­•c1ŨváÀ’} ¥N€ÈÙF¼f!”ªpƒk¦ÔÑL!·Íb5ܧ÷$þ`Ka,“2œé™˜ô0£©°? ä
-úÜ{°Ÿtˆžø„óv|ObññP1ÂCøöèZ¸Ø[_U9*÷wE®ó^ÿòÍûîÄÎÏS4mó%©>ì¢ )Ú<žÞÅ4‘GÕ=C‘¦«aOÚIžP‘†é¾¬I"¯•ñù4 ø.éÎç
-«Ò£3XË $´t<¢,YPÄ:L¾
-ÙcUþIñw´çföúöú‡·¯UA²$‹@d4Š†ï~¼vÕìîæ[†þõ–N€Ý£œ¡òÈþОˆÄß}²ŠÒvh)Ê&[®J
-ì`WAŠõÉóõ82ÒþÀ˜Ï9Ì7ÏÜÌÞ¶óMŒŒ® N“:å“ÄÔgÚ_ó€Íu2±@0°_¹šT‡ÉÙ’›ê’o:æ¤ËHÐŒoi!Ž,«ë4¸«Tz²ézVÿ–N{ÖJf†Nb‡÷ûW³¦nòD&3çMg,Âù²×/‹op…}ŽRcpõ7+z›@
-‰PÍ}n@© rüƒva¢ ±}qM›ï9îîþ@™3}]}9O!£…ìX"B¾gøzPТZ†C1ÿ8ú|ãOù7›úyü]Wï
-DrÐYúûé8ÆEôȵî9'ÝȇH¥ã$5öäq2U*tìJ, ÕÔ>çÎh¾P@N WNœq‚Gbˆ¦š³CÔUK–iC'vbÂ×<Ítþ”¨È¤q8`ûùÄ9‹íÎY&ñUfÂ0ϧ†!»³{i' k’fŸAÛ‘ÖñÉ¿T‚“L?óVÜHi‹ðæäÊŸ¤‹t˜™„Ã{ì=mtÀNr§”¯rŠ—$Ùtõ)Ñ’u×*?gT2ez¶aóäjkA3;ê•Pݺ\©ú‰ÌÃ4¿¦kn ÿÉgêù.—Ö'ë¡I¤cm?%%˜EE‰µ£"]x•r(`Nß겑LSs>ÛSbxW/V¨6+*gS8`¼jÚÔG¸UáúäôÜé*ß,ˆeÆZXë¡E„ã¡Óv;ÐþÆSi8¤KÝÆ8Ù‰ⵑ¸ú”ú“EE@zp~ü„q\ó5
-¾NQü­ñ—ÿ(·‡-_às¤þ*o‡Q¶ýô`“«¶»€qâ§ÏÍôÔDømÂ_þ™D÷+Ø
-Ëendstream
+xÚíYAwÛ8¾çWø6Î{1+’"%í{{HwÖ3iš­3îëô X²£Yr-9™Ì¯€ Yf’ÎÎe›L‚À€â£
+HÕ–gAM#c?ø]€‚Ó2 äØ´é¶-ª•}I­~Õn}“oÉ:Z
+9aRE]§½MÞ
+9aqìLǺÐéÜ
+ðViÐOŸÎÏf3ºë蔀±æ±–<%×—îW:€t´¥½)‚„
+þ@ë}¼?ŸÎÏ>ή®g.=9§CåÐâ‡pAö~ú]®b®Ll àÖÞ·]+Á¬¹†Éód"}^¬*Ó˜ÂÂÿùœ*góŽ¥;ÈEÚE]ߥM‘Ùµ>á‡d¨Ã3i çÔÜ+ì äþdKó^s¹³#ûÔîª{pIgÙ¸k
+{mñÌm3{î7¸ ~íðDiÐëßþøýô•Xâ]™÷»¶ˆƒ—µS
+íÅÃð@u÷™üP÷?¦ù#½endstream
endobj
-2418 0 obj <<
+2463 0 obj <<
/Type /Page
-/Contents 2419 0 R
-/Resources 2417 0 R
+/Contents 2464 0 R
+/Resources 2462 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2416 0 R
+/Parent 2473 0 R
>> endobj
-2420 0 obj <<
-/D [2418 0 R /XYZ 85.0394 794.5015 null]
+2465 0 obj <<
+/D [2463 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2421 0 obj <<
-/D [2418 0 R /XYZ 85.0394 751.6872 null]
+2466 0 obj <<
+/D [2463 0 R /XYZ 56.6929 523.9144 null]
>> endobj
-2417 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F53 1313 0 R /F41 1218 0 R >>
+2467 0 obj <<
+/D [2463 0 R /XYZ 56.6929 414.7474 null]
+>> endobj
+2468 0 obj <<
+/D [2463 0 R /XYZ 56.6929 353.4012 null]
+>> endobj
+854 0 obj <<
+/D [2463 0 R /XYZ 56.6929 315.6213 null]
+>> endobj
+2469 0 obj <<
+/D [2463 0 R /XYZ 56.6929 283.1208 null]
+>> endobj
+2470 0 obj <<
+/D [2463 0 R /XYZ 56.6929 248.0689 null]
+>> endobj
+2471 0 obj <<
+/D [2463 0 R /XYZ 56.6929 183.8008 null]
+>> endobj
+2472 0 obj <<
+/D [2463 0 R /XYZ 56.6929 95.2626 null]
+>> endobj
+2462 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F21 950 0 R /F53 1328 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2424 0 obj <<
-/Length 2037
+2476 0 obj <<
+/Length 2274
/Filter /FlateDecode
>>
stream
-xÚµËrÛ8ò®¯Ðm¥ª!‚A‚G%–³šÉØ^SÙÚ­L´I¬¡H I9ãýúm<H‘,';µ¥ƒ€F³»Ñï™bø‘)PÑhF>â˜ðéæ0ÁÓœ}œ‹ãµH^ëýzòî–…ÓE ¦ëm–@X2]§_fïCs €g7wq¼üàÝÄ·÷¿þ²ü÷Ü#¡ÀÑlñð°¼»YýkîQŽ°1žýº¸û¼ød`óˆÎ—ñüëúçÉrÝIÖ—ž`¦Äúcòå+ž¦p‰Ÿ'±Hðé7Ø`D¢ˆNŸ3Ä}ÆZH>‰'ÿèöNõ§NmŒ( ¨C”ºÔÁ#0Ê´:Ö{©.ñîÖ'=T
-}?ú
-Ç« Ê€áˆS*,Jyl²²˜{Œ‹Y#ó¼ý¢O® Ø/öeÝ$õ9S1¿%[”‹u€„†§) ÛZ©
-š¥WüDˆaç—Q|äû¼5Ü&)Z†æÿTËÔ^¦´bÊft»ƒ<”Ê^?ÙYp*ŸN»]VìÌö7ŒY²³ÆYßwX>´ŽQÉMY¥QG"àÜ¢ýä äƒ§fŒ(2±°óç¤H„@qŒ‡-¥¦J6.Jà0B´ªC]ètî³z,b( Â.é3l¢wusg”~x¸×¶vÐS;lRàjëˆN1…ÅEpå$àØŒ´H‰rO‚¥²6øÚÓ)Ë4a¡€FH
-È¡'‚1Š|ö–¦(ÂA—¢’ãQ‡by¬²Òã‹á±) ̦¶»}îÑèH…­,6ejœv:Î"šÕ“Ü–&ÖÍ^¥Bõ©MG aEÁ^Ûø@˜Ad3äɺ1
-òÌY‰x³Šï?-Îês„}ŸÚ«Èâ93f+²hŒžðܧ\ªfÂp½·ÊÓ:×ú´:×›¬6§à'ê£ÔB·j
-†‰84"ÁÐ1[NÃ
-Ø‹o{È5Žì- ¡o§/Á»*VÍÅìTÔît ™ù!‡éövõÉô|#…òë;ÙlÞUºî"ˆñ­‹RŽ—Ks¿Å§øþí žf;•L‰J“¶mPÙ U@¡€½[ùˆùAËÓ§ˆ ÆÛNZ^ ½mZÔµÜxi½­ÊÃïò¥(”AÈ}§²[0Ð}$Œ\gB&ð1Sµ) ÍÊ´Ýv›ÿÇGó¿“…¬ÓJš^¡Ì¿G{/Ey¬³z‚Œ (Ð þ!ˆ{˜€£ˆrU¡Ý½µú\´Oâ2âÚÖºÃ)Ã*"
-9ôx¹«/WBçÁ_[Š¤[Ñn•8¸¨xó»¾&Éw®Ä&`„ÀÁ˜Eî 7ì£liº¤8D³AÛ,—¯Z ÙÀØÁb=W,Öb½n1~PÏ3˜È:;ý¢y[Ñt¶ê”/‰rZyNþßÖûâÕÝjã ­&,„9ó‡¹}“'uýýn½}SêÖ…Æô`ÒTã÷ˆÞâëµ 8
-9ãÿK‚ßçô8¬$TMç„Œ*ÉÍ2þð¸zX¯îïÕlœíéy”†G&$ô0~jŽ'ÝVRnÛ#Ìnd.wmn…ƒ8Ûº±ƒµª7±mº·Oz±‘Ë@7¦ÕLÏ_>>¶u>M,߶‹²xºi…ãÇÛÀ.ÌÊNNSÏ^bа|(>Ç‘-uº‰LŽ»ìYÚ’úQ2Õ£*øjí¸×F¸|ɱi„0¸"ºžkúXæáÅ•k:,=D“1Ë
- ='ùIœrë¬É!
-ê¼áø55D$¤m¥=œZÞO–UYœé
+xÚ­YÛrÛ8}÷Wèm骈ƒ+/óæqœYÏdíl¤ÌÌV’˜¤,V(R+Rv”¯ß @Š–«v·R&pЗƒnšÎü£³D†„§b§"”„ÊY¶¹ ³G˜ûõ‚Z¹SšûZ¿,/~zÇãY¦‹fË•·V’$¡³eþ9¸úðáæîíí_—s&IðKx9—„ÿ¸ºûtõe.S\ýz³¸œÓD0­$´ZD‚·w‹ÅÍõüúþ› qùuùÛÅͲ惧„kTÿ¾øü•Ìr8Ão$äi"gÏð@Bš¦l¶¹’‡Rpî$ÕÅââŸý‚Þ¬yuÊ’'¡LX<a Fg”†©”l`™†gܘãþÃòöþnqr ‹ ’i7X¥¹¯å6žpƒÓÒûÎWzËŸÞIéi®„KX\k¬Êªâ4è`³¸z­ `ÌÛŽ2FTDCd·+ƒ”
+
+ÿ(4E’$#„£eY&,Š¬RÙârí¶ÈÊ/„°"s9ç„ݺ¨qFzÀ‚M] È½¶»¤IP¨ŸVæ±Ù v·VÊõº•}³kpVËê|°×üûÍ¿ü¥³Æüæ-„¸à‰=> ê¦{£‡i"´Ym(Á©,vÈ\Z’ãÒ0-Â<_±Ç…‘Â7ð¡jšoEŽãýˉí—¢6Š“ÇœŸZ_ëå¨íµLÔV“QK™Œ­»óf£
+`(/„ |Œ Àþ…H’ÀÔ²ŠÕ™Ç¢~a²-kMDÞôf2Äzõiù÷û¯ƒ¼­»bWî¸8ÀM±±.»nê¶Ùuå~sÜO„\Dn?ZŒi
+U8ä„ô ³æ©Ø©ÇÂQ,B*%b»S›bܱ4NØ€KÝBpyŒ#ñ®xÙw{¿Fñ«áû½û•Wä¼nÍÅ¡n¶mÙŽS)¼ª{I‹É™ÔÄY2ðV09&¦¸À)MšG§ûçùï– ø€ÒS TÚSD¹+²®Ù&jh)ˆIj5¿ºUW«B“DRž”Ûƒõ€ÊSÝlÖË_]ϹPë/—易¦a"d4^zóêÒõýܺ¢€²d¼înb]ˆJ²A QêœzRÕÔâ@–Œœ€Î^ õÁLŒE¹Ïì£ R $LÅhýÚ×i¦#º+Á†ñþöfqýñÖtŸô<Ís~Æ2;ŽB"RwP;^ BºNIØâQ‹°•G!pc‹#L^˜VøüX>™F$¶YáH§5ÔϺîÕ­i7^«'ûRWnL)¬¥›¢S¹êÀú 
+³ þÔýÚÕà8»òÑKð®gJ³ƒ]JÕRh¢áòìËc<¯Ël­‡b_Yi¦ ÿ¡5Þ‡ þ~ M¼8©PÒv
+êýæahòc¤]£ùbÃ^ZÕD…µ°Í<a‡ emh^¨›]Ù­78“[b²/ÁïLŒÆ"t»9¤ªßc‡y!i
+?ÌÑÈò
endobj
-2423 0 obj <<
+2475 0 obj <<
/Type /Page
-/Contents 2424 0 R
-/Resources 2422 0 R
+/Contents 2476 0 R
+/Resources 2474 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2416 0 R
+/Parent 2473 0 R
>> endobj
-2425 0 obj <<
-/D [2423 0 R /XYZ 56.6929 794.5015 null]
+2477 0 obj <<
+/D [2475 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2426 0 obj <<
-/D [2423 0 R /XYZ 56.6929 684.0716 null]
+2478 0 obj <<
+/D [2475 0 R /XYZ 85.0394 751.93 null]
>> endobj
-2427 0 obj <<
-/D [2423 0 R /XYZ 56.6929 572.8605 null]
+2479 0 obj <<
+/D [2475 0 R /XYZ 85.0394 546.4203 null]
>> endobj
-2428 0 obj <<
-/D [2423 0 R /XYZ 56.6929 509.4701 null]
+2480 0 obj <<
+/D [2475 0 R /XYZ 85.0394 481.4562 null]
>> endobj
-854 0 obj <<
-/D [2423 0 R /XYZ 56.6929 470.2699 null]
+858 0 obj <<
+/D [2475 0 R /XYZ 85.0394 441.1625 null]
>> endobj
-2429 0 obj <<
-/D [2423 0 R /XYZ 56.6929 433.5878 null]
+2481 0 obj <<
+/D [2475 0 R /XYZ 85.0394 404.0002 null]
>> endobj
-2430 0 obj <<
-/D [2423 0 R /XYZ 56.6929 401.47 null]
+2482 0 obj <<
+/D [2475 0 R /XYZ 85.0394 371.4021 null]
>> endobj
-2431 0 obj <<
-/D [2423 0 R /XYZ 56.6929 335.1577 null]
+2483 0 obj <<
+/D [2475 0 R /XYZ 85.0394 303.5162 null]
>> endobj
-2432 0 obj <<
-/D [2423 0 R /XYZ 56.6929 244.1508 null]
+2484 0 obj <<
+/D [2475 0 R /XYZ 85.0394 229.5618 null]
>> endobj
-2433 0 obj <<
-/D [2423 0 R /XYZ 56.6929 168.8052 null]
+2474 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-2422 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F39 1161 0 R /F53 1313 0 R /F55 1321 0 R >>
+2487 0 obj <<
+/Length 2682
+/Filter /FlateDecode
+>>
+stream
+xÚíZÍ—Û6¿Ï_á[4ïŬHJ¤´=¥í´M›M²™é~¼¶Ù–Çz‘¥©%gêþõ  -Ù²»_‡=ôÍÁ
++¥™Yi…ÍlvA3 ͇R^ñ„¼ê¯Qåg_§é@ìÊ´ÉQb]Õå©Y9,53Ùu³¼Ð„Yj¨,ÊÀ¡™õz .V&*Ⱥd¸i„4i~bÞÉ¬Ê )ª:š®{*—ÕOq¬ÊÕK hõ›²AžÅ ýÖ6<¢×l´»•YT+¢®Ýc»¥§~Sô$…óÖåç8orœ­.œøcÙõDxxxCòE³òS°,DÂ÷wÿ .ŠÁ²À»©ÈóÜÎæt„(zhR|M›hUöån[5功+â.ûú@”É:e}:¬_)úÂíHÎfi2ë|÷•‚ ¶qÆ;;ßNl¾L„ŽÃæã„^Ì…’&L³úÝiÚ§¾j›Žímé·i{”´zX³¼´ÏiC•ME–g~CÍÞPN¡½Á²Ýni+ࡆÍ—bÓ˜X%õõØJ]ŽÍ å6åû‰Ø”‰ÂáOƒ—ÛÝáÔ6©§±ºn\š°nä•‹XCB™w_öà È–´i2Ï'mr¼ª!Öó¦Znˆô±<ð‹Ë‚¹‹’ëv߬ Õ«\G_•ëb_“ŽÌ¹u¤k¹ß‘²¦'Îs»ûX5ô0¶DJ]öŸ²Bc®¸î¿Ôÿy©alŒý—cïÀmñkµÝC\¨mò#?j+ÀxuÝÈ 5aå8 ”ˆs•ŽÍ$?ªÄ'†ÄDŸŠz_2­¥ß³ö 4 §o…Å •Ò ÖíŽØ,—ú´$b¥ózœ‘[4E}ø͇-½$×ã¨}¦ìÚéåÔ îˆëFœ0áÑåõ«‹{|j»®ZTuՈЮ‰ÛPAf¬ZV².ªzOÁÕ:Žþ (è\ɼ«½!O{Њ ‰Ç™|U˾úTô®$iÕJEÛ=V­¤sRʦÝ?nˆÖW[¦º}v¤ S8Z÷»"†ãHˆœ¤çªß™2ªÛ†
+RGÝ»-6ŧr¼$òJùëG*Ũ埈յõ'tOY,7èä.Êu–ïâ뫦´áÅ/K¿O{®±“úÜjð=_^‘øáCWöàD ŽA°|§jb=˶YUþÄP{ÜY…UOO5e™—L Ÿçbç<TuM£טDz)wèyáÕ* %ƃ —LGuÙ<¢gT¦èd­÷L
+3¸MA‘s`}4¨OÀ…tha.)ô2¸§ìèyßT.-À”*>kHYè·X­hy8&¡n¿Æy°àþú'Økk¢ÛêÉ k'b
+J<åãä¨%ñ€iSð„‹²dí”™’–(ú¬D,ˆÆñ«kðz=eZfE+ùŸšær·Î2‘%2ÇÕ wè«âÐòÛêœThÐõg!„‹þœ†Ug-dJ~å ºóÎ9{ïa^u
+y‹`sä%ôØ\Xkäuô0”ºŒ‚Ôу„Ný9ñ íx
+¦gz¥x¾1-KÖ[ŸðŽLñøÇ\,ãGÚ°\[³òÐׂ˜+¼,ØÒ¯Ã4ó
+掓X]·3HM::zF
+€ÒéØR‚PøɃ:U¶>Áf\ÙÒpÁ\ŠK§/rrëÂWº×¥¡‘<9GžÅpŠôa.v§ _KEg€XsH4Œ¦p4BS̺e垇†»&ã2þŒ
+ìxômû\"бIÄVUkVÅ*©ïÒÒ·„`ÒrS4t+‚äÃÑàóÌ9W‰øåkÜ¢Us·ïàù0HÎnˆ3Ë<ÝÕ‡„q®-Q"ܺm
+Ä͹Ȳ\Ñ4~Ë«aWæÛY<šÄ]u¾u¤nwJ†ðÝ&VTÜ•ÀžZPìB–½úááÛw®­€üÓHSr&»?t}¹e‡~Ù6]»ë«ýöÒ¿8èTàÿ%L­8˜ö_ÿûÃñ=+t–]ø¼„VáeãÂÅÉÄœG/ÿ£Ä¹íÿ‘l¤[endstream
+endobj
+2486 0 obj <<
+/Type /Page
+/Contents 2487 0 R
+/Resources 2485 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2473 0 R
+>> endobj
+2488 0 obj <<
+/D [2486 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+2489 0 obj <<
+/D [2486 0 R /XYZ 56.6929 750.8289 null]
+>> endobj
+2490 0 obj <<
+/D [2486 0 R /XYZ 56.6929 162.6734 null]
+>> endobj
+2491 0 obj <<
+/D [2486 0 R /XYZ 56.6929 86.4068 null]
+>> endobj
+2485 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2436 0 obj <<
-/Length 2161
+2494 0 obj <<
+/Length 2389
/Filter /FlateDecode
>>
stream
-xÚ¥Y]{›8¾Ï¯ðÝâ§c„$$z‡§“Išvã´;;ÄÈ O1d N&ûë÷è &Nf·½@Wç¼çC™`øO&’#Lc61C>YmNðäÞ}<!Nfæ…f]©ùÍÉgTLbGa4¹Ywö’KI&7ÙoAòåËâêôü—é,ä8˜£éŒc|J®¾&—víË4ƒäãb9!q BT‹E88½Z.f§Ë³ëÏŸ.ÿžþqóóÉâ¦EÖEO0Õ°þ<ùí<Éà?Ÿ`DcÉ'O0ÁˆÄq8Ùœ0Ng”ú•âdyòÏvÃÎ[óé˜5—ˆ‡,šÌ@8b8·F˜ƒ f‚a$#µ6 ɘͼ”¶ÙìBôÇ3Î;’ñ6×Y¾U«¦Ú>-BxÈ£hÒU{
-ycumÒçÖ,ÆÀReÄHè-lKBµÉ›Fe/SÄ9bq$SWêå`j¥L0%C•quCˆã*½ÐˆÊ^˜`e/î«</WÅ.ÓD¤qðëòâµ>ãéÑ*Õ6mòòÎÎO—öi)µªÌ3«‘¶¬þ5å
-ipsïö¬Ô*×N
-—W×p ÅD_!©€æ0²wÃÅ/ɧ/—‹‘$'Ð|#"¨¼ÑùÑ4$¸Ýå…Ƀ¡ÇA‚åO <#»j;â’h§¿6«ú[{d¯Ñ†æ3_U.Ô_éæ¢uUmÐ;èpÞ…ŠðPtŽeï/ž{‘}’i±œª(ª'g3¸T›™/HPÙbƇ ßó<U»"ë÷Py]ïTö~ä@`@¸¯ A¬³²®Õj–Õëmµ1÷ïã`ÚçÛ;ض-zðá(PÓ§¹RYm´Ÿ-Wòïê À»È¦À_¬£Ý¢Ö~ÖO‹Õ ¹[±šEršˆD°¹<ÅóDF"ŒæøCŠ$‘<™Ëùü4œÃ¦ Zx-ÎÎ̹ ŽŽ>ðE‚ç1#7î³úìür±<Æiѱ%=ÎPw[ ©½-ê(þù]ij?ÌnŸí³é|nÐf”ɦ+Û_ŒµXztæóþE ÿл4Mßåúßh¨Â1kãÂdÌ®rÈ´…EkŽ0%²SSH¤¢§ß²Ÿ©FÈþåo ésâ“Ú¢‘ÿ='u ÊÝ’|¿t늀‹Ø t5‘¶n
+xÚµZÝsÛ6÷_¡éËÉ3&äÍœëÔÉYjï®I‰²9‘DÕ¤Kçþø[|Š@ºiï&3.v¿]ì2ÁðL$G˜©|R¨qLød±9Á“;x÷ú„8šÌe}ªïç'}ÅŠ‰BJP1™¯z¼$ÂR’É|ù~zþîÝåÍÅÕ?O3Êñô{tšqŒ§?žßütþÆν;Utzþúrvš‘BbD\“ <½¸™Í._f³W·o¼¾ü×éÇù'—ó Y_{‚™Vëד÷ñd ›øá#¦$Ÿ|ŒˆRt²9É9C<gÌϬOf' {oÍÒœIÄ%-pP2!9b¹ \!* jð€ÍÁ>1`°Ü¶mµÈ–íê¡Ù|®¾êÍ„Œq$a†ú¦ÜTzXÓÒ@Eà×T=N§DN-7ƒíJ ;²PºñÌþÞÞÚß»j[=”]Ýlís×4k'6Dâœ:±¬
++vöuÛìÚº=´Š
+T Ÿ+y?XcTHÅ÷©Ò9ÈrüNÐâíUB½>˜DçI Uz¤ß "Ú`bLYìÀ.;=ÙÃ.ã…˜Î=ÑS¹~¬,M³Jf¤*sšÜåj¼@¤ >ôn½ìONT³Ý 2¿îèwú<Á#±áÓÄ@*Ἢ‚ĉ8r·Ê_¿ÍíÈÇF½†É<ZÏö¬eŒ` ‡÷GˆsÃÒÆyû°(=I½m«m[wi‡]1×Y²Ý¸+ö¨F\ÑSWœ§\‘"èâh\[DNH8?Hó£zª„b‘RŒr,D¬ÙlW-jêªÃS¬²Y¼ñ]YœPÛaXAC"ŸIA=¢P‘Áô:…)tÅ\¥*×XN!j(F4 DǪÅg’1ÔÞ}ÕÞ4ÍçƒT¿otëµ[û5PùôÌ{i o+B7Ͳ:KrQ ‚(ï@vI–8ã9túp^SÀUKVf¢Ï¡•=@A*”ôMã P 1ˆ|Ü úTÃn¨Œ¬~`îëìølI$
+aG"¥‹½;Ôþ!ßÙ†ô8·¾P\RìóÏ]®R°£Y4›Mè'|%m¶uv8÷ÂÙGöo>¨N)ÉcÑ’}o.–ª—›ÝºB ¬žøO I]C­ÜïñâO` rÁÆ#|Ÿj8Â*áÏ:†xT¤'JˆŒì Ân"‘WÛÅúq©í%ï/³ë¿´vøź5ŒüUôöÎ>›¢ˆ©ã¢Ž{1ýÇ)‡¨ÜÝ7ÆLÁ_;–ÍN_j˜cC Ü^µÓ:{™&ªêá}ùTùõÆ—ñôzvmg ³Ò8ÜD·lEìÕᘩ×k×Ûú¹Ù>U]µŒ{à*ï Þ=Ô[©Ì„qõèØ»­ôŠ
+Ä ²ôäQ
+¬ÊÅ}Êc—
+1ÚnÒµ…Ç’tE^¶õÒ½úYcY®ëeï[’¹D´ ïkcÿáÉ_-«vñPªÔØßòålø*Hq$
+YÓQyžæX^t $•HÞõAkòÂÂî¡ðµlªqìײðèkÙ>ÉA-Û¿›ëÙÕÃײŽW,µ<ðAûŽÀ=þ™'Ð [ÇÑã,ÒwPÊe_ø¯Q˜¡\WtrL§@s¤Tb0"9&}­†›þ€­Õ*ŒäméÕ»Ñã¡¿oßK:ðý?Gú›w ®Èÿô§õýÿ"È¡µ—C7¤ ë¶Z¯”–äÅ¡êá#ü±îÿÒ¹ìendstream
endobj
-2435 0 obj <<
+2493 0 obj <<
/Type /Page
-/Contents 2436 0 R
-/Resources 2434 0 R
+/Contents 2494 0 R
+/Resources 2492 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2416 0 R
+/Parent 2473 0 R
>> endobj
-2437 0 obj <<
-/D [2435 0 R /XYZ 85.0394 794.5015 null]
+2495 0 obj <<
+/D [2493 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2438 0 obj <<
-/D [2435 0 R /XYZ 85.0394 463.2352 null]
+862 0 obj <<
+/D [2493 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2439 0 obj <<
-/D [2435 0 R /XYZ 85.0394 318.8302 null]
+2496 0 obj <<
+/D [2493 0 R /XYZ 85.0394 744.4041 null]
>> endobj
-2440 0 obj <<
-/D [2435 0 R /XYZ 85.0394 224.0131 null]
+2497 0 obj <<
+/D [2493 0 R /XYZ 85.0394 712.3006 null]
>> endobj
-2441 0 obj <<
-/D [2435 0 R /XYZ 85.0394 159.9229 null]
+2498 0 obj <<
+/D [2493 0 R /XYZ 85.0394 646.0353 null]
>> endobj
-2442 0 obj <<
-/D [2435 0 R /XYZ 85.0394 83.8775 null]
+2499 0 obj <<
+/D [2493 0 R /XYZ 85.0394 555.085 null]
>> endobj
-2434 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R /F39 1161 0 R >>
+2500 0 obj <<
+/D [2493 0 R /XYZ 85.0394 479.7864 null]
+>> endobj
+2492 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R /F55 1336 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2445 0 obj <<
-/Length 2556
+2503 0 obj <<
+/Length 1584
/Filter /FlateDecode
>>
stream
-xÚµÛrÛºñÝ_¡™>Tž \I"oŽ­$>Il×r¦M“<Ð"esL‘ªHÙu¿¾ ,À›()ÎϘ `±»Xì¢t"?PLMB%|I¨œ,V'dò
-®âUªç:ëè°˜òE QÓ]b§4š:‚F? Âk@pxH‹t×YYà¸.ËÜr„óP_IÉ,Kø‘R‘a9-Êu•UÃKáÔ£€O HvD‰Â$¨y†ýÒ`âuI :br ÖPP·gÏ\[”‡¾ˆ„
-•vG‘ ÖáP|Ù‚‚FP*„˜!ïÇŒ 22å"ê8øÈ…°ÀçÃ)—ÀH„¨y&[PÀLVá·Z§‹LŸÀ
-dt4VÛª¶P\/³Ùoä4JÓYúOYXHߌY{yÌ€‚¹$!¡rcQÿ’po·4ÊìEܧYñЫ–ÒÄÿéÚøÃnÝj žÄ—@ Š+0wëDÑìšrDvo–@=¦äX9Ò•‰2
-U*„ÃýB5(C©º6BÁHÀ­Tó4‡¤5ɘÕ1
-¨±T³ðç[ –˱@FC(ÛÅž’«'(P—ò¬qÙ{G¾hù˜ïíüìë…|c2øð
-ûf(óOgÆw ›^ÌÏ
-ôê![òè°h Öˆl½8J$
-¤m¸`É5\¸m¼á¢¡d£ïý~‹øBqÞo¸€l
-‘ e´…>pýçõÕ gtÄà ±+9CÍŠõKÎ&+æZ~eŸhô”&ôyöý- ÁGGL÷ÌXŸtoeÐ +øήî.ï¾ãj+ƒÂ¬ß¥WU¹È¬yÃØÖ¤Š"&›>–椭-ï‘rïÛ|v«˺'G®³\ƒ× áP‡ ‰z3à‡ Žâõݧ.§V->Nºö0`m{¨7í! l{iGë×NÏ8æ²aè³0 ‡=¶ƒ´ßa’ñ×óÊV ù9œ]~];™O#õø÷{fWe’¾Ãß•¶ˆm‚.óÄ«ê×ÜævW;ÚŽ_ßh¹­ÝG5­ch>b›íßÛé¦ Þ}oå-rç ¿÷Þª5}¦Úð˜¶3¥Ðý‹|›¤8°é˼ûýµÂ¹Ú‰ý1QÏ$¦pÆ̓}îT8]Aoe6'8¶O»í ¹+{¶ä‚®â8w/µ€Tb\Ñ(‰ÑþžßŒõo¬|ô‹4zÿ÷ïÉí¯ç"ôy±qãb!Ô
-`+”Ö:l×{ì/Ï»²ÿ#ÉRendstream
+xÚµX[s›F~ׯУ4›½³Û7dˉÛq-¥“Ž“,!‡ W 'î¯ïYvA m#wÚ83a³ß~ç~bøG†B"©©†š#‰.Ö<|€woÄÉPЕšÌ¯ÏY8ÔHK*‡óUK!¬Ηw£ ’h xtv=›MOƒwÓ?Îoß_]F“éå8 B)9Šnn¦×gǶÀŒGWÑõ‡èÒ>»k:ŠÞLgãÏó_ÓyK®«
+9`0Hc6J|fk¤ŒÙ‚'£èës!:’„ ÆCèF$Kž’lß:Dš*:ìy@¬ò£Ýã0EkÑg6KªÒú¤ú’ØÅ2¹ß><¤ùƒ½­‰!Ë4ÖZj.%LÂ4
+a5âôctus9uº ð0 éËZpn‚ 0‡Ñý6Í–fId4{ÁUÚ§g3ûðöÖÞ¯6c¢FÅÚ>5{êó¸êj,Rüj-ü.ù¯³-Š5:Á˜PI$ö% VZ»_“çOÓÌñÊãuòªÇèYV|s6##8!0¸`¬³­á
+‘
+UØ;ßF?'!’a¨úfßqCFÏC~J"Jå
+i…,¾·ƒf·0­*iËâµ?ßF!VûáÚB Øä\hWöçA›Á½
+nÚ˜M´¢È^’PÏyñXB)Þ›Ž¡ï…J²z² ö÷;wýp¦ïBÔ£3÷Íô­Ô¾!Z#Ô˜Ó N펔:Æ5nÚoœpXƒ•M+¿ Øg‹yÄÐ~󈳇b“V_Ö\Ô¹N²< }
+Kh¸¯‹ÕÊôÉCXhs¡`|vá ˜€1ÃÏ—e6èY\–¾¡FC$«}೟Ãwz6ÉáQrÔa-âê(â*‹}r¨°Šîã½iWä¾ZÿÎöWŠæ7>ïWÀ»àk{컣á·7åôÃÃ< ȾV—G­TU¾,©R3zùQ83ÒTÏ>GrˆNŠ2ä扸ƒøxôfpTîMË›¢*EöœÃ}ðÛŸ“%ÕqoùMK¡ø|€÷t¯ý&â+¡Þ|v«fpõ}X‚Ì× O3ÀmúÏvŸØÀCL)êÿ"CC`³lHeWÔ F”A?äþ7˜Ðéendstream
endobj
-2444 0 obj <<
+2502 0 obj <<
/Type /Page
-/Contents 2445 0 R
-/Resources 2443 0 R
+/Contents 2503 0 R
+/Resources 2501 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2416 0 R
+/Parent 2473 0 R
>> endobj
-2446 0 obj <<
-/D [2444 0 R /XYZ 56.6929 794.5015 null]
+2504 0 obj <<
+/D [2502 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-858 0 obj <<
-/D [2444 0 R /XYZ 56.6929 769.5949 null]
+2505 0 obj <<
+/D [2502 0 R /XYZ 56.6929 692.8049 null]
>> endobj
-2447 0 obj <<
-/D [2444 0 R /XYZ 56.6929 744.4739 null]
+2506 0 obj <<
+/D [2502 0 R /XYZ 56.6929 544.1607 null]
>> endobj
-2448 0 obj <<
-/D [2444 0 R /XYZ 56.6929 712.5891 null]
+2507 0 obj <<
+/D [2502 0 R /XYZ 56.6929 446.1895 null]
>> endobj
-2449 0 obj <<
-/D [2444 0 R /XYZ 56.6929 647.0402 null]
+2508 0 obj <<
+/D [2502 0 R /XYZ 56.6929 379.4876 null]
>> endobj
-2450 0 obj <<
-/D [2444 0 R /XYZ 56.6929 551.5126 null]
+2509 0 obj <<
+/D [2502 0 R /XYZ 56.6929 300.8306 null]
>> endobj
-2451 0 obj <<
-/D [2444 0 R /XYZ 56.6929 446.5077 null]
+866 0 obj <<
+/D [2502 0 R /XYZ 56.6929 259.3294 null]
>> endobj
-2443 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R /F55 1321 0 R >>
+2510 0 obj <<
+/D [2502 0 R /XYZ 56.6929 221.6367 null]
+>> endobj
+2511 0 obj <<
+/D [2502 0 R /XYZ 56.6929 188.5084 null]
+>> endobj
+2512 0 obj <<
+/D [2502 0 R /XYZ 56.6929 118.8847 null]
+>> endobj
+2501 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F48 1253 0 R /F41 1233 0 R /F39 1173 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2454 0 obj <<
-/Length 2973
+2515 0 obj <<
+/Length 2924
/Filter /FlateDecode
>>
stream
-xÚ¥ZKsÛ8¾ûWèfºÖb€à£öäÄvâqüØس»S“9Pe±B‘‘²ãùõÛ(€¢è­Ýä
-¥ðe(„)ŽþÑmhͪ¥C‘"ñeÂã‰pnI„УI,S?\(‰¬³7¸¸H¼YNm“·Ø‰½v•oNXâéñ¬¡ö5/Kê}dð¼•Å<k‹º¢ÁEÖæ§Ð /›·ÅËðTÞÎa5ÁŠ ò®ó7½y»ÊôéE5/·‹Ü M·GF=›qЈbʘŸJÉÕ½`}½~†ÓgeNš}-ÚõêrWSÝ—|Ó
- ÕË©‰î‘0çµj49¯«6+ª¢zê­ú‘¿Q§YÕÛRS¯²—Ü¡ã^óœÏ‹ïAÀs³#JBA6ñ®–4VÕš)E=UHœr4å¹€¤NIÛ$TÕ½º¥¶Ð¿·M¾8„(æ¾dà%F`SBG¥€°
-bì|
- Ynêu™Íòr V§¨ȈhÍa EÒ‡ì)}GCÕˆ† •ÒÐõP†ÔO¦æÅ&Ÿ·5­ïƒ%‡Ô0ŠÆ™ë¨¸sÌN‚ãÄå\pÓÓ°C.O±¤Í@ƒUÌW=òÆŸ¡.MÎãø¿V›ëÌØЦhÛ¼:¬ br½£ ‹jD†JéâÇAk;rg-{GZ‹}¤ë×TôÁŽ}´Ð€ne²Wȉ´ÐMÐXvX‚„Y¿“LØT#4TJ‚ÏChf˜1{ÞÔm=¯Ë=4‡!àN†ãÌuTܹ)xêÇ"Š]öÎÂäzr=JÇ5Kjê%+·9u—#J“‹.ä`a˜$:!€ñþ6\Ŝɨ©¶ëY®w›åíkžW4h2ôvØáRZ›«BÀ]Ò vSˆE¾Ì¶%fH@ªKROÐOL$¨f5µÌÝzpþ¹nŠY8¡.ÜÐ Ý©ðÂ!ÛýÒ\g½8 µU‰L¨ ƾ]~¢.…Ô»T†¦mܪêóf;ŸCQTo£6 c?¥G­Muµ•Bm;˜CcbIûöœ¥ÀP²„ã|uTŒõSà@`ÎìJˆ¯Ê–
-4¢Bèn&°
-€eÇ${ç`ûöάõ‘<";ÃN‡zü¡Ò0híÃüÝö¤ö‰K¨öiFElÍ–Ù¬(‹öÍͶ0_µJøúä¬ÍyÁtfcêÐ0wÑo··çòj¾y{6¹*l{ñ"e¾"G¼Muñ•BüË°ŸPåhÍ—ùK¾ï¤<†Bm”³Žj€5·úg>—‘ËÚPʑ϶OO]1¤8;,3 ¾#3‹jDf†JÉl/K¶è# ÑÀ‘NvøI÷Ž<+ËúÝp ô$ö9%U8Ø%U8ŠøÂÁYNí“Î-4 R«h¢Xê+MÙíwuN3¯ô>‚CÐÊb‘ëqUÞà0=Êà•ÒÁ¨ÍBD@e¡a
-†öjÌTŠ©ô¶ªòó—º|ɨ7S8uYN¦<ôÓ
-"êI=áW˜j5~n1xýenFñÎ"o†öÁbça@‹ÅšMh¶j[ô=?•®aò,ÚS2â¡w¼®©+¼ã×®·èz+ÓSwÂÕë aØ¥côy±{ ¦E-¾½lIæ,&$Áè[žm4Sè9òYÕ€I’žOD’:<œ®êí†~,²·F‰´üTÕ2_˜(óì™zê0´*M·®«v¥7uOWCÝyÁ㬭 BøaŽ·8AzÓ×ITO뢩4§vIˆ§ma³«^ðqë_'®Ö–­û^c)ø´ÿDc+Ãz
-³”a½4PŒV#…(KŸ§é;)½Mu8XwT*Xß¿[ˆâG©õR]¥ŸæDÜ’÷øë¨tÒœ(ö£fuž“ÙBi´ d†ÔCcº{QÁ¢‹F(øaeV×ÔÎô&ú­Sišîù Ÿ³yê-[=Ô´rºš‰SŒäf>T¥ë2öc.¤kE¯…ú.síè¹ù„·0¿¨Õ~Ž+ô…¼XX{У­µÙ¶1©»@«_lqkõN žü¿µ´zª®2|,{|L?SÛ=íBE6Jßw¬k¦
-wó¹æt/S5å‰eßÁ'Võ+6‡ Ap?Nâw2}›jÄ •2„³wßÇì ô…dÉ8{Õ
-IÌ\ØÁ]‚;¶´î8D Â`ZQÕÔ¦‘\aZJÂ4N)Lã aZÈn#Êï#Lck0}…ig'B±áDm*Ìï>âÿgLÇ1TPùŒºÞ|¹ÖD
-Ð߆Œÿ7ˆ~lí8Œg¢ÙçÍEsâÇ1D›9 æD»ìh0'äÔ±5`¶©rI _òÈo#(gøÕ’ºnƒƒ6ˆNŒ7‚FCÆ÷¶gÑI°C4ž<.¢é æ“ çYc'»*+ð®ZS“(ÿm½â[1ÀJ:O©c€ýgíú­·“ÝÇ:4“ƒ#¤83 Û «zþï¿ÏÙý5RƒOH<D‹
-¥ËBÑg½ûKž}Þÿ£"ò…endstream
+xÚ¥]sÛ¸ñÝ¿B3}¨<áðÉôɱu‰Ï‰íFNÛôîh‰–9¡HU¤âú~}X€(Ji§ãs ,€Å~ïRlBáME¨Hå$N%Q”©ÉrsF'k˜{Æ,ÎÌ!Í|¬wg?ý,âIJÒˆG“‡'o¯„Ð$a“‡Õ¯Ó‹ûûùíÕõ?Îg\Ñé;r>S”N?]Ü~¹øˆc÷ç)Ÿ^¼Ÿ/ÎgL%IH‘F‹èôêv±˜_Înæ_þ|÷éãÅ»ùÇóß~9›?tÄù`ThÊþuöëït²‚{ürF‰H5yJXšòÉæL*A””g‹³¿vz³féC”HˆJx<ÂÎ&Œ‘T)°D¥$\–\Í—Ÿ¯ï®ïnõmÌšž‹t\!qœDyU5M¾œ}Ë_Ÿvõ¦ÌóÒ.âÞ"àx”P ‹õšuÞ6ç3¡Ø–Yè¥hŸjŸsÖÅ÷¼Ò Ÿê}ÏÙ´Ä·§Ý9K¦õÑ2|,w¯Û¶Fø93«|Úý²j…Àã¾(W=üF)/óÆžPïô-&3Gø¬cšf;jÇoTÑE¾Ü»ƒôÌÃ0{ƒoYƒÏU®¨ò¾>?ÿlwâJ(»¢Z æ$’Š€ý „K9²ÿ˜eØ-}±”0!Ëî*Ûä#2á‘éŸà #ó¹Œ/z¤hðÙlóe¡o`.
+\×™¹GŽQzåPE"þk¦2ª™ÚXe7lµzžù>i™9”¢jòª)Zð®£.åZs)N¦U­Ÿ©Çz3l¬†?8G¿™¯ôåc°¢Y!îKQ–8ldÏ}cÜÌ=¾âÈ*Êöek7ÚWà‹œiG}œ
+9_t÷“42N[ÄÊ:"c5äë†E3÷ÖУÅÁ{ >ˆ¡Í3p<³(Q&Œ\ÚA“X±“·T`–]pÕ7óOR6îÀ>{‰êWX  ‚HÉÁÎóû6 µÏYk5ÌS xµb6.ÖjÝs¾üæ"Þ“ÓbÛ¬-‹²h_ÝRþ5d¸HtüSÎÛºÍQrì-P¥ŽÁýÀøl4‰†ŠèÄžáC‡«¬­w¯ˆÚZ/6Û2ßäU;0
+
+‡¨¬Ìâ¾Ûo¿@Aä*¾Ûí"ŸqB¸v- ÕèX4ÊÊp¬¶Ò1‘ ëzà‰I³0íÉN×aÜ&x¾ä&!蚶ûGH¹í%õ >H P‚Ì–­&rl*o—ÖÔ¦7¦™­QlM
+§wüÅá¢éöÈò ñ#°Þªd™+eлÜVÔßó]Ú k¢‚þšq}{õ—¾dñúTéÀçœ9šÛaEJ• {(:€äY ªØW¤›ãNnFõ¶§½„‡uÂM8,Cør¼QÊA},áË|íaò¨ˆþ¦sš²k„´°~ „IÊBÚ®«•Ö,à )œj(G
+ªÎ“G:¤‘#Ã,ƒÒÄá‘ï½æSW=ùiƒ®­ö®Z·õ9š(
+ö¨l"Evú#e‡sâ#%âÁÜŒÅ^A”r_äVÅ._š.ûÐï*ND
+Fq‚¬瀮ðäðqâÓµ8ì’!èàlËßëOØ:z÷á¸ûiÀÁW5×<sMÕ—]ѶyEŽý
+D(¢º1rQÚ}xþ¿!ÒÿFêÊ&áã<‡O„H™#J3ÉtHz÷[’CÚÿ€v«Iendstream
endobj
-2453 0 obj <<
+2514 0 obj <<
/Type /Page
-/Contents 2454 0 R
-/Resources 2452 0 R
+/Contents 2515 0 R
+/Resources 2513 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2416 0 R
+/Parent 2473 0 R
>> endobj
-2455 0 obj <<
-/D [2453 0 R /XYZ 85.0394 794.5015 null]
+2516 0 obj <<
+/D [2514 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2456 0 obj <<
-/D [2453 0 R /XYZ 85.0394 287.1527 null]
+2517 0 obj <<
+/D [2514 0 R /XYZ 85.0394 752.1413 null]
>> endobj
-2452 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F55 1321 0 R >>
+2518 0 obj <<
+/D [2514 0 R /XYZ 85.0394 646.9327 null]
+>> endobj
+2513 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2459 0 obj <<
-/Length 2099
+2521 0 obj <<
+/Length 3027
/Filter /FlateDecode
>>
stream
-xÚµYKsÛ8¾ûWè°©f…àI
-?ÊÂz³âöñJþéœY©(ý«¿l[‹v³öYgEXŽèì9“h8üubõµŽ3«Ój©u¡±µ#ßB­AFøëáuZ‘øöÈÅ 5¹ c¥ÌC‚c—•,»(¥]{Zmê­…õ¥{¶©€E “›¦eÃ$°Ê™°”
-žl’©ŠØõY©ð–ó²x#ŽS°1 â>§ ÞÀ-ÁãoXàkÏ¡uúâWë4,<0àbì47e5eõ2Ú{Ò®ÊgóÁJ>Fà„8
-S¥mÝ9z…ÂHRybjèkµ½€ð@’ „%=[Ÿo˜È¡S öˆ¢¯; J‡N÷ò¨ ÿh-öÚdF2HÄ1ñðbY¤ks¨#¡4;TOë ‚ÖI ^sºjè4Tß)ð=†Fœvõy
-¶|j§òÖ¦½…ûäh‘„ÝJ×ÊÝšøF‡b­ZÀh£¤<Òª‘;»áÜFšr¾x[@œw°6+†¹ØlòÀrk¦wC‡ÄIìÉKŽE ›}²3Ða4„ ˜Êáøõ{ñø½SM Ý év{¿_™X”ÚöÉà (k¯ä2mG®¤ý”Ú‡´B÷¹*¬àX3/Ã9hß¹­5bÏ<+´—0
-Ñ$ M?4EB?º½ºp9f<b®\Ôž3žfÑK
-&!û£Q’„Šƒ²ü£“>ÿ Ùœ„dS•M9/ÿ$vÒíÿ8h7b‚`ûuZE|Q蟇õ\ ÊõÂ<Áâ÷–Nã®w}ÒŒ1Pø0¿íæ¤Í#]ÛÆöžNÚËÍ“ÉuP5´÷ÃK…Ÿ!b¿+€}û÷ È‘Œ»1à¿þ³Óî
-@’)Eã¿™S ÷= ²Ên†p~øg˜J V‡±ÿ )Émendstream
+xÚ­ZYsÛ8~÷¯Ð›åŠÅà x<:ñÏÄvÖÖÔìÔd(‰²X¡H­HÙãýõÛnP¤DÉ©ÝÍT  F£Ñ
+†ß¾]Ý_Þþól¤Œ€)0AˆáÝÅýo_‰öí,VË›«§³¿Æ¿œ\åÚB£fÿ:ùó/1˜Á>~9žŽ#3x…“q¬ËßhÏøZ;J~òtòF`kÔNí;ßDžQ~
+mG©§´†ÔʇSK©3KçÉ&¯éÇxü•‡Kj7³Íá$ybÆ"~¤oÔy]¤õ2–ãX¦eñ’®ëtÆäÂÉM¨q7†ýÇG:·ó›…@,œ×`»*Œ`k±1´µl¹*i%^I…®„„—EzÝHñ,WE<v%$Øý%©‰ôšå9õ&)Á™ð*öP”ÕV¶nŠ<­¶R …,(az’9™½ÑHBt> Ü¡p{#'öøX¥V6FíêLódJ{
+òë"›.¨;Mª”z¼=Xòשׁ³â™È¼Y˜Tnò³&?˜wÅ”ÎÒbšâÕÄ!âÇÍœØx ¡ŽT¸
+¸Ù1*ð|!™‡ö²,_Rv Y}Ð#¾ñ¤‚ã¡ÍuØ#4\Ö#¬Þõ«uY—ÓrÏ-À’°›(>®\ÃÕ£]ûh¤B·+TW=ö ¾fÃóc€U²C/I¾I©KÁWŽ][;•R1~FÑpìè»bùI¨)6ËIÊÒ&iýšZ‚ÙŠu”1-áÖèØ cvqµujÀj‹â¡¦Ÿß…” @Oz4ö@ñÇWeUe“<¥»áŠFhÇQì| »µçÍ2-jKœÍãpöf_D–‹´ÇëÏDPF–R8žºê³ÿj3‚[)ׇã˜/´”ÇQÛæ:ŒÚ†Ë¢¶îAmìIeBÆÞVé^ƒ[QQ|\-ÇÔ£V'’ù =¤Vµn‹Y6…líY öEJRÀBJ9:{<ŠRžŽühgGû.E
+Ã<ËMU“à /~¨³ôÅoã/Ÿî¯1w<'ÒýÃQ2‘9ÈãÁýÒ ,×AÂýƒ›ë!{@F†­†6°AÛ^ÌÛ’°gØ)ÎÓ53Ûˆ©\4„N2Éò¬~ëŽ&/j{ø¼rR'¨¼–d¤ÙE;H&Ã$Ùà€·²1…+©…H³~[Õôņ»¼!xî-®#pw\î/ýNZû¡ 8yú’îyè8‘:®˜cêQ¬ãŸ…‚'6]ÍÈ?SÆˇ8K'›çg
+ÈðÓ*vøÈDà…Z¼×Ú\GŽÌqÙ#{Û« ”0ñ;K:¦ž%;µ‚ðŒ;K^äyùŠ.Xh®ë°¯8Sâw!Tný6PmÒ D4TlŸ¹Ò˜Ñ0œZAÙœ',˜³‘w{I#œ*! ‚YžÍR¦gõ‚È”9"­œ%aéMö…vAt­Ã¹(´&£(©3ÒÝ·´šÖÔµ>xÒÌUB’´ÅÎ$eLH6ò—òG:ÃP'}ÿÆ”ŠÄV^‘óä*™órd–Š}*²9µoå†Fš`g'nÚ¿˜G‘§5±OÒ>Ÿ°©Û؈¨ò%ƒ}} É×¢Û(¦‹’ ¿eY~Z
+,]󶚲,áÁ„wwãs®n‚áœ2ÅåÎÞÝé4*×ÙÒ–$Pù\;Ul­YdX­p¡gá
+#>-Ž¯›õ¦]óÝŒÕ]à ڇ 9ÌÁ ¤&ª‹¾ço{×0x
+=´gõë鲤®ž¾6½YÓ[¸žÝÎ^fŽTÛ"—áõÂî.$=´Ór¹ÚЙWÆÓÞÒdÍJ¡ ˜¥¨g\=O÷ u`¨£üѢܬéÇ,y«ìÃ-?庩ó4YQÏ.†VÅ|˲¨,´»º%5ë‰˵DAuðÃ-ßÒù]Ÿs¨M-³NÅò4DÕ*Ö„ͦrÑR ?3°µD:·CMû‚Ïw¼Jç2з°i]†õ8,)¸y–‚bÇS¡~'X·¹ë†Ëëoï¡x¥˹ÝÊnª}È„dx\¿†«GÁNžµ›Vº« §9±;Z¨Šf”j©,¨uÏXo…b–PnvIí„…¬6¨Æö"ZÃÍ"ø@×ï«xx1¯mð°ÃÖç²çÈÝ^Ô&ë&„JFû»Þ“^Žûy èÓ|3#Ðsx•ssʪÀ,ðBÝ’Q”uW˜{†¢üÛ
+¬‘E׈dpläþ[³áRÏÙæ
+§Ç|GÑ µåªÎJ–¸ ÕVR¯œØš¡zï%ª®8iYÆwp‰EùŠÍA;€“÷d½ó<Ûæ:l —µƒ‹>;О1ñϘAàAi¦«×põè×1_xq„]ù9ÆpÄÙöðV´ñt¸(g5ôºiGJj'Ì ÇÃô0@Tb¸“›¼òZ÷HöH&T²L2
+“§3ø—}?+<¥á÷uÿÀhendstream
endobj
-2458 0 obj <<
+2520 0 obj <<
/Type /Page
-/Contents 2459 0 R
-/Resources 2457 0 R
+/Contents 2521 0 R
+/Resources 2519 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2466 0 R
+/Parent 2525 0 R
>> endobj
-2460 0 obj <<
-/D [2458 0 R /XYZ 56.6929 794.5015 null]
+2522 0 obj <<
+/D [2520 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2461 0 obj <<
-/D [2458 0 R /XYZ 56.6929 632.7441 null]
+2523 0 obj <<
+/D [2520 0 R /XYZ 56.6929 439.3142 null]
>> endobj
-2462 0 obj <<
-/D [2458 0 R /XYZ 56.6929 393.4246 null]
+2524 0 obj <<
+/D [2520 0 R /XYZ 56.6929 95.301 null]
>> endobj
-2463 0 obj <<
-/D [2458 0 R /XYZ 56.6929 322.7553 null]
+2519 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F55 1336 0 R /F41 1233 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-862 0 obj <<
-/D [2458 0 R /XYZ 56.6929 278.4974 null]
+2528 0 obj <<
+/Length 2297
+/Filter /FlateDecode
+>>
+stream
+xÚµYKsÛ8¾ûWè°º&Bð$€£bÉIb{-¥j·œh‰²Y#‘‘vÊùõÓxѤYžÝšä Ðìn|h4>Àd€á?(0Ó| 5G1˜¯ðàÆÎŽˆ×¥aWëÓìèã)“tJÓÁlÙ±¥VŠ f‹Ûdt}=¹_üçxHN>¡ã¡À8ù:ºü6úâú®5MFg“éñh%4(I£–âd|9NN†Ÿ'ÿ=›\ÿ˜ý~4™µauC'˜™˜þ<ºý ˜ÁïG1°6ø ŒˆÖt°>â‚!Á =«£éÑ¿[ƒQûi ŠVgÈ8R)Øx0¡QÊ(k#¼˜Q1˜AÐ2€}ÇDnO•`q9èÚÛñÚjíºå¤ã–`yÚw[Â?ãöã)¥]š"Ž£SÔnÅš‡Ü ä/N(³uŽö.'(ÅôPnu´Þ€*h†ê-¯¨¶ÝÆ¡êºÍ²,†FœB„{ *ŸÖù¦˜»Æ昨$t?u^6YST¥«–[_f«ûjS4ëý
+‰¨f…ŒjeÝ-ʺÎçCp²ÜTëUv—¯"!j‰$K¥qîV8krkš4?+#ÈÄ·Ê릥’Ÿ°¼NÁl¤Ú©Üeu~L’…k¹ôHÃleb§/\oÝ@ëÞO¦0P• }6ûý)ü›EÙ~ŠДC–„pµÛ
+"Ö^É­ôñá´ieæGšCεá˜s‚Ëšye®¯yÈo$+p—;`0ßØT0½UÇ~šüªJハًÂ{jV/ΔÙ#fÔ%dÇÈ¿..‡.ž¢TÁ&ô™Bí$O¾|Oº5³|w¶
+•5¡ßäËÜMµœ{¾fåS«¨$Uˆ¦i¨ú± r(
+ÒÍ鉳È1ã{p’S.B¥‰;dŠ#©©ê<ú6;¿º9ŒìÔåM™7.ŒéK ûÁ¤ÈŸjÓOëW¿1ž†å ¥% ”cÜ_«°¥˜‰Q;Jr ÇÆžÀR”¨Ý%÷#¥ÒIŽko¤.9_ÉISU«÷¤âKY=Ö°?¶¸C
+¼›A­f\"kaPa5œY GÉ  7‹aÇÂ.©”'(E枪·CÏãë1‰„N…O¶ŠDJÜ4—!3«w«€ŽJE0
+QÔůX„ìTœ‘m“åA“†84/Q›€ÅrÛ&k¥QÄ:‹P²Íí WèP“?VËe7O©@R0±í餕æOO¬²ºŽ)%õ¶éñA`Þ1ß6;9h6/ï‹2†v_­µ¸<hq¹ÊîcçˆKE[{Ž¯iSoï/Îíð¬õwñù
+wópÄú½ 59’Ù@EºƒöC+]\Èÿ ÷â J†ônžÃIñž<ÿ|8EŠ p jóG"¥‚ôáç„ÁÍY©þ™~;üqmž'œ¦‰EN$ÒŒªíÈÿh¥ëîǃÐ<nª¦šWî?[éæŸ z«V°Hpªûbwj½ÈŸ÷,,;•vúžâ[BÁê³ >hˆÔ ÛïF¸9hsÏAÐOÅÖÞóA{«ü9_í+Ê;iûËKå+)Ù¢Wœ! 
+¼OÆ“éÉÍÅõìâê2r)‹½F˜pR!E¿ÒYfÌÝœ¾NZZæB ?F6dwjÈ¿%¨í¸gǦ•ùϹ¡þ¥½yA³(ݯe F pú/ÊÅÖ˜a§pÿH¹N.ÂEÁÅÜË`wÙ“xH]9)ÌƵüd$÷“®§Úù[H³éÅ™“ÌìfÇ›½QgsGíÌÀ¸>\1Iâ'^› {ßµûíΚ…ÿÒÍ ª¸
+áK*R;¬}vî‡~Ùq 8999»šÎŽ¡\}™Bغ†ï×iQm™â0hÞ`³BP§aØTն…çMhAƒè7­tovTÊd| ÏTÅq±4õ×U’!yž¯VP5Âó ¦Éù×ÑÉУš¢N›R¾ÝãpêôÀ´>Ä
+t¨A5Ó‡œƒšZûÂ`§èkBÎKÓ˜gAÅ<N–uÑÏûÿ@dKDôoZ¸-&ÿ÷_÷^ÿ´
+è"oP†9b *¦Ê`Aà<Ú
+]0à›Ê<eìÄþXÔendstream
+endobj
+2527 0 obj <<
+/Type /Page
+/Contents 2528 0 R
+/Resources 2526 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2525 0 R
>> endobj
-1455 0 obj <<
-/D [2458 0 R /XYZ 56.6929 239.5941 null]
+2529 0 obj <<
+/D [2527 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2464 0 obj <<
-/D [2458 0 R /XYZ 56.6929 205.2551 null]
+2530 0 obj <<
+/D [2527 0 R /XYZ 85.0394 590.9135 null]
>> endobj
-2465 0 obj <<
-/D [2458 0 R /XYZ 56.6929 131.664 null]
+2531 0 obj <<
+/D [2527 0 R /XYZ 85.0394 530.3944 null]
>> endobj
-2457 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R /F14 964 0 R /F39 1161 0 R /F53 1313 0 R >>
+870 0 obj <<
+/D [2527 0 R /XYZ 85.0394 493.1893 null]
+>> endobj
+1469 0 obj <<
+/D [2527 0 R /XYZ 85.0394 457.3833 null]
+>> endobj
+2532 0 obj <<
+/D [2527 0 R /XYZ 85.0394 426.1417 null]
+>> endobj
+2533 0 obj <<
+/D [2527 0 R /XYZ 85.0394 362.7008 null]
+>> endobj
+2534 0 obj <<
+/D [2527 0 R /XYZ 85.0394 257.3259 null]
+>> endobj
+2535 0 obj <<
+/D [2527 0 R /XYZ 85.0394 142.9115 null]
+>> endobj
+2526 0 obj <<
+/Font << /F37 1038 0 R /F14 976 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F39 1173 0 R /F53 1328 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2469 0 obj <<
-/Length 3070
+2538 0 obj <<
+/Length 3322
/Filter /FlateDecode
>>
stream
-xÚ¥ËrãFîî¯Ð-t•Åô“ìɱ=cgv<³#¥jó:PTÛfE–‘ÇùúhŠ¤hÍaËU&º‰n ÑxSr"àON2 ›Iš›Ø
-i'åó™˜<»÷g’q¦iÚÅúq~öý;Nò8OT2™?töÊb‘er2_þ]~þ|s}÷ßó©²"ú1>ŸZ!¢—÷?_þ›æ>Ÿç*º|3;ŸÊ<³9 YDKDt}?›Ý\M?ÜüòþæþüùOg7ó–­.ëRhä鯳ßþ“%œà§3kØmòË<W“ç3culÖafu6;ûO»aç­_:&
-«³Øf*‘…’)ãÜZÕ†ÍãD+í…q}3»úr÷y~÷ɟƯ9ÈOL¦*E¢2¼\×µ+§º×G·ftÕAOElS «PÜ®h\}>Õ‰Ž`C›$K‚VÌ\¹ßË,rí{˜–4*xùÒý.„Z»% «5=¿¼ã”Õ–W¬—ƒwFh™˜<ºkð
-
-X/ Ü4µQ±ª7…ÓЈ“> Lík~÷R5OÍgwï ÂÓÍÏsíŠu]”Mµa³êq]4ç2âƒ×x`¦]Ó³{^V¼’΀ʌ‘D—9¨§?èŸk” Tøî•ã
-3”†"wဴàõèEÕ=÷5L
-¹+F3„¸yq_I1.È0ý…iI6¡û9‡æ( O÷÷vU•Uƒ± Çý‹‡õœahñF>©¬ŽµÈÛ|²c›F(Ì ç¼´q›rkÙ²æi-:ª£CX^u°VñB„Ê0–yšö•¦µÊ7RaH
-¥kŠeѨ"~dbmïøK"Ø@,òô¿õ!"*XGš©¾Šq¯MâW°rµ_:pñš ïßÕ4W’*lœ0³$3—ü ­».‡¦ëfC‹—4æz‡6Ú¼]Ò•˜Ö2¤í6ÚP”F”¥ûXÅVø‘ã8<ɺuÚO43ú(Ïç-WSœßîàø8‰„ðæ $ÑeƒLŽ½rMÉqK‹?þñæÜgê­|iºªÛ=
-‚ºŒœ Ö³.®Ü°û
-ç8hAPƒÝ|Š…Ÿäïî¯ÿu*VÂb
-2#2µÑl8ö…aÏz¿Ýò×Ö:ôÑÎó›>"ËcÈâõiÑAzÛC$Ïu9þy BÙU® k9JŒ•¥‹?ÅV‹tÌWOHZÄÒÙcìn½Dò¢1:(… ßÈŒÿ0€j›¡þ¹¤—åfÝ•¢½U”ŠPƒGY1öSñÕõðÔ ¬ÃQ 1Å2ÿåæ¨/€›!6·÷þˆÂÈáçN_›$êÁ»û~v¼<⋃ò †1"jÑ~yý¿íqøU‹IcejüÒ´0+å20…‡”ÆYorÌûÿ
+xÚ¥ËrÛ8òî¯PÕF®Š8x|Ìœ<¶âx<ãx#gwçu %Øb…"µ"óõÛnP¤Dɇ­”ƒÐ@7€~Sr$àŸ™(ˆR•Žâ4 Œf4_‰Ñ3Ì]ŸIÆ™x¤I맇³ïßëx”i¤¢ÑÃSg¯$I"G‹?Æ?qp;ˆñÕÝl6½œÜN»žÞOdš˜t|q?½»ºùÏùDÈ€*Äø׋»Ï¿ÐØýyªÆ×ÓÙù_?ŸMZ¶º¬K¡‘§ÿžýñ—-à?Ÿ‰@…Ñ tD ÓTVg¡Ñ µö#ÅÙììŸí†Y·tð*¤”ŽÔÀ](Õ¹‹D&MÍ(6ii¥Ý]Ü<Á‘âd\Vئã¬x®6y³\Ñp^Óp½¶óüO!Ô¹ÛÅ;L¢q³´%¡}š]Ì>\HÂ}É‹‚†-µÛÚ.hîñ•Fö)Û o´- [×4›â­~ÿ>”Þu˜± œ¹žhÂéO†A¬’˜Qªu“Wåá)&¸r4ÑQ„Z˜ÑDÊ 5F¹Eîˆî|¡ˆÆ9,×±¿,óù’ÀyV[‚î@pt{n‡æÎÐ#ãйuÂVuc³ÈR”˜ñŸÂ¸øÃcûAläÉS12
+ž¬KÉŒ³²¸Ý½(va]€ÐAÊ°í;Ó#ƒ¬7ˬ!¨+ÐågÈ=3´ó¥q/ §jãÕj5ùc^äÍ«_Ú, r·À}HÇ•
+n%„7½úðŽüžØ5šeAkgI´féx¯¶ÏËÎ:˜7RÑ‚lÛT+xµyV¯„SÛƯ¶„4y蜬+S:
+i`p`#eK¢PZÈ#&p&$2hrÀ¸{$§3¤3ÆtuFIj4ëÌûZçßì>_Ìh¨¥>ÉX‹tÈYOIAKC©âk³V·j’
+ºH
+x‘RvÉ]¬ã>¹År¬–o:å-ÅëzÀ+GA(’ô4s-Ö
+Õg¯ç˜UD9ˆª—ý²ÂÈ™£Á§(ú¸ÖëÈ°©¯Y±Ý-Fз¢Ö½…=Ö ©Öý—…mmîÄÑÁLõ÷wSAͧH9BÈ‘„RÍžìQ ˆÚ’¥R©dñ…!gB¦¿}hР&ãß;Âúðqö@hŽ´Ó»‡›‡ßhvÇLd{ûfu]Ís²EØgõ”Œ–•;鎅í?þy6ý„‡UÝ“ÕH1ÕhjÔR¤Ç=ÙìÑ£ ¿ãLJ]J»k h$ ¶:¨™pk8 CÉ$BÚr0¨ó&ÿjÙ1_‘ea÷ê| ´üÚÝœ‹Ø!˜ý©P<4&PRç“ŠßÅ:®ø-Ö.ƒí’„H&MÁûŸ$é‘HvU"0Ö²Oò3%è’ó_E)ædž­³ÇÂOuSbé.1½[d$ôz¡ã^ÔçÂÚ‰[¿¤4\µE¥1Ù¦æʧæÒy
+7
+Ú'{‹ËmÒ€õœÛ…¥g±2ÿ]Mcs…Œ•F¤ænñÞ:®›Š/¨Ož¢³ÀŒ×›ü+ou¯Lkéãw3®ÈK#ÊÂÝûPê–¹X‘ý8´¤Ý:îGœàÈkj_¬Ó\M~~½}ÛÀ‡ÄA$„OB4=oÉ¡)ÛÌÙoio9£N|© ¨·÷KÃyÝî‘Ôe|À)ÃzÆÂî
+Žc¨¶Õ¦±~E‰^<mö>ëtC`XžŽÿM¹|»¯yA‚{»&ãûÛËÙ?¤¤a¦FœÛÅ.‡ž ÆaÝú˼–òGê°Çc»Z;' ¦x±Ù±´E‚8å—ÜÒõ—Kï+Ãð ¹ì`Kµ+ÿìÉeD‰ŽX,ŸŠìùÀ8ýJ¢ä4[i€­®H¦åG‰ì³5s_%DÈµÐ¿¶ =Ó¤óö]ìݤCtß7 ^è
+è]ä]Lý¾µÃ
+¾€ãˆ¶¾ :ŠÇJF4¼úÆ—ÊÁbA׆]ò¯E‡¬ë7éÞxM‚Œ_Êê¥$2Ž•%ð‰¾ä®hñ§÷—4¬ŒN â4IS [.H
+{‡I³
+S¦ö[Ê[I315‰OŽ„7„úo|ƒoqN|‚'÷$·CæD¦ýr±È7vî~ãp`MÂ
endobj
-2468 0 obj <<
+2537 0 obj <<
/Type /Page
-/Contents 2469 0 R
-/Resources 2467 0 R
+/Contents 2538 0 R
+/Resources 2536 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2466 0 R
->> endobj
-2470 0 obj <<
-/D [2468 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-2471 0 obj <<
-/D [2468 0 R /XYZ 85.0394 751.7313 null]
+/Parent 2525 0 R
>> endobj
-2472 0 obj <<
-/D [2468 0 R /XYZ 85.0394 629.4849 null]
+2539 0 obj <<
+/D [2537 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2467 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F55 1321 0 R >>
+2536 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F21 950 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2475 0 obj <<
-/Length 3191
+2542 0 obj <<
+/Length 3245
/Filter /FlateDecode
>>
stream
-xڥ˒Û6ò>_¡ª=X³kÁxð…ÍiÖžØÎÄŽcM6»•äÀ‘ Ë©ˆ¤'“¯ßºA%¥jKÐhô?1‰–h©'©ŽXÌE<Yl®øäÆÞ^ ™y¤Yˆõ¯û«Wߪt¢™Nd2¹_keŒg™˜Ü/™þ‹ÅìVàÓ7çóÛ׳»Ûÿ¾½ýx=:‹õôæÓ§ÛoÞÿçz&cÈ€ÊùôÃÍÇŸn¾Gاk-§7ooç׿Ýwu{ß“’.¸²4ý~õËo|²„|wÅ™‚&OÐáLh-'›«(V,Ž”òòj~õc¿`0ꦎ±"Š3Ë(™ÌTÄ2Øœa‚¥B
-¿Ÿç7Þįà3w#fE@1}‰Ý®14?%Jå#AÍÛº2U{’‘I*YÄùN†X§YÙc9^®Ft,S é÷ªÌÉÒœÉ,ÉΓå‘FÈ
-9®c&°Ï²æ¦µº¡ÐÚF³5‹âWÎ¥ÕÅcPe®€27XTØûA‡(¯ÅÔ”4±^ ƒxþ
-›Û]aý°m®=6ò°“?ûÁ2V[OEYbë¦
-©šbOi-¿3÷H’rÎ 1 ÑÉÇ8{pï ­›‚eîO¯ŠÞ}2Zi¥¹}2.•…Nh`ÇœÇSš¥š§C'ã˜aæëv”RÎ:ÎyÀWÙƶXo±,ñ¬O¦÷VØóÎYzX :wÛ
- k¡ÙåµÝ¥ÕRRá×ùQÛ
-—sÅétS/Í?A¢¤šÎ»-™€‹-0ÜU•±œq.QÅÉ´îÚm×Úà&³©Ø¢ì–ÓÁIâ£_—(ªe±ð%B’Ÿ¯ãX¿®;¢¢9h¡}éîJpK~P¹:̈gM‰ø«ŽU3•öᱶHA†—Áq± ¨Þ¢-¾+dÏÅJ‹ê{9Íù<¿± ‰i
-íMŒÄt»‹µ6KnLLçb¶h
-ÓVµ’SñýLÀÜîSr»Ð3øÒ -k¿+±ØaR÷¯Å’¦ç#FA´ ´ôØ+`Ö+\d,²ì@È{•>4A6îO}ª„±X™ß»bØ–/Æz#ÕK®ÞÇ'vÊ€=ö
-tì>¦l$qtFšèŒˆÎÈ.²¡Õ`chãˆ6‘ƒ“Øaûæh´}j´ÕöE¿˜ó±¬þ D$Y“þ1`STÝaÁ‡2•!%NÉÁ4‚‘yyTü ^MƒòŽâ4š?ŸÎýDbÿ}]¨î„X§µ¿ÇrÚߌi?D¶¶äåƒô©Ûõq #
-p–¸k„ºAÌ! ÷—I4$ï èàÞ=qK•ã¿£ÌA|)ƒsrv¨ ÷
-=¶J±ä·Ÿð1~_º€ïè±!b÷¯‚bFÆ„LôP¦ÝŽvlK
-818ž¹—Æž¸ò5°m·ÛÖþE×Ä°ÂqZ^ ÒË´¼ð댼x,'/÷cò"íÿ*¼çÜíœ;ú‹FÌøEÒz¬Úÿ¢¡ˆJ‹ì+YÚÿß ŒÄz¨zµ°Œì³›\ã—Þ|4ÈÂe¹ÂA<Y.p%JŽ¸rgŠÈónÓ5-.ý@[˜KW¶Ý?ø˜RƦ3} fû¢(˜må¿
-
-gÐq©|ý²RGô7 ír%X@<9…îÏÆm_”¾‹œÖy ­ë¯êË¥_=™{ó(+_ïíÿÌ°÷œ¿k«| |~2Øgô_ào¤f÷0‹@žöýcø»7¯g>Ú¾y· _Õ$8½{³õ&ýtIÚ—ßbfÿl5¢|â¯ñÿþO×þ¿kQÊT–P%™ÆV•O”埈’cËbB"GhÿïW“Ðendstream
+xÚ¥Évã6òî¯ðÍôŒÅÆBp™99í^œ‰ÝKy3yI”Ù|M‘j.vœ¯Ÿª@‘%Ï{Ó}
+…Úa~Îà??•ÏdœGIà+ÆÕùjsÆÎaíÓ'œ™Cš ±~Xœ½û(£óÄOBž/ÖZ±Ï☟/²ß¼ë¯_?ÜßÜþçr&ó~ð/gŠ1ïîúþ—ëŸöõ2Þõ§óËOb•
+z >%0‡e6û¶P8_ü|Hì`K‡4±¥l™$~`G[Þèm}ÉcO¯ÒVgx+y‰ã:}®jœVkg áZ.9çžp3tüˆÁn¡”oÈh€uBFËÊè'³å»J 09÷ãDÁíY”¶-öÙâ<ðã0R§ùê±&£í?âxÌÙ\·ÍåLŠÀkŸ4N2½N»¢Å‹ÅO´\áØ5„¶6bÆs"ñM¿âäåI—8ˉŽCYUå³®í­Ypéè¦8€™k²ó‡'·ë=û€, ´ÉO˜ˆ0üD)a–o¶î$"E;‰(4;À_U©¯` :ÅjÇîd
+Ïöà—§|õ„ÓUÚhœÑñ`Ë?ó¦ÍËGÓaᣪ+2BM¿®³9ér¥ÍÕ$‘Ñ÷}ìÈ&;Q… °V í¥?º_†(#ÍA]cg' àC"Æ”BpˆRÂÍN¡0N8x–Mõ¬òíQ·ÂWRE§ÝÂë¸[豬[ؾé¶uÕV«êÐ7)œf®Çšànä‚ÄdÙ#ßÀgxŒt€X²KÏiÑÑ"z„!ú£.u>ÚÀÙ¢ž) ³8Nݳ^~–Ýf©k-uû¢­{Fhe†~@Â9E(e´¸ÝQ>PPøaFiæýÎÃ@3îãÚk»vº­š&_DÉž¿Á/ÑúHf©=Úc·Ñe;„hü¢
+¼LU7G•XÅ‘¯ÞŒmC¬ãJÜcY%þ~,þŸÜ²ÿ‡[NÅÿÑ–?w¹ñ~ §Þ¦Êô?@„ôæÝ–\TÓ˜1Ë]Yj#™´6C…^ÕµÛÎøf›è³*ºÌº/³Fjøèˆ ‰¼ÌrÈ3òªU%óþ}© P´O@
+1(
+ê³I‹¼}%là˜•AŒq@yÍœ×HÕÈzD¿0·'°äéfž6Ò„»OÌnÍ”—MKWb·MÉé‚:4k°²ª~EÈ.¾q˜@t¬"êðë¸®'2‰Ä‡´I¹„Çê_¦Ÿ3 S!rqš¹k‚»Q&ajR&Ô˜½ùV¯òßÖ/3NRgÂkªÎª½VX°š#²[‚e‚½¡Â`÷%`n­AZçm½B$ÝàRV¹}ʪÅe²÷ç<£ÏÓ #!Qà‰p¹×;Ö;—WÄ~dŠ§±–÷6½ïƒ¸£(Ú¥¬ aàf¾w9¤ 60É Ïm¾.e¯ºƒÜÙ|29À‘vâAxÞôֲ #£•â?uX©ü˜±xJ?öŽ3“Ô˜2Vãã7ã[uõ“^™n4‚ð>±¼ƒaõ”š¸dMðP„Yãhƒj±MÁá%K'p»–¥-µ%$ŒKÚË1ÉKPŠ4³b¸œ0s’»qïÜeŠÆÊÍ!­3…˜ìNÕÊWÄ‚²¤[È&D©˜/9—ãðäj
+èI÷ˆýmG‹Í•gŠa
+£9óq·#LZÅo¸Ö ·ã°¬Û™¿YÀŸx¬¯q’¯]_ã±É¾Æˆ³÷TQ·V'0€0($ô þÆëëc³F GÍoýç¶ÈW¶ƒÐ>ÇÆETº!²«¤ tPé±¢J°Œa\Qãx¬jH#7ö7dJù_úêx7£PJòºÕ8³ÙJ첕„Q¶ÊÈÒ±]'˜`“¶6‡0Ý÷ƒn@ÂFg YÀm^iS!üa* ´-CC‚V܇œM$ –Ï !>â3p‡ L‚5Ú’Ú8 ‡Èƒ“˜åR̾ÝvË‚ÒzÄÙsélò?05`iÊ¥ M0ÏM^v½‘ŒŠ•1'ÖÒÁ?‚§¹ÂŸ.Ùƒ)¹(G¨ÂQ2ZM_—2~1qÚ ±Ž»€˺€fÊ@~ 9UŸª×º|lŸ3 eO3×cMp7îaÄ>‹D2fo/ó`.F1Õ•¿åÌB\+ƒ1Šì¡1„Ìô•œ6Jqè3Q6l]ÀFh6G† WÆp9hfÄ>á^•°êjÚ±-(íÄ&eåôÄœ¸t­ñmWo«FûäØá8®/Æ«*æi}`Їeõe1¥/”tá³®­Û×)}ù&k=Öo#máÊæÆÚ"úNVBýÂQ:ÖCWUŸp‰˜ü³ý¸Â‘Zæ‰k™ÈŽ*†½¤j]JHå0Ùä“ݦkZ$½¤-tŽ­+3ßu×cj¤‚œXè'ÉØqí^JÀiKçúå m?l9£#*×ø7Ю¡@‚­
+J†v+ì¤iq!|÷]¢#†%BP 52,!(¥‚­Í+Ãhëë_Ÿß¹ÿhÞ‡¯tÿå
+F‘«`
+mº¨û:Ê!"pÎ'9ë±&XG#î ŽYÃç—Qʘée÷øØ;'Ë™ß÷“{ÅŠ=€yÚ&c¤¸¸½»½'/öåëâöËý|Bíá
+í0 ñ£²ºH‘SŽzøT¦Bê;î.ợڽ ‚ïÛàÓiàý
+ÿîînnpßJwÐÏŸïîæsM¿Ç,ötö^Rìó+ˆ¢™òþäëÝKª¢fgÒž
+ÉŠnù±¬êþáºÐégv3¸ oS•íïnAý~ìÈvRúsÛ81ønNÁ`ïP¦x¤zT
+2Uû¼Ó—%¦¼=M [Õƒ ¾Úó)£Ët¹—1(ÈvËl¢Ît¹¾òƒé?Öû§ÿûŸvàDÇã#^K“ãsÇ”‘%WrŸu¥€ŠE4Áûí„uendstream
endobj
-2474 0 obj <<
+2541 0 obj <<
/Type /Page
-/Contents 2475 0 R
-/Resources 2473 0 R
+/Contents 2542 0 R
+/Resources 2540 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2466 0 R
+/Parent 2525 0 R
>> endobj
-2476 0 obj <<
-/D [2474 0 R /XYZ 56.6929 794.5015 null]
+2543 0 obj <<
+/D [2541 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2473 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R >>
+2544 0 obj <<
+/D [2541 0 R /XYZ 85.0394 143.9886 null]
+>> endobj
+2540 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F55 1336 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2479 0 obj <<
-/Length 2936
+2547 0 obj <<
+/Length 2985
/Filter /FlateDecode
>>
stream
-xÚ¥Z_wÛ¶ϧð[”ÓZERΞ²%í²Þ¤½Kvv{Ö=ȶœèÔ–<KNš}ú  MÙ²“³µ¤I
-ØðdÁ»—‡ùy[ò⹡o–;{·Öq*wÕ²„ Ê, Þ[U¦MýXÖ8CiTŠƒjN3ífúp\nµ³}º÷æÍbÑ<ÝELÐëDÊñ
-L¼‚RÚaû5Šâïæ¬aò¢g`l«àtÙPW§O®7s½Û3{ÂÕËÊaø 1,/íïB°é¡6ËÕ†lT/{.‹5+õ5ÒѬD=k 8x:§,‰¦N¬ÆÍfM?fÅskL §|_7kr$˜X”ÅŠzFˆL·lêî™ö¥›!'/: ÎcõT–߬xO¤·}¾ v6µ¬j°Š¡ÇeH­ÊiWûÛKn,Eü~¦ak°ä ZPãðÛ˜Ò; ø]qÐñGkæT\gíÁ@ ™S¨âô…Ôħ:¨• ÔŸ‡u–k¨á)ß5s³•ÝpÄa’½¤Ÿ£P°®“4L’\÷5äx[Ûf¹Ñˆ†ššÚ§‡Êø4L4‚yŠù]ÙÕ µf²ÚLUû`N›vBþdžóWqœÏ!vÙitY 8tÙ5,Ô¤: ÓXêÝð¹X „cô‘êéb3#ÔÇãcçb£/0ÈK¥Ç£nº>³Mk™½@Û‚;2ë¡ ‘â¿·Nõ-;]mõ˜ïè1þ@m³êª†9>JÃi XNÊ’±z½Ý»qmšå¹ÆWˆ‰uó„ÍaGˆ4<W’ìGð¨Ž8‚¥2Žp>äðzÐùkü@…R‹ì¸zŽj@¿¾ä¡”Rô$?šïAì`OEjeý Ge<;•]ßP;a‚C°šF¸–îÄáne!ÜájßçL¨džä
-aÚâ:³aÜ
-„sU"Þc/,®³h‹kÈûã\öq €,îïí¥^´~Ja5ÀDâŠÑÁQ\ómdwxi‹—| ózvˆ_
-Ê®o¨¥úX ×Ì¢¤»ZFÂ¥¦†…IMY’y&f|ù”cÌܨ]4õ}¹v÷vPÜÍå^¤8Ðá›Î»eñìÇÃeaî1 åªi«®YÓSŒAû
-£≢Àoð•YhdÊ"èù…“’
-d04¥3a\ÃœI3.LÂïòû
-¤™ :3…ËiÙ¶ÆUaÒ½!n@Úz+ÎÆËÜ• }…¶ðÉ£Ã
-ê ;ù'UÑa íìï@]tïc <©óhû1† úáòæò×süRwwyAL>^~yÅ™ßñ4¬ïk%ÜíB'6«¬[Pi Nvï¨}ž ¦ÊN±Ô‹¹š)”åÖ{ç›Å6xÆYJNOÌլô µ-¦çôyÁ>‚q
- Ý#Õpw¬«iï ²ýÒèÕ¸¢¿²XÜ7k…˃¦Mt‰úqËni–i^´ëy[³î´ª'ðPü1>K^ÄÞÖóm2…ÏDëìó¦éLÄgÝA;JâŸó ì+rwÿþ«¡í‘¨4”Yv ¨$ÁRB¤e¥p÷B퉆ëIgq: ûÿפDôendstream
+xÚ¥Z_sÛ6÷§ÐÃÍXžF$Ø>9µšK“ørµ;×^ÓJ¢,N%Ñ);꧿]ì"%JÎ\“@Àb±Xüöh9ˆà¿˜D$™Êi I3˜®.¢Á̽½L3òD£6Õ›û‹×?èt‰,QÉà~ÞâeEd­ÜÏ~¾©¸Ñðæöînüýèýø×·ãÛ«‘̬Ɇן>ooÞýr5R&b ¢áÇëÛŸ¯?Ðا«L ¯ßŽï®~¿ÿñb|Äj‹.#2ýyñÛïÑ`'øñ"v<ÃHÈ,SƒÕEl´0±Ö~dyqwñïÀ°5ë–ö©"6V'ƒ‘Ž……ýû&E*%¥&‰V:(LÉ>…y*TØèôõÆ´(¥63 ™#™åMñºšÏë¢9TŠ±t,ÓA{ç#ùU€ª½­ÎNv¼+š®&‹†Í¢€ŽÍœ@4T­©}^”ÓMæ4òG±£ß¥_]Q;a&Ûɲ¬Ŭ;6ù«Z€XjæM±ñÓy³âÕÕHG~ o
+‚IEªt G—"3F¹“<—Ë%Ð¥Šd€¶\O—Û™Áý¢–ØAEà[Ü5Õ-ëªé2ÛÖž‘; ´uùÀ,ËŽ¢Ódøn~°.õöì0_{9ærŒÞR[=6eÅyM!'<sÔ=ì¤(ÖdQ(×+êGèÌŠy¾]6ôÃÝ´Ÿ•Š×Õ36âÈúâid„}É
+Í g×}
+Ò¯¯¨uW‹fŲ h­#RÇÂ%¤¼^²²=|ù–ækÔ.«õ0ñ‘Ž 3¸¯öSìë>G&òþn•ïÚ.q•û…G HÆ@ùXÕeSmvW`¼Cí¢z.ž@Ø4
+ØDžDžJD¬“ø䵨ΠÏS9䕽~M*ã‘W®áJžòåì ö&ÂÇYÙUpØI+%]évIÂJMÌ𑕉EÎ4ç´‚˜Žj^mh8§ßx¨v¼O“R±
+Žqt•œµAÛQ,8Åb§-þökeP nK
+ì£ç¸)9(ã^EC @a=‡bõ¡»"õ¡_"õaÞÅ^º­Q*²8¡œÖáËzhØØ??P†“¢\?ÐДî„q s.{„‰|M¿‹/°› Ð0Zo§Ó¢®©Â¤»zG\Án›ývÞ_fÚc¬-Ð>¶×;ôh§å+ZÕŽ¸„ÏwõwÔu‚<—uÑÍ,üŠ¿
+·]u 9ë6¹vé–“K¹âA…;ÇuÌëW\ÎÎi†s&Pcý°]놦(?‹Á·-—6f4:ÙÑ(—›Ž·`N¨f·óKÁ<.w—nãdx¹ªB÷ù’¥¹œ…±…ïU›>Wp¹*/ýÛcû7§“Ú ]wÛr6ééhfW䛚٭ªu³ð?ž‹âßÇûáî¢Ú2}:$n²\oÁ3mƒ– åÍ\ôâ?Wx °ä[Î93l©ïðµ§Hçk¥u^hV Š¹
+ƒ( 0€ãY”à‹¨´>¥ÄëíøvüÓ5>ÝÞoˆÉûñ¯wÌ A#âðið2ü.{"¡]šP²¬kh6ö¨Û,“L¤±,V«GLÕÜëXæw¾]î}§²)Ù™PÓæ4T7r0TÍiŒŸâ2ŒØ+!î¬#èg’…x¿†â›<Ï¿)ñ_Й…Ò<¼pÑ‹až9FP¶ etÒ…qÝ@p'“ã+<nÎÿîƒ;õmاsú!Ì™ÖI¡O©Ho^èýÉÂWÙp ņ¯N<Òk™«>ÿ}¡Mår-·4”JHÉ’/ªûez¸i
+ü¤Uç7õDÇ›v.ÒBY‘e¦»)ÞfÏb
+ù+÷?Vß:Ç4è„¢àÀZû‡˜6ÕiEª—uvÓ ¨£M{ÕÙ
+í„¢Ö<6å´Sƒ°?жàꌱ½2_>Tð…«Óêµ`—øåã¼z[TgÔë©^Tï¹M÷ê=Ü´_½íMOù­„Nmò"÷^ÀçUX1zßWUãÜ!Vx¢Ç+ãWÈ^T7õzÉ;§,ʼpûÜ‹C|ó\QüG±–…O4öéšç(“œŸ¦c~*2ô¨Ã„Þo}¾:Ñ"…ê焯üéàø4-² ?¢µÃ1ÊJëC•Sf·W«–ÆòìX(‰Añ¤Hp2üXÐ#–Œ £ÒýúÅáõy(½À²RØD¥Ý´ð~QôI ‘V¥~³š·˜%‘lt­X&-éðWŽMŠß‰é7$ Ô!ˆL+çpŒ_‘ Æ4ì¸
+Mg}{&ÿxw;âÀ ökíA\þþÃÏ7cSAј +:̸ûU N2J¥ÏbÎÜ8pU2¶‡êe[½qË9ŽBÁ7%:ç
+Ÿ=Ž¼M‡— dûçh–
+ÜÀ„ZP0åÿu;¦Þù#Xݽ‡Êþ4øƒOc¸¢ê–¦­2ã(‡Ã‚êÛ“e„ø:=yTàõ·ÿhŸÆ©ÐöÔߨ"m}
+•!M|üùŽ
endobj
-2478 0 obj <<
+2546 0 obj <<
/Type /Page
-/Contents 2479 0 R
-/Resources 2477 0 R
+/Contents 2547 0 R
+/Resources 2545 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2466 0 R
+/Parent 2525 0 R
>> endobj
-2480 0 obj <<
-/D [2478 0 R /XYZ 85.0394 794.5015 null]
+2548 0 obj <<
+/D [2546 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2481 0 obj <<
-/D [2478 0 R /XYZ 85.0394 658.0977 null]
+2549 0 obj <<
+/D [2546 0 R /XYZ 56.6929 364.4689 null]
>> endobj
-2482 0 obj <<
-/D [2478 0 R /XYZ 85.0394 153.2806 null]
+2550 0 obj <<
+/D [2546 0 R /XYZ 56.6929 119.0358 null]
>> endobj
-2477 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R /F14 964 0 R >>
+2545 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R /F14 976 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2485 0 obj <<
-/Length 1727
+2553 0 obj <<
+/Length 1715
/Filter /FlateDecode
>>
stream
-xÚ¥XOWã6¿çSäÐCòv­J²$˽ÈîR P’íÛvw&Vˆß&6;ÐôÓwä‘l[8D’Çó~32ëSøg}©ˆŠyÜbA$e²?_÷hÿž½ï1G4DA—êhÖûù]õc+®ú³E‡—&TkÖŸ¥ŸGD‘!p ƒ“Ét:>®Ç¿_ž‡‹c!£««ñääôÓ0à’1R:¸M>ŽÎñìjóÁèýx:ü:ûµ7žµjuUg4´:}ï}þJû)Xðk’0Ö²ÿ
-v·]+¸
-ID9såðGÞ$Iò&³,ñ˜LCÇ,ꌑXJŽöy•dy‰a­¬*vq·½Yes\[~Œ±Á[Ü&yêQŠqAâgUËîÁeµ˜  ÷>£Ž{ÿ@ŸÚ7ý€C€´§DðHÕŒfKãÓ2&aÏxŠ+XÒØaX!&Tu´³»ÄþD¶‚p6þ˜"ó¢þMñ¬Z&•c’丸1È
-Öu¯€<[Ý°c”wfžYÂ9ÒÙ¥Y¥¥Å%Íïj«á¼¸¹ÏŠ­{jz ¯ïð‘«Ú²ÈëU!$+÷ìÒ¸÷ó¢B‡E ¯VìÐaËäÞe#€†Ù$+Ü81©ËZ³Yge™¹×GÉãHABörŽFD ÀJ$ò—$ÈRTªŠˆ”-Â9/Dr Ev£œ©˜©ðlQûån½6
-ÒÞ!.Àk«ÀÂFN„DH ÜøÓèâê|ìñ¤°¯+l-3Û%¡šyÈÐy
-ˆ<­7P0d þÖ.¨nðä埗“1®^6у^uÈ÷ÖÀ¦±³%¯\Š4¸AÀºX<Ê8ˆÌÚgò#±g%ÉJÃ7\1E_Ò}tZw Ùà¹oÛDíÌ*‚6møµÉFÁ2޷ރɦ–hP`ƒO!°‘²¸Áªgl|˜ea²zàaÇ´íÅ­
-XæRecî‹o¦™BMBÎtM:ë„_±{qq˜5«Z©/œGN×FéÈð
-è² [‘Å»ü
-ñº¸ï¤¯öÊé./îʬ||O„²Š4x‘‰˜„¡¾{-~È;Xû/}$b̲õOøî|-U×=Î5¶‰|–›¯Íò ÙÝ›
-X¥š‘kƒÈÊ7tÅDë¦z[~g~!ä’ vÂ,s|±ÙyxJAoÓ¸e:~•©Éo³Ü7¬’µíêÚ­ Æ‹leü•\dd#Љ÷Éxz|}z5;½œxú“÷Éþ¸AE²v0m†k[`
-3R±}Fªf¶ƒv,;ÎÀ¤_šÊ½‚¹®º¹0וËõ.™ãÇêAÕ¤ÆrÎíl·™{qè$e¬–Ê›~Ö#›T·Ùvê+7n
-I²ÍáÄѮ퀎SL}gj瓶œóâ¡Sþ©çêìûl!µßZ<õFÛØÿïO:ûOW|£5ß­9¼ãH;Ÿ¨F)ë7¸8>Q½ùøóT÷
+xÚ¥X[sÚF~çW0Ó< ›½kÕ>96N'¶kœ¶3IX@(8î¯ïÙ‹„$/0m'3aWþöœ£s¾sY‘>†¤¯Â,æý(æH`"ú“U÷çð·w=â1Ã
+4l¢Þ>öÞ\±¨£XRÙœ5d)„•"ýÇéçÁùýýèöòúϳ!xð ƃ緟Î?¸g÷g1œ¿φ$Ž920‰—·ãñèbø0úýîftöõñ}oôX›Õ4`flú«÷ù+îOá Þ÷0b±ý'Ø`‚iÕã‚!Á«ž,{ãÞoµÀÆ_íÑ+SH(|ÁUÈ"F’Qf}q£$«õR£I¾B¯0f¯¨$›{sEiã8î‰B‘ Î‰×ÙÙa1(iaV|à%½ögIãlÄÇÌXlŽN³¢Ð“áwý<×Y@“„e ïãГÍQ”º¨4j§ð Æt O­ÞÒG&±ð¼#Ú‰c©Šýá$›XbwdÈâE\@hA±Ô½G[ùz“îàB0Q”Ê Gµ?ki3\†,BJn±ãÑÈøüÃø.C*ᢇ"gç™þ‚Vðñdq“<
+©XT6½½¾½tŠb¯oºJ³´(7I™oÜ£=Ó.tÙD»G“l›,ƒ>WˆJ)½øÅŠ0x¸ºp©`q@'ˆš
+]ú#Ží²ÉvàØ.=Û›0/ /`ªäLOÝ6õ\! Äj¥U?ë«—h7©f³mdX¦ŸÜb¤¾¾ç³}¹4öíØn&yV&вy'¡³ü©Q
+#-´ü£ÆÕ¨€u­B
+eðyAMŠ¨ñª¬@•-jFˆ&Û*Ïg0bxÇmÒ2çUÅ
+ýŽ‰No®Ã«WëÒץ̌ÝÍúS“¡êU}Êüoõ:‡Ø@0ŠbªN°¡:†
+eÙ0;T£Žª¬kÔK•¡ÕRy•[§ØÛ'&(4S«ôÏ°Wrp‘l‹êëAË~‚#ÄU=SŸœ%ŠD}ù³þmV“[ºÀaêk"<q}~œ‚•¶ì3«tæЉۺšçÖɲ6ýyhû…8¬WI9Y˜¤·"Ò| ô
endobj
-2484 0 obj <<
+2552 0 obj <<
/Type /Page
-/Contents 2485 0 R
-/Resources 2483 0 R
+/Contents 2553 0 R
+/Resources 2551 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2466 0 R
+/Parent 2525 0 R
>> endobj
-2486 0 obj <<
-/D [2484 0 R /XYZ 56.6929 794.5015 null]
+2554 0 obj <<
+/D [2552 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2487 0 obj <<
-/D [2484 0 R /XYZ 56.6929 598.7685 null]
+2555 0 obj <<
+/D [2552 0 R /XYZ 85.0394 683.4656 null]
>> endobj
-2488 0 obj <<
-/D [2484 0 R /XYZ 56.6929 432.9509 null]
+2556 0 obj <<
+/D [2552 0 R /XYZ 85.0394 619.4692 null]
>> endobj
-2489 0 obj <<
-/D [2484 0 R /XYZ 56.6929 360.8886 null]
+874 0 obj <<
+/D [2552 0 R /XYZ 85.0394 579.8478 null]
>> endobj
-866 0 obj <<
-/D [2484 0 R /XYZ 56.6929 315.6627 null]
+2557 0 obj <<
+/D [2552 0 R /XYZ 85.0394 546.5386 null]
>> endobj
-2490 0 obj <<
-/D [2484 0 R /XYZ 56.6929 279.8921 null]
+2558 0 obj <<
+/D [2552 0 R /XYZ 85.0394 510.6781 null]
>> endobj
-2491 0 obj <<
-/D [2484 0 R /XYZ 56.6929 241.5703 null]
+2559 0 obj <<
+/D [2552 0 R /XYZ 85.0394 443.7598 null]
>> endobj
-2492 0 obj <<
-/D [2484 0 R /XYZ 56.6929 166.5861 null]
+2560 0 obj <<
+/D [2552 0 R /XYZ 85.0394 382.7282 null]
>> endobj
-2493 0 obj <<
-/D [2484 0 R /XYZ 56.6929 97.4887 null]
+2561 0 obj <<
+/D [2552 0 R /XYZ 85.0394 306.7766 null]
>> endobj
-2483 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R /F39 1161 0 R /F53 1313 0 R >>
+2551 0 obj <<
+/Font << /F37 1038 0 R /F48 1253 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F39 1173 0 R /F53 1328 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2496 0 obj <<
-/Length 1930
+2564 0 obj <<
+/Length 2420
/Filter /FlateDecode
>>
stream
-xÚµY[oÛ6~÷¯0°¨Y^DJÜžÒÄéÜK’Åî6 íƒlÓ¶PKò,9Yöëw(’²$Óΰ¢(PSÔá9Gß¹3¤áéGa&ƒ~(Ä1áýyÚÃý¼{Û#–f舆Mª7ÓÞëö%’‚ŠþtÙà!E¤?]|\Þßn¯Ç^ )ǃ7èbÈ1|¼¼ýtùÁìÝ_H:¸|;š\ ‰Œ¢P“ <¸¾LFWÃÉh:]|¾ë¦µ^MÝ fZ©¿zŸ¿âþ>á]#&#Þ‚Œˆ”´ŸöÎs;›Þ¤÷[Í°ñ¶:ê³ñˆ†0(é‚$ç´…—H0Ê*4îî§ã»ÛÉÑ—`„9
-–hؤr‚=VpTZîpÝ ÊAð‚HGäI"¥Då‘£4)÷E¼Rf™ªâðg ³P'%:…‰¡ç1iRƤ¦ª0y¯E¾¾á¼AIÀ¸æšb‘ìÔ¼ÌwÏ]ݧà!Àç¬r5•G»&|„‡ˆ…Q[»‰* ƒN¹¶x:$X•ª­$3¿Oëd¾îS–è Æt£,·Øð°´¹ù5{E²P§Í Ý˜Fì34¨Î˜ÁQUfع&ETÌY‘ŽÈ#²åš!¢„‰¶ÈËe©v¸]R&Ùª]¦žj Uz`4ˆ¥ù£êÍwÉ*ÉâÍÉó§¦/8oMs]CSaûèsqÒ dÖÇ7êQmŽü›
-DÃ@œÓ©¦9RªåÛŒ ÊES)Ÿg«Ù~µªíPét'6•Œ¼€T“ê4V5U…ÖÈV$¹CKe ¥:‚‹QuÏ«VSytkCTPWZÊ}*”®Â€Fd8X%*3{w[•M&̃Ñ*(•lðÇÚÑÌót›lÔÂ<=%åÚ°¹5ù‰³]ì·Û|Wš‡¤4 µŒ÷m´J~nv·ßæ!¿h,úC¢ˆnú
-9 ,u…7H«$™¥1¦6ÂŽ©%°ØÆÉάTå}z•, ulMž3ëxcÌ/ìy(õEeqX§q9_ë ¯\ˆí¸Žß‡âÍ
-Rk¹N;½C]åÆ×6/;ÉÅh ±h!„ Nû¡ºy)Ã4¨Îø”£ª|êáȧ8tœRžéˆ<"[‰cÄ¡m™÷»$+Oµe¼:ZMb2EëÝÃè÷»÷#³ž¹¸­ëÜlo‹:’Ë®%<Âj‹tiè£P ! ¡õvôddå_~˜Üy|CNˆqJ›!rV*û‚9Žà?òÊd²i7‚0œ Ž7ã[ëVÒŠ[¤I.¼‹¡ ³h¨¥2_–Íí÷|Œ³}¼ñ¨ED„¨€Ï°÷) ‚\½y¸¹2aÐ ~T×€K퇂ûDRH‡ŸË>M½{8‡œ¡gÐ+eζ“ç¢T©ÍØWyV@±HöéAn
- endstream
+xÚµY[sÛ¶~÷¯ÐÛ‘§Š n¬ô¸qI¶“ä–(‹SŠÔ)»î¯? ,À‹D+™éI:S‹Åb±—o0Qø¤"Js=ŠuD$er´Ü^ÐÑ#Ìý|Á<Ï$0Mº\?-.~|'â‘&Zq5Z¬;²B“„«O㟈&— Ž¯ïæóéÛÉ|ºXÜ|˜^N˜N_ÝßOï®o~¿œpIx)¸ºûõêi÷—Ø~žÎ/¿,~¹˜.½ºº3*¬Rÿ½øô…ŽVp„_.(:‘£gø „iÍGÛ‹H
+"#!%¿˜_ü§Ø™uKmÁ(áBñcp6bŒh)yÏR%¸pÖ˜O§x¨«ÛùG{XÅ;&¤#˜%"BîUQUérògúò˜Ÿ©¤ ü½ÁuBwÖ%ŒD(m~swÛh¿Ûj›YUïM]î‘4K×éþ’%ã´X¦Hú`ŠƒÉ´b*!\)åÅ)ðfäfïÞ¢D01Â#É<7ñ=ëM¸–$Ññh"¡\:Ϋ_ÿþ8ûªÙnŠ:Ýi:Ì_ª:ÝVøñ¶,ªr_g‡m»i ÷b@5'<„.D)…pôŽ¨ÒºÎ¶©]jy…$T&¨ÚAú€b’ê®Cƒ§ÒgÎc¯iP¹Þø9ð¼§dàÀGoÓÚ¬Lmðkê¿1ËÚ嶥=£Î_ŠrWeÕqv FâD‰‘¤
+^ÆCÙÀà¤\B¾¼’*$fLÁ #ÂeJÄ`£á²”/|š¬¿„Ñ{<ìÝ ÓHëI «U¶O—îÞý-#¢x€ÐÛ¡àäDIéYë:Çb¢OŽÅÝU¸1ý±\¯á˜b•$±ѱث±ØžHC¾ £Ù7Ë—ÇògßGí›ï#öúûˆÝ|qY>1%ŠQìŠÈðiò4°-D3DåéS:,€Iëã §_=GZ<fE: ±Ïæ%B<ÄV&)‰„Ô=¸žÎßÎnî7ïšE_)L<<Â=°X" ¬3f ,`dð' •`ñx·ÏžÀM8áPÏ>SÊsO4Å
+°i…‹Lö˜´ã&-¯ñ{W»t™Y¹©÷–n†L; é¹?dv¿Hz†^ì£à‹=CHã$cöqó 2
+ÛFGã…ó!Hï¸ ¾–¦°nÝR éÁ3*ç:˜{xTè* ë$¿Ôì±ø»,CÀ›ÒF»=îRÂÆ{ÜÆ®µQ…x
+ŸUý…~ÅîðgÕ&]½i$ jn‘oªMyÈWý…h§^‹NÒUÀZÅ‹Në% ½ ƒŽ* ÷›5 ¥°„XÇS@“*ЭHÏü¯…\œ-šHX–Û-¦4PóÌé ˜@Ÿz•C“ ¤PG^}  N­²í.Á½
+  „×Æ{ÁQ@ÐÕú‘<Üsu¿û2yÀ6ïÆÊ6Ø–âmŸ-cl|diþ†×>.xÆ,Ù!WnÔ~µË)1L„?@
+QÃ%S@Mþl^üDÕ\ŒŽÀ1+Ìr™‚ gœ.‡)^Ê
+·;Äk$eÚpC. "[©-Š ãéý‹K,QEŒ1
+p‘Õ¯"‚’Dð¯ô‹-ÏëhàylNºEh`u|v³Àr²Yï…'½Í¦Ûð4q¨ÌcþpQµX í«Ã_Cvðú IìßãT£M7þÿì×þ}3Š‰H>|LÈ‹UPÊž“IuêBÿÂSÝÿÞIfendstream
endobj
-2495 0 obj <<
+2563 0 obj <<
/Type /Page
-/Contents 2496 0 R
-/Resources 2494 0 R
+/Contents 2564 0 R
+/Resources 2562 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2466 0 R
+/Parent 2572 0 R
>> endobj
-2497 0 obj <<
-/D [2495 0 R /XYZ 85.0394 794.5015 null]
+2565 0 obj <<
+/D [2563 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2498 0 obj <<
-/D [2495 0 R /XYZ 85.0394 751.9581 null]
+2566 0 obj <<
+/D [2563 0 R /XYZ 56.6929 752.2803 null]
>> endobj
-2499 0 obj <<
-/D [2495 0 R /XYZ 85.0394 466.3276 null]
+2567 0 obj <<
+/D [2563 0 R /XYZ 56.6929 690.9123 null]
>> endobj
-2500 0 obj <<
-/D [2495 0 R /XYZ 85.0394 401.6524 null]
+878 0 obj <<
+/D [2563 0 R /XYZ 56.6929 653.1174 null]
>> endobj
-870 0 obj <<
-/D [2495 0 R /XYZ 85.0394 361.5595 null]
+1470 0 obj <<
+/D [2563 0 R /XYZ 56.6929 620.6102 null]
>> endobj
-1456 0 obj <<
-/D [2495 0 R /XYZ 85.0394 328.0431 null]
+2568 0 obj <<
+/D [2563 0 R /XYZ 56.6929 585.5517 null]
>> endobj
-2501 0 obj <<
-/D [2495 0 R /XYZ 85.0394 291.9754 null]
+2569 0 obj <<
+/D [2563 0 R /XYZ 56.6929 521.2619 null]
>> endobj
-2502 0 obj <<
-/D [2495 0 R /XYZ 85.0394 224.3783 null]
+2570 0 obj <<
+/D [2563 0 R /XYZ 56.6929 438.9484 null]
>> endobj
-2503 0 obj <<
-/D [2495 0 R /XYZ 85.0394 138.7576 null]
+2571 0 obj <<
+/D [2563 0 R /XYZ 56.6929 269.4372 null]
>> endobj
-2494 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F55 1321 0 R /F39 1161 0 R /F41 1218 0 R /F53 1313 0 R >>
+2562 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F53 1328 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2506 0 obj <<
-/Length 3014
+2575 0 obj <<
+/Length 2823
/Filter /FlateDecode
>>
stream
-xÚµZÝsÛ6÷_¡™{0=µ‚ ø1÷”6Nê¦Nr'wz7½>Ð$qÂU¤ì8ýíb)QrÚ›K„ÅbwñÃ~€“
-„šÌ«‹`²‚¹w‚i¦–hÚ§úþþâÕ[™L2?‹Ãxr¿ìñJý MÅä~ñ›÷½ŸøWÀ!ðÞ|˜Ín~˜Înîïoïn®¦"KEè½þôéæÛÛ]MC
-õÇÅo¿“¨ðÓEàË,U“'è¾È²pR]DJú*’ÒŽ”³‹8†½Y³tÔ"ðC‡#ÆÃ1c¨Ìe(1~]ë”
-3ï³~ÆFêUºËy—Óð‚ Ô墥^¾½©§©3_çõJ/®¡'¥÷Ðtkb€KJÍ+š%¯<Øe“[»ƒ
-ЯÞF¢'n˜Ä~ˆ”DAß×ðÏÿ.Ïóï
-üç#'³j ¤…ŸÊ@ñª¼^Œ°™/"8#Ùd‰Ä“$L…ð3¥BCÑÛu³-óNí$¾Êb»3h%®¦2ëÙ ;Ô^éZoÍÀ•¨Ä»s&Gš½Éá̇ËÛ®¡î‚úEM¿Ýš ¬|ŽQ©y×4¶ÞUy=%mÈmiç¡D>Aä-t;ß›®hjÀCÅ_Ú{Ì`¯hé7/Û[ÊÛ”ùÜÈŒ³ÌdÞT•®»v8êX¤`Ãi%¡wo§÷Š{"¹dVmT %«]þªh[P£¥‹¼‡3vʧü™'ZÝQ£kè÷‰Š:ŸÏ5ð0ÆéSäõsSó\½åi¸$¶egŸj;‹Ø¯šOq n|†—˜¸sY¢"2ñà £‹ûñÓýíÇÇHø‰ñ$ŽR?‘™<á1ˆhÚ§"‡!F†£Â}§ËÃ-c駩JÏoi‰F¶ì_¢8õÓ8Ã-ßæçh%¼hÏ,ñv›…
-ã¥`¨nh¤çî²ÔÝ=„›’Þ¯WJy°¤Ù1£nàÆu¹×î¨öJÈ$ò#Xϵ¨ÛVϧ
-†âÀÍ×ükÕÉQ§à³ NlªJÛBq}ûá-V†¸*ÈþÈI¾±‘ âtÎăbýÅšV/hÊxË}’`³ šü7ü»»{ó†fšípôÇïîf3Ÿ&)BG{>äTW»Šã9¦; ~;ú÷¹
-'"—ß]Ú”…¦—&Ád\˜)XÉ¢îô–ÕêH+`Ó9kY.Ì/]*²4ôMu ûA
-¢ö)Hlri²jSZ ]Ï5ç\Å’3Ý|}~ߢË–MY6OFvyâK@šlj"0): ˜¡mØb ûbÎ&/Ÿ/!wAÂÈ»¬c®Pz—O®µp­µmpuUØ!N’Dl÷K†Z6½ {¸#›UÁËžu¾e¡°H[h”ʱƒ§sJ=+j„ÑJ†-uPUÃ)¯jÈ^W…‰Rçj™Í°òcºª©»53în†Ü~Á‰íz¬ž´þl·ïI‚ô¶ æQª*j°Š¡Ù;HF!ƒÔ¥+"¤Š$Œ´œ(öøú°î:v:½Ãè%AP?5µ)Êp¿{|~cg´« ÞsÚk› ðn—5Àðòd
-爎¥0È“ðÁ¯/ýÌžIšÙò†L}í“Ï”Þï2›zB¿°«ú}`&¦þh×æ{Ón“¯ …Q˜y¯—)Ì´qÖ,]Ûš¨¦? etèvM­6x¤™—»Å!ˆö¾ºwš‹Ø=ºé†Ìv­eda ×؆ȓ˜
-Sé¡TçAÕ§:*Ge`õúÅêæª Á
-$å QíÚŽê/àŽ!£,Ÿ©_屉áÕ´Ìíˆ=s²f+œÑ°Î‰ûÍ:|~‘u 8CÔm:S{ šqþÚÈcÀSÿ G{¡ùVýͲ٦c9[òiŠˆ?¨Að2õžûؤl4ü:´F‹°ŸŽB'¢O ¿Lå"Ì;D{@ÍÂìÒ+Úc^^½Oõ¾¤ìPû±Í<§˜„çÖ?õ§=˜÷Ž
-ÜKèÿüg?û¿oŠ(OÒpÜ„‰òaql…B-ý1ÍÐ9òËþ_‘Ã8?endstream
+xÚµZÝsã6Ï_á™{°3·ÖŠ¢¨Ù§´›mÓk²¹Ú;½›¶²MÇšµ%×’“õþõ -Ù²mç’Q €ÀO
+/PQÛ´‘®+
+Z½ÐÔ˜éÉöé)/žèÕXæEŠÝÃ4â8 /ø¬ÁuÆg–Ëøì¶ÛgIª¬ÏtVê#§Iˆ¢ïçMs\¶µ{qßG˸O•FhGä4‘ƃ§üYDû¸ÖÅhô3½
+݇]yA]4EhÌËÍ*«©ó¿ðwÿþ=õ”›6õÇïïG#:ïæÔéädFÓÓv¥‹š( 󯌛}ë_ÊŠC3Šýö±±N ûo •ò.ôä<ɼ¨õ†§UÓ¬@ wf<»rŽýsˆ žþru0wëgr¯2‰¬)Ó²
+=©DrÞ<ÇÕa_X©'¥m Y°ü cƒ…-D–T¡EV‹Ë` ¹_Òs f5
+)!lOÅ ‹”Äß#%ñ`Ï$ÛHê&³§'ü¬jÖKkV­»£LóÍÙÊíXÆ_…ŸŒýзg:>f2Ø»ëÀ^
+•
+2÷+ ç{a ©äœmŽéظ6ô”ª8nYÇÈ“6=@ƒ‘'y@±Èkr4 ‘Ûñ% š0/ßszbà•’zÒA5b’R]òzЪj×t(Tž"n¯@_¡7/ÿ¿U>‰JA|¡ò5¹NÃÊq\½ïÊixN¿®ò%išœ7ÏquØwXù`á%ÚòšŠöÔà5îRÐsAàÖTM.ZUA#·ãKzšPÀ ™^jª{ÒnádD˜…k2»Ÿ¤C.GZK^–Å“Þ¸˜Û˜ú†ôÄ)·*6Í­²]3®2;ðH
+Z£E x³pA}¢åd°R„9ˆ¨¸ÙØÝ£=gË7]qq ÷G¨ÍêfÎSÌ®:YÝ‚8ôÒ0¸pÜÝä:c—É1yçªIÊV7;»£´Â,`;k›ãê0®•VÂÚ±h[Ç¥-²j‘ê083 å gôŽH¶‡G*¦W 2ð}{tÙMz¤‚ó€jÃ:fæÜؤ{~ Šþ!í)a7Š×Ù&£#'$ïè™1ÛRg4'nª3WtDîVý”fZ«ÃÛB» FIVž§íó+jßÖ-!í©w`šeF¸r(ú5gLëB—¶ä¡ ÃÆHþL‘FŸ‘ÍWaDsÂÓFZ¾âÁFð(›'Û‘¡Ôó#,ðì¹3Í@‰¯ìÙ".Že¥qiAiJPº¼í¦‚4Îj‚÷„ðl9 ƱØheDá6B8¢Zr`?ç_Á«~Ôeò¯0ÛŽ±ûpI´µé‡Ý‡[:^ÉA³!Ï Šá Lé D|É€¿?Ä\‚¸p#‰Œ
+èzˆúèë5¾S½¾¦›$4 Nc\»‚…f¢ývÑKæƒ0^ÚÛí„c;DGÔé¢qÜÌÅïøÌ yÉí¡n~ptüUÓuH§ónÌ–Mñ”¡Ûó5¯7ª7|þ4§Þš…×@ØE{À°qëÔÉŽ¨fËβ %©£[ììïúFqd¯<Ló¥ÏÖЕ‡¡-l«ûÌÞ^€DÉq
+P­¼’ÛpA nËK&ËG=æV‚ÅÑ¿¸;…h»Mw§
+¯¾Ê|üåîa|â2Sœ¾ÌœèÀ̇|ù ›É0H—yºðÄ9/«òÒŽ|½É‹úÀ ÅÝݯtÔ3{<U•Ó<s,|e¹÷ï¾:ŸXþDÊ“0׳‹Ÿ=Ïé¥ó˜…ÏöPì©Ã0<«Ì²)kú5E¿ª–²Ç†¿ UŸìZ`j³5Ý%{§~©
endobj
-2505 0 obj <<
+2574 0 obj <<
/Type /Page
-/Contents 2506 0 R
-/Resources 2504 0 R
+/Contents 2575 0 R
+/Resources 2573 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2510 0 R
+/Parent 2572 0 R
>> endobj
-2507 0 obj <<
-/D [2505 0 R /XYZ 56.6929 794.5015 null]
+2576 0 obj <<
+/D [2574 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2508 0 obj <<
-/D [2505 0 R /XYZ 56.6929 679.0396 null]
+2577 0 obj <<
+/D [2574 0 R /XYZ 85.0394 657.4255 null]
>> endobj
-2509 0 obj <<
-/D [2505 0 R /XYZ 56.6929 422.1751 null]
+2578 0 obj <<
+/D [2574 0 R /XYZ 85.0394 112.9597 null]
>> endobj
-2504 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F41 1218 0 R /F21 938 0 R /F55 1321 0 R >>
+2573 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2513 0 obj <<
-/Length 2295
+2581 0 obj <<
+/Length 2239
/Filter /FlateDecode
>>
stream
-xÚ¥Y[sÚH~÷¯àÍPÚÝê‹Ô3O$q2ÌÎ`¯!5[›øAa4‹„ç×ïé+4&Ù­TE­Öѹ|}.Ÿ0éaøGz G˜JÖ‹%CÞ›¯/pïž}¼ Vf脆m©·³‹«4îI$E$z³eKW‚p’Þlñ¹?º½½ž¼ÿk0Œ8î¿Eƒ!Ǹÿçhòiô‡Ù»Ȩ?úx= I“„%&pÿýd:½~7œŽ?Nþ}3¹ÜÏ~¿¸žyÇÚÎL•Wÿ¹ø|{ ˆá÷ Œ¨Lxïn0"RF½õãqF©Û).¦ÿô
-[Oõ«!0O˜è 9C
-û*ŽéûPÔž E‰)OÕµ¬ÚÐÀªEÛ-uïÞ%@eÖ
-‚7RQÇ׬ÔÊå¿Ú«–ê½%@V«À¸Í:j«P §Zõãn•y¤1‡'˪(ªgfÔtµ[•{ÝzÃj‚’ßik*7¿eVÇåË¥6,ú—ëÊ/Ÿ/­7— ¿·r+8¦
-©náK¡Àç¹vÛrhở·œË2Np A¯ÒŸ¶Ôiúã¥4ýÙšvÇ;cÒ L¶–
-a~`ò¶…LÝMOÇ^³Må:7 »uÚœD‡% Á(8CÛR§ÑñRM€B¾&’S›6ï®n¯FWwWã«÷WiqL¸"·¯úè¥NvH¢$ˆáïzé
-d…*sÍË…žöçU®S8ð”âmk«ó¾m¿pˆŽqäÒ'
-0…ñË(éò°Ñ§Ùo7wç‘+FXf6y¦/u“­í”W•ð­Óä»õÞ.L2&"«‡Aª`;×Þ¢d0$‡£®4F”GL OÒ ÇSRјu9¡S¤úȬÌ/`öÃÆ?WÒžÙ5UU„0ÃÉøRV›:¯ù€ÀˆÀG±@B`¢ð%M«z•Ï´UhªÀB|ÆKÃWuøy˜Þ»ÕÜòÚ™ÚÀâ¨t 8/€Î†ªæ»ì5.»5¾È·ðeRm_JÕ~‘OV¯ôú¬Ò¬|ÌËP3êŠyÙh\ ÷Ý™í(òÔçÞÎkŒ’¸;
-prè:§ â •cßÿ €%ˆendstream
+xÚ¥YÝsâ8Ï_Á#©}Y–ö-“d²ìÍ’°W[736‰wÀæ°Élö¯¿–õmdï*U±ÚÝ­ŸZýe2ÀðG‘@BQ5ˆG&Ñ`±¾ÀƒgX»¿ –fäˆFmªó‹«O,(¤ƒù²ÅK",%ÌÓ/È`t ,ððv2›ÝÝŒfãûÉ¿&w—#")‰‡×w“Ûñï—#a bŒ‡¿^O~»þlæ/^ßßÍ.¿Í¹¸›{ÍÚÚÌ´Zÿ¹øò RØÄ/1%£ÁøQŠÖ<b(⌹™ÕÅì⟞akµy5„$Š(€ Cã8ŒA1!@sŒÆÒcFI3G¥1môF¯>EQ‹’$Uš5$7WW×WÓ«ñÕíU²Zõ! #è -ü@EGP‘¶ †(L::>nó¢†ã¡ñ0Ñ9¬6Ù"ÿŠ1]˜éuV'iRÛÕ×dµËÌB¹5Ï*«ÍZ¹<úFæÀ0Î_2ƒ o£G…B’à àn]õ9¢”6$å¦ÎËŠKÞŒ¤§†÷`ÄD§
+3p|Ù‡€±B˜ÂÐð *S0ø½ ?/j³{Zip¬¤è¨$‚˜kL,§ëc¢øQQÉ¢Î_ß%‰‚¹gZÓ¿¿)ßkù¾}E(bÄá8 mÄ)h)Ò7à­ñ£F. ò¢³G˜1R›¡9û¾tàL„· Ûà^¹´³×¶Ì4›ïÈÓW›àá\{÷ÒLo¬W¡öjFŸe“sVß]t L Î1ß»†øê¡õ•=ÕY„¤ðç„,xlcð5°e1Š%e íìîÎhqýyöàŒ#*!.4yZTU¶}ÏÞž³â+Ž°„ÄnÄ.Vùsñ¸—ÖrשöyÄQ¥œí}On eÕI×y‘Wõ6©ÝIL³ef ®XX$MŠ]„ B¸ûÒ€#%½5N?ÝŽ
+!ÈŒL^dÆûuMmÂ…¶ý²\…@Ã=k|+ÊM•Wýt€A2"ƒ8
+ðì¼ëD¶I–˜f¯Gn!>¼…3?ªÎº¿ªN¶õ1/)Ç‘ìóŸŸÅ¬®CFNbˆÞô€]íG;?z=ê\"³Ê^³ÕûãÌïaW¡KÕ5ÐìÏ<·.#õ«'œø1+ýÓþò#vvCU²ªƒé1R¸ôŸÏ{¸ÀMÝP½ÿd¯íHGb
+Þ´9k6¡+—ˆ ǵ™‚\^ƒ’Y‰Éæ`.™™šNgã{3gRð…餎·!dP
endobj
-2512 0 obj <<
+2580 0 obj <<
/Type /Page
-/Contents 2513 0 R
-/Resources 2511 0 R
+/Contents 2581 0 R
+/Resources 2579 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2510 0 R
+/Parent 2572 0 R
>> endobj
-2514 0 obj <<
-/D [2512 0 R /XYZ 85.0394 794.5015 null]
+2582 0 obj <<
+/D [2580 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2515 0 obj <<
-/D [2512 0 R /XYZ 85.0394 567.3101 null]
+2583 0 obj <<
+/D [2580 0 R /XYZ 56.6929 659.6547 null]
>> endobj
-2516 0 obj <<
-/D [2512 0 R /XYZ 85.0394 399.1134 null]
+2584 0 obj <<
+/D [2580 0 R /XYZ 56.6929 595.7578 null]
>> endobj
-2517 0 obj <<
-/D [2512 0 R /XYZ 85.0394 330.2279 null]
+882 0 obj <<
+/D [2580 0 R /XYZ 56.6929 556.2057 null]
>> endobj
-874 0 obj <<
-/D [2512 0 R /XYZ 85.0394 287.2095 null]
+2585 0 obj <<
+/D [2580 0 R /XYZ 56.6929 519.369 null]
>> endobj
-2518 0 obj <<
-/D [2512 0 R /XYZ 85.0394 248.8505 null]
+2586 0 obj <<
+/D [2580 0 R /XYZ 56.6929 487.0966 null]
>> endobj
-2519 0 obj <<
-/D [2512 0 R /XYZ 85.0394 215.0559 null]
+2587 0 obj <<
+/D [2580 0 R /XYZ 56.6929 420.2778 null]
>> endobj
-2520 0 obj <<
-/D [2512 0 R /XYZ 85.0394 143.2486 null]
+2588 0 obj <<
+/D [2580 0 R /XYZ 56.6929 287.6148 null]
>> endobj
-2511 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R /F39 1161 0 R /F53 1313 0 R >>
+2589 0 obj <<
+/D [2580 0 R /XYZ 56.6929 199.8075 null]
+>> endobj
+2579 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R /F39 1173 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2523 0 obj <<
-/Length 2973
+2592 0 obj <<
+/Length 3585
/Filter /FlateDecode
>>
stream
-xÚ¥ZßsÛ6~÷_¡™{¡§?I }rm_ê&v|‘Ó»^ÛZ¤-N$R©¸Î_ ,@‘Ee¦É¡ÅX,>|Ø]šM(üg“Øp3IŒ$Š25™¯ÎèäúÞž1¯3 JÓ®Ögÿü—H&†˜˜Ç“‡§ÎXšP­Ùä!û-ú‘hr#Ðèên6»¾œÎnÞÞýïÃÝõù”é„%ÑÅýýõÝÕÍϧ\QPeJ£Û‹»OïQvnxtñözvþÇÃÏg×­a]ãÖª?Ï~ûƒN2XÃÏg”£Õä~PÂŒá“Õ™T‚()D,ÏfgÿnìôºWÁ(á"æÞàlÂ1Jñž;”!±à¹ãêzvùñæþáæÃ]{gçA:™ò˜hAµSÎʺÎçÓºx.¿Veî_à’„.xÑê[Å|Ë(µÙ×À£B±è¦AÑs^更ɽâì v¤e†¢aP¶9g:Êç•{falTÑÚ‰«l;ÏûÓZCr?Ú—|SU‰Õ“]¸ÎÛ=E!TšEZFG_QuÎ"g¼Tqô€]&l7E}¯^ФͶÆ÷`t'Ëòeþœ60«ïxBCWØÝÎÓš Bç`'ý*Ú,ÒåEý=ø±èe‘ËÔi‚=óE±Ì¼Õ0BÒýæÖJÃ"9î‘]
-4~?¾â§‡î@^çå|o¼ô±+|òB„ìböˆpÀ¨ÇÐçüµÎ›¨ M„Ø£Úï”ò¥ý)Ì™§ó¶‚[ ‰ X Ü 8SÂÉ8‚þƒ;‡g‘„±x jÕ±³‰JÓ®V8š‡DÕjÙy§éþ”àc˜Ÿ2( LÙõ^ ÍD°þ”¿œ3
-à-#÷¸ŽeQ>nmõý/në¼ÏßÕ2Ë}Ÿ¿w
-˜a„ÁVy:*
-{
-ÿÌòéP\ü”n—M¸Ã+Ý~ž×Œý°wgç«uãyÔ±¸k…88 áÛªôOÜ®ãç
-ð&FZûgOÎ;·WW„Õ¦§åë^?L!Òg‹ÅEô°(üèÕÚç Ð^¥~ŠÇüÐ8X庇à¥X‡ÊFS¬FÒm`\I–9±Ý­‘íZn»—ÛmãªåÙj•bdØ™ .Ô@ª£–µZ¦õc&°ÍF¯=Ûv·J[ïSÑÕ{[¢ýe¶|ä¤Eé•Ú<ÎJ݉)ž8h¸]µ=6¶‚ÃþîúWNíjÊ‘¹½vMá‹‚Ðç½áú]é d颴,l5Dÿ4Vf¯Þ¸öwáÄA¡`ï9Š ÇÀ2æD
-A›…- 醵\ÌxtZ}/YutÂ@à\¢½K´sIëíý¡£ïî\vd
-cr12Xƒl‹SÄS+‡´YvX¸Í³£B!ì K)J·X¼éíb­gŽ"'†{Ÿ¨ëïtF¾•£ŽÃÌâ –j’ÑÉ‚ÊÁd½:&#nüîd÷›¢ E]ÿ‰­^Tï€z»Z¥›×#I–ÂË¥ÿ˜Že¦çí*/;çÃÏn\`º]ióovk+;Äþ‰Ñ€“hûçû/™v³%"ô±ÂO—ã`”5œ)~&ÿ7O‡¶ÿ21?rendstream
+xÚÅZM{㶾ûWèi{Ÿ¬P|’@rrÖn²Ù]ïvåm’&9ÐeñY‰TEj÷×wP¤DÉÛôPû@h0ÀÌ; qø#kWNR§™áÂŒfë >z€¾ï.Dà™D¦I—ëÛ»‹¿þM¥#Ç\"“ÑÝ¢3–eÜZ1º›ÿ2¾zÿþæöúÕO—iøø[v91œß^Ý~¼zC´÷—NŽ¯¾»™^N„•"&Á‘/áãëÛéôæådúê»Û¾»½¹üí›»V²®ô‚+ë_¿üÆGsXÄœ)gÍè~p&œ“£õ…6Š­T¤¬.¦oìôúW‡vCËŒÔÉhÌJ 7¼gœq{0Iµ`"qI»gR íYäÂ=›\.Ô%,1&u;š22 L);S
+.X¢Òþ”ïvÍf×\N”MÇU¹z–7˪Ή¸½vœÏ*ÿœ­yÚä5qf»¦ZgM1ËVôr:^geöÖû'\ÒÁâeÊYÊAîe˜—uÏ&uñPþ»*óðBWôT³Ä9ø_\N´”ã‚å -)´>|
+NçÕÖÇ¥í«Ã£ÓÍ*èBS¬óúäik€<­žÉÞ:L§O;2ùÓ^ œ¶cBšôÏ!Q*Êã ¦T<9+VËt,W?>ÁàÐ{‚í݈L´7çÄŒ¯ß`²ó¢NcuÏ4Ÿt"Hõ¦–„þ<±Ã(JEBä„ïbN姘¶£ã‰+R
+ì [áûQ –m ›ÇC–°’ĸgŒ~9T‹ƒ®£ôí”6A3W‡×}ˆ\^!ê!óçà#Ûä
+„·RôÝz±ªÏ‹$ª\xÞ×ÕjçŇè»
+½$Æ
+âõÏ9Qp=ŒÂØ«’˜»¯j:—=/µ¼|d^\BèÖ ”û§0?=Ú”MRö‹,?ÃßÛ·×13iõõ÷ß¿};R†NÑgߠň±äðg@R­ çÈ[™S}¡¿ÖæëØõ»{Im¨ÀñÖ*o–¾~ ý°¾ !ÇWÝ*BÜ%d§M7n‰ [bý–´ûaÃ~ØñW·>r 6…:¯ÜÒr–ªœÚ>«Á_¤aÐè{vì‰ç§(–
+ÅOùc@[LˆX: qXá°"î³×å: q-—‡¸|âRqÚ²À|à° ¦í¬p-×€t=€Ó–%Š»¾x-À 6à°åÎ÷ùCÂ\¿pø3
+<2“§è_¥­ó4¿Q~EáD"êË%#=N3mîoHÈôØe$* ù äL sªõ®>¨ÛÂéÅj³ÌÊ©,˜åö¿·Á“˜+ñÆÌÚgÂÊ.×iÌm¹<æþ4„¹’i£Ú­ú½¡HÚWžO"°ƒì ÕgEm¹dín lŒ;HËzÂþ_Ø{ÍÞ
+»Àn*Ú$qé¾>?°š\•„8Å‚È-óëékjAˆOù¦ b,pR¬à%‚'¡n EŸ1Ô¢Ñ0"ê.¯Ř꾗.ÂN,ãUÎ:+wþþ²­ùY-Ó‰Lé6»¦ÒØ)'ž2gµù#>ìÊ‘·ÆÛÔ½·†É‚‚V¦ï:Eÿ“žGÞÚÚ®·Ö2õŽ-Iv²4áQÃA`HïP÷ üÁûü ÙruÝš1Ñ­AË;mäN{ÿ’A§íŽNÙ:žÇ˜ÉšOk볘H°…ƒÐD§¤:*'4ú.\'q÷uPW|vv~†D§­ÓƶÏH<mèؤŒskŸ꣫{@×ÔênzsNÃr(OI Ó·éAÕ2îW)‰7 ÇF'êË\n"]7¦À1üA+ Ú^h´~~¢¹9uK.8Ī5Ž3óëÂ|žv­ˆs€IwÛ2ÚB2uTôÄHÇ å#i»j=©÷90ì.ä5ÚÉã\˜ùtlà°a3…Tä¬Åþãˆ?Τ_Gî¹pF`~,å3%ò.×ép¦åòáÌb°lšX•«ò_¨LÅê8„I8Ói¢Î‹×r Èׯ’ˆ¢Ò´/ }!’qyéËàb¼FL´jAO(HŠªø9 ýÍÖžЭɊø¥H5è@ÿåSÐçþS©t?qÐab AÂe«¦ƒÑs
+N{ÍÆB²(%KŒÇ—Ïù|øûkãAø)¹Š_r(°7Z+4é˱þŽÙ! }'!¸>Ùʌ͔®›¶ÀD>NóRTÃ~XÿO“? Ùøj%;8`y°ºöX¸n¿RQ­Û¢iÚwªx³¯`~•œˆXð#€y?¤òUk¿/:”P (Ü`Ń߳¶u¡uÖô ß¿BŽ·Ø­Vø<mÆ<e‰{¦Ôa:cÄÉÛðòèbR=­ÏÏyŽçë]Œ;¦¥éÏ÷~[”ñ °Uõ²Ú† ©wëu¶}:q-@WMñå2œÊÃn—¯>\ÓréVÁ¾ôÃ5ý¼¦)“i"žù pÏtæ{ÂÀäÏ¥xîJ
+ö1ßBPp\ýµøÝáÁZ¦cÉúµ¹Ú©è‰öc›åeôØPðõ¹¨võêi»Èø°U„ o“ÕuìÍ̓Z—Ãi¡¿XÄÆ}ÞMi¦P«»[æC¨§î¤Ö›v°Ö‰²°X½ÿ¸‡Vï7û%åú°Îý4[ÅÂzœÂÿÊg† diA)ëAÝB|p94¤.S C°¢ìUá1ŽaôÍO¬«g4N¼Õ‘‡cœú0W+UjHmø(bãÿüÑîþûd•µ'ü:
+ODw(ºgg,Øö±ìÿÐÀ ˆendstream
endobj
-2522 0 obj <<
+2591 0 obj <<
/Type /Page
-/Contents 2523 0 R
-/Resources 2521 0 R
+/Contents 2592 0 R
+/Resources 2590 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2510 0 R
+/Parent 2572 0 R
>> endobj
-2524 0 obj <<
-/D [2522 0 R /XYZ 56.6929 794.5015 null]
+2593 0 obj <<
+/D [2591 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2525 0 obj <<
-/D [2522 0 R /XYZ 56.6929 751.8053 null]
+2590 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F55 1336 0 R >>
+/ProcSet [ /PDF /Text ]
>> endobj
-2526 0 obj <<
-/D [2522 0 R /XYZ 56.6929 661.6515 null]
+2596 0 obj <<
+/Length 3487
+/Filter /FlateDecode
+>>
+stream
+xڥ˒ã6îÞ_á[ÔU±">ôànía’™¤&ÉöÌNwj·6ÉAmÉmelÉ1åéq¾~”%Yr'µåƒ)!OBbÁO,â$LŒ4‹Ôè0ŽD¼Xín¢ÅÌ}w#gé‘–}¬¯n¾úV¥ šD&‹‡uVFY&ÅÏÁסˆÂ[ ¯ïîïß|³¼ûÝÝßݽ¹]ŠLŠ4xõþý›»×oÿs»”qø€EÁ?_ÝýôêG‚½¿52xõÝ›ûÛ_¾¿yóÐqÖç^D
+Ùúýæç_£E/ñýM*“Å‹gxˆBaŒ\ìnt¬ÂX+å!Û›û›u{³né¤4à…¤Jä„8¤ì‰#alL¼Hc&J*'Žòó¾:ÜŠ,(-¼[&‚|Ý–¶›’«ÓjËê†éOùöK|Ì‚ªe0¯&Rm^Õe‚Ó‘
+Þ™ÃseË™%«¦¶UQÒÊ‚wnèÿ‘wu\Võ=Ù¦©1äug
+š8–î­ÜpPÏÕvK#G þi›ý6_!ƒ~iÒ¥•øΨ (×ùqÛâƒô@¸
+¢~õ­}›‰C“ œvÔÅ©â@›â(ÔZgŒØLÑBLfÅ1:G-‘¡ß3÷ï‹ Û}¹ª~‰"Y_ò²þ 0‘jÁ+‹ÚÚrµD±ýr¹Mš† ø1ã?•uyÈ[§ùÉHÜ–ÕnòÖ t©@I d‚=3«Ò
+#X6äÐù*%â€Y€±v:ƒ°ÖO:.iÎY…¢ImKÚt𾱶zÜ–„DÄ,áõta$3©“0M"ɲøEJÝ–Ÿ[üŸ0< ‚3Þî~‰âˆÝ+ ïDž|làÞ[éÞ&‡üyn4Á—üàRË$zdµ|L4û¶jj{ØþPíòCµ=1L².\d‚'§ø&!…ç£õ3dò0(Nu¾«Vô€NÅc øyÛ09ô/<bŠÅq·§IàÝØØŸÓñ¡µ§dršœ <ÖM½Äƒ '¯8†@‹™ü
+™$î(éÔ“Ô©Išå
+¬ºŒ+0_Y{ôdNŒ´
+\¹‡xòøßzÞ-! tKpì)$©çꟉPõóÕÿÒ@öE£º}ÒDzÜÏè ½±9ß o¦®÷´„d1‹{Õ?æI.GšÙ"†”'ëpúNA˜PÅ©êQ=ÖÕgŒrsD£ÐDYÖ¿Xèk†ï”†P‘I5©iÙǺÔTGßaM‰u ‚Bnq}÷kbû
+â%göÝøª»KŠj=Nœ~^ sbƒó
+4èºØzXWÄæ±fõexG—™ä: ÖÃ;:0ó42C&Þöû¿ 1Ž”]üðí74&“œ¾Aê±ÙA¿²³Â•Y®$».ÛÒ¼h=ÒœÍ +Ã8ÊôÕí;¤Ëýb%ñ§îË¿,KŸ…t+ú“ÍÚ/†Œ»ðeZåú3.¡Ù7«Ílˆ’àu´Ž²ë!ª5¢:,¢šéäCé´+ÕSU_æÀ
+\Vœ]g­Ãšàm˜da†iÇ€¹/H¾JA1:f85|»yA/gt]±áO¢½¤Þ]zö2ÍÜÚãn.Ñìhx¾æÎOfadTòÂùõ°®œŸÇrç÷î¥*Þ+=¡…Ä×ì°&8œb¬Ð²!‹ÔCH£s!”4¦þºÄ&ý1 ¢¿R†¼ÃÕ@©8¯éª 4òéFó½fC·«¥¥WÒ3îH]¦×{B%sM‡‰l#
+c9è5¬Ûíñ$ŒÏÝÔçDÏ›ŠjëŒÔ|/C„R›Œ®aª»¥=VmþHzžù’Èß26«Òú˜ÑMJLw2‡šœÀ€TûÖ~I)·IB)#1j\N¦F2
+“D¨?ÕnQ ™ŽÀÃLK…"1#rÿ¸›!¨T9ZEª…ö"UxÛ6þEù¯pÀ%¶û8þsú{¬êüp¢q§Þ4&Š‡| [„m¾‡r OS²øcbíÛÙ貊±˜®EN)ó¨'%þœtT˜ Ó•&ý⛶äëTO—°!],ÝÁ5“;ÌÞþ™fØŪ”mûot‰Pñ‚;ªx§ˆ»ÌÝŽL'=;håûI0ûXö[ÍyÁPîLc‹šútüz%=óO‘aÂf¼QéLþ>¼A»F1ŽMý°³ò×oÃuîק>t[æ¾q¬„‘Eô¿©ž6ƒ«”.žv_ž Øš^Ruƒ §«Ñ«5½:,½öã-“Gú–ibËÁ§"ŒÒl´åO(0et°·å±h–t 8(ò6§Égº}ãî*Y­ñ—^ÜgÅâV+îô*îî"Ö:·m×CÑ
+ŒÝ6À kWÄ4ðØ}Q8tïŠSœ’#>Ÿ=]å
+ ãzس/SéØÇ“NSß~NÕ¹9
+»üD§[0y´åú®|KôÖˆÐk‚ÉÁu7`ù3Ì8Mƒ¿ÐßcjŠ'{Þ³͈˜•º ÞV»ª½ò-†‰!|dòº&öæÑ#9=|?§‡×öëÔðb¿)-ìï÷º²>
+endobj
+2595 0 obj <<
+/Type /Page
+/Contents 2596 0 R
+/Resources 2594 0 R
+/MediaBox [0 0 595.2756 841.8898]
+/Parent 2572 0 R
>> endobj
-2521 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F55 1321 0 R /F53 1313 0 R >>
+2597 0 obj <<
+/D [2595 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+2594 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F21 950 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2529 0 obj <<
-/Length 3169
+2600 0 obj <<
+/Length 3141
/Filter /FlateDecode
>>
stream
-xÚ¥ËrÛFò®¯àm¡ª™^G;vRNvm'Rj·6É"@ 1 0Ð2óõÛ=݃ª\[:p¦§§§§§ß\ ø“«4
-…ÎÌ*ÉL ­6û±z„µn$ã¬=ÒzˆõúþæÛïu²ÊÂ,Vñê~; •†"Måê¾ø-xõñãÛ÷oÞýçv­"¼oבÁ¿^½ÿõÕ? öñ6SÁ«ÞÞÝ®ešÈRD‹EðæýÝÝÛïÖwï~xÿßïßÞþqÿãÍÛûŽ±!óRhäꯛßþ«îðãu–F«g˜ˆPf™ZíoL¤ÃÈhí!»›»›Ÿ;‚ƒU·uN&JÃH™xµŽL(¢TÏ‹Là #Bc´êD¦äœÈ<Šl]áE¿ý>Š˜Y(U”
-·5 óµñDݶ9´U÷U* ì¡ÜT¿ ¡JK€ÎtƒÍy³ãaw„›åŒ™3‰f‹œomÙÒ|ënÒìq–í­ ˆdlNGºeͨmµç#~‘¨<O «º°
-æ:(Êm~Úµ8Q^
-©ÙzีÓÂKë‰ÐA˜”›9ZÈAr%ÇèµX…Þbs_d¸7ÀâÞ6<!&#ygQƒ§Ù8wäÜÐå1Ij¥#Æ,ëò˜·Nó㉸- ª}Ê['е–i+ 3lϬNЊ
-XÇÁ¶9L ùÙ¢ÎTÊö‰€9áxóÈÀ—ÀêB“0"
-¿½û ¹sRð»+­ȩœat xY¸Õò̦ڜvÅ ¶:Ê8ÜÆð.:É®‡äÒrDöH. ¿› ÈqÚ) aküž4d”ã8„Ä"»Ê\‡tÉÝ($'24ÔmÈžóRZFŸcã´a­_t,Ò…e¢1íJ—”™àccmõ°+ ‰ˆYÂhÁD^ …I, âw¥L[~iñwÆäH-‹¼‰b cÏŠŒ"'>µm )¥6ƒSŽùóÒ!I(eê9"¸6*!¡‘c‹½r'‹ú@c;«}~¬vgƒ9Ö…‹J0sJŸÅ¤Ÿ0?Y¿Bæƒâ\çûjCŸá€Ï° “CßÂ#¦XœöÚÞ…Mm-=!s3äH`Z7õŸ‚f^7p Aƒ2ù
-Bº—¶Ëy):WÕ×DZIW0 Ì{kEÑ—È“+AŒo
-¹^ŠÕÙ5¶:¤K¾Æ!Îc¾îFÎÇø$ÛV3º Ü-z ·„伌q#fÞ™ ^Ÿi…“atëqFm·¡£@+>ÖÑÎwC)BË_GEÙB¦VFá"Q:Öµï>þºø¦ØS"Š¯?êkùU;,÷¬ïçž[¸>W²M¾oQå»…šJ UhÁU&;¬.GƒˆÂÄÄñ˜M—Ó‘w^á ˆ%ú—Ʊϭ_a­ßí3\ÄL
-–&ËÅÖ:ƒh#Ĥí€eЧ²<,”CÚ„Q&ô|Í5×G1
-‚s:¬µ0.¹˜´pDÅhÚ½Þ|aHG‰P=ÕÕô*KDE˜‰®at¡¦R@5 ÜOƒêÄ ™³ÇZÑ.U
-›¸'6'Øq«]…ÂDñ Ç{¬™ãÇ­ö$*ÎÆç¿i|‘Ó¹è¢ÚN]´SOªH=ÝROȯ•(1¼ ¸ÚÁy¬E÷D@‘uü Œ4ÃÁ¸'"ÂT&fÌ»a*õsã“íR²_¾ÿŽ2KÌ#J{Èš6vY¸ø#Wé ¢- ·ÃZ2±l92é ,x¬FÒ¥GPcîʯ–©Ï?ºÃÅfë7»Ï>ñu-q×Y<4›§ÅH¹b'ú…H5ÄZŽT–‹TÍ|¢MçÈšcõXÕ—e½
-!ýS×Yë°fxç I¨´ŽÆÌÝ{Ar‹bt̸LXP¥;ô£öùä-º4Ï¿D{I½ë5E\+£-@)¿Ÿ¦˜>ƒíhx¾–ÞOâ'Uþõ÷`]y?åÞïÃK™ÔW:· ¤ˆ°÷*i†¿Ñ¦íH¤Öm"úÖm")qL|™ b’Æþ‘ûx·ø!î‘@ÝŸvà˜ÓŽÖ=ÞîTK[¯¤ æÜB\¤×[½b¹Óëtg6Oˆ²0´ˆ¿¶Ó;§_2‰B£…¼®_C¬eýê°œ~¦Gf?„½p¤Gš9rx», Š&GþŠ-P`$8ØòT4kjU òý¼ÍiñÙµü4·I;2ÃÚÁ hLDæ¸æ¶7bmsÛvý%£eðà”0¨$EpÔ§î3âPMŠK<ŸË*s¥
-
-gK Áçóþ\9heÇ÷çb¹|̨}/é;SLmÑ™ûö C>ìYvwÅaZÃt¯Á¹ Û?¦‡^wì§êÐ}H.ý· ^£æþ7L£ïœ-ÎÄÊsýÿßXÿrPÇé4]ø‡* i¿Ö™ôL¡´d¤§¬G2„T%3¼ÿ2ßžendstream
+xÚ­]sÛ6òÝ¿Bo•g,HöžÒÖͤ×sr±;½»¶´DÙœH¤*Rv|¿þv± ”H¥io<c‚À»Øï]JÎüÉYj"¡³x–dqd„4³åöBÌ`íÍ…d˜…Z„PßÜ]¼ú^'³,ʬ²³»upV‰4•³»Õ/ó×ïß_ß|÷ö_— eÄü›èra„˜ÿãõÍO¯¤¹÷—™š¿~s}{¹©’
+ø™·b1seíÞê-½},^:nå-ªšž›ºz(ö4.>•MëÄ2Ng ¥ ÊἩ÷Û|³y¹”Rί`G’Ο I¢æ9=vDÆSYšÍË¢“u¢½:
+mL Iš¢K}` Òª>‰Üªh€™‹ØšùÛõ`'@îŠ}ªüÀ½4m±¥¥UíñTuKËä÷ê§rÅÛóýÓÆ€(¯¯€[¯œ¾/
+p8OÓõ3#ki½³ E¾
+úÊ+òbJW‹sZ–Í $‚Ð[ø•·
+O8#­ÌKKf):…Ç9nhÔÎ ¯ó¸ê8-Pç¡®niìøáÜ‹^Ýe
+ÿÂÅ"Ïêô/78áœp=˜.dó¢D2¡ô£×š§©¨È¤—9ΪΠ`JÝíà«bS V”bë°Sƒ':3Ö¾‹„3eu„”5"V‰ŸãƒæCoÞÝMËòÈ;úÀþ‡Åu*À‘_Àó|ºVù|v3Œ' -l¤¬ŒÏ!ÔtaÐA¹Âàn¤!U틤¶Ýœ("”QñëótuP#„ ´M‰(Ö)´"”¦æ <îî~¤<]©}5‰#ÊX´o$ÂL×ÞÒÇýL>¼Üîê}ë(+8IXw :=h;†
+—Ö7·aÄ• Oƒ©¡Vžè/
+_ÒQñzâ¢!\ùã«eAÃNâ0>•8L­`K\ÇA ðv˜}ž NlPBzYcÛÀÆê(Guõ¥ÌRç¶ðIE%Ž–yŽÞeoyŠÂV:Ï7MÍA)ä¨Yûs
+ ·cðR1Rþ”°p_%÷qÖ3Ç' B¤žBº)›€;zW|B– šGÍÏ¥+¶âÌ]FdqvŒî+r‚dØ°ìô¶¡ñ3µèatϧPJg¢ðôeyìÂùö*pß0åªdx’Û…A½î`¢yßQë¿‘Bá´¢óNIoš8Ç®*¥a*ìümEì80YpF:ÚúÃrz[Öø].ê¾hŸ©Lëq$=×4©™{^-u=«‰o]Ãjÿº’ö4s™ Q
+’™ju>D…PÓ!ªƒræßžô®dd“8>Ò ô®ld ”k”ï÷eå{x-ä.`6Kæoü-ëí³—ºšäˆLt”êÏ4ó i~x ÇŽÃT+ï¾®“w‚o¬‘âûiGIº6v~s{ýí+ü§ñ=Á.±KÄŒ÷ñ8boÓ¹zÌiiøQ“æü—M£¬waU6ÿùÒ˜¹û¼…@-‡Ëá#bªéØ  ¡Ö¨>Ôr÷Û#H0ÃÞ‚F˼¢kK§m>cNÚÒ5œp}kÞ£1É”œÃ¦Ò‘ú¶Ž¦ÑéQ|ñ9ƨFÜ) ¹­C‹9nMO. ŒVàô€ÏkŽ î3Lïò}¾ÅÖvÄL,;c¦S‰Íˆ‡Ù|ڟծɗôg3Ó}c!‡Ž(ú¤üé&UQ&ÓxÂ7õÑË™i9»èRo¯yÓv)’ÈB¦öà  ÎX¦‡r¦ù4–LËHljÿ°ošN+È{(ËÎRÖA6ÈŒ´Œ”±CÒn‹¶9ªYVÅýáá¡ã¨£lúG ඟûÍGtæ' äöéÄ—éHƒ"œÅçaNñ |Yi™™¾w•ó:ÏR §¥ÿS>!±ûNëlV0 ñ3ðjnüÆÔ…ÖÜÂÄéz[¶=–ðW x^ŠÚÌñ¡/ô]5îb†®
endobj
-2528 0 obj <<
+2599 0 obj <<
/Type /Page
-/Contents 2529 0 R
-/Resources 2527 0 R
+/Contents 2600 0 R
+/Resources 2598 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2510 0 R
+/Parent 2572 0 R
>> endobj
-2530 0 obj <<
-/D [2528 0 R /XYZ 85.0394 794.5015 null]
+2601 0 obj <<
+/D [2599 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2527 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R >>
+2598 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F41 1233 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2533 0 obj <<
-/Length 3085
+2604 0 obj <<
+/Length 2361
/Filter /FlateDecode
>>
stream
-xÚ­]sãÆíÝ¿Bo‘g¬½ýàò#}rçz¹Ôwœ¹¶Ihim±'‘ŠHÙçüú ,EJ¤®éu<c.±X
-zP"³VwTJ„zJ0™&I˜Nµ–ÀÝý¾/žòµ+Q&•M|±pWðb,ïËCòýº¡%=õàé ‚5Á?º—û*÷K–<Sn÷Ú¬±"•2r£íÌLnkÀ¹{Û¯ûV‚mÌ´Ì7Ž@dÏÔí‹U¾ËÛi€1wôD‚k†-ª²É‹’l‚ÂýÜ2o˜hSÑóž¹ïk·$HQ‚Sä˾((%U†ÝPÒa½ T›œÞáV0‘øMækzëíÝ€.•²Â*P é’­°P¥…,¡Tð°¢\‹¼Aý!ùf•74êÛ!ÞŽ,ÒªÚ¯|ÏbâžÅI®ã„éBÄ8›uºXãY§ÅòYç$½Æ±Yò–i€eWW‰2IXÎ7ùõ&ÓºxD×ø,–B‚
-Œ‚R|X9¤£}xkmX ðŽùŸÕ¾ô²élZ45a5ņ¤„krŠdœ ËܧP0ŠñÍïEc¶€Äp¯ªgfÖÐ|šr>1.˜¾XTQ³~ükŽÅǾêZÝ<TëuõÜÎ{'[»š3ÅMî­‡–Ø/‘‹'×CdjùÇæ ÐjW4/ôV=a6ì1ô< 9þëã —ˆUª'ðO˜$Š±Hd©O3Cñ—*a³ ²y‡Àiø¥±°©ÌZ.¨$<…u‚ç*=[S¸cJx[å5 îwÕ •H‡„s ã(¥¦hª$îÃý `jÛýýº¨WÞ5\b?†… è8ðX,5†Œw‹ÌÄGÇZ/&Ęîmb…N²øW~—˜öÓŸVý]Oý|¼
-5‡IQqlƒ-BH3
- ›&ÂÌI>Øæusuʬ¿ªkŒ±¤2®À
-pc£/P`‡Â¬VW*:3­u ”g¬¿,
-úË8-„ô‡¨^YD[ ¦½i{<›étõó¿J+éÔxä#í ;D­:Kغ£ž‹1udd€Njóðgl%á(6_âëg,ÅHÁPÐl±|²õt„‘®žªÖÙepvœõJ–èì—ñ4öªð“ŒîÉ" ø¹ê uyhzì`8^Òøp| ‚´qÕ¨é÷ª==Úu#á÷åvl‚²|a»Æ-ÛbÓèÎ]BB«G¯ƒ©‰ÈT°8Âöeëÿ°
-‚J÷LïnçooþI@²O¨(kB(6Ûj× Îˆ3[Ë剧NÅõ¦'—õ¾Fu¿Q,“£ ‡~oÞ}YCAeÂ… Í9&+cÃÍ Ln û´‘‡Y(èŠÍ~C/¤&Pçë‡ÉM‡*nÍÇ+Œçï®iÐ×’ª»ïV$‚Nƒò¹1z`#´Ø+&ž}ÊÅ)nÿ ɤ‚ù´7×2Iœ…–›ZÖãK+–‡P®ýÒßM
-|ŸVQŸÖ¬†[Ì4ÅY*Ï°3ƒü$òóƬr E˜g‹ÅXEÏ@†Ì FKÈb çNaþ~ÀÛ|—oðίjl¤ZãAATIÍȇÕ|zqˆÎ‘ÅòO]f6 Ÿ](ï ï³ù›BªE¦ÒÁ
-ÀÕ¦h\ò†¾[ùº[õª]EUðQ HÕ!¸læ¨;ƪ{×YŦXç»Ó[ÛÓ Î,tZ÷c¸»õÇÊ«—¿¸ú/C¢Î ˆÔ– J–P³rÍrÊ9¶`’ö³~ú,d$Ø·ýT+ü%Έk*8î!¾²ó®ÙÅwÍË»æc®y–e뚧,‡\³ÇòM[ŽR‰üvþþ# É¹-àzŸÚp˜<´
-KÏ,š^Óô2¯™
-:kÅtÍ-+$ëcµíF¨jd8ÿé:‰.Â|üø¦¥®¸"²¦¥<ªˆÂGòãoäe¸GC9zC8 ºÇk§GÒïá«_¨XÅmÑ5þUÝâåÏ|SoqÎ|Q'ïŒrFü¡Rø-IÑx©«²>ùD“MlzN®çD°^üCƒhm¢º’}U\^ëíªÕ}Pp0Ϧ½»„Þ3lçøwí%U×°—c¿ç™ñGX»–íõÎÿÖëð«¶(&ë+u‡~c
-¨ltêHRhëÙÿ(!¬fendstream
+xÚ¥ËrãÆñ®¯àŪ,Læ  |â®èµ¼»’"jËNl $‘%E ¥•¿>Ýó
+·”ÛâiSVeåp_VÙÖBÛÚ"7å²ržp¿*»9ÏvMÑ´4#KnYäö Pjº·s‹ÝËÖkTÓˆ1’©Q@ª7òXYæV¦¼¹
+FBÎvy¶-¢ùª˜¾6_íѪþÁ횊QJâXrwôϺrÌÖÛ­aXªD#Þ …f^-6«lª=$$(¸ŽÐŽ™ÙA¬9‡Ö‰$š*yÚë»Xǽ¾Å2^/,cJõ4@â$UŽ±&[o‡|¥ B•'§ùòH¾ºjH5±d}¾>Uñ&¯‹“qVÙï5¤2`<ž¯²Ò­¾”Û•…Œ_!°,Ÿ ·»*¾ÙE5¯sãã°ŠB¯éTŽ'v;Ïw :ŸÓŠèš‹£L Õ2† ’2*’±©¹tîex(,=AÇ x2†T$”"”ÂÙ^P•U^Î&0+oM„#TÕökø0 Äq;„M-­~Mæ°÷:d§bŠÉQ—”Œ0&ßrÉÖ —ôXÆ%
+¹$ÖšØiµÜÞëª2Ç ¦T¬’ÓܵXöz™@(¢TÌúüýrT‰YÖáEk¯loªMV½:ãU­Pà—‚a¾vèy±ÈvC#c?fš‚x‰~Ã2¬–ñXÆ2“ƒ“X3qš¤G
+ìj;æ²®î“tÊNE_ÙКdnÝ+–\NÀU(%°Ž ›7·÷X–n¾ÜÛ _cq¯v§°º /5‡Xåv7¯í‚-r{6MM%$Qq?œ;¾qx3,.ê'ïM1ßùöÀúÁºXzÁë)\ ºJ¨ÕÕ—Æ)§õ0€Ú¢…«/åÜhƒ™Wž³1)È… 7Ù5?ã1°®pÑd*”1IOz©ÎÙ=U磰@_û´£}6®¸µ°V~
+MOØ€æ챘[7Ôºu4
+F¥ –
+êSÉÆ×ao“¾÷ÅšÄ\y…DË!°ÃŒ{v8ÔlĘÁ.û­îw0ºƒä.È0S؈ÆE f¿µývÝÁžê»ˆYû ÙOÂVgGb1„Ú¿–Ø#”Ø¿ 'H+_l_û Ÿ³‡úÚu÷Ÿ£sÐ|šÂ¤šÈ~jtH8Ž K¹7ÃÜú¤ºfPqö ßÀBZPI ¿Ž’˜æ%ÿø…#o‚ƒþ®mO@r×D†JÊ =@.\ñ­æÞ{}ý̆}a³Q7mÝãb_gÒv$2z cµÓC[l¬,Ä…&Ã:(Dߟ½à­iñ?{F¾¢ØÃ!¹žÖÂ^Bîë¬užà‚ì €4k_¤ï¬YÛ‘4×Å!áý$
+³wÓì6Cç¶&vÚ¥u %‚A€¸0 …´w»P´ãñD2ù“È_˼—zí·V³éÔjkòivsªÁb‡Ýæè¬Ë"ífaFdû\ùîêúÒ’Iµ^h¶Ðüø¶ð®_vésVí²u(Ê¡ë‚@ðOÜ!úØ41Ÿî~|oo”TˆÀ}’.k“F°3M1ó~W}“/÷?Ýܽ­·+|…«
+癳WhD6.#½¯«
+b¹ÛûAL(‚¿bæ7ÚrøÿX¶ÿ]PßIÂÓ ÃÚ3…Â1Í^J8Hàý¿Öháendstream
endobj
-2532 0 obj <<
+2603 0 obj <<
/Type /Page
-/Contents 2533 0 R
-/Resources 2531 0 R
+/Contents 2604 0 R
+/Resources 2602 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2510 0 R
+/Parent 2609 0 R
>> endobj
-2534 0 obj <<
-/D [2532 0 R /XYZ 56.6929 794.5015 null]
+2605 0 obj <<
+/D [2603 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2531 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R >>
+2606 0 obj <<
+/D [2603 0 R /XYZ 56.6929 430.5757 null]
+>> endobj
+2607 0 obj <<
+/D [2603 0 R /XYZ 56.6929 152.6716 null]
+>> endobj
+2608 0 obj <<
+/D [2603 0 R /XYZ 56.6929 84.6865 null]
+>> endobj
+2602 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F55 1336 0 R /F53 1328 0 R /F41 1233 0 R /F48 1253 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2537 0 obj <<
-/Length 2027
+2612 0 obj <<
+/Length 2351
/Filter /FlateDecode
>>
stream
-xÚ¥XIsÛ6¾ëWèÒ)55Qì$Ž²­´iÛ”i:i´DYl$R)'ίïp¬dÚñÁðð–ï­ cø#ãX ÌGŠ#‰/w#<~€³_FÄÒ„Ž(ìR].F?¿`ÑX!%©/Ö^1ÂqLÆ‹Õ‡`zw7»¹~ù~RƒK4 ÆÁ›éÍ»ék³w7Q4˜þ2›OBIÆHi2‰ƒ›é›ÙuxõëìêÕÕíÍ‹ÉÇÅo£Ù¢Q¬«<ÁLkõÏèÃG<^ ¿0b*ãÏð#¢ïF\0$8cng;š~ovNë«>0¸ˆ‘ \ŽCAQ,ãØFX
-­o¶Ü˜åÞ˜ü˜Çrk/o’•Yô„ßéè¤þØ$—R¡HÆô|%èR=_ *mê×"OÁ…t›E
-YL8;/»¡òïLÄ7äPOúbc3ª` ,ò
-Àì9µ^h]ûN¹·¿Ëì!OWϣNJ ß@¯Cu=G¥õÿ”>ÀÅOòè¼LGä‘Ù/¤I³¾Ðù>]šP”² 6X‚2¥Y•›â¸]™u ü‡Œ²;5xš
-@³;K¤†´d"^®ÍV^ ¹'M)ÓL´2Ú{éêv¢Ú]5Û¨ÏÖª›ÕÅÀè¥sš!F¢¨ŸÐé—d—嵺ÌÕª‚ë›ù«ÙŸfó´âAR™C#—5£öémæÆ0تÒÒµÁþº8æVtâ@Û%iéál—TË V¦3>{tM÷†Fðµ„AhC0<óʶˆÌšX‡§ !$¸h®´—K{ÝÂÚÉëînÒþ=‘-ªóõ8¤),¡²2ãµÂ³÷Ó7w¯gžr –Q›mK²¶Ûâ³C
-ÈäÝÎ`gZ|i–m™Ž»Ñ£Å1·EXGÁ~›"`âÑ@ƈÅRXZ`¨6Fx唺žOÍBgk½p­}e(ïŸH:ÚH@$V®%¬òºx,L7è‚6HÄ\õCYwçWKÐOÐ."å‘n³z¥2¸L—ÉQû’QÒ‚ÓWGA™jZØÜ×Â(’0 Z£´nªú=ÚèÅ}Z»HKÓq‘Ÿ F}¬ÑüÑÞ1i¯W»cÙ\·|óžÆt x뤬ÒC3-˜:_¯ötk˜y#!©Ãý„˜!7äÔz®h&§,,–I;=m‹âSÙ)¾¡‰!‡åªÔCè©hšÂà­MÓΰÍðvn"ƒ WÏd¸¾ZîjRY\H•½zr=?3}.ÝŒâ
-B¶Û‡ª)
-51
-f7¾í¦—Ùz“äÇdëKrº \ðÉ×3qUàí‹+ÑcÆ<ü8A” ÒÔ ï\ªŠUÔCoúnñëíÛs°¹ª ‘§6.çO0†ìl=º*òÚavܵR9b\:gq @d<‰
-mßø*áÔ/\îÿ&QÓx±Ñéù!Ü|t«Çfõw³²ã™`Þ+D‰hzgv°5É3sr˜[›H´\×Ù6ÕÊ8ûFÚ×Ï}'`õÇ]¸qÁÿþ†Ü~-çÐ|âç>¹Àc¼¬ˆSJ›]o¨º`±žÈ"îÿ ­é¯endstream
+xÚ­Y[sÛ¶~÷¯Ð#=¢Ä—é“Ó(7­ãc¹§§“ä– ™ŠTEÊŽóëÏ @¤É™9g<c.Á%v±—ow):IàNrI^ˆIV"*'óõE2YÁ³_/¨å‰S<äz{ñÓ{žM
+R¤,Ü/{å$És:¹_|Š®no§7ï®ÿs3™DoÉe,“$úãêæÏ«ßqíö²`ÑÕ¯ÓÜ&I’¥š/M¢w7³Ùô—øßÓ»ë÷_~¹ÿíbzïõêN®•úçâÓ—d²€#üv‘^ärò 7 ¡EÁ&ë !9‘‚s·R_Ì.þå7<5¯†l!yNdβ€1PA¸HÙȲ ,Ϙ±†>ÚeLá˜Ñ¢é:5ŸÔ¶Z¾è£Áþ1—„KnXoʵÒË°/˜XAx&…áïbìù™± )´ÒßÛF!¥y?' ›—}Õ6¸Ö·mm…Á!()¤dVOIZÈÌH›½4í¦«ºCO¤`N6I9#ŒÉ4d9
+g` u±„$B&na¬*h Ä<WÀ)÷S<Çã€1÷oÓ$#²H%ˆÔïÍë²ëm$ì›çYa¹¾¸§Á_y*݆ªYU
+ì8fó;^¿ºcÕlv}¼l·ë²ì›Q’qz¸mûê¶í¶M\ѧÀŽœ¤ðoû€wjõ¤ê7ê7O}·”ÔeU«P8ÆRH»t•ï¦³_î®oï¯?Þø—Æ #AÑL‚å8¿àP<qjºTQ¤‰Qÿn
+ä
+ãô †ŠQ*óü¼fž+ Ú0®(Œ ë6Û¨ù>†î
+J8§ù+p1¨ã2½´ iÎOÁÖȬiJ Ðçõó\Gfk
+ñ6Òð^ÜY€Æzz­w–ø óX/jgÔÊ´)"ºm»®z¨2áfò¹48&R’¥ ³¶€r,zõ­××
+ÁRˆÈ”ŽÑâþÑ Y!£vcûƒÂ¢\7Ûj]n+ƒpz¹éU³0w}«¯iô ð~×¹'T@,^šr]ÍñÆãc@jet­Ý1ª°3¯ïÖ|#E—Ù¶ @­ µ'ã¤3h ·MÛÄÚ¸èbC?™·MW5+|¶Û,ÊÞ(¤– æ`ðÔ—……³Pmˆ¦ËPJÁÄ1Ï2ŒCͦÀWM
+ÃBfÊšyttÅ¢u¨Ð´­×åW›úë©#@uªéì"ÚÙ¼ÐÄ{[[¤èNBGè …<C®ÓPá¹ T´!ì…L?êEF(¡< A|V5ÏÐm ¾À=ÀÓH¹û!ŒZ„5ÊhïÑ$º^X¿óh½xs€ÄîÖOƒ´íÌ]h]¹rÚu»µre¹Åëƒ:ØÃéuÊú" øyÿ ¸ÎøÏqÿ=½ê?ßðkgJXÚYÍ<W@µ±û(ÑÍþHµ™êkæB=ìV+Lb¸5š¶™žÕrh–ÎÛlÀuÆfŽËØìۡȺ2ð{V¤c
+ˆÚfkN 9ù±ÁžSD~|ЭÚFR I>l$±y僎UDÏК"õU½Äú Ø`¡Ó9’äÑ_—Ê@ÿØî¼(·D;/WolK;’$|Øk؃x‚ÃÉ1ø¡òœ2W¯¹W^/Zå5ù\Õ5R–Ñì½àµtL弯ž,£=ˆ(²è¯GÕ8yU‡ž
+¥¶¦w@¬.¢j‰WÆÅÞIiâ¤ù:¼Z8*öÞúá¯l΂ç,ž»Ú‹óuPݦmvѧpÓÄáhÁÎôWd凉*ˆä™cT¶˜0ÿTìfÐQRÝOŠv^ÓGrÿ@h& ƒ*Ä°¹ å;94ê¯ÍC®Óù%¾ŸÊ÷³"}¾‹ åûHäõªiÝÆ…E@M|˜}@‡.к‰qé@ê£^hììÕvm[ û^ؼje tØê«¥¹n~̦î¡ód„g²Ýä{Å6ÆyäžùZ©o,@Jycpáò‘c¿fÞËnŠñ©ýjJ8Õ:U/c|‘zA+ 4ñ^Ó@‚cÊn@/üÔÔpê×·ÍbÜí
+Lùé] I`hòøà˜‘Äsk
+p1h°=œøéB÷Òà@°ÅÒÚ®éC-¨åôÙÃü°æsØæÆ8[Òžøír"’ãÖÅ‚î|¥ïåþÝLZ€e9ž®´XÝ€BUÿÙUþDæ-—¹1kîlð‘Åî9ˆýØÚ ¨»âöªUÙõN¾}v@‹Ã‰ùª¥§‚7¸‚[¬p‚\ÔJ÷z½½¤ÑIŒ6 0ÚßçÐ]ÉÞLP |ÅäƒÞÇæ-c>–ô²Í fó‚ ê¤^{Ák
+胃ã8 (‚UΘ]¯øJÝ™nX/ ÂÝpÀÝ@^5óz·PÝáË# ¢ Ÿõaýè.¼
+(I¨àçe{®€ð‘™$…þ¸8’á°5ïóÙáèåjXè+´H€Ö¾G¿L§øæÕï³'~¸9þíü¨?üäú“Ï|•C3ç$/|¸¼½¾y‡’
++p¡ëv×oËÞ…öò¸>·ú£lve
+Æ4',„ÆíC
+ˆhê¾»÷ö;±H8ì'`Xþ‹9õ«—DÿÔˆ€ÄûþEoÿÓ¥È`\ÊO„O`˜âuJiÅiÊU÷¿ýëþ_& +¸endstream
endobj
-2536 0 obj <<
+2611 0 obj <<
/Type /Page
-/Contents 2537 0 R
-/Resources 2535 0 R
+/Contents 2612 0 R
+/Resources 2610 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2510 0 R
+/Parent 2609 0 R
>> endobj
-2538 0 obj <<
-/D [2536 0 R /XYZ 85.0394 794.5015 null]
+2613 0 obj <<
+/D [2611 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2539 0 obj <<
-/D [2536 0 R /XYZ 85.0394 573.4038 null]
+886 0 obj <<
+/D [2611 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2540 0 obj <<
-/D [2536 0 R /XYZ 85.0394 309.4358 null]
+2614 0 obj <<
+/D [2611 0 R /XYZ 85.0394 744.5025 null]
>> endobj
-2541 0 obj <<
-/D [2536 0 R /XYZ 85.0394 249.0624 null]
+2615 0 obj <<
+/D [2611 0 R /XYZ 85.0394 712.7073 null]
>> endobj
-878 0 obj <<
-/D [2536 0 R /XYZ 85.0394 211.9585 null]
+2616 0 obj <<
+/D [2611 0 R /XYZ 85.0394 647.4522 null]
>> endobj
-2542 0 obj <<
-/D [2536 0 R /XYZ 85.0394 179.7548 null]
+2617 0 obj <<
+/D [2611 0 R /XYZ 85.0394 576.1287 null]
>> endobj
-2543 0 obj <<
-/D [2536 0 R /XYZ 85.0394 144.9999 null]
+2618 0 obj <<
+/D [2611 0 R /XYZ 85.0394 501.8403 null]
>> endobj
-2544 0 obj <<
-/D [2536 0 R /XYZ 85.0394 81.7046 null]
+2619 0 obj <<
+/D [2611 0 R /XYZ 85.0394 83.5125 null]
>> endobj
-2535 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R /F39 1161 0 R /F53 1313 0 R >>
+2610 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R /F55 1336 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2547 0 obj <<
-/Length 1971
+2622 0 obj <<
+/Length 1956
/Filter /FlateDecode
>>
stream
-xÚ¥X[Sã6~ϯȣ3C´ºY²úƲiK»(dÛN/ÆqÀmbS_è¯ïÑÍ—Ä ìt˜!’üYçè;W™L1ü‘i(PTM¥â(Ä$œ&» žÞóï&Äaæ4ï£Þ¯&ï¾erªTLW›Þ^ÂQD¦«õïÁ{D0šÁ8XžZ|˜_|¿¸øñ·«åb6'’Pœ__/–.Íiˆ`ŒƒOçËÏçíÚõLÑàü»ÅíìÏÕ“Ūլ¯=ÁL«õÏä÷?ñt ‡øa‚SQ8}‚ FD):ÝMxÈPÈó+ÛÉíä§vÃÞSóê(p Ê¡ƒ’)!H…!ð*$e†‹Û‹›ËëÕåÕRŸÆ¼ÓQˆ§s* )5à<Þ¥ëyò&'E¾q/ÐÞ èËH/j¼AV³9c$¨R=ÀAõ’×ñóLBÜ5µ]Í‹z—îâ¼Î’ÊA‹Ä#zR,¡\:¹FÏíG4ÊkWä`Lï›2®³"·»ë•íŒ©¶{Hƒ•UÇ=pªe•Þ|:g”#ÅŸÎ[šaßǸ¬@üœĹ*üê¦(õ€.@Xül§iYÎH¥93•A¼-ò{ûÎSV?XT¼ÝÚ%«Re'Yžl›µ—p÷âVk8W"¸ÜØ—ó¢ÿ®¹-ªÇ4Éôƒt}fÙã}’9eH„!wô½Këäå¡}âx ÐGQ!B·—Ö@G–9~¯íLBÿ®ÓMÜlá$F˜sN")f9_uú œ”E}V8xS\ø‹Äsòº·Š½Š^5·q–Ûß*sÇujgÆôζpð:}®)µ;7ɃÅÕ¹$’HòV§2_'èïôeD­ƒÏIá€ÚÁFvƒ¡bs—åk½Y5¶C™C:]c{X«®ŽLke „ƒqVŽ›ºØA
-CgñOqe÷LÒªÚ4[4"ᳯâ•Jbw€»Tÿ2w>»V¸_gý¸µˆ^OŸ·Y’ÕàO„àÌ%[ ´I*‡ü=OÀV9ƒ×ºSôŠT0!_í®L¡;¬ÛIBÄ4”©Ë#uÖ‚æ}”/³‡]G‹Òrçû"…@XÉWDzЈHºg*퉼.3¨-&š’ªMß»aÕìvq鬩Rz>g6ÍŽ²Ã¡ÈBÉ{…ê;eØq): {HÉ7ô}•iRå˾n2 BV®Eh×'ZªˆÕ»x° Åt(Xé)Ž!
-#!ÆôÝϸE2ô-RU¸Mu¡2#WÈí62É4©³/&ai
-‰ ý«WÐH’QÄØ°7?F”!E0ï‡Ñ~×>çp·'rлß,VŸo–Öi~ž¸Ùül¿Áýï¯Vƒ:j½¸Ÿ­|íʨëvê¸nªa&"Cÿ~[Nß+ÔØm ^P>eU:NŽW×±c#õv±°/Ÿ¼½9cKJïãÌpËà9ëõh–)Úíc³S}Ï—`Œx3¾¿\~°›(§Æz—åÚ྅KË7éÆ‘'Ž‡OqÞÄÛu ¤#(»â¤—0˜@¿>$âüóêû«›S X·¸Ì¡^䩳èí ”³ÕE‘WEYgÍ® ]þJ gçRÐö‹òl~ÀŸ‰ }…ŽFHÛ¡,]Â9Ôaè{0ÙwY½ÑÐ<Åî1Û¦F€í=(•]>î÷#®·Ù:«ÛÎ6m¹7 4ªu»^ÅöØ×m7ÆƲ"n­ó¿¿|wùá*Æt«6š_© õ·á•Òä‘PV÷üP÷ÿ
+xÚ¥Y[sÛ6~ׯУ<!¸ƒè›ã¸­»­ã•¶3IhŠ²˜J¤—„â8¿~€ ’Ýñƒ
+‰¤¦zª4G1Ͷ<½‡g¿LˆÇÌh>D½YL^ÿÌÔT#-©œ.Vƒ½„“„L˳7ˆPt[àÙõù—oç¿^^üëâÝõÏgs¢ã³ó››Ëë·WŸÍ©À€0Ƴ?ί?œÿîÖnÎ4ÿry{öyñÛärÑi6Ôž`fÕúÏäãg<]Â!~›`Ät"¦0ÁˆhM§Û  ÎXXÙLn'ÿî6<m_²A0¢LÒ”L AZ:âCh$e-翾{op:`OçT"&`Ñâ®J“×en·OÉ·›\TeSÕ¦Ømý6 •#Æ%õûp†¸’´ã˜Æ@i™nóå<[çÙ?YU®ìËÍ$ÂR©} ¸n #¬±³éþF­VŸ(UnÔ>vCxü cz¿«SST¥GÂÊ&wãæ©4é7¶å½›™ªÚôçëYµº$ètºÜ>•ÕCS4û®ÁR‰dS!¤Ö1S8!`ì#vFŠ ƒÁ­™9‰x}‡Š2$ÿóõç0úÚ¾t#ãŽ
+õ»S¬%B€JvßeQ癩ê'+‘¤‚x¤ßuUlr«LñÐIûþ9Æ.ø C ÇrÌòÛËÛ‹÷W7‹«w×Ý[G]7âg{þ”@”1¢½ª-|›123ëÜ‚c¼‚‰ ³»q«eeöqù6-M‘5Z­ èI±‚hàÒËu~z¨ãˆ&²Ónß…íîÞ…ÉÌf+Ag §N÷ UÍ9%I9ÒœñéÜí(}HëƆ #t––~ÐRVWUm¬ådÙ8±Ó¼®ÏH2«êöÌTÍÒMe£Æ¾óX˜µC¥›[r*5nR”Ùf· îžüªsp-gW+÷rY ßõ ¿Eóg…}/_EÜS†¤ÜÓ÷:7ÙkÇC÷dÞ9\°:â(’"*eðþÂ'ÀöøyêsŒ=„ý]æ«t·“´Â›s’ D{7¾®Lþœ”%CV8xSj"þ¢ çqò¼·ŠƒŠA5¿qQºß&s§&w³ÖôÞ¶pp“3­)­;ï²µ¥M„\’(¤x§S].3ôOþQK`ð9\Ý:Xd7j0wE¹´›5±Ý‚ªÎ<Ò뚺Ã:umd:+Hˆœ|dåtgª-PniŽ&+ÚÙÝSÄ
+*ðiK QÇMÑ¡Z[|9°ƒ®FéÓ"("rd è°fc‘­ó²§¾ûz“ö<?÷Œon]òûRíê2øðúÂtY©1Íq2¹­G„?Cæ
+ĺÆD’á­¿/èö##…DÊظ}8F”!M0†ÑÁw*×z¢ÆmûûËŇ÷×Îkþ<#p«;ÿýƒûj|ì‹ùŸJ¨scNÛ„ÚWPßî˜Ôìšq*"cY:ß«ÑØo nP?MŽŽ}gЮ±è}wDþßßËû p…˜­”Q'§JØ»¨ JY‰ä‡!í¿¬êþ_Hcð£endstream
endobj
-2546 0 obj <<
+2621 0 obj <<
/Type /Page
-/Contents 2547 0 R
-/Resources 2545 0 R
+/Contents 2622 0 R
+/Resources 2620 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2556 0 R
+/Parent 2609 0 R
>> endobj
-2548 0 obj <<
-/D [2546 0 R /XYZ 56.6929 794.5015 null]
+2623 0 obj <<
+/D [2621 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2549 0 obj <<
-/D [2546 0 R /XYZ 56.6929 751.9581 null]
+2624 0 obj <<
+/D [2621 0 R /XYZ 56.6929 751.9581 null]
>> endobj
-2550 0 obj <<
-/D [2546 0 R /XYZ 56.6929 608.6139 null]
+890 0 obj <<
+/D [2621 0 R /XYZ 56.6929 711.8652 null]
>> endobj
-2551 0 obj <<
-/D [2546 0 R /XYZ 56.6929 322.9834 null]
+2625 0 obj <<
+/D [2621 0 R /XYZ 56.6929 678.3488 null]
>> endobj
-2552 0 obj <<
-/D [2546 0 R /XYZ 56.6929 258.3082 null]
+2626 0 obj <<
+/D [2621 0 R /XYZ 56.6929 642.2811 null]
>> endobj
-2553 0 obj <<
-/D [2546 0 R /XYZ 56.6929 193.633 null]
+2627 0 obj <<
+/D [2621 0 R /XYZ 56.6929 574.684 null]
>> endobj
-882 0 obj <<
-/D [2546 0 R /XYZ 56.6929 153.54 null]
+2628 0 obj <<
+/D [2621 0 R /XYZ 56.6929 512.9737 null]
>> endobj
-2554 0 obj <<
-/D [2546 0 R /XYZ 56.6929 120.0237 null]
+2629 0 obj <<
+/D [2621 0 R /XYZ 56.6929 369.6295 null]
>> endobj
-2555 0 obj <<
-/D [2546 0 R /XYZ 56.6929 83.956 null]
+2630 0 obj <<
+/D [2621 0 R /XYZ 56.6929 83.999 null]
>> endobj
-2545 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F55 1321 0 R /F39 1161 0 R >>
+2620 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2559 0 obj <<
-/Length 2597
+2633 0 obj <<
+/Length 1920
/Filter /FlateDecode
>>
stream
-xÚÝZ[wܶ~ׯØGêÁä£bË©ÒZV"µÉ©ëjII´¹¤¼äZQ~}€ËÛîJŽšö4>'áÌà›Á\ e
-ÿØ"V„ŠD.¢DE™Z,WGtq k?1Gz¢°OõýÕÑwoE´HH¢¹^\ÝôxÅ„Æ1[\e‚“‹‹Óó7g¿‡\Ñà{r*Jƒw'ç?ùÎ]'<8ùáôò8dã ˆ5tšç'ïNß„¯ÿrúú¯ÿ|~züñêÇ£Ó«N³¾öŒ
-£Ö—£é"ƒMüxD‰Hbµx€JX’ðÅêH*A”ÂÏ”G—G?u {«öÓ94”ˆ‰Šy4g ÆH¢à¡¢ËǪ¾oŠf¼ ú` ıžÍ
-ªœÍXò8—â«a4 Åôm|1Š‚“,+Ú¢®Ò²|<fŒ™m –ØÝX&÷÷ea¼Ã²j×ŲÓÙ% .”ù×¼lpúúŸY~“nÊÖðãÆÕ2Ç‹„ùÊ cwH‡;«7í½AU08TEYâè:Ç'8w†£´qÏÊ=—í&uÔˆ²uÐ0<˜þëëÇ—àL P¨±@PŒ‹He/}xð‹=ÿ†õ*­6Pû64
-[J³©RפÍÔf‘†Ú4ñ~h ½`i 6 ^†Ñ–˜*êÊv²W3ì%DÚ8#î¡ÑNú)ª:±®qš²…òHƒ3k6ì ¿²^¦»Ô‡ÆHI¦ö0–$‰™ì©kÙÒ²®ð}¡ à3i"!BE}ÆXt—šÂdGL°Øg*ìíݪmw±Ø×Ý/ñÑÅÐó§5‘lt#¤i½L¯`|éݯ8ƒ~´Ä¦?kú“7¶ÑZÓ™šé|­×îþ›c‚TÆ—®¡ÓAŠ¢
-½Ç+L‰–Ó¦ ë›Ð'ÖE¨Ì6™ö?Ц´& 7Æ'] Ú“ÍÅ<›{—YÀ—÷ Ú* ƒewcD-NÛôÔÃÉL>ÜË»þº…Ì×Ú÷Qá6Ýuñ
-YVÀ±pJ™]A:V½û-áT÷GG ¬endstream
+xÚÕY[sÛ¶~ׯУ4sˆƒ+ <:¶Úº'±ÝHvšæ)› /IÙUýY
+òOÞ&²žlÙâ`Wvyfï«ÓÞ×›4>´1宼ù™í«OÊ‹’2^BiÜ ùT]¡‹3ù2¸à꺂âÔÛÿ¯°öª¥~Ðã Æ_±5uJ7Ágžº¡8X T3†å÷T Žˆ#Èqu*P·RïÖ WTA´Eâu•çòÌùñSÉ 88ûA?¿UtrfçÿéÅëŸ_lÎVì¡ûˆ"Ø=´T'-ßV&þoÓúwù5Ùü5æ8uHŽ(Qä«Ð^J:Ù‡KÄ^ H`®úmÍÕl~ùþúnq}{Ó¾t¼“î7};Í8ÃiÐv šÓ4šlR?šOªM^‡ÙÁ0ì`êCÙtnlR¬šy;ëš=Ö4{hê1J&×µ|ŠK%÷XôÐÖ> «?“à%uÉÅø9à4ÃR´ÚÙ|Qká’O^ãÜRiF¶Å”Ö iÝ
+r(4áÓ€w®;zaG X¨GŒ}ï•€]份lÁ5I–¤¡ñž@£? 
+r€¤\}=Êà4¦nûëÛ
+)'÷ëÚêKj«*L_ÂMcC´ÎžÒ†&Ì;èÍmDçµc(š÷óŸâ¥ƒbÎvº“D¯ „ªÇ°h/Böz;ÚG-¨ÇkO:ƒ`rEIy˜¦›)!D»Åˆ2Þ!OOi¢ÃȪËdYÃÚ™)•Hãç8­ìðýÆþFñ*\§µ–Gõj˜Ë0=aÐoitÜåQwOëúI£Êìª$M-uÛ_ˆîÈRaÕüæÍï²Ö·l†¶(kª…†ØéÞ¾ß „…
+™BœH #¥ØöÖΘN~3 @‹ÎÌu_º±Oý€(_’J_xÁYÚ
endobj
-2558 0 obj <<
+2632 0 obj <<
/Type /Page
-/Contents 2559 0 R
-/Resources 2557 0 R
+/Contents 2633 0 R
+/Resources 2631 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2556 0 R
+/Parent 2609 0 R
>> endobj
-2560 0 obj <<
-/D [2558 0 R /XYZ 85.0394 794.5015 null]
+2634 0 obj <<
+/D [2632 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2561 0 obj <<
-/D [2558 0 R /XYZ 85.0394 749.1077 null]
+2635 0 obj <<
+/D [2632 0 R /XYZ 85.0394 752.0294 null]
>> endobj
-2562 0 obj <<
-/D [2558 0 R /XYZ 85.0394 598.1922 null]
+2636 0 obj <<
+/D [2632 0 R /XYZ 85.0394 688.0859 null]
>> endobj
-2563 0 obj <<
-/D [2558 0 R /XYZ 85.0394 456.267 null]
+894 0 obj <<
+/D [2632 0 R /XYZ 85.0394 648.5014 null]
>> endobj
-2557 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F41 1218 0 R /F53 1313 0 R /F22 961 0 R /F55 1321 0 R >>
+2637 0 obj <<
+/D [2632 0 R /XYZ 85.0394 615.2083 null]
+>> endobj
+2638 0 obj <<
+/D [2632 0 R /XYZ 85.0394 579.3639 null]
+>> endobj
+2639 0 obj <<
+/D [2632 0 R /XYZ 85.0394 512.4986 null]
+>> endobj
+2640 0 obj <<
+/D [2632 0 R /XYZ 85.0394 361.0478 null]
+>> endobj
+2641 0 obj <<
+/D [2632 0 R /XYZ 85.0394 218.5873 null]
+>> endobj
+2631 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F39 1173 0 R /F41 1233 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2566 0 obj <<
-/Length 2888
+2644 0 obj <<
+/Length 3302
/Filter /FlateDecode
>>
stream
-xÚÝZKwã¶ÞûWhÑ…|ÎÁ“
- Ê3Ћ€÷Ô<­3‚$!À$™FÞ3ê † .£³ÅÚ¼èWo…èqj”)–Áä†c]ï·y{¬‚)¢œÎúKž˜‚ÑÞrKD)hb ÙíC±,×On[ÚMá^;®×Gÿ]ïüèWŒiUÀþ2{Z7My_ fhÜM¾¿$j^8 ´E9Gã …_)åmñ¯Ö\=wÿ¨FXÀ‹^ëüPµ0$~¥Ý*±ŠÐHêî0ù>[C"Bõ¼è Òh“eú Tz\P \*oP!1.ù¬0¤±PÓ¢E®„lC´(¤”$Cá"Z˜âL±ˆC4h14ÿ‡öáÐ:¢Ã‹£7f*C(V
-L ¹ú» %âRÉõ¡Øì&6™„HÜ4»Å ³Ý͆$HB‚ç²ìÖ$Èü±l7fDƒ©‘¾I9Â:/«ƒ7K0
-1Ö†ùÀÚ܃ÆM7á¬%GJªþ ˜F$_pp5
-Á‡‚]8t8s؃kî.Ùœ!Û=s´u±oܽÅq÷×+Sâ!÷÷<áIˆ†w<b(pÊL}ù3D˜ÏÄ#ìÅ㹞|<×ãX&r½A&$¡’r™=® d.‹ÌÝ%D“rÅ„èT®TB4«+1³.÷’Ì­×5÷7·îzâu)£Ñëãu -z]C4hµŒEáù†à¼®¡D¯kÈÇ^—aѯ[Yðºƒ&ö®æ§
-.G߀Ò^ {gétä(Ý[‘yyÛ:¶5€º9€k[xϹ
-ïèìyð·vsh|d=
-Ó˜Ø&ºÔ¡‰#×D—*6Ñ¥öMt ›è@ˆMt—þ¡‰.ƒIÉhF0êšè`ÍÙü]ë—¨šº'Š`vøŽ¡É¿Éÿ<îño‹|g•h{úÇgy!Å;>ô+̡ʸ%Æ·Huƃö¸&<hà²ôö‹JÚI¹bI{*Wª¤Èz-Â÷ùàš»Ëí—BÌÿánN.â¨á<6Áìþ.bÐp±2µ¼ —Ìœ1¼`Ã…
-ÆŸÝp‘$:ÌÓ†‹|¼áŸÕp9[×™c ¢%›FgŸk‘Ë¢³M&¾„Š „U¹¿`2þ“ºd’éiá"WBºa]ǑЊŻڸxbL˜a.ḀB0ËRò\¦Ø¡Ìhj?©MžÍ¨Ü-«Ãªp70‘þ g
-7úT)„ÍÇ+ªìœUf4LB šÞ™‚°å’y°Í›¶Ø÷™Üø/ïn®¾ûñ͵»;B¦QfêL:̉ëýïþÐþ.ž¬‡«ÇŽõQXí‰Õþ²êàË]BeÃîÒAË y¬SJƒ:¨3ÅQp%fçŽÞû\ãàŒ\œoŽ—Ì 8bͦ— L‰%GÞ Aõ —| Túó£¨Rÿ™Ã®ÞÙÒº—ÓŒîb^=æO~ ‚X»šêÍ@øGŒ1öòÍ"’9s(ÐçšØªÀe·ê§/:®š”+WÊ•<®ÖÄBÆÛÄÂ͈àºôI––¾$
+xÚÝ[[sã¶~÷¯ð[虂+ ´ÓgãM7Í:ÛÚm2Mò@K”ʼn$:"µÎö×÷
+š]RøŸ]ª”¤†›ËÌH¢(S—óͽ|„{_]0O3 D³>Õ÷Ÿ¿Ù¥!&åéåý²·–&Tkvy¿ø!ù‚0A®` šÜ^¿»ùröúÏ7¯ÿòÏooo®f,cœ%×ïßßÜ~ùöû«Wè˜ÒäÝõí߯¿Á¹÷W†'×_ÝÜ]ýtÿõÅÍ}ËYŸ{F…eë—‹~¢— ØÄ×”£Õå3\PŒᗛ ©QRˆ0³¾¸»øk»`ï®{4& ©4Q\¦ N´‚½GeÆHÆe’‘TjÓÊŒ³˜Ì••Ùln7úù¥z”Œ.@ôÔ‘Ì×y]ŠÃ¤D3./û¯<b,Eãƒ×Á èwÀÙÝS1/—Q-ͪÀ2ã†ÕòàÞ¿ªm*Œ&oý½mÕà ¶«ýH)/¯pæGÎåÛ[û/^—~YX¿)ä
+D¶úŠ
+Üö@@<K‰1Fú[--÷ëµÓR÷ùæ0ÌLÀëTÑE±Ì÷ë†ìUdy)Ákq°úÌrYnGÞ’2fÌ?[v&yJ˜5W QŠ·Ë¯«y>ƽ`àZk‹²KŒf}nÝr§Ø5D
+ØÍ·‹ÈÂÌ¡²þÊ[Ð蟜¤* *qöUÈ>µ[†ÒÝ|çz¨U@³ÊøùJm€x²¨Q`ïyƒPz÷=Î Œæ•û]ÔýÉe±CÚ¦Âék¼¬vþþ‹-‚TJU³BŠr; €WN ¸Ò¾™UK¼ãD¢ì. ÀØ´ÃÙ曢¶ôNjDJZB@àúPÝcZ( dZm×Þc‰Ùñ;ðŽäd'ŸWå|Õ¿ïDækå=cØ·½h7
+\OÀUš,Šuñ˜7eµÅ;·wøÙ¨î.õ»sžÁþT~Qq¼Îu¨°W=Á¤ˆ
+· ÂÃ!#"£j‡
+Eë:Ôµ])Õ­êÖñb
+ÊIiÚÓqSüÚLá–Åk)ÿ¦(–!í…¬oæ»üyìt÷K‰TdØ<Qhw4ã0ñ4$obýF„lÍp %‚ªôS-ÍWCŒ@r¨!øõØj"˜
+qYµ±c‹ÁMÈ.žöþ&bǽN‡ëo©ä °*ÀðS%Œßµ 0‹™³ÝÆð­Á÷QÞÕ©3!l–PÖøÞEUø‘kºØÁ<ß×>N
+‘ õè0uÈ·Þ(Š¥ï|™Gó~».B£§ôF²ØožêQ;™WÛ¦Ø6u4æõZZtvc/ÆíÆHГäç™ â¥rÌnÜ›¢v“Z_­ÌYv/1¢å(ªV&3T—ûÓíÈ‚’©ÚA§’¥![²,×M¨½Dðé¶ñ#—LÚÍáÏC¹ÍwQç<@ „ÍÖíe©ã`—?• ÚîF÷LÙÜ2²E.I&ï#wDX¦­HLô}yv®¨ Õ¡<詳²ÙFDâžÚýAºVcM’¡(ám8ð †ò@–)OÊ¥—#Mm–uP>ÜÂFb"¿Ô$õþÁNàêF¶ÎÁŽçùÊi×öó8T.•‡Y´Kt€‹js#ä&Óg)#„ ?ZÿÚ º…¶Â·2±1Ølw€³ë"\ðÉäЃ„³üUùYâU&sñ=LÀÙhô6 ÓV&ãWŸj<‚µT.†ýaÚ(1Ñ)6°„Ñ'ø
+D¾âŒÈÌð:Å‘&%”µ¡Ã˜ 43¬xãö–ÁÊŒ6€4KžK׌Ñ<¸#Öy8±ÌËõ¾ó\Ì ô™Q9ˆ¬mGÃrSíh™îoÀ¾a„ó™„<
+ÁÇûÇåâÌãr›† ý"<Ê <¦„‰L‰GЧf´ð•c…ïLd”Hš‰ã¶ê'A&x?c“Îidö¨&¨2·¿+ýžä«M¿ùŠ¥ß¾º.£Îå^±Äy]{íŽG„ˆÞz]Kðà;á­×uòʾcî*7Á½×=j´z][ÍõZ—"xÝÁ“±Æ»"ZSé»O ;#FªO»~ªœÛ¼À¯+óÿŸt³L@5¥È¤aö©Æ ³¥r†Yîí‚F­”ŽÒn‹´”šiæZªwƒÀÁ)Ñ$1`ï;›†îʦÀΩϲí:¹Âå7nrЈ„ð“µ?ý=ö¨ Aæ´kyÍÀfì·pÇKÚæ¨2òô’ ØvHÊ:¶¸qÖ†‹YÌZÏX€vƒålö9Hsn;U7
+4Ç< 6ïË€>O>â†ûJÈÄâ‹áá„Ûô£„ö­;,¼Œ;}uT‹Ò Á¶ÁÛØÛãÉ—·ww7¯}ÇrïoöV§
+c  ²ö3õ¾lðSO‹ƒ''£j)¶»`.ß7¬dÝ„õvêÁÿæ~±â)ßå_¬žïÊ'Œ2•|»ÅÉ&0è>.‰}µ¡Ù~™
+_\‰ðÊgº]±$„¹Mwø³«=8µY8î{¤þ+ÄÞcÍj_ûhºÌtò`A4)eãÁü®©ãÔÇZfû ð-öÏ"fC/ƒê~÷_Gt9Ðz¤Dç™"ðp˜²òfiz숬[€þ˜÷[¾endstream
endobj
-2565 0 obj <<
+2643 0 obj <<
/Type /Page
-/Contents 2566 0 R
-/Resources 2564 0 R
+/Contents 2644 0 R
+/Resources 2642 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2556 0 R
+/Parent 2609 0 R
>> endobj
-2567 0 obj <<
-/D [2565 0 R /XYZ 56.6929 794.5015 null]
+2645 0 obj <<
+/D [2643 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2564 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F41 1218 0 R >>
+2642 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2570 0 obj <<
-/Length 2199
+2648 0 obj <<
+/Length 2271
/Filter /FlateDecode
>>
stream
-xÚÝY[oÛ:~ϯ0Їu€ˆåUÓÄ=›³m’“³ ´}PlÚbK>–”4ç×ïð¦H2mXìË"@4"G3ÃáǹÐd„áŒR0“|”HŽ&b4[ŸàÑæ~;!Ž'òLQ—ëÓýÉÇÏ,I$cîY)ÂiJF÷óoãóÛÛÉõåÕ¿O#*ðø:Æã¯ç×ç_ìØí©¤ãóß&Sxe’ÅÀDˆæ‹ñøúüëäòôÇýï'“ûÖž®Í3mÌŸ'ß~àÑLÿý#&S1z…Œˆ”t´>á‚!Áó#«“éÉ?[YóiÈ‚¥H¤4 8’,… =/‰bF™ñÂÝäþáîÚ®÷SBåøüˬVf¾w"E”#É 7ÙZÍ£Ù“š=ÿUÊ}@»^ç`4Óvjþí)IǪn¶Eeµe…}ªŸym©ªÎêÆÍ– û$ö‘»Wµ5rÊ­c{UV®}›«ZÍj5÷
-ÈúIm_óJ¡vuïDÞ܈¶«œN&öãó/Ó›ÀCNùŽNá9³Ÿv<5+‹EgÚÈc²#p‚I¥sÚÝç çÌD@=pS.¼‹CÁ¸”0ÇðéêúÒÊ“nUóu^äU½Íêrk‡îÔÂù´˜9·~ÍŠ&[Ô“8E4Žc'>ìW&J ‘}Çž?Üÿýæî¸G¯ŠZm å2}«jµv{QU¹­ófý®öÇÔÉa€ó” »t8º§ÁØí‡þÄðp‹Xžk˜ØcQŠâD²÷=¶|§4±TßÌy¹Îòâ}÷¼Õö\ð€î­(7U^ ÃK 1‚ÁA×Q
-‘†Â»©à@ã%FX@ü‹º"L¨à$/[®Îºcðà·ˆÿðTÜR3»4Áº{„ ‰CˆÆ¾ŒùÊ9º§6(Œ;ÞVî< —¦b!ë\=6Ëh¥^Ôê×ÅNŽŠUÅ2/TT´°ø±‹Z‹DÙ˜¢v£í[´l9×Àá¤üy]¬²e@3œž¤d¨¹8º ³MS…J”¦‰
-ܸó’Ç$xÇ5UKM’ûþü°Î~FU9{Ù ,I
-)PÌÛp>Ë ©ì;LÖG²»œÐL!® <Ìy—“éÅÝÕíýÕÍõ/–  9ÇþÜC,ñ8³K5m‚®¡lp·´N’—×S&í€ ž ‡,±7@ÏLéRA?!½[¦9MIû˜ë—?6u^:­ [F8mWÓ d©Ï: jb]ºÂÂf·šÞY΋E¹]gV¨)0ÜÓ¢ XÁ™ýn2zÕ¦tvÖ’ülP´èŒ|–" ’:òkµÿzRF^Êg›‹Òñk^?•Mmg2cü²Y«¢®Î»HD‚Xšø̽w¡üL°Ñk¾ZYùÖ7™SíÖ+!/²fål€Xÿcºl¶­‹Ò± •$qÖÆŒªž}4V!3BÕ%$÷˜¥ÝÒG§5 Ž6ªk­öð›«)‹¼Î³•KÙY ·`°QnO¾>ú³QÛ\Uèòø9CÓ.Á%a*bchTfê.—/êw3uË¥õF|¨R2ÄXJ«ôL•]ÇCň}••Ã÷Õí ÷§aå y¹è—ñí y*+W3­!˜A¶u|îŒÌ²Mö¸Rý–
+xÚ­Yßoã¸~Ï_a` Ôj–¿E>fï5‡Ý\.v¶ìíƒ"Ó¶p²”Jr²é_C‘’%›¶S\‘ ©Ñp8ü曡CFþÈH „™æ£Hs$0£dsG+x÷Óñ:“ViÒ×ú8¿øç'4Ò’ÊÑ|Ù³¥VŠŒæ‹oã«ûûéÝÍío—*ðø#ºœŒÇ_®î¯>»¹ûKMÇW?Mg0dšIP"ÜêI<¾»ú2½¹ü>ÿùb:ïüéûL0³ÎüçâÛw<Z€ë?_`Ä´£W`D´¦£Í ÎX;“]Ì.~í öÞ6Ÿ†b ˜BBÑ(JzA d.G‘ÐH2Êš äñÆ,&ÉÚ$ü·ÈÝ|Fû±ãH*La-«_¯Ó
+¢éñ¢0^Ê‹Ú
+jœÄÛʸ¹8s‚Y^5^š¤öÚÛ<3•—Sÿáb»yöSõÚ[hÜi¤¤Èk“×Dži9¾­ýYUô\ÏÞÙ !H AÝÿà<×ñ‹q’s„‰ó4_¹AºtOçŶ~Þú—E¹‰½ÜÄ
+ˆá$<ûZÇáÙi5ð¬ðÔ Óa‘–@ Eùv
+1ÆXÿŒ&I±yN3sä"¥¡:QªÎ4Þ˜ŸkÇúZ'ŽªÕjŽêß!†Úö“%“£ˆbqÚ±N+àÙ°d`1`{àÚìÙ$éòÍÝï^×Ò§tƒ¦ý‡g⋪Žšiæàx'ç›4·gÜ|šf‹$öåŽ:âj|wZËMíÚ(X Î6EU{B
+»£y˜ÎîÜÇ_/Á…ñÕçÇé,€wHD
+á‘ïÿ!ŽiÖ¦‡KÕz[æmòz@kïÛo •z[ wH†m»)Ý}®ôj¯¦£( .SCãÒBÇP `oÒ²ôkZ N뮎ëgÓ©ûøêóì—À}H„Ö» XQ®‹ßÝ8]¤lSÔ{ÝØczÐ#@€jû#Ç6 ˜‰Àò MyÇ@!ƒiEÚªÿñöîÆÙÓ~W (3p³‚Ûzá;Âû[VÓ<ñaýç[¨E‡Ë©•Rö)í ® nEŠXð÷{õ8ÿ×/Ç#ê@v›C%ÌÇÇì Úä?ùë"¯Š²N·›Ýªp‚\RoyÁ˜»âÚßÁ/'cm]aÜv£¢Ñ¹óéðGÏG½ö™Fi䤡›aŠ«LùbÊP„ðäÞòâ¹J«}ª‘5D#<‚m*M…­0'°g¡á "ÀV©·i áû6áß[IvRâ;56ø]W#!H{á³ÐOW“eš™ÀBB[ÕÅëvv»+½x{C3OÛÕ$3/&{¿ÙéY³&_¥¹™ä&ÞcvùÝõ`L2¸H6ì[¾MVæ&à€`€2Õ¦ê2‹W¡«G<Rdåüì†>$ÏÛ*dP#¥"½oðù¬ÁgH¾=†ô®ñêìU4 XÆóÃ&þ1©Šä¿îþ¨öí×ç2¼Êr$©ØEµ9EøUTˆýS| ,åvݞ݇ (Õäö_Ç6pðíÙ À¼ #‚Ês/ôµ“~–ÐÐúò®>$1T©c)ºù#ÿJ§íÿÿ„;ÒûËÿfÜý}¦Ô‘ë8öïÒ¤uÊ:Nd´ïz÷ÉCßÿl#Øendstream
endobj
-2569 0 obj <<
+2647 0 obj <<
/Type /Page
-/Contents 2570 0 R
-/Resources 2568 0 R
+/Contents 2648 0 R
+/Resources 2646 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2556 0 R
+/Parent 2609 0 R
>> endobj
-2571 0 obj <<
-/D [2569 0 R /XYZ 85.0394 794.5015 null]
->> endobj
-2572 0 obj <<
-/D [2569 0 R /XYZ 85.0394 752.4085 null]
->> endobj
-2573 0 obj <<
-/D [2569 0 R /XYZ 85.0394 692.9368 null]
+2649 0 obj <<
+/D [2647 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2574 0 obj <<
-/D [2569 0 R /XYZ 85.0394 633.465 null]
+2650 0 obj <<
+/D [2647 0 R /XYZ 85.0394 393.5547 null]
>> endobj
-886 0 obj <<
-/D [2569 0 R /XYZ 85.0394 597.1647 null]
+2651 0 obj <<
+/D [2647 0 R /XYZ 85.0394 333.114 null]
>> endobj
-2575 0 obj <<
-/D [2569 0 R /XYZ 85.0394 565.0591 null]
+2652 0 obj <<
+/D [2647 0 R /XYZ 85.0394 272.6734 null]
>> endobj
-2576 0 obj <<
-/D [2569 0 R /XYZ 85.0394 530.4022 null]
+898 0 obj <<
+/D [2647 0 R /XYZ 85.0394 235.5228 null]
>> endobj
-2577 0 obj <<
-/D [2569 0 R /XYZ 85.0394 468.0086 null]
+2653 0 obj <<
+/D [2647 0 R /XYZ 85.0394 203.2986 null]
>> endobj
-2578 0 obj <<
-/D [2569 0 R /XYZ 85.0394 387.5913 null]
+2654 0 obj <<
+/D [2647 0 R /XYZ 85.0394 168.5232 null]
>> endobj
-2579 0 obj <<
-/D [2569 0 R /XYZ 85.0394 286.2765 null]
+2655 0 obj <<
+/D [2647 0 R /XYZ 85.0394 105.1607 null]
>> endobj
-2568 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F39 1161 0 R /F41 1218 0 R /F53 1313 0 R /F55 1321 0 R >>
+2646 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F55 1336 0 R /F41 1233 0 R /F39 1173 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2582 0 obj <<
-/Length 2820
+2658 0 obj <<
+/Length 2963
/Filter /FlateDecode
>>
stream
-xÚÅZmoÛ8þž_aà>œ Ô,ßDJ¸Ãi›-²ØæzÛ·Àî~Pd:Q+K®%5íþúrHY²e»‹tq)PSäh8œ—gfh³…l+¢RžÎt*ILY<Ë×tvk¯/˜§Y¢ÅêÅíÅ󄞥$U\ÍnW^ ¡IÂf·Ë_£„124º¹|sõj¾à"*º|ûöêæÕõ/ðS J£7—7ï/¹·ó”G—¯¯ÞÍ¿ýñâ궗g(3£Â
-óéâ×ßél ¢ÿxA‰H“xö”°4å³õ…Œ‰¥a¦¼xwñŸžá`Õ½:¥'$æR6$QxLjŠÍi‘’„sÑkŠ³)M*«©Åjÿ J$‰“ÙÙÁ–hbK>ØR%$Qš·ü¹«P×íƒÁAc¶ŸÍÇÅþâªÞÎY™{÷QwÕç£1-ˆ
-F£e³UÝâ`™™u] _Ø·¦W™¦à5±>§×Õ ½*§×û½Æ`îôÌ–hbË¡^5%± {[~'½faà rOŸ•%Êúþ¾¨î=»Úžóùr¨š£*ŽáLV°¦]šíéFÇ1¸GOvÔHJ+ÂSÐùI# ©Ž©§rFZ£P ÂŽ’A¤)™z¡Vev`É4&\Òœ”+MÈ5T£”p™Ê±`·ó”FÝL&¤ˆj÷)£5xôö+ÎuMvop¸4w·ˆ¥úR‘Ý7Û€ÉÛºiŠ»Ò“ú5|ÈÐþ^bh?•’˜ åu€{šCP':hêÙ#E˜ìÙ´Û,?Ê&ùV.[“×ÛåYg:˧h˜F”Q9ä0Ìí«àcUÒ8Æp³qr¸K‰ˆµðï¯óöËÑMDï÷ÁnLãC Nˆ¶i6uˆÆ¶Þ‹ßëw/÷“Û,‘‚“+I„Pé·$)NR§ý©µ CŽ‡NÌcMT¢“ÝÆö\o®Þ˜Â9ûžŽçDL ¼Õc_]½xÿúø )҇K ¦É·ÅYöøytàOV¸àSÿ,šü9D)yøׄÕÛu,Σà$Ö,9ƒvªh¨ÚUShÇH’ÆÁÿ–oºæ
- õ
-?×]Ù›Ò½|û¾ñãµ'pņ]k6&/À{¸Yzà™C0›{éªlm¦l!Rˆ#)Øh —y±[‹þn`Á
-Ð >uf[Œµ_ âíg@( ø.wT'ò¬O׫½"~WcçXšUñéÁ¹ˆäFÐ\5©Œ ƒð=cÒÕ “*gÒè„\^rzË@4±å(}¤D2ˆ˜Ñ–ÿkm‹Ö+%Tˆvì+D§Æ6kÁ¬EÞœ(ÚðU’ïjöº›2œH ÀQ,ø‚ùR´
-O‰Ó4ÅC°†K²‰kã¤{
-ù…âÑÕf(Š~ië+ªÝÖ³O3È2M Æî¬;¸‰ç×k>{UÉfÃCyÆ‹!gw(5JÃ~
-z€™T È`Øu<`é¨Þ´šVûØRÑ:+ªò«__ùµ
-Û4->a‰ª£×7¯ð'–f.hôyÎãÈ”5ä¿o55ð¶_ñ%„g •þºž³Ø¿·gLŸ4ô¨Yuï*5xp.|fø±êÚnkp¼5¥É Ê®Þ*!Àx’&³¡?<ÍÅøŽJ¡Ð_ìîxž
-£õª+qæÎä™ !KæÎ`gÅNà¡Êί÷ oßrÛ}YL‰œË@2ÏZBãUëÂÖ4Vn»`O%™t½4¨±ò«»³«ÍW(m×HpùöšàìõœE-­Jü>[ã ãwlLë·²Ip¢‰y|°z’Ty!`°DX¦Ú‰¼®¬>î;h<`ÞËo¬ú£&`f·îÎGc{AÁËž{“{§Ø´õÖ¿ío¥öuˆF³Ù·ß<³öƒPÉ9»ØÖÕÚ5…–Òù,~¬\~¬pÚuÏ0Ýt›uJI#ÿB¿ÇØð@[Ù}3ç„XMÉ(iÅøhÿ´ôN­þ¦n b(›ÚŽl¨d-Îy£ÃbÞvöHv à\¬q[œÊ`ŸÑÖ0_{oÎJ[Ý8>øQm[š)[;³+ç£åê:N§€¬
-#ƒƒ‘*8¨"Ä
-5ýaÞ8V½iJôžù'Š7YÂÿÚÚQnáE~ÿÚmÈùDíƸ&:—nƒ~7UƒÒMûÒM[0ó3…§7ùÐUyxMGEû€#ëJ߉B˜ñ”‡¯
-Ý’3h 7(Ô3 æ jAdž?l!&{g怈|ß—3¼Þl]XáÂ<” ø=!Ìda¥Æ[l-kÓToqÚTÍr#Þ˜¼ î’¼ò—äuãßÀòªù‡-èhÐÂA™d“‚/ü&”D ¥:\.áYí÷üÜ~‰?¡0€•XÒûœ5u iÍÆk…÷6Û–XÁ¸e…÷ñN=öÁ[F¨$À.JsoüË®cÔ6±æÙO%
-H¡Åðf"0L¢YQχƒ(}ZÜÿÙ“*HtPk$júg(tìüäŸÆì~û#5ÑŽü
-ì@RR¶’Œ)zxñK ‡:´§Hÿ?=a‹9endstream
+xÚÝZKoÛH¾ûW˜ÃJ€Ùa¿›ÀbÇvÏ$Ž7r0ÌÌ–(‰ˆDjDÒŽ÷×oõ‹âKT€Ì^69°Ý,VWW×ã«jáIÿñ„ $"MdÄ1Ÿ,vád ïÞ_`Gx¢ IõöñâÍ;*'Š“ÇUƒ—B¡Rxò¸ü}úa†fÀ"œÞ_}¼½™„FTL¯nïoî~ƒ¿yT@†ÓW÷_®>ع‡YD¦Wïoç³?¾¸}¬åiÊŒCª…ùëâ÷?ÃÉDÿù"D4R|ò„G™ì.§ˆ3JýÌöb~ñïšaã­ùtP8D„
+2 ‚'£ˆsÒÒ „-ÜÜί?ß=<Þ}º×»1ßN"@OÌÐfñ.Y:*Ò ¢ 1J ÖTi1 (ÓØ>nò]œfv| ìhþZ”ÉÎŽÿyxs?‡¶ErxN3ɦ—0!Ãé>>”öU¾²Ïrã½½»¿±£È>–iQÒ§ªLs·êê0Ãjš»Õîæ×ÈŽÞå;Øå†"Ñ[›~7A­:½©l•v±eªmÀ? z
+ªý¥='Æ1
+9©ÊzuSZ­áW;H³´Lã­ýc—q÷¶`6‰;Ó•6 =ø«JiR Z© o‚“¢)™e?êŒ$Æb" Ô(©Ø ¶DA“Êûo?ˆÕTzÝ€u— EVãKz¢%›z0”·—üR8ó¾{xfÞ¶NÏɳWbºê8È&/J;ÚÅ‹Mš¹éÔ¹È"ÞÇO[7™¯ê%° Â9Š”ÄÎ"¬:ÂcíÇÜ>èKŒå’z6â$ﱋvUYÅÛzëßÛªHŸtÊ
+¸‚´ Aí£VФ:m5ÕQð!+]²¶‚þ’CVÐZ²iâoìÿÈ
+ §3AdÜ
+T#Và©Œà +8çMÁ58
+z¨C>öñò) Æ…0ݱÂOSy3iG?å>…ÇE'I{Ui\lUe1ô¡ëÂaâAdLgœ3P·I5b€žÊàíYL2ÐyhÅ6À1ùØpÐ
+Ð)×…îUëxé³!uïìñ±Ó٭ ´â˜z,m×(]"2j¶â:Œt¿¸fcÏ)6ê{¹
+1
+Ì ÖwAQÄÛ’]»Z¢
+FTo™É®„ýB(Ä¡oé>ƒN|k¸ìïtÜÃÌöô‹økbgâåsœ•6 Â Ó ‚ç_ºß:¢ë‡/…»
+
endobj
-2581 0 obj <<
+2657 0 obj <<
/Type /Page
-/Contents 2582 0 R
-/Resources 2580 0 R
+/Contents 2658 0 R
+/Resources 2656 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2556 0 R
+/Parent 2662 0 R
>> endobj
-2583 0 obj <<
-/D [2581 0 R /XYZ 56.6929 794.5015 null]
+2659 0 obj <<
+/D [2657 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2580 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F55 1321 0 R /F53 1313 0 R /F62 1361 0 R /F63 1364 0 R >>
-/XObject << /Im2 1350 0 R /Im3 1515 0 R >>
+2660 0 obj <<
+/D [2657 0 R /XYZ 56.6929 752.0246 null]
+>> endobj
+2661 0 obj <<
+/D [2657 0 R /XYZ 56.6929 645.3699 null]
+>> endobj
+2656 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F55 1336 0 R /F53 1328 0 R /F62 1379 0 R >>
+/XObject << /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2586 0 obj <<
-/Length 2480
+2665 0 obj <<
+/Length 2763
/Filter /FlateDecode
>>
stream
-xÚµYßsÛ¸~÷_¡·R3‚ß ¦ON㤺Iœ4Vz7sw´Ùl$R'’¶óßw
- BŒ¡œ¦ÉõåÇ«·Óß?]\-:ú>3*Й?.~ýNVàúO”›ªÉ#¼P¬å“í…T‚()DÛ³¹¸¹øG§°7ê?‹T)Q\êÉLq’R>(J¨‚‰ÏŒdD[û(ÎÆÕJa f Îóõ;¥z’ˆÔ*pÌ‹4•ÛƒqJR©&}‹G~µB#~ñ¾5®HÊõc7®nò,,S]F'Eï3ɉ‘Ö8y ›k’2›F¡l]ƒ”W¹,·»«óâ.¼ïöùC¾qw.š,wnŸÕyYT¯¦3AyR5Ëû0”UøÉr?eiâ¦,ɦ3–ÔЈêDR•Ëoðîê([ßguøz“Wµ+¢‘]ö™.¥µ1F¬RÜ;;ðvWîëŠ-…ÉB~hÈ~©™ù3i)R¿SÒñ´¤è†&"Uì´²ð!e±Ù}2T6ký›©”j´îç@7]L9E4—f¢!\0ácpÝ[R¥%ó’”(Áe\ÒOÓ™fÉþóäê(8 Tp•N4¤˜ÑÔ¢ñÉF(„[©^ÛO÷9¾ãõ|Ë'oK˜Ó¤?­Vó¬¯ÚÏKr[ÁS
-hUƒ§ÁiX!uò!/¦Œ&ÍÓ«0O=ÈoH]¡ÛÔ-²-$BêŠ(ez» 
-ªë{ߦœ&>ëUR¸Í_¦JQf™í²Û|“×ßÃûÖ-ï³"¯¶øjp×ùîվ܅V¶Ù„ƾ,똺r÷ø0uaC¨$æ/ZÓ¸QMž–nW‡÷ࡶɳØ·ºìW.& ä„äq–·y±ú*Ê቉„˜0ÖfˆŸhÎÂcèÛ*¸
-šê8綪sv(å,Š”;¬nAgY€ ~vÜ`Á¤f¸ž˜¥eÜ7\Nn“Ç{WŒd­ÒD2+_ÎZ‘ò6·ó¨2hpsð‹£ï=Hà0È l§4 cØ·É°º+HH–®D‚X;Ûí3· ñ•'îUP6TMMRå®0âhÀ}È˦
-Âöbï
-Á ?(Ê:ôÀn*13Ãëñ¦NŸ¼ðÑ­ ï{WgyáÓ5x<;Î:LÎÊCé¹LèS øG 0K´€uîñ‘‚N <jöL~ ¸
-uUÊÀ•ûí¼YœãÍ}Õgx³ä
-@Tt逾Ðûf~ý6´lx¬æOáÝŠ•'tÈB51i²ÍPü{xA¿ð¹w[ÿAK”DÂO$âwmg^„gë¦nö’Ë*æ)Ôî'Õ¥éÿ³™/ 
-Î1‚ȹ¯U û]èèŽù
-;oã—˜V¡åk<—eQ›ðM(P0‚4¸r{
-=»vìfqU»luÀ8^°@Oè4|µBq5þþõóñM‘"p˜ÑgvBÇVUAP´³ïJôeƒKánfÓÖh„õ˜™œ“N‰/D©“9¤ c4¿^ >EÆ‹«/¢f$và:™#'13–›¨ïÅ}ÑrU>çMn°d3 ¬±»~ «Û@W®X…ë0Ï«¾ÇQ0ÙØóVCë帾G¡¦X¹ß(å… ©}X#`Ó IRNñçoŸ®ßÍßýr‰á^Ì?]¿\'íáz°ŽÌâµäÈMÌ@˜¦L·wP ÐÕ»&”<¯‰{6þ$'A_]–¡n$ŸÂh;W®ZîóÛö›¢í…Sà&´1ž¸o("=JÆëM×ײ{v$—xæÄz¯6ðÈôÃòU{™÷2ÅOR¯w„Txÿر€˜(mÃãrµÍ‹¼ª!e\Ö/n}/ÚÍû1+šl3\É ÕO÷O¨«•üçÆõär ¢hwÇÇÜßÖ*~âŽEq¨9²u¡ÙfÕ·1½x!ÖÑu<t·«ŽšãqÌ ìÙ–«8†
-ýùÜ¿u¼ºó"Ùe1duˆ+ˆ÷O‚éd¾#Álu`7,&On¿!œ±Œ°ú¥LîgEËë_…ä‘ÀØ(ΆéoÍSnÍS•ü«lö°ïCgôñU¸$/œ÷. éÂ÷Ùƒ =K x>ÐÌÞæUÕžÛüõúø¥'–jûòŠNÍ!²‚!¬à†¿Ä÷´Ûä˼FÚˆï~K¤*.t„}ïÒ,’uspSQºWóª:ëŸa—Å NR½´*‚ÈT¶ =È‹‘Z ÄKÃé ¯Kú5óÝüÃÕÍ)<ÔÈÝÙy<|–ñP$Ó<Œ2hﵫ—¯ýŒTÌõ *ΚîdmÁ Æ£zƣȣÊ!QÉ©ßÒ—Q”¦]Ðø÷ÂçD¥!@—ùøL¡®-°¬u
-gÊ4;t]  )ì×cßÿ £NúÆendstream
+xÚÅZÝoÜ6÷_!લ*?E÷ä6¹ Eëó5öÝmä]Ú«X+mWÚ8þïo†CÉ’V»i/-Š
+ÀüöþPÒÌ[åxž'ó:àl³s«âgÆ„ ,I©òÖ·ù‚Ì€»üqŸ–c‘)âW(X+.ã²ØmNrãj…ó@€­×Ž,V>Õ­6ÏMë¶Dpyý.¡Ùw ·4D“„sö.\L8±qm8ª*Ÿç û´A;)–!`°&ù¡libUWh‡Ã~Áa>È h¾†Æd‰ ̼¬{ý˜ŽqwÙsoVÁ)vm½»ój=']
+ÄX½s/‡çxl ¹€Ë.öuµuUK”Þ?`ñ±ªÑ¿ž*šnkšn»:¥bqØП1¾x ­ðÄÃö¯Ä q?wÏM½B1ñ‡k;§6@U·þ xOSãC%oi.\:,®Úª„ãmþ©ØÒ±41”¿é®a¾Þœ—p±Ä‡~•EÛ–³Aä¯Õ¡œOÈY
+o€¼êFŽ#S0EàtŽfºàñù2•Ã„cdÂ¥1!aVùÖ­Ù0/I•ÎÑÞ5Žò Ån䨷A¢Î…p<t!
+½¥`&ÉTf&îãýK˜aº‚¢ ³EÕ:2£÷)œB•ü Nò¸²람†eå K•Ì€§…ʽ|)¸_VJ!…&¸ª
+!ïAÎ;w_ûõÀƒÆù¹{÷æJ` W3Ù¡ãK‚É')bŽ¹ÃGÚÃ)ÿüfe¢2õ{b¢Ûq
+½)ˆ8V}½i±•Ú?½)ldú'€·ç3ØMÙì¥Óv3ì–°› ØÍ`6 3E Wùp¨VÝ6?í†FèNÞ~j˜„P‰°½—‡™T}Šå\êfs`˜¯6{ËÞ¡¡ÃIÄÔŸ¡€IÀ,»½-ú <ÔGÎäÝŠs Øf]»¦úª¥iWA9[9úhÜê0@ 8å1#üÞÖMØAøªù;":ÖYaZ埰*ä7c$H©Ìˆ`
+{œ@xÆžÙl,«y ËJ«;’ϬÀúÎyk£Ö.¨ï¯BiËðkS<l:ñ>úF–r°äfÁ„£DºÍ^àE¯Œ½zðzÕÓUs*a^} t¡2UI©žd›?Ç»p0xMp2ªc0嵆ߨÓx†:+yƒp„±P‰úe#(cÔ1ƧDÀ#©U’AU?“-0[ ¨N§‹žjX<ÇéBÌöΈ#G™ÊK¦ôy¹:¢¹F#z"Ø{×
+Ä Ð,"ä„·€ÎˆÛ)`–û»Òµÿð½Û‡âŽÄîÞ#×Æ£ìÒ}
+€%Â2Ž
+õSóßÓPv[N¡gnEÂŒü,zV'Bddƒ«9ôÌ
+2mÑlñÓÐûL¯÷õŽF9Öx F®+À'0ÆÇ®;{ Gx[¹]Kßá‘ËÆ/2àl=›·M"¤êÀì]Q­ÏAY6yÁþôÌ–y(¿Æ²­I„Ñû[æŸþüÀ—/ÚU‡gžaÞÑéXc‚¿J¦ølTöˆö•4ô¼Ú=ÀA&Šo«þÝÏ;TyëÊgðC¢QF‡÷dܼuy¸†7:™žj‰Rˆ
+–o‰ B™à£–ˆxö/±ˆË!a2sÔiÈ Ç#^§°ôJ{ìµÐF(nÕç½Vf"4Ȳk¬ð+£®f'L‹"
endobj
-2585 0 obj <<
+2664 0 obj <<
/Type /Page
-/Contents 2586 0 R
-/Resources 2584 0 R
+/Contents 2665 0 R
+/Resources 2663 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2556 0 R
->> endobj
-2587 0 obj <<
-/D [2585 0 R /XYZ 85.0394 794.5015 null]
+/Parent 2662 0 R
>> endobj
-2588 0 obj <<
-/D [2585 0 R /XYZ 85.0394 346.0235 null]
->> endobj
-2589 0 obj <<
-/D [2585 0 R /XYZ 85.0394 208.5535 null]
->> endobj
-2590 0 obj <<
-/D [2585 0 R /XYZ 85.0394 94.9938 null]
+2666 0 obj <<
+/D [2664 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2584 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F53 1313 0 R /F62 1361 0 R /F63 1364 0 R /F41 1218 0 R /F39 1161 0 R /F48 1238 0 R >>
-/XObject << /Im2 1350 0 R /Im3 1515 0 R >>
+2663 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F63 1382 0 R /F21 950 0 R /F55 1336 0 R /F53 1328 0 R /F41 1233 0 R >>
+/XObject << /Im3 1530 0 R /Im2 1368 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2593 0 obj <<
-/Length 1457
+2669 0 obj <<
+/Length 1824
/Filter /FlateDecode
>>
stream
-xÚÅX[oÛ6~÷¯ð£ T /¢.nãv Z'K\`@ÛF¢mu2åIrSï×ïð&˶Ò؆!€EžûùH†Œ1ü‘1P”Òt§!â˜ðq¶áñÖÞˆã <SÐçz½]½eñ8EiD£ñrÕ“• œ$d¼Ì?M^#BÑDàÉböa~ÜÞ}|XÌÞß?Ü,–Ó€ð8â“Ùýý|q}óÛ4 ÃàÇxòa¶ø8{oi÷Ó”NfïæÓ/ËÛÑ|Ù×w€`¦-ûcôé çàÇí#–&|ü ŒHšÒñvr†xȘ§”£ÇѯÀÞªÙ:'ˆÓ0‚ÐpDY‡ ˜`ŠYŠhÄI¶0
-›çÒa»ú&ê«z¯®”ØÊÜþ¢]‘Ÿ»O18ÁÃÞî!K:®KS(í™B1G„EìÔ–åFÚ$är%öek'»zJ’I•É¦ À.CûŒ1-%ÒF‚d2&¥œS-: a‚Â…=†(g‰‘ý8ŸÛ­³÷wvK{a0bMbnØÞ¾šIñRÍœš¾!FQ%°Ms¿¨ ˜ÇÐþ»âøOˆƒ¼Ð‰Immdö{V©ÕgÌq?ärùÏJÉóåZåÙ9­|6©‘M>( y5Ü®\:†QFPº]u+ß,®m²R—³|[¨¢ikÑVµ%=È•´ÚUæªæƒP{Q„ƒD h±ñx¡l<ÓIÙÌ>.¹{yV/7ª•µ’®dM+·¼©TSÕm±ßõ†ˆ…urt½â¸1È,P²ùøZík%Ê]]¨Vo×ü e̶̸†­c¼àÖºY¶(}“uD};rì¤Pö»Ùo…
-lèE.žJǼªêíP`ñYTµkŠæ_`X€ÀRðŠŽ€ƒ Æ?DÁ¾‹‚d
-—8nÊ!ÛÒέú@ìve¡+¡ã‰ºbO}=Éæö¸ƒFÖßdm‹¦/µiEÝz¡bÕz.á6nöm^=;yæ‚oV‹fÉ`,¼>Xš»¸¼òPÝ÷ÎÚ‰)N=rÝ”néØ…0éº8½@Ó±5†Âøé`× $Rå&Æ'ÂäwhüF'Ù”Õ
-ÒDßbcæįjèà¤u-eb};7È¥P$.°»
-,›‚Ïk›wF0ÂôžÔÿ†Î/v§ðØÓŸƒG†Rœøsò¯‘ŶÍàzfZ!¶­
+xÚ½XßoÛ8~÷_¡G¨þ‰{rÛ$ë¢ur‰ƒ;`w‹ŽukK^IN7û×ßP¤dÉV’=DÔp4Î73i`ø#HjªƒXs$0Áj7ÁÁÌ]Oˆ×‰Z¥¨¯õq9¹¸bq ‘–TËuÏ–BX),Ó_È48\̾]~Ž¾Ü<Ü-f_oïæ‹å4""–"œÝÞ^.>Ïÿ=¨Àð èc~›-f_ìvªi8»¾¼Ÿþ¾ü2¹\vÎõ7@0³žý9ùõw¤°/Œ˜V"ø/­i°›pÁàŒµ’íä~òÏÎ`o¶ùt, œ*$™Œð 1,È,ËT5¾,†èÆH1ýº)÷S~è?ŠABkDRÄDÌ;´( AZjáR1¢±+B XÓ¸ë_6¾¦FBrbáÃ<n4fÓHÒð®ù¿€ÿ$œwc^Ÿâ£$Ò€Mƒ)tãLð'Ä@ÎY£Ô7›?Ƥ\Ìw,ø\Àƒþ6½á¨o¹Ù¦¤½¤$”T`=¦IÅT³‰å&«¦',öuVän¼›ªÚ½å…<÷<T&µ©©`Ë~ª³’o_ühígòÚ”ÆÙ’a]8éÇùâ³i÷HÍ”áðyJEh¶ÅÞ”•  Í†)p7ÉS(ƒX…»Äª¿¸ë—}–fWL‰ðV¼fQºçj“äO­0ËÝ3qõ¡>”‘­I*cí S ¹Ôˆ*­‚~FýTŽ2H>©¡\£c•ý\ýôÓJ(}L{ÒOû¶aHAfÄø~~ =é¾—ümþ
+ý—6­ÜÈf‰}®Š¼v lÝ7õÆëæÉÎT¦|6å?¼¯¤ç+£1Š©â¾RË<]ìˆRP’Ò+];÷ÈfqU›$=ËA”  ì ¨¨§ ¯õµZDÎi£Óò€üòp{º¬ŽÖ„¼½l«4²ì 1`ÀšÂpÝ«¢ üÊ8ÚIÜ£‘A}&©{·EnŸ8L¦1_•d(Ž¹z'T=­7BÕjùPY*~üàœÁòòîÛ©#„ ¤tZ#® Â' Ê$TãЗ͡vN¤Å÷üí RHÀ¹‚((Oæ;³éǼ:lëaÌ+“§YþäñÉ_ü,¬Rz…®òìâŸÍ8óJ‡<5¿aLsã2ý´e`Û° Ì¹øéfq5¿~¸›Ù˜/ç7‹÷Û†ÝÕy½ pB[u•hk;1Å8ÂDR¯½ÁºútpÝX³ÐJ¶–¥0w”²º(Ü`Uìö[ó—›­½05ÕªÌÛoòVZ'ÙÖm<-Àx<Æ–ö­¦3V›¾•ýÑ·8÷®}Eg8QÅ6¹û”öœ¥ÆWSÖK”fûÀ½œˆKÂüöZmí³t—åYUC8
+ëY{ß󶎿%ù!ÙŽ—H… ¶Ý ü§ñ0O_E NX´îf9„1«›<£Ç òAQSÄ o=8ì’ê1»(èÍiý†nA·–Wn¿>%¬dW¤~Î}âÞÖ™ÝÑ#°pŸøˆÕn¸2U Àˆ çk7ã–­NÖuXÒðñeŒ—0´7¦å{‰E³öœùÁå‡Öˆœ>}ö¸zª« ,¨x˜XO”ÿSJ({'ô>Ú~¨Y˜›Æ;å²ß*o’gã$+8î5Á€10ø.«*aûå8`TR¤±Ôï#SŸò,,Ôð,¸Q™Ú Ì_ûm¶Êj{ˆ´ïME€‚ƒ®Ì\D¨HÒø¤ž<g÷Z^U'e}RYXb).ÞC…!®x›Ðƒ¼i•ÁÀQ1ð e^Í¿Ž\Ý<é1®¡„½ÍŒ}­†Ž€rΙ±Ó²«^˜zuÑì AÛ\Ÿ¢„Ó,ÜâÞt Ó:÷à„ál ׋›¥ftTvÖíÐåì«ÇFàºFy'H=­7‚Ôj5AzNÊ‹ò»@ùpí³ôÔŠáÜ-¸~Û“NëÜ•á! D˜dC_ÆÃÕ˹(KÏ¢už‚€
endobj
-2592 0 obj <<
+2668 0 obj <<
/Type /Page
-/Contents 2593 0 R
-/Resources 2591 0 R
+/Contents 2669 0 R
+/Resources 2667 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2603 0 R
->> endobj
-2594 0 obj <<
-/D [2592 0 R /XYZ 56.6929 794.5015 null]
+/Parent 2662 0 R
>> endobj
-2595 0 obj <<
-/D [2592 0 R /XYZ 56.6929 687.6458 null]
+2670 0 obj <<
+/D [2668 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2596 0 obj <<
-/D [2592 0 R /XYZ 56.6929 603.9193 null]
+2671 0 obj <<
+/D [2668 0 R /XYZ 56.6929 644.329 null]
>> endobj
-890 0 obj <<
-/D [2592 0 R /XYZ 56.6929 558.8956 null]
+2672 0 obj <<
+/D [2668 0 R /XYZ 56.6929 498.5963 null]
>> endobj
-2597 0 obj <<
-/D [2592 0 R /XYZ 56.6929 519.656 null]
+2673 0 obj <<
+/D [2668 0 R /XYZ 56.6929 378.8143 null]
>> endobj
-2598 0 obj <<
-/D [2592 0 R /XYZ 56.6929 484.9808 null]
+2674 0 obj <<
+/D [2668 0 R /XYZ 56.6929 270.9876 null]
>> endobj
-2599 0 obj <<
-/D [2592 0 R /XYZ 56.6929 410.2876 null]
+2675 0 obj <<
+/D [2668 0 R /XYZ 56.6929 194.069 null]
>> endobj
-2600 0 obj <<
-/D [2592 0 R /XYZ 56.6929 341.4811 null]
+902 0 obj <<
+/D [2668 0 R /XYZ 56.6929 153.7758 null]
>> endobj
-2601 0 obj <<
-/D [2592 0 R /XYZ 56.6929 157.2444 null]
+2676 0 obj <<
+/D [2668 0 R /XYZ 56.6929 116.6136 null]
>> endobj
-2602 0 obj <<
-/D [2592 0 R /XYZ 56.6929 85.4731 null]
+2677 0 obj <<
+/D [2668 0 R /XYZ 56.6929 84.0158 null]
>> endobj
-2591 0 obj <<
-/Font << /F37 1026 0 R /F48 1238 0 R /F22 961 0 R /F21 938 0 R /F39 1161 0 R /F41 1218 0 R /F53 1313 0 R >>
+2667 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F62 1379 0 R /F21 950 0 R /F39 1173 0 R /F41 1233 0 R /F48 1253 0 R >>
+/XObject << /Im3 1530 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2606 0 obj <<
-/Length 3409
+2680 0 obj <<
+/Length 2175
/Filter /FlateDecode
>>
stream
-xÚ¥Ùrã6òÝ_á·Ð‹!‚dÞœ±3™$ãxÇžÊîNü@‰´Ä‰TDÊŽrüûv£¼D{\µå*h
-í+mä€aâË8’–x²³™€e½ßfi“ã©
-¸`”òfþ˜W(—¡†ö¤L~‚ŒÌú(,µ˜©vÖðä8ùi–Ý»ÖeÛZRãoú̪aw=ì2+BÕÛøé K ÷ü´Ú¤‹oï?çÈÝüÛ:_ìò†– J€X˜˜—¹>Oíøqì&â‡bO`ÔÂA0hÚ½•—™B_G¨’íÝ!³fjå'È9BЛ¼Ú7Ïî#Ú˜‘û ” ¬± CžºÏ¶Ïcñ@ÆXw¯Á
-Þyý,ÖxŒõñîÒ2«6Yþ8…Tû&åé#ó\éˆn–yNò o Eâ~JfRûI`ÌP«.¯nß|xws÷î—ëvÑPÍávQ4Â~ltè+¡  Z:ôöuža+öšŠ õ~¾)‚µÖ¬u@èGÖ'îÎDìå¿ïóº©i4eÌYþ[È’ÐG^QÒð‡ïß@
-e†;§ÔEþ0)ùî1ß¡A÷Y’ù A¾[ÙÃã¥ëuõÄm"¬®ö¶±ÈûÐEe¿OµûÃwn'…^še–j
-Àæã9ÿ (¬àX´ µR·vöe–神ubIg£ËXà±H'Eĉo„qòÿ²¢H8ÓVñž)}.xsC-NjÃe¯3j—S?gÂñÂsœè œc>̤Ò~‚›õ{+3Ä>DP»‹´ûð‚p¨bÁ—"G­¬ïÓ阼vu’ŠÏ³Ó&ŠÁœGÖUÝL^Ö•Ú0™R²ÚW2
--z²z8D_á -Ð` Ÿp¥ G»ôÞ__¼¿¢¦ge &T2¤#c Ýþrñj¥F9™z°©œ"β‰û¨‚¹á
-"†
-oBJ?;?¸{£|“Dñ«®^©¸CïÈ—î‚÷Èòù~ÉÛUÞg¨çf
-o³îpÜݾ{;´¬²'¦gÄ#3K°æ°åQ°@‹]1ÏyÀZ°ÀÙà%d¬CYgŠkW¼¨ø-ƒ
-ÈóüØ(çegËgâg-]Á+*é’ɼ ÜeU:Ͼ3¶î¦ž-ª èiZrªñ˜îºŽ¯Ãáa>mÝå@ß_ÏBŒ{2[ËD€ ‚`TÑs5š>cÏe,]-hš1xú‘nÃYõÅôÌ1æXªÁÑ@®›ÐɈzUM·¥ûº+üM^bâkÀêH=L— „ŽLW±›È¤¤šÈi”{ay ‹+:È€ Ô¢ŸøwÛ‘A€i‹ƒ½
-mÒ¦þc1iåˆîéÚ­Xá8¹
- ?/
-ÚBýÿý«°î×o:ZcÙýàKŽ^*!ÃŽ(<Ž0jLzûû±cÚÿå"-yendstream
+xÚ¥ÙrÛÈñ]_Á·PUvœûF[ò®\kYåªT´z#kР¥òñéžîÁAA¶’->ÌÕÓÓ÷Ê™€Ÿœeq(tÍÒ<
+c!ãÙj{$f÷pöË‘d˜ÀC¨÷WG?}Ôé,óD%³«»®,Y&gWÅõ|qqqz~röã@Åbþ><b!æŸç_¿ÑÞÅq®æ‹_N—°T‘N
+©ªÌÖÁõ~W™Íî¬Z¤ï§±Ü”„“Fø Þahst ŽÃ,‘»qrºüpyvquöå¼»Õ£3°…PP¿K’Rƒ;¹
+“\¦L‘ƒjȤڵ¥Éª®ZÛm×w4þ]W æ¹q‹ß…P>(«Ñõ~kª`w,³¹5…¹õ`wõn"…³ÀÈ ÌX厶O¿ŽrÆßÐÂ2\ds³oë­iË•Ùlžé|ŵ¶ Ûç éÉ <.÷ºq›è<J2/¯§µ­øµ©î' ÚšÂÒv[ÓX<örE `㙊… ïÃw°Lõ4•àÞ*Œã…ãÍÉmö08Aq¤Àª•ç Þ¢<™_­-
+Hª9‘»ªÝXО5«5ÍLQ”mYW´ 7vc»w ;DØ€Æp²²SÏ —*uÖ‡·eevLš‚i
+'ã2û/pü•ìÌjU†#ÕlWáÕfÂø u.ådÝ£ò%`$,؇(;žïIïZB”–ðîH4}"žÃéðHñ$û£s‘%ÌDBÐ?FB’)ºI qå\!%W
+!FÐ)&
+s~íãÌ4M9Æ’hœB)Œ(•ÒìÄgk·8_Òd»oËMÙ>¿ÅB~P»ª4 )þJí:DñzíÚA9O@×Aqãg'Ýìž&ÿ¡!¨ÇËÍxù<Qû‚<CeŠêz½5«Ÿo¾Y”®ý¹±«m'ÒŒÔ:„$ãkþ…oS/ä hˆïÊÀö“E>mÝp1!â0B¿…—ë`ªˆWl±Uâ¤Vnm½o_}Gv± ÷(ÑD’8fÐ}ñð:Vè„Rh‡±îÞ‚$¼+mó*Öìëå±î L×ÛÂ>N!ÂJ´C¤,s¥¤ÙQwZC“¸™Ž:àÕ"ÓÿÓÅ?¬”ãPËȇ=,˜°@Ý7®m€JÔ%iØiö·Û²¥½.:à‹¸û•ý 7)êþ ¹ÊUXÑ2æÂbž©=WÂp|ùñm(©“ñˆ–T89R¨"…ÞžKÏÃȯ֎™P1Íó©"=9È êÞ‡ñÖÅ>{ãõþÞ¶~ôwn§ÞòÃ4P†3LÙhân±u©Èõk°²ØoPÁŸp•å¯ŽŠ
+Æ¡ËU{X%ÃœNlòu.;Ñ2ÀñÚ´fl·|²©›ö@Y{²Õë„“u»C's…³Ój<ü~w_ Ø=Ñ9—Î=>ï|Xg#«/U¬¡pŒ³®pü¾ŠÁð|žY›G¦ÆEnªµk<ñ¼Ñp±…!Z„J&:«H¡&í\,R=Ó*’`:UKÛNäw[x„þÆw¸dwóa(tè)êár^€¶Ä€áz8qpäOØø|¾ø|JSçl)âµ'Cy2&º’å—Åœº·“‰¢§Ú;b0õJ¢ JŸ†ëþ£±ùæsüH÷‰“<ÍÞ¤z­³µÝQ.ÓÔ*áXØÛý=?W¨Ï8Ê}šÍ
+7 pÞ^dE1Ý¡¡¦ŠhV`ð·”
+´è?ðÈ(Bj²W¢y÷ÍÒ°¯›a¦Op#÷>èñ“P3Òš--Ãö™lt“?_Äâ0 O}`‡z¿ŠO”î¢+pþòÇ÷þO¨­t–©þ»º:ˆZçÒ…r•©<$½ûLÿ’öÿPÌ[‡endstream
endobj
-2605 0 obj <<
+2679 0 obj <<
/Type /Page
-/Contents 2606 0 R
-/Resources 2604 0 R
+/Contents 2680 0 R
+/Resources 2678 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2603 0 R
+/Parent 2662 0 R
>> endobj
-2607 0 obj <<
-/D [2605 0 R /XYZ 85.0394 794.5015 null]
+2681 0 obj <<
+/D [2679 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-894 0 obj <<
-/D [2605 0 R /XYZ 85.0394 769.5949 null]
+2682 0 obj <<
+/D [2679 0 R /XYZ 85.0394 749.3357 null]
>> endobj
-2608 0 obj <<
-/D [2605 0 R /XYZ 85.0394 744.6647 null]
+2683 0 obj <<
+/D [2679 0 R /XYZ 85.0394 691.1408 null]
>> endobj
-2609 0 obj <<
-/D [2605 0 R /XYZ 85.0394 712.9035 null]
+2684 0 obj <<
+/D [2679 0 R /XYZ 85.0394 521.9242 null]
>> endobj
-2610 0 obj <<
-/D [2605 0 R /XYZ 85.0394 648.1357 null]
+2685 0 obj <<
+/D [2679 0 R /XYZ 85.0394 460.7643 null]
>> endobj
-2611 0 obj <<
-/D [2605 0 R /XYZ 85.0394 565.3444 null]
+906 0 obj <<
+/D [2679 0 R /XYZ 85.0394 423.114 null]
>> endobj
-2604 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R >>
+2686 0 obj <<
+/D [2679 0 R /XYZ 85.0394 387.2272 null]
+>> endobj
+2687 0 obj <<
+/D [2679 0 R /XYZ 85.0394 355.6754 null]
+>> endobj
+2688 0 obj <<
+/D [2679 0 R /XYZ 85.0394 291.5937 null]
+>> endobj
+2689 0 obj <<
+/D [2679 0 R /XYZ 85.0394 209.4884 null]
+>> endobj
+2678 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F53 1328 0 R /F22 973 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2614 0 obj <<
-/Length 3751
+2692 0 obj <<
+/Length 4060
/Filter /FlateDecode
>>
stream
-xÚ¥ZÝsÛ6÷_á·“§B
-™¥­š‘E*çdaœ°Zi/‹Õ#nâù·J †ªDä¹Í`~S4%M'ÈUbyÌßoŠ]õ‡øJšL|õû¾iwˆû}ýPª™%dæ„V™áïŸ]-u’/>mêõ„ì²Åºh°a«Šª¦ÚÃd%“ã#¦T&œKÏZ6]W­—°Iøx† k…3yà4¦nq»©f¶«@z<nùqf*øT
-“ç )aV£üØ]ñ;“nQl»–Z¸|;Ü
-¶ÜÓÝWëú?PÉ¢ ÚÍ«ï~NÀ
-ªìÌÅñ°©šC½F™{Ê‹GÐK½æ—77üå}Gì¯d¾¨~=VÝ¡C[‡·W O»©;Ü*ì{´©uÑUÏÈ`=jx®°á7ñs’(¯( ÀþÙ´jxÅÂóo¯¯¿Y¾~aú ¤” …Sµâú Ø,1~ý¦ã œª!ÇËRÍš"’šlžû«|qdZÍÏ‚Ûv]l—›¶;Ð{Ûl©µkKþüØÕÍjæ­$‘"Ë€#¶”íœå§"ɲÀ"HJÚt¦ç…ÓwÕ¡ëbÒþ¡Ú3ÏeIzë¨v° ¿ ÔÛRÙD$Jçcý¡A•uW¬¶´7ØÎHîV‹šYeNw¤a\–‡am˜²@Qº”·à[pÓ-
-ôòí–ùbl¼’ ‚Çl—*·pž=¶ÏÝœ^S‘;à±¾Žœ÷}¤KYÃa¸+º*ÉŸÛ¦¢Ö¦è¨Ö<Öi.¬ fC.½¼o·õúñ VçI@vPùú‹͉»™³ `:Ë]ù™N=æÇ=¡eÑ[Ë[ö@è7Jà $D¸-äa«ŠÝ.Oá¬M'bî™ïS}Øô(zjLNa—¹§NÀ’45aH{¬ âA&FèÔ»þ
-ÉUÊjî\4™Òº©¨$§
-¦·G¿ÏuEïdŠWi ÜðΟ‘ ¡ƒ FÞcàMyNôðŽÚeVáÔWñi×>ÔeSHÏìXtÅŒ|2¡Ò`<ÏaÛωµ¹@9‰Œ)ˆ?YT†¬ÁªÆ.9XÊC½öY¼vç©Á~à“‘PàÝ õB!zÍOˆW-Å[%„èH.îä&Ò
-NÒÈæSê„ÐÚ‰,…XbTŒu©³pÐÄ°QçÄ2P
-z¬7žXûL{IÔååÏ×ûáms(ꆔ«ÃÆ©„'õ0ϯÉ
-se-æ*,Œ¹)m²`xýç|'ã°*k¬†¹„BûÜdáx¨›ÒWŠ:ZŠóuXg¢Hè«›û#wv›ö¸eòŠ¹äh–N‹p2ô§OÊa_DøtT%¢tE¡Óºl"  ú~;
-»ãz]yÈJµ[¼÷ŸòPÔ±I³ýÒ2ª­1k}½œyB“R¹a缡ùŠg/C½+êílîú?¬Be}Τ³l¼kì„é;Ò!v{S…ççꊃº–;öôÜÅl
-?žãšgòø‚c>W§óØÑ<¡âƒžmsǧƒŸd»m?ÍÞ.àÅG‘Ô±>@Úä7ªG7% è÷®¦{'Mc\¨m"ø*& `ËÔø¢ŸlèCøÁ‰áДâZ¹~Òîçôº«;¾FÈó¡÷ÀÙ 4Œ
-åÕç+æ¡LgôxzJ<Ï
-Ë0ŠJ=@Q™aÓßýN’A%5ȤqÌzYnCÔÕ#Ñ8uL¹t8‡C¾8bœíy8r£ß¿à#0ç úÅ
-û9¶ë2úMŒ/aÎ#I_tÕiwuõ‡&†’ga"wB"žF‰Á ó …cÖÆV€ñ.(,ÛåO®Æœ®?Âð…Aû›QyÔÆóRj‚kz›Æ—>hÅÁí0-7¾š?ì § ñ;Á -!0‰w"C)L]/Ã_f 0|øXøÌÌ ûLâ=mÏÀÔL/jcFè’윤$þT,õK˜ú–*&RO— Ž'›&,P€™û½”Ä);Nä\ȪÜ(Þò6©œ~ï‡ÏˆêÐ^TwÎUø†S10ñ<þ0ånþ©ˆ‰ÉÇð¾3¿pÕFàÏRgl6‰uÙÿûׯý¯|SÌ4r5oþ*3>¶)ä^ÚôÔßùw²§¼ÿ;…Eendstream
+xÚ¥]“Û¶ñý~ŽUžX4>’ț㯺I\7>OÚ&y HÞ‰c‰TDê.J&ÿ½»ØHJÔÙ™ÎÀ‹ýäµ€?ym’(±Ê^§6ŽŒæºØ^‰ë;è{s%yÌÒZŽG}ssõìµN¯md•\ßÜŽæÊ"‘eòú¦üiñM$“è L!ï>||ÿòù“4^ܼz²T*ÖÉâùû÷¯Þ½|ûohƒa¤‹ïŸ¿ûøü;‚½bÕâù›Wžüró«W7­1êRhÄé׫Ÿ~×%ìàW"Ò63×Б´V]o¯b£#kí!›«Wÿ
+Žzݧ³¤"R:Q3´PjŽÆF‰VÚÑâf]á&ž½Žåh¨´@¢ÔÂü8fù’†Lf“qÇ&ã!í®¯Û†¨³Í?U1ž4Q@“$æ/šî°+󾚙:†]ÄÊO½"³Eµk÷=MŸ—e‹åj—ÕêpwW7wÔ¬›Ûv¿Ítúvvƒ:Êb‘ø–s;”‘5FñG\/uœDÂdéõRÉH)™<NE-¬ñk|7OE˜,>¥b/ê~MµÜA 쬯îª=YîÛªé ÒÞRù{åºZ†îéãu}·ößvUßQ­¼]eÓzBÃQ”>ÛT÷Õ$@µx{²ÀSlfáS"Õ& –žx¸­ºã“ª»|µ©J"¥8!á+û¼éò‚ˆ ­\tõ]“÷bŽ`EΫŠÊCW•Tƒ£ve~€5}] QÏš+/M¾­ n¼ûÀS8Vì`£©ÖxšÝ0÷É7Þ¾ñøÓ&åˆM»–-p´ÈZ´®, ÖwÜ[V]±¯WwÔ •?¼~•t¡²ØÑ}»æO‹Ÿè%ø'//õøÙBÍ äMyÚgµœn”NÓ¡›Å›–ŽÐ~ì:^16´"tÓ¬
+Üã­`×òÜ$³Âx•“ÐIÁr¢×3aR¿ ºÃ¬ä]×tJØt“qG¦™ž!öŽ¶±Ü,H,WN›d„'¿}Ï#Ë’U~G
+# Áùz›_Ï` ò“e^Ð~™™FGZ¦^Àô¡ÿY¬ê#Šó8GD6Í<~+ÞÆ.A¶"iá“iäB&-Õ¤´RÅÖ*#c­RëŸsŒÁ%Æ‹a:ƒ›Î"“‰ j°bîóšW_å]•Ä´0/­"ì v‡I³ÅÇŽñ¥ è L¤?M?ÃDI*ä)¥*`\Ö]a{~ÇqÄR›4J3m¦D]UEîœ!•Iïä«éN c¬:°ß-‚ðz€4Jq¬àÔ`v¶DBߦnx‘“ÎÖð›*ߨ¯~C¢Åà@߬ýjÛüH½+žê¾îj#ð,3 Úš¡C¿;°Ñ ´vº~’\?7tï“nœ›£ð
+á<Δ¹Qíhn¤ …ÙŠ1S"CÑÅE£íL¯u”@¯Õ!0㵊ÈؾD>§)s/ù4¼mÁžn
+RagxB…×$‰ÔéT+\¤†PYðeú éD‘œe‚tâ)£½4Ce›ÿVo[†Ö[çüE8QœÈ
+?ªΦڪ∙Û5u[Öf‘¯Ü=¿“²„É£“yÂØd¡…äÑúTqC Ñ6eÇ„þïðhîþa¸½ðgÇotNø Ðú¿ÂY®¥O.|K!ÎÞ>¹+ë¾›hWãõ´+һ쒠GQûû|ãœRÔcÊá ŽJí§÷$BwÄ=kèøY“Œ‡•ý
+4/kG¾0ÇïŒ}È*Üw6uÛ¦Y´SªúZXÆ…å¹(zuB´º¤ß×øté¯(•ª î/\«‘œ=Káí˜O&#Éé
+N;ä ½1Ã6±…âUp7œð§DCã“ÿ8r‡Ž7?•„‰Žào©Î·ÔPãÐWMîË|HáÙÉê\®.Tì™çlû¡6ç(g‘!q–E¥x‚5ˆ¥½>º¯Ý{¥=ß9¨çødBh;¢À (¯¹ßxÕ—Øʽk’‹+¹Ó<²KÐ|ì8Áµ¶Q›“\èô,uê Mp5§Ò
+÷¡ýêþ™ù9îÿ§É^Šendstream
endobj
-2613 0 obj <<
+2691 0 obj <<
/Type /Page
-/Contents 2614 0 R
-/Resources 2612 0 R
+/Contents 2692 0 R
+/Resources 2690 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2603 0 R
+/Parent 2662 0 R
>> endobj
-2615 0 obj <<
-/D [2613 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-2616 0 obj <<
-/D [2613 0 R /XYZ 56.6929 412.0325 null]
+2693 0 obj <<
+/D [2691 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2612 0 obj <<
-/Font << /F37 1026 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R /F53 1313 0 R >>
+2690 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F41 1233 0 R /F21 950 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2619 0 obj <<
-/Length 2935
+2696 0 obj <<
+/Length 3185
/Filter /FlateDecode
>>
stream
-xÚ½Z[oÛ8~ϯðÛ:@ÍáU"3h§è`¶è6)fN”XI„ÚRj)I³¿~Ï/eJNÚÁ @DSGäá¹~‡$[Pøc ­F.r#‰¢L-®¶'tqïÞž0G³òD«!Õ¯'¿ü&ò…!&ãÙââz0–&Tk¶¸X^ž}øðæýëwÿ=]qE—¿’Ó•¢tùï³÷ŸÎþ°}N _ž½}s?¹1t]¾?ÿôáõÙi.—oN¿\ü~òæ"°5dQ<};ùü….Ö°‚ßO(F«Å#ü „ÃÛ©QRß³99?ùOpð¶ÿ4%
-©4Q\f‹•âD+XxR`”PXå’‘LjÆYJ`ž
-vµ)ÚÖJ¦oÖŶ/)ET.Åb8þ*Á°Á2J”RYÌÇù]yU]?YNºÛÒ6Öåuq¿éü¦£Ëw׶¯nÙ_~Sb8ƒĘ ØÚ¯°§Šøœˆän©*'„ùø‹R^®_eÆ6«6ÉCFrX¦þÝûŒ£w$äÀâœZs ËÉÍè~@5£{O…3vÝÆ-º¼jêu{ w£”¹œç P%XˆV+4‘\똇½Þ©r¢†Æ^ÔØ[m]w×Øç¦zè{äòºÙÙ®Ý)ÓKXFÿ\·1ý¥û¾X¯Ë5X7jyáçz(6÷eBƒ\Kb¸1N=uS— r:äÌ=V›õjS»‰UÁ(‹•†0 3§’I;È2C4ËŽÄ€!Õ´*œôkéü®w~o»²; 9Q„g9ñD Nâ0À‰bzÄÊyp?T¡Fï+:Û*zÑBãþn]tþ}aïˆû¼t¿/Îß½]µÕM]®Ý§mUßø“J‡ Æu®>A2N&ðüØ‹e¼ÊçÔÛÁ]Qí0«kI ¤(°øHמƒHCÌ–åfÏ@j6Îhá\³ÝõÚ*®y(w»j]ºØTÔNµAǃ
-٣ɭ¥t²jùç©R˪^7­}Ã)¥ö8q[õƒîæÚv”Ã4¶×)8ð@ùT{å}ªXùáPù+²8Ø+åqÀš´
-Ò›m?VÝ­›"r u³œ0*Ô‘ŒF ËT³B_j&¹`^·Cªiݪ±nŸ^¢[a¨žg+P%øëVäÐ16Ö­°º=·2$×ú™ÒÎIj½RÅò/ªèmá~„goJr ¾×v¶ kÕ¾‘2+12«W.ã+J´áy`šëQ!Öl°i [uÄT36à©ý{·kËîÐlïwg¾ì>° ”°|žÙ@•à6N œdÞFìÆ–Áóµ,´ú ÏCõì{÷^}Þ
-°Ýë¤Ï}0 Ù GJ´ÜWN^³)ãUbœ•PÈp3Ò{Æöš¯°žLÀC„ÊÅ "<Hi‰Q%$J™ÿÐö_³­º.lý½{oŸèvUÝ•»ºìÐöã¤ãßogž¤”ÈœIxCª‡ðT‡Añ§‚QðùYfU‚Û±CP¨çcvm!]ÎÀ‡î!©w|_ ɆޱïÝ{~ŠïzÀÆ u£žåòÁF ìŸr PTú=§í}ëÔßÇŠ9Á\dÔ³$ûDà)Gž³yRM;H úY±tEWrÀ87P– u„ó@•`=4eD²lÄûEz*f|lCöÒ%ŠPÜ]÷ŽÒ`Õ!3ÀìW·Ø‚j…]è<Øqg=+8g[õ»¬C’®waì¹nv[‡`cÉG…I{[ìl‰˜)ôgH‹}•ßÔ‰UéKõ³îâ¦úر7Dë°¿
-v,B%}œÛÐ<ž/‚ßê°Áv¥qõ°ì˪߂F!àf ööì{
-Ûaõ^ØÐÿñ#žveJÚÈi…-{J3’uoÖÆX`
-‡Ôñ<Ïc„óB\"©˜r^ELnØçÑÐ;âš-wzkû£rO+kh´¬©_•ßÝщÅùw[Ö]ÑÙÝEíÀäp &ÕcLú/gŽŒiHÅöøѡ㿳ɨŒÍò#°hH5õNo·?ý™í¦ 탠ßu›/‰øÿyŸ
-¦íìÈù߀h&ª8¢qP)Ö뉈nT¼OfFªYÞÑ!óc4™åJGÜŸ­ÑhEnÁ<êò*aïøz\caŸÝPÄ–ÝކƑ*‹ ÓbÞbXNŒXõ9Û{5I"¸9im %¦fÍmH5moÊèæñàŒ‡"Ê,3;k JL¨K"2Ããy_WíݦxB¿Ì3‡
- qu¿³FÑBǶlÛâ¦D‡ÖÏ!:pFá­½¬‘ÛÊ!h¢Êè?ê£4ö7<àG|U}UîGµéãÎè¸rSø‚ Ïtõ‰gqL³#û•Cª z* Ë­õÅ'Æ[/³³ªÄ´± `ȉѼçe½nǬ‘ú Ã©ïÅJÌcVͪߨÁÇ妨¿îï‹L‹š ¨^ŽÝÍR͈ÚSY?oËÝáÕŒœd:Ëçç T‰‰ùè 3Ët<ñÀ[†âvüø@)YhA
-¯Eûé`/Nz—%×Á¶l¾XY[n««fã‡ß×Fî˜f;‚Í
+xÚ­ZÝsÛ6÷_¡·“g*>IàÞÜ©›Iç⦱3½™4´DÙ¼èé¤î_»X
+ Ò|zsûñýW—¥žÞ]_~¾ûéâú.‰•‹.¸B™~¿øô™O°ƒŸ.8SΚÉ7xáL8''ë m3Z©Ø³º¸½ø%1ÌFýÔ1Ue™±²Ñ…!˜3F”a+”T^ooÞ¼£]ÿøó‡wW¸ó;Ü—ŸÝk’Of²„7P/NÛ´û§EÕÕRf”Z3)M 3pw)ì´®-¬­fó´ï¨¹ôCÛ5±0*cQfœ–ͪÞTëÑ¥ é´
+„Û1n»j³¨<÷E¶*ØO¯«ù#õηë5P’ ìëiÕÔ¡w»¡gýG5ïVÏøâ ³¦ÞU³ñRMf¢pÌ
+0FR7ʳ„¥L«i¦·[Øˆï «·ôFâú!1]âN|ïbÝlš¶ÛU]ó5Ì{Úm݆w¡Û=Ö»–dÜä´np„ÚÁhA,`|i§ûy×l7­ß;I£Jˆéñ£ÿ¿ï›¶ñLŸÎëù—–¨PYøìãàvÓÕ›./†ÿEÂ.4zÜcÝÖ4œslë.qZ4$fàQu„
+4ÞGh¥]?}°«Þ.²PÁ5ÛíÞ7æhÔB‡Þù–ü§%Ò߸á>
+Ï?ëKA´Û0°£çz›" &I8y|Aš?ëc>Å€O$ÄÈ.¬Wh"“Õjû­³l…lÔtÕýÊo<nú“Ï+o$è÷.÷N–ÆÚÆ­MÍ’BŒáBOõ¼ùsIŽc'Å’ö ”Öª)4p
+ÐŽØuÝ´m³y
+<²‡l´`§U[Í”2/ jNuQntµW«€î‹Å®nÛ³hZ‚Ž„´çåIT#å–eÁ¬Ób(Q@SYrBSYŠÌúe–-Kqh} IŽ2ØG›AQ ç÷ÂÊà{Q#À$˜ÕJôª€½‡P¿÷ª´ŽïòX9 «ÀÅ ^‡ Š'R¡ H…zH­dZ¸WÁ¨(Ë!ŠÂ2E…ÊPºƒÂ°YmhA`Ô —Fšù#s7Ô{ÿL}áìK=`­Çph&dÉŒ+^ G}ýæ…ã^8Ò
+G°êK;N»s*›a¬¯\=z¤hŸÓ;Šˆ¹ pL°k³í‡BOˆsl7±fô›l÷ ’æ¨ò‚/¼Úæa“jÉÓ0!
+f$€Ùy˜È¨ÎÀD¤Š™–ÇVDò4Ã
+¡õyÕˆh(8x -)n“Þü¡;å=8[T¦÷m|é«W$ÞæçsαŒÄl$~»#x¡(2ž;rU†`ɬäe&$¡Â'¡ÞŽÁ—±£Q_̀匶‡Ÿ^à¼ú¸˜‚ Y”¯@ þœ*Ïࣰ@Õ0O½,j(XÖáHçâùÊ
+/ß i¶ôLðíûª¥ƒ˜£»¾œU@¨ÀÇgÕ0Ly‹àî9è†Ë¾á£ÀëŠÂÉóá“SŸDåÁkUÅÄꛧÈ”Z—"Qˆq@Rê@@¾¼<Y½xùÝÙ½ ¥Ê¨Ã
+¥à¨cvxì-˜úJk%åëK©LoM;*œÇa›ýÛ› b0ÄP<e{iá Ü ¶Ï¨ÎØ>RùÛn¬xKÖÙô¨u©ÏK¨FDìVÁaKZ;”¡·{<gb£W5ö6ëÐíž+©-!UÒ9#^óÛ׌þ>̇í/$ñ`r×úZ­ö£
+¥Ÿ“.U5'pÏ€ ¥bp¯êjwbW¡ôrLU÷`’“~€Y©ôy?È©NûA¢ÂE¿ÔÏÇ÷7ó]‚
+]0ˆ&3SÒȘf…•æ¼žÕÈÂà 0µ¹²Ã…é^I©þjFånIciUHÉlÑ>ªe¼‹r†»ÿŸ–ÇãͤS¯*·oÔòXÁW2Ùÿ¼±«Â7
+ãÏ_©ø{ t¥:_Â-èkHÔlÆò †X)–¾ìî ‹?†@Õ¬íA½uûrLH8
+…;¥:=}y,û
endobj
-2618 0 obj <<
+2695 0 obj <<
/Type /Page
-/Contents 2619 0 R
-/Resources 2617 0 R
+/Contents 2696 0 R
+/Resources 2694 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2603 0 R
+/Parent 2662 0 R
>> endobj
-2620 0 obj <<
-/D [2618 0 R /XYZ 85.0394 794.5015 null]
+2697 0 obj <<
+/D [2695 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2617 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F53 1313 0 R /F41 1218 0 R >>
+2698 0 obj <<
+/D [2695 0 R /XYZ 85.0394 751.4437 null]
+>> endobj
+2694 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F53 1328 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2623 0 obj <<
-/Length 1959
+2701 0 obj <<
+/Length 2550
/Filter /FlateDecode
>>
stream
-xÚíYÍs㶿û¯ðÌ»ØÓ˜á‡>/ñn¼ûÒnòòjïL;mŠDÇš•%¯$'›þõ H‘lÙ»msìø@Aøe1æðc×c^(ñ:ÌåÂÇÛ?ÀØû‘ ™Y#4ëJ½Y.ß)²Ð“Þxµîè
-1^%¿NÞ0¡ØTðÉíòãÝÕ|ê;“Õb:“ÒQÞd~w·¸½ºþú.aä|r3¿ý8ÿ€¼»i('ó÷‹åô÷գŪ5«kºàÊØôyôëï|œÀ~q¦ÂÀ?A‡3†r¼9®b®£TÃÉFËÑÿ[…Q;uЂ3©<9à )ÆB°ÐueÏnÈ<%•uÆâçùÍÝÜ
-LçññL†,ðºmµÑ°ý@Mô—h»Ëtezrr¯³â ª RrbT(:
-…#™ë;>h6
-ój¿K¢Z,í8°®`\ì³—¸×¸À¾ÒÄ© ä¤y¥ËyQNƒ‰ÎtMSÊ©&º*ö–ˆi3È Û&´§µí[ZacMÏDà3Ç‘.PWÁ:r‹­¼ïNþ(r ¨Q7¹-êÔ®ìzÕ E¬4ßí-ÏY:Š7D¡^ìÄE^G°EìE¤§ŒÒ,ÍPÃ}åŸp
-±¥qþç½®hªi7$±ªZ—Hƒ’v­ò±á® ":ngˆ GôÁ«œ‹
-­YSÛUZhÅÆ:!m²ž7»no š6 B Å— †¡d&—{M.îÕír¹x‹tJ’ÖC†®r‘2Ñ´Qf+G£ÂšUõ‡7Ñ£&?-¯ß_´kü¸ø…ädÁ­YvÀòƒ³ÉLFnëÒNe Ó)á{vڻ뵽`¾ÞX9‚)îû'jqšu¥l)îÏ’Vʬz©ëø²„ü’=ÂáÏׇW2Hê¼­Ô± ½¼+\6ìz}¨¬î”fi…^º¦/ÑëhŸÕ'
-´SãðøòBç+ëHñX#e=ö•—å>¿4–$—”p-°OúùÐ) 6\œ·¥•:6¦ç;)|ÆCáô­©ð"ê–³=w­
-ã
-üÛê¼#u¡ß ÞþÂf‰¤ÅÝ~H
-ÙjÚT=HWz•øB„<‹$Tý0Õ¼ÊàUH¯23¹B¥vÁI•yJæöá |{ïÀ@ûáÂr÷^LfÕÍàsâj¹¢'½/£ò°J›**.ŸwuñPF»Mó1±Øi0j¼ê‚>ÌäIóá°¹î6QþpPL­÷õ¾ûíéLCŽ«Ø©oø¬Í‡÷ÔÊÛÿãïû/ÿc8PŽ<‘£}¸C É(ãFáyÇW5ýplûŸè6=Ñendstream
+xÚÍZmoÛ8þž_aà>œ¬¹|•¨/ x¯ÙEmk½ÀÙ|P,&*K®%ÇÉýú¾Z¯v¶]à*Š‘ÃáÌ3ÏÐ!3 ÿÈLD(Jh2‹Ž&b¶Þ\àÙ#ŒýzAœÌ -ÚR?¯.~ü…ų%f«‡Ö\a)Él•ÝÎF$B—0ž_þýæÝò2æóÕÕå‚R΢ùòææêúÝû?à]`IŒç—׿/?ؾ›Ë„Η¿^}¾¼[ývqµ
+jµU'˜i¾^ÜÞáY;øí#–H1;À F$IèlsÁC‚3æ{Š‹Ïÿ¶Fͧc¦àB"Ay4[0Ž$¬?n0‚bB@( ŠeÁ`”ŒÌKiƒÝnwj§¾ÞÙÝ—/»]­û’U›4/eºQ¶ãv]¤uíD›×­êÛˆrNâY[‘ºAjD_ÚÒVA e¤«ð'õuŸï.‰œ«úrAÐä)ml«¬ìÓ W{ÓX«vïº2ÏÌö©—¼nÜ<ÕƒŸÏ}PoÕ:ÿcª2½Ó¬­HÆT¦´^ÞýM0”ÌÐ#ó,8MÀ£"°!(‚Qcë‘ E,w±¦å˜j$ALÄ~Ñö9ç‹Šó²Œàùû‡±Y9Š9ø"~ƒ~^*¯­·T›¼iTöƒ}{mŸbó²Q»R5Ð&¶×óï7*CƒHtî“q"Ï„ÄQèDD8¡a@¼~@°`ë”®Ah¨l?X,HGÛÕ“¶£‘óîvl0»ØÐãi[¬ÇÞchèOu8è1ºq.â¦o v:"D4äýO¢A"Ê9q²›}íŽÞàÄ©à
+\2NÈÙàñÀ¨$óÃNcoi_r÷´¶†FÝÀžRŸÍzÑG*=›tñ]«²I›¼r˜ãnO4̺Ç^ŸuÿéÜ‘‰ ‰®?~r¥Œþo9 û"‰¡ì 'jKMÃ~2°¿ß‚m•ÃòL·êø6Àý¦)îFRÀí1ܺ$pw×ß
+#a€}r/Ajd3Œ \ *HÒÝÍ;U¨Æ—iùúöªÁ}£÷:J5 ^£T°obÞæô9 –pÚ —QÊ!ÁóC NÅ{„( kLò#%ñÙjMd2óé­zÎ3Ë_ m©QD´ÇFC€‘¡u)£óC^vø¾#¶©ž5å<ä ÌçHö-
+ös@쌙#N»æ׊?–Ör=êîEwz¨(ªƒß2dJÛ€DºäºÏ‹¼y½$
+{³-Ì~$…ý
++0Vî±® ¢­›$½‚_"c(i¯tæ@k{ó$Ì=†ͯ«&·.Ü­¯m¹®¼Üî]š1e.tùk+áçµ/.ïÔö-uóìR`ˆ>y|‚O¶UWýÅS+ýh·¸ßš­áî–L2sþ–œí¸Y@3 ¤Ö3¾W`‡ùÚ¾¸#6mŸ UÝÃÛ
+ë¶wÝ®Šì©ªÔ9n=°ìNF¦&3Ú(¡ã3Ɉcì'5SýÛ)Aä„Æ>ÿ÷meiîĘžZ?ŽÏ0µÖÕ££»ÕÇ ?ìÃKR<’°BædÊÖJtø; ……F¡ 0ŽlúýM¨H\D;ÿkÙª{+ŸeZÏ:—:¯ 3ÔöÍ÷‡¾'ïÚš‰¯h\ñ¶Z}8þ,àÏú+„kVëþV×´·üNüÅVbî-_ÑñÒ1ãÛ|üè–csôýò_×ËWÎíªÝt(œóRÚJ2ô9@a–»k= dªésx‡þ<rèáÊ1ü'µþâ¿hAr@7ÍÐÛ/¥ûp$À—ÃÒªÌ5–YÉÝõÄÁ™µ¾vZÆõ=ˆ$á §£.L¢
+7­ô?uhâÂ>*åû*÷©¹w‹¥V!ë #Gnw%!ݽ¬YAc‘câé¸Ôt»Þ‡Hu‡;hžT÷þ7¸à`ZS¡É°ä:-­îº]•PX±|ígµ¤Kâãe0®Ç…¹ZÖ uâÏLÐ!6ú÷8P¬ïþ”ãŸÚð1)éÔ•‡@ðqä•Òv'1rqˆ.¦©ì@÷ÿ …éuendstream
endobj
-2622 0 obj <<
+2700 0 obj <<
/Type /Page
-/Contents 2623 0 R
-/Resources 2621 0 R
+/Contents 2701 0 R
+/Resources 2699 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2603 0 R
->> endobj
-2624 0 obj <<
-/D [2622 0 R /XYZ 56.6929 794.5015 null]
->> endobj
-2625 0 obj <<
-/D [2622 0 R /XYZ 56.6929 750.8373 null]
+/Parent 2704 0 R
>> endobj
-2626 0 obj <<
-/D [2622 0 R /XYZ 56.6929 374.3309 null]
->> endobj
-2627 0 obj <<
-/D [2622 0 R /XYZ 56.6929 186.4801 null]
+2702 0 obj <<
+/D [2700 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2628 0 obj <<
-/D [2622 0 R /XYZ 56.6929 98.3442 null]
+2703 0 obj <<
+/D [2700 0 R /XYZ 56.6929 335.9533 null]
>> endobj
-2621 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F48 1238 0 R /F14 964 0 R /F39 1161 0 R >>
+2699 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F53 1328 0 R /F41 1233 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2631 0 obj <<
-/Length 3033
+2707 0 obj <<
+/Length 2326
/Filter /FlateDecode
>>
stream
-xÚ­ZKsã6¾ûWè¹j„àMâ8¯Í:µãÌÆNj«&9Ðe±F"‘²ã¿Ýx
-#g™‘DQ¦fËÝ=ÂÚOWÌÓ,Ñ"¦zwõã?D63Äh®g÷ëˆWNhž³ÙýêËüíçÏo?ÜüçzÁ¿#× EéüÓÛÛßÞþËÍ}¾6|þö§wð(s#ˆI¤Ótþëí‡÷×Þÿ|õñ¾'™Q²üuõåO:[ä?_Q"L®fÏð@ 3†ÏvWR ¢¤af{uwõïža´j_R9Q9Ï&tÀÙ äRóD ÊžgÜ*¿èzÁ(|ù¡^-ñ‹€íB(Âx¦-Ém±+qøñH§@Å Ýƾkuöç™Õøžµåá©<¸ñ²©»Ã5ËçÍÖM»j[u/~˜£÷[MXÎ w/u³o«v¬v º 
-¨šw›Ò š}y(ºª©ýãÚýîÇyCÊä¢2‡
-…4Dzj¾Zù ½=WÝÆM×› ¶a'·U]ºéfâY4÷[Xi»²îÚ7× A}ç^Ø*˜ôtî§Ý {ÚÕö»^<»µÓH& T§.í¬ÓÈqîm%W½ ·îÉI ƒž¼x*ªmñ°õƒü#êÊg¦ä[È´‘ƒ5p%øE•Ã70&z#ßíŽuµ,:4E‘)¯pYIE¦½AãTÈ”8núQá~îßvôà9u¹ìªk6ojк¤¼Y¯ªúÑQª±¯a§º³B¬¼éy!Ë ¦ ç«ê±ê
-LÐdªë¢;:»´&)Åü¦v”NÛ@µ<Eݹ¾ £ü ýϵ|Õ†%ÕA¡qÔŠ¼Ô`å¨ÌÕA‰1}´¶ªƒøô¸}q£ØÊL¢<ŒGÞq5‘¹©¯Ø>6PáXka½ ÿùéíûŧ
-w4lþ¼©–·rlKOS¸Ÿvãl÷¶ÏåÒ=wîã!þ–E`QÖ–TÚ‰Φ`l¤©áÄ´4óûM(
-Rm
-uÝiQÒSá¾}%¢â ÉHn”8[‰Ä2Ø]sj.‹ØSMȘ‚(E4…©DÈßÚrus
-èS« õR¼Fä*!…My,¤VnßGó\–n¹Øâ)] Jÿ
-‹"§çÕŒFž„j€•ç25¤OÇmWíü¨ê¶+êeÙÆ`ïíÑþ»Ø×-¶[ç è¼]g³» mk¤›¯c'¿ùü$G¦´géÂ’ º(à™´Q¬”¯ØhDuÁF•µÑå”R@€ìLM›¨f„r).Ë×SM˜(Ø%¥`F‰„ÓŠ›?Sv'|u´™Œ¬“oIÌLÄHœ 1Çh5YÝž;3bx}U® 0²7S/…“ÉXòDz[þˆÁœ ¼Sn”´Î€u¨‰©¹l 1Õyc詬1|}5`ňĤ>J^®§š.±¨ 3@%©xg-Ád’OvJ¦P«Q™™È 8Ø™ Ÿi`¦O\ G ÖåyH0qáè™ÊIÎM~rôÅŒdË2’Ñ\÷'¸˜XôûxÑPœ‰­”—&ÓñN."ö!„ÄQi{^
-кÉYù¹B°ÇYæÀüB¾]¹‘ŽðW58£ã‚e
-Fo8å±pâ¸Z‹É(Deì[}Ý0Bת)½ uÓ¥0"u&R´]þ]µÝy‡†hû\v¸ˆê‚Ã*ëpí«ÑwhÓ%î&aPr\­§:•-u!DK,ËRáâaZÄiËÞã\CÄ*ÎP#× 0i¾· ëÑ;½1ÀØg8ÜÝrSú—ŠSRÈæ]¹óÕ®qmž˜-ØÊ»õ3eÒSOþȇ°/rJN1zΈÎ^©•<ebðåŒ*ìY¦ØßÁúÌÙ’ç èÝV¶î„''R@QyÔÂYl aÓ…Ìm[èåÜ—ßv‹(œò®
- œ09*›}$[$—Û>
-óâ–hbËää(Àäܤ[~¬‡æ)xæC<rÛ<>B1r^ `ÔèWªÚ˜ê‚•UÂË´‹!æMtj“˜3žÈõ]­šžãéGŒDH@uúî’&õACrÍøeÅõTšKÎRH¼P鮿ÙÃÓáŽ=Ko+ñ¾˜ª w^ð"úöÿM›=Ç m&X ÐIF¹˜Rç ˆ'Ê耷×έw#œ†v˜t¡LÆ!N3ÙyÕØ憌ö{UÓs|E5xÊDþ¿«ÆwAáÂYø"N!ô×:¤tœòWZ I!r–›Ñ-VëÛs*n‹ÛG— TÒܶÏÝÁw8ü¥™’ˆâ€bå`r½Œbµšï
-j¯Åõü¶±525ýu.ÛÍD„Õâ:‚®¨ì†°_RáêàÇž Q°6t9aÞ—ð(DãY9hˆ„'W”£;©St6 &Çÿs„ו‚Q÷£>ìèÄ[7q3Ëu;ØO~걬ËCá7·]úŠåB\h«B”i'ú©¡ªþsÅDŠ§ýEÂwÿãØðqûãùÜ'(¤{aX
-5Ítv뿘Êþ_1ƸHendstream
+xÚíYKsÛ8¾ûWè¶rMãÉÇѱ¬g7òLÍV’-B+©I{üï·(’¢äìNŽ[:àÕl4_¿ 6¡ðc“H*b9 cIej²ØœÑÉ
+ÖÞŸ1G3óD³.ÕÛ‡³‹w"œÄ$x0yXvxE„F›<¤Ÿ§—÷÷7w×·œÏ¸¢Ó·ä|¦(~¼¼ûíòÎÝŸÇ|zùþfCňXhè:ýtw}uþõáç³›‡Vœ®ÈŒ
+#ËŸgŸ¿ÒI
+’ÿ|F‰ˆ#5y†%,Žùds&• J
+ágò³ùÙ¿Z†Uûé˜
+”ˆˆŠx8¢ÎÇt b.¬vçÑ´É5œ/¦Yí§wWØ3HìÕë¤Æ^‚M‘lÜW›¦rKEé:ú¯ÌÏ%•k‹ì”õZï°»;gÑT/JÛ¦n£—­—féÚ.ÓjÀ›«»Ë7û_¨¢kíwÀãÁ=²fŒ‘X)nO¾6<DÀ§ZØk¶iRëÔ Ät bÙÙë»ùüæ
+û™£´2®„Â^]b›äyùŒ,¬XUy<iÇãÓüöý›v_nþíN‚;³íˆä}µUNÌ Ü7›´„Kó™¥ql?{wû€<D,%T='’Ó#Fæˆf]* 0
+ëPP˜§²
+{Jv»¦¸0’¤•®ª¬,È7ý2…KJ¤
+‚Ó²´T‡ÂôTÇ¥"R„q_šJ[“3º[ëu=
+ÉO#Œ$#‘ì{ÅÙ·(7#|„"Q Ôky>£øï!Cœ¼‹–èà2èb€B÷nã1©ô,],Ê4+V8*—ØþóãåÕìãµ`l>½µ™xô¶\T•^Ì€p¥ 
+"ãÉ1”©Ð¸KÊOìKug-Õÿv
+hÛ]ö÷v
+c’Ùu=ZH\Ï\z“=î’Ý0 Ê|µØ½lërµK¶ëlá¢ÜVƒèÞUopÂæþ65J|¤['ÅjG-›ºA½àû¹÷VunM!k€t:¦Š÷E¡ÚÝéÂ
+<9\{dIîÚèsp±1¡¡tÕ£ùÚŠð…óðHÇ(‹ÚŠYæ.9¬³<«_N`Ì9È—¢ÜVpwƒx€ (z¹ŠHÈ@ê‘pÁ@p®L(<Þ»,0¼³‘ðÞRí€?Ïñ JtM[0Ž¸³Öªlv =KÒ
+¡ÊEÈÞª›À“õœ#œûáÖ˜y¶š-³\°… *!‡l¿½Ê¬óO’ˆÓpȳz•ç¾œp„»æ9nG8.`rÕ·Àm¹«G÷S¥–ñïmïed‹¾ÎƲb&-—Baõ¯<R (㙵g]–‰=Ñ8Ÿ´ßÙˆ˜¥#Ggœ%‚þÑåfcÌhn"#"ÍCSϽ_ß̯>ÝÞ?Üþz×~5âååÞ&]çD÷=`½0n‘*WWB§u†n¸Ä6Áƹè9 …rj^|b9½­ÝB Ö×·RsÃyÕŒË ›GïªÓÄm÷œ¸}¶x §,µq
+f2†ÜM¼½½»ÆÌcJ”IH‚YçIÇ{p\Ñôv9"¼¢´s/ü1 È‘½Â1ê é©üæãèsV¯qº(}4DlØÉ<+\8-·6:á´hÐ&VÚU³ÑEm— éàÈî‹ÚÑ'ØTkcž«ØÅFHÃn‰ %á‚}“n_àRyû:ÏÉY ÂeKž<%Yž<æÚX/ÿ€:sq©w2r@§,8©r8kk#dSd H"Ìë_¨œÂMÏJ*Bÿ€j¦|œ4ý²í%Ø<\Ý#=XN¡u¹MY€Ö% áËKC¹Wý¼ŠÚ
+‘:è9!{ŠöPÓ4[eubÂs 2e«"ñY†…¤ÓÛ)QÛ@µhvHQÔ¸ÒW0ÊÝðÐþÀ!ð(¯bXÒÀ+´ëµ:V“¨S,§#l%qÜúA‹ÕÀ‹/§î%
+z]”Å=åä 7 2
+Dßp“|Uî@…|²Í*l}iv„$ò2¾5®4•v4 6Õ:is\;֮جq\ØêijÐø@,­‹4ˆ)èxŒ”ÜX c—ýš¥Ž“ªÆ²X“šÏªú%·¬¢¡
+ìœ{ý†ÑÞm˜Š )uU;~¥¥w ÂôàÆÿQu¿¯¶&17òà /ó¼·Ñ¨èÂϘ{›o¶ÁäÏ…vI§û«Â¼y÷8¾!%ûǦaìBH)
endobj
-2630 0 obj <<
+2706 0 obj <<
/Type /Page
-/Contents 2631 0 R
-/Resources 2629 0 R
+/Contents 2707 0 R
+/Resources 2705 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2603 0 R
+/Parent 2704 0 R
>> endobj
-2632 0 obj <<
-/D [2630 0 R /XYZ 85.0394 794.5015 null]
+2708 0 obj <<
+/D [2706 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-898 0 obj <<
-/D [2630 0 R /XYZ 85.0394 769.5949 null]
+2709 0 obj <<
+/D [2706 0 R /XYZ 85.0394 692.3622 null]
>> endobj
-2633 0 obj <<
-/D [2630 0 R /XYZ 85.0394 748.1323 null]
+2710 0 obj <<
+/D [2706 0 R /XYZ 85.0394 528.5904 null]
>> endobj
-2634 0 obj <<
-/D [2630 0 R /XYZ 85.0394 713.0047 null]
+2711 0 obj <<
+/D [2706 0 R /XYZ 85.0394 455.289 null]
>> endobj
-2635 0 obj <<
-/D [2630 0 R /XYZ 85.0394 648.4882 null]
+910 0 obj <<
+/D [2706 0 R /XYZ 85.0394 405.554 null]
>> endobj
-2636 0 obj <<
-/D [2630 0 R /XYZ 85.0394 577.9033 null]
+2712 0 obj <<
+/D [2706 0 R /XYZ 85.0394 373.0534 null]
>> endobj
-2637 0 obj <<
-/D [2630 0 R /XYZ 85.0394 396.1161 null]
+2713 0 obj <<
+/D [2706 0 R /XYZ 85.0394 338.0016 null]
>> endobj
-2629 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R /F55 1321 0 R >>
+2714 0 obj <<
+/D [2706 0 R /XYZ 85.0394 273.7334 null]
+>> endobj
+2715 0 obj <<
+/D [2706 0 R /XYZ 85.0394 203.3969 null]
+>> endobj
+2705 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F14 976 0 R /F39 1173 0 R /F41 1233 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2640 0 obj <<
-/Length 2232
+2718 0 obj <<
+/Length 2639
/Filter /FlateDecode
>>
stream
-xÚ¥YÝoÛ8Ï_aàNÙ­Y~ô-MÓ½,ڴפÀÛ}Pm%N–r–ÔlþûjHY–ém‡
-ÛÞçuŸWþÔÅ’ 'Að,#N)>œ8l×îÎmÖ× -%”þ%8 …‹žÊnÓô2ΑúmQw-’ºŸ¨& Ê8³)ªGm‹¶Í
-2J4
-}ž‡ã,µ‹¥0„
-.‡Sß]¿¿¾Ôÿ»»þps›P‡‚!1V‰ïëc‚>ë¦òÕMÐ깃Aת
-n‚f“¨·!–¦ÓÁ­0²©
-þ±l`bé'ŠÚÏÙÉ\o‹u’˜dœ&‹±Æ¹i4Y Lc~ìÎMf8
-¤9Ži£s?kK8„C`Ÿ†+©¨_äyñùî_>ý•qÝuÝ»:âÍísÛÛàÕ˦n|Ê~»?W!utžä„Y¥Æ~!¤›.“ŒXiÌàC§8.ãÚ%Ôhܰ圓Èc¯†#Š ‘d<«ÐÜÚ؇|áÜìã$Æï<C€ˆ’®ãaø>×Íc P7ÇÖÖb) æb.Õm
-Ø!ÜU8yXø–šA °A½èDr–mò@̲R
-e=L?×]þŽ¡6û…I
-i£e¬ã#˜¥ÅÏ(;âÉR •Ýv9$=6PÃÑS9
-·ç5®k=Dµ³U/p2&9ăzv÷‰€‚ÖC'-žãÃw¡‡ëHÊ›^¥DþƒöBGCEy­$¡ ¥<¶û‰5âå¥×Ó¿y“}+ f£ÏËN‰ %žZÅMqŸ÷U· 8Åjb¤Š·><O+ƒ÷MU5O’Ðá<<ÇaP‡¦
-—@!f7MÛáè©ô·0?úvöanSÔoãŸô€(/0Ž\ÊoqCHy|ŸÜk‘±~ßœbÑ”D¯›T'É ±†Û™Ã%iÆUÃթщpSCýÜÔ‰@œï%žã‚W,zÅb:xúÓ¦ô1å ×Áº+}€Îù&o{Žfôì¶77#œJ7MŒ%—„Ó(u›槿Íe×^pm½¿„Û ØŸ¼Ë A”rjÚ+éÉí¢r=h
-Ä¡UÒÑ‚p,v°ž¾ Ùã·ï|œ ÅY»´„œ6ß3¦RÌý¬]Ö‚ŸûxÌÐ hô$¼nónµ Æ«™=4¦¿®&
-V€ÖX[Ãf=Ä#@6b¬1'RS3ÿyQÎRsø:tl#}E<ÊMªÀª€Õ`UXáW'?ê B‘¨‹U¤7¸eJ{l  ºÛ¦ ¬BšÃ(˜,~
+xÚ­Z[oÛ:~ϯðÛ:@Ì’/âcÚ¦gsÐ&ÙÆ],pz[Ž…ÚRÖ’“Í¿ß^$J–œ¢@M‘£áp®ßPa
+ÿØD*¢ 7m‘”ÉÉb{F'°öÛó4³@4‹©ÞÏÏÞ}JôÄ£¸šÌW¯”Ð4e“ùòé{ÂRrþçü÷wŸds f”ÃHõõæãòáöæ“£ì±åZÍãI/ïî®n>^ÿç|Æ%öç3IéôËåÍ·ËÏnîîÜðéåoW÷ÈììjÞ$>,£ žâ¿güI'K8óïg”$&•“x „Ã'Û3!"E’„™ÍÙýÙ¿Z†Ñª}uTyŒž(>¢=Î&Œ#%ï©O¢žØÓÞÞͯooOÂ@%LM4ç$aTÙÙÍbª°ñˆÙî;{ð6“%›°¢3D]íw‹|–-—»¼®‡2É ×Bœ±¥‘‘Ç;KM¸”º/ä·:ó,J„Pò¨”Ö©&I
+œyVŸÏͦÍ:ǷtºÈÝ2Âgdf'VÕÎQúWØtQ•e¾hŠªô¼ªAïžóݹS †4!"MA ­?€,_ö›¦xÚäΫ‹²n²r‘×î1sR¸‡§|·-š&_ºGÜÐÒl6Õ‹ÖyÓå£{¨Vî÷¡jÖþµçt}÷,üËå²RžI¤ KÒé"¯É1U)ÄŽNùi©ŽûhKe}t1æ£m,XL±*g«b“8h‰ÒÚœ–¯¥°ç ‰&JB‚èI8î •¢f\Ä_l•‘w2ã= ðòwJùã~—9ÃIœÙxôš<[º´;3I÷ú2_eàdncÁzQD Õ,Hù.oïvårAPÞ±0JˆJUÈçÇA[ÊÞð…Žè„+x"ë ?ÞÌV?ò×q7`Ššš“’µD‡¢õœ€3¨PÔbÙŽú€Ñ‚7à‰œ„6‘p.|¼òßt3Áè8Ùl°ó$¼"NÉ”¤Ü¤FÇmeÃÂLSÕÚ|–P6‡}¼h(ÎÈVP9£U¼“Ë…PH‰†dØÏ…'¤0LYù¥Øl`[¦§¹ûÝ×6/ÂÈæEøÍö Œ²)YciÄÑv ¯vë5,ößpʳK6uÛq±êGÊl ÙÏF¹a"$­e•{Aʪ JaD(ô•’ÿ¯¨›£¡&®‰8k1Õñ`k©l´Õoæ]¯¦a¬QN´9-˜§9”«>\@a_°n×~pkÑF[Ú5Æe¶õ#¬åøÛ«òva5x§u¿¬‹ÅÚ ·Y³Xçþ¥ìjx“oÁ#„FŸ-øÉÌ™\IXÑô-ÞOöIÚ%û$uPÄ>¶aÊ ‚ù£cè!“Nº8ÖTN¯WŽiY¹Â)p5hçöOO›à ŸœH;¥<D•›Ýe~q>L6]WuãHÑžðáÕMù°r.ÁÄÀ÷}›µÊ<²Ødì. Mõ„Jóè)6CˆÚHî)'
+9 Ý…{ßTȽMÑ0öi
+A˜ŸÁ4u<–3.ßÀù1Õ‰XT6–ŸÞ¬œOÕ®Êe8&}C®@4"W¬9£ÁùÌ@®û<ÀÏ(5GÐvþáÎC_/Ý0ApC¨Á†FòRtW5#x}óÑÌ?¼Þó‚tec3Eå͹Xg€þ7pþu(xG­
+Wâhÿ¬Q°n ²Öý÷pK¨4ZaÞ<µe Ù²Wþ!S ®ú[^•ÙCpṙ*ä¦z|„ä¨ä)¡ÙmBLu\ -•UÂ븋'¢ÅÕXÄb¥
+ª7ô™ñ†o]@
+H¸Œ^ÌÃÃ#ôK ‘Ò¨þŠåa)eD2¡O«­¥Ñ[¸R£X×oÖtÊçk´
+PBµøÓµõ®S® 4Ö-ìsöeì ßwÈé“o-Ú秃$óSˆŒ/P…’–nÒw m ?s-6¼Ø"_ã~#;êù™\‹Aû†FA ©éMecj‚D4õì¨É‚°Úb[GÐd…ÝV굿ª\ºÕ.Ž=Aèž`­»Ô„yß·£•gå@!Fürì0‡¸lFúÎO7¨1Ø^{xW¯«ýfÙ6N¼Uß½bnëìÙO=æe¾ËüÆŽ¶Å•¾UynQ!ËÔµ¿ æF+ƒ°åÜùÚ'û–×ÂÞW<mrËAà¥D㦭éa":,Ìb—@Ôj^Çzí&•ì/ô‰aó| œÇÌ0eÜÄår[”$ì¬ 'ùš¯¼6Ë…íKVîAiN ‰„R6sV¥àåÈ) Q£LóŸéÔT›„°q_ª?î1žâŽ‰eXYç›'7òÕ„´E_uf³8M¡6+Buêðçë/×sû™
+ÿk?ñ Ž>Í%
+¥£M²"
+ÝßpüÞ}ì3&×’ÀË*…ÇdZÞÙø¿i8”ýÿ7_Uyendstream
endobj
-2639 0 obj <<
+2717 0 obj <<
/Type /Page
-/Contents 2640 0 R
-/Resources 2638 0 R
+/Contents 2718 0 R
+/Resources 2716 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2649 0 R
->> endobj
-2641 0 obj <<
-/D [2639 0 R /XYZ 56.6929 794.5015 null]
+/Parent 2704 0 R
>> endobj
-2642 0 obj <<
-/D [2639 0 R /XYZ 56.6929 703.1515 null]
+2719 0 obj <<
+/D [2717 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2643 0 obj <<
-/D [2639 0 R /XYZ 56.6929 603.3192 null]
+2720 0 obj <<
+/D [2717 0 R /XYZ 56.6929 752.2728 null]
>> endobj
-2644 0 obj <<
-/D [2639 0 R /XYZ 56.6929 540.5015 null]
+2721 0 obj <<
+/D [2717 0 R /XYZ 56.6929 348.0801 null]
>> endobj
-902 0 obj <<
-/D [2639 0 R /XYZ 56.6929 501.6992 null]
+2722 0 obj <<
+/D [2717 0 R /XYZ 56.6929 250.1909 null]
>> endobj
-2645 0 obj <<
-/D [2639 0 R /XYZ 56.6929 468.7497 null]
+2723 0 obj <<
+/D [2717 0 R /XYZ 56.6929 188.746 null]
>> endobj
-2646 0 obj <<
-/D [2639 0 R /XYZ 56.6929 433.2488 null]
+914 0 obj <<
+/D [2717 0 R /XYZ 56.6929 150.8976 null]
>> endobj
-2647 0 obj <<
-/D [2639 0 R /XYZ 56.6929 367.5092 null]
+2724 0 obj <<
+/D [2717 0 R /XYZ 56.6929 118.3669 null]
>> endobj
-2648 0 obj <<
-/D [2639 0 R /XYZ 56.6929 307.6563 null]
+2725 0 obj <<
+/D [2717 0 R /XYZ 56.6929 83.2849 null]
>> endobj
-2638 0 obj <<
-/Font << /F37 1026 0 R /F53 1313 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F39 1161 0 R /F48 1238 0 R >>
+2716 0 obj <<
+/Font << /F37 1038 0 R /F53 1328 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R /F39 1173 0 R /F48 1253 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2652 0 obj <<
-/Length 2228
+2728 0 obj <<
+/Length 2932
/Filter /FlateDecode
>>
stream
-xÚ­YYs7~ׯ`ù%T­ˆà ëʃlËŽœHVbeË•ãaDÅYÏÁp†âÊ[ùïi s0µ[z ¦Ñèn|è ˜qø³D3®l436bš =[–'|vs¯Nñ,ÓbÈõìöäë—ÊÌ,³±Œg·ë¬„ñ$³ÛÕ/óó››‹ë—ïNRóù3vºÐœÏ¯Î¯:ÿi7§VÎÏ_]¼…O™˜„f§¿Ý¾þú¥VùÊZf"íÌr’¼~ñœ=sýÒ±ž\Üvö÷$¸rÆþ~òËo|¶‚­½>áLÙDÏðÁ™°VÎÊ“H+¦#¥¥8y{òC'p0ë—Na¤UÂt"ÍH‘˜I[+©üVVÙ:Ýí¢©÷»e¶HW«]Ö4‹‡Qr @hÉD À
-Ë"Ý7YØ™h~Øä˪ù2­v—!¸VHik¤4YK„M†ƒË›‡çÒjÕ‘bbãNE2_³³Ò}ƒ¥  -:ÛB0«µô&×6[¶ùCV<ž
-!æþ€a ‘0+4âp¾n³Ho“ßü½H0“˜àM¶{
-%ÇQ1y¸‘;
-' ›r&áž&I0/  ‘>»»A{¨ñ|"ÉL94fw6„²Ðª¨à–iq_ï`7åTCr*øî0¤"¥()%çYµÜ=n[œè…úÏupf9rf£™p"ŠßU«åÔ‘@J‹9‰°·§0‚Z¸ÜïÐ3ª¶xÄɺ‘œ{uþ|qõB#NÒj%lj«wìC";[ùض€?ΘŽc]E}ðÞÔ»G¤¦øÙdK´£Er—aÜõ
-Æ¥è6õnä&¨c
-8TÔ]pç$nUï} áÆ¿ïë–|l"&ô>ý‡ñŽë©Ëº,½Ë
-­K‡ó=ÃOì6MßAc.g’›Òeé}-›Š}ÉdÂC=€‡ô¤EC¾¯êCEæ5S:yÂ"Qeþ¥Š Õ)=#ˆµ`\»»Õ0lº˜:ÓÕ! `;d‡ÐÁ|JìÛǃ†æ׸Åg¦b×€l÷-›Ø˜Œ5Ó]Áþ8–Œ‰qUc+Å nQw³É·HÂÂâFè¢nÖ’åû–ê1·RŽ}.„múæEÚÅhHeZQEn¡¡*Êo³ì¨P_¼;¿ºùþ‚˜]¹ 2|„yjZnƒÄ]E/ò*ÔëŽ9ƒ^¬‡¯3yíR†»ªYƒ)#è¨Xp“ˆÝýÈßì¬ÅVÆç8Ps>ÿ¯G&ÈáÒÝ®©Sø‹z™îšöt*…†%xa€x¥ Ã÷SºêŽ5¡KþÑ ƒŠœÀ%jxMõfvj?iµWm’ÿŸjHÔíð{R·èuˈuš@êo$oj‡xGq#­´zŠÃ?¦w"'w÷&ÅC4>‰à ‰Ü‘oÊt¹(Wzr3®Rdh)Ÿ?‰_^­ÿ©7͇¨x¼“Ñ›ËLæ¯.>Øb-Šâõ›ž|ùitFª_²ƒøï7 FðÇöäGõíer?ûî`>¼;\«ýüÝþ‡o¾yòiäR×¢=Î÷&Çzéó}È
-nYwõC†´ì?þˆÎ&&#Dô‰† Ó6Üöéfr}¿ª(8‘ˆ-–êÞtx!tV×À)ùW®¹†qøð! “ØPP`y…Ù{ Õ~!Ó®Ë#É=CËÇñ3¤¿ëJ¬NþqÆ_´ÄÈ: ÷7ZÑÝ‹%mt¸l ’7B M×r ½fÀªÙ@»#!«Ìõó^%6y¤dÒÉÐ4h»¿òoŽ¾Ÿuî÷Ph±N˜„Þ7
-š1á1q–ÓdÕèÅñ¨gS–z6Ç‚[5ã§: çÕ*_¥ jü±£Bh"âéÙtøl×ݨÁk€žRQo–·Mx@6ýÉ éOF¾é• :ýdÔé'ÔéOô7«Sý¥ÝúÔ{9º{äžxÝæ]zúŸßÒû&D†©$‘Ý3ù¸Kæ‘+ô"å6,b{lz÷êþWÛÿgyÌendstream
+xÚ¥]oÜ6òÝ¿b{¨Üz~ˆ•<9ŽÓsѸ¹Æ
+ôú ìʶP­ä®´vÃý÷›á\I«uRü°ÔšÎ÷Œ,þÄÂjÆUž.²<eš ½XmNøâö¾?þÌ2ZO½½9yõ^e‹œåFšÅÍí
+7õ}H‚ Ô¡jO»ZÏP‡bMë\k%“'T~<V`•kwS
+ªo¬‹' ®ž
+RrüYì˜ȸ,žl½'ÛèÉ–R#BŠÈìm¨ B²‡#Á¡!\|ãéx%ø'=œ¤ä¥
+¸ˆa÷«XÝ+Ê2á.Щ<í8çš÷Ì€x¹^ò$ ýîœ'A§ï=)ãOÂE6’EW‚•s%øõ®”yWʸ70&;p$ç*b)Ñr‰ùsùá „ÒÐö‹à¨›±@•Æ 惑ûÍY>š9:Z2aô8byVíÓT¾ÉÊÕ
+¼”îO=€çB½Q‡&v¦¾<¿í÷EùœrRÁ2 ^_ŠËút›î³ÊSë˜XŸ…Ú;TÝ¡DÖÖôXAß¹[—¾ð.|ßÐoÑÞ(;µ±Áˆx±\£°ãJxOaT "ÀÜ€EH­ÚSôòP¥¨Qø‚úÐP‹ávÅ4¼BC
+ý…
+ñ5]_þÁI<ñŽJpaX£b\÷­’Ë©mLT}ƒHùÄÙ(^JeñGI+‚hÌß5 …»)
+¦ [LS’þî¥àtOÀ-„ÐvCë ß3z¤j3ÛWÐcŸË-“<v…ø¹l­œó}ɤ塈ˆÇÓñŸ:¦}j<{ÝMnYªÒ€jS½@T1¡"Ñ3/b-×øYô0c_1Ä–!TåCÑe4ëÆãÑìÍ  ‡ý[ºâ†vÂ¥ÜLéa׳™‹I£™Ž ûeY¦°=eK¥Åz¢ÝÝW¢Ä‚+2QÜÍ=ç»>Ìœ-㹜‹c˜:‹ª.¢†0°)š0䆂jÓùxð©,'‰úò×ó¼ô‡1ÝÎôÀ(´Žã‰ð馛.¡c_ñù7ÐÉXÐIì ³ÚÊÑ—†¥á<ù“LÀ=2”É×€¥p¾nWEmÚ›¹:<CtàáÂðüÆ·ºcJ¤ÿFd˜‘ùø3ŒRý"ÓŽrf(ÏýHÿ±`æË=Èÿïÿ_ØÿGš1eíþ
endobj
-2651 0 obj <<
+2727 0 obj <<
/Type /Page
-/Contents 2652 0 R
-/Resources 2650 0 R
+/Contents 2728 0 R
+/Resources 2726 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2649 0 R
+/Parent 2704 0 R
>> endobj
-2653 0 obj <<
-/D [2651 0 R /XYZ 85.0394 794.5015 null]
+2729 0 obj <<
+/D [2727 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2654 0 obj <<
-/D [2651 0 R /XYZ 85.0394 513.4321 null]
+2730 0 obj <<
+/D [2727 0 R /XYZ 85.0394 749.0409 null]
>> endobj
-2650 0 obj <<
-/Font << /F37 1026 0 R /F53 1313 0 R /F41 1218 0 R /F22 961 0 R /F21 938 0 R >>
+2731 0 obj <<
+/D [2727 0 R /XYZ 85.0394 687.8191 null]
+>> endobj
+2732 0 obj <<
+/D [2727 0 R /XYZ 85.0394 186.4649 null]
+>> endobj
+2726 0 obj <<
+/Font << /F37 1038 0 R /F53 1328 0 R /F21 950 0 R /F41 1233 0 R /F22 973 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2657 0 obj <<
-/Length 2274
+2735 0 obj <<
+/Length 1767
/Filter /FlateDecode
>>
stream
-xÚ¥YëOãHÿÎ_í§DÚôöûqß²ÀαÚY`V'ÍÌã°Æ±s¶Çéþø«~9NÒF+$ÜÝ.WW×ãWU2ÁðG&B"i¨™(ÑÀDLòÕ ž<À»'$ÐÌ#Ñ|LõëíÉ/¿151ÈH*'·÷#^a­Éävùeú+"Í€ž^_žÎO¯.ûp~9›ÃŸ.>}:¿<»ø×lNb Äxúqqùyñ‡_û43tºøp~3ûvûûÉùí ÖXt‚™•éß'_¾áÉNðû FÌh1y† FÄ:YpÁàŒÅ•êäæäÏáè­û4©
-‚e’&tAiJ É(sº¸¸·g
-$9;²Ü¬…BB (¿bL«âçÙœƒ²Ë:¯6Kg»³ ÓA32]U/~!*{é £±ï2öÅ]áŸÏmÙ÷pP϶³‡A×ÿÌgÌM¢`s;BFêdm6ýzÓP0‚§§ÍjUÔ Â–
-!®Ê°xN+bÂÕ1â”E­)F1¡¢‰A©}ÛT]J±à x „Cõ…•°óîvß´ æ’#À›ku¶*–¯ÙMRD¥Œ¤^]ÑÛ«.DÁº-­NBÔ0
->ÄùÁ¨¹Ëºb.ù†DBkij¶É›e‘87Hªß
-b$â`wä.òGZB’øé{Ý<×~¼®2{äÿô~jÕì™Xñ‹þ'?ùŸì G&ƒ“¹Àcie¼Ë].>žûsßœ_Ï ký7·ÙìâÃçë…ÕæíÅÕe:Š©@TiãïžHgg;|ÚÕÕÆ"¦Ý…·à 6>6ÞKÿÖÅ<³</Ö½§ôÙî”.›º dõÒÓÄï<³¼y¨Ëÿ|(Ã`»Ò­‹¼´›Ç]KS˜œ¶|Ž·&BF"äy%Q`Ĩ‰)‚Åc>ú¬ø6ÝÊf~ZÖIq 2…~OAΆÔ%¨áÆLoŠbOŽn¤aæò^|"‚ãê8€Ì9HQ˜ìÀÞèˆÖñÊÚ?}Þ´¥ÓÅå™ÿX,We]v=¶»t]ÜÞîu>û˜Õ›¬Ú‚“,‹>+«½#4nÎCd,þ¸¹:îüÖ ¾b5ü#?‡ô<J‚ûïbÚuâ×ÝÌŒu«l2£ÿž&@¤¶˜+wHheÎ8(…Rv´³ø|ûÏ«ëãj¹
-‚ xƒoW)c*§˜ªRª­_·´· †è··ŒD‰-w" †
-ÒÞΖg
-16#S0„Y¬™p¸¡q„UÕ<§³<#
-endobj
-2656 0 obj <<
+xÚ¥X[sÛ¶~ׯÐø¥Ôœ!
+Ž’Óóåÿb~Ù|ŠË‡_žV¼9ù¤Ë%-Ëw—ÿ)?ÛÀ>^iïÕgã0° yÚ
+Š\i•ÈB
+ªñ‡ßx!¹ù%ŠXålrQíE ª&ãà+k”AVWVÂíf¶Em·KXJia G¨9,ƒæ~±êGè|»yFU`Zë=HЋ;Ï‚¦Z–6mÍÊT-Ò‹*/2 4Ý1.ìxŽ÷Ð`6.s±XuáVÁÛóùqxþZà,-g4èè(NG­ßºSçY™b ì¸®Ú´¨§Ür“6&Lbœ˜*«ó¢ºÅY½|J¡'2V43UÖ $Ì\ á×› ÜÔà$Ò cP‹UˆçåZÑP‰†`,Ð ´q6,(A,Q1÷{‹wnP=îîW5r¢ˆ‰ŒùóùAJy@:ø»2Y먑¸Ë4p·“ïã X±DÙ[¢:M1(¼ÃÐ|2 }úF„c&Hᶾïyuaû‹k*ñ¡Hñµ†U¯p|O‡›Ç.¢1x6éû!ë£,_Þöú*mÀÏü_äˆÕ0¿³HCçNßSý¹ýõ‘ØjR%dÉÚâ­5þ˜½È
+’Ä{™ŸXé#¢…„œ*¨çÄL9-gpÅ7{œ‹ WÞ
+ÝžÔB|Ž:¼é‰Y›}FähÂ…ìxlÎY×e3æWˆèíûÚàm[ÖëáIL [í f“uþTØFX’t¬è­î²cÕÑýº°.ñ áLÊ%ý‡ Ù%Ђš„¥¤Wφ¯±#ÖDQ¦>‡ªÛö|Oo“ÝÕاýVÕÛÊ÷¿ejMþÃ7ÁÖÍnúnÖumG8ù _ÊѾ7DÜÅœðÈjg^ÌÏOÐîë“«Tåàåæöéì͇«¹õæâìòâ +"¸ÂžÎÕYN_”9}ö´Tì"ìèƯîJ¿‹@Ž«>ðN³ÌܷȉÅÃR}’†N¡ñlUŽ<Ý>–Õ·UñÉ+„H—‚-¥¹7YaïN-ª±éÛ˜CÈ$DÛFö rpRù(q¦»
+Á)ïÔãˆ>«¾E £ :;-ªQuà õ% ƒ/>¨|æib­ƒkcôhæ®ìuËcyˆÉcù| ãHÉ`²ß‡ š±AãeÓ~xŸ]¼Æ‘Æ×<_UÑ´
+endobj
+2734 0 obj <<
/Type /Page
-/Contents 2657 0 R
-/Resources 2655 0 R
+/Contents 2735 0 R
+/Resources 2733 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2649 0 R
->> endobj
-2658 0 obj <<
-/D [2656 0 R /XYZ 56.6929 794.5015 null]
+/Parent 2704 0 R
>> endobj
-2659 0 obj <<
-/D [2656 0 R /XYZ 56.6929 613.6539 null]
+2736 0 obj <<
+/D [2734 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2660 0 obj <<
-/D [2656 0 R /XYZ 56.6929 528.5855 null]
+2737 0 obj <<
+/D [2734 0 R /XYZ 56.6929 253.0811 null]
>> endobj
-2661 0 obj <<
-/D [2656 0 R /XYZ 56.6929 467.4275 null]
+2738 0 obj <<
+/D [2734 0 R /XYZ 56.6929 157.3292 null]
>> endobj
-906 0 obj <<
-/D [2656 0 R /XYZ 56.6929 429.7784 null]
+2739 0 obj <<
+/D [2734 0 R /XYZ 56.6929 85.4876 null]
>> endobj
-2662 0 obj <<
-/D [2656 0 R /XYZ 56.6929 393.7775 null]
->> endobj
-2663 0 obj <<
-/D [2656 0 R /XYZ 56.6929 362.3409 null]
->> endobj
-2664 0 obj <<
-/D [2656 0 R /XYZ 56.6929 298.261 null]
->> endobj
-2665 0 obj <<
-/D [2656 0 R /XYZ 56.6929 228.1126 null]
->> endobj
-2666 0 obj <<
-/D [2656 0 R /XYZ 56.6929 131.089 null]
->> endobj
-2655 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F48 1238 0 R /F41 1218 0 R /F39 1161 0 R /F53 1313 0 R >>
+2733 0 obj <<
+/Font << /F37 1038 0 R /F53 1328 0 R /F41 1233 0 R /F22 973 0 R /F21 950 0 R /F48 1253 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2669 0 obj <<
-/Length 2734
+2742 0 obj <<
+/Length 2868
/Filter /FlateDecode
>>
stream
-xÚ¥Z]oÛ6¾Ï¯ð¥Ì,¿Eâ½J×´èÐfy› °íB±äD¨,y–Ü,ûõ;‡¤dI¡ìCŠ¦ŽÈÃsžóÉ°…la¡ÂÊEb%Q”©Åz{Aðîà 4«Žh5¤z{ñæ½H–XÍõâ~3XËj [Üg¿-¯no¯oÞ}üõrÅ]¾%—+EéòóÕÍ/WŸüÜí¥åË«×w—+fe"ˆi¤ÓtùåæÝ«¾yÿáúæòûŸ.®ï{¶†¬3*§?/~ûƒ.28ÁO”kÔâ~P¬å‹í…T‚()D7S^Ü]ü¿_pðÖ}…†(Óˆ,8È‚QK½H”%ZpádñåPUEõˆr6 —ŒPÅ-ìtû*[¯ÖuµyÌ+”Q²\¥á£á‰ ‰Htø(-Ëú¹ñäo?޼Ñ^Z?‘VYdW£ ×J v숙š@ÔÖ~Á‡Ü¯hò,löÎö—Ì,ëݪ¼»ßù®L×ù6¯ÚƸ©÷c^“¥ÁÝ+Î%ÀG›ÅŠ1b•âþxÑ0K„JD`.~
-À,ÇÏ2ÿâá%"i.-I¬3µó5Iž¢ñ¤žç?…d¨Í;HÀ9þJ·»2÷b
-žb ðM˜²"°ÑjHå4‹¬žÊ‰üÁ3
-ö;¹±½Â¿æ/Mñw>eAlH@ûIÞzªs#-K°eÙ˜»»]¾.ЪÑS ɽ‡ÂãÈêÍäUz€aÕëàpÎàE˜x(Ú£®ÑËχ¦ “y÷lŸó<P²°ª ã8n‰ÿÁÐôÈŒ b˜˜@,Ë7é¡l½º‹ vÆͼ¶¹&–ssFÛªÚ¶×1mƒy ¦ŽÚÞeDÛ aLžf­#Š°6Ö5'ñ5âí—[‡Ñ*î1´„€Ó»Ù¸Ó à‰­š8a¬kZ›ÿ# /Ó²Í÷U)tYÖëôø%:ìˆýAFq‚ Ö^s$b8íÜجêäYZÎe¦ê‡Tóªï©œ˜ž¦[Â[)å™-;¢È–ÃÓYK$W“-o÷EH€¨‹à(õ§z ¡9l·é>( ÞL2¯²îã* #u®òñÐgVNŸñðÍ9O¾3daÆ!øYÕ€ÿšò3ªPPMGåTóõ{|0†–Y|’·£~Í\Ô¸ù`ÌeƒŽ´wª8p¬¹‘×ã€Æg,8šºånÌKˆÛ÷OEØcë|2ŽºÔ;õoiYd~˜ÕÛ´¨Ž.ø¾ÃÕÔ¿6h8»2rX&¬NY´> fãP:ž†Í€êl:*›ÝYØìÐÚ¦˜Ïw’¯Ž(Â×1\ ô„±qÔ¶ 8X×`ó.ZåJ*/ýÇ©=?å!ËØ5…Žk1̶"š’XÑ×I%Ô2yXqY·g6_'ƒìl|%·Õ]*h*å™Ò‘Ùo
-ˆN¤q¸s¨”bÇØx63
-Û!Õ¼Cë©œCkΖ:i–íœc¥ÎIÖúRç5kÑRgÄÛ8¥âþ9[~¼õÈš ‚M 8Ä;*Yr.*
-ÂŒÑÓ¨ˆ«û^ìßhœí´û1Œ—î›ùx YáVü»xé])T„LêïLÞÆ%CY×»‡tý5”
-# º‚;!€'Â汈Ž\š3e÷ê;*‡Å6\!{êt¶~Ú×u‹­ )!Ë´
-Ì“ÌõTîƱ•+A¾#öBåmmWy[;WyCº'Œ:Ӯ㉖ÓÊ—¬ýóXy[ßÙµfЫ÷áÍIÄCŽ@™dçoÆû^dYú¥C«ÓAòǵk¿­$¸ù«ð*ÍV¡¤`¬ØLzôYgó^Y€}ì^†SE8Žvà61©9Û0@'-zs Ìò>¤ˆåó¾h/Á]»Ž4üöÂ*!/ù(|BFœ­` Ÿˆ^6=‘wûbY„'l ëOvÝÔçpêå Êf z³
-8ÖþMH¢ùYßE‰µâl­N»±ì´©æ-¸§rP?œ­µ Ìíçj­“|õµÖk¾¢µÖˆ±`»N]Îvµœïš%‰bgºf–3;µÝJÒwÚ;p»Aý\¹t
-‡›ÉþãdVpÈ©ý>äôG·D~‡þê$ÀÖÇMä ‰"Šöuyç{Çí*xåÃ{X<-›î”}|΂P˜âS;†x]•/“tÌ鲨&/–0ìfå¡5öÔ]]k«m]—‘þ¸½#Ú
-´‹&¦þÑô×tS—Έ#\Ïß'9ŵÛÁõD(VûµìjHË£·çŒºWçw°HÙ×eóš€Ú„ËéýÕôNÙ2=(b~Á}¼ãjZ°ÀÐEžÛ ±‡p¯L4 üUT]å S»InN³íp¯#â…TEÒïº`+gÇwßóÈÁ¿Z` Ô×#DšÅ#s£c;»»¾öû\}ºûù¼±áê¿SE üÇ:;Èà 5xá; v«ÒÆõ3ªÃÔñ¦Þ¦²-Ô¯M ¶TWò%߄ĪZÓüìÍ/öÇXRêù¸Ûe»Šà_’D¢íE÷Ÿÿ`åø‡9í
-cfúG‚J4GÖ1…Œ³„MYïÿ´å5ïÿ
-endobj
-2668 0 obj <<
+xÚ¥ZKoãF¾ûWè(QO¿ÙÄž&™I0ÁÆ3›q€’d‘¶ˆH¢"Qvœ_¿_?ER-ÉÁ¶šÅêꪯ^ÝfŠ?61ŠPQÊIQJ¢(S“Åú†Nžðî‡hf‘hÖ§úöþæÝ÷¢˜”¤Ô\Oî{¼ ¡Æ°É}õëôý—/ï>|úïíŒ+:ý–ÜÎ¥ÓŸÞßýòþß~îËmɧïøøõvÆJYH±ÒÒi:ýùîÃw³ï>ß}ÿÃÇ»Ûßï¼ùxŸÄê‹Î¨°2ýyóëïtRa?ÞP"J£&/øAÁ°ä“õT‚()DœYÝ|½ùObØ{ë>Í©B C”áEFœM˜$Bj>P†* 7wÊ°;Ã.)4°ÛT‹Ù¢Ý<>Õ»3°Ÿ E +µ#½›¯k;¾¼§cPñ’éù ˜8eþÆyáGöýQ¿ú¨êݼkÚ@ܵí*¬Ù)•âaQB~}Ý´Û}³@C‹ªÐ¨ÐBæK–\IŒ³À¢„ÚUf}N™’e€•¨N÷®¡Ò_góßãèÁïK‰&,¦ Ö¶  –}ówPò`=É aÁ]â¹Èð´&ÓJY>6«Àr™Fd˜k#yd¾I x óíUy·í®Ëðã‚”Ö£Füv~3QÂi8ð8K
+É#ž½¾<gx(·„›Y´»Ý-3Óz¿m7•!£NhŠ«2"«v»vµÏ¬,J"uaoWËpCº`ŒƒH†h •Ègßkhxïen6õhx\i"[˜ªsúÑœ<…“‡WÏu q‰·´y³”e´O¨Ž–]½Þ2ƦßàK y¬é¥  ‘ʃ»[3=„¹—¦[úÙdÞ¡Z”!ÌÈ"H5›çÔBI!T¼Ý§
+†ÿ™Ðu
+E¥æìŠé9‘,E¾3‰{¥¦ìg€œ?sRÕ׆m¯wÝaKl*à
++øBŸíº¾sÐtºn½výd½š?´¶÷ñ?O[L"ÔGç[¦Ê¿xxÍù—D‡[z‡>DËó5EK« õ2ÿyhü ²6Ñ<Bûøk¾Þ®b
+ }ÍíœËævЄ‰‡¦ÛÛjTŽ?lîs“u|v/u(YàêÀ†bÜ„cñ/ MB66)Ъ‹ÄŽ Ìݳ3nÎZ›Ûó5]êËÖîS·v¢rÖ^ä¬ ÷F%sz
+ ê2¸ÕúÒžWûá¥ù. }U Þdûñ¹„ •O‡TY9{æÓ7ç¼xcÊ¢(¼ÓÅYÓ04-’¡6¼hš>ÕyÓ$*gš?ÞƒãÍA6_”íƒO…ËÆàtƒlkÙ`#o¥´Ëz~äíØ£‰wXú$,G¶.!>m‡£¼X|?¢Sé=÷çùÊžaXµëy³9J@.„àûˆ«q,Î4­h×Œì· ³K­¯Âƶëöä2lzT`©l¶Wao‡˜á”Øý]”+eäâ£Itø#Á†Y;Ï»AjÇEÙkÇí'©½Ø^ÓUù¿¦(á¸×ú^IJ‘ú¤z™zDqU·‹/B±â<úNn뻵×3òŸÝŽÒÄs‘ÉL¢¬¡œÉ7T0ßy01A˜dW*ƒ>Õ0E*¦]L%ÑF$O\¥$Jc.K—¨2â 0…¢@ʆò 1¥ìù8jºoÎn‹ÚO»jO/­§©æÝÜÏzëcïÑm‹kI<B-[D©v×üOH5® µï‘BrŠ{Û–D Ɇ‡YûW ní[½ªu±S3´ßŸÚz´=7Uí'²çýè…EºEzWÕÏï¾2I ¤:°ºÞ\mÛ‰éß±>X4‹Úu ñúÁÊ—`’¾FíKÒñô+oÂí­íӵͣóªÀ2ZŸ®C¸n6ÛCG2»4ö6ŽÇ™nÈ™ïÇ„,ÒAîÙÄtšBö@ÈÙÍÑh¹Î[mÊïC\ŒèbÂAˆž•o“j‰H;rg4«DWejê³~‡ƒ#Ì4àb^ùi¯ÛXö8û8Kßjø¬¥C±êÎê@{êìå´AÙ/ä­ªüi<ü*Sl*w  z<(Ùïœ Ãy j]1B}8P°qì!¤\»wrî_„"öŠ60hºú¿ÿ-èøïOÒ^#›3ÙLP4Âö ^(»!V”cÑÓ?Êþ?Ò'4øendstream
+endobj
+2741 0 obj <<
/Type /Page
-/Contents 2669 0 R
-/Resources 2667 0 R
+/Contents 2742 0 R
+/Resources 2740 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2649 0 R
+/Parent 2704 0 R
>> endobj
-2670 0 obj <<
-/D [2668 0 R /XYZ 85.0394 794.5015 null]
+2743 0 obj <<
+/D [2741 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2671 0 obj <<
-/D [2668 0 R /XYZ 85.0394 229.9393 null]
+918 0 obj <<
+/D [2741 0 R /XYZ 85.0394 769.5949 null]
>> endobj
-2672 0 obj <<
-/D [2668 0 R /XYZ 85.0394 85.432 null]
+2744 0 obj <<
+/D [2741 0 R /XYZ 85.0394 744.3535 null]
>> endobj
-2667 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F41 1218 0 R /F55 1321 0 R /F48 1238 0 R /F39 1161 0 R >>
+2745 0 obj <<
+/D [2741 0 R /XYZ 85.0394 712.0918 null]
+>> endobj
+2746 0 obj <<
+/D [2741 0 R /XYZ 85.0394 645.3077 null]
+>> endobj
+2747 0 obj <<
+/D [2741 0 R /XYZ 85.0394 572.4552 null]
+>> endobj
+2748 0 obj <<
+/D [2741 0 R /XYZ 85.0394 472.7274 null]
+>> endobj
+2740 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2675 0 obj <<
-/Length 2590
+2751 0 obj <<
+/Length 2216
/Filter /FlateDecode
>>
stream
-xÚ¥YÝoÛ8Ï_áG¨Y~‹¼{êö벸M»›,p@·Š¥ÄÂÊ’kÉMSÜC)K6í8øA5çã734›Qø±™ÒD[ng™•DQ¦fËõ=À·,Ð,"ÑbLõËíÅë"›Yb5׳Ûû/C¨1lv[|™ÿBXF.¿{w}³xûéúÃÇ÷×— f•âó7Ÿ?¿¿~wõŸËWˆ’Òùoo®ÿ|óoœû|iìãû›Ë¯·¿^¼¿Ä‹Î¨p2}»øò•Î
-8Á¯”kÔì^(aÖòÙúB*A”"ÎÔ7¿ G_ýÒ¤*%\hžÐg3ƈ;ÕDÊ-¸ðÊxóçí¿>ýáä|¤::[pM„Ô¨´«¦/·MÙ£nžº¾\wøò¶mºvÛW»u`»J·’>RxáƒòAÓTZM·X¶ÍýCÙ¸•ŽThB5œÀ‘^çë2-˜ `Mé‰&L¼8qžáÈ}ÃÑß倪Üæ}Õâ¾më½Ô{]¹M ÔâéožšvÓUÝ¡Á#™Ñb¦@¥” ™2ѹž°ÉÓ0±ðÆ“,áÈÕñÙ5¨ôË"ÇÓÀ~ûÅŒ2¢™±°£[–×í¶êWÁ\Ó}±2ÓòkäºF'økE22á"Ðu3XnÂ\2b¤`‡Ì· –B£•
-¤Û¼)Úõ}U§¸‚F²L™C®Ý³\OHÉ-1&²û/²[üLp[ ¤DÞà9°ägÛ$Ù‚f&ˆù-Žœ4_S®¸†¦íÔ#ß½¿yûÇÕçÛ«O×âDðûÉq@ù„†S d!BJ9FÎs÷!€àý¾Ýâ`וøéî)!
-ü3¢Kó€ï9>PyîN3ßl/™™·ß«b íWeâäœr@Æ^ GE¨ ÏêÑHiÆz$Î/ì
-(ñÙ”eQ®Eí ÉЈA{è¿è>€ÀUÿ* še½ ú€×< tù#Ë¥tÃÀÅUùeDÍ,6m]-ŸÒn>¢îz ^—MOPJf9a¼
-®ç€AyÕà”? YÁÏt›r‰Và‡6:ËúÁ²]¯½ ¸¯uÕ”prˆQPN¡>å]XZ
-äÕ”™ȼϺ™aŸÂ¾:÷ éul”Á³†'®7|ÞҸѼ7{‘ÿd„s!&þ!™Q3ÿà ÄmLû*e[HYÌÆåÓD7Z
-»¯›3î€ÙF lwu8kT ¾åÁC3(W2©¦ñQ«Ály]{§ÖÆÒKsÉ<ˆ!#aÜwçÏÁëOª“C*­e/ŒGšEŒɱñÂ-ᜠWÕǤŽ>äFÎÐî‹7´›ˆ©ÊAšPˆLUP”Ο›j_/!üc•%ÎM/sBèºí˸+Èy¬À¡žÇvA´°½ê»²¾‡Î›xúˆç[æ9>ꌈCWòã(Ø„CÁ
-NÅ»¡3“ˆxƒ½T8ßâÃNÄ@¯¸½¹úèFÙmÁϨž¿q=ø÷¼­írÕV˸gŽfu^Iå|µÎ—‹u¡œ3J†¯!f$
-Ê¥……g/D^2« Ž'MA¨­’ϘfDuÆ4‘Ê›æïTÄC;m•8n»'ñl ççe¨ÂMâ)"hm"Ý$à“¡’„O±‚©X­2ì°&4˜Q¾ƒÉ¦¯–!ÝD!ì>n~÷Ru‰†[@·Ã¬œäÖP
-fihªÅU¸ŽZH
-=»+#ò) X¹E`é¡ÞZ%o%˜»pŒ<ãmÄT™’Øl¨q›v›`¥³ÑIã-Ä.([²u8õ&ÿ„ÑãÎðXu¾a±¯ cÅ‚º“Šˆ˜FÎI½ŽÚÍ<È’#ë®Ü䡇I€ñ²YZBUÌ”jý¾­ëöÑ·4Êß9ø'J ƒqØãŒ÷³1 ªÆ7³ó’<W©[š¹ËT{p¸q‰ORF ÂAÇúä6î‰þƒàÿ0Zïº>j +„š–#«ü{y€t×y?…Á€–ßóº
-È»S7vÛ…ä ÖU]?ôÕ‘A]ö}¹íUQ=@QóÙÓbàY7å¶j‹î$ø1 ÑbTvüÆT§Áo ònÿíT^:»å—Ž·Lå¥É–¿ïªxÕ½n _E@îöÙ*hÑÝS+E¤
-Jô-£7›:oò¾)­/Dv¡«ÚuùC9¹÷8£o&“08¯ïÕ}G*¯ïm"Ù@Cm†þkz;-/¡ÄV\œ—n JˆwVL=•ošn"ŠRó®ÅÖoYâ4"€ Ò" ´9ÎúZÓ Æ—vŽ$
-$cº;à‰;7e×…Ë3£Iv”(±¨Õ.0îZègªf³ëIâ”ÆýÝÅÙÄÍ@Î÷“rhÅ»IË¡tŒÊxMæF|‘SC·
-‘ :4áÿ÷?ªûŽ¡Ì€Ž•§‘‡gŠÀb…rb?Æâðßë±ìÿИ®`endstream
+xÚ¥Y[oÛ¸~ϯð£Ô\ÞÄËcÚ¦=YtÓœ&èöA±äD¨,y-y³Yœfx‘%›‰{p ¢È9~3ó ÍfþØ,SDYngÚJ’Q–Í–ë3:{€±g,È,¢Ðb,õöîì—BÏ,±Š«ÙÝj4—!Ô6»+¾ÍßNÉ9LAçïß_ß.Þ}¾þðñòú|Ál–ñùÅÍÍåõû«ßÏ<£ ’”λ¸þzñÉ÷Ýœ[ûxy{þýî׳˻A­±êŒ
+Ôéϳoß鬀üzF‰°&›=Á %ÌZ>[ŸÉLL
+{ê³Û³ŽFݧ)SÈÌŒKF„fêƒ1¢!-‘ro/ÎRö
+Bh®E‡ÛüåC–%\€Õ©É‹b[vÝ¡95D+ÍFk)6kÆÇ 2A´4SÕn7å²úƒR^vp2œÎûÇl~uã;P³sfæ¨ëxz,}‡ßÔd÷LHB%ÓaWM¾.‹ 6VEÂŒQAª®º¾lÂì«vë×_¶ëuÞ¾wù˜7MY‡—Ú˾j‡oœ>í:¡§Šp+dXjÛË„>€f©E!(
+ǵŠGßn1aÊÖ?;DÿêÙ¿äø0sÜ9Ö²o·aäUÄg–P&ÙiÄ[ÍxzªêÚO½=7ó]Ð
+,ïpÜöe1Sfj~†òbáQ)À‰©5&Â’»ùŠ
+÷–ãœJ€lPqÅçíÊ÷ &”cÕ!Êh>r ò£|N(Ÿ{ˆÁ]ƒò0í}éŸOÛª?gspbÿîUç}õWpwŠ8_ÕÍ ƒÝ ”÷¾U…', ó¬ºjw.<`׳·Êfê´ƒ[Ž œ8ÊLCå'c%Ö
+5I–iNxðHêŽRê»T2aÄØ,F°]Wy¯åDZsB¯(”Ðkl«!\Ú½‚ëºÓr®«äK®+‰Ö{ÕuÁÈœÙC×$ç]Ùï±ííSSnCsu°¾œ&)NöëŸÀ½˜%ë°ÖC kåÞO ëj•Ø§Î€WÑøyŒ¼SK@kÔÄ»†˜çu79dç"¸?D›LÐ÷o›úù  Êbzj÷~”wÅÜ¿=æ!MU}hDËf>?à¶ãv=V³„tK•F5a‡Ìãâò÷‹ßn>y¦w°{
+ŸdHPH®H
+Û R]·O ›JȚ²éœCs8·>Lyv¿ó@…V
+H åx4Ø Ð‰¨áfZ=`pT@ƒ“x§ñ+>±„ j¾ÙVMtùzS':#BØ1®qå°1 ü×nŒ¨ØX¶ÛÀY6mSTÍC*õQA ¸¬ÕoÛºKÅL@­æ1<á"‰Ù ÉTLèi‡Dn‘é¸`׃®ËaŠ:÷Áb÷a3þ0Ñ5ð­jb
+å ‰šú„Ì>â Þ&Ì+-‘TŽÓËöµáâIœD£¶0 N@0NÂÝèÔÏn//ý:Ÿn?Ÿv6œýšQÿXÔ0B²Ñ€ÛìHÚÍHŒä y1õöêú½ÿÔ¥ŠuÕ
+`*F‰gŠd 6œ  è¹Ü‘W¹Îx
+Ç)dŠë RÇ{Çèù-†OXo‰&:\^?´@I× '†
+ßJô=Îú8´~$æ‡bCgC [7ÃÑM#Ð0)ØáäÛÄ”`|£²î¶ÛõªJ†uMÌá¬ÝÉY_ÐÐeLœî?!+ý“˜m!,\([&¡òŸ¶IN –Å+›5ÿŒ-Ôæ{Òq¥<‚%ã‘ï/oß}¹º¹»ú|ÈÎ{èj.ç'ÔP}Eò†®c¤«ûŒïþ@üÐýs*_A¬†\‘Ôt»M“&V—’mNf?ÿÿ­ö€ÀÃæW½W·«€ìïrŒ8d0^Ìqcxâjés"×¹ª:>èΠ÷¡ŽáÁ¾h¶ÁxøîJ2(£7žbþUƒlºà”#×g?aG;OÚÑÈÚ¼ž¤fO&ž›>ÿ;*ê
+Pw  uÇáÙ”eï(<K@F!!ù‰ƒ»"Ç£ßD^±¬wÁÈqCˆ.ÿºén8C=0Yo™Å¦­«åsæ#é… -Õ“°á Ë€Êô׎[r5‡(”c½€].|¸^¬L°g\¸6ˆºÒíŽÖUSÂÖ!QºJ»¼AQò>|áé¸[e:™Ð´Ø3¬3`þ5ÐEÇ£G
+@šp.Ä@à“ššùŒ!¸`8Û7Iú ¬ÁÆϧ©nô)¬¾N1"Ž¡ÙÆPÿÔîê°×hÿ–ˆj ,ZfSûx·UplÀ“}ùn^H§Í9s b )ƒãh̓·Ã÷/š“3M¤µì'’×Qûë_¥‡!Ý;¼
+
+ªú« ˆ!l¹ZF­€’Æ8îÁØÔK‹ñÜT{Æ´Š7z°oòÒï¹ðG†¢Cªû¿ËØÿf#5Ä.ÃÓ×3\CµÐJá6™¡Ç7Uø 0­cÝÿ yÚ|ðendstream
endobj
-2674 0 obj <<
+2750 0 obj <<
/Type /Page
-/Contents 2675 0 R
-/Resources 2673 0 R
+/Contents 2751 0 R
+/Resources 2749 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2649 0 R
+/Parent 2760 0 R
>> endobj
-2676 0 obj <<
-/D [2674 0 R /XYZ 56.6929 794.5015 null]
+2752 0 obj <<
+/D [2750 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2677 0 obj <<
-/D [2674 0 R /XYZ 56.6929 751.9601 null]
+2753 0 obj <<
+/D [2750 0 R /XYZ 56.6929 590.0348 null]
>> endobj
-910 0 obj <<
-/D [2674 0 R /XYZ 56.6929 711.8811 null]
+2754 0 obj <<
+/D [2750 0 R /XYZ 56.6929 462.241 null]
>> endobj
-2678 0 obj <<
-/D [2674 0 R /XYZ 56.6929 674.813 null]
+2755 0 obj <<
+/D [2750 0 R /XYZ 56.6929 400.964 null]
>> endobj
-2679 0 obj <<
-/D [2674 0 R /XYZ 56.6929 642.3093 null]
+922 0 obj <<
+/D [2750 0 R /XYZ 56.6929 363.2323 null]
>> endobj
-2680 0 obj <<
-/D [2674 0 R /XYZ 56.6929 574.7324 null]
+2756 0 obj <<
+/D [2750 0 R /XYZ 56.6929 327.1951 null]
>> endobj
-2681 0 obj <<
-/D [2674 0 R /XYZ 56.6929 501.087 null]
+2757 0 obj <<
+/D [2750 0 R /XYZ 56.6929 295.7222 null]
>> endobj
-2682 0 obj <<
-/D [2674 0 R /XYZ 56.6929 314.9678 null]
+2758 0 obj <<
+/D [2750 0 R /XYZ 56.6929 231.5234 null]
>> endobj
-2673 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R /F41 1218 0 R /F53 1313 0 R /F55 1321 0 R >>
+2759 0 obj <<
+/D [2750 0 R /XYZ 56.6929 161.2561 null]
+>> endobj
+2749 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F55 1336 0 R /F22 973 0 R /F41 1233 0 R /F48 1253 0 R /F39 1173 0 R /F53 1328 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2685 0 obj <<
-/Length 1425
+2763 0 obj <<
+/Length 2602
/Filter /FlateDecode
>>
stream
-xÚÅXÛnÛ8}÷WèQ*†w‘ûæ6N×EëdX éƒÉ°¶äµä¦é×ïð"Y’•¤‹¶Q3ÃáÌáÌ!e`ø#3̓Xs$0ÁÝv‚ƒ¯ {;!Þ&jŒ¢®ÕëÕäì‚ÅFZR¬Ö_
-a¥H°J?…³««ùò|ñç4¢‡¯Ñ4‡f˳÷Nv5Õ4œ½ßÀ+Ñ1#¢ŒÄáìÚi—³óéçÕ»É|Õ†Õ `fbú{òé3RÈàÝ#¦•à#¢5 ¶.œ±F²™ÜLþhv´vê\($(—A$($®Ô8`a
- „u±´ëÚÁ-¥ÜL5O'1oõã.ƒ&à±ö¨‚<ÍÖÉaS»—¿²Ç£µå•·K‹*2zBHˆFâ¦J"Š…|!p†´i,gdƒQᲬ³&¤vȱX#FTƒœk|›•ÔæWe›µËJÖæçôwIQ”µÓ|ñ²C•¥¯ÌP†€Ø]æ´­K—²•NòÅ¿»íNp›<:iš¯§D…ëlïë½y-··Ò&@‹äÞ+‡Õ½ÁØ°V¹«ó²pã6Û@ài2p£‡¼¾w#_jg¼×#ŽeÓÑ‘­ q oâÖF'„èYGÆIBÅóÔÔµzššZ«nhCjŠ•n¨éGYŒRSÌ€nŸ ¬µ‰lHM1o?4».€L:b„¹Æ¡‚<GG„A òSt$ $éñ‘YÑó‘YÈò‘‘Ùºå##H
-÷løÈ(>2rËGFèªÑ¸}–z"¢ =Ù¯üO9ˆÐ8î³¥MíS×¥fruøâ•Õ´"Ua²Ù”~j“Iåý”N&N
-ÓÏž?]–åùØùÓZõP;e ¸ºÃgõu”ï b€ÖHã:Ë–6Ð ‰c$´ÔÜùüæÍõâjµ¸\Žœ%ƒÂëGÛ«#×ëæ$i6Ý^ßü®k=Üu£2½º¸úƽA‘63¾IÓÁNlï¸) Œ”†µŒfççרS"`lïÅÖ§<j·ú¨{Ž­(ô3%uJf=¦ ÷K˜¦5úEL7L£=Ó|Í
-(8H{TCŠi˜µ:zP (²}Ë4‰WÃucÓJQÃùÝ2I× 3ÉSßã
-endobj
-2684 0 obj <<
+xÚ½Y_oÛHϧð£ÔÓù/éî)½æzYlÓl“ØÝÅÇÂÚ’kÉIÓOäpF–ÅÙÇ"õˆâÌòGr$fþ‰YjW™ž%™f† 3[nÏøìÞ}:g™}®wgïÿ©’YÆ2+íìnÕ[+e<MÅì®øm~qssyýñêßç iøü;_ÎçŸ/®½ø™h7癜_|º¼…G‘%˜¤@>Ëç_éíõÅçËó?î~:»¼ëÄê‹.¸B™¾ýöŸ ÁOgœ©,5³'xàLd™œmÏ´QÌh¥"esv{öK·`ï­Ÿ:e
+£RfR™LØBÊ)[˜ŒY%•·ÅuÝ:PÒ¦óv·¨Ì½YZ3ed[!{•o]¸úk+ŬU6p•mã6+Zv™WaPW¿s.ûs‘Îæ9ýlêe¾¡áÇ×·4úÓ=Ó`Uïiph´§²]OÈ*¥b*édm»"ê-6bÊ%"L`KZ&„MCQTÍôX=¸jb5k˜ä:n_6´q]mž‘y¶ÐR3žh5[Á2c$‰é\6]ȔϟÖ­•
+o lëÎZðä6ù}½'•àñhѼ-ë0Ño /iÞ·CIƒâoç •ð`Kä«š6¯–î>¦ór5¡¼§—V¦cƒ¾T¼$ÕÚöUÚšöºÃùEW^ªzKO9ÙGY°6hh’K~
+±Ù<7­ÛϪã]Áî a„‘‡3¿ÜÜ]}o)gÜ
+!—)5J:ëüÑ òá6o‡ø`ò1ß”òŠz›—q»•
+VÄr{xJ©‚}ó@‡QÓ¯û¾ÛäUÞÖ1—µî{\nO¿‡&p‘Û{ÜëöÖ)dP›ªÓöîs½nïŽËÛ{?‘i L»Ô·§¨·«ró2×@)¨³4=-]Ç5!Þ°°„ÃI¹Ê7L7†ŘySSÓ·tD&ÐAZâÆ"'ª/2q
+yZ°ŽkB²–I ãh·àPèbJ›ùºnZ…œƒ÷…TJ
+ä±6L2¦D:Œ¨¤Q/¼û$ý¤U~ô~™W!»¨
+_`¦¶CúÄkóßÄëøz~! ¥KŒï.z×ô·——$ÂÅÏ·_&ÖX’ *ƒ¯¿sÃü/‚NoÌø S"ú-TÖW!øPi,Z?\]¤©Y¬ØB…Ù´{ì‰ôÕ!Ââ6A6>çÕ!ŸúÌe}Ý%Ä´q 9a ·çâ×»}ùzÊ*žíª‚z¹Šñ­ok‚3ü£®šzß–‡íq[ %ºí>™:H¯9“â|!8Ç‹Ú]“%² ¥FÛõtE.ÎÒ„˜º¼nIð4¨Ð›M¿ç\݄댢 {6;^ ;ùe½<»
+âxs?É»yíˬ2 ?§N
+endobj
+2762 0 obj <<
/Type /Page
-/Contents 2685 0 R
-/Resources 2683 0 R
+/Contents 2763 0 R
+/Resources 2761 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2649 0 R
->> endobj
-2686 0 obj <<
-/D [2684 0 R /XYZ 85.0394 794.5015 null]
+/Parent 2760 0 R
>> endobj
-2687 0 obj <<
-/D [2684 0 R /XYZ 85.0394 608.7316 null]
+2764 0 obj <<
+/D [2762 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2688 0 obj <<
-/D [2684 0 R /XYZ 85.0394 547.8766 null]
+2765 0 obj <<
+/D [2762 0 R /XYZ 85.0394 687.6869 null]
>> endobj
-914 0 obj <<
-/D [2684 0 R /XYZ 85.0394 510.4382 null]
+2766 0 obj <<
+/D [2762 0 R /XYZ 85.0394 264.7716 null]
>> endobj
-2689 0 obj <<
-/D [2684 0 R /XYZ 85.0394 474.6444 null]
+2767 0 obj <<
+/D [2762 0 R /XYZ 85.0394 197.5243 null]
>> endobj
-2690 0 obj <<
-/D [2684 0 R /XYZ 85.0394 443.1856 null]
->> endobj
-2691 0 obj <<
-/D [2684 0 R /XYZ 85.0394 379.4087 null]
->> endobj
-2692 0 obj <<
-/D [2684 0 R /XYZ 85.0394 321.5186 null]
->> endobj
-2693 0 obj <<
-/D [2684 0 R /XYZ 85.0394 248.7084 null]
->> endobj
-2694 0 obj <<
-/D [2684 0 R /XYZ 85.0394 187.8534 null]
->> endobj
-918 0 obj <<
-/D [2684 0 R /XYZ 85.0394 150.415 null]
+926 0 obj <<
+/D [2762 0 R /XYZ 85.0394 155.6441 null]
>> endobj
-2695 0 obj <<
-/D [2684 0 R /XYZ 85.0394 114.5065 null]
+2768 0 obj <<
+/D [2762 0 R /XYZ 85.0394 117.8997 null]
>> endobj
-2696 0 obj <<
-/D [2684 0 R /XYZ 85.0394 83.1624 null]
+2769 0 obj <<
+/D [2762 0 R /XYZ 85.0394 84.4903 null]
>> endobj
-2683 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F55 1321 0 R /F22 961 0 R /F53 1313 0 R /F41 1218 0 R /F39 1161 0 R >>
+2761 0 obj <<
+/Font << /F37 1038 0 R /F22 973 0 R /F21 950 0 R /F55 1336 0 R /F41 1233 0 R /F53 1328 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2699 0 obj <<
-/Length 1821
+2772 0 obj <<
+/Length 1275
/Filter /FlateDecode
>>
stream
-xÚ¥XßsÓ8~Ï_‘·Kn°Ð[’ s”Io˜\GM<Û!v¹¿þVZÙ±S·…»ÉƒWÒJ»Z}ûi6¦ðcãHóx¬âD”Eã4Ññ
-ÆÞŒ˜× ¥ «õb1zþZ¨qLbÉåxq×YKª5/–Ÿ'/§d
-KÐÉlþ2xûþâeðzöéæz°8|rq}}yõjöiðˆ‚:èR:yqusñö]OcP{s9Ÿ~]¼].ZǺÎ3*¬WßFŸ¿ÒñöðnD‰ˆu4>@ƒÇ|œÂH(¢éÙŒæ£?Û;£nê`0%\H> ÎÆŒ‘8Šx/QL¤àÂ…c~,Êm•Uç[Œ(-ÅX‰HFåi¡æ8÷€_D1&Á­Îέ R£e½Z™b—Ë2Ÿ‚ÿ9(¬Ï_ƒ±ÓL-ˆÔ°oê¦ûüÖìP­g@HÂyȼÚ×…š¡F•ýcÐì]¶1E’œÒfÀ BZFÑ8á±ÝäW—ó—g׋ه«vÖÉ~åì|—¨Ê»a‰ˆÖJxŸ@Óì’ÚTÓ@h5IìGN¾PÊ7»Ê]gHM*S£Ny‡¨ëç§eQ'Y‘+Tj&mMšYE³ÄŽoû¤¨³úØ_j[™ý² š²]ˤNžÙ]À±{ǃ6Xàÿa¥kLž4)P¸5øÝWÖœ•’ÊñS•ûÝ”éIê­}û5EíúËí;îìæF½6^LË<ýŠ¥·Y«Úä¾óÕÞ§¢Äo³%+/Í÷,5dèìiÿÌ/>¾¹yyµ¸O>¢˜ªN“®V“½÷Ó¤Õ²–Û´ˆúhÖq$î¥E×3FCÜ¢w­Õð­‹UFcŠˆõ›Ù˜[¸lw‚A¶ËÃÙá϶ËÂ+ JŸA#–ÐßOj¦9‰´ˆ’¿çšÐDq¦½ÚÑ;ÄNŽ–9Ú­KlÆ ÁPô ã}I¶[S,­Ã¾×‹Ô¿æ ˜tùZ 㨟0
-CV¥Á:OÒÀžÃýÖ¥¸u/$J(,@¯NŹs@QŒ‹Þ[ —su:èÆ»k‹XŸ
-æXõÁßœ¥¿+ËͲ¹"¿›]•ÁFû©öbvõê'‚üTÝÈ…€xÛý÷º±»ÄÃuc«Õ‹Ú]æ£^3Bé+EÃÁÉfU¶×¶ÌdMéà0„òfÞÅÞ Ú”SþkÊ›´!C.xŒ!w=1~ìqÛ›µ¶ )€BV¤›ýë¶þD"QX'^5A•Ûý
-Ûi²¯p¢@Àó·¿£Òb>{ƒˆ+!Sxüb(¿ã2ÓrƒŒ'›²X9@\¯]mç$?¼ÌV¦ª½ª)V®âÙ¡­«¸N*?äeÊ&ö\lMþŒb™A…ð›á€Gûƒn0IQ¸Íêê4›G²¿1¼sýjaxZ-ŒšÕ ×Ns]Íj š:õ%ƒU-QÑñ&|}e #pnåÖ֛£ƒ‚_¡W A;Á¹¹©ªdåJö'¨ÄSÐs¥,è¥åÒ‚‡5ö’jhcÖz¾…¹·ÍÕp*};%ó««¹¿.òíÆä`Й«H»¦‚ëI57NfÂ¥Gë¤é1¦@ɲä÷ €væû=pAŠ‰²/l¡'o˃JšÂAh„ ½}ÜðÉõó䈂ųiVmö—mðµâœ¨­žõ¬hsi F…9à‰«./†¾f…^ëò3kSà O)Ûi1ƒ’ÅxýqƉŽ”çž¡«âŒA¤&:ÔÍ»4/—ø8«ÐL½.+ƒn4ÈU‚j‚X«ê²ÍUPóQ
-°ð䈖Âö{qð!´
-endobj
-2698 0 obj <<
+xÚ¥W]oâ8}çW䤉DZc?Òé2šR¨´R§) m´0$LÕýõ{Û!ÀìªêC±}ì{||îµC< Äã E•ª
+æ…Œ¡€€”¡ ¨L9»À …„ ÕX¢¢®óq(Í*Úï¢,Ú&šÕ篢gŽRÕÀtÅñ>)
+ƒl¯\!©E"„ ¦-ŠOpˆ¸Üó„’ BÆ‹/óÉl9¹ŸÖ³Ž+cϧQ¢Â¶”6Aˆ$ŽC¹²b•I1ð˜j2C)Õ×{Ù‡}¸¡˜ãÉìW`Yìfü0DLw™›Þò51«|oÚåYœf/vÖÔŽFs4œëp¾wkŠãlÁókßerFï°èÔ·µ[ŒÇ&O†ß÷ÏÔeõn&Ó‘Á+;-Þ¦YZ€X¥¦¨»æÉ:1ËV‰éº‹²C´éœ‰¨Â{÷©;P‹ùðaùÇý¼cÍÊ“¬LöYR&‹÷¢L¶…i|ɳ"ß—éa{Œ §TÀ ^—¡8á%ÉÀq^M«åH1ÍpÓnsiVÐâ¡Išã“”†æ $ ¦.²ÃÓíZåYæÚ/ºÝ\&ŽÊè¿úoê㔫ԑæ—ëH:‘D€È~ÖQQ$CBÖ9š¶ÏàµórÂÀ
+IÁ?RZÞ9ñ¨!eèÊ¥s‚.22ÔV`RÔVÐ]UQpCa¿Ð&ט|m: ÖÎoúFƒÜ¤]²J50‰MÇÏC”•iùÞ^jW$‡8÷Ýé.m¶O¦9â~-ð{MW¯Ö³Qf~<[
+®rxÑrz‘ªÚá*‡Ž¯ÿ'YYõç»wÓ±vå&‡‚ºw©±ÝA»bncÍ”KKË)Ë;ò'ù•®’ëuÓ\ÅÃùíÃÝxº<VØ  ˜!ÌXp=Mš(÷
+8O“¥#×iÁÛn–Š³³´h2#8@ðF‘שըn­Ê
+\7-r­¹¶Ë&ªNÐ:HwY;›º¥Í›Y€qé'}ω†éÏ“šHŠ¸d¼#ù[ÔàœBJ¤…éËym¼³5‘©‰«/dÝTöŽ>&Œåív‰¹˜;¸0
+/T!ÿiîl]EÅÛ c^ÚšPÐ%cïKŠÉuc5Q—U£êx4„ëP‰àzPêÚ”"Tˆ…aغt{6¸™òµGƒ@#µYýwºÉŸßKsX·ïÏËúÁ5Ìá¹.ßtE= 2.ÓÝÅÑŒ«àm yp5®ÃœÇm§†ß"l^¶U:ÈÉå„i”ã³'ƒ9×ü°‰ÛuúmŸ–e’u¿Ë‚
+endobj
+2771 0 obj <<
/Type /Page
-/Contents 2699 0 R
-/Resources 2697 0 R
+/Contents 2772 0 R
+/Resources 2770 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2710 0 R
+/Parent 2760 0 R
>> endobj
-2700 0 obj <<
-/D [2698 0 R /XYZ 56.6929 794.5015 null]
+2773 0 obj <<
+/D [2771 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2701 0 obj <<
-/D [2698 0 R /XYZ 56.6929 749.4181 null]
+2774 0 obj <<
+/D [2771 0 R /XYZ 56.6929 749.0356 null]
>> endobj
-2702 0 obj <<
-/D [2698 0 R /XYZ 56.6929 692.0679 null]
+2775 0 obj <<
+/D [2771 0 R /XYZ 56.6929 687.7594 null]
>> endobj
-2703 0 obj <<
-/D [2698 0 R /XYZ 56.6929 619.7977 null]
+2776 0 obj <<
+/D [2771 0 R /XYZ 56.6929 611.5631 null]
>> endobj
-2704 0 obj <<
-/D [2698 0 R /XYZ 56.6929 475.6873 null]
+2777 0 obj <<
+/D [2771 0 R /XYZ 56.6929 547.3221 null]
>> endobj
-2705 0 obj <<
-/D [2698 0 R /XYZ 56.6929 415.3723 null]
+930 0 obj <<
+/D [2771 0 R /XYZ 56.6929 507.5308 null]
>> endobj
-922 0 obj <<
-/D [2698 0 R /XYZ 56.6929 378.309 null]
+2778 0 obj <<
+/D [2771 0 R /XYZ 56.6929 470.5891 null]
>> endobj
-2706 0 obj <<
-/D [2698 0 R /XYZ 56.6929 342.68 null]
+2779 0 obj <<
+/D [2771 0 R /XYZ 56.6929 438.2117 null]
>> endobj
-2707 0 obj <<
-/D [2698 0 R /XYZ 56.6929 311.386 null]
+2780 0 obj <<
+/D [2771 0 R /XYZ 56.6929 371.0488 null]
>> endobj
-2708 0 obj <<
-/D [2698 0 R /XYZ 56.6929 248.1492 null]
+2781 0 obj <<
+/D [2771 0 R /XYZ 56.6929 309.7726 null]
>> endobj
-2709 0 obj <<
-/D [2698 0 R /XYZ 56.6929 190.799 null]
+2782 0 obj <<
+/D [2771 0 R /XYZ 56.6929 233.5764 null]
>> endobj
-2697 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F41 1218 0 R /F53 1313 0 R /F22 961 0 R /F55 1321 0 R >>
+2783 0 obj <<
+/D [2771 0 R /XYZ 56.6929 83.9088 null]
+>> endobj
+2770 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F53 1328 0 R /F22 973 0 R /F39 1173 0 R /F55 1336 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2713 0 obj <<
-/Length 1682
+2786 0 obj <<
+/Length 1769
/Filter /FlateDecode
>>
stream
-xÚÝXKsÛ6¾ëWèHÍD( NOŠ£ÄNcǵä™v’(’’8‘HE¤ì¨¿¾ ,‘2mg¦·ŽÄc±Ï» ±!…*I¨ˆüaùDR&‡Év@‡+Øû0`–fÜÛToçƒßÞ‹p‘(àÁp¾lñR„*ņóô‹7¹½Þ¼»úk4æ’zoÉh,)õ®'7÷“O¸v;Š¸7ù0Á”…B
-ý|ùF‡)¨ÿq@‰ˆ”>„E|¸øRé Ѭl³ÁŸŽak×íóƒŠHÅÃGpÞç‘@pa±8ÖY5 ʽe¹×æÍ.'Bù¸©[”Œ¥’½&½z¸#i‘=â Ê’ýˆ)/«qÿ1ßlpg‘áÊ*+²}\g).'eQåU+œ—Ëãu\­q!ÍWYU·‰¸ÖC‡|1fŒDRrcX¹I1'mˆVœz`½Zâ¦>|F…ó4·Ç‹Ò®àöCŽ\Ͳ}•—ÅÇ°ÀQnÏ¡õz´°‡vû¼0¶ãv½.–v[¦ùWJy×À’hokÛ lèŒ[jS…OB!1†€Æû»«ùßÈãâóÍìêÝôn¢<¿‚™eÑÆpà>‰|æ#g=`SfÄZ%ãü‡ ×™1 Fh5š £ztJž$0°ÄQZB^%ãõ6NÆÚ¼Ÿ‡]N">£Ìˆ›A`µ.A\‘¥ÚË $‡ÁF\¡
-õ:·š7ßuùØlY&—ד í ï².“rc°3æ\‚p. a–x,÷ßõå`¡—k¬ëC; \.ÇÅñ1>Žcž¾Bš°ë´4÷
-Žâ¥»Ì;ÌöyÇuja»{›œQßÏ*ÃÝ÷¾rîÿ‘­R›²Xe{¤‚ˆY¾‹õš½.=·c“«zý ·'I¶«ãÅÆÎ 6ÝUÉ~Öû‡Èƹ<lÎïL•¯
- è¢ÞíÅ(,Øâ*;c½< :ל®‘NË Úò_º S<<ù4ûŒô"zøo¯nÞ!}d¥Û¼€\AÖéP/ÝeËÌ*’X=¯ãâoz0Ì
-dº›x›=£•"A¡ö'Fˆ}ˆ£¦pàÌÔa6ò^ƒÇ±(wPkÎ w
-¸«ÐêÛÄKCJ@A/ðÛN@}™:Ï<lØ[@ZHqXZò?•©^_âYdžy»xÈ'TºÊCŽŸcE
-Í#ÚwkÞÑ-3}E‡¹ã‚vêdŒåaƒcH‡³v‹Ë¦a°Í¨ë¬V‡-H}†LB•”/ðMõ< •é¹O5á ¼6ÃWd;ªá]
-ÂBu&ÝÝ_‡ÄVÆŒSÈ¢ YlŸFu¾Íªg¯2´ÿ®·t¨lßféó~Õ`‹Â࿶¨^ðkC¥-;ÕÖŽOu@•ÿ²\GÕ#¸ãS®]…]ÉΧVô¯n©:ÙpÑò uГ.@7o’ŠÿG÷,™”¿Ö=÷ý[#àí'D_¸¨sÙþ'çôw•¡ï» Ðb ¨™V)­8 å¹êî?Ÿ§ºÿ 4›± endstream
-endobj
-2712 0 obj <<
+xÚÅXK“Û6 ¾ûWøV¹3|èyÜì#ë4ñn×ÞN:IZ™¶5‘)Ç’ãøß (ù±JÓ´‡Ž†@
+8Èð#bO\ÂÄ+J³°€º^¦¦¡Üò,_èªv¢Ú,ê%ÑmÇ‚Ë´rK.)áa^ó‘<gš½€ÇÈ÷ÀoA íßuC„œˆ§¼®Ú2»æ¬ùþÁš4Ö€‹j–ÕXR×x'œhI‚Ošþ·•­>X¼•
+[V{ gÁÕ©M >§¤»ÒU•.œ¡t q2už\iH.+gn<¬‰·K«ÓƒNq÷ÕtŸ
+ME¾Ëm"°ìÁ²ëWã ùj]èlh·«Xk‹M—9E†a@@
+GkƒTàºÔŒØ¹¡‡Z á%¤bï¶ÜièGHÄEÙ¸ë#$¿J÷D ˜ucµ9\^äõ¾ñ Þ9'¦å!‰…Ô £w”îè¸)ú!Á¸èò "wKmhÑÕ20D!ˆXÛBÝ@
+ÉbèU®ót]gý#ŒYìÇÊ)¬ÊYŽ²¶åÃ>õ²¬4ùÑà6r
+öRä3ÈΠDóŠº&>Û«ô`˜nd4ñ<IÃŽ.
+endobj
+2785 0 obj <<
/Type /Page
-/Contents 2713 0 R
-/Resources 2711 0 R
+/Contents 2786 0 R
+/Resources 2784 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2710 0 R
+/Parent 2760 0 R
>> endobj
-2714 0 obj <<
-/D [2712 0 R /XYZ 85.0394 794.5015 null]
+2787 0 obj <<
+/D [2785 0 R /XYZ 85.0394 794.5015 null]
>> endobj
-2715 0 obj <<
-/D [2712 0 R /XYZ 85.0394 705.7181 null]
+2788 0 obj <<
+/D [2785 0 R /XYZ 85.0394 752.3326 null]
>> endobj
-2716 0 obj <<
-/D [2712 0 R /XYZ 85.0394 622.1311 null]
+934 0 obj <<
+/D [2785 0 R /XYZ 85.0394 714.9106 null]
>> endobj
-2717 0 obj <<
-/D [2712 0 R /XYZ 85.0394 562.4544 null]
+2789 0 obj <<
+/D [2785 0 R /XYZ 85.0394 679.124 null]
>> endobj
-926 0 obj <<
-/D [2712 0 R /XYZ 85.0394 525.9492 null]
+2790 0 obj <<
+/D [2785 0 R /XYZ 85.0394 647.6724 null]
>> endobj
-2718 0 obj <<
-/D [2712 0 R /XYZ 85.0394 493.8436 null]
+2791 0 obj <<
+/D [2785 0 R /XYZ 85.0394 583.9192 null]
>> endobj
-2719 0 obj <<
-/D [2712 0 R /XYZ 85.0394 459.1867 null]
+2792 0 obj <<
+/D [2785 0 R /XYZ 85.0394 526.0527 null]
>> endobj
-2720 0 obj <<
-/D [2712 0 R /XYZ 85.0394 396.5882 null]
+2793 0 obj <<
+/D [2785 0 R /XYZ 85.0394 333.3907 null]
>> endobj
-2721 0 obj <<
-/D [2712 0 R /XYZ 85.0394 339.8764 null]
+2794 0 obj <<
+/D [2785 0 R /XYZ 85.0394 248.649 null]
>> endobj
-2722 0 obj <<
-/D [2712 0 R /XYZ 85.0394 268.2446 null]
+2795 0 obj <<
+/D [2785 0 R /XYZ 85.0394 187.8177 null]
>> endobj
-2723 0 obj <<
-/D [2712 0 R /XYZ 85.0394 83.0386 null]
+938 0 obj <<
+/D [2785 0 R /XYZ 85.0394 150.3956 null]
>> endobj
-2711 0 obj <<
-/Font << /F37 1026 0 R /F22 961 0 R /F21 938 0 R /F39 1161 0 R /F41 1218 0 R /F53 1313 0 R >>
+2796 0 obj <<
+/D [2785 0 R /XYZ 85.0394 118.0522 null]
+>> endobj
+2797 0 obj <<
+/D [2785 0 R /XYZ 85.0394 83.1575 null]
+>> endobj
+2784 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F22 973 0 R /F41 1233 0 R /F53 1328 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2726 0 obj <<
-/Length 312
+2800 0 obj <<
+/Length 1123
/Filter /FlateDecode
>>
stream
-xÚ¥’MOÂ@†ïû+öØ:ÎGwÛ=¬€QD[ÂIИXˆPcü÷nÁB x2{šw'Ï<YÒèicÁ:v:q1$£Ÿ*…úÅ÷Š~2QŠº©^©.®$Ñœe«Ëçά0MI—‹YÐ&ý ÆEÞ—aV È) ²É$_Ž}mÐ'} 1¸ÍÆÓìf7 Ù /Âyy­òòÀÔå&”è]Íæ¨ÿZ!ˆKþô9ǺR±0±H{ó¦
-uØéîžžõ@,–ψ`ÒDàŒá_&Œ+,;Ù´Þ=4‹ø8w¼¡Ž8S¼ËVõr³ZÖ{Å׶^VÛ}Ñ_¯¶ëMýúQýåC 4Kœ¡Çà¿]?Dœ€¤)5t÷âÄ€l[¨f9Jì zkõ”ýÄ ¯endstream
-endobj
-2725 0 obj <<
+xÚ¥WMoÛ8½ûWè(Ëo‰Ø““8EãdcX Ûƒl1¶°–äZr‹ì¯ß¡H)’-»‡E€"gÞ<Î4ñ0üOH$U^¨8˜o•°·†¹»q˜ ]ÔÕbôù–…žBJRé-Þ:¶"„£ˆx‹ä›…(Gc0ýÙ|zÍî'óûq@IȘ?y~žÎnþ‚o 0ŒýÇÉìuòÕŽ=õ'wÓùøûâËhºh9uyÌ ¡£oß±—
+ w†
+ ‘@«c¢¦ÅÉÐþ4(Ã*/õŠmârch}¾
+…81È2ÞVã@ÂÅÛu±O«MŸDøi¥÷q•yi§“"‹ÓÜÚëë4&!XÖ†o¦óë—‡çÅÃÓ¬]ôA{dâ„ñ¥´åXBÇw­sÃK+ʈ維³Ðt©_›©—q©Û-.¶M©+7þfµë‰¿‹÷q¦!úR—aæ/6iiQ«ÆÝRÛöÐ:¨
+Û®6zõÚhŽ4­hÈÏx›&iõnK¢æ!p˺û1‰|½*ê6)í`šÛ6¶M™®óšôÿ-r†ö÷7fòr÷ú8-N«Ï%œPÉPŠËYÙE5Årš•-ªÍµ#§!E!£¿qÚ€œv3% ;rºØh§U馷«%-~¦I£]½{¦mÀ.‰D§,ÐY½$†Zäoôê .èÕ  õŠ<òL0A‚rvÙu‹ðÝ• Ž=!ûÎ'¾~~È–zoú’/IWp&äk;gÕ‚ § uÔ
+8çþõaoó8¯¶ïG«Š¼*»]±¯êÝ6g?ß êŠ2g–¤_Q®vŽ|S°¦ßOò ú”ù¿6éjÓŸv¿æsùnÛš¡é4Á›>ùZú+8õƒ ÈÌüM)'æ_ßxkÅÆizp\¼¶¶õ°çî‡a‚tɘºªk ׇ ¼žOCØF¥ì­y! ;¨ iØ  ¡ÎMpäZ) ^vÝ€\÷³£ˆÑ¾ë¶xÛ4윕qç'Њ·N¯4ÓåÙ:.7ÅaëÊ}éfwzjg:9+*‡3…`Ê/‹ÚEµE™È>®Óž P±’¨ËnЀۮ Jš§í»muþ­¸pßõÏÁeG>§ÎÉ­Ïê}eýËe>Ú•“¯ó'» ä³÷þÕÃìÆâ•[–diž–$\S/úM»3dåh=Æùvýô­@d„¨”Ò=> 0
+"ÄÐÛƒÀCW‡ÖŽ¸:Òaòº¸z°x$ÀCÅ•kw1ÍßËJg.‡¯¡ààPLÙ¹g284oÛÁ-Ãÿý„þøÀCÄ¢ˆg ”-ô)‰øi]¹Çö)÷ÿ
+endobj
+2799 0 obj <<
/Type /Page
-/Contents 2726 0 R
-/Resources 2724 0 R
+/Contents 2800 0 R
+/Resources 2798 0 R
/MediaBox [0 0 595.2756 841.8898]
-/Parent 2710 0 R
+/Parent 2760 0 R
>> endobj
-2727 0 obj <<
-/D [2725 0 R /XYZ 56.6929 794.5015 null]
+2801 0 obj <<
+/D [2799 0 R /XYZ 56.6929 794.5015 null]
>> endobj
-2728 0 obj <<
-/D [2725 0 R /XYZ 56.6929 752.4085 null]
+2802 0 obj <<
+/D [2799 0 R /XYZ 56.6929 749.4437 null]
>> endobj
-2724 0 obj <<
-/Font << /F37 1026 0 R /F21 938 0 R /F22 961 0 R >>
+2803 0 obj <<
+/D [2799 0 R /XYZ 56.6929 692.3565 null]
+>> endobj
+2804 0 obj <<
+/D [2799 0 R /XYZ 56.6929 620.3493 null]
+>> endobj
+2805 0 obj <<
+/D [2799 0 R /XYZ 56.6929 434.768 null]
+>> endobj
+2806 0 obj <<
+/D [2799 0 R /XYZ 56.6929 374.716 null]
+>> endobj
+2798 0 obj <<
+/Font << /F37 1038 0 R /F21 950 0 R /F41 1233 0 R /F53 1328 0 R /F22 973 0 R /F39 1173 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-2053 0 obj
-[930 0 R /Fit]
+2099 0 obj
+[942 0 R /Fit]
endobj
-1887 0 obj
-[930 0 R /Fit]
+1935 0 obj
+[942 0 R /Fit]
endobj
-1590 0 obj
-[930 0 R /Fit]
+1604 0 obj
+[942 0 R /Fit]
endobj
-2729 0 obj <<
+2807 0 obj <<
/Type /Encoding
/Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
>> endobj
-2085 0 obj <<
+2126 0 obj <<
/Length1 1628
/Length2 8040
/Length3 532
@@ -13208,7 +13621,7 @@ endobj
stream
xÚíte\Ôí¶6Ò ˆtÃÐÝÝÝÝ¡Ä0 00Ì ÝÝÝÝ’‚R"‚´t ÒÈ‹>ïÞûüž³?³?½¿w¾Ìÿ^×Z׺î7¶‡Œ5Ü
¬‡¹rðpr‹ t´P(ÐWç…C­fL9g0ЇÉ]Á¢
-Äü{fXE
+Äü{fXE
0Üú÷äè¹aÖÃöOÃoäæìüØã?ûÿxýœÿŒ=ì a.ÌÁAb¡ö™9Y® Ä£ò/z{xÂœ*Þè—ÖÁ»2#×Dj,ïêÃ8›ÇEµyÍî;Ýoª²n öA™ºÓÁß‹(üèX>ã.3v±ms™W`gÅúϨ¯"›
rn­êèš—ß¡RŽwð9£_²Ò¹Ð_8=óe4%v>oFÀk(Ù?`LÙ½¼`êú4ð±ûåÃ&9[~ƒ˜;26cLà«|r)Sƒj…×Íl(ßÛ
b¬Å7ÎßÊçÏVð™h9Žù,¢I‚°RÊ• e®äß·RÆ%=²ìÙ êt›œ(†Ì%³LÇî)®Ž>1Ù¥‘„µ…^Ñ2¼éˆO£Ý %õ‰>•pjÕr{2–ÂwÍ<–g¬™-j—!3cäáakIè,AŒ$ÁLˆÇÆ‹J¯³nöùU»Ïm›Þ‰D3
@@ -13231,35 +13644,35 @@ $OíœàÅ€DÈ
t‡Í=žÝbóÆÃwî6ß"£“˵?”JËOP2RÐ oQo+†â1)©w†¦ÜèådîI½ÈZ¿VÍ­(e÷åû È"QÔüFØs(úF$'‘qL ®/¶!õÔ ¤HvkÖ‰Œh¼È‰¬ê؉á¶o?Ùa:Šÿ±qêcŒ° gã!_QÇ~ÏWê¡1üaœ¯UÝGmã§Yñmn%ìRãr9÷¬ß0qˆ5†/‚E…(êÚ“†,W‚˜$Ù½ï¶åçLxËÎÔ|ú奕£w†Z|ÂV€ãž÷,éOd
ÞyŠGÝ ŽÎ¨Ý3lÍ4©¿Î\×T2Zª½Ag—.7Ù#ÏPæï™v¼eŦQLÞ»±Oþ¼Ô\’ ¬ÿĵJÅñ¾(š3Ç].Å*,MÎ>ÛBx(ÃSÃó|D³uû‚Þ¡ï†{:Ò‘Á¨2G9¡Cê{É•<|?ÒK áéá@F)Ø,êw÷ó?È ¸¢Ëa„Çh%Ù±o^Œñ{‹6™Ý @¥-«ä%Å~jÉwXjz1îi´·î¬%uÕ3^¿±g¸`d+ÎK[ŽDe—„]âò†YèÖýÇ?Ï>£³HjË,èkѸÍhÔ8Š” ™v_Å [ªJÖ®²9m=·âú?\‹k>¼à¬‡¤*³Ñ³ž,Y ê<‹ý¹uÓ Z/ZV$S·é#ƒmNOš¨5M@¿§rãÝ0Hõ7¬&7[àçŽAØñêOõƧÈêÚ5±pE6~d»Ž^.x¨T1¬µ¤$£Í7¿ÿ4òÆêüj§‹G1¬èípoóÌ3³QýÐZ:œNÍÆéç,0½‹Š‡Zg‹ðâ£à)‹Q©¯³‹X""œÛÆ0ÏÁ¾äBvFA‚)Y9(ÎYÖý…ì¬S…|¸Ôü¾“qbæÇN.LÔX§…_ï‚¿œ%%½¥åŒìé|°D>W²7}C–Í#—ZR¸­$º`bÛGο…a¿9gÝS%\”Á/œîñhC|?s§ Ø…šg¯ÎÙÈ)ª¬m}ÐvÖËk†Ÿ.bÉ&O
üõí+uqfº`Îa‡„°£â,I§ã¯½/‘˜÷ÇÝ›Á¤'P6ߢH‚Ú?÷›½šÙ¹˜Žà9¦ŠmHr7:pMRYŸ#£ 'æW¥¿ðKCß|-¡mWÝ躖nᲶË0–«ÞÐ3äÛÙ=j’¸Ë-,n–³e±€¢üb½iÙ;‘˜Hâ°l<)žL.ßÐYÖÿ°Ú·)wL=(‚Œ£± L|)=å'ÀÆ-Å@²öò¾µ<ÃNrä³6îµEôʃ3±d¶kÓ»¬ÿ‹%ôµøü·(kD~ô(¬_yñ‡Í; ¯åä²fùOî{&*‰äyÒ¯9ÛB±T¨d>è.<Sâ¢éX3p7«Á~ª"럽Ÿ“lË´ÍÔDQÿfŒ°Ì
-*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€Ž¶Xo³êÙ}
+*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€Ž¶Xo³êÙ}
endobj
-2086 0 obj <<
+2127 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 67
/LastChar 85
-/Widths 2730 0 R
-/BaseFont /ZZAPBD+URWPalladioL-Bold-Slant_167
-/FontDescriptor 2084 0 R
+/Widths 2808 0 R
+/BaseFont /DOPODV+URWPalladioL-Bold-Slant_167
+/FontDescriptor 2125 0 R
>> endobj
-2084 0 obj <<
+2125 0 obj <<
/Ascent 708
/CapHeight 672
/Descent -266
-/FontName /ZZAPBD+URWPalladioL-Bold-Slant_167
+/FontName /DOPODV+URWPalladioL-Bold-Slant_167
/ItalicAngle -9
/StemV 123
/XHeight 471
/FontBBox [-152 -301 1000 935]
/Flags 4
/CharSet (/C/D/E/H/I/O/R/S/T/U)
-/FontFile 2085 0 R
+/FontFile 2126 0 R
>> endobj
-2730 0 obj
+2808 0 obj
[722 833 611 0 0 833 389 0 0 0 0 0 833 0 0 722 611 667 778 ]
endobj
-2066 0 obj <<
+2112 0 obj <<
/Length1 1630
/Length2 6133
/Length3 532
@@ -13271,8 +13684,7 @@ xÚíVuTÔí¶VA!¤†n†n”.IéΆ˜f(‘N)én$†FJ Á!¤[:%•$.úÝï|g}÷üuÏùë®;kͬ߻Ÿ½Ÿýìø½
Òy¦§aáèha …«pJí•Ž H
±@Bá0Y $D¤±ÉB¬@¼¼ 
µµC‚XnxXÙÙ9þ²ürYzý‰ÜD" ¶0Ó̓;Äîì!o(þ×ZiÙ@! u %5‹‚šHƒ¸Þ¡áf鵩@­ 0„dw9þq
-³rt³þ%àÆnÿ-ÈÙ~ãátƒÝiÀH„•+Ô ºÉª!+ÿ‡N¤òWnôÁmn<­áVn¿JúÝÐÜ H ( BB<‘¿rYB@ÖP„³£…×Mî2gWèon(Ìö/ Wˆ­…«µ#¸¡¹áþÕ¿êýSõÎÎŽ^¿£á¿½þ¡ŠD@m¸
-šÚ²2ìÿúvýí«q³Hm/gè¿é©Â­ÿqøÅ$- ÷ysòqƒ8ùnäðp ñDø|þEÖßD<U-®PO777èæ÷Ïï_'“¿ÑÈÁ¬àÖ¿öF i³¾Yµ~ÁVn®®7þýößþçù÷ÒC ž+ÀôÜJ,Ø>5# YEžÓÓ/kô¡ƒ£'ŸFûu¾¼Ý/5|Q¤Ìü¢2„«vPôªÉk|ÛùrU™m­·ƒÌ‘¹=²—GåCÏú>ŸhžéûZ Ø´?í«^”÷þ˜Ê¦¡ ·îÚR¿æ3Ó¢‹{ÀÁw|®Øû§¬þôîùþ¤ 'ξV)o_=h!¬½E\U°ý•)aóô„¹«ïcOwûáÝ÷«”ìÙ¯pÅÜ1ñ™"ý]²)Ÿê”Ê•¿U»—w„ÄêÄ‚‡_)x¾¼–‹ À:7ÒD/–²‹óP'òÆ€,? N¸vðIn+\£š}§Z(Åç^XrˆL©GXrŒMß—ìdc§ õÕwÑÏíK
+³rt³þ%àÆnÿ-ÈÙ~ãátƒÝiÀH„•+Ô ºÉª!+ÿ‡N¤òWnôÁmn<­áVn¿JúÝÐÜ H ( BB<‘¿rYB@ÖP„³£…×Mî2gWèon(Ìö/ Wˆ­…«µ#¸¡¹áþÕ¿êýSõÎÎŽ^¿£á¿½þ¡ŠD@m¸
ïeë[ă»4fÖ)Æ»'c£»¶*2‡Ìu•ÙÖ£™øM×E;
at
½’•sJÜkŒ "êC 3ó®cUÉÙ4eHÎH~0+¾÷ì
@@ -13294,78 +13706,35 @@ V1-S¸`_3ÄÝËú%6BëbØ r¨Ãt©a*Óغ0ɼ•uï´ñï¨Î)y©@[gbL¦Ç)Ä?ÊDâÐ÷*éԒꟲGê«à
ÐíC¡Ówï»ëÉ“º¿Zèp½÷äOô>/¨lÝ4nlŽ°U-oMôÙ“ˆ o:œ©Í|y„7MT{õ ¯=i3RÇVHA9jQ¾rÁ3ãaÂ3œ´X_¿ÆdhÚ—E/Oö\ìKɬÝOõš_·— &†÷ê$ÀuæbsAƒytN.`.šâb™Ê¥܆€ð6é瘯l¾}êÈg|ëwRŠžhXŠs×L84ØGê} 1Y³mgzÑìÅÓŒ$»9ñNh‹Í”ŸâÕ÷ºXsm{Ôg"'H±¨ª®RU\O¹<Š>ÊlSñ"
‰ôt.CB±|…—(z?п)|Æö…›‡8csa4«ªy=~U»+jð*Ì8Ó“«&ÐÐåÇw?´,IpöÛ7oå¡#½Ëõqw¾}eüJü¢šïUølœ]Rçm‘LغÂ=Îk¡·ÐóKJ;œuY8:B.²åžðŒC\„0&õê®X¨ÕåsÊ;2•©`‡¬#¿Ê"ÿÿátökä
¹Ø+`‹ï—Rp 36‚FŊݹÎ%:b‰»•¯·0Î&SwjÒ V‹­C%#N^©Û™KuÓÏy,ÅEŸq&¨ãò8¿ªÊ{D LGÌ8½UTmÚ5leUÍ?6¹6ÞÒ6!-+ÁöŽ·¶¯T(wu9eQ–éáö:Jmš»4 û_}ö~N†ŒÁOkôÚ‹Ö»µ§½Mìð}íîɲư™qÀ“ë`Á+–»5ãéö×­d[%˦×÷[M–ŠÁÃ#ߦT\Ú*wqªÝ¯¢Øg”‰˜÷Õžà$²dß]Í|®yó9¾è?)ì#IiwñùŠ€%z :õÔÝ3°ˆKzW†Fc¾òm={‚ú³8uL‚ÂôwÌY«|í»U&›±”n{ÀeóbL=Xûy*áwSYø"FžN†j×'›<ºÚyÍ7Ì4`u¹§h‚Žï›Ô
-M0 V”µ@¦ØRšÁSÇ8${^™æÒu”œqÿ›ÀÿüŸ °r„X¸"áN®€ÿjRy—endstream
+M0 V”µ@¦ØRšÁSÇ8${^™æÒu”œqÿ›ÀÿüŸ °r„X¸"áN®€ÿkdy½endstream
endobj
-2067 0 obj <<
+2113 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 66
/LastChar 78
-/Widths 2731 0 R
-/BaseFont /KGQTDC+URWPalladioL-BoldItal
-/FontDescriptor 2065 0 R
+/Widths 2809 0 R
+/BaseFont /HTMZKV+URWPalladioL-BoldItal
+/FontDescriptor 2111 0 R
>> endobj
-2065 0 obj <<
+2111 0 obj <<
/Ascent 728
/CapHeight 669
/Descent -256
-/FontName /KGQTDC+URWPalladioL-BoldItal
+/FontName /HTMZKV+URWPalladioL-BoldItal
/ItalicAngle -9.9
/StemV 114
/XHeight 469
/FontBBox [-170 -300 1073 935]
/Flags 4
/CharSet (/B/D/I/N)
-/FontFile 2066 0 R
+/FontFile 2112 0 R
>> endobj
-2731 0 obj
+2809 0 obj
[667 0 778 0 0 0 0 389 0 0 0 0 778 ]
endobj
-1450 0 obj <<
-/Length1 771
-/Length2 1151
-/Length3 532
-/Length 1712
-/Filter /FlateDecode
->>
-stream
-xÚíRiTSבª¡¬2©¤j=,Œy5„„  £ soÈ-ɽôrID¨¤*Ë"6ºd¥Âª"P”Zb^'Ò*Â#,ŸEªVEÀ©¬««ôgûë­wΟ³¿ý½¿óMs‹”1D¶ÆP‚Áar„ P*•pØ€<³Ù-‡å‚¡ArŽ@à´jÀ]Ø|!o…ǧÐ@ –®Ç‘T<é“$>i`QÈQ •*XCÖPÈÕ@†)˜Ð3H­k'od€µpŒg“Âá
- BÐTÀåy9ŽËõrˆÈˆ²9
-#°zß×Íç×Ò.ýeö`7]0èf|·GR[+‰]p´ÒIQ»@íRCµ†ÚÖµjüÐ …–†5Ni ]\ßNzÓÚÚ”ñ—´_—ì˜ù$éùó¾g¯ ÔÖŠl7+×ã3b=½÷ûgzxÓ;ØTÛ«Ÿ™Üâåª/î"ÿÐ>»U†vÍ¿ýrZƤ Np=ßåÆ‘ÏÜÍ\Ê=á¸foÅ¿¤ë<¿n6íNë¬ñѪþ|±Õ°Ÿ›˜Ð—r&ê¦ç¥ºÆóÕAÎu…3“LÍÁÁÕKšgc½ƒóÝüœúÌu%Z¢€j§ùB®ø¾êlŽob|Ñ1¡×ž>C?”F›šF{-ʳÚ¼ m'ó~Ôòlï_l΅ץ軼ëN˜¾Ÿ·l/•ÃX³7íXmxí6þ‘`Ξ£‚†‡›Šœ³ODÍß)ËñbPï¾ñérz;mýåºG„Cqäóª&例 ÅQËññìLî™Öó|S_õø^{°&{×Æn®\´}=Eh7Ð;( ¦‹?-Í{½e´7Dkç(nîH0£woß7Ÿ=è¨u÷ûj©_+µþüÆV­ap•QÙlu¼g‘õÀ j©ÒԹРË¥
-©Rú:A¶'e¾2K¯ëš—ÕÜ]¶À¡BÈðØrú£ìϹ_œ24m²š‡¯–DBßX«:¶]s¾c¯álŽè¸ÏŽÄuؼ›[F¥~‚–ÖéöÕ‡–Yú츘ý~¡éŽGŒk™¸ô•u|LýP‡uyâ!®Ð©IÑÔ`Ø}¡ªÄþÃu ^U h¿•¼9lXZßx|—ÝvÎAUNI÷Ü–Y wlúÑåѲLYå—ëüÎñ 2cÎóúýç|뾸XE@ɹ'†ŠÅ5RïŠ{Csžù÷ôŽmÐè’DZgŒE…Ï-ª¾ÓÞ%’áË]¢›m»iuÝêæš²ÂÝÒ¹µNëß q8ÔqYxÕÁwWGIï“öqê2âÅ«„“Ë]¾Ö§s‚z CZ#² ôp+d¿º¯É©ÝŸ™Ÿ/* è¾¾sD•ÜØy­<ÿ'4ZÖHh¯Þ7‡ÏòkŸ…/Ø̺÷Á•øO¿I©áŽ·&]íý|tÍþ s‹žTÌ«zxóÌždE*¨¦Ö °ÿæ¢ü¿ÀÿD…–㦑ãi”ß
-endobj
-1451 0 obj <<
-/Type /Font
-/Subtype /Type1
-/Encoding 2732 0 R
-/FirstChar 60
-/LastChar 62
-/Widths 2733 0 R
-/BaseFont /LJYLGY+CMMI10
-/FontDescriptor 1449 0 R
->> endobj
-1449 0 obj <<
-/Ascent 694
-/CapHeight 683
-/Descent -194
-/FontName /LJYLGY+CMMI10
-/ItalicAngle -14.04
-/StemV 72
-/XHeight 431
-/FontBBox [-32 -250 1048 750]
-/Flags 4
-/CharSet (/less/greater)
-/FontFile 1450 0 R
->> endobj
-2733 0 obj
-[778 0 778 ]
-endobj
-2732 0 obj <<
-/Type /Encoding
-/Differences [ 0 /.notdef 60/less 61/.notdef 62/greater 63/.notdef]
->> endobj
-1439 0 obj <<
+1457 0 obj <<
/Length1 1199
/Length2 2269
/Length3 544
@@ -13373,47 +13742,52 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚíWWXSÙ”(AŠô„R‚@
-¨ÔÐ`è ’“ ¤P¤
-‚ÂHSŠ"ˆ¤)Ø¥ˆ`!Š‚Tv,)‚£÷€£ÞñúvßîwÏy8{¯­­õ﵎†*ž gEf€vLGƒDcgZH
-¥AȆdS ƒÒ†Šµem˜!Klø’~8 $AE¡~¥a0ƒÁˆþ%D¡1ÈË푹¡(w-Œ :âþ€Lð6*ÈŒÐúh3´)
-â™lÚÒ‡BŒ0?an4R0d³¡CY†@ù§¤¶ “LcPQ"‹üÝ°“¸,¤ÓòIA±ßöT"F‚$8€IÚ´7¨aoÓüi+Žw ÚÝg¿pU áét¤`›³|ðIEÃ’ÓÜ"þv yïJ§•)YŠ¶é&ÁfÖÍÈÕ’RÉ’‚©
-og6;c×N¬AtO¢Û²È翶‰ºáð^µzÖ[ÃÜæŽ$!…)¿~Þçå«0˜¢ruY­°Ë«m3Ù…Äw.ô8W,¬×‚C%îËÙzåü½Z[}Dο™“ªm–ôï¸f-jß—bç4L(zŸ4Á¶Ü¹¢¿XÕHY8Í -3Új°#tX·ëŒ'"ý}b‹µÎéÓÜ—o䓼öT«µ•ÇV•¿k­|Xr眶æ…¦òýÅÖ}­¢’üæV!è@M¿|ÔXá%ïØž2o‹3Úlµ`Ô'äŸ:áwBþ¨ò‡übX˜²ejQ§]Gf‡:û¢GœýyñÂ~‹kº…=OǽÖ;­Õ˜¾âMS0—ó`“q掘~øR˜¢XrÅíÑ/|-7¢½Õ8gèÌ>Xª(YívÃÙ#­»§ä›÷~‘H÷F׊Vû‰¸Ï&y´%¿½ï»þY1KÀs㛵Æs3ãÍe‡×êÁì/_-CÖ­CŠÔyç¡šI-ýáÄ”’km*xkù1㥦ü‰íb‘GQf·…¨ͬÖð¦pa_ÿ·;§Íõàþ0¶Ó¬vOË?xzÒqǼsåùgÙ/÷Ì< Í|}Ž_Øæ•¥39¶×ïÆ{¨k?ß#¼èrS§J îLý:9ýÍŸý½ ½^[\È+·|Ž–¿ÖõÊnòfá­U²£gíjî¬*¯H<˜ÂY4ý£^Ø1ú
-œ?Ž(àï},—¦5e,Щ1^–q¿XþîÊcÛ9ŸF‘Ò[ûìŽå_µ„;.Ö™þŠ°'¾ÁZíºw·Sö» ;=ŽRÒŸVÉmÒ3—ÐëZìZ]¢¦0¶x€'¡}Õ»^u6‚Wõ×Ó}G¬Œz8ŠfÏâTD³éoN×`'çÓ±9Ͻ´|>ÄQáž_ú1sãwŽú­TÕZ¥gž‹sYgÖ•Š€¿~‰µ»Ìüp"ͯ\RiàÏ?U†ìMñ lÃåWƒMLKÃ禵dž†oÌõ6°?+ôůFÑÊgq‰¸¢ªÌÁw’¢}ÄVˆy^X§§›¾mNÒ zx ºkwÁÎáJŒ,/•÷ÛóÕ§
-ì³À1æà‰4;z
-(Ë·àGuÿ2Î-X/BMÀHL6Yïv¾wÞª"¢c¸ë²Xn‚@6¨KÞ”Ó¬¶s°:Â?,ÍR4ú·M–:iÌ©2Žƒz§Üª’ FeˆòKÎ OÍPq® /¬¦Ë3DÈ3‹#;ý$J­±Ý½©Ñ
-IuÅ )CàýÙ9˜ð„×7e琉æ {ƒvHF=­½T–íG¨Mó}ÕvŽI¸zH)þF¥äù#›y*¯íÛ$X+ a4óÎŽ3}I±~DœÞî7 óëíŽ=¢Û.µ=ÒëpÊB«—˜?õ:'lH( “ñ4ÖúšÙ·òW4Î΢†f€šäÛðùHƒN¯•1!-¡7×,̶eÚ8òú†ê¦Ñüš³øñ+EÒ§,Œïóó$,|¶¤>>“õgs |ƒÒK%‡‰sf2Ï.#[™"d·õÄÉù‡1--*BäðOÂŒžv~õéÜAg9l.óVþnÏC¹æ[rÑÔw¹jëÝÏ—«…›€6\“ßZo:âus :xð$<3ßµãSGçåu½ïù:íU.wÑZRSÝæìOjó§Ì-“:‘?Àñâ«|´î,¼¯Aµ •¬ha%™ Ù½-ùüÑöYFaòÕâÃÜ€;A¥°J@K^c‹T–S&•¨±¾+íàÀŒy÷€Û˜jS!æÙ=ÉKC~*)‘“ÚÒ{ô†x VnW¿h©¡…wð¹¢E]„d¿yçÆgêÊé'mÓT"p«³¶kÖl­À.ª´D”½l\…ÈWâíÉäÙßÏ'Œ>m9®I<¦Ü6 ë:©èöé™A¥Þ±¬#ÙòÈG›p
--ô³:Ë5ŽÈ¨¾ÍÐ|RO8þåâ=çç"nT.B(p?
-óÜ~•/²ß²w×cÁ{n4 e²~וŽC³ÀÝs™y{]?ÄímBH8ßBìð/͹˜°à:ÈõWÎt7|.èzýø½&ÞêùŠôTÕä]êÁFσºvh_L¨ã#o$uÁœGIÕsÂO¦Æ}rÑæ:–øÖ–Ǽè1œ5݉¶y>j± 9é^tû¦ÔxÑœÒÐ]Þ&«gæaÉÆõi»ª5Znú2ì*ÎVÍ7%G¸ˆxÛ‡‡{>‡·‹+<W
-Ø£¹m½ÕÅ+™çýr®ŠVq‹-A«Kݼ‚¼†iôŒSf\?ÊÃI“hëñð”佩ô4õ¥ûBòÁÊT÷QAïëÚ£FÕî'•#Ú1=6ˆ¸°¦²ÊØž=îÝÄçÑ'¹ ßËïeeeHPAeØ禩„S "k*¾@¸ñpúÊ2NÖkŸêܳâ5dSž]|x,Qº¿üÜ™/ùúï/0”º˜'e„"OToë`ž>šÑ+êÛCÌ'¾Œ‹¨ºeh<&n¦?–&iá’@–ÜXÄîÞ—h+UÄ’ÇS\Ò~Ÿx[l#(Þ*וÔkßtéÁAl~Mwß• ÁÇâ§ìDǪ]‹‰þã]ì™´âRYD\¶¶)+¦./'Æ©À¥>¹¿Îg…keÍÈÆéÒx½"K †b΄a)+Uö¶Äp‰ñáGê…xª[½zp‰ôlݺØ-nZw#×P×eeZÒr-’§ö…]Ë}S'ï7[òt«ýŒ8­ñ)äË7|Av®•+‘õ©Þ®óûéÓ¼öCÞ–1»”£á5Êd˜œïõ¥ökž/5_ ¯â®ÙU)|kP5C¨¿¤Sý_>ðÿüOè ‘Åa†YÁðhȆ~(—þÍàÿ;@µendstream
+xÚíWi<”k2e$"ËA<daÌØ)ûØ:a4v*cæ™1Œf±oÅÉV–É’#[‘6[¢Å„ÈJE©h±d‰N½ê=½}{¿½¿÷y><÷}ý¯ë]×ÿ¾î‚,§fJ¤{ƒ–tK D
+ ‚0tÛ¤±pì€
+™(B‹ JXÍQX4N\õÅ’ðD
+kµm
+$@…ªÿJC?=˜þKˆD¡×Ú#²Ôh”@6hƒù;
+…P«ï÷Õ~èp‰t5ô‡»ÞÔ÷îµt·³VùUÿß=ÍÌè­ZWPÓÐÓÐh¨O}mÍŸY¿ëñM‹5+Où»VÔJ‰èm Òò[[A ƒ Í*€XmeàŸüvt…
+ïO¡†þ"îgGðë…ø›îgø+»)L5´ÆW#…iI ‰X
+‹àóuv¾ÉM\»  –Τ¬^q(DýæèC!øÑ@&:”5¤JjA#ЉÀ± Å3ˆß «0Í`@:­ûmO¢@%‚`H€ Ð »ûÖnXºh*¬öâ¾f«ŽÓ¶Œ<™Ê5Žän±÷;/©U0¯—™‡Á¶ûUy¬·]Ï•&i‘¬ì§oÖˆÜ($/Äm(ñyi·ÁæéMˆîT«Dú1ñìü×æ¡w¬ßË–/¸)™w
+áè"ÑÛ—Ü_¾
+´‡IJ—UòÚ¿PÖ]Ž}goMr0€õqš0(ßØ#Ù|{n\yðQi;ß•7‹Â•B^ý·Ìøµ£û¬à¬šioI·óºM74–}ÊêIË9EÚ{4÷Œ¨v]rA$¿m2S9µí"ûåñ8×Cår-Å‘eÅïšKt^VV@¿P”~¸Ò|¤™_h¨±™G:P½/Ö¹ŠÛ´&,™Eb´w›.›e#5pÙÎyž?-ý!;(mâ+›×aÙ–Ú&ϼæeuG\y'qÔø–jnϳ)×í¶›æyo¸á¶MÊèº,ØL”‘ º~§B…(¹%¾¤}âË’#ÞÊ–¬“1|é,‘Ÿ(×^S{ª¹-'lV¼ñðg>áÄ)7T%¹'ŸÓBœsKüÛ‡»áŸ%Ó¸\v¾Ù¬s<35ÚHtd³̪îfñ$²j«ºŸfež[–z#¡©?ŸPp«E˧k&þ"bªÐYohzß–Óêúí<äFFsPC¯‡×Û±sFgz0èX*–;%eŸð¹8c³ÿÖ®ôÊXúËCóR__Êmñ
+MS™™<ìyç ‡9ÜutÈ9(¯®¡C&s©z«˜ÆîÏ^®Z®¯¯f›<G‰ßêze9s7÷ÞщZËŠÎí<Å%±ÇX+zTóÚ„¿“M!r†?á‰JRšÕáêP˜*Jy˜/~}“ŽÅ¢{=_áÀ½#–g?‚â¯ÀJ\§½Yª—$쩇Ÿ±Rk‰êý}¤£Ž#¶£ÛB¥4æ$D2ÔŒDƒU·t­tûn,“˜\9ÆT¾éV-»Ì)ûëÙ‘S¦Ú=,ÉG µ$Ѩ÷›í-Øù¥dƒŒç®Jî¢Èp—/ýèE„Î;f´zÙf©1—•Å´Úš­µÂÁð×/ ,ëhBÎ%y I üù§¬í°•„í¨{5Ø@7ѺsÅzNyrx$Ææ®÷bo ó³D_ôF¤/ }ÐŒÊ+K|÷!.<Ö}˺-.W·ÊÁ)ùzï&ãT}+ï
+Ë90RŠå gýö|ãÍ\ «4p’>x.É’êjwOË<
+6qVI¢Ï±¬å;Ä6\Õ.B_·‹y¦¯å°üÂt®h%…8¿2~ÀS°ÐÌ »71\"®*Ÿ&¬¼¯íƒñÞ‰ytËgWúQÒDª×w¿Pè³ÊëE鞸Ê$W-—鸛'¤¢ï”
+ŠŸÚÍ‘ymÕ"ÈXŸ £u´]ê‹‹ôÄcÔÂÆn·Úôðï½Þâ;ªÖl›†’/0åw½Ì« JñF9
+›½´ô­š‡ÖÕ/,¨Ï×
+Mw=h–%µe‹ã¼ ñÁö|nVþ:A.Ïá­Ï¥¼)îÝnzíFêÏŒ›ü%¾ì|PÄôz7''«f5/F9$Ö¯îl«ˆ·p~|AèÁljŽüÒi9þxi¢Ó·Ûme´v½l÷ÓÒqåˆsDT`CQidÏ!'K¨óìšOd÷2ÒR¶“QO±ÊL’ "k†T”}>p‘äõE¬´Î[ŸªœÒ¢DÆ®=>»­¿øò‘/Ùï¯Ò¤ºèçExBΕïmcD¾>ÒËïуÏÆ¿Œ
+.»§¥3) /=™$dlCäÞ™ÇlãÝl)”4 N%8H$ý>ý6ßœ[ Y¬+®×ªáú+œõ–¥MÝ}7vøˆžµäŸ,wÈÇO{Mu1ç’ò E¹b1éÊzŒˆª¬ŒÛûêøþ*÷u¥¾æã;ç
+£ÕòLŒi’ÓZ…ŒDÑvÁ‘“£ò¹X²cµ¼_Á¶…ª­‘†ŽJ÷C6‘·¦O¦šP2ãgûŠ¹=gÖŸYææqq¬üŒ¸¨ðÉã1¤õ‚hW)V ºà^¾#Yå/æ³gY­'pÃIË„ÓAÒ>Dé^éõ ÷+^)ä7Ú /coÚ‘VÊ{{oP6…§¿ C õ_>ðÿüO¨ žÁ¢ûã~ðpÈ„~(WÿÍàÿ Ù@«endstream
endobj
-1440 0 obj <<
+1458 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 97
/LastChar 110
-/Widths 2734 0 R
-/BaseFont /NQJRHU+NimbusSanL-ReguItal
-/FontDescriptor 1438 0 R
+/Widths 2810 0 R
+/BaseFont /LLFZNH+NimbusSanL-ReguItal
+/FontDescriptor 1456 0 R
>> endobj
-1438 0 obj <<
+1456 0 obj <<
/Ascent 712
/CapHeight 712
/Descent -213
-/FontName /NQJRHU+NimbusSanL-ReguItal
+/FontName /LLFZNH+NimbusSanL-ReguItal
/ItalicAngle -12
/StemV 88
/XHeight 523
/FontBBox [-178 -284 1108 953]
/Flags 4
/CharSet (/a/c/n)
-/FontFile 1439 0 R
+/FontFile 1457 0 R
>> endobj
-2734 0 obj
+2810 0 obj
[556 0 500 0 0 0 0 0 0 0 0 0 0 556 ]
endobj
-1363 0 obj <<
+1381 0 obj <<
/Length1 1608
/Length2 7939
/Length3 532
@@ -13424,7 +13798,7 @@ stream
xÚívgPTݶ-HPPÉ™&çÐÉ™–œƒº–††î&K(HÎQÉH ’sÎ 9#$ˆ€øÐïžsn}ïüº÷üzõvÕ®ÚkιÆsŽ¹VmVF-]^Yª„p@óùž4`ö–Î(]°ƒ¯ÜEXYå‘P0†pP
G8ÚCзÿãºP(
²BÂÑ€Û¬Z
-JñDÛ‚Ñ¿s£`·n
+JñDÛ‚Ñ¿s£`·n
œ6B†NšVµúz9S,nq2BÙYÒ_+Ÿ¦Þsà›`n'.@b%iî§ZüwœJ¯îsúð {^¥’¸úCHW —Z “èŒÁv,!ieí1«¥O˜–©í[oF‹£‡y‚öƒÛ¢Aùx@”SÜeMIƒZ|
úˆJý€•<.%sõ JŽÅ?ANïÝy¯2}oÁ[+B”z1’áž ‚`Ïtf¶¢tÈwŒ°ÏŽ·xÀ©þ™Ììè)‰ë{çqéœÅâêsn¹ÁâÑÈ!áLâ|®Å–êjÙµXùPüðáæN…:ÍâŸiËÉ#V
.¡Þ&ä± .­µÙ:á%%¯ÆƒÀ+Ùì£àrÒôdxå ~åj}vøñÅ
@@ -13459,35 +13833,35 @@ Pdž·ÕŽÝKcì" ÂñקÃ߸Ð|÷”: úaAÞffñ~þµGµ³+ìMk{çg1Û»tîO±¶)0ÞÊœ<vŸj5Uq"¯}h‘ïÎ[
ŠÉËQfþNÒúðÄCzòÛgêg_åD6ºq¸I“ª¸ÊFØ2Ëv­Ö¦™˜¤Pé¿g¦Uu䂱~Õ#ÉUz$¼
ÇHÄ•vËÕ$«x-‘–ß™š¦#{eöòÓ`ÐhšDŸâ°º ë«×^9ÁB0¤ñ뫽‡í»˜m×ÖÜ¢Ò ¯-‘+ÖŒ!ÇBPŸÕvî¦è ·?§¡ºƒ¼E^$‡ý…’*O*n˜.—Çw2wÏ5N¨°xNÂø,†éõG#ËÕ€ª“ŸêÅUOr3~\Å[kÒ¸! 9×0ϵ
CÝ_‹{™éÉYŠúð["šgì2eàß$‹îy;Þ;Ú
-_ƒ ÃižòÆv==·%!Ãd2KVûBàùü€ÿ'
+_ƒ ÃižòÆv==·%!Ãd2KVûBàùü€ÿ'
endobj
-1364 0 obj <<
+1382 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 36
/LastChar 121
-/Widths 2735 0 R
-/BaseFont /CBGEIZ+NimbusSanL-Bold
-/FontDescriptor 1362 0 R
+/Widths 2811 0 R
+/BaseFont /IFQNBV+NimbusSanL-Bold
+/FontDescriptor 1380 0 R
>> endobj
-1362 0 obj <<
+1380 0 obj <<
/Ascent 722
/CapHeight 722
/Descent -217
-/FontName /CBGEIZ+NimbusSanL-Bold
+/FontName /IFQNBV+NimbusSanL-Bold
/ItalicAngle 0
/StemV 141
/XHeight 532
/FontBBox [-173 -307 1003 949]
/Flags 4
/CharSet (/dollar/hyphen/semicolon/C/D/E/F/G/I/L/N/O/R/T/U/Y/a/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/w/y)
-/FontFile 1363 0 R
+/FontFile 1381 0 R
>> endobj
-2735 0 obj
+2811 0 obj
[556 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 722 722 667 611 778 0 278 0 0 611 0 722 778 0 0 722 0 611 722 0 0 0 667 0 0 0 0 0 0 0 556 0 556 611 556 333 611 611 278 0 0 278 889 611 611 611 611 389 556 333 611 0 778 0 556 ]
endobj
-1360 0 obj <<
+1378 0 obj <<
/Length1 1166
/Length2 8911
/Length3 544
@@ -13499,7 +13873,7 @@ xÚízU\\kö%‚»înA‚»»;PHî®!x 8 îîîîîÁƒ<$ýý¿ÝÓ·{žæm~Sõp¾o­}ÖÞ{}ûœz)
U 1Kˆ9Pveá`e
„8
l)qøCÀùÏ$AÎ@‹×¦¼Øþî›âöùØ
-¶ü³%K7G6-0ÈÉ ('ù?Á¯ò¿0k +€‡“Ÿ
+¶ü³%K7G6-0ÈÉ ('ù?Á¯ò¿0k +€‡“Ÿ
qýñ$X8x8þÆiÚ€,ìÀ@—׳ø“‚-ÿ–R
l±­®¯SiælùOàÚÂÍÙùÕž?èõÞ¿öV ×@O òÊ"ÄB0Ô¶6´ý¡ZŒØƒe’«Wëî·97rŒ=ô7V˜^e»bîÜÛwŸ³$UÇl„+ `•`¡Ã㉥bø<ìøÅ;X°°Ã°`d#‰NYë„”P/駯Øûˆ¢ R¾Kx Ê^P”ÝéÑKL`i„CpHôœTà‰ÉÊò+TŽøñž‚ÏUdíýÕàçG:%Ùmƒ#RPä»géäõQOï±+:°LûÅÑxæÃe]k/͉õJø:'º8ŸlJÛ¬žªGóy乌טòQK6‡ Ñ+íLvþ˜ð‰Å16(ÎñkX„Éßš†+…¨pœº–QÄ´Ôß^î)RêÔ[W,,¨Þ‘õÉ»ãp%n×)iuGYÖǚπñZ¬Õˆv4¹›îµ:®uľõ­«GZýÖ:„<=Ÿ@‡ª˜yÝ—l:GBÎÚOAs½À:rÁUuiw™ª¨,w‘ʽVç±ÌwZ6ç]ºš½žWßÆe ͹„縤h£öÙ8âØYWÑtÔ¸c}ü5æ?°5&Jt”ùËÞ¨—OÉËÛòÁHÌîZ‚pr_‘\OœÅ±„4šß²~òIÝbâí‡y"ûÊ“¬4òŽZ¦¿;‚Àždz™RÑ t[^cíÆ=ðàæ÷Ÿ‘øÜÏ•ä =X}§^ÍóâÓÌ:Ë;}ß %[µ, ýÉЛ>µÞܱ^4AXç%ä#¬wÛ±W:eÅNã¥S¶SÈ“H f÷ÖϦŠKuP ·}.óF!Ö§•"k¯“/ågö«ÉФÁ
 ê2³Õ°"Ý ÝkÇÃñJ
@@ -13529,404 +13903,470 @@ g~nM"up^ÅÃÓíÓêè” ,{!5ÿ8¿UËn
Ðú‡ä9¬PjK¢!zóÙ!ñHaŸ´Þãïÿ¼£êOß,?€úVÐz¾’¢Œ¤ñ¸gTW-Š«XÑèƒðN¨PÊ94X}chAc~‡^ÅûI8Y½-°Ji ¾á.˜<®¯ÇIâšo,¦ÙNì¥#ÊͽÊûÊàùk¤lùnýh2³ÒþÝu<Aíâ$FŒþ¦ÏD!þ:ƒêj%FDõŠ‚QúPÀ„´èÖ#מbG¡³°ï\ùe%mËf›‘g'CÕ䦨 Ñ)Ê$‰‡x`A%*›H«¶#Ì'å;…p‘ûÚ9ß/iÔ¤N…ï#‰yàE×Óz˜8ƒÄÛ¼êpXe€N®Ñ †µ§r%ç˜û7¯¼Çé&ï`Foùª’׬ó›}tW™ë',4Ó‘õÊ™‘8‘À`Z*\-šðú[Ü‚JåÕ®{i!Ux„T û•ˆ¼‘‡ômÙ85û)îÛ¼e¢ý¾KµÔÌ;¨žè{ÜÈ¡¾è{´Ñe¼Žò»~!–±l˜×R¡^n`žTG?ÂŽÎCMž—û[©s¬ ;ZWÀá¤ì`±3iSw-iUÉCW
ÚVâ>xj„E‹ŒwêIo³}‚üH—ã
Örú ãkÑnT‚e¿S< ¢x K»«- 1…‹54ËÆa«÷-ÕÜ@ÚUóªîÐsL/}8ÀѶ›Ñl¡ò‰ó9È+ß©O¹È¨qD‹£RKˆ7hëÀûÚë,l³Ž[‹x³#‹³ÆÒ4
-¶ÿÚ®½–ZJS•ñ~´õÓp+S!¨yWC6Æjy.Lä“X5­ ^g˜Â£˜ýÿòƒüÿþŸ°°š9»BÌœí}œ.®ç?þ€‡ü¿
+¶ÿÚ®½–ZJS•ñ~´õÓp+S!¨yWC6Æjy.Lä“X5­ ^g˜Â£˜ýÿòƒüÿþŸ°°š9»BÌœí}œ.®ç?þ€‡ü¿
endobj
-1361 0 obj <<
+1379 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 2
/LastChar 151
-/Widths 2736 0 R
-/BaseFont /MNZWGF+NimbusSanL-Regu
-/FontDescriptor 1359 0 R
+/Widths 2812 0 R
+/BaseFont /VAVHZL+NimbusSanL-Regu
+/FontDescriptor 1377 0 R
>> endobj
-1359 0 obj <<
+1377 0 obj <<
/Ascent 712
/CapHeight 712
/Descent -213
-/FontName /MNZWGF+NimbusSanL-Regu
+/FontName /VAVHZL+NimbusSanL-Regu
/ItalicAngle 0
/StemV 85
/XHeight 523
/FontBBox [-174 -285 1001 953]
/Flags 4
/CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/five/seven/eight/nine/semicolon/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/W/Y/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/endash/emdash)
-/FontFile 1360 0 R
+/FontFile 1378 0 R
>> endobj
-2736 0 obj
+2812 0 obj
[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 333 333 0 0 278 333 278 278 556 556 556 556 0 556 0 556 556 556 0 278 0 0 0 0 0 667 667 722 722 667 611 778 722 278 0 0 556 833 722 778 667 0 722 667 611 722 0 944 0 667 0 0 0 0 0 0 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 556 1000 ]
endobj
-1320 0 obj <<
-/Length1 1624
-/Length2 9769
+1352 0 obj <<
+/Length1 771
+/Length2 1151
/Length3 532
-/Length 10632
+/Length 1713
/Filter /FlateDecode
>>
stream
-xÚíveP\í–.î xÒ¸»;ww4t5Æ5¸Á=×àÜÝ‚»k°>äûî™3uîüš9¿nÝ]Õ»ö»žµž¥ïª¦£ÒÐf“A-ÀrPG;§0@ â`áê¢
-uTa{µ©[ØC
-ÈÉú¬áðŒ=“i@]`.–Î'àÙ«†ŒÜßqÂl€°?¾] Ï0
-ÃÕâhýÏXÎ`k 3ÈìâòLóÌý§:ÿÌð_²:9Ù{þe ýKë?c€À\ÀöVì\ÜÏ>-aϾ­!Ž†EÑÑ
+xÚíRiTSבª¡¬2©¤j=,Œ‚4ÆPÀ0"FÑ„I‰¹7ä–ä^z¹¤ "T¨Ê²ˆ.EE©°ªÔ¥–X…p"­"<ÂòùªUpz¬««ôç{¿Þzçü9ûÛßÙû;ßÙ ·Sã1Ž‘Lˆ AT*8€:s84#ˆ@$ŠcÁ
+H ð+uÀ]8|!o™Ç§1@žj Ðd5 <‚<'H| Ò"ªT`@ª Õˆ–ª¡Th€ W¢i`‘FÖMÜHë4„HG` ‚
+-ª1üÁÀµ©:!€‡›JFÞŠ“"0ªÓNÍJH…UŠ°d ˜Ðrgù[M£zŽ@I¥¨š4dG0xªÊ¿Iì`ñšy¬×_;™ŒP )7¤"€ó'{2†þŒ)“Tâ8,¢ˆÔ~wJ˜Ò,Sâ0Š%.Ï(Ba QCDE< ƒ=@ô”b6 ÃIê
+ œÉ*œ Mü«7°5HZÚúàvòÄìQîM`Z` ®Ïd.ã&—Gµâ,÷|'û/D¥Ž ŒœÊ w±
+¥<E=¢¤™oâJß­Ÿî;½½&'¤ªó˜­gÚ|ã‘­íç·2ú²†z}®?Ë‘~wÜæø)zÜ¡d8ü6¬âõÑO‹²L™2ö¶G“½‹gÅ~ÙŒ‡Ê¡øÄi—ËÚZ?ÐÜqϼВÚèõð÷gwÓÏÛÖ­ºñ+éÃÓknÝ|õ$'eSGŸÙîkØ}°„–PvfÕ^$êŸw‹®Ž?Å«psõå¹ñûŸ9¿6Ó[ït§Ü¶7
-àâü[ruúævþ«@Œf†é9 êhï
-ktòó* íþ)áëB¥æ÷•!ìµcÂMž3‡NÛJÌ;/íÚ“À'¹¾4Lyø+ô-,;¦…Ø©GúÑÞ§ßUÖŒø9õv6F4µL îQ(ÇZxœÑN¯™hÜòi¯œpü,“¿Æ}ë…{Qõùðˆ>aÿúŠ¡g°¿¯·ý¹s›œ%+NÄ ›>*à]¹„‘n©w­¸ìà0>¦I‚Ôõ’7¶_„›üë%^ÍœKüÉâWöIñ‘ë¨âx&CêŒm
-ä¿àh×ñ€F3>ÒaáÓ®GÀÇíí3IúYbɘ¨•šâÓ,&ÿ$ˆ)66ï7¿ï†%ër¾Ê_îoj_Yüíl§¾v‹w'J‘ñwÛàÎ}¾ÇÁú„l±•÷êµÂœé7ƧøêjܪŸl±Óä½
-™ç
-™zçFˆoxDÔŠ
-’ÆýŸ ò¸K`º•ü~O3¶Û•Äd2.›ïÈ"oÓª›+sÅ¡9&˜qèLÄä÷,Ä”U´Æ—ÀÃâÂ.©éÔ–ÉâEƒ€"~ j´ xÙ
-ÛrɱÐ×_[Ú)±£öô-bݸ= ñÍ —öˆÞXi†šÄʨ}— )Y§(ŽRìº0U²Î<©¨m.[*ÓÖ)EûšÆŽG±W_óâšîÅœ^sÆ•U*âCw-ib|Lñl±œt‚z•ìqz«ç£©•´:lÿ#Xæb¿ÈîmÍ«akÔÊÆ¥is¯Iq8?#33¬YÁ±æ–Ö
-U£p¨íùz槗÷7§DË\Ô2éª^ €4¹œ¢Ë0i΃@©”NtiôV øÑ-{î- ^ÒßúCŠQRæ—?S„›P·Öh ÷DUÅ•ôm| m«QR¬Û|Œ¾ÄCún§¯yè…Å>p>7ðÝÀoì#O!ÿë˜V©Ã¥ ÉBMb˹ ëgj„“ñ¹ü·]Ìį?y¿ZìtpKqtŸáçí¨84Îd‹Syþ¾¬Ÿtv­´‰ß®U—^òȧò ²®4-íÌ’ÏŸDáYÜ›wöjt¿Âî}Ä{µóÉŸü^9ƒ›‚'¦Ežbõè>ÝL»âï¹8j¯(¸¿Ò10#·ŸÞy¨”¯_Q˜qÊýªRM­¶#_ì<Ð'Þ:^ìö³¾#ý½¨¡&QZz±ÆÓnš
-0L_ÅÈ™a攣×w¾js¾ƒ¯kc‰ÓoÌòAoÔH”¾•Ým<ìè·WpÔ Ç>£E/óMæ¨
-¢Ãü)Ä‘‹™”!‚¬QMžZVçü£ÅÙ?f t˯f'+jÉ 2& Ÿí¬1~»3Ù]*¦eæPˆÁÃ
-´(®×áú7¾õu³°XDsÎФ-ßæ ‚ä< ]¤UO_CÑ÷ßC}Þ„©Õ7ã«$³$~©T)*üſתŒ?p3Q©}ÇéÉ“h†Ì ?‡'²½KµƒgòëÎA¸t,´ïG—½Æ2ÕqJv¶"ùÄÓ/$zÀ¨Âo>Óxùå„?æe“`µl˜&eo^äkbMšn«Ä6-ý…ù.Ìúo$KÅž =_Í@Ÿq¿úܳ}ïð¾) î†QZ}GN޾Ȁ"Ÿ× k¾Åš{7&H¢ñ©5ÞbTü®ãÔw6”ˆø×g¬F¼×ØNF´b¸ú ¢L¥p1–Eñ‹
-[=@{TÌÏ à¹ä„á£úVBØW
-e?«ïÀï9Ìüï†LßÓ;Rñ÷†yá ZEåÍ´% ¢ ÕÚeªÄ&Ù—dwàšÂ#ºŸ1X*Bè$XË5Qt*Ñ"ŽNÙ²”äÞÆx©º…”éÙ)Ÿà7,5Í<²wážÿð€¿($ò/ öý²ÉG
-©^0?J¹Þ%S0F½¹a[A3ª_NáÒŸ5VÿBÏ~
-þm!u‚±Ý.óû<¥X¸L-åÀ£~Næ;9äWh·¤ý/"Ù+‹bˆJú;ò®Ùf—ùMØÅÆ©ƒ’™Š”µÔ›ãÂYO±"X{6´¸8ÑO YÊd–`+…þµQ¦ÞáÍ–éŒÕae±ÁwmÚÉlSäæøFBîÕÛ‘GšR™Áëxù¯Ÿ<ýö‡é/ûR#¶*w ©"/@€P+JcÞ‹¯_¨L$¿mìS ©—áV瘛hòÈüÀÊ[†;{Øå\I±Ú>k¸ŸÍ6ò®LèWhÊÛ§d¨n%ôÛB%ÎK÷7­8äÇ© )ˆ¹S‘£ª/OjÛœSNÕ[7’•ªq®÷ç„ñ'Æ °88<ÉŽê Æóß>q`™“a Î*($}RÚTžPÐio £·f›oa?ÖxXž“`gôß%î;P»®ùÜ°R>)5Ë5)ÀÚPoX`¢ø`*7…ÛÄ»'´«®5ùÇ+Öúuïno¬ﮟ9`Ó<´»ÐÜëOÌÄpâ’ÞÀæO!&vœÝTéR~býî¤á’ŠWQ|Œ\!EÐ:¸ çB«eV>*EÔOþÂÁs º
-µ‚ˆVžÍ¼Jæs=Q‹•]28m*~)„2…ß<òY§ó‘˜
-D츜£/3à¹LÜZ‚(1±»wéµM ÓyKMØjY,XpjuG£äŠ3UMx9½gèOl´zÛ~‰ïß4û/}è´÷tUj»^É0Ô.½¤ÄÍ6fø¨·ÏÇ´ÉöH¯ƒÔ³˜-«Eƒµ™6y]Î(.öˆCŒú›
-þbXïýÖî——UçN âô7&#ú³yź)¤µ¤*›= A+Õ/µwªY|§î«Itô^¨œÞýøŠ kc!@Ìâ×Îoé–TÐÂKª¦ÅY&ÉŒåʹÃI
-“Z#ω,VÚ(œ”MÕÛ‚apa®šR虶¡#ÖqW3¹©aþHï«Û‹P>koQÙYvÓ}y»´7ˆP%¤o&Ê5ëÉFpJX¿šG™sÈè’ºñÑ Ìã‹AøÖzŽcøáC ô5slì‹vRuÆê=|aOLÙ!ePÇyL­Ÿ< ïíïaàŠ)æ¥:K,…_îãþ+t2†:Šu’&½ïë‰ÚxÀCÒÄüTœîS$°#géDèxúl+ÍãÌÍqä]‡çÏsº÷=5¸Ù³˜–ŸÎÕ{À¥pYqBx;µ Dj/YØ—ý–3¿¯&„¬¥d±ìTâ”qÙ+W{|°[TNôƒñ—SÿP¶§Äh™ïE?ÐC–Êt#½l
-Ëc$9h
-XGô.£Œ1Õ“MáX<´¼¢y¢ѽâ ÞÃÐÓò™wN7¾·ªûTÂW¤ .Î/ Dxh!Öw·%ãTÜHævŒMië„»t*‰‡Šm-õ'œ¨²Exz/s…‘e³Œ£ë›'>À&­.`Å:¡Äíy¶*9Âï¼s*q$x°ë®L˜L}ÍÏ3û„ýÆæ—Âo¼–N#Õ¨åc¸ „iÞY·S÷¡#ÕÎt@
-æ@à§ÃÍ[tW a¦Oc³%r"|”É åoxªn‡8àÅ•Ô6úÞwuÉ^ oG„$®Ðè{9³IÈêÊ£¦9]ÏÛ/FVÊ,‡2§Kv¥mLA†Ü`£ùvÒÞä«ß>ìÌTF”‡OhÏ‹#¬É}D¡j«Ä>ÔwLæEUý•œSm×òm Õ˜_©C=D4É"Û†,QVJ;2IÖ 'ËÆ°jW?EçÆpë«iœŸëÔÊ(ŒlÉ—km?\æ ]«ü+ô»¯òOõRÑÜhImV‚ÜÖvÞžÓJ–¬«i†˜’®ü9~.Åò?AEWðZQ†ú2Šo]’˧Ž¦¯F$PEy¸>¦ëD’à€q’_Ï•o[¤KƒægK+Óq¥õ{MÁŸÚyª¡WÎT°ÞW
-ÛÚy—ÚnvI]Íd¤L%úk(““¬Àj@bÙñó0µ§ÕŠ)'ýÇŒ³Rf•±åE*Ýç-å®}€)W ùR Wôœj»•ð±Cÿð81fôêôq®úø×'DÎßÃîÓ.©Â¹U´ûÅKmM™úŒÜÒ¹d¬âyd”„è™Y~¿ôÊ@=/jÉR½è¥ö.5SØGäšl‡e‘ÓŒm
-ÈOâÙ~Ù'V«™S0‡xÓ™8C‰œ†d£Çýsûž"¯¸±]¸ê´î>œ³æÐ|ñ‡™
-Jünqèèרô§Ty½šƒÊ¿¥I·Aq—õá‹Z%9?)¥§üŠp¢#^lÌáŒðÖ„„I’³ÑÉ!´ðKˆ«åWü–¾UÇCÛ¹†’º‹×®z*®éhíç&îÝÔˆ¦ÒpXNƒéÁc¾ù."”ôÃmPU›AJÒàäÝ
-Uf’å¤<k}Ì 8’„›åy1eª«‡¤7óÈu’p¬®¥s(OeTh—{ÀbÿýßS.…ˆKÞ”PJ=ËjgóÜê-Ô_h®*!Ô†—óXÒûìfÈ“7æÂ4{í]ùÉÚÒ‚oyâߟ0EY.Fœ ÍKŠô@ LUOŠi^w/Üê7¼C(˜ÞÚ÷‰éƒÛ~õ¨ºØØÕÔë’K‚qbHØÔX˜‡+…Ù¹=€ž£Zgk·„¹ž³gú²¹ÕpW-;ÏùzƒÎñ7°eO›âðy~⢾ï´m*Œê30V.o ¼/ƒ«ëŒF¨±L¡Ø65<_w¦âchĨGN Œ}tƒ®ÛzIXÈŽ«‡ü¦³ÅƒP†P^è2Õ(È—ÖÖL:u¹6—qéÍq‘Æ”7œ·Ö“íû“¢Œ—oŽ£å†më/û6ª9r~¼xtM—ÙlЮƳ ¤Ë4¯†‹30ËI(o³ÔIäÈ@¶Ô„Î<©´U'T9Eí”㦷™{²ÿ|Ð\¢ˆ÷4ÊNó> ÏÒê(HvÏÆ-nÂíÌìä`Þ0DEâÌ
-ð¥ªT Žºù&¡‰àëvHìÅÎø—â—¨|2#‹ÈûjàÍ­~ v ]_¤sË–¸÷£dLý¶‰¬óªl?@7~ÕìÁf/Ôý]ŒéB¾ˆúT-êS“H¾Zª[Ã,›ìÁD#wÛL­øÍ”PÀ68I…ûs—t5\œB¦Ïq G)fŠ…î ÇÂŒ}”ðª4,m¶Ï]ÍŒš£±éŽ@·Ç"4BËý˜ïÎ÷oŸ¿ˆ9uK…é‚V¨‹Q2dY’㇠•oÐXë\\ÁT7ôéL§ æ“Å=„«ßKì»×…ãåÞB^¼ïñ:e:ºûA¾ºÖˆ…Ø×%YäÜ´évJ÷\«æØYûùJV},6>Þšv½øÈÏi÷°6™’^¸OøM–!kÚ^Ù»<l‚'ƒvØCÜZ{óâË!3’î‚UDpì廚ŽgŒ}ÞLªzî…’b_V©ò-DÔ7™h~úÐcÅn»aV¼þŠäãôî´­Ô8Të/Añ^»»£öQÁ*I9ŒëMö|±s£[CËÈP¿Üù†«Ëeõ+tÐÍ ^‹$¾qobC!,cˆqÕÇ_ÎÌuMÔÌß`ÒÔ0Ù˜ú¦BÃညàŸJ}!éGs19lÏñ»Ö—³˜ZéGÓ*HËH"$o—¿Ub-;¶e;žÑœôGé?Õ¥AÉP§ãè}/¸½B °}¬<‰6Çz«ë=ƒS`ü¤4#\žÀÁhRoÜ;½¡ó”sTocíLÀä¤MøX÷ÓÃQ‰
-½å>V·.—
-ÒÜîªQè]‹*ðåVäIw8¶ñÂi›M‰œÌ¿$a| ÙòȱV¼ó i×6\…¼“Dýð¹¢\ý£¡J©ÔK•¹¡áXl¥ÝöVƒoÓÞ$âbÌegž#ñò¢ïF’pÌ ¯Úè‰Ñ^rÅ
-¥›S+YÊ;Ūìâ?¬_§IÅ>Ø7!ÒÇÏ£ûQ
-aÑF"$²¯Ö­|3ß!i#ÌT<ÆK[tô p;w»Ô.Š[°
- £M~Ñg<ÇÿšâNÜ~¬Š$’
-œ\7±?·-ï¿ý÷¥“ MEo,ÖA„&±}â÷ÂE¥§Þ[:Ö¢•P’º‹qݼ¡©Ù¾u¾1b’0W—¦‡WG&Ù¼2ª¡t7· ,Îĸ—Áw¾Î”…uÑÎŽÕý9f8xºH]*ùY=ŤÔ\">_xÞä¾dB²a×/Ë—œ{íÓ›ã¾p‹Ä#åN³Œ„„×ÙZ¿5ð
-‹¢T4ƒ %ŠÑÔfj ÂÅ4L7¹ág¿«“qàïÖÈ@¨DDF‰šO`„®vÓ(…dE^€É0Þ±½ß­O{_õÌ¢„Îú‡Rô¤ê quâat¼ÉXe²Ì¾ÎKä£^´¹î¯é,’Ôªy–„ø<œ§c9\`9[B½‹º‰¬ÍDªc£ø,̅ò=åÃÄ3ª"&‚Œ™ž :XKdÓNBl|ÂX y‘|$F¿¼EcL;×Sü¾g*›EHç8’‰¾óűŸôûNYµ]¿FiS_q³;¾‚AiœôÂÑÅúÈÝÃNÞ‹Üwæ¬J¯@Ï“¡–ËG±M· 3% ÍÀ·°XÄ óv¦18+M“wÉâý÷8K‡ó–ŒÀ:ÉÉ/Œ-y$"£âµ°S]{:‘)EÜYíkN
-Ä¢ƒ7Ó*e¿§Ô¥Ä‚¦o‚¶n»éPà:m;Zd%«xc¥Nâ™aÔŸ?¥=€ýZuxçY+¤ó^¡Supã}ÏC£Õ,ô\r”xW)<çK qm’E+Ëç‘‘DÂó_ïŸÃñÆ@V7³îÒ³3›”a¤)dÚ?·Ý‰@xäÄÀc”´Ï0̓ºÏó"óâ½û™µrJóòZ˜JÅ›=2Ónñgkù"áz@éóa⵬å½µ?ÝæöP¤!}•-ҾфýG¨ÈVËs­Rñ²aTRïäËâ‚k\Ãb¿U¶.ÁãgößvQ¼h-aó•âœrfAÞ€ÊUÁèDZ$ù('€»¯LM£/hj¸ÒRöâfòg ¶ËŽ§ÝÞ»'ûêºn ³XÍw‡W×6>y~ëF—Æ”§üŽÓúÝ—HÒN•Ûë{Bk}ÒLþo†ô&‰¨¶ßgÎ~Á¼Ù„¨;¥rÁΑ½‚ãi?:±{Êc<ű26ÏÞSˆS¯ÉIy¸z/´Oœ*kYi‰ÙË6lRºQÜqà
-8¾÷z³ž“pTÞC»e1—´}FyèAò%Ó¼&Té³ ÌPæsî'éÄÕH]†ÌBøÓõöa"unáQaÝ,«N”:FÝÑû£i'Ñ£1»Ö[¤$ëêj€þFuÙ¡dò–MÏ~Ÿõ½bœ¶¹k½žØMƒGµ*‰ÃG”0õé ™ØЀBBVÅBZ_Âë /y LæBÀkˆß–œ2}Â)<ª2{2nUb^=èΗx¨oDÒš6ž_›ÊXÒÙÜêÚÐ×x¢–ÌnM¢É'¦WÍäŽî$ 9Jœ )o¥ÇH—ð“ q\£ÍÃ/Ïîí3
-†µËÏú蟥çf³ÖõÄ›M÷|!¶g#=êŒ.wtCìz¶u¥'}ò°˜_¦*›­PtÜaŽw’ëöR\v^ èTª(Õ:¢_ àT·Q¥´æd…úê’ƒŽCð×F³î>{ÄÉúÌÕ‰&Ž]bÑØ›Ë+jžÅýr¨gt2fÄêÚ+ÏÞ›í–j_€âY^
-ë1£äª .WÁPxjSÞI#Üʪ֊ çtûuiš!Çî½ÝSo·×íÓ8€+zqõSÈ¡,È!ë*T¶CÌ]ˆX­9v]&8S/¤ê`諺aÄcmHê–ELL.&Í·c_ƒ²ÍçˆSÈ<:~¦¹OÅ;E¥5Íq˜ÙŽà¶?ñv— nŽÓŽQ|oyèNÕïo磞YHºÜÈ÷”L¨·½ÛìC$?Màc¡"ÇN7ÎâbLnÙq:
-§¬ì:9§ËY×ûM¹6­È"Ù~ÝßïJ™uz¢ƒÏCz ©aÞÉ!âÚª8µs¨•<Ä× Òð쳯†²Å³XcÄ*3å²›Ëj†Gˆ4£j2Æ÷Q@\}’Tyž¸¢i¼á8t‚ê·ý†ó`gh‡M£ïBD¸ëÙ›0Âp^*•-ºkjÚ·Z»æãÜd¨ ÅüîÇ&n»$q‡˜,[ijK„½½­%¡“îe6eS. âú˜ˆfÄ®ý>e¾î–â ¹¶« ŠØ£>;–¢‚/MòI”¡øi1-ƒ
-¯‹3ÿ²]inÁàÞËDÒ>{ÓЈ dx—v³©lò9 ‰N‰+¶¦zöÍñÔ#é)ó\M£[s@Z›ÉR'õRÇ}ËAÕNQ¹IuÒ.8þÌÀˆ‚;a?ú“‡ö8ζÜ8ùx ÐxoAy橵"wðõçÆÛƒã)ï¼àì…ŒÞ Ί@ÌcKÚ_Ù¼Z‚{+ˆ•\£\hr‹v·ñjÉæǸ((%Õn¹ð· V•BòÃ{9y¦gN°œ fµv*Ûï›s**o™^þ(Ú‘r)`lV3°ð‘öTÇãèή hYmš´0”ÚÊ÷8K¯6ù€›§vóÉy“Æ 7D倷»ò§1 \eÌ}¯ø§5ˆòþ[%fvÄÕ'œbÛ©ö¦&©"ò­ƒõ4ìË*Ã5[Dô`1käý¶Õ•Ï ê`•rM<4{áôUC÷­øwݲðãT5cï¨ûët©„U0í ¶»©kµG#G”Ä~}±yôd¹üÄI!ß©¬ÐGÀEîn‡NOí¬PË$‰šÍµÃ‡WgÞú©é!q@¥{ß®ê7ö$¹UÔî¸ò¡Pšè¾Ð›ÍA©a•bg¿fD(s ¥ùv®gZÙZP€=NÕòä9èÕ&çýw…$H›Àì×Eg—ó¹-}>LÁ•Ó¦4üF¸pâX•*À¢„ƒ0¸LM­+ª[‹Àãco®OóbÖŽÓ% Hé.. Ê X;éôN~'R‘`&‹¤­óH–$Ѹ½¤[*¶–›< ZG„‹m8Blà ‚`•‰
-& ùf¾±<£>W†2<퀔ã*õˆ¦¸ïÞºÑbï)£(]|Ͳ7.ÅBêOo_™íí—I>Ĺ=à[väÍ$ø¸ºBÎk[œ y¸;ª$Ô¶VÔ¶¨ì+Qý †$·fø‰AÙu­õ€•ô퇚|ÄS)¬ß©ãb
-ÞëÇáØ(>§"´Ô?"¸ÔvÂj“øÓ‹©OïDkº§«wèKêfhÔu­ÐàÕ–®L~vsÜLðw~ùŽø›f÷ÀGY¯y²™)¿ÓbOú©ogɺeÁ]ñ¡—êÅÇêá0 ·H—c<ØÔrZ :ÁÀ]>Ùã‚!ååÅÈؤüð¹‘c›€ù«ð#®QÆÂùOsYŽ\$yÓ&ˆ³±Ò„} ÏK÷ØÈó¢ä(ä&&¶¬SÊŠ¡ÊÛË4öË(d®NÏpT¸ #;®±õæü_>ÿŸàÿ K{0Ðu
+ˤ67Œ~/gq<õªþt e¡9¦T°R&œ9ßûzT¹X}èçfŒñon
+—þ6s ËS0àf|¿[’—]-‰™w¬ÂIY3OãZM·Fê[×·hý±‹ù–úµyN)õ\¿b(µq/c]ÒØ+Æï‹vNšðâEïó7…ô–‡ÊL7+×Ó¢½|¤{x y¶sè¶×¾0¹Å*Ô_Ý#Ea½v+
+Û´?ôg5JAŒàF®ËÍ£_¸›¹´ûÂ1í¾ò¥ë½¾m2í‰Ñ[ b/aŸôW>ú×¥–ÂÜDqP\oÒYù-¯Ëµ ª‚kó§'˜šÄâªEM3ñžÀ¹nþÎó}g;ˆâ-r Þe¾Ø­/z >—åÄ[p\è}°û¥ïàÏ%‘¦Æá#Þ rl·ÌKÙÅz _šéó›ÍùðÚ$C§OíIÓs–ìƒåY̵ûRŽ×„×l× fí=&¨Ù”g{*júAUF:ðMÏ–z¶16\©}L:E¼¨Lb±g[Z1³œËLçž]³çŸüºÛÿȺCÕ™»7=||kù‚hB»þž=5äó’œ7[GzBuvŽ!MíqfìÞ1ãûPÁÀ–s‡uî~1ß,öo¡×]øÇ芵L®£JžÉÑÄzX÷3àæJm­ v±\T${˜]MRçï%O]1Ssjáv1É8üêdUI;Çҳ┷¹j´RˆÉKNk–ZM»3}ôI‰«å±ùàµ0~Cù.8àvEÄú‘Šq¿»]ãº\ç+ÿžY&UIßÄÉö&ÍUeôs2šºJç9”냘[ϬÉü’ûÕéÂÆÍVsˆÕ’ø;kuûöëÎWâìµÐ–hžûühLGžÍûÙ+éôÏ°ÂÅu£úýua¥–¾£;/eD~˜oºëåZRòÚ:6ªn°Ýº,þ0WèÔ¨l¬/Üs±²Øþ“(MQ*ÏS¶ÝNܲrHZ×pb·Ýè:«¸kv~óŒù;7ÿâòxIº¬âëõþçùyéQçļ¾€Yß»/,R“pböÉÁ¢êƒÉ÷Bz²žüðüžmðÈ¢'Ñgù/,êÞ3>åÅ’¡+¢[­{µ]š¦êÒü=ÒÙ5NÞ u8Ü~ExÍÁow{q;ﳶ1úòåë¸SK]¾5$AÁÝ…B[VeÀØ‘<Ø~uo£S[
+(5ˆ‚ q­‚H¡ýN4Œ®endstream
endobj
-1321 0 obj <<
+1353 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2813 0 R
+/FirstChar 60
+/LastChar 62
+/Widths 2814 0 R
+/BaseFont /DFOXTY+CMMI10
+/FontDescriptor 1351 0 R
+>> endobj
+1351 0 obj <<
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/FontName /DFOXTY+CMMI10
+/ItalicAngle -14.04
+/StemV 72
+/XHeight 431
+/FontBBox [-32 -250 1048 750]
+/Flags 4
+/CharSet (/less/greater)
+/FontFile 1352 0 R
+>> endobj
+2814 0 obj
+[778 0 778 ]
+endobj
+2813 0 obj <<
+/Type /Encoding
+/Differences [ 0 /.notdef 60/less 61/.notdef 62/greater 63/.notdef]
+>> endobj
+1335 0 obj <<
+/Length1 1624
+/Length2 11252
+/Length3 532
+/Length 12119
+/Filter /FlateDecode
+>>
+stream
+xÚíxePœë¶& ¸Ú¸;Á‚[p—à4Ð85 îîîîNpwwww A‡½Ïœ{n¹¿æÞ_SÓUÝõ½ëYëYú®ª¯©È”T™DLl@’¶`3+@ÁÂÆÈÉQÞ,Ç$jkm¢hdmx>!QQ‰9€€ [°8âh‚L
+ fkçê`afЪ«hÒ100þKò—
+ÀÈõŸÈ›¥£…@ýöà ²¶µ³!oÿ׆ª 
+_
+0™"±(ØBÞ\hÿïºÌü?×äÿÿ4ø¤½ÿ½æþ{þÓ%þïÞ秖t²¶V
+¤/k`T\§§‹íÝ@€]QZ~®w¥m§Wrðo™áSU
+ºî\ÌUêVn†]_ý"Ô”cÍp÷ó¹uXm.VÝÍQeýÂ'xâ_­ç¿é¼)œs½q(ïìÐ<“j£pÛ0ê¡°ªóŽŽ©ã~ßÑô ôw^Âuï2dF!R}v†E¥ó¶Ï$ÒV/s¡”ÁDÖùE¾ìŽêâÌ MºÌ©œ}‹9YBb]™ºý^C÷§"mÇá åPÛ{ö»XPð´Ó1ðegçB˜ú”žpDØj]Éy&W¢…>**g›çL·V醤¯‡¬oöÓŸz ƒ—•å4Lm¯`o¼.W¯9ú|Þʆ¿Ñv. ©Ô¼~íkLMÀWrôêk¦ÈiÂ~©ŒK© Kíw¢ÏŸŠ ŸÇ}½^ã¿æ²—BÔ«¸<_g-wªðÄ·ì ŸCRkÞµTå³u‘£»ÒéðŸðˆ«)unG%E="Ó)­“%KÜ_½‹¹„È& %*9, …’Ö¶v£†íkEà8³»haøâ4-ï㊚*êFŠ+̈”®•„I÷\é˘eœÕss×·”¯ø•«ª•!´¦2cí7Ôaý¦"!šÿªáçÐ…tgšòî¹·þc|LDÉ\‰¤ÈäìýYX’sÈùƒÆwe•x¿µëSñ«ƒb+½:’3¥”ª¦åiC·IA(Om”9ž_-­í•òÚÁ¶–— žþœã®°‘‹s§É»™x§J¢àÞ‰9²úŠ$cÙQ¥R›Æa†·îk5Árk (q€O^XÉ#
+Ö%o¯ÇRé «Ž*í÷ÛŒþØ©§TZ"žÓr‚¸ÌñÑ~÷FËO,£àBŽ¯ýÐ=ê±+¯×ïˆhÓ”‘ô2š$ÞæJ•œE¥ œÉ˜®‡‰z<ÒX?w’¥n°@2øÛ,g7wå‘Nè3™ëýmäƒS ¯yèøN½¢Ø¯K>™G
+D<ð±ý.¤ÐÐ2Ž)—Ä=Z%W\tõ߮
+¸y´á+û8pÚÇf­$J ?®&NÌÌTü%þ<Ä –0&uÿ [?æËJÜ®'ý
+¾®¿BD™¸?7””O™¢×4¾CEsqa¨¹¡ y³äÙµ±¯ÖÀ¤+½öûSøˆÑ&3¼ËDl:—´s•n wùƒOYeÞþ·/¾RB#cŒÑ˜àc×¹Ç\ .ÞMJ)ª6¥
+âë_G€ãü4 _ëN9£û‘@§4@d^Òq·Í݉Å*ƒÊã(·_–-ùâǥʃbÐÄ»@e ÷ÂÊ6â]aî{#õ¸ ‡eà%pû}M¢'þQ]Ö @YålY š•ÏÏÕ†„vBF^ù+º“1m§Ç$"Ú0Ñ?L«Ú +éIƒóÍÇ)Õ²ÁÆs}ü¿
+
+Ðõpe¢°®Ij8¦YnU –é…Ψêk=<ñ¶r¼cô:¦ñïÎÑ3~eâ|@—‹‹{ %k,ŸÙ—ÅÀbmI ùÅýH
+¡b¥XíÜ®[këîr‘Yê¡Ú«A(üÚ“¿4¸ŠÞU—Ì>ä°,ò3M|xòã Tô7Á–tu`Ã71'3¢1}ãA/±¶æÚ+]Ÿ¿%âÅ]w>’Dúg9ͧ¢xF3<¯!F˜¬\ì:É æË{,â–Ù¿¶m—2¨˜y‹,‹gëŸÉ‰mUR‚ìíå­ÄON‚vyÆ°CÑ¥˜GÕ+Æ`vVÂÚ)ê4s¤‚”ò#æ͸1‰ r/™ßIò²Nh Øoú!uçÚÊÏ~ ¯1Œ7ˆk9ÙÃ5 SªþáiÖžW¦±ìÚ<!ŒóåIq)¨ÚßéÃ|•Í‡|Ì+ƒB§’É )[‹8YåÑ´VoÄ×° n–èͲp% ¬†Ço„X‚ÕÅ•§ÂU«rʪF¦FŽ—·Ýé,öü ü+žxMœÐy”É <æ$rʨ\ zC+Ç»p°cc46Os–WóY­½ÜøùdT‰Éþ²†ÇÛl;eùý ­éÓ'd8WYèö„34W®ª/ð̦÷õÃÐM£—УXßC¬­Ýœ1»Gül°ª£Xæo¤`Áª+ë"»ìYX…{Öß08røú6¶ÆÚ-M"(’Ì`ê¸:Aá
+¿ëg†ó(ÄzZM>$甃Õ*/œ_˜Çk»üs>sàráÛü.$Ûr~@4rÛtÑfîð¿¿äbNþœ©zEðlø¢7‹)õ ¸¨¬¹‘Nåül¤:Kb˜ôÉ‹ÍÆòÕÊÄ«_ðA”%3ãáº*ȇ¹H0oO혙±}¿Nv‘;3’6Ñ7ˆ ò«#úBÅ®Õh ÄH‡)¤@r†sóz±]$Wy“­ù¹{?á¦ÎƒæÒKÐSÃbª´+оR€$ÕÇ\e¶W¹go)Ú“Yµãš´7ç›qâ#I…ñU:'.r@ù õ¼hšGRŽWy@é2 AT
+ΨáíÚÓ+b7Ðk8B½4ÕE7$Ji *”ŸAQ@k—ÇÎR·©ê Qœã”=ÁÛD=who7U î{>Äe'¾oõß¹,tÕ¯¶r!Ç—ÈÒ‡š€öíÆäÞ¦4¢C~¶Hí}NYù†?H $§ _”!‰YzVÄàJDžãËlnË‹ý­’Úë1ŽP~ÔÆž|½¢ñˆ);R¦¯žÅgÙ1F†”þÞŒS8À;Y²›˜áܾó”d¹š£p æÙ¾ê<rò,2³¡xB‹¾àÔؤ zäïÛÎ;àÍk~>Ç]"Å…›þ¦îj=ûp-
+Ä9݈[lÄgaœs6øßwï ظY“AóŠbÜ´Ú‡F™,èÔǧÁfvX°Ô‚IX÷åc?ËïA eÉ—«
+° Æ›Á#âÚöÇM r|ÑgøZæ}u³­(£AñS„J؇1N•RÆMö9ÝVyðL×£]²šòÃO³5ÕÉô@µ¸vÓùú×x|ÕgÐåŒt ¤^õÞ‰¸A6(¤ïâ¡Tê#ØEqðIÕTÅ¢2{HÉ*±
+Ýhâø¯H¤ÅÈ)–“âÊ Šñ#
+ Û¬´–äx¾w®›ª-éè‚g•\<%ËÃ~`–/\Õ?¨b‘’õ+öxJ2N½LSèsc“>nmTé2ëìÜ?d]>øÉèâtë;!J~á„)| ´hð€WΖÖISÀÌt:5NÉomÍ9êlo|ý:oJåhY´=î#.Oû¨‡(*/dïÄ’cŒ’Ái£ Í·lM[ËCßóª_ø0Šý¹ÞÛôÊT¬¾ž=ÚäÇϼèP/©O¾†ú+b‹-b“CFgS²‹7rÑuÌ]~Lj:ãÄ”µùII†„{ç„ú®B(EÑëÃ&TžÂd@ñ¯ô½XÃ#¢qÏKžùö–‰„û|-¼ê[¨n_Ø0‘MH»`Ó†ê¢Z. JšÜ…[€©«Ç§BsñB©»>wÝ=$*kƸ¼ „Ö+ãÛmIŒ’pœàõrš¶ ¶Y;5té>¯å5:‘OjQ³ {÷
+?v˜;~Jr^"ìž}0ýª£HZä2=Ô&sËeD¶|£—øqïxL\XWÈL'[¢x!µ?ì
+ÛHØ™|½,µßzðlVz7¤ûd•Ïx7øóCvß 1YniŠÊÆI³ …y%"ÿ=bÔœ">ÁÀü'=yí¢eã—ÈÈæ”U—D©IZ\pcLiÿcL…´
+lÊ©4Ù@TaÊ ÉvX-còtéÛDÓó—¡S×4‚º¯ …´14Á:÷ ˆÇ6•_û·!ïôèì.ë¼Õ½Ýø"}Én’0èfeT ée„­‰"|£:ß?wV°>‰c¬Ç^µÛ­Ø÷PD“‡sŽÒãS²d£«a"ËàŽ°«VIØÒyl-¢Ð¸õ½ëȱÒÈ:sø0Êî°×ò¸u\ÍM%¸$¼Xi£!?¸„øSâø=žLÌ ª±»»²Œ¤ˆIÅHªÔŽ.ÞâªÁ2;Ý]´ÞU ÜóP†_aô·.Ê…ï·Ådp7ÅÂ
+k병-.€í9ž¿L&šš ¸£G÷é6?¢†¹^SÀŠMbcÏ7ó¸ äÎ÷%†
+¢Ý+=°„ãðí…>sΡÌÔ‹ãåBgíâï°ëW~“¼{井²TgKW±s]gÄƦ‚Í; â&Yî¸ý s\ñ°î~ÚŽ&yDo·ÐC€Ë’,JKºAÇÇŵr§Q °´åàÞF4tÍ5aFD5^È}ØT‹e!MÛ•K}Ö¤œ_P{ß~197ÿàÚ"“¬^ñá.¡dlˆMqã¼èzïësÒ\Žç%„¬²†}jv ,¦ºD§ b"¥)ìÃÚ; cgÿðjþï=pK0˯å3 }ÉüË4&“¾®bNfþj QMô½s·Ü!;Wª²ÇwŠÛÔ„ÂFÚAüÉ f£þœ°nÈÓjX’†„-öÓ¤Êk Œ}z¿gËmêon¶ÅsŒ_a½#}AÆßЖWWWW†×‚oš(ùÜu• ©uKË©Kiƒ¹T28"É…é…¹´ánHbØ#Íö~¬}µ“‰ŠMÉ*·ÒêÊø3îÖÿŠÐ·ý ?ÞÀR0LA™uHA“eãƒ*£ì“dÊË\YÅ~ô¦º4¿÷Œ«¡ ±OL6›^‘" à©êìΞÞä#Dø‹„l÷Ñì6 ÅÔ]_7ºÌ®D¥Ê
+_Œßåø_Oáêù0­eØPTN¡TàÞµ]wÂX›ö%7-ß2™û•´Ý›×|»ÌÖ%8P Êß”ú”PŤL×{óû=ªáöù;H4×OÑ5¯) à°”•ߧÔþÛÇQ¶‹nŒ"ÅZÓ
+Ð&`ØlW¼w{oFÝ÷‡=ÁßCò{z©¼'Ö„+!“ÙŠ=RÉo¬Ö˜ÿç…Ë›2w€Ÿþ¢>‹Ó±c“Ū°´™ÇdŸqLCyÓ …$³¶È=B+Zäü‘ÿ­[G’€kÏZJ]faO½òá×ÝúLæc?£nè×”LÚ–´.
+ÿž. ×“¥’ ÁJ™8ñ*éûº‚Ò§á)v9ÜkŠ™”úîõºô!Ùé^ÞhÂÕ£öcèmà­~(8vfá–=2c˜´…4Š>æ³hõuKéËÅ1,EòB|jiˆ-ú)ħ|1¯é½Æ!Ml&Øñ”ÍONÔ§H[àÈ:eVT”†ACÏÙgîï³É©LÓyn³€CBKm÷¢¥.=kƒ õÐl@Ü¥ã6òïI'ßßýô]”Ãã­²ù õÓ•³'¶ ßOótBHäëpÀ‰µšôn
+öÏz¡ªÄ€CŒù|®ñ½j÷ã§íÚ¾>©*ýfÀÏŸµd†ñô$ó¯ã " ¨s ‘‘Tèó÷}(¤Xn¿~}B-±œ ªm|búš`Ôü1XV±ÏžïB{ šúÚ;–7\L`™oƒ
+ç„œ8•õýçjÒL_y|9gfˆ®#—Ϫ¾O“ÖøË ¦ü²C+˜cIBÈ °·Y‹~,†{T“­N*e÷çwB¥Š|ÇÆmÂ>B,ô1eQ„¾þ¢ön]…毶úƶ-œ‘
+¥Ìò*<É5ŠÔ7Þ«™ˆÁ_P^wqž§Ä?ËŽaÂœ_ûÔî¿u»wÄFø¨A*õ‹Êe…¡©ðÆhõ}¬—SF‚‡Î
+xuãÀ4£C+Ý¥‰?hŠzÑ2AzoÉUÜþx.å3òO,ÒÚ]˜“*½]4O¶‡‡H¬Ê¢ÄÄÕ¶.y“nŒrÐ%¨ê#cúÌóÔu÷mÀüfYì×M,fÑîÙÅì㪆›ý6«ûÛœû‡®÷‰t29ÈÂЩÝíTg“õ—1›Q)‚¬ýE´q*(ôƒ#€Un?OCkaÙÝ\FÂÇÎX¦èÞ
+5³Ï.]Œ>ø­¿£, -î\yªbñ…v›ûÛ®-.‘ÚŒ?2<
+û)<»Ï-Ìň¸áøÃÇF®¨Vö^ñV% ”š¶Q‘+`µ@–ü=?®Ø —&òÜ’Ü?XÁT~ _E»Gmx9[P­¤€zPžÕd¡ƒãRÏ\OÊcwøh@²¡ áÒ¬-DkO¦=p4)OC²¶ ŠXÓñíUÎd-êóA&Ó…ÝžºÉJ-ú¬ðÆ—5šãuvä…‹FRùIÅ©¨Z7/ƒ„k¦7‘!Tꃵ=Kßò;]d+gO±òâW‰;};ƒ
+eïÏùѦÈ4Øk’ØÞ±Ô×äÖ¢HH ÝÞ+†¤fÝå¯Íc –«<}³ö^ñâi“ó”RÇR×z.©ÙAeJo¿tW 1¶¤ˆaψ¶9ÖK]m(Þ,唘¸?Qw†çÆb°.³û HëZ[îÇN×N¸ÓÏ*W +,éâÌ
+ÿ¸ÆfMLhˆ ¶9«žlßgøi>ª¶ „ ³"ïG"~D&]4ª³¤n§Bú †É»sŒ^ö.Òt6>M‚kZzH~w`êVU:wË üG‰úçè ¤½DÓ¯@Î#{Áà—¥…?&z —Ý¥-"—ÕkFQÆvÂ[vYf&»Õv%îGÈ·›óÅ#H¼~æë:‘_$¢U‡<ôÐdØ]Ž7hɾŽ#;E’²:ðãmvÔ
+}zÝÎz¿†Arqˆ{I*_ÛÌ9ŒnOdÆ|jÚzó-Éó-eI‹žmÐæ|»ô¬Š·ÿ kï…rÜÚjönLR¼ßÔF­*8ÈoAõû%‰ý›·ß$RC„:ߘyÁ•›~Û ê…J'ÁÖB#÷^ÏÀ}W)å¼…nšÌÈ>åĘj€Bv91†b
+–øÁæK7g"‡æ֪ϋÎÏå0öø¨ö="–‹>¦ç*ÑÑ"ö( ½æÊÃ}3“jëëc7{ör1½5YIG`Ñ|á´£ñ±Í=Gâj(ü¥¥ Êe íeƒD5±Î§ùöG{lD•)æ5Ue‹ú2F>±ŽÜ¶aëW!‡M­ÐÒññdÖj((ɱ(„‰Ô‰ XžcZÌ®üg¡º®A¿³¹®nË$ýJ˜e¯nØ^¸%ÃHXtH-Á'Ø¥ÐMÈkd¿‹r¥ÅMœŠv^vÙ»Þ°‰TÞÅ°ëá@¯dŸÏê ™e{ž9w¸ŸºÑ2ÌÃ4ÃÜ·Å×*!´Êaó£Dž÷¡|5¥Rõ®4Òa!Lª>]öCGø\Öçôù&V?ð~ÄUÂü19V?îúEìÇ@·€†U;'ªe/í²­r3=›&£§7¤òZÖ“þø΢:ÄÉAë+ŠßsÝŸ`wØÁ›"¾ Kínl'¶ Û¥VË §Èí&/„:ïN(wX’Bç6YÜ{Ì#V; „lú]¡à\O“Z8ó—¤>@%ÂçÎ…ñNŠj,[–ðöžè2ÿZ¥ÀJèe½üNnš0Ç[7·×±¿ÂWü‰J
+”7LãH¨žÿmÒtƒüûÔÏÅ.Û`–_Dgç3—Þ¨ÍÜ®®,=P:>ãËt—sÕuL*$Ýs¯¿i¡ÁyÂi®6#9š3}3ôŠ$ÍÜ<>UÇótôf¯­œ'HF ­#ÖÕKw$©ÏbùBeáù([Ó85=¥†Š£üä
+ÖY9Îü`ÉÝ4Á’k;÷¶îæø`ȃ#vÔ5*r>c¢œ¥ö³hòwNkCÅ÷3çé.èÔS©Ã|©ÄõÂ0dAEóÄ\ÍH,vYíÉs_‚ÒÂé>˹fPwË&B;lû…f‹ñÝ6{¸ùíÄ¥¾ÿ ¼Çg\7›-jÿÔ°·†i~>ú™›Îuù6¢ÿå×r®›-i°ÿçÅhÏp 4u{ýËXnÒEô¨Y†l<Þ«`[Mèø÷MgšŽ]‚½³¼_Kοywø¸Á÷A´J’T놰§—Nµ™DŽ;f£¿ØûüP2 y•Xm#±6jÅ;`ÔV_ÚAéÀi@g>GëÍÌSòK̶UÐó¤á¨-ReŽM‘Ž\ýè¦)›L¨³ï-šÝI†:»lŸ^>k²“ú¼œ¼Ågä<\F-U:üDˆ‡Úû³qEùÅQæü›¦UBw18„²¥àÉŒ–žyJßÊ
+ª²´Æõ÷>Ö눎í•Eâx¹èµäW<X1é‰þ¬'®†{¥#Óxјt¨LUÒÒŸ3”Ï´„6¹wrøxÍwÃò†¤k²Ä͔׋–è:NÓë¸OKî¤bôÊêFmH¤ã\Œ»Ð€&1nÒ^M<úJiÜC+W˜‡D- 'X,þr¢T ßÛek)}sÊKI‡£à"ç¾›OzÕ¯
+c•|z{Ù†B ¨À‡·íA?̓9¨„&Þ¯žg¯ƒQÞl6…²t1£ Â[€DÕÙ°| $–,㞸. yj;ˆO<<¡u«"Vù!C‡ÛÆî7+cÌ.™ ÔHý‡H¯F'®¯lšöÝ) I³…ÕŽ"î…µÄÛ¨¿w ù££ÍŠ(É¥ØKhùŸaP{‹jáÁQ.’OHÔÃñ<ˆìŽ¥>Þ¤0á¸mïÜ„ÏuìTyí"›Æ£]C;žë­kXÿ›¤ÿOðÿ±5è
+endobj
+1336 0 obj <<
+/Type /Font
+/Subtype /Type1
+/Encoding 2807 0 R
/FirstChar 35
/LastChar 122
-/Widths 2737 0 R
-/BaseFont /MCRCVV+NimbusMonL-BoldObli
-/FontDescriptor 1319 0 R
+/Widths 2815 0 R
+/BaseFont /NBERZJ+NimbusMonL-BoldObli
+/FontDescriptor 1334 0 R
>> endobj
-1319 0 obj <<
+1334 0 obj <<
/Ascent 624
/CapHeight 552
/Descent -126
-/FontName /MCRCVV+NimbusMonL-BoldObli
+/FontName /NBERZJ+NimbusMonL-BoldObli
/ItalicAngle -12
/StemV 103
/XHeight 439
/FontBBox [-61 -278 840 871]
/Flags 4
-/CharSet (/numbersign/hyphen/period/slash/A/C/D/I/P/R/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z)
-/FontFile 1320 0 R
+/CharSet (/numbersign/hyphen/period/slash/A/C/D/E/I/K/L/N/P/R/S/T/Y/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z)
+/FontFile 1335 0 R
>> endobj
-2737 0 obj
-[600 0 0 0 0 0 0 0 0 0 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 600 600 0 0 0 0 600 0 0 0 0 0 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 ]
+2815 0 obj
+[600 0 0 0 0 0 0 0 0 0 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 600 600 600 0 0 0 600 0 600 600 0 600 0 600 0 600 600 600 0 0 0 0 600 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 ]
endobj
-1312 0 obj <<
+1327 0 obj <<
/Length1 1630
-/Length2 10888
+/Length2 12198
/Length3 532
-/Length 11760
+/Length 13075
/Filter /FlateDecode
>>
stream
-xÚíteT\ë–mpw÷‚àÜÝÝ-@€
-(\
-www4Xp×àNp×à®yœs»ûö¸¯u÷¯7^±kìo͵撹öGC©¦É"nî`
-’q°‡°°³²
-°
-˜Î K ³¹-ÈÅåæû¯éü³OÀêèèhëùw´Ãß^ÿQâ²µ`EfçxËiyËm ¶GþðײÈÛ[8
-Œ»C]ø¶ti ÓRß÷ Ý…X«´m¼L»AŒJÑ2uc¼Ïf•ÖaõyØtv7GÕ5ŒJžáÉÆÛ8ÏîÞ»àRß:¢û™¥×Åãµc6¼Ãþöåè˜6ùàî–®oxp ¿ó®{‡„)7‰FÐ 6:À)—DT_»Â;’iºv—"®;)ˆmq*ó‚?˜1û5_ÝN[ë’ǯ=×ç³"/LIê}Ä£›k¼¶lBñ«¨¯¾-š|oRkÜó&[Þ&±ÝñreéòDQnßô?ª[K79Ð7/Ù/–_!ýmÛÑŸ ·¥Ê“žHÕ]Çy÷A8­\¼ÙŸ.¶h¬æèú†ô“­Bj£­Öè®{ŽúÈ£÷ öÖt=¿ !æ¢DÚ–¶bO„t8&óïû·ù#¿-L.Ii§¼µ\’îžhRºª® xïN
-®°V
-(Š0¢™PÁ´i—µ…½g` äÒWDWN=%&j c6–K…Á×M囑êæ>vEÂëÁ|Ž¹Eʯ#«îu€U•ý9å™x¼.­dávÈ!ý:8ò¾€Ù€;pñJ#WT ¢Âª^Ûà'áHðmAFr4”,=gK3M¨Ì(R
-ª¦S0†¶5§(ƒç•ÒÃòÙ#ÀÀîœj›Ó=âéÈmoßÐ
-¸wÛõeä7ÊüÈ‚Wª¤I„ÜGñaquÂŒ†!q”ŠÂÓúF›ºNÑvw=É€ˆ ø?©þ¤ÝÊCÌõ ýß{?~µCâ¤ÝXœì†q&ç1j;¯ãI¢™Ô§U$´ö2s«Q6·oÛ†±Œ•°ëãä'n¢ªÌ(" iÅ ÚPV Ý£BªÎµqt¸Ö•Ým™Y•d>Ã[¶‰’¿¦ÛV­¸‰õ»ë+WÓP¬Å`,kE}±_Ys™°
-ä’Þ›«+;Wœ‹ò,ïV‘äîIº9^Ü¡U½0~˜ðâÝ^ ^ñܤOgn}Â]^¿¡%K(îù˜§½ÉõUÙó˜×òÁ
-îÑâ§Ó/ÆÔ€P +°-¼ÝyתžVý(/}_#™mѱ¦€*¥f~[ópÏ8V†ÉÑ8ï„$gÿ" N:<3Uwñò›ðžÂp6­Ö‚ËI&Rü¬ÜŠÊ“‹pžÓo/8)Ô+~Û Js§\¢­öÊlöí»i{UŸÈ»Ã»4´½ÌM_˜š?Å]FÌ©•A·Ö_\"Óƒ‚’Þ}#FG ïK}g|ÿñÌàë":ŠEù×%ñ’õ.C!+6‹¼R±ˆà!Qê˜_};¼È#Ëö]¿?Ü~d'My*½{·8¿á+ínßû·/ŸuG«ø0¢ß§ÒÍéÌ–àb“'¥ÿî¤ûm>‚ÿ«?‚´Q õÞ([ºÁfMÛÿŠƒ´–?Â…?¬Žžš.Tùô+ª©ãJ¦eUq8jrÜ…Yp?Á ½Y~H…#úò=*Ïqí·Ï™‚T蓦ò¡E‡üA‚⫘Lm=ÏÊ72Ø÷]‹Õ™+eÉ¥½õ¦ ½=¾¼Eó@•3.¹w¹Gãd“•.Å/‹f\OFJ$Qó:Ñâ
-ýò­Ã)8ȉÅ)7è_£Œ·ÆT÷ô壌mMÌœ+¤
-G¦©J¨ç­$î}0ÿx¯R7ë&K.iËP6RÔ.<,ë㺥1~4XÛ¸¥>÷Æ ètž•>¢Â:Ñ#)á>æk[¾»ïÛ'Îåõž¬Ž"¥à P¼Ê!B5ÿi‹ÒÌÒ÷ÀI¯´æ6‰ïíÚK²j?uFéi‰W!Ü’½ NÒ.TEtmúÖF°tŽ¹.†}-¾ü%`úµÙVîC¢p?VúŽÎëÏ-jû-fÃrÅó$î‹Ï„¬\AËÇlä¡NÉWô˜,
-Ÿ`bêTèÖ6çCÅx+Äèô@›þ`ÙvªlÐTw»J·ô+²ùøp4Tâî]” ðâú>êóXÿfßdO¤Ï£\Ï”H:[PC‹Ä²¡-‰­Çó|—ÕÏñÊŸ0ï³iov%§Ž=Æ‘»ñfLu³$ŒX«Dm|BØxz’‘: ÍDï¾T–[&n'îóšZ) ¶L`z˜÷Î(1ܦ—Éc¥œ˜*`ï3Ÿ+F(ò¿gVà/_JcÄh‡ÛÑ|¢Üm:rGæ-Ãì]07‰±?×›­‡¶­0RK4åÀí+—‚`îŽDÕÐLºÎ’ùˆ9>ñ¯ëwe£¯ÓÑ©<Ôº:n;=]7¶cm$Ïjô¨âÉåx¸Õ8>Ãp:'`=2’¬~'¡·:é'î•üc|±#úvN<
-É‹|9
-PÙ·åI,™ËúP5—ã´"ªYžBRÒ!¿Ñ)ÑEï…ÅEUÁO»« Ñ ¾ 0Å)Û»9Q‡‚áT¥áååh°¹íeýè²bOäo¿*Þeº}N5à„M=*,".}º.ØÒ >Dï7¼¤O¯·Äštéþ"Ìs¾Á%ÞÌø-".#S„ÚOXõNèWÇl„Ò]8T‹0üPÔ}zZÝ^„ð!¦Jr½fî:5…€c6Z¸ãGvÝ~Õ¦ÉþÍOqøÛÃÂÈ5Bl’÷eÆT5ª–ü€ÜØ­Özä€üÛ W–ÎòÏÎBÝî”}]Äè»vµ}V­&–h Ô0;5#ÙB탟{ˆ>â‚ éñ¯/bú3 13„;6é:®ƒ"|sjü”;“ã´iK—‰Öcˆ­^#kJÚ•üMCG&³ Ú#©Áœ¶}äe-Yò
-iÓpn¥ISÖÎ.DŠkÞë‹eªñÔY’ªU
-{&p–è°ÌO@¤)ˆ
-á(ÉÐ'k‚ï¾}ZuqåÙaÕa àuß+•?®Ò ,ç<Ü¢p)Lå¶c§z7ƒÜÇc®{Öß°Uþ­ÝûÁÞ_)Pùîã0Nh_4SÌbÉ- Œ”²:ã%¹îL¯EÑ)ƒªÇ7D.÷{¸>ÈL¾¯“G‰óEZ:|ÇL÷
-ƒÉ/¡¤èïiÔò;ÌóêôÿLšUïÑ[læQÎaœ¦Ñ>ñ³G÷™=}!C‡áóoΤ…ÃTD^ê~÷Yñ5l{ž³×(᳓* ŠŸÏgé­?»ñ\²Àå'Ç…îñµþ@vǸŒ‡¨óÀ9šæ‚Ã?ŸŸ¾èxŠBœZ÷ö´köö†dqÏ‘"$!ˆ íxðÿ"` £þmÍÓK›ë.¿ôe|ê:Ÿ†›%u@éœo('_
-¸=Äõ¹Â¨ìW|ÝóúõyÆ壹Œ O<ã–H¦¾kû»TCT•3SQú˜8EŠ9·[Éi{ªðãá²Çäve=§ûïŸ$)e Ù(ïöyï6bU_>`R¨ÿ™2Qt˜çR?=ÝIêbĉ& ¦yÍèZ÷;Ø%U¼å͇⌌àÊ·«6ŠnËLJ˜S2tqŠç+ÚóKÄ0H ûÓ'­½ª~Ï”aLø˜±ºÙ‰l½,£ ;ˆ$ùubq¹ñÝ8cC¨.b /άKÌJáÖR7£¸§ôŵRì`çzËb“³Z'º½$ éëý€Õ÷ÒÞù¡À.(?ü<Óo' ÂX£¹
-½‚ü\Oãl}çÏ rÉ^Ü ëcërhÁÄ{£ x.;9¹ž³¸#ÛO}+ö H‡Gzøå% Æ®¼ð§AjS2kí;<)Ÿ@ZÍÆ»È`n#çPglv<C[HÀB
-ó>çxž–HhÑo°þ¦¯£mÉ،Ģo­»L£ÇQ“0íñÅùuâ#ø2†Nü®{Q[V¯Àj¿¢»þ?ƒNWô¨?ƒt›á%¦qGGö:¼®*x¼ÃÀÌžÙÍÙ^?£õgf‰•çûúpïîLÂTÅ7^\ý?0[ÅÃèQÄè$†À×}ÝŠIÃP±ªÇdYvgä‰e¦w©Þ$àŒ¢_™ ×¹Žéß™†Ø'DÂ9ËŒ?h2ó¸%¹ß̆Ó6UÖ¾—õ„¯m“±(ò¨øÈþ­ÉæD¥«‘÷§½ºwõ¦$MMó:2ž“ú©‘ƒ=‡3Ït]ÆF±°i\Çã“%N¥ŠaÿÝ£ÛEK¼ôÑ×îŒ6y.G­†(®AM†<ï¹Ö~Êyõ.‹ï—²À.õ8'_e#åBâ[7Q:¿žßämø"mƒbìS ƒŽÆZá 4¨YŒ•{t¿Op¡Æ¨à‹!| ‘õj—/™§ÐLve§eŸ(ú]<Žqž(Á¨ð칄…ÏÀßù¨;ïAJGZ0ý7ùˈ¾†[(-®P+Uìp¤ëñ|\—;ï<?ÿTlX8ÎíDò§ ê÷ç·ÐÄßÇð“QÛ¡ª›¾ž[,d‰É;´Š±¦IÄW
-² ðêwòoÀ
-=+Ñ ºEg¢ŠÖyé5,˜bQÚ¥x®Û:>ùÝ27r¤v¨x©t¯½ <¢íæVþ–(ù’]”Û­®ÂãBB²ßâ ïE›Üä ?•ïd
-ž¥ ̺”k®ÖPú-F3{^.|àƒM],¿Òck&Ïý"§^{9D_o·äË•ÄgDwŸÇ>B_6õ¦F§zJ­ïf¬E§9åGÆŠ(IK6na mü¹¢äßúta\‘±+O|oÛn™ÔĺàÙ_ $üÔ>­Šäkës±7¡{^´2ÐX úñ©ã³¼€¥=Š&I×}µîäØsU5u¨ÿ’àï"VB”—~²rön‰Ã/A“¯>k]苬’)ŽÄìÂèÌ?vYèäF8ìúš
-M,b?Sœ†è‚-\ ì‰ûdVwÑIôœúá~Ö7ŽÄkeAø€›ÂG9”¬™C:¶œ<_}9TïrTÒ^%M…íŒC,[E
-tÓÎ@½*¯g :_‹»o]Ÿ°’cü‰·ÑcM
-}­+^ÂÂí¯e‚³é)À+-[‚fß7 j5$‡=á›®bÖ;tZs<u%/é*¶Èø²EÌèÁþRå´6*Fõ0N纄Z Ä4÷€4rð¿_ÓktV{zd¨%Î`n »Ú3NrÁ'ÉHŠ¡Q1Â\®©9à
-$2ÊÓ‰Ÿ (¹
-+ä—JEšÇ—éáJÝËÅGq­¥½oP—Z{@LŠõÈ_
-L„³”%$6$n”%  I1YÈcó³:Áì/÷HÅ
-uÎÂüÕÏÍ{1T¨—t+jªNìpC4ç@ÖîÅfÙä:)0ýôðt<P‹b¥7ŠÔÒ·š‚ù(23¬õÙMö+&c Ól.^85^Z£ Luü‰
-EªÊqÓëTéCòâ¯yÇõ•+«ûv©FZpÇZòU1ì´‚îâD¨4ùÓ£Bªg9Œ¤ÁÆ{¾Púé™S›vÑ$ ‡¾\ñxllË5çÍiéõ$éTlFÚ—}GÈØf<ü È -ü%ë2bh{açògôCÿ£ÜïW{e1¯éF¾'GŠ)Æa.¨³BG=(”ˆüªCÞÛjHk_×iêPtkºé7ïze›¶ý“tå9¬)U1M¯ž6¾¬ 4*k?¦‘<ꮢ±²àN|×P’.n¹||£ÜU+¶3F”MhÆœ ¡¦9Ÿ?hHû›ç—nr Þ-ä0±Å‡ÝÖà’U·¢PA7ÄÜFwæ°'ŽÁìÓÖ‘–º@çPú)B²àFpéœ=ç(®é…àÎÂL„N·Í-þÄYØÒ.ŽF¹ÏîÀ1­ÇN4.ì—{œH¶/ªB¥0¿N­æ%@»&ZëÑ»BhÙœæ¹áí„WèºÑ$Kí[Êit9œßë;*ø¢FÜíƒPk—×xøOyŒüøŠ¼ÂÛ/¯OwÙóp»B"6àl:ˆ›ŠÕ‚U‘eP
-Ç^; áµ³†˜¸ÔÕñXðÞŸÀ»b’¨®k€*G/·O3(|ýhÉ›ÐÅØ%§Yæ6ÈËM‘~OŽ¿Æñÿü ½}»—%Kƒï¦|º9W¼ø+[Xìè¤P˸—úòbhê~ƒÐT¥:J‹ìÛÔ
+xÚíueTœí’-îîNãîîNÐ ÁÝ¡±†Æàî‚[ ¸$¸Cp‚»{pw¸|ß™™3ëÜù53¿îº½V÷zŸÚU»ªž]o5 …ê' ™¥,ÈÑ•…ƒ•]ðè`ææ¢ rTbQ·´vS1³Þ$)°¥©+ä(mêj)ж´
+ ×T×f`bbþ§å/€™×¿#ï‘.@kG
+˜`KkS°…½¥‹Ë;Í;÷_·óÏ>ÿ©{S''{¯¿£A{ýG @WK{+V$Î÷œæ®ï¹­ŽHl ‹¼£ÀÁþ»…›Ó¿cî–à¿/ˆþ¯™ax/ÂÔähï°°´Bbûr}O  ÿï©Ìú¿'òÿ‚Äÿ+ÿ¯Èû?÷_5úO/ñÿô}þWjY7{û¦ïð%xß2 €à¯=co
+üµkœÝ,ÿ¯0S ½×ø¯ŽÚ–ÿ(ößøþ–w5}¿ GëwaX88YÙÿaºÈ=--T®æ6
+zôÙYÙÙ9
+G–f1–A‰°9áZm|vjeÅNÖž^X¥-‚¤a‘7°w+}÷ôqâ¡—vqžÈ• )
+šQk¥§”æLpÌž8;¿+é‰?ÝÁÂä‹Ì© 'üöîÇX»X•¢¢­ï ,TË‹¼v©°¢4)a½%ˆµT— é"ÕéHRDæÜa÷?}M»‚“‡ÝÚ ÖÃL—ÑÑR°¡Ïò5å7…ø^{E®êÄ~užv dR ÌÌU\.¬}¶`!Ø•[üˆÅ=%Ѹ3m4©$¢t¬ »Ôñì_È ëB«{J‰ƒÏU—¦®NBÈzN¸œ
+wôr®rl`¡©.Ê*Q\ÔâŸ7:’Y’µ›q:¾/-G›1Âèù#ëÀ•(¥jå 0©{ôšª_Ú’gÅ|
+l»>ÏÊÂôóí›QöMóð6$H3–k Aãm5Šk‰t}1»ü–’¦ÈdcÂ’txv³~
+kÉ8y!®løÅ‘Ðdª$ÂvQH?"ËŠfìSN2óõ%­0ºÖ÷fÜKF^N,G;¦‰K:ÄÇ’Çv¶/Á,¨*¶¥s‘ÆWùUD•M½p‰:
+¦¢‘H†©~J'O=é“«=/èWñ³<]º&r©õ\a:áwÎúÒ§/„YÛP˜8áiFOýßÓ"`e di¸ÏpzOŽãªÏsekrýv~›D…0!4*^¼C;† M˺Æô¤ü~ᘹu¸±7`èó3^r9Æpáóvýˆ±'™Ósóõx+I'|²1¨®®Érò*?+”0½©ÈýñÛžYL¡ú¥}ѵÒȼjW.½dfÛHû ~“õ=~# ÆR•ãÄÃR{±ˆÀTèq£ÝáÚ g *¯<©
+OYS0Xµm¡„sˆÅ»ŠC&?ÐEƒUtÚ¾BiÑþrDm–0;{¼ADwm;€N5žz bÀLˆmª=° ÄÅÁiuѧ‡Ž£Ÿ=^r)ê¥Îý³w•M'ƒ"ÀÈû  €™š>‰,(víkâüsÎ\æˆ<}z‘eCx± 朮äyXé쳈
+>‘sB+)±°¦pšô(;¤v“–±eMÎE¢Ä~.¶áC¿zØ“2ûgÞëiIoÒ‹ÑÇ2Aò´{!±d:X\Âjá´…¦0ibb¬¯‡Îi8½ÝIç9m7™"A9;‘G勇¨Z?qq3:,´ŒwyÍ%ɱµø(­M¸0l
+GTtл¾ïGÃ9ˆ/¹MÈH£F±ŠËûÝaÎŒÄ7­såL¤Q°=þæ—PfšÇŒªfdjœ_Œ“‹ÂYõ§iwV"œQ0XáRyöÑÞah!e5Ŷ'Ê^”¼ŠV­Ȉæ¡Î=±L>ŽåÛËê =_ϧHUáï+"W-6 „ƒÕc’)õ””ãˆWaÌiÝÝÃì}¤2©ëe§c tMÐsÛ#&Ix²Ñ Z ªÚÚ™O¹¹JÍMç…e=WCŸ£T*bå4ÈËü_–­3š)¹á'†8Ý­„›HÖã\Ÿ$`}[ŸçÅ5Óyô©Ó¸7Ú¹4ÕÃýÙL;N5–œ§ã<G¢bŒPfÚQÁ§”`ÿðµÃó…a”x¬¡!²0HQ7ÜŸKEô–nŠS‡¦OƒÉ"n7™£8S£»xuìkeñ(¬ç{ŒÝ5{±ç.i÷?Ðd¾“دèñýÐ_nm×q€=ŠLîV5¥­ò5æeh;ö|éõ ­Ù¨ÏøÖ -¦½(­£*LˆçÏ׋æø¦‡õv[=†q;æú߃} .~à¶Oš«Ek.}Áqá¦|e˜íK¢"ïÆï¾Ü§PWÛÅ¥þ‚滆p7§¡þØ4òbEÑ&Ç_JHïÀêýÖ¿¯ õ9GâO5­‘Dz_úÞ.ÿr«ƒœþ§xäÜyåø_­Â²/#XnÒ÷ ïW˜ ò¢æ”J?‡†™ßœ¼cNµÎ~lî͆MÉ=µ‹Ðn¿Lø9“VÈ\
+ ª~º`Ù`}ô•×rÜj¥Ìg‰¾öB}Š,'E/¼‰AàkÆðæ!r9KŸ.¥Ü\~B˾£ÅO¥I#
+2Ç—Ž.vŽBglI¯Ë—:€‹ËÑA
+ŒlÌLC{ ¯ÚÆ1*4þ³u«Ha1½‚6CÞ¹å ê^$•>äN™-¡OsÃÀH«iËb³—¤õOþÑ:”ZÛ„ôeŠ%,0XÈîÛ™óMas*ý¹±K–%„]¨ë ò½&é@¾¯®
+–»Ñ«¤ße+©Æv}%Dý!BÛórãÓAT^°üUé„脲ì@È7”ˆÙ~åGè]Ìd×Ä)ãÍ$ƆJ
+ÝÑ+¸TÉ)©ÔýPí)ˆ¥æÒ —–€¦Ä’ÛEÇØ:(«„>ÿ½­ïÏÚªÎòžÛê×ÓÍ6qî'z¥-ǹMîÔ-E2Á×½:åR%¿¥?5袪*ôIü¼ Fµv¾PeH`_ ÈtðÞ• ÏX@+€ÜÐÚ"03|7Ú¢®ÒÁI”W?_éq0Õk¡¼}ñ؆ƒˆK]e_cgòð ä1WêF) …‘ž¡hc¢ˆr;ºhíLÆkÜ“td20Õø±_
+üFùA³‹F-ªè+ú¡ÛïïÈPŒYº«Ã¾$m7 LŒQð(xsQ v²–DÚHϦƒû3Ø"Å·ôT¬Ò¸FAØ ‘K4öFJïlJ,*¯¼F†§ Ççêk‘}¡nªE§}NOëG|1Š¸sÒb®hÓh½KÙÔ† Ì-%Û°1ë"­m½ÚÒÁéçš2Ì·åTó­ËYÙ
+ŒeaBÂY tLü,WæFOÄ̓ÊüÕ=e[¦™ÉЭ9
+dçSk3Ä7ìj¾s>—Íw¡l×h‹Oœ\L 4€wéد¶¯„˜‹¾+Zz ùv#Æ-}ÅúlWüê+îÐo€þöh˹}ä¨s!¬íÍJl|ê³Îìx{fYý*0#Os¬tmn"ð¬¨üN^ÆÖ0V£@›_ªë²=ƒXñ¹£uö¥N`Î%„ûS¯ ÎœE¦ý‡zBá•ü»qµ[<­îqBýE¡%oDU±Sw¤˜ÀïE#-´Ÿ‘½ ¼•Œë²9mpòbû¸ú[‡yím÷ôµ¶ðüÁ;>
+Å8ÏJ;¯xð²r~ýI
+Dƒ2=7´þ\}Åf{2vÍχ{­¦óÚ!YDž©j 4íÐáÎÆ)JƒT’Ž4a ˆJÊ„Ë ãÇÖE0á/U
+ÔÕbìÔkJ~,ZLøAÒ‚´*éjô»XåÖìþQh{5íAN<ø•|é1*¶—T‰þ ¡©DM€ÚA2•qQ.©'÷ ø›§ÅðÉ>ļtÆH×8åŸ äÔ€ŒN
+ÌC=Üa·Þ±û
+zÄ}µ:á?Qãô‹ÙX£ŽS+83¦u6Dx@±[–èï‚[-^ˆâßëIÔ¸²z€Z«BP‡»‰EÍÍ»f䧓Hø#?ézߥMóÃœòÛ©Œ'oLH‹ð„ö)²^¹±à/˜²Ÿ‘¼F"xAà,e(ôk°.¼^¤Ÿd4Z&ª€&ŒÓîHgCGrZHÅ„o=ô¥’+nø›
+(«ÅQl¼™½ezžmÒ*ÁRYòþA2óé»pŒþÌÑþS•òÓvëÁâqhtøð™ô
++{M%¡„÷É-ghѤí¸Ê~hT”«ïÛ¾¬¶ÓÙÀ,
+ɇÈ
+à ¿v’d®oì@Ç;‡cM».VÍŸÓsd\«Püˆ
+%ž‚qýJNþd=øˆ"áQß$ò7JQ‚¶KEK[†üPn#¦ÕÛ5¼Nž{î/M]²õ{oú³Š›‡M%3Ÿž~nEãFäü…Ÿ[cƒ¶º U»Mw~”–pM3’âJA©OlÍ?Yö
+éi<ÆNÉßOê.s}Ëï°–<rnCœ ÍñÎçÌ`ñì¼rG7.ÔsG_í›#6¦ðêþz"D¨:mÔÀ~±ÑBsFš?'µŒÎÛîudÆz¸n.çÚIh¶4„–*=®—FåÓü@3ÛœõÆ kÆæ]tiÿÚ1êòÍ\…óùãj+3e¿ý“a
+Œ²ñ¯„1*Ýê-§ˆu«¸²ÝñÑà¡õnËí}ÇXA×–¥ È¾J[³W™Ðžúœg(DœYT¢¨¤%•Gvç[Žbª±³ú>|Í}vk´åÙeñ¹Ÿó\\Žã¹Wúö°? ‰§ºùâwDS~18¤”ÒÝÙ>
+üà¿#pîpÄ—°¬–s…¶’¸ky¸Ê£³»šzÚ ]Zî$sŸpÿì¯vUý­'tŽ¦c“è1B¤#ìÖ¬K¶Èö8̲©McÀG¬ò²èÆÙ=ÖD´fKßy2Ô ×l=kMuâ˪ÉYÔQûQi8ñr>Ãħû™†]­ëóõšãâà&óP€;„rW¨z]t}B ã깬>GûÑ[qCÝsTE-f+Jy:#ȺÊ'a ¹ø1VŸ8Ê‘°èÙGPòµ!"Š‡Ýw§0Ãv¨3‰Ìäþ„Ã=÷ã[i<:}dÈÖ!9?›:ôrj775b“2î«Ò+(W{Sù§‡Ð…Äe¯=áz1O¦)?^t7Tª»RX:%äDèW…6O8c$IÁ±xýá³nÆ·|õTÕYCitJòº[èF8 È!}—á²Ù´-(* –™ˆÇ†£ÉNIOK½ÏDÙS¡£X{ØqÌI`ghˆ‚·j.©¯sX÷ã—³”OIb»Ð\È tYfÚ²Cßh}m’¼™zwó=·>vÕö4Þ0 ÔÈ<wfºCéŠßäïƦ¯™ñ?Ñ´a+&¹Z2*ø'ÏGrŠ\ÇØ—Ùž× }‹òq~ç¢[!
+!øã
+ó(]ÝLœäªõ…ðC!àá?’H{'1ƒÙ$‹ÌœÌXO7 Œ®ÙLûX¯E´ïà äã1÷ˆûYº‘Ý®ìŽj#7™¹!a|Jã×ã?‰pÃo;óLsÒÏû:_­M.•uÀ²%bßy É<Yõ_ɲj–KDVÖ«„i0&|‹ûT‘þ¸â MŸ¨ #”(¨RæÖ®--“3?ÚŒµ.ò“Ÿ Å*ù\;õr°ca¦ò­””¬²7ÿý¡|ð,ûcé¬n Á"É·3Cu0üw|ÄÍÂG%¢p|ë_2—;\^µfEô¿Â¥uXÓŒñ·p3+MxKÅ>بY _ù¯Öe$gOÎë$Æ⻈3•MÏf™;oŠ-›‡D h¹¸êQ
+j*c#$Š•ø¾}Aú¿bLˆªïLŒ¿¢wž³£ ÕŸ–½z§­ZëŸÓœà"í!u½S“Š‹÷áÉÇ+ºzs»Ö÷’ ®Ÿ .c=å¤H!‚Ȇ?&73Éìl–Aµ*¾­ #]dàJ4ÂhÍOúá•]ápq3\zr˜Mj&šDØSø³XyöÃD HÙÞÑÚó:º Çæe´‰`}1K-‡$\ÛÌÎr^I—z¨M$9ÑgP¶BC… ʆË?ëz¦´ƒ™>,êÔnùŒÌ¿th^ôWàéìs¹ÖÇ°ŒÇ
+!à÷'wM¦è–ÎèP½ðûkð&&ÐûQËØÙ¢÷¶§ }Qvf/S:K¦\o¿hŸ4‹ÚïˆP°¼Q¤sûb÷×–úõÙ<(¯sU8¶tËB{üKæØiFÆêÛÄ›±Ò)d¸:uò½ÁÖÓ5NócáÏ6ÍÁóSDôO§)•’­WÙQjç×øÆu±U0~®ZrIÚ4*ÎÝü9ˆ¤š/kÁ[C¢Šç#¶ YíD½j„õ¥×8ª#J85¸LbE»ºå‡'›vÞ~]TžÑ•‰³²<IIwÛª“àsø*F Vx¨:χÓ5¼?¤ ³·ÝI͆–3ÆCŒK·*6WÒÙ
+½£Øé• ésûãA úIÕ #2»ÓŠ’„?eZF¨›íêp½µ¿hã—F‡<=éz梴|ÿi ™
+sÒ-çvŸš"ç«ñ¢q2À¢ªšäÁvƒ8¹„ÇW?ºI/4jûé-&;S>Øx«æZ—Eª6¼l9 ÐŽy:¸íV"ëow
+÷8˜6Ö¯!u˜Ø¡±ž@}Y_¦ŒW$5bìüyá}{ÄaÇ`Œ9ñ¤õ"®2ç÷´(/³èD8ˆÿªÒUì»@ØÒ]Ú!nµy(ãûEÎõÈ
+ÇJÏbì^*@vEÈXcæk3¤ÒWË3F„°0í;Æ·:™œd»Ïã°×²‹Š2Q¥"ÝW”ïê[b£î°)瘙{I³b-ÜükÈá¼J ûJ WJÔ}U[j×ì«tž¦#¥y`ÌpžÒûïÈòYb4èP¢zç íûrú\7øBcäqRItb‡ŸëNÌC¡£þÏ èþÔ¾œJ²W)o5q?#ëÆ–íú¢ ùÞšÜ=”«@UZ—š(7‘ìŒçÛêß¾ag¨¢” –Fâ¶Çí–*âìÇ&f"bü ä×ÓÐI1ðÊb ¼É5(+pGhß¾¬Ã¡®ÿU«n4P®48•@š!LnÆÇnàxsÜ8®dŸAÆ7ÏË‘© D¹Ó2…+oåqeSŸùð+û˜ˆüÓñV5¦‡K"­„ž¶”%Æ<FÙ‰*(ùWpÌÝô·û²ÍúÕ`u)ð8š2¹UB÷ÚÅ*lïdInÙÝÜÐ4Ük”ôÀnòíššLœâpzæÍ ÅøL›9àÄ¡]`QÐ,8óô}ël™ñè =ƒ¾ ?°ÞðxéVgS¿úÅ®ùE˜˜ÓmnÓÅ
+úÆmGž4ñ 8WÁHë0Ž ºNãR¯´4o©ÙØ_Oéë|Ï‚ªôÓ‡rÙÇjÔO8˽²¿€…þ”Ë#”¶«µ‰$ ýX&3³Fn“±wmãÈØGœô4Uu‡°‚•ÛÔîi¯/eÆ«Ô4Âm’ÇÆÏãé#\­Ã'ßÚup9‹;øôÈžb™Ž™0Ií¸³´ÏV>Gl0:?¾1 ±ZŸþ ;¶Ë¸ßb~ó¯E®âòðH›ê=!?öŠ§sƒò»|*þsMÔ;s&/€¥òñ£òè
+€Ÿö’_
+°>:%tÝÿ’hàÜåA®(E,FKrùÁò#5>©²"E÷èó9»¼úÌ$ÖdfGp±&â/yT/öËsš½ öÊmS;+æñd„}Ñ%ã ¯ø»Î¥Õ²ZTÎR:cí‘àÆ×e¼â•ŽËf_úy+§úŒ‚9Žr£Òþu!Îi¦’õ¸<¶“Ÿoö„b†™­Ò ¦€Ò‚7ö?$¢˜`ôBï
+j •Ûœ k3¦¼ï™F²žÚ2ð‘Ö¦Íú¦N†.!‘GÛt?×½U‰`Ùˆk«¾vØGn­aq9G´—• o‹ÃC"¢¾.œ\ýaÃ4Ù œ¶X~8uSÝs›]`ÉDš£ºžoñð•À•Øº)<8–v\гcê¶ã¤’”àôzÛ.”¸¹;ù\ªÓE`BFP墬ý&M azÍY""”݈ú v¤(´ëïü8ùœâŒeë¶ Q*ÍÅ£þ³GIçRh¯¿×øO{Š— ·?:û }ƒôÁ~ÿéi²>¹}Íì̦¾A25_6…½ÄŠZ*ÑÑž4ÆGD
+»¡Î¿FÍÓ8ø©oc¾°ü$¶<;¯ÍÔl"’±*³¨Ðf°„SÞuwÏ$ðÑ(Á‡Âé+8ï’ÛèTÍ•oÙ­Uîák,„ÒU8‹ÝLboº¯Îr§ô‹D ‹´<(Lêcv°\xš˜ncÅEÈÍk‰zh?Œï¥.Àí{Ê(·IipIw®M9FJÛQ¹rg"ˆP×ËgÝxO˜ËÚÛêp8…Ýk¸Û‡6 ’K(Ãùœc4ê‰MñÉ´²¯ÞÒ¬“É*C-ëa‡’y™Y0DÊ#×iPZ³;ñhäî3¬é×ç’ø]&?"4ÞÕ<Ò×ùùg›¾ýš45É©Xÿ-ªße¶UNOàΨíÆå•õ…@bŽþ¦½DÛš¶D¿ñ91š¸M’úÓÌ>gÐ5ÕOZ'ÇÔÍ2gµî_uØE(lü #È:=Ÿ~ô¹Vþê”ïô[ƒž×jE%zJéçÛX»8Ÿ7ZKØŸÎÀffך¢7«í×wÉp#–J R«‰»3øzˆúðþ`ÆÁŠºÀ:M Hdk#Äp‡Dê«l¿’‡béð«P[FÐǹ!;@ò×eüJ£Fw8 qì5ØÕZË‘òÉ’;4þùÁ¾µ”{í.æê~؉³™KB ¤T¦yxÓY‚¸!e{®«E¼…[.ˆœ€±’9UÇW)\ÇÉSÜî”O6^OX8û­ë©¶Öt1¯›Cé‰4ƒbþ¡ÝwfÛLq®0ó#üu~ä„ ¡Èr°¶ñBwÕ\¥,K›1q¿0V ®•¹ë_g_Œ³Þµq°û[2"iÝJ¨¤,¡ÙìêWgµÍ¹øÝU¬r•]ˆÉƈŽ§ËÜu¿2Î5öHÁfáÙüÕÏ¡^bÉj¯ðÁjÝÕ5tûñÎ2vljè¼üU€?~á4›‚eÀ¯ñ~.¬Ðfv–¤ÊO½“gß@Úé—W´/À…)‰Ã( )r¼Îyr2’LƒžÕº’‰cEòšª«®à[±6 JfHïÌÎ$å ¤/íüWj3ÈÒW<íõå¥7b#ô}EÖgÂ=g Rº‚JÅe×LÛƒ¬3 _ö6„J}᧘~[IûÜžQKxÍmJíB2)GMGìûñ{´ín~LSW2Ââ&­?®/ßÁ}Ò-Ÿ1ÛØ«ÄüXÝÕm^©“•Ç“ŠNÄ( >¶­å_¨Ì•
+5”0;vVÊ­‡‰\Û=¥Ç‡ÐÅ»/8n¦”².ÜÔRzÚD"‰‘$é»$3mXiB%ˆ#öùÓnà„u²|#Á?¬ 8¨‚ßK¬Š-Íf¡k®XÓ“ 2+ÀªtÙ¬c xJKÕUtêôÑL,qúòÑÏt/(d¹j¸ãyÿÏ÷Óáû$˜Ôq3-]ZëGœ|ø":R`/‘ Û¨B¸,ÑU8 ÀknϾ8JÓáÜÔ†]iÅ&ÑÎ8ÚÈ>kÆCÒnÙéØD0¥O K|ö,ØKùPëcú¸ÿÓ~§¶´5%D5=¸ÍžgP7“l† r]™¬%¥®Ê!EŠ]âþŒçH(FŒÿµµH?pˆpî8‰(3žG goaô9Ë×òÛót «Zø²&Œ¿,…Øç¼tÑöÐôD΀ qP(8XÝÚÓ‰‹½DÉO'69bA»
+üFÓ}UZ6²ðlRÛ
+ßB÷,øìõôàÞtKÊA ‚Uö…úØ€Ã7Ú—”‡¢ê¸då|%Qß´“¸6ÂqoÙãWí.Š,}U/)¤ÏÚ Ò°= PjcaÌé}V_[ÎQ`9Ó¿‘ #Ù ­Ú„é½Á6|-Iû}„ýþ—¶jl£¶%"åh/ã6s ï%F¯‹k/€¯¢‚BÔpÔÉ]¿O•Ø{I…O”æ‘»üéæ"ã¦8Éð uÛœ ýOÌŸoÊ8ÛÑ·MðTt8JbD?ÌOÚ…Í(󸢔s%<…ÌlGåšžÚĸº¸1}˜ž¡uæØ"
+ñ… ‡òÐæbð½¶õŸÝjSÔüCàâäC*œ­`E_™[‰ä,%R•X™«b¨!-áêS?ø ­$´^GªíëvH¡²ûI\PM_ø)c#!#Π¯¹ž=³6Ú°ú ?Ç`k}RƒÁŒfC©È¤“ïÌ{5ùµ<Eû»á°DçàÀÇóÊÍ›ï#üb ë× É¸‰ç¼§˜ém.ÍEì­ g:†´
+Œ:n/wùªb:¾D‰§ƒ˜­Þöª…%¼&z[C÷¼cÛ+Ô(Žö=7ÇöCtmÖ“OHÀbÞ0j],G6!µèik|GÐ÷é°ÚÊ~Øfóf~´ˆHn‚§§:vƒCÙ˜9žnͺ¬ÎO‰Ž’§&esþY¼ZµL†¾AE?íz¹¾è™AvX
+;ñŸ*Êí" þ:»,RñŵJ&¯‘JîWå¯ÔžøÙÉÇÈó<ƒ8 Ù!rÆ
+äwÞ8!¼w§š–³à0an‡Æþ?ü ý‚ÿ'Ìí-MÁ® S°Òÿ8 Àendstream
endobj
-1313 0 obj <<
+1328 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 34
/LastChar 122
-/Widths 2738 0 R
-/BaseFont /AOETMX+NimbusMonL-ReguObli
-/FontDescriptor 1311 0 R
+/Widths 2816 0 R
+/BaseFont /MFAGBT+NimbusMonL-ReguObli
+/FontDescriptor 1326 0 R
>> endobj
-1311 0 obj <<
+1326 0 obj <<
/Ascent 625
/CapHeight 557
/Descent -147
-/FontName /AOETMX+NimbusMonL-ReguObli
+/FontName /MFAGBT+NimbusMonL-ReguObli
/ItalicAngle -12
/StemV 43
/XHeight 426
/FontBBox [-61 -237 774 811]
/Flags 4
-/CharSet (/quotedbl/numbersign/parenleft/parenright/plus/hyphen/period/slash/four/six/colon/B/C/D/F/I/N/O/R/T/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
-/FontFile 1312 0 R
+/CharSet (/quotedbl/numbersign/parenleft/parenright/plus/hyphen/period/slash/zero/four/six/colon/equal/B/C/D/E/F/I/K/L/N/O/R/S/T/W/Y/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
+/FontFile 1327 0 R
>> endobj
-2738 0 obj
-[600 600 0 0 0 0 600 600 0 600 0 600 600 600 0 0 0 0 600 0 600 0 0 0 600 0 0 0 0 0 0 0 600 600 600 0 600 0 0 600 0 0 0 0 600 600 0 0 600 0 600 0 0 0 0 0 0 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
+2816 0 obj
+[600 600 0 0 0 0 600 600 0 600 0 600 600 600 600 0 0 0 600 0 600 0 0 0 600 0 0 600 0 0 0 0 600 600 600 600 600 0 0 600 0 600 600 0 600 600 0 0 600 600 600 0 0 600 0 600 0 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
endobj
-1237 0 obj <<
+1252 0 obj <<
/Length1 1606
-/Length2 17262
+/Length2 17489
/Length3 532
-/Length 18167
+/Length 18402
/Filter /FlateDecode
>>
stream
-xÚ¬µc”¦ÍÒ%\¶»Ì»ªË¶mÛ¶m]¶­.vÙ¶mÛ¶ñõsÎ̼³Î7¿fÞ×ZWFDîØ;2“„P^‰FÀØÎÐDÔÎÖ™†–ž kacèâ$cg+M#hgm økd!!r41p¶°³6p6ᨙ„MŒ
-Ú¹¼h˜™
-ÿß­tþFÄÖÈÎøŸ)Qr6°5þ;XÿËðÛÈÅÑñ¯žÿ:ë þŸë¸‰‰»‰Ìê’W°eZfºs FîЄ°V_èPˆ}I½rQ•]·_Ú¯Ž
-ýêÚ†)ίVÅ3ûÏIÊÑtk²î“«|\ŸŸ½È›¤ílT‡tº%ðéçjQ^× ÒÛ`š¬ôª‡»
-Šº¿? ð¦Ú™¡®Ÿ)üºø£?Ù#ø¥ÖÅ¢u 5
-p¼¹'M/&&ˆ”$PÆã`¡Ž’küˆÀ7:~†ù“EœGå¨ð@[&É—çZø±Hæ³mÇ•)û~õŽ/š§§{<V U—Ê®]¡Ϻ+ã>!¸£C}²§ªM‡×Žì ÀòYÞx°¤þQá¾ÒžX¸Éªi8M;:6ÂÂ~>egš1 âCP2ƒ÷M·]òþ2Mÿ½ Áø‡Œò!0‹v'¬tHèúøÁ“zQ<†ó3í²è½*샶_Z¬ÌòØ ƒ,bzLC âZˆ`R u„¦åý´ØMŒ23­øGt~æ§Æ[G˜bCŒ¦8¢:f˜8,Šðjze¨ÂÈ.ŠCFÿ9Xé°ÍÀ#Ãì¯?–@FÒ*^€ë¸§­áì•îŠv>S
-Vs£€·Ý‚ª M½§Ä0š!a9QÛáù5ýGdõ÷u8•ô _ Ä;+·¹V«18önQ±ù-Í“ªT†ã~í-oò„lèq#]Ïè5>ÙI]n'„ç ±š»-¡ØÃF޳ˑ#¨VFFàѶ|Â0§öN=Í}åÌ_$
-t•úÂ2"ÄB=Ž‡Ãýw=ÓS«;vbƒŸ¼5­µX@_»«“E¾˜}e)Û.B2*·µcÊ~êJ“õïðªÝ
-HÅ”7dv“Ÿ¼uAeR§Οµ~·" ‰š~(w·äpÍÂØV±Ð¹ÔškYòV¢¤‹|B>æ¾s²œ¿­m@e¼É¿ý†‰K¯ã+ aØFÁå0~¨¥?V· £f@;ÔK)”wrïÕ3“ÚîdܲDúP(ØÔÔøœ™ Ð]yžv8Pé¿]Ú½ýÚêPÖÀ¨Ôl6À·¿ÔÅ ÷.Îe‘š»¸‡³ÉˆÎà'Ãf9õ›e
-ÿÂøkÄ×\²)1]8ƒ‹h¥OmfÈßaÃé“ÆS“Vò ùëRç«W <³˜&ДÏÖád­y¡¹,˜÷r¢ógoº1Fî×ô ;Ë•˜,ÓÚ»W,¦j?úÑsvÕàÚž.fê"Sp/2²+hÁä.èö ú¤ õ´ÙUÏÕŠ<J@öÜGP`rèº)Ò¾7Ý#‚•ÐvN D!§-„d/ ¬tXzzÔót߆å~à(H5vèÐéA+ºË\ƒcù;0·ä8†RVµM+Ž“€=ªIÝJ´H«’ Yì‡ÿ3IS¼,µ‚úî@r—ÜMhŠ”žµ•ŽÑ·X˜2O}ôuͨõ0ÿL˜îáw£[’òœƒëúÀvWp„ù-H$÷Ä]øŒ“Üm­yïèúAêñë þ£ë†‡^Çe:rg1pæ­eg¼60¢Œ½ž÷s¸Ûü²èIü#-(öÞÆHTŸÒƒä¦ôp fñíBOÞµ âU1C)áÏ3&E&>êîì–‘PÑS~†þjêÏCÔÆ…O(Vô|:ÌΧ¶™¼ Õ†kFr6MmvY4I.m‚à8¯ä‚Yúl—¹SqÁH«³a²þìz$ ¬jÿÁÛè&”—
-]Ké<#
-ç©^–v©K}³ÆëY‡ŠA%E FÉ‹PßƲÍDäÖ›‹ÄÖ¤ÓMÕ"]™¾ÒÀ‘;Z H·Fh ÀÕQK-‡a³ýý¥¬ÝÒŸ%¥1”NTæ¹$Å#¤aîáÅ3Áë•F?Ê·ØcªjÇc_Y0Zì÷–PÒLÕÃ(
--wã0!sž-,¼‹¦Ò—t]§Xü²Eùh€ˆ
-ñ~–Ä-®ŽÈ$`òôtMÐJS]âÁîâÙö,se, -+©ûцò½Šs`Ü&—lÁ8å²£âDÊVÜ´È”'ãÈŒžTFû"ìçÀp‡LÒýêÒÊl
-Ê^þ¾Œ* Ð,Ú!4\õËs¾‡Vn Ý ‘^gnaž](+P>—[¡õöã¹Z¾Áxš.¼—Gü3“Û\+\™~ó–F]µêß+IU½*7»àd#ØÖbãBî *m‹'g¹D²m)•SA‘X¬0Ñ<HX°‹aXtͤlýaIG™V~¼#) $IœÀÖŸôv"Sóy3¦³NUáÒ0鼯k‚%(jJ0g.3¦JR¿£°ø¡Z€®ûÆÔŠxI t¢J){CXí 9Í^<ß&p3Ü5’¬*|$õ/Š¤³†ÐXjšÁ
-¿ÑÙã]šÑI‹óC’(¸-E\ôHˆ.çÎoBŒT…ž®5:@¬PNkþùò§r¬‹G³ï%馒ü“8™¹/qî1ðBÅWXBÕ½¿ý¢†Ùј©µ?‚\Jík.ê}êS¥Ë€¶‡ÕØâÚL> $©Ärå`\í ww¤ƒ¢¶óŠŸÀe
-p‰ïå¬tpy(¶ÅŽ²Wå+\FEÝÔóG9 _AóÃDYß=N¿×€õÙ]EÒ8çÍŠ£…<M®Ó";\ÿÐæŸÜræ¹”ÏY`¸0oÜ{sêËXsïrìjƒx—d½+øh¯µ%â!\êR-±COÑà9ñ^
-n
-t^B… ’ y‰ÜD·@µ˜¾Ó ÷¡°_z¶2µ$㱘Jó¢a“ÖóƒTp;ÕTšeIM•t¾Õ5Šñº u4¦ù>†ð<î>Õj Úhá:â—À–Ü;Æ¤ß ïáî¶ô„¯²Óyú6±¯ê«¤­—e\>‹.Ò¼Ãz@Š=ü¹v³œ¬àr†¸/„:΂1“³r_ûÖ‰½^oa~sïªÌ(¸dœúvüa$ OÐU¯Õ’
-Œ:¡G=ñ›– æ@,º€5µ³äj²é49èC’Fˆ´d|cp¢ˆC«°'»M~”
-3¤î§Æ¦ÊgZÉSe–¤õÕo0§Œ"N%¢.ZV×¾(ÜÊ1*”ë´Z½Se´™·Jè¢]¦Ûq¾½EÆ.Ó»wÈ N÷§`|Å»x¡ÃEGoVH™à÷˜brÂ$µ=¯m ec¸—Ÿ¥wlÏÓ²æ<-û,ÖzÅ/SwCþĺuŠ¦4˜U…ÇtÚ3grâÖjR\!ŽóãâhÂÂÛ#²3ðtâ‡çe… *‹ÍãQÈ8òù)ñ&Õxô€Ä ŸcŒDTyÔ€ùkÞÒd8ÁE Ñ`Š:›±ŸS°J™ûçÕ
-+fÃS뜊”]W¿œŸ_êÓj™#íþkËÏáK±7FMM:Ö—
-ß\ ~á^/r$ŒÀô”¢_ÆAµ¹*ó«·töˆðNœ0Â2g¾I›qŲ˜\øÃ(6ý}Ýÿ\M¦]~Ãv œ'eð©.&räxR¥*ÿ>´BSR‡í
-’†ž~÷/˜ºñwhVñTÞp8Åx–’lò´ñGÔ'ÏÕX¦ÙeÈý KæpRY7ùüsd©R2{øzuì×S®‡/Õß¹Ç$†nN×”rp›šdYÈ6^^„ñÀiaõ2œñ§;½³
-Ó”ͼ“¹hÕ®û\,´§É4.O65%FMuCC\ŸìO·­:›’Ï)_7><›[ü}e‹'\Jöè@Lˆ¨kÜóqY b½âõ~ÙM¹®¬e|IóÎj+”ÏÕcb8-šÎr`FžËÁ
-?“‚ø½›Cäãµ¾Kd¥¡~–?aÒs‘Dûó¿øuÕ0Õ¼ÿÑ2_QW#¡JÕHH˜"ñjc†"”â,à9¢]ŸúPq“à9Øjuã<!ŽÃ‹-¥Z׋Tî-E›šv0mœ×^ºÂ€ujWâ#¡€(ÖÛñî:ã~~y
-AÙF˜/¬³cv ¢
-°adÓ@µl¯b3@³õ5ÈqâÛZÐ…DÜöýø}`OÜtq¡FºlàÐ’6!–wÈ «ög¢ÈcÁ!ÅkjòQØ{½“‹õ
-MX†“VSÛoV ù‹­®áG<>ôÚªæ1&×m›NyüÉxÜz®×ø½©Æû™@ Z<ør²¹Œ‰HoskëQ0·ž–v€“3…¯»‘ê ðCx,§¼¶cïÖü»~¨cR½áœ W-îyN}i§éÜR­YÖ¨P!fØÔ²M£Ñ<äÚé2c|µìÉž7àòàÊXî4Ó±V.‘z%‡ã
-²f â9Êï’Œ’f1èÓCsî\׋Wí¦½tM.Ð^ÙüÖÌÚ¡xÃÃtƒD&'íÈx`iêHÌþM‰ë™=¯í‰Ó˜>"üEº4kÖOŸ¹Ø.r!PÛ0*J ˜± øj]YåȤ;uYÓlcÂX¹±*©§ªw]#kÎ?úÀ=‘3·;û %âÒV/ôÑuŽ. äLSN„󅆘sOó{QA~ÄòŒ+JþùîÃv²ÇM•Ì`Ipå'±b@{FÞ"kä6”5š Ë[{`þóbHsý­ÛÝÙJx£
-þ¤ûër½ŸÌ©‚³fÎÝtw4N©á*r¾‹m€ œ* í³3Íõ±(‘V[‹.[³ïäÙ“ÄƇGhÀÜF~pðmï­ÒÎ ŽCeG±üAÒó¤>ò(wnB#Ñ6±Ø#fV‰è·Ú¸ù0 e/ù:Ò!î^Í­A[£¸ ª ñmD04µ3NDԺɌ-~zÏ_ÔªçõIÈq#"u2íõªîð¸ç…¬Gûó„ZY5ÿs«^ÉpAþqêÆè§ÜÆ œÐÓxwwå£jåhZ3 5Q««Ü‰k«²Ÿ9O8²škVä™Úh˜R¯‹åã *LãBÊP³‘³]OA¡P†´¢ÖŒúK•»ù –É›ýøR ÒÍXäôõ*B ÅCòýÚbŸ.v[¥Þy#½0oÆo}5št+zÀ˜²³JA1-Z_{µè*DBC®O’>Íárt MΟ;#âø³ õ¸ì×Z{©â
-ï¤ÕŒæZP=¬Y}«’änzÈN$OÞzœ Ûyµ¨•f“ytªT¨å2û“©ô®©oZÈ)ß৩Ÿ›§ Âæ·3TuöºäZ¥T^--Ýú£ÛzµI8çu`##Pô9ðQ£¦‰*²J3ŒøoÙÛjûÜ÷øË ¹{ ¥ïÑómÕå}j*$ õž$Ó;¶£B
-·K=‚'h²@ßóh‹•ÊŒ7¯µŽà8X€› šÞÇvÐkÊ]àŸSü=Η]äÖ¥ajË+*¤¾o²ë”¤0K>ûÊV$öåÄgÞ·y[ФÈèYW5")JÍì!h¼¿di|!6]$ÄÕXT}|
-È›`”¸5² å!4/VqT,ù’ºÄ÷·Ýg¡»Ý?€¸Ò?FE£tK´²uÀü,…LÁ‹VoùÅöÔ©:Ë\ݯÓ&§¶*á—sÉB½hšYiÉÐlóƽ"΢N
-ióÜG4ƒ˜Y8åË
-²á²‰Š.²%§:‹™»‰A{okÂÏM›—ßçB/Èñé”ïÓ²fOk¬ù]ìŸá©Ú$UGÏ y›j‰Âx0NùSîg3V8BCúZqœh‘à­ÃÜ8#ìêLÂÃ-]ñ0OŠÕMærÏø¸MÉ“h Z&ÙÒ¬­¦Qõ5eJí"oëÙ¤è ]yƒ³ÏãRÒu?åþ>®Ó(žR‘²LŽA†»vÐnØz²)‰Ä "’xœìd‚W[f¸$àµF]ˆl,1 ‚Y_jžæ$Rå›:ˆGlå)^ÕÈÓ;3ò šã«ÔJ˜+͘ŸVlkˆšu‰ýÍA¼ fO""©íˆ&&L}sjÖü¢|åõI™m)ýïÃkDÒ…~@XpY>+À8cæ¾8©=<VMò­/<@Üš©í½éëõéØS1CöJEï5Öb“QÛ0o·e­árÀ¼ð6Ý)#/ ÎyMð„½%tFhSTD¸ €>_£Öý‘Dbws»÷³KøbíBw§ªi†#sXꇈz¶Óe¹M„[ÎûÑzjÇT¦o𨉱Wr§'Kýeö<¥„v³;¼(§ŠÝ™]
-Gzߦ@ª9L惣}r#f9£¬÷B/o´þç~B3l?9uB¢˜”ìÎé‡v’ëƒó¢²‚»ß02=·2IL./4í ²ã…±>…SùÇÕðý|žO`s}ëë ˆ“yúóŽzè7§@„¹‡ÊòÙ ntæÌYv‹\¡¸Î&Ê™º4¼XObæŽ{´N¢ý)­< ‡¨ï ûß‹TºA|夯¾Ø†ôak×J¥0 SPÆÐ>*®á7—æµTå`ƒ_j¿iþ <ßB
-,«ÁË&^“V—[*%
-LãDÉæú5š³YèûÜw'Dà†<ÖP²?iȯb2‘sÓ'Þ»ÈDcûˈ‹b˜\]ƒgLâ1Ú÷sâÖ³þé|Í+Gæxïô’RÉÝ8V³-ÑiÉJëÑbÄq5¸kr‡¾éÃø}$ªÎaunj”M*qœsÎàFi7pîßp¥ŠF2çØÀOªAŠv’/|(¹ï~ g$dß¼¡ïñâG*†ètÛ*»_xö«|l‡|¤¯<ÒQ’…µ·BÏÒbˆÈçSæ|UX¥¤³ƒö‡kmƒK.¢^>^XK¶Z“–—õ"Ùj‰\O__y¿U2N3•ÆúÁÝùæ²v3©aþêâVùóìM $EÆs^+îÉ%ºœ¶ÉP.LY…Ätï'FøHÜvq¡ÉoV'¬ûˆÇÕÝ3Òm¹Sì¾ÀÌÅEKð'í~Þ*žÓñžÒ­CȶvZÕJ^õA4m²\ƒKýa Ž³7_‰ˆþÚÁvdª®”ÄÇ0=£m"=®b."nÈ_§XŒH/zþóÕ›Uí MígOV,¤yU—.* ±™\QšcÀü˲²>^å„ ÀüÏvÁbÀ ï q[QFÐhXô.q±îõ_=B’¿Bƒ0qù™àú9Ã@ß\1É2Xü¡öaã4réZ¿¬î…ý`$Wü‡ž††˜ño§Iì¹÷ZŠfåmñÕwû‡òk%¥g©Á®j¢´ç¿¢Dù¥ÐÐÈáFyßÄOt‡á¾<1‹©Mq.Ú¼}-æöáA*zw*üË3{È%äè‘x¢¢ÒÉe)õµ–—òð€ÃŒÎ~£'ÜÜ$Ëÿ¾±†å‘?`âÕa+ºéòw¢äp¨3ÒÍVèe=å’vˆó\pSìy÷X²ud;oª7Ím²óù+÷góuÆ'â«‚â´d|ÇÕÝ S>ÿ>\í8âUö¼­´Œ¶G=Ù\ݘîÂqX¢¨
-œ_ðÀ,9°(öhgû¡o¯jÌÖ o4çþ‚‰f…]Ó좙žÅm)ÜUþµÞíQSßïקãW m‚dôåvqMàÙkN‹u¶üû‚‰L£R©i nAÝt]«¬9éT±fNûh}¼#ô ÃHNº *Tñ³WÅ.}*ZùöA0ô‡©Áše¶`v¢ °ªC <Î<š”¯Šì6-MÂÁr¹Èhݾ’ÎHR=­/«ƒ<öí€i"@[®/“pR¯óùwUëz¡••zÌÌ%»Æq
-ÁoP! ~}(™ü5ÌÅ9Æ;Õ±Û´[H.¯Ÿ³ìdÔÑ`“ ÍÙJ¦S1<šH ë¸ÙìÛ ¼°Å˺Ì}Fµó¢¨(*XÎò~¸‚„Ø€gؤqÀìSUhyxZœª.
-YwBæ­‘03ÐÞŒ}NÔ‚‹hÀWºœÌ+wßÑl“1Ë’CQС6]áÐw\‘’¦…Sqpi& â?sv«=ë¨zøÅ£ðí½;Ω\º c=EB/›´™ý‘“5eª~D§ãƒŽ&Þ)^LQézåÚÈ»„` ¼'8ÌçvŠ ÔPææV•Ìz(ÞjrHOZªî,ôÏz­Ã7í,₸ t!>Õ¸¢¯Ò»ûÄ&MÌ6ª!ÛaÏãJñ¼oÖ{aA¡
-XúoLaùÐÚt¦@a³Ð"—„S ½ÍϹÎóSß©×C¬ÞML[IÁÄL¢Jð>¥lg¼‚v›ddÆ0¬Åü!½ÈœKis÷ŽúÃ’bk\¿È†€ŒsF
-ˆ;övû.Õæzi”Áí¹œä`f “s(éA¶R¼¨2á^: Ä!=Žfý¾‰;ŽW§c~µÁïnS¿‡ï9âÉLšß<Úφ¹Rëä0Gc­vѽ I±¦€¥('§q 9õŒË
-ªþ® æ¶Â´]›†fŸÔd:šþ‡|B<ƒ?X2¾6ñIãpËxCCMS?ILÑE[¤Ÿï9 _ýïNòsª¿pÜÜ E²A™µ,¦/ŽAd-ÝÌ¥®T[c—[Œ”ƒAN‘í녻ͅOXUÅÑã¾3ýªõwåߣ ¨çïSR ™¶µTJ]íy©:­ˆÍsÆ[@¥*sÑÓSyKÃOhÏ»E'”ˆÛ?ˆf’‹¶2楄pL’
-»BÕ=Hv1eÛ¦š¤ÎûÂÊt Û>–¶,úÅÌÞ$¬Ü¸éì}-160ŠðÿàÏ“t¶û»i$¶ñ@]¥4‹µyñahïwn
-F×Ë0Gn‹ÄŽÕmâ믔õÜ“T^-ú 9]5pšzxë½!‘ PÊ Ü§`;¿¼TŽÌN®aÒŽà C›½/Qð
-¤}V£×ÑÈv®_`Î…,$ ò£3¶â[ Þ¦¶J,‰Ìߺ‡ÃFŸ°¾ÖÀªÄ‘˜qhíÖ Ö˜5/$æD*ÔU›Þ‹]áÙ´*Ìz6£¹©2Êõs+ÈÓ#'R”±(d…ã½ït"-HúGÏ\!j´çzóPêû7žœF´Áë¼&·æ›Á™\} 6tê¿ØÎ9Ðe4¨Í´ô• ±B’}¿O„,/±²X1Én·ñ8o'’¤¾5Ð-±„'j#^)\ ³¼ÃŠ–Ì?äNªŸ²$+ïц Žñê…‚Ýxš™C>b1¯):ÉÃÐ]|¾ÇÊìóÂý=(eѼmoL=Ë ÈŒžÙíÏÕ*9Jö–à7J’GKé/cLò L>[úHAÆÞª©µÄŒ'°‰i5b¸ «‚ݧß=ˆ†ÅïJŒ"J¥É±K¢>Úûˆ_1]@hünH%|Ñ:²¸ew·ý¸90ôBK&×åw5Bzh¦’æ¸YdÜóæg}D
-V;Ü#R™'Ž5ž%g|!@1žG½Gø†aU!Ðs…R÷+‰µ\[€gÙ]gÑŒ:)
-Ô‘LN¤@ÉÌh"OîD½’(ko]¬cúÔ=Òü¸…&TΨD´mÊE%JƒÉÞ›’~9Dªô˜21xBou×,ÚÔ ™Q
-Z®ËoÛ4ëŠ*s³°ütg†©NeÔú#‡ßìF¹¤¹K¸]C•f/ZЪ}¿@ôFêbM̼¦K´ØËJ®?L›^ëåɼo¬àÜ^Såõš¾qD¬E¨ÁOÙC¦ª†#¢HGd ·ó¡Æ‰APHöʬãÒ_I
-Þ°S, LqÎ*™C •–ëüðÓ¨Ájl>ækøƒó
-þ„ÑŸœ¥*´ƒÃÜ! Àr™27lÛNâøò,% @/üùjÇëf­„@´RÛÛ¹Õ:#Dô­N tAÊ_‹+fQ$'ß“_­9ËW„~cŒ“üŠ¶aÀ-Í<Õçxî~)Bfvd%¦Zýd4Â*Œ^ÓÐÎõ(“nÖ•Á7†Îr{S¦æ”‹ÏF/h8“¤s$ÁN…t´æzi›
-¡â¸0Çø$øÖ;¬šƒyëMŸžü tý LïXºªA- ø]·ö•9£ö˜À[æË#­oÏ}ô<°F—ŸA¤Ì Èúë…¾KUÇÅÎ}Žøv^¸úͺÛá´„W…Qo;,@o˜ùQ@&×_}=. š×Š˜c¯(¬t\™z±g¹8§Ú±ŽŽÞ¦LiR™‘KÇ>\
-
-“;·!iÍ1w4!Iõþˆ÷Ûû¼ïðy¤’2¶
-¼–I㊙•oh†ÿ9œ¡–Îí°Å`û>C¼]ûÖ ãP[iéº5o™òS·ÍÚ¦b¸ùP7xÊp]_x+Rl¥Ã×z/CUO² âRÀ¨lX ;²
-VÍ]êAy³XH±ÔŒèyÒLåýkoù"-Õ6_XŸs(GÕjØwOÎÃIÕÕ\‘›"NÚGvB<dÎ2æUøõÇͨa'nœ"dáõj›K†·…éÀaµ*»Üz^YCOs´’âUerÕ3“®©¿*̶^qèåSømÄ“—´¿Ìm+V#.MïäîuS³°¢º ½7Rz·Ú•DÊ£{ót§UYEzØ”Qù-t²y˜’…[ O[UÜW¨‡³!¨ï5ý ¹yK=n¸±u».5®°Rë¡fð¨,¸V2›è>ÓˆŽ…¤Yô·ØfàÄØ(ßÁx‰!´à‰%žM>¯Z)
-å"UØð;z¯Ãg«Ô«¼L’"¤Ú-Û‚ Ÿ‚xwÒ×~ e]bþL‚¸=V›Ïóð¨-ÁÅû”Cª³;ÓÖoä®Í ¨ÐÒ&CdÊÜÞ<_}9Ížsßú–M©’£ê˜Eä‡S+ø{ðåÅ1Kg¥V£2¾ÒÁ5«È–­eéýê õÏŠ½SÅöÁ…®ÙK¼TùГ®°zc†\wír,Ö™yÆTôfDÇãF^±–ýtÚ|¶«w]’ÂйP
-¿,:Fp\îŽr|0`Ï!ÛÍéy¾.Nïè^(%×½ñ>Ü0Ø]^ÒC ‘$®Çž5~<ðrpÊÃz>ŠPãuÍx{¿šècAÊûß·™ÍZÆ~œe·9^|Ø™ª´:öÛ9½0 *ÿ}ôõW'¼D>½³}=à -zžûcêÈ^‡õsa`ÔúþçBº&¿¯ÈÀ}Ü–#üÝ×õ,¶…ð€5nXœ`KÃ|Úªup´ëqª£¦Ws•³Fþ»‰ûë»ÕnË·+1§!NqM;Ú¦”+1Åôä@2Z œXÞ%ÉŠû:bj
-XãÙS9´½ AÄŠ›˜ì \¿j‹Gq‘ñ YÔ4Ûûª2x"…þ€¦Æ">5IåñOù¼Ðù)þþbZòZj÷Ö›ŒEŒ×©8Œ†–BY‡tç÷]Ü þ×™¢Ë€9£ýd%ut o¥tÃØ_‹Òs¼#Žp9Ä RsˆNóÊ Aα›‘my_êB[öéNU9Wɶ¿~›ê?
+xÚ¬µcx¦]Ó%Ûv®Ø¶Ù±m_±mÛ¶ÝI:¶“Ží¤cul»¿¾ŸgfÞ9žo~ͼ?Îã8wUíU«jÕÞ›‚DI•AÄÌÁ(á`ïÊÀÂÈÌ P°²3qs‘w°—cu°5ü5rÀQPˆ9]­ìÅ]¼
+`e°ðððÀQ
+ôtý'— `fåâhkìõ7÷_0Gg«Ñps±²·ø/ô
+ĬsÍXŸë%¹Nfß{SÊ*åP„3]lÎ0×Ï4dîÅäOŽHþ¦ ˜Ý(Í hõ%gç”)'ÏOTCã£#Ã}·‡øtù °|1NùøB:êÕ>Q´ËGÙS¶XÂçÌ}#ÒÜXœ‘,‘|[Õ#~WØw'Š„ªð£Ê#$n6ÎÞÁ)óýxCÉ]ûAÍæ”=$w?º>1$S®ÝdÎ ÖÙPN< 3±ÌWêGâ¤Ý£âò
+ã@]á~?ÅñïVìÁ¢ˆJM†³„‚ô_G)|æ¦jœ:ªSÛbÈ ~,˜(£ÜÖº“£xõdñÔ¤3ÂW¢säbÖûº.Ÿ†Ç“Xœ¡f-TûnÝö†hRâ/2z}•wKª{ ?…†|ëþ÷(¦¤I{Ôħjäß{ôb²4ªR{È2Ý· 5ꮋ®¥o ¼WÐÂÜöš¢ª
+¡s,ÀñÙ燨×qZðoñS-Ýì…|­7€°4\±uhò2â·t–û
+C…Cmkj"úðÝãûò? ¤L›_LM‘>¨J£M&ÂÃ¥¹Ö›Bnv“EREŸÇæ« ÀZ§*ŒVXpÈqí$~Wóÿ˜\¶œÌÊòz¬©«TX¿Â4›÷T#x0E òÄ‚ùäNÕœjÛEƒ²¾ñâÈø¡Î¥7µ<t“[ß|šytl"†‹÷|ÊÍ6g"„¤jèŸe¿âûežU~¤ÍúƒŠö!8—q7¢rDìúøÁ‡~Y*ž÷3ó²ô½6"’E/ 3A~uâ„E9«X¾9y½L45˜>ZÇú~Vr—Ž!^Qê#®¨çS{„«;B¥9NG
+Y 'B
+MüWVM¸òØšSöÏsˆÊQ;ôà#tîWôÕd°±ÌêÐãFþY[G5Ó»ÒÝÏtãâ_± ;!µK°æ¾3’ØmÐð¼]ˆÂ:c
+Fú¼ªF&/0R=5;|¿ê°yöo1ð„­-ÓkÕG#w©V·‡Â6 ùQ®ÇÊæ [Hd/w’#B G8MÌÉ=VÐácn¨¹)Ë4j†c¢ Û?áØ3fž¾òçƒG/’Am eDz!*ýáY‘’áÞR¾£Q»ÈÞYuÝÍ» ¡O¾:¶ºà¯}uiß¾Øýh;/²kvôâ¿“ÈQýÜÔ¼ýܳôŸE£ùÕ gá2vP…——&âÐ{–ë|þVÑŽ@YaJX°e>(§*³ãay!^™Rq5i—öS·Ý¯¸£ïW]V€Ó±¸ŸmŽZŸúûW†Ùf. ´¬%h§ÿB¶N@—B£(ŸK×koZb±3ìó ÊÝâO±‚cõ®wíë¨F9j,¡dÇ*¹´ dà Ã:ôgý½oZúi`Gg|e¶þȯ Ë eX:?æ˜ö•~#3úºéµã<;‘ƒð35&EAžmJ–á6;©Aæ‘;î '’#ÊoÛD]Ñ,À£’}¿wá<˜?&HA%VÅGŒÇÒ›Ü7³„ÊÒjE 
+~˜›ñÑ $¡ØAÔ­Ÿü;\F$Ìß<³kNÔÒ5‘~“Oç|ŒmýŠFøãR@E_Êw4Þ"X!ižøNqÝ[åûÄôë'ˆ
+}ìD"`ž,èÛ˜AfU·oÚà·¨TÛ[³'œM£L²Î;òèeñ UU=O¤­ÃZÞ4@Z3uò7­ÈñyßÓªsÔÚR0’ö¥1¼7/‚¹R:ðw›@»Œbâ¬ßÞ>0éÀ©ßŠ‚ß˼n8—¨9KÚ$>NÎŒyJŸ¡ÀE/àoGÂù4°·#îoî–êi7uòý~ý€¨¶Öá÷0\‹@x:ò§tà^c¶Zí=`±óoö"´“BY7±ÕLf¶û2HöþQZd«‚mßha.—wf÷ û¡ÂF®0ó l8áîcä
+…Mußɾå" Bû«CŽ¸ß¬Ìqq/سÖn%Œƒ´û°&è
+ÉFl§?Xº„×Jf€^."+«^öyvðKÛú x¬/|äô0“Ëm¡Ù¹ê”_f[5·Î®?°UÄظ‰÷­CÕ*a…Ç.ð™¢5I^Yko(mOq†!<]ÖÏÐÖFßôd„š@SÜuýÒ¸íÝ7$PâÀ¹ƒßZ<RÕîÜ7†vzC3¡,oÁbø§¾˜¢æ\o, fôüÇ7û5Ž_‡Ý7í¼ »'h³P{Ê@sn­½»éõ@‘åe¹}Ø£<WõÁO’XÁñö7ÇbUd¶äFÛqÊn—ú ¯E‘¯ÊX*IÈÎØTØ„èûòÚÇÂ%N…Y~ÖÑþÀhYú„áÄ*bÂéyê\’/ Ñh¾öc¥æÒÑãÖŸÇ”áÓ#MôI+þ˜gÎs[¸1—±9¥ú™×„¢[8|×úÍí%÷ÊJ÷ŒÐÍUÿᙨ‰ã=¹di‘¸Ô8L5]£°+<õóî Þì+Ö •‚C´áõ…fiMŽþ<!}>ÖÆHJré|·ï•ó’’*Lö‡]KÈ®wÛ'7/š
+“OÆèïb”£»$„ß#´ï_åË^BYUÕò£b z•âÁ¾M«Ø)E r)àÆÀQ¨¾i—¯J× >¨F;.@.Œ
+œ¹Ëì™J‘Œ?±¸Â0í ,×fƒš¥‚®Pú±•´a¨ Ž¦&¼/N"Þo,SÙžÚ©¶ Õ~2FN¥r¹#˜Íõm€o¬æCðfÓT…ÉPé¾IÁ~#ˆ)oÛå´\s=QÕ â/=¤4{ PÎ`ÏYuJN•¼JÄ/à
+%¦j ý–Ïy´c땘ï,ÅàŠ3ž“þc3c$a²…{s†¶Ïƒ¢Òë6ùßÜ@¤c™2Ù½’ "Ód—§$ºNŒî%З¤K÷"#w>RdÝ<4O‹ñoÞªÏ'¯>{´C=ÑåØ?”>WFƒ{ ËÁúydlõ«0U})¸Úl‘pì)¬ýα˜žIÙ<°¤kñÊG!å tˆ­ ?ÚmÈP¢Í8z‘—uw¡Ðêaî¦ß³)ïe¦Ž¸bQëÆvÄ‚VU2㓆ÔÔ k)|j6t¿ße. ÙË"èŒQƒMWP[ÿ\òHÙõd<½C– Î!›ÉIÉuô ê»Üƒ }cr$¼´`’“†¦PöX‰¾è—–X-Xü³5V~ºÞVâµF;«ó#ìGÍD¯€ÎàKêM õ yû`ÊÂcð…º¿¸´6†çÏ®ß4õìÎfl?£i!e5¿bßg>Õ{û9A ® ”rÁ
+Ù*¬×'5 öƺiz®„‰Ýf
++Hê!± ®Ëö'Óä
+ÄŠ§h÷„Ü{É=Âݶ¡øU^–ÀàžèUS­œíê±¼ÛgéE¦oDs?X™W ß^®‹ B¾Óÿ…X÷Y(6ËCÊqZnÁëà¹Ïë-ú1ÿžæxñ˜²[ö©÷VŠ¨d­m1i0½ûùPšÒNövHûs úat=§
+©gÖ<L®CRÁÐöŠn,ÆXcñµ;W«`S¶"Sÿ·ˆò¥“O‡˜E
+eð5²v'úå„a(»¤Æ#r)†‰çðøË6-E£Í5øÊ÷5†ßý+f¨] ¾Â.ª…¥ábAðó³òþ7_†« ¡Å=ÚEÎ_k•-ó%AQIH„¦Æ.%í‚Dêä\n4[*37]ÈÉr4é*–› V7m‡n¿‚òF#²À›ô,y*oö#¨“÷©$Î9f¬ÒÏRÒÙþ\ͪL0¥Ü¦Ò>6 1ðòê/6]³äv®µZ
+_¸¨Àé«ì1ßRmþåEÆ„üPñsKªP=.¸#`@—ˆ>Qô›ð»Â¯_ƶ„íd¢ôN3×'M˜.ÆFrÔQ?žI$µ_«°ú ã¸åÓ1æOÊÊ; "ŽÀîÈ?²îwó:FÅ“|/{;þ¯º”ðE*´V÷$ ÷PŸ†¼ï'E›£u!¾$Hù+BŽ:´æô ˆŠ25íøµhÖ¦2Â1¿úO€¼ŸÙ§hémFƒjË[ÊÁsFó…ì±\.cá>—ócÛ—Ô+v©Àâ"Tû¸hõÖÉÅýLQH+VÊ
+ jgìzï½È=dql£1ÓÖYkû^PÔ1¦\µU1…$:$a^טôNyãLl˜9‰“Ý\Uäñ’E=Ì«}üñc×(Ÿ²ä»r¿Á¥E—j/&è;»Rß»•Sé#4¶ÇeQõ\G'.*ÞÁ8@g` ÉWQ>æ‹—qåÍ6K±{ž0BÏM­c×­ûëжÜf¬¬¼ÑQر!kᣇ‚§›-9\:­ R‘ Må‡C¶ Q›ÒRÛdšÔ$9WzC&Àç=²LƒzWuØ–`…IL €© úÀ!Ç NãCZsüôJ^ã"–ë ÂçíïY @ËA(>S9|]|u À+‹~³±ïL˜°Pš”ú®W ‘€
+õ‘%­ßÅ Ù/»" )´žTŽÑÙ^ì¿%.óR/ß2{ß¿)½†ÍŒÖúà ýÆìuQ̼¶Ç¤±/×ÊWŸµÂÖ~¢®¨ªÓDGë »+é,®ªÕòºY9ç#yÔÊý²ûX£Ì9þMd4u_‹´ÜÁïy¢¿˜¢Ñ#é©jr¥m—Ÿ¹iŦ—劒*Ã!=C˯ëCÍ>*78ö<žã$`V!”¹äÞÜÁš¯Ä®x8ˆ"‡cÍúÆâB“ˆYíHu›ö( Áz ¢
+ïà`íír⺰¹ò4r–ú¥ÍÃ_»øf¤¤ï§cžç¢&ô˜BoÂÕ¤7YÜ;ôXæëõsb‹W…«L9 ž:=\Þ«jö¾2–œÐÍ¡§³T®n1‡VtÈÓ¾LÌCôŽÕì=Ë÷ù”°tT¥×ÕÖz…ñ$YZ<*4<†¯i¤&A&Ùõ.˜n•ÇDÿ,égüáHÄ|‡ñ¶™µ“EÙ:O¹™6§ª ŸHÚVW̨VˆS­Lĺð˜ÖH9%Ä®qdÄÍi²Ý¸faîxqvÅøw»…d%uó¢0ÉÝœÖ|U’vKãº6öøÌ@!wJE÷²t!Ä möˆ ûjVÓç[Brøj'Y×öÂNY
+ˆƒ÷ÎÁõs½/’ÛÖ[0ø´ÊßxÃ/¢µÚô"ü(Nc&uy âEB:\>è³€v¿/èzw–>Œ¸¸ÙŸ3©å5¶é¿U@<!%^>ÓÁ£*8Ë•ÇN#ü^.¡ èFj$eoq`Ì^r¦è8OoLe¾À´¿öùh `üLêEW*«
+uóÁBˆ‹Ûª–õ›ãðü†Ké|^ŸØ$ÉÃö¬:ÿÊêÞYdäÌZõ[nðIZ¥ïƒ&ýMp‰£5ž×@ÄqÙ·dsá×mSY#Oô‡àáiÅÅžØ'u0övFä„ùžP( 1•}äG&ý&Ûrô€ÂŽXtc†BZsÔŒ¹h Mvi1ž¡!„ÍcýI‚#Z«ÆOv5„±^0)ùû¼™T8 ÿLñ/÷ßÓª"cÉ\Uå»°8Z›8´ŠÂcçÞ
+Î(ÒÚO¨²?1ÐDµò r8!´õ™D±h’­ úÓM~ϟǽ²…ë†î~µôqÜEÌ Ã7)e§Ì£ÏâCÆ'C_{/[ߪÆ>O
+º íää
+ŸNvYÞb¡‘±#Æ™uiÃØþáòD„Jº õJÌ)±ùQ'óŽéE½•+lx—.U!’o4Pe†»> ½güÏ/ hß÷ VŽO~^ÔÌðåHàj!Ï_®!‰7¡†:£L[‘xs¡°öJƒu-{—mR” ãÜ>1]ÃdKFq¸7}æ@,¶¼-Ç¢ÎÀCþ¨Ù³GìA YJ§øÕöú (Í¥ãX¶2À{ÅõÚ¬Çú=A$ÓbPI²4¯‰x¾V„÷c½áÄUŒì‚ü¸Úº»H!õ
+.ø@úo‰.Aµˆ¤l”é
+ZC¾“üxŠ>èï‡P‡ˆ%<ý`TTþ<¸¹Ã¨ò~ROI¯Hµ•·?}ñ7lymþÕ‘¼%-€†|~‘@˜†l
+û¬D¤AôùÙL—[€EfZæTVû=ÞžWðó‹OõtG 6ódìøÒfÜ_J‡ÁöR*iÖƒ¶_Yx}|!.ü9l½~ÓËöžû–4)¾ÜS¿4ØX½½ïü1Xš¹•.Ä!O 8×û…m^üÞ£ql1. ü‘B&xdûÎ !<ÏH›?©³Kì›ÇAà’°ü‰‡3ÌXo²°2fËÔáê.•I¹Fÿqš.ÜJ’ŽŽý¨Ï;µä€Ø”ue½ãVX ä¯u¢èLJ{BÖ´Æ ±ˆèŒ×°ìÇíç&íò-MÁÏÌ b²á—“­Udf»[{¯â…LˆÌCü¬¸"ƒƒ‹ '‘‡x’cEµõ]G¶ò¦‘îi­æs*Íd&„ç­•ÝÖskÍ6ÓåøQsèNíË°k—ËìÉ_ßoQƒ.ßaÌ/ÁsœSè×òy® ëW žc.©h–C>½t>! |x 4oÊ°úÀ׃Õ,o-LaºA7Í°Í7)äó3̆VfŽ$0T¸Ÿ9
+ÚŸ¸\@!#^dcÉqæ’ù-$ õR‹ÛGÐÑ‚ÄOL!¢köæV¡Rî6æÎrMˆã'¨_dœjÜõŽ­»¢'Š@z£æìôü,–NÌüua„¥¤|a¬hž~"^$6Â^°|ÒR4€†ž 0©Vb"óãÏ ž‹#A†L6G²»0… Â3ê6ùD ¿‰‚9È\Dá:ÄûR(¸ë?}=$7zOª ‘—?…!<تyë<Í÷Æ Qš?ab{¹F
+Mp.Þý©\B„$–AìÔ‡‡}Õ»X¤ ñé£×B?¢)ÚãŸ@´Æï 4pÒSËý
+±5Á¿Z¶&
+Æ<H)]Ì{Á}꺽î¡›0<aÔÔ.’mWâ#ªš,)=Îܘ’)nÞ ˆ=@öõÕ<jÔÜId¶QГörº+ž¸7rªXb D¡jºçÆœùaŽG¨¸Y/°kÀµl"%¢´™º:ô7“ˆucË©èÎi½ÔzZãß'W‚Qn&Z¡gßè!ÕÓ<¤Ý¯/Ú€àuÖXž·0‹ f_6ÕaZÀv`M¨¹ª—1bvÕIü‚Jn.ðK5bø½ÏÿãΔ<élS+1ïµÁQ¶ì…Æ7õWv[¸!MEXZ3tŠ·`~¶ý¢fìZp‹.fõ»c2p&«7^ö#ô ¾èÓ ÙÖ)xµ¸åí]££Áµnešc›JÛŠÜ|g³v$BÀ!W’Œ ¸U¯èÎViÝ
+§vÉ×%’Hð«.3„ŠŽX.òï˜ÀlŽ²HñÍgÅ«ÊFýri4(}õÑH!çDCOÌ|Iuúà%%Î%³“r)¹X!’=t’ ¡“S£*b¼iV½è6À.?ªQ7¬¦}jRÁšm‘œÇäÖ•ÇpyNL0¤ÝñÜöè@­³Î¾áµ’2רcíågE*ÉR™Ò\'›˜bàáÂw½v0Å8<'Ì÷’B'Ýg‚§ îŒÁÒ›=¹Bäw^ûÝ¿`³Ø<9øMä\5ö5ø•ÂñWÈ=˜XV’¸…­yô„i 6-úDA8qN!ÍŸ$öÊ“ó1  ÔV¯çÁ¡(³h—µM±wæ=Ò>zoØMé`w%óäû›ÕR÷bO飅Žê>‘ÍZtuùª£F&¼O¿NAJȼWêÉïÁJƒ6‹¨ÌjéE¶~‚ÇÑAxH:ð0î֦̽×A{5ë?]ñ-|Ùë{É·"|ÆÑQÿŠ D™X<èkeà 8êª=§fÀ¦•[ä<wÐÍ$YÆeÀWw©Ž…Nƺä ÷}‡è4×ä+Z—¥dáh½óÙ¢·Ö!WŽt×…³\|çû3[ÇÍÊ´ú«ÃyÓ
+6 eœn&`±Òj¿ŠäzM’äÙõDè.TbaY˜‚ì!Ɖo36ðõ‘nFk„§‹pi›ÇýÄŠ»iÈt‹Ç®:Ó5º²0“¼/ºI´„SyÕïɤrJÝyúì¡áùU4¤éB,¯˜”éZö}
+Y4=ÊB<7ïm覯üë÷¯Ji/¶Ov¾“…8·-’¿láöiEçh¤3Ókɹ[x)ŠcÝk™½¸CþÑy…Œ ¨Ÿå3j¦§Õ5͈WÝç9XÁ,­2n<ÓK{ (¶P2“ÀŸ^Ši’;VèìVúJ)'¬ð°<ô¸O±Ó_ì'Ñ« FX7Ó
+4çv웞îãU:ûò¤]ªzrÔîtäÆ?+ÂÀ½ÀÚŸ“rñ\2V,†mg«@bøÂBòØÄ*†N½àgÓb~õÛ_æ<žo²,Bÿ§X``âN¿aÕ)`Ѧàt8hOÐ=Ð ‰CálC4ƒÌN©Éce)Aù1éËua‹¿nôDW“ôÁëªj!±”/À·vy²ôI¾å”®Ý‰¨hß[sÌÌóo|ð›êÃß.£VƒžóG½|VÚš\ä‘®X+¶J`sEsߧ¬Ðû´Ú0§Ø¥‚ÔÑ {8–À}µ‘~ ;¶M”¬A­?¨Ȉ
+‘MËÂ)ÚJìyï’盾°+ÛAX•¡<UuÆEÁ°ý”Ï©S«³ óõå0þ
+èP…ÃR œüZþ¸» ÈÚ—F*þ/\<>c43‰0ÿB¯u!u•ŒA¿8ÊNÎØÙùªycPÏ¢/’­ü䄆¬äÊfI˜vÐi}°´ù 1Úd„fÍ9~%Ù ’Ã"´ÕÅkƒR†à<Q9˜ñ&å÷ìôNJì
+ü•Ä;÷´ìCc6g¨FÏ 6Z¸ñOÉ4nFíÌæ@Ÿ(’j½9ÌRi|ûÄ«ÎÙ 8-J_ŸW䛉n¤ÜLá J¯:³Úl j]­)Tʸ—iÉd8r×KÕT˜²†÷A«—h,‰BuÖƒ}͹‹Sðé€mWõv¬Âë•h +Úþö…G«I.& â ´<¼Xh
+¿ˆi_þ´° z`?ªÃÖRf|°¦ˆŸÆúµ~š^Ú¯x¸m)h³zã%ÚºH—ªíAéºl…Ý”ç68c`Gàw©XŠï[=Ƹç(àï–†ãß/ìת}ÅÙ+¹†¥!\
+ÒTÅË£A}f–ü™‚Ï$±*AËý¬zï„ži'ɉkê–8º[ÎÂ!w@ìfsñjàd€‡XH+ýèNY}aK:Pä
+ Š€øÞ à ÕƒöEñnhóJ×T—öД‡B!p±•ù¦—l“{^.¯Ð ±LíìØK˜Ê9ˆGxC‹€U¼VX–ììÆ©škð*û}¡óŽÌTÝF[|¨ÔõÙa—UÃÔÆöIœ¯ÁVÔæé„7½&$¡N‰pˆ®Ç}E÷År{U­chX•è'Mí¶Ì—ä$,ŸëeÞ·ž1ÍK™•aFïá{, -ÓÀ‹*øg•ŸÚ6`F…LÎsîã$’tdÜÜØy”®Ç¢%šð¶1W´ËL Ñ,uþ©löW' ¸nºó ³«öÒpÓºåÓfŽ¶ª¿sKn?]j‚°Ï Ó¿¡gæGˆÀhfÙ{Ô¾ Ô‰í’MPŽEoødx€Q²t•y Q ”î§V¤óMÇL9‘5òh°À!e­Ÿ•¶¸¶ù8¬«”{†ÔuQ°b‰¹BM‹sÙ²É “ÿÆÌ]ƒ ÎôvÍ&Ì‹Ï‘'½8«“’ã*I5«6i²Ë iw ®š@¯Œ!e$}‚s¾{‰ÏÑëŽ!!cPGÛD<À-€s_|ùbò´ùAðËQó‡ú-š"ñŽÓ&”­Ø5‚µ3~‚Šz½òh!Îi‚é!ƒ³ÈÒ"s‡¹;o˜n¨Ë¼ 8þßÆ”$'U©
+v.Z[våe±àÞ¦§°†`G‡·^—‘žÄR…ÒǺOƒò^ØÔ bŽeõþ™ŠÄÀ.2¿AÏ»bÁ²¨¹zYÛbÛÙR8ÕohrZG’Äý2
+’k­~ºk ´,x™-­å®¬¬HÖìFÉÞ NžŒ„_ ð3¡¬yÀ=ΑYÄCç­²(/ï?çïIþÝRˆ²¨è‹[_³r'Ÿ‰T™'´7”X‡€ *ÿ|xÖrlŒIìèUFìžovñBW¨é±½5à+[™ƒã·¼Éú×»„&+åœÀ´±Ùg/<R4:ë&ŒCG"ëiŒTâM•3_ßw¥èùiExZÔt»ËŽ´Š<«7@µzi|ÜŽÄmÜb3]²?4¯ƒMÐê)ÀžX~j8«'Œ½sWst’g9èáѨVóìëî À–Ës<|ÚËò!Ø!í®©±¡–¸ªŒ6Õ¸ð‡Ê…²¡ŒîÛÊX©|¨_=›Lè£ØÏÇÿ\RS³îwŸ";Og0N¨ã/Tl0ýu[£HÕú¹ðλœ}¾f-õaÌâ{ºGüyèQÔïÊ‚´q¨Gγ *{b¦¸¿ŸÞ¤~+6C¡¤Ê:j]9Ýô¼w©Ûبþ4õ6Ä^ @+µ¡‰¶°l;âÌdýdRCúN'æ“DÀUzF9ù ʳ>XJ²éžÿõs.noÙa“’cÒ;c»öZ:ckJc£S…
+Ò§ôSëÓ&áî` âìð2«oÜ“ýÛ²z6µÚÚ±]9̲MŒ¸#úSýª½©@Âs]¥`Þt:õ¢q“ÙtìwnÒä˜×j¡
+Ò¨tWj¶q,£Oí×Aò*úüßMî´tùó—ã´Q)VÅ1Íѽ»y§ÑÁL™¸Áì$Ó~ݯãvÔå\ƒóû ÝÓTùœJ̹`¿ÅŸ
+ÛÎØ,kc4Üò9¨3~`"Q€p ¶¥Î6…y»L3ñ|hk$XÀ­MÁ=3Èš„ƒÆ8¯ó÷øúãÁWæ§ËH‘þ#9Lñ>Àü‹tú“ïüú†Çåħ­ Ù§=Gß™nÚ[ù²kcñ>þþci˜˜0±½ýÖ$dï4ï–7ƒIÉ=&ß’(LaË­<ü;±! O$caf%ïâõžvefÁþc›k?2H·Dâ"V•Áó §›#„M韤ãب—ý™Å¨A·”€JJmu`UßK±ýj”ùŠ÷Þ£Êä€ÛïÖ/ÊÞ?H_]x3áÂýsÞV
+v£–%·;®ÄÙùÈ[Úãèß( v~݆¥À¹&=/{±¡MJ‡³ã™#ªCò¤›SOæÈ :I»ñ£WX{Ì5ö%{›ñp2‚D{j)Ë©‰ë8tT˜FËûU56…¸×¤à 6ž]¼Æ˜6sÃ2ôk£ªXÙ?"Wª¨T&ãUÖÒÊŽU&iÃÓØKwzK‘^ :àra‚_Ò‡mJ¯Hd—&—q̪·Ïöz—7QÑÂÅ'ø ¡‘Ô”|w»Xõ­©·>uC·Óè/™¾¨öƒ¦»Úéî–÷üoýËYtpqSù¡l¥®qõãõª9¿"Mq†ï³€xºôEÅŸK·š‚¸ x÷O¢&Sƒ:À!ÏbÖñP|iÁSG³hlÌ0Ðl†˜/?Êg°‘ê§4F ½  OÒ
+¬5]“–Bþüd?Ã!Èa)±Ÿ UwW¬•×½é·@LôƒoÑ|p¨ôÞŒú˜Ë°Ôð¢‰OØžfŠ\ãà9]ËšJȪÈZ¾P„ðôùPŒ&†®_vǢ噗b;ú­-aéÆÉJ ºœÕ7 ÈZœZ'ó¥ ÂSïtj‹¬¯ÌÉÊ[3Ù?–¤2ßli|˜µ…Ü©†ÏÉWßg9D‘ÉÞÌŽüß×âÙ¶üô&‹÷‹òBø»&‚áa!ìëky`¢4¬[(TP¤[î_±K"b·q>ë†L/ozÍ°~ŠFp@8uªÉJ;EFn$Œ©
+€­^A%CÛåÜLrjùY¢žÜn\4ìZàT2'c6ê
+½‡?„i¬yè-†ÇŹ(Tv–lè4Ä¢TÁÀô>\Jf>jϘøaøÀ1•Ü< m§afæ»'Nê8¹kðèRž;|(¦b.@nz# g[Á°½™­nÙ¸œLz¤Zõ’Êáa+ÿ|ÿ)\ØÇKΰ‰b0ÕªcÓ,îó5Q5²Fg:Ë$nÅáÕÒõÎ €Ð<‹OŠsº²ÝÙÿDÃO´0yw·„¥ÇÊ2ø½= Ó{ú¾í‰±Áh%‡òRsÛUc"g×>ÈZô3MÃà^ÒË«gÔQ™¯£—k½5ÖCÍôòíyÇtÛÔ¨Ù`X¼’ã$’¦½$85Éi7ÍdWꙩ/ABI±Õ燷Ö\šÃbEPE «Î~øxâ;p6Ú5´£„ÂÄ|öÊ~Û`¶­\3þ'q¤ÃsáÖZwüÈé.4v/'Áxjµ¾%Y3† #óÇ6¬æìy|^Aj¯ä–Û4ÒÆÕˆÉé
+V®ØäÊÕtßJ¿Ú™\z?K*¸6¥!ÑH³Á½Ù¥‹Lº|_‹MœMI¹$Ö›­»Zƒ¼ ¡¹ ’uºKÅ“ž
+·ìÛû'ãD¸Ø“²x};èþÓ–‡úŒ4D'P{”òeéø÷ÊÏÍùøëjˆ¬“q~½©ýë¼ñ<ZxàM>Ê€·ÅV¥V˜OëüÃwK,-èÄJ„¨Ôq®ÐÍ°î
+sþo§ý™
+#¶cër!¡W= „´*¯g±+¡‘À#es_‹,2™ÊãœP+ÒpuMYÖP/ºÈ˜ü‰‰;°>Û[¼”ZDñ½"ºßoÅq™Ü
+èEHÁU 1u”mLz‘ìåÃh p;ÞAåO‚¼ïw2}íÞ–!F¦†Ÿ’)fmûì‚Àü M½ÿÌ{<ÇRÚÖ[…§—Ëu Íc_Tž†t¾Ö“Þ©Û÷ŠUé„òPZÜ~›…–nX õCg›
+ÌãR7ù†æ9`ŠÌy8”5bX%2Z}ššÖ<.Ÿ3 9‹o§œgéJ€’Ï Âá·‡GæõÙI°g Ù[ããÅ)d½ T¥1vÙÍÅï<wú¤ãïWÖLœš‚ œ†ÇØâ3:Wª}ѪìpH¦Ü­|œ@l¯÷ŸS8±åëz,††ý;x âMJšÎH#œxå8Ÿˆ„‘Þ¬ÝçÎQøù—ÈÞyK|8aç*Asabvª†ž˜L)"Ù ÷¾¤B,ƒšqe>>þ$h(O®Ó=Æòè:ià·ãa(×ÆÞc1}œSBª=9›öÁï‰âòí§ÇØã®LYÛÃ%¸ö9¶Z³cçÔ%ו<7oø÷¯÷pn=¢+‚t³@wFQ´-Zå§;VIÿòÉòœ›¯ÀémÂYªíÎ)[HZe4;ä]æIÚ1Ô
+ë¶ÓÍeÖåW[v»óœ ¨ý³®èM6W(Js:L9þfzoÇÕÊåÄôq7ùX›§¥å;#=)GMjÓ§§°ó>7W7WB±Ú[·ùÿz¨w&"L>bq\½·„Ѫ~yQÕák Í«.·úû˜¿W?¬>¥¢¡@#r’ô-”‹Ea]eãò£»JÅ™|šŒ3’ÞR£ˆÉ½ÕÐüJåñDáÃhºÂ’ð‹²wíª[*Øà©r‚kº4\¾`fÜ^î ?d:ÍûEËf™³¤‹M”ÖCÓ„osCü>Kñ•¹4ÉÀOõ62|3ÑÎyõž=¹»ú1¿¾^ž®´—Ÿ5x´ !'„ú÷On,‡ÒoÝy€ùbº…q²{m Ì±ÓOkÏx†E+ÆÖÒ7ó!xìòŒF™³0¬·«H{¨˜þMû¾É^Ù^ÍIösìëôòC¨Ÿ/`u¨QwO¸øˆ”zŠãDÆFgÃî43ö¼š…¨{ÑÐ÷ É`²lAoÄšCÅôìc #sˆƒ6>Êjv*AjNeMx‰@³ÓÆÅ£4ìæh7ÀP­–gÂýÿµ3çÿL0
+Áiz“æÚæ†Á‰²ÍÕ²Ïm7ZÄUé×4(ê6•…zÌŒ¢PMpêÑýה¤ù†Ô(Y«»kªWÀî!`Ê£mbÄ¥„qgˆœíF2X3ó£æo_ÞdõÍd¥:»T˹’E€-ä{.1ëÉ
+dÜp®ÈVã _¨¦1³å{?î:Wõß~Šœ©"LùQjƒÖ±:KY5bx„6Úb ÿÃÖëlƒx¢¥ ~¥,£Y§Ê½I|çȨ!VÃ3µÓÂzG#•¦n4’£Ç¦ßÒù»oôu¶Ô~«Ó
+7Ÿ+ó²Vï„(a=ÔÅ>\M!†rµmè÷È%
+^&ÍËâJ€°—Ô²?\9¼h¢Y§!¥EÇÊ·<§ý#QÇÿ9ÚQ ·nºÝ's,ÂøŽ”¢­y–’Þõ¥«½ËÆð›_ÙïϳŠ5NÒë%Àv<¡¡ûÈ<{šOS*%älõËU¤¿\"•e†tçù›ß©s°tvܘ´t»Ç(Ìv« k‹qµ÷³ƒø™l9^÷k%}+oµ©´£‹rüR·JôQ3ül^{´v;¥ r‡³°åg3¯¢Ɔ’¢Ó¢\[#²Z̉ˆfû½Ç|(„›°ö5ÏL‹d•­ŠîhŠÆ.5TËúé䦆zp׬ó•ÓrMΩÄq¥r.œðÜ´›‘À4€áÜjÿ%®ÿÿh
endobj
-1238 0 obj <<
+1253 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 34
/LastChar 125
-/Widths 2739 0 R
-/BaseFont /AXOYUR+NimbusMonL-Bold
-/FontDescriptor 1236 0 R
+/Widths 2817 0 R
+/BaseFont /KDQUIR+NimbusMonL-Bold
+/FontDescriptor 1251 0 R
>> endobj
-1236 0 obj <<
+1251 0 obj <<
/Ascent 624
/CapHeight 552
/Descent -126
-/FontName /AXOYUR+NimbusMonL-Bold
+/FontName /KDQUIR+NimbusMonL-Bold
/ItalicAngle 0
/StemV 101
/XHeight 439
/FontBBox [-43 -278 681 871]
/Flags 4
-/CharSet (/quotedbl/numbersign/quoteright/plus/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/at/A/B/C/D/E/F/G/H/I/K/M/N/O/R/S/T/W/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
-/FontFile 1237 0 R
+/CharSet (/quotedbl/numbersign/quoteright/parenleft/parenright/plus/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/at/A/B/C/D/E/F/G/H/I/K/M/N/O/R/S/T/W/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
+/FontFile 1252 0 R
>> endobj
-2739 0 obj
-[600 600 0 0 0 600 0 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 0 0 600 600 600 0 0 600 0 0 600 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
+2817 0 obj
+[600 600 0 0 0 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 0 0 600 600 600 0 0 600 0 0 600 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
endobj
-1217 0 obj <<
+1232 0 obj <<
/Length1 1612
-/Length2 18760
+/Length2 18918
/Length3 532
-/Length 19672
+/Length 19829
/Filter /FlateDecode
>>
stream
-xÚ¬·ctåßÖ&›£’Û¶mWœT²cÛ¶m§bÛ¶]±*¶­[ÿsºûíqnß/}ß{Œßšxæ3ç3×c“)ªÐ ÛþŠÛÚ8Ñ1Ñ3räÍ­:;ÊÙÚÈÒ)Mlpdd"@C's[QC' 7@h ˜™L\\\pd
-ŠšRò
-üªm{|ÓÂv¸* Þk‚駹?ÛÜ—Ní>ö¥©F{1­(zR€—ùøÞ$T}¨›ä4 z%ˆégQžW‹²ÛZìŒê»“JÊzÅïPߧ;X`®ž¨üH\
-üÐIí|ŒRëc1:QA¾Õžž‘'?=R Ž õÜ@öíãÑäÄÂ’ñ¸@ ’GúÙçà h©Ux†SA¥7!àÝ´_}jt{êå‘‘â’FX˾*šæ¯Ù´Ë¾'A¦· ð&Ê9H¶îWþÀ¼žŸŽäJœæšËýZw&sÄâmŸ
-쿵$ œÉ„®'~
-j8+¼="HOló‰à|V”LôIŽÅ_y·1A‘T5dSoEy%|Dm3N†Á‡P¥{ú¼ÞÆÙˆ
-šÔ0ã#¢DËFwˆ(¤ ÙÓ§~¾f%ž©Y·˜"<Ø™Él¶‹Ç¹ÿúä2Ý©²HˆîKöÿ¢Õê’2|Cu˜Äï4‡Ùb
-dÇ$[ß4˜h3iï*#§†]Y·6_¡$l¥—\5Š´
-ÖƒGÒgÏt7êz \ÄØSÂèÑÝá Kz¬Å~»šF£¦s>y{­)ÕCóaÑýû²Ú7× Ý#ÓF¾o¯Q2v3äòÔן¼xÒ¾#x9s¬(ÃÇÊÒ÷öUX7Žqb‘ŠŒHö;QºÙö³ˆÊëí:²5p,sÍŠ˜VÚÜýXQý3j .jWô…¼¬[Ç2#oîä2’«²6¢£yé0O ÙÓËø8³)Kz¡l„ïzä^骟|‚gOH)àY îó¸¢e¾,Ùê›Ì,ðŒ‚þ²Êsźy&Ê⥄ñϤì*“@bKiyäúk@WÁ»¾/ÿë÷îÆ5 Ï##êáù@¹‡ŽRƒ;ÇË6ÈV|¶å9{<)¼ç QU+ó؉¬@"9ãå·¾9Ì-–†Æ¬»î³ØŽÈ³¼…„e†t Y.ž±áWËÔÀ;žš¹„PfÙWÐBNûŠX÷a|nÓd5ÕR©¡Ûo÷¿]fǧ_$¿å0[^ž‚IpƒVzrEÄsÜó^Á¤ÑÏJó„½Ë®Ïô—qŠž€3«Çþt¿ipôøɼïÆ/ÑøµÑ7d™§©M’°{<1†/ß{€"Ãg'”Dnnë«J0 VkÜ„},j6ä²6”ª ’nå'Ž`gâ[ö
-õ Ò””d³3þˆA*ú<ì;»ãçëȈÏÞr‘U¦Ξƒ ¸R64yEIÝ#ب[@“4ÂS»Ð¯«±÷è(pÖg/ä/ÄX»ÐÖ@­Å»b¾äcŠÅIî n¿¿„îçç3Ã"çU=^ó»\XºwV¯”¡ûB:Ï‘
-[—ÒØ$ ´zEø}:µ`s(éHô‚Å+X—³÷¶*5Â^ÁmøÆÊ$¶ïÉéGH
->êò:Û†ç-àñwN‰
-3“7º]Ç }"}xt¿-i7Ÿè¹½‚•
-üƉ¾ÏÑüІž@S&_#‰= ]Œ% ešPŠ†¼RŽ”oQÈJt{¸œñàº0ê8&ò½A"zXXª‰„^i$º@õÁh0škm}…“u­@îK/²OÊ\®zOóu#«"ùÈR.¯AÇ„ŠòÙôÐJ©4I°muþ`*?섨0­V2
-p‡÷/ó¢nD(0ÂD
-[Õ%:P+t¦*5Gil@ÐvmY‘ ‚œÁ‰~¦S JÖjn5£ë—ðys¬Ø0ÒÉð¹¼tOC»¯‰æ÷­™ÄiÐDX¯Ð
-Ù¿®;ªôŠD™r]9@èšÌˆ“ÖS|æ[Û, ('|f¤~}Ã!Ónëw¦©®n”Š\8ÖgK½Uz:'=*"Ô›%FWHO´­Ú³ÒèÒõÖDÐ_|ÌÎ\ê\Û
-qá‚ú a¾ýGŸºî“•e
-™âîÑ~)Ü“U‚™$¹ß“ñA=‡C“ü‘:³œW•Pv Æû§hbÖ¼ð»AàlmoÎUÁùË7…¹í \~3È
-ÂÏå±äÑs‰TNŸ +Ã<ˆ•9O¶¥fÈËDˆF§‹ÑÉöY廙l›¸·°6¿33ïáð\1ôb° a÷ Á{ó|³m«é*Ê›}½"é?Yš,µÔ¹‹ e§úPh‹ŽŸXEô¸º\©çÜ[ëgøV3C^à ±çSø¥$š ƒÛáÃ:“É»®’´ ð¾ˆïÅ^ƒÑÁ´‹¶ù´ë¬†)à!jáìKøGR~ŽCkCœùŒBΔí!$ÐdÕˆV`¨­\ ©n¿»Gó§æHðnê Úïvœ&ëÌŠ":—íÞÕ^"Æ;bÊz³N¾0UÅÕ–ûÖ1ÃÁ,Ծ㢫|7ßoV};º:Mý³éØc£ôÂà¤=™MhüCÔgaì‘7¨²Âˆ±b®5_¡·¸/ H:L« >r>Õ²"™y£6o„Aù±RQ ¼“_;N\¾L©µá%7¸àÀ‘¾g$µc [ž Ü80›=~Øü.¥T¿†ñ¥™^šW`/ž$8¢%S>ô”æý XÞ$'ñ.ά¡¥„2Éÿoƒã;At«!Äò‚´žÖ&\Åžã™dn£˜kjÓ¥³< -YRç˜oiæUìÚÆ‘ÌY Kî%?ê5TXrz¶ë[È/¨£=gU0‰Ü„€UShW´1ûºzcw™>ÔXê1§†S\»²3Š‘ÎBaʉ@,ŒëÂ?/ßu3u¤ð;…®MXÛ;Í0¾z“ƒE9–T¨ÕÖ[x,ÐÏsô1Æ÷Ìó–Q£×©VNcÌ…ËrÖs,¨ ³“eeµ‚l€N0j—;î
-??zÜ…¤Ÿ'PìE¶e6¹-Vƒú£ò>áÂPe†–½Í•Gèf5©{AuÔ¦JÑø^V¡ÌP
-:Ù‰4GÌCe*Z­:?ß"íÖŠS$`ë¾*~=QîFf†£¾d5 ?Užaú9v¢÷"“T!KÈ õð;[ùÛ
-ðþ¿$ vCÎÛš,Ù‡¦_¡ÌÐpvœY4Ô}ay=,”¸Ý
-׌’üïa,ZÆ¢O>c!Ö’&,î—AØ$l‹ˆ4`¿Ì™é„G ‘9h{±I K­àôáî·3ÂF£Ýйô±Peûw
- 8ø=ÇC¦ñÙ"ê®ÒL¨ì:0%»¸vÕ´HƒŒ?˜ø¾âù¢õ3™VF _?Òí)Û÷³qoTŒ²>ô£‚ùvî[±~á+Ó ñ¢øøhÂ…ª>çV©Ã{‰iÜÁɾ,ÓPhF°1J4‘÷Ò.’×l"ü<KÑ*ÊûY•eûÊ]XODÏ^,@+Ý4‘‚èbiœüÙÄÛù§ô¥‘mJ÷e g§÷H9×-7,z3’ '‘nKÜ‹)«ZÞu¯,Ú.«9¡²ûÚ3Ö¥$¯Ü šc
-9P “½¥Þ8€Fl‘…RÜ⎩r«'¶&ÍÖr+v¤Ì•³7_¾‡ßm/!ÚûÑ9òÌÀæAVÔ•I°ÃL"ö„O]á²Â!³™¦WD§w<·¿ `Ÿœõ[ï ¼¡°)!䛽'2Rj:PCøÄfűbü]–¬L¡ÅpÝ·mñª}pÜf†Ë ÑSYá‚ë^0Ñx‘Ê·€ýÍEÛÝöEô7N‚)ÕmÑŒªæÀ á7Š•U÷ↇK›—ß²9¯É,‡…ŒŸX¨<™¡ÌÅ…cÆ"ûgÚùÏ=j³é b«*"ìëLZaì{oFðÂ{¹†âMAÆ ßQƒ(°Á0ÖkøcÇǦŽtDþ<`N%ìy0ÉB´¨þ•PPˆ?Ĭ‰…šåxùVày»—.Jª“ÈÌë/vg`ž0zðõà~¬ |ôiÄlTªœXöA¥j–çW¸ӷôµœñø€l/^ôŠ^ÿ‘XÕH6«3d"Èî:¤úá_T`‚¨KÆ÷Xž³¬¦€­À›†ÚÐt¨bØ×82ºÙ‹°Y
-g–w¸Ò_ÍÑf4…,lÕF¯tçÜ äÊåšv…è0 ‚Z„•åIÝX®E˜w²b!ZhÙ”áÉTëkS¸¼SÉômз}P¼½ËiGýÖ´b Â/ÚãzNÓŸylQ]*+ ºÞ"†V!™s¾Ð›Íáüô¸Hм‘ôCÕ93Š+-q¤Õ01=*ã±ù¬uŸrÀeÂËÇ
-{ÃbFg#‚˜–lyù>.i¾™?#E¬4*872lºGÝ›ü”òóÕƒ¹óšAúa§¢+lµh ›¹cÿ[ÅU‚·_Q'ï–íMÇ7&U6æØ‹{tÍ3_ŸÔ_óerˆ$q¿E½â>$zr,¾.ÄBËëDÒ‰ú@û‡ÍDü”Ä­wPL+w1xàKDTjã_žKU÷‡Š¿÷ðN€úè±=©C; ]‹‰ØÑ\z©r¸úÕ~ÈK*¼Æf:²}䥳ý]°¤Bu›B<+2¦ø¥Ø×Iÿ§½²¿S©ôûü¨·zM­<ƒïˆn1•ùu›Ó÷^Vú#:.æ?¿yÙž®ïµá§ðƒ£|`q^ Iš©åâ:kÓãZFMd§Í‡ˆ¨><…÷Å4I)'16TØ͆Nß°`‹ð` [€r óz‡ÅÜl8±§ ’¹Ll[@Æh_ëí; Hk¢ÉjLÁf'‘Ö%З&så@µTýb[Ojöß 0®šm-Z‡µ<"ÂVç­wSp#H¸Í°ÿ,3L\g*±Ý¾–Ýçpg¡’^uІªH%a€ÃuQlàÎZK‡B£vHÕqe·lAW`¬úÑ–îxüFÁŽ¸“Õ7º¼Î IhB($y{³ÓËòMSô~¥ã # Z|Ѻ6Æ×c>ÁB’Y”ï‚*¤ÓµEkèið„ûܲ²ê6ë#¥ÊxNÛµqqŠ®k%:ЂÃÏý0{Â4Û¤8¿ŸJØTá‡ð~UâjçµDg,Vå|ÌÙ)îmÛ ÁÎ n$;ùâßÎWûË)6{ô2÷Å1§ßÿ2_Q.4ÓZxWG)ûqŠ·óGŠõ{RÜh¯ºÎW¦ãrzÞõÈÐKËDä]Üw¹Qöº¯G…\å# n—ë{aæÆŸð»Â¯U"¨k;`aEw}øŽ¦¢´Äætf µŒu &ßéæsÜk¶Qk¥pxNšnL’v’Ô(|)²FðcˆÇY£0c…‚Ø0cX{Ò}hƒ¸eÐúƒKŸ:†ohÁhdYÔ}îw¼Vj¾]½¹cû¦wní†PžQY@V)[7ôU5:Ò³ûÑ
-¢ðBîBZYø ¡QÚ÷¥Ä:_}ÒbeÚ*r³9ò”¯Ô¿åÏ{ݘéËáªÝ]1÷WšeÂ…5âo#”‰Nb… ¨ô>¶ïÓAÎì·¼žíÉzàá]M¸Q»„)ˆ'°&má"²‡8øg+Gž‹-¯ðJÁÙ¶(!‚d%šò÷F¨é’‹Íü0ÓK^žŒð §.Úf9Õºi"‚Bœ‘תÂh<MÆOOìu h9ž&ZO{èìxö6"÷rWNÕ6Ù$Çøâ0™…´žUîÇ>‚0æ£Þ·/Dž¿V™¹6j©Û̇‡o—
-_0ß9ø™Ü®Á³@3&i ¯)BBD‚Òr8ª¯sÿ’¶þø¶6ù5EåÇÁ‡›3§ŸÒûišI©R«‹ª]S¯Ðeÿzý!KþãÑÑÛ7çÙ96@:áO´ˆE(Q`¡W¡ÐêgÉCIචœ7·@ªÁ×N~ðOÎÏL ÔšîÑ„6t>æ€ñtFt&QòŒõk©ú¡Ì: ZBw˜0.•Ö
-X˜DöBà矉uƒRá±êëŒãù³"‹‡»½øS,VëUgÈÓÑ×Hë‡ Ö•Ø®ôh3ßõ½@gYa°«¯ÃK}\)ÚÖ„èoô}7dÔ{Â+ä’רþ‘ǟúiæpC8[bk%u‘I0: ]¯úíŽI*]¬NꌕԲî<'âÌ€Dq¥1öYßþù4ˆù;4Ù´Ô˜¥^ðžöE›:ãZ”¢‡ÖãßhSÁÒ"”‘æeGq ¿¸ú‚Ò®ˆ÷ñ"‰v=}ç¾ÌÅ%ű;>RÕw´ºÊuú)DãPèñåVÂ-{ i¢87£rC ~zIu(a=/åÓ`éÇ
-`JVæ€ÝM?Ë-*\šFì\q¬w÷4³Ç"Ây'LÜi æI²úвTxÝCxEåÇ7#Í=䬯šÐ]ÏÂ)9™šj^wpŸiuØ•°I/9c½šÙ;ˆ†YÂV%íÇ’:ðgEFÙÒ·O(–qS”•=ŽM.A¥ó¾5Æ·ôŸ·¸PF×/ *ÝXåï·Dê,oö°`ÐO„&ÄÓú1¢ç)ã”au§4‚x­¦"ô£šVKnþ?af¿½ðÒâº-©Þ(äM×4jý€‘âª[ Âx06Ä–3± ÊbV®gG¬$¨ˆX”£þÙ]0ML]B@! !k“ö'9iH„%7ØdÇýý³ê«VÂiH€ð‹Lêõº «§ÜTÉMÓ´1=1TäöÅ¢ÕæûH&LÏ5« "ŒúÞ¶jªÏa1¾5e‘ׯŠ9³dfƒC|—fS}½Á¢^3²Ry€!©ìcÊ^Ù±•CyÞ>æäŸGY›µöLˆ²Í+ðüw…¯‰‡›]E™†ÏIœº#½Á”“W¿ig/€¶0@hçnlÊäª5Áç®ýF6PI¥pKˆÈKUëqßoÁÎJôƒED=§É*óS½PlBø±a`
-^ñ2Ý9á4GÌMdHä:a,h&y að;!Ù$õÖaÖ8|Z2ÃdÞ‹J‰Óc—…6‘Ñ}Äu"åÈÄ7)õ)ÚÞ”L#mõ0n—Ü^žÇl¡~c[øïz¡AèÖЕ–êÍ™qùÐEm)PF½÷¢xŠÔ–ŒisØ€ç³D6 &œ<ÝÍYï’Úl¥ç¬œs·ÚCò£ypKWFsš£jƒ“ÃÉs ÈÚË~
-¸š4?æ·q|CÇÂ[9ËÞnÑŽ¯U…”kCWvܾOøHB ÔfGpÊñ¦Ú™uw"£Û¬‘M+<ÂREÍœËâ`Ôщ) SßêÓk3—ÌŒÊy‰m:ãs‚êf“Bܲþà ĨÙþ†¨4ÃJ´§ ¹=µ¬l%Ž»Wa*ÂÎK6#º=\{œ˜{áÒBz[òaey}1i%œ1ˆpÊeDNi±`à6^¥
-“V-Á …ê©>Zw>î^’:ðëÖ£,AÎó=a¼PP?N}“­8s3zxC4-áÙ'Ð@¢¯Äa0½ÌåŠ&vù& Ê«¹jÐ-OB;ó¹bîAl/­äÝÈ»÷ #o«²#yÁ?.¶Üè© ®Ï²
-sf"7íȘ'z½½Aܬù;˜-Ø„º5½ŸPoö’RnÃã—§cÄ­d>­Õ‚ëmOévXš}Ý…["äC»Îµš Ú·ñfº ?jÊ…Šs$!ϧmAb÷yg‘Õ3–ã¾ú©Ÿ™ì‰YÊIÚÓjû[«Òaî ë—e·Ù{/ûÀjÂé‰õÙÊZXÀüì˜à äa.ð–Ïæ\àß›¶üؼ¾~ ê¶Éþ¶ü5öZ š‘X’oJQ˜iOÎãÅ[=Z)é!³»&ç–ÃîIëBå\Ý;»"B7›§ c)Œ—†Þa%ó‡ŸTÚÅLn_´´i·‘c•udg/U†Å=7
-BÎA>ȨÅt»î„ÞñMt7¡Š:»ùœ=2>ï((Ÿ!{GÅo’8DiåGÍlœ ÊãVÍÒUŒÖº‘jÜ”Õíë
-ÞÐõ)δ¨ŠP=¥ŠúçÇ ºÚiÓNRŠÓ€„™m:ô¹¾@1??¡– ­”x!MÕT•ÛŸAsË•-&I˜·ö@ãݪƒêE!F_Õç5²î´ÛT² «ô±.è-ó°{m”´YÐßžëÈC&ÐöºoÕ¬ìêW5iø·Š ¹Ž–ðûï~dÏFœöN{uÍUg¿a`BFtCÙ¾VØ-¯Vâe*ï@ì @uòQµ ä8L°4§2Ir©¶Ð“†¤o§¿Ù §¥ëÁIÆtPÕ'ÆiÎâsëŽÉÇTЃF`Þ™0Úu­5hJ»½ Ù‡,KíÜкÔP¡f|éO7§Hf|dÑr^kç Žß¼¥'@>¢íð@‘…„—Ä”ÄÄJÄÞ¿Ý>3„Œµ¬èZˆ›Ù¡R^XÚ9ÈÍjÕy0”Nš¯s„gA‚îWˆ™[Uú £™2õÞzבl‡KØ6`ñ
-î†Å×°æËùß'™+¹O?àªH‡q@…
-…eȤ½øÛ ]Ûq};—¼¿ý%W[J¨÷¡¼–Þè aÁþ[Ò-@^ŸFðGH¿ ìÏÈÜ°<·eÕ@wô¨‰Îy«(‘«xd;{”«‰U¸otÁªDÕL
-˜ªˆÍ|Îóp—aÜ^§9Lî÷‹¥¨`=1OþL
-^ú”ãh@RÄfíÁ•6—U
-×qóp&+yPå°1¦àÙÂ¥å Xˆ|¿ð$6Uç»’ÄŽ¸%¼ûm'v»!†æ^™íç Åä.°¥6q2Œ\õº«CÛ7E.ÄÔ—¨lwBÂæ8=÷_so09Fµtéf²ÅoÊRaáÜJýèb;†xŸ)ォG œþW¤ÈùQw¤ØØV„K˜7µºy$•o5MåÐà,=²æ_³4¥ñ3ž•÷°Ÿ
-áB«¦¨Û$EZk°`ë¥Y 5qÁ[œù¥ëÂF… :ÁƒN„´®jîܨ€›JV[‘
-ü™±8Ébº¢¾9àѲœ&Â&9 h°¼§!`Z„ù“½M$¨'Ì é·Ç ˆ‰b|ö]·[EÍ\çtHL”.=MSeî{F"ä(ËfIÜ
-ˆ4ƬÆx»ák&ªˆü• “KѡڪƎ5soõUKæU6Û‹m™³Ó<{WûFgsü2‘“+tëÑɇ¡ˆ§Ç—–Fë¹mù¨ö9¥ûŒí¬ ( Q«¿˜?©Fߧ$‹OÌr?ãZJŠM¿{m9ùœÄ1+É°‡!¨Ú‚§¨næòY:ŸAÈ‹Wv¿ ˜iq“~ˆRŠ
-íqÃoØ8\"ÉÄø‰m~'8 £Éùª¤\"~Ķº…puX‚8R±·ù;¤‡,qÞ\;1´L AÈ›œ>lϴʘƒš¶ü¸\UÆækèK¬ôó(29÷ðJ3ôûõrï˜O²âåMçÑñBu”蓼!þ*²‰ñØx“–ãfðÔƒªáFb6ä([N£+þe÷#Ìó,+CðÇUÓ3Mcf‘ÐAñn0Ja¸Þ.H”#ÓJ>U³ÂåbFµîV?4™;>
-Û Ì_÷cvDMÄȺ„‘)˜3,fÅ·„@sž?X³¡˜ò\ªå$@Š$ÈW;ö=W!za(NGv È(èᇓÃY†CõdQ1”On?S9Ç>Oµ
-dõ›#.
-óÕu«ðaxÍ'¢T´Æ49¿}
-„¹ƒ°yeàêÙÔSYãæœjî×]…)Å’ÀY¡vSWòÀ­¢ÒGÕîUê£ ãþh4× ¯DTÚè¢Ë ¾ŠŒ}dœœ'.ßñ»c)sùÂ4E©”€cr'L’q!2XdêFÒ±!NMi€âñ¢ÂdÖ |H—^ÉuÞõ“ù¦?aÈísNfBèÈ(û;Ÿ>§[Q-„- ï$àKor§ËûI’;G¸],˜úJâAžXÚ€àvÞ9g•0žh}[ü £Å‹—T€%/WHþî×Dªÿ~Å!¬„ŒµWJQ;dZUüÁˆo 7êU ‰iT†dGà!y×"?αLÛuº·Ô~¡šŒ{U#[Ö÷g_SÚ®s·ßñs=„Ñý}Ž´þ^W@ƒ¨IÙ9¼£ýè@‡}Ó$0_>)’¤Èz®Ep,—ðóõè¦
-ÈïQš4Zl’€AÍMNÒ1B.NèL·YÏ¥£ÌÊ©“0d›±)š„¢«ëOØF'Í<I('Ó.DÁ=Œ”³‡pEd­ùØøõmQÜÛÓ
-~z#ë6 å˜Mmné©^«ŠÒŽ†y§×ù{?¤¾ó ÃN[„!H-Èâ–‘Ôyúê³Ból«nsªYòU4Mö¤ ©0lÕÜ´~µÇê½æ`
-chô„, 3 ‹ ï‘“#•ÃùG ÖÑŠ9$5à »l|ëQλM}ž¥’>‚ÈÔ!¦}™n¿°B=…_½' qŠ=ò¼²D½JQ:|4ù "V&71¢‡»Ê´XGŽÌ˜Û6¸XÉLjðD^«Pìˆ,0ª°>«ÇŒzK „Uê• Á;ð# zJí™ÛG ÃLtåk ­' , 2ýòô™ÏªÍÑk|Õ[~>'}A–ž­h¦M$™O¤{É™™aý|Fo¾á¦›\basmç­‚‹ÝjM߃½€—RÚ·Ž¤`W<Tº;ˆˆ³õì&> 5YC¶]Þœ}ËA… IñFÝi„—¤>4Å1 <ÏÜïQ»ÔäJ!¼@ïµ/g”Æ
-¹?¯²YÉLµOÿº“oc€ùÃ^vu?ÂYáQbâÔò%hñ£›Þ|ù:µ˜Âôʼn "¶®œ%v ¾õ
-U¨!š»N}œ Ñ“;æJ›ªÙCĵ?ûœôý+¼<¹è¾ŒÐp—³[»õþAN
-ç´hô@ª{âN'H_È9S(rÚ·kEü&ßÏ•tÛª.Ü,çx>A(wYœÐ%
- ±(ø'E5 Í0Á{'­WÈÐÐlûù 4·Oÿæþk¨ÕÏÙ€œ“æ¬)Tlý¼SM¢ÌºtÙö:ʇOI[|¹,™á
-¸} ³i¼<nU·ƒÊ'D†7Òz;%s}S°l<•’y°46Ê–TZ¹eÛ]DÕ\Y¹ñ}˜en|(xèn)<¸ËŒ¢G/Çê‚«þf$'„ƒ":èuë ìðx/’<€Â?‰CòSÁ064qcZŒz¸ÙÝü\! ;‰^ ¼·'PZÖ‰EvdŒ¢bòjGYþ=Ñh/«¹È´®ŸË $8éÈ'kê¼²à
-%gsðùB§*÷Ä•TÝþô¶VÔ½~Þgÿ°s-Ãê¾ù¤‡I3ôÀâʨbŠÅ4ZŨǾdzçÏ—à Áç‰÷ø׳ŠX]"ïe‰¥?ÂÛjš…<®ÛsÒfÔAgV+¢ÔŸ8ýdÚ¥_ÜÌl:ɶ™q
-L! … a¥,C-CŒ}M¾~šÞƒÔCzâë—ò '|;¦DÜ‹ Ž‹¼”ýû·NsŠŠô c‹Ð9T#qY%%ËGð 0Ù¥*÷f’
-.³ã׋ÏLH]DÒ.½Å¦œÈçûNcxï*ÿÍRŒõjHGmwr$Æ›~üzXÉõ½c7G9±fRpÂÔ›õñ`ç¾/ŽFöøÍ¡Sësöe‘Ä¡ûůjrv±K ±‚º‹—li¬@b Á̧òÓµ¬FÁ§”L¡s¾´_úm\9G›8+¥£XmK‰^γ³æ&„m©œtðÞì]ª_l„Š@O3º] q—ÃX;Ü3œåá›
-kƒãåxÄüÁ‡¹C ¥"QPf¦CY_vŠÓÑô|‚ŸŽîdœîÃ: eФÛw‘éûe« VÑê–†P-o‰ ã¶*‚½—€:GçMøŸ¥ÀOr¿/CîlMk[6qÉŠP·eÙ0ÿ¸•Ëzý?TRÈõó·—Ï(ªå8“j$27BjߺÌèÖ–õ¦òãȹÿäâÌ-:N ^TüÚO`bŒvï ×o(<>yýeþðHó‚Tƒƒ2¸¹ÁíåÞ(å2Çæ¬9½³g¦F³Ù å’Ë?q…ÃNßJšPZØcš¹ÔiΑ88›ï…wäD&oô\<朕çÞ‡.'cve‰kÎþšØuôI¡]Èš‡þý+‡¨§Ä ~¸db D:{‹ÛÖq •¢j+˜ZÖ+·?ÜT±æ­ºŸÀÜÀ!
-û:%é5¾¯åV¾çu™J°5Jòb´â"2jþä³àí=j¹ òüÅÍ·½OÖ±¼×Ñi¥Réqødoeל}½j(áIaRFT¼‡{°˜Të‰n°‹W÷'½y@,}H5»A¬8ÑLØÑ]ƒ5ævYÛÐD"ßïŽÊDʺ°z¡Ž »z}ð…ˆÇÄ_@ïO>s0<#gr¹ñ´»f!bºÛèÊ5ƒ¢Ã–x¦ÐJÚ./°A>x»! jm–²sÞ7vÁßC}AœíÁ÷}Žn4XìÅVÄés¡%›†¹¢{Pû< ´éÔ Ì7¹d±·ÝÖ.´?²s1‹t¯}¼;¯±Ý½’×Gû»{UÔ.!ó!T-ºž¸9Çݯ~_’*gûkèŽvª»¦$û¦ÝU‰ô¥5Sü¼
-¨ïÃÌ'l¿:¦ðè;{3¦Íäeµ—Ä;»¯McÕÒÚ-ÿXON´Â½²ùr0‘õC€ƒºÆ…L9ꉱSWËñÛÖþN2¼‹ÆvÃñ’ýÐ È*ö{ä•k^‡jogÊ"oØÊglÂóIüPÚ}tq(½Ÿ
-QCm6õ
-Ê’¸È˜”m€¿™»_–pÛD‹KÅ|iVWeeÀÀ«‰ „lÐÁôÿê4èT0Éëë]Ïd‹;PL¹£¥e!D*%)f­­Ð¾ì {ÄùíÐîòsÃÕ|0ŠLï-ûÈØÀªY‚èZ`ä<Üu´N!ìÆÂçaæ¨ÞôIJE OÕFÚØÙ‚™O¥ì鲟‹„œ*+aB5*êëˆYš0MŽŒ£>ÂãðSΚb¤³(=nìj‘·æÑ4W­ÁÂ-ÕÏ·­_ѱîíô‡Çº™·` î%âg›«ïW‘iІJmøª º¢Ô††ß‘$1½ÑØ“](snr…„L¹Rœ±¹UbµVfn3]ú‘ÛÀáˆÿ3È9ÆTÄk›“¯Bšž«µW¯ôoäˆ9u“lܲ‡vxvèô3Õ ÖÞlQ;, ÿ®w½ß,Öf9z ïï‹?ŽJ¬äl* +pË(ÑMÁ™ž eF×gº‡@‰<·5ð˜MêÍ jmòÏ °ñksŒ]VY:zÅPÆ]•a£¿u_d„‰ê`”]&6ú‚–2#³ëb…S–ä|_'UBÉ9ÇØÔ*+‹©´ËY[–µ²zŽ’w
-Áë±(`°1BøÍéÑ÷kL»;B„/ˆ,à  G70“›(Y:¥ö
-ùµi¸ŸÔ§îwX\Ÿy=rû„7"¬ˆiÝe6ÕÈý`Cõì¥oØ?g`ÍF朌‹ÀH‹†ò×ÓÕÏ‘`ñ» ‚ƒT~65Î.96,`³xõµôlë Ä\θ;&¦!kÇ×å ÆæÁJôV>ÓÛnQ3­‹c…8¤„½aGãÐ$îÉ(»çf†A*"CÛï}„:¾¹ Ìl{‹7nN^ÐÊ`„påƒå˘ÌV—Ûyþ2>÷{Ή =½"ž;ôl`¦GS=)ÅhhR:ê bÞ°ã}µ;íYÏHey~aN'¡¦o¦NQ»ð%`\ô?G°2™9×Á>ìSŠ¬7…¾»Ù6ò_qÛ§ÍȒΊŽ¤¦vغä.Ù#*Íõ¹²G-–à°Ã~3º½øÕNôdàÐH¬|ò€Ò>I6]ñs˜öüåÛ{ñ7cÌ a8d?‡ÉNV¦æWíûê^ÙŸ\W’é†;ˆwÒ`–v0zA…füA©‰õ§$=›Ò¥˜ÖÒGVöašMŒs*(±Ó8üì¹äô¶^d•àŒ1÷·»s®ÛCºDdq
-I¢BŸîÙ¿¿²ÊXãÞLbÁcÔÅã‡Î0¸±hÿŸvæû
-‡
-ïÔ2AÆìöâ©eîÛ›Ó¦;»ŠÞ¹‘°!¸„è`Ò]åU-YñÌëŸò¬ùM5ÁF³·&RGßw´+ùûè8šŒÁÈfïyFW OU£wÀº$¾¿@i¼ù9ºùr¹>ÒHÝÂö§õÆe¢Íw{˜¡Ù
-,ùÌçÖ6ºþ‘ß‘—§ìä*ƒšA>SxÏå’ò§Oœ•Ãøjäwcâ]o¸‡´×ç?e•é%Iôm ßÞl)·œ?Þ4‹™æI¿´—.¦Äì Ê×AÖŒqh}Ä_J¬Qêõu‘¦ZX´y7³xÄ,i’¸«^飯\µ1) Ík„ÝÅ TÅ>¹Þðô3¥Ÿ¦õ1!}KGf³[ZdɦÚ^Ýs>¶ì¨¹…ç›ý˜“]û·çÁ ~V\Yƒ°ÕæÆÐ¥–tQrÿ=<e¢w†|hó$¿åÜ£ëØÁSä<þxØI'è÷¤ïëÚ_tšd¯„§wòÒs_×àdI#ØÙÒ¿˜
-ogÓƒ1GC6E®Í]cdv®l}©µžÆÍE*û‚Xí øVr,À8è–>7%×5/ÔQz 6@^î$Æ
-Ìkª¸â§hDlU¼v7X}ñÂúZ%fòb+†Î5ƒ;TÅHÿ$IÀÒR.X/+ùeÌö2¸Õ4•õ…6È(z¡ØîõÉìg,Í¢ÛäZ}~û JmÕg(±èe{u›"&Œ›Å?c
-áò¼\¶¿ûë¦n
-Ý)¥ÀÓ,Ú €ž–ñ;Þ©x%ŽÇ*:Gï­Ì‘bàÞšÈÚ±ÓÀ'“(' ø·&ᦗ„Bfs^0©^T
-i¿5xÑ@>,Ïu> w?tiÓ¶0ûôIÏä#%(ù‰ö
-©«ˆ|LO†D¨Å÷¦gîÑå¼Þ8vÉC÷I~®O–ÙÍ>mŒáõÞ¢‰‘}‚
-^hâŒð·¹ œ£“hZ™Í/øÅ_à7œÀ+P¸¸&&êåî$+Nȶp®Ô ~I(–»c¹ÚŸYªÓÅg¶%ø¥p%ö>­’H¾iL¿\ÚõÐß(¦µâ_«8Cƒ—R{‹
-Žµrð¦ëØíû‹0Ê{‡˜ÊQê¸2‰«Zœa‰ƒ†*7Äc¹äJî„I›ÏüìÒ]©æÁ 1=Š¡å©òñS€MX¡¥GMøªéþP¢‹:*½ÙOT9†ÜD¨*ÀzÞÃ*Úž“¬ÿ°Ë_hg
-‚œ«ê9ŸjˆŠ"J7Þ®(ðhT(ìâ ª¦¼ÜðÊ™§Ä‹V¬áÝq
-oò]ç }£¯9B‘7õ· öœH{È­’ëæi`T&éVÇãs"¹‡‡ªÃßÛçVMo¼iá÷׈â{C„^×;¿_g¿`,·÷þ2 Ún“ R ɫǶ]ÅjÍuib°ƒãÏV!QÏÆ>²¦aO<ö”ñOÁxƒªH²$áófe°§Åû›ê¥úКxÇÑiêÅà>ò$­–Ìy"-Ú-ŵ ôý‰¤Ëq ¸ŠÖˆÕ"™[Ø m¥cA¸¶¹"t8Q+PK¥ìó÷Ñ”¶ëÛãh_“ ®$+ƒº‡¼S¾ÎúÜþµ$áØ™éezv~7EhÅZÞ‚¥ÓªãHÝåûm®Ý‘(ãŸÄ"Þïòwnúê›»ÉÕ”^«¦
+xÚ¬¶eTœÝÖ%ŠCpw),¸www÷
+wNpww÷
+økd‡§¤u»€ìíÄŒ]€<
+`e°pssÃSDí<@–.
+tøÇEp
+ÐÖ¿¶qÒí2”"¥ŸjFy_ÎÉmBép0kìo)«”¼ÁM´}s‚»|¤ñ'w+ðǤxp@ö5Mý‹ÕŽÚ†^Wxrú5ñèñêÏðà@×5tÏ]NìJ^7(¤¯‘þŽ9‚:ê•Þá40éMˆ×­—$šÞy”ø¶r/Jù+v­roIÐé­‚|‰òNR-{UZØW3‘|‰ÜÓ¹Ÿ«®”âÎ8|M„ãA½7SÖA“™°?‰î!®¨{üëlkh_zsg'•ÛKº7ÃìQ23 †»V!‹¶88Szé-ŠÈZßʲÃìb“ÿ<Ìišð·uO[מʙåê;Õeâ*1žü
+=Æ:nâ(4n¼ë—jºÒQ•"/>Uöló½ˆtë% ˆ/÷€{`‰ÔÒE¨N»cj,Uoo–›U{Lê,þòÛ’`>8[œÂ—;1Œ"ŽÛd6k$T÷ó¤ï0ÃcÃ=­ò8Àëø‡ël2ø©ÙB ÿ-NE>…°­VQ?SÛ׊Û_ZßjcxÊSH£k‹_G–‘'²Âøøc±£ ~´½ Àë5ر3ìä=Í’ù9õC[¿êŽX? Cz!‹YÀGóµgàÝzŽD7 8’(GD¹‚Hñ%.fjM
+ýÈ#§:Ð YœƒN o‰ÓûFp=)I%ú&Ç.½Ù™£J©³k´ ¾< ý6K†#„Rcxü¸
+ÙÀ[‹
+Ó´ä'¥ÆÈÆtŠ(¤"ßž6¤}ºb#›¬]uŒ'ÙßšÌüå;ƒw÷ùÁm±Um•Ý“ðI¯Ó!mü,Žæ4FØBÝ`Kÿ±4û m¡[SPk<¶)óÒ
+ƒq-†)åÔ\ †µp¤
+–Þ•4âϵ[Š•€M—EäÇCÊ%£ŽíAT-o|Ø–yf
+xJÅxQí½…jûk2Æê¹”ygZn™E0±¹¬"rõ%°#žØèÍÐOà…¨³qEÎûДv`æPᥧÜàÉù¼ ¶Ÿm}ÆOà}LZÝÂ:|,'˜Hõ•ù½g{ã[CcÖ­–ç®3Ê”_!qI¹1Ãl–›wløeû"-ð–·v:!”UËñžêG¬ç
+Ýû„`²<y x᤯ {?5âˆJ|³&<Ø#1Ë~·•þT°üp Ds¿Œ˜°¦¤$»­‘,
+±§¿©-?gfBŽæó¬Jü0HŽlÀ¥Š±ù jê.ñZý,†(˜@ýÜ°¾ÖÑ«­ÀMÄ£P kå\Wq¨Žà’÷‚Ÿ%/¹¶õò¶W€ßç+ŸÚYÈŠÿÅìü«F•,Ã'òYŽtت´æ:1µmÿ âÂÉø¬Ý”3é3ŸP}Îîëb¨ôÌG%ñ+_(‹øž7—? d( ä°Ãçt¯B÷»„{tJT˜¥‚éÍ*
+lL¨¿ýÈ­‹^æPc$°I’}£]‹¥â ªÒ¼FÙR÷eàBIÔb ©Έžáòú޷‹³ªÊHÆA¦ô»{ÿYw˜Š+¹¨ª¶ DÇùgÚƒ€Á³Uô9qS±½?×Bx«õ¿ñ ¿kJMÄÙ™ðÄWÊ\²t—¼ÑŒƒ½°Õ¦’”pSÿpgrIô¿ ùªZ‡ä+%V õŽó‰ì«£®˜s•WDéôö *îD‚ I0ÿñùB–«œD‹×jA+jGŒ;Ó¹8&ˆé1Ýú“çŠÏù^3¡™¶"íÁ:š·eWÕ6^#—ÎBõ¨,^Øs<NDŽÕfDÁ£Ð°;¿5æè—¶úp€Je¾bùG¿Ë0³Øgä×ÿû̦¬Å^KØÒ;œ‹›‡B² ó˜ù¾0ÒLøæ sÛEOŽ¸Zê4¸:ò=Íuó¥„Áõs2ì]ãä‹Ceµ¿lbøådçÊ(·y¥ËÖ½­ßôìöœ…“Ñ/úÅtÂ?Bs®Ð qEœ"¯N§YµÆJå¯ÏLzB•>õ®‰¢3|«´{ëõšÕ4¼:ªEßn‚¢!!×ܹ~Å„ﶵÝû-aÿà¥.jýÈóøʺžQQ9½‡¹š‡Œ‡4®Ow@›ÜÇ0¦wÞò¼«\M(ÓC…åP"×j GU½þìØ ·kÒ³[ІrÆ{è—~
+ázÑ…cÈß?æÚÝz´éÖ+i€hO/%—QÈÍËÒÝÍžHtNã²ú¡P˜@þ“‹i”ø‡:=»(-;%ç—kÁ§µÔ}Q[²“•L¡q«nód01ÙLÑåB7éoU`;N÷0×ràjnv’;Ýn÷i<BÒÎÁÂ%èóŠ½ü… )ÇÙ`aQ² ¿-ÄH77EúqÕ½Ö/‰ž¢á^¹å,ËJ–ŒÁà ¬4Á è7«CnLÎÐV¼½N ©±
+õª*J ð¥)½?—Ä$úï):p.„ÌHÃ`Ɔ–í"–ñŽNÔÂIª\x¶'kƒeFbR´ëyf=whoŒºÓ²èŠÕ–Dð"~VWn îMŸp!Cð÷° ¿Þ‚Ã}Ï1ΪrÅLM# DÏhÿ”ž±j¡Lò\¢dBpïФ
+¬%’„ud+úÓ¾ß+U4ÉKîÀÇYC44—R'ìð58¿G—³‰“@-ΊÁÒÛ…«:r>‘O¯•p¯»µWþN–Ò;⟟¼G¿ò¤sf„p•@Æ‘ÎÏ…)¢e‚ KNÏvýQs¸k¤èŠªá$™›¸Œgë.‹1ìXÿÓÌ3@¶-V•vØ¥áß¡ü”ªA´½P„ú½p4ëªpç¹H?SOšð¡]øÊüÛAk»%Ögwrˆç|Ÿê=­FߊP3߬æYŽ!ÖÒ.(o-z•Ö¤jk:\Žë'ç¬*
+eVf Øø(³n…ó`¡»LŸÕÂvs8È-7†²HŠÊmUøfnmo1K±xí[J{ϛѕTË0<8i*_×/³bY»ïIý‰P¡ö5,4‰ßWÓwkõÄCóÂ܈ë[9œ†H.áê;pÂ϶¡gˆ•Ú†PìYÍoJÔav QßFݘª-1²7¹óH<lÆôÏi«Q5¾•G¨0•5s!O“ñÒØ€‹Õ¨ÍÌ4Ëxô‚ã Ú{.K\õCUxPZâiÌ&ÙôNEUdX| <ƒÉ&UÊ‘|‹†¹_ÈAÄFAïcªñX4C(½ x e(±â‘ƒ:äj£ž]a·­cøÆ$cò)ÈD€ wZxi2Ñ›ÅyIêYžÁŠv€;²¾òÆåÍžã‡cl$/­"BÀC‘TÁvâ³ßMÖý/0–x[®ß45ü¾ð2;{%öY)óx®˜&ù;ßÁY+6GÄB­Ì&ZÝ-‚±KÎÚ!“j~ù±2ˆ %¢pÒwã’—ÙÀÂßmf„ E#y`râ Éõnq
+xü˜ d¨¿L3§qhÖêàÞVס6{gáÿŒç6ÌdA^r2~yOw¤nÝËƺV5Íz7Œ
+áߺSjÂ)"TaèçCõ#)ðÕ†UzÊ­VAð×¼†W0~ž5££ÒŽdg–l¢ì¦ݤ®ØExç£UUö²ªÊ÷ÚU:pIŸ|¾môÓxI ¢Kdðò§oj"\Òç7©=%½ž\Þ"äÝ7<p-ɃE;­ñ ¬Æmêø®5|²è;l¦…ËïféOÙæ“|rƒk¨äÁ±ÌÍÁ æ»ãTš±ÅVÊqs[V(-Þ¸Út‹- ¸‘²Ÿ4®ßù3½üoºI0ÞÏP&ûÖ?‰³¢.ÍCœ&qG}yë³H§ŒY…-µ}"Ú¿ÇóØö¾²¡wO"‹X C¿:z£ §¦5EîÁì–œ+GÞä(Ë›Wý~Ï]¶þ±ë‡ãvAòVQ<çôù)”‡d6GãWÀñê¦ëiÿ,¶€—`AsÓC:©¦Ý÷ÇjiÙ³¤áþÂîyA.ç%ùÛA!óof(kI¡Õ°™èÞ©nþS×¹úèT:˜ø²*qßN„c½…` œc÷Âz¤<¤{(Á(±04IœÈ--˜"û—柚¸ñ±©ƒm‘&û¬©¤€í`/9¨f51IEeÁØøìÊÑà0SœÏèÞ7ëqébz‰¬|â·V „¡ýÏ{Ï#mà½P
+îkÀþ¨ë*|%.ê@wá£Æéî_÷® ¥bô›éÌvøž—Î^$(6kM-Œæ1ŽtZlFU¤ÔÓθÓZÕÛ®\F4sI þ]#˜®NÉoP¿„‰tõÛ…¨›œñ¬žÛ—ugýñêàNaœ0$Ê÷ Þ³1ʼn¥z.¾«.#¾±uÔhvÚÌQõƒûýÇðž˜&S•$æ†J‡©ÐÑ’»‚o¸bļ8"VàÜ"|ßÃb®×\8Ò…(ÝF7­ ct¯ öœPe´1ä4Ç¿d'QÔ'0…•%sçÀ4W±¯&ý
+4«žj)^ ÿb}HŠ¬É[í(¡â&C'N¸ÉpD–'®²”Úo^ÉmBrz~£‘Yú8l£U•1M‚üPÒGµƒ?m)ëÚ¢ÐÀ—=´?Z‚³™íŘ¿åõº‚8äIÖXGìð95ö%a£ž“çíNµM,*40ú—0 ‚éðGëÛ™]õ sú†KeQ¿ ©RLÔ¯`¦!ìñÈÉiØ­–©D¹lÖIÆÅ)¹·I®”êÁ
+ <õ¾ÃíŠÐmRà-<–²«!ôÎUáëæ5GgÌUç¼O;(ín:
+™†ZKvñ#¼™© WúåÕÍÚ\Ì$’~WZR)´Ô™}Ó@-׺'ØÚ‘f#JŠêÖÐûÌt^LÏ»Úínüdˆ#’â¨ÿ|PÌU9´âq»ºam4AØy©E[Ù‚
++¾í!t¶£'µ1X&Ô1 Ö'˜1ÌäxÖn¢ÕIãñ7]›'m%©SùQe Æ°Ea‘Ä
+ï³cÇ°u¥ûíÓó Ébô†8—=¶ \ÓCÐÉ}Óð½ý³¥è³Tw~ùê‰%â—Þ¾±ýƒú”Æ
+¦ðOµŠmCOu£3ã73߯Ç }ÀõÚH©eé­‡ ¯ÞæZ[ù¾ë¾E1"]°ÓMwÑí’³Ÿ¥­6–·I’)°qߌ¹pèŠ×6W°}h '¢py<‹vA‚Šµ–(s7Ø,´ÏˆxbÆB¦Ü4m-qCG
+G)´r»zoÜ8ãôúÙgö9¹ãF¨ÖcöŠüÐCÄ;0OW¾Ýñ}¥0^wyr÷Oü-U>¹ùæd!j}Š¾zu?ºðu·izý#¥rzV¾‚—ê!H¹iBÒ”„0(óÊ4w¿#ךBz¶Ój(O˜é}JîgúÔ–5g•h}›÷YÆß½'1x„Ìž'ðöBçKH?6#s>ÝeÄÛé£ywüFxçgHQ-ëÄ„ZÓN ¤úLÆ…{ø]w˜£ÕA‹ÇÛÂT“öïY2%‚Oý:{Τœ·ù¹mf%Ii
+¨_Ðʾâ\¬_;‡÷¾”|#@ªF¤œq®#
+w¦héRs¿4á&æ}¼™˜NÜt-÷sjôÓD…„¹"¯ÔD0x›Ìwõ`è9G[Nºxw×"ws—Õ×Ù¥†ùã°Y…ug…TïŠNCbÀ˜óÑîZg#Ï^ª-Ýu4ìfÂÃ7ËODΉYoüÍoV¶NZ¿Ã2'iþ YíW‚†Ý §çtÖXå1Ûé–±}G_û†¡ñçdÊÃÏ™6LéFgY‚eQ®Òé i•Á6(tÛ»Z=GÌRxwfþî‹Ÿóä(“°-jdJTèS(<ŒöQz_´)ÿG0Õès+?Ä„ë#(½¢8ªË›Ýg6‘„Mš<iûR¦q »
+FŽ‘Ð&‚Oã ó"B2{6ècgôXè‹Â¸¸æ*ãhæ´Øêþv7þ‡—ÍvÙúä^ì%ÒöþY“m)¶#ýÖÒou7ÈUTNÄ âòóàÂ_Z–~V³-!±çš’vWd©í«ÔZ@äÑÇ€~¾ŸoC|%¨´>2 N¼ ãÅ°Õ9IµƒÍEƒ¹ŠVΓ×êX‚(¡<Ì1å×;“5s‹!—–3ß 9ÈÛ:gWoV‡Z|ߧÈv´€1r/#J *?ŒK(âî N»$Û#ˆ&:tõœù±–”–ÄnùJ×ÜÒë«Ô¦ŽÀ`ÆW؈4ï¶5¤Y‰á]É÷Ïú$Õ£¾‡u=WL@¤)B(Û€
+ó‘wÂ33¨º…j˜"iQÖ}(­‡|Rb–+{ý€ù6b‡º´ë„ʹV Í-¤œêYa¾÷H7¹éÇ1½zWõêÄѬx»!Õøöêåøö‘ÄœlÂ0Fì,e„:¬þ„Nˆ ÅB”qHÛ¦}Þ#ÀäËì”ú3=¾Ç¼Úµ¢QÞDm£Žœ4wý,)Ö½™1®¼¹up~«ÊO¤*âÊØ8Á9yZ“΂ 2ÚRb*AI9»´ä¤~Ño¹!æ[^ž­Õçø8u’.ý²
+ em‹ÆŽÄPÃÁ›g[¨;"­HTlï›`R¬ŸÝ¿kh>ÄùWTD_º|*§-“XÀÝ~Xü™%Õò™”“ÎôK¿ãQwË /(ðõ°&›f­s¾×9² ÉýZŠ@¸-Ü?I<X÷ÚïX+ÎŒÀ2~JâÒì¡~»\ Oœ:ÚÃa];q©“«W„žú:öÙÁ¥è”í¡"/ÔlGüÐB\•ÿ÷‘v$«ÎŒwð ƆAh*ú8ÅËvæ„Óí²6Q"Õ‹û†mž— †°õ#›ü§mØ»-¿Žì
+h²ë”Ÿ)ºß©Yÿ„ó¸àññ>bõ7ÊÞ |«4 Æ´…­²Öø•—«Yü;%¦Ý´ûNŒà]‰Öš9m0ëzšÈ®É‚—G®¿>õ½´.[ùé'GkúF·_á~(~þÒTpZ{HýÏØ@ò4Š®Õ¢¿"¾6ÖÌ&ž_èpx Wùë ÆÑ•š°J]èBePÛÍÛ¨¯T_]v—Â'_ªƒeg;
+Ñ+ÃfP­\Zá!ŽZæt'³˜^LE ƒÆF¾øoÜXfTÎslÓ)¿ L'»4Ò†í;Ví&:’ò$é®
+ôæø¢ê üÝJ Q>ÊI±Íº£ÄÜ÷fŠ›Òwë+Üó±H‘Œ?ˆ'ܦT˜ÔV³F#Õjpi5’LÒhN‘ÚACõg#ž¥©}E7^å òæØo?G
+…
+ÿ¤VÕøxÿCƒ©~Ò´•”âÒ'ié`Ÿ{¦C(XÂ)
+ŽÜ¿SB¿’(è “ì½&Ý
+<ÖÅ4}Áߣ‡ÌõÎZÄHÝ%"[9¢ÜÍm ý¢ –%«'S ÔD=èfrž:IâvÛAp¹DçóQ!âÞ™
+ü‚09nÞO#qzÀñ‹TØu¡/)…2ßšo˜"Gþ†x˜Rš0»ä\ˆuvØDà—¯è~д×ÅúG„/Ý+™± ‚Ö9=>òL4€‰ßÑ#-™éDWÎÍ>Š¤© Ïž !†'wĬñ áB .—ùöOõÞ,,³Šãr ¿AâÔH|®CÍ.¹nÍ16"aóÆÙS8awY!½{ìbù Ì|[¯fvƺk@#2Ýá{kdÏãµQs¸ Ûº55Ö5a«F=Þ¿ŸòÝPÖ—£MÕ!ôƒ?ÖX3½…O!ù_wvCó²1h~ÿJ°¶¸SägÜÂ+º*ï%:{šÍª'r(E%$ÅwþÞ}xnƒ»ùˆ3ø⛧M¢¨ÊÐIj¿éÇêýå‡5yHdõ²ç^úÑsŽýßø¼TêâÀ<—
+’ÃüŒÑL
+Ò*‘z^®de/švæÔ{ø´¼T+Q¢k
+OsJx±«{’ŸiˆçÊ„4¡¢Kšksˆg>Ç!<L+ó»Â
+üÑâÆõ9ýÅi$ïy‰Er«ƒÜ‡Ù}ÕX*±». ¦fƒJPaneÔ ½Ç˜aw¨Aᨯ];QjÇ:¹OÛWd„bâ\¸ødà”ò«øàmga™Ý”"AP0IXç "¯&§ôÂ
+¢#ówó$Mz„­Mu7I1 ËtWµ±›ÚM]óq[ã¥s|b &¡fº˨ֹä82Õƒ_gc¿R…í§R€K¸;]Ÿ½mÝ Ï“Ì Z5Ìñ½Ë+Ê96–‘]6 À{®v±SiÕ•Ë|AÕʵ ±b½@yiy6 ¨<¿â&ŽNÒrJŽ«?mÉd¡Z"ž“¼öhP¶âù}$³ –OHéW•ë{pÒä×msñy~y‡– ÎÜ<XŠ^¤…â`}I­‹ºq#eq,­wå®n¿$œdmC«{·É
+wá^oŽÆØÆéçŸ'vUÜÙÁ§-Œ¶áËÇzNëD/Ùq geC¢»¼Ÿ7y9·‹ßY¢Ákâ`ü<?OÌw“߉úÎk#©,y½¾ñŸ~¹k‹dƒýÂN„5¯@xÕ÷œ`ª‘XÝÞq¦lª:þSÊÛó¦Ò\ YÓgSY>œŒ.‘Lñ2¥Ï0ñUFÓöFu5ìaÆû‹îò ÏÏÓ¡ô{q¯|©S©¥/æ0¯mÕ³˜Ïf½[64 È}çúµY ’ÔEVÛ$*­ý¹¶WGû•»“![/ÔŸmáËÀãKC|¿»OÞh¼¸ ŸåôéxN|ËÔËH-‘ œq©äuEóo+|ÈG¼WÅ£A+ùÝÄnSG§¨­Í¾Ÿk¼·½ë‡Fp±Ó,ìÃøáÍÂ¥.<_jÏJÖØû‡Xº~¶ópEZh7Í\‰Î)
+ »>|~Å]Z´ëvm Æð¨IË4ïÞîn>Wèdͬz3 Íi[˜%<²Å–úð7a3Qˆá3Œ ù±R¹›iÕ¦2yÓz±¾ÏP{àK±úÉj¢õ…LÙRTê†që_å°ŒñŽ™>W§¶Q…è}½[ãnï´'™ËH=ks•þžðë\Œ‚¡Ð‘rÌéž`àƒø V”øÓÂÇ/Ca´í¡—xvÄï âdÅçÕÅFH®KlçMàZ º},c®6qa+Àí fuýÖÄ•Q¤ÜÕ†ñ nh’×ßÅoßÝg xZÍ8Ò>­DÜ™‚ç{JÝ>zNl‰–òM̱°;MLVü¼GõåŠÑcâ›Y*ø.—I܆”Éþ’¥2kÇ›V(…K·Ò
+ʉ;¦^ /Ós$ýM½'ŒÌA¬-cU²~YÞ„µ~Ý¿Fê{È_ å_×@.Z­$ÑößE_ù*š!’Ë™cõ–p隀Á«“–¢Í ÕÜ­yýØÐ˪Mt×Ådàýä§×>§ÕY4·ðjSâMÀ¬f‹Âæ{Qì|$dÚJmâ“…¤ þAèôHm¯|[À@#_ìã<éÎýyj0_1ÆP»UÙÏÒ%ÂQÍGžyõ¤‡ežCn|ã«|ÖZŠ}‹Dµmo¾6Ý<(ãÓx MŒžœV*5û£ÞI# iK_ꩶr.ØA
+ùõg!e&S»
+:£çèÒqÿíjžoCãëCjOQÑ”o:¦…^NómºÒd‹VætI‹¸¤j±ãf}á¯ÑüÙ³_›uÁ-îWtï¨*à/ ‰ï²ûÄjD-Ö´at©ÓŽî]*ŸC
+ÕÏõ°~RЖõâ©e‡Â¨`îô«á„ö௓§æoPÐÁ`ŸS¡uyØuçöw˪Xðm©¯Þš¬à, «Ç”ƒÛj¡·ÊI÷Òž®˜•°R R]§L¹ûwØ“x#xæÄ¡¥Èª÷8X\ðéцRò/ó‘.}Ey Îz„“”Òr-J}ò–{K*6«ZxV‚6:5"åß(m—ƲªëmîÎWq¸Ê“¤—1Õ y¾ÆÁd‚Ÿû‘µ¾'Qnî~Šò3‰æ)•@+ë8e \|)úJN=qCeIÅ ×DêͲùÈ@qØìü4ÀI#¯o=éüÙ)R9iI#Ò¶‚Uéî¸à…Æ©'3ø aÅÒB-‡ÿ²Ô%6n¸?_CpLC;iœ~³¨À9ߤZär1J6³&Þ½%{4Þ7c·Ù•°¼óÚ oË~¦c÷Þ*ô[K¨à×ì¡èÜ$~|”aº&ñÈv{kù‰ÃH ÈÛâÆ;ó2ði†ÊŸXæ)ï¡nÓ¯EØl¸½möÙî¿ôeñ‹X Z4øhKjž¾’/8ôì¸ònÉòPUÓê0~Þ¥ÿ&ê‹~¾F4ò$[èQšá~:,´4@×il眗Dqd^#!OÊ#8š/€ö#æõ¬¨õÛði€Šú4{˜[ëôK~žÇ¢ÁõW{ô³¯*=ÑŒ?˜üqÃHkã©AÝø£æ¤“PÓ¤ùËÏÊ‹Á* u3áIýùÉÃ]g ¢¨2NÒšdkÇlÛÁŒÞoàóÖd#ÌÅ$­x´‡`äÂuóKè7·(’ ÿ¡üòöC…}]A)AùàIóýµ· Vû7ŸÓj%‹µ–¨Bܯ@%”èŠ:îI•ò­=î‘Ô9Ürµá ê¨*gˆxæ…ˆ7HJȸÕƒ³Ù Çèý’»~1«/×úGí)HÃ"Uî0QŒ@‚[ü©Ûù¥ýÁ®Ü¶ÓÉRWüÃɆ_Ç@Bk\’iX'U°?º¥k2Ö´p7&ÿ.¢Ü¶åÈMX;eö“¢oÛ2È–gÝ %ûi­0/ˆQ¥ìEÞ ;EÞí Y¢l·ˆ&H×F ~ÛðÛòÔ[ £( i’™ýÖˆ­×äj_ç‡s‡¡œø¥ëÅ"$-FT¦
+­­?–>=£Ù~$eºd Š00…ü×gÙ±B`–š>åÐð ÿÔ¥DAü¼l UõÀ]
+qGØbÚŠÆêÞÀŸ×fçQûŽF¨]E¿!t—9f!§8ý*.îƒ:¤b1“áîJ6âqÇ)•P—ANV°d{!áS?ž˜œ£ /5W³åš [RÈa;ü¾U¿a£ÅNY¯
+H8ú)ö_ŸáaTÁÝ;Æ¢Ís÷í“qüèÏ¢5¿ÛÐ@îÑåf9'w‰-jÖL¦)ÉÐW©ßÞé_‘ dï^ãŠüŸí, „i×
+ü—žŸ‡4sض_S§Ç‹ ï@>2¼õ®±?=šU²rúZú±#z{¿žt‡¹þNs_±II"TÑÔNôŒÎAenHEÛqu¡C–XžZAFN–ñè¬7Í~A v‰
+¥)qõÍm—Ôï.ú­ñXx[d£E¹•3¿¬¿£¨Žñ$èÓ_'Í”,„2ÏGãRØ:<•±ÄJ‡6i¥Ìö˜,Ç.‡{ÕúÑÅÒ"CqJ"ˆlã`z‚.ƒðüÚæ_ˆiœîÁÑýl…`CPPkÖÌ÷~ćõÈ}âµ1ñKº+GÂ\Ú²·5ÂQ`Ž—ØŸlŒ>¦ÆÒÍ6&® *P»p¾»°¹‚t±Ï . áêªøy •Æ¸:J|a
+3»„˜$?‰J¸öÅ«ÝQþžp´N•Ã²Ð+Xd¾o£š“CvØ9¿ÙÓÀ?ÃJŽK'ñ[Pì~U³.·34ŽrPu,•C<w”Lí0¡7
+ÝËïË ·Ä2E.œ€ÍuN¢fxŽcȧ=´@j„•¦r 4ƒ®ùRqîÄ®—ÂPÕÁa*ýº}œ]ÆKàôF ûI‘ OPe¶ª  )ÿçkt£—‰DŠšÓŠ´´·„±{„§eE+w½«N( e"Y._.³{s…bvÈñÂwÐúAá/àwŸiIãÜ6ƒÖ7ç"a:ž‚i½­šÜ$ôŠ’0šý%)zË?Ñ!Ûp:£Ò?ÖÌ…•l
+º&ŠWîaê¨2)Ö×yPu/|K<l ›õ~¿ªŠ¯ü>ÏÝõHüäæúÇ"gm{y×j¹ážz²LÅ«åÏóý:Õš0ôMT¤õÛ%ÄT¹›4Š‘l¯±Ñ}†³TÕq‹G>‘7¨ž!ït–rÞ‰­5¼÷$™™§‹#zZÞ<)Úz/…ǬþÜyÆ1 â÷ åoÄ—]l)Hüã*_g²ïॾù‹Ø>¢¶V;_ ‰òî’ΪBg^ÿ—eóÀÊpEù”û:ÉÒûeÌìËþè™m8²t€6û´]þ–WEh6B[©uíRŽŠ
+S’k+Â]‰GE§zætwq³Àæ¡ÐCéç\K/§Ö0ÿŒö– S."¯7ë•;/aA ñzü^ ÑÒˆ€?7;eöÏ®ooö1ԽᷟkÆ|o±Žy[¤‹¤8¯ûEÅ%Þ[þ÷¿ÌYx˜M
+5ñ×êÔHE£½kæ–Qˆ† êìŠ'D]OmSù$‘íuÈ:LYüœtˆÒÀ–¦Ih¹ï°/f4¨ÀglãA 
+¡`‘¾úÙöP-ÔzèUã¯ØÅn{©ô*L¶n“é,‰„ ÷~2PÅ&]E©õÕ%·"b¢>u±‘5åÖJ§ò¸i·!.Þýúû‚ùHQòÆØPøzm%eÊ
+þÎ!ANsÐL’Írl ?Ùy‡Ã$4­MgÖ:LF±QÞ°XqgÕY
+v‘o$ðS^F4§!@Û~Yxr™Ãúœ_¿ecyú@Mòs¤ÆŸÃ$Cÿ±\¡
+XûY$ µö‚ÞŸPotÛa,pBÇþdÔÙ²þ)/^Úeºlš‰b|kk±YÀõm>?ÄÇ‹SBêÆU§æyôܲqEBÞWwU9´\+Åÿ(C
+a¶±vmøº´ï\vZíßa¥«B)%UlÖñÖ}ô³ŸÂ3ø,|ñ‘òÈ’›p9îì "¢¨CznÎ {Q ò4¾öXœ+ó_ˆ,#n¢òî9ä-ãn—²:¥6!¬½ûvü?íšW?Ž@k•ÚAí¥ˆÕ ´6µ+©MÍÄŽR[iíP£Ô5jU­ÔÞ{Ï5‹U;Ô(uŸîý÷íþîy?çœ ¾ØÄÂj­ƒ(èãECI¡Ma†p¢ã<æåÖïQ×NvìG´.w`v¤`¬}žMø  ÅÓÝ:]¤ŸcЇ¿¢¸äÙ–¢ QÛ’Øß |” 4ŸK(°÷¶¤›Šñ_üžàB8EÉ­IgòŽÙµ5ô7¶_´Ò׊ûuŠÈ`QË]ÿH_aOÁ^ÕÏúASˆG†‘˜ÆN,ý˜œ½<º%kCÜà"ÙÚ”¶Qbºw¢ÕyÜŠ&Š}RÙL%J}
+¥*ªÌAŠ®"„ï…ýˆ‰½æ[‹,å$t<úøZ%Œìj_܉GÍ·¯žÆÔíÃe—hºÝŒõ(:üJPžÈ[eZ°àîÿɯv…®Ý#sŠ} ÉÞ®³É{ãn÷¬fAëN:\®¢}‘¦~(¸_ª—"piùÜ'gxä½Z‹Ž|ýAîgKô£¸dae9–óÉÍk[ž|Ø ‰iA=ÓOEw@énŸZM?|IihÄ,É8ÉÆ”“ÚÜ s9^bXzpôbÛRóÔsçHñþ–T+wVyb+Žš;×r¯Aà=æÉÕ­Ø{ì
+mÃN —›¤x…¿ZlÌIN 2:î’Òm>çú¯Ú¬4Ú*P ÄI’s,R¥ÁÃ]€$öÓÈ'[¢mƯÞjŠg¢Ô2í­(}î ×,f¯•YIãÝÃ:åصôÅ®bT,y«†xr
+åNUðrÁŸ fDc‡·Ðj‘rK
+ó)ÔÁböZ%åóAôPû)ß(ú®[ÁúŒ»b˜SÃùÖžV)àu©wAµÞh”'&Ÿã+¯£±M¢ÜBê ¿õÁ/ÕÀ¼ÉöfaZª<ßæ%V¬ž´ëb8ŠA×+O4°’Äm¯Ðó‚¨÷ŽÈLÚ•ËÅím&m%qßAë9DZ¸Ð¥þ™±öl˜Ã}eSŒhÕsdçºqƒ„™Ç(:üNåÊš\~yõ¾<¤ÙEXëng*r†óqS‘M×w¼-­o ÜÏÉMLvšÂ%Ÿê,ž˜Õ]nOHä7åÓSì&ï(“F<P÷ ˆ“³ƒ Zœ×ÔöW>Ù*Œ§›wHm䙼bˆ ëð8ÿ²çÏË£ 'k³ç›1­L8_A…>áŠvp1¬ªu­iÔ9AÅ÷Rœ„’ ОÂÈÀn“µ:)?|Ü= º­HlOÉ~M·QúŸJnÆýâôŠ"Çe^5
+M¡„£ÉãB¤&vIA{}ɨüØ?òXcçR&YØÜ„*3cµ,;S˜©fKnLXӌȊeL§KSü,‘Ó.ýï)•òýX©"pnüÁúþµ¾îÛžU1¨ÙVv¥~UŸXÐßs$gúaÄ9Ò³¤Çnï¿ã½Hú1™ÐÈžùº)ïæãÙ=d†Ôõš³¹~~,Ä!OΔ¯ ¡ÃJúbŒ…’Y›Ÿ8gƒÄh5•.ı.ׯ‡Å2F™1˜$’«©š2yx°6Ãò7%ë~t @Ü&)HÊûh?HuÕgOÀ^(¦!ÚéX]ÐäWL.C{_zÑäÅ@Þ#›(ÈôE˜O¼ê ÓD€cßä Ú!}±~#Ý®S²N[€­ùáãjR”^bÿçnx)\æI%
+á’ë†)†°sµ‰,(³÷zÌS‘)åãø§I²%?õÇ:.©M9ø˜² xaPÊe6éÔvàHÒ#ޭȶ{›Ciq{a
+î_æ7KbËͤ\Þâ?MÃòõ¬Î±Iž9ˆSïfâúó’Í¢qÖcU…D”R&ºP8ÐÌÉq‘púÛS¦™¾ì­§Ó@K¹¥í2y4,à nzñ~†ŠùÝB‡âw¡8²X7Õ…VËƶê ÿ/HñÛ‡8ž4ŸŒ[½‰;[ ]άT ¼HŠ¢oŒRUÚ÷q§X ‘ôö}‘÷S·‡¨õ`Yœød2¦ÐyÔ¾õ\¼Ã1?a#ò£uÄT!šÃZG=Q’›ü×Î]ÐÖc›9/±§dÒœ…i¬¬
+õZ§¯‘6’4Lv+åÆË È/¾{Vsü¡æ;¥5Þ‹ÉÙ“÷°KqÐ@-Âú¥˜UJð¹;ÑÓn ïŽéU/"%ó<ÄÝ{ŸÉÖéFq+£¿
+ªÎòêžëÍxì¯÷ŸQg›a+q%²½[ƒFe$™Mí%¸³År@]CÆ"pI“:%?0F»X¸_¥fÌN1¶Î®HŒ¹\Y2¾{Íï!"¹´èÊ­6fB®“»Åõè¤ÑO0–0¿Hú^˜4WíagUv;Ö—FñIôüzçõYˆØýÂè`²ËÁ¬€óÈ5è”CPWžà¾2‰ssFHâzS汕˳ŒÍ¤ }<.ëÙiµD{ä\Ì£º9! özד!î0Š²÷V;Ö&Ké¯(MœV}îüøQècL“ÈÒÎ3ïAT‹ëêןÌ&Ê'g®çÅVÆ´FÚÞùÊy¢tc¬óºøÒ-yfgA‘zTz¼ì®øŽ-:y@ƒ¥±ÿ\¸"•?PVÏWÕE†È3Ê lDK\$UÔw¬>rß©Dè%<»ÕìÚW”åv\ÏÓŒ ø¿€§Jœ‹ê¸
+A}Ü[®L¼«#²GŽ_aâÍ¿KH¤ŸŸ‰‚h ¼ª»,_&½òîoy£pB7vKŽ£¬NhÄO1û_¦¾¶®rD™91Üð)ÍÞºsùTAÍöæ÷Ý¥éëc5?Í‚ÒÚ.îçþy;4Ûú/¡üà"€ps°óòñxeç…¤ü?qCendstream
endobj
-1218 0 obj <<
+1233 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 33
/LastChar 125
-/Widths 2740 0 R
-/BaseFont /SQDHVH+NimbusMonL-Regu
-/FontDescriptor 1216 0 R
+/Widths 2818 0 R
+/BaseFont /JNKLIU+NimbusMonL-Regu
+/FontDescriptor 1231 0 R
>> endobj
-1216 0 obj <<
+1231 0 obj <<
/Ascent 625
/CapHeight 557
/Descent -147
-/FontName /SQDHVH+NimbusMonL-Regu
+/FontName /JNKLIU+NimbusMonL-Regu
/ItalicAngle 0
/StemV 41
/XHeight 426
/FontBBox [-12 -237 650 811]
/Flags 4
-/CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
-/FontFile 1217 0 R
+/CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright)
+/FontFile 1232 0 R
>> endobj
-2740 0 obj
-[600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
+2818 0 obj
+[600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
endobj
-1160 0 obj <<
+1172 0 obj <<
/Length1 1620
/Length2 20127
/Length3 532
@@ -13934,66 +14374,76 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬ºct¤]·.Ûv*I§cul'[£b§bÛ¶mÛ¶­Ží¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ø%ìlA ,ŒÌ<
-šþô­¯œtGLz¥ÈéQž7K²;P?8˜Õö¦””õJ>`ˆg:Yánžiü(\
-ü°¾<Ù£ø§6Äbw¡5aÔž_|M<}~¢î½…î?$¤Ë‰…§äuBþéçC(øC­B¼ªùÕi{Ju ¡glŸÏÏìC(»ƒ¢ÈbÓËZÁçjð§fÌÁpC@¶
-¦éÂú”/é„ÐaF)¹ìÉT_Äü AÇDF@’_²– z¿IÂ>^"ò“£œŸpÖj×Ñm¡HNZ¬¹Šù—;Ão{ô«OŠ—©š}¾ŽÈïqM gÀÁõ@‰Î
-vÌó_ŸäsýðKÞ`zŒ—6$Aïܪ“³ÖUª Ô¼qTÉŒ!ÝNë”›Å/˜4ú#pöpò>ÙMBˆÁrêM<õlb®‚‡é‹à\jÑhŽ!··qèš–í:—… u>5±“ª——‡³›G¿:×MÎ{òεÁéKœJC·Ò@µ¾/)qpgŸ”­µí‚ ¨•Šgý´»Û]^ÕÞƒÛ1Ü ½û߬Dþµß™á…°ä]xŠ©9
-b¤H#øÕV h@û€€Æjý)ûƒe{’Ó
-3 á"Å8a¶ÌýhC©Š‚¡|«ßÎ[ÖGÏ3“GDBI‘Z8«µ¯öºÛK
-’wi¡ ´NºóoI^0Õ–ÎÈ!C6פ  AÅjc›a˜LÁýäü>wiúÁЧ('Q_´d¶lAS¬Ôæ‡äaíøîyNM×iÙòD³."KÂ.38°n
-ݱÍAïOÇ4å|cå žä½Ë™à˺_…¤Bcbœp%ÉU™xíŒ`#Ë}Cºûð¥H"¹ºå)çØÑYi#,ج¿ßÁ;QÝqç·Äjí(^&+ MÌøkRÐ,7÷u¾!+o­¹-}iC¼HBbÛ*1'O. Íþ~6'jïý˜ñ+gt5û¢PVÔÿ¤˜¿T?ÚãÔR¨s(S¡šq¹"yV‡ôî@v¨„3ëÔHG¹çòšu´ÉÅQ›8 Ô%âÛV†w>ðÛeã‘[‹}­H}öA÷4OöÖgí
-„7N•{œP¾©3¹¥Œ/Ä[Ö]ªp­Cƒ’½f±eB8|* ÿá´%Q0d’hyŽÏË9€œH7þ5'i}=½ó{LXwÜëaä6Aº„ï5Ëo7F—Aµbñ#¹‰…O[?ˆny= ¯7…³¾ÏÆ_žMSÑÓ<Ÿj²¹O-ÄËOrlºÈ|!•¡ÀºüV„, y©+¥, ßê¹2š_Sûà£#üåž ·${qÛF2<üm=àmûS}ü{/°¥ÖÌ:i­‚ƒ‹\’³¦ææŒ"×îS©ÄÙM>?gЀñ¤kMí!,£sê-Ð@‘œm
-ï™°H¯Ñq<)XÍe.vUÀŒ‹Ææ6¼j÷(OóÈŠ¨ð"AÏ@ ä_ÞžX$#–alxUeh[fdþ.Þ_lÔæ8-®(˜ÙÉë¾—©)ZóÕŸ
-Ôû´Þܼõz2‹÷¤#‚JÇ_N‚aºäYCÏ>\z…„–gĈÏs³Ìjd¨¦!X¸ˆÓ wÜ2mö8Ùp!os´C?yTÿ@[Qc×Üÿq…ÒŽ¥Á=5(æΡm³× ÔIìÑ/Ôa1VGKj]Ø w´Ú}oä¿8A#çÁ°\SêœM,ZkyÀºHí(¨ ·³ÔŠSñçöš]MC~ÌTŸÜ¤Pg}÷p€‡€ J¥'Þ fØ‘Vý"‡øíbÇdsªÝë~£vz-t±~ŸU²ôn5\±ìÕµIýS«Uÿ >¢KóHšÃmµ[»nKYݼ øËÈ|(ÚÍs@w³™ >sϽ°V…–šü ®ÙÞÇ+×Xª‰‘†€9õUW«K8†?é `(zšŒÜ›×Io_eîÁ‘Í>&p×$ÏoLòŠJß´/õý…›R-“ÃOÃÄ,Á‰ þØFáÒÓýâùu.Í­Ž©X€²£ÝF:ûL@¥å߸‰+¸CVçD§›î$2ܘ±­¤‚Tô¦:‡4Oòü?ŒÙì7ØC *™VBÆò6Vjó­šÛ¾§ ÷fÝÆ1÷ídž ¿ô |ÒÞÞ@OBG À§˜«T ˜Ã1=Úuø1&\ÛTĉº(Ð64Ï›§¼ì¥—¿ž6ÇnÚ4~ÆcÅÛ[zFbÆ’RJ»žƒ.¶¡ÖkŽãÃÞDþÈÉ+GâzƒîÔ¹m_C|øþ0/–­Xµ³-`_1+Rå¬Ë¸ƒðžM*&`*ó|ÜTF-ò\<óãT¢
-
-
-à+N‰Ø5ÚNjÔÐY›€¨áàݵiï+Zf;ˆ?Çåe³ÙvWà·kŸÒÅüµ—¢I¹ë´“F4{½*-5 …)<m‰‘·iîúó…sA€fÌTljò‰¹^›]¿w›H.’îŠI†m¸_|óÚ»b \ÝÛè#Úžƒð ž1Êê ×åã–μmœh³fË]­Ú¸¤„ž¯\ÇišÒ}EK¶ õ»›õx}3sŵÈûÔM¿=i‹ƒ)»o)=26¢QžÉªËC†;ß5T]hQ€Ð^šŸmúà|‰Z›!ç˜8ºs±S°È¾J¬f?Ý ëÞìoåCˆ€ßlOŒ‰¯¸1 ]§Uxœ<Šzæ᥀•áç=ˆÎmòò‰¿½PÓ1ú”¢>2x¤iÎ#§·5ž.‰©sV ñº^ñ¼ëÓýªÀ›`õVÙÅ¢UR¸¼ûpœ“åæ41$ûFÐ8ªŸ8 lV{v”ƒîÞw©³î~¯ìýý«&À꾃~èôÓEKå½ây­ Dj”¹÷-vá'†H=~€Œøä“þܦð!UMÌÆ‚qzÝKs"œÏòçžNIZÇ&s™/í}‡•‚ðQE´¶åï¼1àE˜»×AÖö¹›€Ú8!ZŒ%©u4¶7×)-¹¢þxÏ ÌŠi#Ò},V{ 3ê™Lk0Ûd±À1èÙýåÇN@ˆ<E¾=\Ðwö\#·Sä‡ó Ìµì¬ j‰um‚Þ>ñ€ÖXzdöi¢ð»†¢”YµÇÙ¹þÕ‚ÅmË.»ÎÅ)6>NSã"jú¦HËèË­LnE™ƒ¦üÂKh°ï_ŽÆˆ\RÙßC* 5¦ T(´eLjÔ9úÞÓ…eñrWtA…¤ÙlõtŽcKª¿ÔL©ÓšïÃÍCm á‚cÆó7ªÓû:³HAÁÏÑ×$k!å8Õ#[;mñW¨$¥„ÊQã]T”PpÎÊ©j0)¤p)8H‹Ûä—4ÞÌd9ãYVä]mze;ûµª.ò+ÜôÖƼ9+C­…ŒµÍ7ÈÀaÀõñú%B{PçÑó²ŒG>¦ï\8ÞÓ>\ùë
-¾07ÙtîRÝçP{myZí2÷<ijœçâzxÒô £'2ºñÉþD–£,9tÞ±¾vR§ðSpCŠ%è²³O»¢‘χæhÇeUfL†öH)”éßѦ"¥2¦TVÞ¤Vx/>’^Ž³Š$pEÚŸ ºþ<˜÷|š‡+œüäî˜j
-º.F5|EKÖ_kßU­†Ä&“ó"÷•€äûdÎ…#æ›5åØK"20¬.Fí¢Jà(2\࢚z~"‚*X¸×”•›¹-=‰Œ!‹2 ZK …‹3…~`ÊòJ&qðmvpˆ;¢¬¬Õ¼}ÜtЈD½N¸Q/pÏÐ@Øy)diDÿD¡
-ÛIX¨_QW:ÿµ ]úÐÀï9Lœ`]fd„ú1ØñœÖʨó™¢r
-EþØÜlgøÕ_:jûìe ‚¡¡¬
-M q‚8IoÜ•ªÅö›ÍL-Ô…`€ToÞ½*Pvz:N“x ›ÝžÜ™3*IŸeÀ4µô
-;S9Á%]9Ao¢ÁN©‡’p6/€ôJš6:7õ"élÈ2îqœÞ܃A«ñ)Û«Â!F—?+Íõ­ÙV³d$7ÁÌ&áýWW(Þg0 ÎÜ#Úž8¤;ßJì­¯ý‰Ù¡L¹ŒÙOÝ5 oYÖá˜
-AÒà}…a™5‚>ÂÃNFØX4²–€žÞri¸™½‹…:'é‹NÎXªËQ±lC#Ë4’w‰ùŸÈ>ßOºÒLZx¯dTH‘™‡Ø*:ÑP=<Ylc<¢„%V­ù3nË ½H¼!›Å.raìþ“¼ù÷Y:›Îxf‘…H^#ü¡ æh
-ø>@[›CQƒi«m®þ²´!
-ÚÕìΨWtŠã ?oAZdævò6I›¼)’þ‰èRUÛÌ(Á@Ú”µ²âa»¦Ð£ñ Ûå²ÛšÖ/ì¬ý&Å%é¾ACF÷êÏa¶šƒ;öùZjûâÛQBÙ„ãljÎYIN«ä…{Ïy|—hX®t²RML‡WK&q¨aEPjÍ–_ê›Í2ÒÙmYL¡£Ý§ÎŒrêgsÓ¯NãÚ‹+A׃²„7g¨ëÞÊN óké…%¦~aÝ–o¥­~F¼».û#3{9D«Áä1;â´æ ÍôQôÃZÏú8w&_a†¶j¡ã÷q ´r©>Ý}~9ÃQ‡“¹ýñQËöš‚¸¸ÅÒRß
-nº_Ø;úáW„ZÏ(œd ÆÅÕ>¤õ„‹ÁêÍ¢*qöŒ‚#röwQ;£œjÚÆ^kNÿyŠÕzÁ<S€\ìæ¬#
-) ¬¹YQkfb
-<Æê> tjY×rCD[")Q’£#˜Øn]Ìcõ(ð(»CÈ=g}¶F`³k940Œܧk¤ÿe:ä#_tRáY L©£½N‡íAKZ' KLH§£tvH¶ÐSÑe6óSò<ø]©k>¿2 GÇNê#u0UóQŽÅÕòK»/ó<'\`ÛyæÒ5êLZ íèÄn™çšz‹ˆÆL²˜)ÏvŒX¡[M5þÉž„¤´‚o®HõÌLg‡œQäzä<¸±5î6Ýc²±ï.U¨vÉM{bUWåL¼Ù¾Î,mxÙ*û+‚ikX‚â{uõ<„NZ'8ƒ,T¥~ Xè%{2Ñ/f>[µª¦Dîïö|Ý¡±šöœ©.q´Ÿ›l¢”„AMãSæKæí3r,ÁãZ<Ë›¬ïám)œ+h¯zìÏa~¥^Ø‹Yºxà½M67­
-}¾Q@<gäÍd}ßÜ-âãf††Çª§è·à^.@­uz¥@”M|Ý°Ìì4ÒÊ
-à™<=²!>°ë_Â! ¡nÒ q£^c7Nh?–Dbk]z‘Zøù·Íà[ÛX=mÅ›P :žž‰ÍW½G°tC#<áß×V Â'¦ŠÒyÞÄ1ò\ðÎòˆ¿ƒˆ§9&åŒÂT«âÞ°;¯oQ
-Äd²’Ø[EÜ­°¿ÈÇ`n—ÅædþǦiBŠFtù£¿ mŽ<{ töJD|Ï;±Æ&G‚iþco§Àå²-çaA3©±W(æ‚2MYÕô(mò¤ œFã³{gþz&V__éa6ÎÇp›¯ØalĺÃuwðnæc"8¡n‡:Ñ!1w‡Í‘˜Ý¿g•Ã ˆ%ù[ÛÃÞI‘nÓåÙ–~gdº/~û¬ugÉp¡`ÁPþôTiHŸì2\)ÜЙÍàÿ®ºþ0æ‡zx)œE½ Úéq;7,¦ýs¸ƒ,ª‡izÕ­éü*ið¾\~]•mî§Æ Æ K•!ì†ß!ou4›¿›û‹†«ðw<«^UG‰/)cy¯$Ë‹> täCÔž•6rеð‚jåº)×ä; æC'17'IÙŬõ1:Ï–¼pV%¤»Ã
-2°ÅѦyWýö¾¥jÖÎŒUËü«üÂ@¹,íðÊ&©¾JèS"§oóZ²,¢t
-’ú C¡ãa4Ÿ—7C‘ªÜ݃~Z¨‹ˆÃ©µ»*‡‚s· @qp![~_£Œ¿:[8&‹”ŽËNp€0ËtÃ"¤ü4q%¬i¨•F³høð¡<uÖñ¾î7iÞßÐäS)–óãIÌ)¶é¿Õ+[ò5L\Ö*ãÍZóÊgDسö@WÎìÖ1üÊ,o>HÁ81äј=Þü2¶ã³âL˜lƒK¯:ÏÂiåsB¢/]ûP6
-Q+ª''a¯¥¯óm@6úâçòg}»°4ï N–³š¬0ìHñëà´Po|®RÎhkÏ–T…£¿» ”àá€#V‰Y R³ŠÅ·Rßx°îV&£Ìy«úEê¥Äyêî‰;|0üŸ¸Opˆ`Ôæ:5 ×
-dž°Åû€{ò$#ïˆÚrþ÷øúø
-Ažˆ+‰o徑ù^ÄWòó
-þ¤a;åR6¨¹;áD]ëVsGm½˜¤îý‚(Œ3î} ìfˆ¦»ÖÔÊËÅ!’uÒPPÝöF5ñ;êO"•— ni2õˆbg+€ã–¦ÜÛ%çŸoÚˣǦÅ|É) –C¹,Å‹ñìSÑ.”Qƒ—#l )tæúnÙ‡')ó×LMšýLsi|¼n°Q!g ZŠƒp2Äòf;|d·sJ5[èOú»·r•
-¹0>“Q80ƒÁ˜jU¥9Ãüró5½C£öñ²·Ëä—A<Õ¦¡1RÁgó[¼X- ?¼§µebÑ×k^6*Ù J ¬(І¦7Ü1)ºPïNଛ/r§t ªX¥õø&™ ¥ƒÆôÏážµÓfÇH­öõŒ’°.ÛJó9øP>µe't§l†ƒì1M¾#,Çä1¾#Ü­ÕÄš#[ÀN).·E¶/°6~ª§ˆÄ•T1˜ôY¶#ß:a³áI]ï¡‘g=㟗ì26®HZÄ+ØÃîk
-z|~ÝX!ö×½’F`à[m”Ý»”}«SqÁM÷]»&ÃÍÝùԛꚥ‘ü…@ÏHÈúû Ónê
-c—™XúAÒœü.; ®¯˜›'·Œ©½C›ˆ^zºnõâ塳ýæzI‡•
-RÐ%åØWÔ糖Î;ÇOÏØŒI“ëöL%Ç’,úÛ¼F¬>žÜÁ|á™ôaײÍ4˜m?3’V=·_L=Rx;`‚i<’kav`Ä óè·¶²ú0
-pºs*Å"øVŸûå¦ä!¥`˜nƒ³ß+ó+ŽµÐ
-çøx£ƒ®Ñãz#ú€½ãJÿy‘ÃEäºF•“Róª»ÿø†D¯11tü@Ct´Y$Á¼šGj™¯%?¼äX+å•?L¤ÔÛ˜‡Í”_´Ò#(?Êô\˜ã@¨nw"àYl™À<”w„ÙY)ª5avQÿÊ%éömŒ—êÆ5=–AâŒ*$$–-Ò{OcŒËüŒÖ3n¡÷j¦&•3ì£Ç€ÄY+÷U&‡Zg\'ãMnÿ@÷W¢4’: zvlAÚ”‘…‡’>é„Üo¦˜Vü_Ù¹šÇ};*ˆux’ÆC,(¨ƒ|ýÜñ¹Ú÷zw¹
-£fÍ6•9í]ØTÉ°bµ÷áú1K/š&‘9€‡e×¢hœj4Šß.Î[)Z
-dCŽREm46¬8Ó¥N¸ «Ô6<É,ÆÐÍÉÎæi:ýx(¥Ët8ÐËn ÿ`’®!
-¼ë0å ®ÏØ¿îZïܪc~[Q7µê4è©Hšñq‡Ôø°7ò=­³ž‰’ §™òÆú˜“duˆ?ÎÕ+r^9kæÖq槜a^NžbÁ:ÐÞ“ªC=>JÅЕd›dg‡¼]ÕúˆËz@øeaªCšs5z Q/FÐé­Dú÷8È«âX²D›íŽO@Ñ% U÷Méd>kZ|èdü%ÎÐ?,cYÎMw5ÊÃÃP|øTëZBŒåæxM~`Ô•ä×P
-Ïoé†-Ë»ç² ¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aŸèß7嶸מ
-뜻%CAÌ‚¬UV´‰Maü€¤Ï¹uñçó„áÜêÀ:œð؃CÛ(|#ºÉ& ÇëéòɼÏÈ8GÙx被 Š³p<BÌýÀ«›[¤Êñ+ÇÕ˳ž8b׈×[ÍT|­¥#NùæQߧCW;Gˆ|SmÿFÞÖil±^õãþ™ef C¹‡¸·á¢y JòëL;˜L]¸îÙÙeÂAÚbˆPAIÛdðIÔPîÅ
-×·³÷ŒAÿÞ]ÿ¹:#¥µIä
-ÑÅÛ±åprkBÙûCzÆaÑÓ3ëÌ"!²2ö]3¾v{ÌÆY­»G «Œs» Oå×náR¤C2¾&`ñNƒ§Eƒ“\ÙÍ9È&Bê.üŒ¶Ù· nRV'“BV’äýáú%h:¾.l¶CÑy%4KÉÂTÙfÝ4„T·:ùÔÖ4_'áULšj€žXËÜý¤öiû ÃÆûêç”´c§=`²¨øqªe˜ßC´Ü¥îóÚlméòù
-H¦Ö¼9Gž¸M‡ôº„þP¼¡ïÒ4Š›µ.¾êJøiˆG•Ä$ …hÎX÷lÕ-DÞßÍ›á/c;§Ü?‚Ë¥9‡l®Ñ{Ä­Æ»òni†n½$›B×:õÒ©~’Xv
- w/¼ÞU·O§”~EÁÏAç8Q•|ðŒGÇ=gý9,?YÁ2Ë<må,*]ß»¹5HN”¤mf`!”uåIì¦uþÕÕ>2L"ôÄEñK‡æPüÚ÷AÍí"I1„'{†§³ úº¿¯c¼NøŒß_lbéøûö— m„nĜɫí÷Zäo£‚³|t0ó>ú>S‹Â™ÔRú—°zaI¿ î%ÕA˜">© •N~ú‚×-† ®2-QVçh-‰úó ýÞpܹâÛ/–¹"5vÎf—GWnT66þ8éô^úÞu¾4+k‹O
- Òo)³S™2áØ¢c—¶FäKa·\®ó*‡©‘@èž›XsIÅXðûh‰ðeýÖ8%W6¤¹¤‹»Ü²yÕŠ½¢uoUêJP'mͧésŠêø?¹ÄÆŽÞמ+Ü¿eB*£HH:`rÀL]¿ºH.âØð~}Êη¡>¼üHÇ8š½D ýâ.ºQÞùÎ_]Ì—%×Ïت3©W$@2?d…°Õã¾Â`¾²ß³Þ׆>xÊ:ªÔý°™9•YæÒÊßÞñ˜¥ãë^:?Ü'°‡eIº¼¨-„~ä˦MÕ7W¥_ÓÞàÁ¥MxqÅß)w¾€Ì}®+È Á‘ÄâGu™.­Y6¸D£‰ý}KCîý§WçRPn"8U+Sœ÷ÂøÌûyvÝôL½3ìüî3QÁš\É–ä>¨UHC{ϊѼ•€Q¹!÷Å“÷.¼?;L9§ZšÒE¾é«v¥Ž}03|­˜6þ–ˆ¶9£,whœ-ÇËŸ­×;?zøpÙÍ„y8àŽ9Ë¥H»Ñ<TÒ>HîÍÄû-q˜˜\—1άÄ.5HLUcß|{¨8óŒòZßÔç`äô³ÁPß½Q5åŽèz”=ûŒW0zúU÷Þ r còRˆžÿžDCh-&¦)¬u#Å>"1™k–ôÿ »žÍÌÃá±N”vD#¹¢A窠›`_ÝxXÒÈwgÞ„ÏÙå 솋ÛÈK+´CܦA"Ê
-âc§x~XÃJo(¦cé;‚÷ÿ¨š#1âŽøé}SUx °f=”4+ÿ䎧õZ›…H
-—€_úØî*Ý– ·£ý7<³Y6ªãvl¤ÎݱæŒú‹Ù¸™‡ÈÈc?m·Ò†h¡ˆÕ©Åç•¥RäÍ×”»L|âÊLwõø Ρò°¤¼AçYKr¼Ï¹ÙÖJÑkW½b%òyQ·ŠTæ9æ‹Ló"$N¬½ôž‡9ȯòL¡åùö;û¿ZÆMú›¦Ýj{wAÆILTI¨£%èÔ&ëö…ôâÞ %§½(1ã:«/h•¶µôÕ9óUÖô”‘­Í¡i¬rÝxUæ¸ÂÝPÂ#á61”#,*@Š –üb±·Tx8ÙÄç{ëG79yçÐê°ÀCþ“væ$Põ`Ò匀V–ƒÿþu6®%…Ùqc†¬Ó:†wtÎì•NôwØÒPÄv©*û&<û'ývýЊâ¹!ÔA"OýMBð¼"ðÛQܸ…ÍK) z²>Ç'áØóô-oâŠÌ#°±ÛÓ­ÀD/&Ësg k7/;ô^D÷‡ÞKÉÁ¤ ŸCH-²oS<ÛõCoõšÂÛw˜´øŒª"ØK–_Š­"H‘¬ûVpÆsáõpa¡£_Ì×SÈÚua¯õ°Ü±l|ÚV±{+ wókÎ:¤6= s÷(HfUôRê¸zP¢[E  ïcYÄEùºŽsûr~3§Ÿ°3ŸMÆ?å¦T‚°ÍZ5ÕèR˜±˜rL‰buO[ˆ`×w\ÁU·?‚‹œWà&ó+Дzu(“ Ø!ÌìÅûR% 2ú§8xdßÿó <ÌЃ|Šˆîç }®rw‚RÕ:Mp’òÛBÿÉ]˜RòöÖ„½®íX((gÿ¶Ä?ɸ‹e»¿è­ÚXÄ
-ܯ*ù V}ÒD¦ÿôð¥ÎÈ
-}ˆÒçq=G/¦8õ6ÙüÍ/]Z?ó{P>yêU•œµú}éË2&@žÊå:Þä®þ;TÆ
-݂Ư9ÎÖïSftt7,-–‘hV©©< ®ÙÒ]+,àŒA‡Ø  •;…ÔzEå]þ<Ïßý‹Ìɤ C™Ñ6ïðÖR®{ÒºsŽyZÍÒ+±êÈÜôÄk´ѤFÈZ‰!FÝmP€×:%•éd
-Ü)„lk2'¨ á"€”Öó±âµ|syùͱÕe€\ûÊJ;YýMªI­‘_£ƒ~Æ1bfÓõÝd=–ÙþÅ|SÅ=UkΫ
-S­‚DÍ0
-G7ôæøÆnuÒ{«ýef‚‰@ÆÚJt'D©Ñeèb ÕÓþÿkŸ,Ûš
+xÚ¬ºct¤]·.Ûv*I§cul'ÛFÅNÅFǶm۶͎í¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ú%ìí@ ,ŒÌ<
+…ü5Òß1‡PP[­B¼ªùÕy{Ju ¡glŸÏßüC(»ƒ¢ÈrÓÛFÁ÷jð§fÌÁpC`¶
+f†é”/–é„ÐaÆ)¹–ìÉT_ÄAÇDÆ@G’_²V ú¿IÂ>^"òœ’£\žpÖk×Ñí HNZl¸Š”»Ào{ö«OŠ—©™}½ŽÈïqM gÀÁõ@‰Î
+vÌó™\Ÿäsi‹ ø'o0=ÆK‘ wnÕÉÙë)ÕiÞ8©dÆî¦uË͈âL8{8yŸì'!HÄ`9õ'žz6±VÁ‹Ã Dp.µh4ÇÛÛ8ôÌÊv]ÊB‡ºŒŒžš¿ØKÕËËÃÙÏ£€_ë%ç=ùäÚâô%N¥¡[é ¡Zß—”Ž8¸³OÊÖÚvAÔÊ
+ųÎ:]Ní®¯jï‚?Ú1Ü¡}ú߬Eþ·ß™ã…°ä]x‰©9
+¾@£dJî'¾T¨×
+z õÊøjØNE'·M¼¼² _ÉHËq zÎ9W±O´à¼¢\Y`Gà^ùa“ñóQýÕùÒ^mš¿RDÓyYÕãľ¤w§fküV¥_d•ôúÁï¡qUåM»n<%ò„é±D}^õ…ï9ÜÚ™/˜zšâ.Øè×)ú/…0×Ο· ×rþ¦›§›Ü:;Òé:of\ÛsG§ys÷ÌäxQåç!X[EsèAm®¿NB(^WÄÌoÑÎÉ…qeQoP½'“ÀäŠÛ±vÅTäŠËÔ›Ê`Þ£>G}òxeVÈ#E²Á¯¶b@:4ÖëOØ,Û“œÖ˜ w÷Ý@)Æ óeîG£J (P å[ývÞ²zž¹<ú JŠ ÔÂY­CµŸÐÝ^R°¼k eMÒ]@KòB ™ŽtF ò°…&eð
+îïø`—÷¹K³†>E9‰ú¢%óeKšb¥6$O÷Àw¯sjºN«–'šuYv™ÁuC0=õOS‘GQ‰þ¯Âì{êMüqûÊ¿ûw^³4)pD^W¾i 22øQæBæeëðÄø8Ü+Î(ä€#x2dßë~r%³õç:9ÿ8¯%è5.Ý‹IáÊ9ƒnò )6Ý(€É7ÇÅåÑ Ú:T÷ ¼$Ó­jæÏI,n›Ýƒ0C5r ¦Ð{Ûôù4uJS·1Q¾àIÞ[°šùq™B·ã§ThBŒ¢$¹*3„
+j)ÔˆÀ9”‰©P͸\‘<«Cz„ w$;48™un¤£Üó
+yÍ:
+Þäâ¨Mœj‚ñí*Ã;øí3ÈñÈmľÎV¤>û¢{Ž'ûh„³vÁ›¤ÊŒ=N(ßÔ™Þ‡RÆÇâ-ë-U¸Õ¡AÉ^³Ø1!>•…k;oI ™&Z£Åó²A`þH¤Žš“´¹žÞù=&¬;îõ4vŸ ]Â÷žå·£Ë Z±ÔNnbáÓ1¦[^ÏÂëMᬯij ç_ÓTô²È§šl`îS ñö—›.²XˆGe(p¤.¿¡ CžFêJ)ËÂÀ€z®Œæ×Ô9øè¹'ÆÂ-ÉÆÞGܶ• [|ÛþTÿÞ l©5· BZ«àà"—䬩¹9£ÈµÿT*qq„ÏÏ4dG<éZS{Ëèœz 2T$g€ E‡úÅ3P&¶ãäQ,À‹é$‡(YÐF¥›Ýúg¾ÙþËœ;HGŸ€UÏ0/ˆF®A¶¢ºhÝÂüÏɬSŠ›?…ð.zì$ƒþ¾‰OøBw F9.é»°{IÛÖ]µYÎÙÛö>….¹©i>Öª®¤Á¹º·t’ÞѱûªÜI r<Xh[_lÒíÅU1î¤â(ÛŸŒÙÂp—)^ðC7¾è£½k¡ú»¥FÑ…ÝL”ŽˆÃSù8Ø'ȸŽô‹òôÝ´àvÛ\ûƒªH(dÎWs<eúJR˜)[ÈùÒ;.ŒÛ=õM"%Z
+H;\æ ¦oyd÷5/‚ZY¦ØßY‚x/ ÜI(ê_SVò÷O”ßmÛQ(±Ò´È{u½î}"ƒª7àú(˜"äa-/ÅGSkA˜M™É~¥S/D+âˆä5‘<šèaŒÒeÍž€RŠÕªµ«™£Ö½KxfÕ%S_olË+ÇééG~Žá^׎ÉñHž‹cCñ ûKÅ r„i/©ÁX¨ Eå[-6áËM*µÖ‡ßQ‘ÒY 3œœüÎ$c;¸™îÎôœóð!¢¸†„À×Ü—Ç+šž\[²7¸¹7ÚÆȈ€Cà[VZÉŽ6|íd›®y>vWL«Ýa%´§AX™ée‹ÇXço^´¡€KE-éÍBòŸ’Þ®ü1Ò^Þ€8ä„áU„4‡Ü46
+`YzY,lsÿtψSòé’üZQ”²8 !Êó@¨`öžnBîàñÃ`N€¥Nw§©Ç!ô$ÕæõÎ%¢ˆ(­Ùâ ÐκÒC$‚é‹Q
+=öRþ÷y:×S¨‡ÎG~.Ílñõ¤1Õß«Øg½ ?o!==çxQWP8?®~|˜Üÿ¸¾x¿¾tW õ/ŸU®kdY¸Åã–„ ¯iHxºâñ¸l±˜“¾ž?b™qé®yx@cÏ·è£P(&—.!ÕGÑ‚¢™þ=Wc7Ü1WÏ28'ƒ;2[.ˆxý‘×µèÀw,ÔE h@¡3§>WYˆ}ðùaæNy´59ƒ‚Oà
+Û#ñ=X6µÈøÌý/ùj¨5§äÕ‰X¦NëxþU¢lµÅ•¬A2fNyë BåK@z«1ÅÓÅ¿fÍÈnÿÙÒ©ê¹4mmÒmyŸ;þ-áu
+¶Šy­ŒØœX6$ XbLÖ¯Æë6SÅGó´»k%¾PjãdÉ\c_¼œMMâ›7IJÑ1è‡ÛÒŒÆî C¡oÖ)ëÆ
+‰} âx†Ü²t¼Væ–67Î5¥ðž)‹ôÇ“‚õ\æb—qå‘!̸øglnëNò4ü ˆ
+/ô Ä@þåí‰e2bƆwU†ŽUöq`æïâðÅFŽÓ⊂™¼ná{™š¢5¿áPƒ
+\ÅT»à^7–4N’’Ÿ»$$Tƒ-L3éΚ¹¼Ìè-h’T8 @½Okè#ÁMÁ[¯/³xO:"¨4áxüåäL—<kcèyÇÛb¢q¯ÐRÐŒñyn–yÍ Õ4ë1qÑŽ{¦í¾1'.ämŽNèÇ!Êâhkjìšû?nP:±³4¸§†ÅÜ9´mºAº‰=¥“º,fÂêhI­ ôNÖ»ïü'hä<Vk
+Á³‰Ek-˜B©äöVZq*ÜO³«ișꓛê¬ïžŽð°Á©ôÄÄ ;Òª_俽Qì˜ÎcNµ{pÝïbÔNÏ£….Öï³J–Þ­†+–½º5©jµÊâ?ÁGtiÉBs¸¯vëÔm)«[™ïE»yŒãn6Ägî¹ÖªÐR“?Áµ7ßûx ãcå«B55Ö°0§¾ê cu Çð'}
+
+ä+N‰Ø5ÞNj4xÐ]›€¨áàݵmï+Zf;ˆ?Çåe³ÝöPà·oŸÒÃüµ—¢I¹ë¼“F<{½*-5 …)ôcÚ
+#oÓÂíç ç‚
+
+8À#D=ÐÚ–'¼ËÆ€7aî^MXÛsänjã„h1B–¤ÖÑØÞt\§´äŠúã=/t2K(¦­H÷±X į̀W2­ál“åÇ W÷íÀyŠ|¸`¡ïì¹Æî§È…çÁ™kÙYÔë:½ |â­±ôÈìÓDáw E)³*j³sý«‹ÛV]öŠSl|œf&EÔô5L‘VÑ V ºZ™ÜŠ2Mù…%VÐ`ß¿1¹¦²¿‡T@@jLªPèȘ֨s*ô½§ Ëâå®è
+I³ÙêéœÆ–T©-˜Q§5߇[„þÚ@ÂÇŒçoT§÷sa‘‚‚Ÿ£;?®IÖB,$Êq®G¶qÞâ¯PIJ •£Æ»¨(¡àœ•SÕ`RHáRp”·Í/i¼™É6vÁ³ªÈ»ÚôÎvñoU;]äW¸é­ysQ†$Z k›oÀëãõO„ö¤Î£ýÁË2Uø˜>¼sUàtO?úp '@úÂÜdÛ¹KuŸCí½ìe½oÄÜóÏrž‹ëéEÓ3ŒžÈèÎ#$ûYjŒ²äØyÇúÚIÂOÁu )–8 Çúƒ}Ú |þ84G'.«2c2´GÂdL¡ÌàŽ6(­1¥²ò&µÂgùð‘ôrœP$A€+ÒádˆÐíçÁ¼_äÓôèä8\áä'wÇT`S^JkÊ_HÿΡ ÇÐïK”.±®:¤vìÓîÓcˆä"AŽ¥Øm¤.l¬È¤÷4³å)¸
+4=_A€ï CÎyëºnlT÷SIÆlBŽãÇD‰gÿ¸e‡Ýl‚È¢s›y|œRJ¥sáŸÆ%÷›oßú§gªDT+êg&Ÿ‡
+ÀáRLæÃ2–6çW0*¯bö"QÛ 8Òœ3,´~~ý¨yܵ±®ƒ!èk÷}“IU?û
+^ºö.ÕÊ;â˜<\éæjB† :æ‹ãk‡o™ùžËýta˜A=«(ÓÔ'ŸÔÐH•ÄN!z^“kðw¢ëKËŽÌ´«öߪ&ZÎØS³_­ž!¡ÑÐ9†˜mx,by5À,Ù{Ô´9s†s_=ªŒBÑ3ú§ÉÅé7˜MgðRSÙ aÅL4äÆÍœdä’¶î¡ÁZ’Ô§q½ ¸‚’6ˆõA3†Švbwq]o§æö§%¡×+DðXÚ2ˆPvêð7?³Í®=Dø"EL‰ÁÀ} §Û#WYççÕ"ú­Cø(øºÕèa ,Ù`­}Ta¼R›L΋ÜW’ï“9Ž˜oÖ”c/9ŠÈÀ°º·‹*£ÈpOˆjêû‹ ª`= à^SVnæ¶ô@&2†4.Ê0h-5zPÖz.Îxúƒ)Ë+™ÆÁ·ÙÃ!îˆF°²VóöqÓA#õ:ãF½À=Ca祥…1‰d1xýº¿ìø2ï«9Œ)Cí$§øV„" Æ1‰F¢rnêOèó$9žíÞŠòZ «>’qXøŒúÑú‡¶úIÛ¦Q!yˆ|¨(wàÌh"¾n£K²ñúB©
+/5ˆÝï9éŠ1)ëM÷çY¤Ò\Þ5ö £yLU!?䡳ìšýõÀªi›Ž}Ìn‹‘f^;àQb ù¸RÿBr Ï¿I-9:5Å·À2>ÁÐ3d±†Fˆc,<oäæ£Ocî1ü±St~»|Yù51DP!£í¶“°P ¾¢®tþkºô¡ßk˜8Á¦ÌØ$õc°ã9­•Qæ3EåŠü±¹ÙÞ–q«¿tÔîÙÛCCY^"fLzJ
+ÛnÊ÷Ù'Î{ü®ÒÿŒŒ®AiL–Xg…¸N
+£2„‡Œ°±hdw,}ýåÒps9KuN4ÒÝœ°T×£bK؆F–i$Ÿ‹‹'p‘}¾Ÿt¥™´ðÞɨ"3±Ut¢¡úx²Ø&x4D K¬ZógÜVú‘xC¶‹]äÂØý9¦yóï³t¶Úxæ‘…HÞ#ü¡ æh
+ø>_@[›cQƒY«]®Á²´%!
+ÚÕìΨwtŠÓ ?oAZdævò6I‡¼)’þ‰èRUÇÜ (Á@Ú”µ²âi·¦Ð£ñ ÛåºÛšÖ/ì¢ó&Å%é±ACF÷Àa¾šƒ;öùZjûâ×QBÙŒãωÎYIN«ä{Ïy|—hT®t²RML‡WK&q¨aMPjÍ–_ê›Í2ÖÝmYL¡£Ý§ÎŒrîgs7¨NãÚ‹+Aׇ²‚·`¨ëÞÊN óoé…%¦~aÝ–o¥­~F¼».û#3{9D«Áä9;â ´æÍôQ¤m£ÆgsHœ;“¯0C[µÐñû8Z¹Ô€î>¿œáƒ¨ÃY„Üá€ø¨e{MA\\ˆbi©O»‚›îöŽÁAø¡Ö3
+'ˆqqµi½á¢C°z³(†Jœ=ã€àˆœý]ÔÞ8§š¶±×†3`žbµ^0Ï »©uDA"e‰57 "jÍLLÇXÝ'N-ëZnˆhK$%JrrÛ­‹y¬ewyä¬ÏÖlv-‡åƒÑ‚ûvô¿L‡|ä‹N*<‹c)u4¢×é²=hIë&a‰ ét•ÎÉV¢z*ºìÃfÞaJž¿+uÍçWâèÚK}¤¦
+cþ1α¼ZÞÃbi÷cžç„ Š¢c;Ï\ºFý‚I ¤Ø-óÒF ¡Ù¡·ŒhÌ$‹™òjLjÚ¹ÕTãŸLàIHJ+øæö‡dPßÜlvÈåAÞñ GΓ[ãŽ`Ñ#&ûîR…j—ܬ'VuUÎÔ‡íëÌÒ†·r€"˜Ž†(¾WwPßSè¤u‚3ØRUê·€¥~²ýbæ³u«jJäþnÏ×íºÁëi¯™ê'‡¹IÀ&JIÔô0>e¾dÞ>#Ç<®å³Ü±éúÞv‘¹‚ΪçñæWêÕ‰½˜¥‹ÞÛd ³ªÐçÄsFÞLÖ÷ÍÝ">nfhx¬ºqŠ~K~áåÔZçW
+D9ÐÄ×ý«ÌNc­ü
+4Æg÷ÎüôL¬¾¾Ò?Âlœá¶_±Ã؈õ†ëî$àÝ-:ÇDpBÝu£Cbî›#13º;Ï
+*‡Kò·¶‡;¾-’"+ܦ˳-ý<ÎÈôXüöYëÁ’áJÁ‚¡$üé¥Ò.&>Ùe¸R¸¡3ŸÁÿ]u7üaÂõñ.R8‹zAµÓã~nTLûçpYTÓìª[7ÒøUÒð=|¹üº*ÚÂ_AŒ/–*CØ¿?CÞúh67÷ Wáïx,V[ýªŽ?RÆò^oH–èÈ;Ǩ=käàkáÕÊu3®ÉẇNbnN’²‹Y)êctž-yá¬JHÇd`‹“mó®úí}KÕ4¬½9«–øWù… YÚá•M3 |•Ð§D N¿"æµdYDé@ÖáÄúÑ¥õÇ*1öEÒ.úMµü–r± ÒüØ
+Á4õ5’+Äó}†#‘.ç­¤‹R‹ë
+õS׸­oïÖ‚•fx{ì—?]Ž{øjA}øé{v$õFBÇÃh¾/oF"U¹»ý´P‡SkwUŽçî0€8â…lù9|2öêlá˜,RºÆ,;?…Y¦y$…䯠‰+aÍB•¨ì5šEÇ婳Ž÷õ¾Ióþ†n$ŸJ±šÿHbN±ãHÿ­^Ù’Ÿ¨aêºV§hÞšW>#žµºra·‰áWvdyóEúC ‰ÙãÃ/c7>+΄É6¸ôªû,,V>'$úÒµe P¹…'›ð3f3
+J̺6I>ìß $‘–HåÇ(ÃÈ;LØAB¿ªƒKéíqrm”ü¼Ëµ˜+ู؂۾Ó&§døäNÃ0I¿r!7%tj[®†ð¼¸ ‡¿¬e°¢zñ÷pöZù¹Üvi3l*.p.&€Ñ· Kóâd¹¨É
+ÃŽ¿N õÆç*匶ölIUQ8(± J 8a•˜· 5«X~+Õøëam:Êœ·jP¤^Jœ§î‘¸ÃsÀÿ‰û‡FmA@ [r«@æ [¼¼'O24ö‰¨-ç¯Ô‰Qy"ð빟z¿–2¯\ÅC ]õõtQŸ;G@
+ƒmÕR¯ Ö$õì ÔÛ6Áò´K·8} bS5Û €UÞXÈs^ƒ=$Bÿ©†Þ‚€`õ©£X&ýµ§=²w3ØÔ]ö§ã^êÌNóÊ»Aøðc0ÎäÚ5¯uÈòtœ) ¼Ã؆Fê|ZEò‹Vjê¹Cç‚¡þË€y·rûÌÂqëBªUèü õÉK%©BIhs”¨ƒr¾‰Ÿc\už…L}dþlùÅ#œsþµÝ
+­­Ûä¾xP1S'¢Ä”ÀÏ/m*5blð•šZh—E5Ú°ZÊ‚?7/ ö®Ê¼¢¾Ø‡ç]Ï|Ö;ŠÔBùúéíôý'rUS”ÂŒ,ù³Ç?»FöÌ’±ÛõÚ$Ämk¥kˆ"ƒVa+±<•šºa¶>Sû%­äù‡¸’øVî™ÏáEü4¬:ÀðÊT?ëðÎhx®‘ÕÓéUDÂãÚ%†è(
+Djà&$ >g÷5«d(
+x­áO¶S.eƒ›»NÄÑűn5wÔÖ‹IêÞ(ˆÂ8ãÞ×Àn†hºkͬ½P#éQ'ÕíîaT¿£þ$RyÉà–&S(v±8m`iʽ]rþù¦³<zlVlÉ—œÂ`5”ËR¼Ï>íJùQ5x9–Bgaàž}x’2ÍDÑÔ1 IÐÏ4—ÆÇûèr¶
+´¡é LŠ.Ô»4,›æË…Ü)]Ã*Vi}¾I&È éà1ƒs¸g´YÄ1Rë}}ã$¬Ë¶Ò|>”OÙ‰@½)Ûá`LÓïËñyŒoãwk5±ÈVð…SŠËm‘í ¬Í‡Ÿê)"q%U æ#}VíÈ·ŽGØlxR×{häYÏøç%»Œk#’–ñ
+°û€‚ß_7ÖˆýõƯ¤øÖe÷®eßêT\qÓýÖ®Épswþ
+Ü$( Wgœî‘·xeµ§²Þ¢Q«:p¶ÐšaBš³·ØÄ ô¥7'‡Îò Ì[H›†{ ±_‡*ºŸñ´í!NTúû[ìD_lïñ (bÂ/Ý}¤)mR¼™~pÁþØL®†PèK¶ M5”ð?Æ®*äQF2±g™#ªûغà>~‚;H°‹¨-ƒô9ü·—5ûÎG 9„õKƒ[Óc÷­~@H"…°Î–E(Mõˆ@å4/”š0ù{oNcáKC¹¶un˜íÌ——*ÕˆÏh1+(¸Ôýd04—DËÓ`IRïÐðý„ã‚çNÝÝ45öH3‚-]º5û`EJd>¯3Ãæ B­gÍR™n"éK`~[›J:4qð7v®`=RŽ}EñŽ:è¼süôŒÍ˜4¹nÏñÈôQr,É¢ï°ÍkÄêãÉÌ^Iö-ûØLƒÙ£1#iÕ³q{ÁðÅÔ#…·¦˜&#¹–æÆÌ0žpk+«£
+†é68û½3¿âØ €ÙAehD¡–~ØioÔQbØFÈöyÍpR<‰˜ÈfÏâŒ&a›æ(z
+YìT”ÄÐ_ïCŽÆ} _zA-nuò®Z˜ÄögúvXPô‹•5tº ÁúOÌ]šÛæÞÄUhN'u6V‹3án[ }¶ŽMïm9¤‚Ü.QÒ(Æ‚Ølšõ3EȽ¹²FÕ7CÇ¡¥ŸµÂü‹›¸¡• Ò†Ô·X>År­V¤«´þœùÈ87‹Ðæ^’Ü#ž³Ä…*[Ã00Άºª\-zÂ0³•CÄx:M«»ÄãVNcÇICÃOgUÛ¼¬*¶@ÚU·ae’+b˜ÀèÌ¥¯é¶QñóP/Anžóu–ÇúeÙM"èzpJ™Ïò®­"U‰ ñ+“ãé?§ÙÂf%%íl¿çkíæ¿„òLO^‰ªãÃFÒò’Âiú,ÞTõg1ª
+l•"\\â„o8½²b¯‰{åIPwví ËQæH¶$ÜÉ´¦ÕL`e·©ѲÂJ»ýT‚Ε^jr˜²:ª×»‹¾n
+¼ë0åà®ÏØÿîZŸÜªc~;Qwµê4è©HšñqÇÔø°7ò=­³ž‰’ ç™òÆú˜“duˆ?.Õ+rÞ9kÃf6q§œaÞÎ^bÁ;ÐÞ“ªC=?JÅЕd›dg‡|ÜÔúˆËz@øeaªCšs5ú QoFÐé­Dú÷8È«âX²DÛíŽO@Ñ% U÷Méd>kZ|èdü%Î0 ,cYÎ]o5ÊÓÓˆP|øTëZBŒåæxM~`Ôä×P
+Ïoé†-«ûç²`¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aßèß7åv¸×^
+뜻%CÁÌ‚¬UÖ´‰Maü€¤Ï¹uñçó„áÜê :œð؃C»(|cºÉ& §ëéòɼ¯È8'Ùx被 Šóp<]BÌý «›[¤„
+¡à£"Ð<‘gÏ[îD~^ººÓÂÙ?Zn\Æ$ÿM­Œù–1Äœ)Á×Bň£EGâcQóh¨X*úêÊÊ_>(”ëw+ÇœðaÚ¨F~¶zñyþþ{ ‡>gS(êá9‡&IdÑX2)Fžb¡8ÚËp¤«PX,Gæ(xõš2œsPº% fajU‰ªh.,w¤Ñ«
+cLÇý2 Ža®
+L­ysN<q›Žé;u %ý¡xCߥi67k]ýÔ•ðÓ*‰I
+Ñ\‚°îÙª [ˆ|¾[4Ã_ÆvNy|ü(—æl²½Fï·ïÊ»i¤ºõ–l
+]ë4PH§rüIbÕä-àIæ<Œf)$Ü=¼ð~WÝ>Rú?]œã|DuVò=Â+÷œõç°üdË,󴵋¨t}ïæBÖ 9Q’Ž¹¡¥PÖ•g$±»ÖùW7‡È0‰dÐs`Å/]N˜Cñh¿5÷‹$YlÄžìžvÌ6èëZü¾Žñ:á3~|±‰Q¤ãïÛ_6tºs´“WÛïµÈßFgùè`æ} |5*¦
+…3© ¤ 0.aõÃ’ AÜÿJ&ªƒ0C|R*ü(ô¯[ \eZ¢¬ ÏÑZ àú½á´sÅ%¶_,sEjâ’ñƒ]]¹QÙÄäã¤Óoxé{×ùÒT¬ ¬>ÔDu±:eƒ„Ž¬‹C5áj¬QjCìé÷¤›ìÐ̆£Y•Ãé²{G ·$7wA”_sïâPs±¢Sš˜=ÍêïxEJI7z˜³LYò>‚Ý'ò.ä?4û™36L®PæØi¸Êfá]Y­IÍuÅSÛÁý²n’YWºjRdúAùú†ÄMw¼NÆÒ`´­Š&'"—cxŒ?¦¾©Žd[ºhxB{ü¼ãXæ}•£689®ªíV3*àV,´NÃIæ®ÎúÄ’Ÿ]ñ]Ì&ßkÏ—Ê­!ØEø>µBGD“ÊÚ DÄ`ŽÀzë†ÿD9ÜD•^ãP¹¹¡ÒC`pÞ¸q¶SÏ/@j»_»;Æ),H¿¥ÌNeÊ„cwLˆ^ŒM\Ú‘/Q„Ýr½Î«D¦F¡CzmbÍ$cÁïW %—õÛà”\Ù’æ’.îrËäU+ôŠÖ½U©+A´5ŸJ¤Ï)ªãÿä;z_{®ðø– ©ŒJ !uêˆÉ3e|Yüê*¹ˆcËûõ);ß.†úðò#ãDhö€ö‹G¸èFyç;u=2_–\?c«î¤~‘
+ƒÅÊ~Ïz_úà)ë¨R÷Ãfæ4Vf™k+{Çc–®ŸSxéüýpŸÀ–éò¢Žú‘›B6Uß\•AM{ƒo—áŧÜùþ1÷¹ž ƒG‹KÕeºd´fÙà&ö÷- ¹÷ŸÞ ŸLHÁ¹‰àT­Lq> ã3ïçÙuÐ3õ.°ó»ÏDkr%[’û V! =?(F‹V>Då†TÜ'LÞ»tðþDì0åœjiJWù¦¯:•º?˜ákÅtð·Dt,e¹Cëàì8´­~¶^Wìh÷ðá²› ó&pÀs–K‘v£yª¤}ÜYhÇû/q˜š\—1άÄ.5HLUcß|{¨8óŠò^ß4à`äô·ÅPß½Q5ãŽèz”=ûý¯`ôô«î½A$äÆô¥=ÿ7<‰†ÐZLLSXëNŠ}Db6¶Ð,èÿv;=›#˜‡Ãc“(í„FrEƒÎUA7Á¾ºñ°¤‘ïÁ¼ Ÿ³ËÔ 0
+·•—Vh/†¸MƒD:•ÄÇNñú°•:#Þþ>PLÇÒwðQ5GbÌñ Ò禪ð@` Ìf(iVþÉOëµ6 ‘
+’Yý”:®”èAèÂûXqQ¾®ãÜþŸœß,è'ì-¦E“qàO¹)• ìG³VÍ4ºf,§œR¢X=ÒÄ"Æ œVpÕŽà"ç¸Éü 4¥^Ëdw3{ñ¾T ¨Œþ)þ1²ðùfäI>EÄ ÷ó…>W¹;A©jæG’òÛB¿¶ä®.L)y{kÂ^×ö ,”K@[ âŸdOÜŲÝ_t NÖm,b
+É´ C™Ñ.ïðÖJ®{Ò¦sŽyZÍÊ;±êÈÂìÄk´3ѤFÈZ‰FÝmp ÷:%•Ùd
+Ü)„lk2'¨ á"”Öë±âµ|syùͱÕu€\çÊZ'YýMªI­‘_£ƒ~Æ)bfÓíÝt=–ÙáÅbSÅ#Uk.`«
+S­‚DÍ( »(ë%ªUÎ)7%g:F—°ÞÆ {¡ßk·1SÊ» „]«
+G7üæôÆn}Ò{«óef‚‰@ƃÚZt'ˆD©Ñuèb ÕËáÿkŸ,Ûš
ÅGÕkX:gׂ še£¤xu®ôØ\CùqKå1¦g ¡lø 7[Ù²Ì4Òÿ¹[PÞÿøç¥ÏFÔ´²ÿšûI#pŒ"­ªºóöWwxN¥&ÿÊYGúéÆ„¾åoK?\aùt@½=¥¢D#UŠ&ÐmÂ΃:Kó#˜´ÏÙf`ÃN¯Ú¬5}=ÿúfy$V·‹Id”-é%#©¾¯{z²5…رF’oö¾!²’»÷ØIáMØïä†H}ØÝÖR´x`î/Æ]è›Òª^3±Í7é¶ûñâ¬Â^µñŠ
·(FLH³~å¶ÞÖ@Õ6Jäó¾xÌ0V?K£ÈÕJÑ}gy,‹¨†/ã©$þ¸Ì~“Æp\!#…þö/»-ñæ –Ú3Uv+l•EM ´Dýý_O‰uò!÷¶:) G‚·Ñ é91¬ÄdÐ~í@§q&±ÑŸ<¹¥ËŠ)üÁžjÄÆpîp ãO`6ÿÓaÌ€“Ê ‰bœ›³ƒø*Ln<rüME‰J¬#Å<ÝþŽð»Z–êÞ§é
Ö/y³¤¥6f,¹yK@ðcõÏ’bÖ3Jca~Äï¬]+)T!¿hê (ò‹gÙ׺Ñ9QÀî/LÆ. |ºy‹ÔOIûè{£dç*ÇU6j—áÅ+”S•ÙÏ=¡ …–› öHL
@@ -14008,35 +14458,36 @@ K› ÀöYt^¬evQ&57Ñ„t9Æ©‘;ØQLV2²ûËI2­U^¹¨%Ô~ŸŒ×ˆzW
p
íSß»bò7+֘ߠáænÍwˆ'£#µE°nx‹¢PšL~|ö4KQ¦–!¯jn£ÕªîØãVBGE”}œœ Žý­Ð{ƒéV³”Vã0¾ô.¶Tv‚Ì|` °SU[¸U!&ýø7 >hI£YÉì0…òÇ*껪¦úݳj€í¨ž¨ß`Ù?8sGx9g3ÎîèñÙt÷:n:—SúluHx‹œ›ÍÉPo·«ÃJAüÕh€ß¾ÅW'ˆÃô´B ¶q…¡Jˆ`“ý kaæ®´bg>–MO”¶æB8uk—ÄþÙ7)Çê®Ü¿5GVQ(ë¿P­m-FG*åTA¸¡WK2z)· Ž×?3Ì›QOl
-¹ƒ%ÔÕÝÙêjýÀâendstream
+¹ƒ%ÔÕÝÙêjýX/â
+endstream
endobj
-1161 0 obj <<
+1173 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 2
/LastChar 151
-/Widths 2741 0 R
-/BaseFont /APNYSM+URWPalladioL-Ital
-/FontDescriptor 1159 0 R
+/Widths 2819 0 R
+/BaseFont /IANXSZ+URWPalladioL-Ital
+/FontDescriptor 1171 0 R
>> endobj
-1159 0 obj <<
+1171 0 obj <<
/Ascent 722
/CapHeight 693
/Descent -261
-/FontName /APNYSM+URWPalladioL-Ital
+/FontName /IANXSZ+URWPalladioL-Ital
/ItalicAngle -9.5
/StemV 78
/XHeight 482
/FontBBox [-170 -305 1010 941]
/Flags 4
/CharSet (/fi/fl/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/emdash)
-/FontFile 1160 0 R
+/FontFile 1172 0 R
>> endobj
-2741 0 obj
+2819 0 obj
[528 545 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 0 0 0 0 0 0 722 611 667 778 611 556 722 778 333 0 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 0 0 0 0 0 0 444 463 407 500 389 278 500 500 278 0 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ]
endobj
-1025 0 obj <<
+1037 0 obj <<
/Length1 1630
/Length2 16214
/Length3 532
@@ -14049,7 +14500,7 @@ xÚ¬¹eTœm“-Œ»kðÆÝ‚{pw×Æ¥qwwwBpwwwwn‚÷/Ïûž™9kÎùu¾ùÕ÷U»jW]µë®^½š’TI•QÄÌÁÄ\ÒÁÄÈ
R
ššÛ»˜Ó,œ¶ÿ>
üfîajîøÄ
-hjcÿOó9ÿ ™Û›ý÷úÿÊô¯ê™U4´t$¥èÿ½Ê¨jûw¾ Y¹¸ÿ¡ôw@jžŽæ€ÿ•NSÞÁì?ÿð‰Š:x
+hjcÿOó9ÿ ™Û›ý÷úÿÊô¯ê™5Õå¥dèÿ½Ê¨jûw¾ Y¹¸ÿ¡ôw@jžŽæ€ÿ•NSÞÁì?ÿð‰Š:x
2¶7û;nÿiø6uuvþ«ò¿6ÀßëÿÇù_ƒonîanŠ°¾â`Êb‘ ªÃÍ™×èc… u,mT+* ¨qèõψØå­4z« ejšáûh÷\>s|?üFw4Ö‡cKÝ›f~ùЗœ¶¿ý'U'7ýQ³A)ræ¹fŒ÷Õ’Ü”‹ÆÑÞ”²ŠAÉ ÑL'»3ÜÕ#m
‰ªV¶ý^]n?É÷oŠ üÐìæÇÕQÿÑŠ´Këñ¯0AÙ¬ŒÚ#Ûõ½ü¶Sz_“Ò¶Âæ°Â¯£Z¬4¦×âÚpj~¿H]c}jÇyŒ{ì|yz0Òä$·‘×ù³›'È úKåWµ0wïèåóä»÷ ¦¤†®ßëÓôäNg@«ÔËfR~7øX3X¯§º<†ž‡:;D݇Y‹’‡±ÇƲ ¾qv"©Î.嶱8Á[Ö†¸gÛyŽ
‡Ø
@@ -14103,35 +14554,35 @@ T S!õ\¶ZãÒJ)¡#¢:sÌæÀŽ_îR·è¢#Ô¦Bò
êOqÚô¡9U¤ $Ö=6Ððü|Hò‹°s%nS,{¨üˆ&õÊ’—8$²cå’6¿p[Žx7íj£\k@?®ð¶ "Ü<4s=3Ña½BÚ_Z¼–âç0h^×IÓ¡gÀDFÌû"O,v}V%t ïæûüH¦¼¯¸Êi¹ò¢Œ
Vº<3ÿiúü`+zв±ƒõ¤âBy¿e5m¨á^[ÄyaS©aŠ€()ÞŸíÆÜ=7w3ÔV³Md& ðÑÈå’½Teöä´þe¢QŽh¬õ äØîαÿ”øg´>»6¹”¼g´(>\PóÔkºßo†‘vÝ8‹¥‡HZR¯±˜(rÔs•Ì7R¶s×»LíªøŠæüz!ÁÈ U[–Õ²69§QŽƒ.[¿’6çÏhüS—Wse®÷±dßbfïyîI‡dÁFbNþ%ÕgÔÆGœ¢,bœrü(šÙÂ%+'‹ Òl£g"îuªrC`Wro¦1€5ÇCÈ…çpû¶šÍÄ]sG¹ÑOnäàrqœìZI=…M}…)äCQÊ~ ê!µŸ¾Dz9·%eÞ!­û©ÆÁ”,Ý,>׿¿âb‰lGûrs RøV0' uV·ƒÔ) É ²;^%!#úㆹå"à÷È“µ‚i4Í p#Öo·¤_Œä%±!¥Óæ`…(`¢ix¸ü={Pìr {[£3þÝɶ*\ÔvµvÈÆe~0{zŠJ"É®Ñc
µÄÀ‹í_~ …U¢÷íýwõœÅ6o¸JÚè¨OÊÿ7E®Õ?ÿm]~»úàD¾?œñŽ¹,à¾$ôƒc2‹™‹ãé¸æß‹M|&ìšp{³×Ó\Ì «e •Œ¤·Æý:®s”CrªÞr±[G^…_x[´?ÒØæå'®Öܬž ¥Škv5‰GlŸ뽺>QÄè5ó†…¼~šÒÙŽÝ  ÙvnÂ|*ÑÐaòÝ¥ÉÿÞ^á=tønÚÖ•_ÎïxPðdòùCß•b­RæwWbgÖJ?~årοþC¬[BýädƯ{ñ h§úÍwÓ‰Ï'}2~Ñ]Ø6å°âÙŒ9û ²&ÜÔîNÖñûö¡î±`luî‹)G2O=ßùEßCùä”Õùù[
-¹ÓÏ™wŸ˜sìÇÆâ@•»¯M·åöMXvºóEÿÿu9~Û¤k²¹¶…ê¼ ª?yÉg“º”òÌÜ{ç;OÛ«YŸ$3iÕæ#ÛÏn•8²oväóŽ7¯ã}ËÏëÕýÜá?÷þ¹ësÿ„æÕäÈ©Ù÷pö.Õ`¹fýO©a›K<­ÛNîêè=|ˆuÖïD©â¹µßýÝ^Ú(šDªM?T¹CÂxÝ;)ñ´g¥ÙENÓ/Û¾}õ%×ÊÛJ®Q†…É9©‰E%ù¹‰EÙ\
+¹ÓÏ™wŸ˜sìÇÆâ@•»¯M·åöMXvºóEÿÿu9~Û¤k²¹¶…ê¼ ª?yÉg“º”òÌÜ{ç;OÛ«YŸ$3iÕæ#ÛÏn•8²oväóŽ7¯ã}ËÏëÕýÜá?÷þ¹ësÿ„æÕäÈ©Ù÷pö.Õ`¹fýO©a›K<­ÛNîêè=|ˆuÖïD©â¹µßýÝ^Ú(šDªM?T¹CÂxÝ;)ñ´g¥ÙENÓ/Û¾}õ%×ÊÛJ®Q†…É9©‰E%ù¹‰EÙ\
endobj
-1026 0 obj <<
+1038 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 35
/LastChar 90
-/Widths 2742 0 R
-/BaseFont /RVXZFG+URWPalladioL-Roma-Slant_167
-/FontDescriptor 1024 0 R
+/Widths 2820 0 R
+/BaseFont /WUMGIN+URWPalladioL-Roma-Slant_167
+/FontDescriptor 1036 0 R
>> endobj
-1024 0 obj <<
+1036 0 obj <<
/Ascent 715
/CapHeight 680
/Descent -282
-/FontName /RVXZFG+URWPalladioL-Roma-Slant_167
+/FontName /WUMGIN+URWPalladioL-Roma-Slant_167
/ItalicAngle -9
/StemV 84
/XHeight 469
/FontBBox [-166 -283 1021 943]
/Flags 4
/CharSet (/numbersign/parenleft/parenright/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z)
-/FontFile 1025 0 R
+/FontFile 1037 0 R
>> endobj
-2742 0 obj
+2820 0 obj
[500 0 0 0 0 333 333 0 0 250 333 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 0 667 667 667 ]
endobj
-963 0 obj <<
+975 0 obj <<
/Length1 862
/Length2 1251
/Length3 532
@@ -14139,48 +14590,48 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚíUkTgnõJÀ+Õ€€¸T
-æ2¼%X4-@TPLuH&H20I0rY bQDƒ
-UQ ÒJi½
- VÀh,, â@HøJ Iä8Ò”#–\ˆ
-pÃL~`ˆ\ª°G
-B°½`ÌÉÃÔÌæþ*©4’MµŸNé/<$“H5oˆ,Z¥„Q À¨|¦4~m.HT²™,K I%|†\$…èE${R_…¿D 8%_ !©žÆa¹`¦,¾i#$nÐÖm ®Ç›¹N“H"WnÒDÃ
-ña),ü3ìù~=ôw¸7†Cè;
-)¤Oà ŽÉDÔñŠ@ðñÆ~½šðoB¾
-Ea¹rúlbñ¿­…ld0¬†ù¸Îv„ï›™W±»4ñ³S׿ÿ€dõ¬©ÌÜiÙV•˜/$p©Ç‚EÊ¢þBã…ý:|”Áîs¾ï![ô¼}fо/GOÚž¹q¢$ì@2µžØÁÅkR3´s^z¬ègéb¶.øÚè@¯GïýfùÊÎÑåIM6Ç&æ¶Su=íÖ ÝCº»,¡už¶ì~1^Óý°uÙpURÞåÕü¡k·X¼Â?c…A¸Æ:b€ã c à>FãM“q—`r>{_}¸ú‘Ó—t×'zn‰z,#Ñ!þ÷«Ñ–ø{2 Ǿb[áꘗº¯ëÒ.IYÉꜛî{ŠŸ/iòÒ~$"÷xÎ:ÛWeßù`óÏå`ú+“å’âħ%PTAe®ÓúGq1ßÕ¬žØŒÏL ~Qqxëã¢u{Í"ÐvíÍN¿¬gÇ­‚Z,2(ª ãÚ*ñþ¾wЫ¥ýú†¢ûɲ÷lì¿ý*˜W‰ËdCþ/-2{{ö^Š¦X¹hÛhŽ+¾Üòœ5»d®â¤ÛbÅɳÉ©ôÛ»Àò+­mà]Ó`æöœDÖ0+cQ®èb
-Œ#'û”»7,ÔV/ê¨<ªÕuÙ8YÞ6ˆ[dpÖ–)wJ„G¬Ç³öerxAÁa_X$moÈKã±yOÌ殧¥‹‘£«–¦ „šw³öëŸõ yŒ(¹Öô³mEaé+4ðÙÚ5^c–Œ’£óM,’Ó|…vfS›øøîlqÜÈžc¿¹<Kêùcø»…'" ?ƻ߲@®nÌKê ´?X,~bdWûV;9;}ii‘±¸5¨6­Ù8çþŠçÎÖmïRœb’ìˆpæXزK´ç}­SRdfqÀRÊ‹¬ö¨¡¨œ–FåzGêÇœLpNç²Uë‡?´>WÒwhÕfŠ»Jÿmå&Áλ£›¿ÊÚò¤…i—ûQÔ?lÇÃÌÏcò&wôš÷šØÚ.Ý9ÜûùuêïeüíNÑpÌüü‹WuuD‚~Hûê oªa×½a㥲˪Ú+¾+´$ã5Êæ”#áEy¡g~0³5üó&·åõuÕ“é;{/¢¡›†ò铨ð±ÿ`©ïpYQ8ýSîÆ_“¨JáAÆÓ_‘^¥¶?µ¨Ö«‹C™åé#£'­ô¯–q4ßa÷,ÒNx¸3)sT@†ÏºÛ«Ö 'Nÿ®öiœ7jH÷± ÕùáÜ?´yôÓ†u/Åù÷ZħëzO0ñ©óÂo™f™Ì‡£é·t¼ÒbõñŒÓ¿­=nLß=»4ÿÎ¥ºÒµ[òX ÜÆ{´½ Æ럧º™¾É*ç¸Ìv*ìzq² `.ï-4t@R®,#ôÓùCŸžH©m‰átO´©rjsSr‚tçãÈY‹Â0½—M ¾°#þœ¢}çØTYË»þ÷=kvµÍ»qÞSs\;`šoÙeo{£Õ¿¸ßVÿ¢J°®ñZÿšÈ;Œ‹Vªi“åO/´Ûêy a[hÞ>Ë1¯©ˆsÎ>Þ`{ÁJ;‡yÙŽHBi8>º~ÿzo|Yp÷àH6‘_¿%3<ÅŸrþá븦¾ð¹1ý?w5Ú™ª«wnmÛšà2ѬN?bY¸º¹°m6ûë`×çÌ€#·'tV³ÓJ-‘5^hÒVUGBvˆE§V\0wggn©ð=òøàþßà¢vuC¨‘Ahî_EÖþ}endstream
-endobj
-964 0 obj <<
+xÚíUkTgnõJÀ+Å€€¸
+æ2@ ŠMË%€
+ŠT†dBI& ¨ÀŠ T¨\*­”Ö °Àr1±¢àY#BAn¬\uÝôØ¥?wíÙ™?ó>Ïó½ß3ÏûóY˜1} .l$vC„bHi€«‡ïA €D2ÎÂÂ…!1î‚Ä0
+‰d2ˆ ±÷ÝWà²Ív Y›' (T{
+‡ ¬¢1 À²a)
+Ly£ÖÞXû¢
++¨É5Ýõ4:âûúí³ûñLj_VŸ>ø¬´^®ÛUo
+VÝìè¨Ç2çÄ2&i¹!×`9ޱʺy½¬Î »æ¬LÞ«gªÝ§ÊŠ6PšÉ*ÅA<ÎÝ™Ìô f §·ÿ—Zq‡›ó’½Ÿk4½/*ž•!g·nJõÓ$3N(^ŒÛLŠÆ|ui—:KýSŒ-£àK ÎvÓÚ.ågתJ$§í&Ýÿâ¾Nnar67z2õÜ?Ì_Æ ü>ñýú¢PÂO1ÖƒãZÈ­½ÙÓqÃF'˸ÏU^uNÕe¦fÄÇ1‡¤îÐHœ3*KjS­zŠ¿iÔqhïŠiD\Ö‘ˆQ3¦–¾W¹ìŠ“nB‚@ÃußD™Ïì
+Ëùg¥rJ¨0¡~ÊÌ
+U)És‘›ò¯7Vì8Çhömyèp|ÝLÓ«D+õ·™ULó•¦Å½ó%•
+endobj
+976 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2743 0 R
+/Encoding 2821 0 R
/FirstChar 13
/LastChar 110
-/Widths 2744 0 R
-/BaseFont /SNYZAS+CMSY10
-/FontDescriptor 962 0 R
+/Widths 2822 0 R
+/BaseFont /LSENRB+CMSY10
+/FontDescriptor 974 0 R
>> endobj
-962 0 obj <<
+974 0 obj <<
/Ascent 750
/CapHeight 683
/Descent -194
-/FontName /SNYZAS+CMSY10
+/FontName /LSENRB+CMSY10
/ItalicAngle -14.035
/StemV 85
/XHeight 431
/FontBBox [-29 -960 1116 775]
/Flags 4
/CharSet (/circlecopyrt/bullet/braceleft/braceright/bar/backslash)
-/FontFile 963 0 R
+/FontFile 975 0 R
>> endobj
-2744 0 obj
+2822 0 obj
[1000 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 0 0 278 0 0 0 500 ]
endobj
-2743 0 obj <<
+2821 0 obj <<
/Type /Encoding
/Differences [ 0 /.notdef 13/circlecopyrt 14/.notdef 15/bullet 16/.notdef 102/braceleft/braceright 104/.notdef 106/bar 107/.notdef 110/backslash 111/.notdef]
>> endobj
-960 0 obj <<
+972 0 obj <<
/Length1 1616
/Length2 25435
/Length3 532
@@ -14188,7 +14639,7 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬ºc”¤]°%\]î²,Û¶mÛvuÙ¶mÛ¶»lW—mÛúú}ïܹ³î̯ùæG®õœˆ8;vÄ>'Öz2“„@^‰FÀØÎÐDÔÎÖ‰†–ž ¢¨&o`mm`la'M£hgc
+xÚ¬ºc”¤]°%\]î²,Û¶mÛvuÙ¶mÛ¶»lW—mÛúú}ïܹ³î̯ùæG®õœˆ8;vÄ>'Öz2“„@^‰FÀØÎÐDÔÎÖ‰†–ž ¢¨&o`mm`la'M£hgc
áàUûZ­RR Ž_&½þ’ÞŸfx¯%Ê3® ôEþsÈC®” ô“‘Bå0²TU’?…šÜ¡ˆhÍÒVùòýåm»T úÃ8Z§ä‚Û°ý ³:I?Ôöz"6›Èbœ^%
yá×h}×¹­Z  ypÓ‚u=jëé 3\xœa(74nŠïRýƒ&cx£aYKÜ¿‰~ػբÉI·XiêS¨“2ø ú›G²¨†lkÕ›$ñé³øI ñƒ<½*­;:̽¤PœT1]š«ÚowŽ0~,A¸ÕO˜Ó%/‡ìdccÅ÷‹k×{GKÌ‘›j™(+ÔBUÞD# ¡6ª:Mð%¿s¾†I¼;v #wïRUèB&%Ô øªÕ(cÊïZB™ª³/7í¿ '|8¾—}Z£6Ã*DLi´¯kâ'/rn¶èXÐ60µ!~Èaïގا*\Dxc(uè³?^NWù ±CVØñ Áá´ÅÚQ[´¬5üŠvȈ0Kïø^•vµÚ*V¦°cœ (p3“¸µMÖiÒ|#Óƒ}5ãByE¦Ç•yÖÌÞ¢º<^×<;>3ý
ÎÈ;V<g5j‡ùôIH›C„ÿæaTÓ€
@@ -14291,411 +14742,438 @@ PÔ3)lmŒ;œ¸—ü“5|—î”+ÀTÅv‰¼Ô_òF^›b QãLT?yÇ¥ðb²èewïA© !ÅdYò]mÝ ÏÈÍ[Ÿ
‡)Í1p’}l‹ÈÙ¤û¨¯šð1ônQ“Öü:”ƒ‘96êì(…+õƒ<“4Ã7Q|ÿF1°²¨üñ#\õl1ï,äÝ?7Âeì7®Œ½nØ<É„3ÄÓ›rhNBRòÂÑC
^[ÜÀ!ÄŠxMcOÝ—ÙPFt>l¿‹JF¢‡ßÂöð1’£†°åïxDÑv hÇÚ
¥åã—r¢fY—òU·zifÁUÆz*JfU¤ËÞ ½ ýä|ÿ:Ð(Pk<’¥WÝìo*Á]ö…gP³Šþ,ÚFjî¶%™;ɘ¹á9L9.DœÇǦÝ@sOµhòÚ³BãtÑsÒ~ˆ®›×)-ÉA
-ÇГöÞVMýͲ:“®³m›ÓWBÖþü/ùÁÿ ±©¡“‹½­¡“5Ìÿ
+ÇГöÞVMýͲ:“®³m›ÓWBÖþü/ùÁÿ ±©¡“‹½­¡“5Ìÿ
endobj
-961 0 obj <<
+973 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 2
/LastChar 216
-/Widths 2745 0 R
-/BaseFont /KNFIKS+URWPalladioL-Roma
-/FontDescriptor 959 0 R
+/Widths 2823 0 R
+/BaseFont /JOXPRG+URWPalladioL-Roma
+/FontDescriptor 971 0 R
>> endobj
-959 0 obj <<
+971 0 obj <<
/Ascent 715
/CapHeight 680
/Descent -282
-/FontName /KNFIKS+URWPalladioL-Roma
+/FontName /JOXPRG+URWPalladioL-Roma
/ItalicAngle 0
/StemV 84
/XHeight 469
/FontBBox [-166 -283 1021 943]
/Flags 4
/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/circumflex/quotedblleft/quotedblright/endash/emdash/Oslash)
-/FontFile 960 0 R
+/FontFile 972 0 R
>> endobj
-2745 0 obj
+2823 0 obj
[605 608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 500 500 840 0 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 0 606 0 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 0 333 0 0 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 500 500 0 500 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 ]
endobj
-937 0 obj <<
+949 0 obj <<
/Length1 1614
-/Length2 24903
+/Length2 24962
/Length3 532
-/Length 25789
+/Length 25846
/Filter /FlateDecode
>>
stream
-xÚ¬zcteß³mlÛN:¶“ŽmÛö‰mÛN:¶mÛ¶ŽÙq^ÿþWoÜ÷>½w?ì1öªª5kVÍZkœ3Æ&'VP¦4™Šìœé˜è¹‰T•Ô ml M,2tB
-Ѫ&ðëöÜ(ÞÃÇ‘œåRMyû©i¯MH>c¸¤bq›‹bgÜë㤸>· +Zµ‹¥{ü‹q=v¾ ­™«O¼—«Ñ)X!íÁ/$ä±)$§ÁØ^‘w?í¦‘ù]€§“X.2)§©Êer[¤ .©»¹™ ;þÄýI‰ŽBà A¦¸¯»àÐaÁôÞ®|û³ 5ï8sêÓ†
-"ŸÍëã-ö .TÞ;”Ïè*Yp§«© ‹ÕÀKÀk" !œÑE¾[OžKA3æTv7‰.ѧü™"Ç S"V™bIÆ@Ζӧ
-
-áê¡טÞO¿UæÝ¥šÑ<ÑmËs]T­+¤O˜¶1¸¶ðææ#¶V0BøkÅø‹‡ÙÔ•º]Ö²$ò}‹ZZ–$ëe1¯¥P¬É}éîjÀ(RŽ›¡ÛDZù4 P™ bw×4ªeÜêI™A ¿RñŒ24§iÒƒo•æ7…j,;Ù:Œq«úÑNèHåÊÓBuNí|ÚÌ
-6q!#z~`i# VEô yA ã
-5?Ä…J‰¡?‘–x°Š:p´xî@ŸË*£WƒõNQŠÃómƒË@bÙ‚ÄÛ6=_ïc¨Å¨üÐIûVs/D–)h=[¿°J›ÔðV]èB¨öK6J‰ôÍî=®µ5ðç"YAr1äc¶Ð ô¢.é1ÄéÀy²†_Õ-ÿ)¥º*™ïH €Ò°@¿¿ßå|Ç1SsüîóFXF¢ÙB¤þŽ0¶m粿R‚žPï[#@U4K£»åí8c¨tÜÙÇUmÌ ƒz‘HÌkËKÙœ¨ÈÏC—ÝœÏÈcí¤šö‹›ê
-Ú 1ËÔå
-Éqž— êhËÏFÇ=êO”ù+Š<cÁ·.üIƒF&Tfj%v}Hæ®»º/Þ‹:€…tq>ÆSþRL|žíl}„¨IVâMˆ³¹¬|övW£UEqݲ–^`)d_„¯×aå0áï'
-µãJc 0Οó•wê(á·ŸK£êÅ¥Ç<ÌDø¨n {AVÈSb˜1’Qêg aW¾ ¿á¨À+:Q˜šš“ñ‡m¼º…·mÔ îy©¤»\pºAŸœ,)üE»Ï Êüœ‰Nó í—éEgB†Ý·ÚdŸu5C
-<…:0µo$V éÅŽi•Ú¤ËöÑÇÑ.f ó³X©f‡¹5JQ·&– %CDÌ\jö˜B‘u/‚§~;kµ$&yU]ôʉۿæIÎE¤Š”[šÜ¤ŒèGœç³>JýjˆÌUÔ‚*
- e«1‹ïmÍ°–7p¤+’qy+EßÄ[·ü5ñŸòÀ^îF „}fá•Iû~c”sÄŸ[&ž¼‚Ÿ?/žaÑvãEÎY\T{‚ëv<ŠtcûpÚ¥AgÒg ]`ÃʉJÛv§ltê- \5©1&딠丯¡¨Mٰ݈?T™ðï.™mëßýߘVý4ÄK/Ññ“ê4„ T²(óìï@
-ŠuüìKœã!¥}=—à|ÖÀ¬B®ÈJH‰^M(B ¼µÂN8`æXG_æó"XÙ´èr6á`MÞ5f¨tÓ:JëiLÙÓ{ôx
-קµ÷YÏÛP–™­Î›ä‡¸-f: ƒrõñò;57ì>\ǵ¶ ®Ã¼}8&;DPí…eªî¢W¼'­
-aèqÁr1t˜9f»+ (*‘³-ÃòèRö£½gè–ß~n)véâlOŠeøÝܨë?PÃ-L¿Ol‚€qäµê=¬ŸR©Ì…×9°­zGB¸w{&=GHÑa*ù£8uÊBâŸèÎ6ZÔöŠ¸ÇÑ>Õ‡žC«ß]ü®A‹—Ú!2|XIœµr®5è (’v¿+ãïùF\4“®=åpß¹ÛÓt8RÎÀàx“š›„ÇÕL9[ôiÎ.¶¦ð Ri£´c=S‚<›1ÍÆv¢§6õÈ™\Þ²©Ôÿª
-Æi2ÐÓB¥·åÒ îÕ±Þ:D!€ÊW"²À˜òÞÅ¡èüxÈ÷|¡á3 2y÷n/D #PÖ2’©Èk­.؇Hd†£Lv{ÛñöûüŠ½lµt@ïH­¨­”;áBÑ2«C¬aCõIð#_”½ª†'î,ÏG¯ û)—DÆ*~Ì2ÐüQDyô¡ºôå &ßBêf†³Ê²è˜:³ tu ñ»þ9rK*8]©„·]ÆîCŽÜiŽJÆf§Ô 0ëRi× ð¦h a&¤·—ϲSz… õhßÝ0ÎÔH—Ì-zÑmžÛû S úQóÕFòב,<yt†¤ç“jˆLU\WóaSà¤hµR$@IÔ³®kð†®ËÅœéçºq+¹¤å`”
-þƒÁUÂæWˆÌ#Ü\Ò€h®&ŸÉ5é=úPȆ›Q4¢ÁÎJG¤Þ^¿Ò½
-…Œµ@w‡þKLàí÷‰ŠÆŸ
-çÈz%ÿjv꡼½ŸY/fyŸ&ž<tj«öÒlò?ÖŸÑqÕMêÕA•Ž—ÅïƼQa¸á; d:…­Ö`‡-^uI&¯,ªÆ‘ÜÏÆ¢VÚ57Ç´Ú¬3W'¿/ ÊŒ£Œ¤Ðyû°n~œ?xÿ棄ïr6ßÛS+#ÆB£Ï=¯Ui ƒ¢‰w5ô,·
-Cà—qžàî´Ô›‘õÔÛ÷5ÇPÍrÃ#Ä^ÄïŒå—“¢¡“ôâm‡{£ÊÛìF^¿¬¥V
-ÖY¢ï㸂çõ(‚Ê7º¦šßaYY®ƒµ‘î¯
-Z[Ä…‘ÇÌ® g{S”v
-…€˜!0"ªó:¤¢¯“‘
-£{t¯TÁ>žµÁ½¢¯.šIw™Rçè²óm+5؆+2¢¶¤Qûg ©!“Q¨¿E&·„•º"²Zhu‚è (4¡JRE†âþ [,›·äbU8ì`Hj¬F(Á2"Lã<û}蔸ÙÌívØ_ƒ8Z¢Ý|„Àh›œ_á³bŽ¾–F Èe/í‚œ6¿ì~á0€l è'oÖßN‹¾'tKà©H øêÇQud8ÖVX“'K \¸ÈÍ€‘•Û¬d Ô‹ßÜhû¹ÏýýWÅάJT¨dÝ'›h° ÙÞ @Ò«û3pw+Ä÷–ÆŒÅÎés—øj¢:\ƒ;mBÔí—¦‡Î®÷É€’N#ÒÀØóÍìÍ~êe¶!oEγqi{ÎÍ ÙDoM¬ÏÇEðMFðêã_Ïã8°©ý«¯Jw-!<À~e•\B+SÝP3èŒ"ð= 5}Ö;QÍõË^ŠïÊ¿[qªsâ#Ï·ÈXs© Å!µüôÕdx´@Æ×<8[õ^ìMÌVhx²ýç@÷Ô»¤‘ÏÙõCYÝ–«<PµÈØ…„ùå=°Üœ±üÞ¤Bk‡‘ ŸôÓ:
-Ž3^ïîtl7éEÐR^™UY5.ÔÉ<ÙŒ?tLúdN¬OÔÖ
-Ô>Ä*â-æ6Ò}É›@CÌ=ÒžæPÛÏÓUmeX†0>¥Š;qA0hºxôÌ%šæ¡îËÀ÷·]³c^þå˜[¶Iî4÷,_#5é¡ñ;X“g+É1¨ê#=µmuþm^G˲K‹c¦éÆ3 =U_²Ÿ}{óÉɶ=éÜ~Ã*Ly¾•µ1hÌâÇ„'Šƒ{ŸôHrHOðŸûû“7„æ ¿Z6ÐL4Ó÷€»Qª4™Ö®ÍåY»s¿¥¤Ò'w²¸q;F¸5ûfå9$X†/ñ‘2—¹nl¡-'jU¦wíû E¿•¡¥\H[‰Úû¦ËÞSŒâ¼ @¹8>Üp¼îf©óXŠ+6§Ú ¡¥0”j9Ímp\`Y¥¢«§
-–0@JèÝõ5@9>ÐmçæsS£pð\OÏJðôEXŠ±É¬Uâ”Û͆B¨Ç—ùYʦ˜nà^`nn$ÛLÆ®¬ÂÇýã?µòÔ5™ŒQË™Jƒ­×C‰½Ñ=´³q™»môûrlîÆ"HµÕÿý·”TÑ Ð)§^nL¾”¦–ãiõ@¨­Î~†+ÆÂÆkinuyÄMò.-ÛŃ«×åÝ,>áa•¬
-…>èc‹ÿµï"¨ÈIÓè ÛÝÔÆ./>À"¸x»øÙ^ªç-RR¨¥ñR-Åå\-‡´¤DoÞå±($ú&—øôV°â½âî”Ä`(f þQ̤Ön•W†&mr¦ òäéŠ7K¢ðUVž¼)(E3ô9€…Ûn’ª“mÎU@âÒS²ëÔÇ@×gÜÞÒ—Ppþ
-¶¨f»Ü–õ|Ï bžcÞ2¡„<¡N„_“‚ÂÕÉÜ~ `$@ÇдvW›çBº¼6&»SÊv¥Ü “¬[S‰×òñÞõT9Žþ¼K”)‚Zû)¸pÛjCŽÚN+ï'hssµ½6ýIa…äS4XäHA
-^”Ô~Ïœ(Xt
-zÿÖc:›#é¦,‹  l¾1M¼ï™áŒ ¶èIÊ¡5Díœ ]ÍT%f'Á”^…+>l$& úÃåú[úHõCÿ»_»ßðsÀG¹zÇ%Á¦«ËªIš ÚF=/÷ó~Ãç‘iç*Oéâ¶;¸‘_ºNê½&úÓ©8õÏh­°WäÒýÒ±wÒð3Æ©á¸X‰„»¸ˆRÛz99Ðø|y2+·º¸ôôÅò‹>&cc{¸mÜl|³„ýˆÈ7^€§;{í:`ØÏÓpÏ>ø0#Çù^|V”ñÚÀUéé,±[ý&¸¤h«¸YÊArÇó×J{D†:ðëÒÚ&ˆßæée¼ü×+[ŠÔ;¾ Ç-áTWQßmtÖUüÇ^ÒlÆ‘jpnå) Vi²+b¨¤ïëìl÷ØéØaK´x4èD0ž}Ó$Óï<¯l<>~ÚXvŒ‘¶5ÙüF;¼RåÅ-NSÎÖÏ)P¶’ maKËîf×èËÀÊX4ø®ó·œè—ôÑ–`9dfÍ·µÄÉmbc°k›íŽ¾¶‘nªºtw³­ ¢íÛŠ­²ÞY®%ÈBV¥*(<=Èn®±ˆ¢8w#Ðù÷–ºÒÑ$1wBú,1AjÕÅ#)K¼kòãùmË¥4ÚHkÛM\áfyÉ7ϽfšWp…ŸDÇÛ8ªÝYqRyœ:+äóÞ™? HÔošÃ»ÎJÅi5ÍERP†\¤äbchÚJé
-n‡¤˜o|YÇœ! ¾ÿ|`VÓsÕ'6¾ZÃ:‘ˆ†XµX–Oß•vnwspÙDbE:Þ]Õ–
-ÊлwB…È1ƒþ”¯úäUoà.ó+i‘ =ÈÕýŠN¬m·þÃxí.=Œ­5®óš®H¿><ǤíÅ6‰W¢óÕ³NPùg›ÊXtItàó
-ÂÞeî£Ñ|ïÁþlÒ3ë«a3È2À¦¼‹¢;œWË|ºaƹ’å|ßkõ@Rín-Àø A­©mr#<]b‰åô÷eœõ,ÖœvŠdüeÛ¹0ð0û .};“Íá“Jƒóû$(f ”-b4ÅVÂDk᤼;àSZR«ä*å½ß¯;l@‰8îXïLÁa¥(S}×9ú´‹¼EYaý ‚Æ©+g«¡f›"P>ç =pyEµ$C®,s§™eÛ¤O«¹·lœXì.ÅðÚP¢rnÏlƦi _‰æÕ(ûíÌñùh'³¹Ž‘Q]i-> 8F /'›\„@Hù½Ü{\dß—§S"Ç i8<hÀîÛÇAÉtã´¦÷
-m 3¡¹ø—)zõ%<§
-ÓÛ‰šSNÕ— =·ÞGæQ\iB~Lrb+×ŇbÄÐÙ•+¤Wi2ªhWä.
-oÉ1Ê0웘àÍk.sD•}?*åVMVÇp%:h¦·ˆú]9RG®å3/¥ñÛ@f 3öÁª®‘ÙµÿxTº‡W†×qNë#èô‡F0ôxƒO =­E:5½´è.Ü&>Sï$§ØrY§r–¹qJ
-i8WÚ¿\N[Ž”!öL,Œ'nâu¸våtÌ¢–£a¡ŠãµèÁ%œÀ /*w.ˆxé:”~5K(¬mg}îu1Ý3ï㫽ûõW¤®48P‚JÈÐ_¥3UþìÊtÖ÷Á•C3s-ãYYvÓ‚²Y ±µxÈk½S¢¦U·yÔ5ôÔb\z34V£r ,w‡~ˆå.…CYϾ5„]×Úµ'Ó›øs+qˆ)‚‹v«tüc(“Rlh
-ï|?ÕFð &‡Åi%DáWª®)slŒAè-¾Â¼`]‚þ¥Ÿ¹´¿½Úçp¦ÀÅó)†–z«.µ°½ã+fç.Ye8ÚzF‚ô³îüAÅ´ãñ!GÔ~0Ѻ<|
-#æk›\B23/°|‚ÖN—’ÞÒXtEiÄé(â8]€
-\J®=EÊ~¤¯€k/Pßõ—´”÷æýÖ7öÝ× øòœ†eô毒¨> ¾hÓ;(°äõ²4\–¸©? ePiJ~m×뛇£hb3d¹n½gŠŠ=¬ÓˆlQ,~KBN”†WÅ^"Œ“zÞT‘nNÖ®ÿZƶžßiýb.z<!qr.ÂË<J®p^ÞG5’!ãh¦- UøŠ‡vOòÓI#§¿,žà6ËW±þ$ä‹!ôBeÃyGGl »§ÄMIRö-©¬[­ïª¦Œ@¯}8K¢ÖĘ•àˆ×Gj4×NOÓøÕ¶¯õ‘†Â§íj¾¨Œ(Æ%mÑåÎDÕš9h> þ$®…Î\“©ªm´‚ŠÆ¨Îò&aa.òä^çšàu~{ •q¯2 ]}‘G@åŠä×aÑU®ó:`’PX@h&õx†HˆâóÒf†Bz˨¨_ïI@B&f4Mš¬.aƒ¢KBzê«!ªÿ3NP‰É¥9*š1zÆ\–|wQS…59f¶Øinµ¼IîË
-ýÑ ×òÈ_ûAówVäïjq'!1 mS<œ¶»Í² À­ "áì7zóÇHnØ¿jU‰f~-Õ·SÊvöñÀJqg”`ÇjYÔ˜.N\ø ý>èây\ÖÛ ˜ÎôAЫXÀþPË#-Ęéý†õ¾ð¥20ÄÙß‹„i=óYÃ$¢5Â'5D̸”ijÙªu昬iåOjãa!øêÊL™-ƒ c ÐøD‹ŠÕ««Ç•c#Ù=
-n®±ˆÊž¶ ®áJ<©ö; €îÜ x+ø÷­µ –'IטáŸoŒY™(±¦¬óÓE_3µ#d1š‘jsÅû³Rñüä~
-«…ÛÁ0|ØÛ¨rž[ñÅ
-n£Œˆàwƒm5†‰u“ Ž°‘£óq
-/U¼;Ö}â$X…ÚÓ´Kç«fàÓ*MM‘9Œ}ì‹À@ÄèßSš³« <Gëw²¾×+TR­–òŽÌöQ„ g@Gs ¡ÀÆ£E½4µ­l
-MÞúÅ>Hd‘$ã^ÃÌ[¡û/äX+Ít~ÅßþS$3Ùß—~z]ôúYhí²ä!Ô"'ðÕã:t¸ÛÏÅK`ƒ[‡Çxý4õìÐ!#çˆ/jÎpÊ\£ØiæÍÁÆ‹‚- ^è‚…''¿O òD¹Ê·êÞaw•ïí)0 õP`Q?x9š ü°šhx‰?·Ø c~ûZ6ÒQ@
-keG
-
-Ÿ‚„¨Õ/k‡ ]Ñ º/ÍxÂp¬\>™Lê}û(ù'™y ^d1] ÀGò¤­K\ÙL·(Û×9Ʀ i‹cÝ›õN ™¹n,:m$øçhÚV‡.¬
-ÈÙ!z»[úœD¸¡\™V\aü<I'bÜšÄÎgw—ì£;ÞüÒÙ ¤#~™6HùYS’‡•å蓳6Ò9f|Ðl}çšß‚¥/d¥Þ…vXËpd&—H~T §ÅÔ—s¬:×÷öÚèžnžŠÕ¥á¢ý\ñóÖr4íô+³»¥XÐvel›¢žŠEJ&vÚw·ðÌ:˜6WG'K9¯ j—‚l¦xÃ逖LÖ^Žqþƒ='\ŽAï é/*‹`~&Ë}UïV…ÆMlƒÙ÷‰x^³CI“=_k<S_óØÝîDÍæªê.úõ ®3[ù;ìÛ. $šÓžæSá2ZЯ
-ß¼'ýPb€XÑFM¿ÊœJ» '“ˆ¸Î„J‡ÄÜg*Ÿµ¤õµ§C*•ñ
-¦Çƒç†«4 yãöæšã§>Κüè¯>šbºØýúÅP¬
-ælî tV¸û‘–3qû%ŽY7‰‰p’u1$q…ˆÑÙÈ  ƒŠÙǾ¼\‹uûK¡&˺hûD'n"Q¢&¯iÊ7Í¡ú»šØiµ ÿҨ퉇Ka¯Ñðò(`hò쪆G6XðMÈ ²ß±à;ñÖ¶{õ°”H$3isCÁ†`Ã#: ^üëäçÔ{T\žCÙì¥öD.íðbU'çMPä Î“&.A0(œ”ûéò ût?…7Ÿ4;î¹ÁîRâUÀ0cQ¨œi)‚\ò_\òùÁ±§Ôí"‘Ïn¡¨çW¹@
-4mbA‘., +ù3ÞräÉ7zz¸xº„vFà5Åï÷`>ƒ¿ Ê3¢jÐ1 _òÿMšÎQ1Y©à$SÁÎꨄó‘ð,?/øŒ#q¹,•Mþ@š7Èlf§¯•1NK¨æ×$£`ÈxEŠÕ 6èr%ò1+Éà÷ †Cp³pÜo†WiÎë*$•FxO.†@Mñ¹™å«i;Lg{ã v
-„,˜›"óšœT&iÙÎà±n”:Èt' ¢ª¬õA©AúÚ†ô ˜ìëI¢ÔJÏöG)MûüÅÁù½¬‡f¤Õ<mÊ¡žÄ«|d‚ÉŸr¨Ù/•‰NµÇYû‹Hª¹®|)³Œó^£»¯Ù¤0B¯+Ìxƒôt~乃FÅÖ–þo¹6”¿x‰ï;MܪðXB“ô¬,‡C#)bðùðVÕwЙ"§Êh—UZ‚žÕë}S§ðl¢@vM 9Jà½é¹Tò}(ú¶±©Øb«çsÈIS-(
-G-ƒcD¶–:ß^è†ëÚ8¹g¯y,9b~¦œáV{pî“O'þ’G1¡½à1–ü¾"ÃQíFV©wVŽ¡ÂΕÏa;k²„¼5tÕK®¿ÈÄ´
-&{b¾é\QÊcèâåKŠ¡Û€•\±"Ó{E),ŸŸË#E‘·iUHš™·'6 &<i[ÞÀÑçºËÔg+éA¼Töl¬n´•ÿRÔ—œÄù²4ˆ/åÖƒ ZÓoíضSG‡EŸÃqÉÛ³í±FÁéÛn´!19÷÷. ý¥+õh¨Üíïs´q×0 2|—…ÃtBƧ´ä ¾œJ3›n`m$Ä;Pž=Ì!·þö»$Q¯I cQÞò>u¯_«÷–¤ËÜ‘ÛàÐðÔKÛ?¼ û©)ÑQTóQUm`¦iø<uè¿>:Ñ[—§sø®á›)% ¤ç7 óD¨×K×F´XÖŒAHØú¸a—/« 5:›†Šú™ïn¼#`‡+»Þ[øjXZNiåJx)T»\—ØãÚšæs÷DlIÚb`·:eÛÄôöïT£º)£&ïyd„ãì°3e2ò–/@
- .Ó0']Ó _Odqâ®Ä–üå…­>#ÞWÖ³cRªv×Sž¼XΧ!8$õËàí 3D=ón“~·ÁŸD㕹=’ô™h¿IÒîÇvƒK>A¨sÎÞtݘÏZ¶G U^W0åõ®’•¤¡Íš’
-/<˜“}ß;ëOжrš³<ˆþ–hMèj‹â×òų@W 4tú:©ë•×`±–T¿/à#]ÛÍN›‰öÍQ«ÕÇØÑ£ƒžoŽzB}ˆŒ¢ÁõSÞ˲ÛA!YÛahZg¼¤u|W¾qþ~âWt`us2yX‚
-¨El* Å3/ZÑÿTãi.)ÑÍ¢G÷8•{ðp œ¾!î4½á´ÞfÍ+ç9'LF¡»^É¿Nd*¹ÆhÇŽ g¥n)ZR¾œ2/@KŒµK¨øXI6ÇRÉ ëaµ$ÅîN»-¢'¼%+iâ?h%Fbs„òj\¥­¡uËøÄ âÂêáÄí(- ¯!Ö0\÷è|žÀ
-¶ ƒ ¢E2Ltãæâè¾I;Æ|ˆ»µ]0ÊÈ!çÛJ¢b^ûÙ­&×à}»'0qT[}yë&P½1ÞAæá^™0qŒk7Ù¥±ßbª0Äüh«N±D3Gˆ¾_²ßý&±UG·b`üÂO|=ÇÎYדnj‡üG tÆδ/Œ±§ÚÖ%t}šøhPÀgz͆ª©d•î2^G¡¥o¯¡Óü‘UC‹)Ö”ÖSˆ*Ñ’È:k@o‹ý})f°+LXnÅ@ê_ ß2Åiâ(ªt…Þ¨¶–+ÈÛk¿(ŸQg䔈Šfl.¬¤þË8èÖâ¥> ø|gúÜ”
-TpŽ‰ß¾®º]+.;+¼•ÝŸô6¶èhÕmØóÚ¹ ˆÿwkÍn‹ØÖæaðÙFu—k\!Ïé“>í}Éþ²ÒS°ÅìC½ïPUÈÉÁ¾Fö,éà¾eö4°Gñeá ºÑ¢Å"w)œçzO§$#g^†¾I†b¡lì4e—8&áâÄ«ðÔc‰þo˜iw¨ ={€õôI=wlº·(n'˜}ü;h|-Pn%Xª²ˆ~~»'›ò!é@Õ]͹à*îªDÝ*õæO͵˜ý¨¡Ò-s‡˜ÐIò3)‘™{¦_ÇWu†ùµ°\°%ßï7iåÜG¥DÞ ñ?’|%ÆüiG—lGê¾L‹`1îDx,½‹ŒÊp—š‚D~e'K™…V,u¤>ŸâìçF» nLFäè”.1°FÖˆ-oË”pÊøcó;6³ùFma7A­CÕW'éÞ¼<«1„6œ&³ƒF5Ì7Òo`¥dº%<‡|W¹[õTú'ÿX'3§ ]…±åvR§ó(›ÜOæÿD³¯ir §ðßù¾¿¡Â¯ŽˆV!"ñ/Ô­‚VcYén‚§ F#ütñé¤DÞ@Ä`] gO»{¬íWxj+.ª¶(XNô`bŠ§Êé.WQT2³Ù‡y©X¦Ž(÷|Α‘Ýv*¤†Õ¤D˜Ï‹ÏâM[E Ó
-ëá0íá3õFt;ÉÁš¼‘Þ<ÅyÕê©–ze¢lÒft£?ÿF%݇¤G[dÊ°ó2¯|?s‡·‚ÁÆ9—¸,k/KÁØÖI_ GÂ+Š$ý v$¡G|7FiÃoÑLØS‰µ¶‰V6bBš×F¬zÓä·Wè߆Û#¢š»°žq"® ¦<I6Ãèýñ4
-Û–åÃ{>;³Ä¬²ÔÙþSXqå§%Œo… Š¥]ôêûæ‰ÁyP;Bi)Omq”©{‡+™ Y=Ëv—0ÒË+AŸ´ë Ó&5Š÷ÓP„R'ë-â+ „ÛƵq›Ý“<–áC“Þ®›8ÔÁhîÏ#íÞ^tG†°QbŲ)N#†·î ?±°ù¦„•›£æˆa$(H쵄…PZsÑ&†®é¶àb’ã°¤Œ0‹§§ï»§óD‡~3:+éØÕä}÷ 8ñ`î©?ßÓo›wºFWÐéO´© 0Èò¹½¶BÄÛp =d²ÿP-âëÅèTÊÏÞg~®ýú=£g­l´þC}—&³¯ÁŒÊ÷ššIîä™é9©±ùÉ•àõ+#ž¢˜£ºþ\Öƒ#ÞkÝŒë&t0ÊÝá¦7Ö¶¡ä”5jÌÔ²ÉwvxÙ–î›à`¬ç÷ì¡"a¡f*í`–zL©b¤5Þ+6=jô{zÌ9ùŠ÷´zû¤dI7ý¢éaùgÌ]rä–ºúhl=M(jtn˜3à ¯L2èféòÞ¹’IPË—~/+$c ª‰Á½ˆã+Z ºù­
-Ï{ªsåšU#ô½V¼oØ6‚ž€‚êƒ37•(S¸nÛ\+5ˆððr~ÉžLO5Ÿ?žUaÂCs`~I®úb®E»IÏZ0<LPÛ~²|gUkìFÒ`×0ÖþÈÙ [Â3䀳ýÜ;ߢšìµèÓxƒÊ 'ÉÇWõ©>¸y‡(.Uôë ´ŸG}µ‚wëN<heÕn']D³C‹u„̯ä?O V†w9àÊHýžt;ƒÀv7vŸT¸[xNø%²OfpIø_$§é5.¾‰ìZÌ
-çßQ-<F_¾Aºtï=Wxi¿'SŸ{Ç4 ¡†[PǦØÊv±­o*SÚ®²2WÿWûæ°À(ÐضÕØnÒÆnl6lc[íL&ÎÄæÄFcÛžØNcÜ»¹Opwÿ÷Ÿ8«³=ÝÃR.ÅE…E‹UöÁÎtZ‹¸»4Àâ)³SdÖÑ´S p@E‹iɳ×aBk®$^‘½ùèVŒ× µæv1’qpVnªra\KJÃ02øÏQ?”KñµyTˆ"\ºg‘K®™Ö„Ê›Tc/¾-ª«1ïkÄó çôç%E ׿ÖÃŒ±Læ‹ØÞ¨€áýf¡g·/7Å¢¼R[õâ7ï™Æz’ø/Nzoàû¬åäckƒÇ›˜Äù˜Võð:)ÿýãµüþéJ
- 3n
-ÿýûAL”2àC¼IÑ2VÃ$:9Ûö¹o„rcl¼Î]üÉ%ä[&=ë6…ï¾ëiÈ¥øOŒ‚ã$K¿h«•uÕ6Iå/8dÉwMNNX’ÔZ1(Ö¥ô¤`ÑkÙ°Ô‚7U%bŸMWž•:+úa™šíù´Ïè΄Ÿ,^Ç0Š!qù«N6@ñË«µ°¤”¯S©iÝÆ{ÝÇ>_À
-ÿ?!Cçcæ^‘O}ÿƒ5 “Cü!ØÉ»®?í|”+¨4ÂöªlØå½û$†,øá¾/ùt£ËzÒ~ج¡1ш—~DÕ1ˆ%ÀlÑ„A·ïª©þ5c ŽŒ·(ˆèß…®tÞ6ž«¨ý+>ù¤" µÕØ®¦?¤Fn®¤ðÂÀ¯BˆCÍoä ÛV ü¾‘«`$¸+°"¤u¡%f ?ýãŽVãüZékK ²}_î™ééË@©éŸ­z™xzWáQ&gvL®ÎØÕÏƉÈP¨î¬/uâ¤á£ §XdýÿÖ•fB]
-:À€•áŽ±¿X8Ñj‡Œ˜>Ág{ZÐ×Ø°i«‡ºyDj"Å jµK–D¥«œ.¯üç”äàd7X‘7æ<¶’Û*¢†ED6 
-” ]´±1Ü?“¹FÁ&¦¡l—FJÐs²!½‹Dãpù!/dÔˆOÄŽ]{TÖƒ:_IîÖáíŒãH%#ˆ1`@®Ö|Èuåñ¢O¾.$YP'jŸ?¿5×^Ü‚îY%’ >É,MŒ20 HÒV ™H³ÊÎÒ—àýŽ³Ñ]E}Tyƒ¿Õ´9•&ÝÝ
-¾²Sî¹”s¬ ¨Ë¶´óEñźA/Me‘Å
-é >Ÿ¼Ã<»ê
-8‚ã*[KEUè)ùa$¿N¢µ øïÍÇ>:Ç4Ø-,¾Ÿò>Þ¤¹µÀžSƒ…n5É¡è7»~²§bí–L
-•¡–¸CŒ#¶ž©Þ.ίè¿·zÆQè}ÛÌŒ6™Äò"ò¼h÷üõ2ÿ²,›û}‹0~77_J¼­SÕdj 1ø7nÅëH‘óx>/'7ÅWWâ7'Žú yÒ>;Fç:ä{g'àÉ.C»4H%ì²õ8ÃñÒj MæúmÒ“<ïPѤ}RÐQ­}Gý.\Ìûþïã Ú/X…$Ѧ{ЗÝØMÉaúèÜch¨$D
-‹ÁcB
-AàÃÐ> 4.Ðt’ÁýŽ`¡ õ1uĬS‰aÏ çF^V-š>¡ýØN ñ‡0åT¯Ù
-·è‡7ëéBñ(9™ÀcY+k$þŶ«Œ=ðµ¢QwL ä<(ró`,XeG÷¦ÝY–‚®ùÕKé÷ÈÞHC°£ää$=üæ…q
-_Ñ=d´)î`Åœ¬~sÙ:Uµ ´§ÞV¶_K!Ô¦`‘EùcTñYŽdÊæÎx¹ÓÀÏÕ7s,|äºS†ííRN]exÀq”›ý-Ë`ë`‰¨ÖÄc±¸.u¹g9ºBµfœ:îïæ2HV1ÒÎ<lš”¶Øµ±HiœQ‘5ü»ž¹Rª»ôB€î.VÂ˵ävŽí®)üfÄ?æˆ,ÞÄoà¤È Íæ
-ôéeÉþ&‡2"$8¬íÛãO˜ˆ7SÆ,é
-±õñ¨E'Oƒ¦ò¸Žœ­²„Œ¨ISŽ§ìº2!²³’D‡H¶ê;”|‹!¶jè²_rDꀩžÖ¸Øã}ˆ8——T²|+Å׋8¾ûW÷šo
-†?Å, Ô±™x¬ç¥\3*Ï©C¶q0ëß½«™Ž>­jâÄ>Kt¤)¦k>(ªK·#:›xMµ–Ð2²ßñ®ÄýRò¡ì‘wz!î,±•ÁÌõ
-DŒ–¯ØØ®0o´×\Ú²{löjâ­°C¨õ3Lu3¤RLyz§ 1ÛÁÂË6».} À|?ò{,j¢:µæû#-ÝÑ"åHbˆGžaæÀ~À_tݶÛàE•
-ócÆ
-ݲ+‡S?èoJ£K¤
-ÓþL5ºÐ$p•ü›yBÃ|5»w^þl23(ËÛô€åµm‘ï7ì·5v°“’._ô]ÕDO¸XR6ö}ÇÉÉ
-Û7Ñ8úŠßî7;°”—\&›ˆÏæÄeâê.s¤ÆÑŽ…Y0´ÊéÞÀ âžì ‹x4ÜÁw\•fèöê°¼Ÿ3pÇOy³Í4ù”-†¢£À ÂN¿ËþÙP³z[´‹üò®¯˜ Æ®-×I£+”–öH34PçM÷|´wÁ°Qv@2vºŒR¶f¼Ÿ4È,²,BÓœ“Uêä~ó‚ù·•6oáéA+K?ó FC¤h¼ÍRÚ_±L²"çªÒÍ“÷û³ÔBKŒÃ(¼shEŽmä_ÞÙSI f8¢lEúKAfð²ÜeM¥ ÐŽ™Ü*ÝS‰§d#…$3u}!jÌïƨCaô‚”¿•Ú Q,Ü4ŒT=AÅ?AUJ” e –×S<)UÇ‘¡„cc lÛ mvØsÖË(?ú¸D˺¯xì/Pç/·‡ðbÞ
-ËÚ."dšñãí·<ÈAmMãsåýëà½Æ™ûÓKæPú iìЇÖó!œi "
-RY,ÀrÚ° ݧ-¦£<@$•N\×:6EwFàC´Y«Uvvµ×çên¿ò\Vê6â~òT¥•½IýA<_½µ™íb+ö@ö­xž>o´x(°‹àšƒû‹ÿ'õeÓloZK’8´†á'ÔpøºÔfžni(|"¨,ÿ°®u ¨‹êûÔˆ,Фè¾9 {+¸$°w/ž‰’&3RÀ¯„„cÁ šOmÏHµ] Ú!ÝÕJ$Žá
-V‘<}6j]'»EVîhû‚}6¡ÝÀ6àÛ·o÷CfÀ¿ièﬕò1e·)(+‚§l¦…ãƒÖˆç\àíÈìk}/y»—ìǸoÕóÑ#Žuo'i”FG œpÖCfïÌŸ¢7j½W¨évôœ­FaÇ¢~®|Z][pÔÖù(Ž¥å –pÖ– œL®€î2Ÿd#FñD§ðïƳK“UðIó‘½ØÒ^¿ºýO4Jh%9rCØ\\ú+Þüæ8[…}Ú ôu¨›ÔV¤J»ˆ¢<#¡%ÁtÇ2å 7ÙIŸÔ®O™oßpÙêÈ—µ9 §.†*iTáŠNG‚÷Yk(ÅiJÌÇgÖ'gOZU\òo®\9F®hÛŽ²v@›”PN•ªþ|z¥»"^‘—ËN§³$Ë'‡kWØœ.Þe#ÄÚä/ª«:I!îò@F.Ù§N,X!Ϫ%µpºDÖEÐ’6å5eFÙ™ÂôÛ’EöqäœØ+R²Ÿ]C~=ëÿÖxP„»w(ŠÉTn ý£êöÅëGÏ!_/Ä!„ûݸЩîçCs›äJ §±üð@ÔÖfË4á ü%å/«‚ÎüTï;MKð"3¢Îæc7 
-Ú–þb$ˆF›š×4ÌGÂw6 JBÊA©­R"±#ªvw>!*3ûLß´ÖaxqUR±™^3îjÕƪ®vOÍ+ê] N nìþù‡Õ¨¸®âƒÑ±ÕÉíÍU
-`õØ i:ey/ÓT“îüÃg{qª}ŽTr 3ý\:×îY6Ò°’Ù<eÚCÈ_üiš–Qm–›#öïÎTº9\œëyíŽ&$ÞñeÞ I4ðúl#ÿ¿{ 2/ô)™®#0„ÇB_ò l•û©¥×ë¥ê:&T‡í¨9WÚ!’q¨ÿÁTˆÛ¥â«×™a9¦ˆRPÕ½¤Ô_i&U—M“X<ÜôYÈ«¶ª&v@¤àÆ2˜1j 9
-ƒÖù9üÞë%CßšAÛ±·ÁÿxHí´ËúD®Ãn6j­°øc„-± ‘F®mð€äÓz#ìA;L {&a0%­j8ÊÔó£{Gµ¢=4‰¤)Ú[ôÐÓ°ÏOw¥Ç÷MªºA:X¹Í¶Âv4ihìä×s¾ø,‚ÆP’㉖ Õù™\†@¯Á±ÆÎßC —èœFì§M¹"â“Êonn_Ö³ÿLBfFÄ  >;xŒoù3‡ý%¤àö.ÜÍ‘8iòzÍ´ÎÈéÕCùÔîÉ(ŒŒ«ªû-äd˜6í‹(ÇJT*L_4¥öÍü…°í¡M¶¤íâ‹1Ö`×xÜe²lÜá†Ö/®;Gæ+àÆÛÔÜÞ釾{å
-2K(¾àÈrG€éI^ݯ§ËœE;ÉëZ$„)½J%† * ÷%„.Jr–&*¹Ü¯Ms¶°_k„îš ¿NÆS»‚wX*ÿï­fƒ=ºðW=›±7Zx‰’d­#ó’1ãZ˜5'`N @­@Ótq¶¥ÙƉ›–îà—%Š7ûÙ¹%.Ìx¤D—ãðÁ³b‰C5ø Idõk/ÅQŠ?èxãê5³¯ÄÖ>Òðuowõ=–è9­Y'àã« Õ‚zɦ±¶Ô‚>N ;}`÷*Ž¿ÃÞƒ$“ƒ†Ï|£ã·Ä#@ºêÊͪ²Æ.ˆX³¤ ¾àŽG¿¯ö„«‡w‚MšZögsÎÙQ1ª¡ï±ª;_þSì?“áx´ Ÿ‚^¯I«˜E2•“§–κÛw!l¾:‡_¼sªÔNÿ˜~ù™Û݃[²3ùULiµeižÀìe%¥½˜¨üß’O¬/°”:¿èx>D@þ¦ùòá=9'»|»Ä½Œ©L²Ä/–ê-‚½ÎìÃsœ” ~(áà,åpƒ¡ËRs,Õ:Ž±ÿÃ6hÆËÔDÞï^ÑêI¬'k𽠱ĞÙþ÷ŸøŸ…ÜÈ Æ› ;™l+ä­ñy̼Ú(g`ý s}ÔÖ’×åù$Ï–c†ƒvjlHM»kœÄ^ý08ùqS}ã!<¢¥mPYm¼ÑјÃs:öhª6¯!Û(sD¹16äÑ?«r.o™Éûòˆ ¾SšÉí³•õP1K²EreS‘(§AðÖ?žÔo§G,C<òΔ½kuló µkX“ÁñÓ—WOGˆ‹v$ÔÃÁ×a¶D´­ƒæé<xç x÷DÉ ºBõoÙòQ3ª‘GÞŠgMyÎëæ:ç èWƒ’¥oáµ=£öb2ð»±K<6ö%J{
-‹ÅK0}´zc?¹ L£Z^ FªËï;—þ d%CºŸüÂ¥ü¨)0óšâ5µû|#ñÊ1¤Šµ– Pgm _R„®z1ÙïO,îSò[³ÃY[Z…-¶2
-{å]­è«X• ²ßæF]T%9FáTâþ¥}qÚxo‚{w;w+h|ŠÏíaq ˆíX7ŒÒz¡î±vñ¨ˆæK܉bs6Ÿ±™"‚¬|;¯mš®u˜4bƼý¦þ 7õ™•»Ð¯l(hõ)&I—¼¸óÝ ô#Fê%yDôêWÖëÏäôD‡߂ù‘|}Å99Q}â> uôÒ§«h†:úVLãÖzBžÅŒå’F'üÕÆQÓ/9ÎFÝҰɵ#6snœjGöXã~ÃéPóLpJýœ&wB˽óÂób17aªÓHj;è•ßÐðS½]þÅÝpÌÚò“ ­ªAë8Kžpªä¦<ëñ-ùS¢äëÊõ&}9c­àÒo˜òt3aëc` StŒÔDr3œ–ic#Ñ‘x"£ž7ý³–þl­ÊêIF)^ˆ×LÌŠ[h£IµA _#ƒc«¬LÔ'PŒ ö–Tñ™»,Š x´År
-‹;dTx¢CŠÚµ'x^3$|ÀȽ¬4ì^ᜥ$0ý'©´s ác@ÓAÙouÖŒÎ@@‹Ù[¨ñÄ#rµì‘ö9s¤Nè2êš>8*û@‹hËçESæIh’V\ºw+›øYET Žë楋ÆEêæcfCoŠåÚM¬·Ôþáéw„IiD¤^‹J­÷T¹J†a±kãÂú ôꟶÊçÆck€-T ÿŠ×Ý¥èÝû
-¥`M/\oõÛþJXSù6”¿ü'ŽOØLaà¨oÍZNõµáø÷P³¬æ#À«-’·^=èCp§“´ñ»wÓ^»±òž,àìÎ-3à rg‡lÖ:G>
-‡û$Ëú*Ï[¾'е5Ø̽þ^¿‚@rG{XÎN3?Ü&Óvj½ìÖfl3O­ˆÐ¥\á" ÝJ)P\°7À«J&zgT‘š|†ñhÝh^r×X&âhŒç]CŠÒ÷ˆÂú%#ÅŸß’ïçUUÒÙ$ïRDäü¾Rk¤zwŒñ­ã—Z
-UßD„j%‘{7¹’&LoÅLó´T0‰*
-Ë—ÌF+uå| ã_ìŽ'¬gk"¸qáD]²
-endobj
-938 0 obj <<
+xÚ¬zceß³eÙU]¶ÕeÛ¶m[·lÛv—mÛ¶m³ËìrMÿþOoæÓÌûp"ÎÎ̽re®Ü;î8dD
+Ê´‚&
+CF&ìhjèl °1t6å"T75!15&db"däää„!#Ø{8Zš[8RüÅ ¤¦¦ù/Ë?!„Fÿáù»ÓÉÒÜŽüï‹«© ÀÞÖÔÎù/ÄÿóFeSSBg SB3KSBayMI9qB
+q9UBqS;SGCB#KcBKcS;'SJB3€#¡Í¿-v&–ÿ”æD÷KЉÐÐÉÞÔØòï6SwcSû\4„ö¦Ž¶–NNß -Í íœÿöÀ@higlãbò¿v3À¿Ù;þFØþõýS
+fH{ð 1Ycgl
+ñi0–Wä¯}Ã4¿ ðtóE&Åt¶Z \&—Ešà’º››¹š#/(/25©â¾î‚C‡ã{»ò-o8J<îqæÔ§ -
+㼑a1Š¯@x×" ÙÍÕƒHQzHÈÈH<àtáŒË{â,ȸ†ÍÊ·K3”’/Y”Ôty®žˆW"So¼¥¯Úh‰í}oSOw½MOY%9
+Ü~ü¬1ÑYpy(Û©˜_H÷²YÔïÄd¤P\Ó8xü0°lmçä+öôkç9cí%ˆ5ï׫M‡G}«/¶»+¡CUa.44@BØ^»÷GQê-îØ-¦e©%C§,µpj s—„„¦?l•%Ë1àL­x‚wcŠ2cQ:
+\´Ò+j|.÷`ÆiNººÏ¥ÍiÔnÌÔp=fu˜…îF×vÉVv¥®‡ÞÑ¥ÄÚ ÃòF-C?Iƒ3q+ºë¡8yŸ^q[bÏÉN-w¿*÷üAfÊR"ì-vkìi:‹¸±ª±8±ä‡¿ T`ë=ÎT(V¸ýw¿96@â2b4¨ñùƹ°+÷é0Lݽ=¯¨üÁÏò›¬<²Ka‡Y|:Ò—žú-E¤M…š;Wl~(ب âüuù‚½E¿û˜ÐÅÂœ‘ƒ(ub°†Ñðâ%Cä%«xzªÀ¸Èûj§¼.²_ǵ'Ô–=m7ÛBÀÆ£¨{×ÄÍ꼫ÂVÅè4ïÇ.M¦­À³ì†´= Ò1
+
+áê¡×ßO¿UæÝ¥šQ=ÑlËs]T­+$O¶18¶ðææ#¶V0BxkÅx‹‡YT•º]Ö²Äò}‹ZZ–Äëe1该P,É}éîjÀ(RŽ›¡ÛDZù4 P˜ bw×4ªeÜêI˜@ ¿Rq24§iÒƒo•æ7…j,;Y;ŒqªúQOhIäÊÓBuNí|ÚÌ
+6q #z~bj#ü¨Šèò‚Æj~Ä •C{")ñ`uà*hñÜ>—UF«,뢇7æÛ–8*Ä´‰·mz¾ÞGW‹Qù©“ö­æ^ˆ$SÐz¶~a•6©á­ºÐ…Pí—>l”é›/Ü{\kkàÏI¼‚èbÈÇd¡!èEUÓcˆÝýd ¿†#[Î+¥º*™€Ü°@·¿ßå|Ë>SsüîóFPF¬ÙB¨þŽ0¶m粿R‚–Pï[#@Y4K £»åí8c tÔÙÇYm̃z‘HÄcKKÑœ¨ÈÏM›ÕœÏÀmí¤š–ÍEy
+<…:0´oè%V èÅŽi”Ú¤ËöÑÆQ/f ó³X(g‡¹4JQ¶&– %CDÌ\jö$„"é^-NývÖj)HLò¨ºè•µÍ“ œ‹H)·4¹ HÑ8Ïÿú(õ«!4ÿѨŠ TQ`([ÑX|oãh†¹¼-]‘ŒÃS¡(ú&Þº ௉ÿ”ör7Z è3 ¯LêØ÷k£˜#úÜ2ñäüä½x†EÝû!rÎì¢Úƒ\·ãQ¤›ÀЇÝ. :“>Kà¶PNøPÚ¶;e£SoIáªÁ@…>Y§%Çu EåhÊŠåFô¡ÊˆwwÉd[ÿîÿƸê§!^z‰†—T¯ ¹ \ òË"Ïþ¤ X÷½Ÿ}‰s¤´¯çœÏ¡À˜5/䊬t ”èÕØ„"Â[k!ì„FŽuôe>‚•M‹.Wa6æ„pà]c†J7´žÆ”=GÇ p}JP{Ÿõ¼Ý E™Ùê¼I~ˆÛb¦(g¿SsÃîÃu ik›à:ÌÛG³a²Cå^X¦ê.ZÅ{Ò
+`'æA!˜üåöhzBåFüÂO/Ësmu«¤†,óHë‘c¶»²‚lq 9ÛÒ1,&Õh?Ú{†fùíÇî–b—.Îú¤X†×Í…²þ%ÜÂôûÄö([žA«ÞÃú)µÁ‘Ò\x˪wÔ!„k·gÒs„ ¦’/`0Š]AP§ !$þ‰öÜa£Em¯ˆkõS}¨á9´úÝÑÅï´x©"ÃG…ØY+çZƒ‚<i÷»2þžoÄE3éÚSçM«Í1M‡# å Ž'©¹Ix<ŒAÉD£EŸúìbkz?•&Jû7&Ø3Õ È³ãll'*QjSœÉå-«J}ö¨PU0vóá€>0˜Ú+-§np¯ŽõÖ!2>T¾¡ú”÷.6yçÇC¾ç 5ŸÉ»p{á0|õg-#™Š¼Öê‚}‰€D&8ºÀd··oßxð°Ï¯ØËV;AdðŽÔŠÚJ¹Nd-³º5¬(> Þcd‹²bCÕðD½ƒåù¨àua¼rI¤,âÇÌÍEGªK_bò-T¡þ`fØ«Ì‹Ž©3ûH@W¿ëŸ#·¤‚Ó•JxÚ…aì~ÒG` Áæ©dlv@Ý
+b>l
+œ­VŠ(‰zÖu ÞÐu¹˜3ý\7n%“´Œ@TÁ{0¸JØü
+‘y„›K ¢UÃÑäs ¾&¹G
+Ùp3Šþa°³Òi£·×¯t¯B.ãA%ÐÝ¡ÿxcû}`¢¢ñ'
+fÊIû þÏ‹±hÒÏ£èÛ9û½ú¸v7òr蟮fA‚åêÛËêããYaŽïuSi?eXAO‚8ôÿÜ
+;ßýBtÆÅ3{’ù¹Iøõº9Í”\V†õ+ÛÇ€¶‹ˆn„ÒdK;h¢¢ïïñXOÕ ŒÆBW÷ƒd#öMDâá¹{F&Æü¹*|ö«:È^?\ ʽK–ôÜa›\KR1§8_üŠ·å’&G¢±H]š+ÜFÇÝ>µ[zY¢àÈ‹|N™Í·C¼ý8H?»¿ §5BfØLÅÇ£Oœõ
+vN±1¾{‘/IÖ‰¡ƒÿÛa/¦Àl+oDNk1Ç~â tjÐâS*Ó<Ï|µßCqiÄ™àå^Ös‡oôT»ãœTEÁ«£É ®3¥Ý õ}>²–7²@éã#ÂÖÝb'§8zðã3ÖÂlÞ¸oW¶Ïκa«ø%ýÈ1Éa€%ë굶疉£ÊÎ0z À!>÷º˜µÒÿ"qWîàdÝjê}_
+7ÿéqó*Bjû’€’V(HóŽx
+/ƨÏÏ9êc$§Ôcµo©Š~DxÀrßõ¡%´ÎSݪ5H•ž%ß·‚S|úKžÜÃ9²^É¿šj(o÷׋YÞ§‰'7í…Úª½4«üÏõg4œcõƒD“zuP¥ãeñ»1o.øN™Na«5Ø¡F‹W]âÉ+‹j£qD÷3…±¨•öÅãìææ˜VÛ‚u¦êä÷™qTƒ‘´ZoVÀÍÏÓaàïß|ð]Îæ{{jeD˜¨t¹çµ*aPÔñ®†žåVaü2Î\}‚–z3²žzû¾æ調Üp °ñ:cù夨i¥½xÚáÞ(ó6»‘Ö/k©ÀKÏÖÃj©Ågâã4*&Ä‹Ù%.‚¡b¬‚Ću–èúØï߇ày|Ê… ò®†©¡æw˜W–ë`md…û«‚Öq`ä1²jÃYߥB! fð+Ƽ)éêd$@X{Lé ·ÃfEƒšíºDKÖƒ)®H| dëbÆèá’«§å3C b—ƒz°>ïzAìÕhõ.‡[Ð ^
+~†sR–ðþögØ=΂/Qqqˆ! SíC幄{ìyÇÄ—¦‘¨êVeÚ&ò<\4Xõ#¸òYȵ²„Û¤ ŠfÇ/ Èa‡óm‡SyZAð‡°âŠŒAÝÈ{ûßüxm¤=Í=ë?ªâÛ9fÐ ‚;’RóJ4Y§W#($EóqÃ.ÃöŒ€VCÐcÓ -|&dòÒô’ÇÃA
+~x¢˜¾eÄ6žŸpã"ˆtBù( iQ\mBj7}¹íƒ®€rfLJÀ)q&*»2K¾%c£Ø“Hâ®!?©°ÉJ½¹è ¥&´3o:ðKÞ†c§Õ¡©Fì¶$ʧ@ºO¹D¿ù)ûÛ—»³Þr µ0ºG÷J…
+2™ê[drKX©+²áW nC-¹&TIªhÂPü! Ó_t‹yó–L¬
+› Q­‚Å9XF„qœ{¿'‹©Ý‹ük[K´›
+Ž3^ïîtl7éEÐR^™UY5.ÔÉ<ÙŒ?tLúdJ¬OÔÖ
+œ­$#Ä ªôÔ¶Õù·y-Ë.-ŽAš¦Ï$ôT}]Hyû$öæ““m{Ò ¸ü†Uó|+kcP™>Ä N÷>éå4Ÿà?÷÷'o̲[6PM4Ó÷€»‘«4×®ͳó¬Ý¹ÞRRé’;™Ý¸#Üš}3‰òìÌC‡—xˆ™Ëœ7¶Ð–µ*Ó»ö}†¢ßÊÐR.$­D í}Óeï)FqÞø  œìî
+ÅX¤Ö*qÊífˆC!TãËüÌeSŒ7p /077’m&cW
+VáÆãþñÇŸZyꚌÆ(e‰GHŒ¥ÁÖë¡„ÞhÚY8LÝ6ú}96wc$ÚêÿþÛJªèè„C/7&_JSËñ´z ÔVg¿NÃ}aãµ4·º<â¦?y—†õâÁÕëònà°JV€5…\ô±ÅÿÚwTä¤iô…uvjc—`\<U|ŒÊd/Õó))ÔÒþãR-Åå\-‡¤¤DoÞå±($ú&—èôV â½âî”Ø`(f þQ̤Ön•G †:mr¦ âäéŠç—D᫬<1xSPŠfès
+zÿÖc:›#é¦,‹  h¾1M¼ï™áˆ ¶èIÊ¡1Déœ ]ÍT%b#Æ”^…+>l$Â'üÃéú[úHõCÿ»O»ÏðsÀG¹zÇ%Á¦«ËªIšÚF=/çó~Ãç‘qç*Oéâ¶;¸‘_ºNê½&úÓ©8õÏh­°WäÒýÒ±wÒð3ú©á¸X‰„›¸ˆRÛz9Ðø|y2 —º¸ôôÅò‹>.CC{¸mÜl|³„ýˆÈ7n€§;[í:`ØÏÓp×>ø0=Çù^|V”áÚÀUññ,±[ý&¸¤h«¸YÊArÇ3{%-"CøuiíÄÀoóô2^þë•5EêOÐã–`ª«¨ï6ú×UüÇ^’,†‘jp.å)tiÒ+"¨¤ïë¬,÷ØéØaKÔxjTèD0î}Ó$Óïn\¯,\>~šX6ô‘¶5ÙüF;ÜRåÅ-SnŽÖÏ)PÖ’ maKËîf×èËÀŠXTø®ó·œè—ôÑ–`9$&Í·µÄÉmv"c°k›íŽ¾¶‘n|ʺtw³­z ÂíÛŠ­²žYÎ%ÈB¥*(\=È.αˆ¢8w#Ðù÷–ºÒÑ$1wlºL1AjÕÅ#j)KÜk²ãùmË¥4šHkÛMáfyÉ7ϽfêWp^ÂãmlUüî_qRy:+dóÞ™? ˆÔošÃ»ÎJÅi4ÍER‡\¤äbc¨ÛJi n‡¤˜n|YÆœ! ¾ÿ`TÓqÖ'6¾ZÃ:‹†XµX–Oß•vnw³sÚDbF:Þ]Õ–
+‘c啯úäQoà.ó+i‘ =ÈÕýŠN¬m·þÃpí.=Œ¥5®óš®H·><ǨíÉ:‰[¢óÕ³Ž_ùg›ÒXtItàó
+ÂÞeî£õ‡ùÞƒýÙ¤ç¯sÌ†Í Ë
+ëo4†H]9[ 5Ûü¢ð9OàÃs(ª%re™ ¼8Í$Û&}Z͵eãÄlw)†Іm”s{f36MSøJ8¯FÑogŽÇGó8™ÅyŒ4ˆâJcñÁ>bxx9Ùä"<
+P ZB¢«tÆJÞ®Lg}9d11×B0î•e7!(›Åð
+,y¼, —ånêdAéUš’_ÛõúæáÈ›X ™¯[ïãƒb†Dë4¢[‹ß’R¥áÇÅU±—ã$ž7U$›Ó°¥ëÙ+ÂXÖó;­_LE'Ä NÎE¸™GÉÎËòh±F2¤ìÍ4%¡
+â_ñÐîI~:idt—ÅìÒfù*ÖŸ|1^(¬x"ïh(“ Tc÷8)Iʾ%•u«õ]Õhµ‡ cI”
+Ægè-—“a´(ö«]A™°u¥$k¿ùí tAz;@;3ò‹¡M]w£­6IãnxWd?7¨'ãv¼ã|åço¾>U%€`µæ~a¬P?ŒŒàpŽ¯H¿{5ìà‰=ºZõPìa®”|0r±ø(öÇ =„€ ×÷ÁÃ86oÖþ%KdX]‚Â}x9ó5ÜÄÛ0®
+¢Go±
+‚Ùr"ƒÇ¦Û¹gš¡ÄÑ‘ºö6èl•*?õ×{Û'´£·b„éLÚþg&ÂW$„ tçñŒiû0÷wÂî±í‹IP7 \¼m£ºe&ÿsá "¹M9Ÿ7dò?æ¼ÜFº´È¡ö?í_¨Ô§Ïj–[‹x‡—/{=Y2-vÂݪ-Uº_ä¸ô" aHÍÿé,“ÂÓQv‡ŃG•qƤu±!4 ·³Tú¬@R¨3³š¬z(7vÖ¼Ëï)h“Ü &° vŽa$:„W?Sv©ÿ¢Q“Fn[·‰ýª‘;]£óØ[ºâ&­üe¼—N…6˜ZSFÄ¢üÊĤ£” [q’EÓ•ìxd§rP?.tÕG¤“|áÝkØ!× $ ñ:º?ûüËéW,#½çÎ=©EèåE.t]}©váG^,š;I!{¹Ú½X[ÙÚJå_3¢-ÿûaÌp2~銃ÜG«­ÂG
+on®±ˆÒž¶ ®áJ<©ö; €öÜ x3ø÷­µ ¦'qטáŸodôY™(±Ÿ¦,óÓE_3µ#¤1š‘jsÅû³Rñüd~
+«ä…ÛÁ0|XÛ(rž[äñÅ
+n£ ?ÀïÛj ë&a5"Gçã^ªxv¬ûĉ1 µ§i–Î+VÍÀ§Ušš"súØ€ˆÐ¾§4gW¸Öïd}/®W(¥Z-å™ì£ÎØŽæ>BG‹z©k[Yš¼õ‹}2I#‰Ç½È‡™6¶B÷_È0Wši?>üŠ¿ý§ˆg²¾/ýôºèô¡¶Ë’…P‰œÀWëÐâl?/ nãöS׳A‡Œœÿx‘P»p†SæÅJ3o6^lIðB,<9ù}Š`'‚(ÈY¾U÷»«|oOŽn¨‡ ‹òÁÃÞ ä‡ÙD-€ðÀCô¹Å
+óÛײ‘–RX›0+R
+èùú÷ f©ý‹‚Îzø3ºd”ó‚oˆŽH×üÅöOé% @¥¢ч"<ÓR:Ï£‡±|Ò-#%<õxZö:YÊö;¿;OL;S¹~ózA´®#Òhc0lúÙ1™ÔéÆ‚·(ímÂïi¸„
+ž/rÿؼ@“ž\±mbçQR†Aɽ»C|ÛÛ$÷cdñW&Áe_¾y©Öó»Þ?cîŽsç°t.Dì]¿ÇË„Yv¬@ôVêèïiå]?—ÉŸ¦i4ß ©\¬Òœ0æÔ=þ «,
+i ‘ fÚ åg5NAV–£OÆÒHë˜ñA½=ôk~ –B´ð+õ.´ÃZ†= 0ѸDÌ[P5xœS_ξê\ßÛk£{ºy*V—†ƒÊ»âç!­åhÚéWf5vK¾ íÊÐ,6E5‹˜Lä´ïná™ $t*0m®ŽF,–r^Ô.ÙLþ†Ý-)˜¬½ãükN¸ÎAÓ_TÀôLšûªÞ­
+“سïñ¼g‡œ&{(¾Öx4¦¾æ±»Ý9ˆ’9ÌYÕ]”ý ®3[ù;ìÛ. $šÃžúSá2ZЯ
+ϼ'ýPb€Hù‡š^•9¥vv&!Q ¥±¹ÏT>KIëkO‡T*ÃL÷ giÒÆíÍ5;¯>öšühöu1mì~ýâ (f
+Dbôô´¹¡`C°áP/þõ
+6‡@%ì„gùyÀgl‰+Èe©,²’4¸A&3;}­Œq5¿&³@†+*´PÌ^°A—+‘YIz¿o0lü›…ûã~3ÜJsW!©„0‚{21ì
+
+†äÝk¤…–ZZØE€,Ã+nÊÑÄøœ2ã(À|ÐB0ÌnAÏ
+jr •Ï„¦ÁÔO‰p¡¾Ÿ°á¡_YM)—‚Á–˜ozWÔ†üºx¹Áœbè6 D)W¬ÈøFÞDËççòH^ämZ’¦Cê퉃OÒ–7pô¹î2õÙJr/•õÓ ³uåß¿5Ä!#6dGº, âCàKy‡õ`…Öô[;¶íÔÑaÖgw\òöl B}¬Qpú¶­ù‚˜œû{—šîÒ•j4Ô
+Të¥k#ZÌkÆ Ä¬}\°ŠË‡‚—ÕMCEýLw·
+Þ0?†+»Þ[øj˜[NiäJ¸«v¹.±ÅÑ·!4Íçî‰Ø·ÅÀnuʶ‰éíß©Fu“/FMÞsËÇÙaeÊò2ð”/@
+¾žÈbÇ]‰-ùË [}F¼¯¬gŤTí®1¤<y1ŸOC°Kê—ÁÛfˆzæÝ&ýnƒ?‰Æ-s{$î3Ñ~“¤Ù1Ží—|‚<Pç˜½éº 0Ÿµlª¼¯`Ìë\%-IC5%<JPS‰V’ ‘çOµŸ>]žÁÞ÷å*„È…³Y£Ž®Íïå>÷Ô‹eÜ.å¿38ö§hgXWü„{Xß%ƒ5*˜Ä…›Ô¸«úÊ*1²ñ°Ö’&þÑgºl×Dàpk•o¤ògªëk«NËcqÌ ;#Øa‚b'H3ßè´x¥ÓqWŒƒ¼ÖíÏGH8P–Gm¸xÙæ¼^#©‚TNØ ´Þ7ÜU¢·f±¿á>÷j¢+Ö@׸—oÏH‡çR=2Ž¥›»»?y…AbäÖlTòÜBgⵑÅ„ÄëV ¢@í8XÔìÈô‘±ù EMIÚV‚àµðµ¸ËìiÜ*¼ð`Nö}ïT¬?AÛÊiÎò ú[¢5] «-ŠS\Ë×ME4ÐÐéëh¤®W^ƒÙZR=þ¾€‡8vm7;m&ÚC:Gõ­VcG‡z¾9ê =ô!:0Š
+×Oq/Ëf…hm‡y¢iñ’Öñ]ùÆñû‰_ÑMÔÍyÈäaMx3,Hr»sGù®TñƇÛd;Ò6±nô‚âÑ‹'Ÿ’5ÝGê
+¼,…I;q©h…o{“ T DzaZÚrÒºŒ¼?»A~v+­œ6•ÎF­¨)¥V˜ŒÓÀ7Ò©| ¶©Ê`ô‹S+ÙWZ·†-à9/°9Pû£©0×¼hEÿS»¹¤DöšÇ©|؃‡ÅôQ§é ‡õ6K^9÷9AÚ02í ôJþu"3PÉÝ0.@;îpíWê–¢%ÅË)ÓÔ±Ä(a»„Š•ds,¥œ€°fKRìî$‘Ûò ZÂ[²’&ÞƒVb$×@(· ÆEPÚj·ŒOÜ ¬vÜŽÒÂ0ÑÚú+ãÏàªèšúœJ0LöØ}‡‘åʲY¢Š†„WYø‡õê9VäêüÖX‡ˆ‹Þ`÷§9Q±GÀ6a°!PÔHú‰nœ\lÝ7iÇüq·¶ @ùä|ûCITÌk?›uÃÃã¼o÷d¶j«/OÝr 7ú;È<Ü+£¶qíæ#›4Ö[Lõº˜`Õ)¦ÈÌÂï—¬w¿I,ÕÑ­¿ð_ϱs–õ¤›ÚáÅÿ±3mÁ 㬩¶uÉ]Ÿ&¾šdð™žA³‡¡jJY¥»Œ×QhéÛßkhÔdÕPcŠ5¥õ¢J´$~¿5 µÅþ¾3ئúQnEOê_ ß2Åiâ(ªt…Ö¨¶–+ÈÓk¿(ŸQg䔈‚jl.¬¤žmtkñRP|>Š=}nJ *8ÇÈ„g_WÝ®Œ—õ+¼•Íä6¶ðhÕmØóÚ¹ ˆÿwkÍn‹ØÖæaðÙF=U§k\!÷é“>Í}Éþ²Ò6c°ÅìC½ïPUÈñ¾Á¾FÖ,Éà¾eö4°Gñeá šÑ¢Å"W)œÇzO§$#G^†¾I6ºb¡lì4=E§8ÁâÄ«ðÔc‰þo˜iw¨ ={€õôI=Wlº·(N˜]ü;h|-Pn%Xª²ˆ~~»'"«òÉ@Õ]͹à*ΪDÝ*Õ&¯æZL‰~TŒPé–¹CL è$Ù‰™”ÈÌ=cöñUa~-,'lÉ÷ûMZ9×Q)¡7HüÏ$_‰qšÑÁ%Û‘º/Ó"Xô{nKï"£2œ¥¦ ‘ì¬d)³ÐŠ¥ƒÔçSìýÜh× ÁɈÒ%zæÃȱåm™,~ÇfVߨ-¬&¨u¨úáê$Ý›7üg5úІÓd6Ш†ù¦Sº Ì”L·„€çï*w«žJÿ䟋ã¤æt‚¢«0¶\Nê´e“ûéãÏüŸ¨ö5M.áäþ;ÿÑ÷7øÕq‚ªˆ@ü uk… Õ˜Vº›à)(Ѽ.¾1½€”(ЈŒ£ ´¬)¢bwµý
+OmÅE5à Á‰ ñT9Ý%ઢ#òJ&Vû0/ËÔ%ྀÏ9RÒÛN…Ô°º‘”óÙÀañ< i«ˆajàX±‹¶"A—•ÁødÙdµ`Ö?­É¸Ó¿aûÐ#7Îò¬'Z0ñãèhm£­ªš`”±<g¯xì}t)âK(91£íÐê‰)vïïzf·4"òJ sxÈvz=ùºœæ󒪾ß\-±ôk
+=Ú‰i7˜F¼Ž†_+JÒðôÚØKgµh4 (Ü­r,ÌÓŽLÃzEœÑOpÁ‹hè©Ö’•^ÌűuLB+}ɹ!=Ýúm’.?Ä?¯•±Õõ¢/f–VVÄJãÇì~ÒÙÀx®áÎœçËÏô:Ö‘¼Õ|·¯ÔFðe/¨£jB3º/]É{LæÛºl_$”¬÷[p}¬A¼<å÷Ï»-@Ù?³¯QÔ‹»â8€cyæÙ#èrJ‡­šhúGˆ`‰õ¯µ°JÓlCúQþ•&i¥=¡R,Ð/@…zÂX­0MŠ4Ùþz„”Ù®p8çˆS±·šê÷q(þSGD¼1'æSÒT2j¹ôi<¤é½ˆ½ÔA)YÎÑDµ5Þ“_âÚàð‚ždO͆ø€’ਟœ‰ßï“ãùí„í½OK¤;]â:fßQ#—Ýåy°˜1ŸÜ¨^.Š`ϯȌ)Ƭ!°îÍÓ¤~@Ü›Z’ÈÄm]R½Ì±lÉ–ˆÛM=‚è»o]%î5H8ÉñðJ¬s˜{ÕmoRÝœ”Ü%¶¡A€mžXŒNzÓùxî~ÓXS ª>wh Bú#Û>öcðÁ§yÿÍÓËì z>½ûÔCÏÌç0¤d‹÷èóx@©%p‡;¾Ë0ÄîÞ›ñS"GÝ8m°>I» Þq|=…ÍÞºÖÁPŽÙŠ `*¾âõ•W±2å —Ê„s(ҨʑieM¬î3ò °vÓ.ÈøÛæê:‡d}ȃüÂF[ËM¥þC‡e/Eœ·ß¼¢Ca-(PÞB‡‚_ŽO¶ó:Z•žŸOXM³¹)@õ' ¬(–3ºéìجDæ7"|¶Òp
+¬>;äò4
+H
+,¿TPÚ£>Ÿ°8ÛWò¸¹‰ÜÁ0›ZÂÚ`íL^ìRIs
+s#—Œó¿å26Bbm@*QæóWv™zħ;ŸÃƒ¼%›mĨ)•ÅD²›õÇ™5Ïçiöäô2dÏÈ ¢üˆÌú£KgîVËœ÷кÜöÀÉbÂQ]±·aáPüøòÀ!~&58¤ UéìôvlüÚtÅkCYwO(Z’èøãɆ¤ÎJ• î«ç@Íw÷È ÞàµcNÛu
+‹w~öÍté-7µ³{-¬§±È+Jè­ä?$üyüÎGnŠÙVËz—‰ãÒòARáJSIðÊ}D“Ä(íŒäˆ²«ØÇ–w½SwR᱌ú½ ©ŒiDÂœéî[“ä:¯–â§ù‰Æ–äAlw’.ò>ªìJ•gvX9Y#òêjèžW.Ò*W®.1õ×ÛF)7Àa^¤»<š‹44EŠXòî¯Qœt ¨þ‚+Wrëu¿ßœp@[Ç7ƒ}§È‰6y”ò‰Q#Â~e;r¬bxSîæ(|åaôÉ·ŸËSÇ·IYÎl'7W?Ø`m,ËÉŠ9³–-ÄhrlWÓ½òõa… 3Gˆ Q³âuÚ«Z`é¨[†‚šÀqHkU<¸‹µøDhW&?׳fךîOŠ£Ù'UÜ¿5µ·Y<Ÿž™ÞúýyìÖgJ¯bèsõŸ:†‚†ÐNòÐÜ«•£»ÎØWÚ| ¤º(R.g8u$=Vâcø”§„áä¿‹¶I+É«Xg•Q8“9!®î )Ò¥mjô\oBÓc<y<ffµqñ>l^Ü‚¹=aä–>T~E¸Í+ý&¤ iX£¬mý®Ê‹†TÆfx¬ÀjΈ]þ!ˆ„ô„¹Ï
+| WfìxV'ÆSɈ·ë c–&øY
+ŸÅ¦Rþ¨ò[,rhtDx㤣ڶ
+ì”íÑj#]…—°¦škSÑNf†#bÅ·.ÆÚð°ú™ ò«P!›è„1Aü’v‘ — dBDv'OWs˜:n
+*vÛ ³ðX±BgŠ¦wµ3ŽþXÜC«¸ñ­ÊE‡œ.ô«Ö¾ ޾ˣ Ü<”¿;³©µËä‘PTåðã°ñ\þüo*ú¿ŠÿÄ\5•Yt™‘ÖÎhý¹j¦aµšS` ¨ÓÁBÃryx/7KèƒAMñÍs;žØ‚+Ÿ<È{/yq C³‹3¢«;šk`ŠÓùõƒ,Ï«Ã1Cdæ}ÝÖ“!ƒ#©á+³g› á–{r<”æÄÀ?
+”p²‚Ì’>›®Ì!—Hûç¿Í»LûJ,Æw‘É/S±l{;0bòÏß™V®héá[æƒßOX8÷Æ ¸x&Ÿ§8GÔL‘-‰ÕÿhÔ~Å°Ó_vÅ;]hyÞy ¯Co¥ßä<ç|˜ U
+¾×¶±ýX:½ë£`Íò|Ï/\Û0wwN†½-Ÿ©,‘ýœp`ì…Ζ 4C–ŠÅÎm’s]­ßxÙˆ´Šà&ð®²É)ÑêûÄ«.å}#2,dþ"( y¦–Ai|N[TðjÄðº/†,d\rjÏæ]?öt¼wÖ¹œ ®æ¬è›Ná—Ÿ8çÇ"OðùÁ›‚jÚw
+‘T ï’«­ºàmf¬®–ˆ‚8VÙ17f“®If)¶˜ÉÇ{§˜µ†¿o¼É î0–HÓAýñR6b5}c¼àoÌM r*'WèU+”z±öÍÀl#GKfaÆéQôTZÉqNÕﬨàdg‰÷i+3|ª#@Ýì&ÞM„ÙÝÑ>©LV¼«¹wJöº/$pžG ¾†6ªìk¿ÏÈ6úXð7ä´/3²†
+{¿RÓ„¥cpçÊ´(§×"¿îzQcöê0ÖóŸ\¸PCåYsP¥ä+}›Tã|ìÔ:Pd¨~½9iÜü1I4]‚Ýdë´m¼°ÃÞ¥íhqËÖD€•6Ñ©M,XJ:ß,ú´÷zk¯IÿÅ´(„ª¡Z©#äÒH]Sø?BĦcêO–‹Â†òö-À<q»×ëMX,SŒáy±ÍôwWf2%n§./[v}|5z|{ÿºx«:CB'ÇC^._C®u
++ŽáoÑÑoJÓoä€à).D¦\uð¼“
+m|-zÐ#çbûŠ×—†rÿ ì ¥ ‘ Zèñ‚%Qú¥.¦™?úgÚC)àhÄf‘¢qÿŒ‘
+Øwh¬ƒÁ’ãl„«$I<e.qÄz/9ŸV’±L,âNÓ/Ú¤:c¥èó¥>¦‘5œ]±RžχäÍ(GƬ/áOtgO(P»Scí!|@¬¿|N0É¢"¿±íq¶P5R@hAiËDì[pêñjÀgÕêõ¢¦‘ÿ@‰Tn£6Fz¸;GË‚­5‘r0çÔcÁ[ï(þ;ÎÙØ0d»UÕz<ºÈ&ÇZô¾¾ `§ù§€×NåÑ99* ‡ ñôˆÌÒ"â©üsÈLSM^÷›MÇݦ¸é¹ùc!CFEYÝO§_F¦À¡1¿ÂÑï9oú˜}SSQ¼ôìCÁžÉ¡N(²õo¢áÐ윅Dé}ñfi¹“ël¼&‚m~¸«¸òÂÇM´9t‚VTQêƒÕ~뻀Ÿò1AjEñÚ¶ÁP6#V ¡ÜJ5äàýµ›{Þöþs|¥P9bT¦ºX4Yp’P;ÎÊõëYý—†½w@4*4¥¢y§©‘(ƒ‘Om:Η²¬ÀÐÇô™§¯yCöÉEá S:äúK AüQwÞEè³4Í,ya;dÈ”/#ðƒ“co;Æ©¡£«åhÙÛÕÐJ¹­¡0q½Î•
+C§Gußx{ÛÄœ„B;ÀÐ\g•~—àèiœlðv¿¹ôõÇ™‰7ßZ F¢¹fŸq:ƃ¿øëC
+}bÉ„•Óµ Vß¹ D¶53Ÿ¸‡ vðGПO*&æ\ŠÛ+>h-s›N¾)h2ÞGŽ>hÌÂéG:süFeæV6Êœ-ª‹¼¦)¯tà‡\§óŽŸ2E}˜Äç—å1£¹VY…4È)‹®x¹
+5Cð
+hó¾èmÆ€‡qŒÆá:4›ùÆaB-ª-nÍØðneVŠÄÖL$Œç _68ý0¿gዶ‚›ž´ýÅ©< ^W¹?·eÜ/
+
+l¥&,C†Œã ·ÖQŸ8RÔV»ˆ :»ß ¢ÿÕ°¥¦o…Äóô¢&›Dñ„æ„ñ>%åqUEV
+Jã(†N` /õÍþ`ôV’(H…ó¬ÐC>ø¢H§A®æIØO¯õ–0ÄhfÙý˜)š_x〘ÄIMme}Wì‚|Èà¾NÅÁä2¼Ô°yÅÑ¿_ÑdrEˆ »ÙŲVÓ¬w#ºÞp}§ —;Å_G°n\OªˆàPcŽ>n?ÿcpåÈñò‡VA0]
+ƒÂóqI¾ÞŽ´n‹TèÔ=ZÓBÿü:åT(a v|(‚bV~Qù`N~‚ñÑÕÓéáîÞ¸ RƒÀöðša‡ÄP@xD|i`­-.O&~F`4y£UÓÿ HÉMÌöÞ8Y€T¯B"y”x†\äñŽmÄ´Õ¤Ê诰¹ì·÷O±,‰D¶8–ëÈá û0Ñô<¡;+BP¡j­uÛ4¡ú…wÒý}"íç…ïÌ
+ùÄì©¢"£ÂŒÚ1§@ÓÇ%ìÏã:ptu2DØ/jÏNÚ‚âî
+þ ª×“?ŒÎ^TEul ^´­—çq<Üÿ-¯+ž4ÛŸ^êJìZá­¡'+ŽÊÕJuˆá‚Ç­+~¨ìóh~)à‡A¤ž¢(ÚçèÚØJUË€/)²|(8îñ¨¿‚Å_ Ñúõ@
+€Ërs»îX ˆ—#®#>|:+CƒMü\ûÅðêUT°ÎšÍOa\ŸÊTÅId`Éÿ!)µkâºüzwˆÔ|êˆ  •Dà^
+«9“ö¯#ÕQÅô/•p±ëtTu¦ŸÑoÕoÑF2ÎçÖºó¨F¿xüþÙDQ)‹€®¨G.eáÔ÷ºÙh®o¢_ý/_íÃÕ£ T\‘YÂCû->×kl,¨ÊEX›Ý¯¾ÜWÀSÇ«GôV
+h›À
+JJ”ðú»,aüø‡´Oe=²§ùsõB.-9É?…–ZEè·v"‚‹ÏCÿ£3N©eçí û9–¹ŒäˆÊæ9a#Þò4)CË;ùW¦5Á™-öO­¥DÉ¢Ra‰¶µºçiN¿°4ÿ!VV(䂸„ih%tL_ܶ?ó&·ç\cT
+´1rÕ¤‹©Â–C|YÙEoç“âÙšFæm†‰bégâáH:ÏwüØ'Ѐ±ÇPzüܯ*ªÍÅë¯Ö:N­/jÛÆÜ„PÏHEÆSsÏùo’OÜ¡³Þ+"¡&íÌß èæEÍÞè„Ðg­ &ÜMÖOßõ!pú7Øɯ2­Ž!l3YÅB!6tÓº²vo›·ãfÜg+/“ácÒË`Èqèa;žñËxù<ý}(ìšLÐöBýÊ”ˆ;ÍÖL„ê(õ~D™êq¢˜M©Çá5b*àÎöæÞúŸ{ôÚ8iøxÃk|ƒ¬n›Ôš…ÒÚE_SXï=ˆ÷ãf+¤m"ðÞзs®õ:é‹ÜKÎÑ4åÖ·!D›ÕñØúÀHþæ1}’  C ej»ÌO²oDª­2Œ°š@Þ­ªÄhGO‹& fÑŒx\q¨åÓH*“«×EãñÎŽ`ghÕ`Uð1í$!7³NN¬âä–NM•)ña{®yµWϺç)®‘nS˜~Ø€gÆI ôÈû8³¶}ÊàL‡TòíÌF¯C0‘;pŒ/h° [Ç.ùõ§¨²B4 '…¡ºtdˆÀ4¡~0$îãò†W`TAj@qy‹2 UÉl\²lå¯ì×½T¤Š]×ÈÌO“bq<1~úÂfÍÊ’ì—W¨8’…­¶ÓÃI¿ÞK?›@‹§² WSuÝG4W¿! ÍrÞø§ˆ(ªyô[üÚ´æ»Ú•ã¨öï¶aÎûBá±j{6úMóT÷¶×9—0:'@:5+¹×ñ®¶ëde=—'’M•~‚†L=F¾‘d cƒ~N¬5s²czçR5$þ'6«3yi@1¼¢r¤y¬ƒÒNXr˜‡š¦ù‘÷·HQ¢H9=WZ8 ¦ú;M/åEÔ±²ïp ʹ1M„òÒñžT;¨ÙŸ[bÙøøáïj ù¶–è.h¶íùÂ’í1§O d6ä2Ó•€Sõ„ Ò¸oMîî›@¢Ÿq<rØX?+e¨aÃE› Ó zŸÂÓˆ¾/¨”% wÇŠ¢?ÛŸ‹À›®
+‹'Ô Öe‹Âo†÷L~¿ñþ\ì<h¿g¡‚™ ýcJCK¥wA½pƒ ï#“ÑD$_´âÀÞÍ¡ˆN5Å?¯Uµ‡å?7`ÿî crâÊÜç<¾¿ˆ\ I}¤xÝšN.PõÈ»Œê½pRUõ– Ÿ®ð$öµ©!ê£QÅÑØäkØ´ŒÂ„j¬@v”Â’ÑlLÌnmUEX’æ±}mî´z*l9Úï^IöqJJaþLÁäc“Ñ&júi`•¢%×î—ÛØÝAA‡Æâ¿ñ
+emÓÉÛŸ«3^4TòÓ¶¬@ÈjA1ÝiQ·ˆ ‰Ý÷ĘtÙö¢KB:Aÿ¸‹ÿ~…¬QN¶è•]à^H£î8‚x÷7^LMûžÄh5ý‘y.ïë`Ï $G^ãÒt°x\àü¹Qµ
+¢“˜.]âeŸýcxŒHÁ‡¹mbÞ ¾ #{Z¯ÆSŸÕ‚¥¨žÉºølõíý73\»ö&ÛT¹™Í`9Í}¤™å¦ï[ê¼<N5z ½_|ïh-óÔ)áäâöl?Þ9)9š°¿c(¤GEüÛŒëÈjK°ÍÚ$ ¨ñ¾ž2»ÓŧbžÙ,½_‹ÈIT>RMº(v¬|ŒQ|Þ¸V-'±é·ÞóVÈTú¦Jeˆ«Ôa‡ˆur Ûõ¤)gˆµæÂi{Ç¢VP€ææp¸D7ý™ÑÍH¸p½÷öÙt£¿# rKاjŠ-üòPýñöÕe©,´“ föö’
+^~
+à å‡8q¤Â麈^ñLŽq–}¨Bƒ CáÛ–åÊ— >²–{lõᾃËS×ê&“U
+9èpa0õƒÑßœÀƒwsi‘÷ëÛÇ* tô†tŸš…  [¥wÝÙ.Ÿ+$è+ÚÓ_ý¤iÌÕKÕ6(ý"oˆ¦—2'å™GÉž?IHééæóP´¾÷‡ʧ)ê^pA9"?kòowÖÕ—Ÿ†_²;tÊ+ioáÜ‚•êú
+_ÏfZYX/JÿŠPžUºÐ±;Äó™Ã¾¨5ÃÎ~¢M~;-5”äÖ$„€`3’’˜à0ßnpöã¤ÒE›­ðÆúb89qÄZ¥| ž½¢ MæƒVþu–
+!µãmYgKà”‹ù÷ÿ•£B}ôçüÂÛZ = U³W¯Û䉊ù¥tàC½^¦W
+QŒÝ›îl6;¹E& ˆÈš.®*·Kcî):+©†¸uó‘=t‹b'´á":
+EúPjAõ¶Õ ª±E@ ûõo`¦iqKQ`_`+§|,33yºGÖÿÚæa#^¸“¯™ÆÀ¤Çð—àBÝ®éãó8OÝòUÐÇ3&]¥§J°Æ$h ‹YH<(|í HhtÊc­µ YjCorpôaá‘Ögnj/#;ÌèâCŠ7±]c¥£ÿ|I4aü½ï¯kÅ3|M&ïæ†Àh¿}®²L¸­¿‚fµÝ¤TíR8g¤=Œë&í‰A¬ >ª¢Ûd÷C{z‰-6ð7Tœçܧž p"ÿ²±(¯Ÿûº`h/áw»7¢»ªîÈ” û½U6´‹°ÚS +ÑT~¯Tç°Ç&µÖªñ˜ü¶×êI z {çNÊ€‘±6qZü(úX(ø¢ZyÁ´~´ãÅ¥ÙÛا°ÞÊ›H#æ
+½¨©5¯O3þU¬–.œ) @X±®Kàð`ç0’’A©2ã?Â’§¤1à*\Ü& Ï×ò•Es”òœ³e»`Ž-Ä_ø£½—†›}t`òC;]t:ü#?=*rež‡¾ZNžÿµ×Þ ÞÏ-aæ:-ƒ;ž""·È¶ êÝ'(ž¶b—PÝò$&¦‰É&ŸydÌG­<‡#{BŸí’Tdõ/úYýþª·Áè`þÜ(JæsmjžãdàѦÞ#¶«âÝ]¹CÑdH€ Aþ–/“6óN#å
+endobj
+950 0 obj <<
/Type /Font
/Subtype /Type1
-/Encoding 2729 0 R
+/Encoding 2807 0 R
/FirstChar 2
/LastChar 151
-/Widths 2746 0 R
-/BaseFont /YHPRZJ+URWPalladioL-Bold
-/FontDescriptor 936 0 R
+/Widths 2824 0 R
+/BaseFont /JOBNRY+URWPalladioL-Bold
+/FontDescriptor 948 0 R
>> endobj
-936 0 obj <<
+948 0 obj <<
/Ascent 708
/CapHeight 672
/Descent -266
-/FontName /YHPRZJ+URWPalladioL-Bold
+/FontName /JOBNRY+URWPalladioL-Bold
/ItalicAngle 0
/StemV 123
/XHeight 471
/FontBBox [-152 -301 1000 935]
/Flags 4
-/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/question/at/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/emdash)
-/FontFile 937 0 R
+/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/at/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/emdash)
+/FontFile 949 0 R
>> endobj
-2746 0 obj
-[611 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 500 500 889 0 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 0 0 0 444 747 778 667 722 833 611 556 833 833 389 0 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 0 333 0 0 0 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 1000 ]
+2824 0 obj
+[611 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 500 500 889 0 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 0 606 0 444 747 778 667 722 833 611 556 833 833 389 0 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 0 333 0 0 0 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 1000 ]
endobj
-939 0 obj <<
+951 0 obj <<
/Type /Pages
/Count 6
-/Parent 2747 0 R
-/Kids [930 0 R 956 0 R 966 0 R 1021 0 R 1085 0 R 1148 0 R]
+/Parent 2825 0 R
+/Kids [942 0 R 968 0 R 978 0 R 1033 0 R 1097 0 R 1160 0 R]
>> endobj
-1226 0 obj <<
+1241 0 obj <<
/Type /Pages
/Count 6
-/Parent 2747 0 R
-/Kids [1210 0 R 1228 0 R 1240 0 R 1253 0 R 1264 0 R 1271 0 R]
+/Parent 2825 0 R
+/Kids [1222 0 R 1243 0 R 1255 0 R 1268 0 R 1279 0 R 1286 0 R]
>> endobj
-1287 0 obj <<
+1302 0 obj <<
/Type /Pages
/Count 6
-/Parent 2747 0 R
-/Kids [1283 0 R 1289 0 R 1297 0 R 1306 0 R 1316 0 R 1329 0 R]
+/Parent 2825 0 R
+/Kids [1298 0 R 1304 0 R 1312 0 R 1321 0 R 1331 0 R 1344 0 R]
>> endobj
-1337 0 obj <<
+1354 0 obj <<
/Type /Pages
/Count 6
-/Parent 2747 0 R
-/Kids [1333 0 R 1340 0 R 1347 0 R 1352 0 R 1373 0 R 1383 0 R]
+/Parent 2825 0 R
+/Kids [1348 0 R 1356 0 R 1362 0 R 1370 0 R 1391 0 R 1401 0 R]
>> endobj
-1392 0 obj <<
+1410 0 obj <<
/Type /Pages
/Count 6
-/Parent 2747 0 R
-/Kids [1388 0 R 1394 0 R 1399 0 R 1408 0 R 1417 0 R 1424 0 R]
+/Parent 2825 0 R
+/Kids [1407 0 R 1412 0 R 1417 0 R 1426 0 R 1435 0 R 1442 0 R]
>> endobj
-1433 0 obj <<
+1451 0 obj <<
/Type /Pages
/Count 6
-/Parent 2747 0 R
-/Kids [1430 0 R 1435 0 R 1444 0 R 1458 0 R 1465 0 R 1479 0 R]
+/Parent 2825 0 R
+/Kids [1448 0 R 1453 0 R 1463 0 R 1472 0 R 1480 0 R 1490 0 R]
>> endobj
-1489 0 obj <<
+1504 0 obj <<
/Type /Pages
/Count 6
-/Parent 2748 0 R
-/Kids [1485 0 R 1491 0 R 1497 0 R 1504 0 R 1512 0 R 1517 0 R]
+/Parent 2826 0 R
+/Kids [1499 0 R 1506 0 R 1512 0 R 1517 0 R 1526 0 R 1532 0 R]
>> endobj
-1530 0 obj <<
+1545 0 obj <<
/Type /Pages
/Count 6
-/Parent 2748 0 R
-/Kids [1523 0 R 1533 0 R 1540 0 R 1544 0 R 1554 0 R 1559 0 R]
+/Parent 2826 0 R
+/Kids [1538 0 R 1548 0 R 1555 0 R 1559 0 R 1569 0 R 1573 0 R]
>> endobj
-1573 0 obj <<
+1588 0 obj <<
/Type /Pages
/Count 6
-/Parent 2748 0 R
-/Kids [1566 0 R 1575 0 R 1584 0 R 1592 0 R 1603 0 R 1609 0 R]
+/Parent 2826 0 R
+/Kids [1580 0 R 1590 0 R 1598 0 R 1606 0 R 1618 0 R 1624 0 R]
>> endobj
-1620 0 obj <<
+1635 0 obj <<
/Type /Pages
/Count 6
-/Parent 2748 0 R
-/Kids [1615 0 R 1622 0 R 1626 0 R 1633 0 R 1641 0 R 1648 0 R]
+/Parent 2826 0 R
+/Kids [1630 0 R 1637 0 R 1641 0 R 1648 0 R 1653 0 R 1663 0 R]
>> endobj
-1655 0 obj <<
+1670 0 obj <<
/Type /Pages
/Count 6
-/Parent 2748 0 R
-/Kids [1652 0 R 1657 0 R 1661 0 R 1665 0 R 1671 0 R 1676 0 R]
+/Parent 2826 0 R
+/Kids [1667 0 R 1672 0 R 1676 0 R 1680 0 R 1684 0 R 1691 0 R]
>> endobj
-1686 0 obj <<
+1701 0 obj <<
/Type /Pages
/Count 6
-/Parent 2748 0 R
-/Kids [1681 0 R 1688 0 R 1693 0 R 1703 0 R 1707 0 R 1711 0 R]
+/Parent 2826 0 R
+/Kids [1696 0 R 1703 0 R 1709 0 R 1714 0 R 1723 0 R 1727 0 R]
>> endobj
-1723 0 obj <<
+1737 0 obj <<
/Type /Pages
/Count 6
-/Parent 2749 0 R
-/Kids [1716 0 R 1726 0 R 1734 0 R 1739 0 R 1743 0 R 1747 0 R]
+/Parent 2827 0 R
+/Kids [1731 0 R 1739 0 R 1748 0 R 1755 0 R 1761 0 R 1765 0 R]
>> endobj
-1758 0 obj <<
+1772 0 obj <<
/Type /Pages
/Count 6
-/Parent 2749 0 R
-/Kids [1751 0 R 1760 0 R 1767 0 R 1772 0 R 1779 0 R 1786 0 R]
+/Parent 2827 0 R
+/Kids [1769 0 R 1774 0 R 1782 0 R 1788 0 R 1794 0 R 1801 0 R]
>> endobj
-1796 0 obj <<
+1813 0 obj <<
/Type /Pages
/Count 6
-/Parent 2749 0 R
-/Kids [1792 0 R 1799 0 R 1807 0 R 1811 0 R 1816 0 R 1821 0 R]
+/Parent 2827 0 R
+/Kids [1808 0 R 1815 0 R 1821 0 R 1829 0 R 1833 0 R 1837 0 R]
>> endobj
-1829 0 obj <<
+1845 0 obj <<
/Type /Pages
/Count 6
-/Parent 2749 0 R
-/Kids [1826 0 R 1831 0 R 1836 0 R 1842 0 R 1851 0 R 1856 0 R]
+/Parent 2827 0 R
+/Kids [1841 0 R 1847 0 R 1853 0 R 1857 0 R 1861 0 R 1866 0 R]
>> endobj
-1864 0 obj <<
+1885 0 obj <<
/Type /Pages
/Count 6
-/Parent 2749 0 R
-/Kids [1861 0 R 1866 0 R 1870 0 R 1874 0 R 1882 0 R 1889 0 R]
+/Parent 2827 0 R
+/Kids [1873 0 R 1887 0 R 1892 0 R 1897 0 R 1901 0 R 1905 0 R]
>> endobj
-1922 0 obj <<
+1916 0 obj <<
/Type /Pages
/Count 6
-/Parent 2749 0 R
-/Kids [1909 0 R 1924 0 R 1935 0 R 1951 0 R 1957 0 R 1961 0 R]
+/Parent 2827 0 R
+/Kids [1909 0 R 1918 0 R 1922 0 R 1926 0 R 1937 0 R 1955 0 R]
>> endobj
-1976 0 obj <<
+1984 0 obj <<
/Type /Pages
/Count 6
-/Parent 2750 0 R
-/Kids [1971 0 R 1978 0 R 1984 0 R 1994 0 R 2006 0 R 2014 0 R]
+/Parent 2828 0 R
+/Kids [1969 0 R 1986 0 R 1997 0 R 2003 0 R 2007 0 R 2017 0 R]
>> endobj
-2025 0 obj <<
+2028 0 obj <<
/Type /Pages
/Count 6
-/Parent 2750 0 R
-/Kids [2022 0 R 2027 0 R 2035 0 R 2043 0 R 2055 0 R 2062 0 R]
+/Parent 2828 0 R
+/Kids [2023 0 R 2030 0 R 2040 0 R 2052 0 R 2060 0 R 2068 0 R]
>> endobj
-2073 0 obj <<
+2079 0 obj <<
/Type /Pages
/Count 6
-/Parent 2750 0 R
-/Kids [2070 0 R 2075 0 R 2081 0 R 2092 0 R 2096 0 R 2100 0 R]
+/Parent 2828 0 R
+/Kids [2072 0 R 2081 0 R 2089 0 R 2101 0 R 2108 0 R 2116 0 R]
>> endobj
-2114 0 obj <<
+2131 0 obj <<
/Type /Pages
/Count 6
-/Parent 2750 0 R
-/Kids [2111 0 R 2116 0 R 2123 0 R 2133 0 R 2192 0 R 2248 0 R]
+/Parent 2828 0 R
+/Kids [2122 0 R 2133 0 R 2137 0 R 2141 0 R 2152 0 R 2156 0 R]
>> endobj
-2336 0 obj <<
+2172 0 obj <<
/Type /Pages
/Count 6
-/Parent 2750 0 R
-/Kids [2302 0 R 2338 0 R 2346 0 R 2354 0 R 2361 0 R 2366 0 R]
+/Parent 2828 0 R
+/Kids [2163 0 R 2174 0 R 2233 0 R 2289 0 R 2343 0 R 2378 0 R]
>> endobj
-2375 0 obj <<
+2393 0 obj <<
/Type /Pages
/Count 6
-/Parent 2750 0 R
-/Kids [2372 0 R 2377 0 R 2386 0 R 2392 0 R 2397 0 R 2401 0 R]
+/Parent 2828 0 R
+/Kids [2386 0 R 2395 0 R 2402 0 R 2407 0 R 2413 0 R 2417 0 R]
>> endobj
-2416 0 obj <<
+2431 0 obj <<
/Type /Pages
/Count 6
-/Parent 2751 0 R
-/Kids [2406 0 R 2418 0 R 2423 0 R 2435 0 R 2444 0 R 2453 0 R]
+/Parent 2829 0 R
+/Kids [2426 0 R 2433 0 R 2438 0 R 2442 0 R 2446 0 R 2455 0 R]
>> endobj
-2466 0 obj <<
+2473 0 obj <<
/Type /Pages
/Count 6
-/Parent 2751 0 R
-/Kids [2458 0 R 2468 0 R 2474 0 R 2478 0 R 2484 0 R 2495 0 R]
+/Parent 2829 0 R
+/Kids [2463 0 R 2475 0 R 2486 0 R 2493 0 R 2502 0 R 2514 0 R]
>> endobj
-2510 0 obj <<
+2525 0 obj <<
/Type /Pages
/Count 6
-/Parent 2751 0 R
-/Kids [2505 0 R 2512 0 R 2522 0 R 2528 0 R 2532 0 R 2536 0 R]
+/Parent 2829 0 R
+/Kids [2520 0 R 2527 0 R 2537 0 R 2541 0 R 2546 0 R 2552 0 R]
>> endobj
-2556 0 obj <<
+2572 0 obj <<
/Type /Pages
/Count 6
-/Parent 2751 0 R
-/Kids [2546 0 R 2558 0 R 2565 0 R 2569 0 R 2581 0 R 2585 0 R]
+/Parent 2829 0 R
+/Kids [2563 0 R 2574 0 R 2580 0 R 2591 0 R 2595 0 R 2599 0 R]
>> endobj
-2603 0 obj <<
+2609 0 obj <<
/Type /Pages
/Count 6
-/Parent 2751 0 R
-/Kids [2592 0 R 2605 0 R 2613 0 R 2618 0 R 2622 0 R 2630 0 R]
+/Parent 2829 0 R
+/Kids [2603 0 R 2611 0 R 2621 0 R 2632 0 R 2643 0 R 2647 0 R]
>> endobj
-2649 0 obj <<
+2662 0 obj <<
/Type /Pages
/Count 6
-/Parent 2751 0 R
-/Kids [2639 0 R 2651 0 R 2656 0 R 2668 0 R 2674 0 R 2684 0 R]
+/Parent 2829 0 R
+/Kids [2657 0 R 2664 0 R 2668 0 R 2679 0 R 2691 0 R 2695 0 R]
>> endobj
-2710 0 obj <<
+2704 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 2830 0 R
+/Kids [2700 0 R 2706 0 R 2717 0 R 2727 0 R 2734 0 R 2741 0 R]
+>> endobj
+2760 0 obj <<
/Type /Pages
-/Count 3
-/Parent 2752 0 R
-/Kids [2698 0 R 2712 0 R 2725 0 R]
+/Count 5
+/Parent 2830 0 R
+/Kids [2750 0 R 2762 0 R 2771 0 R 2785 0 R 2799 0 R]
>> endobj
-2747 0 obj <<
+2825 0 obj <<
/Type /Pages
/Count 36
-/Parent 2753 0 R
-/Kids [939 0 R 1226 0 R 1287 0 R 1337 0 R 1392 0 R 1433 0 R]
+/Parent 2831 0 R
+/Kids [951 0 R 1241 0 R 1302 0 R 1354 0 R 1410 0 R 1451 0 R]
>> endobj
-2748 0 obj <<
+2826 0 obj <<
/Type /Pages
/Count 36
-/Parent 2753 0 R
-/Kids [1489 0 R 1530 0 R 1573 0 R 1620 0 R 1655 0 R 1686 0 R]
+/Parent 2831 0 R
+/Kids [1504 0 R 1545 0 R 1588 0 R 1635 0 R 1670 0 R 1701 0 R]
>> endobj
-2749 0 obj <<
+2827 0 obj <<
/Type /Pages
/Count 36
-/Parent 2753 0 R
-/Kids [1723 0 R 1758 0 R 1796 0 R 1829 0 R 1864 0 R 1922 0 R]
+/Parent 2831 0 R
+/Kids [1737 0 R 1772 0 R 1813 0 R 1845 0 R 1885 0 R 1916 0 R]
>> endobj
-2750 0 obj <<
+2828 0 obj <<
/Type /Pages
/Count 36
-/Parent 2753 0 R
-/Kids [1976 0 R 2025 0 R 2073 0 R 2114 0 R 2336 0 R 2375 0 R]
+/Parent 2831 0 R
+/Kids [1984 0 R 2028 0 R 2079 0 R 2131 0 R 2172 0 R 2393 0 R]
>> endobj
-2751 0 obj <<
+2829 0 obj <<
/Type /Pages
/Count 36
-/Parent 2753 0 R
-/Kids [2416 0 R 2466 0 R 2510 0 R 2556 0 R 2603 0 R 2649 0 R]
+/Parent 2831 0 R
+/Kids [2431 0 R 2473 0 R 2525 0 R 2572 0 R 2609 0 R 2662 0 R]
>> endobj
-2752 0 obj <<
+2830 0 obj <<
/Type /Pages
-/Count 3
-/Parent 2753 0 R
-/Kids [2710 0 R]
+/Count 11
+/Parent 2831 0 R
+/Kids [2704 0 R 2760 0 R]
>> endobj
-2753 0 obj <<
+2831 0 obj <<
/Type /Pages
-/Count 183
-/Kids [2747 0 R 2748 0 R 2749 0 R 2750 0 R 2751 0 R 2752 0 R]
+/Count 191
+/Kids [2825 0 R 2826 0 R 2827 0 R 2828 0 R 2829 0 R 2830 0 R]
>> endobj
-2754 0 obj <<
+2832 0 obj <<
/Type /Outlines
/First 7 0 R
/Last 843 0 R
/Count 10
>> endobj
+939 0 obj <<
+/Title 940 0 R
+/A 937 0 R
+/Parent 843 0 R
+/Prev 935 0 R
+>> endobj
+935 0 obj <<
+/Title 936 0 R
+/A 933 0 R
+/Parent 843 0 R
+/Prev 931 0 R
+/Next 939 0 R
+>> endobj
+931 0 obj <<
+/Title 932 0 R
+/A 929 0 R
+/Parent 843 0 R
+/Prev 927 0 R
+/Next 935 0 R
+>> endobj
927 0 obj <<
/Title 928 0 R
/A 925 0 R
/Parent 843 0 R
/Prev 923 0 R
+/Next 931 0 R
>> endobj
923 0 obj <<
/Title 924 0 R
@@ -14839,11 +15317,11 @@ endobj
843 0 obj <<
/Title 844 0 R
/A 841 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 751 0 R
/First 847 0 R
-/Last 927 0 R
-/Count -21
+/Last 939 0 R
+/Count -24
>> endobj
839 0 obj <<
/Title 840 0 R
@@ -15005,7 +15483,7 @@ endobj
751 0 obj <<
/Title 752 0 R
/A 749 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 731 0 R
/Next 843 0 R
/First 755 0 R
@@ -15042,7 +15520,7 @@ endobj
731 0 obj <<
/Title 732 0 R
/A 729 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 707 0 R
/Next 751 0 R
/First 735 0 R
@@ -15086,7 +15564,7 @@ endobj
707 0 obj <<
/Title 708 0 R
/A 705 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 363 0 R
/Next 731 0 R
/First 711 0 R
@@ -15701,7 +16179,7 @@ endobj
363 0 obj <<
/Title 364 0 R
/A 361 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 351 0 R
/Next 707 0 R
/First 367 0 R
@@ -15723,7 +16201,7 @@ endobj
351 0 obj <<
/Title 352 0 R
/A 349 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 131 0 R
/Next 363 0 R
/First 355 0 R
@@ -16120,7 +16598,7 @@ endobj
131 0 obj <<
/Title 132 0 R
/A 129 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 91 0 R
/Next 351 0 R
/First 135 0 R
@@ -16194,7 +16672,7 @@ endobj
91 0 obj <<
/Title 92 0 R
/A 89 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 67 0 R
/Next 131 0 R
/First 95 0 R
@@ -16237,7 +16715,7 @@ endobj
67 0 obj <<
/Title 68 0 R
/A 65 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Prev 7 0 R
/Next 91 0 R
/First 71 0 R
@@ -16346,2804 +16824,2882 @@ endobj
7 0 obj <<
/Title 8 0 R
/A 5 0 R
-/Parent 2754 0 R
+/Parent 2832 0 R
/Next 67 0 R
/First 11 0 R
/Last 23 0 R
/Count -4
>> endobj
-2755 0 obj <<
-/Names [(Access_Control_Lists) 2079 0 R (Bv9ARM.ch01) 1230 0 R (Bv9ARM.ch02) 1274 0 R (Bv9ARM.ch03) 1292 0 R (Bv9ARM.ch04) 1355 0 R (Bv9ARM.ch05) 1536 0 R (Bv9ARM.ch06) 1547 0 R (Bv9ARM.ch07) 2078 0 R (Bv9ARM.ch08) 2103 0 R (Bv9ARM.ch09) 2119 0 R (Bv9ARM.ch10) 2380 0 R (Configuration_File_Grammar) 1570 0 R (DNSSEC) 1421 0 R (Doc-Start) 935 0 R (Setting_TTLs) 1999 0 R (acache) 1281 0 R (access_control) 1721 0 R (acl) 1579 0 R (address_match_lists) 1552 0 R (admin_tools) 1314 0 R (appendix.A) 750 0 R (appendix.B) 842 0 R (bibliography) 2127 0 R (bind9.library) 2335 0 R (boolean_options) 1370 0 R (builtin) 1802 0 R (chapter*.1) 969 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 350 0 R (chapter.6) 362 0 R (chapter.7) 706 0 R (chapter.8) 730 0 R (cite.RFC1033) 2254 0 R (cite.RFC1034) 2139 0 R (cite.RFC1035) 2141 0 R (cite.RFC1101) 2236 0 R (cite.RFC1123) 2238 0 R (cite.RFC1183) 2198 0 R (cite.RFC1464) 2276 0 R (cite.RFC1535) 2184 0 R (cite.RFC1536) 2186 0 R (cite.RFC1537) 2256 0 R (cite.RFC1591) 2240 0 R (cite.RFC1706) 2200 0 R (cite.RFC1712) 2296 0 R (cite.RFC1713) 2278 0 R (cite.RFC1794) 2280 0 R (cite.RFC1876) 2202 0 R (cite.RFC1912) 2258 0 R (cite.RFC1982) 2188 0 R (cite.RFC1995) 2146 0 R (cite.RFC1996) 2148 0 R (cite.RFC2010) 2260 0 R (cite.RFC2052) 2204 0 R (cite.RFC2065) 2308 0 R (cite.RFC2136) 2150 0 R (cite.RFC2137) 2310 0 R (cite.RFC2163) 2206 0 R (cite.RFC2168) 2208 0 R (cite.RFC2181) 2152 0 R (cite.RFC2219) 2262 0 R (cite.RFC2230) 2210 0 R (cite.RFC2240) 2282 0 R (cite.RFC2308) 2154 0 R (cite.RFC2317) 2242 0 R (cite.RFC2345) 2284 0 R (cite.RFC2352) 2286 0 R (cite.RFC2535) 2312 0 R (cite.RFC2536) 2212 0 R (cite.RFC2537) 2214 0 R (cite.RFC2538) 2216 0 R (cite.RFC2539) 2218 0 R (cite.RFC2540) 2220 0 R (cite.RFC2671) 2156 0 R (cite.RFC2672) 2158 0 R (cite.RFC2673) 2298 0 R (cite.RFC2782) 2222 0 R (cite.RFC2825) 2266 0 R (cite.RFC2826) 2244 0 R (cite.RFC2845) 2160 0 R (cite.RFC2874) 2300 0 R (cite.RFC2915) 2224 0 R (cite.RFC2929) 2246 0 R (cite.RFC2930) 2162 0 R (cite.RFC2931) 2164 0 R (cite.RFC3007) 2166 0 R (cite.RFC3008) 2314 0 R (cite.RFC3071) 2288 0 R (cite.RFC3090) 2316 0 R (cite.RFC3110) 2226 0 R (cite.RFC3123) 2228 0 R (cite.RFC3225) 2172 0 R (cite.RFC3258) 2290 0 R (cite.RFC3445) 2318 0 R (cite.RFC3490) 2268 0 R (cite.RFC3491) 2270 0 R (cite.RFC3492) 2272 0 R (cite.RFC3596) 2230 0 R (cite.RFC3597) 2232 0 R (cite.RFC3645) 2168 0 R (cite.RFC3655) 2320 0 R (cite.RFC3658) 2322 0 R (cite.RFC3755) 2324 0 R (cite.RFC3757) 2326 0 R (cite.RFC3833) 2174 0 R (cite.RFC3845) 2328 0 R (cite.RFC3901) 2292 0 R (cite.RFC4033) 2176 0 R (cite.RFC4034) 2178 0 R (cite.RFC4035) 2180 0 R (cite.RFC4074) 2190 0 R (cite.RFC974) 2143 0 R (cite.id2512276) 2333 0 R (clients-per-query) 2053 0 R (configuration_file_elements) 1548 0 R (controls_statement_definition_and_usage) 1338 0 R (diagnostic_tools) 1262 0 R (dnssec.dynamic.zones) 1441 0 R (dynamic_update) 1365 0 R (dynamic_update_policies) 1327 0 R (dynamic_update_security) 1732 0 R (empty) 1804 0 R (historical_dns_information) 2121 0 R (id2466567) 1231 0 R (id2466590) 1232 0 R (id2467233) 1405 0 R (id2467243) 1406 0 R (id2467280) 1411 0 R (id2467337) 1412 0 R (id2467481) 1233 0 R (id2467491) 1234 0 R (id2467731) 1244 0 R (id2467752) 1245 0 R (id2467786) 1246 0 R (id2467870) 1249 0 R (id2467963) 1242 0 R (id2470268) 1256 0 R (id2470292) 1259 0 R (id2470390) 1260 0 R (id2470411) 1261 0 R (id2470441) 1267 0 R (id2470476) 1268 0 R (id2470571) 1269 0 R (id2470605) 1275 0 R (id2470632) 1276 0 R (id2470713) 1277 0 R (id2470739) 1280 0 R (id2470749) 1286 0 R (id2470781) 1294 0 R (id2470797) 1295 0 R (id2470820) 1300 0 R (id2470837) 1301 0 R (id2471242) 1309 0 R (id2471248) 1310 0 R (id2473363) 1343 0 R (id2473374) 1344 0 R (id2473876) 1380 0 R (id2473894) 1386 0 R (id2474464) 1402 0 R (id2474481) 1403 0 R (id2474519) 1404 0 R (id2474896) 1414 0 R (id2474909) 1415 0 R (id2475027) 1420 0 R (id2475163) 1422 0 R (id2475310) 1427 0 R (id2475392) 1428 0 R (id2475612) 1442 0 R (id2475786) 1447 0 R (id2475822) 1448 0 R (id2475905) 1454 0 R (id2475942) 1461 0 R (id2475955) 1462 0 R (id2476056) 1463 0 R (id2476083) 1468 0 R (id2476092) 1469 0 R (id2476170) 1470 0 R (id2476183) 1471 0 R (id2476220) 1472 0 R (id2476230) 1473 0 R (id2476336) 1475 0 R (id2476358) 1482 0 R (id2476528) 1488 0 R (id2476692) 1494 0 R (id2476761) 1495 0 R (id2476878) 1500 0 R (id2477097) 1501 0 R (id2477106) 1502 0 R (id2477138) 1507 0 R (id2477174) 1508 0 R (id2477222) 1509 0 R (id2477253) 1510 0 R (id2477588) 1520 0 R (id2477634) 1521 0 R (id2477825) 1526 0 R (id2477955) 1528 0 R (id2477976) 1529 0 R (id2478009) 1537 0 R (id2478225) 1549 0 R (id2479049) 1557 0 R (id2479077) 1562 0 R (id2479351) 1563 0 R (id2479366) 1564 0 R (id2479396) 1569 0 R (id2479539) 1571 0 R (id2480073) 1578 0 R (id2480116) 1580 0 R (id2480263) 1582 0 R (id2480622) 1589 0 R (id2480640) 1595 0 R (id2480663) 1596 0 R (id2480686) 1597 0 R (id2480845) 1601 0 R (id2480971) 1606 0 R (id2481024) 1607 0 R (id2481649) 1618 0 R (id2482477) 1629 0 R (id2482539) 1630 0 R (id2482997) 1636 0 R (id2483070) 1637 0 R (id2483134) 1644 0 R (id2483178) 1645 0 R (id2483193) 1646 0 R (id2486510) 1684 0 R (id2488830) 1714 0 R (id2488957) 1720 0 R (id2489509) 1731 0 R (id2490718) 1754 0 R (id2490778) 1756 0 R (id2491132) 1765 0 R (id2491703) 1783 0 R (id2493307) 1814 0 R (id2493498) 1824 0 R (id2494690) 1846 0 R (id2494829) 1848 0 R (id2494876) 1854 0 R (id2495234) 1859 0 R (id2496921) 1877 0 R (id2496929) 1878 0 R (id2496934) 1879 0 R (id2497474) 1886 0 R (id2497507) 1892 0 R (id2499730) 1954 0 R (id2500393) 1964 0 R (id2500480) 1965 0 R (id2500500) 1968 0 R (id2500668) 1974 0 R (id2501838) 1981 0 R (id2501966) 1987 0 R (id2502056) 1988 0 R (id2502419) 1990 0 R (id2502555) 1992 0 R (id2502573) 1997 0 R (id2503114) 2000 0 R (id2503239) 2002 0 R (id2503254) 2003 0 R (id2503366) 2009 0 R (id2503388) 2010 0 R (id2503404) 2011 0 R (id2503465) 2012 0 R (id2503534) 2017 0 R (id2503571) 2018 0 R (id2503646) 2019 0 R (id2504226) 2031 0 R (id2504661) 2039 0 R (id2504666) 2040 0 R (id2506134) 2047 0 R (id2506140) 2048 0 R (id2506517) 2050 0 R (id2506522) 2051 0 R (id2507607) 2058 0 R (id2507639) 2059 0 R (id2508049) 2068 0 R (id2508222) 2088 0 R (id2508372) 2089 0 R (id2508432) 2090 0 R (id2508512) 2104 0 R (id2508517) 2105 0 R (id2508529) 2106 0 R (id2508546) 2107 0 R (id2508744) 2120 0 R (id2509052) 2126 0 R (id2509172) 2131 0 R (id2509174) 2137 0 R (id2509182) 2142 0 R (id2509206) 2138 0 R (id2509298) 2140 0 R (id2509334) 2151 0 R (id2509361) 2153 0 R (id2509386) 2145 0 R (id2509411) 2147 0 R (id2509434) 2149 0 R (id2509490) 2155 0 R (id2509516) 2157 0 R (id2509543) 2159 0 R (id2509605) 2161 0 R (id2509635) 2163 0 R (id2509665) 2165 0 R (id2509691) 2167 0 R (id2509766) 2170 0 R (id2509773) 2171 0 R (id2509800) 2173 0 R (id2509836) 2175 0 R (id2509901) 2177 0 R (id2510035) 2179 0 R (id2510100) 2182 0 R (id2510108) 2183 0 R (id2510134) 2185 0 R (id2510202) 2187 0 R (id2510237) 2189 0 R (id2510278) 2196 0 R (id2510283) 2197 0 R (id2510341) 2199 0 R (id2510378) 2207 0 R (id2510413) 2201 0 R (id2510468) 2203 0 R (id2510506) 2205 0 R (id2510532) 2209 0 R (id2510557) 2211 0 R (id2510584) 2213 0 R (id2510611) 2215 0 R (id2510650) 2217 0 R (id2510680) 2219 0 R (id2510710) 2221 0 R (id2510753) 2223 0 R (id2510786) 2225 0 R (id2510812) 2227 0 R (id2510836) 2229 0 R (id2510893) 2231 0 R (id2510918) 2234 0 R (id2510925) 2235 0 R (id2510951) 2237 0 R (id2510973) 2239 0 R (id2510997) 2241 0 R (id2511043) 2243 0 R (id2511066) 2245 0 R (id2511116) 2252 0 R (id2511124) 2253 0 R (id2511147) 2255 0 R (id2511174) 2257 0 R (id2511201) 2259 0 R (id2511237) 2261 0 R (id2511277) 2264 0 R (id2511283) 2265 0 R (id2511315) 2267 0 R (id2511361) 2269 0 R (id2511396) 2271 0 R (id2511422) 2274 0 R (id2511441) 2275 0 R (id2511531) 2277 0 R (id2511557) 2279 0 R (id2511582) 2281 0 R (id2511606) 2283 0 R (id2511652) 2285 0 R (id2511675) 2287 0 R (id2511702) 2289 0 R (id2511728) 2291 0 R (id2511765) 2294 0 R (id2511771) 2295 0 R (id2511829) 2297 0 R (id2511856) 2299 0 R (id2511892) 2306 0 R (id2511904) 2307 0 R (id2511943) 2309 0 R (id2511970) 2311 0 R (id2512000) 2313 0 R (id2512025) 2315 0 R (id2512052) 2317 0 R (id2512088) 2319 0 R (id2512124) 2321 0 R (id2512151) 2323 0 R (id2512178) 2325 0 R (id2512222) 2327 0 R (id2512264) 2330 0 R (id2512274) 2332 0 R (id2512276) 2334 0 R (id2512432) 2341 0 R (id2512441) 2342 0 R (id2512466) 2343 0 R (id2512497) 2344 0 R (id2512642) 2349 0 R (id2512668) 2351 0 R (id2512677) 2352 0 R (id2512768) 2357 0 R (id2512821) 2358 0 R (id2512885) 2359 0 R (id2512968) 2364 0 R (id2513099) 2369 0 R (id2513300) 2370 0 R (incremental_zone_transfers) 1377 0 R (internet_drafts) 2329 0 R (ipv6addresses) 1531 0 R (journal) 1376 0 R (lwresd) 1538 0 R (man.arpaname) 2689 0 R (man.ddns-confgen) 2678 0 R (man.dig) 2381 0 R (man.dnssec-dsfromkey) 2429 0 R (man.dnssec-keyfromlabel) 2447 0 R (man.dnssec-keygen) 1455 0 R (man.dnssec-revoke) 2490 0 R (man.dnssec-settime) 1456 0 R (man.dnssec-signzone) 2518 0 R (man.genrandom) 2695 0 R (man.host) 2413 0 R (man.isc-hmac-fixup) 2706 0 R (man.named) 2575 0 R (man.named-checkconf) 2542 0 R (man.named-checkzone) 2554 0 R (man.named-journalprint) 2597 0 R (man.nsec3hash) 2718 0 R (man.nsupdate) 2608 0 R (man.rndc) 2633 0 R (man.rndc-confgen) 2662 0 R (man.rndc.conf) 2645 0 R (managed-keys) 1477 0 R (notify) 1356 0 R (options) 1326 0 R (page.1) 934 0 R (page.10) 1318 0 R (page.100) 1959 0 R (page.101) 1963 0 R (page.102) 1973 0 R (page.103) 1980 0 R (page.104) 1986 0 R (page.105) 1996 0 R (page.106) 2008 0 R (page.107) 2016 0 R (page.108) 2024 0 R (page.109) 2029 0 R (page.11) 1331 0 R (page.110) 2037 0 R (page.111) 2045 0 R (page.112) 2057 0 R (page.113) 2064 0 R (page.114) 2072 0 R (page.115) 2077 0 R (page.116) 2083 0 R (page.117) 2094 0 R (page.118) 2098 0 R (page.119) 2102 0 R (page.12) 1335 0 R (page.120) 2113 0 R (page.121) 2118 0 R (page.122) 2125 0 R (page.123) 2135 0 R (page.124) 2194 0 R (page.125) 2250 0 R (page.126) 2304 0 R (page.127) 2340 0 R (page.128) 2348 0 R (page.129) 2356 0 R (page.13) 1342 0 R (page.130) 2363 0 R (page.131) 2368 0 R (page.132) 2374 0 R (page.133) 2379 0 R (page.134) 2388 0 R (page.135) 2394 0 R (page.136) 2399 0 R (page.137) 2403 0 R (page.138) 2408 0 R (page.139) 2420 0 R (page.14) 1349 0 R (page.140) 2425 0 R (page.141) 2437 0 R (page.142) 2446 0 R (page.143) 2455 0 R (page.144) 2460 0 R (page.145) 2470 0 R (page.146) 2476 0 R (page.147) 2480 0 R (page.148) 2486 0 R (page.149) 2497 0 R (page.15) 1354 0 R (page.150) 2507 0 R (page.151) 2514 0 R (page.152) 2524 0 R (page.153) 2530 0 R (page.154) 2534 0 R (page.155) 2538 0 R (page.156) 2548 0 R (page.157) 2560 0 R (page.158) 2567 0 R (page.159) 2571 0 R (page.16) 1375 0 R (page.160) 2583 0 R (page.161) 2587 0 R (page.162) 2594 0 R (page.163) 2607 0 R (page.164) 2615 0 R (page.165) 2620 0 R (page.166) 2624 0 R (page.167) 2632 0 R (page.168) 2641 0 R (page.169) 2653 0 R (page.17) 1385 0 R (page.170) 2658 0 R (page.171) 2670 0 R (page.172) 2676 0 R (page.173) 2686 0 R (page.174) 2700 0 R (page.175) 2714 0 R (page.176) 2727 0 R (page.18) 1390 0 R (page.19) 1396 0 R (page.2) 958 0 R (page.20) 1401 0 R (page.21) 1410 0 R (page.22) 1419 0 R (page.23) 1426 0 R (page.24) 1432 0 R (page.25) 1437 0 R (page.26) 1446 0 R (page.27) 1460 0 R (page.28) 1467 0 R (page.29) 1481 0 R (page.3) 1255 0 R (page.30) 1487 0 R (page.31) 1493 0 R (page.32) 1499 0 R (page.33) 1506 0 R (page.34) 1514 0 R (page.35) 1519 0 R (page.36) 1525 0 R (page.37) 1535 0 R (page.38) 1542 0 R (page.39) 1546 0 R (page.4) 1266 0 R (page.40) 1556 0 R (page.41) 1561 0 R (page.42) 1568 0 R (page.43) 1577 0 R (page.44) 1586 0 R (page.45) 1594 0 R (page.46) 1605 0 R (page.47) 1611 0 R (page.48) 1617 0 R (page.49) 1624 0 R (page.5) 1273 0 R (page.50) 1628 0 R (page.51) 1635 0 R (page.52) 1643 0 R (page.53) 1650 0 R (page.54) 1654 0 R (page.55) 1659 0 R (page.56) 1663 0 R (page.57) 1667 0 R (page.58) 1673 0 R (page.59) 1678 0 R (page.6) 1285 0 R (page.60) 1683 0 R (page.61) 1690 0 R (page.62) 1695 0 R (page.63) 1705 0 R (page.64) 1709 0 R (page.65) 1713 0 R (page.66) 1718 0 R (page.67) 1728 0 R (page.68) 1736 0 R (page.69) 1741 0 R (page.7) 1291 0 R (page.70) 1745 0 R (page.71) 1749 0 R (page.72) 1753 0 R (page.73) 1762 0 R (page.74) 1769 0 R (page.75) 1774 0 R (page.76) 1781 0 R (page.77) 1788 0 R (page.78) 1794 0 R (page.79) 1801 0 R (page.8) 1299 0 R (page.80) 1809 0 R (page.81) 1813 0 R (page.82) 1818 0 R (page.83) 1823 0 R (page.84) 1828 0 R (page.85) 1833 0 R (page.86) 1838 0 R (page.87) 1844 0 R (page.88) 1853 0 R (page.89) 1858 0 R (page.9) 1308 0 R (page.90) 1863 0 R (page.91) 1868 0 R (page.92) 1872 0 R (page.93) 1876 0 R (page.94) 1884 0 R (page.95) 1891 0 R (page.96) 1911 0 R (page.97) 1926 0 R (page.98) 1937 0 R (page.99) 1953 0 R (page.i) 968 0 R (page.ii) 1023 0 R (page.iii) 1087 0 R (page.iv) 1150 0 R (page.v) 1212 0 R (pkcs11) 1483 0 R (proposed_standards) 1381 0 R (query_address) 1737 0 R (rfc5011.support) 1474 0 R (rfcs) 1251 0 R (rndc) 1590 0 R (root_delegation_only) 1887 0 R (rrset_ordering) 1304 0 R (sample_configuration) 1293 0 R (section*.10) 2263 0 R (section*.100) 2595 0 R (section*.101) 2596 0 R (section*.102) 2598 0 R (section*.103) 2599 0 R (section*.104) 2600 0 R (section*.105) 2601 0 R (section*.106) 2602 0 R (section*.107) 2609 0 R (section*.108) 2610 0 R (section*.109) 2611 0 R (section*.11) 2273 0 R (section*.110) 2616 0 R (section*.111) 2625 0 R (section*.112) 2626 0 R (section*.113) 2627 0 R (section*.114) 2628 0 R (section*.115) 2634 0 R (section*.116) 2635 0 R (section*.117) 2636 0 R (section*.118) 2637 0 R (section*.119) 2642 0 R (section*.12) 2293 0 R (section*.120) 2643 0 R (section*.121) 2644 0 R (section*.122) 2646 0 R (section*.123) 2647 0 R (section*.124) 2648 0 R (section*.125) 2654 0 R (section*.126) 2659 0 R (section*.127) 2660 0 R (section*.128) 2661 0 R (section*.129) 2663 0 R (section*.13) 2305 0 R (section*.130) 2664 0 R (section*.131) 2665 0 R (section*.132) 2666 0 R (section*.133) 2671 0 R (section*.134) 2672 0 R (section*.135) 2677 0 R (section*.136) 2679 0 R (section*.137) 2680 0 R (section*.138) 2681 0 R (section*.139) 2682 0 R (section*.14) 2331 0 R (section*.140) 2687 0 R (section*.141) 2688 0 R (section*.142) 2690 0 R (section*.143) 2691 0 R (section*.144) 2692 0 R (section*.145) 2693 0 R (section*.146) 2694 0 R (section*.147) 2696 0 R (section*.148) 2701 0 R (section*.149) 2702 0 R (section*.15) 2382 0 R (section*.150) 2703 0 R (section*.151) 2704 0 R (section*.152) 2705 0 R (section*.153) 2707 0 R (section*.154) 2708 0 R (section*.155) 2709 0 R (section*.156) 2715 0 R (section*.157) 2716 0 R (section*.158) 2717 0 R (section*.159) 2719 0 R (section*.16) 2383 0 R (section*.160) 2720 0 R (section*.161) 2721 0 R (section*.162) 2722 0 R (section*.163) 2723 0 R (section*.164) 2728 0 R (section*.17) 2384 0 R (section*.18) 2389 0 R (section*.19) 2390 0 R (section*.2) 2130 0 R (section*.20) 2395 0 R (section*.21) 2404 0 R (section*.22) 2409 0 R (section*.23) 2410 0 R (section*.24) 2411 0 R (section*.25) 2412 0 R (section*.26) 2414 0 R (section*.27) 2415 0 R (section*.28) 2421 0 R (section*.29) 2426 0 R (section*.3) 2136 0 R (section*.30) 2427 0 R (section*.31) 2428 0 R (section*.32) 2430 0 R (section*.33) 2431 0 R (section*.34) 2432 0 R (section*.35) 2433 0 R (section*.36) 2438 0 R (section*.37) 2439 0 R (section*.38) 2440 0 R (section*.39) 2441 0 R (section*.4) 2144 0 R (section*.40) 2442 0 R (section*.41) 2448 0 R (section*.42) 2449 0 R (section*.43) 2450 0 R (section*.44) 2451 0 R (section*.45) 2456 0 R (section*.46) 2461 0 R (section*.47) 2462 0 R (section*.48) 2463 0 R (section*.49) 2464 0 R (section*.5) 2169 0 R (section*.50) 2465 0 R (section*.51) 2471 0 R (section*.52) 2472 0 R (section*.53) 2481 0 R (section*.54) 2482 0 R (section*.55) 2487 0 R (section*.56) 2488 0 R (section*.57) 2489 0 R (section*.58) 2491 0 R (section*.59) 2492 0 R (section*.6) 2181 0 R (section*.60) 2493 0 R (section*.61) 2498 0 R (section*.62) 2499 0 R (section*.63) 2500 0 R (section*.64) 2501 0 R (section*.65) 2502 0 R (section*.66) 2503 0 R (section*.67) 2508 0 R (section*.68) 2509 0 R (section*.69) 2515 0 R (section*.7) 2195 0 R (section*.70) 2516 0 R (section*.71) 2517 0 R (section*.72) 2519 0 R (section*.73) 2520 0 R (section*.74) 2525 0 R (section*.75) 2526 0 R (section*.76) 2539 0 R (section*.77) 2540 0 R (section*.78) 2541 0 R (section*.79) 2543 0 R (section*.8) 2233 0 R (section*.80) 2544 0 R (section*.81) 2549 0 R (section*.82) 2550 0 R (section*.83) 2551 0 R (section*.84) 2552 0 R (section*.85) 2553 0 R (section*.86) 2555 0 R (section*.87) 2561 0 R (section*.88) 2562 0 R (section*.89) 2563 0 R (section*.9) 2251 0 R (section*.90) 2572 0 R (section*.91) 2573 0 R (section*.92) 2574 0 R (section*.93) 2576 0 R (section*.94) 2577 0 R (section*.95) 2578 0 R (section*.96) 2579 0 R (section*.97) 2588 0 R (section*.98) 2589 0 R (section*.99) 2590 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.10) 274 0 R (section.4.11) 286 0 R (section.4.12) 338 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 354 0 R (section.5.2) 358 0 R (section.6.1) 366 0 R (section.6.2) 394 0 R (section.6.3) 618 0 R (section.6.4) 674 0 R (section.7.1) 710 0 R (section.7.2) 714 0 R (section.7.3) 726 0 R (section.8.1) 734 0 R (section.8.2) 742 0 R (section.8.3) 746 0 R (section.A.1) 754 0 R (section.A.2) 762 0 R (section.A.3) 770 0 R (section.A.4) 786 0 R (section.B.1) 846 0 R (section.B.10) 882 0 R (section.B.11) 886 0 R (section.B.12) 890 0 R (section.B.13) 894 0 R (section.B.14) 898 0 R (section.B.15) 902 0 R (section.B.16) 906 0 R (section.B.17) 910 0 R (section.B.18) 914 0 R (section.B.19) 918 0 R (section.B.2) 850 0 R (section.B.20) 922 0 R (section.B.21) 926 0 R (section.B.3) 854 0 R (section.B.4) 858 0 R (section.B.5) 862 0 R (section.B.6) 866 0 R (section.B.7) 870 0 R (section.B.8) 874 0 R (section.B.9) 878 0 R (server_resource_limits) 1763 0 R (server_statement_definition_and_usage) 1701 0 R (server_statement_grammar) 1834 0 R (statistics) 2030 0 R (statistics_counters) 2038 0 R (statschannels) 1845 0 R (statsfile) 1669 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.10.1) 278 0 R (subsection.4.10.2) 282 0 R (subsection.4.11.1) 290 0 R (subsection.4.11.2) 306 0 R (subsection.4.11.3) 322 0 R (subsection.4.11.4) 326 0 R (subsection.4.11.5) 330 0 R (subsection.4.11.6) 334 0 R (subsection.4.12.1) 342 0 R (subsection.4.12.2) 346 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.10) 258 0 R (subsection.4.9.11) 262 0 R (subsection.4.9.12) 266 0 R (subsection.4.9.13) 270 0 R (subsection.4.9.2) 226 0 R (subsection.4.9.3) 230 0 R (subsection.4.9.4) 234 0 R (subsection.4.9.5) 238 0 R (subsection.4.9.6) 242 0 R (subsection.4.9.7) 246 0 R (subsection.4.9.8) 250 0 R (subsection.4.9.9) 254 0 R (subsection.6.1.1) 370 0 R (subsection.6.1.2) 382 0 R (subsection.6.2.1) 398 0 R (subsection.6.2.10) 434 0 R (subsection.6.2.11) 450 0 R (subsection.6.2.12) 454 0 R (subsection.6.2.13) 458 0 R (subsection.6.2.14) 462 0 R (subsection.6.2.15) 466 0 R (subsection.6.2.16) 470 0 R (subsection.6.2.17) 554 0 R (subsection.6.2.18) 558 0 R (subsection.6.2.19) 562 0 R (subsection.6.2.2) 402 0 R (subsection.6.2.20) 566 0 R (subsection.6.2.21) 570 0 R (subsection.6.2.22) 574 0 R (subsection.6.2.23) 578 0 R (subsection.6.2.24) 582 0 R (subsection.6.2.25) 586 0 R (subsection.6.2.26) 590 0 R (subsection.6.2.27) 594 0 R (subsection.6.2.28) 598 0 R (subsection.6.2.3) 406 0 R (subsection.6.2.4) 410 0 R (subsection.6.2.5) 414 0 R (subsection.6.2.6) 418 0 R (subsection.6.2.7) 422 0 R (subsection.6.2.8) 426 0 R (subsection.6.2.9) 430 0 R (subsection.6.3.1) 622 0 R (subsection.6.3.2) 634 0 R (subsection.6.3.3) 638 0 R (subsection.6.3.4) 642 0 R (subsection.6.3.5) 646 0 R (subsection.6.3.6) 666 0 R (subsection.6.3.7) 670 0 R (subsection.6.4.1) 682 0 R (subsection.7.2.1) 718 0 R (subsection.7.2.2) 722 0 R (subsection.8.1.1) 738 0 R (subsection.A.1.1) 758 0 R (subsection.A.2.1) 766 0 R (subsection.A.3.1) 774 0 R (subsection.A.3.2) 778 0 R (subsection.A.3.3) 782 0 R (subsection.A.4.1) 790 0 R (subsection.A.4.2) 794 0 R (subsection.A.4.3) 798 0 R (subsection.A.4.4) 802 0 R (subsection.A.4.5) 806 0 R (subsection.A.4.6) 810 0 R (subsection.A.4.7) 838 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.11.1.1) 294 0 R (subsubsection.4.11.1.2) 298 0 R (subsubsection.4.11.1.3) 302 0 R (subsubsection.4.11.2.1) 310 0 R (subsubsection.4.11.2.2) 314 0 R (subsubsection.4.11.2.3) 318 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 374 0 R (subsubsection.6.1.1.2) 378 0 R (subsubsection.6.1.2.1) 386 0 R (subsubsection.6.1.2.2) 390 0 R (subsubsection.6.2.10.1) 438 0 R (subsubsection.6.2.10.2) 442 0 R (subsubsection.6.2.10.3) 446 0 R (subsubsection.6.2.16.1) 474 0 R (subsubsection.6.2.16.10) 510 0 R (subsubsection.6.2.16.11) 514 0 R (subsubsection.6.2.16.12) 518 0 R (subsubsection.6.2.16.13) 522 0 R (subsubsection.6.2.16.14) 526 0 R (subsubsection.6.2.16.15) 530 0 R (subsubsection.6.2.16.16) 534 0 R (subsubsection.6.2.16.17) 538 0 R (subsubsection.6.2.16.18) 542 0 R (subsubsection.6.2.16.19) 546 0 R (subsubsection.6.2.16.2) 478 0 R (subsubsection.6.2.16.20) 550 0 R (subsubsection.6.2.16.3) 482 0 R (subsubsection.6.2.16.4) 486 0 R (subsubsection.6.2.16.5) 490 0 R (subsubsection.6.2.16.6) 494 0 R (subsubsection.6.2.16.7) 498 0 R (subsubsection.6.2.16.8) 502 0 R (subsubsection.6.2.16.9) 506 0 R (subsubsection.6.2.28.1) 602 0 R (subsubsection.6.2.28.2) 606 0 R (subsubsection.6.2.28.3) 610 0 R (subsubsection.6.2.28.4) 614 0 R (subsubsection.6.3.1.1) 626 0 R (subsubsection.6.3.1.2) 630 0 R (subsubsection.6.3.5.1) 650 0 R (subsubsection.6.3.5.2) 654 0 R (subsubsection.6.3.5.3) 658 0 R (subsubsection.6.3.5.4) 662 0 R (subsubsection.6.4.0.1) 678 0 R (subsubsection.6.4.1.1) 686 0 R (subsubsection.6.4.1.2) 690 0 R (subsubsection.6.4.1.3) 694 0 R (subsubsection.6.4.1.4) 698 0 R (subsubsection.6.4.1.5) 702 0 R (subsubsection.A.4.6.1) 814 0 R (subsubsection.A.4.6.2) 818 0 R (subsubsection.A.4.6.3) 822 0 R (subsubsection.A.4.6.4) 826 0 R (subsubsection.A.4.6.5) 830 0 R (subsubsection.A.4.6.6) 834 0 R (table.1.1) 1235 0 R (table.1.2) 1243 0 R (table.3.1) 1302 0 R (table.3.2) 1345 0 R (table.6.1) 1550 0 R (table.6.10) 1969 0 R (table.6.11) 1975 0 R (table.6.12) 1982 0 R (table.6.13) 1989 0 R (table.6.14) 1991 0 R (table.6.15) 1998 0 R (table.6.16) 2001 0 R (table.6.17) 2004 0 R (table.6.18) 2020 0 R (table.6.19) 2032 0 R (table.6.2) 1572 0 R (table.6.20) 2041 0 R (table.6.21) 2049 0 R (table.6.22) 2052 0 R (table.6.23) 2060 0 R (table.6.3) 1581 0 R (table.6.4) 1619 0 R (table.6.5) 1631 0 R (table.6.6) 1685 0 R (table.6.7) 1784 0 R (table.6.8) 1880 0 R (table.6.9) 1955 0 R (the_category_phrase) 1613 0 R (the_sortlist_statement) 1775 0 R (topology) 1770 0 R (trusted-keys) 1847 0 R (tsig) 1397 0 R (tuning) 1789 0 R (types_of_resource_records_and_when_to_use_them) 1250 0 R (view_statement_grammar) 1805 0 R (zone_statement_grammar) 1724 0 R (zone_transfers) 1371 0 R (zonefile_format) 1797 0 R]
+2833 0 obj <<
+/Names [(Access_Control_Lists) 2120 0 R (Bv9ARM.ch01) 1245 0 R (Bv9ARM.ch02) 1289 0 R (Bv9ARM.ch03) 1307 0 R (Bv9ARM.ch04) 1373 0 R (Bv9ARM.ch05) 1551 0 R (Bv9ARM.ch06) 1562 0 R (Bv9ARM.ch07) 2119 0 R (Bv9ARM.ch08) 2144 0 R (Bv9ARM.ch09) 2159 0 R (Bv9ARM.ch10) 2420 0 R (Configuration_File_Grammar) 1585 0 R (DNSSEC) 1439 0 R (Doc-Start) 947 0 R (Setting_TTLs) 2045 0 R (acache) 1296 0 R (access_control) 1744 0 R (acl) 1594 0 R (address_match_lists) 1567 0 R (admin_tools) 1329 0 R (appendix.A) 750 0 R (appendix.B) 842 0 R (bibliography) 2167 0 R (bind9.library) 2376 0 R (boolean_options) 1388 0 R (builtin) 1824 0 R (chapter*.1) 981 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 350 0 R (chapter.6) 362 0 R (chapter.7) 706 0 R (chapter.8) 730 0 R (cite.RFC1033) 2295 0 R (cite.RFC1034) 2180 0 R (cite.RFC1035) 2182 0 R (cite.RFC1101) 2277 0 R (cite.RFC1123) 2279 0 R (cite.RFC1183) 2239 0 R (cite.RFC1464) 2317 0 R (cite.RFC1535) 2225 0 R (cite.RFC1536) 2227 0 R (cite.RFC1537) 2297 0 R (cite.RFC1591) 2281 0 R (cite.RFC1706) 2241 0 R (cite.RFC1712) 2337 0 R (cite.RFC1713) 2319 0 R (cite.RFC1794) 2321 0 R (cite.RFC1876) 2243 0 R (cite.RFC1912) 2299 0 R (cite.RFC1982) 2229 0 R (cite.RFC1995) 2187 0 R (cite.RFC1996) 2189 0 R (cite.RFC2010) 2301 0 R (cite.RFC2052) 2245 0 R (cite.RFC2065) 2349 0 R (cite.RFC2136) 2191 0 R (cite.RFC2137) 2351 0 R (cite.RFC2163) 2247 0 R (cite.RFC2168) 2249 0 R (cite.RFC2181) 2193 0 R (cite.RFC2219) 2303 0 R (cite.RFC2230) 2251 0 R (cite.RFC2240) 2323 0 R (cite.RFC2308) 2195 0 R (cite.RFC2317) 2283 0 R (cite.RFC2345) 2325 0 R (cite.RFC2352) 2327 0 R (cite.RFC2535) 2353 0 R (cite.RFC2536) 2253 0 R (cite.RFC2537) 2255 0 R (cite.RFC2538) 2257 0 R (cite.RFC2539) 2259 0 R (cite.RFC2540) 2261 0 R (cite.RFC2671) 2197 0 R (cite.RFC2672) 2199 0 R (cite.RFC2673) 2339 0 R (cite.RFC2782) 2263 0 R (cite.RFC2825) 2307 0 R (cite.RFC2826) 2285 0 R (cite.RFC2845) 2201 0 R (cite.RFC2874) 2341 0 R (cite.RFC2915) 2265 0 R (cite.RFC2929) 2287 0 R (cite.RFC2930) 2203 0 R (cite.RFC2931) 2205 0 R (cite.RFC3007) 2207 0 R (cite.RFC3008) 2355 0 R (cite.RFC3071) 2329 0 R (cite.RFC3090) 2357 0 R (cite.RFC3110) 2267 0 R (cite.RFC3123) 2269 0 R (cite.RFC3225) 2213 0 R (cite.RFC3258) 2331 0 R (cite.RFC3445) 2359 0 R (cite.RFC3490) 2309 0 R (cite.RFC3491) 2311 0 R (cite.RFC3492) 2313 0 R (cite.RFC3596) 2271 0 R (cite.RFC3597) 2273 0 R (cite.RFC3645) 2209 0 R (cite.RFC3655) 2361 0 R (cite.RFC3658) 2363 0 R (cite.RFC3755) 2365 0 R (cite.RFC3757) 2367 0 R (cite.RFC3833) 2215 0 R (cite.RFC3845) 2369 0 R (cite.RFC3901) 2333 0 R (cite.RFC4033) 2217 0 R (cite.RFC4034) 2219 0 R (cite.RFC4035) 2221 0 R (cite.RFC4074) 2231 0 R (cite.RFC974) 2184 0 R (cite.id2513817) 2374 0 R (clients-per-query) 2099 0 R (configuration_file_elements) 1563 0 R (controls_statement_definition_and_usage) 1360 0 R (diagnostic_tools) 1277 0 R (dnssec.dynamic.zones) 1459 0 R (dynamic_update) 1383 0 R (dynamic_update_policies) 1342 0 R (dynamic_update_security) 1753 0 R (empty) 1826 0 R (historical_dns_information) 2161 0 R (id2466570) 1246 0 R (id2466594) 1247 0 R (id2467262) 1509 0 R (id2467400) 1510 0 R (id2467484) 1248 0 R (id2467494) 1249 0 R (id2467734) 1259 0 R (id2467755) 1260 0 R (id2467789) 1261 0 R (id2467874) 1264 0 R (id2467966) 1257 0 R (id2470272) 1271 0 R (id2470295) 1274 0 R (id2470393) 1275 0 R (id2470414) 1276 0 R (id2470444) 1282 0 R (id2470480) 1283 0 R (id2470574) 1284 0 R (id2470609) 1290 0 R (id2470635) 1291 0 R (id2470716) 1292 0 R (id2470742) 1295 0 R (id2470753) 1301 0 R (id2470785) 1309 0 R (id2470801) 1310 0 R (id2470823) 1315 0 R (id2470840) 1316 0 R (id2471245) 1324 0 R (id2471251) 1325 0 R (id2473610) 1365 0 R (id2473622) 1366 0 R (id2474049) 1398 0 R (id2474135) 1404 0 R (id2474636) 1420 0 R (id2474653) 1421 0 R (id2474692) 1422 0 R (id2474710) 1423 0 R (id2474721) 1424 0 R (id2474825) 1429 0 R (id2474883) 1430 0 R (id2474932) 1432 0 R (id2474946) 1433 0 R (id2474995) 1438 0 R (id2475200) 1440 0 R (id2475347) 1445 0 R (id2475428) 1446 0 R (id2475581) 1460 0 R (id2475619) 1461 0 R (id2475928) 1466 0 R (id2476100) 1475 0 R (id2476137) 1476 0 R (id2476150) 1477 0 R (id2476251) 1478 0 R (id2476278) 1483 0 R (id2476288) 1484 0 R (id2476297) 1485 0 R (id2476310) 1486 0 R (id2476347) 1487 0 R (id2476357) 1488 0 R (id2476462) 1494 0 R (id2476485) 1496 0 R (id2476724) 1503 0 R (id2477211) 1515 0 R (id2477430) 1520 0 R (id2477438) 1521 0 R (id2477470) 1522 0 R (id2477507) 1523 0 R (id2477555) 1524 0 R (id2477586) 1529 0 R (id2477852) 1535 0 R (id2478035) 1536 0 R (id2478157) 1541 0 R (id2478219) 1543 0 R (id2478241) 1544 0 R (id2478274) 1552 0 R (id2478489) 1564 0 R (id2479520) 1576 0 R (id2479547) 1577 0 R (id2479753) 1578 0 R (id2479768) 1583 0 R (id2479866) 1584 0 R (id2479941) 1586 0 R (id2480345) 1593 0 R (id2480388) 1595 0 R (id2480603) 1601 0 R (id2481031) 1609 0 R (id2481048) 1610 0 R (id2481072) 1611 0 R (id2481163) 1612 0 R (id2481254) 1616 0 R (id2481380) 1621 0 R (id2481500) 1622 0 R (id2482125) 1633 0 R (id2482819) 1644 0 R (id2482949) 1645 0 R (id2483338) 1651 0 R (id2483412) 1656 0 R (id2483544) 1659 0 R (id2483588) 1660 0 R (id2483609) 1661 0 R (id2487332) 1706 0 R (id2489504) 1736 0 R (id2489699) 1743 0 R (id2490123) 1758 0 R (id2491409) 1777 0 R (id2491468) 1779 0 R (id2491959) 1791 0 R (id2492530) 1805 0 R (id2494333) 1844 0 R (id2494459) 1851 0 R (id2495723) 1876 0 R (id2495962) 1883 0 R (id2496077) 1890 0 R (id2496519) 1895 0 R (id2498299) 1912 0 R (id2498307) 1913 0 R (id2498312) 1914 0 R (id2498983) 1930 0 R (id2499016) 1931 0 R (id2501322) 2000 0 R (id2501917) 2010 0 R (id2501936) 2011 0 R (id2501956) 2014 0 R (id2502124) 2020 0 R (id2503363) 2026 0 R (id2503559) 2033 0 R (id2503580) 2034 0 R (id2503875) 2036 0 R (id2504011) 2038 0 R (id2504098) 2043 0 R (id2504502) 2046 0 R (id2504627) 2048 0 R (id2504642) 2049 0 R (id2504754) 2055 0 R (id2504844) 2056 0 R (id2504860) 2057 0 R (id2504989) 2058 0 R (id2505059) 2063 0 R (id2505095) 2064 0 R (id2505307) 2065 0 R (id2505750) 2076 0 R (id2506117) 2085 0 R (id2506122) 2086 0 R (id2507690) 2093 0 R (id2507697) 2094 0 R (id2508073) 2096 0 R (id2508078) 2097 0 R (id2509163) 2104 0 R (id2509195) 2105 0 R (id2509605) 2114 0 R (id2509764) 2128 0 R (id2509913) 2129 0 R (id2509973) 2130 0 R (id2510189) 2145 0 R (id2510195) 2146 0 R (id2510206) 2147 0 R (id2510224) 2148 0 R (id2510490) 2160 0 R (id2510594) 2166 0 R (id2510850) 2171 0 R (id2510852) 2178 0 R (id2510860) 2183 0 R (id2510884) 2179 0 R (id2510907) 2181 0 R (id2510944) 2192 0 R (id2510970) 2194 0 R (id2510996) 2186 0 R (id2511020) 2188 0 R (id2511044) 2190 0 R (id2511099) 2196 0 R (id2511126) 2198 0 R (id2511153) 2200 0 R (id2511214) 2202 0 R (id2511244) 2204 0 R (id2511274) 2206 0 R (id2511301) 2208 0 R (id2511376) 2211 0 R (id2511383) 2212 0 R (id2511410) 2214 0 R (id2511446) 2216 0 R (id2511511) 2218 0 R (id2511576) 2220 0 R (id2511641) 2223 0 R (id2511650) 2224 0 R (id2511675) 2226 0 R (id2511744) 2228 0 R (id2511779) 2230 0 R (id2511819) 2237 0 R (id2511825) 2238 0 R (id2511882) 2240 0 R (id2511920) 2248 0 R (id2511955) 2242 0 R (id2512009) 2244 0 R (id2512048) 2246 0 R (id2512073) 2250 0 R (id2512099) 2252 0 R (id2512125) 2254 0 R (id2512152) 2256 0 R (id2512192) 2258 0 R (id2512221) 2260 0 R (id2512251) 2262 0 R (id2512294) 2264 0 R (id2512327) 2266 0 R (id2512354) 2268 0 R (id2512377) 2270 0 R (id2512435) 2272 0 R (id2512459) 2275 0 R (id2512467) 2276 0 R (id2512492) 2278 0 R (id2512515) 2280 0 R (id2512538) 2282 0 R (id2512652) 2284 0 R (id2512676) 2286 0 R (id2512726) 2293 0 R (id2512733) 2294 0 R (id2512757) 2296 0 R (id2512784) 2298 0 R (id2512810) 2300 0 R (id2512846) 2302 0 R (id2512887) 2305 0 R (id2512892) 2306 0 R (id2512924) 2308 0 R (id2512970) 2310 0 R (id2513005) 2312 0 R (id2513032) 2315 0 R (id2513050) 2316 0 R (id2513073) 2318 0 R (id2513098) 2320 0 R (id2513124) 2322 0 R (id2513147) 2324 0 R (id2513193) 2326 0 R (id2513217) 2328 0 R (id2513243) 2330 0 R (id2513269) 2332 0 R (id2513306) 2335 0 R (id2513313) 2336 0 R (id2513370) 2338 0 R (id2513397) 2340 0 R (id2513433) 2347 0 R (id2513445) 2348 0 R (id2513484) 2350 0 R (id2513511) 2352 0 R (id2513541) 2354 0 R (id2513566) 2356 0 R (id2513593) 2358 0 R (id2513629) 2360 0 R (id2513666) 2362 0 R (id2513692) 2364 0 R (id2513719) 2366 0 R (id2513764) 2368 0 R (id2513805) 2371 0 R (id2513815) 2373 0 R (id2513817) 2375 0 R (id2513973) 2381 0 R (id2513982) 2382 0 R (id2514075) 2383 0 R (id2514106) 2384 0 R (id2514183) 2389 0 R (id2514278) 2391 0 R (id2514286) 2392 0 R (id2514377) 2398 0 R (id2514499) 2399 0 R (id2514631) 2400 0 R (id2514646) 2405 0 R (id2514777) 2410 0 R (id2514841) 2411 0 R (incremental_zone_transfers) 1395 0 R (internet_drafts) 2370 0 R (ipv6addresses) 1546 0 R (journal) 1394 0 R (lwresd) 1553 0 R (man.arpaname) 2768 0 R (man.ddns-confgen) 2756 0 R (man.dig) 2421 0 R (man.dnssec-checkds) 2469 0 R (man.dnssec-coverage) 2481 0 R (man.dnssec-dsfromkey) 2496 0 R (man.dnssec-keyfromlabel) 2510 0 R (man.dnssec-keygen) 1469 0 R (man.dnssec-revoke) 2557 0 R (man.dnssec-settime) 1470 0 R (man.dnssec-signzone) 2585 0 R (man.dnssec-verify) 2614 0 R (man.genrandom) 2778 0 R (man.host) 2458 0 R (man.isc-hmac-fixup) 2789 0 R (man.named) 2653 0 R (man.named-checkconf) 2625 0 R (man.named-checkzone) 2637 0 R (man.named-journalprint) 2676 0 R (man.nsec3hash) 2796 0 R (man.nsupdate) 2686 0 R (man.rndc) 2712 0 R (man.rndc-confgen) 2744 0 R (man.rndc.conf) 2724 0 R (managed-keys) 1497 0 R (notify) 1374 0 R (options) 1341 0 R (page.1) 946 0 R (page.10) 1333 0 R (page.100) 1939 0 R (page.101) 1957 0 R (page.102) 1971 0 R (page.103) 1988 0 R (page.104) 1999 0 R (page.105) 2005 0 R (page.106) 2009 0 R (page.107) 2019 0 R (page.108) 2025 0 R (page.109) 2032 0 R (page.11) 1346 0 R (page.110) 2042 0 R (page.111) 2054 0 R (page.112) 2062 0 R (page.113) 2070 0 R (page.114) 2074 0 R (page.115) 2083 0 R (page.116) 2091 0 R (page.117) 2103 0 R (page.118) 2110 0 R (page.119) 2118 0 R (page.12) 1350 0 R (page.120) 2124 0 R (page.121) 2135 0 R (page.122) 2139 0 R (page.123) 2143 0 R (page.124) 2154 0 R (page.125) 2158 0 R (page.126) 2165 0 R (page.127) 2176 0 R (page.128) 2235 0 R (page.129) 2291 0 R (page.13) 1358 0 R (page.130) 2345 0 R (page.131) 2380 0 R (page.132) 2388 0 R (page.133) 2397 0 R (page.134) 2404 0 R (page.135) 2409 0 R (page.136) 2415 0 R (page.137) 2419 0 R (page.138) 2428 0 R (page.139) 2435 0 R (page.14) 1364 0 R (page.140) 2440 0 R (page.141) 2444 0 R (page.142) 2448 0 R (page.143) 2457 0 R (page.144) 2465 0 R (page.145) 2477 0 R (page.146) 2488 0 R (page.147) 2495 0 R (page.148) 2504 0 R (page.149) 2516 0 R (page.15) 1372 0 R (page.150) 2522 0 R (page.151) 2529 0 R (page.152) 2539 0 R (page.153) 2543 0 R (page.154) 2548 0 R (page.155) 2554 0 R (page.156) 2565 0 R (page.157) 2576 0 R (page.158) 2582 0 R (page.159) 2593 0 R (page.16) 1393 0 R (page.160) 2597 0 R (page.161) 2601 0 R (page.162) 2605 0 R (page.163) 2613 0 R (page.164) 2623 0 R (page.165) 2634 0 R (page.166) 2645 0 R (page.167) 2649 0 R (page.168) 2659 0 R (page.169) 2666 0 R (page.17) 1403 0 R (page.170) 2670 0 R (page.171) 2681 0 R (page.172) 2693 0 R (page.173) 2697 0 R (page.174) 2702 0 R (page.175) 2708 0 R (page.176) 2719 0 R (page.177) 2729 0 R (page.178) 2736 0 R (page.179) 2743 0 R (page.18) 1409 0 R (page.180) 2752 0 R (page.181) 2764 0 R (page.182) 2773 0 R (page.183) 2787 0 R (page.184) 2801 0 R (page.19) 1414 0 R (page.2) 970 0 R (page.20) 1419 0 R (page.21) 1428 0 R (page.22) 1437 0 R (page.23) 1444 0 R (page.24) 1450 0 R (page.25) 1455 0 R (page.26) 1465 0 R (page.27) 1474 0 R (page.28) 1482 0 R (page.29) 1492 0 R (page.3) 1270 0 R (page.30) 1501 0 R (page.31) 1508 0 R (page.32) 1514 0 R (page.33) 1519 0 R (page.34) 1528 0 R (page.35) 1534 0 R (page.36) 1540 0 R (page.37) 1550 0 R (page.38) 1557 0 R (page.39) 1561 0 R (page.4) 1281 0 R (page.40) 1571 0 R (page.41) 1575 0 R (page.42) 1582 0 R (page.43) 1592 0 R (page.44) 1600 0 R (page.45) 1608 0 R (page.46) 1620 0 R (page.47) 1626 0 R (page.48) 1632 0 R (page.49) 1639 0 R (page.5) 1288 0 R (page.50) 1643 0 R (page.51) 1650 0 R (page.52) 1655 0 R (page.53) 1665 0 R (page.54) 1669 0 R (page.55) 1674 0 R (page.56) 1678 0 R (page.57) 1682 0 R (page.58) 1686 0 R (page.59) 1693 0 R (page.6) 1300 0 R (page.60) 1698 0 R (page.61) 1705 0 R (page.62) 1711 0 R (page.63) 1716 0 R (page.64) 1725 0 R (page.65) 1729 0 R (page.66) 1733 0 R (page.67) 1741 0 R (page.68) 1750 0 R (page.69) 1757 0 R (page.7) 1306 0 R (page.70) 1763 0 R (page.71) 1767 0 R (page.72) 1771 0 R (page.73) 1776 0 R (page.74) 1784 0 R (page.75) 1790 0 R (page.76) 1796 0 R (page.77) 1803 0 R (page.78) 1810 0 R (page.79) 1817 0 R (page.8) 1314 0 R (page.80) 1823 0 R (page.81) 1831 0 R (page.82) 1835 0 R (page.83) 1839 0 R (page.84) 1843 0 R (page.85) 1849 0 R (page.86) 1855 0 R (page.87) 1859 0 R (page.88) 1863 0 R (page.89) 1868 0 R (page.9) 1323 0 R (page.90) 1875 0 R (page.91) 1889 0 R (page.92) 1894 0 R (page.93) 1899 0 R (page.94) 1903 0 R (page.95) 1907 0 R (page.96) 1911 0 R (page.97) 1920 0 R (page.98) 1924 0 R (page.99) 1928 0 R (page.i) 980 0 R (page.ii) 1035 0 R (page.iii) 1099 0 R (page.iv) 1162 0 R (page.v) 1224 0 R (pkcs11) 1502 0 R (proposed_standards) 1399 0 R (query_address) 1759 0 R (rfc5011.support) 1493 0 R (rfcs) 1266 0 R (rndc) 1604 0 R (root_delegation_only) 1935 0 R (rrset_ordering) 1319 0 R (sample_configuration) 1308 0 R (section*.10) 2304 0 R (section*.100) 2629 0 R (section*.101) 2630 0 R (section*.102) 2635 0 R (section*.103) 2636 0 R (section*.104) 2638 0 R (section*.105) 2639 0 R (section*.106) 2640 0 R (section*.107) 2641 0 R (section*.108) 2650 0 R (section*.109) 2651 0 R (section*.11) 2314 0 R (section*.110) 2652 0 R (section*.111) 2654 0 R (section*.112) 2655 0 R (section*.113) 2660 0 R (section*.114) 2661 0 R (section*.115) 2671 0 R (section*.116) 2672 0 R (section*.117) 2673 0 R (section*.118) 2674 0 R (section*.119) 2675 0 R (section*.12) 2334 0 R (section*.120) 2677 0 R (section*.121) 2682 0 R (section*.122) 2683 0 R (section*.123) 2684 0 R (section*.124) 2685 0 R (section*.125) 2687 0 R (section*.126) 2688 0 R (section*.127) 2689 0 R (section*.128) 2698 0 R (section*.129) 2703 0 R (section*.13) 2346 0 R (section*.130) 2709 0 R (section*.131) 2710 0 R (section*.132) 2711 0 R (section*.133) 2713 0 R (section*.134) 2714 0 R (section*.135) 2715 0 R (section*.136) 2720 0 R (section*.137) 2721 0 R (section*.138) 2722 0 R (section*.139) 2723 0 R (section*.14) 2372 0 R (section*.140) 2725 0 R (section*.141) 2730 0 R (section*.142) 2731 0 R (section*.143) 2732 0 R (section*.144) 2737 0 R (section*.145) 2738 0 R (section*.146) 2739 0 R (section*.147) 2745 0 R (section*.148) 2746 0 R (section*.149) 2747 0 R (section*.15) 2422 0 R (section*.150) 2748 0 R (section*.151) 2753 0 R (section*.152) 2754 0 R (section*.153) 2755 0 R (section*.154) 2757 0 R (section*.155) 2758 0 R (section*.156) 2759 0 R (section*.157) 2765 0 R (section*.158) 2766 0 R (section*.159) 2767 0 R (section*.16) 2423 0 R (section*.160) 2769 0 R (section*.161) 2774 0 R (section*.162) 2775 0 R (section*.163) 2776 0 R (section*.164) 2777 0 R (section*.165) 2779 0 R (section*.166) 2780 0 R (section*.167) 2781 0 R (section*.168) 2782 0 R (section*.169) 2783 0 R (section*.17) 2424 0 R (section*.170) 2788 0 R (section*.171) 2790 0 R (section*.172) 2791 0 R (section*.173) 2792 0 R (section*.174) 2793 0 R (section*.175) 2794 0 R (section*.176) 2795 0 R (section*.177) 2797 0 R (section*.178) 2802 0 R (section*.179) 2803 0 R (section*.18) 2429 0 R (section*.180) 2804 0 R (section*.181) 2805 0 R (section*.182) 2806 0 R (section*.19) 2430 0 R (section*.2) 2170 0 R (section*.20) 2436 0 R (section*.21) 2449 0 R (section*.22) 2450 0 R (section*.23) 2451 0 R (section*.24) 2452 0 R (section*.25) 2453 0 R (section*.26) 2459 0 R (section*.27) 2460 0 R (section*.28) 2461 0 R (section*.29) 2466 0 R (section*.3) 2177 0 R (section*.30) 2467 0 R (section*.31) 2468 0 R (section*.32) 2470 0 R (section*.33) 2471 0 R (section*.34) 2472 0 R (section*.35) 2478 0 R (section*.36) 2479 0 R (section*.37) 2480 0 R (section*.38) 2482 0 R (section*.39) 2483 0 R (section*.4) 2185 0 R (section*.40) 2484 0 R (section*.41) 2489 0 R (section*.42) 2490 0 R (section*.43) 2491 0 R (section*.44) 2497 0 R (section*.45) 2498 0 R (section*.46) 2499 0 R (section*.47) 2500 0 R (section*.48) 2505 0 R (section*.49) 2506 0 R (section*.5) 2210 0 R (section*.50) 2507 0 R (section*.51) 2508 0 R (section*.52) 2509 0 R (section*.53) 2511 0 R (section*.54) 2512 0 R (section*.55) 2517 0 R (section*.56) 2518 0 R (section*.57) 2523 0 R (section*.58) 2524 0 R (section*.59) 2530 0 R (section*.6) 2222 0 R (section*.60) 2531 0 R (section*.61) 2532 0 R (section*.62) 2533 0 R (section*.63) 2534 0 R (section*.64) 2535 0 R (section*.65) 2544 0 R (section*.66) 2549 0 R (section*.67) 2550 0 R (section*.68) 2555 0 R (section*.69) 2556 0 R (section*.7) 2236 0 R (section*.70) 2558 0 R (section*.71) 2559 0 R (section*.72) 2560 0 R (section*.73) 2561 0 R (section*.74) 2566 0 R (section*.75) 2567 0 R (section*.76) 2568 0 R (section*.77) 2569 0 R (section*.78) 2570 0 R (section*.79) 2571 0 R (section*.8) 2274 0 R (section*.80) 2577 0 R (section*.81) 2578 0 R (section*.82) 2583 0 R (section*.83) 2584 0 R (section*.84) 2586 0 R (section*.85) 2587 0 R (section*.86) 2588 0 R (section*.87) 2589 0 R (section*.88) 2606 0 R (section*.89) 2607 0 R (section*.9) 2292 0 R (section*.90) 2608 0 R (section*.91) 2615 0 R (section*.92) 2616 0 R (section*.93) 2617 0 R (section*.94) 2618 0 R (section*.95) 2619 0 R (section*.96) 2624 0 R (section*.97) 2626 0 R (section*.98) 2627 0 R (section*.99) 2628 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.10) 274 0 R (section.4.11) 286 0 R (section.4.12) 338 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 354 0 R (section.5.2) 358 0 R (section.6.1) 366 0 R (section.6.2) 394 0 R (section.6.3) 618 0 R (section.6.4) 674 0 R (section.7.1) 710 0 R (section.7.2) 714 0 R (section.7.3) 726 0 R (section.8.1) 734 0 R (section.8.2) 742 0 R (section.8.3) 746 0 R (section.A.1) 754 0 R (section.A.2) 762 0 R (section.A.3) 770 0 R (section.A.4) 786 0 R (section.B.1) 846 0 R (section.B.10) 882 0 R (section.B.11) 886 0 R (section.B.12) 890 0 R (section.B.13) 894 0 R (section.B.14) 898 0 R (section.B.15) 902 0 R (section.B.16) 906 0 R (section.B.17) 910 0 R (section.B.18) 914 0 R (section.B.19) 918 0 R (section.B.2) 850 0 R (section.B.20) 922 0 R (section.B.21) 926 0 R (section.B.22) 930 0 R (section.B.23) 934 0 R (section.B.24) 938 0 R (section.B.3) 854 0 R (section.B.4) 858 0 R (section.B.5) 862 0 R (section.B.6) 866 0 R (section.B.7) 870 0 R (section.B.8) 874 0 R (section.B.9) 878 0 R (server_resource_limits) 1785 0 R (server_statement_definition_and_usage) 1721 0 R (server_statement_grammar) 1864 0 R (statistics) 2075 0 R (statistics_counters) 2084 0 R (statschannels) 1871 0 R (statsfile) 1689 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.10.1) 278 0 R (subsection.4.10.2) 282 0 R (subsection.4.11.1) 290 0 R (subsection.4.11.2) 306 0 R (subsection.4.11.3) 322 0 R (subsection.4.11.4) 326 0 R (subsection.4.11.5) 330 0 R (subsection.4.11.6) 334 0 R (subsection.4.12.1) 342 0 R (subsection.4.12.2) 346 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.10) 258 0 R (subsection.4.9.11) 262 0 R (subsection.4.9.12) 266 0 R (subsection.4.9.13) 270 0 R (subsection.4.9.2) 226 0 R (subsection.4.9.3) 230 0 R (subsection.4.9.4) 234 0 R (subsection.4.9.5) 238 0 R (subsection.4.9.6) 242 0 R (subsection.4.9.7) 246 0 R (subsection.4.9.8) 250 0 R (subsection.4.9.9) 254 0 R (subsection.6.1.1) 370 0 R (subsection.6.1.2) 382 0 R (subsection.6.2.1) 398 0 R (subsection.6.2.10) 434 0 R (subsection.6.2.11) 450 0 R (subsection.6.2.12) 454 0 R (subsection.6.2.13) 458 0 R (subsection.6.2.14) 462 0 R (subsection.6.2.15) 466 0 R (subsection.6.2.16) 470 0 R (subsection.6.2.17) 554 0 R (subsection.6.2.18) 558 0 R (subsection.6.2.19) 562 0 R (subsection.6.2.2) 402 0 R (subsection.6.2.20) 566 0 R (subsection.6.2.21) 570 0 R (subsection.6.2.22) 574 0 R (subsection.6.2.23) 578 0 R (subsection.6.2.24) 582 0 R (subsection.6.2.25) 586 0 R (subsection.6.2.26) 590 0 R (subsection.6.2.27) 594 0 R (subsection.6.2.28) 598 0 R (subsection.6.2.3) 406 0 R (subsection.6.2.4) 410 0 R (subsection.6.2.5) 414 0 R (subsection.6.2.6) 418 0 R (subsection.6.2.7) 422 0 R (subsection.6.2.8) 426 0 R (subsection.6.2.9) 430 0 R (subsection.6.3.1) 622 0 R (subsection.6.3.2) 634 0 R (subsection.6.3.3) 638 0 R (subsection.6.3.4) 642 0 R (subsection.6.3.5) 646 0 R (subsection.6.3.6) 666 0 R (subsection.6.3.7) 670 0 R (subsection.6.4.1) 682 0 R (subsection.7.2.1) 718 0 R (subsection.7.2.2) 722 0 R (subsection.8.1.1) 738 0 R (subsection.A.1.1) 758 0 R (subsection.A.2.1) 766 0 R (subsection.A.3.1) 774 0 R (subsection.A.3.2) 778 0 R (subsection.A.3.3) 782 0 R (subsection.A.4.1) 790 0 R (subsection.A.4.2) 794 0 R (subsection.A.4.3) 798 0 R (subsection.A.4.4) 802 0 R (subsection.A.4.5) 806 0 R (subsection.A.4.6) 810 0 R (subsection.A.4.7) 838 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.11.1.1) 294 0 R (subsubsection.4.11.1.2) 298 0 R (subsubsection.4.11.1.3) 302 0 R (subsubsection.4.11.2.1) 310 0 R (subsubsection.4.11.2.2) 314 0 R (subsubsection.4.11.2.3) 318 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 374 0 R (subsubsection.6.1.1.2) 378 0 R (subsubsection.6.1.2.1) 386 0 R (subsubsection.6.1.2.2) 390 0 R (subsubsection.6.2.10.1) 438 0 R (subsubsection.6.2.10.2) 442 0 R (subsubsection.6.2.10.3) 446 0 R (subsubsection.6.2.16.1) 474 0 R (subsubsection.6.2.16.10) 510 0 R (subsubsection.6.2.16.11) 514 0 R (subsubsection.6.2.16.12) 518 0 R (subsubsection.6.2.16.13) 522 0 R (subsubsection.6.2.16.14) 526 0 R (subsubsection.6.2.16.15) 530 0 R (subsubsection.6.2.16.16) 534 0 R (subsubsection.6.2.16.17) 538 0 R (subsubsection.6.2.16.18) 542 0 R (subsubsection.6.2.16.19) 546 0 R (subsubsection.6.2.16.2) 478 0 R (subsubsection.6.2.16.20) 550 0 R (subsubsection.6.2.16.3) 482 0 R (subsubsection.6.2.16.4) 486 0 R (subsubsection.6.2.16.5) 490 0 R (subsubsection.6.2.16.6) 494 0 R (subsubsection.6.2.16.7) 498 0 R (subsubsection.6.2.16.8) 502 0 R (subsubsection.6.2.16.9) 506 0 R (subsubsection.6.2.28.1) 602 0 R (subsubsection.6.2.28.2) 606 0 R (subsubsection.6.2.28.3) 610 0 R (subsubsection.6.2.28.4) 614 0 R (subsubsection.6.3.1.1) 626 0 R (subsubsection.6.3.1.2) 630 0 R (subsubsection.6.3.5.1) 650 0 R (subsubsection.6.3.5.2) 654 0 R (subsubsection.6.3.5.3) 658 0 R (subsubsection.6.3.5.4) 662 0 R (subsubsection.6.4.0.1) 678 0 R (subsubsection.6.4.1.1) 686 0 R (subsubsection.6.4.1.2) 690 0 R (subsubsection.6.4.1.3) 694 0 R (subsubsection.6.4.1.4) 698 0 R (subsubsection.6.4.1.5) 702 0 R (subsubsection.A.4.6.1) 814 0 R (subsubsection.A.4.6.2) 818 0 R (subsubsection.A.4.6.3) 822 0 R (subsubsection.A.4.6.4) 826 0 R (subsubsection.A.4.6.5) 830 0 R (subsubsection.A.4.6.6) 834 0 R (table.1.1) 1250 0 R (table.1.2) 1258 0 R (table.3.1) 1317 0 R (table.3.2) 1367 0 R (table.6.1) 1565 0 R (table.6.10) 2015 0 R (table.6.11) 2021 0 R (table.6.12) 2027 0 R (table.6.13) 2035 0 R (table.6.14) 2037 0 R (table.6.15) 2044 0 R (table.6.16) 2047 0 R (table.6.17) 2050 0 R (table.6.18) 2066 0 R (table.6.19) 2077 0 R (table.6.2) 1587 0 R (table.6.20) 2087 0 R (table.6.21) 2095 0 R (table.6.22) 2098 0 R (table.6.23) 2106 0 R (table.6.3) 1596 0 R (table.6.4) 1634 0 R (table.6.5) 1646 0 R (table.6.6) 1707 0 R (table.6.7) 1806 0 R (table.6.8) 1915 0 R (table.6.9) 2001 0 R (the_category_phrase) 1628 0 R (the_sortlist_statement) 1797 0 R (topology) 1792 0 R (trusted-keys) 1882 0 R (tsig) 1415 0 R (tuning) 1811 0 R (types_of_resource_records_and_when_to_use_them) 1265 0 R (view_statement_grammar) 1827 0 R (zone_statement_grammar) 1746 0 R (zone_transfers) 1389 0 R (zonefile_format) 1819 0 R]
/Limits [(Access_Control_Lists) (zonefile_format)]
>> endobj
-2756 0 obj <<
-/Kids [2755 0 R]
+2834 0 obj <<
+/Kids [2833 0 R]
>> endobj
-2757 0 obj <<
-/Dests 2756 0 R
+2835 0 obj <<
+/Dests 2834 0 R
>> endobj
-2758 0 obj <<
+2836 0 obj <<
/Type /Catalog
-/Pages 2753 0 R
-/Outlines 2754 0 R
-/Names 2757 0 R
+/Pages 2831 0 R
+/Outlines 2832 0 R
+/Names 2835 0 R
/PageMode /UseOutlines
-/OpenAction 929 0 R
+/OpenAction 941 0 R
>> endobj
-2759 0 obj <<
+2837 0 obj <<
/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords()
-/CreationDate (D:20120720044330Z)
+/CreationDate (D:20130516011446Z)
/PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4)
>> endobj
xref
-0 2760
+0 2838
0000000001 65535 f
0000000002 00000 f
0000000003 00000 f
0000000004 00000 f
0000000000 00000 f
0000000009 00000 n
-0000348639 00000 n
-0001182928 00000 n
+0000349585 00000 n
+0001223461 00000 n
0000000054 00000 n
0000000086 00000 n
-0000348766 00000 n
-0001182856 00000 n
+0000349712 00000 n
+0001223389 00000 n
0000000133 00000 n
0000000173 00000 n
-0000348894 00000 n
-0001182770 00000 n
+0000349840 00000 n
+0001223303 00000 n
0000000221 00000 n
0000000273 00000 n
-0000349022 00000 n
-0001182684 00000 n
+0000349968 00000 n
+0001223217 00000 n
0000000321 00000 n
0000000377 00000 n
-0000353308 00000 n
-0001182574 00000 n
+0000354254 00000 n
+0001223107 00000 n
0000000425 00000 n
0000000478 00000 n
-0000353435 00000 n
-0001182500 00000 n
+0000354381 00000 n
+0001223033 00000 n
0000000531 00000 n
0000000572 00000 n
-0000353563 00000 n
-0001182413 00000 n
+0000354509 00000 n
+0001222946 00000 n
0000000625 00000 n
0000000674 00000 n
-0000353690 00000 n
-0001182326 00000 n
+0000354636 00000 n
+0001222859 00000 n
0000000727 00000 n
0000000757 00000 n
-0000357987 00000 n
-0001182202 00000 n
+0000358933 00000 n
+0001222735 00000 n
0000000810 00000 n
0000000861 00000 n
-0000358115 00000 n
-0001182128 00000 n
+0000359061 00000 n
+0001222661 00000 n
0000000919 00000 n
0000000964 00000 n
-0000358243 00000 n
-0001182041 00000 n
+0000359189 00000 n
+0001222574 00000 n
0000001022 00000 n
0000001062 00000 n
-0000358371 00000 n
-0001181967 00000 n
+0000359317 00000 n
+0001222500 00000 n
0000001120 00000 n
0000001162 00000 n
-0000361356 00000 n
-0001181843 00000 n
+0000362302 00000 n
+0001222376 00000 n
0000001215 00000 n
0000001260 00000 n
-0000361484 00000 n
-0001181782 00000 n
+0000362430 00000 n
+0001222315 00000 n
0000001318 00000 n
0000001355 00000 n
-0000361612 00000 n
-0001181708 00000 n
+0000362558 00000 n
+0001222241 00000 n
0000001408 00000 n
0000001463 00000 n
-0000364559 00000 n
-0001181583 00000 n
+0000365505 00000 n
+0001222116 00000 n
0000001509 00000 n
0000001556 00000 n
-0000364687 00000 n
-0001181509 00000 n
+0000365633 00000 n
+0001222042 00000 n
0000001604 00000 n
0000001648 00000 n
-0000364815 00000 n
-0001181422 00000 n
+0000365761 00000 n
+0001221955 00000 n
0000001696 00000 n
0000001735 00000 n
-0000364943 00000 n
-0001181335 00000 n
+0000365889 00000 n
+0001221868 00000 n
0000001783 00000 n
0000001825 00000 n
-0000365070 00000 n
-0001181248 00000 n
+0000366016 00000 n
+0001221781 00000 n
0000001873 00000 n
0000001936 00000 n
-0000366147 00000 n
-0001181174 00000 n
+0000367093 00000 n
+0001221707 00000 n
0000001984 00000 n
0000002034 00000 n
-0000367806 00000 n
-0001181046 00000 n
+0000368752 00000 n
+0001221579 00000 n
0000002080 00000 n
0000002126 00000 n
-0000367933 00000 n
-0001180933 00000 n
+0000368879 00000 n
+0001221466 00000 n
0000002174 00000 n
0000002218 00000 n
-0000368061 00000 n
-0001180857 00000 n
+0000369007 00000 n
+0001221390 00000 n
0000002271 00000 n
0000002323 00000 n
-0000368189 00000 n
-0001180780 00000 n
+0000369135 00000 n
+0001221313 00000 n
0000002377 00000 n
0000002436 00000 n
-0000370638 00000 n
-0001180689 00000 n
+0000371584 00000 n
+0001221222 00000 n
0000002485 00000 n
0000002523 00000 n
-0000373976 00000 n
-0001180572 00000 n
+0000374922 00000 n
+0001221105 00000 n
0000002572 00000 n
0000002618 00000 n
-0000374104 00000 n
-0001180454 00000 n
+0000375050 00000 n
+0001220987 00000 n
0000002672 00000 n
0000002739 00000 n
-0000374232 00000 n
-0001180375 00000 n
+0000375178 00000 n
+0001220908 00000 n
0000002798 00000 n
0000002842 00000 n
-0000374361 00000 n
-0001180296 00000 n
+0000375307 00000 n
+0001220829 00000 n
0000002901 00000 n
0000002949 00000 n
-0000389227 00000 n
-0001180217 00000 n
+0000393344 00000 n
+0001220750 00000 n
0000003003 00000 n
0000003036 00000 n
-0000394851 00000 n
-0001180084 00000 n
+0000398572 00000 n
+0001220617 00000 n
0000003083 00000 n
0000003126 00000 n
-0000394980 00000 n
-0001180005 00000 n
+0000398701 00000 n
+0001220538 00000 n
0000003175 00000 n
0000003205 00000 n
-0000395109 00000 n
-0001179873 00000 n
+0000398830 00000 n
+0001220406 00000 n
0000003254 00000 n
0000003292 00000 n
-0000399481 00000 n
-0001179808 00000 n
+0000403339 00000 n
+0001220341 00000 n
0000003346 00000 n
0000003388 00000 n
-0000399610 00000 n
-0001179715 00000 n
+0000403468 00000 n
+0001220248 00000 n
0000003437 00000 n
0000003496 00000 n
-0000399739 00000 n
-0001179583 00000 n
+0000403597 00000 n
+0001220116 00000 n
0000003545 00000 n
0000003578 00000 n
-0000403459 00000 n
-0001179518 00000 n
+0000407515 00000 n
+0001220051 00000 n
0000003632 00000 n
0000003681 00000 n
-0000406613 00000 n
-0001179386 00000 n
+0000410529 00000 n
+0001219919 00000 n
0000003730 00000 n
0000003758 00000 n
-0000409558 00000 n
-0001179268 00000 n
+0000413309 00000 n
+0001219801 00000 n
0000003812 00000 n
0000003881 00000 n
-0000409687 00000 n
-0001179189 00000 n
+0000413438 00000 n
+0001219722 00000 n
0000003940 00000 n
0000003988 00000 n
-0000409816 00000 n
-0001179110 00000 n
+0000413566 00000 n
+0001219643 00000 n
0000004047 00000 n
0000004092 00000 n
-0000409945 00000 n
-0001179017 00000 n
+0000413695 00000 n
+0001219550 00000 n
0000004146 00000 n
0000004214 00000 n
-0000410074 00000 n
-0001178924 00000 n
+0000413824 00000 n
+0001219457 00000 n
0000004268 00000 n
0000004338 00000 n
-0000413537 00000 n
-0001178831 00000 n
+0000417493 00000 n
+0001219364 00000 n
0000004392 00000 n
0000004455 00000 n
-0000413666 00000 n
-0001178738 00000 n
+0000417622 00000 n
+0001219271 00000 n
0000004509 00000 n
0000004564 00000 n
-0000413795 00000 n
-0001178659 00000 n
+0000417750 00000 n
+0001219192 00000 n
0000004618 00000 n
0000004650 00000 n
-0000413924 00000 n
-0001178566 00000 n
+0000417878 00000 n
+0001219099 00000 n
0000004699 00000 n
0000004727 00000 n
-0000417784 00000 n
-0001178473 00000 n
+0000421647 00000 n
+0001219006 00000 n
0000004776 00000 n
0000004808 00000 n
-0000417913 00000 n
-0001178341 00000 n
+0000421776 00000 n
+0001218874 00000 n
0000004857 00000 n
0000004887 00000 n
-0000418041 00000 n
-0001178262 00000 n
+0000421905 00000 n
+0001218795 00000 n
0000004941 00000 n
0000004982 00000 n
-0000421944 00000 n
-0001178169 00000 n
+0000425703 00000 n
+0001218702 00000 n
0000005036 00000 n
0000005078 00000 n
-0000422072 00000 n
-0001178090 00000 n
+0000425832 00000 n
+0001218623 00000 n
0000005132 00000 n
0000005177 00000 n
-0000427212 00000 n
-0001177957 00000 n
+0000431155 00000 n
+0001218490 00000 n
0000005226 00000 n
0000005294 00000 n
-0000427341 00000 n
-0001177878 00000 n
+0000431284 00000 n
+0001218411 00000 n
0000005348 00000 n
0000005408 00000 n
-0000431146 00000 n
-0001177785 00000 n
+0000431413 00000 n
+0001218318 00000 n
0000005462 00000 n
0000005513 00000 n
-0000431275 00000 n
-0001177692 00000 n
+0000435680 00000 n
+0001218225 00000 n
0000005567 00000 n
0000005621 00000 n
-0000431404 00000 n
-0001177599 00000 n
+0000438662 00000 n
+0001218132 00000 n
0000005675 00000 n
0000005721 00000 n
-0000434522 00000 n
-0001177506 00000 n
+0000438791 00000 n
+0001218039 00000 n
0000005775 00000 n
0000005817 00000 n
-0000434651 00000 n
-0001177413 00000 n
+0000438920 00000 n
+0001217946 00000 n
0000005871 00000 n
0000005922 00000 n
-0000434780 00000 n
-0001177320 00000 n
+0000439049 00000 n
+0001217853 00000 n
0000005976 00000 n
0000006025 00000 n
-0000437878 00000 n
-0001177227 00000 n
+0000441808 00000 n
+0001217760 00000 n
0000006079 00000 n
0000006136 00000 n
-0000438007 00000 n
-0001177134 00000 n
+0000441937 00000 n
+0001217667 00000 n
0000006190 00000 n
0000006245 00000 n
-0000438135 00000 n
-0001177041 00000 n
+0000442066 00000 n
+0001217574 00000 n
0000006300 00000 n
0000006356 00000 n
-0000438264 00000 n
-0001176948 00000 n
+0000442194 00000 n
+0001217481 00000 n
0000006411 00000 n
0000006472 00000 n
-0000438392 00000 n
-0001176855 00000 n
+0000442322 00000 n
+0001217388 00000 n
0000006527 00000 n
0000006573 00000 n
-0000438520 00000 n
-0001176776 00000 n
+0000442451 00000 n
+0001217309 00000 n
0000006628 00000 n
0000006671 00000 n
-0000438649 00000 n
-0001176644 00000 n
+0000446315 00000 n
+0001217177 00000 n
0000006721 00000 n
0000006777 00000 n
-0000438778 00000 n
-0001176565 00000 n
+0000446444 00000 n
+0001217098 00000 n
0000006832 00000 n
0000006878 00000 n
-0000442370 00000 n
-0001176486 00000 n
+0000446573 00000 n
+0001217019 00000 n
0000006933 00000 n
0000006980 00000 n
-0000442499 00000 n
-0001176354 00000 n
+0000449975 00000 n
+0001216887 00000 n
0000007030 00000 n
0000007087 00000 n
-0000445659 00000 n
-0001176236 00000 n
+0000450104 00000 n
+0001216769 00000 n
0000007142 00000 n
0000007182 00000 n
-0000448354 00000 n
-0001176157 00000 n
+0000452772 00000 n
+0001216690 00000 n
0000007242 00000 n
0000007315 00000 n
-0000448483 00000 n
-0001176064 00000 n
+0000452901 00000 n
+0001216597 00000 n
0000007375 00000 n
0000007448 00000 n
-0000451264 00000 n
-0001175985 00000 n
+0000455618 00000 n
+0001216518 00000 n
0000007508 00000 n
0000007565 00000 n
-0000451393 00000 n
-0001175853 00000 n
+0000458010 00000 n
+0001216386 00000 n
0000007620 00000 n
0000007678 00000 n
-0000451522 00000 n
-0001175774 00000 n
+0000458139 00000 n
+0001216307 00000 n
0000007738 00000 n
0000007815 00000 n
-0000454016 00000 n
-0001175681 00000 n
+0000458268 00000 n
+0001216214 00000 n
0000007875 00000 n
0000007952 00000 n
-0000454145 00000 n
-0001175602 00000 n
+0000458397 00000 n
+0001216135 00000 n
0000008012 00000 n
0000008071 00000 n
-0000454274 00000 n
-0001175509 00000 n
+0000458526 00000 n
+0001216042 00000 n
0000008126 00000 n
0000008170 00000 n
-0000454403 00000 n
-0001175416 00000 n
+0000461158 00000 n
+0001215949 00000 n
0000008225 00000 n
0000008265 00000 n
-0000460723 00000 n
-0001175323 00000 n
+0000463967 00000 n
+0001215856 00000 n
0000008320 00000 n
0000008388 00000 n
-0000460852 00000 n
-0001175244 00000 n
+0000464096 00000 n
+0001215777 00000 n
0000008443 00000 n
0000008514 00000 n
-0000463643 00000 n
-0001175126 00000 n
+0000468157 00000 n
+0001215659 00000 n
0000008564 00000 n
0000008611 00000 n
-0000463772 00000 n
-0001175047 00000 n
+0000468286 00000 n
+0001215580 00000 n
0000008666 00000 n
0000008727 00000 n
-0000463901 00000 n
-0001174968 00000 n
+0000468415 00000 n
+0001215501 00000 n
0000008782 00000 n
0000008852 00000 n
-0000466343 00000 n
-0001174835 00000 n
+0000470900 00000 n
+0001215368 00000 n
0000008899 00000 n
0000008952 00000 n
-0000466472 00000 n
-0001174756 00000 n
+0000471029 00000 n
+0001215289 00000 n
0000009001 00000 n
0000009057 00000 n
-0000466601 00000 n
-0001174677 00000 n
+0000471158 00000 n
+0001215210 00000 n
0000009106 00000 n
0000009155 00000 n
-0000470871 00000 n
-0001174544 00000 n
+0000475428 00000 n
+0001215077 00000 n
0000009202 00000 n
0000009254 00000 n
-0000471000 00000 n
-0001174426 00000 n
+0000475557 00000 n
+0001214959 00000 n
0000009303 00000 n
0000009354 00000 n
-0000475692 00000 n
-0001174308 00000 n
+0000483981 00000 n
+0001214841 00000 n
0000009408 00000 n
0000009453 00000 n
-0000475820 00000 n
-0001174229 00000 n
+0000484110 00000 n
+0001214762 00000 n
0000009512 00000 n
0000009546 00000 n
-0000479413 00000 n
-0001174150 00000 n
+0000484239 00000 n
+0001214683 00000 n
0000009605 00000 n
0000009653 00000 n
-0000479542 00000 n
-0001174032 00000 n
+0000484368 00000 n
+0001214565 00000 n
0000009707 00000 n
0000009747 00000 n
-0000479671 00000 n
-0001173953 00000 n
+0000486901 00000 n
+0001214486 00000 n
0000009806 00000 n
0000009840 00000 n
-0000482523 00000 n
-0001173874 00000 n
+0000487030 00000 n
+0001214407 00000 n
0000009899 00000 n
0000009947 00000 n
-0000482652 00000 n
-0001173741 00000 n
+0000487159 00000 n
+0001214274 00000 n
0000009996 00000 n
0000010046 00000 n
-0000485722 00000 n
-0001173662 00000 n
+0000490400 00000 n
+0001214195 00000 n
0000010100 00000 n
0000010147 00000 n
-0000485850 00000 n
-0001173569 00000 n
+0000490528 00000 n
+0001214102 00000 n
0000010201 00000 n
0000010261 00000 n
-0000486109 00000 n
-0001173476 00000 n
+0000495885 00000 n
+0001214009 00000 n
0000010315 00000 n
0000010367 00000 n
-0000491291 00000 n
-0001173383 00000 n
+0000496014 00000 n
+0001213916 00000 n
0000010421 00000 n
0000010486 00000 n
-0000491420 00000 n
-0001173290 00000 n
+0000499484 00000 n
+0001213823 00000 n
0000010540 00000 n
0000010591 00000 n
-0000494897 00000 n
-0001173197 00000 n
+0000499613 00000 n
+0001213730 00000 n
0000010645 00000 n
0000010709 00000 n
-0000495026 00000 n
-0001173104 00000 n
+0000499742 00000 n
+0001213637 00000 n
0000010763 00000 n
0000010810 00000 n
-0000495155 00000 n
-0001173011 00000 n
+0000499871 00000 n
+0001213544 00000 n
0000010864 00000 n
0000010924 00000 n
-0000495284 00000 n
-0001172918 00000 n
+0000499999 00000 n
+0001213451 00000 n
0000010978 00000 n
0000011029 00000 n
-0000499302 00000 n
-0001172786 00000 n
+0000503698 00000 n
+0001213319 00000 n
0000011084 00000 n
0000011149 00000 n
-0000499431 00000 n
-0001172707 00000 n
+0000503827 00000 n
+0001213240 00000 n
0000011209 00000 n
0000011256 00000 n
-0000506252 00000 n
-0001172614 00000 n
+0000510628 00000 n
+0001213147 00000 n
0000011316 00000 n
0000011364 00000 n
-0000513361 00000 n
-0001172535 00000 n
+0000517534 00000 n
+0001213068 00000 n
0000011424 00000 n
0000011478 00000 n
-0000516958 00000 n
-0001172442 00000 n
+0000520761 00000 n
+0001212975 00000 n
0000011533 00000 n
0000011583 00000 n
-0000517087 00000 n
-0001172349 00000 n
+0000523661 00000 n
+0001212882 00000 n
0000011638 00000 n
0000011701 00000 n
-0000519024 00000 n
-0001172256 00000 n
+0000523790 00000 n
+0001212789 00000 n
0000011756 00000 n
0000011808 00000 n
-0000519153 00000 n
-0001172163 00000 n
+0000523919 00000 n
+0001212696 00000 n
0000011863 00000 n
0000011928 00000 n
-0000519282 00000 n
-0001172070 00000 n
+0000524048 00000 n
+0001212603 00000 n
0000011983 00000 n
0000012035 00000 n
-0000524428 00000 n
-0001171937 00000 n
+0000531546 00000 n
+0001212470 00000 n
0000012090 00000 n
0000012155 00000 n
-0000544388 00000 n
-0001171858 00000 n
+0000552718 00000 n
+0001212391 00000 n
0000012215 00000 n
0000012259 00000 n
-0000565985 00000 n
-0001171765 00000 n
+0000574745 00000 n
+0001212298 00000 n
0000012319 00000 n
0000012358 00000 n
-0000569620 00000 n
-0001171672 00000 n
+0000578746 00000 n
+0001212205 00000 n
0000012418 00000 n
0000012465 00000 n
-0000569749 00000 n
-0001171579 00000 n
+0000578875 00000 n
+0001212112 00000 n
0000012525 00000 n
0000012568 00000 n
-0000574175 00000 n
-0001171486 00000 n
+0000586524 00000 n
+0001212019 00000 n
0000012628 00000 n
0000012667 00000 n
-0000577523 00000 n
-0001171393 00000 n
+0000586652 00000 n
+0001211926 00000 n
0000012727 00000 n
0000012769 00000 n
-0000584483 00000 n
-0001171300 00000 n
+0000593683 00000 n
+0001211833 00000 n
0000012829 00000 n
0000012872 00000 n
-0000592253 00000 n
-0001171207 00000 n
+0000601678 00000 n
+0001211740 00000 n
0000012932 00000 n
0000012975 00000 n
-0000592382 00000 n
-0001171114 00000 n
+0000601807 00000 n
+0001211647 00000 n
0000013035 00000 n
0000013096 00000 n
-0000596338 00000 n
-0001171021 00000 n
+0000605914 00000 n
+0001211554 00000 n
0000013157 00000 n
0000013209 00000 n
-0000596467 00000 n
-0001170928 00000 n
+0000609162 00000 n
+0001211461 00000 n
0000013270 00000 n
0000013323 00000 n
-0000599686 00000 n
-0001170835 00000 n
+0000609291 00000 n
+0001211368 00000 n
0000013384 00000 n
0000013422 00000 n
-0000603538 00000 n
-0001170742 00000 n
+0000613144 00000 n
+0001211275 00000 n
0000013483 00000 n
0000013535 00000 n
-0000606956 00000 n
-0001170649 00000 n
+0000616554 00000 n
+0001211182 00000 n
0000013596 00000 n
0000013640 00000 n
-0000610967 00000 n
-0001170556 00000 n
+0000620724 00000 n
+0001211089 00000 n
0000013701 00000 n
0000013737 00000 n
-0000619337 00000 n
-0001170463 00000 n
+0000629377 00000 n
+0001210996 00000 n
0000013798 00000 n
0000013861 00000 n
-0000619466 00000 n
-0001170370 00000 n
+0000629506 00000 n
+0001210903 00000 n
0000013922 00000 n
0000013972 00000 n
-0000626008 00000 n
-0001170277 00000 n
+0000639857 00000 n
+0001210810 00000 n
0000014033 00000 n
0000014089 00000 n
-0000626135 00000 n
-0001170184 00000 n
+0000639985 00000 n
+0001210717 00000 n
0000014150 00000 n
0000014197 00000 n
-0000634312 00000 n
-0001170105 00000 n
+0000644156 00000 n
+0001210638 00000 n
0000014258 00000 n
0000014326 00000 n
-0000640547 00000 n
-0001170012 00000 n
+0000654835 00000 n
+0001210545 00000 n
0000014381 00000 n
0000014432 00000 n
-0000640676 00000 n
-0001169919 00000 n
+0000654964 00000 n
+0001210452 00000 n
0000014487 00000 n
0000014551 00000 n
-0000649330 00000 n
-0001169826 00000 n
+0000659651 00000 n
+0001210359 00000 n
0000014606 00000 n
0000014670 00000 n
-0000649459 00000 n
-0001169733 00000 n
+0000665169 00000 n
+0001210266 00000 n
0000014725 00000 n
0000014802 00000 n
-0000649588 00000 n
-0001169640 00000 n
+0000665298 00000 n
+0001210173 00000 n
0000014857 00000 n
0000014914 00000 n
-0000649717 00000 n
-0001169547 00000 n
+0000665427 00000 n
+0001210080 00000 n
0000014969 00000 n
0000015039 00000 n
-0000654026 00000 n
-0001169454 00000 n
+0000669607 00000 n
+0001209987 00000 n
0000015094 00000 n
0000015151 00000 n
-0000654155 00000 n
-0001169361 00000 n
+0000669736 00000 n
+0001209894 00000 n
0000015206 00000 n
0000015276 00000 n
-0000657626 00000 n
-0001169268 00000 n
+0000673670 00000 n
+0001209801 00000 n
0000015331 00000 n
0000015380 00000 n
-0000657755 00000 n
-0001169175 00000 n
+0000673799 00000 n
+0001209708 00000 n
0000015435 00000 n
0000015497 00000 n
-0000659509 00000 n
-0001169082 00000 n
+0000675472 00000 n
+0001209615 00000 n
0000015552 00000 n
0000015601 00000 n
-0000665970 00000 n
-0001168964 00000 n
+0000680187 00000 n
+0001209497 00000 n
0000015656 00000 n
0000015718 00000 n
-0000666099 00000 n
-0001168885 00000 n
+0000680316 00000 n
+0001209418 00000 n
0000015778 00000 n
0000015817 00000 n
-0000670336 00000 n
-0001168792 00000 n
+0000690574 00000 n
+0001209325 00000 n
0000015877 00000 n
0000015911 00000 n
-0000676258 00000 n
-0001168699 00000 n
+0000690702 00000 n
+0001209232 00000 n
0000015971 00000 n
0000016012 00000 n
-0000691898 00000 n
-0001168620 00000 n
+0000712487 00000 n
+0001209153 00000 n
0000016072 00000 n
0000016124 00000 n
-0000702584 00000 n
-0001168488 00000 n
+0000723009 00000 n
+0001209021 00000 n
0000016173 00000 n
0000016206 00000 n
-0000702713 00000 n
-0001168370 00000 n
+0000723138 00000 n
+0001208903 00000 n
0000016260 00000 n
0000016332 00000 n
-0000702842 00000 n
-0001168291 00000 n
+0000723267 00000 n
+0001208824 00000 n
0000016391 00000 n
0000016435 00000 n
-0000713443 00000 n
-0001168212 00000 n
+0000733869 00000 n
+0001208745 00000 n
0000016494 00000 n
0000016547 00000 n
-0000713832 00000 n
-0001168119 00000 n
+0000734258 00000 n
+0001208652 00000 n
0000016601 00000 n
0000016651 00000 n
-0000717686 00000 n
-0001168026 00000 n
+0000738100 00000 n
+0001208559 00000 n
0000016705 00000 n
0000016743 00000 n
-0000717945 00000 n
-0001167933 00000 n
+0000738359 00000 n
+0001208466 00000 n
0000016797 00000 n
0000016846 00000 n
-0000720718 00000 n
-0001167801 00000 n
+0000741133 00000 n
+0001208334 00000 n
0000016900 00000 n
0000016952 00000 n
-0000720843 00000 n
-0001167722 00000 n
+0000741258 00000 n
+0001208255 00000 n
0000017011 00000 n
0000017056 00000 n
-0000720972 00000 n
-0001167629 00000 n
+0000741387 00000 n
+0001208162 00000 n
0000017115 00000 n
0000017167 00000 n
-0000721101 00000 n
-0001167536 00000 n
+0000741516 00000 n
+0001208069 00000 n
0000017226 00000 n
0000017279 00000 n
-0000723553 00000 n
-0001167457 00000 n
+0000743959 00000 n
+0001207990 00000 n
0000017338 00000 n
0000017387 00000 n
-0000723682 00000 n
-0001167364 00000 n
+0000744088 00000 n
+0001207897 00000 n
0000017441 00000 n
0000017521 00000 n
-0000727997 00000 n
-0001167285 00000 n
+0000748410 00000 n
+0001207818 00000 n
0000017575 00000 n
0000017624 00000 n
-0000731503 00000 n
-0001167167 00000 n
+0000751916 00000 n
+0001207700 00000 n
0000017673 00000 n
0000017713 00000 n
-0000731762 00000 n
-0001167088 00000 n
+0000752175 00000 n
+0001207621 00000 n
0000017772 00000 n
0000017819 00000 n
-0000735194 00000 n
-0001166970 00000 n
+0000755604 00000 n
+0001207503 00000 n
0000017873 00000 n
0000017918 00000 n
-0000735323 00000 n
-0001166891 00000 n
+0000755733 00000 n
+0001207424 00000 n
0000017977 00000 n
0000018036 00000 n
-0000738678 00000 n
-0001166798 00000 n
+0000759096 00000 n
+0001207331 00000 n
0000018095 00000 n
0000018159 00000 n
-0000738937 00000 n
-0001166705 00000 n
+0000759355 00000 n
+0001207238 00000 n
0000018218 00000 n
0000018274 00000 n
-0000743094 00000 n
-0001166612 00000 n
+0000763456 00000 n
+0001207145 00000 n
0000018333 00000 n
0000018391 00000 n
-0000745115 00000 n
-0001166533 00000 n
+0000765628 00000 n
+0001207066 00000 n
0000018450 00000 n
0000018512 00000 n
-0000747283 00000 n
-0001166400 00000 n
+0000767413 00000 n
+0001206933 00000 n
0000018559 00000 n
0000018611 00000 n
-0000747411 00000 n
-0001166321 00000 n
+0000767541 00000 n
+0001206854 00000 n
0000018660 00000 n
0000018704 00000 n
-0000751446 00000 n
-0001166189 00000 n
+0000771340 00000 n
+0001206722 00000 n
0000018753 00000 n
0000018794 00000 n
-0000751575 00000 n
-0001166110 00000 n
+0000771469 00000 n
+0001206643 00000 n
0000018848 00000 n
0000018896 00000 n
-0000751703 00000 n
-0001166031 00000 n
+0000771598 00000 n
+0001206564 00000 n
0000018950 00000 n
0000019001 00000 n
-0000751832 00000 n
-0001165952 00000 n
+0000771726 00000 n
+0001206485 00000 n
0000019050 00000 n
0000019097 00000 n
-0000756431 00000 n
-0001165819 00000 n
+0000775986 00000 n
+0001206352 00000 n
0000019144 00000 n
0000019181 00000 n
-0000756560 00000 n
-0001165701 00000 n
+0000776115 00000 n
+0001206234 00000 n
0000019230 00000 n
0000019269 00000 n
-0000756689 00000 n
-0001165636 00000 n
+0000776244 00000 n
+0001206169 00000 n
0000019323 00000 n
0000019401 00000 n
-0000756818 00000 n
-0001165543 00000 n
+0000776373 00000 n
+0001206076 00000 n
0000019450 00000 n
0000019517 00000 n
-0000756947 00000 n
-0001165464 00000 n
+0000776502 00000 n
+0001205997 00000 n
0000019566 00000 n
0000019611 00000 n
-0000760388 00000 n
-0001165331 00000 n
+0000779943 00000 n
+0001205864 00000 n
0000019659 00000 n
0000019691 00000 n
-0000760517 00000 n
-0001165213 00000 n
+0000780072 00000 n
+0001205746 00000 n
0000019740 00000 n
0000019779 00000 n
-0000760646 00000 n
-0001165148 00000 n
+0000780201 00000 n
+0001205681 00000 n
0000019833 00000 n
0000019894 00000 n
-0000764328 00000 n
-0001165016 00000 n
+0000783883 00000 n
+0001205549 00000 n
0000019943 00000 n
0000020000 00000 n
-0000764457 00000 n
-0001164951 00000 n
+0000784012 00000 n
+0001205484 00000 n
0000020054 00000 n
0000020103 00000 n
-0000764586 00000 n
-0001164819 00000 n
+0000784141 00000 n
+0001205352 00000 n
0000020152 00000 n
0000020214 00000 n
-0000764715 00000 n
-0001164740 00000 n
+0000784270 00000 n
+0001205273 00000 n
0000020268 00000 n
0000020323 00000 n
-0000789557 00000 n
-0001164647 00000 n
+0000809112 00000 n
+0001205180 00000 n
0000020377 00000 n
0000020418 00000 n
-0000789686 00000 n
-0001164568 00000 n
+0000809241 00000 n
+0001205101 00000 n
0000020472 00000 n
0000020524 00000 n
-0000790075 00000 n
-0001164450 00000 n
+0000809630 00000 n
+0001204983 00000 n
0000020573 00000 n
0000020623 00000 n
-0000792896 00000 n
-0001164371 00000 n
+0000812451 00000 n
+0001204904 00000 n
0000020677 00000 n
0000020715 00000 n
-0000793025 00000 n
-0001164278 00000 n
+0000812580 00000 n
+0001204811 00000 n
0000020769 00000 n
0000020806 00000 n
-0000793154 00000 n
-0001164185 00000 n
+0000812709 00000 n
+0001204718 00000 n
0000020860 00000 n
0000020898 00000 n
-0000793283 00000 n
-0001164092 00000 n
+0000812838 00000 n
+0001204625 00000 n
0000020952 00000 n
0000021004 00000 n
-0000796519 00000 n
-0001163999 00000 n
+0000816074 00000 n
+0001204532 00000 n
0000021058 00000 n
0000021101 00000 n
-0000796647 00000 n
-0001163867 00000 n
+0000816202 00000 n
+0001204400 00000 n
0000021155 00000 n
0000021200 00000 n
-0000796775 00000 n
-0001163788 00000 n
+0000816330 00000 n
+0001204321 00000 n
0000021259 00000 n
0000021325 00000 n
-0000799761 00000 n
-0001163695 00000 n
+0000819316 00000 n
+0001204228 00000 n
0000021384 00000 n
0000021472 00000 n
-0000799890 00000 n
-0001163602 00000 n
+0000819445 00000 n
+0001204135 00000 n
0000021531 00000 n
0000021606 00000 n
-0000800019 00000 n
-0001163509 00000 n
+0000819574 00000 n
+0001204042 00000 n
0000021665 00000 n
0000021750 00000 n
-0000802928 00000 n
-0001163416 00000 n
+0000822482 00000 n
+0001203949 00000 n
0000021809 00000 n
0000021890 00000 n
-0000805389 00000 n
-0001163337 00000 n
+0000824943 00000 n
+0001203870 00000 n
0000021949 00000 n
0000022033 00000 n
-0000805518 00000 n
-0001163258 00000 n
+0000825072 00000 n
+0001203791 00000 n
0000022087 00000 n
0000022131 00000 n
-0000808347 00000 n
-0001163138 00000 n
+0000827972 00000 n
+0001203671 00000 n
0000022179 00000 n
0000022213 00000 n
-0000808476 00000 n
-0001163059 00000 n
+0000828101 00000 n
+0001203592 00000 n
0000022262 00000 n
0000022289 00000 n
-0000826443 00000 n
-0001162966 00000 n
+0000850488 00000 n
+0001203499 00000 n
0000022338 00000 n
0000022366 00000 n
-0000834001 00000 n
-0001162873 00000 n
+0000854121 00000 n
+0001203406 00000 n
0000022415 00000 n
-0000022455 00000 n
-0000840285 00000 n
-0001162780 00000 n
-0000022504 00000 n
-0000022547 00000 n
-0000846820 00000 n
-0001162687 00000 n
-0000022596 00000 n
-0000022633 00000 n
-0000860111 00000 n
-0001162594 00000 n
-0000022682 00000 n
-0000022719 00000 n
-0000862987 00000 n
-0001162501 00000 n
-0000022768 00000 n
-0000022806 00000 n
-0000869773 00000 n
-0001162408 00000 n
-0000022855 00000 n
+0000022453 00000 n
+0000857325 00000 n
+0001203313 00000 n
+0000022502 00000 n
+0000022541 00000 n
+0000863728 00000 n
+0001203220 00000 n
+0000022590 00000 n
+0000022630 00000 n
+0000866453 00000 n
+0001203127 00000 n
+0000022679 00000 n
+0000022722 00000 n
+0000876590 00000 n
+0001203034 00000 n
+0000022771 00000 n
+0000022808 00000 n
+0000890239 00000 n
+0001202941 00000 n
+0000022857 00000 n
0000022894 00000 n
-0000883267 00000 n
-0001162315 00000 n
+0000893620 00000 n
+0001202848 00000 n
0000022943 00000 n
-0000022982 00000 n
-0000886248 00000 n
-0001162222 00000 n
-0000023032 00000 n
-0000023072 00000 n
-0000895738 00000 n
-0001162129 00000 n
-0000023122 00000 n
-0000023152 00000 n
-0000904634 00000 n
-0001162036 00000 n
-0000023202 00000 n
-0000023245 00000 n
-0000908923 00000 n
-0001161943 00000 n
-0000023295 00000 n
-0000023328 00000 n
-0000922876 00000 n
-0001161850 00000 n
-0000023378 00000 n
-0000023407 00000 n
-0000926106 00000 n
-0001161757 00000 n
-0000023457 00000 n
-0000023491 00000 n
-0000932020 00000 n
-0001161664 00000 n
-0000023541 00000 n
-0000023578 00000 n
-0000938780 00000 n
-0001161571 00000 n
-0000023628 00000 n
-0000023665 00000 n
-0000941136 00000 n
-0001161478 00000 n
-0000023715 00000 n
-0000023748 00000 n
-0000941590 00000 n
-0001161385 00000 n
-0000023798 00000 n
-0000023832 00000 n
-0000944356 00000 n
-0001161292 00000 n
-0000023882 00000 n
-0000023921 00000 n
-0000946966 00000 n
-0001161213 00000 n
-0000023971 00000 n
-0000024005 00000 n
-0000024378 00000 n
-0000024500 00000 n
-0000289301 00000 n
-0000024058 00000 n
-0000289175 00000 n
-0000289238 00000 n
-0001155435 00000 n
-0001129350 00000 n
-0001155261 00000 n
-0001156473 00000 n
-0000025809 00000 n
-0000026002 00000 n
-0000026082 00000 n
-0000026119 00000 n
-0000026200 00000 n
-0000026324 00000 n
-0000026583 00000 n
-0000026942 00000 n
-0000026974 00000 n
-0000027068 00000 n
-0000028101 00000 n
-0000039237 00000 n
-0000104827 00000 n
-0000170417 00000 n
-0000236007 00000 n
-0000290731 00000 n
-0000290546 00000 n
-0000289401 00000 n
-0000290668 00000 n
-0001128114 00000 n
-0001101495 00000 n
-0001127940 00000 n
-0001100810 00000 n
-0001098665 00000 n
-0001100646 00000 n
-0000302473 00000 n
-0000293782 00000 n
-0000290816 00000 n
-0000302347 00000 n
-0000302410 00000 n
-0000294336 00000 n
-0000294490 00000 n
-0000294647 00000 n
-0000294804 00000 n
-0000294961 00000 n
-0000295118 00000 n
-0000295280 00000 n
-0000295442 00000 n
-0000295603 00000 n
-0000295765 00000 n
-0000295932 00000 n
-0000296099 00000 n
-0000296264 00000 n
-0000296426 00000 n
-0000296592 00000 n
-0000296754 00000 n
-0000296908 00000 n
-0000297065 00000 n
-0000297222 00000 n
-0000297378 00000 n
-0000297534 00000 n
-0000297691 00000 n
-0000297846 00000 n
-0000298003 00000 n
-0000298165 00000 n
-0000298327 00000 n
-0000298484 00000 n
-0000298639 00000 n
-0000298800 00000 n
-0000298967 00000 n
-0000299134 00000 n
-0000299296 00000 n
-0000299452 00000 n
-0000299610 00000 n
-0000299768 00000 n
-0000299931 00000 n
-0000300089 00000 n
-0000300247 00000 n
-0000300409 00000 n
-0000300567 00000 n
-0000300730 00000 n
-0000300898 00000 n
-0000301066 00000 n
-0000301229 00000 n
-0000301392 00000 n
-0000301555 00000 n
-0000301717 00000 n
-0000301880 00000 n
-0000302036 00000 n
-0000302192 00000 n
-0000315981 00000 n
-0000305912 00000 n
-0000302558 00000 n
-0000315916 00000 n
-0001098077 00000 n
-0001080656 00000 n
-0001097891 00000 n
-0000306562 00000 n
-0000306726 00000 n
-0000306889 00000 n
-0000307053 00000 n
-0000307212 00000 n
-0000307376 00000 n
-0000307540 00000 n
-0000307704 00000 n
-0000307868 00000 n
-0000308032 00000 n
-0000308196 00000 n
-0000308360 00000 n
-0000308524 00000 n
-0000308688 00000 n
-0000308853 00000 n
-0000309018 00000 n
-0000309183 00000 n
-0000309348 00000 n
-0000309508 00000 n
-0000309673 00000 n
-0000309837 00000 n
-0000309997 00000 n
-0000310162 00000 n
-0000310332 00000 n
-0000310502 00000 n
-0000310672 00000 n
-0000310836 00000 n
-0000311005 00000 n
-0000311175 00000 n
-0000311345 00000 n
-0000311509 00000 n
-0000311674 00000 n
-0000311839 00000 n
-0000312004 00000 n
-0000312164 00000 n
-0000312329 00000 n
-0000312494 00000 n
-0000312651 00000 n
-0000312810 00000 n
-0000312969 00000 n
-0000313125 00000 n
-0000313284 00000 n
-0000313448 00000 n
-0000313617 00000 n
-0000313786 00000 n
-0000313950 00000 n
-0000314119 00000 n
-0000314288 00000 n
-0000314447 00000 n
-0000314611 00000 n
-0000314775 00000 n
-0000314939 00000 n
-0000315103 00000 n
-0000315267 00000 n
-0000315431 00000 n
-0000315593 00000 n
-0000315754 00000 n
-0000330136 00000 n
-0000319588 00000 n
-0000316081 00000 n
-0000330071 00000 n
-0000320256 00000 n
-0000320420 00000 n
-0000320589 00000 n
-0000320758 00000 n
-0000320926 00000 n
-0000321090 00000 n
-0000321253 00000 n
-0000321417 00000 n
-0000321581 00000 n
-0000321745 00000 n
-0000321908 00000 n
-0000322077 00000 n
-0000322246 00000 n
-0000322414 00000 n
-0000322583 00000 n
-0000322752 00000 n
-0000322921 00000 n
-0000323090 00000 n
-0000323259 00000 n
-0000323427 00000 n
-0000323597 00000 n
-0000323767 00000 n
-0000323937 00000 n
-0000324107 00000 n
-0000324277 00000 n
-0000324447 00000 n
-0000324617 00000 n
-0000324787 00000 n
-0000324957 00000 n
-0000325127 00000 n
-0000325296 00000 n
-0000325460 00000 n
-0000325624 00000 n
-0000325788 00000 n
-0000325952 00000 n
-0000326116 00000 n
-0000326279 00000 n
-0000326443 00000 n
-0000326607 00000 n
-0000326770 00000 n
-0000326934 00000 n
-0000327098 00000 n
-0000327262 00000 n
-0000327431 00000 n
-0000327600 00000 n
-0000327768 00000 n
-0000327937 00000 n
-0000328095 00000 n
-0000328257 00000 n
-0000328425 00000 n
-0000328592 00000 n
-0000328755 00000 n
-0000328918 00000 n
-0000329081 00000 n
-0000329244 00000 n
-0000329412 00000 n
-0000329579 00000 n
-0000329745 00000 n
-0000329910 00000 n
-0000343318 00000 n
-0000333744 00000 n
-0000330236 00000 n
-0000343253 00000 n
-0000334376 00000 n
-0000334539 00000 n
-0000334697 00000 n
-0000334865 00000 n
-0000335028 00000 n
-0000335196 00000 n
-0000335364 00000 n
-0000335531 00000 n
-0001079765 00000 n
-0001058431 00000 n
-0001079589 00000 n
-0000335697 00000 n
-0000335864 00000 n
-0000336020 00000 n
-0000336177 00000 n
-0000336335 00000 n
-0000336498 00000 n
-0000336661 00000 n
-0000336819 00000 n
-0000336975 00000 n
-0000337133 00000 n
-0000337296 00000 n
-0000337454 00000 n
-0000337612 00000 n
-0000337769 00000 n
-0000337927 00000 n
-0000338090 00000 n
-0000338248 00000 n
-0000338411 00000 n
-0000338569 00000 n
-0000338732 00000 n
-0000338895 00000 n
-0000339058 00000 n
-0000339216 00000 n
-0000339379 00000 n
-0000339542 00000 n
-0000339705 00000 n
-0000339868 00000 n
-0000340031 00000 n
-0000340194 00000 n
-0000340362 00000 n
-0000340530 00000 n
-0000340697 00000 n
-0000340864 00000 n
-0000341032 00000 n
-0000341200 00000 n
-0000341363 00000 n
-0000341519 00000 n
-0000341677 00000 n
-0000341835 00000 n
-0000341993 00000 n
-0000342151 00000 n
-0000342309 00000 n
-0000342467 00000 n
-0000342625 00000 n
-0000342783 00000 n
-0000342939 00000 n
-0000343096 00000 n
-0000346157 00000 n
-0000344278 00000 n
-0000343432 00000 n
-0000346092 00000 n
-0000344506 00000 n
-0000344665 00000 n
-0000344824 00000 n
-0001057463 00000 n
-0001037493 00000 n
-0001057288 00000 n
-0000344982 00000 n
-0000345141 00000 n
-0000345299 00000 n
-0000345458 00000 n
-0000345617 00000 n
-0000345776 00000 n
-0000345933 00000 n
-0001156594 00000 n
-0000349280 00000 n
-0000348513 00000 n
-0000346258 00000 n
-0000348701 00000 n
-0000348829 00000 n
-0000348957 00000 n
-0000349085 00000 n
-0000349150 00000 n
-0000349215 00000 n
-0001036676 00000 n
-0001018211 00000 n
-0001036501 00000 n
-0000353817 00000 n
-0000352676 00000 n
-0000349408 00000 n
-0000353178 00000 n
-0000353243 00000 n
-0000353370 00000 n
-0000353498 00000 n
-0000353626 00000 n
-0000352832 00000 n
-0000353026 00000 n
-0000353752 00000 n
-0000702777 00000 n
-0000764779 00000 n
-0000358499 00000 n
-0000357441 00000 n
-0000353945 00000 n
-0000357922 00000 n
-0000358050 00000 n
-0000357597 00000 n
-0000357760 00000 n
-0000358178 00000 n
-0000358306 00000 n
-0000358434 00000 n
-0000374296 00000 n
-0000361740 00000 n
-0000361165 00000 n
-0000358627 00000 n
-0000361291 00000 n
-0000361419 00000 n
-0000361547 00000 n
-0000361675 00000 n
-0000365198 00000 n
-0000364032 00000 n
-0000361854 00000 n
-0000364494 00000 n
-0000364622 00000 n
-0000364750 00000 n
-0000364878 00000 n
-0000365006 00000 n
-0000364188 00000 n
-0000364341 00000 n
-0000365133 00000 n
-0000626071 00000 n
-0000366275 00000 n
-0000365956 00000 n
-0000365284 00000 n
-0000366082 00000 n
-0000366210 00000 n
-0001156719 00000 n
-0000368318 00000 n
-0000367615 00000 n
-0000366375 00000 n
-0000367741 00000 n
-0000367869 00000 n
-0000367996 00000 n
-0000368124 00000 n
-0000368253 00000 n
-0000370897 00000 n
-0000370267 00000 n
-0000368418 00000 n
-0000370573 00000 n
-0000370702 00000 n
-0000370767 00000 n
-0000370832 00000 n
-0000370414 00000 n
-0000607020 00000 n
-0000374490 00000 n
-0000373785 00000 n
-0000371011 00000 n
-0000373911 00000 n
-0000374040 00000 n
-0000374167 00000 n
-0001017528 00000 n
-0001005466 00000 n
-0001017349 00000 n
-0000374425 00000 n
-0000379097 00000 n
-0000378207 00000 n
-0000374618 00000 n
-0000379032 00000 n
-0001004893 00000 n
-0000993960 00000 n
-0001004714 00000 n
-0000378381 00000 n
-0000378536 00000 n
-0000378706 00000 n
-0000378861 00000 n
-0000524492 00000 n
-0000691960 00000 n
-0000382462 00000 n
-0000382271 00000 n
-0000379266 00000 n
-0000382397 00000 n
-0000387241 00000 n
-0000386843 00000 n
-0000382604 00000 n
-0000387176 00000 n
-0000386990 00000 n
-0001156844 00000 n
-0000491355 00000 n
-0000389484 00000 n
-0000389036 00000 n
-0000387397 00000 n
-0000389162 00000 n
-0000389290 00000 n
-0000389355 00000 n
-0000389420 00000 n
-0000389953 00000 n
-0000389762 00000 n
-0000389612 00000 n
-0000389888 00000 n
-0000392648 00000 n
-0000395238 00000 n
-0000392483 00000 n
-0000389995 00000 n
-0000394786 00000 n
-0000394915 00000 n
-0000395044 00000 n
-0000394291 00000 n
-0000394453 00000 n
-0000993054 00000 n
-0000983034 00000 n
-0000992880 00000 n
-0000982470 00000 n
-0000973384 00000 n
-0000982295 00000 n
-0000395173 00000 n
-0000394615 00000 n
-0000394120 00000 n
-0000394178 00000 n
-0000394268 00000 n
-0000544452 00000 n
-0000584547 00000 n
-0000399868 00000 n
-0000398932 00000 n
-0000395409 00000 n
-0000399416 00000 n
-0000399545 00000 n
-0000399674 00000 n
-0000399088 00000 n
-0000399254 00000 n
-0000399803 00000 n
-0000768810 00000 n
-0000403588 00000 n
-0000403268 00000 n
-0000400024 00000 n
-0000403394 00000 n
-0000403523 00000 n
-0000405164 00000 n
-0000404784 00000 n
-0000403729 00000 n
-0000405099 00000 n
-0000404931 00000 n
-0001156969 00000 n
-0000406741 00000 n
-0000406422 00000 n
-0000405265 00000 n
-0000406548 00000 n
-0000406677 00000 n
-0000410203 00000 n
-0000409367 00000 n
-0000406855 00000 n
-0000409493 00000 n
-0000409622 00000 n
-0000409751 00000 n
-0000409880 00000 n
-0000410009 00000 n
-0000410138 00000 n
-0000414052 00000 n
-0000413155 00000 n
-0000410345 00000 n
-0000413472 00000 n
-0000413601 00000 n
-0000413730 00000 n
-0000413302 00000 n
-0000413859 00000 n
-0000413988 00000 n
-0000418170 00000 n
-0000417593 00000 n
-0000414193 00000 n
-0000417719 00000 n
-0000417848 00000 n
-0000417976 00000 n
-0000418105 00000 n
-0000422201 00000 n
-0000421753 00000 n
-0000418312 00000 n
-0000421879 00000 n
-0000422008 00000 n
-0000422136 00000 n
-0000424201 00000 n
-0000424010 00000 n
-0000422329 00000 n
-0000424136 00000 n
-0001157094 00000 n
-0000427470 00000 n
-0000427021 00000 n
-0000424302 00000 n
-0000427147 00000 n
-0000973109 00000 n
-0000969750 00000 n
-0000972930 00000 n
-0000427276 00000 n
-0000427405 00000 n
-0000431533 00000 n
-0000430596 00000 n
-0000427641 00000 n
-0000431081 00000 n
-0000431210 00000 n
-0000431339 00000 n
-0000969395 00000 n
-0000967397 00000 n
-0000969230 00000 n
-0000430752 00000 n
-0000430917 00000 n
-0000431468 00000 n
-0000846884 00000 n
-0000863051 00000 n
-0000434908 00000 n
-0000434331 00000 n
-0000431661 00000 n
-0000434457 00000 n
-0000434586 00000 n
-0000434715 00000 n
-0000434844 00000 n
-0000438906 00000 n
-0000437510 00000 n
-0000435022 00000 n
-0000437813 00000 n
-0000437942 00000 n
-0000438070 00000 n
-0000438199 00000 n
-0000438328 00000 n
-0000438455 00000 n
-0000438584 00000 n
-0000438713 00000 n
-0000438842 00000 n
-0000437657 00000 n
-0000654219 00000 n
-0000442628 00000 n
-0000442179 00000 n
-0000439034 00000 n
-0000442305 00000 n
-0000442434 00000 n
-0000442563 00000 n
-0000445788 00000 n
-0000445468 00000 n
-0000442742 00000 n
-0000445594 00000 n
-0000445723 00000 n
-0001157219 00000 n
-0000448611 00000 n
-0000448163 00000 n
-0000445958 00000 n
-0000448289 00000 n
-0000448418 00000 n
-0000448546 00000 n
-0000451649 00000 n
-0000451073 00000 n
-0000448768 00000 n
-0000451199 00000 n
-0000451328 00000 n
-0000451457 00000 n
-0000451586 00000 n
-0000454531 00000 n
-0000453825 00000 n
-0000451763 00000 n
-0000453951 00000 n
-0000454080 00000 n
-0000454209 00000 n
-0000454338 00000 n
-0000454467 00000 n
-0000457225 00000 n
-0000457034 00000 n
-0000454645 00000 n
-0000457160 00000 n
-0000459732 00000 n
-0000460980 00000 n
-0000459606 00000 n
-0000457339 00000 n
-0000460658 00000 n
-0000460787 00000 n
-0000460915 00000 n
-0000464030 00000 n
-0000463271 00000 n
-0000461151 00000 n
-0000463578 00000 n
-0000463707 00000 n
-0000463418 00000 n
-0000463836 00000 n
-0000463965 00000 n
-0001157344 00000 n
-0000764521 00000 n
-0000466730 00000 n
-0000466152 00000 n
-0000464158 00000 n
-0000466278 00000 n
-0000466407 00000 n
-0000466536 00000 n
-0000466665 00000 n
-0000467171 00000 n
-0000466980 00000 n
-0000466830 00000 n
-0000467106 00000 n
-0000471258 00000 n
-0000470492 00000 n
-0000467213 00000 n
-0000470806 00000 n
-0000470935 00000 n
-0000471063 00000 n
-0000471128 00000 n
-0000471193 00000 n
-0000470639 00000 n
-0000475756 00000 n
-0000475948 00000 n
-0000475501 00000 n
-0000471358 00000 n
-0000475627 00000 n
-0000475883 00000 n
-0000479800 00000 n
-0000479222 00000 n
-0000476076 00000 n
-0000479348 00000 n
-0000479477 00000 n
-0000479606 00000 n
-0000479735 00000 n
-0000482910 00000 n
-0000482332 00000 n
-0000479941 00000 n
-0000482458 00000 n
-0000482587 00000 n
-0000482716 00000 n
-0000482781 00000 n
-0000482845 00000 n
-0001157469 00000 n
-0000486235 00000 n
-0000485531 00000 n
-0000483067 00000 n
-0000485657 00000 n
-0000485786 00000 n
-0000485914 00000 n
-0000485979 00000 n
-0000486044 00000 n
-0000486170 00000 n
-0000491548 00000 n
-0000490760 00000 n
-0000486349 00000 n
-0000491226 00000 n
-0000490916 00000 n
-0000491067 00000 n
-0000491484 00000 n
-0000948376 00000 n
-0000495413 00000 n
-0000494142 00000 n
-0000491689 00000 n
-0000494832 00000 n
-0000494961 00000 n
-0000495090 00000 n
-0000495219 00000 n
-0000494307 00000 n
-0000494459 00000 n
-0000494645 00000 n
-0000495348 00000 n
-0000499560 00000 n
-0000499111 00000 n
-0000495541 00000 n
-0000499237 00000 n
-0000499366 00000 n
-0000499495 00000 n
-0000503466 00000 n
-0000503087 00000 n
-0000499688 00000 n
-0000503401 00000 n
-0000503234 00000 n
-0000506316 00000 n
-0000506511 00000 n
-0000506061 00000 n
-0000503580 00000 n
-0000506187 00000 n
-0000506381 00000 n
-0000506446 00000 n
-0001157594 00000 n
-0000510072 00000 n
-0000509881 00000 n
-0000506625 00000 n
-0000510007 00000 n
-0000513619 00000 n
-0000513170 00000 n
-0000510186 00000 n
-0000513296 00000 n
-0000513424 00000 n
-0000513489 00000 n
-0000513554 00000 n
-0000517215 00000 n
-0000516432 00000 n
-0000513733 00000 n
-0000516893 00000 n
-0000517022 00000 n
-0000517150 00000 n
-0000516588 00000 n
-0000516741 00000 n
-0000519411 00000 n
-0000518833 00000 n
-0000517329 00000 n
-0000518959 00000 n
-0000519088 00000 n
-0000519217 00000 n
-0000519346 00000 n
-0000520991 00000 n
-0000520800 00000 n
-0000519525 00000 n
-0000520926 00000 n
-0000522519 00000 n
-0000522328 00000 n
-0000521092 00000 n
-0000522454 00000 n
-0001157719 00000 n
-0000524556 00000 n
-0000524237 00000 n
-0000522620 00000 n
-0000524363 00000 n
-0000528083 00000 n
-0000527892 00000 n
-0000524670 00000 n
-0000528018 00000 n
-0000532444 00000 n
-0000532075 00000 n
-0000528225 00000 n
-0000532379 00000 n
-0000532222 00000 n
-0000731826 00000 n
-0000536380 00000 n
-0000535998 00000 n
-0000532572 00000 n
-0000536315 00000 n
-0000536145 00000 n
-0000540898 00000 n
-0000540533 00000 n
-0000536508 00000 n
-0000540833 00000 n
-0000540680 00000 n
-0000544646 00000 n
-0000544197 00000 n
-0000541040 00000 n
-0000544323 00000 n
-0000544517 00000 n
-0000544581 00000 n
-0001157844 00000 n
-0000548947 00000 n
-0000548581 00000 n
-0000544774 00000 n
-0000548882 00000 n
-0000548728 00000 n
-0000554031 00000 n
-0000552898 00000 n
-0000549075 00000 n
-0000553966 00000 n
-0000553081 00000 n
-0000553237 00000 n
-0000553422 00000 n
-0000553596 00000 n
-0000553781 00000 n
-0000640740 00000 n
-0000558307 00000 n
-0000558116 00000 n
-0000554229 00000 n
-0000558242 00000 n
-0000562260 00000 n
-0000562069 00000 n
-0000558421 00000 n
-0000562195 00000 n
-0000566114 00000 n
-0000565794 00000 n
-0000562374 00000 n
-0000565920 00000 n
-0000566049 00000 n
-0000569878 00000 n
-0000569062 00000 n
-0000566228 00000 n
-0000569555 00000 n
-0000569218 00000 n
-0000569684 00000 n
-0000569813 00000 n
-0000569388 00000 n
-0001157969 00000 n
-0000659573 00000 n
-0000574304 00000 n
-0000573613 00000 n
-0000570035 00000 n
-0000574110 00000 n
-0000573769 00000 n
-0000573939 00000 n
-0000574239 00000 n
-0000751896 00000 n
-0000577652 00000 n
-0000577332 00000 n
-0000574432 00000 n
-0000577458 00000 n
-0000577587 00000 n
-0000580605 00000 n
-0000580414 00000 n
-0000577766 00000 n
-0000580540 00000 n
-0000584611 00000 n
-0000584292 00000 n
-0000580776 00000 n
-0000584418 00000 n
-0000588170 00000 n
-0000587979 00000 n
-0000584768 00000 n
-0000588105 00000 n
-0000592511 00000 n
-0000591697 00000 n
-0000588341 00000 n
-0000592188 00000 n
-0000592317 00000 n
-0000591853 00000 n
-0000592446 00000 n
-0000592014 00000 n
-0001158094 00000 n
-0000596595 00000 n
-0000595971 00000 n
-0000592668 00000 n
-0000596273 00000 n
-0000596402 00000 n
-0000596118 00000 n
-0000596531 00000 n
-0000599815 00000 n
-0000599495 00000 n
-0000596723 00000 n
-0000599621 00000 n
-0000599750 00000 n
-0000603666 00000 n
-0000603000 00000 n
-0000599972 00000 n
-0000603473 00000 n
-0000603601 00000 n
-0000603156 00000 n
-0000603317 00000 n
-0000607215 00000 n
-0000606574 00000 n
-0000603837 00000 n
-0000606891 00000 n
-0000606721 00000 n
-0000607085 00000 n
-0000607150 00000 n
-0000611096 00000 n
-0000610593 00000 n
-0000607400 00000 n
-0000610902 00000 n
-0000611031 00000 n
-0000610740 00000 n
-0000615678 00000 n
-0000615303 00000 n
-0000611267 00000 n
-0000615613 00000 n
-0000615450 00000 n
-0001158219 00000 n
-0000728061 00000 n
-0000619594 00000 n
-0000618956 00000 n
-0000615806 00000 n
-0000619272 00000 n
-0000619401 00000 n
-0000619103 00000 n
-0000619529 00000 n
-0000657690 00000 n
-0000622185 00000 n
-0000621994 00000 n
-0000619721 00000 n
-0000622120 00000 n
-0000626264 00000 n
-0000625817 00000 n
-0000622355 00000 n
-0000625943 00000 n
-0000626199 00000 n
-0000630269 00000 n
-0000629906 00000 n
-0000626378 00000 n
-0000630204 00000 n
-0000630053 00000 n
-0000634441 00000 n
-0000634121 00000 n
-0000630397 00000 n
-0000634247 00000 n
-0000634376 00000 n
-0000638406 00000 n
-0000638215 00000 n
-0000634568 00000 n
-0000638341 00000 n
-0001158344 00000 n
-0000640805 00000 n
-0000640356 00000 n
-0000638533 00000 n
-0000640482 00000 n
-0000640611 00000 n
-0000645519 00000 n
-0000644988 00000 n
-0000640919 00000 n
-0000645454 00000 n
-0000645144 00000 n
-0000645295 00000 n
-0000649846 00000 n
-0000648964 00000 n
-0000645619 00000 n
-0000649265 00000 n
-0000649394 00000 n
-0000649523 00000 n
-0000649652 00000 n
-0000649781 00000 n
-0000649111 00000 n
-0000654284 00000 n
-0000653835 00000 n
-0000649960 00000 n
-0000653961 00000 n
-0000654090 00000 n
-0000657884 00000 n
-0000657435 00000 n
-0000654426 00000 n
-0000657561 00000 n
-0000657819 00000 n
-0000659638 00000 n
-0000659318 00000 n
-0000657998 00000 n
-0000659444 00000 n
-0001158469 00000 n
-0000661250 00000 n
-0000661059 00000 n
-0000659752 00000 n
-0000661185 00000 n
-0000662636 00000 n
-0000662445 00000 n
-0000661351 00000 n
-0000662571 00000 n
-0000666358 00000 n
-0000665779 00000 n
-0000662737 00000 n
-0000665905 00000 n
-0000666034 00000 n
-0000666163 00000 n
-0000666228 00000 n
-0000666293 00000 n
-0000670465 00000 n
-0000669957 00000 n
-0000666472 00000 n
-0000670271 00000 n
-0000670104 00000 n
-0000670400 00000 n
-0000948343 00000 n
-0000676387 00000 n
-0000673480 00000 n
-0000670579 00000 n
-0000676193 00000 n
-0000676322 00000 n
-0000673753 00000 n
-0000673915 00000 n
-0000674077 00000 n
-0000674239 00000 n
-0000674401 00000 n
-0000674563 00000 n
-0000674734 00000 n
-0000674896 00000 n
-0000675059 00000 n
-0000675219 00000 n
-0000675380 00000 n
-0000675543 00000 n
-0000675706 00000 n
-0000675869 00000 n
-0000676032 00000 n
-0000681485 00000 n
-0000679568 00000 n
-0000676501 00000 n
-0000681420 00000 n
-0000679796 00000 n
-0000679957 00000 n
-0000680125 00000 n
-0000680295 00000 n
-0000680456 00000 n
-0000680618 00000 n
-0000680780 00000 n
-0000680942 00000 n
-0000681105 00000 n
-0000681259 00000 n
-0001158594 00000 n
-0000686017 00000 n
-0000684655 00000 n
-0000681613 00000 n
-0000685952 00000 n
-0000684856 00000 n
-0000685010 00000 n
-0000685164 00000 n
-0000685318 00000 n
-0000685472 00000 n
-0000685634 00000 n
-0000685794 00000 n
-0000692025 00000 n
-0000689661 00000 n
-0000686145 00000 n
-0000691833 00000 n
-0000689907 00000 n
-0000690068 00000 n
-0000690230 00000 n
-0000690392 00000 n
-0000690554 00000 n
-0000690708 00000 n
-0000690871 00000 n
-0000691026 00000 n
-0000691191 00000 n
-0000691357 00000 n
-0000691519 00000 n
-0000691673 00000 n
-0000696120 00000 n
-0000695799 00000 n
-0000692153 00000 n
-0000695925 00000 n
-0000695990 00000 n
-0000696055 00000 n
-0000698894 00000 n
-0000698703 00000 n
-0000696262 00000 n
-0000698829 00000 n
-0000703101 00000 n
-0000702031 00000 n
-0000699052 00000 n
-0000702519 00000 n
-0000702648 00000 n
-0000702906 00000 n
-0000702187 00000 n
-0000702357 00000 n
-0000702971 00000 n
-0000703036 00000 n
-0000706552 00000 n
-0000706232 00000 n
-0000703229 00000 n
-0000706358 00000 n
-0000706423 00000 n
-0000706487 00000 n
-0001158719 00000 n
-0000710040 00000 n
-0000709719 00000 n
-0000706653 00000 n
-0000709845 00000 n
-0000709910 00000 n
-0000709975 00000 n
-0000713961 00000 n
-0000713252 00000 n
-0000710155 00000 n
-0000713378 00000 n
-0000713507 00000 n
-0000713572 00000 n
-0000713637 00000 n
-0000713702 00000 n
-0000713767 00000 n
-0000713896 00000 n
-0000718202 00000 n
-0000717365 00000 n
-0000714075 00000 n
-0000717491 00000 n
-0000717556 00000 n
-0000717621 00000 n
-0000717750 00000 n
-0000717815 00000 n
-0000717880 00000 n
-0000718009 00000 n
-0000718074 00000 n
-0000718138 00000 n
-0000721229 00000 n
-0000720527 00000 n
-0000718330 00000 n
-0000720653 00000 n
-0000720780 00000 n
-0000720907 00000 n
-0000721036 00000 n
-0000721164 00000 n
-0000723939 00000 n
-0000723362 00000 n
-0000721428 00000 n
-0000723488 00000 n
-0000723617 00000 n
-0000723746 00000 n
-0000723811 00000 n
-0000723875 00000 n
-0000728126 00000 n
-0000727806 00000 n
-0000724124 00000 n
-0000727932 00000 n
-0001158844 00000 n
-0000731891 00000 n
-0000731131 00000 n
-0000728253 00000 n
-0000731438 00000 n
-0000731567 00000 n
-0000731632 00000 n
-0000731697 00000 n
-0000731278 00000 n
-0000735582 00000 n
-0000735003 00000 n
-0000732005 00000 n
-0000735129 00000 n
-0000735258 00000 n
-0000735387 00000 n
-0000735452 00000 n
-0000735517 00000 n
-0000739196 00000 n
-0000738301 00000 n
-0000735696 00000 n
-0000738613 00000 n
-0000738448 00000 n
-0000738742 00000 n
-0000738807 00000 n
-0000738872 00000 n
-0000739001 00000 n
-0000739066 00000 n
-0000739131 00000 n
-0000948310 00000 n
-0000743353 00000 n
-0000742903 00000 n
-0000739310 00000 n
-0000743029 00000 n
-0000743158 00000 n
-0000743223 00000 n
-0000743288 00000 n
-0000745244 00000 n
-0000744924 00000 n
-0000743481 00000 n
-0000745050 00000 n
-0000967116 00000 n
-0000959832 00000 n
-0000966936 00000 n
-0000745179 00000 n
-0000745727 00000 n
-0000745536 00000 n
-0000745386 00000 n
-0000745662 00000 n
-0001158969 00000 n
-0000747539 00000 n
-0000747092 00000 n
-0000745769 00000 n
-0000747218 00000 n
-0000747347 00000 n
-0000747474 00000 n
-0000751961 00000 n
-0000751018 00000 n
-0000747653 00000 n
-0000751381 00000 n
-0000959511 00000 n
-0000950298 00000 n
-0000959325 00000 n
-0000751165 00000 n
-0000751510 00000 n
-0000751638 00000 n
-0000751767 00000 n
-0000753320 00000 n
-0000753129 00000 n
-0000752202 00000 n
-0000753255 00000 n
-0000753761 00000 n
-0000753570 00000 n
-0000753420 00000 n
-0000753696 00000 n
-0000757075 00000 n
-0000755849 00000 n
-0000753803 00000 n
-0000756366 00000 n
-0000756495 00000 n
-0000756624 00000 n
-0000756753 00000 n
-0000756882 00000 n
-0000757011 00000 n
-0000756005 00000 n
-0000756177 00000 n
-0000757530 00000 n
-0000757339 00000 n
-0000757189 00000 n
-0000757465 00000 n
-0001159094 00000 n
-0000760775 00000 n
-0000760197 00000 n
-0000757572 00000 n
-0000760323 00000 n
-0000760452 00000 n
-0000760581 00000 n
-0000760710 00000 n
-0000764972 00000 n
-0000763753 00000 n
-0000760861 00000 n
-0000764263 00000 n
-0000764392 00000 n
-0000764650 00000 n
-0000763909 00000 n
-0000764088 00000 n
-0000764844 00000 n
-0000764908 00000 n
-0000771862 00000 n
-0000768034 00000 n
-0000765128 00000 n
-0000768160 00000 n
-0000768225 00000 n
-0000768290 00000 n
-0000768355 00000 n
-0000768420 00000 n
-0000768485 00000 n
-0000768550 00000 n
-0000768615 00000 n
-0000768680 00000 n
-0000768745 00000 n
-0000768875 00000 n
-0000768940 00000 n
-0000769005 00000 n
-0000769070 00000 n
-0000769135 00000 n
-0000769200 00000 n
-0000769265 00000 n
-0000769330 00000 n
-0000769395 00000 n
-0000769460 00000 n
-0000769525 00000 n
-0000769590 00000 n
-0000769655 00000 n
-0000769720 00000 n
-0000769785 00000 n
-0000769850 00000 n
-0000769915 00000 n
-0000769980 00000 n
-0000770045 00000 n
-0000770110 00000 n
-0000770175 00000 n
-0000770240 00000 n
-0000770305 00000 n
-0000770370 00000 n
-0000770434 00000 n
-0000770499 00000 n
-0000770564 00000 n
-0000770629 00000 n
-0000770694 00000 n
-0000770759 00000 n
-0000770824 00000 n
-0000770889 00000 n
-0000770954 00000 n
-0000771019 00000 n
-0000771084 00000 n
+0000022981 00000 n
+0000900145 00000 n
+0001202755 00000 n
+0000023031 00000 n
+0000023071 00000 n
+0000917722 00000 n
+0001202662 00000 n
+0000023121 00000 n
+0000023159 00000 n
+0000920624 00000 n
+0001202569 00000 n
+0000023209 00000 n
+0000023249 00000 n
+0000923539 00000 n
+0001202476 00000 n
+0000023299 00000 n
+0000023339 00000 n
+0000930509 00000 n
+0001202383 00000 n
+0000023389 00000 n
+0000023419 00000 n
+0000940141 00000 n
+0001202290 00000 n
+0000023469 00000 n
+0000023512 00000 n
+0000943226 00000 n
+0001202197 00000 n
+0000023562 00000 n
+0000023595 00000 n
+0000957608 00000 n
+0001202104 00000 n
+0000023645 00000 n
+0000023674 00000 n
+0000961270 00000 n
+0001202011 00000 n
+0000023724 00000 n
+0000023758 00000 n
+0000970689 00000 n
+0001201918 00000 n
+0000023808 00000 n
+0000023845 00000 n
+0000973901 00000 n
+0001201825 00000 n
+0000023895 00000 n
+0000023932 00000 n
+0000977464 00000 n
+0001201732 00000 n
+0000023982 00000 n
+0000024015 00000 n
+0000979620 00000 n
+0001201639 00000 n
+0000024065 00000 n
+0000024099 00000 n
+0000982335 00000 n
+0001201546 00000 n
+0000024149 00000 n
+0000024188 00000 n
+0000982852 00000 n
+0001201467 00000 n
+0000024238 00000 n
+0000024272 00000 n
+0000024645 00000 n
+0000024767 00000 n
+0000289568 00000 n
+0000024325 00000 n
+0000289442 00000 n
+0000289505 00000 n
+0001195528 00000 n
+0001169386 00000 n
+0001195354 00000 n
+0001196574 00000 n
+0000026076 00000 n
+0000026269 00000 n
+0000026349 00000 n
+0000026386 00000 n
+0000026467 00000 n
+0000026591 00000 n
+0000026850 00000 n
+0000027209 00000 n
+0000027241 00000 n
+0000027335 00000 n
+0000028368 00000 n
+0000039504 00000 n
+0000105094 00000 n
+0000170684 00000 n
+0000236274 00000 n
+0000291008 00000 n
+0000290823 00000 n
+0000289668 00000 n
+0000290945 00000 n
+0001168150 00000 n
+0001141531 00000 n
+0001167976 00000 n
+0001140846 00000 n
+0001138701 00000 n
+0001140682 00000 n
+0000302775 00000 n
+0000294059 00000 n
+0000291093 00000 n
+0000302649 00000 n
+0000302712 00000 n
+0000294625 00000 n
+0000294779 00000 n
+0000294936 00000 n
+0000295093 00000 n
+0000295250 00000 n
+0000295407 00000 n
+0000295569 00000 n
+0000295731 00000 n
+0000295892 00000 n
+0000296054 00000 n
+0000296221 00000 n
+0000296388 00000 n
+0000296553 00000 n
+0000296715 00000 n
+0000296881 00000 n
+0000297043 00000 n
+0000297197 00000 n
+0000297354 00000 n
+0000297511 00000 n
+0000297668 00000 n
+0000297825 00000 n
+0000297983 00000 n
+0000298139 00000 n
+0000298297 00000 n
+0000298460 00000 n
+0000298623 00000 n
+0000298781 00000 n
+0000298937 00000 n
+0000299099 00000 n
+0000299267 00000 n
+0000299435 00000 n
+0000299598 00000 n
+0000299754 00000 n
+0000299912 00000 n
+0000300070 00000 n
+0000300233 00000 n
+0000300391 00000 n
+0000300549 00000 n
+0000300711 00000 n
+0000300869 00000 n
+0000301032 00000 n
+0000301200 00000 n
+0000301368 00000 n
+0000301531 00000 n
+0000301694 00000 n
+0000301857 00000 n
+0000302019 00000 n
+0000302182 00000 n
+0000302338 00000 n
+0000302494 00000 n
+0000316282 00000 n
+0000306214 00000 n
+0000302860 00000 n
+0000316217 00000 n
+0001138113 00000 n
+0001120692 00000 n
+0001137927 00000 n
+0000306864 00000 n
+0000307028 00000 n
+0000307191 00000 n
+0000307355 00000 n
+0000307514 00000 n
+0000307678 00000 n
+0000307842 00000 n
+0000308006 00000 n
+0000308170 00000 n
+0000308334 00000 n
+0000308498 00000 n
+0000308662 00000 n
+0000308826 00000 n
+0000308990 00000 n
+0000309155 00000 n
+0000309320 00000 n
+0000309485 00000 n
+0000309650 00000 n
+0000309810 00000 n
+0000309975 00000 n
+0000310139 00000 n
+0000310299 00000 n
+0000310464 00000 n
+0000310634 00000 n
+0000310804 00000 n
+0000310974 00000 n
+0000311138 00000 n
+0000311307 00000 n
+0000311477 00000 n
+0000311647 00000 n
+0000311811 00000 n
+0000311976 00000 n
+0000312141 00000 n
+0000312306 00000 n
+0000312466 00000 n
+0000312631 00000 n
+0000312796 00000 n
+0000312953 00000 n
+0000313112 00000 n
+0000313271 00000 n
+0000313427 00000 n
+0000313586 00000 n
+0000313750 00000 n
+0000313919 00000 n
+0000314088 00000 n
+0000314252 00000 n
+0000314421 00000 n
+0000314590 00000 n
+0000314749 00000 n
+0000314913 00000 n
+0000315077 00000 n
+0000315241 00000 n
+0000315405 00000 n
+0000315568 00000 n
+0000315732 00000 n
+0000315894 00000 n
+0000316055 00000 n
+0000330440 00000 n
+0000319891 00000 n
+0000316382 00000 n
+0000330375 00000 n
+0000320559 00000 n
+0000320723 00000 n
+0000320892 00000 n
+0000321061 00000 n
+0000321229 00000 n
+0000321393 00000 n
+0000321557 00000 n
+0000321721 00000 n
+0000321885 00000 n
+0000322049 00000 n
+0000322212 00000 n
+0000322381 00000 n
+0000322550 00000 n
+0000322718 00000 n
+0000322887 00000 n
+0000323056 00000 n
+0000323225 00000 n
+0000323394 00000 n
+0000323563 00000 n
+0000323731 00000 n
+0000323901 00000 n
+0000324071 00000 n
+0000324241 00000 n
+0000324411 00000 n
+0000324581 00000 n
+0000324751 00000 n
+0000324921 00000 n
+0000325091 00000 n
+0000325261 00000 n
+0000325431 00000 n
+0000325600 00000 n
+0000325764 00000 n
+0000325928 00000 n
+0000326092 00000 n
+0000326256 00000 n
+0000326420 00000 n
+0000326583 00000 n
+0000326747 00000 n
+0000326911 00000 n
+0000327074 00000 n
+0000327238 00000 n
+0000327402 00000 n
+0000327566 00000 n
+0000327735 00000 n
+0000327904 00000 n
+0000328072 00000 n
+0000328241 00000 n
+0000328399 00000 n
+0000328561 00000 n
+0000328729 00000 n
+0000328896 00000 n
+0000329059 00000 n
+0000329222 00000 n
+0000329385 00000 n
+0000329548 00000 n
+0000329716 00000 n
+0000329884 00000 n
+0000330050 00000 n
+0000330215 00000 n
+0000343626 00000 n
+0000334053 00000 n
+0000330540 00000 n
+0000343561 00000 n
+0000334685 00000 n
+0000334848 00000 n
+0000335006 00000 n
+0000335174 00000 n
+0000335337 00000 n
+0000335505 00000 n
+0000335673 00000 n
+0000335841 00000 n
+0001119801 00000 n
+0001098467 00000 n
+0001119625 00000 n
+0000336007 00000 n
+0000336174 00000 n
+0000336330 00000 n
+0000336487 00000 n
+0000336645 00000 n
+0000336808 00000 n
+0000336971 00000 n
+0000337129 00000 n
+0000337285 00000 n
+0000337443 00000 n
+0000337606 00000 n
+0000337764 00000 n
+0000337922 00000 n
+0000338079 00000 n
+0000338237 00000 n
+0000338400 00000 n
+0000338557 00000 n
+0000338719 00000 n
+0000338877 00000 n
+0000339040 00000 n
+0000339203 00000 n
+0000339366 00000 n
+0000339524 00000 n
+0000339687 00000 n
+0000339850 00000 n
+0000340013 00000 n
+0000340176 00000 n
+0000340339 00000 n
+0000340502 00000 n
+0000340670 00000 n
+0000340838 00000 n
+0000341005 00000 n
+0000341172 00000 n
+0000341340 00000 n
+0000341508 00000 n
+0000341671 00000 n
+0000341827 00000 n
+0000341985 00000 n
+0000342143 00000 n
+0000342301 00000 n
+0000342459 00000 n
+0000342617 00000 n
+0000342775 00000 n
+0000342933 00000 n
+0000343091 00000 n
+0000343247 00000 n
+0000343404 00000 n
+0000347103 00000 n
+0000344719 00000 n
+0000343740 00000 n
+0000347038 00000 n
+0000344974 00000 n
+0000345133 00000 n
+0000345292 00000 n
+0000345450 00000 n
+0000345609 00000 n
+0000345768 00000 n
+0001097488 00000 n
+0001077361 00000 n
+0001097313 00000 n
+0000345927 00000 n
+0000346086 00000 n
+0000346245 00000 n
+0000346403 00000 n
+0000346562 00000 n
+0000346720 00000 n
+0000346879 00000 n
+0001196695 00000 n
+0000350226 00000 n
+0000349459 00000 n
+0000347204 00000 n
+0000349647 00000 n
+0000349775 00000 n
+0000349903 00000 n
+0000350031 00000 n
+0000350096 00000 n
+0000350161 00000 n
+0001076519 00000 n
+0001057819 00000 n
+0001076344 00000 n
+0000354763 00000 n
+0000353622 00000 n
+0000350354 00000 n
+0000354124 00000 n
+0000354189 00000 n
+0000354316 00000 n
+0000354444 00000 n
+0000354572 00000 n
+0000353778 00000 n
+0000353972 00000 n
+0000354698 00000 n
+0000723202 00000 n
+0000784334 00000 n
+0000359445 00000 n
+0000358387 00000 n
+0000354891 00000 n
+0000358868 00000 n
+0000358996 00000 n
+0000358543 00000 n
+0000358706 00000 n
+0000359124 00000 n
+0000359252 00000 n
+0000359380 00000 n
+0000375242 00000 n
+0000362686 00000 n
+0000362111 00000 n
+0000359573 00000 n
+0000362237 00000 n
+0000362365 00000 n
+0000362493 00000 n
+0000362621 00000 n
+0000366144 00000 n
+0000364978 00000 n
+0000362800 00000 n
+0000365440 00000 n
+0000365568 00000 n
+0000365696 00000 n
+0000365824 00000 n
+0000365952 00000 n
+0000365134 00000 n
+0000365287 00000 n
+0000366079 00000 n
+0000639921 00000 n
+0000367221 00000 n
+0000366902 00000 n
+0000366230 00000 n
+0000367028 00000 n
+0000367156 00000 n
+0001196820 00000 n
+0000369264 00000 n
+0000368561 00000 n
+0000367321 00000 n
+0000368687 00000 n
+0000368815 00000 n
+0000368942 00000 n
+0000369070 00000 n
+0000369199 00000 n
+0000371843 00000 n
+0000371213 00000 n
+0000369364 00000 n
+0000371519 00000 n
+0000371648 00000 n
+0000371713 00000 n
+0000371778 00000 n
+0000371360 00000 n
+0000616618 00000 n
+0000375436 00000 n
+0000374731 00000 n
+0000371957 00000 n
+0000374857 00000 n
+0000374986 00000 n
+0000375113 00000 n
+0001057097 00000 n
+0001043720 00000 n
+0001056918 00000 n
+0000375371 00000 n
+0000380091 00000 n
+0000379201 00000 n
+0000375564 00000 n
+0000380026 00000 n
+0001043119 00000 n
+0001030698 00000 n
+0001042940 00000 n
+0000379375 00000 n
+0000379530 00000 n
+0000379700 00000 n
+0000379855 00000 n
+0000531610 00000 n
+0000712551 00000 n
+0000383692 00000 n
+0000383501 00000 n
+0000380260 00000 n
+0000383627 00000 n
+0000387911 00000 n
+0000387720 00000 n
+0000383847 00000 n
+0000387846 00000 n
+0001030343 00000 n
+0001028344 00000 n
+0001030178 00000 n
+0001196945 00000 n
+0000392039 00000 n
+0000391640 00000 n
+0000388081 00000 n
+0000391974 00000 n
+0000391787 00000 n
+0000496077 00000 n
+0000393602 00000 n
+0000393153 00000 n
+0000392167 00000 n
+0000393279 00000 n
+0000393408 00000 n
+0000393472 00000 n
+0000393537 00000 n
+0000396369 00000 n
+0000398959 00000 n
+0000396204 00000 n
+0000393716 00000 n
+0000398507 00000 n
+0000398636 00000 n
+0000398765 00000 n
+0000398012 00000 n
+0000398174 00000 n
+0001027438 00000 n
+0001017418 00000 n
+0001027264 00000 n
+0001016854 00000 n
+0001007768 00000 n
+0001016679 00000 n
+0000398894 00000 n
+0000398336 00000 n
+0000397841 00000 n
+0000397899 00000 n
+0000397989 00000 n
+0000552782 00000 n
+0000593746 00000 n
+0000403726 00000 n
+0000402790 00000 n
+0000399130 00000 n
+0000403274 00000 n
+0000403403 00000 n
+0000403532 00000 n
+0000402946 00000 n
+0000403112 00000 n
+0000403661 00000 n
+0000788365 00000 n
+0000407644 00000 n
+0000407135 00000 n
+0000403882 00000 n
+0000407450 00000 n
+0000407579 00000 n
+0000407282 00000 n
+0000408792 00000 n
+0000408601 00000 n
+0000407785 00000 n
+0000408727 00000 n
+0001197070 00000 n
+0000410658 00000 n
+0000410338 00000 n
+0000408893 00000 n
+0000410464 00000 n
+0000410593 00000 n
+0000413953 00000 n
+0000413118 00000 n
+0000410772 00000 n
+0000413244 00000 n
+0000413373 00000 n
+0000413502 00000 n
+0000413630 00000 n
+0000413759 00000 n
+0000413888 00000 n
+0000418007 00000 n
+0000417111 00000 n
+0000414095 00000 n
+0000417428 00000 n
+0000417557 00000 n
+0000417685 00000 n
+0000417258 00000 n
+0000417813 00000 n
+0000417942 00000 n
+0000422034 00000 n
+0000421456 00000 n
+0000418148 00000 n
+0000421582 00000 n
+0000421711 00000 n
+0000421840 00000 n
+0000421969 00000 n
+0000425961 00000 n
+0000425512 00000 n
+0000422176 00000 n
+0000425638 00000 n
+0000425767 00000 n
+0000425896 00000 n
+0000428274 00000 n
+0000428083 00000 n
+0000426089 00000 n
+0000428209 00000 n
+0001197195 00000 n
+0000431542 00000 n
+0000430964 00000 n
+0000428418 00000 n
+0000431090 00000 n
+0001007493 00000 n
+0001004134 00000 n
+0001007314 00000 n
+0000431219 00000 n
+0000431348 00000 n
+0000431477 00000 n
+0000435809 00000 n
+0000435130 00000 n
+0000431713 00000 n
+0000435615 00000 n
+0000435744 00000 n
+0000435286 00000 n
+0000435450 00000 n
+0000876654 00000 n
+0000893684 00000 n
+0000439175 00000 n
+0000438471 00000 n
+0000435937 00000 n
+0000438597 00000 n
+0000438726 00000 n
+0000438855 00000 n
+0000438984 00000 n
+0000439111 00000 n
+0000442580 00000 n
+0000441617 00000 n
+0000439289 00000 n
+0000441743 00000 n
+0000441872 00000 n
+0000442001 00000 n
+0000442129 00000 n
+0000442258 00000 n
+0000442386 00000 n
+0000442515 00000 n
+0000446702 00000 n
+0000445943 00000 n
+0000442708 00000 n
+0000446250 00000 n
+0000446379 00000 n
+0000446508 00000 n
+0000446090 00000 n
+0000446637 00000 n
+0000669800 00000 n
+0000450233 00000 n
+0000449784 00000 n
+0000446816 00000 n
+0000449910 00000 n
+0000450039 00000 n
+0000450168 00000 n
+0001197320 00000 n
+0000453029 00000 n
+0000452581 00000 n
+0000450403 00000 n
+0000452707 00000 n
+0000452836 00000 n
+0000452964 00000 n
+0000455747 00000 n
+0000455427 00000 n
+0000453186 00000 n
+0000455553 00000 n
+0000455682 00000 n
+0000458655 00000 n
+0000457819 00000 n
+0000455861 00000 n
+0000457945 00000 n
+0000458074 00000 n
+0000458203 00000 n
+0000458332 00000 n
+0000458461 00000 n
+0000458590 00000 n
+0000461287 00000 n
+0000460967 00000 n
+0000458769 00000 n
+0000461093 00000 n
+0000461222 00000 n
+0000467005 00000 n
+0000464225 00000 n
+0000463776 00000 n
+0000461401 00000 n
+0000463902 00000 n
+0000464031 00000 n
+0000464160 00000 n
+0000468544 00000 n
+0000466858 00000 n
+0000464353 00000 n
+0000468092 00000 n
+0000468221 00000 n
+0000467931 00000 n
+0000468350 00000 n
+0000468479 00000 n
+0001197445 00000 n
+0000784076 00000 n
+0000471287 00000 n
+0000470709 00000 n
+0000468715 00000 n
+0000470835 00000 n
+0000470964 00000 n
+0000471093 00000 n
+0000471222 00000 n
+0000471728 00000 n
+0000471537 00000 n
+0000471387 00000 n
+0000471663 00000 n
+0000475815 00000 n
+0000475049 00000 n
+0000471770 00000 n
+0000475363 00000 n
+0000475492 00000 n
+0000475620 00000 n
+0000475685 00000 n
+0000475750 00000 n
+0000475196 00000 n
+0000484045 00000 n
+0000480510 00000 n
+0000480319 00000 n
+0000475915 00000 n
+0000480445 00000 n
+0000484497 00000 n
+0000483790 00000 n
+0000480652 00000 n
+0000483916 00000 n
+0000484174 00000 n
+0000484303 00000 n
+0000484432 00000 n
+0000487416 00000 n
+0000486710 00000 n
+0000484638 00000 n
+0000486836 00000 n
+0000486965 00000 n
+0000487094 00000 n
+0000487223 00000 n
+0000487288 00000 n
+0000487352 00000 n
+0001197570 00000 n
+0000490785 00000 n
+0000490209 00000 n
+0000487573 00000 n
+0000490335 00000 n
+0000490463 00000 n
+0000490592 00000 n
+0000490656 00000 n
+0000490720 00000 n
+0000496142 00000 n
+0000495354 00000 n
+0000490899 00000 n
+0000495820 00000 n
+0000495949 00000 n
+0000495510 00000 n
+0000495661 00000 n
+0000985113 00000 n
+0000500128 00000 n
+0000498728 00000 n
+0000496283 00000 n
+0000499419 00000 n
+0000499548 00000 n
+0000499677 00000 n
+0000499806 00000 n
+0000499935 00000 n
+0000498893 00000 n
+0000499045 00000 n
+0000499232 00000 n
+0000500063 00000 n
+0000503956 00000 n
+0000503507 00000 n
+0000500256 00000 n
+0000503633 00000 n
+0000503762 00000 n
+0000503891 00000 n
+0000508184 00000 n
+0000507805 00000 n
+0000504084 00000 n
+0000508119 00000 n
+0000507952 00000 n
+0000510692 00000 n
+0000510885 00000 n
+0000510437 00000 n
+0000508298 00000 n
+0000510563 00000 n
+0000510757 00000 n
+0000510821 00000 n
+0001197695 00000 n
+0000514189 00000 n
+0000513998 00000 n
+0000510999 00000 n
+0000514124 00000 n
+0000517789 00000 n
+0000517343 00000 n
+0000514303 00000 n
+0000517469 00000 n
+0000517596 00000 n
+0000517661 00000 n
+0000517725 00000 n
+0000520890 00000 n
+0000520570 00000 n
+0000517903 00000 n
+0000520696 00000 n
+0000520825 00000 n
+0000524177 00000 n
+0000523136 00000 n
+0000521004 00000 n
+0000523596 00000 n
+0000523725 00000 n
+0000523292 00000 n
+0000523445 00000 n
+0000523854 00000 n
+0000523983 00000 n
+0000524112 00000 n
+0000525695 00000 n
+0000525504 00000 n
+0000524291 00000 n
+0000525630 00000 n
+0000527275 00000 n
+0000527084 00000 n
+0000525796 00000 n
+0000527210 00000 n
+0001197820 00000 n
+0000528717 00000 n
+0000528526 00000 n
+0000527376 00000 n
+0000528652 00000 n
+0000531674 00000 n
+0000531355 00000 n
+0000528818 00000 n
+0000531481 00000 n
+0000535819 00000 n
+0000535628 00000 n
+0000531802 00000 n
+0000535754 00000 n
+0000540252 00000 n
+0000539704 00000 n
+0000535961 00000 n
+0000540187 00000 n
+0000539860 00000 n
+0000540017 00000 n
+0000752239 00000 n
+0000544577 00000 n
+0000544178 00000 n
+0000540380 00000 n
+0000544512 00000 n
+0000544325 00000 n
+0000548943 00000 n
+0000548396 00000 n
+0000544719 00000 n
+0000548878 00000 n
+0000548552 00000 n
+0000548723 00000 n
+0001197945 00000 n
+0000552975 00000 n
+0000552527 00000 n
+0000549071 00000 n
+0000552653 00000 n
+0000552845 00000 n
+0000552910 00000 n
+0000557460 00000 n
+0000557094 00000 n
+0000553089 00000 n
+0000557395 00000 n
+0000557241 00000 n
+0000562172 00000 n
+0000561204 00000 n
+0000557588 00000 n
+0000562107 00000 n
+0000561378 00000 n
+0000561563 00000 n
+0000561737 00000 n
+0000561922 00000 n
+0000655028 00000 n
+0000566399 00000 n
+0000566208 00000 n
+0000562370 00000 n
+0000566334 00000 n
+0000570376 00000 n
+0000570185 00000 n
+0000566513 00000 n
+0000570311 00000 n
+0000574874 00000 n
+0000574197 00000 n
+0000570490 00000 n
+0000574680 00000 n
+0000574353 00000 n
+0000574517 00000 n
+0000574809 00000 n
+0001198070 00000 n
+0000579004 00000 n
+0000578191 00000 n
+0000574988 00000 n
+0000578681 00000 n
+0000578347 00000 n
+0000578810 00000 n
+0000578939 00000 n
+0000578516 00000 n
+0000675536 00000 n
+0000583235 00000 n
+0000582672 00000 n
+0000579175 00000 n
+0000583170 00000 n
+0000582828 00000 n
+0000582999 00000 n
+0000771790 00000 n
+0000586781 00000 n
+0000586333 00000 n
+0000583420 00000 n
+0000586459 00000 n
+0000586588 00000 n
+0000586716 00000 n
+0000589969 00000 n
+0000589778 00000 n
+0000586895 00000 n
+0000589904 00000 n
+0000593811 00000 n
+0000593492 00000 n
+0000590140 00000 n
+0000593618 00000 n
+0000597512 00000 n
+0000597321 00000 n
+0000593968 00000 n
+0000597447 00000 n
+0001198195 00000 n
+0000601936 00000 n
+0000601122 00000 n
+0000597683 00000 n
+0000601613 00000 n
+0000601742 00000 n
+0000601278 00000 n
+0000601871 00000 n
+0000601438 00000 n
+0000606043 00000 n
+0000605547 00000 n
+0000602093 00000 n
+0000605849 00000 n
+0000605978 00000 n
+0000605694 00000 n
+0000609420 00000 n
+0000608971 00000 n
+0000606171 00000 n
+0000609097 00000 n
+0000609226 00000 n
+0000609355 00000 n
+0000613272 00000 n
+0000612607 00000 n
+0000609577 00000 n
+0000613079 00000 n
+0000613207 00000 n
+0000612763 00000 n
+0000612924 00000 n
+0000616813 00000 n
+0000616173 00000 n
+0000613443 00000 n
+0000616489 00000 n
+0000616320 00000 n
+0000616683 00000 n
+0000616748 00000 n
+0000620853 00000 n
+0000620350 00000 n
+0000616998 00000 n
+0000620659 00000 n
+0000620788 00000 n
+0000620497 00000 n
+0001198320 00000 n
+0000625451 00000 n
+0000625077 00000 n
+0000621024 00000 n
+0000625386 00000 n
+0000625224 00000 n
+0000748474 00000 n
+0000629635 00000 n
+0000628998 00000 n
+0000625579 00000 n
+0000629312 00000 n
+0000629441 00000 n
+0000629145 00000 n
+0000629570 00000 n
+0000673734 00000 n
+0000631367 00000 n
+0000631176 00000 n
+0000629776 00000 n
+0000631302 00000 n
+0000633072 00000 n
+0000632881 00000 n
+0000631467 00000 n
+0000633007 00000 n
+0000635769 00000 n
+0000635578 00000 n
+0000633172 00000 n
+0000635704 00000 n
+0000640114 00000 n
+0000639666 00000 n
+0000635939 00000 n
+0000639792 00000 n
+0000640049 00000 n
+0001198445 00000 n
+0000644285 00000 n
+0000643740 00000 n
+0000640228 00000 n
+0000644091 00000 n
+0000643887 00000 n
+0000644220 00000 n
+0000648657 00000 n
+0000648466 00000 n
+0000644426 00000 n
+0000648592 00000 n
+0000651795 00000 n
+0000651604 00000 n
+0000648784 00000 n
+0000651730 00000 n
+0000655093 00000 n
+0000654644 00000 n
+0000651922 00000 n
+0000654770 00000 n
+0000654899 00000 n
+0000659779 00000 n
+0000659118 00000 n
+0000655207 00000 n
+0000659586 00000 n
+0000659274 00000 n
+0000659426 00000 n
+0000659714 00000 n
+0000665556 00000 n
+0000663865 00000 n
+0000659893 00000 n
+0000665104 00000 n
+0000665233 00000 n
+0000664057 00000 n
+0000664232 00000 n
+0000664410 00000 n
+0000664590 00000 n
+0000664769 00000 n
+0000665362 00000 n
+0000665491 00000 n
+0000664950 00000 n
+0001198570 00000 n
+0000669864 00000 n
+0000669416 00000 n
+0000665684 00000 n
+0000669542 00000 n
+0000669671 00000 n
+0000673928 00000 n
+0000673479 00000 n
+0000669992 00000 n
+0000673605 00000 n
+0000673863 00000 n
+0000675601 00000 n
+0000675281 00000 n
+0000674056 00000 n
+0000675407 00000 n
+0000677188 00000 n
+0000676997 00000 n
+0000675715 00000 n
+0000677123 00000 n
+0000678748 00000 n
+0000678557 00000 n
+0000677289 00000 n
+0000678683 00000 n
+0000680575 00000 n
+0000679996 00000 n
+0000678849 00000 n
+0000680122 00000 n
+0000680251 00000 n
+0000680380 00000 n
+0000680445 00000 n
+0000680510 00000 n
+0001198695 00000 n
+0000683579 00000 n
+0000683388 00000 n
+0000680689 00000 n
+0000683514 00000 n
+0000686467 00000 n
+0000686276 00000 n
+0000683693 00000 n
+0000686402 00000 n
+0000690831 00000 n
+0000689686 00000 n
+0000686581 00000 n
+0000690509 00000 n
+0000689860 00000 n
+0000690637 00000 n
+0000690766 00000 n
+0000690028 00000 n
+0000690188 00000 n
+0000690349 00000 n
+0000985080 00000 n
+0000696838 00000 n
+0000694238 00000 n
+0000690959 00000 n
+0000696773 00000 n
+0000694502 00000 n
+0000694664 00000 n
+0000694826 00000 n
+0000694997 00000 n
+0000695159 00000 n
+0000695322 00000 n
+0000695484 00000 n
+0000695647 00000 n
+0000695809 00000 n
+0000695972 00000 n
+0000696134 00000 n
+0000696297 00000 n
+0000696451 00000 n
+0000696614 00000 n
+0000702071 00000 n
+0000700150 00000 n
+0000696966 00000 n
+0000702006 00000 n
+0000700378 00000 n
+0000700541 00000 n
+0000700708 00000 n
+0000700878 00000 n
+0000701040 00000 n
+0000701202 00000 n
+0000701364 00000 n
+0000701526 00000 n
+0000701689 00000 n
+0000701843 00000 n
+0000707284 00000 n
+0000705078 00000 n
+0000702199 00000 n
+0000707219 00000 n
+0000705324 00000 n
+0000705477 00000 n
+0000705631 00000 n
+0000705781 00000 n
+0000705935 00000 n
+0000706097 00000 n
+0000706259 00000 n
+0000706421 00000 n
+0000706583 00000 n
+0000706744 00000 n
+0000706906 00000 n
+0000707067 00000 n
+0001198820 00000 n
+0000712615 00000 n
+0000711097 00000 n
+0000707398 00000 n
+0000712422 00000 n
+0000711298 00000 n
+0000711461 00000 n
+0000711612 00000 n
+0000711777 00000 n
+0000711943 00000 n
+0000712105 00000 n
+0000712259 00000 n
+0000716554 00000 n
+0000716233 00000 n
+0000712757 00000 n
+0000716359 00000 n
+0000716424 00000 n
+0000716489 00000 n
+0000719331 00000 n
+0000719140 00000 n
+0000716696 00000 n
+0000719266 00000 n
+0000723526 00000 n
+0000722457 00000 n
+0000719489 00000 n
+0000722944 00000 n
+0000723073 00000 n
+0000723331 00000 n
+0000722613 00000 n
+0000722783 00000 n
+0000723396 00000 n
+0000723461 00000 n
+0000726978 00000 n
+0000726658 00000 n
+0000723654 00000 n
+0000726784 00000 n
+0000726849 00000 n
+0000726913 00000 n
+0000730463 00000 n
+0000730142 00000 n
+0000727079 00000 n
+0000730268 00000 n
+0000730333 00000 n
+0000730398 00000 n
+0001198945 00000 n
+0000734387 00000 n
+0000733678 00000 n
+0000730578 00000 n
+0000733804 00000 n
+0000733933 00000 n
+0000733998 00000 n
+0000734063 00000 n
+0000734128 00000 n
+0000734193 00000 n
+0000734322 00000 n
+0000738616 00000 n
+0000737779 00000 n
+0000734501 00000 n
+0000737905 00000 n
+0000737970 00000 n
+0000738035 00000 n
+0000738164 00000 n
+0000738229 00000 n
+0000738294 00000 n
+0000738423 00000 n
+0000738488 00000 n
+0000738552 00000 n
+0000741644 00000 n
+0000740942 00000 n
+0000738744 00000 n
+0000741068 00000 n
+0000741195 00000 n
+0000741322 00000 n
+0000741451 00000 n
+0000741579 00000 n
+0000744345 00000 n
+0000743768 00000 n
+0000741843 00000 n
+0000743894 00000 n
+0000744023 00000 n
+0000744152 00000 n
+0000744217 00000 n
+0000744281 00000 n
+0000748539 00000 n
+0000748219 00000 n
+0000744530 00000 n
+0000748345 00000 n
+0000752304 00000 n
+0000751544 00000 n
+0000748666 00000 n
+0000751851 00000 n
+0000751980 00000 n
+0000752045 00000 n
+0000752110 00000 n
+0000751691 00000 n
+0001199070 00000 n
+0000755992 00000 n
+0000755413 00000 n
+0000752418 00000 n
+0000755539 00000 n
+0000755668 00000 n
+0000755797 00000 n
+0000755862 00000 n
+0000755927 00000 n
+0000759614 00000 n
+0000758719 00000 n
+0000756106 00000 n
+0000759031 00000 n
+0000758866 00000 n
+0000759160 00000 n
+0000759225 00000 n
+0000759290 00000 n
+0000759419 00000 n
+0000759484 00000 n
+0000759549 00000 n
+0000985047 00000 n
+0000763714 00000 n
+0000763265 00000 n
+0000759728 00000 n
+0000763391 00000 n
+0000763520 00000 n
+0000763584 00000 n
+0000763649 00000 n
+0000765757 00000 n
+0000765437 00000 n
+0000763842 00000 n
+0000765563 00000 n
+0001003853 00000 n
+0000996569 00000 n
+0001003673 00000 n
+0000765692 00000 n
+0000767669 00000 n
+0000767222 00000 n
+0000765899 00000 n
+0000767348 00000 n
+0000767477 00000 n
+0000767604 00000 n
+0000771855 00000 n
0000771149 00000 n
-0000771214 00000 n
-0000771279 00000 n
-0000771344 00000 n
-0000771409 00000 n
-0000771474 00000 n
-0000771539 00000 n
-0000771604 00000 n
-0000771669 00000 n
-0000771734 00000 n
-0000771798 00000 n
-0000778510 00000 n
-0000774946 00000 n
-0000771976 00000 n
-0000775072 00000 n
-0000775137 00000 n
-0000775202 00000 n
-0000775267 00000 n
-0000775332 00000 n
-0000775397 00000 n
-0000775462 00000 n
-0000775527 00000 n
-0000775592 00000 n
-0000775657 00000 n
-0000775722 00000 n
-0000775787 00000 n
-0000775851 00000 n
-0000775916 00000 n
-0000775981 00000 n
-0000776046 00000 n
-0000776111 00000 n
-0000776176 00000 n
-0000776241 00000 n
-0000776306 00000 n
-0000776371 00000 n
-0000776436 00000 n
-0000776501 00000 n
-0000776566 00000 n
+0000767783 00000 n
+0000771275 00000 n
+0000996248 00000 n
+0000987035 00000 n
+0000996062 00000 n
+0000771404 00000 n
+0000771533 00000 n
+0000771661 00000 n
+0001199195 00000 n
+0000772888 00000 n
+0000772697 00000 n
+0000772082 00000 n
+0000772823 00000 n
+0000773316 00000 n
+0000773125 00000 n
+0000772975 00000 n
+0000773251 00000 n
0000776630 00000 n
-0000776695 00000 n
-0000776760 00000 n
-0000776825 00000 n
-0000776890 00000 n
-0000776955 00000 n
-0000777020 00000 n
+0000775404 00000 n
+0000773358 00000 n
+0000775921 00000 n
+0000776050 00000 n
+0000776179 00000 n
+0000776308 00000 n
+0000776437 00000 n
+0000776566 00000 n
+0000775560 00000 n
+0000775732 00000 n
0000777085 00000 n
-0000777150 00000 n
-0000777215 00000 n
-0000777280 00000 n
-0000777345 00000 n
-0000777410 00000 n
-0000777475 00000 n
-0000777540 00000 n
-0000777605 00000 n
-0000777669 00000 n
-0000777733 00000 n
-0000777797 00000 n
-0000777862 00000 n
-0000777927 00000 n
-0000777992 00000 n
-0000778057 00000 n
-0000778122 00000 n
-0000778187 00000 n
-0000778252 00000 n
-0000778317 00000 n
-0000778382 00000 n
-0000778446 00000 n
-0000784685 00000 n
-0000781247 00000 n
-0000778624 00000 n
-0000781373 00000 n
-0000781438 00000 n
-0000781503 00000 n
-0000781568 00000 n
-0000781633 00000 n
-0000781698 00000 n
-0000781763 00000 n
-0000781828 00000 n
-0000781893 00000 n
-0000781958 00000 n
-0000782023 00000 n
-0000782088 00000 n
-0000782153 00000 n
-0000782218 00000 n
-0000782283 00000 n
-0000782348 00000 n
-0000782413 00000 n
-0000782478 00000 n
-0000782543 00000 n
-0000782608 00000 n
-0000782673 00000 n
-0000782738 00000 n
-0000782803 00000 n
-0000782868 00000 n
-0000782933 00000 n
-0000782998 00000 n
-0000783063 00000 n
-0000783128 00000 n
-0000783193 00000 n
-0000783258 00000 n
-0000783323 00000 n
-0000783388 00000 n
-0000783453 00000 n
-0000783518 00000 n
-0000783582 00000 n
-0000783647 00000 n
-0000783712 00000 n
-0000783777 00000 n
-0000783842 00000 n
-0000783907 00000 n
-0000783972 00000 n
-0000784037 00000 n
-0000784102 00000 n
-0000784167 00000 n
-0000784232 00000 n
-0000784297 00000 n
-0000784362 00000 n
-0000784427 00000 n
-0000784492 00000 n
-0000784557 00000 n
-0000784621 00000 n
-0000790204 00000 n
-0000787808 00000 n
-0000784799 00000 n
-0000787934 00000 n
-0000787999 00000 n
-0000788064 00000 n
-0000788129 00000 n
-0000788194 00000 n
-0000788259 00000 n
-0000788324 00000 n
-0000788389 00000 n
-0000788454 00000 n
-0000788519 00000 n
-0000788584 00000 n
-0000788649 00000 n
-0000788714 00000 n
-0000788778 00000 n
-0000788843 00000 n
-0000788908 00000 n
-0000788973 00000 n
-0000789038 00000 n
-0000789103 00000 n
-0000789168 00000 n
-0000789233 00000 n
-0000789298 00000 n
-0000789363 00000 n
-0000789428 00000 n
-0000789493 00000 n
-0000789621 00000 n
-0000789750 00000 n
-0000789815 00000 n
-0000789880 00000 n
-0000789945 00000 n
-0000790010 00000 n
-0000790139 00000 n
-0001159219 00000 n
-0000793412 00000 n
-0000792705 00000 n
-0000790331 00000 n
-0000792831 00000 n
-0000792960 00000 n
-0000793089 00000 n
-0000793218 00000 n
-0000793347 00000 n
-0000796904 00000 n
-0000796147 00000 n
-0000793539 00000 n
-0000796454 00000 n
-0000796583 00000 n
-0000796294 00000 n
-0000796711 00000 n
-0000796839 00000 n
-0000800148 00000 n
-0000799570 00000 n
-0000797031 00000 n
-0000799696 00000 n
-0000799825 00000 n
-0000799954 00000 n
-0000800083 00000 n
-0000803057 00000 n
-0000802737 00000 n
-0000800262 00000 n
-0000802863 00000 n
-0000802992 00000 n
-0000805647 00000 n
-0000805198 00000 n
-0000803227 00000 n
-0000805324 00000 n
-0000805453 00000 n
-0000805582 00000 n
-0000806088 00000 n
-0000805897 00000 n
-0000805747 00000 n
-0000806023 00000 n
-0001159344 00000 n
-0000808800 00000 n
-0000808156 00000 n
-0000806130 00000 n
-0000808282 00000 n
-0000808411 00000 n
-0000808540 00000 n
-0000808605 00000 n
-0000808670 00000 n
-0000808735 00000 n
-0000813140 00000 n
-0000812820 00000 n
-0000808914 00000 n
-0000812946 00000 n
-0000813011 00000 n
-0000813076 00000 n
-0000816743 00000 n
-0000816488 00000 n
-0000813296 00000 n
-0000816614 00000 n
-0000816679 00000 n
-0000819994 00000 n
-0000819803 00000 n
-0000816885 00000 n
-0000819929 00000 n
-0000823715 00000 n
-0000823459 00000 n
-0000820122 00000 n
-0000823585 00000 n
-0000823650 00000 n
-0000826700 00000 n
-0000825992 00000 n
-0000823857 00000 n
-0000826118 00000 n
-0000826183 00000 n
-0000826248 00000 n
-0000826313 00000 n
-0000826378 00000 n
-0000826507 00000 n
-0000826572 00000 n
-0000826636 00000 n
-0001159469 00000 n
-0000831369 00000 n
-0000831113 00000 n
-0000826842 00000 n
-0000831239 00000 n
-0000831304 00000 n
-0000834388 00000 n
-0000833615 00000 n
-0000831497 00000 n
-0000833741 00000 n
-0000833806 00000 n
-0000833871 00000 n
-0000833936 00000 n
-0000834065 00000 n
-0000834130 00000 n
-0000834193 00000 n
-0000834258 00000 n
-0000834323 00000 n
-0000837301 00000 n
-0000836786 00000 n
-0000834544 00000 n
-0000836912 00000 n
-0000836977 00000 n
-0000837042 00000 n
-0000837107 00000 n
-0000837172 00000 n
-0000837237 00000 n
-0000840674 00000 n
-0000840094 00000 n
-0000837457 00000 n
-0000840220 00000 n
-0000840349 00000 n
-0000840414 00000 n
-0000840479 00000 n
-0000840544 00000 n
-0000840609 00000 n
-0000844126 00000 n
-0000843870 00000 n
-0000840816 00000 n
-0000843996 00000 n
-0000844061 00000 n
-0000847078 00000 n
-0000846434 00000 n
-0000844254 00000 n
-0000846560 00000 n
-0000846625 00000 n
-0000846690 00000 n
-0000846755 00000 n
-0000846949 00000 n
-0000847014 00000 n
-0001159594 00000 n
-0000850719 00000 n
-0000850398 00000 n
-0000847247 00000 n
-0000850524 00000 n
-0000850589 00000 n
-0000850654 00000 n
-0000854310 00000 n
-0000854119 00000 n
-0000850847 00000 n
-0000854245 00000 n
-0000857776 00000 n
-0000857455 00000 n
-0000854438 00000 n
-0000857581 00000 n
-0000857646 00000 n
-0000857711 00000 n
-0000860434 00000 n
-0000859725 00000 n
-0000857917 00000 n
-0000859851 00000 n
-0000859916 00000 n
-0000859981 00000 n
-0000860046 00000 n
-0000860175 00000 n
-0000860240 00000 n
-0000860305 00000 n
-0000860370 00000 n
-0000863311 00000 n
-0000862601 00000 n
-0000860590 00000 n
-0000862727 00000 n
-0000862792 00000 n
-0000862857 00000 n
-0000862922 00000 n
-0000863116 00000 n
-0000863181 00000 n
-0000863246 00000 n
-0000866883 00000 n
-0000866562 00000 n
-0000863467 00000 n
-0000866688 00000 n
-0000866753 00000 n
-0000866818 00000 n
-0001159719 00000 n
-0000870032 00000 n
-0000869387 00000 n
-0000867011 00000 n
-0000869513 00000 n
-0000869578 00000 n
-0000869643 00000 n
-0000869708 00000 n
-0000869837 00000 n
-0000869902 00000 n
-0000869967 00000 n
-0000873563 00000 n
-0000873242 00000 n
-0000870188 00000 n
-0000873368 00000 n
-0000873433 00000 n
-0000873498 00000 n
-0000877146 00000 n
-0000876955 00000 n
-0000873705 00000 n
-0000877081 00000 n
-0000880631 00000 n
-0000880440 00000 n
-0000877274 00000 n
-0000880566 00000 n
-0000883525 00000 n
-0000882881 00000 n
-0000880773 00000 n
-0000883007 00000 n
-0000883072 00000 n
-0000883137 00000 n
-0000883202 00000 n
-0000883331 00000 n
-0000883396 00000 n
-0000883461 00000 n
-0000886438 00000 n
-0000885733 00000 n
-0000883681 00000 n
-0000885859 00000 n
-0000885924 00000 n
-0000885989 00000 n
-0000886054 00000 n
-0000886119 00000 n
-0000886184 00000 n
-0000886310 00000 n
-0000886375 00000 n
-0001159844 00000 n
-0000889643 00000 n
-0000889258 00000 n
-0000886580 00000 n
-0000889384 00000 n
-0000889449 00000 n
-0000889514 00000 n
-0000889579 00000 n
-0000892945 00000 n
-0000892754 00000 n
-0000889785 00000 n
-0000892880 00000 n
-0000896127 00000 n
-0000895353 00000 n
-0000893073 00000 n
-0000895479 00000 n
-0000895544 00000 n
-0000895609 00000 n
-0000895674 00000 n
-0000895802 00000 n
-0000895867 00000 n
-0000895932 00000 n
-0000895997 00000 n
-0000896062 00000 n
-0000899375 00000 n
-0000899184 00000 n
-0000896283 00000 n
-0000899310 00000 n
-0000902534 00000 n
-0000902149 00000 n
-0000899588 00000 n
-0000902275 00000 n
-0000902340 00000 n
-0000902405 00000 n
-0000902470 00000 n
-0000905086 00000 n
-0000904313 00000 n
-0000902775 00000 n
-0000904439 00000 n
-0000904504 00000 n
-0000904569 00000 n
-0000904698 00000 n
-0000904762 00000 n
-0000904827 00000 n
-0000904892 00000 n
-0000904957 00000 n
-0000905022 00000 n
-0001159969 00000 n
-0000909247 00000 n
-0000908732 00000 n
-0000905242 00000 n
-0000908858 00000 n
-0000908987 00000 n
-0000909052 00000 n
-0000909117 00000 n
-0000909182 00000 n
-0000913463 00000 n
-0000913207 00000 n
-0000909375 00000 n
-0000913333 00000 n
-0000913398 00000 n
-0000916798 00000 n
-0000916607 00000 n
-0000913591 00000 n
-0000916733 00000 n
-0000919416 00000 n
-0000918966 00000 n
-0000916926 00000 n
-0000919092 00000 n
-0000919157 00000 n
-0000919222 00000 n
-0000919287 00000 n
-0000919352 00000 n
-0000923265 00000 n
-0000922685 00000 n
-0000919571 00000 n
-0000922811 00000 n
-0000922940 00000 n
-0000923005 00000 n
-0000923070 00000 n
-0000923135 00000 n
-0000923200 00000 n
-0000926430 00000 n
-0000925720 00000 n
-0000923407 00000 n
-0000925846 00000 n
-0000925911 00000 n
-0000925976 00000 n
-0000926041 00000 n
-0000926170 00000 n
-0000926235 00000 n
-0000926300 00000 n
-0000926365 00000 n
-0001160094 00000 n
-0000929151 00000 n
-0000928895 00000 n
-0000926586 00000 n
-0000929021 00000 n
-0000929086 00000 n
-0000932407 00000 n
-0000931634 00000 n
-0000929279 00000 n
-0000931760 00000 n
-0000931825 00000 n
-0000931890 00000 n
-0000931955 00000 n
-0000932084 00000 n
-0000932149 00000 n
-0000932214 00000 n
-0000932278 00000 n
-0000932343 00000 n
-0000935697 00000 n
-0000935378 00000 n
-0000932563 00000 n
-0000935504 00000 n
-0000935569 00000 n
-0000935634 00000 n
-0000939167 00000 n
-0000938524 00000 n
-0000935853 00000 n
-0000938650 00000 n
-0000938715 00000 n
-0000938844 00000 n
-0000938908 00000 n
-0000938973 00000 n
-0000939038 00000 n
-0000939102 00000 n
-0000941782 00000 n
-0000940815 00000 n
-0000939309 00000 n
-0000940941 00000 n
-0000941006 00000 n
-0000941071 00000 n
-0000941200 00000 n
-0000941265 00000 n
-0000941330 00000 n
-0000941395 00000 n
-0000941460 00000 n
-0000941525 00000 n
-0000941653 00000 n
-0000941718 00000 n
-0000944675 00000 n
-0000943840 00000 n
-0000941938 00000 n
-0000943966 00000 n
-0000944031 00000 n
-0000944096 00000 n
-0000944161 00000 n
-0000944226 00000 n
-0000944291 00000 n
-0000944419 00000 n
-0000944482 00000 n
-0000944546 00000 n
-0000944611 00000 n
-0001160219 00000 n
-0000947419 00000 n
-0000946580 00000 n
-0000944817 00000 n
-0000946706 00000 n
-0000946771 00000 n
-0000946836 00000 n
-0000946901 00000 n
-0000947030 00000 n
-0000947095 00000 n
-0000947160 00000 n
-0000947225 00000 n
-0000947290 00000 n
-0000947355 00000 n
-0000948210 00000 n
-0000947954 00000 n
-0000947561 00000 n
-0000948080 00000 n
-0000948145 00000 n
-0000948409 00000 n
-0000959753 00000 n
-0000967342 00000 n
-0000969642 00000 n
-0000969611 00000 n
-0000973329 00000 n
-0000982769 00000 n
-0000993504 00000 n
-0001005199 00000 n
-0001017916 00000 n
-0001037150 00000 n
-0001058046 00000 n
-0001080194 00000 n
-0001098450 00000 n
-0001101297 00000 n
-0001101067 00000 n
-0001128715 00000 n
-0001155981 00000 n
-0001160317 00000 n
-0001160442 00000 n
-0001160568 00000 n
-0001160694 00000 n
-0001160820 00000 n
-0001160946 00000 n
-0001161026 00000 n
-0001161136 00000 n
-0001183038 00000 n
-0001207231 00000 n
-0001207272 00000 n
-0001207312 00000 n
-0001207446 00000 n
+0000776894 00000 n
+0000776744 00000 n
+0000777020 00000 n
+0000780330 00000 n
+0000779752 00000 n
+0000777127 00000 n
+0000779878 00000 n
+0000780007 00000 n
+0000780136 00000 n
+0000780265 00000 n
+0000784527 00000 n
+0000783308 00000 n
+0000780416 00000 n
+0000783818 00000 n
+0000783947 00000 n
+0000784205 00000 n
+0000783464 00000 n
+0000783643 00000 n
+0000784399 00000 n
+0000784463 00000 n
+0001199320 00000 n
+0000791417 00000 n
+0000787589 00000 n
+0000784683 00000 n
+0000787715 00000 n
+0000787780 00000 n
+0000787845 00000 n
+0000787910 00000 n
+0000787975 00000 n
+0000788040 00000 n
+0000788105 00000 n
+0000788170 00000 n
+0000788235 00000 n
+0000788300 00000 n
+0000788430 00000 n
+0000788495 00000 n
+0000788560 00000 n
+0000788625 00000 n
+0000788690 00000 n
+0000788755 00000 n
+0000788820 00000 n
+0000788885 00000 n
+0000788950 00000 n
+0000789015 00000 n
+0000789080 00000 n
+0000789145 00000 n
+0000789210 00000 n
+0000789275 00000 n
+0000789340 00000 n
+0000789405 00000 n
+0000789470 00000 n
+0000789535 00000 n
+0000789600 00000 n
+0000789665 00000 n
+0000789730 00000 n
+0000789795 00000 n
+0000789860 00000 n
+0000789925 00000 n
+0000789989 00000 n
+0000790054 00000 n
+0000790119 00000 n
+0000790184 00000 n
+0000790249 00000 n
+0000790314 00000 n
+0000790379 00000 n
+0000790444 00000 n
+0000790509 00000 n
+0000790574 00000 n
+0000790639 00000 n
+0000790704 00000 n
+0000790769 00000 n
+0000790834 00000 n
+0000790899 00000 n
+0000790964 00000 n
+0000791029 00000 n
+0000791094 00000 n
+0000791159 00000 n
+0000791224 00000 n
+0000791289 00000 n
+0000791353 00000 n
+0000798065 00000 n
+0000794501 00000 n
+0000791531 00000 n
+0000794627 00000 n
+0000794692 00000 n
+0000794757 00000 n
+0000794822 00000 n
+0000794887 00000 n
+0000794952 00000 n
+0000795017 00000 n
+0000795082 00000 n
+0000795147 00000 n
+0000795212 00000 n
+0000795277 00000 n
+0000795342 00000 n
+0000795406 00000 n
+0000795471 00000 n
+0000795536 00000 n
+0000795601 00000 n
+0000795666 00000 n
+0000795731 00000 n
+0000795796 00000 n
+0000795861 00000 n
+0000795926 00000 n
+0000795991 00000 n
+0000796056 00000 n
+0000796121 00000 n
+0000796185 00000 n
+0000796250 00000 n
+0000796315 00000 n
+0000796380 00000 n
+0000796445 00000 n
+0000796510 00000 n
+0000796575 00000 n
+0000796640 00000 n
+0000796705 00000 n
+0000796770 00000 n
+0000796835 00000 n
+0000796900 00000 n
+0000796965 00000 n
+0000797030 00000 n
+0000797095 00000 n
+0000797160 00000 n
+0000797224 00000 n
+0000797288 00000 n
+0000797352 00000 n
+0000797417 00000 n
+0000797482 00000 n
+0000797547 00000 n
+0000797612 00000 n
+0000797677 00000 n
+0000797742 00000 n
+0000797807 00000 n
+0000797872 00000 n
+0000797937 00000 n
+0000798001 00000 n
+0000804240 00000 n
+0000800802 00000 n
+0000798179 00000 n
+0000800928 00000 n
+0000800993 00000 n
+0000801058 00000 n
+0000801123 00000 n
+0000801188 00000 n
+0000801253 00000 n
+0000801318 00000 n
+0000801383 00000 n
+0000801448 00000 n
+0000801513 00000 n
+0000801578 00000 n
+0000801643 00000 n
+0000801708 00000 n
+0000801773 00000 n
+0000801838 00000 n
+0000801903 00000 n
+0000801968 00000 n
+0000802033 00000 n
+0000802098 00000 n
+0000802163 00000 n
+0000802228 00000 n
+0000802293 00000 n
+0000802358 00000 n
+0000802423 00000 n
+0000802488 00000 n
+0000802553 00000 n
+0000802618 00000 n
+0000802683 00000 n
+0000802748 00000 n
+0000802813 00000 n
+0000802878 00000 n
+0000802943 00000 n
+0000803008 00000 n
+0000803073 00000 n
+0000803137 00000 n
+0000803202 00000 n
+0000803267 00000 n
+0000803332 00000 n
+0000803397 00000 n
+0000803462 00000 n
+0000803527 00000 n
+0000803592 00000 n
+0000803657 00000 n
+0000803722 00000 n
+0000803787 00000 n
+0000803852 00000 n
+0000803917 00000 n
+0000803982 00000 n
+0000804047 00000 n
+0000804112 00000 n
+0000804176 00000 n
+0000809759 00000 n
+0000807363 00000 n
+0000804354 00000 n
+0000807489 00000 n
+0000807554 00000 n
+0000807619 00000 n
+0000807684 00000 n
+0000807749 00000 n
+0000807814 00000 n
+0000807879 00000 n
+0000807944 00000 n
+0000808009 00000 n
+0000808074 00000 n
+0000808139 00000 n
+0000808204 00000 n
+0000808269 00000 n
+0000808333 00000 n
+0000808398 00000 n
+0000808463 00000 n
+0000808528 00000 n
+0000808593 00000 n
+0000808658 00000 n
+0000808723 00000 n
+0000808788 00000 n
+0000808853 00000 n
+0000808918 00000 n
+0000808983 00000 n
+0000809048 00000 n
+0000809176 00000 n
+0000809305 00000 n
+0000809370 00000 n
+0000809435 00000 n
+0000809500 00000 n
+0000809565 00000 n
+0000809694 00000 n
+0000812967 00000 n
+0000812260 00000 n
+0000809886 00000 n
+0000812386 00000 n
+0000812515 00000 n
+0000812644 00000 n
+0000812773 00000 n
+0000812902 00000 n
+0000816459 00000 n
+0000815702 00000 n
+0000813094 00000 n
+0000816009 00000 n
+0000816138 00000 n
+0000815849 00000 n
+0000816266 00000 n
+0000816394 00000 n
+0001199445 00000 n
+0000819703 00000 n
+0000819125 00000 n
+0000816586 00000 n
+0000819251 00000 n
+0000819380 00000 n
+0000819509 00000 n
+0000819638 00000 n
+0000822611 00000 n
+0000822291 00000 n
+0000819817 00000 n
+0000822417 00000 n
+0000822546 00000 n
+0000825201 00000 n
+0000824752 00000 n
+0000822781 00000 n
+0000824878 00000 n
+0000825007 00000 n
+0000825136 00000 n
+0000825642 00000 n
+0000825451 00000 n
+0000825301 00000 n
+0000825577 00000 n
+0000828425 00000 n
+0000827781 00000 n
+0000825684 00000 n
+0000827907 00000 n
+0000828036 00000 n
+0000828165 00000 n
+0000828230 00000 n
+0000828295 00000 n
+0000828360 00000 n
+0000832759 00000 n
+0000832438 00000 n
+0000828539 00000 n
+0000832564 00000 n
+0000832629 00000 n
+0000832694 00000 n
+0001199570 00000 n
+0000836522 00000 n
+0000836266 00000 n
+0000832915 00000 n
+0000836392 00000 n
+0000836457 00000 n
+0000839813 00000 n
+0000839622 00000 n
+0000836664 00000 n
+0000839748 00000 n
+0000843332 00000 n
+0000843141 00000 n
+0000839941 00000 n
+0000843267 00000 n
+0000846613 00000 n
+0000846098 00000 n
+0000843474 00000 n
+0000846224 00000 n
+0000846289 00000 n
+0000846354 00000 n
+0000846419 00000 n
+0000846484 00000 n
+0000846549 00000 n
+0000850812 00000 n
+0000850297 00000 n
+0000846769 00000 n
+0000850423 00000 n
+0000850552 00000 n
+0000850617 00000 n
+0000850682 00000 n
+0000850747 00000 n
+0000854444 00000 n
+0000853735 00000 n
+0000850940 00000 n
+0000853861 00000 n
+0000853926 00000 n
+0000853991 00000 n
+0000854056 00000 n
+0000854185 00000 n
+0000854250 00000 n
+0000854315 00000 n
+0000854380 00000 n
+0001199695 00000 n
+0000857649 00000 n
+0000856941 00000 n
+0000854586 00000 n
+0000857067 00000 n
+0000857132 00000 n
+0000857195 00000 n
+0000857260 00000 n
+0000857389 00000 n
+0000857454 00000 n
+0000857519 00000 n
+0000857584 00000 n
+0000860939 00000 n
+0000860554 00000 n
+0000857791 00000 n
+0000860680 00000 n
+0000860745 00000 n
+0000860810 00000 n
+0000860875 00000 n
+0000864116 00000 n
+0000863537 00000 n
+0000861067 00000 n
+0000863663 00000 n
+0000863792 00000 n
+0000863857 00000 n
+0000863922 00000 n
+0000863987 00000 n
+0000864051 00000 n
+0000866712 00000 n
+0000865937 00000 n
+0000864272 00000 n
+0000866063 00000 n
+0000866128 00000 n
+0000866193 00000 n
+0000866258 00000 n
+0000866323 00000 n
+0000866388 00000 n
+0000866517 00000 n
+0000866582 00000 n
+0000866647 00000 n
+0000870208 00000 n
+0000869887 00000 n
+0000866882 00000 n
+0000870013 00000 n
+0000870078 00000 n
+0000870143 00000 n
+0000873763 00000 n
+0000873444 00000 n
+0000870336 00000 n
+0000873570 00000 n
+0000873635 00000 n
+0000873700 00000 n
+0001199820 00000 n
+0000876979 00000 n
+0000876269 00000 n
+0000873891 00000 n
+0000876395 00000 n
+0000876460 00000 n
+0000876525 00000 n
+0000876719 00000 n
+0000876784 00000 n
+0000876849 00000 n
+0000876914 00000 n
+0000880742 00000 n
+0000880551 00000 n
+0000877148 00000 n
+0000880677 00000 n
+0000884452 00000 n
+0000884196 00000 n
+0000880870 00000 n
+0000884322 00000 n
+0000884387 00000 n
+0000887967 00000 n
+0000887646 00000 n
+0000884580 00000 n
+0000887772 00000 n
+0000887837 00000 n
+0000887902 00000 n
+0000890628 00000 n
+0000889918 00000 n
+0000888122 00000 n
+0000890044 00000 n
+0000890109 00000 n
+0000890174 00000 n
+0000890303 00000 n
+0000890368 00000 n
+0000890433 00000 n
+0000890498 00000 n
+0000890563 00000 n
+0000894009 00000 n
+0000893299 00000 n
+0000890798 00000 n
+0000893425 00000 n
+0000893490 00000 n
+0000893555 00000 n
+0000893749 00000 n
+0000893814 00000 n
+0000893879 00000 n
+0000893944 00000 n
+0001199945 00000 n
+0000897390 00000 n
+0000897069 00000 n
+0000894165 00000 n
+0000897195 00000 n
+0000897260 00000 n
+0000897325 00000 n
+0000900533 00000 n
+0000899824 00000 n
+0000897504 00000 n
+0000899950 00000 n
+0000900015 00000 n
+0000900080 00000 n
+0000900209 00000 n
+0000900273 00000 n
+0000900338 00000 n
+0000900403 00000 n
+0000900468 00000 n
+0000904546 00000 n
+0000904355 00000 n
+0000900689 00000 n
+0000904481 00000 n
+0000908433 00000 n
+0000908242 00000 n
+0000904674 00000 n
+0000908368 00000 n
+0000911974 00000 n
+0000911783 00000 n
+0000908561 00000 n
+0000911909 00000 n
+0000914929 00000 n
+0000914544 00000 n
+0000912102 00000 n
+0000914670 00000 n
+0000914735 00000 n
+0000914800 00000 n
+0000914865 00000 n
+0001200070 00000 n
+0000918175 00000 n
+0000917531 00000 n
+0000915099 00000 n
+0000917657 00000 n
+0000917786 00000 n
+0000917851 00000 n
+0000917916 00000 n
+0000917981 00000 n
+0000918046 00000 n
+0000918111 00000 n
+0000921075 00000 n
+0000920368 00000 n
+0000918331 00000 n
+0000920494 00000 n
+0000920559 00000 n
+0000920688 00000 n
+0000920753 00000 n
+0000920818 00000 n
+0000920882 00000 n
+0000920947 00000 n
+0000921012 00000 n
+0000923928 00000 n
+0000923218 00000 n
+0000921217 00000 n
+0000923344 00000 n
+0000923409 00000 n
+0000923474 00000 n
+0000923603 00000 n
+0000923668 00000 n
+0000923733 00000 n
+0000923798 00000 n
+0000923863 00000 n
+0000927644 00000 n
+0000927453 00000 n
+0000924070 00000 n
+0000927579 00000 n
+0000930768 00000 n
+0000930124 00000 n
+0000927772 00000 n
+0000930250 00000 n
+0000930315 00000 n
+0000930380 00000 n
+0000930444 00000 n
+0000930573 00000 n
+0000930638 00000 n
+0000930703 00000 n
+0000934289 00000 n
+0000933968 00000 n
+0000930924 00000 n
+0000934094 00000 n
+0000934159 00000 n
+0000934224 00000 n
+0001200195 00000 n
+0000937509 00000 n
+0000937318 00000 n
+0000934474 00000 n
+0000937444 00000 n
+0000940334 00000 n
+0000939627 00000 n
+0000937722 00000 n
+0000939753 00000 n
+0000939818 00000 n
+0000939882 00000 n
+0000939947 00000 n
+0000940012 00000 n
+0000940077 00000 n
+0000940205 00000 n
+0000940270 00000 n
+0000943549 00000 n
+0000942775 00000 n
+0000940519 00000 n
+0000942901 00000 n
+0000942966 00000 n
+0000943031 00000 n
+0000943096 00000 n
+0000943161 00000 n
+0000943289 00000 n
+0000943354 00000 n
+0000943419 00000 n
+0000943484 00000 n
+0000948023 00000 n
+0000947832 00000 n
+0000943691 00000 n
+0000947958 00000 n
+0000951673 00000 n
+0000951417 00000 n
+0000948151 00000 n
+0000951543 00000 n
+0000951608 00000 n
+0000954688 00000 n
+0000954432 00000 n
+0000951801 00000 n
+0000954558 00000 n
+0000954623 00000 n
+0001200320 00000 n
+0000957931 00000 n
+0000957223 00000 n
+0000954816 00000 n
+0000957349 00000 n
+0000957414 00000 n
+0000957479 00000 n
+0000957544 00000 n
+0000957671 00000 n
+0000957736 00000 n
+0000957801 00000 n
+0000957866 00000 n
+0000961463 00000 n
+0000960820 00000 n
+0000958100 00000 n
+0000960946 00000 n
+0000961011 00000 n
+0000961076 00000 n
+0000961141 00000 n
+0000961206 00000 n
+0000961334 00000 n
+0000961399 00000 n
+0000965032 00000 n
+0000964646 00000 n
+0000961633 00000 n
+0000964772 00000 n
+0000964837 00000 n
+0000964902 00000 n
+0000964967 00000 n
+0000967393 00000 n
+0000967008 00000 n
+0000965160 00000 n
+0000967134 00000 n
+0000967199 00000 n
+0000967264 00000 n
+0000967329 00000 n
+0000971078 00000 n
+0000970498 00000 n
+0000967549 00000 n
+0000970624 00000 n
+0000970753 00000 n
+0000970818 00000 n
+0000970883 00000 n
+0000970948 00000 n
+0000971013 00000 n
+0000974225 00000 n
+0000973517 00000 n
+0000971220 00000 n
+0000973643 00000 n
+0000973708 00000 n
+0000973773 00000 n
+0000973837 00000 n
+0000973965 00000 n
+0000974030 00000 n
+0000974095 00000 n
+0000974160 00000 n
+0001200445 00000 n
+0000977657 00000 n
+0000977078 00000 n
+0000974395 00000 n
+0000977204 00000 n
+0000977269 00000 n
+0000977334 00000 n
+0000977399 00000 n
+0000977528 00000 n
+0000977593 00000 n
+0000980073 00000 n
+0000979169 00000 n
+0000977813 00000 n
+0000979295 00000 n
+0000979360 00000 n
+0000979425 00000 n
+0000979490 00000 n
+0000979555 00000 n
+0000979684 00000 n
+0000979749 00000 n
+0000979814 00000 n
+0000979879 00000 n
+0000979944 00000 n
+0000980009 00000 n
+0000983045 00000 n
+0000982079 00000 n
+0000980229 00000 n
+0000982205 00000 n
+0000982270 00000 n
+0000982399 00000 n
+0000982463 00000 n
+0000982528 00000 n
+0000982593 00000 n
+0000982658 00000 n
+0000982723 00000 n
+0000982787 00000 n
+0000982916 00000 n
+0000982981 00000 n
+0000984905 00000 n
+0000984391 00000 n
+0000983187 00000 n
+0000984517 00000 n
+0000984582 00000 n
+0000984647 00000 n
+0000984712 00000 n
+0000984777 00000 n
+0000984841 00000 n
+0000985146 00000 n
+0000996490 00000 n
+0001004079 00000 n
+0001007713 00000 n
+0001017153 00000 n
+0001027888 00000 n
+0001030590 00000 n
+0001030559 00000 n
+0001043439 00000 n
+0001057508 00000 n
+0001077014 00000 n
+0001098080 00000 n
+0001120230 00000 n
+0001138486 00000 n
+0001141333 00000 n
+0001141103 00000 n
+0001168751 00000 n
+0001196080 00000 n
+0001200561 00000 n
+0001200686 00000 n
+0001200812 00000 n
+0001200938 00000 n
+0001201064 00000 n
+0001201190 00000 n
+0001201280 00000 n
+0001201390 00000 n
+0001223571 00000 n
+0001248515 00000 n
+0001248556 00000 n
+0001248596 00000 n
+0001248730 00000 n
trailer
<<
-/Size 2760
-/Root 2758 0 R
-/Info 2759 0 R
-/ID [<56A51CE89D72B9E1A2B24B6DA534816F> <56A51CE89D72B9E1A2B24B6DA534816F>]
+/Size 2838
+/Root 2836 0 R
+/Info 2837 0 R
+/ID [<E1541D0B72B34C8C74B211C7F67883CD> <E1541D0B72B34C8C74B211C7F67883CD>]
>>
startxref
-1207704
+1248988
%%EOF
diff --git a/contrib/bind9/doc/arm/dnssec.xml b/contrib/bind9/doc/arm/dnssec.xml
index f89e17421b5f..7fa9aa75b332 100644
--- a/contrib/bind9/doc/arm/dnssec.xml
+++ b/contrib/bind9/doc/arm/dnssec.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- - Copyright (C) 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2010, 2011 Internet Systems Consortium, Inc. ("ISC")
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: dnssec.xml,v 1.7 2011/10/13 23:47:10 tbox Exp $ -->
<sect1 id="dnssec.dynamic.zones">
<title>DNSSEC, Dynamic Zones, and Automatic Signing</title>
@@ -100,8 +100,7 @@
<command>named</command> can search the key directory for keys
matching the zone, insert them into the zone, and use them to
sign the zone. It will do so only when it receives an
- <command>rndc sign &lt;zonename&gt;</command> or
- <command>rndc loadkeys &lt;zonename&gt;</command> command.</para>
+ <command>rndc sign &lt;zonename&gt;</command>.</para>
<para>
<!-- TODO: this is repeated in the ARM -->
<command>auto-dnssec maintain</command> includes the above
@@ -109,12 +108,34 @@
DNSKEY records on schedule according to the keys' timing metadata.
(See <xref linkend="man.dnssec-keygen"/> and
<xref linkend="man.dnssec-settime"/> for more information.)
+ </para>
+ <para>
+ <command>named</command> will periodically search the key directory
+ for keys matching the zone, and if the keys' metadata indicates
+ that any change should be made the zone, such as adding, removing,
+ or revoking a key, then that action will be carried out. By default,
+ the key directory is checked for changes every 60 minutes; this period
+ can be adjusted with the <option>dnssec-loadkeys-interval</option>, up
+ to a maximum of 24 hours. The <command>rndc loadkeys</command> forces
+ <command>named</command> to check for key updates immediately.
+ </para>
+ <para>
If keys are present in the key directory the first time the zone
- is loaded, it will be signed immediately, without waiting for an
+ is loaded, the zone will be signed immediately, without waiting for an
<command>rndc sign</command> or <command>rndc loadkeys</command>
command. (Those commands can still be used when there are unscheduled
key changes, however.)
</para>
+ <para>
+ If you wish the zone to be signed using NSEC3 instead of NSEC,
+ submit an NSEC3PARAM record via dynamic update prior to the
+ scheduled publication and activation of the keys. If you wish the
+ NSEC3 chain to have the OPTOUT bit set, set it in the flags field
+ of the NSEC3PARAM record. The NSEC3PARAM record will not appear in
+ the zone immediately, but it will be stored for later reference. When
+ the zone is signed and the NSEC3 chain is completed, the NSEC3PARAM
+ record will appear in the zone.
+ </para>
<para>Using the
<command>auto-dnssec</command> option requires the zone to be
configured to allow dynamic updates, by adding an
diff --git a/contrib/bind9/doc/arm/man.arpaname.html b/contrib/bind9/doc/arm/man.arpaname.html
index 814e0b8a33ae..45391da16d94 100644
--- a/contrib/bind9/doc/arm/man.arpaname.html
+++ b/contrib/bind9/doc/arm/man.arpaname.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,20 +50,20 @@
<div class="cmdsynopsis"><p><code class="command">arpaname</code> {<em class="replaceable"><code>ipaddress </code></em>...}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2618405"></a><h2>DESCRIPTION</h2>
+<a name="id2619538"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">arpaname</strong></span> translates IP addresses (IPv4 and
IPv6) to the corresponding IN-ADDR.ARPA or IP6.ARPA names.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618420"></a><h2>SEE ALSO</h2>
+<a name="id2619553"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618434"></a><h2>AUTHOR</h2>
+<a name="id2619566"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.ddns-confgen.html b/contrib/bind9/doc/arm/man.ddns-confgen.html
index 372430484ed7..fed8fbcf7876 100644
--- a/contrib/bind9/doc/arm/man.ddns-confgen.html
+++ b/contrib/bind9/doc/arm/man.ddns-confgen.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">ddns-confgen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [ -s <em class="replaceable"><code>name</code></em> | -z <em class="replaceable"><code>zone</code></em> ] [<code class="option">-q</code>] [name]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2641910"></a><h2>DESCRIPTION</h2>
+<a name="id2657925"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">ddns-confgen</strong></span>
generates a key for use by <span><strong class="command">nsupdate</strong></span>
and <span><strong class="command">named</strong></span>. It simplifies configuration
@@ -77,7 +77,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2641997"></a><h2>OPTIONS</h2>
+<a name="id2658012"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd><p>
@@ -144,7 +144,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2642608"></a><h2>SEE ALSO</h2>
+<a name="id2658418"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">nsupdate</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -152,7 +152,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2642646"></a><h2>AUTHOR</h2>
+<a name="id2658456"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.dig.html b/contrib/bind9/doc/arm/man.dig.html
index e5796ca56eee..556e34b12b4c 100644
--- a/contrib/bind9/doc/arm/man.dig.html
+++ b/contrib/bind9/doc/arm/man.dig.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -52,7 +52,7 @@
<div class="cmdsynopsis"><p><code class="command">dig</code> [global-queryopt...] [query...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2609644"></a><h2>DESCRIPTION</h2>
+<a name="id2611368"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dig</strong></span>
(domain information groper) is a flexible tool
for interrogating DNS name servers. It performs DNS lookups and
@@ -75,9 +75,10 @@
</p>
<p>
Unless it is told to query a specific name server,
- <span><strong class="command">dig</strong></span> will try each of the servers listed
- in
- <code class="filename">/etc/resolv.conf</code>.
+ <span><strong class="command">dig</strong></span> will try each of the servers listed in
+ <code class="filename">/etc/resolv.conf</code>. If no usable server addreses
+ are found, <span><strong class="command">dig</strong></span> will send the query to the local
+ host.
</p>
<p>
When no command line arguments or options are given,
@@ -98,7 +99,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2609808"></a><h2>SIMPLE USAGE</h2>
+<a name="id2611470"></a><h2>SIMPLE USAGE</h2>
<p>
A typical invocation of <span><strong class="command">dig</strong></span> looks like:
</p>
@@ -109,22 +110,29 @@
</p>
<div class="variablelist"><dl>
<dt><span class="term"><code class="constant">server</code></span></dt>
-<dd><p>
- is the name or IP address of the name server to query. This can
- be an IPv4
- address in dotted-decimal notation or an IPv6
+<dd>
+<p>
+ is the name or IP address of the name server to query. This
+ can be an IPv4 address in dotted-decimal notation or an IPv6
address in colon-delimited notation. When the supplied
- <em class="parameter"><code>server</code></em> argument is a
- hostname,
- <span><strong class="command">dig</strong></span> resolves that name before
- querying that name
- server. If no <em class="parameter"><code>server</code></em>
- argument is provided,
- <span><strong class="command">dig</strong></span> consults <code class="filename">/etc/resolv.conf</code>
- and queries the name servers listed there. The reply from the
- name
- server that responds is displayed.
- </p></dd>
+ <em class="parameter"><code>server</code></em> argument is a hostname,
+ <span><strong class="command">dig</strong></span> resolves that name before querying
+ that name server.
+ </p>
+<p>
+ If no <em class="parameter"><code>server</code></em> argument is
+ provided, <span><strong class="command">dig</strong></span> consults
+ <code class="filename">/etc/resolv.conf</code>; if an
+ address is found there, it queries the name server at
+ that address. If either of the <code class="option">-4</code> or
+ <code class="option">-6</code> options are in use, then
+ only addresses for the corresponding transport
+ will be tried. If no usable addresses are found,
+ <span><strong class="command">dig</strong></span> will send the query to the
+ local host. The reply from the name server that
+ responds is displayed.
+ </p>
+</dd>
<dt><span class="term"><code class="constant">name</code></span></dt>
<dd><p>
is the name of the resource record that is to be looked up.
@@ -144,7 +152,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2610055"></a><h2>OPTIONS</h2>
+<a name="id2611596"></a><h2>OPTIONS</h2>
<p>
The <code class="option">-b</code> option sets the source IP address of the query
to <em class="parameter"><code>address</code></em>. This must be a valid
@@ -248,7 +256,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2662690"></a><h2>QUERY OPTIONS</h2>
+<a name="id2664641"></a><h2>QUERY OPTIONS</h2>
<p><span><strong class="command">dig</strong></span>
provides a number of query options which affect
the way in which lookups are made and the results displayed. Some of
@@ -333,7 +341,8 @@
policy of the server. AD=1 indicates that all records
have been validated as secure and the answer is not
from a OPT-OUT range. AD=0 indicate that some part
- of the answer was insecure or not validated.
+ of the answer was insecure or not validated. This
+ bit is set by default.
</p></dd>
<dt><span class="term"><code class="option">+[no]cdflag</code></span></dt>
<dd><p>
@@ -352,15 +361,13 @@
</p></dd>
<dt><span class="term"><code class="option">+[no]recurse</code></span></dt>
<dd><p>
- Toggle the setting of the RD (recursion desired) bit in the
- query.
- This bit is set by default, which means <span><strong class="command">dig</strong></span>
- normally sends recursive queries. Recursion is automatically
- disabled
- when the <em class="parameter"><code>+nssearch</code></em> or
- <em class="parameter"><code>+trace</code></em> query options are
- used.
- </p></dd>
+ Toggle the setting of the RD (recursion desired) bit
+ in the query. This bit is set by default, which means
+ <span><strong class="command">dig</strong></span> normally sends recursive
+ queries. Recursion is automatically disabled when
+ the <em class="parameter"><code>+nssearch</code></em> or
+ <em class="parameter"><code>+trace</code></em> query options are used.
+ </p></dd>
<dt><span class="term"><code class="option">+[no]nssearch</code></span></dt>
<dd><p>
When this option is set, <span><strong class="command">dig</strong></span>
@@ -372,18 +379,21 @@
zone.
</p></dd>
<dt><span class="term"><code class="option">+[no]trace</code></span></dt>
-<dd><p>
- Toggle tracing of the delegation path from the root name servers
- for
- the name being looked up. Tracing is disabled by default. When
- tracing is enabled, <span><strong class="command">dig</strong></span> makes
- iterative queries to
- resolve the name being looked up. It will follow referrals from
- the
- root servers, showing the answer from each server that was used
- to
- resolve the lookup.
- </p></dd>
+<dd>
+<p>
+ Toggle tracing of the delegation path from the root
+ name servers for the name being looked up. Tracing
+ is disabled by default. When tracing is enabled,
+ <span><strong class="command">dig</strong></span> makes iterative queries to
+ resolve the name being looked up. It will follow
+ referrals from the root servers, showing the answer
+ from each server that was used to resolve the lookup.
+ </p>
+<p>
+ <span><strong class="command">+dnssec</strong></span> is also set when +trace is
+ set to better emulate the default queries from a nameserver.
+ </p>
+</dd>
<dt><span class="term"><code class="option">+[no]cmd</code></span></dt>
<dd><p>
Toggles the printing of the initial comment in the output
@@ -410,8 +420,25 @@
<dt><span class="term"><code class="option">+[no]comments</code></span></dt>
<dd><p>
Toggle the display of comment lines in the output. The default
- is to
- print comments.
+ is to print comments.
+ </p></dd>
+<dt><span class="term"><code class="option">+[no]rrcomments</code></span></dt>
+<dd><p>
+ Toggle the display of per-record comments in the output (for
+ example, human-readable key information about DNSKEY records).
+ The default is not to print record comments unless multiline
+ mode is active.
+ </p></dd>
+<dt><span class="term"><code class="option">+split=W</code></span></dt>
+<dd><p>
+ Split long hex- or base64-formatted fields in resource
+ records into chunks of <em class="parameter"><code>W</code></em> characters
+ (where <em class="parameter"><code>W</code></em> is rounded up to the nearest
+ multiple of 4).
+ <em class="parameter"><code>+nosplit</code></em> or
+ <em class="parameter"><code>+split=0</code></em> causes fields not to be
+ split at all. The default is 56 characters, or 44 characters
+ when multiline mode is active.
</p></dd>
<dt><span class="term"><code class="option">+[no]stats</code></span></dt>
<dd><p>
@@ -506,9 +533,10 @@
<dt><span class="term"><code class="option">+edns=#</code></span></dt>
<dd><p>
Specify the EDNS version to query with. Valid values
- are 0 to 255. Setting the EDNS version will cause a
- EDNS query to be sent. <code class="option">+noedns</code> clears the
- remembered EDNS version.
+ are 0 to 255. Setting the EDNS version will cause
+ a EDNS query to be sent. <code class="option">+noedns</code>
+ clears the remembered EDNS version. EDNS is set to
+ 0 by default.
</p></dd>
<dt><span class="term"><code class="option">+[no]multiline</code></span></dt>
<dd><p>
@@ -579,7 +607,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663772"></a><h2>MULTIPLE QUERIES</h2>
+<a name="id2665643"></a><h2>MULTIPLE QUERIES</h2>
<p>
The BIND 9 implementation of <span><strong class="command">dig </strong></span>
supports
@@ -625,7 +653,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663858"></a><h2>IDN SUPPORT</h2>
+<a name="id2665729"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">dig</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -639,14 +667,14 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663886"></a><h2>FILES</h2>
+<a name="id2665962"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
<p><code class="filename">${HOME}/.digrc</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663908"></a><h2>SEE ALSO</h2>
+<a name="id2665984"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">host</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
@@ -654,7 +682,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663945"></a><h2>BUGS</h2>
+<a name="id2666021"></a><h2>BUGS</h2>
<p>
There are probably too many query options.
</p>
diff --git a/contrib/bind9/doc/arm/man.dnssec-dsfromkey.html b/contrib/bind9/doc/arm/man.dnssec-dsfromkey.html
index d63d6da85969..bb8d13607fff 100644
--- a/contrib/bind9/doc/arm/man.dnssec-dsfromkey.html
+++ b/contrib/bind9/doc/arm/man.dnssec-dsfromkey.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -22,7 +22,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
<link rel="start" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="up" href="Bv9ARM.ch10.html" title="Manual pages">
-<link rel="prev" href="man.host.html" title="host">
+<link rel="prev" href="man.dnssec-coverage.html" title="dnssec-coverage">
<link rel="next" href="man.dnssec-keyfromlabel.html" title="dnssec-keyfromlabel">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -31,7 +31,7 @@
<tr><th colspan="3" align="center"><span class="application">dnssec-dsfromkey</span></th></tr>
<tr>
<td width="20%" align="left">
-<a accesskey="p" href="man.host.html">Prev</a> </td>
+<a accesskey="p" href="man.dnssec-coverage.html">Prev</a> </td>
<th width="60%" align="center">Manual pages</th>
<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-keyfromlabel.html">Next</a>
</td>
@@ -47,18 +47,18 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] {keyfile}</p></div>
-<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> {-s} [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-s</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-A</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {dnsname}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-T <em class="replaceable"><code>TTL</code></em></code>] {keyfile}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> {-s} [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-s</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-T <em class="replaceable"><code>TTL</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-A</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {dnsname}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2611633"></a><h2>DESCRIPTION</h2>
+<a name="id2615475"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-dsfromkey</strong></span>
outputs the Delegation Signer (DS) resource record (RR), as defined in
RFC 3658 and RFC 4509, for the given key(s).
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611646"></a><h2>OPTIONS</h2>
+<a name="id2615489"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-1</span></dt>
<dd><p>
@@ -76,6 +76,10 @@
SHA-256 (SHA256), GOST or SHA-384 (SHA384).
These values are case insensitive.
</p></dd>
+<dt><span class="term">-T <em class="replaceable"><code>TTL</code></em></span></dt>
+<dd><p>
+ Specifies the TTL of the DS records.
+ </p></dd>
<dt><span class="term">-K <em class="replaceable"><code>directory</code></em></span></dt>
<dd><p>
Look for key files (or, in keyset mode,
@@ -83,12 +87,23 @@
<code class="option">directory</code>.
</p></dd>
<dt><span class="term">-f <em class="replaceable"><code>file</code></em></span></dt>
-<dd><p>
+<dd>
+<p>
Zone file mode: in place of the keyfile name, the argument is
the DNS domain name of a zone master file, which can be read
from <code class="option">file</code>. If the zone name is the same as
<code class="option">file</code>, then it may be omitted.
- </p></dd>
+ </p>
+<p>
+ If <code class="option">file</code> is set to <code class="literal">"-"</code>, then
+ the zone data is read from the standard input. This makes it
+ possible to use the output of the <span><strong class="command">dig</strong></span>
+ command as input, as in:
+ </p>
+<p>
+ <strong class="userinput"><code>dig dnskey example.com | dnssec-dsfromkey -f - example.com</code></strong>
+ </p>
+</dd>
<dt><span class="term">-A</span></dt>
<dd><p>
Include ZSK's when generating DS records. Without this option,
@@ -120,7 +135,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2611835"></a><h2>EXAMPLE</h2>
+<a name="id2615860"></a><h2>EXAMPLE</h2>
<p>
To build the SHA-256 DS RR from the
<strong class="userinput"><code>Kexample.com.+003+26160</code></strong>
@@ -135,7 +150,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611872"></a><h2>FILES</h2>
+<a name="id2615896"></a><h2>FILES</h2>
<p>
The keyfile can be designed by the key identification
<code class="filename">Knnnn.+aaa+iiiii</code> or the full file name
@@ -149,13 +164,13 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611913"></a><h2>CAVEAT</h2>
+<a name="id2615938"></a><h2>CAVEAT</h2>
<p>
A keyfile error can give a "file not found" even if the file exists.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611923"></a><h2>SEE ALSO</h2>
+<a name="id2615947"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -165,7 +180,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611962"></a><h2>AUTHOR</h2>
+<a name="id2615987"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
@@ -175,13 +190,14 @@
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
-<a accesskey="p" href="man.host.html">Prev</a> </td>
+<a accesskey="p" href="man.dnssec-coverage.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch10.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-keyfromlabel.html">Next</a>
</td>
</tr>
<tr>
-<td width="40%" align="left" valign="top">host </td>
+<td width="40%" align="left" valign="top">
+<span class="application">dnssec-coverage</span> </td>
<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
<td width="40%" align="right" valign="top"> <span class="application">dnssec-keyfromlabel</span>
</td>
diff --git a/contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html b/contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html
index 38cba98fa5bb..dad88378e892 100644
--- a/contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html
+++ b/contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -47,10 +47,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keyfromlabel</code> {-l <em class="replaceable"><code>label</code></em>} [<code class="option">-3</code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-k</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-y</code>] {name}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-keyfromlabel</code> {-l <em class="replaceable"><code>label</code></em>} [<code class="option">-3</code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-k</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-y</code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2612614"></a><h2>DESCRIPTION</h2>
+<a name="id2616617"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keyfromlabel</strong></span>
gets keys with the given label from a crypto hardware and builds
key files for DNSSEC (Secure DNS), as defined in RFC 2535
@@ -63,7 +63,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2612634"></a><h2>OPTIONS</h2>
+<a name="id2616637"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -154,6 +154,15 @@
<dd><p>
Generate KEY records rather than DNSKEY records.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
+<dd><p>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <code class="literal">0</code> or <code class="literal">none</code> removes it.
+ </p></dd>
<dt><span class="term">-p <em class="replaceable"><code>protocol</code></em></span></dt>
<dd><p>
Sets the protocol value for the key. The protocol
@@ -183,7 +192,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2613344"></a><h2>TIMING OPTIONS</h2>
+<a name="id2618535"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -230,7 +239,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615080"></a><h2>GENERATED KEY FILES</h2>
+<a name="id2618633"></a><h2>GENERATED KEY FILES</h2>
<p>
When <span><strong class="command">dnssec-keyfromlabel</strong></span> completes
successfully,
@@ -269,7 +278,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2615447"></a><h2>SEE ALSO</h2>
+<a name="id2669176"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -277,7 +286,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2615480"></a><h2>AUTHOR</h2>
+<a name="id2669209"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.dnssec-keygen.html b/contrib/bind9/doc/arm/man.dnssec-keygen.html
index 3a3a8394bb4d..8f846e0c34e6 100644
--- a/contrib/bind9/doc/arm/man.dnssec-keygen.html
+++ b/contrib/bind9/doc/arm/man.dnssec-keygen.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -47,10 +47,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-3</code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-C</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e</code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k</code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-q</code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {name}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-3</code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-C</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-k</code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-q</code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2613979"></a><h2>DESCRIPTION</h2>
+<a name="id2617453"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keygen</strong></span>
generates keys for DNSSEC (Secure DNS), as defined in RFC 2535
and RFC 4034. It can also generate keys for use with
@@ -64,7 +64,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2614068"></a><h2>OPTIONS</h2>
+<a name="id2617474"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -157,10 +157,6 @@
support it defaults to pkcs11; the empty name resets it to
no engine.
</p></dd>
-<dt><span class="term">-e</span></dt>
-<dd><p>
- If generating an RSAMD5/RSASHA1 key, use a large exponent.
- </p></dd>
<dt><span class="term">-f <em class="replaceable"><code>flag</code></em></span></dt>
<dd><p>
Set the specified flag in the flag field of the KEY/DNSKEY record.
@@ -191,6 +187,15 @@
<dd><p>
Deprecated in favor of -T KEY.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
+<dd><p>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <code class="literal">0</code> or <code class="literal">none</code> removes it.
+ </p></dd>
<dt><span class="term">-p <em class="replaceable"><code>protocol</code></em></span></dt>
<dd><p>
Sets the protocol value for the generated key. The protocol
@@ -269,7 +274,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2666124"></a><h2>TIMING OPTIONS</h2>
+<a name="id2669682"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -340,7 +345,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2666314"></a><h2>GENERATED KEYS</h2>
+<a name="id2669872"></a><h2>GENERATED KEYS</h2>
<p>
When <span><strong class="command">dnssec-keygen</strong></span> completes
successfully,
@@ -386,7 +391,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2666422"></a><h2>EXAMPLE</h2>
+<a name="id2669979"></a><h2>EXAMPLE</h2>
<p>
To generate a 768-bit DSA key for the domain
<strong class="userinput"><code>example.com</code></strong>, the following command would be
@@ -407,7 +412,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2666478"></a><h2>SEE ALSO</h2>
+<a name="id2670036"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2539</em>,
@@ -416,7 +421,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2666509"></a><h2>AUTHOR</h2>
+<a name="id2670067"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.dnssec-revoke.html b/contrib/bind9/doc/arm/man.dnssec-revoke.html
index e1ff637706a7..c6490eff2b85 100644
--- a/contrib/bind9/doc/arm/man.dnssec-revoke.html
+++ b/contrib/bind9/doc/arm/man.dnssec-revoke.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-revoke</code> [<code class="option">-hr</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f</code>] [<code class="option">-R</code>] {keyfile}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2614416"></a><h2>DESCRIPTION</h2>
+<a name="id2617950"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-revoke</strong></span>
reads a DNSSEC key file, sets the REVOKED bit on the key as defined
in RFC 5011, and creates a new pair of key files containing the
@@ -58,7 +58,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2614429"></a><h2>OPTIONS</h2>
+<a name="id2617964"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -96,14 +96,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2614550"></a><h2>SEE ALSO</h2>
+<a name="id2618085"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 5011</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2614574"></a><h2>AUTHOR</h2>
+<a name="id2618109"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.dnssec-settime.html b/contrib/bind9/doc/arm/man.dnssec-settime.html
index cd14fe2cdc22..3e121c4e2645 100644
--- a/contrib/bind9/doc/arm/man.dnssec-settime.html
+++ b/contrib/bind9/doc/arm/man.dnssec-settime.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -47,10 +47,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-settime</code> [<code class="option">-f</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] {keyfile}</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-settime</code> [<code class="option">-f</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] {keyfile}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2614758"></a><h2>DESCRIPTION</h2>
+<a name="id2619165"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-settime</strong></span>
reads a DNSSEC private key file and sets the key timing metadata
as specified by the <code class="option">-P</code>, <code class="option">-A</code>,
@@ -76,7 +76,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2614817"></a><h2>OPTIONS</h2>
+<a name="id2619224"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-f</span></dt>
<dd><p>
@@ -93,6 +93,15 @@
<dd><p>
Sets the directory in which the key files are to reside.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>ttl</code></em></span></dt>
+<dd><p>
+ Sets the default TTL to use for this key when it is converted
+ into a DNSKEY RR. If the key is imported into a zone,
+ this is the TTL that will be used for it, unless there was
+ already a DNSKEY RRset in place, in which case the existing TTL
+ would take precedence. Setting the default TTL to
+ <code class="literal">0</code> or <code class="literal">none</code> removes it.
+ </p></dd>
<dt><span class="term">-h</span></dt>
<dd><p>
Emit usage message and exit.
@@ -109,7 +118,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615184"></a><h2>TIMING OPTIONS</h2>
+<a name="id2619346"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -188,7 +197,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615322"></a><h2>PRINTING OPTIONS</h2>
+<a name="id2620167"></a><h2>PRINTING OPTIONS</h2>
<p>
<span><strong class="command">dnssec-settime</strong></span> can also be used to print the
timing metadata associated with a key.
@@ -214,7 +223,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615607"></a><h2>SEE ALSO</h2>
+<a name="id2620315"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -222,7 +231,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2615640"></a><h2>AUTHOR</h2>
+<a name="id2621372"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.dnssec-signzone.html b/contrib/bind9/doc/arm/man.dnssec-signzone.html
index 3132c54440a3..290e7700973c 100644
--- a/contrib/bind9/doc/arm/man.dnssec-signzone.html
+++ b/contrib/bind9/doc/arm/man.dnssec-signzone.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -23,7 +23,7 @@
<link rel="start" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="up" href="Bv9ARM.ch10.html" title="Manual pages">
<link rel="prev" href="man.dnssec-settime.html" title="dnssec-settime">
-<link rel="next" href="man.named-checkconf.html" title="named-checkconf">
+<link rel="next" href="man.dnssec-verify.html" title="dnssec-verify">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
@@ -33,7 +33,7 @@
<td width="20%" align="left">
<a accesskey="p" href="man.dnssec-settime.html">Prev</a> </td>
<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.named-checkconf.html">Next</a>
+<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-verify.html">Next</a>
</td>
</tr>
</table>
@@ -47,10 +47,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-p</code>] [<code class="option">-P</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-t</code>] [<code class="option">-u</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] [<code class="option">-3 <em class="replaceable"><code>salt</code></em></code>] [<code class="option">-H <em class="replaceable"><code>iterations</code></em></code>] [<code class="option">-A</code>] {zonefile} [key...]</p></div>
+<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-P</code>] [<code class="option">-p</code>] [<code class="option">-R</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-t</code>] [<code class="option">-u</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-X <em class="replaceable"><code>extended end-time</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] [<code class="option">-3 <em class="replaceable"><code>salt</code></em></code>] [<code class="option">-H <em class="replaceable"><code>iterations</code></em></code>] [<code class="option">-A</code>] {zonefile} [key...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2616228"></a><h2>DESCRIPTION</h2>
+<a name="id2620935"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-signzone</strong></span>
signs a zone. It generates
NSEC and RRSIG records and produces a signed version of the
@@ -61,7 +61,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2616247"></a><h2>OPTIONS</h2>
+<a name="id2620954"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd><p>
@@ -85,6 +85,17 @@
Look for <code class="filename">dsset-</code> or
<code class="filename">keyset-</code> files in <code class="option">directory</code>.
</p></dd>
+<dt><span class="term">-D</span></dt>
+<dd><p>
+ Output only those record types automatically managed by
+ <span><strong class="command">dnssec-signzone</strong></span>, i.e. RRSIG, NSEC,
+ NSEC3 and NSEC3PARAM records. If smart signing
+ (<code class="option">-S</code>) is used, DNSKEY records are also
+ included. The resulting file can be included in the original
+ zone file with <span><strong class="command">$INCLUDE</strong></span>. This option
+ cannot be combined with <code class="option">-O raw</code> or serial
+ number updating.
+ </p></dd>
<dt><span class="term">-E <em class="replaceable"><code>engine</code></em></span></dt>
<dd><p>
Uses a crypto hardware (OpenSSL engine) for the crypto operations
@@ -136,12 +147,36 @@
<code class="option">end-time</code> must be later than
<code class="option">start-time</code>.
</p></dd>
+<dt><span class="term">-X <em class="replaceable"><code>extended end-time</code></em></span></dt>
+<dd>
+<p>
+ Specify the date and time when the generated RRSIG records
+ for the DNSKEY RRset will expire. This is to be used in cases
+ when the DNSKEY signatures need to persist longer than
+ signatures on other records; e.g., when the private component
+ of the KSK is kept offline and the KSK signature is to be
+ refreshed manually.
+ </p>
+<p>
+ As with <code class="option">start-time</code>, an absolute
+ time is indicated in YYYYMMDDHHMMSS notation. A time relative
+ to the start time is indicated with +N, which is N seconds from
+ the start time. A time relative to the current time is
+ indicated with now+N. If no <code class="option">extended end-time</code> is
+ specified, the value of <code class="option">end-time</code> is used as
+ the default. (<code class="option">end-time</code>, in turn, defaults to
+ 30 days from the start time.) <code class="option">extended end-time</code>
+ must be later than <code class="option">start-time</code>.
+ </p>
+</dd>
<dt><span class="term">-f <em class="replaceable"><code>output-file</code></em></span></dt>
<dd><p>
The name of the output file containing the signed zone. The
default is to append <code class="filename">.signed</code> to
- the
- input filename.
+ the input filename. If <code class="option">output-file</code> is
+ set to <code class="literal">"-"</code>, then the signed zone is
+ written to the standard output, with a default output
+ format of "full".
</p></dd>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -202,6 +237,12 @@
validators need to refetch at mostly the same time.
</p>
</dd>
+<dt><span class="term">-L <em class="replaceable"><code>serial</code></em></span></dt>
+<dd><p>
+ When writing a signed zone to 'raw' format, set the "source serial"
+ value in the header to the specified serial number. (This is
+ expected to be used primarily for testing purposes.)
+ </p></dd>
<dt><span class="term">-n <em class="replaceable"><code>ncpus</code></em></span></dt>
<dd><p>
Specifies the number of threads to use. By default, one
@@ -235,7 +276,15 @@
<dd><p>
The format of the output file containing the signed zone.
Possible formats are <span><strong class="command">"text"</strong></span> (default)
- and <span><strong class="command">"raw"</strong></span>.
+ <span><strong class="command">"full"</strong></span>, which is text output in a
+ format suitable for processing by external scripts,
+ and <span><strong class="command">"raw"</strong></span> or <span><strong class="command">"raw=N"</strong></span>,
+ which store the zone in a binary format for rapid loading
+ by <span><strong class="command">named</strong></span>. <span><strong class="command">"raw=N"</strong></span>
+ specifies the format version of the raw zone file: if N
+ is 0, the raw file can be read by any version of
+ <span><strong class="command">named</strong></span>; if N is 1, the file can be
+ read by release 9.9.0 or higher. The default is 1.
</p></dd>
<dt><span class="term">-p</span></dt>
<dd><p>
@@ -257,6 +306,22 @@
This option skips these tests.
</p>
</dd>
+<dt><span class="term">-R</span></dt>
+<dd>
+<p>
+ Remove signatures from keys that no longer exist.
+ </p>
+<p>
+ Normally, when a previously-signed zone is passed as input
+ to the signer, and a DNSKEY record has been removed and
+ replaced with a new one, signatures from the old key
+ that are still within their validity period are retained.
+ This allows the zone to continue to validate with cached
+ copies of the old DNSKEY RRset. The <code class="option">-R</code> forces
+ <span><strong class="command">dnssec-signzone</strong></span> to remove all orphaned
+ signatures.
+ </p>
+</dd>
<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
<dd><p>
Specifies the source of randomness. If the operating
@@ -315,15 +380,17 @@
</dd>
<dt><span class="term">-T <em class="replaceable"><code>ttl</code></em></span></dt>
<dd><p>
- Specifies the TTL to be used for new DNSKEY records imported
- into the zone from the key repository. If not specified,
- the default is the minimum TTL value from the zone's SOA
+ Specifies a TTL to be used for new DNSKEY records imported
+ into the zone from the key repository. If not
+ specified, the default is the TTL value from the zone's SOA
record. This option is ignored when signing without
<code class="option">-S</code>, since DNSKEY records are not imported
from the key repository in that case. It is also ignored if
there are any pre-existing DNSKEY records at the zone apex,
in which case new records' TTL values will be set to match
- them.
+ them, or if any of the imported DNSKEY records had a default
+ TTL value. In the event of a a conflict between TTL values in
+ imported keys, the shortest one is used.
</p></dd>
<dt><span class="term">-t</span></dt>
<dd><p>
@@ -397,7 +464,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2667564"></a><h2>EXAMPLE</h2>
+<a name="id2675701"></a><h2>EXAMPLE</h2>
<p>
The following command signs the <strong class="userinput"><code>example.com</code></strong>
zone with the DSA key generated by <span><strong class="command">dnssec-keygen</strong></span>
@@ -427,14 +494,14 @@ db.example.com.signed
%</pre>
</div>
<div class="refsect1" lang="en">
-<a name="id2667643"></a><h2>SEE ALSO</h2>
+<a name="id2675848"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 4033</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2667668"></a><h2>AUTHOR</h2>
+<a name="id2675873"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
@@ -446,14 +513,14 @@ db.example.com.signed
<td width="40%" align="left">
<a accesskey="p" href="man.dnssec-settime.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch10.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.named-checkconf.html">Next</a>
+<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-verify.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">
<span class="application">dnssec-settime</span> </td>
<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">named-checkconf</span>
+<td width="40%" align="right" valign="top"> <span class="application">dnssec-verify</span>
</td>
</tr>
</table>
diff --git a/contrib/bind9/doc/arm/man.dnssec-verify.html b/contrib/bind9/doc/arm/man.dnssec-verify.html
new file mode 100644
index 000000000000..d8a0bf0ebb4b
--- /dev/null
+++ b/contrib/bind9/doc/arm/man.dnssec-verify.html
@@ -0,0 +1,156 @@
+<!--
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2000-2003 Internet Software Consortium.
+ -
+ - Permission to use, copy, modify, and/or distribute this software for any
+ - purpose with or without fee is hereby granted, provided that the above
+ - copyright notice and this permission notice appear in all copies.
+ -
+ - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ - PERFORMANCE OF THIS SOFTWARE.
+-->
+<!-- $Id$ -->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>dnssec-verify</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
+<link rel="start" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
+<link rel="up" href="Bv9ARM.ch10.html" title="Manual pages">
+<link rel="prev" href="man.dnssec-signzone.html" title="dnssec-signzone">
+<link rel="next" href="man.named-checkconf.html" title="named-checkconf">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="navheader">
+<table width="100%" summary="Navigation header">
+<tr><th colspan="3" align="center"><span class="application">dnssec-verify</span></th></tr>
+<tr>
+<td width="20%" align="left">
+<a accesskey="p" href="man.dnssec-signzone.html">Prev</a> </td>
+<th width="60%" align="center">Manual pages</th>
+<td width="20%" align="right"> <a accesskey="n" href="man.named-checkconf.html">Next</a>
+</td>
+</tr>
+</table>
+<hr>
+</div>
+<div class="refentry" lang="en">
+<a name="man.dnssec-verify"></a><div class="titlepage"></div>
+<div class="refnamediv">
+<h2>Name</h2>
+<p><span class="application">dnssec-verify</span> &#8212; DNSSEC zone verification tool</p>
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="cmdsynopsis"><p><code class="command">dnssec-verify</code> [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] {zonefile}</p></div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622443"></a><h2>DESCRIPTION</h2>
+<p><span><strong class="command">dnssec-verify</strong></span>
+ verifies that a zone is fully signed for each algorithm found
+ in the DNSKEY RRset for the zone, and that the NSEC / NSEC3
+ chains are complete.
+ </p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622457"></a><h2>OPTIONS</h2>
+<div class="variablelist"><dl>
+<dt><span class="term">-c <em class="replaceable"><code>class</code></em></span></dt>
+<dd><p>
+ Specifies the DNS class of the zone.
+ </p></dd>
+<dt><span class="term">-I <em class="replaceable"><code>input-format</code></em></span></dt>
+<dd><p>
+ The format of the input zone file.
+ Possible formats are <span><strong class="command">"text"</strong></span> (default)
+ and <span><strong class="command">"raw"</strong></span>.
+ This option is primarily intended to be used for dynamic
+ signed zones so that the dumped zone file in a non-text
+ format containing updates can be verified independently.
+ The use of this option does not make much sense for
+ non-dynamic zones.
+ </p></dd>
+<dt><span class="term">-o <em class="replaceable"><code>origin</code></em></span></dt>
+<dd><p>
+ The zone origin. If not specified, the name of the zone file
+ is assumed to be the origin.
+ </p></dd>
+<dt><span class="term">-v <em class="replaceable"><code>level</code></em></span></dt>
+<dd><p>
+ Sets the debugging level.
+ </p></dd>
+<dt><span class="term">-x</span></dt>
+<dd><p>
+ Only verify that the DNSKEY RRset is signed with key-signing
+ keys. Without this flag, it is assumed that the DNSKEY RRset
+ will be signed by all active keys. When this flag is set,
+ it will not be an error if the DNSKEY RRset is not signed
+ by zone-signing keys. This corresponds to the <code class="option">-x</code>
+ option in <span><strong class="command">dnssec-signzone</strong></span>.
+ </p></dd>
+<dt><span class="term">-z</span></dt>
+<dd>
+<p>
+ Ignore the KSK flag on the keys when determining whether
+ the zone if correctly signed. Without this flag it is
+ assumed that there will be a non-revoked, self-signed
+ DNSKEY with the KSK flag set for each algorithm and
+ that RRsets other than DNSKEY RRset will be signed with
+ a different DNSKEY without the KSK flag set.
+ </p>
+<p>
+ With this flag set, we only require that for each algorithm,
+ there will be at least one non-revoked, self-signed DNSKEY,
+ regardless of the KSK flag state, and that other RRsets
+ will be signed by a non-revoked key for the same algorithm
+ that includes the self-signed key; the same key may be used
+ for both purposes. This corresponds to the <code class="option">-z</code>
+ option in <span><strong class="command">dnssec-signzone</strong></span>.
+ </p>
+</dd>
+<dt><span class="term">zonefile</span></dt>
+<dd><p>
+ The file containing the zone to be signed.
+ </p></dd>
+</dl></div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622606"></a><h2>SEE ALSO</h2>
+<p>
+ <span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
+ <em class="citetitle">BIND 9 Administrator Reference Manual</em>,
+ <em class="citetitle">RFC 4033</em>.
+ </p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622632"></a><h2>AUTHOR</h2>
+<p><span class="corpauthor">Internet Systems Consortium</span>
+ </p>
+</div>
+</div>
+<div class="navfooter">
+<hr>
+<table width="100%" summary="Navigation footer">
+<tr>
+<td width="40%" align="left">
+<a accesskey="p" href="man.dnssec-signzone.html">Prev</a> </td>
+<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch10.html">Up</a></td>
+<td width="40%" align="right"> <a accesskey="n" href="man.named-checkconf.html">Next</a>
+</td>
+</tr>
+<tr>
+<td width="40%" align="left" valign="top">
+<span class="application">dnssec-signzone</span> </td>
+<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
+<td width="40%" align="right" valign="top"> <span class="application">named-checkconf</span>
+</td>
+</tr>
+</table>
+</div>
+</body>
+</html>
diff --git a/contrib/bind9/doc/arm/man.genrandom.html b/contrib/bind9/doc/arm/man.genrandom.html
index 0b72a6e8fa29..e7f0eebaf6ff 100644
--- a/contrib/bind9/doc/arm/man.genrandom.html
+++ b/contrib/bind9/doc/arm/man.genrandom.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">genrandom</code> [<code class="option">-n <em class="replaceable"><code>number</code></em></code>] {<em class="replaceable"><code>size</code></em>} {<em class="replaceable"><code>filename</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2642837"></a><h2>DESCRIPTION</h2>
+<a name="id2619662"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">genrandom</strong></span>
generates a file or a set of files containing a specified quantity
@@ -59,7 +59,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2642852"></a><h2>ARGUMENTS</h2>
+<a name="id2658794"></a><h2>ARGUMENTS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-n <em class="replaceable"><code>number</code></em></span></dt>
<dd><p>
@@ -77,14 +77,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2642913"></a><h2>SEE ALSO</h2>
+<a name="id2658855"></a><h2>SEE ALSO</h2>
<p>
<span class="citerefentry"><span class="refentrytitle">rand</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">arc4random</span>(3)</span>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2642939"></a><h2>AUTHOR</h2>
+<a name="id2658882"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.host.html b/contrib/bind9/doc/arm/man.host.html
index dd70d66b6d45..2166dd224a70 100644
--- a/contrib/bind9/doc/arm/man.host.html
+++ b/contrib/bind9/doc/arm/man.host.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -23,7 +23,7 @@
<link rel="start" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="up" href="Bv9ARM.ch10.html" title="Manual pages">
<link rel="prev" href="man.dig.html" title="dig">
-<link rel="next" href="man.dnssec-dsfromkey.html" title="dnssec-dsfromkey">
+<link rel="next" href="man.dnssec-checkds.html" title="dnssec-checkds">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
@@ -33,7 +33,7 @@
<td width="20%" align="left">
<a accesskey="p" href="man.dig.html">Prev</a> </td>
<th width="60%" align="center">Manual pages</th>
-<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-dsfromkey.html">Next</a>
+<td width="20%" align="right"> <a accesskey="n" href="man.dnssec-checkds.html">Next</a>
</td>
</tr>
</table>
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">host</code> [<code class="option">-aCdlnrsTwv</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-N <em class="replaceable"><code>ndots</code></em></code>] [<code class="option">-R <em class="replaceable"><code>number</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-W <em class="replaceable"><code>wait</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-4</code>] [<code class="option">-6</code>] {name} [server]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2610871"></a><h2>DESCRIPTION</h2>
+<a name="id2612042"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">host</strong></span>
is a simple utility for performing DNS lookups.
It is normally used to convert names to IP addresses and vice versa.
@@ -202,7 +202,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611317"></a><h2>IDN SUPPORT</h2>
+<a name="id2613034"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">host</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -216,12 +216,12 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611346"></a><h2>FILES</h2>
+<a name="id2613131"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2611360"></a><h2>SEE ALSO</h2>
+<a name="id2613145"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>.
</p>
@@ -234,13 +234,13 @@
<td width="40%" align="left">
<a accesskey="p" href="man.dig.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch10.html">Up</a></td>
-<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-dsfromkey.html">Next</a>
+<td width="40%" align="right"> <a accesskey="n" href="man.dnssec-checkds.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">dig </td>
<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
-<td width="40%" align="right" valign="top"> <span class="application">dnssec-dsfromkey</span>
+<td width="40%" align="right" valign="top"> <span class="application">dnssec-checkds</span>
</td>
</tr>
</table>
diff --git a/contrib/bind9/doc/arm/man.isc-hmac-fixup.html b/contrib/bind9/doc/arm/man.isc-hmac-fixup.html
index d089af0476ca..5b35c3854ec8 100644
--- a/contrib/bind9/doc/arm/man.isc-hmac-fixup.html
+++ b/contrib/bind9/doc/arm/man.isc-hmac-fixup.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">isc-hmac-fixup</code> {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>secret</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2619705"></a><h2>DESCRIPTION</h2>
+<a name="id2659345"></a><h2>DESCRIPTION</h2>
<p>
Versions of BIND 9 up to and including BIND 9.6 had a bug causing
HMAC-SHA* TSIG keys which were longer than the digest length of the
@@ -76,7 +76,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643899"></a><h2>SECURITY CONSIDERATIONS</h2>
+<a name="id2659372"></a><h2>SECURITY CONSIDERATIONS</h2>
<p>
Secrets that have been converted by <span><strong class="command">isc-hmac-fixup</strong></span>
are shortened, but as this is how the HMAC protocol works in
@@ -87,14 +87,14 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643915"></a><h2>SEE ALSO</h2>
+<a name="id2659388"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2104</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643932"></a><h2>AUTHOR</h2>
+<a name="id2659405"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.named-checkconf.html b/contrib/bind9/doc/arm/man.named-checkconf.html
index d3dc621a946d..d120cb44d1bd 100644
--- a/contrib/bind9/doc/arm/man.named-checkconf.html
+++ b/contrib/bind9/doc/arm/man.named-checkconf.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -22,7 +22,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
<link rel="start" href="Bv9ARM.html" title="BIND 9 Administrator Reference Manual">
<link rel="up" href="Bv9ARM.ch10.html" title="Manual pages">
-<link rel="prev" href="man.dnssec-signzone.html" title="dnssec-signzone">
+<link rel="prev" href="man.dnssec-verify.html" title="dnssec-verify">
<link rel="next" href="man.named-checkzone.html" title="named-checkzone">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -31,7 +31,7 @@
<tr><th colspan="3" align="center"><span class="application">named-checkconf</span></th></tr>
<tr>
<td width="20%" align="left">
-<a accesskey="p" href="man.dnssec-signzone.html">Prev</a> </td>
+<a accesskey="p" href="man.dnssec-verify.html">Prev</a> </td>
<th width="60%" align="center">Manual pages</th>
<td width="20%" align="right"> <a accesskey="n" href="man.named-checkzone.html">Next</a>
</td>
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">named-checkconf</code> [<code class="option">-h</code>] [<code class="option">-v</code>] [<code class="option">-j</code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] {filename} [<code class="option">-p</code>] [<code class="option">-z</code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2617093"></a><h2>DESCRIPTION</h2>
+<a name="id2628740"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkconf</strong></span>
checks the syntax, but not the semantics, of a
<span><strong class="command">named</strong></span> configuration file. The file is parsed
@@ -70,7 +70,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2617163"></a><h2>OPTIONS</h2>
+<a name="id2628810"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -109,21 +109,21 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2617298"></a><h2>RETURN VALUES</h2>
+<a name="id2634474"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkconf</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2617312"></a><h2>SEE ALSO</h2>
+<a name="id2634488"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2617341"></a><h2>AUTHOR</h2>
+<a name="id2634518"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
@@ -133,14 +133,14 @@
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
-<a accesskey="p" href="man.dnssec-signzone.html">Prev</a> </td>
+<a accesskey="p" href="man.dnssec-verify.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="Bv9ARM.ch10.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="man.named-checkzone.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">
-<span class="application">dnssec-signzone</span> </td>
+<span class="application">dnssec-verify</span> </td>
<td width="20%" align="center"><a accesskey="h" href="Bv9ARM.html">Home</a></td>
<td width="40%" align="right" valign="top"> <span class="application">named-checkzone</span>
</td>
diff --git a/contrib/bind9/doc/arm/man.named-checkzone.html b/contrib/bind9/doc/arm/man.named-checkzone.html
index 12b789777316..b828f19764c8 100644
--- a/contrib/bind9/doc/arm/man.named-checkzone.html
+++ b/contrib/bind9/doc/arm/man.named-checkzone.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -47,11 +47,11 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named-checkzone</code> [<code class="option">-d</code>] [<code class="option">-h</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-M <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-o <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-S <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {zonename} {filename}</p></div>
-<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {<code class="option">-o <em class="replaceable"><code>filename</code></em></code>} {zonename} {filename}</p></div>
+<div class="cmdsynopsis"><p><code class="command">named-checkzone</code> [<code class="option">-d</code>] [<code class="option">-h</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-M <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-o <em class="replaceable"><code>filename</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-S <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-T <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {zonename} {filename}</p></div>
+<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-L <em class="replaceable"><code>serial</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-T <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {<code class="option">-o <em class="replaceable"><code>filename</code></em></code>} {zonename} {filename}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2618775"></a><h2>DESCRIPTION</h2>
+<a name="id2641051"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkzone</strong></span>
checks the syntax and integrity of a zone file. It performs the
same checks as <span><strong class="command">named</strong></span> does when loading a
@@ -71,7 +71,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618825"></a><h2>OPTIONS</h2>
+<a name="id2678170"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-d</span></dt>
<dd><p>
@@ -146,14 +146,24 @@
and <span><strong class="command">"raw"</strong></span>.
</p></dd>
<dt><span class="term">-F <em class="replaceable"><code>format</code></em></span></dt>
-<dd><p>
+<dd>
+<p>
Specify the format of the output file specified.
- Possible formats are <span><strong class="command">"text"</strong></span> (default)
- and <span><strong class="command">"raw"</strong></span>.
For <span><strong class="command">named-checkzone</strong></span>,
this does not cause any effects unless it dumps the zone
contents.
- </p></dd>
+ </p>
+<p>
+ Possible formats are <span><strong class="command">"text"</strong></span> (default)
+ and <span><strong class="command">"raw"</strong></span> or <span><strong class="command">"raw=N"</strong></span>,
+ which store the zone in a binary format for rapid loading
+ by <span><strong class="command">named</strong></span>. <span><strong class="command">"raw=N"</strong></span>
+ specifies the format version of the raw zone file: if N
+ is 0, the raw file can be read by any version of
+ <span><strong class="command">named</strong></span>; if N is 1, the file can be read
+ by release 9.9.0 or higher. The default is 1.
+ </p>
+</dd>
<dt><span class="term">-k <em class="replaceable"><code>mode</code></em></span></dt>
<dd><p>
Perform <span><strong class="command">"check-names"</strong></span> checks with the
@@ -164,6 +174,12 @@
(default for <span><strong class="command">named-checkzone</strong></span>) and
<span><strong class="command">"ignore"</strong></span>.
</p></dd>
+<dt><span class="term">-L <em class="replaceable"><code>serial</code></em></span></dt>
+<dd><p>
+ When compiling a zone to 'raw' format, set the "source serial"
+ value in the header to the specified serial number. (This is
+ expected to be used primarily for testing purposes.)
+ </p></dd>
<dt><span class="term">-m <em class="replaceable"><code>mode</code></em></span></dt>
<dd><p>
Specify whether MX records should be checked to see if they
@@ -232,6 +248,13 @@
directives in the configuration file are processed as if
run by a similarly chrooted named.
</p></dd>
+<dt><span class="term">-T <em class="replaceable"><code>mode</code></em></span></dt>
+<dd><p>
+ Check if Sender Policy Framework records (TXT and SPF)
+ both exist or both don't exist. A warning is issued
+ if they don't match. Possible modes are
+ <span><strong class="command">"warn"</strong></span> (default), <span><strong class="command">"ignore"</strong></span>.
+ </p></dd>
<dt><span class="term">-w <em class="replaceable"><code>directory</code></em></span></dt>
<dd><p>
chdir to <code class="filename">directory</code> so that
@@ -265,14 +288,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2671342"></a><h2>RETURN VALUES</h2>
+<a name="id2679079"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkzone</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2671356"></a><h2>SEE ALSO</h2>
+<a name="id2679093"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
<em class="citetitle">RFC 1035</em>,
@@ -280,7 +303,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2671389"></a><h2>AUTHOR</h2>
+<a name="id2679126"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.named-journalprint.html b/contrib/bind9/doc/arm/man.named-journalprint.html
index c6d1b117b2fb..5c1f3db111f9 100644
--- a/contrib/bind9/doc/arm/man.named-journalprint.html
+++ b/contrib/bind9/doc/arm/man.named-journalprint.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">named-journalprint</code> {<em class="replaceable"><code>journal</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2616312"></a><h2>DESCRIPTION</h2>
+<a name="id2616467"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">named-journalprint</strong></span>
prints the contents of a zone journal file in a human-readable
@@ -76,7 +76,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2621956"></a><h2>SEE ALSO</h2>
+<a name="id2616513"></a><h2>SEE ALSO</h2>
<p>
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">nsupdate</span>(8)</span>,
@@ -84,7 +84,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2621987"></a><h2>AUTHOR</h2>
+<a name="id2643372"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.named.html b/contrib/bind9/doc/arm/man.named.html
index 729a9afcc955..02d61353a8c6 100644
--- a/contrib/bind9/doc/arm/man.named.html
+++ b/contrib/bind9/doc/arm/man.named.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -47,10 +47,10 @@
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
-<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine-name</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-S <em class="replaceable"><code>#max-socks</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-V</code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
+<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine-name</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-S <em class="replaceable"><code>#max-socks</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-U <em class="replaceable"><code>#listeners</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-V</code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2619008"></a><h2>DESCRIPTION</h2>
+<a name="id2641300"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named</strong></span>
is a Domain Name System (DNS) server,
part of the BIND 9 distribution from ISC. For more
@@ -65,7 +65,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2619038"></a><h2>OPTIONS</h2>
+<a name="id2641331"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-4</span></dt>
<dd><p>
@@ -196,6 +196,16 @@
</p>
</div>
</dd>
+<dt><span class="term">-U <em class="replaceable"><code>#listeners</code></em></span></dt>
+<dd><p>
+ Use <em class="replaceable"><code>#listeners</code></em>
+ worker threads to listen for incoming UDP packets on each
+ address. If not specified, <span><strong class="command">named</strong></span> will
+ use the number of detected CPUs. If <code class="option">-n</code>
+ has been set to a higher value than the number of CPUs,
+ then <code class="option">-U</code> may be increased as high as that
+ value, but no higher.
+ </p></dd>
<dt><span class="term">-u <em class="replaceable"><code>user</code></em></span></dt>
<dd>
<p>Setuid
@@ -246,7 +256,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2638843"></a><h2>SIGNALS</h2>
+<a name="id2679261"></a><h2>SIGNALS</h2>
<p>
In routine operation, signals should not be used to control
the nameserver; <span><strong class="command">rndc</strong></span> should be used
@@ -267,7 +277,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2660602"></a><h2>CONFIGURATION</h2>
+<a name="id2679312"></a><h2>CONFIGURATION</h2>
<p>
The <span><strong class="command">named</strong></span> configuration file is too complex
to describe in detail here. A complete description is provided
@@ -284,7 +294,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2660651"></a><h2>FILES</h2>
+<a name="id2679361"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="filename">/etc/named.conf</code></span></dt>
<dd><p>
@@ -297,7 +307,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2660695"></a><h2>SEE ALSO</h2>
+<a name="id2679404"></a><h2>SEE ALSO</h2>
<p><em class="citetitle">RFC 1033</em>,
<em class="citetitle">RFC 1034</em>,
<em class="citetitle">RFC 1035</em>,
@@ -310,7 +320,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2675716"></a><h2>AUTHOR</h2>
+<a name="id2679475"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.nsec3hash.html b/contrib/bind9/doc/arm/man.nsec3hash.html
index d266a22c887f..bdba8a683d2a 100644
--- a/contrib/bind9/doc/arm/man.nsec3hash.html
+++ b/contrib/bind9/doc/arm/man.nsec3hash.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -48,7 +48,7 @@
<div class="cmdsynopsis"><p><code class="command">nsec3hash</code> {<em class="replaceable"><code>salt</code></em>} {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>iterations</code></em>} {<em class="replaceable"><code>domain</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2643980"></a><h2>DESCRIPTION</h2>
+<a name="id2621016"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">nsec3hash</strong></span> generates an NSEC3 hash based on
a set of NSEC3 parameters. This can be used to check the validity
@@ -56,7 +56,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643995"></a><h2>ARGUMENTS</h2>
+<a name="id2659465"></a><h2>ARGUMENTS</h2>
<div class="variablelist"><dl>
<dt><span class="term">salt</span></dt>
<dd><p>
@@ -80,14 +80,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2644125"></a><h2>SEE ALSO</h2>
+<a name="id2659527"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 5155</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2644142"></a><h2>AUTHOR</h2>
+<a name="id2659612"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.nsupdate.html b/contrib/bind9/doc/arm/man.nsupdate.html
index 1542215b60da..6793b42389cb 100644
--- a/contrib/bind9/doc/arm/man.nsupdate.html
+++ b/contrib/bind9/doc/arm/man.nsupdate.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">nsupdate</code> [<code class="option">-d</code>] [<code class="option">-D</code>] [[<code class="option">-g</code>] | [<code class="option">-o</code>] | [<code class="option">-l</code>] | [<code class="option">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></code>] | [<code class="option">-k <em class="replaceable"><code>keyfile</code></em></code>]] [<code class="option">-t <em class="replaceable"><code>timeout</code></em></code>] [<code class="option">-u <em class="replaceable"><code>udptimeout</code></em></code>] [<code class="option">-r <em class="replaceable"><code>udpretries</code></em></code>] [<code class="option">-R <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-v</code>] [filename]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2626656"></a><h2>DESCRIPTION</h2>
+<a name="id2643632"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">nsupdate</strong></span>
is used to submit Dynamic DNS Update requests as defined in RFC 2136
to a name server.
@@ -210,7 +210,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2633475"></a><h2>INPUT FORMAT</h2>
+<a name="id2644170"></a><h2>INPUT FORMAT</h2>
<p><span><strong class="command">nsupdate</strong></span>
reads input from
<em class="parameter"><code>filename</code></em>
@@ -349,7 +349,7 @@
realm is specified the saved realm is cleared.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq nxdomain</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] nxdomain</strong></span>
{domain-name}
</span></dt>
<dd><p>
@@ -357,7 +357,7 @@
<em class="parameter"><code>domain-name</code></em>.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq yxdomain</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] yxdomain</strong></span>
{domain-name}
</span></dt>
<dd><p>
@@ -366,7 +366,7 @@
exists (has as at least one resource record, of any type).
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq nxrrset</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] nxrrset</strong></span>
{domain-name}
[class]
{type}
@@ -382,7 +382,7 @@
is omitted, IN (internet) is assumed.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq yxrrset</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] yxrrset</strong></span>
{domain-name}
[class]
{type}
@@ -399,7 +399,7 @@
is omitted, IN (internet) is assumed.
</p></dd>
<dt><span class="term">
- <span><strong class="command">prereq yxrrset</strong></span>
+ <span><strong class="command">[<span class="optional">prereq</span>] yxrrset</strong></span>
{domain-name}
[class]
{type}
@@ -428,7 +428,7 @@
RDATA.
</p></dd>
<dt><span class="term">
- <span><strong class="command">update delete</strong></span>
+ <span><strong class="command">[<span class="optional">update</span>] del[<span class="optional">ete</span>]</strong></span>
{domain-name}
[ttl]
[class]
@@ -449,7 +449,7 @@
is ignored, and is only allowed for compatibility.
</p></dd>
<dt><span class="term">
- <span><strong class="command">update add</strong></span>
+ <span><strong class="command">[<span class="optional">update</span>] add</strong></span>
{domain-name}
{ttl}
[class]
@@ -498,7 +498,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2678828"></a><h2>EXAMPLES</h2>
+<a name="id2681622"></a><h2>EXAMPLES</h2>
<p>
The examples below show how
<span><strong class="command">nsupdate</strong></span>
@@ -552,7 +552,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2678878"></a><h2>FILES</h2>
+<a name="id2681672"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="constant">/etc/resolv.conf</code></span></dt>
<dd><p>
@@ -575,7 +575,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2678962"></a><h2>SEE ALSO</h2>
+<a name="id2681755"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">RFC 2136</em>,
<em class="citetitle">RFC 3007</em>,
@@ -590,7 +590,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2679019"></a><h2>BUGS</h2>
+<a name="id2681813"></a><h2>BUGS</h2>
<p>
The TSIG key is redundantly stored in two separate files.
This is a consequence of nsupdate using the DST library
diff --git a/contrib/bind9/doc/arm/man.rndc-confgen.html b/contrib/bind9/doc/arm/man.rndc-confgen.html
index b24590701c69..1ad009bffb17 100644
--- a/contrib/bind9/doc/arm/man.rndc-confgen.html
+++ b/contrib/bind9/doc/arm/man.rndc-confgen.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc-confgen</code> [<code class="option">-a</code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-c <em class="replaceable"><code>keyfile</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [<code class="option">-s <em class="replaceable"><code>address</code></em></code>] [<code class="option">-t <em class="replaceable"><code>chrootdir</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2641110"></a><h2>DESCRIPTION</h2>
+<a name="id2657330"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">rndc-confgen</strong></span>
generates configuration files
for <span><strong class="command">rndc</strong></span>. It can be used as a
@@ -66,7 +66,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2641176"></a><h2>OPTIONS</h2>
+<a name="id2657396"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd>
@@ -173,7 +173,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2641835"></a><h2>EXAMPLES</h2>
+<a name="id2659147"></a><h2>EXAMPLES</h2>
<p>
To allow <span><strong class="command">rndc</strong></span> to be used with
no manual configuration, run
@@ -190,7 +190,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643189"></a><h2>SEE ALSO</h2>
+<a name="id2659204"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -198,7 +198,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643842"></a><h2>AUTHOR</h2>
+<a name="id2659242"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.rndc.conf.html b/contrib/bind9/doc/arm/man.rndc.conf.html
index 8a3d4e252ccc..6b9ea5fb7d73 100644
--- a/contrib/bind9/doc/arm/man.rndc.conf.html
+++ b/contrib/bind9/doc/arm/man.rndc.conf.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc.conf</code> </p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2639872"></a><h2>DESCRIPTION</h2>
+<a name="id2649469"></a><h2>DESCRIPTION</h2>
<p><code class="filename">rndc.conf</code> is the configuration file
for <span><strong class="command">rndc</strong></span>, the BIND 9 name server control
utility. This file has a similar structure and syntax to
@@ -135,7 +135,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640180"></a><h2>EXAMPLE</h2>
+<a name="id2650392"></a><h2>EXAMPLE</h2>
<pre class="programlisting">
options {
default-server localhost;
@@ -209,7 +209,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640301"></a><h2>NAME SERVER CONFIGURATION</h2>
+<a name="id2650514"></a><h2>NAME SERVER CONFIGURATION</h2>
<p>
The name server must be configured to accept rndc connections and
to recognize the key specified in the <code class="filename">rndc.conf</code>
@@ -219,7 +219,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640327"></a><h2>SEE ALSO</h2>
+<a name="id2654704"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">mmencode</span>(1)</span>,
@@ -227,7 +227,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640365"></a><h2>AUTHOR</h2>
+<a name="id2654742"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/man.rndc.html b/contrib/bind9/doc/arm/man.rndc.html
index 058328742224..059f7263ca75 100644
--- a/contrib/bind9/doc/arm/man.rndc.html
+++ b/contrib/bind9/doc/arm/man.rndc.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000-2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc</code> [<code class="option">-b <em class="replaceable"><code>source-address</code></em></code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key-file</code></em></code>] [<code class="option">-s <em class="replaceable"><code>server</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-V</code>] [<code class="option">-y <em class="replaceable"><code>key_id</code></em></code>] {command}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2638953"></a><h2>DESCRIPTION</h2>
+<a name="id2644796"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">rndc</strong></span>
controls the operation of a name
server. It supersedes the <span><strong class="command">ndc</strong></span> utility
@@ -79,7 +79,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2639003"></a><h2>OPTIONS</h2>
+<a name="id2644846"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-b <em class="replaceable"><code>source-address</code></em></span></dt>
<dd><p>
@@ -151,7 +151,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2639228"></a><h2>LIMITATIONS</h2>
+<a name="id2646710"></a><h2>LIMITATIONS</h2>
<p><span><strong class="command">rndc</strong></span>
does not yet support all the commands of
the BIND 8 <span><strong class="command">ndc</strong></span> utility.
@@ -165,7 +165,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2639259"></a><h2>SEE ALSO</h2>
+<a name="id2646741"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -175,7 +175,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2639315"></a><h2>AUTHOR</h2>
+<a name="id2654647"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/contrib/bind9/doc/arm/pkcs11.xml b/contrib/bind9/doc/arm/pkcs11.xml
index d3cfa28cbdd4..8a0062f4adb4 100644
--- a/contrib/bind9/doc/arm/pkcs11.xml
+++ b/contrib/bind9/doc/arm/pkcs11.xml
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: pkcs11.xml,v 1.7 2012/01/16 22:50:12 each Exp $ -->
<sect1 id="pkcs11">
<title>PKCS #11 (Cryptoki) support</title>
@@ -43,7 +43,7 @@
This is a shared library object, providing a low-level PKCS #11
interface to the HSM hardware. It is dynamically loaded by
OpenSSL at runtime. The PKCS #11 provider comes from the HSM
- vendor, and and is specific to the HSM to be controlled.</para>
+ vendor, and is specific to the HSM to be controlled.</para>
<para>There are two "flavors" of PKCS #11 support provided by
the patched OpenSSL, one of which must be chosen at
configuration time. The correct choice depends on the HSM
diff --git a/contrib/bind9/doc/misc/options b/contrib/bind9/doc/misc/options
index 51d2506989e3..2c9cddde4bbe 100644
--- a/contrib/bind9/doc/misc/options
+++ b/contrib/bind9/doc/misc/options
@@ -67,8 +67,9 @@ options {
allow-update { <address_match_element>; ... };
allow-update-forwarding { <address_match_element>; ... };
allow-v6-synthesis { <address_match_element>; ... }; // obsolete
- also-notify [ port <integer> ] { ( <ipv4_address> | <ipv6_address>
- ) [ port <integer> ]; ... };
+ also-notify [ port <integer> ] { ( <masters> | <ipv4_address> [
+ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key
+ <string> ]; ... };
alt-transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ];
alt-transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> |
* ) ];
@@ -86,6 +87,7 @@ options {
check-mx-cname ( fail | warn | ignore );
check-names ( master | slave | response ) ( fail | warn | ignore );
check-sibling <boolean>;
+ check-spf ( warn | ignore );
check-srv-cname ( fail | warn | ignore );
check-wildcard <boolean>;
cleaning-interval <integer>;
@@ -114,9 +116,11 @@ options {
dnssec-accept-expired <boolean>;
dnssec-dnskey-kskonly <boolean>;
dnssec-enable <boolean>;
+ dnssec-loadkeys-interval <integer>;
dnssec-lookaside ( <string> trust-anchor <string> | auto | no );
dnssec-must-be-secure <string> <boolean>;
dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
dnssec-validation ( yes | no | auto );
dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port
<integer> ] | <ipv4_address> [ port <integer> ] |
@@ -140,6 +144,7 @@ options {
host-statistics <boolean>; // not implemented
host-statistics-max <integer>; // not implemented
hostname ( <quoted_string> | none );
+ inline-signing <boolean>;
interface-interval <integer>;
ixfr-from-differences <ixfrdiff>;
key-directory <quoted_string>;
@@ -159,6 +164,7 @@ options {
max-ncache-ttl <integer>;
max-refresh-time <integer>;
max-retry-time <integer>;
+ max-rsa-exponent-size <integer>;
max-transfer-idle-in <integer>;
max-transfer-idle-out <integer>;
max-transfer-time-in <integer>;
@@ -193,6 +199,7 @@ options {
recursion <boolean>;
recursive-clients <integer>;
request-ixfr <boolean>;
+ request-ixfr <boolean>;
request-nsid <boolean>;
reserved-sockets <integer>;
resolver-query-timeout <integer>;
@@ -200,7 +207,7 @@ options {
| passthru | no-op | nxdomain | nodata | cname <quoted_string>
) ] [ recursive-only <boolean> ] [ max-policy-ttl <integer> ];
... } [ recursive-only <boolean> ] [ break-dnssec <boolean> ] [
- max-policy-ttl <integer> ];
+ max-policy-ttl <integer> ] [ min-ns-dots <integer> ];
rfc2308-type1 <boolean>; // not yet implemented
root-delegation-only [ exclude { <quoted_string>; ... } ];
rrset-order { [ class <string> ] [ type <string> ] [ name
@@ -208,6 +215,7 @@ options {
secroots-file <quoted_string>;
serial-queries <integer>; // obsolete
serial-query-rate <integer>;
+ serial-update-method ( increment | unixtime );
server-id ( <quoted_string> | none | hostname );
session-keyalg <string>;
session-keyfile ( <quoted_string> | none );
@@ -246,7 +254,7 @@ options {
version ( <quoted_string> | none );
zero-no-soa-ttl <boolean>;
zero-no-soa-ttl-cache <boolean>;
- zone-statistics <boolean>;
+ zone-statistics <zonestat>;
};
server <netprefix> {
@@ -292,8 +300,9 @@ view <string> <optional_class> {
allow-update { <address_match_element>; ... };
allow-update-forwarding { <address_match_element>; ... };
allow-v6-synthesis { <address_match_element>; ... }; // obsolete
- also-notify [ port <integer> ] { ( <ipv4_address> | <ipv6_address>
- ) [ port <integer> ]; ... };
+ also-notify [ port <integer> ] { ( <masters> | <ipv4_address> [
+ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key
+ <string> ]; ... };
alt-transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ];
alt-transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> |
* ) ];
@@ -307,6 +316,7 @@ view <string> <optional_class> {
check-mx-cname ( fail | warn | ignore );
check-names ( master | slave | response ) ( fail | warn | ignore );
check-sibling <boolean>;
+ check-spf ( warn | ignore );
check-srv-cname ( fail | warn | ignore );
check-wildcard <boolean>;
cleaning-interval <integer>;
@@ -335,9 +345,11 @@ view <string> <optional_class> {
dnssec-accept-expired <boolean>;
dnssec-dnskey-kskonly <boolean>;
dnssec-enable <boolean>;
+ dnssec-loadkeys-interval <integer>;
dnssec-lookaside ( <string> trust-anchor <string> | auto | no );
dnssec-must-be-secure <string> <boolean>;
dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
dnssec-validation ( yes | no | auto );
dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port
<integer> ] | <ipv4_address> [ port <integer> ] |
@@ -352,6 +364,7 @@ view <string> <optional_class> {
forward ( first | only );
forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> )
[ port <integer> ]; ... };
+ inline-signing <boolean>;
ixfr-from-differences <ixfrdiff>;
key <string> {
algorithm <string>;
@@ -399,17 +412,19 @@ view <string> <optional_class> {
queryport-pool-updateinterval <integer>; // obsolete
recursion <boolean>;
request-ixfr <boolean>;
+ request-ixfr <boolean>;
request-nsid <boolean>;
resolver-query-timeout <integer>;
response-policy { zone <quoted_string> [ policy ( given | disabled
| passthru | no-op | nxdomain | nodata | cname <quoted_string>
) ] [ recursive-only <boolean> ] [ max-policy-ttl <integer> ];
... } [ recursive-only <boolean> ] [ break-dnssec <boolean> ] [
- max-policy-ttl <integer> ];
+ max-policy-ttl <integer> ] [ min-ns-dots <integer> ];
rfc2308-type1 <boolean>; // not yet implemented
root-delegation-only [ exclude { <quoted_string>; ... } ];
rrset-order { [ class <string> ] [ type <string> ] [ name
<quoted_string> ] <string> <string>; ... };
+ serial-update-method ( increment | unixtime );
server <netprefix> {
bogus <boolean>;
edns <boolean>;
@@ -457,8 +472,9 @@ view <string> <optional_class> {
allow-transfer { <address_match_element>; ... };
allow-update { <address_match_element>; ... };
allow-update-forwarding { <address_match_element>; ... };
- also-notify [ port <integer> ] { ( <ipv4_address> |
- <ipv6_address> ) [ port <integer> ]; ... };
+ also-notify [ port <integer> ] { ( <masters> |
+ <ipv4_address> [ port <integer> ] | <ipv6_address> [
+ port <integer> ] ) [ key <string> ]; ... };
alt-transfer-source ( <ipv4_address> | * ) [ port (
<integer> | * ) ];
alt-transfer-source-v6 ( <ipv6_address> | * ) [ port (
@@ -470,17 +486,21 @@ view <string> <optional_class> {
check-mx-cname ( fail | warn | ignore );
check-names ( fail | warn | ignore );
check-sibling <boolean>;
+ check-spf ( warn | ignore );
check-srv-cname ( fail | warn | ignore );
check-wildcard <boolean>;
database <string>;
delegation-only <boolean>;
dialup <dialuptype>;
dnssec-dnskey-kskonly <boolean>;
+ dnssec-loadkeys-interval <integer>;
dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
file <quoted_string>;
forward ( first | only );
forwarders [ port <integer> ] { ( <ipv4_address> |
<ipv6_address> ) [ port <integer> ]; ... };
+ inline-signing <boolean>;
ixfr-base <quoted_string>; // obsolete
ixfr-from-differences <boolean>;
ixfr-tmp-file <quoted_string>; // obsolete
@@ -512,6 +532,8 @@ view <string> <optional_class> {
nsec3-test-zone <boolean>; // test only
pubkey <integer> <integer> <integer>
<quoted_string>; // obsolete
+ request-ixfr <boolean>;
+ serial-update-method ( increment | unixtime );
server-addresses { ( <ipv4_address> | <ipv6_address> ) [
port <integer> ]; ... };
server-names { <quoted_string>; ... };
@@ -525,7 +547,7 @@ view <string> <optional_class> {
<integer> | * ) ];
try-tcp-refresh <boolean>;
type ( master | slave | stub | static-stub | hint | forward
- | delegation-only );
+ | delegation-only | redirect );
update-check-ksk <boolean>;
update-policy ( local | { ( grant | deny ) <string> ( name
| subdomain | wildcard | self | selfsub | selfwild |
@@ -534,9 +556,9 @@ view <string> <optional_class> {
] <rrtypelist>; ... };
use-alt-transfer-source <boolean>;
zero-no-soa-ttl <boolean>;
- zone-statistics <boolean>;
+ zone-statistics <zonestat>;
};
- zone-statistics <boolean>;
+ zone-statistics <zonestat>;
};
zone <string> <optional_class> {
@@ -546,8 +568,9 @@ zone <string> <optional_class> {
allow-transfer { <address_match_element>; ... };
allow-update { <address_match_element>; ... };
allow-update-forwarding { <address_match_element>; ... };
- also-notify [ port <integer> ] { ( <ipv4_address> | <ipv6_address>
- ) [ port <integer> ]; ... };
+ also-notify [ port <integer> ] { ( <masters> | <ipv4_address> [
+ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key
+ <string> ]; ... };
alt-transfer-source ( <ipv4_address> | * ) [ port ( <integer> | * ) ];
alt-transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> |
* ) ];
@@ -558,17 +581,21 @@ zone <string> <optional_class> {
check-mx-cname ( fail | warn | ignore );
check-names ( fail | warn | ignore );
check-sibling <boolean>;
+ check-spf ( warn | ignore );
check-srv-cname ( fail | warn | ignore );
check-wildcard <boolean>;
database <string>;
delegation-only <boolean>;
dialup <dialuptype>;
dnssec-dnskey-kskonly <boolean>;
+ dnssec-loadkeys-interval <integer>;
dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
file <quoted_string>;
forward ( first | only );
forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> )
[ port <integer> ]; ... };
+ inline-signing <boolean>;
ixfr-base <quoted_string>; // obsolete
ixfr-from-differences <boolean>;
ixfr-tmp-file <quoted_string>; // obsolete
@@ -597,6 +624,8 @@ zone <string> <optional_class> {
notify-to-soa <boolean>;
nsec3-test-zone <boolean>; // test only
pubkey <integer> <integer> <integer> <quoted_string>; // obsolete
+ request-ixfr <boolean>;
+ serial-update-method ( increment | unixtime );
server-addresses { ( <ipv4_address> | <ipv6_address> ) [ port
<integer> ]; ... };
server-names { <quoted_string>; ... };
@@ -608,7 +637,7 @@ zone <string> <optional_class> {
transfer-source-v6 ( <ipv6_address> | * ) [ port ( <integer> | * ) ];
try-tcp-refresh <boolean>;
type ( master | slave | stub | static-stub | hint | forward |
- delegation-only );
+ delegation-only | redirect );
update-check-ksk <boolean>;
update-policy ( local | { ( grant | deny ) <string> ( name |
subdomain | wildcard | self | selfsub | selfwild | krb5-self |
@@ -616,6 +645,6 @@ zone <string> <optional_class> {
| zonesub | external ) [ <string> ] <rrtypelist>; ... };
use-alt-transfer-source <boolean>;
zero-no-soa-ttl <boolean>;
- zone-statistics <boolean>;
+ zone-statistics <zonestat>;
};
diff --git a/contrib/bind9/isc-config.sh.in b/contrib/bind9/isc-config.sh.in
index 26b7d64dd176..10df275cab22 100644
--- a/contrib/bind9/isc-config.sh.in
+++ b/contrib/bind9/isc-config.sh.in
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2004, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -20,6 +20,8 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
exec_prefix_set=
+includedir=@includedir@
+libdir=@libdir@
usage()
{
@@ -57,6 +59,7 @@ while test $# -gt 0; do
prefix=$optarg
if test "x$exec_prefix_set" = x ; then
exec_prefix=$prefix
+ exec_prefix_set=true
fi
;;
--prefix)
@@ -64,6 +67,7 @@ while test $# -gt 0; do
;;
--exec-prefix=*)
exec_prefix=$optarg
+ exec_prefix_set=true
;;
--exec-prefix)
echo_exec_prefix=true
@@ -115,14 +119,22 @@ if test x"$echo_exec_prefix" = x"true" ; then
echo $exec_prefix
fi
if test x"$echo_cflags" = x"true"; then
- includes="-I${exec_prefix}/include"
+ if test x"${exec_prefix_set}" = x"true"; then
+ includes="-I${exec_prefix}/include"
+ else
+ includes="-I${includedir}"
+ fi
if test x"$libisc" = x"true"; then
includes="$includes @ALWAYS_DEFINES@ @STD_CINCLUDES@ @STD_CDEFINES@ @CCOPT@"
fi
echo $includes
fi
if test x"$echo_libs" = x"true"; then
- libs=-L${exec_prefix}/lib
+ if test x"${exec_prefix_set}" = x"true"; then
+ includes="-L${exec_prefix}/lib"
+ else
+ libs="-L${libdir}"
+ fi
if test x"$liblwres" = x"true" ; then
libs="$libs -llwres"
fi
diff --git a/contrib/bind9/lib/Makefile.in b/contrib/bind9/lib/Makefile.in
index e3f0bdb8fc9d..8dc1d384983a 100644
--- a/contrib/bind9/lib/Makefile.in
+++ b/contrib/bind9/lib/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2001, 2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -27,3 +27,8 @@ SUBDIRS = isc isccc dns isccfg bind9 lwres tests
TARGETS =
@BIND9_MAKE_RULES@
+
+distclean::
+ @echo "making $@ in `pwd`/irs"; \
+ (cd irs; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1;
+
diff --git a/contrib/bind9/lib/bind9/Makefile.in b/contrib/bind9/lib/bind9/Makefile.in
index 73285e1e9629..b6633e56f5e0 100644
--- a/contrib/bind9/lib/bind9/Makefile.in
+++ b/contrib/bind9/lib/bind9/Makefile.in
@@ -69,7 +69,8 @@ libbind9.la: ${OBJS} ${ISCCFGDEPLIBS} ${ISCDEPLIBS} ${DNSDEPLIBS}
${LIBTOOL_MODE_LINK} \
${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libbind9.la -rpath ${libdir} \
-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
- ${OBJS} ${DNSLIBS} ${ISCCFGLIBS} ${ISCLIBS} ${LIBS}
+ ${OBJS} ${DNSLIBS} ${ISCCFGLIBS} ${ISCLIBS} @DNS_CRYPTO_LIBS@ \
+ ${LIBS}
timestamp: libbind9.@A@
touch timestamp
diff --git a/contrib/bind9/lib/bind9/api b/contrib/bind9/lib/bind9/api
index 7e9b11513e12..a27437f4335b 100644
--- a/contrib/bind9/lib/bind9/api
+++ b/contrib/bind9/lib/bind9/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 80
+# 9.9-sub: 130-139
+LIBINTERFACE = 90
LIBREVISION = 7
LIBAGE = 0
diff --git a/contrib/bind9/lib/bind9/check.c b/contrib/bind9/lib/bind9/check.c
index f76560415539..91f8bff13e95 100644
--- a/contrib/bind9/lib/bind9/check.c
+++ b/contrib/bind9/lib/bind9/check.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -100,7 +100,7 @@ check_orderent(const cfg_obj_t *ent, isc_log_t *logctx) {
obj = cfg_tuple_get(ent, "name");
if (cfg_obj_isstring(obj)) {
str = cfg_obj_asstring(obj);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(dns_fixedname_name(&fixed), &b,
dns_rootname, 0, NULL);
@@ -197,7 +197,7 @@ check_dual_stack(const cfg_obj_t *options, isc_log_t *logctx) {
continue;
obj = cfg_tuple_get(value, "name");
str = cfg_obj_asstring(obj);
- isc_buffer_init(&buffer, str, strlen(str));
+ isc_buffer_constinit(&buffer, str, strlen(str));
isc_buffer_add(&buffer, strlen(str));
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -263,7 +263,7 @@ disabled_algorithms(const cfg_obj_t *disabled, isc_log_t *logctx) {
name = dns_fixedname_name(&fixed);
obj = cfg_tuple_get(disabled, "name");
str = cfg_obj_asstring(obj);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(name, &b, dns_rootname, 0, NULL);
if (tresult != ISC_R_SUCCESS) {
@@ -346,7 +346,7 @@ mustbesecure(const cfg_obj_t *secure, isc_symtab_t *symtab, isc_log_t *logctx,
name = dns_fixedname_name(&fixed);
obj = cfg_tuple_get(secure, "name");
str = cfg_obj_asstring(obj);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL);
if (result != ISC_R_SUCCESS) {
@@ -733,6 +733,20 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
}
obj = NULL;
+ cfg_map_get(options, "max-rsa-exponent-size", &obj);
+ if (obj != NULL) {
+ isc_uint32_t val;
+
+ val = cfg_obj_asuint32(obj);
+ if (val != 0 && (val < 35 || val > 4096)) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "max-rsa-exponent-size '%u' is out of "
+ "range (35..4096)", val);
+ result = ISC_R_RANGE;
+ }
+ }
+
+ obj = NULL;
cfg_map_get(options, "sig-validity-interval", &obj);
if (obj != NULL) {
isc_uint32_t validity, resign = 0;
@@ -799,7 +813,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
element = cfg_list_next(element)) {
exclude = cfg_listelt_value(element);
str = cfg_obj_asstring(exclude);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(name, &b,
dns_rootname,
@@ -867,7 +881,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
continue;
}
- isc_buffer_init(&b, dlv, strlen(dlv));
+ isc_buffer_constinit(&b, dlv, strlen(dlv));
isc_buffer_add(&b, strlen(dlv));
tresult = dns_name_fromtext(name, &b, dns_rootname,
0, NULL);
@@ -901,7 +915,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
if (!cfg_obj_isvoid(anchor)) {
dlv = cfg_obj_asstring(anchor);
- isc_buffer_init(&b, dlv, strlen(dlv));
+ isc_buffer_constinit(&b, dlv, strlen(dlv));
isc_buffer_add(&b, strlen(dlv));
tresult = dns_name_fromtext(name, &b,
dns_rootname,
@@ -975,7 +989,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
(void)cfg_map_get(options, server_contact[i], &obj);
if (obj != NULL) {
str = cfg_obj_asstring(obj);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(dns_fixedname_name(&fixed),
&b, dns_rootname, 0, NULL);
@@ -999,7 +1013,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
{
obj = cfg_listelt_value(element);
str = cfg_obj_asstring(obj);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(dns_fixedname_name(&fixed), &b,
dns_rootname, 0, NULL);
@@ -1184,7 +1198,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
dns_fixedname_init(&fixed);
str = cfg_obj_asstring(identity);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(dns_fixedname_name(&fixed), &b,
dns_rootname, 0, NULL);
@@ -1198,7 +1212,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
strcasecmp(cfg_obj_asstring(matchtype), "zonesub") != 0) {
dns_fixedname_init(&fixed);
str = cfg_obj_asstring(dname);
- isc_buffer_init(&b, str, strlen(str));
+ isc_buffer_constinit(&b, str, strlen(str));
isc_buffer_add(&b, strlen(str));
tresult = dns_name_fromtext(dns_fixedname_name(&fixed),
&b, dns_rootname, 0, NULL);
@@ -1247,7 +1261,9 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
#define FORWARDZONE 16
#define DELEGATIONZONE 32
#define STATICSTUBZONE 64
-#define CHECKACL 128
+#define REDIRECTZONE 128
+#define STREDIRECTZONE 0 /* Set to REDIRECTZONE to allow xfr-in. */
+#define CHECKACL 512
typedef struct {
const char *name;
@@ -1299,74 +1315,76 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
const cfg_listelt_t *element;
static optionstable options[] = {
- { "allow-query", MASTERZONE | SLAVEZONE | STUBZONE | CHECKACL |
- STATICSTUBZONE },
+ { "allow-query", MASTERZONE | SLAVEZONE | STUBZONE | REDIRECTZONE |
+ CHECKACL | STATICSTUBZONE },
{ "allow-notify", SLAVEZONE | CHECKACL },
{ "allow-transfer", MASTERZONE | SLAVEZONE | CHECKACL },
{ "notify", MASTERZONE | SLAVEZONE },
{ "also-notify", MASTERZONE | SLAVEZONE },
- { "dialup", MASTERZONE | SLAVEZONE | STUBZONE },
+ { "dialup", MASTERZONE | SLAVEZONE | STUBZONE | STREDIRECTZONE },
{ "delegation-only", HINTZONE | STUBZONE | DELEGATIONZONE },
{ "forward", MASTERZONE | SLAVEZONE | STUBZONE |
STATICSTUBZONE | FORWARDZONE },
{ "forwarders", MASTERZONE | SLAVEZONE | STUBZONE |
STATICSTUBZONE | FORWARDZONE },
- { "maintain-ixfr-base", MASTERZONE | SLAVEZONE },
- { "max-ixfr-log-size", MASTERZONE | SLAVEZONE },
+ { "maintain-ixfr-base", MASTERZONE | SLAVEZONE | STREDIRECTZONE },
+ { "max-ixfr-log-size", MASTERZONE | SLAVEZONE | STREDIRECTZONE },
{ "notify-source", MASTERZONE | SLAVEZONE },
{ "notify-source-v6", MASTERZONE | SLAVEZONE },
- { "transfer-source", SLAVEZONE | STUBZONE },
- { "transfer-source-v6", SLAVEZONE | STUBZONE },
- { "max-transfer-time-in", SLAVEZONE | STUBZONE },
+ { "transfer-source", SLAVEZONE | STUBZONE | STREDIRECTZONE },
+ { "transfer-source-v6", SLAVEZONE | STUBZONE | STREDIRECTZONE },
+ { "max-transfer-time-in", SLAVEZONE | STUBZONE | STREDIRECTZONE },
{ "max-transfer-time-out", MASTERZONE | SLAVEZONE },
- { "max-transfer-idle-in", SLAVEZONE | STUBZONE },
+ { "max-transfer-idle-in", SLAVEZONE | STUBZONE | STREDIRECTZONE },
{ "max-transfer-idle-out", MASTERZONE | SLAVEZONE },
- { "max-retry-time", SLAVEZONE | STUBZONE },
- { "min-retry-time", SLAVEZONE | STUBZONE },
- { "max-refresh-time", SLAVEZONE | STUBZONE },
- { "min-refresh-time", SLAVEZONE | STUBZONE },
+ { "max-retry-time", SLAVEZONE | STUBZONE | STREDIRECTZONE },
+ { "min-retry-time", SLAVEZONE | STUBZONE | STREDIRECTZONE },
+ { "max-refresh-time", SLAVEZONE | STUBZONE | STREDIRECTZONE },
+ { "min-refresh-time", SLAVEZONE | STUBZONE | STREDIRECTZONE },
{ "dnssec-secure-to-insecure", MASTERZONE },
- { "sig-validity-interval", MASTERZONE },
- { "sig-re-signing-interval", MASTERZONE },
- { "sig-signing-nodes", MASTERZONE },
- { "sig-signing-type", MASTERZONE },
- { "sig-signing-signatures", MASTERZONE },
+ { "sig-re-signing-interval", MASTERZONE | SLAVEZONE },
+ { "sig-signing-nodes", MASTERZONE | SLAVEZONE },
+ { "sig-signing-signatures", MASTERZONE | SLAVEZONE },
+ { "sig-signing-type", MASTERZONE | SLAVEZONE },
+ { "sig-validity-interval", MASTERZONE | SLAVEZONE },
+ { "signing", MASTERZONE | SLAVEZONE },
{ "zone-statistics", MASTERZONE | SLAVEZONE | STUBZONE |
- STATICSTUBZONE},
+ STATICSTUBZONE | REDIRECTZONE },
{ "allow-update", MASTERZONE | CHECKACL },
{ "allow-update-forwarding", SLAVEZONE | CHECKACL },
- { "file", MASTERZONE | SLAVEZONE | STUBZONE | HINTZONE },
- { "journal", MASTERZONE | SLAVEZONE },
+ { "file", MASTERZONE | SLAVEZONE | STUBZONE | HINTZONE | REDIRECTZONE },
+ { "journal", MASTERZONE | SLAVEZONE | STREDIRECTZONE },
{ "ixfr-base", MASTERZONE | SLAVEZONE },
{ "ixfr-tmp-file", MASTERZONE | SLAVEZONE },
- { "masters", SLAVEZONE | STUBZONE },
+ { "masters", SLAVEZONE | STUBZONE | REDIRECTZONE },
{ "pubkey", MASTERZONE | SLAVEZONE | STUBZONE },
{ "update-policy", MASTERZONE },
- { "database", MASTERZONE | SLAVEZONE | STUBZONE },
- { "key-directory", MASTERZONE },
+ { "database", MASTERZONE | SLAVEZONE | STUBZONE | REDIRECTZONE },
+ { "key-directory", MASTERZONE | SLAVEZONE },
{ "check-wildcard", MASTERZONE },
{ "check-mx", MASTERZONE },
{ "check-dup-records", MASTERZONE },
{ "integrity-check", MASTERZONE },
{ "check-mx-cname", MASTERZONE },
{ "check-srv-cname", MASTERZONE },
- { "masterfile-format", MASTERZONE | SLAVEZONE | STUBZONE | HINTZONE },
- { "update-check-ksk", MASTERZONE },
- { "dnssec-dnskey-kskonly", MASTERZONE },
- { "auto-dnssec", MASTERZONE },
- { "try-tcp-refresh", SLAVEZONE },
+ { "masterfile-format", MASTERZONE | SLAVEZONE | STUBZONE | HINTZONE |
+ REDIRECTZONE },
+ { "update-check-ksk", MASTERZONE | SLAVEZONE },
+ { "dnssec-dnskey-kskonly", MASTERZONE | SLAVEZONE },
+ { "dnssec-loadkeys-interval", MASTERZONE | SLAVEZONE },
+ { "auto-dnssec", MASTERZONE | SLAVEZONE },
+ { "try-tcp-refresh", SLAVEZONE | STREDIRECTZONE },
{ "server-addresses", STATICSTUBZONE },
{ "server-names", STATICSTUBZONE },
};
static optionstable dialups[] = {
- { "notify", MASTERZONE | SLAVEZONE },
- { "notify-passive", SLAVEZONE },
- { "refresh", SLAVEZONE | STUBZONE },
- { "passive", SLAVEZONE | STUBZONE },
+ { "notify", MASTERZONE | SLAVEZONE | STREDIRECTZONE },
+ { "notify-passive", SLAVEZONE | STREDIRECTZONE },
+ { "refresh", SLAVEZONE | STUBZONE | STREDIRECTZONE },
+ { "passive", SLAVEZONE | STUBZONE | STREDIRECTZONE },
};
-
znamestr = cfg_obj_asstring(cfg_tuple_get(zconfig, "name"));
zoptions = cfg_tuple_get(zconfig, "options");
@@ -1397,6 +1415,8 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
ztype = HINTZONE;
else if (strcasecmp(typestr, "delegation-only") == 0)
ztype = DELEGATIONZONE;
+ else if (strcasecmp(typestr, "redirect") == 0)
+ ztype = REDIRECTZONE;
else {
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
"zone '%s': invalid type %s",
@@ -1404,6 +1424,11 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
return (ISC_R_FAILURE);
}
+ if (ztype == REDIRECTZONE && strcmp(znamestr, ".") != 0) {
+ cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
+ "redirect zones must be called \".\"");
+ return (ISC_R_FAILURE);
+ }
obj = cfg_tuple_get(zconfig, "class");
if (cfg_obj_isstring(obj)) {
isc_textregion_t r;
@@ -1432,7 +1457,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
* deals with strings.
*/
dns_fixedname_init(&fixedname);
- isc_buffer_init(&b, znamestr, strlen(znamestr));
+ isc_buffer_constinit(&b, znamestr, strlen(znamestr));
isc_buffer_add(&b, strlen(znamestr));
tresult = dns_name_fromtext(dns_fixedname_name(&fixedname), &b,
dns_rootname, DNS_NAME_DOWNCASE, NULL);
@@ -1445,7 +1470,8 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
zname = dns_fixedname_name(&fixedname);
dns_name_format(zname, namebuf, sizeof(namebuf));
- tresult = nameexist(zconfig, namebuf, ztype == HINTZONE ? 1 : 2,
+ tresult = nameexist(zconfig, namebuf, ztype == HINTZONE ? 1 :
+ ztype == REDIRECTZONE ? 2 : 3,
symtab, "zone '%s': already exists "
"previous definition: %s:%u", logctx, mctx);
if (tresult != ISC_R_SUCCESS)
@@ -1498,6 +1524,21 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
}
/*
+ * Master & slave zones must have a "also-notify" field.
+ */
+ if (ztype == MASTERZONE || ztype == SLAVEZONE ) {
+ obj = NULL;
+ tresult = cfg_map_get(zoptions, "also-notify", &obj);
+ if (tresult == ISC_R_SUCCESS) {
+ isc_uint32_t count;
+ tresult = validate_masters(obj, config, &count,
+ logctx, mctx);
+ if (tresult != ISC_R_SUCCESS && result == ISC_R_SUCCESS)
+ result = tresult;
+ }
+ }
+
+ /*
* Slave & stub zones must have a "masters" field.
*/
if (ztype == SLAVEZONE || ztype == STUBZONE) {
@@ -1525,10 +1566,10 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
/*
* Master zones can't have both "allow-update" and "update-policy".
*/
- if (ztype == MASTERZONE) {
+ if (ztype == MASTERZONE || ztype == SLAVEZONE) {
isc_result_t res1, res2, res3;
const char *arg;
- isc_boolean_t ddns;
+ isc_boolean_t ddns = ISC_FALSE, signing = ISC_FALSE;
obj = NULL;
res1 = cfg_map_get(zoptions, "allow-update", &obj);
@@ -1546,15 +1587,22 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
ddns = ISC_TF(res1 == ISC_R_SUCCESS || res2 == ISC_R_SUCCESS);
obj = NULL;
+ res1 = cfg_map_get(zoptions, "inline-signing", &obj);
+ if (res1 == ISC_R_SUCCESS)
+ signing = cfg_obj_asboolean(obj);
+
+ obj = NULL;
arg = "off";
res3 = cfg_map_get(zoptions, "auto-dnssec", &obj);
if (res3 == ISC_R_SUCCESS)
arg = cfg_obj_asstring(obj);
- if (strcasecmp(arg, "off") != 0 && !ddns) {
+ if (strcasecmp(arg, "off") != 0 && !ddns && !signing) {
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
- "'auto-dnssec %s;' requires "
- "dynamic DNS to be configured in the zone",
- arg);
+ "'auto-dnssec %s;' requires%s "
+ "inline-signing to be configured for "
+ "the zone", arg,
+ (ztype == MASTERZONE) ?
+ " dynamic DNS or" : "");
result = ISC_R_FAILURE;
}
if (strcasecmp(arg, "create") == 0) {
@@ -1575,6 +1623,33 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
0xff00U, 0xffffU);
result = ISC_R_FAILURE;
}
+
+ obj = NULL;
+ res1 = cfg_map_get(zoptions, "dnssec-dnskey-kskonly", &obj);
+ if (res1 == ISC_R_SUCCESS && ztype == SLAVEZONE && !signing) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "dnssec-dnskey-kskonly: requires "
+ "inline-signing when used in slave zone");
+ result = ISC_R_FAILURE;
+ }
+
+ obj = NULL;
+ res1 = cfg_map_get(zoptions, "dnssec-loadkeys-interval", &obj);
+ if (res1 == ISC_R_SUCCESS && ztype == SLAVEZONE && !signing) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "dnssec-loadkeys-interval: requires "
+ "inline-signing when used in slave zone");
+ result = ISC_R_FAILURE;
+ }
+
+ obj = NULL;
+ res1 = cfg_map_get(zoptions, "update-check-ksk", &obj);
+ if (res1 == ISC_R_SUCCESS && ztype == SLAVEZONE && !signing) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "update-check-ksk: requires "
+ "inline-signing when used in slave zone");
+ result = ISC_R_FAILURE;
+ }
}
/*
@@ -1680,7 +1755,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
snamestr = cfg_obj_asstring(obj);
dns_fixedname_init(&fixed_sname);
- isc_buffer_init(&b2, snamestr, strlen(snamestr));
+ isc_buffer_constinit(&b2, snamestr, strlen(snamestr));
isc_buffer_add(&b2, strlen(snamestr));
sname = dns_fixedname_name(&fixed_sname);
tresult = dns_name_fromtext(sname, &b2, dns_rootname,
@@ -1710,20 +1785,27 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
/*
* If the zone type is rbt/rbt64 then master/hint zones
* require file clauses.
+ * If inline signing is used, then slave zones require a
+ * file clause as well
*/
obj = NULL;
tresult = cfg_map_get(zoptions, "database", &obj);
if (tresult == ISC_R_NOTFOUND ||
(tresult == ISC_R_SUCCESS &&
(strcmp("rbt", cfg_obj_asstring(obj)) == 0 ||
- strcmp("rbt64", cfg_obj_asstring(obj)) == 0))) {
+ strcmp("rbt64", cfg_obj_asstring(obj)) == 0)))
+ {
+ isc_result_t res1;
obj = NULL;
tresult = cfg_map_get(zoptions, "file", &obj);
- if (tresult != ISC_R_SUCCESS &&
- (ztype == MASTERZONE || ztype == HINTZONE)) {
+ obj = NULL;
+ res1 = cfg_map_get(zoptions, "inline-signing", &obj);
+ if ((tresult != ISC_R_SUCCESS &&
+ (ztype == MASTERZONE || ztype == HINTZONE)) ||
+ (ztype == SLAVEZONE && res1 == ISC_R_SUCCESS)) {
cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
- "zone '%s': missing 'file' entry",
- znamestr);
+ "zone '%s': missing 'file' entry",
+ znamestr);
result = tresult;
}
}
@@ -1859,7 +1941,7 @@ check_keylist(const cfg_obj_t *keys, isc_symtab_t *symtab,
isc_buffer_t b;
char *keyname;
- isc_buffer_init(&b, keyid, strlen(keyid));
+ isc_buffer_constinit(&b, keyid, strlen(keyid));
isc_buffer_add(&b, strlen(keyid));
tresult = dns_name_fromtext(name, &b, dns_rootname,
0, NULL);
@@ -2028,7 +2110,7 @@ check_servers(const cfg_obj_t *config, const cfg_obj_t *voptions,
*/
keyval = cfg_obj_asstring(keys);
dns_fixedname_init(&fname);
- isc_buffer_init(&b, keyval, strlen(keyval));
+ isc_buffer_constinit(&b, keyval, strlen(keyval));
isc_buffer_add(&b, strlen(keyval));
keyname = dns_fixedname_name(&fname);
tresult = dns_name_fromtext(keyname, &b, dns_rootname,
@@ -2073,7 +2155,7 @@ check_trusted_key(const cfg_obj_t *key, isc_boolean_t managed,
keyname = dns_fixedname_name(&fkeyname);
keynamestr = cfg_obj_asstring(cfg_tuple_get(key, "name"));
- isc_buffer_init(&b, keynamestr, strlen(keynamestr));
+ isc_buffer_constinit(&b, keynamestr, strlen(keynamestr));
isc_buffer_add(&b, strlen(keynamestr));
result = dns_name_fromtext(keyname, &b, dns_rootname, 0, NULL);
if (result != ISC_R_SUCCESS) {
diff --git a/contrib/bind9/lib/dns/Makefile.in b/contrib/bind9/lib/dns/Makefile.in
index a01bb4161fc5..b712ab1cd874 100644
--- a/contrib/bind9/lib/dns/Makefile.in
+++ b/contrib/bind9/lib/dns/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: Makefile.in,v 1.180 2011/10/11 00:09:03 each Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -46,8 +46,9 @@ LIBS = @LIBS@
# Alphabetically
+OPENSSLGOSTLINKOBJS = opensslgost_link.@O@
OPENSSLLINKOBJS = openssl_link.@O@ openssldh_link.@O@ openssldsa_link.@O@ \
- opensslecdsa_link.@O@ opensslgost_link.@O@ \
+ opensslecdsa_link.@O@ @OPENSSLGOSTLINKOBJS@ \
opensslrsa_link.@O@
DSTOBJS = @DST_EXTRA_OBJS@ @OPENSSLLINKOBJS@ \
@@ -56,7 +57,7 @@ DSTOBJS = @DST_EXTRA_OBJS@ @OPENSSLLINKOBJS@ \
# Alphabetically
DNSOBJS = acache.@O@ acl.@O@ adb.@O@ byaddr.@O@ \
- cache.@O@ callbacks.@O@ compress.@O@ \
+ cache.@O@ callbacks.@O@ clientinfo.@O@ compress.@O@ \
db.@O@ dbiterator.@O@ dbtable.@O@ diff.@O@ dispatch.@O@ \
dlz.@O@ dns64.@O@ dnssec.@O@ ds.@O@ forward.@O@ iptable.@O@ \
journal.@O@ keydata.@O@ keytable.@O@ \
@@ -70,14 +71,15 @@ DNSOBJS = acache.@O@ acl.@O@ adb.@O@ byaddr.@O@ \
rriterator.@O@ sdb.@O@ \
sdlz.@O@ soa.@O@ ssu.@O@ ssu_external.@O@ \
stats.@O@ tcpmsg.@O@ time.@O@ timer.@O@ tkey.@O@ \
- tsec.@O@ tsig.@O@ ttl.@O@ validator.@O@ \
+ tsec.@O@ tsig.@O@ ttl.@O@ update.@O@ validator.@O@ \
version.@O@ view.@O@ xfrin.@O@ zone.@O@ zonekey.@O@ zt.@O@
OBJS= ${DNSOBJS} ${OTHEROBJS} ${DSTOBJS}
# Alphabetically
+OPENSSLGOSTLINKSRCS = opensslgost_link.c
OPENSSLLINKSRCS = openssl_link.c openssldh_link.c openssldsa_link.c \
- opensslecdsa_link.c opensslgost_link.c opensslrsa_link.c
+ opensslecdsa_link.c @OPENSSLGOSTLINKSRCS@ opensslrsa_link.c
DSTSRCS = @DST_EXTRA_SRCS@ @OPENSSLLINKSRCS@ \
dst_api.c dst_lib.c dst_parse.c \
@@ -85,7 +87,7 @@ DSTSRCS = @DST_EXTRA_SRCS@ @OPENSSLLINKSRCS@ \
hmac_link.c key.c
DNSSRCS = acache.c acl.c adb.c byaddr.c \
- cache.c callbacks.c compress.c \
+ cache.c callbacks.c clientinfo.c compress.c \
db.c dbiterator.c dbtable.c diff.c dispatch.c \
dlz.c dns64.c dnssec.c ds.c forward.c iptable.c journal.c \
keydata.c keytable.c lib.c log.c lookup.c \
@@ -96,7 +98,7 @@ DNSSRCS = acache.c acl.c adb.c byaddr.c \
resolver.c result.c rootns.c rpz.c rriterator.c \
sdb.c sdlz.c soa.c ssu.c ssu_external.c \
stats.c tcpmsg.c time.c timer.c tkey.c \
- tsec.c tsig.c ttl.c validator.c \
+ tsec.c tsig.c ttl.c update.c validator.c \
version.c view.c xfrin.c zone.c zonekey.c zt.c ${OTHERSRCS}
SRCS = ${DSTSRCS} ${DNSSRCS}
diff --git a/contrib/bind9/lib/dns/acache.c b/contrib/bind9/lib/dns/acache.c
index 2ad4981de69b..6df9b9838635 100644
--- a/contrib/bind9/lib/dns/acache.c
+++ b/contrib/bind9/lib/dns/acache.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -27,6 +27,7 @@
#include <isc/random.h>
#include <isc/refcount.h>
#include <isc/rwlock.h>
+#include <isc/serial.h>
#include <isc/task.h>
#include <isc/time.h>
#include <isc/timer.h>
@@ -72,10 +73,10 @@
* (XXX simply derived from definitions in cache.c There may be better
* constants here.)
*/
-#define DNS_ACACHE_MINSIZE 2097152 /* Bytes. 2097152 = 2 MB */
-#define DNS_ACACHE_CLEANERINCREMENT 1000 /* Number of entries. */
+#define DNS_ACACHE_MINSIZE 2097152U /* Bytes. 2097152 = 2 MB */
+#define DNS_ACACHE_CLEANERINCREMENT 1000 /* Number of entries. */
-#define DEFAULT_ACACHE_ENTRY_LOCK_COUNT 1009 /*%< Should be prime. */
+#define DEFAULT_ACACHE_ENTRY_LOCK_COUNT 1009 /*%< Should be prime. */
#if defined(ISC_RWLOCK_USEATOMIC) && defined(ISC_PLATFORM_HAVEATOMICSTORE)
#define ACACHE_USE_RWLOCK 1
@@ -776,10 +777,14 @@ entry_stale(acache_cleaner_t *cleaner, dns_acacheentry_t *entry,
* use and the cleaning interval.
*/
if (cleaner->overmem) {
- unsigned int passed =
- now32 - entry->lastused; /* <= interval */
+ unsigned int passed;
isc_uint32_t val;
+ if (isc_serial_ge(now32, entry->lastused))
+ passed = now32 - entry->lastused; /* <= interval */
+ else
+ passed = 0;
+
if (passed > interval / 2)
return (ISC_TRUE);
isc_random_get(&val);
@@ -825,8 +830,10 @@ acache_incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
entry = cleaner->current_entry;
isc_stdtime_convert32(cleaner->last_cleanup_time, &last32);
- INSIST(now32 > last32);
- interval = now32 - last32;
+ if (isc_serial_ge(now32, last32))
+ interval = now32 - last32;
+ else
+ interval = 0;
while (n_entries-- > 0) {
isc_boolean_t is_stale = ISC_FALSE;
@@ -861,7 +868,11 @@ acache_incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
if (entry != NULL) {
/*
* If we are still in the overmem
- * state, keep cleaning.
+ * state, keep cleaning. In case we
+ * exit from the loop immediately after
+ * this, reset next to the head entry
+ * as we'll expect it will be never
+ * NULL.
*/
isc_log_write(dns_lctx,
DNS_LOGCATEGORY_DATABASE,
@@ -870,6 +881,7 @@ acache_incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
"acache cleaner: "
"still overmem, "
"reset and try again");
+ next = entry;
continue;
}
}
@@ -888,7 +900,7 @@ acache_incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
* be the starting point in the next clean-up, and reschedule another
* batch. If it fails, just try to continue anyway.
*/
- INSIST(next != NULL && next != cleaner->current_entry);
+ INSIST(next != NULL);
dns_acache_detachentry(&cleaner->current_entry);
dns_acache_attachentry(next, &cleaner->current_entry);
@@ -1649,12 +1661,17 @@ dns_acache_setentry(dns_acache_t *acache, dns_acacheentry_t *entry,
return (result);
}
-void
+isc_boolean_t
dns_acache_cancelentry(dns_acacheentry_t *entry) {
- dns_acache_t *acache = entry->acache;
+ dns_acache_t *acache;
+ isc_boolean_t callback_active;
REQUIRE(DNS_ACACHEENTRY_VALID(entry));
- INSIST(DNS_ACACHE_VALID(acache));
+
+ acache = entry->acache;
+ callback_active = ISC_TF(entry->cbarg != NULL);
+
+ INSIST(DNS_ACACHE_VALID(entry->acache));
LOCK(&acache->lock);
ACACHE_LOCK(&acache->entrylocks[entry->locknum], isc_rwlocktype_write);
@@ -1674,6 +1691,8 @@ dns_acache_cancelentry(dns_acacheentry_t *entry) {
ACACHE_UNLOCK(&acache->entrylocks[entry->locknum],
isc_rwlocktype_write);
UNLOCK(&acache->lock);
+
+ return (callback_active);
}
void
@@ -1762,19 +1781,18 @@ dns_acache_setcleaninginterval(dns_acache_t *acache, unsigned int t) {
* function for more details about the logic.
*/
void
-dns_acache_setcachesize(dns_acache_t *acache, isc_uint32_t size) {
- isc_uint32_t lowater;
- isc_uint32_t hiwater;
+dns_acache_setcachesize(dns_acache_t *acache, size_t size) {
+ size_t hiwater, lowater;
REQUIRE(DNS_ACACHE_VALID(acache));
- if (size != 0 && size < DNS_ACACHE_MINSIZE)
+ if (size != 0U && size < DNS_ACACHE_MINSIZE)
size = DNS_ACACHE_MINSIZE;
hiwater = size - (size >> 3);
lowater = size - (size >> 2);
- if (size == 0 || hiwater == 0 || lowater == 0)
+ if (size == 0U || hiwater == 0U || lowater == 0U)
isc_mem_setwater(acache->mctx, water, acache, 0, 0);
else
isc_mem_setwater(acache->mctx, water, acache,
diff --git a/contrib/bind9/lib/dns/acl.c b/contrib/bind9/lib/dns/acl.c
index ec29bc7b54ca..3221d30c2b52 100644
--- a/contrib/bind9/lib/dns/acl.c
+++ b/contrib/bind9/lib/dns/acl.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: acl.c,v 1.55 2011/06/17 23:47:49 tbox Exp $ */
/*! \file */
@@ -48,7 +48,10 @@ dns_acl_create(isc_mem_t *mctx, int n, dns_acl_t **target) {
acl = isc_mem_get(mctx, sizeof(*acl));
if (acl == NULL)
return (ISC_R_NOMEMORY);
- acl->mctx = mctx;
+
+ acl->mctx = NULL;
+ isc_mem_attach(mctx, &acl->mctx);
+
acl->name = NULL;
result = isc_refcount_init(&acl->refcount, 1);
@@ -467,7 +470,7 @@ destroy(dns_acl_t *dacl) {
dns_iptable_detach(&dacl->iptable);
isc_refcount_destroy(&dacl->refcount);
dacl->magic = 0;
- isc_mem_put(dacl->mctx, dacl, sizeof(*dacl));
+ isc_mem_putanddetach(&dacl->mctx, dacl, sizeof(*dacl));
}
void
diff --git a/contrib/bind9/lib/dns/adb.c b/contrib/bind9/lib/dns/adb.c
index 531d112e6393..ef7875dcb46b 100644
--- a/contrib/bind9/lib/dns/adb.c
+++ b/contrib/bind9/lib/dns/adb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: adb.c,v 1.264 2011/12/05 17:10:51 each Exp $ */
/*! \file
*
@@ -89,7 +89,7 @@
#define DNS_ADB_INVALIDBUCKET (-1) /*%< invalid bucket address */
-#define DNS_ADB_MINADBSIZE (1024*1024) /*%< 1 Megabyte */
+#define DNS_ADB_MINADBSIZE (1024U*1024U) /*%< 1 Megabyte */
typedef ISC_LIST(dns_adbname_t) dns_adbnamelist_t;
typedef struct dns_adbnamehook dns_adbnamehook_t;
@@ -518,7 +518,9 @@ grow_entries(isc_task_t *task, isc_event_t *ev) {
isc_event_free(&ev);
- isc_task_beginexclusive(task);
+ result = isc_task_beginexclusive(task);
+ if (result != ISC_R_SUCCESS)
+ goto check_exit;
i = 0;
while (nbuckets[i] != 0 && adb->nentries >= nbuckets[i])
@@ -646,6 +648,7 @@ grow_entries(isc_task_t *task, isc_event_t *ev) {
done:
isc_task_endexclusive(task);
+ check_exit:
LOCK(&adb->lock);
if (dec_adb_irefcnt(adb))
check_exit(adb);
@@ -670,7 +673,9 @@ grow_names(isc_task_t *task, isc_event_t *ev) {
isc_event_free(&ev);
- isc_task_beginexclusive(task);
+ result = isc_task_beginexclusive(task);
+ if (result != ISC_R_SUCCESS)
+ goto check_exit;
i = 0;
while (nbuckets[i] != 0 && adb->nnames >= nbuckets[i])
@@ -794,6 +799,7 @@ grow_names(isc_task_t *task, isc_event_t *ev) {
done:
isc_task_endexclusive(task);
+ check_exit:
LOCK(&adb->lock);
if (dec_adb_irefcnt(adb))
check_exit(adb);
@@ -1280,6 +1286,7 @@ clean_namehooks(dns_adb_t *adb, dns_adbnamehooklist_t *namehooks) {
if (addr_bucket != DNS_ADB_INVALIDBUCKET)
UNLOCK(&adb->entrylocks[addr_bucket]);
addr_bucket = entry->lock_bucket;
+ INSIST(addr_bucket != DNS_ADB_INVALIDBUCKET);
LOCK(&adb->entrylocks[addr_bucket]);
}
@@ -2075,6 +2082,7 @@ copy_namehook_lists(dns_adb_t *adb, dns_adbfind_t *find, dns_name_t *qname,
while (namehook != NULL) {
entry = namehook->entry;
bucket = entry->lock_bucket;
+ INSIST(bucket != DNS_ADB_INVALIDBUCKET);
LOCK(&adb->entrylocks[bucket]);
if (!FIND_RETURNLAME(find)
@@ -2105,6 +2113,7 @@ copy_namehook_lists(dns_adb_t *adb, dns_adbfind_t *find, dns_name_t *qname,
while (namehook != NULL) {
entry = namehook->entry;
bucket = entry->lock_bucket;
+ INSIST(bucket != DNS_ADB_INVALIDBUCKET);
LOCK(&adb->entrylocks[bucket]);
if (!FIND_RETURNLAME(find)
@@ -2331,7 +2340,8 @@ destroy(dns_adb_t *adb) {
adb->magic = 0;
isc_task_detach(&adb->task);
- isc_task_detach(&adb->excl);
+ if (adb->excl != NULL)
+ isc_task_detach(&adb->excl);
isc_mempool_destroy(&adb->nmp);
isc_mempool_destroy(&adb->nhmp);
@@ -4120,19 +4130,18 @@ water(void *arg, int mark) {
}
void
-dns_adb_setadbsize(dns_adb_t *adb, isc_uint32_t size) {
- isc_uint32_t hiwater;
- isc_uint32_t lowater;
+dns_adb_setadbsize(dns_adb_t *adb, size_t size) {
+ size_t hiwater, lowater;
INSIST(DNS_ADB_VALID(adb));
- if (size != 0 && size < DNS_ADB_MINADBSIZE)
+ if (size != 0U && size < DNS_ADB_MINADBSIZE)
size = DNS_ADB_MINADBSIZE;
hiwater = size - (size >> 3); /* Approximately 7/8ths. */
lowater = size - (size >> 2); /* Approximately 3/4ths. */
- if (size == 0 || hiwater == 0 || lowater == 0)
+ if (size == 0U || hiwater == 0U || lowater == 0U)
isc_mem_setwater(adb->mctx, water, adb, 0, 0);
else
isc_mem_setwater(adb->mctx, water, adb, hiwater, lowater);
diff --git a/contrib/bind9/lib/dns/api b/contrib/bind9/lib/dns/api
index 325781a06836..a8881101f4e1 100644
--- a/contrib/bind9/lib/dns/api
+++ b/contrib/bind9/lib/dns/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 89
+# 9.9-sub: 130-139
+LIBINTERFACE = 99
LIBREVISION = 1
-LIBAGE = 1
+LIBAGE = 0
diff --git a/contrib/bind9/lib/dns/byaddr.c b/contrib/bind9/lib/dns/byaddr.c
index 6a3a6036180a..eb05f9f80f37 100644
--- a/contrib/bind9/lib/dns/byaddr.c
+++ b/contrib/bind9/lib/dns/byaddr.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -224,7 +224,8 @@ dns_byaddr_create(isc_mem_t *mctx, isc_netaddr_t *address, dns_view_t *view,
byaddr = isc_mem_get(mctx, sizeof(*byaddr));
if (byaddr == NULL)
return (ISC_R_NOMEMORY);
- byaddr->mctx = mctx;
+ byaddr->mctx = NULL;
+ isc_mem_attach(mctx, &byaddr->mctx);
byaddr->options = options;
byaddr->event = isc_mem_get(mctx, sizeof(*byaddr->event));
@@ -277,7 +278,7 @@ dns_byaddr_create(isc_mem_t *mctx, isc_netaddr_t *address, dns_view_t *view,
isc_task_detach(&byaddr->task);
cleanup_byaddr:
- isc_mem_put(mctx, byaddr, sizeof(*byaddr));
+ isc_mem_putanddetach(&mctx, byaddr, sizeof(*byaddr));
return (result);
}
@@ -310,7 +311,7 @@ dns_byaddr_destroy(dns_byaddr_t **byaddrp) {
DESTROYLOCK(&byaddr->lock);
byaddr->magic = 0;
- isc_mem_put(byaddr->mctx, byaddr, sizeof(*byaddr));
+ isc_mem_putanddetach(&byaddr->mctx, byaddr, sizeof(*byaddr));
*byaddrp = NULL;
}
diff --git a/contrib/bind9/lib/dns/cache.c b/contrib/bind9/lib/dns/cache.c
index 56bff8d9d8d7..d0f05b9a09ab 100644
--- a/contrib/bind9/lib/dns/cache.c
+++ b/contrib/bind9/lib/dns/cache.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: cache.c,v 1.91 2011/08/26 05:12:56 marka Exp $ */
/*! \file */
@@ -50,7 +50,7 @@
* DNS_CACHE_MINSIZE is how many bytes is the floor for dns_cache_setcachesize().
* See also DNS_CACHE_CLEANERINCREMENT
*/
-#define DNS_CACHE_MINSIZE 2097152 /*%< Bytes. 2097152 = 2 MB */
+#define DNS_CACHE_MINSIZE 2097152U /*%< Bytes. 2097152 = 2 MB */
/*!
* Control incremental cleaning.
* CLEANERINCREMENT is how many nodes are examined in one pass.
@@ -136,7 +136,7 @@ struct dns_cache {
char *db_type;
int db_argc;
char **db_argv;
- isc_uint32_t size;
+ size_t size;
/* Locked by 'filelock'. */
char *filename;
@@ -1028,9 +1028,8 @@ water(void *arg, int mark) {
}
void
-dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) {
- isc_uint32_t lowater;
- isc_uint32_t hiwater;
+dns_cache_setcachesize(dns_cache_t *cache, size_t size) {
+ size_t hiwater, lowater;
REQUIRE(VALID_CACHE(cache));
@@ -1038,7 +1037,7 @@ dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) {
* Impose a minimum cache size; pathological things happen if there
* is too little room.
*/
- if (size != 0 && size < DNS_CACHE_MINSIZE)
+ if (size != 0U && size < DNS_CACHE_MINSIZE)
size = DNS_CACHE_MINSIZE;
LOCK(&cache->lock);
@@ -1055,7 +1054,7 @@ dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) {
* water().
*/
- if (size == 0 || hiwater == 0 || lowater == 0)
+ if (size == 0U || hiwater == 0U || lowater == 0U)
/*
* Disable cache memory limiting.
*/
@@ -1068,9 +1067,9 @@ dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) {
isc_mem_setwater(cache->mctx, water, cache, hiwater, lowater);
}
-isc_uint32_t
+size_t
dns_cache_getcachesize(dns_cache_t *cache) {
- isc_uint32_t size;
+ size_t size;
REQUIRE(VALID_CACHE(cache));
@@ -1153,31 +1152,14 @@ dns_cache_flush(dns_cache_t *cache) {
return (ISC_R_SUCCESS);
}
-isc_result_t
-dns_cache_flushname(dns_cache_t *cache, dns_name_t *name) {
+static isc_result_t
+clearnode(dns_db_t *db, dns_dbnode_t *node) {
isc_result_t result;
dns_rdatasetiter_t *iter = NULL;
- dns_dbnode_t *node = NULL;
- dns_db_t *db = NULL;
-
- LOCK(&cache->lock);
- if (cache->db != NULL)
- dns_db_attach(cache->db, &db);
- UNLOCK(&cache->lock);
- if (db == NULL)
- return (ISC_R_SUCCESS);
- result = dns_db_findnode(cache->db, name, ISC_FALSE, &node);
- if (result == ISC_R_NOTFOUND) {
- result = ISC_R_SUCCESS;
- goto cleanup_db;
- }
- if (result != ISC_R_SUCCESS)
- goto cleanup_db;
- result = dns_db_allrdatasets(cache->db, node, NULL,
- (isc_stdtime_t)0, &iter);
+ result = dns_db_allrdatasets(db, node, NULL, (isc_stdtime_t)0, &iter);
if (result != ISC_R_SUCCESS)
- goto cleanup_node;
+ return (result);
for (result = dns_rdatasetiter_first(iter);
result == ISC_R_SUCCESS;
@@ -1187,19 +1169,110 @@ dns_cache_flushname(dns_cache_t *cache, dns_name_t *name) {
dns_rdataset_init(&rdataset);
dns_rdatasetiter_current(iter, &rdataset);
- result = dns_db_deleterdataset(cache->db, node, NULL,
+ result = dns_db_deleterdataset(db, node, NULL,
rdataset.type, rdataset.covers);
dns_rdataset_disassociate(&rdataset);
if (result != ISC_R_SUCCESS && result != DNS_R_UNCHANGED)
break;
}
+
if (result == ISC_R_NOMORE)
result = ISC_R_SUCCESS;
dns_rdatasetiter_destroy(&iter);
+ return (result);
+}
+
+static isc_result_t
+cleartree(dns_db_t *db, dns_name_t *name) {
+ isc_result_t result, answer = ISC_R_SUCCESS;
+ dns_dbiterator_t *iter = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_fixedname_t fnodename;
+ dns_name_t *nodename;
+
+ dns_fixedname_init(&fnodename);
+ nodename = dns_fixedname_name(&fnodename);
+
+ result = dns_db_createiterator(db, 0, &iter);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
- cleanup_node:
- dns_db_detachnode(cache->db, &node);
+ result = dns_dbiterator_seek(iter, name);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+ while (result == ISC_R_SUCCESS) {
+ result = dns_dbiterator_current(iter, &node, nodename);
+ if (result == DNS_R_NEWORIGIN)
+ result = ISC_R_SUCCESS;
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ /*
+ * Are we done?
+ */
+ if (! dns_name_issubdomain(nodename, name))
+ goto cleanup;
+
+ /*
+ * If clearnode fails record and move onto the next node.
+ */
+ result = clearnode(db, node);
+ if (result != ISC_R_SUCCESS && answer == ISC_R_SUCCESS)
+ answer = result;
+ dns_db_detachnode(db, &node);
+ result = dns_dbiterator_next(iter);
+ }
+
+ cleanup:
+ if (result == ISC_R_NOMORE || result == ISC_R_NOTFOUND)
+ result = ISC_R_SUCCESS;
+ if (result != ISC_R_SUCCESS && answer == ISC_R_SUCCESS)
+ answer = result;
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ if (iter != NULL)
+ dns_dbiterator_destroy(&iter);
+
+ return (answer);
+}
+
+isc_result_t
+dns_cache_flushname(dns_cache_t *cache, dns_name_t *name) {
+ return (dns_cache_flushnode(cache, name, ISC_FALSE));
+}
+
+isc_result_t
+dns_cache_flushnode(dns_cache_t *cache, dns_name_t *name,
+ isc_boolean_t tree)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ dns_db_t *db = NULL;
+
+ if (dns_name_equal(name, dns_rootname))
+ return (dns_cache_flush(cache));
+
+ LOCK(&cache->lock);
+ if (cache->db != NULL)
+ dns_db_attach(cache->db, &db);
+ UNLOCK(&cache->lock);
+ if (db == NULL)
+ return (ISC_R_SUCCESS);
+
+ if (tree) {
+ result = cleartree(cache->db, name);
+ } else {
+ result = dns_db_findnode(cache->db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND) {
+ result = ISC_R_SUCCESS;
+ goto cleanup_db;
+ }
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_db;
+ result = clearnode(cache->db, node);
+ dns_db_detachnode(cache->db, &node);
+ }
cleanup_db:
dns_db_detach(&db);
diff --git a/contrib/bind9/lib/dns/callbacks.c b/contrib/bind9/lib/dns/callbacks.c
index 705b6f10a8db..0ef17abce7bc 100644
--- a/contrib/bind9/lib/dns/callbacks.c
+++ b/contrib/bind9/lib/dns/callbacks.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: callbacks.c,v 1.19 2011/12/09 23:47:05 tbox Exp $ */
/*! \file */
@@ -88,6 +88,8 @@ dns_rdatacallbacks_initcommon(dns_rdatacallbacks_t *callbacks) {
REQUIRE(callbacks != NULL);
callbacks->add = NULL;
+ callbacks->rawdata = NULL;
+ callbacks->zone = NULL;
callbacks->add_private = NULL;
callbacks->error_private = NULL;
callbacks->warn_private = NULL;
diff --git a/contrib/bind9/lib/dns/client.c b/contrib/bind9/lib/dns/client.c
index 7b6d16408485..fc551cf9dfe5 100644
--- a/contrib/bind9/lib/dns/client.c
+++ b/contrib/bind9/lib/dns/client.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: client.c,v 1.14 2011/03/12 04:59:47 tbox Exp $ */
#include <config.h>
@@ -318,7 +318,7 @@ dns_client_createview(isc_mem_t *mctx, dns_rdataclass_t rdclass,
return (result);
}
- result = dns_view_createresolver(view, taskmgr, ntasks, socketmgr,
+ result = dns_view_createresolver(view, taskmgr, ntasks, 1, socketmgr,
timermgr, 0, dispatchmgr,
dispatchv4, dispatchv6);
if (result != ISC_R_SUCCESS) {
@@ -354,6 +354,12 @@ dns_client_create(dns_client_t **clientp, unsigned int options) {
isc_taskmgr_t *taskmgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
isc_timermgr_t *timermgr = NULL;
+#if 0
+ /* XXXMPA add debug logging support */
+ isc_log_t *lctx = NULL;
+ isc_logconfig_t *logconfig = NULL;
+ unsigned int logdebuglevel = 0;
+#endif
result = isc_mem_create(0, 0, &mctx);
if (result != ISC_R_SUCCESS)
@@ -373,7 +379,18 @@ dns_client_create(dns_client_t **clientp, unsigned int options) {
result = isc_timermgr_createinctx(mctx, actx, &timermgr);
if (result != ISC_R_SUCCESS)
goto cleanup;
-
+#if 0
+ result = isc_log_create(mctx, &lctx, &logconfig);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ isc_log_setcontext(lctx);
+ dns_log_init(lctx);
+ dns_log_setcontext(lctx);
+ result = isc_log_usechannel(logconfig, "default_debug", NULL, NULL);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ isc_log_setdebuglevel(lctx, logdebuglevel);
+#endif
result = dns_client_createx(mctx, actx, taskmgr, socketmgr, timermgr,
options, clientp);
if (result != ISC_R_SUCCESS)
@@ -485,6 +502,7 @@ dns_client_createx(isc_mem_t *mctx, isc_appctx_t *actx, isc_taskmgr_t *taskmgr,
client->update_udpretries = DEF_UPDATE_UDPRETRIES;
client->find_timeout = DEF_FIND_TIMEOUT;
client->find_udpretries = DEF_FIND_UDPRETRIES;
+ client->attributes = 0;
client->references = 1;
client->magic = DNS_CLIENT_MAGIC;
@@ -2000,8 +2018,9 @@ resolveaddr_done(isc_task_t *task, isc_event_t *event) {
switch (family) {
case AF_INET:
dns_rdataset_current(rdataset, &rdata);
- dns_rdata_tostruct(&rdata, &rdata_a,
- NULL);
+ result = dns_rdata_tostruct(&rdata, &rdata_a,
+ NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
isc_sockaddr_fromin(sa,
&rdata_a.in_addr,
53);
@@ -2009,8 +2028,9 @@ resolveaddr_done(isc_task_t *task, isc_event_t *event) {
break;
case AF_INET6:
dns_rdataset_current(rdataset, &rdata);
- dns_rdata_tostruct(&rdata, &rdata_aaaa,
- NULL);
+ result = dns_rdata_tostruct(&rdata, &rdata_aaaa,
+ NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
isc_sockaddr_fromin6(sa,
&rdata_aaaa.in6_addr,
53);
diff --git a/contrib/bind9/lib/dns/clientinfo.c b/contrib/bind9/lib/dns/clientinfo.c
new file mode 100644
index 000000000000..fd5a5e281642
--- /dev/null
+++ b/contrib/bind9/lib/dns/clientinfo.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: clientinfo.c,v 1.3 2011/10/11 00:25:12 marka Exp $ */
+
+/*! \file */
+
+#include "config.h"
+
+#include <dns/clientinfo.h>
+
+void
+dns_clientinfomethods_init(dns_clientinfomethods_t *methods,
+ dns_clientinfo_sourceip_t sourceip)
+{
+ methods->version = DNS_CLIENTINFOMETHODS_VERSION;
+ methods->age = DNS_CLIENTINFOMETHODS_AGE;
+ methods->sourceip = sourceip;
+}
+
+void
+dns_clientinfo_init(dns_clientinfo_t *ci, void *data) {
+ ci->version = DNS_CLIENTINFO_VERSION;
+ ci->data = data;
+}
diff --git a/contrib/bind9/lib/dns/db.c b/contrib/bind9/lib/dns/db.c
index 0cf2c27ce227..bf4a5b37540c 100644
--- a/contrib/bind9/lib/dns/db.c
+++ b/contrib/bind9/lib/dns/db.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: db.c,v 1.99.4.1 2011/10/23 20:12:07 vjs Exp $ */
/*! \file */
@@ -33,6 +33,7 @@
#include <isc/util.h>
#include <dns/callbacks.h>
+#include <dns/clientinfo.h>
#include <dns/db.h>
#include <dns/dbiterator.h>
#include <dns/log.h>
@@ -478,7 +479,31 @@ dns_db_findnode(dns_db_t *db, dns_name_t *name,
REQUIRE(DNS_DB_VALID(db));
REQUIRE(nodep != NULL && *nodep == NULL);
- return ((db->methods->findnode)(db, name, create, nodep));
+ if (db->methods->findnode != NULL)
+ return ((db->methods->findnode)(db, name, create, nodep));
+ else
+ return ((db->methods->findnodeext)(db, name, create,
+ NULL, NULL, nodep));
+}
+
+isc_result_t
+dns_db_findnodeext(dns_db_t *db, dns_name_t *name,
+ isc_boolean_t create, dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo, dns_dbnode_t **nodep)
+{
+ /*
+ * Find the node with name 'name', passing 'arg' to the database
+ * implementation.
+ */
+
+ REQUIRE(DNS_DB_VALID(db));
+ REQUIRE(nodep != NULL && *nodep == NULL);
+
+ if (db->methods->findnodeext != NULL)
+ return ((db->methods->findnodeext)(db, name, create,
+ methods, clientinfo, nodep));
+ else
+ return ((db->methods->findnode)(db, name, create, nodep));
}
isc_result_t
@@ -502,7 +527,6 @@ dns_db_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
dns_dbnode_t **nodep, dns_name_t *foundname,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
-
/*
* Find the best match for 'name' and 'type' in version 'version'
* of 'db'.
@@ -519,8 +543,50 @@ dns_db_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
(DNS_RDATASET_VALID(sigrdataset) &&
! dns_rdataset_isassociated(sigrdataset)));
- return ((db->methods->find)(db, name, version, type, options, now,
- nodep, foundname, rdataset, sigrdataset));
+ if (db->methods->find != NULL)
+ return ((db->methods->find)(db, name, version, type,
+ options, now, nodep, foundname,
+ rdataset, sigrdataset));
+ else
+ return ((db->methods->findext)(db, name, version, type,
+ options, now, nodep, foundname,
+ NULL, NULL,
+ rdataset, sigrdataset));
+}
+
+isc_result_t
+dns_db_findext(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+{
+
+ /*
+ * Find the best match for 'name' and 'type' in version 'version'
+ * of 'db', passing in 'arg'.
+ */
+
+ REQUIRE(DNS_DB_VALID(db));
+ REQUIRE(type != dns_rdatatype_rrsig);
+ REQUIRE(nodep == NULL || (nodep != NULL && *nodep == NULL));
+ REQUIRE(dns_name_hasbuffer(foundname));
+ REQUIRE(rdataset == NULL ||
+ (DNS_RDATASET_VALID(rdataset) &&
+ ! dns_rdataset_isassociated(rdataset)));
+ REQUIRE(sigrdataset == NULL ||
+ (DNS_RDATASET_VALID(sigrdataset) &&
+ ! dns_rdataset_isassociated(sigrdataset)));
+
+ if (db->methods->findext != NULL)
+ return ((db->methods->findext)(db, name, version, type,
+ options, now, nodep, foundname,
+ methods, clientinfo,
+ rdataset, sigrdataset));
+ else
+ return ((db->methods->find)(db, name, version, type,
+ options, now, nodep, foundname,
+ rdataset, sigrdataset));
}
isc_result_t
@@ -653,11 +719,6 @@ dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
isc_stdtime_t now, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset)
{
- /*
- * Search for an rdataset of type 'type' at 'node' that are in version
- * 'version' of 'db'. If found, make 'rdataset' refer to it.
- */
-
REQUIRE(DNS_DB_VALID(db));
REQUIRE(node != NULL);
REQUIRE(DNS_RDATASET_VALID(rdataset));
@@ -668,8 +729,9 @@ dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
(DNS_RDATASET_VALID(sigrdataset) &&
! dns_rdataset_isassociated(sigrdataset)));
- return ((db->methods->findrdataset)(db, node, version, type, covers,
- now, rdataset, sigrdataset));
+ return ((db->methods->findrdataset)(db, node, version, type,
+ covers, now, rdataset,
+ sigrdataset));
}
isc_result_t
@@ -945,11 +1007,12 @@ dns_db_resigned(dns_db_t *db, dns_rdataset_t *rdataset,
(db->methods->resigned)(db, rdataset, version);
}
-void
+isc_result_t
dns_db_rpz_enabled(dns_db_t *db, dns_rpz_st_t *st)
{
if (db->methods->rpz_enabled != NULL)
- (db->methods->rpz_enabled)(db, st);
+ return ((db->methods->rpz_enabled)(db, st));
+ return (ISC_R_SUCCESS);
}
void
diff --git a/contrib/bind9/lib/dns/dbtable.c b/contrib/bind9/lib/dns/dbtable.c
index 57bbfc1ef81e..20092209d58d 100644
--- a/contrib/bind9/lib/dns/dbtable.c
+++ b/contrib/bind9/lib/dns/dbtable.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -89,7 +89,8 @@ dns_dbtable_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
goto clean3;
dbtable->default_db = NULL;
- dbtable->mctx = mctx;
+ dbtable->mctx = NULL;
+ isc_mem_attach(mctx, &dbtable->mctx);
dbtable->rdclass = rdclass;
dbtable->magic = DBTABLE_MAGIC;
dbtable->references = 1;
@@ -105,7 +106,7 @@ dns_dbtable_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
dns_rbt_destroy(&dbtable->rbt);
clean1:
- isc_mem_put(mctx, dbtable, sizeof(*dbtable));
+ isc_mem_putanddetach(&mctx, dbtable, sizeof(*dbtable));
return (result);
}
@@ -129,7 +130,7 @@ dbtable_free(dns_dbtable_t *dbtable) {
dbtable->magic = 0;
- isc_mem_put(dbtable->mctx, dbtable, sizeof(*dbtable));
+ isc_mem_putanddetach(&dbtable->mctx, dbtable, sizeof(*dbtable));
}
void
diff --git a/contrib/bind9/lib/dns/diff.c b/contrib/bind9/lib/dns/diff.c
index de00d0f9566b..ff60d462f372 100644
--- a/contrib/bind9/lib/dns/diff.c
+++ b/contrib/bind9/lib/dns/diff.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: diff.c,v 1.26 2011/03/25 23:53:02 each Exp $ */
/*! \file */
@@ -73,7 +73,8 @@ dns_difftuple_create(isc_mem_t *mctx,
t = isc_mem_allocate(mctx, size);
if (t == NULL)
return (ISC_R_NOMEMORY);
- t->mctx = mctx;
+ t->mctx = NULL;
+ isc_mem_attach(mctx, &t->mctx);
t->op = op;
datap = (unsigned char *)(t + 1);
@@ -105,10 +106,15 @@ dns_difftuple_create(isc_mem_t *mctx,
void
dns_difftuple_free(dns_difftuple_t **tp) {
dns_difftuple_t *t = *tp;
+ isc_mem_t *mctx;
+
REQUIRE(DNS_DIFFTUPLE_VALID(t));
+
dns_name_invalidate(&t->name);
t->magic = 0;
- isc_mem_free(t->mctx, t);
+ mctx = t->mctx;
+ isc_mem_free(mctx, t);
+ isc_mem_detach(&mctx);
*tp = NULL;
}
diff --git a/contrib/bind9/lib/dns/dispatch.c b/contrib/bind9/lib/dns/dispatch.c
index 775d4f453e48..5063914a9b29 100644
--- a/contrib/bind9/lib/dns/dispatch.c
+++ b/contrib/bind9/lib/dns/dispatch.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: dispatch.c,v 1.175 2011/11/29 01:03:47 marka Exp $ */
/*! \file */
@@ -32,6 +32,7 @@
#include <isc/portset.h>
#include <isc/print.h>
#include <isc/random.h>
+#include <isc/socket.h>
#include <isc/stats.h>
#include <isc/string.h>
#include <isc/task.h>
@@ -101,12 +102,16 @@ struct dns_dispatchmgr {
unsigned int maxbuffers; /*%< max buffers */
/* Locked internally. */
- isc_mutex_t pool_lock;
- isc_mempool_t *epool; /*%< memory pool for events */
- isc_mempool_t *rpool; /*%< memory pool for replies */
+ isc_mutex_t depool_lock;
+ isc_mempool_t *depool; /*%< pool for dispatch events */
+ isc_mutex_t rpool_lock;
+ isc_mempool_t *rpool; /*%< pool for replies */
+ isc_mutex_t dpool_lock;
isc_mempool_t *dpool; /*%< dispatch allocations */
- isc_mempool_t *bpool; /*%< memory pool for buffers */
- isc_mempool_t *spool; /*%< memory pool for dispsocs */
+ isc_mutex_t bpool_lock;
+ isc_mempool_t *bpool; /*%< pool for buffers */
+ isc_mutex_t spool_lock;
+ isc_mempool_t *spool; /*%< pool for dispsocks */
/*%
* Locked by qid->lock if qid exists; otherwise, can be used without
@@ -226,6 +231,9 @@ struct dns_dispatch {
unsigned int maxrequests; /*%< max requests */
isc_event_t *ctlevent;
+ isc_mutex_t sepool_lock;
+ isc_mempool_t *sepool; /*%< pool for socket events */
+
/*% Locked by mgr->lock. */
ISC_LINK(dns_dispatch_t) link;
@@ -301,8 +309,8 @@ static isc_uint32_t dns_hash(dns_qid_t *, isc_sockaddr_t *, dns_messageid_t,
in_port_t);
static void free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len);
static void *allocate_udp_buffer(dns_dispatch_t *disp);
-static inline void free_event(dns_dispatch_t *disp, dns_dispatchevent_t *ev);
-static inline dns_dispatchevent_t *allocate_event(dns_dispatch_t *disp);
+static inline void free_devent(dns_dispatch_t *disp, dns_dispatchevent_t *ev);
+static inline dns_dispatchevent_t *allocate_devent(dns_dispatch_t *disp);
static void do_cancel(dns_dispatch_t *disp);
static dns_dispentry_t *linear_first(dns_qid_t *disp);
static dns_dispentry_t *linear_next(dns_qid_t *disp,
@@ -312,14 +320,16 @@ static isc_result_t get_udpsocket(dns_dispatchmgr_t *mgr,
dns_dispatch_t *disp,
isc_socketmgr_t *sockmgr,
isc_sockaddr_t *localaddr,
- isc_socket_t **sockp);
+ isc_socket_t **sockp,
+ isc_socket_t *dup_socket);
static isc_result_t dispatch_createudp(dns_dispatchmgr_t *mgr,
isc_socketmgr_t *sockmgr,
isc_taskmgr_t *taskmgr,
isc_sockaddr_t *localaddr,
unsigned int maxrequests,
unsigned int attributes,
- dns_dispatch_t **dispp);
+ dns_dispatch_t **dispp,
+ isc_socket_t *dup_socket);
static isc_boolean_t destroy_mgr_ok(dns_dispatchmgr_t *mgr);
static void destroy_mgr(dns_dispatchmgr_t **mgrp);
static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
@@ -327,7 +337,8 @@ static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
isc_boolean_t needaddrtable);
static void qid_destroy(isc_mem_t *mctx, dns_qid_t **qidp);
static isc_result_t open_socket(isc_socketmgr_t *mgr, isc_sockaddr_t *local,
- unsigned int options, isc_socket_t **sockp);
+ unsigned int options, isc_socket_t **sockp,
+ isc_socket_t *dup_socket);
static isc_boolean_t portavailable(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
isc_sockaddr_t *sockaddrp);
@@ -720,6 +731,11 @@ destroy_disp(isc_task_t *task, isc_event_t *event) {
"shutting down; detaching from sock %p, task %p",
disp->socket, disp->task[0]); /* XXXX */
+ if (disp->sepool != NULL) {
+ isc_mempool_destroy(&disp->sepool);
+ (void)isc_mutex_destroy(&disp->sepool_lock);
+ }
+
if (disp->socket != NULL)
isc_socket_detach(&disp->socket);
while ((dispsocket = ISC_LIST_HEAD(disp->inactivesockets)) != NULL) {
@@ -784,6 +800,7 @@ new_portentry(dns_dispatch_t *disp, in_port_t port) {
static void
deref_portentry(dns_dispatch_t *disp, dispportentry_t **portentryp) {
dispportentry_t *portentry = *portentryp;
+ isc_boolean_t unlink = ISC_FALSE;
dns_qid_t *qid;
REQUIRE(disp->port_table != NULL);
@@ -792,7 +809,10 @@ deref_portentry(dns_dispatch_t *disp, dispportentry_t **portentryp) {
qid = DNS_QID(disp);
LOCK(&qid->lock);
portentry->refs--;
- if (portentry->refs == 0) {
+ unlink = ISC_TF(portentry->refs == 0);
+ UNLOCK(&qid->lock);
+
+ if (unlink) {
ISC_LIST_UNLINK(disp->port_table[portentry->port %
DNS_DISPATCH_PORTTABLESIZE],
portentry, link);
@@ -800,7 +820,6 @@ deref_portentry(dns_dispatch_t *disp, dispportentry_t **portentryp) {
}
*portentryp = NULL;
- UNLOCK(&qid->lock);
}
/*%
@@ -830,12 +849,12 @@ socket_search(dns_qid_t *qid, isc_sockaddr_t *dest, in_port_t port,
/*%
* Make a new socket for a single dispatch with a random port number.
- * The caller must hold the disp->lock and qid->lock.
+ * The caller must hold the disp->lock
*/
static isc_result_t
get_dispsocket(dns_dispatch_t *disp, isc_sockaddr_t *dest,
- isc_socketmgr_t *sockmgr, dns_qid_t *qid,
- dispsocket_t **dispsockp, in_port_t *portp)
+ isc_socketmgr_t *sockmgr, dispsocket_t **dispsockp,
+ in_port_t *portp)
{
int i;
isc_uint32_t r;
@@ -850,6 +869,7 @@ get_dispsocket(dns_dispatch_t *disp, isc_sockaddr_t *dest,
in_port_t *ports;
unsigned int bindoptions;
dispportentry_t *portentry = NULL;
+ dns_qid_t *qid;
if (isc_sockaddr_pf(&disp->local) == AF_INET) {
nports = disp->mgr->nv4ports;
@@ -890,19 +910,27 @@ get_dispsocket(dns_dispatch_t *disp, isc_sockaddr_t *dest,
* very likely to fail in bind(2) or connect(2).
*/
localaddr = disp->local;
+ qid = DNS_QID(disp);
+
for (i = 0; i < 64; i++) {
port = ports[dispatch_uniformrandom(DISP_ARC4CTX(disp),
nports)];
isc_sockaddr_setport(&localaddr, port);
+ LOCK(&qid->lock);
bucket = dns_hash(qid, dest, 0, port);
- if (socket_search(qid, dest, port, bucket) != NULL)
+ if (socket_search(qid, dest, port, bucket) != NULL) {
+ UNLOCK(&qid->lock);
continue;
+ }
+ UNLOCK(&qid->lock);
bindoptions = 0;
portentry = port_search(disp, port);
+
if (portentry != NULL)
bindoptions |= ISC_SOCKET_REUSEADDRESS;
- result = open_socket(sockmgr, &localaddr, bindoptions, &sock);
+ result = open_socket(sockmgr, &localaddr, bindoptions, &sock,
+ NULL);
if (result == ISC_R_SUCCESS) {
if (portentry == NULL) {
portentry = new_portentry(disp, port);
@@ -928,7 +956,9 @@ get_dispsocket(dns_dispatch_t *disp, isc_sockaddr_t *dest,
dispsock->host = *dest;
dispsock->portentry = portentry;
dispsock->bucket = bucket;
+ LOCK(&qid->lock);
ISC_LIST_APPEND(qid->sock_table[bucket], dispsock, blink);
+ UNLOCK(&qid->lock);
*dispsockp = dispsock;
*portp = port;
} else {
@@ -1063,6 +1093,7 @@ entry_search(dns_qid_t *qid, isc_sockaddr_t *dest, dns_messageid_t id,
static void
free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len) {
+ isc_mempool_t *bpool;
INSIST(buf != NULL && len != 0);
@@ -1077,8 +1108,9 @@ free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len) {
INSIST(disp->mgr->buffers > 0);
INSIST(len == disp->mgr->buffersize);
disp->mgr->buffers--;
- isc_mempool_put(disp->mgr->bpool, buf);
+ bpool = disp->mgr->bpool;
UNLOCK(&disp->mgr->buffer_lock);
+ isc_mempool_put(bpool, buf);
break;
default:
INSIST(0);
@@ -1088,20 +1120,60 @@ free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len) {
static void *
allocate_udp_buffer(dns_dispatch_t *disp) {
+ isc_mempool_t *bpool;
void *temp;
LOCK(&disp->mgr->buffer_lock);
- temp = isc_mempool_get(disp->mgr->bpool);
-
- if (temp != NULL)
- disp->mgr->buffers++;
+ bpool = disp->mgr->bpool;
+ disp->mgr->buffers++;
UNLOCK(&disp->mgr->buffer_lock);
+ temp = isc_mempool_get(bpool);
+
+ if (temp == NULL) {
+ LOCK(&disp->mgr->buffer_lock);
+ disp->mgr->buffers--;
+ UNLOCK(&disp->mgr->buffer_lock);
+ }
+
return (temp);
}
static inline void
-free_event(dns_dispatch_t *disp, dns_dispatchevent_t *ev) {
+free_sevent(isc_event_t *ev) {
+ isc_mempool_t *pool = ev->ev_destroy_arg;
+ isc_socketevent_t *sev = (isc_socketevent_t *) ev;
+ isc_mempool_put(pool, sev);
+}
+
+static inline isc_socketevent_t *
+allocate_sevent(dns_dispatch_t *disp, isc_socket_t *socket,
+ isc_eventtype_t type, isc_taskaction_t action, const void *arg)
+{
+ isc_socketevent_t *ev;
+ void *deconst_arg;
+
+ ev = isc_mempool_get(disp->sepool);
+ if (ev == NULL)
+ return (NULL);
+ DE_CONST(arg, deconst_arg);
+ ISC_EVENT_INIT(ev, sizeof(*ev), 0, NULL, type,
+ action, deconst_arg, socket,
+ free_sevent, disp->sepool);
+ ev->result = ISC_R_UNSET;
+ ISC_LINK_INIT(ev, ev_link);
+ ISC_LIST_INIT(ev->bufferlist);
+ ev->region.base = NULL;
+ ev->n = 0;
+ ev->offset = 0;
+ ev->attributes = 0;
+
+ return (ev);
+}
+
+
+static inline void
+free_devent(dns_dispatch_t *disp, dns_dispatchevent_t *ev) {
if (disp->failsafe_ev == ev) {
INSIST(disp->shutdown_out == 1);
disp->shutdown_out = 0;
@@ -1109,14 +1181,14 @@ free_event(dns_dispatch_t *disp, dns_dispatchevent_t *ev) {
return;
}
- isc_mempool_put(disp->mgr->epool, ev);
+ isc_mempool_put(disp->mgr->depool, ev);
}
static inline dns_dispatchevent_t *
-allocate_event(dns_dispatch_t *disp) {
+allocate_devent(dns_dispatch_t *disp) {
dns_dispatchevent_t *ev;
- ev = isc_mempool_get(disp->mgr->epool);
+ ev = isc_mempool_get(disp->mgr->depool);
if (ev == NULL)
return (NULL);
ISC_EVENT_INIT(ev, sizeof(*ev), 0, NULL, 0,
@@ -1381,7 +1453,7 @@ udp_recv(isc_event_t *ev_in, dns_dispatch_t *disp, dispsocket_t *dispsock) {
sendresponse:
queue_response = resp->item_out;
- rev = allocate_event(resp->disp);
+ rev = allocate_devent(resp->disp);
if (rev == NULL) {
free_buffer(disp, ev->region.base, ev->region.length);
goto unlock;
@@ -1579,7 +1651,7 @@ tcp_recv(isc_task_t *task, isc_event_t *ev_in) {
if (resp == NULL)
goto unlock;
queue_response = resp->item_out;
- rev = allocate_event(disp);
+ rev = allocate_devent(disp);
if (rev == NULL)
goto unlock;
@@ -1660,16 +1732,33 @@ startrecv(dns_dispatch_t *disp, dispsocket_t *dispsock) {
if (region.base == NULL)
return (ISC_R_NOMEMORY);
if (dispsock != NULL) {
- res = isc_socket_recv(socket, &region, 1,
- dispsock->task, udp_exrecv,
- dispsock);
+ isc_task_t *dt = dispsock->task;
+ isc_socketevent_t *sev =
+ allocate_sevent(disp, socket,
+ ISC_SOCKEVENT_RECVDONE,
+ udp_exrecv, dispsock);
+ if (sev == NULL) {
+ free_buffer(disp, region.base, region.length);
+ return (ISC_R_NOMEMORY);
+ }
+
+ res = isc_socket_recv2(socket, &region, 1, dt, sev, 0);
if (res != ISC_R_SUCCESS) {
free_buffer(disp, region.base, region.length);
return (res);
}
} else {
- res = isc_socket_recv(socket, &region, 1,
- disp->task[0], udp_shrecv, disp);
+ isc_task_t *dt = disp->task[0];
+ isc_socketevent_t *sev =
+ allocate_sevent(disp, socket,
+ ISC_SOCKEVENT_RECVDONE,
+ udp_shrecv, disp);
+ if (sev == NULL) {
+ free_buffer(disp, region.base, region.length);
+ return (ISC_R_NOMEMORY);
+ }
+
+ res = isc_socket_recv2(socket, &region, 1, dt, sev, 0);
if (res != ISC_R_SUCCESS) {
free_buffer(disp, region.base, region.length);
disp->shutdown_why = res;
@@ -1709,16 +1798,16 @@ static isc_boolean_t
destroy_mgr_ok(dns_dispatchmgr_t *mgr) {
mgr_log(mgr, LVL(90),
"destroy_mgr_ok: shuttingdown=%d, listnonempty=%d, "
- "epool=%d, rpool=%d, dpool=%d",
+ "depool=%d, rpool=%d, dpool=%d",
MGR_IS_SHUTTINGDOWN(mgr), !ISC_LIST_EMPTY(mgr->list),
- isc_mempool_getallocated(mgr->epool),
+ isc_mempool_getallocated(mgr->depool),
isc_mempool_getallocated(mgr->rpool),
isc_mempool_getallocated(mgr->dpool));
if (!MGR_IS_SHUTTINGDOWN(mgr))
return (ISC_FALSE);
if (!ISC_LIST_EMPTY(mgr->list))
return (ISC_FALSE);
- if (isc_mempool_getallocated(mgr->epool) != 0)
+ if (isc_mempool_getallocated(mgr->depool) != 0)
return (ISC_FALSE);
if (isc_mempool_getallocated(mgr->rpool) != 0)
return (ISC_FALSE);
@@ -1748,7 +1837,7 @@ destroy_mgr(dns_dispatchmgr_t **mgrp) {
DESTROYLOCK(&mgr->arc4_lock);
- isc_mempool_destroy(&mgr->epool);
+ isc_mempool_destroy(&mgr->depool);
isc_mempool_destroy(&mgr->rpool);
isc_mempool_destroy(&mgr->dpool);
if (mgr->bpool != NULL)
@@ -1756,7 +1845,11 @@ destroy_mgr(dns_dispatchmgr_t **mgrp) {
if (mgr->spool != NULL)
isc_mempool_destroy(&mgr->spool);
- DESTROYLOCK(&mgr->pool_lock);
+ DESTROYLOCK(&mgr->spool_lock);
+ DESTROYLOCK(&mgr->bpool_lock);
+ DESTROYLOCK(&mgr->dpool_lock);
+ DESTROYLOCK(&mgr->rpool_lock);
+ DESTROYLOCK(&mgr->depool_lock);
#ifdef BIND9
if (mgr->entropy != NULL)
@@ -1787,19 +1880,14 @@ destroy_mgr(dns_dispatchmgr_t **mgrp) {
static isc_result_t
open_socket(isc_socketmgr_t *mgr, isc_sockaddr_t *local,
- unsigned int options, isc_socket_t **sockp)
+ unsigned int options, isc_socket_t **sockp,
+ isc_socket_t *dup_socket)
{
isc_socket_t *sock;
isc_result_t result;
sock = *sockp;
- if (sock == NULL) {
- result = isc_socket_create(mgr, isc_sockaddr_pf(local),
- isc_sockettype_udp, &sock);
- if (result != ISC_R_SUCCESS)
- return (result);
- isc_socket_setname(sock, "dispatcher", NULL);
- } else {
+ if (sock != NULL) {
#ifdef BIND9
result = isc_socket_open(sock);
if (result != ISC_R_SUCCESS)
@@ -1807,8 +1895,23 @@ open_socket(isc_socketmgr_t *mgr, isc_sockaddr_t *local,
#else
INSIST(0);
#endif
+ } else if (dup_socket != NULL) {
+ result = isc_socket_dup(dup_socket, &sock);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ isc_socket_setname(sock, "dispatcher", NULL);
+ *sockp = sock;
+ return (ISC_R_SUCCESS);
+ } else {
+ result = isc_socket_create(mgr, isc_sockaddr_pf(local),
+ isc_sockettype_udp, &sock);
+ if (result != ISC_R_SUCCESS)
+ return (result);
}
+ isc_socket_setname(sock, "dispatcher", NULL);
+
#ifndef ISC_ALLOW_MAPPED
isc_socket_ipv6only(sock, ISC_TRUE);
#endif
@@ -1886,22 +1989,38 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy,
if (result != ISC_R_SUCCESS)
goto kill_arc4_lock;
- result = isc_mutex_init(&mgr->pool_lock);
+ result = isc_mutex_init(&mgr->depool_lock);
if (result != ISC_R_SUCCESS)
goto kill_buffer_lock;
- mgr->epool = NULL;
+ result = isc_mutex_init(&mgr->rpool_lock);
+ if (result != ISC_R_SUCCESS)
+ goto kill_depool_lock;
+
+ result = isc_mutex_init(&mgr->dpool_lock);
+ if (result != ISC_R_SUCCESS)
+ goto kill_rpool_lock;
+
+ result = isc_mutex_init(&mgr->bpool_lock);
+ if (result != ISC_R_SUCCESS)
+ goto kill_dpool_lock;
+
+ result = isc_mutex_init(&mgr->spool_lock);
+ if (result != ISC_R_SUCCESS)
+ goto kill_bpool_lock;
+
+ mgr->depool = NULL;
if (isc_mempool_create(mgr->mctx, sizeof(dns_dispatchevent_t),
- &mgr->epool) != ISC_R_SUCCESS) {
+ &mgr->depool) != ISC_R_SUCCESS) {
result = ISC_R_NOMEMORY;
- goto kill_pool_lock;
+ goto kill_spool_lock;
}
mgr->rpool = NULL;
if (isc_mempool_create(mgr->mctx, sizeof(dns_dispentry_t),
&mgr->rpool) != ISC_R_SUCCESS) {
result = ISC_R_NOMEMORY;
- goto kill_epool;
+ goto kill_depool;
}
mgr->dpool = NULL;
@@ -1911,17 +2030,23 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy,
goto kill_rpool;
}
- isc_mempool_setname(mgr->epool, "dispmgr_epool");
- isc_mempool_setfreemax(mgr->epool, 1024);
- isc_mempool_associatelock(mgr->epool, &mgr->pool_lock);
+ isc_mempool_setname(mgr->depool, "dispmgr_depool");
+ isc_mempool_setmaxalloc(mgr->depool, 32768);
+ isc_mempool_setfreemax(mgr->depool, 32768);
+ isc_mempool_associatelock(mgr->depool, &mgr->depool_lock);
+ isc_mempool_setfillcount(mgr->depool, 256);
isc_mempool_setname(mgr->rpool, "dispmgr_rpool");
- isc_mempool_setfreemax(mgr->rpool, 1024);
- isc_mempool_associatelock(mgr->rpool, &mgr->pool_lock);
+ isc_mempool_setmaxalloc(mgr->rpool, 32768);
+ isc_mempool_setfreemax(mgr->rpool, 32768);
+ isc_mempool_associatelock(mgr->rpool, &mgr->rpool_lock);
+ isc_mempool_setfillcount(mgr->rpool, 256);
isc_mempool_setname(mgr->dpool, "dispmgr_dpool");
- isc_mempool_setfreemax(mgr->dpool, 1024);
- isc_mempool_associatelock(mgr->dpool, &mgr->pool_lock);
+ isc_mempool_setmaxalloc(mgr->dpool, 32768);
+ isc_mempool_setfreemax(mgr->dpool, 32768);
+ isc_mempool_associatelock(mgr->dpool, &mgr->dpool_lock);
+ isc_mempool_setfillcount(mgr->dpool, 256);
mgr->buffers = 0;
mgr->buffersize = 0;
@@ -1970,10 +2095,18 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy,
isc_mempool_destroy(&mgr->dpool);
kill_rpool:
isc_mempool_destroy(&mgr->rpool);
- kill_epool:
- isc_mempool_destroy(&mgr->epool);
- kill_pool_lock:
- DESTROYLOCK(&mgr->pool_lock);
+ kill_depool:
+ isc_mempool_destroy(&mgr->depool);
+ kill_spool_lock:
+ DESTROYLOCK(&mgr->spool_lock);
+ kill_bpool_lock:
+ DESTROYLOCK(&mgr->bpool_lock);
+ kill_dpool_lock:
+ DESTROYLOCK(&mgr->dpool_lock);
+ kill_rpool_lock:
+ DESTROYLOCK(&mgr->rpool_lock);
+ kill_depool_lock:
+ DESTROYLOCK(&mgr->depool_lock);
kill_buffer_lock:
DESTROYLOCK(&mgr->buffer_lock);
kill_arc4_lock:
@@ -2127,6 +2260,7 @@ dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr,
*/
if (maxbuffers > mgr->maxbuffers) {
isc_mempool_setmaxalloc(mgr->bpool, maxbuffers);
+ isc_mempool_setfreemax(mgr->bpool, maxbuffers);
mgr->maxbuffers = maxbuffers;
}
} else {
@@ -2137,12 +2271,16 @@ dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr,
}
isc_mempool_setname(mgr->bpool, "dispmgr_bpool");
isc_mempool_setmaxalloc(mgr->bpool, maxbuffers);
- isc_mempool_associatelock(mgr->bpool, &mgr->pool_lock);
+ isc_mempool_setfreemax(mgr->bpool, maxbuffers);
+ isc_mempool_associatelock(mgr->bpool, &mgr->bpool_lock);
+ isc_mempool_setfillcount(mgr->bpool, 256);
}
/* Create or adjust socket pool */
if (mgr->spool != NULL) {
- isc_mempool_setmaxalloc(mgr->spool, DNS_DISPATCH_POOLSOCKS * 2);
+ if (maxrequests < DNS_DISPATCH_POOLSOCKS * 2)
+ isc_mempool_setmaxalloc(mgr->spool, DNS_DISPATCH_POOLSOCKS * 2);
+ isc_mempool_setfreemax(mgr->spool, DNS_DISPATCH_POOLSOCKS * 2);
UNLOCK(&mgr->buffer_lock);
return (ISC_R_SUCCESS);
}
@@ -2154,7 +2292,9 @@ dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr,
}
isc_mempool_setname(mgr->spool, "dispmgr_spool");
isc_mempool_setmaxalloc(mgr->spool, maxrequests);
- isc_mempool_associatelock(mgr->spool, &mgr->pool_lock);
+ isc_mempool_setfreemax(mgr->spool, maxrequests);
+ isc_mempool_associatelock(mgr->spool, &mgr->spool_lock);
+ isc_mempool_setfillcount(mgr->spool, 256);
result = qid_allocate(mgr, buckets, increment, &mgr->qid, ISC_TRUE);
if (result != ISC_R_SUCCESS)
@@ -2480,7 +2620,7 @@ dispatch_allocate(dns_dispatchmgr_t *mgr, unsigned int maxrequests,
if (result != ISC_R_SUCCESS)
goto deallocate;
- disp->failsafe_ev = allocate_event(disp);
+ disp->failsafe_ev = allocate_devent(disp);
if (disp->failsafe_ev == NULL) {
result = ISC_R_NOMEMORY;
goto kill_lock;
@@ -2531,7 +2671,7 @@ dispatch_free(dns_dispatch_t **dispp)
INSIST(ISC_LIST_EMPTY(disp->activesockets));
INSIST(ISC_LIST_EMPTY(disp->inactivesockets));
- isc_mempool_put(mgr->epool, disp->failsafe_ev);
+ isc_mempool_put(mgr->depool, disp->failsafe_ev);
disp->failsafe_ev = NULL;
if (disp->qid != NULL)
@@ -2595,6 +2735,8 @@ dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
disp->socket = NULL;
isc_socket_attach(sock, &disp->socket);
+ disp->sepool = NULL;
+
disp->ntasks = 1;
disp->task[0] = NULL;
result = isc_task_create(taskmgr, 0, &disp->task[0]);
@@ -2646,13 +2788,13 @@ dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
}
isc_result_t
-dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
+dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
isc_taskmgr_t *taskmgr, isc_sockaddr_t *localaddr,
unsigned int buffersize,
unsigned int maxbuffers, unsigned int maxrequests,
unsigned int buckets, unsigned int increment,
unsigned int attributes, unsigned int mask,
- dns_dispatch_t **dispp)
+ dns_dispatch_t **dispp, dns_dispatch_t *dup_dispatch)
{
isc_result_t result;
dns_dispatch_t *disp = NULL;
@@ -2683,28 +2825,31 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
/*
* See if we have a dispatcher that matches.
*/
- result = dispatch_find(mgr, localaddr, attributes, mask, &disp);
- if (result == ISC_R_SUCCESS) {
- disp->refcount++;
-
- if (disp->maxrequests < maxrequests)
- disp->maxrequests = maxrequests;
-
- if ((disp->attributes & DNS_DISPATCHATTR_NOLISTEN) == 0 &&
- (attributes & DNS_DISPATCHATTR_NOLISTEN) != 0)
- {
- disp->attributes |= DNS_DISPATCHATTR_NOLISTEN;
- if (disp->recv_pending != 0)
- isc_socket_cancel(disp->socket, disp->task[0],
- ISC_SOCKCANCEL_RECV);
- }
+ if (dup_dispatch == NULL) {
+ result = dispatch_find(mgr, localaddr, attributes, mask, &disp);
+ if (result == ISC_R_SUCCESS) {
+ disp->refcount++;
+
+ if (disp->maxrequests < maxrequests)
+ disp->maxrequests = maxrequests;
+
+ if ((disp->attributes & DNS_DISPATCHATTR_NOLISTEN) == 0
+ && (attributes & DNS_DISPATCHATTR_NOLISTEN) != 0)
+ {
+ disp->attributes |= DNS_DISPATCHATTR_NOLISTEN;
+ if (disp->recv_pending != 0)
+ isc_socket_cancel(disp->socket,
+ disp->task[0],
+ ISC_SOCKCANCEL_RECV);
+ }
- UNLOCK(&disp->lock);
- UNLOCK(&mgr->lock);
+ UNLOCK(&disp->lock);
+ UNLOCK(&mgr->lock);
- *dispp = disp;
+ *dispp = disp;
- return (ISC_R_SUCCESS);
+ return (ISC_R_SUCCESS);
+ }
}
createudp:
@@ -2712,7 +2857,11 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
* Nope, create one.
*/
result = dispatch_createudp(mgr, sockmgr, taskmgr, localaddr,
- maxrequests, attributes, &disp);
+ maxrequests, attributes, &disp,
+ dup_dispatch == NULL
+ ? NULL
+ : dup_dispatch->socket);
+
if (result != ISC_R_SUCCESS) {
UNLOCK(&mgr->lock);
return (result);
@@ -2720,9 +2869,25 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
UNLOCK(&mgr->lock);
*dispp = disp;
+
return (ISC_R_SUCCESS);
}
+isc_result_t
+dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
+ isc_taskmgr_t *taskmgr, isc_sockaddr_t *localaddr,
+ unsigned int buffersize,
+ unsigned int maxbuffers, unsigned int maxrequests,
+ unsigned int buckets, unsigned int increment,
+ unsigned int attributes, unsigned int mask,
+ dns_dispatch_t **dispp)
+{
+ return (dns_dispatch_getudp_dup(mgr, sockmgr, taskmgr, localaddr,
+ buffersize, maxbuffers, maxrequests,
+ buckets, increment, attributes,
+ mask, dispp, NULL));
+}
+
/*
* mgr should be locked.
*/
@@ -2734,7 +2899,7 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
static isc_result_t
get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
isc_socketmgr_t *sockmgr, isc_sockaddr_t *localaddr,
- isc_socket_t **sockp)
+ isc_socket_t **sockp, isc_socket_t *dup_socket)
{
unsigned int i, j;
isc_socket_t *held[DNS_DISPATCH_HELD];
@@ -2756,7 +2921,7 @@ get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
* If no port is specified, we first try to pick up a random
* port by ourselves.
*/
- if (isc_sockaddr_pf(&disp->local) == AF_INET) {
+ if (isc_sockaddr_pf(localaddr) == AF_INET) {
nports = disp->mgr->nv4ports;
ports = disp->mgr->v4ports;
} else {
@@ -2774,13 +2939,17 @@ get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
nports)];
isc_sockaddr_setport(&localaddr_bound, prt);
result = open_socket(sockmgr, &localaddr_bound,
- 0, &sock);
- if (result == ISC_R_SUCCESS ||
- result != ISC_R_ADDRINUSE) {
- disp->localport = prt;
- *sockp = sock;
- return (result);
- }
+ 0, &sock, NULL);
+ /*
+ * Continue if the port choosen is already in use
+ * or the OS has reserved it.
+ */
+ if (result == ISC_R_NOPERM ||
+ result == ISC_R_ADDRINUSE)
+ continue;
+ disp->localport = prt;
+ *sockp = sock;
+ return (result);
}
/*
@@ -2790,7 +2959,8 @@ get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
} else {
/* Allow to reuse address for non-random ports. */
result = open_socket(sockmgr, localaddr,
- ISC_SOCKET_REUSEADDRESS, &sock);
+ ISC_SOCKET_REUSEADDRESS, &sock,
+ dup_socket);
if (result == ISC_R_SUCCESS)
*sockp = sock;
@@ -2802,11 +2972,9 @@ get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
i = 0;
for (j = 0; j < 0xffffU; j++) {
- result = open_socket(sockmgr, localaddr, 0, &sock);
+ result = open_socket(sockmgr, localaddr, 0, &sock, NULL);
if (result != ISC_R_SUCCESS)
goto end;
- else if (!anyport)
- break;
else if (portavailable(mgr, sock, NULL))
break;
if (held[i] != NULL)
@@ -2841,7 +3009,8 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
isc_sockaddr_t *localaddr,
unsigned int maxrequests,
unsigned int attributes,
- dns_dispatch_t **dispp)
+ dns_dispatch_t **dispp,
+ isc_socket_t *dup_socket)
{
isc_result_t result;
dns_dispatch_t *disp;
@@ -2857,9 +3026,21 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
return (result);
if ((attributes & DNS_DISPATCHATTR_EXCLUSIVE) == 0) {
- result = get_udpsocket(mgr, disp, sockmgr, localaddr, &sock);
+ result = get_udpsocket(mgr, disp, sockmgr, localaddr, &sock,
+ dup_socket);
if (result != ISC_R_SUCCESS)
goto deallocate_dispatch;
+
+ if (isc_log_wouldlog(dns_lctx, 90)) {
+ char addrbuf[ISC_SOCKADDR_FORMATSIZE];
+
+ isc_sockaddr_format(localaddr, addrbuf,
+ ISC_SOCKADDR_FORMATSIZE);
+ mgr_log(mgr, LVL(90), "dns_dispatch_createudp: Created"
+ " UDP dispatch for %s with socket fd %d\n",
+ addrbuf, isc_socket_getfd(sock));
+ }
+
} else {
isc_sockaddr_t sa_any;
@@ -2871,7 +3052,7 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
*/
isc_sockaddr_anyofpf(&sa_any, isc_sockaddr_pf(localaddr));
if (!isc_sockaddr_eqaddr(&sa_any, localaddr)) {
- result = open_socket(sockmgr, localaddr, 0, &sock);
+ result = open_socket(sockmgr, localaddr, 0, &sock, NULL);
if (sock != NULL)
isc_socket_detach(&sock);
if (result != ISC_R_SUCCESS)
@@ -2923,6 +3104,24 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
goto kill_task;
}
+ disp->sepool = NULL;
+ if (isc_mempool_create(mgr->mctx, sizeof(isc_socketevent_t),
+ &disp->sepool) != ISC_R_SUCCESS)
+ {
+ result = ISC_R_NOMEMORY;
+ goto kill_ctlevent;
+ }
+
+ result = isc_mutex_init(&disp->sepool_lock);
+ if (result != ISC_R_SUCCESS)
+ goto kill_sepool;
+
+ isc_mempool_setname(disp->sepool, "disp_sepool");
+ isc_mempool_setmaxalloc(disp->sepool, 32768);
+ isc_mempool_setfreemax(disp->sepool, 32768);
+ isc_mempool_associatelock(disp->sepool, &disp->sepool_lock);
+ isc_mempool_setfillcount(disp->sepool, 16);
+
attributes &= ~DNS_DISPATCHATTR_TCP;
attributes |= DNS_DISPATCHATTR_UDP;
disp->attributes = attributes;
@@ -2938,11 +3137,16 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
dispatch_log(disp, LVL(90), "created socket %p", disp->socket);
*dispp = disp;
+
return (result);
/*
* Error returns.
*/
+ kill_sepool:
+ isc_mempool_destroy(&disp->sepool);
+ kill_ctlevent:
+ isc_event_free(&disp->ctlevent);
kill_task:
for (i = 0; i < disp->ntasks; i++)
isc_task_detach(&disp->task[i]);
@@ -3059,7 +3263,7 @@ dns_dispatch_addresponse2(dns_dispatch_t *disp, isc_sockaddr_t *dest,
oldestsocket = ISC_LIST_HEAD(disp->activesockets);
oldestresp = oldestsocket->resp;
if (oldestresp != NULL && !oldestresp->item_out) {
- rev = allocate_event(oldestresp->disp);
+ rev = allocate_devent(oldestresp->disp);
if (rev != NULL) {
rev->buffer.base = NULL;
rev->result = ISC_R_CANCELED;
@@ -3086,16 +3290,14 @@ dns_dispatch_addresponse2(dns_dispatch_t *disp, isc_sockaddr_t *dest,
}
qid = DNS_QID(disp);
- LOCK(&qid->lock);
if ((disp->attributes & DNS_DISPATCHATTR_EXCLUSIVE) != 0) {
/*
* Get a separate UDP socket with a random port number.
*/
- result = get_dispsocket(disp, dest, sockmgr, qid, &dispsocket,
+ result = get_dispsocket(disp, dest, sockmgr, &dispsocket,
&localport);
if (result != ISC_R_SUCCESS) {
- UNLOCK(&qid->lock);
UNLOCK(&disp->lock);
inc_stats(disp->mgr, dns_resstatscounter_dispsockfail);
return (result);
@@ -3107,6 +3309,7 @@ dns_dispatch_addresponse2(dns_dispatch_t *disp, isc_sockaddr_t *dest,
/*
* Try somewhat hard to find an unique ID.
*/
+ LOCK(&qid->lock);
id = (dns_messageid_t)dispatch_random(DISP_ARC4CTX(disp));
bucket = dns_hash(qid, dest, id, localport);
ok = ISC_FALSE;
@@ -3119,16 +3322,15 @@ dns_dispatch_addresponse2(dns_dispatch_t *disp, isc_sockaddr_t *dest,
id &= 0x0000ffff;
bucket = dns_hash(qid, dest, id, localport);
}
+ UNLOCK(&qid->lock);
if (!ok) {
- UNLOCK(&qid->lock);
UNLOCK(&disp->lock);
return (ISC_R_NOMORE);
}
res = isc_mempool_get(disp->mgr->rpool);
if (res == NULL) {
- UNLOCK(&qid->lock);
UNLOCK(&disp->lock);
if (dispsocket != NULL)
destroy_dispsocket(disp, &dispsocket);
@@ -3153,6 +3355,8 @@ dns_dispatch_addresponse2(dns_dispatch_t *disp, isc_sockaddr_t *dest,
ISC_LIST_INIT(res->items);
ISC_LINK_INIT(res, link);
res->magic = RESPONSE_MAGIC;
+
+ LOCK(&qid->lock);
ISC_LIST_APPEND(qid->qid_table[bucket], res, link);
UNLOCK(&qid->lock);
@@ -3300,7 +3504,7 @@ dns_dispatch_removeresponse(dns_dispentry_t **resp,
res->item_out = ISC_FALSE;
if (ev->buffer.base != NULL)
free_buffer(disp, ev->buffer.base, ev->buffer.length);
- free_event(disp, ev);
+ free_devent(disp, ev);
}
request_log(disp, res, LVL(90), "detaching from task %p", res->task);
@@ -3320,7 +3524,7 @@ dns_dispatch_removeresponse(dns_dispentry_t **resp,
ISC_LIST_UNLINK(res->items, ev, ev_link);
if (ev->buffer.base != NULL)
free_buffer(disp, ev->buffer.base, ev->buffer.length);
- free_event(disp, ev);
+ free_devent(disp, ev);
ev = ISC_LIST_HEAD(res->items);
}
res->magic = 0;
@@ -3517,6 +3721,128 @@ dns_dispatch_importrecv(dns_dispatch_t *disp, isc_event_t *event) {
isc_task_send(disp->task[0], ISC_EVENT_PTR(&newsevent));
}
+dns_dispatch_t *
+dns_dispatchset_get(dns_dispatchset_t *dset) {
+ dns_dispatch_t *disp;
+
+ /* check that dispatch set is configured */
+ if (dset == NULL || dset->ndisp == 0)
+ return (NULL);
+
+ LOCK(&dset->lock);
+ disp = dset->dispatches[dset->cur];
+ dset->cur++;
+ if (dset->cur == dset->ndisp)
+ dset->cur = 0;
+ UNLOCK(&dset->lock);
+
+ return (disp);
+}
+
+isc_result_t
+dns_dispatchset_create(isc_mem_t *mctx, isc_socketmgr_t *sockmgr,
+ isc_taskmgr_t *taskmgr, dns_dispatch_t *source,
+ dns_dispatchset_t **dsetp, int n)
+{
+ isc_result_t result;
+ dns_dispatchset_t *dset;
+ dns_dispatchmgr_t *mgr;
+ int i, j;
+
+ REQUIRE(VALID_DISPATCH(source));
+ REQUIRE((source->attributes & DNS_DISPATCHATTR_UDP) != 0);
+ REQUIRE(dsetp != NULL && *dsetp == NULL);
+
+ mgr = source->mgr;
+
+ dset = isc_mem_get(mctx, sizeof(dns_dispatchset_t));
+ if (dset == NULL)
+ return (ISC_R_NOMEMORY);
+ memset(dset, 0, sizeof(*dset));
+
+ result = isc_mutex_init(&dset->lock);
+ if (result != ISC_R_SUCCESS)
+ goto fail_alloc;
+
+ dset->dispatches = isc_mem_get(mctx, sizeof(dns_dispatch_t *) * n);
+ if (dset == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto fail_lock;
+ }
+
+ isc_mem_attach(mctx, &dset->mctx);
+ dset->ndisp = n;
+ dset->cur = 0;
+
+ dset->dispatches[0] = NULL;
+ dns_dispatch_attach(source, &dset->dispatches[0]);
+
+ LOCK(&mgr->lock);
+ for (i = 1; i < n; i++) {
+ dset->dispatches[i] = NULL;
+ result = dispatch_createudp(mgr, sockmgr, taskmgr,
+ &source->local,
+ source->maxrequests,
+ source->attributes,
+ &dset->dispatches[i],
+ source->socket);
+ if (result != ISC_R_SUCCESS)
+ goto fail;
+ }
+
+ UNLOCK(&mgr->lock);
+ *dsetp = dset;
+
+ return (ISC_R_SUCCESS);
+
+ fail:
+ UNLOCK(&mgr->lock);
+
+ for (j = 0; j < i; j++)
+ dns_dispatch_detach(&(dset->dispatches[j]));
+ isc_mem_put(mctx, dset->dispatches, sizeof(dns_dispatch_t *) * n);
+ if (dset->mctx == mctx)
+ isc_mem_detach(&dset->mctx);
+
+ fail_lock:
+ DESTROYLOCK(&dset->lock);
+
+ fail_alloc:
+ isc_mem_put(mctx, dset, sizeof(dns_dispatchset_t));
+ return (result);
+}
+
+void
+dns_dispatchset_cancelall(dns_dispatchset_t *dset, isc_task_t *task) {
+ int i;
+
+ REQUIRE(dset != NULL);
+
+ for (i = 0; i < dset->ndisp; i++) {
+ isc_socket_t *sock;
+ sock = dns_dispatch_getsocket(dset->dispatches[i]);
+ isc_socket_cancel(sock, task, ISC_SOCKCANCEL_ALL);
+ }
+}
+
+void
+dns_dispatchset_destroy(dns_dispatchset_t **dsetp) {
+ dns_dispatchset_t *dset;
+ int i;
+
+ REQUIRE(dsetp != NULL && *dsetp != NULL);
+
+ dset = *dsetp;
+ for (i = 0; i < dset->ndisp; i++)
+ dns_dispatch_detach(&(dset->dispatches[i]));
+ isc_mem_put(dset->mctx, dset->dispatches,
+ sizeof(dns_dispatch_t *) * dset->ndisp);
+ DESTROYLOCK(&dset->lock);
+ isc_mem_putanddetach(&dset->mctx, dset, sizeof(dns_dispatchset_t));
+
+ *dsetp = NULL;
+}
+
#if 0
void
dns_dispatchmgr_dump(dns_dispatchmgr_t *mgr) {
diff --git a/contrib/bind9/lib/dns/dlz.c b/contrib/bind9/lib/dns/dlz.c
index 8d1625a46be4..19c600c94126 100644
--- a/contrib/bind9/lib/dns/dlz.c
+++ b/contrib/bind9/lib/dns/dlz.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2005, 2007, 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2005, 2007, 2009-2013 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -142,6 +142,7 @@ dns_dlzcreate(isc_mem_t *mctx, const char *dlzname, const char *drivername,
{
dns_dlzimplementation_t *impinfo;
isc_result_t result;
+ dns_dlzdb_t *db = NULL;
/*
* initialize the dlz_implementations list, this is guaranteed
@@ -180,30 +181,31 @@ dns_dlzcreate(isc_mem_t *mctx, const char *dlzname, const char *drivername,
}
/* Allocate memory to hold the DLZ database driver */
- (*dbp) = isc_mem_get(mctx, sizeof(dns_dlzdb_t));
- if ((*dbp) == NULL) {
+ db = isc_mem_get(mctx, sizeof(dns_dlzdb_t));
+ if (db == NULL) {
RWUNLOCK(&dlz_implock, isc_rwlocktype_read);
return (ISC_R_NOMEMORY);
}
/* Make sure memory region is set to all 0's */
- memset((*dbp), 0, sizeof(dns_dlzdb_t));
+ memset(db, 0, sizeof(dns_dlzdb_t));
- (*dbp)->implementation = impinfo;
+ db->implementation = impinfo;
/* Create a new database using implementation 'drivername'. */
result = ((impinfo->methods->create)(mctx, dlzname, argc, argv,
impinfo->driverarg,
- &(*dbp)->dbdata));
+ &db->dbdata));
/* mark the DLZ driver as valid */
if (result == ISC_R_SUCCESS) {
RWUNLOCK(&dlz_implock, isc_rwlocktype_read);
- (*dbp)->magic = DNS_DLZ_MAGIC;
- isc_mem_attach(mctx, &(*dbp)->mctx);
+ db->magic = DNS_DLZ_MAGIC;
+ isc_mem_attach(mctx, &db->mctx);
isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_DLZ, ISC_LOG_DEBUG(2),
"DLZ driver loaded successfully.");
+ *dbp = db;
return (ISC_R_SUCCESS);
} else {
isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE,
@@ -213,7 +215,7 @@ dns_dlzcreate(isc_mem_t *mctx, const char *dlzname, const char *drivername,
/* impinfo->methods->create failed. */
RWUNLOCK(&dlz_implock, isc_rwlocktype_read);
- isc_mem_put(mctx, (*dbp), sizeof(dns_dlzdb_t));
+ isc_mem_put(mctx, db, sizeof(dns_dlzdb_t));
return (result);
}
@@ -543,7 +545,7 @@ dns_dlz_writeablezone(dns_view_t *view, const char *zone_name) {
REQUIRE(dlzdatabase->configure_callback != NULL);
- isc_buffer_init(&buffer, zone_name, strlen(zone_name));
+ isc_buffer_constinit(&buffer, zone_name, strlen(zone_name));
isc_buffer_add(&buffer, strlen(zone_name));
dns_fixedname_init(&fixorigin);
result = dns_name_fromtext(dns_fixedname_name(&fixorigin),
diff --git a/contrib/bind9/lib/dns/dns64.c b/contrib/bind9/lib/dns/dns64.c
index 0b3f1d48b892..78eff579a2ba 100644
--- a/contrib/bind9/lib/dns/dns64.c
+++ b/contrib/bind9/lib/dns/dns64.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2010, 2011 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: dns64.c,v 1.8 2011/03/12 04:59:47 tbox Exp $ */
#include <config.h>
diff --git a/contrib/bind9/lib/dns/dnssec.c b/contrib/bind9/lib/dns/dnssec.c
index 3569ad7cc84a..d00c99b4124c 100644
--- a/contrib/bind9/lib/dns/dnssec.c
+++ b/contrib/bind9/lib/dns/dnssec.c
@@ -275,7 +275,7 @@ dns_dnssec_sign(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
if (ret != ISC_R_SUCCESS)
goto cleanup_databuf;
- ret = dst_context_create(key, mctx, &ctx);
+ ret = dst_context_create2(key, mctx, DNS_LOGCATEGORY_DNSSEC, &ctx);
if (ret != ISC_R_SUCCESS)
goto cleanup_databuf;
@@ -352,7 +352,6 @@ dns_dnssec_sign(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
ret = ISC_R_NOSPACE;
goto cleanup_array;
}
- memcpy(sig.signature, r.base, sig.siglen);
ret = dns_rdata_fromstruct(sigrdata, sig.common.rdclass,
sig.common.rdtype, &sig, buffer);
@@ -374,6 +373,15 @@ dns_dnssec_verify2(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
isc_boolean_t ignoretime, isc_mem_t *mctx,
dns_rdata_t *sigrdata, dns_name_t *wild)
{
+ return (dns_dnssec_verify3(name, set, key, ignoretime, 0, mctx,
+ sigrdata, wild));
+}
+
+isc_result_t
+dns_dnssec_verify3(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
+ isc_boolean_t ignoretime, unsigned int maxbits,
+ isc_mem_t *mctx, dns_rdata_t *sigrdata, dns_name_t *wild)
+{
dns_rdata_rrsig_t sig;
dns_fixedname_t fnewname;
isc_region_t r;
@@ -462,7 +470,7 @@ dns_dnssec_verify2(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
}
again:
- ret = dst_context_create(key, mctx, &ctx);
+ ret = dst_context_create2(key, mctx, DNS_LOGCATEGORY_DNSSEC, &ctx);
if (ret != ISC_R_SUCCESS)
goto cleanup_struct;
@@ -547,13 +555,13 @@ dns_dnssec_verify2(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
r.base = sig.signature;
r.length = sig.siglen;
- ret = dst_context_verify(ctx, &r);
+ ret = dst_context_verify2(ctx, maxbits, &r);
if (ret == ISC_R_SUCCESS && downcase) {
char namebuf[DNS_NAME_FORMATSIZE];
dns_name_format(&sig.signer, namebuf, sizeof(namebuf));
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
- DNS_LOGMODULE_DNSSEC, ISC_LOG_INFO,
- "sucessfully validated after lower casing "
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_DNSSEC,
+ DNS_LOGMODULE_DNSSEC, ISC_LOG_DEBUG(1),
+ "successfully validated after lower casing "
"signer '%s'", namebuf);
inc_stat(dns_dnssecstats_downcase);
} else if (ret == ISC_R_SUCCESS)
@@ -684,6 +692,8 @@ dns_dnssec_findzonekeys2(dns_db_t *db, dns_dbversion_t *ver,
pubkey = NULL;
dns_rdataset_current(&rdataset, &rdata);
RETERR(dns_dnssec_keyfromrdata(name, &rdata, mctx, &pubkey));
+ dst_key_setttl(pubkey, rdataset.ttl);
+
if (!is_zone_key(pubkey) ||
(dst_key_flags(pubkey) & DNS_KEYTYPE_NOAUTH) != 0)
goto next;
@@ -761,6 +771,12 @@ dns_dnssec_findzonekeys2(dns_db_t *db, dns_dbversion_t *ver,
goto next;
}
+ /*
+ * Whatever the key's default TTL may have
+ * been, the rdataset TTL takes priority.
+ */
+ dst_key_setttl(keys[count], rdataset.ttl);
+
if ((dst_key_flags(keys[count]) & DNS_KEYTYPE_NOAUTH) != 0) {
/* We should never get here. */
dst_key_free(&keys[count]);
@@ -854,7 +870,7 @@ dns_dnssec_signmessage(dns_message_t *msg, dst_key_t *key) {
isc_buffer_init(&databuf, data, sizeof(data));
- RETERR(dst_context_create(key, mctx, &ctx));
+ RETERR(dst_context_create2(key, mctx, DNS_LOGCATEGORY_DNSSEC, &ctx));
/*
* Digest the fields of the SIG - we can cheat and use
@@ -1004,7 +1020,7 @@ dns_dnssec_verifymessage(isc_buffer_t *source, dns_message_t *msg,
goto failure;
}
- RETERR(dst_context_create(key, mctx, &ctx));
+ RETERR(dst_context_create2(key, mctx, DNS_LOGCATEGORY_DNSSEC, &ctx));
/*
* Digest the SIG(0) record, except for the signature.
@@ -1510,6 +1526,7 @@ dns_dnssec_keylistfromrdataset(dns_name_t *origin,
dns_rdata_reset(&rdata);
dns_rdataset_current(&keys, &rdata);
RETERR(dns_dnssec_keyfromrdata(origin, &rdata, mctx, &pubkey));
+ dst_key_setttl(pubkey, keys.ttl);
if (!is_zone_key(pubkey) ||
(dst_key_flags(pubkey) & DNS_KEYTYPE_NOAUTH) != 0)
@@ -1582,6 +1599,12 @@ dns_dnssec_keylistfromrdataset(dns_name_t *origin,
if ((dst_key_flags(privkey) & DNS_KEYTYPE_NOAUTH) != 0)
goto skip;
+ /*
+ * Whatever the key's default TTL may have
+ * been, the rdataset TTL takes priority.
+ */
+ dst_key_setttl(privkey, dst_key_getttl(pubkey));
+
RETERR(addkey(keylist, &privkey, savekeys, mctx));
skip:
if (pubkey != NULL)
@@ -1707,16 +1730,22 @@ remove_key(dns_diff_t *diff, dns_dnsseckey_t *key, dns_name_t *origin,
isc_result_t
dns_dnssec_updatekeys(dns_dnsseckeylist_t *keys, dns_dnsseckeylist_t *newkeys,
dns_dnsseckeylist_t *removed, dns_name_t *origin,
- dns_ttl_t ttl, dns_diff_t *diff, isc_boolean_t allzsk,
- isc_mem_t *mctx, void (*report)(const char *, ...))
+ dns_ttl_t hint_ttl, dns_diff_t *diff,
+ isc_boolean_t allzsk, isc_mem_t *mctx,
+ void (*report)(const char *, ...))
{
isc_result_t result;
dns_dnsseckey_t *key, *key1, *key2, *next;
+ isc_boolean_t found_ttl = ISC_FALSE;
+ dns_ttl_t ttl = hint_ttl;
/*
* First, look through the existing key list to find keys
* supplied from the command line which are not in the zone.
* Update the zone to include them.
+ *
+ * Also, if there are keys published in the zone already,
+ * use their TTL for all subsequent published keys.
*/
for (key = ISC_LIST_HEAD(*keys);
key != NULL;
@@ -1726,6 +1755,30 @@ dns_dnssec_updatekeys(dns_dnsseckeylist_t *keys, dns_dnsseckeylist_t *newkeys,
RETERR(publish_key(diff, key, origin, ttl,
mctx, allzsk, report));
}
+ if (key->source == dns_keysource_zoneapex) {
+ ttl = dst_key_getttl(key->key);
+ found_ttl = ISC_TRUE;
+ }
+ }
+
+ /*
+ * If there were no existing keys, use the smallest nonzero
+ * TTL of the keys found in the repository.
+ */
+ if (!found_ttl && !ISC_LIST_EMPTY(*newkeys)) {
+ dns_ttl_t shortest = 0;
+
+ for (key = ISC_LIST_HEAD(*newkeys);
+ key != NULL;
+ key = ISC_LIST_NEXT(key, link)) {
+ dns_ttl_t thisttl = dst_key_getttl(key->key);
+ if (thisttl != 0 &&
+ (shortest == 0 || thisttl < shortest))
+ shortest = thisttl;
+ }
+
+ if (shortest != 0)
+ ttl = shortest;
}
/*
diff --git a/contrib/bind9/lib/dns/dst_api.c b/contrib/bind9/lib/dns/dst_api.c
index f5dd89ad4f5e..98607246effc 100644
--- a/contrib/bind9/lib/dns/dst_api.c
+++ b/contrib/bind9/lib/dns/dst_api.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -31,7 +31,7 @@
/*
* Principal Author: Brian Wellington
- * $Id$
+ * $Id: dst_api.c,v 1.65 2011/10/20 21:20:02 marka Exp $
*/
/*! \file */
@@ -58,6 +58,8 @@
#include <isc/util.h>
#include <isc/file.h>
+#define DST_KEY_INTERNAL
+
#include <dns/fixedname.h>
#include <dns/keyvalues.h>
#include <dns/name.h>
@@ -92,6 +94,7 @@ static dst_key_t * get_key_struct(dns_name_t *name,
unsigned int protocol,
unsigned int bits,
dns_rdataclass_t rdclass,
+ dns_ttl_t ttl,
isc_mem_t *mctx);
static isc_result_t write_public_key(const dst_key_t *key, int type,
const char *directory);
@@ -276,6 +279,13 @@ dst_algorithm_supported(unsigned int alg) {
isc_result_t
dst_context_create(dst_key_t *key, isc_mem_t *mctx, dst_context_t **dctxp) {
+ return (dst_context_create2(key, mctx,
+ DNS_LOGCATEGORY_GENERAL, dctxp));
+}
+
+isc_result_t
+dst_context_create2(dst_key_t *key, isc_mem_t *mctx,
+ isc_logcategory_t *category, dst_context_t **dctxp) {
dst_context_t *dctx;
isc_result_t result;
@@ -294,6 +304,7 @@ dst_context_create(dst_key_t *key, isc_mem_t *mctx, dst_context_t **dctxp) {
return (ISC_R_NOMEMORY);
dctx->key = key;
dctx->mctx = mctx;
+ dctx->category = category;
result = key->func->createctx(key, dctx);
if (result != ISC_R_SUCCESS) {
isc_mem_put(mctx, dctx, sizeof(dst_context_t));
@@ -363,6 +374,25 @@ dst_context_verify(dst_context_t *dctx, isc_region_t *sig) {
}
isc_result_t
+dst_context_verify2(dst_context_t *dctx, unsigned int maxbits,
+ isc_region_t *sig)
+{
+ REQUIRE(VALID_CTX(dctx));
+ REQUIRE(sig != NULL);
+
+ CHECKALG(dctx->key->key_alg);
+ if (dctx->key->keydata.generic == NULL)
+ return (DST_R_NULLKEY);
+ if (dctx->key->func->verify == NULL &&
+ dctx->key->func->verify2 == NULL)
+ return (DST_R_NOTPUBLICKEY);
+
+ return (dctx->key->func->verify2 != NULL ?
+ dctx->key->func->verify2(dctx, maxbits, sig) :
+ dctx->key->func->verify(dctx, sig));
+}
+
+isc_result_t
dst_key_computesecret(const dst_key_t *pub, const dst_key_t *priv,
isc_buffer_t *secret)
{
@@ -495,8 +525,7 @@ dst_key_fromnamedfile(const char *filename, const char *dirname,
result = dst_key_read_public(newfilename, type, mctx, &pubkey);
isc_mem_put(mctx, newfilename, newfilenamelen);
newfilename = NULL;
- if (result != ISC_R_SUCCESS)
- return (result);
+ RETERR(result);
if ((type & (DST_TYPE_PRIVATE | DST_TYPE_PUBLIC)) == DST_TYPE_PUBLIC ||
(pubkey->key_flags & DNS_KEYFLAG_TYPEMASK) == DNS_KEYTYPE_NOKEY) {
@@ -518,7 +547,7 @@ dst_key_fromnamedfile(const char *filename, const char *dirname,
key = get_key_struct(pubkey->key_name, pubkey->key_alg,
pubkey->key_flags, pubkey->key_proto, 0,
- pubkey->key_class, mctx);
+ pubkey->key_class, pubkey->key_ttl, mctx);
if (key == NULL) {
dst_key_free(&pubkey);
return (ISC_R_NOMEMORY);
@@ -560,7 +589,8 @@ dst_key_fromnamedfile(const char *filename, const char *dirname,
isc_mem_put(mctx, newfilename, newfilenamelen);
if (lex != NULL)
isc_lex_destroy(&lex);
- dst_key_free(&key);
+ if (key != NULL)
+ dst_key_free(&key);
return (result);
}
@@ -718,7 +748,7 @@ dst_key_fromgssapi(dns_name_t *name, gss_ctx_id_t gssctx, isc_mem_t *mctx,
REQUIRE(keyp != NULL && *keyp == NULL);
key = get_key_struct(name, DST_ALG_GSSAPI, 0, DNS_KEYPROTO_DNSSEC,
- 0, dns_rdataclass_in, mctx);
+ 0, dns_rdataclass_in, 0, mctx);
if (key == NULL)
return (ISC_R_NOMEMORY);
@@ -740,6 +770,40 @@ out:
}
isc_result_t
+dst_key_buildinternal(dns_name_t *name, unsigned int alg,
+ unsigned int bits, unsigned int flags,
+ unsigned int protocol, dns_rdataclass_t rdclass,
+ void *data, isc_mem_t *mctx, dst_key_t **keyp)
+{
+ dst_key_t *key;
+ isc_result_t result;
+
+ REQUIRE(dst_initialized == ISC_TRUE);
+ REQUIRE(dns_name_isabsolute(name));
+ REQUIRE(mctx != NULL);
+ REQUIRE(keyp != NULL && *keyp == NULL);
+ REQUIRE(data != NULL);
+
+ CHECKALG(alg);
+
+ key = get_key_struct(name, alg, flags, protocol, bits, rdclass,
+ 0, mctx);
+ if (key == NULL)
+ return (ISC_R_NOMEMORY);
+
+ key->keydata.generic = data;
+
+ result = computeid(key);
+ if (result != ISC_R_SUCCESS) {
+ dst_key_free(&key);
+ return (result);
+ }
+
+ *keyp = key;
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
dst_key_fromlabel(dns_name_t *name, int alg, unsigned int flags,
unsigned int protocol, dns_rdataclass_t rdclass,
const char *engine, const char *label, const char *pin,
@@ -756,7 +820,7 @@ dst_key_fromlabel(dns_name_t *name, int alg, unsigned int flags,
CHECKALG(alg);
- key = get_key_struct(name, alg, flags, protocol, 0, rdclass, mctx);
+ key = get_key_struct(name, alg, flags, protocol, 0, rdclass, 0, mctx);
if (key == NULL)
return (ISC_R_NOMEMORY);
@@ -810,7 +874,8 @@ dst_key_generate2(dns_name_t *name, unsigned int alg,
CHECKALG(alg);
- key = get_key_struct(name, alg, flags, protocol, bits, rdclass, mctx);
+ key = get_key_struct(name, alg, flags, protocol, bits,
+ rdclass, 0, mctx);
if (key == NULL)
return (ISC_R_NOMEMORY);
@@ -1070,7 +1135,7 @@ dst_key_free(dst_key_t **keyp) {
isc_buffer_free(&key->key_tkeytoken);
}
memset(key, 0, sizeof(dst_key_t));
- isc_mem_put(mctx, key, sizeof(dst_key_t));
+ isc_mem_putanddetach(&mctx, key, sizeof(dst_key_t));
*keyp = NULL;
}
@@ -1190,7 +1255,7 @@ dst_key_dump(dst_key_t *key, isc_mem_t *mctx, char **buffer, int *length) {
REQUIRE(length != NULL && *length == 0);
REQUIRE(VALID_KEY(key));
- if (key->func->isprivate == NULL)
+ if (key->func->dump == NULL)
return (ISC_R_NOTIMPLEMENTED);
return (key->func->dump(key, mctx, buffer, length));
}
@@ -1212,7 +1277,7 @@ dst_key_restore(dns_name_t *name, unsigned int alg, unsigned int flags,
if (dst_t_func[alg]->restore == NULL)
return (ISC_R_NOTIMPLEMENTED);
- key = get_key_struct(name, alg, flags, protocol, 0, rdclass, mctx);
+ key = get_key_struct(name, alg, flags, protocol, 0, rdclass, 0, mctx);
if (key == NULL)
return (ISC_R_NOMEMORY);
@@ -1236,7 +1301,7 @@ static dst_key_t *
get_key_struct(dns_name_t *name, unsigned int alg,
unsigned int flags, unsigned int protocol,
unsigned int bits, dns_rdataclass_t rdclass,
- isc_mem_t *mctx)
+ dns_ttl_t ttl, isc_mem_t *mctx)
{
dst_key_t *key;
isc_result_t result;
@@ -1247,35 +1312,36 @@ get_key_struct(dns_name_t *name, unsigned int alg,
return (NULL);
memset(key, 0, sizeof(dst_key_t));
- key->magic = KEY_MAGIC;
-
- result = isc_refcount_init(&key->refs, 1);
- if (result != ISC_R_SUCCESS) {
- isc_mem_put(mctx, key, sizeof(dst_key_t));
- return (NULL);
- }
key->key_name = isc_mem_get(mctx, sizeof(dns_name_t));
if (key->key_name == NULL) {
- isc_refcount_destroy(&key->refs);
isc_mem_put(mctx, key, sizeof(dst_key_t));
return (NULL);
}
+
dns_name_init(key->key_name, NULL);
result = dns_name_dup(name, mctx, key->key_name);
if (result != ISC_R_SUCCESS) {
- isc_refcount_destroy(&key->refs);
isc_mem_put(mctx, key->key_name, sizeof(dns_name_t));
isc_mem_put(mctx, key, sizeof(dst_key_t));
return (NULL);
}
+
+ result = isc_refcount_init(&key->refs, 1);
+ if (result != ISC_R_SUCCESS) {
+ dns_name_free(key->key_name, mctx);
+ isc_mem_put(mctx, key->key_name, sizeof(dns_name_t));
+ isc_mem_put(mctx, key, sizeof(dst_key_t));
+ return (NULL);
+ }
+ isc_mem_attach(mctx, &key->mctx);
key->key_alg = alg;
key->key_flags = flags;
key->key_proto = protocol;
- key->mctx = mctx;
key->keydata.generic = NULL;
key->key_size = bits;
key->key_class = rdclass;
+ key->key_ttl = ttl;
key->func = dst_t_func[alg];
key->fmt_major = 0;
key->fmt_minor = 0;
@@ -1283,6 +1349,7 @@ get_key_struct(dns_name_t *name, unsigned int alg,
key->times[i] = 0;
key->timeset[i] = ISC_FALSE;
}
+ key->magic = KEY_MAGIC;
return (key);
}
@@ -1303,7 +1370,7 @@ dst_key_read_public(const char *filename, int type,
unsigned int opt = ISC_LEXOPT_DNSMULTILINE;
dns_rdataclass_t rdclass = dns_rdataclass_in;
isc_lexspecials_t specials;
- isc_uint32_t ttl;
+ isc_uint32_t ttl = 0;
isc_result_t result;
dns_rdatatype_t keytype;
@@ -1404,6 +1471,8 @@ dst_key_read_public(const char *filename, int type,
if (ret != ISC_R_SUCCESS)
goto cleanup;
+ dst_key_setttl(*keyp, ttl);
+
cleanup:
if (lex != NULL)
isc_lex_destroy(&lex);
@@ -1572,9 +1641,11 @@ write_public_key(const dst_key_t *key, int type, const char *directory) {
/* Now print the actual key */
ret = dns_name_print(key->key_name, fp);
-
fprintf(fp, " ");
+ if (key->key_ttl != 0)
+ fprintf(fp, "%d ", key->key_ttl);
+
isc_buffer_usedregion(&classb, &r);
if ((unsigned) fwrite(r.base, 1, r.length, fp) != r.length)
ret = DST_R_WRITEERROR;
@@ -1666,7 +1737,7 @@ frombuffer(dns_name_t *name, unsigned int alg, unsigned int flags,
REQUIRE(mctx != NULL);
REQUIRE(keyp != NULL && *keyp == NULL);
- key = get_key_struct(name, alg, flags, protocol, 0, rdclass, mctx);
+ key = get_key_struct(name, alg, flags, protocol, 0, rdclass, 0, mctx);
if (key == NULL)
return (ISC_R_NOMEMORY);
diff --git a/contrib/bind9/lib/dns/dst_internal.h b/contrib/bind9/lib/dns/dst_internal.h
index 2f4f946a3652..c3e8e29a46e8 100644
--- a/contrib/bind9/lib/dns/dst_internal.h
+++ b/contrib/bind9/lib/dns/dst_internal.h
@@ -29,7 +29,7 @@
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: dst_internal.h,v 1.31 2011/10/20 21:20:02 marka Exp $ */
#ifndef DST_DST_INTERNAL_H
#define DST_DST_INTERNAL_H 1
@@ -98,6 +98,7 @@ struct dst_key {
revoked */
isc_uint16_t key_bits; /*%< hmac digest bits */
dns_rdataclass_t key_class; /*%< class of the key record */
+ dns_ttl_t key_ttl; /*%< default/initial dnskey ttl */
isc_mem_t *mctx; /*%< memory context */
char *engine; /*%< engine name (HSM) */
char *label; /*%< engine label (HSM) */
@@ -137,6 +138,7 @@ struct dst_context {
unsigned int magic;
dst_key_t *key;
isc_mem_t *mctx;
+ isc_logcategory_t *category;
union {
void *generic;
dst_gssapi_signverifyctx_t *gssctx;
@@ -169,6 +171,8 @@ struct dst_func {
*/
isc_result_t (*sign)(dst_context_t *dctx, isc_buffer_t *sig);
isc_result_t (*verify)(dst_context_t *dctx, const isc_region_t *sig);
+ isc_result_t (*verify2)(dst_context_t *dctx, int maxbits,
+ const isc_region_t *sig);
isc_result_t (*computesecret)(const dst_key_t *pub,
const dst_key_t *priv,
isc_buffer_t *secret);
diff --git a/contrib/bind9/lib/dns/dst_openssl.h b/contrib/bind9/lib/dns/dst_openssl.h
index a30fd6a461e3..99a43ef948ac 100644
--- a/contrib/bind9/lib/dns/dst_openssl.h
+++ b/contrib/bind9/lib/dns/dst_openssl.h
@@ -15,12 +15,13 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: dst_openssl.h,v 1.11 2011/03/12 04:59:48 tbox Exp $ */
#ifndef DST_OPENSSL_H
#define DST_OPENSSL_H 1
#include <isc/lang.h>
+#include <isc/log.h>
#include <isc/result.h>
#include <openssl/err.h>
@@ -42,6 +43,10 @@ dst__openssl_toresult(isc_result_t fallback);
isc_result_t
dst__openssl_toresult2(const char *funcname, isc_result_t fallback);
+isc_result_t
+dst__openssl_toresult3(isc_logcategory_t *category,
+ const char *funcname, isc_result_t fallback);
+
#ifdef USE_ENGINE
ENGINE *
dst__openssl_getengine(const char *engine);
diff --git a/contrib/bind9/lib/dns/dst_parse.c b/contrib/bind9/lib/dns/dst_parse.c
index 95896c4a8870..ca43cb3d1241 100644
--- a/contrib/bind9/lib/dns/dst_parse.c
+++ b/contrib/bind9/lib/dns/dst_parse.c
@@ -31,7 +31,7 @@
/*%
* Principal Author: Brian Wellington
- * $Id$
+ * $Id: dst_parse.c,v 1.29 2011/08/18 23:46:35 tbox Exp $
*/
#include <config.h>
diff --git a/contrib/bind9/lib/dns/ecdb.c b/contrib/bind9/lib/dns/ecdb.c
index f1a833fe1403..8b3f7740081b 100644
--- a/contrib/bind9/lib/dns/ecdb.c
+++ b/contrib/bind9/lib/dns/ecdb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: ecdb.c,v 1.10 2011/12/20 00:06:53 marka Exp $ */
#include "config.h"
@@ -80,8 +80,11 @@ typedef struct rdatasetheader {
/* Copied from rbtdb.c */
#define RDATASET_ATTR_NXDOMAIN 0x0010
+#define RDATASET_ATTR_NEGATIVE 0x0100
#define NXDOMAIN(header) \
(((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0)
+#define NEGATIVE(header) \
+ (((header)->attributes & RDATASET_ATTR_NEGATIVE) != 0)
static isc_result_t dns_ecdb_create(isc_mem_t *mctx, dns_name_t *origin,
dns_dbtype_t type,
@@ -406,6 +409,8 @@ bind_rdataset(dns_ecdb_t *ecdb, dns_ecdbnode_t *node,
rdataset->trust = header->trust;
if (NXDOMAIN(header))
rdataset->attributes |= DNS_RDATASETATTR_NXDOMAIN;
+ if (NEGATIVE(header))
+ rdataset->attributes |= DNS_RDATASETATTR_NEGATIVE;
rdataset->private1 = ecdb;
rdataset->private2 = node;
@@ -469,6 +474,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
header->attributes = 0;
if ((rdataset->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
header->attributes |= RDATASET_ATTR_NXDOMAIN;
+ if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0)
+ header->attributes |= RDATASET_ATTR_NEGATIVE;
ISC_LINK_INIT(header, link);
ISC_LIST_APPEND(ecdbnode->rdatasets, header, link);
@@ -576,7 +583,9 @@ static dns_dbmethods_t ecdb_methods = {
NULL, /* isdnssec */
NULL, /* getrrsetstats */
NULL, /* rpz_enabled */
- NULL /* rpz_findips */
+ NULL, /* rpz_findips */
+ NULL, /* findnodeext */
+ NULL /* findext */
};
static isc_result_t
diff --git a/contrib/bind9/lib/dns/gen.c b/contrib/bind9/lib/dns/gen.c
index a0b4df37593f..6b533dd23f9c 100644
--- a/contrib/bind9/lib/dns/gen.c
+++ b/contrib/bind9/lib/dns/gen.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,8 +15,6 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gen.c,v 1.85 2009/12/04 22:06:37 tbox Exp $ */
-
/*! \file */
#ifdef WIN32
@@ -24,6 +22,10 @@
* Silence compiler warnings about using strcpy and friends.
*/
#define _CRT_SECURE_NO_DEPRECATE 1
+/*
+ * We use snprintf.
+ */
+#define snprintf _snprintf
#endif
#include <sys/types.h>
@@ -41,7 +43,12 @@
#include "gen-unix.h"
#endif
-#define TYPECLASSLEN 21
+#define INSIST(cond) \
+ if (!(cond)) { \
+ fprintf(stderr, "%s:%d: INSIST(%s)\n", \
+ __FILE__, __LINE__, #cond); \
+ abort(); \
+ }
#define FROMTEXTARGS "rdclass, type, lexer, origin, options, target, callbacks"
#define FROMTEXTCLASS "rdclass"
@@ -103,7 +110,7 @@
#define CHECKNAMESTYPE "rdata->type"
#define CHECKNAMESDEF "result = ISC_TRUE"
-const char copyright[] =
+static const char copyright[] =
"/*\n"
" * Copyright (C) 2004%s Internet Systems Consortium, Inc. (\"ISC\")\n"
" * Copyright (C) 1998-2003 Internet Software Consortium.\n"
@@ -131,53 +138,59 @@ const char copyright[] =
"/*! \\file */\n"
"\n";
+#define STR_EXPAND(tok) #tok
+#define STR(tok) STR_EXPAND(tok)
+
#define TYPENAMES 256
+#define TYPECLASSLEN 20 /* DNS mnemonic size. Must be less than 100. */
+#define TYPECLASSBUF (TYPECLASSLEN + 1)
+#define TYPECLASSFMT "%" STR(TYPECLASSLEN) "[-0-9a-z]_%d"
+#define ATTRIBUTESIZE 256
+#define DIRNAMESIZE 256
-struct cc {
+static struct cc {
struct cc *next;
int rdclass;
- char classname[TYPECLASSLEN];
+ char classname[TYPECLASSBUF];
} *classes;
-struct tt {
+static struct tt {
struct tt *next;
int rdclass;
int type;
- char classname[TYPECLASSLEN];
- char typename[TYPECLASSLEN];
- char dirname[256]; /* XXX Should be max path length */
+ char classname[TYPECLASSBUF];
+ char typename[TYPECLASSBUF];
+ char dirname[DIRNAMESIZE]; /* XXX Should be max path length */
} *types;
-struct ttnam {
- char typename[TYPECLASSLEN];
- char macroname[TYPECLASSLEN];
- char attr[256];
+static struct ttnam {
+ char typename[TYPECLASSBUF];
+ char macroname[TYPECLASSBUF];
+ char attr[ATTRIBUTESIZE];
unsigned int sorted;
int type;
} typenames[TYPENAMES];
-int maxtype = -1;
+static int maxtype = -1;
-char *
+static char *
upper(char *);
-char *
+static char *
funname(const char *, char *);
-void
+static void
doswitch(const char *, const char *, const char *, const char *,
const char *, const char *);
-void
-dodecl(char *, char *, char *);
-void
+static void
add(int, const char *, int, const char *, const char *);
-void
+static void
sd(int, const char *, const char *, char);
-void
+static void
insert_into_typenames(int, const char *, const char *);
/*%
* If you use more than 10 of these in, say, a printf(), you'll have problems.
*/
-char *
+static char *
upper(char *s) {
static int buf_to_use = 0;
static char buf[10][256];
@@ -197,11 +210,12 @@ upper(char *s) {
return (buf[buf_to_use]);
}
-char *
+static char *
funname(const char *s, char *buf) {
char *b = buf;
char c;
+ INSIST(strlen(s) < TYPECLASSBUF);
while ((c = *s++)) {
*b++ = (c == '-') ? '_' : c;
}
@@ -209,7 +223,7 @@ funname(const char *s, char *buf) {
return (buf);
}
-void
+static void
doswitch(const char *name, const char *function, const char *args,
const char *tsw, const char *csw, const char *res)
{
@@ -217,7 +231,7 @@ doswitch(const char *name, const char *function, const char *args,
int first = 1;
int lasttype = 0;
int subswitch = 0;
- char buf1[TYPECLASSLEN], buf2[TYPECLASSLEN];
+ char buf1[TYPECLASSBUF], buf2[TYPECLASSBUF];
const char *result = " result =";
if (res == NULL)
@@ -280,26 +294,6 @@ doswitch(const char *name, const char *function, const char *args,
}
}
-void
-dodecl(char *type, char *function, char *args) {
- struct tt *tt;
- char buf1[TYPECLASSLEN], buf2[TYPECLASSLEN];
-
- fputs("\n", stdout);
- for (tt = types; tt; tt = tt->next)
- if (tt->rdclass)
- fprintf(stdout,
- "static inline %s %s_%s_%s(%s);\n",
- type, function,
- funname(tt->classname, buf1),
- funname(tt->typename, buf2), args);
- else
- fprintf(stdout,
- "static inline %s %s_%s(%s);\n",
- type, function,
- funname(tt->typename, buf1), args);
-}
-
static struct ttnam *
find_typename(int type) {
int i;
@@ -312,12 +306,13 @@ find_typename(int type) {
return (NULL);
}
-void
+static void
insert_into_typenames(int type, const char *typename, const char *attr) {
struct ttnam *ttn = NULL;
- int c, i;
+ int c, i, n;
char tmp[256];
+ INSIST(strlen(typename) < TYPECLASSBUF);
for (i = 0; i < TYPENAMES; i++) {
if (typenames[i].typename[0] != 0 &&
typenames[i].type == type &&
@@ -340,10 +335,10 @@ insert_into_typenames(int type, const char *typename, const char *attr) {
typename);
exit(1);
}
- strcpy(ttn->typename, typename);
+ strncpy(ttn->typename, typename, sizeof(ttn->typename));
ttn->type = type;
- strcpy(ttn->macroname, ttn->typename);
+ strncpy(ttn->macroname, ttn->typename, sizeof(ttn->macroname));
c = strlen(ttn->macroname);
while (c > 0) {
if (ttn->macroname[c - 1] == '-')
@@ -352,7 +347,9 @@ insert_into_typenames(int type, const char *typename, const char *attr) {
}
if (attr == NULL) {
- sprintf(tmp, "RRTYPE_%s_ATTRIBUTES", upper(ttn->macroname));
+ n = snprintf(tmp, sizeof(tmp),
+ "RRTYPE_%s_ATTRIBUTES", upper(ttn->macroname));
+ INSIST(n > 0 && (unsigned)n < sizeof(tmp));
attr = tmp;
}
@@ -367,13 +364,13 @@ insert_into_typenames(int type, const char *typename, const char *attr) {
attr, typename);
exit(1);
}
- strcpy(ttn->attr, attr);
+ strncpy(ttn->attr, attr, sizeof(ttn->attr));
ttn->sorted = 0;
if (maxtype < type)
maxtype = type;
}
-void
+static void
add(int rdclass, const char *classname, int type, const char *typename,
const char *dirname)
{
@@ -382,6 +379,10 @@ add(int rdclass, const char *classname, int type, const char *typename,
struct cc *newcc;
struct cc *cc, *oldcc;
+ INSIST(strlen(typename) < TYPECLASSBUF);
+ INSIST(strlen(classname) < TYPECLASSBUF);
+ INSIST(strlen(dirname) < DIRNAMESIZE);
+
insert_into_typenames(type, typename, NULL);
if (newtt == NULL) {
@@ -392,11 +393,11 @@ add(int rdclass, const char *classname, int type, const char *typename,
newtt->next = NULL;
newtt->rdclass = rdclass;
newtt->type = type;
- strcpy(newtt->classname, classname);
- strcpy(newtt->typename, typename);
+ strncpy(newtt->classname, classname, sizeof(newtt->classname));
+ strncpy(newtt->typename, typename, sizeof(newtt->typename));
if (strncmp(dirname, "./", 2) == 0)
dirname += 2;
- strcpy(newtt->dirname, dirname);
+ strncpy(newtt->dirname, dirname, sizeof(newtt->dirname));
tt = types;
oldtt = NULL;
@@ -429,8 +430,12 @@ add(int rdclass, const char *classname, int type, const char *typename,
return;
newcc = (struct cc *)malloc(sizeof(*newcc));
+ if (newcc == NULL) {
+ fprintf(stderr, "malloc() failed\n");
+ exit(1);
+ }
newcc->rdclass = rdclass;
- strcpy(newcc->classname, classname);
+ strncpy(newcc->classname, classname, sizeof(newcc->classname));
cc = classes;
oldcc = NULL;
@@ -451,25 +456,25 @@ add(int rdclass, const char *classname, int type, const char *typename,
classes = newcc;
}
-void
+static void
sd(int rdclass, const char *classname, const char *dirname, char filetype) {
- char buf[sizeof("01234567890123456789_65535.h")];
- char fmt[sizeof("%20[-0-9a-z]_%d.h")];
- int type;
- char typename[TYPECLASSLEN];
+ char buf[TYPECLASSLEN + sizeof("_65535.h")];
+ char typename[TYPECLASSBUF];
+ int type, n;
isc_dir_t dir;
if (!start_directory(dirname, &dir))
return;
- sprintf(fmt,"%s%c", "%20[-0-9a-z]_%d.", filetype);
while (next_file(&dir)) {
- if (sscanf(dir.filename, fmt, typename, &type) != 2)
+ if (sscanf(dir.filename, TYPECLASSFMT, typename, &type) != 2)
continue;
if ((type > 65535) || (type < 0))
continue;
- sprintf(buf, "%s_%d.%c", typename, type, filetype);
+ n = snprintf(buf, sizeof(buf), "%s_%d.%c", typename,
+ type, filetype);
+ INSIST(n > 0 && (unsigned)n < sizeof(buf));
if (strcmp(buf, dir.filename) != 0)
continue;
add(rdclass, classname, type, typename, dirname);
@@ -496,10 +501,10 @@ HASH(char *string) {
int
main(int argc, char **argv) {
- char buf[256]; /* XXX Should be max path length */
- char srcdir[256]; /* XXX Should be max path length */
+ char buf[DIRNAMESIZE]; /* XXX Should be max path length */
+ char srcdir[DIRNAMESIZE]; /* XXX Should be max path length */
int rdclass;
- char classname[TYPECLASSLEN];
+ char classname[TYPECLASSBUF];
struct tt *tt;
struct cc *cc;
struct ttnam *ttn, *ttn2;
@@ -513,8 +518,8 @@ main(int argc, char **argv) {
int type_enum = 0;
int structs = 0;
int depend = 0;
- int c, i, j;
- char buf1[TYPECLASSLEN];
+ int c, i, j, n;
+ char buf1[TYPECLASSBUF];
char filetype = 'c';
FILE *fd;
char *prefix = NULL;
@@ -561,7 +566,16 @@ main(int argc, char **argv) {
filetype = 'h';
break;
case 's':
- sprintf(srcdir, "%s/", isc_commandline_argument);
+ if (strlen(isc_commandline_argument) >
+ DIRNAMESIZE - 2 * TYPECLASSLEN -
+ sizeof("/rdata/_65535_65535")) {
+ fprintf(stderr, "\"%s\" too long\n",
+ isc_commandline_argument);
+ exit(1);
+ }
+ n = snprintf(srcdir, sizeof(srcdir), "%s/",
+ isc_commandline_argument);
+ INSIST(n > 0 && (unsigned)n < sizeof(srcdir));
break;
case 'F':
file = isc_commandline_argument;
@@ -576,31 +590,37 @@ main(int argc, char **argv) {
exit(1);
}
- sprintf(buf, "%srdata", srcdir);
+ n = snprintf(buf, sizeof(buf), "%srdata", srcdir);
+ INSIST(n > 0 && (unsigned)n < sizeof(srcdir));
if (!start_directory(buf, &dir))
exit(1);
while (next_file(&dir)) {
- if (sscanf(dir.filename, "%10[0-9a-z]_%d",
- classname, &rdclass) != 2)
+ if (sscanf(dir.filename, TYPECLASSFMT, classname,
+ &rdclass) != 2)
continue;
if ((rdclass > 65535) || (rdclass < 0))
continue;
- sprintf(buf, "%srdata/%s_%d", srcdir, classname, rdclass);
+ n = snprintf(buf, sizeof(buf), "%srdata/%s_%d",
+ srcdir, classname, rdclass);
+ INSIST(n > 0 && (unsigned)n < sizeof(buf));
if (strcmp(buf + 6 + strlen(srcdir), dir.filename) != 0)
continue;
sd(rdclass, classname, buf, filetype);
}
end_directory(&dir);
- sprintf(buf, "%srdata/generic", srcdir);
+ n = snprintf(buf, sizeof(buf), "%srdata/generic", srcdir);
+ INSIST(n > 0 && (unsigned)n < sizeof(srcdir));
sd(0, "", buf, filetype);
if (time(&now) != -1) {
- if ((tm = localtime(&now)) != NULL && tm->tm_year > 104)
- sprintf(year, "-%d", tm->tm_year + 1900);
- else
+ if ((tm = localtime(&now)) != NULL && tm->tm_year > 104) {
+ n = snprintf(year, sizeof(year), "-%d",
+ tm->tm_year + 1900);
+ INSIST(n > 0 && (unsigned)n < sizeof(year));
+ } else
year[0] = 0;
} else
year[0] = 0;
@@ -862,7 +882,7 @@ main(int argc, char **argv) {
}
}
for (tt = types; tt != NULL; tt = tt->next) {
- sprintf(buf, "%s/%s_%d.h",
+ snprintf(buf, sizeof(buf), "%s/%s_%d.h",
tt->dirname, tt->typename, tt->type);
if ((fd = fopen(buf,"r")) != NULL) {
while (fgets(buf, sizeof(buf), fd) != NULL)
diff --git a/contrib/bind9/lib/dns/gssapi_link.c b/contrib/bind9/lib/dns/gssapi_link.c
index a992a8953f20..5ad81cd80ced 100644
--- a/contrib/bind9/lib/dns/gssapi_link.c
+++ b/contrib/bind9/lib/dns/gssapi_link.c
@@ -16,7 +16,7 @@
*/
/*
- * $Id$
+ * $Id: gssapi_link.c,v 1.17 2011/03/28 05:32:16 marka Exp $
*/
#include <config.h>
@@ -362,6 +362,7 @@ static dst_func_t gssapi_functions = {
gssapi_adddata,
gssapi_sign,
gssapi_verify,
+ NULL, /*%< verify2 */
NULL, /*%< computesecret */
gssapi_compare,
NULL, /*%< paramcompare */
diff --git a/contrib/bind9/lib/dns/gssapictx.c b/contrib/bind9/lib/dns/gssapictx.c
index ee5be561673b..a8c5900e6d14 100644
--- a/contrib/bind9/lib/dns/gssapictx.c
+++ b/contrib/bind9/lib/dns/gssapictx.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: gssapictx.c,v 1.29 2011/08/29 06:33:25 marka Exp $ */
#include <config.h>
@@ -541,7 +541,7 @@ gss_err_message(isc_mem_t *mctx, isc_uint32_t major, isc_uint32_t minor,
}
estr = gss_error_tostring(major, minor, buf, sizeof(buf));
- if (estr)
+ if (estr != NULL)
(*err_message) = isc_mem_strdup(mctx, estr);
}
#endif
@@ -597,8 +597,12 @@ dst_gssapi_initctx(dns_name_t *name, isc_buffer_t *intoken,
if (gret != GSS_S_COMPLETE && gret != GSS_S_CONTINUE_NEEDED) {
gss_err_message(mctx, gret, minor, err_message);
- gss_log(3, "Failure initiating security context: %s",
- *err_message);
+ if (err_message != NULL && *err_message != NULL)
+ gss_log(3, "Failure initiating security context: %s",
+ *err_message);
+ else
+ gss_log(3, "Failure initiating security context");
+
result = ISC_R_FAILURE;
goto out;
}
diff --git a/contrib/bind9/lib/dns/hmac_link.c b/contrib/bind9/lib/dns/hmac_link.c
index bc0e9a04ed07..256abb6eb475 100644
--- a/contrib/bind9/lib/dns/hmac_link.c
+++ b/contrib/bind9/lib/dns/hmac_link.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -313,6 +313,7 @@ static dst_func_t hmacmd5_functions = {
hmacmd5_adddata,
hmacmd5_sign,
hmacmd5_verify,
+ NULL, /*%< verify2 */
NULL, /*%< computesecret */
hmacmd5_compare,
NULL, /*%< paramcompare */
@@ -589,6 +590,7 @@ static dst_func_t hmacsha1_functions = {
hmacsha1_adddata,
hmacsha1_sign,
hmacsha1_verify,
+ NULL, /* verify2 */
NULL, /* computesecret */
hmacsha1_compare,
NULL, /* paramcompare */
@@ -867,6 +869,7 @@ static dst_func_t hmacsha224_functions = {
hmacsha224_adddata,
hmacsha224_sign,
hmacsha224_verify,
+ NULL, /* verify2 */
NULL, /* computesecret */
hmacsha224_compare,
NULL, /* paramcompare */
@@ -1145,6 +1148,7 @@ static dst_func_t hmacsha256_functions = {
hmacsha256_adddata,
hmacsha256_sign,
hmacsha256_verify,
+ NULL, /* verify2 */
NULL, /* computesecret */
hmacsha256_compare,
NULL, /* paramcompare */
@@ -1423,6 +1427,7 @@ static dst_func_t hmacsha384_functions = {
hmacsha384_adddata,
hmacsha384_sign,
hmacsha384_verify,
+ NULL, /* verify2 */
NULL, /* computesecret */
hmacsha384_compare,
NULL, /* paramcompare */
@@ -1701,6 +1706,7 @@ static dst_func_t hmacsha512_functions = {
hmacsha512_adddata,
hmacsha512_sign,
hmacsha512_verify,
+ NULL, /* verify2 */
NULL, /* computesecret */
hmacsha512_compare,
NULL, /* paramcompare */
diff --git a/contrib/bind9/lib/dns/include/dns/Makefile.in b/contrib/bind9/lib/dns/include/dns/Makefile.in
index ad8bc383e4b3..1a69f2c814f4 100644
--- a/contrib/bind9/lib/dns/include/dns/Makefile.in
+++ b/contrib/bind9/lib/dns/include/dns/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: Makefile.in,v 1.60 2011/11/14 18:32:34 each Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -22,8 +22,8 @@ top_srcdir = @top_srcdir@
@BIND9_VERSION@
HEADERS = acl.h adb.h byaddr.h cache.h callbacks.h cert.h compress.h \
- db.h dbiterator.h dbtable.h diff.h dispatch.h dlz.h \
- dnssec.h ds.h events.h fixedname.h iptable.h journal.h \
+ clientinfo.h db.h dbiterator.h dbtable.h diff.h dispatch.h \
+ dlz.h dnssec.h ds.h events.h fixedname.h iptable.h journal.h \
keyflags.h keytable.h keyvalues.h lib.h log.h \
master.h masterdump.h message.h name.h ncache.h nsec.h \
peer.h portlist.h private.h rbt.h rcode.h \
diff --git a/contrib/bind9/lib/dns/include/dns/acache.h b/contrib/bind9/lib/dns/include/dns/acache.h
index 28990c2aab0c..304cba758ad3 100644
--- a/contrib/bind9/lib/dns/include/dns/acache.h
+++ b/contrib/bind9/lib/dns/include/dns/acache.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006, 2007, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -25,7 +25,7 @@
/*
* Acache
- *
+ *
* The Additional Cache Object
*
* This module manages internal caching entries that correspond to
@@ -131,7 +131,7 @@
* - 76 bytes for each additional cache entry
* - if the entry has a DNS name and associated RRset,
* * 44 bytes + size of the name (1-255 bytes)
- * * 52 bytes x number_of_RRs
+ * * 52 bytes x number_of_RRs
* - 28 bytes for each DB related to this module
*
* Using the additional cache also requires extra memory consumption in
@@ -238,7 +238,7 @@ dns_acache_setcleaninginterval(dns_acache_t *acache, unsigned int t);
*/
void
-dns_acache_setcachesize(dns_acache_t *acache, isc_uint32_t size);
+dns_acache_setcachesize(dns_acache_t *acache, size_t size);
/*
* Set the maximum additional cache size. 0 means unlimited.
*/
@@ -387,7 +387,7 @@ dns_acache_setentry(dns_acache_t *acache, dns_acacheentry_t *entry,
* ISC_R_NOTFOUND
*/
-void
+isc_boolean_t
dns_acache_cancelentry(dns_acacheentry_t *entry);
/*
* Cancel the use of the cache entry 'entry'. This function is supposed to
@@ -398,6 +398,9 @@ dns_acache_cancelentry(dns_acacheentry_t *entry);
*
* Requires:
* 'entry' is a valid additional cache entry.
+ *
+ * Returns:
+ * ISC_TRUE if the entry was active when canceled
*/
void
@@ -415,7 +418,7 @@ dns_acache_attachentry(dns_acacheentry_t *source, dns_acacheentry_t **targetp);
*
* *targetp is attached to 'source'.
*/
-
+
void
dns_acache_detachentry(dns_acacheentry_t **entryp);
/*
@@ -429,7 +432,7 @@ dns_acache_detachentry(dns_acacheentry_t **entryp);
*
* *entryp is NULL.
*
- * If '*entryp' is the last reference to the entry,
+ * If '*entryp' is the last reference to the entry,
* cache does not have an outstanding task, all resources used by the
* entry (including the entry object itself) will be freed.
*/
diff --git a/contrib/bind9/lib/dns/include/dns/acl.h b/contrib/bind9/lib/dns/include/dns/acl.h
index 41b9522f0317..f4fc4a3bf9e1 100644
--- a/contrib/bind9/lib/dns/include/dns/acl.h
+++ b/contrib/bind9/lib/dns/include/dns/acl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: acl.h,v 1.35 2011/06/17 23:47:49 tbox Exp $ */
#ifndef DNS_ACL_H
#define DNS_ACL_H 1
diff --git a/contrib/bind9/lib/dns/include/dns/adb.h b/contrib/bind9/lib/dns/include/dns/adb.h
index b8c41dcdd485..a5a312406aff 100644
--- a/contrib/bind9/lib/dns/include/dns/adb.h
+++ b/contrib/bind9/lib/dns/include/dns/adb.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: adb.h,v 1.88 2011/12/05 17:10:51 each Exp $ */
#ifndef DNS_ADB_H
#define DNS_ADB_H 1
@@ -607,7 +607,7 @@ dns_adb_flush(dns_adb_t *adb);
*/
void
-dns_adb_setadbsize(dns_adb_t *adb, isc_uint32_t size);
+dns_adb_setadbsize(dns_adb_t *adb, size_t size);
/*%<
* Set a target memory size. If memory usage exceeds the target
* size entries will be removed before they would have expired on
diff --git a/contrib/bind9/lib/dns/include/dns/cache.h b/contrib/bind9/lib/dns/include/dns/cache.h
index f0825be3063b..f7140aa7c6ce 100644
--- a/contrib/bind9/lib/dns/include/dns/cache.h
+++ b/contrib/bind9/lib/dns/include/dns/cache.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: cache.h,v 1.32 2011/08/02 23:47:52 tbox Exp $ */
#ifndef DNS_CACHE_H
#define DNS_CACHE_H 1
@@ -245,12 +245,6 @@ dns_cache_getcleaninginterval(dns_cache_t *cache);
* Get the periodic cache cleaning interval to 'interval' seconds.
*/
-isc_uint32_t
-dns_cache_getcachesize(dns_cache_t *cache);
-/*%<
- * Get the maximum cache size.
- */
-
const char *
dns_cache_getname(dns_cache_t *cache);
/*%<
@@ -258,12 +252,12 @@ dns_cache_getname(dns_cache_t *cache);
*/
void
-dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size);
+dns_cache_setcachesize(dns_cache_t *cache, size_t size);
/*%<
* Set the maximum cache size. 0 means unlimited.
*/
-isc_uint32_t
+size_t
dns_cache_getcachesize(dns_cache_t *cache);
/*%<
* Get the maximum cache size.
@@ -280,9 +274,27 @@ dns_cache_flush(dns_cache_t *cache);
*/
isc_result_t
+dns_cache_flushnode(dns_cache_t *cache, dns_name_t *name,
+ isc_boolean_t tree);
+/*
+ * Flush a given name from the cache. If 'tree' is true, then
+ * also flush all names under 'name'.
+ *
+ * Requires:
+ *\li 'cache' to be valid.
+ *\li 'name' to be valid.
+ *
+ * Returns:
+ *\li #ISC_R_SUCCESS
+ *\li #ISC_R_NOMEMORY
+ *\li other error returns.
+ */
+
+isc_result_t
dns_cache_flushname(dns_cache_t *cache, dns_name_t *name);
/*
- * Flushes a given name from the cache.
+ * Flush a given name from the cache. Equivalent to
+ * dns_cache_flushpartial(cache, name, ISC_FALSE).
*
* Requires:
*\li 'cache' to be valid.
diff --git a/contrib/bind9/lib/dns/include/dns/callbacks.h b/contrib/bind9/lib/dns/include/dns/callbacks.h
index b686647b7d61..5e9cb717f81e 100644
--- a/contrib/bind9/lib/dns/include/dns/callbacks.h
+++ b/contrib/bind9/lib/dns/include/dns/callbacks.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: callbacks.h,v 1.26 2011/12/09 23:47:05 tbox Exp $ */
#ifndef DNS_CALLBACKS_H
#define DNS_CALLBACKS_H 1
@@ -41,6 +41,14 @@ struct dns_rdatacallbacks {
* dns_load_master calls this when it has rdatasets to commit.
*/
dns_addrdatasetfunc_t add;
+
+ /*%
+ * dns_master_load*() call this when loading a raw zonefile,
+ * to pass back information obtained from the file header
+ */
+ dns_rawdatafunc_t rawdata;
+ dns_zone_t *zone;
+
/*%
* dns_load_master / dns_rdata_fromtext call this to issue a error.
*/
diff --git a/contrib/bind9/lib/dns/include/dns/clientinfo.h b/contrib/bind9/lib/dns/include/dns/clientinfo.h
new file mode 100644
index 000000000000..4f2b89cda43e
--- /dev/null
+++ b/contrib/bind9/lib/dns/include/dns/clientinfo.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: clientinfo.h,v 1.3 2011/10/11 23:46:45 tbox Exp $ */
+
+#ifndef DNS_CLIENTINFO_H
+#define DNS_CLIENTINFO_H 1
+
+/*****
+ ***** Module Info
+ *****/
+
+/*! \file dns/clientinfo.h
+ * \brief
+ * The DNS clientinfo interface allows libdns to retrieve information
+ * about the client from the caller.
+ *
+ * The clientinfo interface is used by the DNS DB and DLZ interfaces;
+ * it allows databases to modify their answers on the basis of information
+ * about the client, such as source IP address.
+ *
+ * dns_clientinfo_t contains a pointer to an opaque structure containing
+ * client information in some form. dns_clientinfomethods_t contains a
+ * list of methods which operate on that opaque structure to return
+ * potentially useful data. Both structures also contain versioning
+ * information.
+ */
+
+/*****
+ ***** Imports
+ *****/
+
+#include <isc/sockaddr.h>
+#include <isc/types.h>
+
+ISC_LANG_BEGINDECLS
+
+/*****
+ ***** Types
+ *****/
+
+#define DNS_CLIENTINFO_VERSION 1
+typedef struct dns_clientinfo {
+ isc_uint16_t version;
+ void *data;
+} dns_clientinfo_t;
+
+typedef isc_result_t (*dns_clientinfo_sourceip_t)(dns_clientinfo_t *client,
+ isc_sockaddr_t **addrp);
+
+#define DNS_CLIENTINFOMETHODS_VERSION 1
+#define DNS_CLIENTINFOMETHODS_AGE 0
+
+typedef struct dns_clientinfomethods {
+ isc_uint16_t version;
+ isc_uint16_t age;
+ dns_clientinfo_sourceip_t sourceip;
+} dns_clientinfomethods_t;
+
+/*****
+ ***** Methods
+ *****/
+void
+dns_clientinfomethods_init(dns_clientinfomethods_t *methods,
+ dns_clientinfo_sourceip_t sourceip);
+
+void
+dns_clientinfo_init(dns_clientinfo_t *ci, void *data);
+
+ISC_LANG_ENDDECLS
+
+#endif /* DNS_CLIENTINFO_H */
diff --git a/contrib/bind9/lib/dns/include/dns/db.h b/contrib/bind9/lib/dns/include/dns/db.h
index fe268f439e93..66bc3e3481e1 100644
--- a/contrib/bind9/lib/dns/include/dns/db.h
+++ b/contrib/bind9/lib/dns/include/dns/db.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: db.h,v 1.107.4.1 2011/10/23 20:12:08 vjs Exp $ */
#ifndef DNS_DB_H
#define DNS_DB_H 1
@@ -59,6 +59,7 @@
#include <isc/ondestroy.h>
#include <isc/stdtime.h>
+#include <dns/clientinfo.h>
#include <dns/fixedname.h>
#include <dns/name.h>
#include <dns/rdata.h>
@@ -171,7 +172,7 @@ typedef struct dns_dbmethods {
dns_dbversion_t *version);
isc_boolean_t (*isdnssec)(dns_db_t *db);
dns_stats_t *(*getrrsetstats)(dns_db_t *db);
- void (*rpz_enabled)(dns_db_t *db, dns_rpz_st_t *st);
+ isc_result_t (*rpz_enabled)(dns_db_t *db, dns_rpz_st_t *st);
void (*rpz_findips)(dns_rpz_zone_t *rpz,
dns_rpz_type_t rpz_type,
dns_zone_t *zone, dns_db_t *db,
@@ -179,6 +180,20 @@ typedef struct dns_dbmethods {
dns_rdataset_t *ardataset,
dns_rpz_st_t *st,
dns_name_t *query_qname);
+ isc_result_t (*findnodeext)(dns_db_t *db, dns_name_t *name,
+ isc_boolean_t create,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo,
+ dns_dbnode_t **nodep);
+ isc_result_t (*findext)(dns_db_t *db, dns_name_t *name,
+ dns_dbversion_t *version,
+ dns_rdatatype_t type, unsigned int options,
+ isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo,
+ dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset);
} dns_dbmethods_t;
typedef isc_result_t
@@ -660,9 +675,19 @@ dns_db_closeversion(dns_db_t *db, dns_dbversion_t **versionp,
isc_result_t
dns_db_findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
dns_dbnode_t **nodep);
+
+isc_result_t
+dns_db_findnodeext(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo, dns_dbnode_t **nodep);
/*%<
* Find the node with name 'name'.
*
+ * dns_db_findnodeext() (findnode extended) also accepts parameters
+ * 'methods' and 'clientinfo', which, when provided, enable the database to
+ * retreive information about the client from the caller, and modify its
+ * response on the basis of that information.
+ *
* Notes:
* \li If 'create' is ISC_TRUE and no node with name 'name' exists, then
* such a node will be created.
@@ -699,9 +724,21 @@ dns_db_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
dns_dbnode_t **nodep, dns_name_t *foundname,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset);
+
+isc_result_t
+dns_db_findext(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset);
/*%<
* Find the best match for 'name' and 'type' in version 'version' of 'db'.
*
+ * dns_db_findext() (find extended) also accepts parameters 'methods'
+ * and 'clientinfo', which when provided enable the database to retreive
+ * information about the client from the caller, and modify its response
+ * on the basis of this information.
+ *
* Notes:
*
* \li If type == dns_rdataset_any, then rdataset will not be bound.
@@ -733,6 +770,10 @@ dns_db_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
* that it is correct. This only affects answers returned from the
* cache.
*
+ * \li In the #DNS_DBFIND_FORCENSEC3 option is set, then we are looking
+ * in the NSEC3 tree and not the main tree. Without this option being
+ * set NSEC3 records will not be found.
+ *
* \li To respond to a query for SIG records, the caller should create a
* rdataset iterator and extract the signatures from each rdataset.
*
@@ -1048,6 +1089,7 @@ dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdatatype_t type, dns_rdatatype_t covers,
isc_stdtime_t now, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset);
+
/*%<
* Search for an rdataset of type 'type' at 'node' that are in version
* 'version' of 'db'. If found, make 'rdataset' refer to it.
@@ -1500,11 +1542,11 @@ dns_db_getrrsetstats(dns_db_t *db);
* dns_rdatasetstats_create(); otherwise NULL.
*/
-void
+isc_result_t
dns_db_rpz_enabled(dns_db_t *db, dns_rpz_st_t *st);
/*%<
- * See if a policy database has DNS_RPZ_TYPE_IP, DNS_RPZ_TYPE_NSIP, or
- * DNS_RPZ_TYPE_NSDNAME records.
+ * Mark a database for response policy rewriting
+ * or find which RPZ data is available.
*/
void
diff --git a/contrib/bind9/lib/dns/include/dns/dispatch.h b/contrib/bind9/lib/dns/include/dns/dispatch.h
index 3f881dfcf1d6..1235f7ca40f3 100644
--- a/contrib/bind9/lib/dns/include/dns/dispatch.h
+++ b/contrib/bind9/lib/dns/include/dns/dispatch.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: dispatch.h,v 1.64 2011/07/28 23:47:58 tbox Exp $ */
#ifndef DNS_DISPATCH_H
#define DNS_DISPATCH_H 1
@@ -54,6 +54,7 @@
#include <isc/buffer.h>
#include <isc/lang.h>
+#include <isc/mutex.h>
#include <isc/socket.h>
#include <isc/types.h>
@@ -88,6 +89,18 @@ struct dns_dispatchevent {
isc_uint32_t attributes; /*%< mirrored from socket.h */
};
+/*%
+ * This is a set of one or more dispatches which can be retrieved
+ * round-robin fashion.
+ */
+struct dns_dispatchset {
+ isc_mem_t *mctx;
+ dns_dispatch_t **dispatches;
+ int ndisp;
+ int cur;
+ isc_mutex_t lock;
+};
+
/*@{*/
/*%
* Attributes for added dispatchers.
@@ -245,6 +258,15 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
unsigned int buckets, unsigned int increment,
unsigned int attributes, unsigned int mask,
dns_dispatch_t **dispp);
+
+isc_result_t
+dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
+ isc_taskmgr_t *taskmgr, isc_sockaddr_t *localaddr,
+ unsigned int buffersize,
+ unsigned int maxbuffers, unsigned int maxrequests,
+ unsigned int buckets, unsigned int increment,
+ unsigned int attributes, unsigned int mask,
+ dns_dispatch_t **dispp, dns_dispatch_t *dup);
/*%<
* Attach to existing dns_dispatch_t if one is found with dns_dispatchmgr_find,
* otherwise create a new UDP dispatch.
@@ -496,6 +518,46 @@ dns_dispatch_importrecv(dns_dispatch_t *disp, isc_event_t *event);
* event != NULL
*/
+dns_dispatch_t *
+dns_dispatchset_get(dns_dispatchset_t *dset);
+/*%<
+ * Retrieve the next dispatch from dispatch set 'dset', and increment
+ * the round-robin counter.
+ *
+ * Requires:
+ *\li dset != NULL
+ */
+
+isc_result_t
+dns_dispatchset_create(isc_mem_t *mctx, isc_socketmgr_t *sockmgr,
+ isc_taskmgr_t *taskmgr, dns_dispatch_t *source,
+ dns_dispatchset_t **dsetp, int n);
+/*%<
+ * Given a valid dispatch 'source', create a dispatch set containing
+ * 'n' UDP dispatches, with the remainder filled out by clones of the
+ * source.
+ *
+ * Requires:
+ *\li source is a valid UDP dispatcher
+ *\li dsetp != NULL, *dsetp == NULL
+ */
+
+void
+dns_dispatchset_cancelall(dns_dispatchset_t *dset, isc_task_t *task);
+/*%<
+ * Cancel socket operations for the dispatches in 'dset'.
+ */
+
+void
+dns_dispatchset_destroy(dns_dispatchset_t **dsetp);
+/*%<
+ * Dereference all the dispatches in '*dsetp', free the dispatchset
+ * memory, and set *dsetp to NULL.
+ *
+ * Requires:
+ *\li dset is valid
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_DISPATCH_H */
diff --git a/contrib/bind9/lib/dns/include/dns/dlz_dlopen.h b/contrib/bind9/lib/dns/include/dns/dlz_dlopen.h
index 6ad7e7a33ae0..f87722c3db8e 100644
--- a/contrib/bind9/lib/dns/include/dns/dlz_dlopen.h
+++ b/contrib/bind9/lib/dns/include/dns/dlz_dlopen.h
@@ -30,7 +30,7 @@ ISC_LANG_BEGINDECLS
* for the entry points of an external DLZ module for bind9.
*/
-#define DLZ_DLOPEN_VERSION 1
+#define DLZ_DLOPEN_VERSION 2
/*
* dlz_dlopen_version() is required for all DLZ external drivers. It
@@ -65,7 +65,9 @@ typedef isc_result_t dlz_dlopen_findzonedb_t (void *dbdata,
typedef isc_result_t dlz_dlopen_lookup_t (const char *zone,
const char *name,
void *dbdata,
- dns_sdlzlookup_t *lookup);
+ dns_sdlzlookup_t *lookup,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo);
/*
* dlz_dlopen_authority is optional() if dlz_dlopen_lookup()
@@ -116,6 +118,15 @@ typedef isc_result_t dlz_dlopen_configure_t (dns_view_t *view,
void *dbdata);
/*
+ * dlz_dlopen_setclientcallback() is optional, but must be supplied if you
+ * want to retrieve information about the client (e.g., source address)
+ * before sending a replay.
+ */
+typedef isc_result_t dlz_dlopen_setclientcallback_t (dns_view_t *view,
+ void *dbdata);
+
+
+/*
* dlz_dlopen_ssumatch() is optional, but must be supplied if you want
* to support dynamic updates
*/
diff --git a/contrib/bind9/lib/dns/include/dns/dnssec.h b/contrib/bind9/lib/dns/include/dns/dnssec.h
index e986d406f617..e443f91b635b 100644
--- a/contrib/bind9/lib/dns/include/dns/dnssec.h
+++ b/contrib/bind9/lib/dns/include/dns/dnssec.h
@@ -132,12 +132,19 @@ isc_result_t
dns_dnssec_verify2(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
isc_boolean_t ignoretime, isc_mem_t *mctx,
dns_rdata_t *sigrdata, dns_name_t *wild);
+
+isc_result_t
+dns_dnssec_verify3(dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
+ isc_boolean_t ignoretime, unsigned int maxbits,
+ isc_mem_t *mctx, dns_rdata_t *sigrdata, dns_name_t *wild);
/*%<
* Verifies the RRSIG record covering this rdataset signed by a specific
* key. This does not determine if the key's owner is authorized to sign
* this record, as this requires a resolver or database.
* If 'ignoretime' is ISC_TRUE, temporal validity will not be checked.
*
+ * 'maxbits' specifies the maximum number of rsa exponent bits accepted.
+ *
* Requires:
*\li 'name' (the owner name of the record) is a valid name
*\li 'set' is a valid rdataset
@@ -309,7 +316,7 @@ dns_dnssec_keylistfromrdataset(dns_name_t *origin,
isc_result_t
dns_dnssec_updatekeys(dns_dnsseckeylist_t *keys, dns_dnsseckeylist_t *newkeys,
dns_dnsseckeylist_t *removed, dns_name_t *origin,
- dns_ttl_t ttl, dns_diff_t *diff, isc_boolean_t allzsk,
+ dns_ttl_t hint_ttl, dns_diff_t *diff, isc_boolean_t allzsk,
isc_mem_t *mctx, void (*report)(const char *, ...));
/*%<
* Update the list of keys in 'keys' with new key information in 'newkeys'.
@@ -328,9 +335,11 @@ dns_dnssec_updatekeys(dns_dnsseckeylist_t *keys, dns_dnsseckeylist_t *newkeys,
* If 'allzsk' is true, we are allowing KSK-flagged keys to be used as
* ZSKs.
*
- * 'ttl' is the TTL of the DNSKEY RRset; if it is longer than the
- * time until a new key will be activated, then we have to delay the
- * key's activation.
+ * 'hint_ttl' is the TTL to use for the DNSKEY RRset if there is no
+ * existing RRset, and if none of the keys to be added has a default TTL
+ * (in which case we would use the shortest one). If the TTL is longer
+ * than the time until a new key will be activated, then we have to delay
+ * the key's activation.
*
* 'report' points to a function for reporting status.
*
diff --git a/contrib/bind9/lib/dns/include/dns/events.h b/contrib/bind9/lib/dns/include/dns/events.h
index 3a28ab2aec1c..fd2144f64937 100644
--- a/contrib/bind9/lib/dns/include/dns/events.h
+++ b/contrib/bind9/lib/dns/include/dns/events.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: events.h,v 1.61 2011/10/28 06:20:06 each Exp $ */
#ifndef DNS_EVENTS_H
#define DNS_EVENTS_H 1
@@ -74,6 +74,11 @@
#define DNS_EVENT_CLIENTREQDONE (ISC_EVENTCLASS_DNS + 44)
#define DNS_EVENT_ADBGROWENTRIES (ISC_EVENTCLASS_DNS + 45)
#define DNS_EVENT_ADBGROWNAMES (ISC_EVENTCLASS_DNS + 46)
+#define DNS_EVENT_ZONESECURESERIAL (ISC_EVENTCLASS_DNS + 47)
+#define DNS_EVENT_ZONESECUREDB (ISC_EVENTCLASS_DNS + 48)
+#define DNS_EVENT_ZONELOAD (ISC_EVENTCLASS_DNS + 49)
+#define DNS_EVENT_KEYDONE (ISC_EVENTCLASS_DNS + 50)
+#define DNS_EVENT_SETNSEC3PARAM (ISC_EVENTCLASS_DNS + 51)
#define DNS_EVENT_FIRSTEVENT (ISC_EVENTCLASS_DNS + 0)
#define DNS_EVENT_LASTEVENT (ISC_EVENTCLASS_DNS + 65535)
diff --git a/contrib/bind9/lib/dns/include/dns/journal.h b/contrib/bind9/lib/dns/include/dns/journal.h
index d750fbef3dd7..68ba8b35ae91 100644
--- a/contrib/bind9/lib/dns/include/dns/journal.h
+++ b/contrib/bind9/lib/dns/include/dns/journal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: journal.h,v 1.43 2011/12/22 07:32:41 each Exp $ */
#ifndef DNS_JOURNAL_H
#define DNS_JOURNAL_H 1
@@ -46,6 +46,10 @@
***/
#define DNS_JOURNALOPT_RESIGN 0x00000001
+#define DNS_JOURNAL_READ 0x00000000 /* ISC_FALSE */
+#define DNS_JOURNAL_CREATE 0x00000001 /* ISC_TRUE */
+#define DNS_JOURNAL_WRITE 0x00000002
+
/***
*** Types
***/
@@ -72,7 +76,7 @@ ISC_LANG_BEGINDECLS
isc_result_t
dns_db_createsoatuple(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
- dns_diffop_t op, dns_difftuple_t **tp);
+ dns_diffop_t op, dns_difftuple_t **tp);
/*!< brief
* Create a diff tuple for the current database SOA.
* XXX this probably belongs somewhere else.
@@ -95,16 +99,15 @@ dns_db_createsoatuple(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
*/
isc_result_t
-dns_journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
+dns_journal_open(isc_mem_t *mctx, const char *filename, unsigned int mode,
dns_journal_t **journalp);
/*%<
* Open the journal file 'filename' and create a dns_journal_t object for it.
*
- * If 'write' is ISC_TRUE, the journal is open for writing. If it does
- * not exist, it is created.
- *
- * If 'write' is ISC_FALSE, the journal is open for reading. If it does
- * not exist, ISC_R_NOTFOUND is returned.
+ * DNS_JOURNAL_CREATE open the journal for reading and writing and create
+ * the journal if it does not exist.
+ * DNS_JOURNAL_WRITE open the journal for reading and writing.
+ * DNS_JOURNAL_READ open the journal for reading only.
*/
void
@@ -267,12 +270,18 @@ dns_db_diff(isc_mem_t *mctx,
dns_db_t *dba, dns_dbversion_t *dbvera,
dns_db_t *dbb, dns_dbversion_t *dbverb,
const char *journal_filename);
+
+isc_result_t
+dns_db_diffx(dns_diff_t *diff, dns_db_t *dba, dns_dbversion_t *dbvera,
+ dns_db_t *dbb, dns_dbversion_t *dbverb,
+ const char *journal_filename);
/*%<
- * Compare the databases 'dba' and 'dbb' and generate a journal
+ * Compare the databases 'dba' and 'dbb' and generate a diff/journal
* entry containing the changes to make 'dba' from 'dbb' (note
* the order). This journal entry will consist of a single,
* possibly very large transaction. Append the journal
- * entry to the journal file specified by 'journal_filename'.
+ * entry to the journal file specified by 'journal_filename' if
+ * non-NULL.
*/
isc_result_t
@@ -284,6 +293,17 @@ dns_journal_compact(isc_mem_t *mctx, char *filename, isc_uint32_t serial,
* exists and is non-empty 'serial' must exist in the journal.
*/
+isc_boolean_t
+dns_journal_get_sourceserial(dns_journal_t *j, isc_uint32_t *sourceserial);
+void
+dns_journal_set_sourceserial(dns_journal_t *j, isc_uint32_t sourceserial);
+/*%<
+ * Get and set source serial.
+ *
+ * Returns:
+ * ISC_TRUE if sourceserial has previously been set.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_JOURNAL_H */
diff --git a/contrib/bind9/lib/dns/include/dns/log.h b/contrib/bind9/lib/dns/include/dns/log.h
index 689b148eb8f3..3c4df8a45003 100644
--- a/contrib/bind9/lib/dns/include/dns/log.h
+++ b/contrib/bind9/lib/dns/include/dns/log.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: log.h,v 1.47 2011/10/13 22:48:24 tbox Exp $ */
/*! \file dns/log.h
* \author Principal Authors: DCL */
diff --git a/contrib/bind9/lib/dns/include/dns/master.h b/contrib/bind9/lib/dns/include/dns/master.h
index a852ae4b2aa7..896c6e95ecd3 100644
--- a/contrib/bind9/lib/dns/include/dns/master.h
+++ b/contrib/bind9/lib/dns/include/dns/master.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -66,18 +66,29 @@ ISC_LANG_BEGINDECLS
* encoding, we directly read/write each field so that the encoded data
* is always "packed", regardless of the hardware architecture.
*/
-#define DNS_RAWFORMAT_VERSION 0
+#define DNS_RAWFORMAT_VERSION 1
+
+/*
+ * Flags to indicate the status of the data in the raw file header
+ */
+#define DNS_MASTERRAW_COMPAT 0x01
+#define DNS_MASTERRAW_SOURCESERIALSET 0x02
+#define DNS_MASTERRAW_LASTXFRINSET 0x04
/* Common header */
-typedef struct {
+struct dns_masterrawheader {
isc_uint32_t format; /* must be
* dns_masterformat_raw */
isc_uint32_t version; /* compatibility for future
* extensions */
isc_uint32_t dumptime; /* timestamp on creation
- * (currently unused)
- */
-} dns_masterrawheader_t;
+ * (currently unused) */
+ isc_uint32_t flags; /* Flags */
+ isc_uint32_t sourceserial; /* Source serial number (used
+ * by inline-signing zones) */
+ isc_uint32_t lastxfrin; /* timestamp of last transfer
+ * (used by slave zones) */
+};
/* The structure for each RRset */
typedef struct {
@@ -302,6 +313,12 @@ dns_loadctx_cancel(dns_loadctx_t *ctx);
*\li 'ctx' to be valid
*/
+void
+dns_master_initrawheader(dns_masterrawheader_t *header);
+/*%<
+ * Initializes the header for a raw master file, setting all
+ * values to zero.
+ */
ISC_LANG_ENDDECLS
#endif /* DNS_MASTER_H */
diff --git a/contrib/bind9/lib/dns/include/dns/masterdump.h b/contrib/bind9/lib/dns/include/dns/masterdump.h
index f7e30f13d53e..8631248cc2ee 100644
--- a/contrib/bind9/lib/dns/include/dns/masterdump.h
+++ b/contrib/bind9/lib/dns/include/dns/masterdump.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: masterdump.h,v 1.47 2011/12/08 23:46:49 tbox Exp $ */
#ifndef DNS_MASTERDUMP_H
#define DNS_MASTERDUMP_H 1
@@ -220,13 +220,25 @@ dns_master_dumptostream2(isc_mem_t *mctx, dns_db_t *db,
dns_dbversion_t *version,
const dns_master_style_t *style,
dns_masterformat_t format, FILE *f);
+
+isc_result_t
+dns_master_dumptostream3(isc_mem_t *mctx, dns_db_t *db,
+ dns_dbversion_t *version,
+ const dns_master_style_t *style,
+ dns_masterformat_t format,
+ dns_masterrawheader_t *header, FILE *f);
/*%<
* Dump the database 'db' to the steam 'f' in the specified format by
* 'format'. If the format is dns_masterformat_text (the RFC1035 format),
* 'style' specifies the file style (e.g., &dns_master_style_default).
*
- * dns_master_dumptostream() is an old form of dns_master_dumptostream2(),
+ * dns_master_dumptostream() is an old form of dns_master_dumptostream3(),
* which always specifies the dns_masterformat_text format.
+ * dns_master_dumptostream2() is an old form which always specifies
+ * a NULL header.
+ *
+ * If 'format' is dns_masterformat_raw, then 'header' can contain
+ * information to be written to the file header.
*
* Temporary dynamic memory may be allocated from 'mctx'.
*
@@ -257,6 +269,13 @@ dns_master_dumpinc2(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
isc_task_t *task, dns_dumpdonefunc_t done, void *done_arg, dns_dumpctx_t **dctxp, dns_masterformat_t format);
isc_result_t
+dns_master_dumpinc3(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
+ const dns_master_style_t *style, const char *filename,
+ isc_task_t *task, dns_dumpdonefunc_t done, void
+ *done_arg, dns_dumpctx_t **dctxp,
+ dns_masterformat_t format, dns_masterrawheader_t *header);
+
+isc_result_t
dns_master_dump(isc_mem_t *mctx, dns_db_t *db,
dns_dbversion_t *version,
const dns_master_style_t *style, const char *filename);
@@ -267,14 +286,24 @@ dns_master_dump2(isc_mem_t *mctx, dns_db_t *db,
const dns_master_style_t *style, const char *filename,
dns_masterformat_t format);
+isc_result_t
+dns_master_dump3(isc_mem_t *mctx, dns_db_t *db,
+ dns_dbversion_t *version,
+ const dns_master_style_t *style, const char *filename,
+ dns_masterformat_t format, dns_masterrawheader_t *header);
+
/*%<
* Dump the database 'db' to the file 'filename' in the specified format by
* 'format'. If the format is dns_masterformat_text (the RFC1035 format),
* 'style' specifies the file style (e.g., &dns_master_style_default).
*
- * dns_master_dumpinc() and dns_master_dump() are old forms of _dumpinc2()
- * and _dump2(), respectively, which always specify the dns_masterformat_text
- * format.
+ * dns_master_dumpinc() and dns_master_dump() are old forms of _dumpinc3()
+ * and _dump3(), respectively, which always specify the dns_masterformat_text
+ * format. dns_master_dumpinc2() and dns_master_dump2() are old forms which
+ * always specify a NULL header.
+ *
+ * If 'format' is dns_masterformat_raw, then 'header' can contain
+ * information to be written to the file header.
*
* Temporary dynamic memory may be allocated from 'mctx'.
*
@@ -329,6 +358,12 @@ dns_master_stylecreate(dns_master_style_t **style, unsigned int flags,
unsigned int line_length, unsigned int tab_width,
isc_mem_t *mctx);
+isc_result_t
+dns_master_stylecreate2(dns_master_style_t **style, unsigned int flags,
+ unsigned int ttl_column, unsigned int class_column,
+ unsigned int type_column, unsigned int rdata_column,
+ unsigned int line_length, unsigned int tab_width,
+ unsigned int split_width, isc_mem_t *mctx);
void
dns_master_styledestroy(dns_master_style_t **style, isc_mem_t *mctx);
diff --git a/contrib/bind9/lib/dns/include/dns/message.h b/contrib/bind9/lib/dns/include/dns/message.h
index 3bc734d40cb2..a6862faab633 100644
--- a/contrib/bind9/lib/dns/include/dns/message.h
+++ b/contrib/bind9/lib/dns/include/dns/message.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2010, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -251,6 +251,12 @@ struct dns_message {
const void * order_arg;
};
+struct dns_ednsopt {
+ isc_uint16_t code;
+ isc_uint16_t length;
+ unsigned char *value;
+};
+
/***
*** Functions
***/
@@ -1350,6 +1356,24 @@ dns_message_gettimeadjust(dns_message_t *msg);
*\li msg be a valid message.
*/
+isc_result_t
+dns_message_buildopt(dns_message_t *msg, dns_rdataset_t **opt,
+ unsigned int version, isc_uint16_t udpsize,
+ unsigned int flags, dns_ednsopt_t *ednsopts, size_t count);
+/*%<
+ * Built a opt record.
+ *
+ * Requires:
+ * \li msg be a valid message.
+ * \li opt to be a non NULL and *opt to be NULL.
+ *
+ * Returns:
+ * \li ISC_R_SUCCESS on success.
+ * \li ISC_R_NOMEMORY
+ * \li ISC_R_NOSPACE
+ * \li other.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_MESSAGE_H */
diff --git a/contrib/bind9/lib/dns/include/dns/name.h b/contrib/bind9/lib/dns/include/dns/name.h
index bef86931877c..1a88e53264b4 100644
--- a/contrib/bind9/lib/dns/include/dns/name.h
+++ b/contrib/bind9/lib/dns/include/dns/name.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -1299,15 +1299,17 @@ ISC_LANG_ENDDECLS
#define DNS_NAME_INIT(n, o) \
do { \
- (n)->magic = DNS_NAME_MAGIC; \
- (n)->ndata = NULL; \
- (n)->length = 0; \
- (n)->labels = 0; \
- (n)->attributes = 0; \
- (n)->offsets = (o); \
- (n)->buffer = NULL; \
- ISC_LINK_INIT((n), link); \
- ISC_LIST_INIT((n)->list); \
+ dns_name_t *_n = (n); \
+ /* memset(_n, 0, sizeof(*_n)); */ \
+ _n->magic = DNS_NAME_MAGIC; \
+ _n->ndata = NULL; \
+ _n->length = 0; \
+ _n->labels = 0; \
+ _n->attributes = 0; \
+ _n->offsets = (o); \
+ _n->buffer = NULL; \
+ ISC_LINK_INIT(_n, link); \
+ ISC_LIST_INIT(_n->list); \
} while (0)
#define DNS_NAME_RESET(n) \
diff --git a/contrib/bind9/lib/dns/include/dns/ncache.h b/contrib/bind9/lib/dns/include/dns/ncache.h
index 8d89879cc5e4..337e8348c810 100644
--- a/contrib/bind9/lib/dns/include/dns/ncache.h
+++ b/contrib/bind9/lib/dns/include/dns/ncache.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2010, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -73,6 +73,11 @@ dns_ncache_addoptout(dns_message_t *message, dns_db_t *cache,
* rdataset, and store it in 'cache' at 'node' with a TTL limited to
* 'maxttl'.
*
+ * \li dns_ncache_add produces a negative cache entry with a trust of no
+ * more than answer
+ * \li dns_ncache_addoptout produces a negative cache entry which will have
+ * a trust of secure if all the records that make up the entry are secure.
+ *
* The 'covers' argument is the RR type whose nonexistence we are caching,
* or dns_rdatatype_any when caching a NXDOMAIN response.
*
diff --git a/contrib/bind9/lib/dns/include/dns/nsec.h b/contrib/bind9/lib/dns/include/dns/nsec.h
index a18e138b0da8..440ee4e01513 100644
--- a/contrib/bind9/lib/dns/include/dns/nsec.h
+++ b/contrib/bind9/lib/dns/include/dns/nsec.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: nsec.h,v 1.14 2011/06/10 23:47:32 tbox Exp $ */
#ifndef DNS_NSEC_H
#define DNS_NSEC_H 1
@@ -69,12 +69,48 @@ dns_nsec_nseconly(dns_db_t *db, dns_dbversion_t *version,
isc_boolean_t *answer);
/*
* Report whether the DNSKEY RRset has a NSEC only algorithm. Unknown
- * algorithms are assumed to support NSEC3.
+ * algorithms are assumed to support NSEC3. If DNSKEY is not found,
+ * *answer is set to ISC_FALSE, and ISC_R_NOTFOUND is returned.
*
* Requires:
* 'answer' to be non NULL.
*/
+unsigned int
+dns_nsec_compressbitmap(unsigned char *map, const unsigned char *raw,
+ unsigned int max_type);
+/*%<
+ * Convert a raw bitmap into a compressed windowed bit map. 'map' and 'raw'
+ * may overlap.
+ *
+ * Returns the length of the compressed windowed bit map.
+ */
+
+void
+dns_nsec_setbit(unsigned char *array, unsigned int type, unsigned int bit);
+/*%<
+ * Set type bit in raw 'array' to 'bit'.
+ */
+
+isc_boolean_t
+dns_nsec_isset(const unsigned char *array, unsigned int type);
+/*%<
+ * Test if the corresponding 'type' bit is set in 'array'.
+ */
+
+isc_result_t
+dns_nsec_noexistnodata(dns_rdatatype_t type, dns_name_t *name,
+ dns_name_t *nsecname, dns_rdataset_t *nsecset,
+ isc_boolean_t *exists, isc_boolean_t *data,
+ dns_name_t *wild, dns_nseclog_t log, void *arg);
+/*%
+ * Return ISC_R_SUCCESS if we can determine that the name doesn't exist
+ * or we can determine whether there is data or not at the name.
+ * If the name does not exist return the wildcard name.
+ *
+ * Return ISC_R_IGNORE when the NSEC is not the appropriate one.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_NSEC_H */
diff --git a/contrib/bind9/lib/dns/include/dns/nsec3.h b/contrib/bind9/lib/dns/include/dns/nsec3.h
index beb44f3e63e2..e4a22868a2db 100644
--- a/contrib/bind9/lib/dns/include/dns/nsec3.h
+++ b/contrib/bind9/lib/dns/include/dns/nsec3.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2008-2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: nsec3.h,v 1.14 2011/10/28 12:20:31 tbox Exp $ */
#ifndef DNS_NSEC3_H
#define DNS_NSEC3_H 1
@@ -241,12 +241,21 @@ dns_nsec3param_toprivate(dns_rdata_t *src, dns_rdata_t *target,
isc_result_t
dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
- dns_zone_t *zone, dns_diff_t *diff);
+ dns_zone_t *zone, isc_boolean_t nonsec,
+ dns_diff_t *diff);
/*%<
* Mark NSEC3PARAM for deletion.
*/
+isc_result_t
+dns_nsec3_noexistnodata(dns_rdatatype_t type, dns_name_t* name,
+ dns_name_t *nsec3name, dns_rdataset_t *nsec3set,
+ dns_name_t *zonename, isc_boolean_t *exists,
+ isc_boolean_t *data, isc_boolean_t *optout,
+ isc_boolean_t *unknown, isc_boolean_t *setclosest,
+ isc_boolean_t *setnearest, dns_name_t *closest,
+ dns_name_t *nearest, dns_nseclog_t logit, void *arg);
ISC_LANG_ENDDECLS
diff --git a/contrib/bind9/lib/dns/include/dns/private.h b/contrib/bind9/lib/dns/include/dns/private.h
index 7bc59b2cea6d..c4a2ae64f71b 100644
--- a/contrib/bind9/lib/dns/include/dns/private.h
+++ b/contrib/bind9/lib/dns/include/dns/private.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: private.h,v 1.5 2011/10/28 12:20:31 tbox Exp $ */
#include <isc/lang.h>
#include <isc/types.h>
@@ -50,6 +50,23 @@ dns_private_chains(dns_db_t *db, dns_dbversion_t *ver,
* \li other on error
*/
+isc_result_t
+dns_private_totext(dns_rdata_t *privaterdata, isc_buffer_t *buffer);
+/*%<
+ * Convert a private-type RR 'privaterdata' to human-readable form,
+ * and place the result in 'buffer'. The text should indicate
+ * which action the private-type record specifies and whether the
+ * action has been completed.
+ *
+ * Requires:
+ * \li 'privaterdata' is a valid rdata containing at least five bytes
+ * \li 'buffer' is a valid buffer
+ *
+ * Returns:
+ * \li ISC_R_SUCCESS
+ * \li other on error
+ */
+
ISC_LANG_ENDDECLS
#endif
diff --git a/contrib/bind9/lib/dns/include/dns/rdata.h b/contrib/bind9/lib/dns/include/dns/rdata.h
index c3e7db61bdbf..89ecaf800696 100644
--- a/contrib/bind9/lib/dns/include/dns/rdata.h
+++ b/contrib/bind9/lib/dns/include/dns/rdata.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: rdata.h,v 1.80 2011/03/20 02:31:53 marka Exp $ */
#ifndef DNS_RDATA_H
#define DNS_RDATA_H 1
@@ -169,6 +169,7 @@ struct dns_rdata {
/*% Output explanatory comments. */
#define DNS_STYLEFLAG_COMMENT 0x00000002U
+#define DNS_STYLEFLAG_RRCOMMENT 0x00000004U
#define DNS_RDATA_DOWNCASE DNS_NAME_DOWNCASE
#define DNS_RDATA_CHECKNAMES DNS_NAME_CHECKNAMES
@@ -176,6 +177,7 @@ struct dns_rdata {
#define DNS_RDATA_CHECKREVERSE DNS_NAME_CHECKREVERSE
#define DNS_RDATA_CHECKMX DNS_NAME_CHECKMX
#define DNS_RDATA_CHECKMXFAIL DNS_NAME_CHECKMXFAIL
+#define DNS_RDATA_UNKNOWNESCAPE 0x80000000
/***
*** Initialization
@@ -434,8 +436,8 @@ dns_rdata_totext(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target);
isc_result_t
dns_rdata_tofmttext(dns_rdata_t *rdata, dns_name_t *origin, unsigned int flags,
- unsigned int width, const char *linebreak,
- isc_buffer_t *target);
+ unsigned int width, unsigned int split_width,
+ const char *linebreak, isc_buffer_t *target);
/*%<
* Like dns_rdata_totext, but do formatted output suitable for
* database dumps. This is intended for use by dns_db_dump();
@@ -457,6 +459,11 @@ dns_rdata_tofmttext(dns_rdata_t *rdata, dns_name_t *origin, unsigned int flags,
* comments next to things like the SOA timer fields. Some
* comments (e.g., the SOA ones) are only printed when multiline
* output is selected.
+ *
+ * base64 rdata text (e.g., DNSKEY records) will be split into chunks
+ * of 'split_width' characters. If split_width == 0, the text will
+ * not be split at all. If split_width == UINT_MAX (0xffffffff), then
+ * it is undefined and falls back to the default value of 'width'
*/
isc_result_t
diff --git a/contrib/bind9/lib/dns/include/dns/rdataset.h b/contrib/bind9/lib/dns/include/dns/rdataset.h
index b2b8370db051..31bcd15f1424 100644
--- a/contrib/bind9/lib/dns/include/dns/rdataset.h
+++ b/contrib/bind9/lib/dns/include/dns/rdataset.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: rdataset.h,v 1.72 2011/06/08 22:13:51 each Exp $ */
#ifndef DNS_RDATASET_H
#define DNS_RDATASET_H 1
diff --git a/contrib/bind9/lib/dns/include/dns/resolver.h b/contrib/bind9/lib/dns/include/dns/resolver.h
index 7f7d09317c8d..095269ea2dd2 100644
--- a/contrib/bind9/lib/dns/include/dns/resolver.h
+++ b/contrib/bind9/lib/dns/include/dns/resolver.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: resolver.h,v 1.72 2011/12/05 17:10:51 each Exp $ */
#ifndef DNS_RESOLVER_H
#define DNS_RESOLVER_H 1
@@ -126,7 +126,8 @@ typedef struct dns_fetchevent {
isc_result_t
dns_resolver_create(dns_view_t *view,
- isc_taskmgr_t *taskmgr, unsigned int ntasks,
+ isc_taskmgr_t *taskmgr,
+ unsigned int ntasks, unsigned int ndisp,
isc_socketmgr_t *socketmgr,
isc_timermgr_t *timermgr,
unsigned int options,
@@ -155,9 +156,11 @@ dns_resolver_create(dns_view_t *view,
*
*\li 'timermgr' is a valid timer manager.
*
- *\li 'dispatchv4' is a valid dispatcher with an IPv4 UDP socket, or is NULL.
+ *\li 'dispatchv4' is a dispatch with an IPv4 UDP socket, or is NULL.
+ * If not NULL, 'ndisp' clones of it will be created by the resolver.
*
- *\li 'dispatchv6' is a valid dispatcher with an IPv6 UDP socket, or is NULL.
+ *\li 'dispatchv6' is a dispatch with an IPv6 UDP socket, or is NULL.
+ * If not NULL, 'ndisp' clones of it will be created by the resolver.
*
*\li resp != NULL && *resp == NULL.
*
diff --git a/contrib/bind9/lib/dns/include/dns/result.h b/contrib/bind9/lib/dns/include/dns/result.h
index 21388b2c8078..12aacf9ba78a 100644
--- a/contrib/bind9/lib/dns/include/dns/result.h
+++ b/contrib/bind9/lib/dns/include/dns/result.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: result.h,v 1.123 2011/03/21 07:22:14 each Exp $ */
#ifndef DNS_RESULT_H
#define DNS_RESULT_H 1
@@ -151,8 +151,10 @@
#define DNS_R_NOTMASTER (ISC_RESULTCLASS_DNS + 105)
#define DNS_R_BROKENCHAIN (ISC_RESULTCLASS_DNS + 106)
#define DNS_R_EXPIRED (ISC_RESULTCLASS_DNS + 107)
+#define DNS_R_NOTDYNAMIC (ISC_RESULTCLASS_DNS + 108)
+#define DNS_R_BADEUI (ISC_RESULTCLASS_DNS + 109)
-#define DNS_R_NRESULTS 108 /*%< Number of results */
+#define DNS_R_NRESULTS 110 /*%< Number of results */
/*
* DNS wire format rcodes.
diff --git a/contrib/bind9/lib/dns/include/dns/rpz.h b/contrib/bind9/lib/dns/include/dns/rpz.h
index 4227dd44e05b..e1d50a53b555 100644
--- a/contrib/bind9/lib/dns/include/dns/rpz.h
+++ b/contrib/bind9/lib/dns/include/dns/rpz.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2011-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
/* $Id$ */
+
#ifndef DNS_RPZ_H
#define DNS_RPZ_H 1
@@ -27,10 +28,11 @@
ISC_LANG_BEGINDECLS
-#define DNS_RPZ_IP_ZONE "rpz-ip"
-#define DNS_RPZ_NSIP_ZONE "rpz-nsip"
-#define DNS_RPZ_NSDNAME_ZONE "rpz-nsdname"
-#define DNS_RPZ_PASSTHRU_ZONE "rpz-passthru"
+#define DNS_RPZ_PREFIX "rpz-"
+#define DNS_RPZ_IP_ZONE DNS_RPZ_PREFIX"ip"
+#define DNS_RPZ_NSIP_ZONE DNS_RPZ_PREFIX"nsip"
+#define DNS_RPZ_NSDNAME_ZONE DNS_RPZ_PREFIX"nsdname"
+#define DNS_RPZ_PASSTHRU_ZONE DNS_RPZ_PREFIX"passthru"
typedef isc_uint8_t dns_rpz_cidr_bits_t;
@@ -75,6 +77,7 @@ struct dns_rpz_zone {
dns_ttl_t max_policy_ttl;
dns_rpz_policy_t policy; /* DNS_RPZ_POLICY_GIVEN or override */
isc_boolean_t recursive_only;
+ isc_boolean_t defined;
};
/*
@@ -169,12 +172,6 @@ const char *
dns_rpz_policy2str(dns_rpz_policy_t policy);
void
-dns_rpz_set_need(isc_boolean_t need);
-
-isc_boolean_t
-dns_rpz_needed(void);
-
-void
dns_rpz_cidr_free(dns_rpz_cidr_t **cidr);
void
@@ -184,7 +181,7 @@ isc_result_t
dns_rpz_new_cidr(isc_mem_t *mctx, dns_name_t *origin,
dns_rpz_cidr_t **rbtdb_cidr);
void
-dns_rpz_enabled(dns_rpz_cidr_t *cidr, dns_rpz_st_t *st);
+dns_rpz_enabled_get(dns_rpz_cidr_t *cidr, dns_rpz_st_t *st);
void
dns_rpz_cidr_deleteip(dns_rpz_cidr_t *cidr, dns_name_t *name);
diff --git a/contrib/bind9/lib/dns/include/dns/rriterator.h b/contrib/bind9/lib/dns/include/dns/rriterator.h
index a3e8e479b920..c979f2249992 100644
--- a/contrib/bind9/lib/dns/include/dns/rriterator.h
+++ b/contrib/bind9/lib/dns/include/dns/rriterator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: rriterator.h,v 1.4 2011/11/01 23:47:00 tbox Exp $ */
#ifndef DNS_RRITERATOR_H
#define DNS_RRITERATOR_H 1
diff --git a/contrib/bind9/lib/dns/include/dns/sdb.h b/contrib/bind9/lib/dns/include/dns/sdb.h
index c57c4a1d038a..27519034f171 100644
--- a/contrib/bind9/lib/dns/include/dns/sdb.h
+++ b/contrib/bind9/lib/dns/include/dns/sdb.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: sdb.h,v 1.25 2011/10/11 23:46:45 tbox Exp $ */
#ifndef DNS_SDB_H
#define DNS_SDB_H 1
@@ -35,6 +35,7 @@
#include <isc/lang.h>
+#include <dns/clientinfo.h>
#include <dns/types.h>
/***
@@ -58,10 +59,14 @@ typedef struct dns_sdballnodes dns_sdballnodes_t;
typedef isc_result_t
(*dns_sdblookupfunc_t)(const char *zone, const char *name, void *dbdata,
- dns_sdblookup_t *);
+ dns_sdblookup_t *lookup,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo);
typedef isc_result_t
(*dns_sdblookup2func_t)(const dns_name_t *zone, const dns_name_t *name,
- void *dbdata, dns_sdblookup_t *lookup);
+ void *dbdata, dns_sdblookup_t *lookup,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo);
typedef isc_result_t
(*dns_sdbauthorityfunc_t)(const char *zone, void *dbdata, dns_sdblookup_t *);
diff --git a/contrib/bind9/lib/dns/include/dns/sdlz.h b/contrib/bind9/lib/dns/include/dns/sdlz.h
index 375a99a6d69e..fbc6b95e70d1 100644
--- a/contrib/bind9/lib/dns/include/dns/sdlz.h
+++ b/contrib/bind9/lib/dns/include/dns/sdlz.h
@@ -57,6 +57,7 @@
#ifndef SDLZ_H
#define SDLZ_H 1
+#include <dns/clientinfo.h>
#include <dns/dlz.h>
ISC_LANG_BEGINDECLS
@@ -182,18 +183,23 @@ typedef isc_result_t
typedef isc_result_t
(*dns_sdlzlookupfunc_t)(const char *zone, const char *name, void *driverarg,
- void *dbdata, dns_sdlzlookup_t *lookup);
+ void *dbdata, dns_sdlzlookup_t *lookup,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo);
/*%<
* Method prototype. Drivers implementing the SDLZ interface MUST
- * supply a lookup method. This method is called when the DNS server
- * is performing a query, after the find zone and before any other
- * methods have been called. This function returns record DNS record
+ * supply a lookup method. This method is called when the
+ * DNS server is performing a query, after the find zone and before any
+ * other methods have been called. This function returns DNS record
* information using the dns_sdlz_putrr and dns_sdlz_putsoa functions.
* If this function supplies authority information for the DNS record
* the authority method is not required. If it does not, the
- * authority function is required. A SDLZ driver must implement a
- * lookup method.
+ * authority function is required.
+ *
+ * The 'methods' and 'clientinfo' args allow an SDLZ driver to retrieve
+ * information about the querying client (such as source IP address)
+ * from the caller.
*/
typedef isc_result_t (*dns_sdlznewversion_t)(const char *zone,
diff --git a/contrib/bind9/lib/dns/include/dns/time.h b/contrib/bind9/lib/dns/include/dns/time.h
index b646ba80edbf..6a59c8a056ee 100644
--- a/contrib/bind9/lib/dns/include/dns/time.h
+++ b/contrib/bind9/lib/dns/include/dns/time.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: time.h,v 1.19 2012/01/27 23:46:58 tbox Exp $ */
#ifndef DNS_TIME_H
#define DNS_TIME_H 1
diff --git a/contrib/bind9/lib/dns/include/dns/types.h b/contrib/bind9/lib/dns/include/dns/types.h
index 921c76aaf308..76167c2f88da 100644
--- a/contrib/bind9/lib/dns/include/dns/types.h
+++ b/contrib/bind9/lib/dns/include/dns/types.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -65,6 +65,7 @@ typedef struct dns_decompress dns_decompress_t;
typedef struct dns_dispatch dns_dispatch_t;
typedef struct dns_dispatchevent dns_dispatchevent_t;
typedef struct dns_dispatchlist dns_dispatchlist_t;
+typedef struct dns_dispatchset dns_dispatchset_t;
typedef struct dns_dispatchmgr dns_dispatchmgr_t;
typedef struct dns_dispentry dns_dispentry_t;
typedef struct dns_dns64 dns_dns64_t;
@@ -72,6 +73,7 @@ typedef ISC_LIST(dns_dns64_t) dns_dns64list_t;
typedef struct dns_dnsseckey dns_dnsseckey_t;
typedef ISC_LIST(dns_dnsseckey_t) dns_dnsseckeylist_t;
typedef struct dns_dumpctx dns_dumpctx_t;
+typedef struct dns_ednsopt dns_ednsopt_t;
typedef struct dns_fetch dns_fetch_t;
typedef struct dns_fixedname dns_fixedname_t;
typedef struct dns_forwarders dns_forwarders_t;
@@ -85,6 +87,7 @@ typedef struct dns_keytable dns_keytable_t;
typedef isc_uint16_t dns_keytag_t;
typedef struct dns_loadctx dns_loadctx_t;
typedef struct dns_loadmgr dns_loadmgr_t;
+typedef struct dns_masterrawheader dns_masterrawheader_t;
typedef struct dns_message dns_message_t;
typedef isc_uint16_t dns_messageid_t;
typedef isc_region_t dns_label_t;
@@ -332,6 +335,20 @@ typedef enum {
dns_severity_fail
} dns_severity_t;
+/*%
+ * DNS Serial Number Update Method.
+ *
+ * \li _increment: Add one to the current serial, skipping 0.
+ * \li _unixtime: Set to the seconds since 00:00 Jan 1, 1970,
+ * if possible.
+ * \li _yyyymmvv: Set to Year, Month, Version, if possible.
+ * (Not yet implemented)
+ */
+typedef enum {
+ dns_updatemethod_increment = 0,
+ dns_updatemethod_unixtime
+} dns_updatemethod_t;
+
/*
* Functions.
*/
@@ -341,6 +358,9 @@ typedef void
typedef void
(*dns_loaddonefunc_t)(void *, isc_result_t);
+typedef void
+(*dns_rawdatafunc_t)(dns_zone_t *, dns_masterrawheader_t *);
+
typedef isc_result_t
(*dns_addrdatasetfunc_t)(void *, dns_name_t *, dns_rdataset_t *);
@@ -373,4 +393,7 @@ typedef isc_boolean_t
(*dns_isselffunc_t)(dns_view_t *, dns_tsigkey_t *, isc_sockaddr_t *,
isc_sockaddr_t *, dns_rdataclass_t, void *);
+typedef void
+(*dns_nseclog_t)(void *val, int , const char *, ...);
+
#endif /* DNS_TYPES_H */
diff --git a/contrib/bind9/lib/dns/include/dns/update.h b/contrib/bind9/lib/dns/include/dns/update.h
new file mode 100644
index 000000000000..2d2c491f38a3
--- /dev/null
+++ b/contrib/bind9/lib/dns/include/dns/update.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: update.h,v 1.5 2011/08/30 23:46:53 tbox Exp $ */
+
+#ifndef DNS_UPDATE_H
+#define DNS_UPDATE_H 1
+
+/*! \file dns/update.h */
+
+/***
+ *** Imports
+ ***/
+
+#include <isc/lang.h>
+
+#include <dns/types.h>
+#include <dns/diff.h>
+
+typedef struct {
+ void (*func)(void *arg, dns_zone_t *zone, int level,
+ const char *message);
+ void *arg;
+} dns_update_log_t;
+
+ISC_LANG_BEGINDECLS
+
+/***
+ *** Functions
+ ***/
+
+isc_uint32_t
+dns_update_soaserial(isc_uint32_t serial, dns_updatemethod_t method);
+/*%<
+ * Return the next serial number after 'serial', depending on the
+ * update method 'method':
+ *
+ *\li * dns_updatemethod_increment increments the serial number by one
+ *\li * dns_updatemethod_unixtime sets the serial number to the current
+ * time (seconds since UNIX epoch) if possible, or increments by one
+ * if not.
+ */
+
+isc_result_t
+dns_update_signatures(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *oldver, dns_dbversion_t *newver,
+ dns_diff_t *diff, isc_uint32_t sigvalidityinterval);
+
+ISC_LANG_ENDDECLS
+
+#endif /* DNS_UPDATE_H */
diff --git a/contrib/bind9/lib/dns/include/dns/validator.h b/contrib/bind9/lib/dns/include/dns/validator.h
index 7d6ea7a89d2f..b3cfe9992fd9 100644
--- a/contrib/bind9/lib/dns/include/dns/validator.h
+++ b/contrib/bind9/lib/dns/include/dns/validator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2010, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -104,6 +104,10 @@ typedef struct dns_validatorevent {
* Optout proof seen.
*/
isc_boolean_t optout;
+ /*
+ * Answer is secure.
+ */
+ isc_boolean_t secure;
} dns_validatorevent_t;
#define DNS_VALIDATOR_NOQNAMEPROOF 0
diff --git a/contrib/bind9/lib/dns/include/dns/view.h b/contrib/bind9/lib/dns/include/dns/view.h
index 4a0486721b26..d0c1931d27be 100644
--- a/contrib/bind9/lib/dns/include/dns/view.h
+++ b/contrib/bind9/lib/dns/include/dns/view.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -76,6 +76,7 @@
#include <dns/rdatastruct.h>
#include <dns/rpz.h>
#include <dns/types.h>
+#include <dns/zt.h>
ISC_LANG_BEGINDECLS
@@ -141,7 +142,6 @@ struct dns_view {
dns_rbt_t * answeracl_exclude;
dns_rbt_t * denyanswernames;
dns_rbt_t * answernames_exclude;
- isc_boolean_t requestixfr;
isc_boolean_t provideixfr;
isc_boolean_t requestnsid;
dns_ttl_t maxcachettl;
@@ -157,6 +157,7 @@ struct dns_view {
dns_name_t * dlv;
dns_fixedname_t dlv_fixed;
isc_uint16_t maxudp;
+ unsigned int maxbits;
dns_v4_aaaa_t v4_aaaa;
dns_acl_t * v4_aaaa_acl;
dns_dns64list_t dns64;
@@ -164,6 +165,7 @@ struct dns_view {
ISC_LIST(dns_rpz_zone_t) rpz_zones;
isc_boolean_t rpz_recursive_only;
isc_boolean_t rpz_break_dnssec;
+ unsigned int rpz_min_ns_labels;
/*
* Configurable data for server use only,
@@ -184,6 +186,7 @@ struct dns_view {
dns_viewlist_t * viewlist;
dns_zone_t * managed_keys;
+ dns_zone_t * redirect;
#ifdef BIND9
/* File in which to store configuration for newly added zones */
@@ -311,7 +314,8 @@ dns_view_weakdetach(dns_view_t **targetp);
isc_result_t
dns_view_createresolver(dns_view_t *view,
- isc_taskmgr_t *taskmgr, unsigned int ntasks,
+ isc_taskmgr_t *taskmgr,
+ unsigned int ntasks, unsigned int ndisp,
isc_socketmgr_t *socketmgr,
isc_timermgr_t *timermgr,
unsigned int options,
@@ -729,14 +733,21 @@ dns_view_load(dns_view_t *view, isc_boolean_t stop);
isc_result_t
dns_view_loadnew(dns_view_t *view, isc_boolean_t stop);
+
+isc_result_t
+dns_view_asyncload(dns_view_t *view, dns_zt_allloaded_t callback, void *arg);
/*%<
* Load zones attached to this view. dns_view_load() loads
* all zones whose master file has changed since the last
* load; dns_view_loadnew() loads only zones that have never
* been loaded.
*
+ * dns_view_asyncload() loads zones asynchronously. When all zones
+ * in the view have finished loading, 'callback' is called with argument
+ * 'arg' to inform the caller.
+ *
* If 'stop' is ISC_TRUE, stop on the first error and return it.
- * If 'stop' is ISC_FALSE, ignore errors.
+ * If 'stop' is ISC_FALSE (or we are loading asynchronously), ignore errors.
*
* Requires:
*
@@ -840,9 +851,31 @@ dns_view_flushcache2(dns_view_t *view, isc_boolean_t fixuponly);
*/
isc_result_t
-dns_view_flushname(dns_view_t *view, dns_name_t *);
+dns_view_flushnode(dns_view_t *view, dns_name_t *name, isc_boolean_t tree);
/*%<
- * Flush the given name from the view's cache (and ADB).
+ * Flush the given name from the view's cache (and optionally ADB/badcache).
+ *
+ * If 'tree' is true, flush 'name' and all names below it
+ * from the cache, but do not flush ADB.
+ *
+ * If 'tree' is false, flush 'name' frmo both the cache and ADB,
+ * but do not touch any other nodes.
+ *
+ * Requires:
+ *\li 'view' is valid.
+ *\li 'name' is valid.
+ *
+ * Returns:
+ *\li #ISC_R_SUCCESS
+ * other returns are failures.
+ */
+
+isc_result_t
+dns_view_flushname(dns_view_t *view, dns_name_t *name);
+/*%<
+ * Flush the given name from the view's cache, ADB and badcache.
+ * Equivalent to dns_view_flushnode(view, name, ISC_FALSE).
+ *
*
* Requires:
*\li 'view' is valid.
@@ -858,7 +891,6 @@ dns_view_adddelegationonly(dns_view_t *view, dns_name_t *name);
/*%<
* Add the given name to the delegation only table.
*
- *
* Requires:
*\li 'view' is valid.
*\li 'name' is valid.
diff --git a/contrib/bind9/lib/dns/include/dns/zone.h b/contrib/bind9/lib/dns/include/dns/zone.h
index 9db825cb09ea..f91801f6fe3f 100644
--- a/contrib/bind9/lib/dns/include/dns/zone.h
+++ b/contrib/bind9/lib/dns/include/dns/zone.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -32,9 +32,12 @@
#include <isc/lang.h>
#include <isc/rwlock.h>
+#include <dns/master.h>
#include <dns/masterdump.h>
#include <dns/rdatastruct.h>
+#include <dns/rpz.h>
#include <dns/types.h>
+#include <dns/zt.h>
typedef enum {
dns_zone_none,
@@ -43,9 +46,16 @@ typedef enum {
dns_zone_stub,
dns_zone_staticstub,
dns_zone_key,
- dns_zone_dlz
+ dns_zone_dlz,
+ dns_zone_redirect
} dns_zonetype_t;
+typedef enum {
+ dns_zonestat_none = 0,
+ dns_zonestat_terse,
+ dns_zonestat_full
+} dns_zonestat_level_t;
+
#define DNS_ZONEOPT_SERVERS 0x00000001U /*%< perform server checks */
#define DNS_ZONEOPT_PARENTS 0x00000002U /*%< perform parent checks */
#define DNS_ZONEOPT_CHILDREN 0x00000004U /*%< perform child checks */
@@ -77,6 +87,7 @@ typedef enum {
#define DNS_ZONEOPT_DNSKEYKSKONLY 0x10000000U /*%< dnssec-dnskey-kskonly */
#define DNS_ZONEOPT_CHECKDUPRR 0x20000000U /*%< check-dup-records */
#define DNS_ZONEOPT_CHECKDUPRRFAIL 0x40000000U /*%< fatal check-dup-records failures */
+#define DNS_ZONEOPT_CHECKSPF 0x80000000U /*%< check SPF records */
#ifndef NOMINUM_PUBLIC
/*
@@ -92,6 +103,7 @@ typedef enum {
#define DNS_ZONEKEY_MAINTAIN 0x00000002U /*%< publish/sign on schedule */
#define DNS_ZONEKEY_CREATE 0x00000004U /*%< make keys when needed */
#define DNS_ZONEKEY_FULLSIGN 0x00000008U /*%< roll to new keys immediately */
+#define DNS_ZONEKEY_NORESIGN 0x00000010U /*%< no automatic resigning */
#ifndef DNS_ZONE_MINREFRESH
#define DNS_ZONE_MINREFRESH 300 /*%< 5 minutes */
@@ -285,6 +297,7 @@ dns_zone_loadnew(dns_zone_t *zone);
isc_result_t
dns_zone_loadandthaw(dns_zone_t *zone);
+
/*%<
* Cause the database to be loaded from its backing store.
* Confirm that the minimum requirements for the zone type are
@@ -309,6 +322,25 @@ dns_zone_loadandthaw(dns_zone_t *zone);
*\li Any result value from dns_db_load().
*/
+isc_result_t
+dns_zone_asyncload(dns_zone_t *zone, dns_zt_zoneloaded_t done, void *arg);
+/*%<
+ * Cause the database to be loaded from its backing store asynchronously.
+ * Other zone maintenance functions are suspended until this is complete.
+ * When finished, 'done' is called to inform the caller, with 'arg' as
+ * its first argument and 'zone' as its second. (Normally, 'arg' is
+ * expected to point to the zone table but is left undefined for testing
+ * purposes.)
+ */
+
+isc_boolean_t
+dns__zone_loadpending(dns_zone_t *zone);
+/*%<
+ * Indicates whether the zone is waiting to be loaded asynchronously.
+ * (Not currently intended for use outside of this module and associated
+ * tests.)
+ */
+
void
dns_zone_attach(dns_zone_t *source, dns_zone_t **target);
/*%<
@@ -487,6 +519,10 @@ dns_zone_dumptostream(dns_zone_t *zone, FILE *fd);
isc_result_t
dns_zone_dumptostream2(dns_zone_t *zone, FILE *fd, dns_masterformat_t format,
const dns_master_style_t *style);
+isc_result_t
+dns_zone_dumptostream3(dns_zone_t *zone, FILE *fd, dns_masterformat_t format,
+ const dns_master_style_t *style,
+ const isc_uint32_t rawversion);
/*%<
* Write the zone to stream 'fd' in the specified 'format'.
* If the 'format' is dns_masterformat_text (RFC1035), 'style' also
@@ -496,7 +532,11 @@ dns_zone_dumptostream2(dns_zone_t *zone, FILE *fd, dns_masterformat_t format,
* dns_zone_dumptostream2(), which always uses the dns_masterformat_text
* format and the dns_master_style_default style.
*
- * Note that dns_zone_dumptostream2() is the most flexible form. It
+ * dns_zone_dumptostream2() is a backward-compatible form of
+ * dns_zone_dumptostream3(), which always uses the current
+ * default raw file format version.
+ *
+ * Note that dns_zone_dumptostream3() is the most flexible form. It
* can also provide the functionality of dns_zone_fulldumptostream().
*
* Require:
@@ -556,10 +596,16 @@ dns_zone_setmasterswithkeys(dns_zone_t *zone,
isc_result_t
dns_zone_setalsonotify(dns_zone_t *zone, const isc_sockaddr_t *notify,
isc_uint32_t count);
+isc_result_t
+dns_zone_setalsonotifywithkeys(dns_zone_t *zone, const isc_sockaddr_t *notify,
+ dns_name_t **keynames, isc_uint32_t count);
/*%<
* Set the list of additional servers to be notified when
* a zone changes. To clear the list use 'count = 0'.
*
+ * dns_zone_alsonotifywithkeys() allows each notify address to
+ * be associated with a TSIG key.
+ *
* Require:
*\li 'zone' to be a valid zone.
*\li 'notify' to be non-NULL if count != 0.
@@ -1403,6 +1449,18 @@ dns_zonemgr_setsize(dns_zonemgr_t *zmgr, int num_zones);
*/
isc_result_t
+dns_zonemgr_createzone(dns_zonemgr_t *zmgr, dns_zone_t **zonep);
+/*%<
+ * Allocate a new zone using a memory context from the
+ * zone manager's memory context pool.
+ *
+ * Require:
+ *\li 'zmgr' to be a valid zone manager.
+ *\li 'zonep' != NULL and '*zonep' == NULL.
+ */
+
+
+isc_result_t
dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone);
/*%<
* Bring the zone under control of a zone manager.
@@ -1420,6 +1478,14 @@ dns_zonemgr_forcemaint(dns_zonemgr_t *zmgr);
*/
void
+dns__zonemgr_run(isc_task_t *task, isc_event_t *event);
+/*%<
+ * Event handler to call dns_zonemgr_forcemaint(); used to start
+ * zone operations from a unit test. Not intended for use outside
+ * libdns or related tests.
+ */
+
+void
dns_zonemgr_resumexfrs(dns_zonemgr_t *zmgr);
/*%<
* Attempt to start any stalled zone transfers.
@@ -1645,9 +1711,13 @@ dns_zone_setstats(dns_zone_t *zone, isc_stats_t *stats);
void
dns_zone_setrequeststats(dns_zone_t *zone, isc_stats_t *stats);
+
+void
+dns_zone_setrcvquerystats(dns_zone_t *zone, dns_stats_t *stats);
/*%<
- * Set an additional statistics set to zone. It is attached in the zone
- * but is not counted in the zone module; only the caller updates the counters.
+ * Set additional statistics sets to zone. These are attached to the zone
+ * but are not counted in the zone module; only the caller updates the
+ * counters.
*
* Requires:
* \li 'zone' to be a valid zone.
@@ -1655,8 +1725,19 @@ dns_zone_setrequeststats(dns_zone_t *zone, isc_stats_t *stats);
*\li stats is a valid statistics.
*/
+#ifdef NEWSTATS
+void
+dns_zone_setrcvquerystats(dns_zone_t *zone, dns_stats_t *stats);
+#endif
+
isc_stats_t *
dns_zone_getrequeststats(dns_zone_t *zone);
+
+#ifdef NEWSTATS
+dns_stats_t *
+dns_zone_getrcvquerystats(dns_zone_t *zone);
+#endif
+
/*%<
* Get the additional statistics for zone, if one is installed.
*
@@ -1891,6 +1972,107 @@ dns_zone_dlzpostload(dns_zone_t *zone, dns_db_t *db);
* Load the origin names for a writeable DLZ database.
*/
+isc_boolean_t
+dns_zone_isdynamic(dns_zone_t *zone, isc_boolean_t ignore_freeze);
+/*%
+ * Return true iff the zone is "dynamic", in the sense that the zone's
+ * master file (if any) is written by the server, rather than being
+ * updated manually and read by the server.
+ *
+ * This is true for slave zones, stub zones, key zones, and zones that
+ * allow dynamic updates either by having an update policy ("ssutable")
+ * or an "allow-update" ACL with a value other than exactly "{ none; }".
+ *
+ * If 'ignore_freeze' is true, then the zone which has had updates disabled
+ * will still report itself to be dynamic.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+isc_result_t
+dns_zone_setrefreshkeyinterval(dns_zone_t *zone, isc_uint32_t interval);
+/*%
+ * Sets the frequency, in minutes, with which the key repository will be
+ * checked to see if the keys for this zone have been updated. Any value
+ * higher than 1440 minutes (24 hours) will be silently reduced. A
+ * value of zero will return an out-of-range error.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+isc_boolean_t
+dns_zone_getrequestixfr(dns_zone_t *zone);
+/*%
+ * Returns the true/false value of the request-ixfr option in the zone.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+void
+dns_zone_setrequestixfr(dns_zone_t *zone, isc_boolean_t flag);
+/*%
+ * Sets the request-ixfr option for the zone. Either true or false. The
+ * default value is determined by the setting of this option in the view.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+void
+dns_zone_setserialupdatemethod(dns_zone_t *zone, dns_updatemethod_t method);
+/*%
+ * Sets the update method to use when incrementing the zone serial number
+ * due to a DDNS update. Valid options are dns_updatemethod_increment
+ * and dns_updatemethod_unixtime.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+dns_updatemethod_t
+dns_zone_getserialupdatemethod(dns_zone_t *zone);
+/*%
+ * Returns the update method to be used when incrementing the zone serial
+ * number due to a DDNS update.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+isc_result_t
+dns_zone_link(dns_zone_t *zone, dns_zone_t *raw);
+
+void
+dns_zone_getraw(dns_zone_t *zone, dns_zone_t **raw);
+
+isc_result_t
+dns_zone_keydone(dns_zone_t *zone, const char *data);
+
+isc_result_t
+dns_zone_setnsec3param(dns_zone_t *zone, isc_uint8_t hash, isc_uint8_t flags,
+ isc_uint16_t iter, isc_uint8_t saltlen,
+ unsigned char *salt, isc_boolean_t replace);
+/*%
+ * Set the NSEC3 parameters for the zone.
+ *
+ * If 'replace' is ISC_TRUE, then the existing NSEC3 chain, if any, will
+ * be replaced with the new one. If 'hash' is zero, then the replacement
+ * chain will be NSEC rather than NSEC3.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+void
+dns_zone_setrawdata(dns_zone_t *zone, dns_masterrawheader_t *header);
+/*%
+ * Set the data to be included in the header when the zone is dumped in
+ * binary format.
+ */
+
isc_result_t
dns_zone_synckeyzone(dns_zone_t *zone);
/*%
@@ -1898,6 +2080,25 @@ dns_zone_synckeyzone(dns_zone_t *zone);
* maintenance timer.
*/
+isc_result_t
+dns_zone_rpz_enable(dns_zone_t *zone);
+/*%
+ * Set the response policy associated with a zone.
+ */
+
+isc_boolean_t
+dns_zone_get_rpz(dns_zone_t *zone);
+
+void
+dns_zone_setstatlevel(dns_zone_t *zone, dns_zonestat_level_t level);
+
+dns_zonestat_level_t
+dns_zone_getstatlevel(dns_zone_t *zone);
+/*%
+ * Set and get the statistics reporting level for the zone;
+ * full, terse, or none.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_ZONE_H */
diff --git a/contrib/bind9/lib/dns/include/dns/zt.h b/contrib/bind9/lib/dns/include/dns/zt.h
index 7d1e8bfdfd84..f91d7e8dbe0f 100644
--- a/contrib/bind9/lib/dns/include/dns/zt.h
+++ b/contrib/bind9/lib/dns/include/dns/zt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: zt.h,v 1.40 2011/09/02 23:46:32 tbox Exp $ */
#ifndef DNS_ZT_H
#define DNS_ZT_H 1
@@ -30,6 +30,21 @@
ISC_LANG_BEGINDECLS
+typedef isc_result_t
+(*dns_zt_allloaded_t)(void *arg);
+/*%<
+ * Method prototype: when all pending zone loads are complete,
+ * the zone table can inform the caller via a callback function with
+ * this signature.
+ */
+
+typedef isc_result_t
+(*dns_zt_zoneloaded_t)(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task);
+/*%<
+ * Method prototype: when a zone finishes loading, the zt object
+ * can be informed via a callback function with this signature.
+ */
+
isc_result_t
dns_zt_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_zt_t **zt);
/*%<
@@ -134,6 +149,9 @@ dns_zt_load(dns_zt_t *zt, isc_boolean_t stop);
isc_result_t
dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop);
+
+isc_result_t
+dns_zt_asyncload(dns_zt_t *zt, dns_zt_allloaded_t alldone, void *arg);
/*%<
* Load all zones in the table. If 'stop' is ISC_TRUE,
* stop on the first error and return it. If 'stop'
@@ -142,6 +160,10 @@ dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop);
* dns_zt_loadnew() only loads zones that are not yet loaded.
* dns_zt_load() also loads zones that are already loaded and
* and whose master file has changed since the last load.
+ * dns_zt_asyncload() loads zones asynchronously; when all
+ * zones in the zone table have finished loaded (or failed due
+ * to errors), the caller is informed by calling 'alldone'
+ * with an argument of 'arg'.
*
* Requires:
* \li 'zt' to be valid
@@ -178,6 +200,16 @@ dns_zt_apply2(dns_zt_t *zt, isc_boolean_t stop, isc_result_t *sub,
* any error code from 'action'.
*/
+isc_boolean_t
+dns_zt_loadspending(dns_zt_t *zt);
+/*%<
+ * Returns ISC_TRUE if and only if there are zones still waiting to
+ * be loaded in zone table 'zt'.
+ *
+ * Requires:
+ * \li 'zt' to be valid.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_ZT_H */
diff --git a/contrib/bind9/lib/dns/include/dst/dst.h b/contrib/bind9/lib/dns/include/dst/dst.h
index b0fa690fdd0e..4724fc64c95e 100644
--- a/contrib/bind9/lib/dns/include/dst/dst.h
+++ b/contrib/bind9/lib/dns/include/dst/dst.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: dst.h,v 1.34 2011/10/20 21:20:02 marka Exp $ */
#ifndef DST_DST_H
#define DST_DST_H 1
@@ -26,6 +26,7 @@
#include <isc/stdtime.h>
#include <dns/types.h>
+#include <dns/log.h>
#include <dns/name.h>
#include <dns/secalg.h>
@@ -169,6 +170,11 @@ dst_algorithm_supported(unsigned int alg);
isc_result_t
dst_context_create(dst_key_t *key, isc_mem_t *mctx, dst_context_t **dctxp);
+
+isc_result_t
+dst_context_create2(dst_key_t *key, isc_mem_t *mctx,
+ isc_logcategory_t *category, dst_context_t **dctxp);
+
/*%<
* Creates a context to be used for a sign or verify operation.
*
@@ -233,9 +239,16 @@ dst_context_sign(dst_context_t *dctx, isc_buffer_t *sig);
isc_result_t
dst_context_verify(dst_context_t *dctx, isc_region_t *sig);
+
+isc_result_t
+dst_context_verify2(dst_context_t *dctx, unsigned int maxbits,
+ isc_region_t *sig);
/*%<
* Verifies the signature using the data and key stored in the context.
*
+ * 'maxbits' specifies the maximum number of bits permitted in the RSA
+ * exponent.
+ *
* Requires:
* \li "dctx" is a valid context.
* \li "sig" is a valid region.
@@ -492,6 +505,14 @@ dst_key_fromgssapi(dns_name_t *name, gss_ctx_id_t gssctx, isc_mem_t *mctx,
* the context id.
*/
+#ifdef DST_KEY_INTERNAL
+isc_result_t
+dst_key_buildinternal(dns_name_t *name, unsigned int alg,
+ unsigned int bits, unsigned int flags,
+ unsigned int protocol, dns_rdataclass_t rdclass,
+ void *data, isc_mem_t *mctx, dst_key_t **keyp);
+#endif
+
isc_result_t
dst_key_fromlabel(dns_name_t *name, int alg, unsigned int flags,
unsigned int protocol, dns_rdataclass_t rdclass,
@@ -512,6 +533,7 @@ dst_key_generate2(dns_name_t *name, unsigned int alg,
dns_rdataclass_t rdclass,
isc_mem_t *mctx, dst_key_t **keyp,
void (*callback)(int));
+
/*%<
* Generate a DST key (or keypair) with the supplied parameters. The
* interpretation of the "param" field depends on the algorithm:
@@ -742,6 +764,26 @@ dst_key_setbits(dst_key_t *key, isc_uint16_t bits);
* "key" is a valid key.
*/
+void
+dst_key_setttl(dst_key_t *key, dns_ttl_t ttl);
+/*%<
+ * Set the default TTL to use when converting the key
+ * to a KEY or DNSKEY RR.
+ *
+ * Requires:
+ * "key" is a valid key.
+ */
+
+dns_ttl_t
+dst_key_getttl(const dst_key_t *key);
+/*%<
+ * Get the default TTL to use when converting the key
+ * to a KEY or DNSKEY RR.
+ *
+ * Requires:
+ * "key" is a valid key.
+ */
+
isc_result_t
dst_key_setflags(dst_key_t *key, isc_uint32_t flags);
/*
diff --git a/contrib/bind9/lib/dns/iptable.c b/contrib/bind9/lib/dns/iptable.c
index e960d5c48cd1..701950533c9e 100644
--- a/contrib/bind9/lib/dns/iptable.c
+++ b/contrib/bind9/lib/dns/iptable.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2007-2009, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -36,7 +36,8 @@ dns_iptable_create(isc_mem_t *mctx, dns_iptable_t **target) {
tab = isc_mem_get(mctx, sizeof(*tab));
if (tab == NULL)
return (ISC_R_NOMEMORY);
- tab->mctx = mctx;
+ tab->mctx = NULL;
+ isc_mem_attach(mctx, &tab->mctx);
isc_refcount_init(&tab->refcount, 1);
tab->radix = NULL;
tab->magic = DNS_IPTABLE_MAGIC;
@@ -184,5 +185,5 @@ destroy_iptable(dns_iptable_t *dtab) {
isc_refcount_destroy(&dtab->refcount);
dtab->magic = 0;
- isc_mem_put(dtab->mctx, dtab, sizeof(*dtab));
+ isc_mem_putanddetach(&dtab->mctx, dtab, sizeof(*dtab));
}
diff --git a/contrib/bind9/lib/dns/journal.c b/contrib/bind9/lib/dns/journal.c
index 1564a811ffed..022a3e280f83 100644
--- a/contrib/bind9/lib/dns/journal.c
+++ b/contrib/bind9/lib/dns/journal.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: journal.c,v 1.120 2011/12/22 07:32:41 each Exp $ */
#include <config.h>
@@ -111,6 +111,8 @@ static isc_boolean_t bind8_compat = ISC_TRUE; /* XXX config */
if (result != ISC_R_SUCCESS) goto failure; \
} while (0)
+#define JOURNAL_SERIALSET 0x01U
+
static isc_result_t index_to_disk(dns_journal_t *);
static inline isc_uint32_t
@@ -213,6 +215,9 @@ typedef union {
journal_rawpos_t end;
/*% Number of index entries following the header. */
unsigned char index_size[4];
+ /*% Source serial number. */
+ unsigned char sourceserial[4];
+ unsigned char flags;
} h;
/* Pad the header to a fixed size. */
unsigned char pad[JOURNAL_HEADER_SIZE];
@@ -252,6 +257,8 @@ typedef struct {
journal_pos_t begin;
journal_pos_t end;
isc_uint32_t index_size;
+ isc_uint32_t sourceserial;
+ isc_boolean_t serialset;
} journal_header_t;
/*%
@@ -284,7 +291,7 @@ typedef struct {
*/
static journal_header_t
-initial_journal_header = { ";BIND LOG V9\n", { 0, 0 }, { 0, 0 }, 0 };
+initial_journal_header = { ";BIND LOG V9\n", { 0, 0 }, { 0, 0 }, 0, 0, 0 };
#define JOURNAL_EMPTY(h) ((h)->begin.offset == (h)->end.offset)
@@ -292,7 +299,8 @@ typedef enum {
JOURNAL_STATE_INVALID,
JOURNAL_STATE_READ,
JOURNAL_STATE_WRITE,
- JOURNAL_STATE_TRANSACTION
+ JOURNAL_STATE_TRANSACTION,
+ JOURNAL_STATE_INLINE
} journal_state_t;
struct dns_journal {
@@ -353,16 +361,24 @@ journal_header_decode(journal_rawheader_t *raw, journal_header_t *cooked) {
journal_pos_decode(&raw->h.begin, &cooked->begin);
journal_pos_decode(&raw->h.end, &cooked->end);
cooked->index_size = decode_uint32(raw->h.index_size);
+ cooked->sourceserial = decode_uint32(raw->h.sourceserial);
+ cooked->serialset = ISC_TF(raw->h.flags & JOURNAL_SERIALSET);
}
static void
journal_header_encode(journal_header_t *cooked, journal_rawheader_t *raw) {
+ unsigned char flags = 0;
+
INSIST(sizeof(cooked->format) == sizeof(raw->h.format));
memset(raw->pad, 0, sizeof(raw->pad));
memcpy(raw->h.format, cooked->format, sizeof(raw->h.format));
journal_pos_encode(&raw->h.begin, &cooked->begin);
journal_pos_encode(&raw->h.end, &cooked->end);
encode_uint32(cooked->index_size, raw->h.index_size);
+ encode_uint32(cooked->sourceserial, raw->h.sourceserial);
+ if (cooked->serialset)
+ flags |= JOURNAL_SERIALSET;
+ raw->h.flags = flags;
}
/*
@@ -540,7 +556,8 @@ journal_file_create(isc_mem_t *mctx, const char *filename) {
static isc_result_t
journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
- isc_boolean_t create, dns_journal_t **journalp) {
+ isc_boolean_t create, dns_journal_t **journalp)
+{
FILE *fp = NULL;
isc_result_t result;
journal_rawheader_t rawheader;
@@ -551,7 +568,8 @@ journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
if (j == NULL)
return (ISC_R_NOMEMORY);
- j->mctx = mctx;
+ j->mctx = NULL;
+ isc_mem_attach(mctx, &j->mctx);
j->state = JOURNAL_STATE_INVALID;
j->fp = NULL;
j->filename = filename;
@@ -662,18 +680,23 @@ journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
}
if (j->fp != NULL)
(void)isc_stdio_close(j->fp);
- isc_mem_put(j->mctx, j, sizeof(*j));
+ isc_mem_putanddetach(&j->mctx, j, sizeof(*j));
return (result);
}
isc_result_t
-dns_journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
- dns_journal_t **journalp) {
+dns_journal_open(isc_mem_t *mctx, const char *filename, unsigned int mode,
+ dns_journal_t **journalp)
+{
isc_result_t result;
int namelen;
char backup[1024];
+ isc_boolean_t write, create;
+
+ create = ISC_TF(mode & DNS_JOURNAL_CREATE);
+ write = ISC_TF(mode & (DNS_JOURNAL_WRITE|DNS_JOURNAL_CREATE));
- result = journal_open(mctx, filename, write, write, journalp);
+ result = journal_open(mctx, filename, write, create, journalp);
if (result == ISC_R_NOTFOUND) {
namelen = strlen(filename);
if (namelen > 4 && strcmp(filename + namelen - 4, ".jnl") == 0)
@@ -944,7 +967,8 @@ dns_journal_begin_transaction(dns_journal_t *j) {
journal_rawxhdr_t hdr;
REQUIRE(DNS_JOURNAL_VALID(j));
- REQUIRE(j->state == JOURNAL_STATE_WRITE);
+ REQUIRE(j->state == JOURNAL_STATE_WRITE ||
+ j->state == JOURNAL_STATE_INLINE);
/*
* Find the file offset where the new transaction should
@@ -1067,7 +1091,21 @@ dns_journal_commit(dns_journal_t *j) {
journal_rawheader_t rawheader;
REQUIRE(DNS_JOURNAL_VALID(j));
- REQUIRE(j->state == JOURNAL_STATE_TRANSACTION);
+ REQUIRE(j->state == JOURNAL_STATE_TRANSACTION ||
+ j->state == JOURNAL_STATE_INLINE);
+
+ /*
+ * Just write out a updated header.
+ */
+ if (j->state == JOURNAL_STATE_INLINE) {
+ CHECK(journal_fsync(j));
+ journal_header_encode(&j->header, &rawheader);
+ CHECK(journal_seek(j, 0));
+ CHECK(journal_write(j, &rawheader, sizeof(rawheader)));
+ CHECK(journal_fsync(j));
+ j->state = JOURNAL_STATE_WRITE;
+ return (ISC_R_SUCCESS);
+ }
/*
* Perform some basic consistency checks.
@@ -1124,20 +1162,23 @@ dns_journal_commit(dns_journal_t *j) {
*/
CHECK(journal_fsync(j));
- /*
- * Update the transaction header.
- */
- CHECK(journal_seek(j, j->x.pos[0].offset));
- CHECK(journal_write_xhdr(j, (j->x.pos[1].offset - j->x.pos[0].offset) -
- sizeof(journal_rawxhdr_t),
- j->x.pos[0].serial, j->x.pos[1].serial));
+ if (j->state == JOURNAL_STATE_TRANSACTION) {
+ isc_offset_t offset;
+ offset = (j->x.pos[1].offset - j->x.pos[0].offset) -
+ sizeof(journal_rawxhdr_t);
+ /*
+ * Update the transaction header.
+ */
+ CHECK(journal_seek(j, j->x.pos[0].offset));
+ CHECK(journal_write_xhdr(j, offset, j->x.pos[0].serial,
+ j->x.pos[1].serial));
+ }
/*
* Update the journal header.
*/
- if (JOURNAL_EMPTY(&j->header)) {
+ if (JOURNAL_EMPTY(&j->header))
j->header.begin = j->x.pos[0];
- }
j->header.end = j->x.pos[1];
journal_header_encode(&j->header, &rawheader);
CHECK(journal_seek(j, 0));
@@ -1204,7 +1245,7 @@ dns_journal_destroy(dns_journal_t **journalp) {
if (j->fp != NULL)
(void)isc_stdio_close(j->fp);
j->magic = 0;
- isc_mem_put(j->mctx, j, sizeof(*j));
+ isc_mem_putanddetach(&j->mctx, j, sizeof(*j));
*journalp = NULL;
}
@@ -1369,7 +1410,7 @@ dns_journal_rollforward2(isc_mem_t *mctx, dns_db_t *db, unsigned int options,
REQUIRE(filename != NULL);
j = NULL;
- result = dns_journal_open(mctx, filename, ISC_FALSE, &j);
+ result = dns_journal_open(mctx, filename, DNS_JOURNAL_READ, &j);
if (result == ISC_R_NOTFOUND) {
isc_log_write(JOURNAL_DEBUG_LOGARGS(3),
"no journal file, but that's OK");
@@ -1402,7 +1443,7 @@ dns_journal_print(isc_mem_t *mctx, const char *filename, FILE *file) {
REQUIRE(filename != NULL);
j = NULL;
- result = dns_journal_open(mctx, filename, ISC_FALSE, &j);
+ result = dns_journal_open(mctx, filename, DNS_JOURNAL_READ, &j);
if (result == ISC_R_NOTFOUND) {
isc_log_write(JOURNAL_DEBUG_LOGARGS(3), "no journal file");
return (DNS_R_NOJOURNAL);
@@ -1415,6 +1456,8 @@ dns_journal_print(isc_mem_t *mctx, const char *filename, FILE *file) {
return (result);
}
+ if (j->header.serialset)
+ fprintf(file, "Source serial = %u\n", j->header.sourceserial);
dns_diff_init(j->mctx, &diff);
/*
@@ -1497,14 +1540,39 @@ dns_journal_print(isc_mem_t *mctx, const char *filename, FILE *file) {
/*
* Miscellaneous accessors.
*/
-isc_uint32_t dns_journal_first_serial(dns_journal_t *j) {
+isc_uint32_t
+dns_journal_first_serial(dns_journal_t *j) {
return (j->header.begin.serial);
}
-isc_uint32_t dns_journal_last_serial(dns_journal_t *j) {
+isc_uint32_t
+dns_journal_last_serial(dns_journal_t *j) {
return (j->header.end.serial);
}
+void
+dns_journal_set_sourceserial(dns_journal_t *j, isc_uint32_t sourceserial) {
+
+ REQUIRE(j->state == JOURNAL_STATE_WRITE ||
+ j->state == JOURNAL_STATE_INLINE ||
+ j->state == JOURNAL_STATE_TRANSACTION);
+
+ j->header.sourceserial = sourceserial;
+ j->header.serialset = ISC_TRUE;
+ if (j->state == JOURNAL_STATE_WRITE)
+ j->state = JOURNAL_STATE_INLINE;
+}
+
+isc_boolean_t
+dns_journal_get_sourceserial(dns_journal_t *j, isc_uint32_t *sourceserial) {
+ REQUIRE(sourceserial != NULL);
+
+ if (!j->header.serialset)
+ return (ISC_FALSE);
+ *sourceserial = j->header.sourceserial;
+ return (ISC_TRUE);
+}
+
/**************************************************************************/
/*
* Iteration support.
@@ -1860,8 +1928,7 @@ dns_diff_subtract(dns_diff_t diff[2], dns_diff_t *r) {
}
static isc_result_t
-diff_namespace(isc_mem_t *mctx,
- dns_db_t *dba, dns_dbversion_t *dbvera,
+diff_namespace(dns_db_t *dba, dns_dbversion_t *dbvera,
dns_db_t *dbb, dns_dbversion_t *dbverb,
unsigned int options, dns_diff_t *resultdiff)
{
@@ -1877,8 +1944,8 @@ diff_namespace(isc_mem_t *mctx,
db[0] = dba, db[1] = dbb;
ver[0] = dbvera, ver[1] = dbverb;
- dns_diff_init(mctx, &diff[0]);
- dns_diff_init(mctx, &diff[1]);
+ dns_diff_init(resultdiff->mctx, &diff[0]);
+ dns_diff_init(resultdiff->mctx, &diff[1]);
dns_fixedname_init(&fixname[0]);
dns_fixedname_init(&fixname[1]);
@@ -1956,8 +2023,11 @@ diff_namespace(isc_mem_t *mctx,
failure:
dns_dbiterator_destroy(&dbit[1]);
+
cleanup_iterator:
dns_dbiterator_destroy(&dbit[0]);
+ dns_diff_clear(&diff[0]);
+ dns_diff_clear(&diff[1]);
return (result);
}
@@ -1968,33 +2038,48 @@ diff_namespace(isc_mem_t *mctx,
* possibly very large transaction.
*/
isc_result_t
-dns_db_diff(isc_mem_t *mctx,
- dns_db_t *dba, dns_dbversion_t *dbvera,
- dns_db_t *dbb, dns_dbversion_t *dbverb,
- const char *journal_filename)
+dns_db_diff(isc_mem_t *mctx, dns_db_t *dba, dns_dbversion_t *dbvera,
+ dns_db_t *dbb, dns_dbversion_t *dbverb, const char *filename)
+{
+ isc_result_t result;
+ dns_diff_t diff;
+
+ dns_diff_init(mctx, &diff);
+
+ result = dns_db_diffx(&diff, dba, dbvera, dbb, dbverb, filename);
+
+ dns_diff_clear(&diff);
+
+ return (result);
+}
+
+isc_result_t
+dns_db_diffx(dns_diff_t *diff, dns_db_t *dba, dns_dbversion_t *dbvera,
+ dns_db_t *dbb, dns_dbversion_t *dbverb, const char *filename)
{
isc_result_t result;
dns_journal_t *journal = NULL;
- dns_diff_t resultdiff;
- result = dns_journal_open(mctx, journal_filename, ISC_TRUE, &journal);
- if (result != ISC_R_SUCCESS)
- return (result);
+ if (filename != NULL) {
+ result = dns_journal_open(diff->mctx, filename,
+ DNS_JOURNAL_CREATE, &journal);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
- dns_diff_init(mctx, &resultdiff);
+ CHECK(diff_namespace(dba, dbvera, dbb, dbverb, DNS_DB_NONSEC3, diff));
+ CHECK(diff_namespace(dba, dbvera, dbb, dbverb, DNS_DB_NSEC3ONLY, diff));
- CHECK(diff_namespace(mctx, dba, dbvera, dbb, dbverb,
- DNS_DB_NONSEC3, &resultdiff));
- CHECK(diff_namespace(mctx, dba, dbvera, dbb, dbverb,
- DNS_DB_NSEC3ONLY, &resultdiff));
- if (ISC_LIST_EMPTY(resultdiff.tuples)) {
- isc_log_write(JOURNAL_DEBUG_LOGARGS(3), "no changes");
- } else {
- CHECK(dns_journal_write_transaction(journal, &resultdiff));
+ if (journal != NULL) {
+ if (ISC_LIST_EMPTY(diff->tuples))
+ isc_log_write(JOURNAL_DEBUG_LOGARGS(3), "no changes");
+ else
+ CHECK(dns_journal_write_transaction(journal, diff));
}
+
failure:
- dns_diff_clear(&resultdiff);
- dns_journal_destroy(&journal);
+ if (journal != NULL)
+ dns_journal_destroy(&journal);
return (result);
}
@@ -2145,6 +2230,8 @@ dns_journal_compact(isc_mem_t *mctx, char *filename, isc_uint32_t serial,
new->header.begin.offset = indexend;
new->header.end.serial = j->header.end.serial;
new->header.end.offset = indexend + copy_length;
+ new->header.sourceserial = j->header.sourceserial;
+ new->header.serialset = j->header.serialset;
/*
* Update the journal header.
diff --git a/contrib/bind9/lib/dns/key.c b/contrib/bind9/lib/dns/key.c
index bf9b16c170c4..ccac157c13f0 100644
--- a/contrib/bind9/lib/dns/key.c
+++ b/contrib/bind9/lib/dns/key.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: key.c,v 1.11 2011/10/20 21:20:02 marka Exp $ */
#include <config.h>
@@ -177,4 +177,16 @@ dst_key_getbits(const dst_key_t *key) {
return (key->key_bits);
}
+void
+dst_key_setttl(dst_key_t *key, dns_ttl_t ttl) {
+ REQUIRE(VALID_KEY(key));
+ key->key_ttl = ttl;
+}
+
+dns_ttl_t
+dst_key_getttl(const dst_key_t *key) {
+ REQUIRE(VALID_KEY(key));
+ return (key->key_ttl);
+}
+
/*! \file */
diff --git a/contrib/bind9/lib/dns/keytable.c b/contrib/bind9/lib/dns/keytable.c
index 309e9dd2d8d5..c49847f326ad 100644
--- a/contrib/bind9/lib/dns/keytable.c
+++ b/contrib/bind9/lib/dns/keytable.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2010, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -67,7 +67,8 @@ dns_keytable_create(isc_mem_t *mctx, dns_keytable_t **keytablep) {
if (result != ISC_R_SUCCESS)
goto cleanup_lock;
- keytable->mctx = mctx;
+ keytable->mctx = NULL;
+ isc_mem_attach(mctx, &keytable->mctx);
keytable->active_nodes = 0;
keytable->references = 1;
keytable->magic = KEYTABLE_MAGIC;
@@ -82,7 +83,7 @@ dns_keytable_create(isc_mem_t *mctx, dns_keytable_t **keytablep) {
dns_rbt_destroy(&keytable->table);
cleanup_keytable:
- isc_mem_put(mctx, keytable, sizeof(*keytable));
+ isc_mem_putanddetach(&mctx, keytable, sizeof(*keytable));
return (result);
}
@@ -137,7 +138,8 @@ dns_keytable_detach(dns_keytable_t **keytablep) {
isc_rwlock_destroy(&keytable->rwlock);
DESTROYLOCK(&keytable->lock);
keytable->magic = 0;
- isc_mem_put(keytable->mctx, keytable, sizeof(*keytable));
+ isc_mem_putanddetach(&keytable->mctx,
+ keytable, sizeof(*keytable));
}
*keytablep = NULL;
diff --git a/contrib/bind9/lib/dns/log.c b/contrib/bind9/lib/dns/log.c
index d286d103e63c..c4d644e3899f 100644
--- a/contrib/bind9/lib/dns/log.c
+++ b/contrib/bind9/lib/dns/log.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: log.c,v 1.49 2011/10/13 22:48:24 tbox Exp $ */
/*! \file */
diff --git a/contrib/bind9/lib/dns/lookup.c b/contrib/bind9/lib/dns/lookup.c
index d5fc7aae4767..9387a955cd3f 100644
--- a/contrib/bind9/lib/dns/lookup.c
+++ b/contrib/bind9/lib/dns/lookup.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -356,7 +356,7 @@ static void
levent_destroy(isc_event_t *event) {
dns_lookupevent_t *levent;
isc_mem_t *mctx;
-
+
REQUIRE(event->ev_type == DNS_EVENT_LOOKUPDONE);
mctx = event->ev_destroy_arg;
levent = (dns_lookupevent_t *)event;
@@ -393,7 +393,8 @@ dns_lookup_create(isc_mem_t *mctx, dns_name_t *name, dns_rdatatype_t type,
lookup = isc_mem_get(mctx, sizeof(*lookup));
if (lookup == NULL)
return (ISC_R_NOMEMORY);
- lookup->mctx = mctx;
+ lookup->mctx = NULL;
+ isc_mem_attach(mctx, &lookup->mctx);
lookup->options = options;
ievent = isc_event_allocate(mctx, lookup, DNS_EVENT_LOOKUPDONE,
@@ -452,7 +453,7 @@ dns_lookup_create(isc_mem_t *mctx, dns_name_t *name, dns_rdatatype_t type,
isc_task_detach(&lookup->task);
cleanup_lookup:
- isc_mem_put(mctx, lookup, sizeof(*lookup));
+ isc_mem_putanddetach(&mctx, lookup, sizeof(*lookup));
return (result);
}
@@ -491,7 +492,7 @@ dns_lookup_destroy(dns_lookup_t **lookupp) {
DESTROYLOCK(&lookup->lock);
lookup->magic = 0;
- isc_mem_put(lookup->mctx, lookup, sizeof(*lookup));
+ isc_mem_putanddetach(&lookup->mctx, lookup, sizeof(*lookup));
*lookupp = NULL;
}
diff --git a/contrib/bind9/lib/dns/master.c b/contrib/bind9/lib/dns/master.c
index 8304507f5193..d0c175876f5c 100644
--- a/contrib/bind9/lib/dns/master.c
+++ b/contrib/bind9/lib/dns/master.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -133,6 +133,7 @@ struct dns_loadctx {
/* Members specific to the raw format: */
FILE *f;
isc_boolean_t first;
+ dns_masterrawheader_t header;
/* Which fixed buffers we are using? */
unsigned int loop_cnt; /*% records per quantum,
@@ -156,6 +157,7 @@ struct dns_incctx {
int glue_in_use;
int current_in_use;
int origin_in_use;
+ isc_boolean_t origin_changed;
isc_boolean_t drop;
unsigned int glue_line;
unsigned int current_line;
@@ -568,6 +570,7 @@ loadctx_create(dns_masterformat_t format, isc_mem_t *mctx,
goto cleanup_inc;
lctx->keep_lex = ISC_FALSE;
memset(specials, 0, sizeof(specials));
+ specials[0] = 1;
specials['('] = 1;
specials[')'] = 1;
specials['"'] = 1;
@@ -595,6 +598,7 @@ loadctx_create(dns_masterformat_t format, isc_mem_t *mctx,
lctx->f = NULL;
lctx->first = ISC_TRUE;
+ dns_master_initrawheader(&lctx->header);
lctx->loop_cnt = (done != NULL) ? 100 : 0;
lctx->callbacks = callbacks;
@@ -770,7 +774,7 @@ static isc_result_t
openfile_raw(dns_loadctx_t *lctx, const char *master_file) {
isc_result_t result;
- result = isc_stdio_open(master_file, "r", &lctx->f);
+ result = isc_stdio_open(master_file, "rb", &lctx->f);
if (result != ISC_R_SUCCESS && result != ISC_R_FILENOTFOUND) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_stdio_open() failed: %s",
@@ -1402,6 +1406,7 @@ load_text(dns_loadctx_t *lctx) {
ictx->origin_in_use = new_in_use;
ictx->in_use[ictx->origin_in_use] = ISC_TRUE;
ictx->origin = new_name;
+ ictx->origin_changed = ISC_TRUE;
finish_origin = ISC_FALSE;
EXPECTEOL;
continue;
@@ -1574,8 +1579,24 @@ load_text(dns_loadctx_t *lctx) {
} else if (result != ISC_R_SUCCESS)
goto insist_and_cleanup;
}
+
+ if (ictx->origin_changed) {
+ char cbuf[DNS_NAME_FORMATSIZE];
+ char obuf[DNS_NAME_FORMATSIZE];
+ dns_name_format(ictx->current, cbuf,
+ sizeof(cbuf));
+ dns_name_format(ictx->origin, obuf,
+ sizeof(obuf));
+ (*callbacks->warn)(callbacks,
+ "%s:%lu: record with inherited "
+ "owner (%s) immediately after "
+ "$ORIGIN (%s)", source, line,
+ cbuf, obuf);
+ }
}
+ ictx->origin_changed = ISC_FALSE;
+
if (dns_rdataclass_fromtext(&rdclass,
&token.value.as_textregion)
== ISC_R_SUCCESS)
@@ -2086,50 +2107,74 @@ load_raw(dns_loadctx_t *lctx) {
int target_size = TSIZ;
isc_buffer_t target, buf;
unsigned char *target_mem = NULL;
+ dns_masterrawheader_t header;
dns_decompress_t dctx;
REQUIRE(DNS_LCTX_VALID(lctx));
callbacks = lctx->callbacks;
dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_NONE);
+ dns_master_initrawheader(&header);
+
if (lctx->first) {
- dns_masterrawheader_t header;
- isc_uint32_t format, version, dumptime;
- size_t hdrlen = sizeof(format) + sizeof(version) +
- sizeof(dumptime);
+ unsigned char data[sizeof(header)];
+ size_t commonlen =
+ sizeof(header.format) + sizeof(header.version);
+ size_t remainder;
- INSIST(hdrlen <= sizeof(header));
- isc_buffer_init(&target, &header, sizeof(header));
+ INSIST(commonlen <= sizeof(header));
+ isc_buffer_init(&target, data, sizeof(data));
- result = isc_stdio_read(&header, 1, hdrlen, lctx->f, NULL);
+ result = isc_stdio_read(data, 1, commonlen, lctx->f, NULL);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"isc_stdio_read failed: %s",
isc_result_totext(result));
return (result);
}
- isc_buffer_add(&target, hdrlen);
- format = isc_buffer_getuint32(&target);
- if (format != dns_masterformat_raw) {
+ isc_buffer_add(&target, commonlen);
+ header.format = isc_buffer_getuint32(&target);
+ if (header.format != dns_masterformat_raw) {
(*callbacks->error)(callbacks,
"dns_master_load: "
"file format mismatch");
return (ISC_R_NOTIMPLEMENTED);
}
- version = isc_buffer_getuint32(&target);
- if (version > DNS_RAWFORMAT_VERSION) {
+ header.version = isc_buffer_getuint32(&target);
+ switch (header.version) {
+ case 0:
+ remainder = sizeof(header.dumptime);
+ break;
+ case DNS_RAWFORMAT_VERSION:
+ remainder = sizeof(header) - commonlen;
+ break;
+ default:
(*callbacks->error)(callbacks,
"dns_master_load: "
"unsupported file format version");
return (ISC_R_NOTIMPLEMENTED);
}
- /* Empty read: currently, we do not use dumptime */
- dumptime = isc_buffer_getuint32(&target);
- POST(dumptime);
+ result = isc_stdio_read(data + commonlen, 1, remainder,
+ lctx->f, NULL);
+ if (result != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "isc_stdio_read failed: %s",
+ isc_result_totext(result));
+ return (result);
+ }
+
+ isc_buffer_add(&target, remainder);
+ header.dumptime = isc_buffer_getuint32(&target);
+ if (header.version == DNS_RAWFORMAT_VERSION) {
+ header.flags = isc_buffer_getuint32(&target);
+ header.sourceserial = isc_buffer_getuint32(&target);
+ header.lastxfrin = isc_buffer_getuint32(&target);
+ }
lctx->first = ISC_FALSE;
+ lctx->header = header;
}
ISC_LIST_INIT(head);
@@ -2364,6 +2409,9 @@ load_raw(dns_loadctx_t *lctx) {
} else if (result == ISC_R_SUCCESS && lctx->result != ISC_R_SUCCESS)
result = lctx->result;
+ if (result == ISC_R_SUCCESS && callbacks->rawdata != NULL)
+ (*callbacks->rawdata)(callbacks->zone, &header);
+
cleanup:
if (rdata != NULL)
isc_mem_put(mctx, rdata, rdata_size * sizeof(*rdata));
@@ -2950,3 +2998,8 @@ dns_loadctx_cancel(dns_loadctx_t *lctx) {
lctx->canceled = ISC_TRUE;
UNLOCK(&lctx->lock);
}
+
+void
+dns_master_initrawheader(dns_masterrawheader_t *header) {
+ memset(header, 0, sizeof(dns_masterrawheader_t));
+}
diff --git a/contrib/bind9/lib/dns/masterdump.c b/contrib/bind9/lib/dns/masterdump.c
index a10e6f2d559e..2717658e691a 100644
--- a/contrib/bind9/lib/dns/masterdump.c
+++ b/contrib/bind9/lib/dns/masterdump.c
@@ -74,6 +74,7 @@ struct dns_master_style {
unsigned int rdata_column;
unsigned int line_length;
unsigned int tab_width;
+ unsigned int split_width;
};
/*%
@@ -108,15 +109,16 @@ dns_master_style_default = {
DNS_STYLEFLAG_OMIT_TTL |
DNS_STYLEFLAG_TTL |
DNS_STYLEFLAG_COMMENT |
+ DNS_STYLEFLAG_RRCOMMENT |
DNS_STYLEFLAG_MULTILINE,
- 24, 24, 24, 32, 80, 8
+ 24, 24, 24, 32, 80, 8, UINT_MAX
};
LIBDNS_EXTERNAL_DATA const dns_master_style_t
dns_master_style_full = {
DNS_STYLEFLAG_COMMENT |
DNS_STYLEFLAG_RESIGN,
- 46, 46, 46, 64, 120, 8
+ 46, 46, 46, 64, 120, 8, UINT_MAX
};
LIBDNS_EXTERNAL_DATA const dns_master_style_t
@@ -126,8 +128,9 @@ dns_master_style_explicitttl = {
DNS_STYLEFLAG_REL_OWNER |
DNS_STYLEFLAG_REL_DATA |
DNS_STYLEFLAG_COMMENT |
+ DNS_STYLEFLAG_RRCOMMENT |
DNS_STYLEFLAG_MULTILINE,
- 24, 32, 32, 40, 80, 8
+ 24, 32, 32, 40, 80, 8, UINT_MAX
};
LIBDNS_EXTERNAL_DATA const dns_master_style_t
@@ -137,13 +140,13 @@ dns_master_style_cache = {
DNS_STYLEFLAG_MULTILINE |
DNS_STYLEFLAG_TRUST |
DNS_STYLEFLAG_NCACHE,
- 24, 32, 32, 40, 80, 8
+ 24, 32, 32, 40, 80, 8, UINT_MAX
};
LIBDNS_EXTERNAL_DATA const dns_master_style_t
dns_master_style_simple = {
0,
- 24, 32, 32, 40, 80, 8
+ 24, 32, 32, 40, 80, 8, UINT_MAX
};
/*%
@@ -152,7 +155,7 @@ dns_master_style_simple = {
LIBDNS_EXTERNAL_DATA const dns_master_style_t
dns_master_style_debug = {
DNS_STYLEFLAG_REL_OWNER,
- 24, 32, 40, 48, 80, 8
+ 24, 32, 40, 48, 80, 8, UINT_MAX
};
@@ -185,6 +188,7 @@ struct dns_dumpctx {
char *file;
char *tmpfile;
dns_masterformat_t format;
+ dns_masterrawheader_t header;
isc_result_t (*dumpsets)(isc_mem_t *mctx, dns_name_t *name,
dns_rdatasetiter_t *rdsiter,
dns_totext_ctx_t *ctx,
@@ -373,7 +377,7 @@ ncache_summary(dns_rdataset_t *rdataset, isc_boolean_t omit_final_dot,
dns_rdataset_current(&rds, &rdata);
CHECK(str_totext(" ", target));
CHECK(dns_rdata_tofmttext(&rdata, dns_rootname,
- 0, 0, " ", target));
+ 0, 0, 0, " ", target));
CHECK(str_totext("\n", target));
}
}
@@ -533,6 +537,7 @@ rdataset_totext(dns_rdataset_t *rdataset,
ctx->style.flags,
ctx->style.line_length -
ctx->style.rdata_column,
+ ctx->style.split_width,
ctx->linebreak,
target));
@@ -1147,20 +1152,52 @@ dns_dumpctx_cancel(dns_dumpctx_t *dctx) {
}
static isc_result_t
-closeandrename(FILE *f, isc_result_t result, const char *temp, const char *file)
-{
- isc_result_t tresult;
+flushandsync(FILE *f, isc_result_t result, const char *temp) {
isc_boolean_t logit = ISC_TF(result == ISC_R_SUCCESS);
if (result == ISC_R_SUCCESS)
- result = isc_stdio_sync(f);
+ result = isc_stdio_flush(f);
if (result != ISC_R_SUCCESS && logit) {
- isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
- DNS_LOGMODULE_MASTERDUMP, ISC_LOG_ERROR,
- "dumping master file: %s: fsync: %s",
- temp, isc_result_totext(result));
+ if (temp != NULL)
+ isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
+ DNS_LOGMODULE_MASTERDUMP, ISC_LOG_ERROR,
+ "dumping to master file: %s: flush: %s",
+ temp, isc_result_totext(result));
+ else
+ isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
+ DNS_LOGMODULE_MASTERDUMP, ISC_LOG_ERROR,
+ "dumping to stream: flush: %s",
+ isc_result_totext(result));
logit = ISC_FALSE;
}
+
+ if (result == ISC_R_SUCCESS)
+ result = isc_stdio_sync(f);
+ if (result != ISC_R_SUCCESS && logit) {
+ if (temp != NULL)
+ isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
+ DNS_LOGMODULE_MASTERDUMP, ISC_LOG_ERROR,
+ "dumping to master file: %s: fsync: %s",
+ temp, isc_result_totext(result));
+ else
+ isc_log_write(dns_lctx, ISC_LOGCATEGORY_GENERAL,
+ DNS_LOGMODULE_MASTERDUMP, ISC_LOG_ERROR,
+ "dumping to stream: fsync: %s",
+ isc_result_totext(result));
+ }
+ return (result);
+}
+
+static isc_result_t
+closeandrename(FILE *f, isc_result_t result, const char *temp, const char *file)
+{
+ isc_result_t tresult;
+ isc_boolean_t logit = ISC_TF(result == ISC_R_SUCCESS);
+
+ result = flushandsync(f, result, temp);
+ if (result != ISC_R_SUCCESS)
+ logit = ISC_FALSE;
+
tresult = isc_stdio_close(f);
if (result == ISC_R_SUCCESS)
result = tresult;
@@ -1208,7 +1245,8 @@ dump_quantum(isc_task_t *task, isc_event_t *event) {
dctx->tmpfile, dctx->file);
if (tresult != ISC_R_SUCCESS && result == ISC_R_SUCCESS)
result = tresult;
- }
+ } else
+ result = flushandsync(dctx->f, result, NULL);
(dctx->done)(dctx->done_arg, result);
isc_event_free(&event);
dns_dumpctx_detach(&dctx);
@@ -1229,7 +1267,7 @@ task_send(dns_dumpctx_t *dctx) {
static isc_result_t
dumpctx_create(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
const dns_master_style_t *style, FILE *f, dns_dumpctx_t **dctxp,
- dns_masterformat_t format)
+ dns_masterformat_t format, dns_masterrawheader_t *header)
{
dns_dumpctx_t *dctx;
isc_result_t result;
@@ -1253,6 +1291,10 @@ dumpctx_create(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
dctx->file = NULL;
dctx->tmpfile = NULL;
dctx->format = format;
+ if (header == NULL)
+ dns_master_initrawheader(&dctx->header);
+ else
+ dctx->header = *header;
switch (format) {
case dns_masterformat_text:
@@ -1320,7 +1362,7 @@ dumptostreaminc(dns_dumpctx_t *dctx) {
dns_fixedname_t fixname;
unsigned int nodes;
dns_masterrawheader_t rawheader;
- isc_uint32_t now32;
+ isc_uint32_t rawversion, now32;
isc_time_t start;
bufmem = isc_mem_get(dctx->mctx, initial_buffer_length);
@@ -1355,8 +1397,6 @@ dumptostreaminc(dns_dumpctx_t *dctx) {
r.base = (unsigned char *)&rawheader;
r.length = sizeof(rawheader);
isc_buffer_region(&buffer, &r);
- isc_buffer_putuint32(&buffer, dns_masterformat_raw);
- isc_buffer_putuint32(&buffer, DNS_RAWFORMAT_VERSION);
#if !defined(STDTIME_ON_32BITS) || (STDTIME_ON_32BITS + 0) != 1
/*
* We assume isc_stdtime_t is a 32-bit integer,
@@ -1375,7 +1415,22 @@ dumptostreaminc(dns_dumpctx_t *dctx) {
#else
now32 = dctx->now;
#endif
+ rawversion = 1;
+ if ((dctx->header.flags & DNS_MASTERRAW_COMPAT) != 0)
+ rawversion = 0;
+ isc_buffer_putuint32(&buffer, dns_masterformat_raw);
+ isc_buffer_putuint32(&buffer, rawversion);
isc_buffer_putuint32(&buffer, now32);
+
+ if (rawversion == 1) {
+ isc_buffer_putuint32(&buffer,
+ dctx->header.flags);
+ isc_buffer_putuint32(&buffer,
+ dctx->header.sourceserial);
+ isc_buffer_putuint32(&buffer,
+ dctx->header.lastxfrin);
+ }
+
INSIST(isc_buffer_usedlength(&buffer) <=
sizeof(rawheader));
result = isc_stdio_write(buffer.base, 1,
@@ -1494,7 +1549,7 @@ dns_master_dumptostreaminc(isc_mem_t *mctx, dns_db_t *db,
REQUIRE(done != NULL);
result = dumpctx_create(mctx, db, version, style, f, &dctx,
- dns_masterformat_text);
+ dns_masterformat_text, NULL);
if (result != ISC_R_SUCCESS)
return (result);
isc_task_attach(task, &dctx->task);
@@ -1521,8 +1576,8 @@ dns_master_dumptostream(isc_mem_t *mctx, dns_db_t *db,
const dns_master_style_t *style,
FILE *f)
{
- return (dns_master_dumptostream2(mctx, db, version, style,
- dns_masterformat_text, f));
+ return (dns_master_dumptostream3(mctx, db, version, style,
+ dns_masterformat_text, NULL, f));
}
isc_result_t
@@ -1531,16 +1586,30 @@ dns_master_dumptostream2(isc_mem_t *mctx, dns_db_t *db,
const dns_master_style_t *style,
dns_masterformat_t format, FILE *f)
{
+ return (dns_master_dumptostream3(mctx, db, version, style,
+ format, NULL, f));
+}
+
+isc_result_t
+dns_master_dumptostream3(isc_mem_t *mctx, dns_db_t *db,
+ dns_dbversion_t *version,
+ const dns_master_style_t *style,
+ dns_masterformat_t format,
+ dns_masterrawheader_t *header, FILE *f)
+{
dns_dumpctx_t *dctx = NULL;
isc_result_t result;
- result = dumpctx_create(mctx, db, version, style, f, &dctx, format);
+ result = dumpctx_create(mctx, db, version, style, f, &dctx,
+ format, header);
if (result != ISC_R_SUCCESS)
return (result);
result = dumptostreaminc(dctx);
INSIST(result != DNS_R_CONTINUE);
dns_dumpctx_detach(&dctx);
+
+ result = flushandsync(f, result, NULL);
return (result);
}
@@ -1587,9 +1656,9 @@ dns_master_dumpinc(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
isc_task_t *task, dns_dumpdonefunc_t done, void *done_arg,
dns_dumpctx_t **dctxp)
{
- return (dns_master_dumpinc2(mctx, db, version, style, filename, task,
+ return (dns_master_dumpinc3(mctx, db, version, style, filename, task,
done, done_arg, dctxp,
- dns_masterformat_text));
+ dns_masterformat_text, NULL));
}
isc_result_t
@@ -1598,6 +1667,17 @@ dns_master_dumpinc2(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
isc_task_t *task, dns_dumpdonefunc_t done, void *done_arg,
dns_dumpctx_t **dctxp, dns_masterformat_t format)
{
+ return (dns_master_dumpinc3(mctx, db, version, style, filename, task,
+ done, done_arg, dctxp, format, NULL));
+}
+
+isc_result_t
+dns_master_dumpinc3(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
+ const dns_master_style_t *style, const char *filename,
+ isc_task_t *task, dns_dumpdonefunc_t done, void *done_arg,
+ dns_dumpctx_t **dctxp, dns_masterformat_t format,
+ dns_masterrawheader_t *header)
+{
FILE *f = NULL;
isc_result_t result;
char *tempname = NULL;
@@ -1612,7 +1692,8 @@ dns_master_dumpinc2(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
if (result != ISC_R_SUCCESS)
goto cleanup;
- result = dumpctx_create(mctx, db, version, style, f, &dctx, format);
+ result = dumpctx_create(mctx, db, version, style, f, &dctx,
+ format, header);
if (result != ISC_R_SUCCESS) {
(void)isc_stdio_close(f);
(void)isc_file_remove(tempname);
@@ -1648,8 +1729,8 @@ isc_result_t
dns_master_dump(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
const dns_master_style_t *style, const char *filename)
{
- return (dns_master_dump2(mctx, db, version, style, filename,
- dns_masterformat_text));
+ return (dns_master_dump3(mctx, db, version, style, filename,
+ dns_masterformat_text, NULL));
}
isc_result_t
@@ -1657,6 +1738,15 @@ dns_master_dump2(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
const dns_master_style_t *style, const char *filename,
dns_masterformat_t format)
{
+ return (dns_master_dump3(mctx, db, version, style, filename,
+ format, NULL));
+}
+
+isc_result_t
+dns_master_dump3(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
+ const dns_master_style_t *style, const char *filename,
+ dns_masterformat_t format, dns_masterrawheader_t *header)
+{
FILE *f = NULL;
isc_result_t result;
char *tempname;
@@ -1666,7 +1756,8 @@ dns_master_dump2(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
if (result != ISC_R_SUCCESS)
return (result);
- result = dumpctx_create(mctx, db, version, style, f, &dctx, format);
+ result = dumpctx_create(mctx, db, version, style, f, &dctx,
+ format, header);
if (result != ISC_R_SUCCESS)
goto cleanup;
@@ -1777,6 +1868,19 @@ dns_master_stylecreate(dns_master_style_t **stylep, unsigned int flags,
unsigned int line_length, unsigned int tab_width,
isc_mem_t *mctx)
{
+ return (dns_master_stylecreate2(stylep, flags, ttl_column,
+ class_column, type_column,
+ rdata_column, line_length,
+ tab_width, 0xffffffff, mctx));
+}
+
+isc_result_t
+dns_master_stylecreate2(dns_master_style_t **stylep, unsigned int flags,
+ unsigned int ttl_column, unsigned int class_column,
+ unsigned int type_column, unsigned int rdata_column,
+ unsigned int line_length, unsigned int tab_width,
+ unsigned int split_width, isc_mem_t *mctx)
+{
dns_master_style_t *style;
REQUIRE(stylep != NULL && *stylep == NULL);
@@ -1791,6 +1895,7 @@ dns_master_stylecreate(dns_master_style_t **stylep, unsigned int flags,
style->rdata_column = rdata_column;
style->line_length = line_length;
style->tab_width = tab_width;
+ style->split_width = split_width;
*stylep = style;
return (ISC_R_SUCCESS);
diff --git a/contrib/bind9/lib/dns/message.c b/contrib/bind9/lib/dns/message.c
index 2b65f0e48243..53efc5a1beb5 100644
--- a/contrib/bind9/lib/dns/message.c
+++ b/contrib/bind9/lib/dns/message.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -732,7 +732,9 @@ dns_message_create(isc_mem_t *mctx, unsigned int intent, dns_message_t **msgp)
for (i = 0; i < DNS_SECTION_MAX; i++)
ISC_LIST_INIT(m->sections[i]);
- m->mctx = mctx;
+
+ m->mctx = NULL;
+ isc_mem_attach(mctx, &m->mctx);
ISC_LIST_INIT(m->scratchpad);
ISC_LIST_INIT(m->cleanup);
@@ -786,7 +788,7 @@ dns_message_create(isc_mem_t *mctx, unsigned int intent, dns_message_t **msgp)
if (m->rdspool != NULL)
isc_mempool_destroy(&m->rdspool);
m->magic = 0;
- isc_mem_put(mctx, m, sizeof(dns_message_t));
+ isc_mem_putanddetach(&mctx, m, sizeof(dns_message_t));
return (ISC_R_NOMEMORY);
}
@@ -815,7 +817,7 @@ dns_message_destroy(dns_message_t **msgp) {
isc_mempool_destroy(&msg->namepool);
isc_mempool_destroy(&msg->rdspool);
msg->magic = 0;
- isc_mem_put(msg->mctx, msg, sizeof(dns_message_t));
+ isc_mem_putanddetach(&msg->mctx, msg, sizeof(dns_message_t));
}
static isc_result_t
@@ -1441,8 +1443,15 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
* the opcode is an update, or the type search is skipped.
*/
if (result == ISC_R_SUCCESS) {
- if (dns_rdatatype_issingleton(rdtype))
- DO_FORMERR;
+ if (dns_rdatatype_issingleton(rdtype)) {
+ dns_rdata_t *first;
+ dns_rdatalist_fromrdataset(rdataset,
+ &rdatalist);
+ first = ISC_LIST_HEAD(rdatalist->rdata);
+ INSIST(first != NULL);
+ if (dns_rdata_compare(rdata, first) != 0)
+ DO_FORMERR;
+ }
}
if (result == ISC_R_NOTFOUND) {
@@ -2112,6 +2121,30 @@ dns_message_renderend(dns_message_t *msg) {
}
/*
+ * If we're adding a OPT, TSIG or SIG(0) to a truncated message,
+ * clear all rdatasets from the message except for the question
+ * before adding the OPT, TSIG or SIG(0). If the question doesn't
+ * fit, don't include it.
+ */
+ if ((msg->tsigkey != NULL || msg->sig0key != NULL || msg->opt) &&
+ (msg->flags & DNS_MESSAGEFLAG_TC) != 0)
+ {
+ isc_buffer_t *buf;
+
+ msgresetnames(msg, DNS_SECTION_ANSWER);
+ buf = msg->buffer;
+ dns_message_renderreset(msg);
+ msg->buffer = buf;
+ isc_buffer_clear(msg->buffer);
+ isc_buffer_add(msg->buffer, DNS_MESSAGE_HEADERLEN);
+ dns_compress_rollback(msg->cctx, 0);
+ result = dns_message_rendersection(msg, DNS_SECTION_QUESTION,
+ 0);
+ if (result != ISC_R_SUCCESS && result != ISC_R_NOSPACE)
+ return (result);
+ }
+
+ /*
* If we've got an OPT record, render it.
*/
if (msg->opt != NULL) {
@@ -2136,30 +2169,6 @@ dns_message_renderend(dns_message_t *msg) {
}
/*
- * If we're adding a TSIG or SIG(0) to a truncated message,
- * clear all rdatasets from the message except for the question
- * before adding the TSIG or SIG(0). If the question doesn't fit,
- * don't include it.
- */
- if ((msg->tsigkey != NULL || msg->sig0key != NULL) &&
- (msg->flags & DNS_MESSAGEFLAG_TC) != 0)
- {
- isc_buffer_t *buf;
-
- msgresetnames(msg, DNS_SECTION_ANSWER);
- buf = msg->buffer;
- dns_message_renderreset(msg);
- msg->buffer = buf;
- isc_buffer_clear(msg->buffer);
- isc_buffer_add(msg->buffer, DNS_MESSAGE_HEADERLEN);
- dns_compress_rollback(msg->cctx, 0);
- result = dns_message_rendersection(msg, DNS_SECTION_QUESTION,
- 0);
- if (result != ISC_R_SUCCESS && result != ISC_R_NOSPACE)
- return (result);
- }
-
- /*
* If we're adding a TSIG record, generate and render it.
*/
if (msg->tsigkey != NULL) {
@@ -2633,9 +2642,9 @@ dns_message_setopt(dns_message_t *msg, dns_rdataset_t *opt) {
return (ISC_R_SUCCESS);
cleanup:
+ dns_rdataset_disassociate(opt);
dns_message_puttemprdataset(msg, &opt);
return (result);
-
}
dns_rdataset_t *
@@ -3449,3 +3458,95 @@ dns_opcode_totext(dns_opcode_t opcode, isc_buffer_t *target) {
isc_buffer_putstr(target, opcodetext[opcode]);
return (ISC_R_SUCCESS);
}
+
+isc_result_t
+dns_message_buildopt(dns_message_t *message, dns_rdataset_t **rdatasetp,
+ unsigned int version, isc_uint16_t udpsize,
+ unsigned int flags, dns_ednsopt_t *ednsopts, size_t count)
+{
+ dns_rdataset_t *rdataset = NULL;
+ dns_rdatalist_t *rdatalist = NULL;
+ dns_rdata_t *rdata = NULL;
+ isc_result_t result;
+ size_t len = 0, i;
+
+ REQUIRE(DNS_MESSAGE_VALID(message));
+ REQUIRE(rdatasetp != NULL && *rdatasetp == NULL);
+
+ result = dns_message_gettemprdatalist(message, &rdatalist);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ result = dns_message_gettemprdata(message, &rdata);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ result = dns_message_gettemprdataset(message, &rdataset);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ dns_rdataset_init(rdataset);
+
+ rdatalist->type = dns_rdatatype_opt;
+ rdatalist->covers = 0;
+
+ /*
+ * Set Maximum UDP buffer size.
+ */
+ rdatalist->rdclass = udpsize;
+
+ /*
+ * Set EXTENDED-RCODE and Z to 0.
+ */
+ rdatalist->ttl = (version << 16);
+ rdatalist->ttl |= (flags & 0xffff);
+
+ /*
+ * Set EDNS options if applicable
+ */
+ if (count != 0U) {
+ isc_buffer_t *buf = NULL;
+ for (i = 0; i < count; i++)
+ len += ednsopts[i].length + 4;
+
+ if (len > 0xffffU) {
+ result = ISC_R_NOSPACE;
+ goto cleanup;
+ }
+
+ result = isc_buffer_allocate(message->mctx, &buf, len);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+ for (i = 0; i < count; i++) {
+ isc_buffer_putuint16(buf, ednsopts[i].code);
+ isc_buffer_putuint16(buf, ednsopts[i].length);
+ isc_buffer_putmem(buf, ednsopts[i].value,
+ ednsopts[i].length);
+ }
+ rdata->data = isc_buffer_base(buf);
+ rdata->length = len;
+ dns_message_takebuffer(message, &buf);
+ } else {
+ rdata->data = NULL;
+ rdata->length = 0;
+ }
+
+ rdata->rdclass = rdatalist->rdclass;
+ rdata->type = rdatalist->type;
+ rdata->flags = 0;
+
+ ISC_LIST_INIT(rdatalist->rdata);
+ ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
+ result = dns_rdatalist_tordataset(rdatalist, rdataset);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ *rdatasetp = rdataset;
+ return (ISC_R_SUCCESS);
+
+ cleanup:
+ if (rdata != NULL)
+ dns_message_puttemprdata(message, &rdata);
+ if (rdataset != NULL)
+ dns_message_puttemprdataset(message, &rdataset);
+ if (rdatalist != NULL)
+ dns_message_puttemprdatalist(message, &rdatalist);
+ return (result);
+}
diff --git a/contrib/bind9/lib/dns/name.c b/contrib/bind9/lib/dns/name.c
index fab1f3345838..7fb21e138c3c 100644
--- a/contrib/bind9/lib/dns/name.c
+++ b/contrib/bind9/lib/dns/name.c
@@ -584,11 +584,13 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2,
nlabels = 0;
l1 = name1->labels;
l2 = name2->labels;
- ldiff = (int)l1 - (int)l2;
- if (ldiff < 0)
+ if (l2 > l1) {
l = l1;
- else
+ ldiff = 0 - (l2 - l1);
+ } else {
l = l2;
+ ldiff = l1 - l2;
+ }
while (l > 0) {
l--;
@@ -841,6 +843,10 @@ dns_name_matcheswildcard(const dns_name_t *name, const dns_name_t *wname) {
REQUIRE(labels > 0);
REQUIRE(dns_name_iswildcard(wname));
+#if defined(__clang__) && \
+ ( __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 2))
+ memset(&tname, 0, sizeof(tname));
+#endif
DNS_NAME_INIT(&tname, NULL);
dns_name_getlabelsequence(wname, 1, labels - 1, &tname);
if (dns_name_fullcompare(name, &tname, &order, &nlabels) ==
@@ -1427,6 +1433,7 @@ dns_name_totext2(dns_name_t *name, unsigned int options, isc_buffer_t *target)
case 0x24: /* '$' */
if ((options & DNS_NAME_MASTERFILE) == 0)
goto no_escape;
+ /* FALLTHROUGH */
case 0x22: /* '"' */
case 0x28: /* '(' */
case 0x29: /* ')' */
@@ -1934,6 +1941,10 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
* has one.
*/
if (name->offsets == NULL) {
+#if defined(__clang__) && \
+ ( __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 2))
+ memset(&clname, 0, sizeof(clname));
+#endif
DNS_NAME_INIT(&clname, clo);
dns_name_clone(name, &clname);
name = &clname;
@@ -2239,7 +2250,12 @@ dns_name_digest(dns_name_t *name, dns_digestfunc_t digest, void *arg) {
REQUIRE(VALID_NAME(name));
REQUIRE(digest != NULL);
+#if defined(__clang__) && \
+ ( __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 2))
+ memset(&downname, 0, sizeof(downname));
+#endif
DNS_NAME_INIT(&downname, NULL);
+
isc_buffer_init(&buffer, data, sizeof(data));
result = dns_name_downcase(name, &downname, &buffer);
@@ -2404,7 +2420,7 @@ dns_name_fromstring2(dns_name_t *target, const char *src,
REQUIRE(src != NULL);
- isc_buffer_init(&buf, src, strlen(src));
+ isc_buffer_constinit(&buf, src, strlen(src));
isc_buffer_add(&buf, strlen(src));
if (BINDABLE(target) && target->buffer != NULL)
name = target;
diff --git a/contrib/bind9/lib/dns/ncache.c b/contrib/bind9/lib/dns/ncache.c
index c0e99d4969d4..bcb3d057898d 100644
--- a/contrib/bind9/lib/dns/ncache.c
+++ b/contrib/bind9/lib/dns/ncache.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2008, 2010-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008, 2010-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -47,6 +47,12 @@
*
*/
+static isc_result_t
+addoptout(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
+ dns_rdatatype_t covers, isc_stdtime_t now, dns_ttl_t maxttl,
+ isc_boolean_t optout, isc_boolean_t secure,
+ dns_rdataset_t *addedrdataset);
+
static inline isc_result_t
copy_rdataset(dns_rdataset_t *rdataset, isc_buffer_t *buffer) {
isc_result_t result;
@@ -96,8 +102,8 @@ dns_ncache_add(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
dns_rdatatype_t covers, isc_stdtime_t now, dns_ttl_t maxttl,
dns_rdataset_t *addedrdataset)
{
- return (dns_ncache_addoptout(message, cache, node, covers, now, maxttl,
- ISC_FALSE, addedrdataset));
+ return (addoptout(message, cache, node, covers, now, maxttl,
+ ISC_FALSE, ISC_FALSE, addedrdataset));
}
isc_result_t
@@ -106,6 +112,16 @@ dns_ncache_addoptout(dns_message_t *message, dns_db_t *cache,
isc_stdtime_t now, dns_ttl_t maxttl,
isc_boolean_t optout, dns_rdataset_t *addedrdataset)
{
+ return (addoptout(message, cache, node, covers, now, maxttl,
+ optout, ISC_TRUE, addedrdataset));
+}
+
+static isc_result_t
+addoptout(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
+ dns_rdatatype_t covers, isc_stdtime_t now, dns_ttl_t maxttl,
+ isc_boolean_t optout, isc_boolean_t secure,
+ dns_rdataset_t *addedrdataset)
+{
isc_result_t result;
isc_buffer_t buffer;
isc_region_t r;
@@ -242,6 +258,8 @@ dns_ncache_addoptout(dns_message_t *message, dns_db_t *cache,
dns_rdataset_init(&ncrdataset);
RUNTIME_CHECK(dns_rdatalist_tordataset(&ncrdatalist, &ncrdataset)
== ISC_R_SUCCESS);
+ if (!secure && trust > dns_trust_answer)
+ trust = dns_trust_answer;
ncrdataset.trust = trust;
ncrdataset.attributes |= DNS_RDATASETATTR_NEGATIVE;
if (message->rcode == dns_rcode_nxdomain)
diff --git a/contrib/bind9/lib/dns/nsec.c b/contrib/bind9/lib/dns/nsec.c
index 72d1751f588e..e446806b4e6a 100644
--- a/contrib/bind9/lib/dns/nsec.c
+++ b/contrib/bind9/lib/dns/nsec.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -21,6 +21,7 @@
#include <config.h>
+#include <isc/log.h>
#include <isc/string.h>
#include <isc/util.h>
@@ -41,28 +42,61 @@
goto failure; \
} while (0)
-static void
-set_bit(unsigned char *array, unsigned int index, unsigned int bit) {
+void
+dns_nsec_setbit(unsigned char *array, unsigned int type, unsigned int bit) {
unsigned int shift, mask;
- shift = 7 - (index % 8);
+ shift = 7 - (type % 8);
mask = 1 << shift;
if (bit != 0)
- array[index / 8] |= mask;
+ array[type / 8] |= mask;
else
- array[index / 8] &= (~mask & 0xFF);
+ array[type / 8] &= (~mask & 0xFF);
}
-static unsigned int
-bit_isset(unsigned char *array, unsigned int index) {
+isc_boolean_t
+dns_nsec_isset(const unsigned char *array, unsigned int type) {
unsigned int byte, shift, mask;
- byte = array[index / 8];
- shift = 7 - (index % 8);
+ byte = array[type / 8];
+ shift = 7 - (type % 8);
mask = 1 << shift;
- return ((byte & mask) != 0);
+ return (ISC_TF(byte & mask));
+}
+
+unsigned int
+dns_nsec_compressbitmap(unsigned char *map, const unsigned char *raw,
+ unsigned int max_type)
+{
+ unsigned char *start = map;
+ unsigned int window;
+ int octet;
+
+ if (raw == NULL)
+ return (0);
+
+ for (window = 0; window < 256; window++) {
+ if (window * 256 > max_type)
+ break;
+ for (octet = 31; octet >= 0; octet--)
+ if (*(raw + octet) != 0)
+ break;
+ if (octet < 0) {
+ raw += 32;
+ continue;
+ }
+ *map++ = window;
+ *map++ = octet + 1;
+ /*
+ * Note: potential overlapping move.
+ */
+ memmove(map, raw, octet + 1);
+ map += octet + 1;
+ raw += 32;
+ }
+ return (map - start);
}
isc_result_t
@@ -73,8 +107,7 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version,
isc_result_t result;
dns_rdataset_t rdataset;
isc_region_t r;
- unsigned int i, window;
- int octet;
+ unsigned int i;
unsigned char *nsec_bits, *bm;
unsigned int max_type;
@@ -90,8 +123,8 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version,
*/
bm = r.base + r.length + 512;
nsec_bits = r.base + r.length;
- set_bit(bm, dns_rdatatype_rrsig, 1);
- set_bit(bm, dns_rdatatype_nsec, 1);
+ dns_nsec_setbit(bm, dns_rdatatype_rrsig, 1);
+ dns_nsec_setbit(bm, dns_rdatatype_nsec, 1);
max_type = dns_rdatatype_nsec;
dns_rdataset_init(&rdataset);
rdsiter = NULL;
@@ -108,7 +141,7 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version,
rdataset.type != dns_rdatatype_rrsig) {
if (rdataset.type > max_type)
max_type = rdataset.type;
- set_bit(bm, rdataset.type, 1);
+ dns_nsec_setbit(bm, rdataset.type, 1);
}
dns_rdataset_disassociate(&rdataset);
}
@@ -116,12 +149,12 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version,
/*
* At zone cuts, deny the existence of glue in the parent zone.
*/
- if (bit_isset(bm, dns_rdatatype_ns) &&
- ! bit_isset(bm, dns_rdatatype_soa)) {
+ if (dns_nsec_isset(bm, dns_rdatatype_ns) &&
+ ! dns_nsec_isset(bm, dns_rdatatype_soa)) {
for (i = 0; i <= max_type; i++) {
- if (bit_isset(bm, i) &&
+ if (dns_nsec_isset(bm, i) &&
! dns_rdatatype_iszonecutauth((dns_rdatatype_t)i))
- set_bit(bm, i, 0);
+ dns_nsec_setbit(bm, i, 0);
}
}
@@ -129,22 +162,8 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version,
if (result != ISC_R_NOMORE)
return (result);
- for (window = 0; window < 256; window++) {
- if (window * 256 > max_type)
- break;
- for (octet = 31; octet >= 0; octet--)
- if (bm[window * 32 + octet] != 0)
- break;
- if (octet < 0)
- continue;
- nsec_bits[0] = window;
- nsec_bits[1] = octet + 1;
- /*
- * Note: potential overlapping move.
- */
- memmove(&nsec_bits[2], &bm[window * 32], octet + 1);
- nsec_bits += 3 + octet;
- }
+ nsec_bits += dns_nsec_compressbitmap(nsec_bits, bm, max_type);
+
r.length = nsec_bits - r.base;
INSIST(r.length <= DNS_NSEC_BUFFERSIZE);
dns_rdata_fromregion(rdata,
@@ -155,7 +174,6 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version,
return (ISC_R_SUCCESS);
}
-
isc_result_t
dns_nsec_build(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
dns_name_t *target, dns_ttl_t ttl)
@@ -216,8 +234,8 @@ dns_nsec_typepresent(dns_rdata_t *nsec, dns_rdatatype_t type) {
if ((window + 1) * 256 <= type)
continue;
if (type < (window * 256) + len * 8)
- present = ISC_TF(bit_isset(&nsecstruct.typebits[i],
- type % 256));
+ present = ISC_TF(dns_nsec_isset(&nsecstruct.typebits[i],
+ type % 256));
break;
}
dns_rdata_freestruct(&nsecstruct);
@@ -245,10 +263,8 @@ dns_nsec_nseconly(dns_db_t *db, dns_dbversion_t *version,
0, 0, &rdataset, NULL);
dns_db_detachnode(db, &node);
- if (result == ISC_R_NOTFOUND) {
+ if (result == ISC_R_NOTFOUND)
*answer = ISC_FALSE;
- return (ISC_R_SUCCESS);
- }
if (result != ISC_R_SUCCESS)
return (result);
for (result = dns_rdataset_first(&rdataset);
@@ -275,3 +291,161 @@ dns_nsec_nseconly(dns_db_t *db, dns_dbversion_t *version,
}
return (result);
}
+
+/*%
+ * Return ISC_R_SUCCESS if we can determine that the name doesn't exist
+ * or we can determine whether there is data or not at the name.
+ * If the name does not exist return the wildcard name.
+ *
+ * Return ISC_R_IGNORE when the NSEC is not the appropriate one.
+ */
+isc_result_t
+dns_nsec_noexistnodata(dns_rdatatype_t type, dns_name_t *name,
+ dns_name_t *nsecname, dns_rdataset_t *nsecset,
+ isc_boolean_t *exists, isc_boolean_t *data,
+ dns_name_t *wild, dns_nseclog_t logit, void *arg)
+{
+ int order;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ isc_result_t result;
+ dns_namereln_t relation;
+ unsigned int olabels, nlabels, labels;
+ dns_rdata_nsec_t nsec;
+ isc_boolean_t atparent;
+ isc_boolean_t ns;
+ isc_boolean_t soa;
+
+ REQUIRE(exists != NULL);
+ REQUIRE(data != NULL);
+ REQUIRE(nsecset != NULL &&
+ nsecset->type == dns_rdatatype_nsec);
+
+ result = dns_rdataset_first(nsecset);
+ if (result != ISC_R_SUCCESS) {
+ (*logit)(arg, ISC_LOG_DEBUG(3), "failure processing NSEC set");
+ return (result);
+ }
+ dns_rdataset_current(nsecset, &rdata);
+
+ (*logit)(arg, ISC_LOG_DEBUG(3), "looking for relevant NSEC");
+ relation = dns_name_fullcompare(name, nsecname, &order, &olabels);
+
+ if (order < 0) {
+ /*
+ * The name is not within the NSEC range.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "NSEC does not cover name, before NSEC");
+ return (ISC_R_IGNORE);
+ }
+
+ if (order == 0) {
+ /*
+ * The names are the same. If we are validating "."
+ * then atparent should not be set as there is no parent.
+ */
+ atparent = (olabels != 1) && dns_rdatatype_atparent(type);
+ ns = dns_nsec_typepresent(&rdata, dns_rdatatype_ns);
+ soa = dns_nsec_typepresent(&rdata, dns_rdatatype_soa);
+ if (ns && !soa) {
+ if (!atparent) {
+ /*
+ * This NSEC record is from somewhere higher in
+ * the DNS, and at the parent of a delegation.
+ * It can not be legitimately used here.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring parent nsec");
+ return (ISC_R_IGNORE);
+ }
+ } else if (atparent && ns && soa) {
+ /*
+ * This NSEC record is from the child.
+ * It can not be legitimately used here.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring child nsec");
+ return (ISC_R_IGNORE);
+ }
+ if (type == dns_rdatatype_cname || type == dns_rdatatype_nxt ||
+ type == dns_rdatatype_nsec || type == dns_rdatatype_key ||
+ !dns_nsec_typepresent(&rdata, dns_rdatatype_cname)) {
+ *exists = ISC_TRUE;
+ *data = dns_nsec_typepresent(&rdata, type);
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "nsec proves name exists (owner) data=%d",
+ *data);
+ return (ISC_R_SUCCESS);
+ }
+ (*logit)(arg, ISC_LOG_DEBUG(3), "NSEC proves CNAME exists");
+ return (ISC_R_IGNORE);
+ }
+
+ if (relation == dns_namereln_subdomain &&
+ dns_nsec_typepresent(&rdata, dns_rdatatype_ns) &&
+ !dns_nsec_typepresent(&rdata, dns_rdatatype_soa))
+ {
+ /*
+ * This NSEC record is from somewhere higher in
+ * the DNS, and at the parent of a delegation.
+ * It can not be legitimately used here.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3), "ignoring parent nsec");
+ return (ISC_R_IGNORE);
+ }
+
+ result = dns_rdata_tostruct(&rdata, &nsec, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ relation = dns_name_fullcompare(&nsec.next, name, &order, &nlabels);
+ if (order == 0) {
+ dns_rdata_freestruct(&nsec);
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring nsec matches next name");
+ return (ISC_R_IGNORE);
+ }
+
+ if (order < 0 && !dns_name_issubdomain(nsecname, &nsec.next)) {
+ /*
+ * The name is not within the NSEC range.
+ */
+ dns_rdata_freestruct(&nsec);
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring nsec because name is past end of range");
+ return (ISC_R_IGNORE);
+ }
+
+ if (order > 0 && relation == dns_namereln_subdomain) {
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "nsec proves name exist (empty)");
+ dns_rdata_freestruct(&nsec);
+ *exists = ISC_TRUE;
+ *data = ISC_FALSE;
+ return (ISC_R_SUCCESS);
+ }
+ if (wild != NULL) {
+ dns_name_t common;
+ dns_name_init(&common, NULL);
+ if (olabels > nlabels) {
+ labels = dns_name_countlabels(nsecname);
+ dns_name_getlabelsequence(nsecname, labels - olabels,
+ olabels, &common);
+ } else {
+ labels = dns_name_countlabels(&nsec.next);
+ dns_name_getlabelsequence(&nsec.next, labels - nlabels,
+ nlabels, &common);
+ }
+ result = dns_name_concatenate(dns_wildcardname, &common,
+ wild, NULL);
+ if (result != ISC_R_SUCCESS) {
+ dns_rdata_freestruct(&nsec);
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "failure generating wildcard name");
+ return (result);
+ }
+ }
+ dns_rdata_freestruct(&nsec);
+ (*logit)(arg, ISC_LOG_DEBUG(3), "nsec range ok");
+ *exists = ISC_FALSE;
+ return (ISC_R_SUCCESS);
+}
diff --git a/contrib/bind9/lib/dns/nsec3.c b/contrib/bind9/lib/dns/nsec3.c
index 123126dc3f03..935f515d23ed 100644
--- a/contrib/bind9/lib/dns/nsec3.c
+++ b/contrib/bind9/lib/dns/nsec3.c
@@ -22,6 +22,7 @@
#include <isc/buffer.h>
#include <isc/hex.h>
#include <isc/iterated_hash.h>
+#include <isc/log.h>
#include <isc/string.h>
#include <isc/util.h>
@@ -33,6 +34,7 @@
#include <dns/dbiterator.h>
#include <dns/diff.h>
#include <dns/fixedname.h>
+#include <dns/nsec.h>
#include <dns/nsec3.h>
#include <dns/rdata.h>
#include <dns/rdatalist.h>
@@ -49,32 +51,9 @@
#define OPTOUT(x) (((x) & DNS_NSEC3FLAG_OPTOUT) != 0)
#define CREATE(x) (((x) & DNS_NSEC3FLAG_CREATE) != 0)
+#define INITIAL(x) (((x) & DNS_NSEC3FLAG_INITIAL) != 0)
#define REMOVE(x) (((x) & DNS_NSEC3FLAG_REMOVE) != 0)
-static void
-set_bit(unsigned char *array, unsigned int index, unsigned int bit) {
- unsigned int shift, mask;
-
- shift = 7 - (index % 8);
- mask = 1 << shift;
-
- if (bit != 0)
- array[index / 8] |= mask;
- else
- array[index / 8] &= (~mask & 0xFF);
-}
-
-static unsigned int
-bit_isset(unsigned char *array, unsigned int index) {
- unsigned int byte, shift, mask;
-
- byte = array[index / 8];
- shift = 7 - (index % 8);
- mask = 1 << shift;
-
- return ((byte & mask) != 0);
-}
-
isc_result_t
dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version,
dns_dbnode_t *node, unsigned int hashalg,
@@ -86,8 +65,7 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version,
isc_result_t result;
dns_rdataset_t rdataset;
isc_region_t r;
- unsigned int i, window;
- int octet;
+ unsigned int i;
isc_boolean_t found;
isc_boolean_t found_ns;
isc_boolean_t need_rrsig;
@@ -155,7 +133,7 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version,
rdataset.type != dns_rdatatype_rrsig) {
if (rdataset.type > max_type)
max_type = rdataset.type;
- set_bit(bm, rdataset.type, 1);
+ dns_nsec_setbit(bm, rdataset.type, 1);
/*
* Work out if we need to set the RRSIG bit for
* this node. We set the RRSIG bit if either of
@@ -178,18 +156,18 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version,
if ((found && !found_ns) || need_rrsig) {
if (dns_rdatatype_rrsig > max_type)
max_type = dns_rdatatype_rrsig;
- set_bit(bm, dns_rdatatype_rrsig, 1);
+ dns_nsec_setbit(bm, dns_rdatatype_rrsig, 1);
}
/*
* At zone cuts, deny the existence of glue in the parent zone.
*/
- if (bit_isset(bm, dns_rdatatype_ns) &&
- ! bit_isset(bm, dns_rdatatype_soa)) {
+ if (dns_nsec_isset(bm, dns_rdatatype_ns) &&
+ ! dns_nsec_isset(bm, dns_rdatatype_soa)) {
for (i = 0; i <= max_type; i++) {
- if (bit_isset(bm, i) &&
+ if (dns_nsec_isset(bm, i) &&
! dns_rdatatype_iszonecutauth((dns_rdatatype_t)i))
- set_bit(bm, i, 0);
+ dns_nsec_setbit(bm, i, 0);
}
}
@@ -198,22 +176,7 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version,
return (result);
collapse_bitmap:
- for (window = 0; window < 256; window++) {
- if (window * 256 > max_type)
- break;
- for (octet = 31; octet >= 0; octet--)
- if (bm[window * 32 + octet] != 0)
- break;
- if (octet < 0)
- continue;
- nsec_bits[0] = window;
- nsec_bits[1] = octet + 1;
- /*
- * Note: potentially overlapping move.
- */
- memmove(&nsec_bits[2], &bm[window * 32], octet + 1);
- nsec_bits += 3 + octet;
- }
+ nsec_bits += dns_nsec_compressbitmap(nsec_bits, bm, max_type);
r.length = nsec_bits - r.base;
INSIST(r.length <= DNS_NSEC3_BUFFERSIZE);
dns_rdata_fromregion(rdata, dns_db_class(db), dns_rdatatype_nsec3, &r);
@@ -248,8 +211,8 @@ dns_nsec3_typepresent(dns_rdata_t *rdata, dns_rdatatype_t type) {
if ((window + 1) * 256 <= type)
continue;
if (type < (window * 256) + len * 8)
- present = ISC_TF(bit_isset(&nsec3.typebits[i],
- type % 256));
+ present = ISC_TF(dns_nsec_isset(&nsec3.typebits[i],
+ type % 256));
break;
}
dns_rdata_freestruct(&nsec3);
@@ -1053,7 +1016,8 @@ rr_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
#ifdef BIND9
isc_result_t
dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
- dns_zone_t *zone, dns_diff_t *diff)
+ dns_zone_t *zone, isc_boolean_t nonsec,
+ dns_diff_t *diff)
{
dns_dbnode_t *node = NULL;
dns_difftuple_t *tuple = NULL;
@@ -1097,7 +1061,9 @@ dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
dns_nsec3param_toprivate(&rdata, &private, privatetype,
buf, sizeof(buf));
- buf[2] = DNS_NSEC3FLAG_REMOVE | DNS_NSEC3FLAG_NONSEC;
+ buf[2] = DNS_NSEC3FLAG_REMOVE;
+ if (nonsec)
+ buf[2] |= DNS_NSEC3FLAG_NONSEC;
CHECK(rr_exists(db, ver, origin, &private, &flag));
@@ -1128,15 +1094,19 @@ dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
for (result = dns_rdataset_first(&rdataset);
result == ISC_R_SUCCESS;
result = dns_rdataset_next(&rdataset)) {
+ dns_rdata_reset(&rdata);
dns_rdataset_current(&rdataset, &rdata);
INSIST(rdata.length <= sizeof(buf));
memcpy(buf, rdata.data, rdata.length);
- if (buf[0] != 0 ||
- buf[2] == (DNS_NSEC3FLAG_REMOVE | DNS_NSEC3FLAG_NONSEC)) {
- dns_rdata_reset(&rdata);
+ /*
+ * Private NSEC3 record length >= 6.
+ * <0(1), hash(1), flags(1), iterations(2), saltlen(1)>
+ */
+ if (rdata.length < 6 || buf[0] != 0 ||
+ (buf[2] & DNS_NSEC3FLAG_REMOVE) != 0 ||
+ (nonsec && (buf[2] & DNS_NSEC3FLAG_NONSEC) != 0))
continue;
- }
CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_DEL, origin,
0, &rdata, &tuple));
@@ -1144,7 +1114,9 @@ dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
INSIST(tuple == NULL);
rdata.data = buf;
- buf[2] = DNS_NSEC3FLAG_REMOVE | DNS_NSEC3FLAG_NONSEC;
+ buf[2] = DNS_NSEC3FLAG_REMOVE;
+ if (nonsec)
+ buf[2] |= DNS_NSEC3FLAG_NONSEC;
CHECK(rr_exists(db, ver, origin, &rdata, &flag));
@@ -1154,7 +1126,6 @@ dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
CHECK(do_one_tuple(&tuple, db, ver, diff));
INSIST(tuple == NULL);
}
- dns_rdata_reset(&rdata);
}
if (result != ISC_R_NOMORE)
goto failure;
@@ -1832,3 +1803,285 @@ dns_nsec3_maxiterations(dns_db_t *db, dns_dbversion_t *version,
dns_rdataset_disassociate(&rdataset);
return (result);
}
+
+isc_result_t
+dns_nsec3_noexistnodata(dns_rdatatype_t type, dns_name_t* name,
+ dns_name_t *nsec3name, dns_rdataset_t *nsec3set,
+ dns_name_t *zonename, isc_boolean_t *exists,
+ isc_boolean_t *data, isc_boolean_t *optout,
+ isc_boolean_t *unknown, isc_boolean_t *setclosest,
+ isc_boolean_t *setnearest, dns_name_t *closest,
+ dns_name_t *nearest, dns_nseclog_t logit, void *arg)
+{
+ char namebuf[DNS_NAME_FORMATSIZE];
+ dns_fixedname_t fzone;
+ dns_fixedname_t qfixed;
+ dns_label_t hashlabel;
+ dns_name_t *qname;
+ dns_name_t *zone;
+ dns_rdata_nsec3_t nsec3;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ int order;
+ int scope;
+ isc_boolean_t atparent;
+ isc_boolean_t first;
+ isc_boolean_t ns;
+ isc_boolean_t soa;
+ isc_buffer_t buffer;
+ isc_result_t answer = ISC_R_IGNORE;
+ isc_result_t result;
+ unsigned char hash[NSEC3_MAX_HASH_LENGTH];
+ unsigned char owner[NSEC3_MAX_HASH_LENGTH];
+ unsigned int length;
+ unsigned int qlabels;
+ unsigned int zlabels;
+
+ REQUIRE((exists == NULL && data == NULL) ||
+ (exists != NULL && data != NULL));
+ REQUIRE(nsec3set != NULL && nsec3set->type == dns_rdatatype_nsec3);
+ REQUIRE((setclosest == NULL && closest == NULL) ||
+ (setclosest != NULL && closest != NULL));
+ REQUIRE((setnearest == NULL && nearest == NULL) ||
+ (setnearest != NULL && nearest != NULL));
+
+ result = dns_rdataset_first(nsec3set);
+ if (result != ISC_R_SUCCESS) {
+ (*logit)(arg, ISC_LOG_DEBUG(3), "failure processing NSEC3 set");
+ return (result);
+ }
+
+ dns_rdataset_current(nsec3set, &rdata);
+
+ result = dns_rdata_tostruct(&rdata, &nsec3, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ (*logit)(arg, ISC_LOG_DEBUG(3), "looking for relevant NSEC3");
+
+ dns_fixedname_init(&fzone);
+ zone = dns_fixedname_name(&fzone);
+ zlabels = dns_name_countlabels(nsec3name);
+
+ /*
+ * NSEC3 records must have two or more labels to be valid.
+ */
+ if (zlabels < 2)
+ return (ISC_R_IGNORE);
+
+ /*
+ * Strip off the NSEC3 hash to get the zone.
+ */
+ zlabels--;
+ dns_name_split(nsec3name, zlabels, NULL, zone);
+
+ /*
+ * If not below the zone name we can ignore this record.
+ */
+ if (!dns_name_issubdomain(name, zone))
+ return (ISC_R_IGNORE);
+
+ /*
+ * Is this zone the same or deeper than the current zone?
+ */
+ if (dns_name_countlabels(zonename) == 0 ||
+ dns_name_issubdomain(zone, zonename))
+ dns_name_copy(zone, zonename, NULL);
+
+ if (!dns_name_equal(zone, zonename))
+ return (ISC_R_IGNORE);
+
+ /*
+ * Are we only looking for the most enclosing zone?
+ */
+ if (exists == NULL || data == NULL)
+ return (ISC_R_SUCCESS);
+
+ /*
+ * Only set unknown once we are sure that this NSEC3 is from
+ * the deepest covering zone.
+ */
+ if (!dns_nsec3_supportedhash(nsec3.hash)) {
+ if (unknown != NULL)
+ *unknown = ISC_TRUE;
+ return (ISC_R_IGNORE);
+ }
+
+ /*
+ * Recover the hash from the first label.
+ */
+ dns_name_getlabel(nsec3name, 0, &hashlabel);
+ isc_region_consume(&hashlabel, 1);
+ isc_buffer_init(&buffer, owner, sizeof(owner));
+ result = isc_base32hex_decoderegion(&hashlabel, &buffer);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ /*
+ * The hash lengths should match. If not ignore the record.
+ */
+ if (isc_buffer_usedlength(&buffer) != nsec3.next_length)
+ return (ISC_R_IGNORE);
+
+ /*
+ * Work out what this NSEC3 covers.
+ * Inside (<0) or outside (>=0).
+ */
+ scope = memcmp(owner, nsec3.next, nsec3.next_length);
+
+ /*
+ * Prepare to compute all the hashes.
+ */
+ dns_fixedname_init(&qfixed);
+ qname = dns_fixedname_name(&qfixed);
+ dns_name_downcase(name, qname, NULL);
+ qlabels = dns_name_countlabels(qname);
+ first = ISC_TRUE;
+
+ while (qlabels >= zlabels) {
+ length = isc_iterated_hash(hash, nsec3.hash, nsec3.iterations,
+ nsec3.salt, nsec3.salt_length,
+ qname->ndata, qname->length);
+ /*
+ * The computed hash length should match.
+ */
+ if (length != nsec3.next_length) {
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring NSEC bad length %u vs %u",
+ length, nsec3.next_length);
+ return (ISC_R_IGNORE);
+ }
+
+ order = memcmp(hash, owner, length);
+ if (first && order == 0) {
+ /*
+ * The hashes are the same.
+ */
+ atparent = dns_rdatatype_atparent(type);
+ ns = dns_nsec3_typepresent(&rdata, dns_rdatatype_ns);
+ soa = dns_nsec3_typepresent(&rdata, dns_rdatatype_soa);
+ if (ns && !soa) {
+ if (!atparent) {
+ /*
+ * This NSEC3 record is from somewhere
+ * higher in the DNS, and at the
+ * parent of a delegation. It can not
+ * be legitimately used here.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring parent NSEC3");
+ return (ISC_R_IGNORE);
+ }
+ } else if (atparent && ns && soa) {
+ /*
+ * This NSEC3 record is from the child.
+ * It can not be legitimately used here.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring child NSEC3");
+ return (ISC_R_IGNORE);
+ }
+ if (type == dns_rdatatype_cname ||
+ type == dns_rdatatype_nxt ||
+ type == dns_rdatatype_nsec ||
+ type == dns_rdatatype_key ||
+ !dns_nsec3_typepresent(&rdata, dns_rdatatype_cname)) {
+ *exists = ISC_TRUE;
+ *data = dns_nsec3_typepresent(&rdata, type);
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "NSEC3 proves name exists (owner) "
+ "data=%d", *data);
+ return (ISC_R_SUCCESS);
+ }
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "NSEC3 proves CNAME exists");
+ return (ISC_R_IGNORE);
+ }
+
+ if (order == 0 &&
+ dns_nsec3_typepresent(&rdata, dns_rdatatype_ns) &&
+ !dns_nsec3_typepresent(&rdata, dns_rdatatype_soa))
+ {
+ /*
+ * This NSEC3 record is from somewhere higher in
+ * the DNS, and at the parent of a delegation.
+ * It can not be legitimately used here.
+ */
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "ignoring parent NSEC3");
+ return (ISC_R_IGNORE);
+ }
+
+ /*
+ * Potential closest encloser.
+ */
+ if (order == 0) {
+ if (closest != NULL &&
+ (dns_name_countlabels(closest) == 0 ||
+ dns_name_issubdomain(qname, closest)) &&
+ !dns_nsec3_typepresent(&rdata, dns_rdatatype_ds) &&
+ !dns_nsec3_typepresent(&rdata, dns_rdatatype_dname) &&
+ (dns_nsec3_typepresent(&rdata, dns_rdatatype_soa) ||
+ !dns_nsec3_typepresent(&rdata, dns_rdatatype_ns)))
+ {
+
+ dns_name_format(qname, namebuf,
+ sizeof(namebuf));
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "NSEC3 indicates potential closest "
+ "encloser: '%s'", namebuf);
+ dns_name_copy(qname, closest, NULL);
+ *setclosest = ISC_TRUE;
+ }
+ dns_name_format(qname, namebuf, sizeof(namebuf));
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "NSEC3 at super-domain %s", namebuf);
+ return (answer);
+ }
+
+ /*
+ * Find if the name does not exist.
+ *
+ * We continue as we need to find the name closest to the
+ * closest encloser that doesn't exist.
+ *
+ * We also need to continue to ensure that we are not
+ * proving the non-existence of a record in a sub-zone.
+ * If that would be the case we will return ISC_R_IGNORE
+ * above.
+ */
+ if ((scope < 0 && order > 0 &&
+ memcmp(hash, nsec3.next, length) < 0) ||
+ (scope >= 0 && (order > 0 ||
+ memcmp(hash, nsec3.next, length) < 0)))
+ {
+ char namebuf[DNS_NAME_FORMATSIZE];
+
+ dns_name_format(qname, namebuf, sizeof(namebuf));
+ (*logit)(arg, ISC_LOG_DEBUG(3), "NSEC3 proves "
+ "name does not exist: '%s'", namebuf);
+ if (nearest != NULL &&
+ (dns_name_countlabels(nearest) == 0 ||
+ dns_name_issubdomain(nearest, qname))) {
+ dns_name_copy(qname, nearest, NULL);
+ *setnearest = ISC_TRUE;
+ }
+
+ *exists = ISC_FALSE;
+ *data = ISC_FALSE;
+ if (optout != NULL) {
+ if ((nsec3.flags & DNS_NSEC3FLAG_OPTOUT) != 0)
+ (*logit)(arg, ISC_LOG_DEBUG(3),
+ "NSEC3 indicates optout");
+ *optout =
+ ISC_TF(nsec3.flags & DNS_NSEC3FLAG_OPTOUT);
+ }
+ answer = ISC_R_SUCCESS;
+ }
+
+ qlabels--;
+ if (qlabels > 0)
+ dns_name_split(qname, qlabels, NULL, qname);
+ first = ISC_FALSE;
+ }
+ return (answer);
+}
diff --git a/contrib/bind9/lib/dns/openssl_link.c b/contrib/bind9/lib/dns/openssl_link.c
index d186761c2caa..56465aa00645 100644
--- a/contrib/bind9/lib/dns/openssl_link.c
+++ b/contrib/bind9/lib/dns/openssl_link.c
@@ -286,46 +286,78 @@ dst__openssl_destroy() {
}
}
-isc_result_t
-dst__openssl_toresult(isc_result_t fallback) {
+static isc_result_t
+toresult(isc_result_t fallback) {
isc_result_t result = fallback;
unsigned long err = ERR_get_error();
+#ifdef HAVE_OPENSSL_ECDSA
+ int lib = ERR_GET_LIB(err);
+#endif
+ int reason = ERR_GET_REASON(err);
- switch (ERR_GET_REASON(err)) {
+ switch (reason) {
+ /*
+ * ERR_* errors are globally unique; others
+ * are unique per sublibrary
+ */
case ERR_R_MALLOC_FAILURE:
result = ISC_R_NOMEMORY;
break;
default:
+#ifdef HAVE_OPENSSL_ECDSA
+ if (lib == ERR_R_ECDSA_LIB &&
+ reason == ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED) {
+ result = ISC_R_NOENTROPY;
+ break;
+ }
+#endif
break;
}
+
+ return (result);
+}
+
+isc_result_t
+dst__openssl_toresult(isc_result_t fallback) {
+ isc_result_t result;
+
+ result = toresult(fallback);
+
ERR_clear_error();
return (result);
}
isc_result_t
dst__openssl_toresult2(const char *funcname, isc_result_t fallback) {
- isc_result_t result = fallback;
- unsigned long err = ERR_peek_error();
+ return (dst__openssl_toresult3(DNS_LOGCATEGORY_GENERAL,
+ funcname, fallback));
+}
+
+isc_result_t
+dst__openssl_toresult3(isc_logcategory_t *category,
+ const char *funcname, isc_result_t fallback) {
+ isc_result_t result;
+ unsigned long err;
const char *file, *data;
int line, flags;
char buf[256];
- switch (ERR_GET_REASON(err)) {
- case ERR_R_MALLOC_FAILURE:
- result = ISC_R_NOMEMORY;
- goto done;
- default:
- break;
- }
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
+ result = toresult(fallback);
+
+ isc_log_write(dns_lctx, category,
DNS_LOGMODULE_CRYPTO, ISC_LOG_WARNING,
- "%s failed", funcname);
+ "%s failed (%s)", funcname,
+ isc_result_totext(result));
+
+ if (result == ISC_R_NOMEMORY)
+ goto done;
+
for (;;) {
err = ERR_get_error_line_data(&file, &line, &data, &flags);
if (err == 0U)
goto done;
ERR_error_string_n(err, buf, sizeof(buf));
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
+ isc_log_write(dns_lctx, category,
DNS_LOGMODULE_CRYPTO, ISC_LOG_INFO,
"%s:%s:%d:%s", buf, file, line,
(flags & ERR_TXT_STRING) ? data : "");
diff --git a/contrib/bind9/lib/dns/openssldh_link.c b/contrib/bind9/lib/dns/openssldh_link.c
index 9fe9bb52524f..36b8a412a3ee 100644
--- a/contrib/bind9/lib/dns/openssldh_link.c
+++ b/contrib/bind9/lib/dns/openssldh_link.c
@@ -634,6 +634,7 @@ static dst_func_t openssldh_functions = {
NULL, /*%< adddata */
NULL, /*%< openssldh_sign */
NULL, /*%< openssldh_verify */
+ NULL, /*%< openssldh_verify2 */
openssldh_computesecret,
openssldh_compare,
openssldh_paramcompare,
diff --git a/contrib/bind9/lib/dns/openssldsa_link.c b/contrib/bind9/lib/dns/openssldsa_link.c
index e2cf8cd6eb73..8bea1c09e05e 100644
--- a/contrib/bind9/lib/dns/openssldsa_link.c
+++ b/contrib/bind9/lib/dns/openssldsa_link.c
@@ -168,7 +168,8 @@ openssldsa_sign(dst_context_t *dctx, isc_buffer_t *sig) {
if (!EVP_SignFinal(evp_md_ctx, sigbuf, &siglen, pkey)) {
EVP_PKEY_free(pkey);
free(sigbuf);
- return (dst__openssl_toresult2("EVP_SignFinal",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_SignFinal",
ISC_R_FAILURE));
}
INSIST(EVP_PKEY_size(pkey) >= (int) siglen);
@@ -182,25 +183,30 @@ openssldsa_sign(dst_context_t *dctx, isc_buffer_t *sig) {
sb = sigbuf;
if (d2i_DSA_SIG(&dsasig, &sb, (long) siglen) == NULL) {
free(sigbuf);
- return (dst__openssl_toresult2("d2i_DSA_SIG", ISC_R_FAILURE));
+ return (dst__openssl_toresult3(dctx->category,
+ "d2i_DSA_SIG",
+ ISC_R_FAILURE));
}
free(sigbuf);
#elif 0
/* Only use EVP for the Digest */
if (!EVP_DigestFinal_ex(evp_md_ctx, digest, &siglen)) {
- return (dst__openssl_toresult2("EVP_DigestFinal_ex",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_DigestFinal_ex",
ISC_R_FAILURE));
}
dsasig = DSA_do_sign(digest, ISC_SHA1_DIGESTLENGTH, dsa);
if (dsasig == NULL)
- return (dst__openssl_toresult2("DSA_do_sign",
+ return (dst__openssl_toresult3(dctx->category,
+ "DSA_do_sign",
DST_R_SIGNFAILURE));
#else
isc_sha1_final(sha1ctx, digest);
dsasig = DSA_do_sign(digest, ISC_SHA1_DIGESTLENGTH, dsa);
if (dsasig == NULL)
- return (dst__openssl_toresult2("DSA_do_sign",
+ return (dst__openssl_toresult3(dctx->category,
+ "DSA_do_sign",
DST_R_SIGNFAILURE));
#endif
*r.base++ = (key->key_size - 512)/64;
@@ -286,7 +292,8 @@ openssldsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
case 0:
return (dst__openssl_toresult(DST_R_VERIFYFAILURE));
default:
- return (dst__openssl_toresult2("DSA_do_verify",
+ return (dst__openssl_toresult3(dctx->category,
+ "DSA_do_verify",
DST_R_VERIFYFAILURE));
}
}
@@ -617,6 +624,7 @@ static dst_func_t openssldsa_functions = {
openssldsa_adddata,
openssldsa_sign,
openssldsa_verify,
+ NULL, /*%< verify2 */
NULL, /*%< computesecret */
openssldsa_compare,
NULL, /*%< paramcompare */
diff --git a/contrib/bind9/lib/dns/opensslecdsa_link.c b/contrib/bind9/lib/dns/opensslecdsa_link.c
index e6c9b677697a..c3f5061b7546 100644
--- a/contrib/bind9/lib/dns/opensslecdsa_link.c
+++ b/contrib/bind9/lib/dns/opensslecdsa_link.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -73,7 +73,8 @@ opensslecdsa_createctx(dst_key_t *key, dst_context_t *dctx) {
if (!EVP_DigestInit_ex(evp_md_ctx, type, NULL)) {
EVP_MD_CTX_destroy(evp_md_ctx);
- return (dst__openssl_toresult2("EVP_DigestInit_ex",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_DigestInit_ex",
ISC_R_FAILURE));
}
@@ -103,7 +104,8 @@ opensslecdsa_adddata(dst_context_t *dctx, const isc_region_t *data) {
dctx->key->key_alg == DST_ALG_ECDSA384);
if (!EVP_DigestUpdate(evp_md_ctx, data->base, data->length))
- return (dst__openssl_toresult2("EVP_DigestUpdate",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_DigestUpdate",
ISC_R_FAILURE));
return (ISC_R_SUCCESS);
@@ -147,12 +149,14 @@ opensslecdsa_sign(dst_context_t *dctx, isc_buffer_t *sig) {
DST_RET(ISC_R_NOSPACE);
if (!EVP_DigestFinal(evp_md_ctx, digest, &dgstlen))
- DST_RET(dst__openssl_toresult2("EVP_DigestFinal",
+ DST_RET(dst__openssl_toresult3(dctx->category,
+ "EVP_DigestFinal",
ISC_R_FAILURE));
ecdsasig = ECDSA_do_sign(digest, dgstlen, eckey);
if (ecdsasig == NULL)
- DST_RET(dst__openssl_toresult2("ECDSA_do_sign",
+ DST_RET(dst__openssl_toresult3(dctx->category,
+ "ECDSA_do_sign",
DST_R_SIGNFAILURE));
BN_bn2bin_fixed(ecdsasig->r, r.base, siglen / 2);
r.base += siglen / 2;
@@ -196,14 +200,19 @@ opensslecdsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
return (DST_R_VERIFYFAILURE);
if (!EVP_DigestFinal_ex(evp_md_ctx, digest, &dgstlen))
- DST_RET (dst__openssl_toresult2("EVP_DigestFinal_ex",
+ DST_RET (dst__openssl_toresult3(dctx->category,
+ "EVP_DigestFinal_ex",
ISC_R_FAILURE));
ecdsasig = ECDSA_SIG_new();
if (ecdsasig == NULL)
DST_RET (ISC_R_NOMEMORY);
+ if (ecdsasig->r != NULL)
+ BN_free(ecdsasig->r);
ecdsasig->r = BN_bin2bn(cp, siglen / 2, NULL);
cp += siglen / 2;
+ if (ecdsasig->s != NULL)
+ BN_free(ecdsasig->s);
ecdsasig->s = BN_bin2bn(cp, siglen / 2, NULL);
/* cp += siglen / 2; */
@@ -216,7 +225,8 @@ opensslecdsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
ret = dst__openssl_toresult(DST_R_VERIFYFAILURE);
break;
default:
- ret = dst__openssl_toresult2("ECDSA_do_verify",
+ ret = dst__openssl_toresult3(dctx->category,
+ "ECDSA_do_verify",
DST_R_VERIFYFAILURE);
break;
}
@@ -562,6 +572,7 @@ static dst_func_t opensslecdsa_functions = {
opensslecdsa_adddata,
opensslecdsa_sign,
opensslecdsa_verify,
+ NULL, /*%< verify2 */
NULL, /*%< computesecret */
opensslecdsa_compare,
NULL, /*%< paramcompare */
diff --git a/contrib/bind9/lib/dns/opensslgost_link.c b/contrib/bind9/lib/dns/opensslgost_link.c
index 8a55a6b228e7..1ce4405eb21d 100644
--- a/contrib/bind9/lib/dns/opensslgost_link.c
+++ b/contrib/bind9/lib/dns/opensslgost_link.c
@@ -127,7 +127,8 @@ opensslgost_verify(dst_context_t *dctx, const isc_region_t *sig) {
case 0:
return (dst__openssl_toresult(DST_R_VERIFYFAILURE));
default:
- return (dst__openssl_toresult2("EVP_VerifyFinal",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_VerifyFinal",
DST_R_VERIFYFAILURE));
}
}
@@ -372,6 +373,7 @@ static dst_func_t opensslgost_functions = {
opensslgost_adddata,
opensslgost_sign,
opensslgost_verify,
+ NULL, /*%< verify2 */
NULL, /*%< computesecret */
opensslgost_compare,
NULL, /*%< paramcompare */
diff --git a/contrib/bind9/lib/dns/opensslrsa_link.c b/contrib/bind9/lib/dns/opensslrsa_link.c
index 80c3f57a6d02..fa7412cbddbd 100644
--- a/contrib/bind9/lib/dns/opensslrsa_link.c
+++ b/contrib/bind9/lib/dns/opensslrsa_link.c
@@ -56,6 +56,13 @@
#endif
/*
+ * Limit the size of public exponents.
+ */
+#ifndef RSA_MAX_PUBEXP_BITS
+#define RSA_MAX_PUBEXP_BITS 35
+#endif
+
+/*
* We don't use configure for windows so enforce the OpenSSL version
* here. Unlike with configure we don't support overriding this test.
*/
@@ -156,7 +163,8 @@ opensslrsa_createctx(dst_key_t *key, dst_context_t *dctx) {
if (!EVP_DigestInit_ex(evp_md_ctx, type, NULL)) {
EVP_MD_CTX_destroy(evp_md_ctx);
- return (dst__openssl_toresult2("EVP_DigestInit_ex",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_DigestInit_ex",
ISC_R_FAILURE));
}
dctx->ctxdata.evp_md_ctx = evp_md_ctx;
@@ -305,7 +313,8 @@ opensslrsa_adddata(dst_context_t *dctx, const isc_region_t *data) {
#if USE_EVP
if (!EVP_DigestUpdate(evp_md_ctx, data->base, data->length)) {
- return (dst__openssl_toresult2("EVP_DigestUpdate",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_DigestUpdate",
ISC_R_FAILURE));
}
#else
@@ -395,7 +404,8 @@ opensslrsa_sign(dst_context_t *dctx, isc_buffer_t *sig) {
return (ISC_R_NOSPACE);
if (!EVP_SignFinal(evp_md_ctx, r.base, &siglen, pkey)) {
- return (dst__openssl_toresult2("EVP_SignFinal",
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_SignFinal",
ISC_R_FAILURE));
}
#else
@@ -489,7 +499,8 @@ opensslrsa_sign(dst_context_t *dctx, isc_buffer_t *sig) {
status = RSA_sign(type, digest, digestlen, r.base, &siglen, rsa);
#endif
if (status == 0)
- return (dst__openssl_toresult2("RSA_sign",
+ return (dst__openssl_toresult3(dctx->category,
+ "RSA_sign",
DST_R_OPENSSLFAILURE));
#endif
@@ -499,12 +510,14 @@ opensslrsa_sign(dst_context_t *dctx, isc_buffer_t *sig) {
}
static isc_result_t
-opensslrsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
+opensslrsa_verify2(dst_context_t *dctx, int maxbits, const isc_region_t *sig) {
dst_key_t *key = dctx->key;
int status = 0;
#if USE_EVP
EVP_MD_CTX *evp_md_ctx = dctx->ctxdata.evp_md_ctx;
EVP_PKEY *pkey = key->keydata.pkey;
+ RSA *rsa;
+ int bits;
#else
/* note: ISC_SHA512_DIGESTLENGTH >= ISC_*_DIGESTLENGTH */
unsigned char digest[ISC_SHA512_DIGESTLENGTH];
@@ -524,8 +537,29 @@ opensslrsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
dctx->key->key_alg == DST_ALG_RSASHA512);
#if USE_EVP
+ rsa = EVP_PKEY_get1_RSA(pkey);
+ if (rsa == NULL)
+ return (dst__openssl_toresult(DST_R_OPENSSLFAILURE));
+ bits = BN_num_bits(rsa->e);
+ RSA_free(rsa);
+ if (bits > maxbits && maxbits != 0)
+ return (DST_R_VERIFYFAILURE);
+
status = EVP_VerifyFinal(evp_md_ctx, sig->base, sig->length, pkey);
+ switch (status) {
+ case 1:
+ return (ISC_R_SUCCESS);
+ case 0:
+ return (dst__openssl_toresult(DST_R_VERIFYFAILURE));
+ default:
+ return (dst__openssl_toresult3(dctx->category,
+ "EVP_VerifyFinal",
+ DST_R_VERIFYFAILURE));
+ }
#else
+ if (BN_num_bits(rsa->e) > maxbits && maxbits != 0)
+ return (DST_R_VERIFYFAILURE);
+
switch (dctx->key->key_alg) {
case DST_ALG_RSAMD5:
{
@@ -610,7 +644,8 @@ opensslrsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
original, rsa,
RSA_PKCS1_PADDING);
if (status <= 0)
- return (dst__openssl_toresult2(
+ return (dst__openssl_toresult3(
+ dctx->category,
"RSA_public_decrypt",
DST_R_VERIFYFAILURE));
if (status != (int)(prefixlen + digestlen))
@@ -631,12 +666,15 @@ opensslrsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
status = RSA_verify(type, digest, digestlen, sig->base,
RSA_size(rsa), rsa);
#endif
-#endif
if (status != 1)
- return (dst__openssl_toresult2("RSA_verify",
- DST_R_VERIFYFAILURE));
-
+ return (dst__openssl_toresult(DST_R_VERIFYFAILURE));
return (ISC_R_SUCCESS);
+#endif
+}
+
+static isc_result_t
+opensslrsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
+ return (opensslrsa_verify2(dctx, 0, sig));
}
static isc_boolean_t
@@ -751,7 +789,7 @@ opensslrsa_generate(dst_key_t *key, int exp, void (*callback)(int)) {
BN_set_bit(e, 0);
BN_set_bit(e, 16);
} else {
- /* F5 0x100000001 */
+ /* (phased-out) F5 0x100000001 */
BN_set_bit(e, 0);
BN_set_bit(e, 32);
}
@@ -1206,6 +1244,8 @@ opensslrsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
DST_RET(dst__openssl_toresult(DST_R_OPENSSLFAILURE));
if (rsa_check(rsa, pubrsa) != ISC_R_SUCCESS)
DST_RET(DST_R_INVALIDPRIVATEKEY);
+ if (BN_num_bits(rsa->e) > RSA_MAX_PUBEXP_BITS)
+ DST_RET(ISC_R_RANGE);
if (pubrsa != NULL)
RSA_free(pubrsa);
key->key_size = EVP_PKEY_bits(pkey);
@@ -1288,6 +1328,8 @@ opensslrsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
if (rsa_check(rsa, pubrsa) != ISC_R_SUCCESS)
DST_RET(DST_R_INVALIDPRIVATEKEY);
+ if (BN_num_bits(rsa->e) > RSA_MAX_PUBEXP_BITS)
+ DST_RET(ISC_R_RANGE);
key->key_size = BN_num_bits(rsa->n);
if (pubrsa != NULL)
RSA_free(pubrsa);
@@ -1306,7 +1348,7 @@ opensslrsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
RSA_free(rsa);
if (pubrsa != NULL)
RSA_free(pubrsa);
- opensslrsa_destroy(key);
+ key->keydata.generic = NULL;
dst__privstruct_free(&priv, mctx);
memset(&priv, 0, sizeof(priv));
return (ret);
@@ -1361,6 +1403,8 @@ opensslrsa_fromlabel(dst_key_t *key, const char *engine, const char *label,
DST_RET(dst__openssl_toresult(DST_R_OPENSSLFAILURE));
if (rsa_check(rsa, pubrsa) != ISC_R_SUCCESS)
DST_RET(DST_R_INVALIDPRIVATEKEY);
+ if (BN_num_bits(rsa->e) > RSA_MAX_PUBEXP_BITS)
+ DST_RET(ISC_R_RANGE);
if (pubrsa != NULL)
RSA_free(pubrsa);
key->key_size = EVP_PKEY_bits(pkey);
@@ -1396,6 +1440,7 @@ static dst_func_t opensslrsa_functions = {
opensslrsa_adddata,
opensslrsa_sign,
opensslrsa_verify,
+ opensslrsa_verify2,
NULL, /*%< computesecret */
opensslrsa_compare,
NULL, /*%< paramcompare */
diff --git a/contrib/bind9/lib/dns/peer.c b/contrib/bind9/lib/dns/peer.c
index c55d73dddf5b..ec9e08cb27b7 100644
--- a/contrib/bind9/lib/dns/peer.c
+++ b/contrib/bind9/lib/dns/peer.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -533,7 +533,7 @@ dns_peer_setkeybycharp(dns_peer_t *peer, const char *keyval) {
isc_result_t result;
dns_fixedname_init(&fname);
- isc_buffer_init(&b, keyval, strlen(keyval));
+ isc_buffer_constinit(&b, keyval, strlen(keyval));
isc_buffer_add(&b, strlen(keyval));
result = dns_name_fromtext(dns_fixedname_name(&fname), &b,
dns_rootname, 0, NULL);
diff --git a/contrib/bind9/lib/dns/private.c b/contrib/bind9/lib/dns/private.c
index b0cb96f5ee04..6521279f2d9b 100644
--- a/contrib/bind9/lib/dns/private.c
+++ b/contrib/bind9/lib/dns/private.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -44,6 +44,7 @@
#define REMOVE(x) (((x) & DNS_NSEC3FLAG_REMOVE) != 0)
#define CREATE(x) (((x) & DNS_NSEC3FLAG_CREATE) != 0)
+#define INITIAL(x) (((x) & DNS_NSEC3FLAG_INITIAL) != 0)
#define NONSEC(x) (((x) & DNS_NSEC3FLAG_NONSEC) != 0)
#define CHECK(x) do { \
@@ -149,7 +150,7 @@ dns_private_chains(dns_db_t *db, dns_dbversion_t *ver,
}
/*
- * Look to see if we also need to be creating a NSEC3 chains.
+ * Look to see if we also need to be creating a NSEC3 chain.
*/
if (dns_rdataset_isassociated(&nsecset)) {
if (build_nsec != NULL)
@@ -293,3 +294,78 @@ dns_private_chains(dns_db_t *db, dns_dbversion_t *ver,
dns_db_detachnode(db, &node);
return (result);
}
+
+isc_result_t
+dns_private_totext(dns_rdata_t *private, isc_buffer_t *buf) {
+ isc_result_t result;
+
+ if (private->length < 5)
+ return (ISC_R_NOTFOUND);
+
+ if (private->data[0] == 0) {
+ unsigned char nsec3buf[DNS_NSEC3PARAM_BUFFERSIZE];
+ unsigned char newbuf[DNS_NSEC3PARAM_BUFFERSIZE];
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdata_nsec3param_t nsec3param;
+ isc_boolean_t remove, init, nonsec;
+ isc_buffer_t b;
+
+ if (!dns_nsec3param_fromprivate(private, &rdata, nsec3buf,
+ sizeof(nsec3buf)))
+ CHECK(ISC_R_FAILURE);
+
+ CHECK(dns_rdata_tostruct(&rdata, &nsec3param, NULL));
+
+ remove = ISC_TF((nsec3param.flags & DNS_NSEC3FLAG_REMOVE) != 0);
+ init = ISC_TF((nsec3param.flags & DNS_NSEC3FLAG_INITIAL) != 0);
+ nonsec = ISC_TF((nsec3param.flags & DNS_NSEC3FLAG_NONSEC) != 0);
+
+ nsec3param.flags &= ~(DNS_NSEC3FLAG_CREATE|
+ DNS_NSEC3FLAG_REMOVE|
+ DNS_NSEC3FLAG_INITIAL|
+ DNS_NSEC3FLAG_NONSEC);
+
+ if (init)
+ isc_buffer_putstr(buf, "Pending NSEC3 chain ");
+ else if (remove)
+ isc_buffer_putstr(buf, "Removing NSEC3 chain ");
+ else
+ isc_buffer_putstr(buf, "Creating NSEC3 chain ");
+
+ dns_rdata_reset(&rdata);
+ isc_buffer_init(&b, newbuf, sizeof(newbuf));
+ CHECK(dns_rdata_fromstruct(&rdata, dns_rdataclass_in,
+ dns_rdatatype_nsec3param,
+ &nsec3param, &b));
+
+ CHECK(dns_rdata_totext(&rdata, NULL, buf));
+
+ if (remove && !nonsec)
+ isc_buffer_putstr(buf, " / creating NSEC chain");
+ } else if (private->length == 5) {
+ unsigned char alg = private->data[0];
+ dns_keytag_t keyid = (private->data[2] | private->data[1] << 8);
+ char keybuf[BUFSIZ], algbuf[DNS_SECALG_FORMATSIZE];
+ isc_boolean_t remove = ISC_TF(private->data[3] != 0);
+ isc_boolean_t complete = ISC_TF(private->data[4] != 0);
+
+ if (remove && complete)
+ isc_buffer_putstr(buf, "Done removing signatures for ");
+ else if (remove)
+ isc_buffer_putstr(buf, "Removing signatures for ");
+ else if (complete)
+ isc_buffer_putstr(buf, "Done signing with ");
+ else
+ isc_buffer_putstr(buf, "Signing with ");
+
+ dns_secalg_format(alg, algbuf, sizeof(algbuf));
+ sprintf(keybuf, "key %d/%s", keyid, algbuf);
+ isc_buffer_putstr(buf, keybuf);
+ } else
+ return (ISC_R_NOTFOUND);
+
+ isc_buffer_putuint8(buf, 0);
+ result = ISC_R_SUCCESS;
+ failure:
+ return (result);
+}
diff --git a/contrib/bind9/lib/dns/rbt.c b/contrib/bind9/lib/dns/rbt.c
index 4e033d66ed14..7381b4a325b3 100644
--- a/contrib/bind9/lib/dns/rbt.c
+++ b/contrib/bind9/lib/dns/rbt.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -248,7 +248,8 @@ dns_rbt_create(isc_mem_t *mctx, void (*deleter)(void *, void *),
if (rbt == NULL)
return (ISC_R_NOMEMORY);
- rbt->mctx = mctx;
+ rbt->mctx = NULL;
+ isc_mem_attach(mctx, &rbt->mctx);
rbt->data_deleter = deleter;
rbt->deleter_arg = deleter_arg;
rbt->root = NULL;
@@ -259,7 +260,7 @@ dns_rbt_create(isc_mem_t *mctx, void (*deleter)(void *, void *),
#ifdef DNS_RBT_USEHASH
result = inithash(rbt);
if (result != ISC_R_SUCCESS) {
- isc_mem_put(mctx, rbt, sizeof(*rbt));
+ isc_mem_putanddetach(&rbt->mctx, rbt, sizeof(*rbt));
return (result);
}
#endif
@@ -299,7 +300,7 @@ dns_rbt_destroy2(dns_rbt_t **rbtp, unsigned int quantum) {
rbt->magic = 0;
- isc_mem_put(rbt->mctx, rbt, sizeof(*rbt));
+ isc_mem_putanddetach(&rbt->mctx, rbt, sizeof(*rbt));
*rbtp = NULL;
return (ISC_R_SUCCESS);
}
@@ -1537,6 +1538,8 @@ rehash(dns_rbt_t *rbt) {
return;
}
+ INSIST(rbt->hashsize > 0);
+
for (i = 0; i < rbt->hashsize; i++)
rbt->hashtable[i] = NULL;
@@ -1947,6 +1950,7 @@ dns_rbt_deletefromlevel(dns_rbtnode_t *delete, dns_rbtnode_t **rootp) {
COLOR(sibling) = COLOR(parent);
MAKE_BLACK(parent);
+ INSIST(RIGHT(sibling) != NULL);
MAKE_BLACK(RIGHT(sibling));
rotate_left(parent, rootp);
child = *rootp;
@@ -1984,6 +1988,7 @@ dns_rbt_deletefromlevel(dns_rbtnode_t *delete, dns_rbtnode_t **rootp) {
COLOR(sibling) = COLOR(parent);
MAKE_BLACK(parent);
+ INSIST(LEFT(sibling) != NULL);
MAKE_BLACK(LEFT(sibling));
rotate_right(parent, rootp);
child = *rootp;
diff --git a/contrib/bind9/lib/dns/rbtdb.c b/contrib/bind9/lib/dns/rbtdb.c
index ef721b8690c9..bff52b87ef9d 100644
--- a/contrib/bind9/lib/dns/rbtdb.c
+++ b/contrib/bind9/lib/dns/rbtdb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -1550,15 +1550,16 @@ delete_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node)
DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_CACHE,
ISC_LOG_WARNING,
- "delete_nsecnode(): "
+ "delete_node(): "
"dns_rbt_deletenode(nsecnode): %s",
isc_result_totext(result));
}
}
- result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE);
#ifdef BIND9
- dns_rpz_cidr_deleteip(rbtdb->rpz_cidr, name);
+ if (rbtdb->rpz_cidr != NULL)
+ dns_rpz_cidr_deleteip(rbtdb->rpz_cidr, name);
#endif
+ result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE);
break;
case DNS_RBT_NSEC_NSEC:
result = dns_rbt_deletenode(rbtdb->nsec, node, ISC_FALSE);
@@ -1572,7 +1573,7 @@ delete_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node)
DNS_LOGCATEGORY_DATABASE,
DNS_LOGMODULE_CACHE,
ISC_LOG_WARNING,
- "delete_nsecnode(): "
+ "delete_cnode(): "
"dns_rbt_deletenode: %s",
isc_result_totext(result));
}
@@ -4547,19 +4548,29 @@ find_coveringnsec(rbtdb_search_t *search, dns_dbnode_t **nodep,
}
/*
- * Mark a database for response policy rewriting.
+ * Mark a database for response policy rewriting
+ * or find which RPZ data is available.
*/
#ifdef BIND9
-static void
-get_rpz_enabled(dns_db_t *db, dns_rpz_st_t *st)
+static isc_result_t
+rpz_enabled(dns_db_t *db, dns_rpz_st_t *st)
{
dns_rbtdb_t *rbtdb;
+ isc_result_t result;
+ result = ISC_R_SUCCESS;
rbtdb = (dns_rbtdb_t *)db;
REQUIRE(VALID_RBTDB(rbtdb));
RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
- dns_rpz_enabled(rbtdb->rpz_cidr, st);
+ if (st != NULL) {
+ dns_rpz_enabled_get(rbtdb->rpz_cidr, st);
+ } else {
+ result = dns_rpz_new_cidr(rbtdb->common.mctx,
+ &rbtdb->common.origin,
+ &rbtdb->rpz_cidr);
+ }
RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ return (result);
}
/*
@@ -6224,6 +6235,7 @@ add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
* will do it on the LRU side, so memory
* will not leak... for long.
*/
+ INSIST(rbtdb->heaps != NULL);
isc_heap_insert(rbtdb->heaps[idx], newheader);
} else if (RESIGN(newheader))
resign_insert(rbtdb, idx, newheader);
@@ -6357,7 +6369,8 @@ addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader,
cleanup:
dns_rdataset_disassociate(&neg);
dns_rdataset_disassociate(&negsig);
- free_noqname(mctx, &noqname);
+ if (noqname != NULL)
+ free_noqname(mctx, &noqname);
return(result);
}
@@ -6407,7 +6420,8 @@ addclosest(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader,
cleanup:
dns_rdataset_disassociate(&neg);
dns_rdataset_disassociate(&negsig);
- free_noqname(mctx, &closest);
+ if (closest != NULL)
+ free_noqname(mctx, &closest);
return(result);
}
@@ -6860,7 +6874,7 @@ loadnode(dns_rbtdb_t *rbtdb, dns_name_t *name, dns_rbtnode_t **nodep,
noderesult = dns_rbt_addnode(rbtdb->tree, name, nodep);
#ifdef BIND9
- if (noderesult == ISC_R_SUCCESS)
+ if (noderesult == ISC_R_SUCCESS && rbtdb->rpz_cidr != NULL)
dns_rpz_cidr_addip(rbtdb->rpz_cidr, name);
#endif
@@ -7447,12 +7461,14 @@ static dns_dbmethods_t zone_methods = {
isdnssec,
NULL,
#ifdef BIND9
- get_rpz_enabled,
- rpz_findips
+ rpz_enabled,
+ rpz_findips,
#else
NULL,
- NULL
+ NULL,
#endif
+ NULL,
+ NULL
};
static dns_dbmethods_t cache_methods = {
@@ -7493,6 +7509,8 @@ static dns_dbmethods_t cache_methods = {
isdnssec,
getrrsetstats,
NULL,
+ NULL,
+ NULL,
NULL
};
@@ -7681,24 +7699,6 @@ dns_rbtdb_create
return (result);
}
-#ifdef BIND9
- /*
- * Get ready for response policy IP address searching if at least one
- * zone has been configured as a response policy zone and this
- * is not a cache zone.
- * It would be better to know that this database is for a policy
- * zone named for a view, but that would require knowledge from
- * above such as an argv[] set from data in the zone.
- */
- if (type == dns_dbtype_zone && !dns_name_equal(origin, dns_rootname)) {
- result = dns_rpz_new_cidr(mctx, origin, &rbtdb->rpz_cidr);
- if (result != ISC_R_SUCCESS) {
- free_rbtdb(rbtdb, ISC_FALSE, NULL);
- return (result);
- }
- }
-#endif
-
/*
* In order to set the node callback bit correctly in zone databases,
* we need to know if the node has the origin name of the zone.
@@ -7977,7 +7977,9 @@ rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target) {
dns_dbnode_t *cloned_node = NULL;
attachnode(db, node, &cloned_node);
+ INSIST(!ISC_LINK_LINKED(target, link));
*target = *source;
+ ISC_LINK_INIT(target, link);
/*
* Reset iterator state.
@@ -8929,12 +8931,10 @@ acache_callback(dns_acacheentry_t *entry, void **arg) {
if (acarray != NULL && acarray[count].entry == entry) {
acarray[count].entry = NULL;
INSIST(acarray[count].cbarg == cbarg);
- isc_mem_put(rbtdb->common.mctx, cbarg, sizeof(acache_cbarg_t));
acarray[count].cbarg = NULL;
- } else
isc_mem_put(rbtdb->common.mctx, cbarg, sizeof(acache_cbarg_t));
-
- dns_acache_detachentry(&entry);
+ dns_acache_detachentry(&entry);
+ }
NODE_UNLOCK(nodelock, isc_rwlocktype_write);
@@ -8958,9 +8958,10 @@ acache_cancelentry(isc_mem_t *mctx, dns_acacheentry_t *entry,
cbarg = *cbargp;
- dns_acache_cancelentry(entry);
- dns_db_detachnode(cbarg->db, &cbarg->node);
- dns_db_detach(&cbarg->db);
+ if (dns_acache_cancelentry(entry)) {
+ dns_db_detachnode(cbarg->db, &cbarg->node);
+ dns_db_detach(&cbarg->db);
+ }
isc_mem_put(mctx, cbarg, sizeof(acache_cbarg_t));
@@ -9027,6 +9028,7 @@ rdataset_setadditional(dns_rdataset_t *rdataset, dns_rdatasetadditional_t type,
acache_callback, newcbarg, &newentry);
if (result != ISC_R_SUCCESS)
goto fail;
+
/* Set cache data in the new entry. */
result = dns_acache_setentry(acache, newentry, zone, db,
version, node, fname);
diff --git a/contrib/bind9/lib/dns/rdata.c b/contrib/bind9/lib/dns/rdata.c
index 60890e05583f..a83dab462ce5 100644
--- a/contrib/bind9/lib/dns/rdata.c
+++ b/contrib/bind9/lib/dns/rdata.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -124,6 +124,15 @@ txt_fromtext(isc_textregion_t *source, isc_buffer_t *target);
static isc_result_t
txt_fromwire(isc_buffer_t *source, isc_buffer_t *target);
+static isc_result_t
+multitxt_totext(isc_region_t *source, isc_buffer_t *target);
+
+static isc_result_t
+multitxt_fromtext(isc_textregion_t *source, isc_buffer_t *target);
+
+static isc_result_t
+multitxt_fromwire(isc_buffer_t *source, isc_buffer_t *target);
+
static isc_boolean_t
name_prefix(dns_name_t *name, dns_name_t *origin, dns_name_t *target);
@@ -212,6 +221,70 @@ static isc_result_t
unknown_totext(dns_rdata_t *rdata, dns_rdata_textctx_t *tctx,
isc_buffer_t *target);
+/*% INT16 Size */
+#define NS_INT16SZ 2
+/*% IPv6 Address Size */
+#define NS_LOCATORSZ 8
+
+/*%
+ * convert presentation level address to network order binary form.
+ * \return
+ * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
+ * \note
+ * (1) does not touch `dst' unless it's returning 1.
+ */
+static inline int
+locator_pton(const char *src, unsigned char *dst) {
+ static const char xdigits_l[] = "0123456789abcdef",
+ xdigits_u[] = "0123456789ABCDEF";
+ unsigned char tmp[NS_LOCATORSZ];
+ unsigned char *tp = tmp, *endp;
+ const char *xdigits;
+ int ch, seen_xdigits;
+ unsigned int val;
+
+ memset(tp, '\0', NS_LOCATORSZ);
+ endp = tp + NS_LOCATORSZ;
+ seen_xdigits = 0;
+ val = 0;
+ while ((ch = *src++) != '\0') {
+ const char *pch;
+
+ pch = strchr((xdigits = xdigits_l), ch);
+ if (pch == NULL)
+ pch = strchr((xdigits = xdigits_u), ch);
+ if (pch != NULL) {
+ val <<= 4;
+ val |= (pch - xdigits);
+ if (++seen_xdigits > 4)
+ return (0);
+ continue;
+ }
+ if (ch == ':') {
+ if (!seen_xdigits)
+ return (0);
+ if (tp + NS_INT16SZ > endp)
+ return (0);
+ *tp++ = (unsigned char) (val >> 8) & 0xff;
+ *tp++ = (unsigned char) val & 0xff;
+ seen_xdigits = 0;
+ val = 0;
+ continue;
+ }
+ return (0);
+ }
+ if (seen_xdigits) {
+ if (tp + NS_INT16SZ > endp)
+ return (0);
+ *tp++ = (unsigned char) (val >> 8) & 0xff;
+ *tp++ = (unsigned char) val & 0xff;
+ }
+ if (tp != endp)
+ return (0);
+ memcpy(dst, tmp, NS_LOCATORSZ);
+ return (1);
+}
+
static inline int
getquad(const void *src, struct in_addr *dst,
isc_lex_t *lexer, dns_rdatacallbacks_t *callbacks)
@@ -559,9 +632,9 @@ unknown_fromtext(dns_rdataclass_t rdclass, dns_rdatatype_t type,
if (type == 0 || dns_rdatatype_ismeta(type))
return (DNS_R_METATYPE);
- result = isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
- ISC_FALSE);
- if (result == ISC_R_SUCCESS && token.value.as_ulong > 65535U)
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 65535U)
return (ISC_R_RANGE);
result = isc_buffer_allocate(mctx, &buf, token.value.as_ulong);
if (result != ISC_R_SUCCESS)
@@ -611,6 +684,7 @@ dns_rdata_fromtext(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
void (*callback)(dns_rdatacallbacks_t *, const char *, ...);
isc_result_t tresult;
size_t length;
+ isc_boolean_t unknown;
REQUIRE(origin == NULL || dns_name_isabsolute(origin) == ISC_TRUE);
if (rdata != NULL) {
@@ -638,13 +712,33 @@ dns_rdata_fromtext(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
return (result);
}
- if (strcmp(DNS_AS_STR(token), "\\#") == 0)
- result = unknown_fromtext(rdclass, type, lexer, mctx, target);
- else {
+ unknown = ISC_FALSE;
+ if (token.type == isc_tokentype_string &&
+ strcmp(DNS_AS_STR(token), "\\#") == 0) {
+ /*
+ * If this is a TXT record '\#' could be a escaped '#'.
+ * Look to see if the next token is a number and if so
+ * treat it as a unknown record format.
+ */
+ if (type == dns_rdatatype_txt) {
+ result = isc_lex_getmastertoken(lexer, &token,
+ isc_tokentype_number,
+ ISC_FALSE);
+ if (result == ISC_R_SUCCESS)
+ isc_lex_ungettoken(lexer, &token);
+ }
+
+ if (result == ISC_R_SUCCESS) {
+ unknown = ISC_TRUE;
+ result = unknown_fromtext(rdclass, type, lexer,
+ mctx, target);
+ } else
+ options |= DNS_RDATA_UNKNOWNESCAPE;
+ } else
isc_lex_ungettoken(lexer, &token);
+ if (!unknown)
FROMTEXTSWITCH
- }
/*
* Consume to end of line / file.
@@ -786,7 +880,8 @@ dns_rdata_totext(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target)
isc_result_t
dns_rdata_tofmttext(dns_rdata_t *rdata, dns_name_t *origin,
unsigned int flags, unsigned int width,
- const char *linebreak, isc_buffer_t *target)
+ unsigned int split_width, const char *linebreak,
+ isc_buffer_t *target)
{
dns_rdata_textctx_t tctx;
@@ -797,11 +892,16 @@ dns_rdata_tofmttext(dns_rdata_t *rdata, dns_name_t *origin,
*/
tctx.origin = origin;
tctx.flags = flags;
- if ((flags & DNS_STYLEFLAG_MULTILINE) != 0) {
+ if (split_width == 0xffffffff)
tctx.width = width;
+ else
+ tctx.width = split_width;
+
+ if ((flags & DNS_STYLEFLAG_MULTILINE) != 0)
tctx.linebreak = linebreak;
- } else {
- tctx.width = 60; /* Used for hex word length only. */
+ else {
+ if (split_width == 0xffffffff)
+ tctx.width = 60; /* Used for hex word length only. */
tctx.linebreak = " ";
}
return (rdata_totext(rdata, &tctx, target));
@@ -1174,6 +1274,158 @@ txt_fromwire(isc_buffer_t *source, isc_buffer_t *target) {
return (ISC_R_SUCCESS);
}
+static isc_result_t
+multitxt_totext(isc_region_t *source, isc_buffer_t *target) {
+ unsigned int tl;
+ unsigned int n0, n;
+ unsigned char *sp;
+ char *tp;
+ isc_region_t region;
+
+ isc_buffer_availableregion(target, &region);
+ sp = source->base;
+ tp = (char *)region.base;
+ tl = region.length;
+
+ if (tl < 1)
+ return (ISC_R_NOSPACE);
+ *tp++ = '"';
+ tl--;
+ do {
+ n0 = n = *sp++;
+
+ REQUIRE(n0 + 1 <= source->length);
+
+ while (n--) {
+ if (*sp < 0x20 || *sp >= 0x7f) {
+ if (tl < 4)
+ return (ISC_R_NOSPACE);
+ *tp++ = 0x5c;
+ *tp++ = 0x30 + ((*sp / 100) % 10);
+ *tp++ = 0x30 + ((*sp / 10) % 10);
+ *tp++ = 0x30 + (*sp % 10);
+ sp++;
+ tl -= 4;
+ continue;
+ }
+ /* double quote, semi-colon, backslash */
+ if (*sp == 0x22 || *sp == 0x3b || *sp == 0x5c) {
+ if (tl < 2)
+ return (ISC_R_NOSPACE);
+ *tp++ = '\\';
+ tl--;
+ }
+ if (tl < 1)
+ return (ISC_R_NOSPACE);
+ *tp++ = *sp++;
+ tl--;
+ }
+ isc_region_consume(source, n0 + 1);
+ } while (source->length != 0);
+ if (tl < 1)
+ return (ISC_R_NOSPACE);
+ *tp++ = '"';
+ tl--;
+ isc_buffer_add(target, tp - (char *)region.base);
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+multitxt_fromtext(isc_textregion_t *source, isc_buffer_t *target) {
+ isc_region_t tregion;
+ isc_boolean_t escape;
+ unsigned int n, nrem;
+ char *s;
+ unsigned char *t0, *t;
+ int d;
+ int c;
+
+ s = source->base;
+ n = source->length;
+ escape = ISC_FALSE;
+
+ do {
+ isc_buffer_availableregion(target, &tregion);
+ t0 = tregion.base;
+ nrem = tregion.length;
+ if (nrem < 1)
+ return (ISC_R_NOSPACE);
+ /* length byte */
+ t = t0;
+ nrem--;
+ t++;
+ /* 255 byte character-string slice */
+ if (nrem > 255)
+ nrem = 255;
+ while (n != 0) {
+ --n;
+ c = (*s++) & 0xff;
+ if (escape && (d = decvalue((char)c)) != -1) {
+ c = d;
+ if (n == 0)
+ return (DNS_R_SYNTAX);
+ n--;
+ if ((d = decvalue(*s++)) != -1)
+ c = c * 10 + d;
+ else
+ return (DNS_R_SYNTAX);
+ if (n == 0)
+ return (DNS_R_SYNTAX);
+ n--;
+ if ((d = decvalue(*s++)) != -1)
+ c = c * 10 + d;
+ else
+ return (DNS_R_SYNTAX);
+ if (c > 255)
+ return (DNS_R_SYNTAX);
+ } else if (!escape && c == '\\') {
+ escape = ISC_TRUE;
+ continue;
+ }
+ escape = ISC_FALSE;
+ *t++ = c;
+ nrem--;
+ if (nrem == 0)
+ break;
+ }
+ if (escape)
+ return (DNS_R_SYNTAX);
+ *t0 = t - t0 - 1;
+ isc_buffer_add(target, *t0 + 1);
+ } while (n != 0);
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+multitxt_fromwire(isc_buffer_t *source, isc_buffer_t *target) {
+ unsigned int n;
+ isc_region_t sregion;
+ isc_region_t tregion;
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length == 0)
+ return(ISC_R_UNEXPECTEDEND);
+ n = 256U;
+ do {
+ if (n != 256U)
+ return (DNS_R_SYNTAX);
+ n = *sregion.base + 1;
+ if (n > sregion.length)
+ return (ISC_R_UNEXPECTEDEND);
+
+ isc_buffer_availableregion(target, &tregion);
+ if (n > tregion.length)
+ return (ISC_R_NOSPACE);
+
+ if (tregion.base != sregion.base)
+ memcpy(tregion.base, sregion.base, n);
+ isc_buffer_forward(source, n);
+ isc_buffer_add(target, n);
+ isc_buffer_activeregion(source, &sregion);
+ } while (sregion.length != 0);
+ return (ISC_R_SUCCESS);
+}
+
static isc_boolean_t
name_prefix(dns_name_t *name, dns_name_t *origin, dns_name_t *target) {
int l1, l2;
diff --git a/contrib/bind9/lib/dns/rdata/any_255/tsig_250.c b/contrib/bind9/lib/dns/rdata/any_255/tsig_250.c
index 338c5dd05eb0..3f91f91c009a 100644
--- a/contrib/bind9/lib/dns/rdata/any_255/tsig_250.c
+++ b/contrib/bind9/lib/dns/rdata/any_255/tsig_250.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -133,7 +133,7 @@ static inline isc_result_t
totext_any_tsig(ARGS_TOTEXT) {
isc_region_t sr;
isc_region_t sigr;
- char buf[sizeof("281474976710655 ")];
+ char buf[sizeof(" 281474976710655 ")];
char *bufp;
dns_name_t name;
dns_name_t prefix;
@@ -202,8 +202,11 @@ totext_any_tsig(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sigr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sigr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sigr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" ) ", target));
else
@@ -223,25 +226,23 @@ totext_any_tsig(ARGS_TOTEXT) {
*/
n = uint16_fromregion(&sr);
isc_region_consume(&sr, 2);
- if (dns_tsigrcode_totext((dns_rcode_t)n, target) == ISC_R_SUCCESS)
- RETERR(str_totext(" ", target));
- else {
- sprintf(buf, "%u ", n);
- RETERR(str_totext(buf, target));
- }
+ RETERR(dns_tsigrcode_totext((dns_rcode_t)n, target));
/*
* Other Size.
*/
n = uint16_fromregion(&sr);
isc_region_consume(&sr, 2);
- sprintf(buf, "%u ", n);
+ sprintf(buf, " %u ", n);
RETERR(str_totext(buf, target));
/*
* Other.
*/
- return (isc_base64_totext(&sr, 60, " ", target));
+ if (tctx->width == 0) /* No splitting */
+ return (isc_base64_totext(&sr, 60, "", target));
+ else
+ return (isc_base64_totext(&sr, 60, " ", target));
}
static inline isc_result_t
diff --git a/contrib/bind9/lib/dns/rdata/generic/cert_37.c b/contrib/bind9/lib/dns/rdata/generic/cert_37.c
index 2a447a67a268..a03290a60a02 100644
--- a/contrib/bind9/lib/dns/rdata/generic/cert_37.c
+++ b/contrib/bind9/lib/dns/rdata/generic/cert_37.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -109,8 +109,11 @@ totext_cert(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
return (ISC_R_SUCCESS);
diff --git a/contrib/bind9/lib/dns/rdata/generic/dlv_32769.c b/contrib/bind9/lib/dns/rdata/generic/dlv_32769.c
index 4dbcb1eed883..5751ad894527 100644
--- a/contrib/bind9/lib/dns/rdata/generic/dlv_32769.c
+++ b/contrib/bind9/lib/dns/rdata/generic/dlv_32769.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007, 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006, 2007, 2009-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -91,7 +91,7 @@ fromtext_dlv(ARGS_FROMTEXT) {
length = -1;
break;
}
- return (isc_hex_tobuffer(lexer, target, -1));
+ return (isc_hex_tobuffer(lexer, target, length));
}
static inline isc_result_t
@@ -137,7 +137,11 @@ totext_dlv(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_hex_totext(&sr, tctx->width - 2, tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_hex_totext(&sr, 0, "", target));
+ else
+ RETERR(isc_hex_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
return (ISC_R_SUCCESS);
diff --git a/contrib/bind9/lib/dns/rdata/generic/dnskey_48.c b/contrib/bind9/lib/dns/rdata/generic/dnskey_48.c
index b7eeb34f2b02..688e7ac5e18f 100644
--- a/contrib/bind9/lib/dns/rdata/generic/dnskey_48.c
+++ b/contrib/bind9/lib/dns/rdata/generic/dnskey_48.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -76,7 +76,8 @@ totext_dnskey(ARGS_TOTEXT) {
char buf[sizeof("64000")];
unsigned int flags;
unsigned char algorithm;
- char namebuf[DNS_NAME_FORMATSIZE];
+ char algbuf[DNS_NAME_FORMATSIZE];
+ const char *keyinfo;
REQUIRE(rdata->type == 48);
REQUIRE(rdata->length != 0);
@@ -89,6 +90,13 @@ totext_dnskey(ARGS_TOTEXT) {
sprintf(buf, "%u", flags);
RETERR(str_totext(buf, target));
RETERR(str_totext(" ", target));
+ if ((flags & DNS_KEYFLAG_KSK) != 0) {
+ if (flags & DNS_KEYFLAG_REVOKE)
+ keyinfo = "revoked KSK";
+ else
+ keyinfo = "KSK";
+ } else
+ keyinfo = "ZSK";
/* protocol */
sprintf(buf, "%u", sr.base[0]);
@@ -106,23 +114,28 @@ totext_dnskey(ARGS_TOTEXT) {
if ((flags & 0xc000) == 0xc000)
return (ISC_R_SUCCESS);
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0 &&
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0 &&
algorithm == DNS_KEYALG_PRIVATEDNS) {
dns_name_t name;
dns_name_init(&name, NULL);
dns_name_fromregion(&name, &sr);
- dns_name_format(&name, namebuf, sizeof(namebuf));
- } else
- namebuf[0] = 0;
+ dns_name_format(&name, algbuf, sizeof(algbuf));
+ } else {
+ dns_secalg_format((dns_secalg_t) algorithm, algbuf,
+ sizeof(algbuf));
+ }
/* key */
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 0, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0)
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0)
RETERR(str_totext(tctx->linebreak, target));
else if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" ", target));
@@ -130,18 +143,17 @@ totext_dnskey(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(")", target));
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0) {
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0) {
isc_region_t tmpr;
- RETERR(str_totext(" ; key id = ", target));
+ RETERR(str_totext(" ; ", target));
+ RETERR(str_totext(keyinfo, target));
+ RETERR(str_totext("; alg = ", target));
+ RETERR(str_totext(algbuf, target));
+ RETERR(str_totext("; key id = ", target));
dns_rdata_toregion(rdata, &tmpr);
sprintf(buf, "%u", dst_region_computeid(&tmpr, algorithm));
RETERR(str_totext(buf, target));
- if (algorithm == DNS_KEYALG_PRIVATEDNS) {
- RETERR(str_totext(tctx->linebreak, target));
- RETERR(str_totext("; alg = ", target));
- RETERR(str_totext(namebuf, target));
- }
}
return (ISC_R_SUCCESS);
}
diff --git a/contrib/bind9/lib/dns/rdata/generic/ds_43.c b/contrib/bind9/lib/dns/rdata/generic/ds_43.c
index 20bac85ccac0..dd47c8d5e83e 100644
--- a/contrib/bind9/lib/dns/rdata/generic/ds_43.c
+++ b/contrib/bind9/lib/dns/rdata/generic/ds_43.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -137,7 +137,11 @@ totext_ds(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_hex_totext(&sr, tctx->width - 2, tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_hex_totext(&sr, 0, "", target));
+ else
+ RETERR(isc_hex_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
return (ISC_R_SUCCESS);
diff --git a/contrib/bind9/lib/dns/rdata/generic/eui48_108.c b/contrib/bind9/lib/dns/rdata/generic/eui48_108.c
new file mode 100644
index 000000000000..3e52fec0ed4a
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/eui48_108.c
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef RDATA_GENERIC_EUI48_108_C
+#define RDATA_GENERIC_EUI48_108_C
+
+#include <string.h>
+
+#define RRTYPE_EUI48_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_eui48(ARGS_FROMTEXT) {
+ isc_token_t token;
+ unsigned char eui48[6];
+ unsigned int l0, l1, l2, l3, l4, l5;
+ int n;
+
+ REQUIRE(type == 108);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
+ ISC_FALSE));
+ n = sscanf(DNS_AS_STR(token), "%2x-%2x-%2x-%2x-%2x-%2x",
+ &l0, &l1, &l2, &l3, &l4, &l5);
+ if (n != 6 || l0 > 255U || l1 > 255U || l2 > 255U || l3 > 255U ||
+ l4 > 255U || l5 > 255U)
+ return (DNS_R_BADEUI);
+
+ eui48[0] = l0;
+ eui48[1] = l1;
+ eui48[2] = l2;
+ eui48[3] = l3;
+ eui48[4] = l4;
+ eui48[5] = l5;
+ return (mem_tobuffer(target, eui48, sizeof(eui48)));
+}
+
+static inline isc_result_t
+totext_eui48(ARGS_TOTEXT) {
+ char buf[sizeof("xx-xx-xx-xx-xx-xx")];
+
+ REQUIRE(rdata->type == 108);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(tctx);
+
+ (void)snprintf(buf, sizeof(buf), "%02x-%02x-%02x-%02x-%02x-%02x",
+ rdata->data[0], rdata->data[1], rdata->data[2],
+ rdata->data[3], rdata->data[4], rdata->data[5]);
+ return (str_totext(buf, target));
+}
+
+static inline isc_result_t
+fromwire_eui48(ARGS_FROMWIRE) {
+ isc_region_t sregion;
+
+ REQUIRE(type == 108);
+
+ UNUSED(type);
+ UNUSED(options);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length != 6)
+ return (DNS_R_FORMERR);
+ isc_buffer_forward(source, sregion.length);
+ return (mem_tobuffer(target, sregion.base, sregion.length));
+}
+
+static inline isc_result_t
+towire_eui48(ARGS_TOWIRE) {
+
+ REQUIRE(rdata->type == 108);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(cctx);
+
+ return (mem_tobuffer(target, rdata->data, rdata->length));
+}
+
+static inline int
+compare_eui48(ARGS_COMPARE) {
+ isc_region_t region1;
+ isc_region_t region2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 108);
+ REQUIRE(rdata1->length == 6);
+ REQUIRE(rdata2->length == 6);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+ return (isc_region_compare(&region1, &region2));
+}
+
+static inline isc_result_t
+fromstruct_eui48(ARGS_FROMSTRUCT) {
+ dns_rdata_eui48_t *eui48 = source;
+
+ REQUIRE(type == 108);
+ REQUIRE(source != NULL);
+ REQUIRE(eui48->common.rdtype == type);
+ REQUIRE(eui48->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (mem_tobuffer(target, eui48->eui48, sizeof(eui48->eui48)));
+}
+
+static inline isc_result_t
+tostruct_eui48(ARGS_TOSTRUCT) {
+ dns_rdata_eui48_t *eui48 = target;
+
+ REQUIRE(rdata->type == 108);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(mctx);
+
+ eui48->common.rdclass = rdata->rdclass;
+ eui48->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&eui48->common, link);
+
+ memcpy(eui48->eui48, rdata->data, rdata->length);
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_eui48(ARGS_FREESTRUCT) {
+ dns_rdata_eui48_t *eui48 = source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(eui48->common.rdtype == 108);
+
+ return;
+}
+
+static inline isc_result_t
+additionaldata_eui48(ARGS_ADDLDATA) {
+
+ REQUIRE(rdata->type == 108);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_eui48(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 108);
+ REQUIRE(rdata->length == 6);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_eui48(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 108);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_eui48(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 108);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_eui48(ARGS_COMPARE) {
+ return (compare_eui48(rdata1, rdata2));
+}
+
+#endif /* RDATA_GENERIC_EUI48_108_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/eui48_108.h b/contrib/bind9/lib/dns/rdata/generic/eui48_108.h
new file mode 100644
index 000000000000..508c61fd6809
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/eui48_108.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* */
+#ifndef GENERIC_EUI48_108_H
+#define GENERIC_EUI48_108_H 1
+
+typedef struct dns_rdata_eui48 {
+ dns_rdatacommon_t common;
+ unsigned char eui48[6];
+} dns_rdata_eui48_t;
+
+#endif /* GENERIC_EUI48_10k_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/eui64_109.c b/contrib/bind9/lib/dns/rdata/generic/eui64_109.c
new file mode 100644
index 000000000000..245994fdf5c0
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/eui64_109.c
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef RDATA_GENERIC_EUI64_109_C
+#define RDATA_GENERIC_EUI64_109_C
+
+#include <string.h>
+
+#define RRTYPE_EUI64_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_eui64(ARGS_FROMTEXT) {
+ isc_token_t token;
+ unsigned char eui64[8];
+ unsigned int l0, l1, l2, l3, l4, l5, l6, l7;
+ int n;
+
+ REQUIRE(type == 109);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
+ ISC_FALSE));
+ n = sscanf(DNS_AS_STR(token), "%2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x",
+ &l0, &l1, &l2, &l3, &l4, &l5, &l6, &l7);
+ if (n != 8 || l0 > 255U || l1 > 255U || l2 > 255U || l3 > 255U ||
+ l4 > 255U || l5 > 255U || l6 > 255U || l7 > 255U)
+ return (DNS_R_BADEUI);
+
+ eui64[0] = l0;
+ eui64[1] = l1;
+ eui64[2] = l2;
+ eui64[3] = l3;
+ eui64[4] = l4;
+ eui64[5] = l5;
+ eui64[6] = l6;
+ eui64[7] = l7;
+ return (mem_tobuffer(target, eui64, sizeof(eui64)));
+}
+
+static inline isc_result_t
+totext_eui64(ARGS_TOTEXT) {
+ char buf[sizeof("xx-xx-xx-xx-xx-xx-xx-xx")];
+
+ REQUIRE(rdata->type == 109);
+ REQUIRE(rdata->length == 8);
+
+ UNUSED(tctx);
+
+ (void)snprintf(buf, sizeof(buf),
+ "%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x",
+ rdata->data[0], rdata->data[1],
+ rdata->data[2], rdata->data[3],
+ rdata->data[4], rdata->data[5],
+ rdata->data[6], rdata->data[7]);
+ return (str_totext(buf, target));
+}
+
+static inline isc_result_t
+fromwire_eui64(ARGS_FROMWIRE) {
+ isc_region_t sregion;
+
+ REQUIRE(type == 109);
+
+ UNUSED(type);
+ UNUSED(options);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length != 8)
+ return (DNS_R_FORMERR);
+ isc_buffer_forward(source, sregion.length);
+ return (mem_tobuffer(target, sregion.base, sregion.length));
+}
+
+static inline isc_result_t
+towire_eui64(ARGS_TOWIRE) {
+
+ REQUIRE(rdata->type == 109);
+ REQUIRE(rdata->length == 8);
+
+ UNUSED(cctx);
+
+ return (mem_tobuffer(target, rdata->data, rdata->length));
+}
+
+static inline int
+compare_eui64(ARGS_COMPARE) {
+ isc_region_t region1;
+ isc_region_t region2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 109);
+ REQUIRE(rdata1->length == 8);
+ REQUIRE(rdata2->length == 8);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+ return (isc_region_compare(&region1, &region2));
+}
+
+static inline isc_result_t
+fromstruct_eui64(ARGS_FROMSTRUCT) {
+ dns_rdata_eui64_t *eui64 = source;
+
+ REQUIRE(type == 109);
+ REQUIRE(source != NULL);
+ REQUIRE(eui64->common.rdtype == type);
+ REQUIRE(eui64->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (mem_tobuffer(target, eui64->eui64, sizeof(eui64->eui64)));
+}
+
+static inline isc_result_t
+tostruct_eui64(ARGS_TOSTRUCT) {
+ dns_rdata_eui64_t *eui64 = target;
+
+ REQUIRE(rdata->type == 109);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length == 8);
+
+ UNUSED(mctx);
+
+ eui64->common.rdclass = rdata->rdclass;
+ eui64->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&eui64->common, link);
+
+ memcpy(eui64->eui64, rdata->data, rdata->length);
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_eui64(ARGS_FREESTRUCT) {
+ dns_rdata_eui64_t *eui64 = source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(eui64->common.rdtype == 109);
+
+ return;
+}
+
+static inline isc_result_t
+additionaldata_eui64(ARGS_ADDLDATA) {
+
+ REQUIRE(rdata->type == 109);
+ REQUIRE(rdata->length == 8);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_eui64(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 109);
+ REQUIRE(rdata->length == 8);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_eui64(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 109);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_eui64(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 109);
+ REQUIRE(rdata->length == 8);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_eui64(ARGS_COMPARE) {
+ return (compare_eui64(rdata1, rdata2));
+}
+
+#endif /* RDATA_GENERIC_EUI64_109_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/eui64_109.h b/contrib/bind9/lib/dns/rdata/generic/eui64_109.h
new file mode 100644
index 000000000000..56996f8ff31b
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/eui64_109.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* */
+#ifndef GENERIC_EUI64_109_H
+#define GENERIC_EUI64_109_H 1
+
+typedef struct dns_rdata_eui64 {
+ dns_rdatacommon_t common;
+ unsigned char eui64[8];
+} dns_rdata_eui64_t;
+
+#endif /* GENERIC_EUI64_10k_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.c b/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.c
index 7e65e655d290..1d2508c42e25 100644
--- a/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.c
+++ b/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.c
@@ -190,8 +190,11 @@ totext_ipseckey(ARGS_TOTEXT) {
*/
if (region.length > 0U) {
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&region, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&region, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&region, tctx->width - 2,
+ tctx->linebreak, target));
}
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
diff --git a/contrib/bind9/lib/dns/rdata/generic/key_25.c b/contrib/bind9/lib/dns/rdata/generic/key_25.c
index 26ca9a9b82da..1d0ba83a9b31 100644
--- a/contrib/bind9/lib/dns/rdata/generic/key_25.c
+++ b/contrib/bind9/lib/dns/rdata/generic/key_25.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -106,7 +106,7 @@ totext_key(ARGS_TOTEXT) {
if ((flags & 0xc000) == 0xc000)
return (ISC_R_SUCCESS);
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0 &&
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0 &&
algorithm == DNS_KEYALG_PRIVATEDNS) {
dns_name_t name;
dns_name_init(&name, NULL);
@@ -119,10 +119,13 @@ totext_key(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0)
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0)
RETERR(str_totext(tctx->linebreak, target));
else if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" ", target));
@@ -130,7 +133,7 @@ totext_key(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(")", target));
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0) {
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0) {
isc_region_t tmpr;
RETERR(str_totext(" ; key id = ", target));
diff --git a/contrib/bind9/lib/dns/rdata/generic/keydata_65533.c b/contrib/bind9/lib/dns/rdata/generic/keydata_65533.c
index 2592c30f6a08..a2d83f456e49 100644
--- a/contrib/bind9/lib/dns/rdata/generic/keydata_65533.c
+++ b/contrib/bind9/lib/dns/rdata/generic/keydata_65533.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -89,6 +89,8 @@ totext_keydata(ARGS_TOTEXT) {
unsigned int flags;
unsigned char algorithm;
unsigned long when;
+ char algbuf[DNS_NAME_FORMATSIZE];
+ const char *keyinfo;
REQUIRE(rdata->type == 65533);
REQUIRE(rdata->length != 0);
@@ -119,6 +121,13 @@ totext_keydata(ARGS_TOTEXT) {
sprintf(buf, "%u", flags);
RETERR(str_totext(buf, target));
RETERR(str_totext(" ", target));
+ if ((flags & DNS_KEYFLAG_KSK) != 0) {
+ if (flags & DNS_KEYFLAG_REVOKE)
+ keyinfo = "revoked KSK";
+ else
+ keyinfo = "KSK";
+ } else
+ keyinfo = "ZSK";
/* protocol */
sprintf(buf, "%u", sr.base[0]);
@@ -140,10 +149,13 @@ totext_keydata(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0)
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0)
RETERR(str_totext(tctx->linebreak, target));
else if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" ", target));
@@ -151,10 +163,16 @@ totext_keydata(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(")", target));
- if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0) {
+ if ((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0) {
isc_region_t tmpr;
- RETERR(str_totext(" ; key id = ", target));
+ RETERR(str_totext(" ; ", target));
+ RETERR(str_totext(keyinfo, target));
+ dns_secalg_format((dns_secalg_t) algorithm, algbuf,
+ sizeof(algbuf));
+ RETERR(str_totext("; alg = ", target));
+ RETERR(str_totext(algbuf, target));
+ RETERR(str_totext("; key id = ", target));
dns_rdata_toregion(rdata, &tmpr);
/* Skip over refresh, addhd, and removehd */
isc_region_consume(&tmpr, 12);
@@ -176,7 +194,7 @@ fromwire_keydata(ARGS_FROMWIRE) {
UNUSED(options);
isc_buffer_activeregion(source, &sr);
- if (sr.length < 4)
+ if (sr.length < 16)
return (ISC_R_UNEXPECTEDEND);
isc_buffer_forward(source, sr.length);
diff --git a/contrib/bind9/lib/dns/rdata/generic/l32_105.c b/contrib/bind9/lib/dns/rdata/generic/l32_105.c
new file mode 100644
index 000000000000..763ddb953fed
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/l32_105.c
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef RDATA_GENERIC_L32_105_C
+#define RDATA_GENERIC_L32_105_C
+
+#include <string.h>
+
+#include <isc/net.h>
+
+#define RRTYPE_L32_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_l32(ARGS_FROMTEXT) {
+ isc_token_t token;
+ struct in_addr addr;
+ isc_region_t region;
+
+ REQUIRE(type == 105);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint16_tobuffer(token.value.as_ulong, target));
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
+ ISC_FALSE));
+
+ if (getquad(DNS_AS_STR(token), &addr, lexer, callbacks) != 1)
+ RETTOK(DNS_R_BADDOTTEDQUAD);
+ isc_buffer_availableregion(target, &region);
+ if (region.length < 4)
+ return (ISC_R_NOSPACE);
+ memcpy(region.base, &addr, 4);
+ isc_buffer_add(target, 4);
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+totext_l32(ARGS_TOTEXT) {
+ isc_region_t region;
+ char buf[sizeof("65000")];
+ unsigned short num;
+
+ REQUIRE(rdata->type == 105);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(tctx);
+
+ dns_rdata_toregion(rdata, &region);
+ num = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ sprintf(buf, "%u", num);
+ RETERR(str_totext(buf, target));
+
+ RETERR(str_totext(" ", target));
+
+ return (inet_totext(AF_INET, &region, target));
+}
+
+static inline isc_result_t
+fromwire_l32(ARGS_FROMWIRE) {
+ isc_region_t sregion;
+
+ REQUIRE(type == 105);
+
+ UNUSED(type);
+ UNUSED(options);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length != 6)
+ return (DNS_R_FORMERR);
+ isc_buffer_forward(source, sregion.length);
+ return (mem_tobuffer(target, sregion.base, sregion.length));
+}
+
+static inline isc_result_t
+towire_l32(ARGS_TOWIRE) {
+
+ REQUIRE(rdata->type == 105);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(cctx);
+
+ return (mem_tobuffer(target, rdata->data, rdata->length));
+}
+
+static inline int
+compare_l32(ARGS_COMPARE) {
+ isc_region_t region1;
+ isc_region_t region2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 105);
+ REQUIRE(rdata1->length == 6);
+ REQUIRE(rdata2->length == 6);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+ return (isc_region_compare(&region1, &region2));
+}
+
+static inline isc_result_t
+fromstruct_l32(ARGS_FROMSTRUCT) {
+ dns_rdata_l32_t *l32 = source;
+ isc_uint32_t n;
+
+ REQUIRE(type == 105);
+ REQUIRE(source != NULL);
+ REQUIRE(l32->common.rdtype == type);
+ REQUIRE(l32->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ RETERR(uint16_tobuffer(l32->pref, target));
+ n = ntohl(l32->l32.s_addr);
+ return (uint32_tobuffer(n, target));
+}
+
+static inline isc_result_t
+tostruct_l32(ARGS_TOSTRUCT) {
+ isc_region_t region;
+ dns_rdata_l32_t *l32 = target;
+ isc_uint32_t n;
+
+ REQUIRE(rdata->type == 105);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(mctx);
+
+ l32->common.rdclass = rdata->rdclass;
+ l32->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&l32->common, link);
+
+ dns_rdata_toregion(rdata, &region);
+ l32->pref = uint16_fromregion(&region);
+ n = uint32_fromregion(&region);
+ l32->l32.s_addr = htonl(n);
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_l32(ARGS_FREESTRUCT) {
+ dns_rdata_l32_t *l32 = source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(l32->common.rdtype == 105);
+
+ return;
+}
+
+static inline isc_result_t
+additionaldata_l32(ARGS_ADDLDATA) {
+
+ REQUIRE(rdata->type == 105);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_l32(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 105);
+ REQUIRE(rdata->length == 6);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_l32(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 105);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_l32(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 105);
+ REQUIRE(rdata->length == 6);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_l32(ARGS_COMPARE) {
+ return (compare_l32(rdata1, rdata2));
+}
+
+#endif /* RDATA_GENERIC_L32_105_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/l32_105.h b/contrib/bind9/lib/dns/rdata/generic/l32_105.h
new file mode 100644
index 000000000000..f95db22e8837
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/l32_105.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* */
+#ifndef GENERIC_L32_105_H
+#define GENERIC_L32_105_H 1
+
+typedef struct dns_rdata_l32 {
+ dns_rdatacommon_t common;
+ isc_uint16_t pref;
+ struct in_addr l32;
+} dns_rdata_l32_t;
+
+#endif /* GENERIC_L32_105_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/l64_106.c b/contrib/bind9/lib/dns/rdata/generic/l64_106.c
new file mode 100644
index 000000000000..ff20663355ca
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/l64_106.c
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef RDATA_GENERIC_L64_106_C
+#define RDATA_GENERIC_L64_106_C
+
+#include <string.h>
+
+#include <isc/net.h>
+
+#define RRTYPE_L64_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_l64(ARGS_FROMTEXT) {
+ isc_token_t token;
+ unsigned char locator[NS_LOCATORSZ];
+
+ REQUIRE(type == 106);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint16_tobuffer(token.value.as_ulong, target));
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
+ ISC_FALSE));
+
+ if (locator_pton(DNS_AS_STR(token), locator) != 1)
+ RETTOK(DNS_R_SYNTAX);
+ return (mem_tobuffer(target, locator, NS_LOCATORSZ));
+}
+
+static inline isc_result_t
+totext_l64(ARGS_TOTEXT) {
+ isc_region_t region;
+ char buf[sizeof("xxxx:xxxx:xxxx:xxxx")];
+ unsigned short num;
+
+ REQUIRE(rdata->type == 106);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(tctx);
+
+ dns_rdata_toregion(rdata, &region);
+ num = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ sprintf(buf, "%u", num);
+ RETERR(str_totext(buf, target));
+
+ RETERR(str_totext(" ", target));
+
+ sprintf(buf, "%x:%x:%x:%x",
+ region.base[0]<<8 | region.base[1],
+ region.base[2]<<8 | region.base[3],
+ region.base[4]<<8 | region.base[5],
+ region.base[6]<<8 | region.base[7]);
+ return (str_totext(buf, target));
+}
+
+static inline isc_result_t
+fromwire_l64(ARGS_FROMWIRE) {
+ isc_region_t sregion;
+
+ REQUIRE(type == 106);
+
+ UNUSED(type);
+ UNUSED(options);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length != 10)
+ return (DNS_R_FORMERR);
+ isc_buffer_forward(source, sregion.length);
+ return (mem_tobuffer(target, sregion.base, sregion.length));
+}
+
+static inline isc_result_t
+towire_l64(ARGS_TOWIRE) {
+
+ REQUIRE(rdata->type == 106);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(cctx);
+
+ return (mem_tobuffer(target, rdata->data, rdata->length));
+}
+
+static inline int
+compare_l64(ARGS_COMPARE) {
+ isc_region_t region1;
+ isc_region_t region2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 106);
+ REQUIRE(rdata1->length == 10);
+ REQUIRE(rdata2->length == 10);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+ return (isc_region_compare(&region1, &region2));
+}
+
+static inline isc_result_t
+fromstruct_l64(ARGS_FROMSTRUCT) {
+ dns_rdata_l64_t *l64 = source;
+
+ REQUIRE(type == 106);
+ REQUIRE(source != NULL);
+ REQUIRE(l64->common.rdtype == type);
+ REQUIRE(l64->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ RETERR(uint16_tobuffer(l64->pref, target));
+ return (mem_tobuffer(target, l64->l64, sizeof(l64->l64)));
+}
+
+static inline isc_result_t
+tostruct_l64(ARGS_TOSTRUCT) {
+ isc_region_t region;
+ dns_rdata_l64_t *l64 = target;
+
+ REQUIRE(rdata->type == 106);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(mctx);
+
+ l64->common.rdclass = rdata->rdclass;
+ l64->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&l64->common, link);
+
+ dns_rdata_toregion(rdata, &region);
+ l64->pref = uint16_fromregion(&region);
+ memcpy(l64->l64, region.base, region.length);
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_l64(ARGS_FREESTRUCT) {
+ dns_rdata_l64_t *l64 = source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(l64->common.rdtype == 106);
+
+ return;
+}
+
+static inline isc_result_t
+additionaldata_l64(ARGS_ADDLDATA) {
+
+ REQUIRE(rdata->type == 106);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_l64(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 106);
+ REQUIRE(rdata->length == 10);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_l64(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 106);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_l64(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 106);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_l64(ARGS_COMPARE) {
+ return (compare_l64(rdata1, rdata2));
+}
+
+#endif /* RDATA_GENERIC_L64_106_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/l64_106.h b/contrib/bind9/lib/dns/rdata/generic/l64_106.h
new file mode 100644
index 000000000000..8f93fc513f67
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/l64_106.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* */
+#ifndef GENERIC_L64_106_H
+#define GENERIC_L64_106_H 1
+
+typedef struct dns_rdata_l64 {
+ dns_rdatacommon_t common;
+ isc_uint16_t pref;
+ unsigned char l64[8];
+} dns_rdata_l64_t;
+
+#endif /* GENERIC_L64_106_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/lp_107.c b/contrib/bind9/lib/dns/rdata/generic/lp_107.c
new file mode 100644
index 000000000000..732ef7fa88f5
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/lp_107.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef RDATA_GENERIC_LP_107_C
+#define RDATA_GENERIC_LP_107_C
+
+#include <string.h>
+
+#include <isc/net.h>
+
+#define RRTYPE_LP_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_lp(ARGS_FROMTEXT) {
+ isc_token_t token;
+ dns_name_t name;
+ isc_buffer_t buffer;
+
+ REQUIRE(type == 107);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(callbacks);
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint16_tobuffer(token.value.as_ulong, target));
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
+ ISC_FALSE));
+
+ dns_name_init(&name, NULL);
+ buffer_fromregion(&buffer, &token.value.as_region);
+ origin = (origin != NULL) ? origin : dns_rootname;
+ return (dns_name_fromtext(&name, &buffer, origin, options, target));
+}
+
+static inline isc_result_t
+totext_lp(ARGS_TOTEXT) {
+ isc_region_t region;
+ dns_name_t name;
+ dns_name_t prefix;
+ isc_boolean_t sub;
+ char buf[sizeof("64000")];
+ unsigned short num;
+
+ REQUIRE(rdata->type == 107);
+ REQUIRE(rdata->length != 0);
+
+ dns_name_init(&name, NULL);
+ dns_name_init(&prefix, NULL);
+
+ dns_rdata_toregion(rdata, &region);
+ num = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ sprintf(buf, "%u", num);
+ RETERR(str_totext(buf, target));
+
+ RETERR(str_totext(" ", target));
+
+ dns_name_fromregion(&name, &region);
+ sub = name_prefix(&name, tctx->origin, &prefix);
+ return (dns_name_totext(&prefix, sub, target));
+}
+
+static inline isc_result_t
+fromwire_lp(ARGS_FROMWIRE) {
+ dns_name_t name;
+ isc_region_t sregion;
+
+ REQUIRE(type == 107);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
+
+ dns_name_init(&name, NULL);
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length < 2)
+ return (ISC_R_UNEXPECTEDEND);
+ RETERR(mem_tobuffer(target, sregion.base, 2));
+ isc_buffer_forward(source, 2);
+ return (dns_name_fromwire(&name, source, dctx, options, target));
+}
+
+static inline isc_result_t
+towire_lp(ARGS_TOWIRE) {
+
+ REQUIRE(rdata->type == 107);
+ REQUIRE(rdata->length != 0);
+
+ UNUSED(cctx);
+
+ return (mem_tobuffer(target, rdata->data, rdata->length));
+}
+
+static inline int
+compare_lp(ARGS_COMPARE) {
+ isc_region_t region1;
+ isc_region_t region2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 107);
+ REQUIRE(rdata1->length != 0);
+ REQUIRE(rdata2->length != 0);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+
+ return (isc_region_compare(&region1, &region2));
+}
+
+static inline isc_result_t
+fromstruct_lp(ARGS_FROMSTRUCT) {
+ dns_rdata_lp_t *lp = source;
+ isc_region_t region;
+
+ REQUIRE(type == 107);
+ REQUIRE(source != NULL);
+ REQUIRE(lp->common.rdtype == type);
+ REQUIRE(lp->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ RETERR(uint16_tobuffer(lp->pref, target));
+ dns_name_toregion(&lp->lp, &region);
+ return (isc_buffer_copyregion(target, &region));
+}
+
+static inline isc_result_t
+tostruct_lp(ARGS_TOSTRUCT) {
+ isc_region_t region;
+ dns_rdata_lp_t *lp = target;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 107);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length != 0);
+
+ lp->common.rdclass = rdata->rdclass;
+ lp->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&lp->common, link);
+
+ dns_name_init(&name, NULL);
+ dns_rdata_toregion(rdata, &region);
+ lp->pref = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ dns_name_fromregion(&name, &region);
+ dns_name_init(&lp->lp, NULL);
+ RETERR(name_duporclone(&name, mctx, &lp->lp));
+ lp->mctx = mctx;
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_lp(ARGS_FREESTRUCT) {
+ dns_rdata_lp_t *lp = source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(lp->common.rdtype == 107);
+
+ if (lp->mctx == NULL)
+ return;
+
+ dns_name_free(&lp->lp, lp->mctx);
+ lp->mctx = NULL;
+}
+
+static inline isc_result_t
+additionaldata_lp(ARGS_ADDLDATA) {
+ dns_name_t name;
+ dns_offsets_t offsets;
+ isc_region_t region;
+ isc_result_t result;
+
+ REQUIRE(rdata->type == 107);
+
+ dns_name_init(&name, offsets);
+ dns_rdata_toregion(rdata, &region);
+ isc_region_consume(&region, 2);
+ dns_name_fromregion(&name, &region);
+
+ result = (add)(arg, &name, dns_rdatatype_l32);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ return ((add)(arg, &name, dns_rdatatype_l64));
+}
+
+static inline isc_result_t
+digest_lp(ARGS_DIGEST) {
+ isc_region_t region;
+
+ REQUIRE(rdata->type == 107);
+
+ dns_rdata_toregion(rdata, &region);
+ return ((digest)(arg, &region));
+}
+
+static inline isc_boolean_t
+checkowner_lp(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 107);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(name);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_lp(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 107);
+
+ UNUSED(bad);
+ UNUSED(owner);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_lp(ARGS_COMPARE) {
+ dns_name_t name1;
+ dns_name_t name2;
+ isc_region_t region1;
+ isc_region_t region2;
+ int order;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 107);
+ REQUIRE(rdata1->length != 0);
+ REQUIRE(rdata2->length != 0);
+
+ order = memcmp(rdata1->data, rdata2->data, 2);
+ if (order != 0)
+ return (order < 0 ? -1 : 1);
+
+ dns_name_init(&name1, NULL);
+ dns_name_init(&name2, NULL);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+
+ isc_region_consume(&region1, 2);
+ isc_region_consume(&region2, 2);
+
+ dns_name_fromregion(&name1, &region1);
+ dns_name_fromregion(&name2, &region2);
+
+ return (dns_name_rdatacompare(&name1, &name2));
+}
+
+#endif /* RDATA_GENERIC_LP_107_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/lp_107.h b/contrib/bind9/lib/dns/rdata/generic/lp_107.h
new file mode 100644
index 000000000000..cbfee8a49cb1
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/lp_107.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* */
+#ifndef GENERIC_LP_107_H
+#define GENERIC_LP_107_H 1
+
+typedef struct dns_rdata_lp {
+ dns_rdatacommon_t common;
+ isc_mem_t *mctx;
+ isc_uint16_t pref;
+ dns_name_t lp;
+} dns_rdata_lp_t;
+
+#endif /* GENERIC_LP_107_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/mx_15.c b/contrib/bind9/lib/dns/rdata/generic/mx_15.c
index fd09e92535f5..77eee158b705 100644
--- a/contrib/bind9/lib/dns/rdata/generic/mx_15.c
+++ b/contrib/bind9/lib/dns/rdata/generic/mx_15.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -57,7 +57,6 @@ fromtext_mx(ARGS_FROMTEXT) {
UNUSED(type);
UNUSED(rdclass);
- UNUSED(callbacks);
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
ISC_FALSE));
diff --git a/contrib/bind9/lib/dns/rdata/in_1/naptr_35.c b/contrib/bind9/lib/dns/rdata/generic/naptr_35.c
index 71ba31e2faed..83439a59293e 100644
--- a/contrib/bind9/lib/dns/rdata/in_1/naptr_35.c
+++ b/contrib/bind9/lib/dns/rdata/generic/naptr_35.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -21,13 +21,12 @@
/* RFC2915 */
-#ifndef RDATA_IN_1_NAPTR_35_C
-#define RDATA_IN_1_NAPTR_35_C
+#ifndef RDATA_GENERIC_NAPTR_35_C
+#define RDATA_GENERIC_NAPTR_35_C
#define RRTYPE_NAPTR_ATTRIBUTES (0)
-#ifdef HAVE_REGEX_H
-#include <regex.h>
-#endif
+
+#include <isc/regex.h>
/*
* Check the wire format of the Regexp field.
@@ -35,18 +34,15 @@
*/
static inline isc_result_t
txt_valid_regex(const unsigned char *txt) {
-#ifdef HAVE_REGEX_H
- regex_t preg;
- unsigned int regflags = REG_EXTENDED;
unsigned int nsub = 0;
char regex[256];
char *cp;
-#endif
isc_boolean_t flags = ISC_FALSE;
isc_boolean_t replace = ISC_FALSE;
unsigned char c;
unsigned char delim;
unsigned int len;
+ int n;
len = *txt++;
if (len == 0U)
@@ -65,11 +61,7 @@ txt_valid_regex(const unsigned char *txt) {
return (DNS_R_SYNTAX);
}
-#ifdef HAVE_REGEX_H
- memset(&preg, 0, sizeof(preg));
cp = regex;
-#endif
-
while (len-- > 0) {
c = *txt++;
if (c == 0)
@@ -88,18 +80,13 @@ txt_valid_regex(const unsigned char *txt) {
if (flags) {
switch (c) {
case 'i':
-#ifdef HAVE_REGEX_H
- regflags |= REG_ICASE;
-#endif
continue;
default:
return (DNS_R_SYNTAX);
}
}
-#ifdef HAVE_REGEX_H
if (!replace)
*cp++ = c;
-#endif
if (c == '\\') {
if (len == 0)
return (DNS_R_SYNTAX);
@@ -110,7 +97,6 @@ txt_valid_regex(const unsigned char *txt) {
if (replace)
switch (c) {
case '0': return (DNS_R_SYNTAX);
-#ifdef HAVE_REGEX_H
case '1': if (nsub < 1) nsub = 1; break;
case '2': if (nsub < 2) nsub = 2; break;
case '3': if (nsub < 3) nsub = 3; break;
@@ -120,42 +106,28 @@ txt_valid_regex(const unsigned char *txt) {
case '7': if (nsub < 7) nsub = 7; break;
case '8': if (nsub < 8) nsub = 8; break;
case '9': if (nsub < 9) nsub = 9; break;
-#endif
}
-#ifdef HAVE_REGEX_H
if (!replace)
*cp++ = c;
-#endif
}
}
if (!flags)
return (DNS_R_SYNTAX);
-#ifdef HAVE_REGEX_H
*cp = '\0';
- if (regcomp(&preg, regex, regflags))
- return (DNS_R_SYNTAX);
- /*
- * Check that substitutions in the replacement string are consistant
- * with the regular expression.
- */
- if (preg.re_nsub < nsub) {
- regfree(&preg);
+ n = isc_regex_validate(regex);
+ if (n < 0 || nsub > (unsigned int)n)
return (DNS_R_SYNTAX);
- }
- regfree(&preg);
-#endif
return (ISC_R_SUCCESS);
}
static inline isc_result_t
-fromtext_in_naptr(ARGS_FROMTEXT) {
+fromtext_naptr(ARGS_FROMTEXT) {
isc_token_t token;
dns_name_t name;
isc_buffer_t buffer;
unsigned char *regex;
REQUIRE(type == 35);
- REQUIRE(rdclass == 1);
UNUSED(type);
UNUSED(rdclass);
@@ -215,7 +187,7 @@ fromtext_in_naptr(ARGS_FROMTEXT) {
}
static inline isc_result_t
-totext_in_naptr(ARGS_TOTEXT) {
+totext_naptr(ARGS_TOTEXT) {
isc_region_t region;
dns_name_t name;
dns_name_t prefix;
@@ -224,7 +196,6 @@ totext_in_naptr(ARGS_TOTEXT) {
unsigned short num;
REQUIRE(rdata->type == 35);
- REQUIRE(rdata->rdclass == 1);
REQUIRE(rdata->length != 0);
dns_name_init(&name, NULL);
@@ -277,13 +248,12 @@ totext_in_naptr(ARGS_TOTEXT) {
}
static inline isc_result_t
-fromwire_in_naptr(ARGS_FROMWIRE) {
+fromwire_naptr(ARGS_FROMWIRE) {
dns_name_t name;
isc_region_t sr;
unsigned char *regex;
REQUIRE(type == 35);
- REQUIRE(rdclass == 1);
UNUSED(type);
UNUSED(rdclass);
@@ -325,13 +295,12 @@ fromwire_in_naptr(ARGS_FROMWIRE) {
}
static inline isc_result_t
-towire_in_naptr(ARGS_TOWIRE) {
+towire_naptr(ARGS_TOWIRE) {
dns_name_t name;
dns_offsets_t offsets;
isc_region_t sr;
REQUIRE(rdata->type == 35);
- REQUIRE(rdata->rdclass == 1);
REQUIRE(rdata->length != 0);
dns_compress_setmethods(cctx, DNS_COMPRESS_NONE);
@@ -369,7 +338,7 @@ towire_in_naptr(ARGS_TOWIRE) {
}
static inline int
-compare_in_naptr(ARGS_COMPARE) {
+compare_naptr(ARGS_COMPARE) {
dns_name_t name1;
dns_name_t name2;
isc_region_t region1;
@@ -379,7 +348,6 @@ compare_in_naptr(ARGS_COMPARE) {
REQUIRE(rdata1->type == rdata2->type);
REQUIRE(rdata1->rdclass == rdata2->rdclass);
REQUIRE(rdata1->type == 35);
- REQUIRE(rdata1->rdclass == 1);
REQUIRE(rdata1->length != 0);
REQUIRE(rdata2->length != 0);
@@ -438,12 +406,11 @@ compare_in_naptr(ARGS_COMPARE) {
}
static inline isc_result_t
-fromstruct_in_naptr(ARGS_FROMSTRUCT) {
- dns_rdata_in_naptr_t *naptr = source;
+fromstruct_naptr(ARGS_FROMSTRUCT) {
+ dns_rdata_naptr_t *naptr = source;
isc_region_t region;
REQUIRE(type == 35);
- REQUIRE(rdclass == 1);
REQUIRE(source != NULL);
REQUIRE(naptr->common.rdtype == type);
REQUIRE(naptr->common.rdclass == rdclass);
@@ -467,14 +434,13 @@ fromstruct_in_naptr(ARGS_FROMSTRUCT) {
}
static inline isc_result_t
-tostruct_in_naptr(ARGS_TOSTRUCT) {
- dns_rdata_in_naptr_t *naptr = target;
+tostruct_naptr(ARGS_TOSTRUCT) {
+ dns_rdata_naptr_t *naptr = target;
isc_region_t r;
isc_result_t result;
dns_name_t name;
REQUIRE(rdata->type == 35);
- REQUIRE(rdata->rdclass == 1);
REQUIRE(target != NULL);
REQUIRE(rdata->length != 0);
@@ -538,11 +504,10 @@ tostruct_in_naptr(ARGS_TOSTRUCT) {
}
static inline void
-freestruct_in_naptr(ARGS_FREESTRUCT) {
- dns_rdata_in_naptr_t *naptr = source;
+freestruct_naptr(ARGS_FREESTRUCT) {
+ dns_rdata_naptr_t *naptr = source;
REQUIRE(source != NULL);
- REQUIRE(naptr->common.rdclass == 1);
REQUIRE(naptr->common.rdtype == 35);
if (naptr->mctx == NULL)
@@ -559,7 +524,7 @@ freestruct_in_naptr(ARGS_FREESTRUCT) {
}
static inline isc_result_t
-additionaldata_in_naptr(ARGS_ADDLDATA) {
+additionaldata_naptr(ARGS_ADDLDATA) {
dns_name_t name;
dns_offsets_t offsets;
isc_region_t sr;
@@ -568,7 +533,6 @@ additionaldata_in_naptr(ARGS_ADDLDATA) {
char *cp;
REQUIRE(rdata->type == 35);
- REQUIRE(rdata->rdclass == 1);
/*
* Order, preference.
@@ -617,14 +581,13 @@ additionaldata_in_naptr(ARGS_ADDLDATA) {
}
static inline isc_result_t
-digest_in_naptr(ARGS_DIGEST) {
+digest_naptr(ARGS_DIGEST) {
isc_region_t r1, r2;
unsigned int length, n;
isc_result_t result;
dns_name_t name;
REQUIRE(rdata->type == 35);
- REQUIRE(rdata->rdclass == 1);
dns_rdata_toregion(rdata, &r1);
r2 = r1;
@@ -676,10 +639,9 @@ digest_in_naptr(ARGS_DIGEST) {
}
static inline isc_boolean_t
-checkowner_in_naptr(ARGS_CHECKOWNER) {
+checkowner_naptr(ARGS_CHECKOWNER) {
REQUIRE(type == 35);
- REQUIRE(rdclass == 1);
UNUSED(name);
UNUSED(type);
@@ -690,10 +652,9 @@ checkowner_in_naptr(ARGS_CHECKOWNER) {
}
static inline isc_boolean_t
-checknames_in_naptr(ARGS_CHECKNAMES) {
+checknames_naptr(ARGS_CHECKNAMES) {
REQUIRE(rdata->type == 35);
- REQUIRE(rdata->rdclass == 1);
UNUSED(rdata);
UNUSED(owner);
@@ -703,8 +664,8 @@ checknames_in_naptr(ARGS_CHECKNAMES) {
}
static inline int
-casecompare_in_naptr(ARGS_COMPARE) {
- return (compare_in_naptr(rdata1, rdata2));
+casecompare_naptr(ARGS_COMPARE) {
+ return (compare_naptr(rdata1, rdata2));
}
-#endif /* RDATA_IN_1_NAPTR_35_C */
+#endif /* RDATA_GENERIC_NAPTR_35_C */
diff --git a/contrib/bind9/lib/dns/rdata/in_1/naptr_35.h b/contrib/bind9/lib/dns/rdata/generic/naptr_35.h
index 04e8d691a582..f88c52336f82 100644
--- a/contrib/bind9/lib/dns/rdata/in_1/naptr_35.h
+++ b/contrib/bind9/lib/dns/rdata/generic/naptr_35.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,15 +15,15 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-#ifndef IN_1_NAPTR_35_H
-#define IN_1_NAPTR_35_H 1
+#ifndef GENERIC_NAPTR_35_H
+#define GENERIC_NAPTR_35_H 1
/* $Id$ */
/*!
* \brief Per RFC2915 */
-typedef struct dns_rdata_in_naptr {
+typedef struct dns_rdata_naptr {
dns_rdatacommon_t common;
isc_mem_t *mctx;
isc_uint16_t order;
@@ -35,6 +35,6 @@ typedef struct dns_rdata_in_naptr {
char *regexp;
isc_uint8_t regexp_len;
dns_name_t replacement;
-} dns_rdata_in_naptr_t;
+} dns_rdata_naptr_t;
-#endif /* IN_1_NAPTR_35_H */
+#endif /* GENERIC_NAPTR_35_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/nid_104.c b/contrib/bind9/lib/dns/rdata/generic/nid_104.c
new file mode 100644
index 000000000000..c96b0bf9c980
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/nid_104.c
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef RDATA_GENERIC_NID_104_C
+#define RDATA_GENERIC_NID_104_C
+
+#include <string.h>
+
+#include <isc/net.h>
+
+#define RRTYPE_NID_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_nid(ARGS_FROMTEXT) {
+ isc_token_t token;
+ unsigned char locator[NS_LOCATORSZ];
+
+ REQUIRE(type == 104);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint16_tobuffer(token.value.as_ulong, target));
+
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
+ ISC_FALSE));
+
+ if (locator_pton(DNS_AS_STR(token), locator) != 1)
+ RETTOK(DNS_R_SYNTAX);
+ return (mem_tobuffer(target, locator, NS_LOCATORSZ));
+}
+
+static inline isc_result_t
+totext_nid(ARGS_TOTEXT) {
+ isc_region_t region;
+ char buf[sizeof("xxxx:xxxx:xxxx:xxxx")];
+ unsigned short num;
+
+ REQUIRE(rdata->type == 104);
+ REQUIRE(rdata->length != 0);
+
+ UNUSED(tctx);
+
+ dns_rdata_toregion(rdata, &region);
+ num = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ sprintf(buf, "%u", num);
+ RETERR(str_totext(buf, target));
+
+ RETERR(str_totext(" ", target));
+
+ sprintf(buf, "%x:%x:%x:%x",
+ region.base[0]<<8 | region.base[1],
+ region.base[2]<<8 | region.base[3],
+ region.base[4]<<8 | region.base[5],
+ region.base[6]<<8 | region.base[7]);
+ return (str_totext(buf, target));
+}
+
+static inline isc_result_t
+fromwire_nid(ARGS_FROMWIRE) {
+ isc_region_t sregion;
+
+ REQUIRE(type == 104);
+
+ UNUSED(type);
+ UNUSED(options);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+
+ isc_buffer_activeregion(source, &sregion);
+ if (sregion.length != 10)
+ return (DNS_R_FORMERR);
+ isc_buffer_forward(source, sregion.length);
+ return (mem_tobuffer(target, sregion.base, sregion.length));
+}
+
+static inline isc_result_t
+towire_nid(ARGS_TOWIRE) {
+
+ REQUIRE(rdata->type == 104);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(cctx);
+
+ return (mem_tobuffer(target, rdata->data, rdata->length));
+}
+
+static inline int
+compare_nid(ARGS_COMPARE) {
+ isc_region_t region1;
+ isc_region_t region2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 104);
+ REQUIRE(rdata1->length == 10);
+ REQUIRE(rdata2->length == 10);
+
+ dns_rdata_toregion(rdata1, &region1);
+ dns_rdata_toregion(rdata2, &region2);
+ return (isc_region_compare(&region1, &region2));
+}
+
+static inline isc_result_t
+fromstruct_nid(ARGS_FROMSTRUCT) {
+ dns_rdata_nid_t *nid = source;
+
+ REQUIRE(type == 104);
+ REQUIRE(source != NULL);
+ REQUIRE(nid->common.rdtype == type);
+ REQUIRE(nid->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ RETERR(uint16_tobuffer(nid->pref, target));
+ return (mem_tobuffer(target, nid->nid, sizeof(nid->nid)));
+}
+
+static inline isc_result_t
+tostruct_nid(ARGS_TOSTRUCT) {
+ isc_region_t region;
+ dns_rdata_nid_t *nid = target;
+
+ REQUIRE(rdata->type == 104);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(mctx);
+
+ nid->common.rdclass = rdata->rdclass;
+ nid->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&nid->common, link);
+
+ dns_rdata_toregion(rdata, &region);
+ nid->pref = uint16_fromregion(&region);
+ memcpy(nid->nid, region.base, region.length);
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_nid(ARGS_FREESTRUCT) {
+ dns_rdata_nid_t *nid = source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(nid->common.rdtype == 104);
+
+ return;
+}
+
+static inline isc_result_t
+additionaldata_nid(ARGS_ADDLDATA) {
+
+ REQUIRE(rdata->type == 104);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_nid(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 104);
+ REQUIRE(rdata->length == 10);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_nid(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 104);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_nid(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 104);
+ REQUIRE(rdata->length == 10);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_nid(ARGS_COMPARE) {
+ return (compare_nid(rdata1, rdata2));
+}
+
+#endif /* RDATA_GENERIC_NID_104_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/nid_104.h b/contrib/bind9/lib/dns/rdata/generic/nid_104.h
new file mode 100644
index 000000000000..64a3ba477dfc
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/nid_104.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* */
+#ifndef GENERIC_NID_104_H
+#define GENERIC_NID_104_H 1
+
+typedef struct dns_rdata_nid {
+ dns_rdatacommon_t common;
+ isc_uint16_t pref;
+ unsigned char nid[8];
+} dns_rdata_nid_t;
+
+#endif /* GENERIC_NID_104_H */
diff --git a/contrib/bind9/lib/dns/rdata/generic/nsec3_50.c b/contrib/bind9/lib/dns/rdata/generic/nsec3_50.c
index 96b2dc8f5feb..19b94efa06dc 100644
--- a/contrib/bind9/lib/dns/rdata/generic/nsec3_50.c
+++ b/contrib/bind9/lib/dns/rdata/generic/nsec3_50.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2008, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -142,32 +142,32 @@ totext_nsec3(ARGS_TOTEXT) {
unsigned char flags;
char buf[sizeof("65535 ")];
isc_uint32_t iterations;
+ isc_boolean_t first;
REQUIRE(rdata->type == 50);
REQUIRE(rdata->length != 0);
- UNUSED(tctx);
-
dns_rdata_toregion(rdata, &sr);
+ /* Hash */
hash = uint8_fromregion(&sr);
isc_region_consume(&sr, 1);
-
- flags = uint8_fromregion(&sr);
- isc_region_consume(&sr, 1);
-
- iterations = uint16_fromregion(&sr);
- isc_region_consume(&sr, 2);
-
sprintf(buf, "%u ", hash);
RETERR(str_totext(buf, target));
+ /* Flags */
+ flags = uint8_fromregion(&sr);
+ isc_region_consume(&sr, 1);
sprintf(buf, "%u ", flags);
RETERR(str_totext(buf, target));
+ /* Iterations */
+ iterations = uint16_fromregion(&sr);
+ isc_region_consume(&sr, 2);
sprintf(buf, "%u ", iterations);
RETERR(str_totext(buf, target));
+ /* Salt */
j = uint8_fromregion(&sr);
isc_region_consume(&sr, 1);
INSIST(j <= sr.length);
@@ -177,10 +177,14 @@ totext_nsec3(ARGS_TOTEXT) {
sr.length = j;
RETERR(isc_hex_totext(&sr, 1, "", target));
sr.length = i - j;
- RETERR(str_totext(" ", target));
} else
- RETERR(str_totext("- ", target));
+ RETERR(str_totext("-", target));
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
+ RETERR(str_totext(" (", target));
+ RETERR(str_totext(tctx->linebreak, target));
+
+ /* Next hash */
j = uint8_fromregion(&sr);
isc_region_consume(&sr, 1);
INSIST(j <= sr.length);
@@ -190,7 +194,16 @@ totext_nsec3(ARGS_TOTEXT) {
RETERR(isc_base32hex_totext(&sr, 1, "", target));
sr.length = i - j;
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) == 0)
+ RETERR(str_totext(" ", target));
+
+ /* Types covered */
+ first = ISC_TRUE;
for (i = 0; i < sr.length; i += len) {
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) {
+ RETERR(str_totext(tctx->linebreak, target));
+ first = ISC_TRUE;
+ }
INSIST(i + 2 <= sr.length);
window = sr.base[i];
len = sr.base[i + 1];
@@ -205,7 +218,9 @@ totext_nsec3(ARGS_TOTEXT) {
if ((sr.base[i + j] & (0x80 >> k)) == 0)
continue;
t = window * 256 + j * 8 + k;
- RETERR(str_totext(" ", target));
+ if (!first)
+ RETERR(str_totext(" ", target));
+ first = ISC_FALSE;
if (dns_rdatatype_isknown(t)) {
RETERR(dns_rdatatype_totext(t, target));
} else {
@@ -216,6 +231,10 @@ totext_nsec3(ARGS_TOTEXT) {
}
}
}
+
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
+ RETERR(str_totext(" )", target));
+
return (ISC_R_SUCCESS);
}
diff --git a/contrib/bind9/lib/dns/rdata/generic/nsec3_50.h b/contrib/bind9/lib/dns/rdata/generic/nsec3_50.h
index 69a1141da007..5f2afb863b93 100644
--- a/contrib/bind9/lib/dns/rdata/generic/nsec3_50.h
+++ b/contrib/bind9/lib/dns/rdata/generic/nsec3_50.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -46,7 +46,16 @@ typedef struct dns_rdata_nsec3 {
#define DNS_NSEC3FLAG_OPTOUT 0x01U
/*%
- * Non-standard, NSEC3PARAM only.
+ * The following flags are used in the private-type record (implemented in
+ * lib/dns/private.c) which is used to store NSEC3PARAM data during the
+ * time when it is not legal to have an actual NSEC3PARAM record in the
+ * zone. They are defined here because the private-type record uses the
+ * same flags field for the OPTOUT flag above and for the private flags
+ * below. XXX: This should be considered for refactoring.
+ */
+
+/*%
+ * Non-standard, private type only.
*
* Create a corresponding NSEC3 chain.
* Once the NSEC3 chain is complete this flag will be removed to signal
@@ -55,13 +64,14 @@ typedef struct dns_rdata_nsec3 {
* This flag is automatically set when a NSEC3PARAM record is added to
* the zone via UPDATE.
*
- * NSEC3PARAM records with this flag set are supposed to be ignored by
- * RFC 5155 compliant nameservers.
+ * NSEC3PARAM records containing this flag should never be published,
+ * but if they are, they should be ignored by RFC 5155 compliant
+ * nameservers.
*/
#define DNS_NSEC3FLAG_CREATE 0x80U
/*%
- * Non-standard, NSEC3PARAM only.
+ * Non-standard, private type only.
*
* The corresponding NSEC3 set is to be removed once the NSEC chain
* has been generated.
@@ -69,24 +79,39 @@ typedef struct dns_rdata_nsec3 {
* This flag is automatically set when the last active NSEC3PARAM record
* is removed from the zone via UPDATE.
*
- * NSEC3PARAM records with this flag set are supposed to be ignored by
- * RFC 5155 compliant nameservers.
+ * NSEC3PARAM records containing this flag should never be published,
+ * but if they are, they should be ignored by RFC 5155 compliant
+ * nameservers.
*/
#define DNS_NSEC3FLAG_REMOVE 0x40U
/*%
- * Non-standard, NSEC3PARAM only.
+ * Non-standard, private type only.
*
- * Used to identify NSEC3PARAM records added in this UPDATE request.
+ * When set with the CREATE flag, a corresponding NSEC3 chain will be
+ * created when the zone becomes capable of supporting one (i.e., when it
+ * has a DNSKEY RRset containing at least one NSEC3-capable algorithm).
+ * Without this flag, NSEC3 chain creation would be attempted immediately,
+ * fail, and the private type record would be removed. With it, the NSEC3
+ * parameters are stored until they can be used. When the zone has the
+ * necessary prerequisites for NSEC3, then the INITIAL flag can be cleared,
+ * and the record will be cleaned up normally.
+ *
+ * NSEC3PARAM records containing this flag should never be published, but
+ * if they are, they should be ignored by RFC 5155 compliant nameservers.
*/
-#define DNS_NSEC3FLAG_UPDATE 0x20U
+#define DNS_NSEC3FLAG_INITIAL 0x20U
/*%
- * Non-standard, NSEC3PARAM only.
+ * Non-standard, private type only.
*
* Prevent the creation of a NSEC chain before the last NSEC3 chain
* is removed. This will normally only be set when the zone is
* transitioning from secure with NSEC3 chains to insecure.
+ *
+ * NSEC3PARAM records containing this flag should never be published,
+ * but if they are, they should be ignored by RFC 5155 compliant
+ * nameservers.
*/
#define DNS_NSEC3FLAG_NONSEC 0x10U
diff --git a/contrib/bind9/lib/dns/rdata/generic/opt_41.c b/contrib/bind9/lib/dns/rdata/generic/opt_41.c
index fa349f1f5808..4b51804317cc 100644
--- a/contrib/bind9/lib/dns/rdata/generic/opt_41.c
+++ b/contrib/bind9/lib/dns/rdata/generic/opt_41.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -76,8 +76,12 @@ totext_opt(ARGS_TOTEXT) {
RETERR(str_totext(tctx->linebreak, target));
or = r;
or.length = length;
- RETERR(isc_base64_totext(&or, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&or, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&or, tctx->width - 2,
+ tctx->linebreak,
+ target));
isc_region_consume(&r, length);
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
diff --git a/contrib/bind9/lib/dns/rdata/generic/rrsig_46.c b/contrib/bind9/lib/dns/rdata/generic/rrsig_46.c
index 82dfce69d31e..58a327c02ed7 100644
--- a/contrib/bind9/lib/dns/rdata/generic/rrsig_46.c
+++ b/contrib/bind9/lib/dns/rdata/generic/rrsig_46.c
@@ -181,7 +181,10 @@ totext_rrsig(ARGS_TOTEXT) {
isc_region_consume(&sr, 4);
sprintf(buf, "%lu", ttl);
RETERR(str_totext(buf, target));
- RETERR(str_totext(" ", target));
+
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
+ RETERR(str_totext(" (", target));
+ RETERR(str_totext(tctx->linebreak, target));
/*
* Sig exp.
@@ -189,10 +192,7 @@ totext_rrsig(ARGS_TOTEXT) {
exp = uint32_fromregion(&sr);
isc_region_consume(&sr, 4);
RETERR(dns_time32_totext(exp, target));
-
- if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
- RETERR(str_totext(" (", target));
- RETERR(str_totext(tctx->linebreak, target));
+ RETERR(str_totext(" ", target));
/*
* Time signed.
@@ -223,8 +223,11 @@ totext_rrsig(ARGS_TOTEXT) {
* Sig.
*/
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
diff --git a/contrib/bind9/lib/dns/rdata/generic/sig_24.c b/contrib/bind9/lib/dns/rdata/generic/sig_24.c
index 3cdd17a06b8a..803a864067f0 100644
--- a/contrib/bind9/lib/dns/rdata/generic/sig_24.c
+++ b/contrib/bind9/lib/dns/rdata/generic/sig_24.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -227,8 +227,11 @@ totext_sig(ARGS_TOTEXT) {
* Sig.
*/
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
diff --git a/contrib/bind9/lib/dns/rdata/generic/soa_6.c b/contrib/bind9/lib/dns/rdata/generic/soa_6.c
index a86761035751..ac0a38f7c19e 100644
--- a/contrib/bind9/lib/dns/rdata/generic/soa_6.c
+++ b/contrib/bind9/lib/dns/rdata/generic/soa_6.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -102,7 +102,7 @@ totext_soa(ARGS_TOTEXT) {
multiline = ISC_TF((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0);
if (multiline)
- comment = ISC_TF((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0);
+ comment = ISC_TF((tctx->flags & DNS_STYLEFLAG_RRCOMMENT) != 0);
else
comment = ISC_FALSE;
diff --git a/contrib/bind9/lib/dns/rdata/generic/sshfp_44.c b/contrib/bind9/lib/dns/rdata/generic/sshfp_44.c
index c94c75c791ee..d553cd40380d 100644
--- a/contrib/bind9/lib/dns/rdata/generic/sshfp_44.c
+++ b/contrib/bind9/lib/dns/rdata/generic/sshfp_44.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006, 2007, 2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -53,7 +53,6 @@ fromtext_sshfp(ARGS_FROMTEXT) {
if (token.value.as_ulong > 0xffU)
RETTOK(ISC_R_RANGE);
RETERR(uint8_tobuffer(token.value.as_ulong, target));
- type = (isc_uint16_t) token.value.as_ulong;
/*
* Digest.
@@ -96,7 +95,11 @@ totext_sshfp(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_hex_totext(&sr, tctx->width - 2, tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_hex_totext(&sr, 0, "", target));
+ else
+ RETERR(isc_hex_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
return (ISC_R_SUCCESS);
diff --git a/contrib/bind9/lib/dns/rdata/generic/tkey_249.c b/contrib/bind9/lib/dns/rdata/generic/tkey_249.c
index 3afee1308245..6f1ec0253881 100644
--- a/contrib/bind9/lib/dns/rdata/generic/tkey_249.c
+++ b/contrib/bind9/lib/dns/rdata/generic/tkey_249.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -201,8 +201,11 @@ totext_tkey(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&dr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&dr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&dr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" ) ", target));
else
@@ -227,8 +230,11 @@ totext_tkey(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" (", target));
RETERR(str_totext(tctx->linebreak, target));
- RETERR(isc_base64_totext(&dr, tctx->width - 2,
- tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&dr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&dr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext(" )", target));
}
diff --git a/contrib/bind9/lib/dns/rdata/generic/txt_16.c b/contrib/bind9/lib/dns/rdata/generic/txt_16.c
index c49864e670a8..e1bce6a0deb9 100644
--- a/contrib/bind9/lib/dns/rdata/generic/txt_16.c
+++ b/contrib/bind9/lib/dns/rdata/generic/txt_16.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -38,6 +38,13 @@ fromtext_txt(ARGS_FROMTEXT) {
UNUSED(callbacks);
strings = 0;
+ if ((options & DNS_RDATA_UNKNOWNESCAPE) != 0) {
+ isc_textregion_t r;
+ DE_CONST("#", r.base);
+ r.length = 1;
+ RETERR(txt_fromtext(&r, target));
+ strings++;
+ }
for (;;) {
RETERR(isc_lex_getmastertoken(lexer, &token,
isc_tokentype_qstring,
diff --git a/contrib/bind9/lib/dns/rdata/generic/uri_256.c b/contrib/bind9/lib/dns/rdata/generic/uri_256.c
new file mode 100644
index 000000000000..799eb694e666
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/uri_256.c
@@ -0,0 +1,331 @@
+/*
+ * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+#ifndef GENERIC_URI_256_C
+#define GENERIC_URI_256_C 1
+
+#define RRTYPE_URI_ATTRIBUTES (0)
+
+static inline isc_result_t
+fromtext_uri(ARGS_FROMTEXT) {
+ isc_token_t token;
+
+ REQUIRE(type == 256);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ /*
+ * Priority
+ */
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint16_tobuffer(token.value.as_ulong, target));
+
+ /*
+ * Weight
+ */
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint16_tobuffer(token.value.as_ulong, target));
+
+ /*
+ * Target URI
+ */
+ RETERR(isc_lex_getmastertoken(lexer, &token,
+ isc_tokentype_qstring, ISC_FALSE));
+ if (token.type != isc_tokentype_qstring)
+ RETTOK(DNS_R_SYNTAX);
+ RETTOK(multitxt_fromtext(&token.value.as_textregion, target));
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+totext_uri(ARGS_TOTEXT) {
+ isc_region_t region;
+ unsigned short priority, weight;
+ char buf[sizeof("65000 ")];
+
+ UNUSED(tctx);
+
+ REQUIRE(rdata->type == 256);
+ REQUIRE(rdata->length != 0);
+
+ dns_rdata_toregion(rdata, &region);
+
+ /*
+ * Priority
+ */
+ priority = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ sprintf(buf, "%u ", priority);
+ RETERR(str_totext(buf, target));
+
+ /*
+ * Weight
+ */
+ weight = uint16_fromregion(&region);
+ isc_region_consume(&region, 2);
+ sprintf(buf, "%u ", weight);
+ RETERR(str_totext(buf, target));
+
+ /*
+ * Target URI
+ */
+ RETERR(multitxt_totext(&region, target));
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+fromwire_uri(ARGS_FROMWIRE) {
+ isc_region_t region;
+
+ REQUIRE(type == 256);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+ UNUSED(options);
+
+ /*
+ * Priority, weight
+ */
+ isc_buffer_activeregion(source, &region);
+ if (region.length < 4)
+ return (ISC_R_UNEXPECTEDEND);
+ RETERR(mem_tobuffer(target, region.base, 4));
+ isc_buffer_forward(source, 4);
+
+ /*
+ * Target URI
+ */
+ RETERR(multitxt_fromwire(source, target));
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+towire_uri(ARGS_TOWIRE) {
+ isc_region_t region;
+
+ REQUIRE(rdata->type == 256);
+ REQUIRE(rdata->length != 0);
+
+ UNUSED(cctx);
+
+ dns_rdata_toregion(rdata, &region);
+ return (mem_tobuffer(target, region.base, region.length));
+}
+
+static inline int
+compare_uri(ARGS_COMPARE) {
+ isc_region_t r1;
+ isc_region_t r2;
+ int order;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 256);
+ REQUIRE(rdata1->length != 0);
+ REQUIRE(rdata2->length != 0);
+
+ dns_rdata_toregion(rdata1, &r1);
+ dns_rdata_toregion(rdata2, &r2);
+
+ /*
+ * Priority
+ */
+ order = memcmp(r1.base, r2.base, 2);
+ if (order != 0)
+ return (order < 0 ? -1 : 1);
+ isc_region_consume(&r1, 2);
+ isc_region_consume(&r2, 2);
+
+ /*
+ * Weight
+ */
+ order = memcmp(r1.base, r2.base, 2);
+ if (order != 0)
+ return (order < 0 ? -1 : 1);
+ isc_region_consume(&r1, 2);
+ isc_region_consume(&r2, 2);
+
+ return (isc_region_compare(&r1, &r2));
+}
+
+static inline isc_result_t
+fromstruct_uri(ARGS_FROMSTRUCT) {
+ dns_rdata_uri_t *uri = source;
+ isc_region_t region;
+ isc_uint8_t len;
+
+ REQUIRE(type == 256);
+ REQUIRE(source != NULL);
+ REQUIRE(uri->common.rdtype == type);
+ REQUIRE(uri->common.rdclass == rdclass);
+ REQUIRE(uri->target != NULL && uri->tgt_len != 0);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ /*
+ * Priority
+ */
+ RETERR(uint16_tobuffer(uri->priority, target));
+
+ /*
+ * Weight
+ */
+ RETERR(uint16_tobuffer(uri->weight, target));
+
+ /*
+ * Target URI
+ */
+ len = 255U;
+ region.base = uri->target;
+ region.length = uri->tgt_len;
+ while (region.length > 0) {
+ REQUIRE(len == 255U);
+ len = uint8_fromregion(&region);
+ isc_region_consume(&region, 1);
+ if (region.length < len)
+ return (ISC_R_UNEXPECTEDEND);
+ isc_region_consume(&region, len);
+ }
+
+ return (mem_tobuffer(target, uri->target, uri->tgt_len));
+}
+
+static inline isc_result_t
+tostruct_uri(ARGS_TOSTRUCT) {
+ dns_rdata_uri_t *uri = target;
+ isc_region_t sr;
+
+ REQUIRE(rdata->type == 256);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length != 0);
+
+ uri->common.rdclass = rdata->rdclass;
+ uri->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&uri->common, link);
+
+ dns_rdata_toregion(rdata, &sr);
+
+ /*
+ * Priority
+ */
+ if (sr.length < 2)
+ return (ISC_R_UNEXPECTEDEND);
+ uri->priority = uint16_fromregion(&sr);
+ isc_region_consume(&sr, 2);
+
+ /*
+ * Weight
+ */
+ if (sr.length < 2)
+ return (ISC_R_UNEXPECTEDEND);
+ uri->weight = uint16_fromregion(&sr);
+ isc_region_consume(&sr, 2);
+
+ /*
+ * Target URI
+ */
+ uri->tgt_len = sr.length;
+ uri->target = mem_maybedup(mctx, sr.base, sr.length);
+ if (uri->target == NULL)
+ return (ISC_R_NOMEMORY);
+
+ uri->mctx = mctx;
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_uri(ARGS_FREESTRUCT) {
+ dns_rdata_uri_t *uri = (dns_rdata_uri_t *) source;
+
+ REQUIRE(source != NULL);
+ REQUIRE(uri->common.rdtype == 256);
+
+ if (uri->mctx == NULL)
+ return;
+
+ if (uri->target != NULL)
+ isc_mem_free(uri->mctx, uri->target);
+ uri->mctx = NULL;
+}
+
+static inline isc_result_t
+additionaldata_uri(ARGS_ADDLDATA) {
+ REQUIRE(rdata->type == 256);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_uri(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 256);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_uri(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 256);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_uri(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 256);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_uri(ARGS_COMPARE) {
+ return (compare_uri(rdata1, rdata2));
+}
+
+#endif /* GENERIC_URI_256_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/uri_256.h b/contrib/bind9/lib/dns/rdata/generic/uri_256.h
new file mode 100644
index 000000000000..13c8fd238b89
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/uri_256.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef GENERIC_URI_256_H
+#define GENERIC_URI_256_H 1
+
+/* $Id$ */
+
+typedef struct dns_rdata_uri {
+ dns_rdatacommon_t common;
+ isc_mem_t * mctx;
+ isc_uint16_t priority;
+ isc_uint16_t weight;
+ unsigned char * target;
+ isc_uint16_t tgt_len;
+} dns_rdata_uri_t;
+
+#endif /* GENERIC_URI_256_H */
diff --git a/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c b/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c
index 1ec75ecacfb5..7575da0d1930 100644
--- a/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c
+++ b/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2006, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -52,8 +52,11 @@ totext_in_dhcid(ARGS_TOTEXT) {
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
RETERR(str_totext("( " /*)*/, target));
- RETERR(isc_base64_totext(&sr, tctx->width - 2, tctx->linebreak,
- target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_base64_totext(&sr, 60, "", target));
+ else
+ RETERR(isc_base64_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) {
RETERR(str_totext(/* ( */ " )", target));
if (rdata->length > 2) {
diff --git a/contrib/bind9/lib/dns/rdata/in_1/nsap_22.c b/contrib/bind9/lib/dns/rdata/in_1/nsap_22.c
index d762fe1d5688..66129fe0fdfa 100644
--- a/contrib/bind9/lib/dns/rdata/in_1/nsap_22.c
+++ b/contrib/bind9/lib/dns/rdata/in_1/nsap_22.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -53,7 +53,6 @@ fromtext_in_nsap(ARGS_FROMTEXT) {
RETTOK(DNS_R_SYNTAX);
isc_textregion_consume(sr, 2);
digits = 0;
- n = 0;
while (sr->length > 0) {
if (sr->base[0] == '.') {
isc_textregion_consume(sr, 1);
diff --git a/contrib/bind9/lib/dns/request.c b/contrib/bind9/lib/dns/request.c
index 58c0103f4c7e..1316e6994110 100644
--- a/contrib/bind9/lib/dns/request.c
+++ b/contrib/bind9/lib/dns/request.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -894,13 +894,15 @@ dns_request_createvia3(dns_requestmgr_t *requestmgr, dns_message_t *message,
REQUIRE(action != NULL);
REQUIRE(requestp != NULL && *requestp == NULL);
REQUIRE(timeout > 0);
- if (srcaddr != NULL)
- REQUIRE(isc_sockaddr_pf(srcaddr) == isc_sockaddr_pf(destaddr));
mctx = requestmgr->mctx;
req_log(ISC_LOG_DEBUG(3), "dns_request_createvia");
+ if (srcaddr != NULL &&
+ isc_sockaddr_pf(srcaddr) != isc_sockaddr_pf(destaddr))
+ return (ISC_R_FAMILYMISMATCH);
+
if (isblackholed(requestmgr->dispatchmgr, destaddr))
return (DNS_R_BLACKHOLED);
diff --git a/contrib/bind9/lib/dns/resolver.c b/contrib/bind9/lib/dns/resolver.c
index 503f1d23b92f..27d15b9329cd 100644
--- a/contrib/bind9/lib/dns/resolver.c
+++ b/contrib/bind9/lib/dns/resolver.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -21,12 +21,14 @@
#include <config.h>
+#include <isc/log.h>
#include <isc/platform.h>
#include <isc/print.h>
#include <isc/string.h>
#include <isc/random.h>
-#include <isc/task.h>
+#include <isc/socket.h>
#include <isc/stats.h>
+#include <isc/task.h>
#include <isc/timer.h>
#include <isc/util.h>
@@ -42,6 +44,8 @@
#include <dns/log.h>
#include <dns/message.h>
#include <dns/ncache.h>
+#include <dns/nsec.h>
+#include <dns/nsec3.h>
#include <dns/opcode.h>
#include <dns/peer.h>
#include <dns/rbt.h>
@@ -75,7 +79,7 @@
DNS_LOGCATEGORY_RESOLVER, \
DNS_LOGMODULE_RESOLVER, \
ISC_LOG_DEBUG(3), \
- "fctx %p(%s'): %s", fctx, fctx->info, (m))
+ "fctx %p(%s): %s", fctx, fctx->info, (m))
#define FCTXTRACE2(m1, m2) \
isc_log_write(dns_lctx, \
DNS_LOGCATEGORY_RESOLVER, \
@@ -130,6 +134,7 @@
* Maximum EDNS0 input packet size.
*/
#define RECV_BUFFER_SIZE 4096 /* XXXRTH Constant. */
+#define EDNSOPTS 2
/*%
* This defines the maximum number of timeouts we will permit before we
@@ -156,6 +161,7 @@ typedef struct query {
isc_buffer_t buffer;
isc_buffer_t *tsig;
dns_tsigkey_t *tsigkey;
+ isc_socketevent_t sendevent;
unsigned int options;
unsigned int attributes;
unsigned int sends;
@@ -389,11 +395,10 @@ struct dns_resolver {
isc_boolean_t frozen;
unsigned int options;
dns_dispatchmgr_t * dispatchmgr;
- dns_dispatch_t * dispatchv4;
+ dns_dispatchset_t * dispatches4;
isc_boolean_t exclusivev4;
- dns_dispatch_t * dispatchv6;
+ dns_dispatchset_t * dispatches6;
isc_boolean_t exclusivev6;
- unsigned int ndisps;
unsigned int nbuckets;
fctxbucket_t * buckets;
isc_uint32_t lame_ttl;
@@ -420,7 +425,6 @@ struct dns_resolver {
unsigned int activebuckets;
isc_boolean_t priming;
unsigned int spillat; /* clients-per-query */
- unsigned int nextdisp;
/* Bad cache. */
dns_badcache_t ** badcache;
@@ -468,12 +472,16 @@ static isc_result_t ncache_adderesult(dns_message_t *message,
dns_rdatatype_t covers,
isc_stdtime_t now, dns_ttl_t maxttl,
isc_boolean_t optout,
+ isc_boolean_t secure,
dns_rdataset_t *ardataset,
isc_result_t *eresultp);
static void validated(isc_task_t *task, isc_event_t *event);
static isc_boolean_t maybe_destroy(fetchctx_t *fctx, isc_boolean_t locked);
static void add_bad(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
isc_result_t reason, badnstype_t badtype);
+static inline isc_result_t findnoqname(fetchctx_t *fctx, dns_name_t *name,
+ dns_rdatatype_t type,
+ dns_name_t **noqname);
/*%
* Increment resolver-related statistics counters.
@@ -1210,7 +1218,8 @@ process_sendevent(resquery_t *query, isc_event_t *event) {
}
}
- isc_event_free(&event);
+ if (event->ev_type == ISC_SOCKEVENT_CONNECT)
+ isc_event_free(&event);
if (retry) {
/*
@@ -1270,67 +1279,15 @@ resquery_senddone(isc_task_t *task, isc_event_t *event) {
static inline isc_result_t
fctx_addopt(dns_message_t *message, unsigned int version,
- isc_uint16_t udpsize, isc_boolean_t request_nsid)
+ isc_uint16_t udpsize, dns_ednsopt_t *ednsopts, size_t count)
{
- dns_rdataset_t *rdataset;
- dns_rdatalist_t *rdatalist;
- dns_rdata_t *rdata;
+ dns_rdataset_t *rdataset = NULL;
isc_result_t result;
- rdatalist = NULL;
- result = dns_message_gettemprdatalist(message, &rdatalist);
- if (result != ISC_R_SUCCESS)
- return (result);
- rdata = NULL;
- result = dns_message_gettemprdata(message, &rdata);
- if (result != ISC_R_SUCCESS)
- return (result);
- rdataset = NULL;
- result = dns_message_gettemprdataset(message, &rdataset);
+ result = dns_message_buildopt(message, &rdataset, version, udpsize,
+ DNS_MESSAGEEXTFLAG_DO, ednsopts, count);
if (result != ISC_R_SUCCESS)
return (result);
- dns_rdataset_init(rdataset);
-
- rdatalist->type = dns_rdatatype_opt;
- rdatalist->covers = 0;
-
- /*
- * Set Maximum UDP buffer size.
- */
- rdatalist->rdclass = udpsize;
-
- /*
- * Set EXTENDED-RCODE and Z to 0, DO to 1.
- */
- rdatalist->ttl = (version << 16);
- rdatalist->ttl |= DNS_MESSAGEEXTFLAG_DO;
-
- /*
- * Set EDNS options if applicable
- */
- if (request_nsid) {
- /* Send empty NSID option (RFC5001) */
- unsigned char data[4];
- isc_buffer_t buf;
-
- isc_buffer_init(&buf, data, sizeof(data));
- isc_buffer_putuint16(&buf, DNS_OPT_NSID);
- isc_buffer_putuint16(&buf, 0);
- rdata->data = data;
- rdata->length = sizeof(data);
- } else {
- rdata->data = NULL;
- rdata->length = 0;
- }
-
- rdata->rdclass = rdatalist->rdclass;
- rdata->type = rdatalist->type;
- rdata->flags = 0;
-
- ISC_LIST_INIT(rdatalist->rdata);
- ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
- RUNTIME_CHECK(dns_rdatalist_tordataset(rdatalist, rdataset) == ISC_R_SUCCESS);
-
return (dns_message_setopt(message, rdataset));
}
@@ -1457,14 +1414,14 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
if (!have_addr) {
switch (pf) {
case PF_INET:
- result =
- dns_dispatch_getlocaladdress(res->dispatchv4,
- &addr);
+ result = dns_dispatch_getlocaladdress(
+ res->dispatches4->dispatches[0],
+ &addr);
break;
case PF_INET6:
- result =
- dns_dispatch_getlocaladdress(res->dispatchv6,
- &addr);
+ result = dns_dispatch_getlocaladdress(
+ res->dispatches6->dispatches[0],
+ &addr);
break;
default:
result = ISC_R_NOTIMPLEMENTED;
@@ -1520,13 +1477,15 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
} else {
switch (isc_sockaddr_pf(&addrinfo->sockaddr)) {
case PF_INET:
- dns_dispatch_attach(res->dispatchv4,
- &query->dispatch);
+ dns_dispatch_attach(
+ dns_resolver_dispatchv4(res),
+ &query->dispatch);
query->exclusivesocket = res->exclusivev4;
break;
case PF_INET6:
- dns_dispatch_attach(res->dispatchv6,
- &query->dispatch);
+ dns_dispatch_attach(
+ dns_resolver_dispatchv6(res),
+ &query->dispatch);
query->exclusivesocket = res->exclusivev6;
break;
default:
@@ -1710,6 +1669,8 @@ resquery_send(resquery_t *query) {
isc_boolean_t cleanup_cctx = ISC_FALSE;
isc_boolean_t secure_domain;
isc_boolean_t connecting = ISC_FALSE;
+ dns_ednsopt_t ednsopts[EDNSOPTS];
+ unsigned ednsopt = 0;
fctx = query->fctx;
QTRACE("send");
@@ -1892,8 +1853,15 @@ resquery_send(resquery_t *query) {
/* request NSID for current view or peer? */
if (peer != NULL)
(void) dns_peer_getrequestnsid(peer, &reqnsid);
+ if (reqnsid) {
+ INSIST(ednsopt < EDNSOPTS);
+ ednsopts[ednsopt].code = DNS_OPT_NSID;
+ ednsopts[ednsopt].length = 0;
+ ednsopts[ednsopt].value = NULL;
+ ednsopt++;
+ }
result = fctx_addopt(fctx->qmessage, version,
- udpsize, reqnsid);
+ udpsize, ednsopts, ednsopt);
if (reqnsid && result == ISC_R_SUCCESS) {
query->options |= DNS_FETCHOPT_WANTNSID;
} else if (result != ISC_R_SUCCESS) {
@@ -2010,8 +1978,11 @@ resquery_send(resquery_t *query) {
* XXXRTH Make sure we don't send to ourselves! We should probably
* prune out these addresses when we get them from the ADB.
*/
- result = isc_socket_sendto(socket, &r, task, resquery_senddone,
- query, address, NULL);
+ ISC_EVENT_INIT(&query->sendevent, sizeof(query->sendevent), 0, NULL,
+ ISC_SOCKEVENT_SENDDONE, resquery_senddone, query,
+ NULL, NULL, NULL);
+ result = isc_socket_sendto2(socket, &r, task, address, NULL,
+ &query->sendevent, 0);
if (result != ISC_R_SUCCESS) {
if (connecting) {
/*
@@ -2478,7 +2449,7 @@ findname(fetchctx_t *fctx, dns_name_t *name, in_port_t port,
isc_result_t result;
res = fctx->res;
- unshared = ISC_TF((fctx->options | DNS_FETCHOPT_UNSHARED) != 0);
+ unshared = ISC_TF((fctx->options & DNS_FETCHOPT_UNSHARED) != 0);
/*
* If this name is a subdomain of the query domain, tell
* the ADB to start looking using zone/hint data. This keeps us
@@ -2545,9 +2516,9 @@ findname(fetchctx_t *fctx, dns_name_t *name, in_port_t port,
*/
if (need_alternate != NULL &&
!*need_alternate && unshared &&
- ((res->dispatchv4 == NULL &&
+ ((res->dispatches4 == NULL &&
find->result_v6 != DNS_R_NXDOMAIN) ||
- (res->dispatchv6 == NULL &&
+ (res->dispatches6 == NULL &&
find->result_v4 != DNS_R_NXDOMAIN)))
*need_alternate = ISC_TRUE;
} else {
@@ -2562,9 +2533,9 @@ findname(fetchctx_t *fctx, dns_name_t *name, in_port_t port,
* an alternative server.
*/
if (need_alternate != NULL && !*need_alternate &&
- ((res->dispatchv4 == NULL &&
+ ((res->dispatches4 == NULL &&
find->result_v6 == DNS_R_NXRRSET) ||
- (res->dispatchv6 == NULL &&
+ (res->dispatches6 == NULL &&
find->result_v4 == DNS_R_NXRRSET)))
*need_alternate = ISC_TRUE;
dns_adb_destroyfind(&find);
@@ -2662,9 +2633,9 @@ fctx_getaddresses(fetchctx_t *fctx, isc_boolean_t badcache) {
while (sa != NULL) {
if ((isc_sockaddr_pf(sa) == AF_INET &&
- fctx->res->dispatchv4 == NULL) ||
+ fctx->res->dispatches4 == NULL) ||
(isc_sockaddr_pf(sa) == AF_INET6 &&
- fctx->res->dispatchv6 == NULL)) {
+ fctx->res->dispatches6 == NULL)) {
sa = ISC_LIST_NEXT(sa, link);
continue;
}
@@ -2712,9 +2683,9 @@ fctx_getaddresses(fetchctx_t *fctx, isc_boolean_t badcache) {
*/
stdoptions |= DNS_ADBFIND_AVOIDFETCHES;
}
- if (res->dispatchv4 != NULL)
+ if (res->dispatches4 != NULL)
stdoptions |= DNS_ADBFIND_INET;
- if (res->dispatchv6 != NULL)
+ if (res->dispatches6 != NULL)
stdoptions |= DNS_ADBFIND_INET6;
isc_stdtime_get(&now);
@@ -2747,7 +2718,7 @@ fctx_getaddresses(fetchctx_t *fctx, isc_boolean_t badcache) {
if (need_alternate) {
int family;
alternate_t *a;
- family = (res->dispatchv6 != NULL) ? AF_INET6 : AF_INET;
+ family = (res->dispatches6 != NULL) ? AF_INET6 : AF_INET;
for (a = ISC_LIST_HEAD(fctx->res->alternates);
a != NULL;
a = ISC_LIST_NEXT(a, link)) {
@@ -4227,7 +4198,7 @@ validated(isc_task_t *task, isc_event_t *event) {
result = ncache_adderesult(fctx->rmessage, fctx->cache, node,
covers, now, ttl, vevent->optout,
- ardataset, &eresult);
+ vevent->secure, ardataset, &eresult);
if (result != ISC_R_SUCCESS)
goto noanswer_response;
goto answer_response;
@@ -4237,7 +4208,6 @@ validated(isc_task_t *task, isc_event_t *event) {
FCTXTRACE("validation OK");
if (vevent->proofs[DNS_VALIDATOR_NOQNAMEPROOF] != NULL) {
-
result = dns_rdataset_addnoqname(vevent->rdataset,
vevent->proofs[DNS_VALIDATOR_NOQNAMEPROOF]);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
@@ -4248,6 +4218,18 @@ validated(isc_task_t *task, isc_event_t *event) {
vevent->proofs[DNS_VALIDATOR_CLOSESTENCLOSER]);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
}
+ } else if (vevent->rdataset->trust == dns_trust_answer &&
+ vevent->rdataset->type != dns_rdatatype_rrsig)
+ {
+ isc_result_t tresult;
+ dns_name_t *noqname = NULL;
+ tresult = findnoqname(fctx, vevent->name,
+ vevent->rdataset->type, &noqname);
+ if (tresult == ISC_R_SUCCESS && noqname != NULL) {
+ tresult = dns_rdataset_addnoqname(vevent->rdataset,
+ noqname);
+ RUNTIME_CHECK(tresult == ISC_R_SUCCESS);
+ }
}
/*
@@ -4367,6 +4349,14 @@ validated(isc_task_t *task, isc_event_t *event) {
fctx->attributes |= FCTX_ATTR_HAVEANSWER;
if (hevent != NULL) {
+ /*
+ * Negative results must be indicated in event->result.
+ */
+ if (dns_rdataset_isassociated(hevent->rdataset) &&
+ NEGATIVE(hevent->rdataset)) {
+ INSIST(eresult == DNS_R_NCACHENXDOMAIN ||
+ eresult == DNS_R_NCACHENXRRSET);
+ }
hevent->result = eresult;
RUNTIME_CHECK(dns_name_copy(vevent->name,
dns_fixedname_name(&hevent->foundname), NULL)
@@ -4388,6 +4378,149 @@ validated(isc_task_t *task, isc_event_t *event) {
isc_event_free(&event);
}
+static void
+fctx_log(void *arg, int level, const char *fmt, ...) {
+ char msgbuf[2048];
+ va_list args;
+ fetchctx_t *fctx = arg;
+
+ va_start(args, fmt);
+ vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
+ va_end(args);
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
+ DNS_LOGMODULE_RESOLVER, level,
+ "fctx %p(%s): %s", fctx, fctx->info, msgbuf);
+}
+
+static inline isc_result_t
+findnoqname(fetchctx_t *fctx, dns_name_t *name, dns_rdatatype_t type,
+ dns_name_t **noqnamep)
+{
+ dns_rdataset_t *nrdataset, *next, *sigrdataset;
+ dns_rdata_rrsig_t rrsig;
+ isc_result_t result;
+ unsigned int labels;
+ dns_section_t section;
+ dns_name_t *zonename;
+ dns_fixedname_t fzonename;
+ dns_name_t *closest;
+ dns_fixedname_t fclosest;
+ dns_name_t *nearest;
+ dns_fixedname_t fnearest;
+ dns_rdatatype_t found = dns_rdatatype_none;
+ dns_name_t *noqname = NULL;
+
+ FCTXTRACE("findnoqname");
+
+ REQUIRE(noqnamep != NULL && *noqnamep == NULL);
+
+ /*
+ * Find the SIG for this rdataset, if we have it.
+ */
+ for (sigrdataset = ISC_LIST_HEAD(name->list);
+ sigrdataset != NULL;
+ sigrdataset = ISC_LIST_NEXT(sigrdataset, link)) {
+ if (sigrdataset->type == dns_rdatatype_rrsig &&
+ sigrdataset->covers == type)
+ break;
+ }
+
+ if (sigrdataset == NULL)
+ return (ISC_R_NOTFOUND);
+
+ labels = dns_name_countlabels(name);
+
+ for (result = dns_rdataset_first(sigrdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(sigrdataset)) {
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_current(sigrdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &rrsig, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ /* Wildcard has rrsig.labels < labels - 1. */
+ if (rrsig.labels + 1U >= labels)
+ continue;
+ break;
+ }
+
+ if (result == ISC_R_NOMORE)
+ return (ISC_R_NOTFOUND);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ dns_fixedname_init(&fzonename);
+ zonename = dns_fixedname_name(&fzonename);
+ dns_fixedname_init(&fclosest);
+ closest = dns_fixedname_name(&fclosest);
+ dns_fixedname_init(&fnearest);
+ nearest = dns_fixedname_name(&fnearest);
+
+#define NXND(x) ((x) == ISC_R_SUCCESS)
+
+ section = DNS_SECTION_AUTHORITY;
+ for (result = dns_message_firstname(fctx->rmessage, section);
+ result == ISC_R_SUCCESS;
+ result = dns_message_nextname(fctx->rmessage, section)) {
+ dns_name_t *nsec = NULL;
+ dns_message_currentname(fctx->rmessage, section, &nsec);
+ for (nrdataset = ISC_LIST_HEAD(nsec->list);
+ nrdataset != NULL; nrdataset = next) {
+ isc_boolean_t data = ISC_FALSE, exists = ISC_FALSE;
+ isc_boolean_t optout = ISC_FALSE, unknown = ISC_FALSE;
+ isc_boolean_t setclosest = ISC_FALSE;
+ isc_boolean_t setnearest = ISC_FALSE;
+
+ next = ISC_LIST_NEXT(nrdataset, link);
+ if (nrdataset->type != dns_rdatatype_nsec &&
+ nrdataset->type != dns_rdatatype_nsec3)
+ continue;
+
+ if (nrdataset->type == dns_rdatatype_nsec &&
+ NXND(dns_nsec_noexistnodata(type, name, nsec,
+ nrdataset, &exists,
+ &data, NULL, fctx_log,
+ fctx)))
+ {
+ if (!exists) {
+ noqname = nsec;
+ found = dns_rdatatype_nsec;
+ }
+ }
+
+ if (nrdataset->type == dns_rdatatype_nsec3 &&
+ NXND(dns_nsec3_noexistnodata(type, name, nsec,
+ nrdataset, zonename,
+ &exists, &data,
+ &optout, &unknown,
+ &setclosest,
+ &setnearest,
+ closest, nearest,
+ fctx_log, fctx)))
+ {
+ if (!exists && setnearest) {
+ noqname = nsec;
+ found = dns_rdatatype_nsec3;
+ }
+ }
+ }
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+ if (noqname != NULL) {
+ for (sigrdataset = ISC_LIST_HEAD(noqname->list);
+ sigrdataset != NULL;
+ sigrdataset = ISC_LIST_NEXT(sigrdataset, link)) {
+ if (sigrdataset->type == dns_rdatatype_rrsig &&
+ sigrdataset->covers == found)
+ break;
+ }
+ if (sigrdataset != NULL)
+ *noqnamep = noqname;
+ }
+ return (result);
+}
+
static inline isc_result_t
cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
isc_stdtime_t now)
@@ -4521,6 +4654,17 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
rdataset->ttl = res->view->maxcachettl;
/*
+ * Find the SIG for this rdataset, if we have it.
+ */
+ for (sigrdataset = ISC_LIST_HEAD(name->list);
+ sigrdataset != NULL;
+ sigrdataset = ISC_LIST_NEXT(sigrdataset, link)) {
+ if (sigrdataset->type == dns_rdatatype_rrsig &&
+ sigrdataset->covers == rdataset->type)
+ break;
+ }
+
+ /*
* If this RRset is in a secure domain, is in bailiwick,
* and is not glue, attempt DNSSEC validation. (We do not
* attempt to validate glue or out-of-bailiwick data--even
@@ -4540,16 +4684,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
*/
if (rdataset->type == dns_rdatatype_rrsig)
continue;
- /*
- * Find the SIG for this rdataset, if we have it.
- */
- for (sigrdataset = ISC_LIST_HEAD(name->list);
- sigrdataset != NULL;
- sigrdataset = ISC_LIST_NEXT(sigrdataset, link)) {
- if (sigrdataset->type == dns_rdatatype_rrsig &&
- sigrdataset->covers == rdataset->type)
- break;
- }
+
if (sigrdataset == NULL) {
if (!ANSWER(rdataset) && need_validation) {
/*
@@ -4583,6 +4718,22 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
if (sigrdataset != NULL)
sigrdataset->trust = trust;
if (!need_validation || !ANSWER(rdataset)) {
+ if (ANSWER(rdataset) &&
+ rdataset->type != dns_rdatatype_rrsig) {
+ isc_result_t tresult;
+ dns_name_t *noqname = NULL;
+ tresult = findnoqname(fctx, name,
+ rdataset->type,
+ &noqname);
+ if (tresult == ISC_R_SUCCESS &&
+ noqname != NULL) {
+ tresult =
+ dns_rdataset_addnoqname(
+ rdataset, noqname);
+ RUNTIME_CHECK(tresult ==
+ ISC_R_SUCCESS);
+ }
+ }
addedrdataset = ardataset;
result = dns_db_addrdataset(fctx->cache, node,
NULL, now, rdataset,
@@ -4710,6 +4861,21 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
options = DNS_DBADD_FORCE;
} else
options = 0;
+
+ if (ANSWER(rdataset) &&
+ rdataset->type != dns_rdatatype_rrsig) {
+ isc_result_t tresult;
+ dns_name_t *noqname = NULL;
+ tresult = findnoqname(fctx, name,
+ rdataset->type, &noqname);
+ if (tresult == ISC_R_SUCCESS &&
+ noqname != NULL) {
+ tresult = dns_rdataset_addnoqname(
+ rdataset, noqname);
+ RUNTIME_CHECK(tresult == ISC_R_SUCCESS);
+ }
+ }
+
/*
* Now we can add the rdataset.
*/
@@ -4718,6 +4884,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
rdataset,
options,
addedrdataset);
+
if (result == DNS_R_UNCHANGED) {
if (ANSWER(rdataset) &&
ardataset != NULL &&
@@ -4813,8 +4980,8 @@ cache_message(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, isc_stdtime_t now)
static isc_result_t
ncache_adderesult(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
dns_rdatatype_t covers, isc_stdtime_t now, dns_ttl_t maxttl,
- isc_boolean_t optout, dns_rdataset_t *ardataset,
- isc_result_t *eresultp)
+ isc_boolean_t optout, isc_boolean_t secure,
+ dns_rdataset_t *ardataset, isc_result_t *eresultp)
{
isc_result_t result;
dns_rdataset_t rdataset;
@@ -4823,8 +4990,12 @@ ncache_adderesult(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
dns_rdataset_init(&rdataset);
ardataset = &rdataset;
}
- result = dns_ncache_addoptout(message, cache, node, covers, now,
- maxttl, optout, ardataset);
+ if (secure)
+ result = dns_ncache_addoptout(message, cache, node, covers,
+ now, maxttl, optout, ardataset);
+ else
+ result = dns_ncache_add(message, cache, node, covers, now,
+ maxttl, ardataset);
if (result == DNS_R_UNCHANGED || result == ISC_R_SUCCESS) {
/*
* If the cache now contains a negative entry and we
@@ -4991,7 +5162,7 @@ ncache_message(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
result = ncache_adderesult(fctx->rmessage, fctx->cache, node,
covers, now, ttl, ISC_FALSE,
- ardataset, &eresult);
+ ISC_FALSE, ardataset, &eresult);
if (result != ISC_R_SUCCESS)
goto unlock;
@@ -5387,10 +5558,10 @@ noanswer_response(fetchctx_t *fctx, dns_name_t *oqname,
{
isc_result_t result;
dns_message_t *message;
- dns_name_t *name, *qname, *ns_name, *soa_name, *ds_name;
+ dns_name_t *name, *qname, *ns_name, *soa_name, *ds_name, *save_name;
dns_rdataset_t *rdataset, *ns_rdataset;
isc_boolean_t aa, negative_response;
- dns_rdatatype_t type;
+ dns_rdatatype_t type, save_type;
dns_section_t section;
FCTXTRACE("noanswer_response");
@@ -5457,6 +5628,8 @@ noanswer_response(fetchctx_t *fctx, dns_name_t *oqname,
ns_rdataset = NULL;
soa_name = NULL;
ds_name = NULL;
+ save_name = NULL;
+ save_type = dns_rdatatype_none;
result = dns_message_firstname(message, section);
while (result == ISC_R_SUCCESS) {
name = NULL;
@@ -5655,6 +5828,9 @@ noanswer_response(fetchctx_t *fctx, dns_name_t *oqname,
dns_trust_additional;
}
}
+ } else {
+ save_name = name;
+ save_type = ISC_LIST_HEAD(name->list)->type;
}
result = dns_message_nextname(message, section);
if (result == ISC_R_NOMORE)
@@ -5690,7 +5866,27 @@ noanswer_response(fetchctx_t *fctx, dns_name_t *oqname,
/*
* The responder is insane.
*/
- log_formerr(fctx, "invalid response");
+ if (save_name == NULL) {
+ log_formerr(fctx, "invalid response");
+ return (DNS_R_FORMERR);
+ }
+ if (!dns_name_issubdomain(save_name, &fctx->domain)) {
+ char nbuf[DNS_NAME_FORMATSIZE];
+ char dbuf[DNS_NAME_FORMATSIZE];
+ char tbuf[DNS_RDATATYPE_FORMATSIZE];
+
+ dns_rdatatype_format(save_type, tbuf,
+ sizeof(tbuf));
+ dns_name_format(save_name, nbuf, sizeof(nbuf));
+ dns_name_format(&fctx->domain, dbuf,
+ sizeof(dbuf));
+
+ log_formerr(fctx, "Name %s (%s) not subdomain"
+ " of zone %s -- invalid response",
+ nbuf, tbuf, dbuf);
+ } else {
+ log_formerr(fctx, "invalid response");
+ }
return (DNS_R_FORMERR);
}
}
@@ -5899,12 +6095,12 @@ answer_response(fetchctx_t *fctx) {
* but we found a CNAME.
*
* Getting a CNAME response for some
- * query types is an error.
+ * query types is an error, see
+ * RFC 4035, Section 2.5.
*/
if (type == dns_rdatatype_rrsig ||
- type == dns_rdatatype_dnskey ||
- type == dns_rdatatype_nsec ||
- type == dns_rdatatype_nsec3) {
+ type == dns_rdatatype_key ||
+ type == dns_rdatatype_nsec) {
char buf[DNS_RDATATYPE_FORMATSIZE];
dns_rdatatype_format(fctx->type,
buf, sizeof(buf));
@@ -6449,44 +6645,24 @@ checknames(dns_message_t *message) {
/*
* Log server NSID at log level 'level'
*/
-static isc_result_t
-log_nsid(dns_rdataset_t *opt, resquery_t *query, int level, isc_mem_t *mctx)
+static void
+log_nsid(isc_buffer_t *opt, size_t nsid_len, resquery_t *query,
+ int level, isc_mem_t *mctx)
{
static const char hex[17] = "0123456789abcdef";
char addrbuf[ISC_SOCKADDR_FORMATSIZE];
- isc_uint16_t optcode, nsid_len, buflen, i;
- isc_result_t result;
- isc_buffer_t nsidbuf;
- dns_rdata_t rdata;
+ isc_uint16_t buflen, i;
unsigned char *p, *buf, *nsid;
- /* Extract rdata from OPT rdataset */
- result = dns_rdataset_first(opt);
- if (result != ISC_R_SUCCESS)
- return (ISC_R_FAILURE);
-
- dns_rdata_init(&rdata);
- dns_rdataset_current(opt, &rdata);
- if (rdata.length < 4)
- return (ISC_R_FAILURE);
-
- /* Check for NSID */
- isc_buffer_init(&nsidbuf, rdata.data, rdata.length);
- isc_buffer_add(&nsidbuf, rdata.length);
- optcode = isc_buffer_getuint16(&nsidbuf);
- nsid_len = isc_buffer_getuint16(&nsidbuf);
- if (optcode != DNS_OPT_NSID || nsid_len == 0)
- return (ISC_R_FAILURE);
-
/* Allocate buffer for storing hex version of the NSID */
buflen = nsid_len * 2 + 1;
buf = isc_mem_get(mctx, buflen);
if (buf == NULL)
- return (ISC_R_NOSPACE);
+ return;
/* Convert to hex */
p = buf;
- nsid = rdata.data + 4;
+ nsid = isc_buffer_current(opt);
for (i = 0; i < nsid_len; i++) {
*p++ = hex[(nsid[0] >> 4) & 0xf];
*p++ = hex[nsid[0] & 0xf];
@@ -6502,7 +6678,7 @@ log_nsid(dns_rdataset_t *opt, resquery_t *query, int level, isc_mem_t *mctx)
/* Clean up */
isc_mem_put(mctx, buf, buflen);
- return (ISC_R_SUCCESS);
+ return;
}
static void
@@ -6576,6 +6752,41 @@ betterreferral(fetchctx_t *fctx) {
}
static void
+process_opt(resquery_t *query, dns_rdataset_t *opt) {
+ dns_rdata_t rdata;
+ isc_buffer_t optbuf;
+ isc_result_t result;
+ isc_uint16_t optcode;
+ isc_uint16_t optlen;
+
+ result = dns_rdataset_first(opt);
+ if (result == ISC_R_SUCCESS) {
+ dns_rdata_init(&rdata);
+ dns_rdataset_current(opt, &rdata);
+ isc_buffer_init(&optbuf, rdata.data, rdata.length);
+ isc_buffer_add(&optbuf, rdata.length);
+ while (isc_buffer_remaininglength(&optbuf) >= 4) {
+ optcode = isc_buffer_getuint16(&optbuf);
+ optlen = isc_buffer_getuint16(&optbuf);
+ INSIST(optlen <= isc_buffer_remaininglength(&optbuf));
+ switch (optcode) {
+ case DNS_OPT_NSID:
+ if (query->options & DNS_FETCHOPT_WANTNSID)
+ log_nsid(&optbuf, optlen, query,
+ ISC_LOG_INFO,
+ query->fctx->res->mctx);
+ isc_buffer_forward(&optbuf, optlen);
+ break;
+ default:
+ isc_buffer_forward(&optbuf, optlen);
+ break;
+ }
+ }
+ INSIST(isc_buffer_remaininglength(&optbuf) == 0U);
+ }
+}
+
+static void
resquery_response(isc_task_t *task, isc_event_t *event) {
isc_result_t result = ISC_R_SUCCESS;
resquery_t *query = event->ev_arg;
@@ -6650,13 +6861,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
*/
options |= DNS_FETCHOPT_NOEDNS0;
resend = ISC_TRUE;
- /*
- * Remember that they don't like EDNS0.
- */
- dns_adb_changeflags(fctx->adb,
- query->addrinfo,
- DNS_FETCHOPT_NOEDNS0,
- DNS_FETCHOPT_NOEDNS0);
+ add_bad_edns(fctx, &query->addrinfo->sockaddr);
} else {
/*
* There's no hope for this query.
@@ -6723,14 +6928,8 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
*/
options |= DNS_FETCHOPT_NOEDNS0;
resend = ISC_TRUE;
- /*
- * Remember that they don't like EDNS0.
- */
- dns_adb_changeflags(
- fctx->adb,
- query->addrinfo,
- DNS_FETCHOPT_NOEDNS0,
- DNS_FETCHOPT_NOEDNS0);
+ add_bad_edns(fctx,
+ &query->addrinfo->sockaddr);
inc_stats(fctx->res,
dns_resstatscounter_edns0fail);
} else {
@@ -6754,13 +6953,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
*/
options |= DNS_FETCHOPT_NOEDNS0;
resend = ISC_TRUE;
- /*
- * Remember that they don't like EDNS0.
- */
- dns_adb_changeflags(fctx->adb,
- query->addrinfo,
- DNS_FETCHOPT_NOEDNS0,
- DNS_FETCHOPT_NOEDNS0);
+ add_bad_edns(fctx, &query->addrinfo->sockaddr);
inc_stats(fctx->res,
dns_resstatscounter_edns0fail);
} else {
@@ -6783,12 +6976,11 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
log_packet(message, ISC_LOG_DEBUG(10), fctx->res->mctx);
/*
- * Did we request NSID? If so, and if the response contains
- * NSID data, log it at INFO level.
+ * Process receive opt record.
*/
opt = dns_message_getopt(message);
- if (opt != NULL && (query->options & DNS_FETCHOPT_WANTNSID) != 0)
- log_nsid(opt, query, ISC_LOG_INFO, fctx->res->mctx);
+ if (opt != NULL)
+ process_opt(query, opt);
/*
* If the message is signed, check the signature. If not, this
@@ -7381,10 +7573,10 @@ destroy(dns_resolver_t *res) {
}
isc_mem_put(res->mctx, res->buckets,
res->nbuckets * sizeof(fctxbucket_t));
- if (res->dispatchv4 != NULL)
- dns_dispatch_detach(&res->dispatchv4);
- if (res->dispatchv6 != NULL)
- dns_dispatch_detach(&res->dispatchv6);
+ if (res->dispatches4 != NULL)
+ dns_dispatchset_destroy(&res->dispatches4);
+ if (res->dispatches6 != NULL)
+ dns_dispatchset_destroy(&res->dispatches6);
while ((a = ISC_LIST_HEAD(res->alternates)) != NULL) {
ISC_LIST_UNLINK(res->alternates, a, link);
if (!a->isaddress)
@@ -7474,7 +7666,8 @@ spillattimer_countdown(isc_task_t *task, isc_event_t *event) {
isc_result_t
dns_resolver_create(dns_view_t *view,
- isc_taskmgr_t *taskmgr, unsigned int ntasks,
+ isc_taskmgr_t *taskmgr,
+ unsigned int ntasks, unsigned int ndisp,
isc_socketmgr_t *socketmgr,
isc_timermgr_t *timermgr,
unsigned int options,
@@ -7496,6 +7689,7 @@ dns_resolver_create(dns_view_t *view,
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(ntasks > 0);
+ REQUIRE(ndisp > 0);
REQUIRE(resp != NULL && *resp == NULL);
REQUIRE(dispatchmgr != NULL);
REQUIRE(dispatchv4 != NULL || dispatchv6 != NULL);
@@ -7526,8 +7720,6 @@ dns_resolver_create(dns_view_t *view,
res->spillattimer = NULL;
res->zero_no_soa_ttl = ISC_FALSE;
res->query_timeout = DEFAULT_QUERY_TIMEOUT;
- res->ndisps = 0;
- res->nextdisp = 0; /* meaningless at this point, but init it */
res->nbuckets = ntasks;
res->activebuckets = ntasks;
res->buckets = isc_mem_get(view->mctx,
@@ -7570,17 +7762,19 @@ dns_resolver_create(dns_view_t *view,
buckets_created++;
}
- res->dispatchv4 = NULL;
+ res->dispatches4 = NULL;
if (dispatchv4 != NULL) {
- dns_dispatch_attach(dispatchv4, &res->dispatchv4);
+ dns_dispatchset_create(view->mctx, socketmgr, taskmgr,
+ dispatchv4, &res->dispatches4, ndisp);
dispattr = dns_dispatch_getattributes(dispatchv4);
res->exclusivev4 =
ISC_TF((dispattr & DNS_DISPATCHATTR_EXCLUSIVE) != 0);
}
- res->dispatchv6 = NULL;
+ res->dispatches6 = NULL;
if (dispatchv6 != NULL) {
- dns_dispatch_attach(dispatchv6, &res->dispatchv6);
+ dns_dispatchset_create(view->mctx, socketmgr, taskmgr,
+ dispatchv6, &res->dispatches6, ndisp);
dispattr = dns_dispatch_getattributes(dispatchv6);
res->exclusivev6 =
ISC_TF((dispattr & DNS_DISPATCHATTR_EXCLUSIVE) != 0);
@@ -7656,10 +7850,10 @@ dns_resolver_create(dns_view_t *view,
DESTROYLOCK(&res->lock);
cleanup_dispatches:
- if (res->dispatchv6 != NULL)
- dns_dispatch_detach(&res->dispatchv6);
- if (res->dispatchv4 != NULL)
- dns_dispatch_detach(&res->dispatchv4);
+ if (res->dispatches6 != NULL)
+ dns_dispatchset_destroy(&res->dispatches6);
+ if (res->dispatches4 != NULL)
+ dns_dispatchset_destroy(&res->dispatches4);
cleanup_buckets:
for (i = 0; i < buckets_created; i++) {
@@ -7848,7 +8042,6 @@ void
dns_resolver_shutdown(dns_resolver_t *res) {
unsigned int i;
fetchctx_t *fctx;
- isc_socket_t *sock;
isc_result_t result;
REQUIRE(VALID_RESOLVER(res));
@@ -7867,15 +8060,13 @@ dns_resolver_shutdown(dns_resolver_t *res) {
fctx != NULL;
fctx = ISC_LIST_NEXT(fctx, link))
fctx_shutdown(fctx);
- if (res->dispatchv4 != NULL && !res->exclusivev4) {
- sock = dns_dispatch_getsocket(res->dispatchv4);
- isc_socket_cancel(sock, res->buckets[i].task,
- ISC_SOCKCANCEL_ALL);
+ if (res->dispatches4 != NULL && !res->exclusivev4) {
+ dns_dispatchset_cancelall(res->dispatches4,
+ res->buckets[i].task);
}
- if (res->dispatchv6 != NULL && !res->exclusivev6) {
- sock = dns_dispatch_getsocket(res->dispatchv6);
- isc_socket_cancel(sock, res->buckets[i].task,
- ISC_SOCKCANCEL_ALL);
+ if (res->dispatches6 != NULL && !res->exclusivev6) {
+ dns_dispatchset_cancelall(res->dispatches6,
+ res->buckets[i].task);
}
res->buckets[i].exiting = ISC_TRUE;
if (ISC_LIST_EMPTY(res->buckets[i].fctxs)) {
@@ -8258,13 +8449,13 @@ dns_resolver_dispatchmgr(dns_resolver_t *resolver) {
dns_dispatch_t *
dns_resolver_dispatchv4(dns_resolver_t *resolver) {
REQUIRE(VALID_RESOLVER(resolver));
- return (resolver->dispatchv4);
+ return (dns_dispatchset_get(resolver->dispatches4));
}
dns_dispatch_t *
dns_resolver_dispatchv6(dns_resolver_t *resolver) {
REQUIRE(VALID_RESOLVER(resolver));
- return (resolver->dispatchv6);
+ return (dns_dispatchset_get(resolver->dispatches6));
}
isc_socketmgr_t *
diff --git a/contrib/bind9/lib/dns/result.c b/contrib/bind9/lib/dns/result.c
index 0546d0f1eb0a..39879532d485 100644
--- a/contrib/bind9/lib/dns/result.c
+++ b/contrib/bind9/lib/dns/result.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -160,7 +160,9 @@ static const char *text[DNS_R_NRESULTS] = {
"not master", /*%< 105 DNS_R_NOTMASTER */
"broken trust chain", /*%< 106 DNS_R_BROKENCHAIN */
- "expired", /*%< 106 DNS_R_EXPIRED */
+ "expired", /*%< 107 DNS_R_EXPIRED */
+ "not dynamic", /*%< 108 DNS_R_NOTDYNAMIC */
+ "bad EUI" /*%< 109 DNS_R_BADEUI */
};
static const char *rcode_text[DNS_R_NRCODERESULTS] = {
@@ -264,6 +266,7 @@ dns_result_torcode(isc_result_t result) {
case DNS_R_TOOMANYHOPS:
case DNS_R_TSIGERRORSET:
case DNS_R_UNKNOWN:
+ case DNS_R_NAMETOOLONG:
rcode = dns_rcode_formerr;
break;
case DNS_R_DISALLOWED:
diff --git a/contrib/bind9/lib/dns/rootns.c b/contrib/bind9/lib/dns/rootns.c
index 9b25369daad5..3502022c2ae1 100644
--- a/contrib/bind9/lib/dns/rootns.c
+++ b/contrib/bind9/lib/dns/rootns.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2008, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008, 2010, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -63,7 +63,8 @@ static char root_ns[] =
"A.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:BA3E::2:30\n"
"B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201\n"
"C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12\n"
-"D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90\n"
+"D.ROOT-SERVERS.NET. 3600000 IN A 199.7.91.13\n"
+"D.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2d::d\n"
"E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10\n"
"F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241\n"
"F.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2F::F\n"
diff --git a/contrib/bind9/lib/dns/rpz.c b/contrib/bind9/lib/dns/rpz.c
index 78658590ae48..2d689e7ba128 100644
--- a/contrib/bind9/lib/dns/rpz.c
+++ b/contrib/bind9/lib/dns/rpz.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2011-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
/* $Id$ */
+
/*! \file */
#include <config.h>
@@ -123,8 +124,6 @@ struct dns_rpz_cidr {
dns_name_t nsdname_name; /* RPZ_NSDNAME_ZONE.origin */
};
-static isc_boolean_t have_rpz_zones = ISC_FALSE;
-
const char *
dns_rpz_type2str(dns_rpz_type_t type) {
switch (type) {
@@ -191,6 +190,7 @@ dns_rpz_policy2str(dns_rpz_policy_t policy) {
break;
default:
str = "";
+ POST(str);
INSIST(0);
}
return (str);
@@ -266,21 +266,6 @@ dns_rpz_view_destroy(dns_view_t *view) {
}
/*
- * Note that we have at least one response policy zone.
- * It would be better for something to tell the rbtdb code that the
- * zone is in at least one view's list of policy zones.
- */
-void
-dns_rpz_set_need(isc_boolean_t need) {
- have_rpz_zones = need;
-}
-
-isc_boolean_t
-dns_rpz_needed(void) {
- return (have_rpz_zones);
-}
-
-/*
* Start a new radix tree for a response policy zone.
*/
isc_result_t
@@ -292,12 +277,6 @@ dns_rpz_new_cidr(isc_mem_t *mctx, dns_name_t *origin,
REQUIRE(rbtdb_cidr != NULL && *rbtdb_cidr == NULL);
- /*
- * Only if there is at least one response policy zone.
- */
- if (!have_rpz_zones)
- return (ISC_R_SUCCESS);
-
cidr = isc_mem_get(mctx, sizeof(*cidr));
if (cidr == NULL)
return (ISC_R_NOMEMORY);
@@ -339,7 +318,7 @@ dns_rpz_new_cidr(isc_mem_t *mctx, dns_name_t *origin,
* See if a policy zone has IP, NSIP, or NSDNAME rules or records.
*/
void
-dns_rpz_enabled(dns_rpz_cidr_t *cidr, dns_rpz_st_t *st) {
+dns_rpz_enabled_get(dns_rpz_cidr_t *cidr, dns_rpz_st_t *st) {
if (cidr == NULL)
return;
if (cidr->root != NULL &&
@@ -432,6 +411,9 @@ static void
badname(int level, dns_name_t *name, const char *str1, const char *str2) {
char printname[DNS_NAME_FORMATSIZE];
+ /*
+ * bin/tests/system/rpz/tests.sh looks for "invalid rpz".
+ */
if (level < DNS_RPZ_DEBUG_QUIET
&& isc_log_wouldlog(dns_lctx, level)) {
dns_name_format(name, printname, sizeof(printname));
@@ -508,7 +490,7 @@ ip2name(dns_rpz_cidr_t *cidr, const dns_rpz_cidr_key_t *tgt_ip,
while (i < DNS_RPZ_CIDR_WORDS * 2 && w[i] == 0)
++i;
}
- if (len > (int)sizeof(str))
+ if (len >= (int)sizeof(str))
return (ISC_R_FAILURE);
}
}
@@ -956,8 +938,7 @@ dns_rpz_cidr_addip(dns_rpz_cidr_t *cidr, dns_name_t *name) {
dns_rpz_cidr_bits_t tgt_prefix;
dns_rpz_type_t type;
- if (cidr == NULL)
- return;
+ REQUIRE(cidr != NULL);
/*
* No worries if the new name is not an IP address.
@@ -985,6 +966,9 @@ dns_rpz_cidr_addip(dns_rpz_cidr_t *cidr, dns_name_t *name) {
{
char printname[DNS_NAME_FORMATSIZE];
+ /*
+ * bin/tests/system/rpz/tests.sh looks for "rpz.*failed".
+ */
dns_name_format(name, printname, sizeof(printname));
isc_log_write(dns_lctx, DNS_LOGCATEGORY_RPZ,
DNS_LOGMODULE_RBTDB, DNS_RPZ_ERROR_LEVEL,
diff --git a/contrib/bind9/lib/dns/sdb.c b/contrib/bind9/lib/dns/sdb.c
index 8092c5a551cb..191fda219f46 100644
--- a/contrib/bind9/lib/dns/sdb.c
+++ b/contrib/bind9/lib/dns/sdb.c
@@ -382,7 +382,7 @@ dns_sdb_putrr(dns_sdblookup_t *lookup, const char *type, dns_ttl_t ttl,
datalen = strlen(data);
size = initial_size(datalen);
do {
- isc_buffer_init(&b, data, datalen);
+ isc_buffer_constinit(&b, data, datalen);
isc_buffer_add(&b, datalen);
result = isc_lex_openbuffer(lex, &b);
if (result != ISC_R_SUCCESS)
@@ -448,7 +448,7 @@ getnode(dns_sdballnodes_t *allnodes, const char *name, dns_sdbnode_t **nodep) {
origin = &sdb->common.origin;
else
origin = dns_rootname;
- isc_buffer_init(&b, name, strlen(name));
+ isc_buffer_constinit(&b, name, strlen(name));
isc_buffer_add(&b, strlen(name));
result = dns_name_fromtext(newname, &b, origin, 0, NULL);
@@ -728,8 +728,9 @@ destroynode(dns_sdbnode_t *node) {
}
static isc_result_t
-findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
- dns_dbnode_t **nodep)
+findnodeext(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
+ dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
+ dns_dbnode_t **nodep)
{
dns_sdb_t *sdb = (dns_sdb_t *)db;
dns_sdbnode_t *node = NULL;
@@ -786,10 +787,11 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
MAYBE_LOCK(sdb);
if (imp->methods->lookup2 != NULL)
result = imp->methods->lookup2(&sdb->common.origin, name,
- sdb->dbdata, node);
+ sdb->dbdata, node, methods,
+ clientinfo);
else
result = imp->methods->lookup(sdb->zone, namestr, sdb->dbdata,
- node);
+ node, methods, clientinfo);
MAYBE_UNLOCK(sdb);
if (result != ISC_R_SUCCESS &&
!(result == ISC_R_NOTFOUND &&
@@ -814,10 +816,11 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
}
static isc_result_t
-find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
- dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
- dns_dbnode_t **nodep, dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+findext(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
dns_sdb_t *sdb = (dns_sdb_t *)db;
dns_dbnode_t *node = NULL;
@@ -857,7 +860,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
* Look up the next label.
*/
dns_name_getlabelsequence(name, nlabels - i, i, xname);
- result = findnode(db, xname, ISC_FALSE, &node);
+ result = findnodeext(db, xname, ISC_FALSE, methods,
+ clientinfo, &node);
if (result == ISC_R_NOTFOUND) {
/*
* No data at zone apex?
@@ -1264,8 +1268,8 @@ static dns_dbmethods_t sdb_methods = {
newversion,
attachversion,
closeversion,
- findnode,
- find,
+ NULL,
+ NULL,
findzonecut,
attachnode,
detachnode,
@@ -1282,17 +1286,19 @@ static dns_dbmethods_t sdb_methods = {
ispersistent,
overmem,
settask,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ NULL, /* getoriginnode */
+ NULL, /* transfernode */
+ NULL, /* getnsec3parameters */
+ NULL, /* findnsec3node */
+ NULL, /* setsigningtime */
+ NULL, /* getsigningtime */
+ NULL, /* resigned */
+ NULL, /* isdnssec */
+ NULL, /* getrrsetstats */
+ NULL, /* rpz_enabled */
+ NULL, /* rpz_findips */
+ findnodeext,
+ findext
};
static isc_result_t
diff --git a/contrib/bind9/lib/dns/sdlz.c b/contrib/bind9/lib/dns/sdlz.c
index 870e981a29ad..9d4e615802fa 100644
--- a/contrib/bind9/lib/dns/sdlz.c
+++ b/contrib/bind9/lib/dns/sdlz.c
@@ -538,8 +538,9 @@ destroynode(dns_sdlznode_t *node) {
}
static isc_result_t
-findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
- dns_dbnode_t **nodep)
+findnodeext(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
+ dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
+ dns_dbnode_t **nodep)
{
dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db;
dns_sdlznode_t *node = NULL;
@@ -598,17 +599,18 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
/* try to lookup the host (namestr) */
result = sdlz->dlzimp->methods->lookup(zonestr, namestr,
sdlz->dlzimp->driverarg,
- sdlz->dbdata, node);
+ sdlz->dbdata, node,
+ methods, clientinfo);
/*
* if the host (namestr) was not found, try to lookup a
* "wildcard" host.
*/
- if (result != ISC_R_SUCCESS && !create) {
+ if (result != ISC_R_SUCCESS && !create)
result = sdlz->dlzimp->methods->lookup(zonestr, "*",
sdlz->dlzimp->driverarg,
- sdlz->dbdata, node);
- }
+ sdlz->dbdata, node,
+ methods, clientinfo);
MAYBE_UNLOCK(sdlz->dlzimp);
@@ -652,6 +654,13 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
}
static isc_result_t
+findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
+ dns_dbnode_t **nodep)
+{
+ return (findnodeext(db, name, create, NULL, NULL, nodep));
+}
+
+static isc_result_t
findzonecut(dns_db_t *db, dns_name_t *name, unsigned int options,
isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
@@ -825,10 +834,11 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
}
static isc_result_t
-find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
- dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
- dns_dbnode_t **nodep, dns_name_t *foundname,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+findext(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
{
dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db;
dns_dbnode_t *node = NULL;
@@ -867,7 +877,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
* Look up the next label.
*/
dns_name_getlabelsequence(name, nlabels - i, i, xname);
- result = findnode(db, xname, ISC_FALSE, &node);
+ result = findnodeext(db, xname, ISC_FALSE,
+ methods, clientinfo, &node);
if (result != ISC_R_SUCCESS) {
result = DNS_R_NXDOMAIN;
continue;
@@ -879,8 +890,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
*/
if (i < nlabels) {
result = findrdataset(db, node, version,
- dns_rdatatype_dname,
- 0, now, rdataset, sigrdataset);
+ dns_rdatatype_dname, 0, now,
+ rdataset, sigrdataset);
if (result == ISC_R_SUCCESS) {
result = DNS_R_DNAME;
break;
@@ -893,8 +904,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
*/
if (i != olabels && (options & DNS_DBFIND_GLUEOK) == 0) {
result = findrdataset(db, node, version,
- dns_rdatatype_ns,
- 0, now, rdataset, sigrdataset);
+ dns_rdatatype_ns, 0, now,
+ rdataset, sigrdataset);
if (result == ISC_R_SUCCESS) {
if (i == nlabels && type == dns_rdatatype_any)
{
@@ -933,8 +944,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
/*
* Look for the qtype.
*/
- result = findrdataset(db, node, version, type,
- 0, now, rdataset, sigrdataset);
+ result = findrdataset(db, node, version, type, 0, now,
+ rdataset, sigrdataset);
if (result == ISC_R_SUCCESS)
break;
@@ -943,8 +954,8 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
*/
if (type != dns_rdatatype_cname) {
result = findrdataset(db, node, version,
- dns_rdatatype_cname,
- 0, now, rdataset, sigrdataset);
+ dns_rdatatype_cname, 0, now,
+ rdataset, sigrdataset);
if (result == ISC_R_SUCCESS) {
result = DNS_R_CNAME;
break;
@@ -980,6 +991,16 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
}
static isc_result_t
+find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
+ dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
+ dns_dbnode_t **nodep, dns_name_t *foundname,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset)
+{
+ return (findext(db, name, version, type, options, now, nodep,
+ foundname, NULL, NULL, rdataset, sigrdataset));
+}
+
+static isc_result_t
allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
isc_stdtime_t now, dns_rdatasetiter_t **iteratorp)
{
@@ -1194,7 +1215,8 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
if (sdlz->dlzimp->methods->newversion == NULL)
return (ISC_R_NOTIMPLEMENTED);
- result = findnode(db, &sdlz->common.origin, ISC_FALSE, nodep);
+ result = findnodeext(db, &sdlz->common.origin, ISC_FALSE,
+ NULL, NULL, nodep);
if (result != ISC_R_SUCCESS)
sdlz_log(ISC_LOG_ERROR, "sdlz getoriginnode failed : %s",
isc_result_totext(result));
@@ -1230,16 +1252,18 @@ static dns_dbmethods_t sdlzdb_methods = {
overmem,
settask,
getoriginnode,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ NULL, /* transfernode */
+ NULL, /* getnsec3parameters */
+ NULL, /* findnsec3node */
+ NULL, /* setsigningtime */
+ NULL, /* getsigningtime */
+ NULL, /* resigned */
+ NULL, /* isdnssec */
+ NULL, /* getrrsetstats */
+ NULL, /* rpz_enabled */
+ NULL, /* rpz_findips */
+ findnodeext,
+ findext
};
/*
@@ -1817,7 +1841,7 @@ dns_sdlz_putrr(dns_sdlzlookup_t *lookup, const char *type, dns_ttl_t ttl,
size = initial_size(data);
do {
- isc_buffer_init(&b, data, strlen(data));
+ isc_buffer_constinit(&b, data, strlen(data));
isc_buffer_add(&b, strlen(data));
result = isc_lex_openbuffer(lex, &b);
@@ -1883,7 +1907,7 @@ dns_sdlz_putnamedrr(dns_sdlzallnodes_t *allnodes, const char *name,
origin = &sdlz->common.origin;
else
origin = dns_rootname;
- isc_buffer_init(&b, name, strlen(name));
+ isc_buffer_constinit(&b, name, strlen(name));
isc_buffer_add(&b, strlen(name));
result = dns_name_fromtext(newname, &b, origin, 0, NULL);
diff --git a/contrib/bind9/lib/dns/spnego.c b/contrib/bind9/lib/dns/spnego.c
index 0486a722c731..0c1c8583650d 100644
--- a/contrib/bind9/lib/dns/spnego.c
+++ b/contrib/bind9/lib/dns/spnego.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2006-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -630,8 +630,10 @@ gss_accept_sec_context_spnego(OM_uint32 *minor_status,
sizeof(mechbuf),
&init_token.mechTypes.val[i],
&mech_len);
- if (ret)
+ if (ret) {
+ free_NegTokenInit(&init_token);
return (GSS_S_DEFECTIVE_TOKEN);
+ }
if (mech_len == GSS_KRB5_MECH->length &&
memcmp(GSS_KRB5_MECH->elements,
mechbuf + sizeof(mechbuf) - mech_len,
@@ -650,8 +652,10 @@ gss_accept_sec_context_spnego(OM_uint32 *minor_status,
}
}
- if (!found)
+ if (!found) {
+ free_NegTokenInit(&init_token);
return (send_reject(minor_status, output_token));
+ }
if (i == 0 && init_token.mechToken != NULL) {
ibuf.length = init_token.mechToken->length;
@@ -669,12 +673,14 @@ gss_accept_sec_context_spnego(OM_uint32 *minor_status,
time_rec,
delegated_cred_handle);
if (GSS_ERROR(major_status)) {
+ free_NegTokenInit(&init_token);
send_reject(&minor_status2, output_token);
return (major_status);
}
ot = &obuf;
}
ret = send_accept(&minor_status2, output_token, ot, pref);
+ free_NegTokenInit(&init_token);
if (ot != NULL && ot->length != 0U)
gss_release_buffer(&minor_status2, ot);
@@ -846,10 +852,13 @@ der_get_octet_string(const unsigned char *p, size_t len,
octet_string *data, size_t *size)
{
data->length = len;
- data->data = malloc(len);
- if (data->data == NULL && data->length != 0U)
- return (ENOMEM);
- memcpy(data->data, p, len);
+ if (len != 0U) {
+ data->data = malloc(len);
+ if (data->data == NULL)
+ return (ENOMEM);
+ memcpy(data->data, p, len);
+ } else
+ data->data = NULL;
if (size)
*size = len;
return (0);
@@ -862,6 +871,8 @@ der_get_oid(const unsigned char *p, size_t len,
int n;
size_t oldlen = len;
+ data->components = NULL;
+ data->length = 0;
if (len < 1U)
return (ASN1_OVERRUN);
@@ -997,6 +1008,9 @@ decode_octet_string(const unsigned char *p, size_t len,
int e;
size_t slen;
+ k->data = NULL;
+ k->length = 0;
+
e = der_match_tag(p, len, ASN1_C_UNIV, PRIM, UT_OctetString, &l);
if (e)
return (e);
@@ -1547,6 +1561,11 @@ spnego_initial(OM_uint32 *minor_status,
buf_size = 1024;
buf = malloc(buf_size);
+ if (buf == NULL) {
+ *minor_status = ENOMEM;
+ ret = GSS_S_FAILURE;
+ goto end;
+ }
do {
ret = encode_NegTokenInit(buf + buf_size - 1,
@@ -1685,6 +1704,7 @@ spnego_reply(OM_uint32 *minor_status,
ret = decode_NegTokenResp(buf + taglen, len, &resp, NULL);
if (ret) {
+ free_NegTokenResp(&resp);
*minor_status = ENOMEM;
return (GSS_S_FAILURE);
}
diff --git a/contrib/bind9/lib/dns/spnego_asn1.c b/contrib/bind9/lib/dns/spnego_asn1.c
index 75c2304d8e2c..b50605456693 100644
--- a/contrib/bind9/lib/dns/spnego_asn1.c
+++ b/contrib/bind9/lib/dns/spnego_asn1.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2006, 2007, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -53,10 +53,10 @@ typedef struct oid {
(R) = ENOMEM; \
} else { \
(R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \
- (S), (L)); \
+ (S), (L)); \
if((R) != 0) { \
- free((B)); \
- (B) = NULL; \
+ free((B)); \
+ (B) = NULL; \
} \
} \
} while (0)
@@ -171,33 +171,31 @@ static void free_NegTokenResp(NegTokenResp *);
/* Do not edit */
-#define BACK if (e) return e; p -= l; len -= l; ret += l
+#define BACK if (e) return e; p -= l; len -= l; ret += l; POST(p); POST(len); POST(ret)
static int
encode_MechType(unsigned char *p, size_t len, const MechType * data, size_t * size)
{
size_t ret = 0;
size_t l;
- int i, e;
+ int e;
- i = 0;
e = encode_oid(p, len, data, &l);
BACK;
*size = ret;
return 0;
}
-#define FORW if(e) goto fail; p += l; len -= l; ret += l
+#define FORW if(e) goto fail; p += l; len -= l; ret += l; POST(p); POST(len); POST(ret)
static int
decode_MechType(const unsigned char *p, size_t len, MechType * data, size_t * size)
{
- size_t ret = 0, reallen;
+ size_t ret = 0;
size_t l;
int e;
memset(data, 0, sizeof(*data));
- reallen = 0;
e = decode_oid(p, len, data, &l);
FORW;
if (size)
@@ -223,8 +221,6 @@ free_MechType(MechType * data)
/* Do not edit */
-#define BACK if (e) return e; p -= l; len -= l; ret += l
-
static int
encode_MechTypeList(unsigned char *p, size_t len, const MechTypeList * data, size_t * size)
{
@@ -232,7 +228,6 @@ encode_MechTypeList(unsigned char *p, size_t len, const MechTypeList * data, siz
size_t l;
int i, e;
- i = 0;
for (i = (data)->len - 1; i >= 0; --i) {
int oldret = ret;
ret = 0;
@@ -246,8 +241,6 @@ encode_MechTypeList(unsigned char *p, size_t len, const MechTypeList * data, siz
return 0;
}
-#define FORW if(e) goto fail; p += l; len -= l; ret += l
-
static int
decode_MechTypeList(const unsigned char *p, size_t len, MechTypeList * data, size_t * size)
{
@@ -269,8 +262,14 @@ decode_MechTypeList(const unsigned char *p, size_t len, MechTypeList * data, siz
(data)->len = 0;
(data)->val = NULL;
while (ret < origlen) {
+ void *old = (data)->val;
(data)->len++;
(data)->val = realloc((data)->val, sizeof(*((data)->val)) * (data)->len);
+ if ((data)->val == NULL) {
+ (data)->val = old;
+ (data)->len--;
+ return ENOMEM;
+ }
e = decode_MechType(p, len, &(data)->val[(data)->len - 1], &l);
FORW;
len = origlen - ret;
@@ -305,16 +304,13 @@ free_MechTypeList(MechTypeList * data)
/* Do not edit */
-#define BACK if (e) return e; p -= l; len -= l; ret += l
-
static int
encode_ContextFlags(unsigned char *p, size_t len, const ContextFlags * data, size_t * size)
{
size_t ret = 0;
size_t l;
- int i, e;
+ int e;
- i = 0;
{
unsigned char c = 0;
*p-- = c;
@@ -355,8 +351,6 @@ encode_ContextFlags(unsigned char *p, size_t len, const ContextFlags * data, siz
return 0;
}
-#define FORW if(e) goto fail; p += l; len -= l; ret += l
-
static int
decode_ContextFlags(const unsigned char *p, size_t len, ContextFlags * data, size_t * size)
{
@@ -381,8 +375,6 @@ decode_ContextFlags(const unsigned char *p, size_t len, ContextFlags * data, siz
data->anonFlag = (*p >> 3) & 1;
data->confFlag = (*p >> 2) & 1;
data->integFlag = (*p >> 1) & 1;
- p += reallen;
- len -= reallen;
ret += reallen;
if (size)
*size = ret;
@@ -418,16 +410,13 @@ free_ContextFlags(ContextFlags * data)
/* Do not edit */
-#define BACK if (e) return e; p -= l; len -= l; ret += l
-
static int
encode_NegTokenInit(unsigned char *p, size_t len, const NegTokenInit * data, size_t * size)
{
size_t ret = 0;
size_t l;
- int i, e;
+ int e;
- i = 0;
if ((data)->mechListMIC) {
int oldret = ret;
ret = 0;
@@ -469,8 +458,6 @@ encode_NegTokenInit(unsigned char *p, size_t len, const NegTokenInit * data, siz
return 0;
}
-#define FORW if(e) goto fail; p += l; len -= l; ret += l
-
static int
decode_NegTokenInit(const unsigned char *p, size_t len, NegTokenInit * data, size_t * size)
{
@@ -646,16 +633,13 @@ free_NegTokenInit(NegTokenInit * data)
/* Do not edit */
-#define BACK if (e) return e; p -= l; len -= l; ret += l
-
static int
encode_NegTokenResp(unsigned char *p, size_t len, const NegTokenResp * data, size_t * size)
{
size_t ret = 0;
size_t l;
- int i, e;
+ int e;
- i = 0;
if ((data)->mechListMIC) {
int oldret = ret;
ret = 0;
@@ -698,8 +682,6 @@ encode_NegTokenResp(unsigned char *p, size_t len, const NegTokenResp * data, siz
return 0;
}
-#define FORW if(e) goto fail; p += l; len -= l; ret += l
-
static int
decode_NegTokenResp(const unsigned char *p, size_t len, NegTokenResp * data, size_t * size)
{
diff --git a/contrib/bind9/lib/dns/ssu.c b/contrib/bind9/lib/dns/ssu.c
index 83aa67936105..49a777a6447e 100644
--- a/contrib/bind9/lib/dns/ssu.c
+++ b/contrib/bind9/lib/dns/ssu.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2010, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2010, 2011, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -82,7 +82,8 @@ dns_ssutable_create(isc_mem_t *mctx, dns_ssutable_t **tablep) {
return (result);
}
table->references = 1;
- table->mctx = mctx;
+ table->mctx = NULL;
+ isc_mem_attach(mctx, &table->mctx);
ISC_LIST_INIT(table->rules);
table->magic = SSUTABLEMAGIC;
*tablep = table;
@@ -115,7 +116,7 @@ destroy(dns_ssutable_t *table) {
}
DESTROYLOCK(&table->lock);
table->magic = 0;
- isc_mem_put(mctx, table, sizeof(dns_ssutable_t));
+ isc_mem_putanddetach(&table->mctx, table, sizeof(dns_ssutable_t));
}
void
diff --git a/contrib/bind9/lib/dns/ssu_external.c b/contrib/bind9/lib/dns/ssu_external.c
index 65ba1b53f6e9..43d231d63eb0 100644
--- a/contrib/bind9/lib/dns/ssu_external.c
+++ b/contrib/bind9/lib/dns/ssu_external.c
@@ -79,7 +79,7 @@ ux_socket_connect(const char *path) {
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, path, sizeof(addr.sun_path));
+ strlcpy(addr.sun_path, path, sizeof(addr.sun_path));
fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (fd == -1) {
diff --git a/contrib/bind9/lib/dns/tkey.c b/contrib/bind9/lib/dns/tkey.c
index 0112f7ec760e..161c18808ef4 100644
--- a/contrib/bind9/lib/dns/tkey.c
+++ b/contrib/bind9/lib/dns/tkey.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -991,8 +991,13 @@ dns_tkey_builddhquery(dns_message_t *msg, dst_key_t *key, dns_name_t *name,
ISC_LIST_INIT(namelist);
RETERR(add_rdata_to_list(msg, &keyname, rdata, 0, &namelist));
- dns_message_addname(msg, ISC_LIST_HEAD(namelist),
- DNS_SECTION_ADDITIONAL);
+ name = ISC_LIST_HEAD(namelist);
+ while (name != NULL) {
+ dns_name_t *next = ISC_LIST_NEXT(name, link);
+ ISC_LIST_UNLINK(namelist, name, link);
+ dns_message_addname(msg, name, DNS_SECTION_ADDITIONAL);
+ name = next;
+ }
return (ISC_R_SUCCESS);
diff --git a/contrib/bind9/lib/dns/tsig.c b/contrib/bind9/lib/dns/tsig.c
index 76c239bb775f..c7768f4c788a 100644
--- a/contrib/bind9/lib/dns/tsig.c
+++ b/contrib/bind9/lib/dns/tsig.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -239,7 +239,9 @@ adjust_lru(dns_tsigkey_t *tkey) {
* We may have been removed from the LRU list between
* removing the read lock and aquiring the write lock.
*/
- if (ISC_LINK_LINKED(tkey, link)) {
+ if (ISC_LINK_LINKED(tkey, link) &&
+ tkey->ring->lru.tail != tkey)
+ {
ISC_LIST_UNLINK(tkey->ring->lru, tkey, link);
ISC_LIST_APPEND(tkey->ring->lru, tkey, link);
}
@@ -625,8 +627,7 @@ restore_key(dns_tsig_keyring_t *ring, isc_stdtime_t now, FILE *fp) {
}
static void
-dump_key(dns_tsigkey_t *tkey, FILE *fp)
-{
+dump_key(dns_tsigkey_t *tkey, FILE *fp) {
char *buffer = NULL;
int length = 0;
char namestr[DNS_NAME_FORMATSIZE];
@@ -634,6 +635,9 @@ dump_key(dns_tsigkey_t *tkey, FILE *fp)
char algorithmstr[DNS_NAME_FORMATSIZE];
isc_result_t result;
+ REQUIRE(tkey != NULL);
+ REQUIRE(fp != NULL);
+
dns_name_format(&tkey->name, namestr, sizeof(namestr));
dns_name_format(tkey->creator, creatorstr, sizeof(creatorstr));
dns_name_format(tkey->algorithm, algorithmstr, sizeof(algorithmstr));
@@ -942,7 +946,8 @@ dns_tsig_sign(dns_message_t *msg) {
isc_buffer_t headerbuf;
isc_uint16_t digestbits;
- ret = dst_context_create(key->key, mctx, &ctx);
+ ret = dst_context_create2(key->key, mctx,
+ DNS_LOGCATEGORY_DNSSEC, &ctx);
if (ret != ISC_R_SUCCESS)
return (ret);
@@ -973,6 +978,13 @@ dns_tsig_sign(dns_message_t *msg) {
if (ret != ISC_R_SUCCESS)
goto cleanup_context;
}
+#if defined(__clang__) && \
+ ( __clang_major__ < 3 || \
+ (__clang_major__ == 3 && __clang_minor__ < 2) || \
+ (__clang_major__ == 4 && __clang_minor__ < 2))
+ /* false positive: http://llvm.org/bugs/show_bug.cgi?id=14461 */
+ else memset(&querytsig, 0, sizeof(querytsig));
+#endif
/*
* Digest the header.
@@ -1228,6 +1240,13 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
if (ret != ISC_R_SUCCESS)
return (ret);
}
+#if defined(__clang__) && \
+ ( __clang_major__ < 3 || \
+ (__clang_major__ == 3 && __clang_minor__ < 2) || \
+ (__clang_major__ == 4 && __clang_minor__ < 2))
+ /* false positive: http://llvm.org/bugs/show_bug.cgi?id=14461 */
+ else memset(&querytsig, 0, sizeof(querytsig));
+#endif
/*
* Do the key name and algorithm match that of the query?
@@ -1326,7 +1345,8 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
sig_r.base = tsig.signature;
sig_r.length = tsig.siglen;
- ret = dst_context_create(key, mctx, &ctx);
+ ret = dst_context_create2(key, mctx,
+ DNS_LOGCATEGORY_DNSSEC, &ctx);
if (ret != ISC_R_SUCCESS)
return (ret);
@@ -1557,7 +1577,9 @@ tsig_verify_tcp(isc_buffer_t *source, dns_message_t *msg) {
key = tsigkey->key;
if (msg->tsigctx == NULL) {
- ret = dst_context_create(key, mctx, &msg->tsigctx);
+ ret = dst_context_create2(key, mctx,
+ DNS_LOGCATEGORY_DNSSEC,
+ &msg->tsigctx);
if (ret != ISC_R_SUCCESS)
goto cleanup_querystruct;
@@ -1746,11 +1768,15 @@ static void
free_tsignode(void *node, void *_unused) {
dns_tsigkey_t *key;
- UNUSED(_unused);
-
REQUIRE(node != NULL);
+ UNUSED(_unused);
+
key = node;
+ if (key->generated) {
+ if (ISC_LINK_LINKED(key, link))
+ ISC_LIST_UNLINK(key->ring->lru, key, link);
+ }
dns_tsigkey_detach(&key);
}
diff --git a/contrib/bind9/lib/dns/update.c b/contrib/bind9/lib/dns/update.c
new file mode 100644
index 000000000000..14ffcc2234d8
--- /dev/null
+++ b/contrib/bind9/lib/dns/update.c
@@ -0,0 +1,1865 @@
+/*
+ * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+#include <config.h>
+
+#include <isc/log.h>
+#include <isc/netaddr.h>
+#include <isc/print.h>
+#include <isc/serial.h>
+#include <isc/stats.h>
+#include <isc/stdtime.h>
+#include <isc/string.h>
+#include <isc/taskpool.h>
+#include <isc/util.h>
+
+#include <dns/db.h>
+#include <dns/dbiterator.h>
+#include <dns/diff.h>
+#include <dns/dnssec.h>
+#include <dns/events.h>
+#include <dns/fixedname.h>
+#include <dns/journal.h>
+#include <dns/keyvalues.h>
+#include <dns/log.h>
+#include <dns/message.h>
+#include <dns/nsec.h>
+#include <dns/nsec3.h>
+#include <dns/private.h>
+#include <dns/rdataclass.h>
+#include <dns/rdataset.h>
+#include <dns/rdatasetiter.h>
+#include <dns/rdatastruct.h>
+#include <dns/rdatatype.h>
+#include <dns/result.h>
+#include <dns/soa.h>
+#include <dns/ssu.h>
+#include <dns/tsig.h>
+#include <dns/update.h>
+#include <dns/view.h>
+#include <dns/zone.h>
+#include <dns/zt.h>
+
+
+/**************************************************************************/
+
+/*%
+ * Log level for tracing dynamic update protocol requests.
+ */
+#define LOGLEVEL_PROTOCOL ISC_LOG_INFO
+
+/*%
+ * Log level for low-level debug tracing.
+ */
+#define LOGLEVEL_DEBUG ISC_LOG_DEBUG(8)
+
+/*%
+ * Check an operation for failure. These macros all assume that
+ * the function using them has a 'result' variable and a 'failure'
+ * label.
+ */
+#define CHECK(op) \
+ do { result = (op); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/*%
+ * Fail unconditionally with result 'code', which must not
+ * be ISC_R_SUCCESS. The reason for failure presumably has
+ * been logged already.
+ *
+ * The test against ISC_R_SUCCESS is there to keep the Solaris compiler
+ * from complaining about "end-of-loop code not reached".
+ */
+
+#define FAIL(code) \
+ do { \
+ result = (code); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/*%
+ * Fail unconditionally and log as a client error.
+ * The test against ISC_R_SUCCESS is there to keep the Solaris compiler
+ * from complaining about "end-of-loop code not reached".
+ */
+#define FAILC(code, msg) \
+ do { \
+ const char *_what = "failed"; \
+ result = (code); \
+ switch (result) { \
+ case DNS_R_NXDOMAIN: \
+ case DNS_R_YXDOMAIN: \
+ case DNS_R_YXRRSET: \
+ case DNS_R_NXRRSET: \
+ _what = "unsuccessful"; \
+ } \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "update %s: %s (%s)", _what, \
+ msg, isc_result_totext(result)); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+#define FAILN(code, name, msg) \
+ do { \
+ const char *_what = "failed"; \
+ result = (code); \
+ switch (result) { \
+ case DNS_R_NXDOMAIN: \
+ case DNS_R_YXDOMAIN: \
+ case DNS_R_YXRRSET: \
+ case DNS_R_NXRRSET: \
+ _what = "unsuccessful"; \
+ } \
+ if (isc_log_wouldlog(dns_lctx, LOGLEVEL_PROTOCOL)) { \
+ char _nbuf[DNS_NAME_FORMATSIZE]; \
+ dns_name_format(name, _nbuf, sizeof(_nbuf)); \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "update %s: %s: %s (%s)", _what, _nbuf, \
+ msg, isc_result_totext(result)); \
+ } \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+#define FAILNT(code, name, type, msg) \
+ do { \
+ const char *_what = "failed"; \
+ result = (code); \
+ switch (result) { \
+ case DNS_R_NXDOMAIN: \
+ case DNS_R_YXDOMAIN: \
+ case DNS_R_YXRRSET: \
+ case DNS_R_NXRRSET: \
+ _what = "unsuccessful"; \
+ } \
+ if (isc_log_wouldlog(dns_lctx, LOGLEVEL_PROTOCOL)) { \
+ char _nbuf[DNS_NAME_FORMATSIZE]; \
+ char _tbuf[DNS_RDATATYPE_FORMATSIZE]; \
+ dns_name_format(name, _nbuf, sizeof(_nbuf)); \
+ dns_rdatatype_format(type, _tbuf, sizeof(_tbuf)); \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "update %s: %s/%s: %s (%s)", \
+ _what, _nbuf, _tbuf, msg, \
+ isc_result_totext(result)); \
+ } \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/*%
+ * Fail unconditionally and log as a server error.
+ * The test against ISC_R_SUCCESS is there to keep the Solaris compiler
+ * from complaining about "end-of-loop code not reached".
+ */
+#define FAILS(code, msg) \
+ do { \
+ result = (code); \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "error: %s: %s", \
+ msg, isc_result_totext(result)); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/**************************************************************************/
+
+typedef struct rr rr_t;
+
+struct rr {
+ /* dns_name_t name; */
+ isc_uint32_t ttl;
+ dns_rdata_t rdata;
+};
+
+typedef struct update_event update_event_t;
+
+/**************************************************************************/
+
+static void
+update_log(dns_update_log_t *callback, dns_zone_t *zone,
+ int level, const char *fmt, ...) ISC_FORMAT_PRINTF(4, 5);
+
+static void
+update_log(dns_update_log_t *callback, dns_zone_t *zone,
+ int level, const char *fmt, ...)
+{
+ va_list ap;
+ char message[4096];
+
+ if (callback == NULL)
+ return;
+
+ if (isc_log_wouldlog(dns_lctx, level) == ISC_FALSE)
+ return;
+
+
+ va_start(ap, fmt);
+ vsnprintf(message, sizeof(message), fmt, ap);
+ va_end(ap);
+
+ (callback->func)(callback->arg, zone, level, message);
+}
+
+/*%
+ * Update a single RR in version 'ver' of 'db' and log the
+ * update in 'diff'.
+ *
+ * Ensures:
+ * \li '*tuple' == NULL. Either the tuple is freed, or its
+ * ownership has been transferred to the diff.
+ */
+static isc_result_t
+do_one_tuple(dns_difftuple_t **tuple, dns_db_t *db, dns_dbversion_t *ver,
+ dns_diff_t *diff)
+{
+ dns_diff_t temp_diff;
+ isc_result_t result;
+
+ /*
+ * Create a singleton diff.
+ */
+ dns_diff_init(diff->mctx, &temp_diff);
+ temp_diff.resign = diff->resign;
+ ISC_LIST_APPEND(temp_diff.tuples, *tuple, link);
+
+ /*
+ * Apply it to the database.
+ */
+ result = dns_diff_apply(&temp_diff, db, ver);
+ ISC_LIST_UNLINK(temp_diff.tuples, *tuple, link);
+ if (result != ISC_R_SUCCESS) {
+ dns_difftuple_free(tuple);
+ return (result);
+ }
+
+ /*
+ * Merge it into the current pending journal entry.
+ */
+ dns_diff_appendminimal(diff, tuple);
+
+ /*
+ * Do not clear temp_diff.
+ */
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+update_one_rr(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff,
+ dns_diffop_t op, dns_name_t *name, dns_ttl_t ttl,
+ dns_rdata_t *rdata)
+{
+ dns_difftuple_t *tuple = NULL;
+ isc_result_t result;
+ result = dns_difftuple_create(diff->mctx, op,
+ name, ttl, rdata, &tuple);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ return (do_one_tuple(&tuple, db, ver, diff));
+}
+
+/**************************************************************************/
+/*
+ * Callback-style iteration over rdatasets and rdatas.
+ *
+ * foreach_rrset() can be used to iterate over the RRsets
+ * of a name and call a callback function with each
+ * one. Similarly, foreach_rr() can be used to iterate
+ * over the individual RRs at name, optionally restricted
+ * to RRs of a given type.
+ *
+ * The callback functions are called "actions" and take
+ * two arguments: a void pointer for passing arbitrary
+ * context information, and a pointer to the current RRset
+ * or RR. By convention, their names end in "_action".
+ */
+
+/*
+ * XXXRTH We might want to make this public somewhere in libdns.
+ */
+
+/*%
+ * Function type for foreach_rrset() iterator actions.
+ */
+typedef isc_result_t rrset_func(void *data, dns_rdataset_t *rrset);
+
+/*%
+ * Function type for foreach_rr() iterator actions.
+ */
+typedef isc_result_t rr_func(void *data, rr_t *rr);
+
+/*%
+ * Internal context struct for foreach_node_rr().
+ */
+typedef struct {
+ rr_func * rr_action;
+ void * rr_action_data;
+} foreach_node_rr_ctx_t;
+
+/*%
+ * Internal helper function for foreach_node_rr().
+ */
+static isc_result_t
+foreach_node_rr_action(void *data, dns_rdataset_t *rdataset) {
+ isc_result_t result;
+ foreach_node_rr_ctx_t *ctx = data;
+ for (result = dns_rdataset_first(rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(rdataset))
+ {
+ rr_t rr = { 0, DNS_RDATA_INIT };
+
+ dns_rdataset_current(rdataset, &rr.rdata);
+ rr.ttl = rdataset->ttl;
+ result = (*ctx->rr_action)(ctx->rr_action_data, &rr);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+ if (result != ISC_R_NOMORE)
+ return (result);
+ return (ISC_R_SUCCESS);
+}
+
+/*%
+ * For each rdataset of 'name' in 'ver' of 'db', call 'action'
+ * with the rdataset and 'action_data' as arguments. If the name
+ * does not exist, do nothing.
+ *
+ * If 'action' returns an error, abort iteration and return the error.
+ */
+static isc_result_t
+foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ rrset_func *action, void *action_data)
+{
+ isc_result_t result;
+ dns_dbnode_t *node;
+ dns_rdatasetiter_t *iter;
+
+ node = NULL;
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ iter = NULL;
+ result = dns_db_allrdatasets(db, node, ver,
+ (isc_stdtime_t) 0, &iter);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdatasetiter_first(iter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(iter))
+ {
+ dns_rdataset_t rdataset;
+
+ dns_rdataset_init(&rdataset);
+ dns_rdatasetiter_current(iter, &rdataset);
+
+ result = (*action)(action_data, &rdataset);
+
+ dns_rdataset_disassociate(&rdataset);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_iterator;
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ cleanup_iterator:
+ dns_rdatasetiter_destroy(&iter);
+
+ cleanup_node:
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+/*%
+ * For each RR of 'name' in 'ver' of 'db', call 'action'
+ * with the RR and 'action_data' as arguments. If the name
+ * does not exist, do nothing.
+ *
+ * If 'action' returns an error, abort iteration
+ * and return the error.
+ */
+static isc_result_t
+foreach_node_rr(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ rr_func *rr_action, void *rr_action_data)
+{
+ foreach_node_rr_ctx_t ctx;
+ ctx.rr_action = rr_action;
+ ctx.rr_action_data = rr_action_data;
+ return (foreach_rrset(db, ver, name,
+ foreach_node_rr_action, &ctx));
+}
+
+
+/*%
+ * For each of the RRs specified by 'db', 'ver', 'name', 'type',
+ * (which can be dns_rdatatype_any to match any type), and 'covers', call
+ * 'action' with the RR and 'action_data' as arguments. If the name
+ * does not exist, or if no RRset of the given type exists at the name,
+ * do nothing.
+ *
+ * If 'action' returns an error, abort iteration and return the error.
+ */
+static isc_result_t
+foreach_rr(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_rdatatype_t type, dns_rdatatype_t covers, rr_func *rr_action,
+ void *rr_action_data)
+{
+
+ isc_result_t result;
+ dns_dbnode_t *node;
+ dns_rdataset_t rdataset;
+
+ if (type == dns_rdatatype_any)
+ return (foreach_node_rr(db, ver, name,
+ rr_action, rr_action_data));
+
+ node = NULL;
+ if (type == dns_rdatatype_nsec3 ||
+ (type == dns_rdatatype_rrsig && covers == dns_rdatatype_nsec3))
+ result = dns_db_findnsec3node(db, name, ISC_FALSE, &node);
+ else
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ dns_rdataset_init(&rdataset);
+ result = dns_db_findrdataset(db, node, ver, type, covers,
+ (isc_stdtime_t) 0, &rdataset, NULL);
+ if (result == ISC_R_NOTFOUND) {
+ result = ISC_R_SUCCESS;
+ goto cleanup_node;
+ }
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdataset_first(&rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&rdataset))
+ {
+ rr_t rr = { 0, DNS_RDATA_INIT };
+ dns_rdataset_current(&rdataset, &rr.rdata);
+ rr.ttl = rdataset.ttl;
+ result = (*rr_action)(rr_action_data, &rr);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_rdataset;
+ }
+ if (result != ISC_R_NOMORE)
+ goto cleanup_rdataset;
+ result = ISC_R_SUCCESS;
+
+ cleanup_rdataset:
+ dns_rdataset_disassociate(&rdataset);
+ cleanup_node:
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+/**************************************************************************/
+/*
+ * Various tests on the database contents (for prerequisites, etc).
+ */
+
+/*%
+ * Function type for predicate functions that compare a database RR 'db_rr'
+ * against an update RR 'update_rr'.
+ */
+typedef isc_boolean_t rr_predicate(dns_rdata_t *update_rr, dns_rdata_t *db_rr);
+
+/*%
+ * Helper function for rrset_exists().
+ */
+static isc_result_t
+rrset_exists_action(void *data, rr_t *rr) {
+ UNUSED(data);
+ UNUSED(rr);
+ return (ISC_R_EXISTS);
+}
+
+/*%
+ * Utility macro for RR existence checking functions.
+ *
+ * If the variable 'result' has the value ISC_R_EXISTS or
+ * ISC_R_SUCCESS, set *exists to ISC_TRUE or ISC_FALSE,
+ * respectively, and return success.
+ *
+ * If 'result' has any other value, there was a failure.
+ * Return the failure result code and do not set *exists.
+ *
+ * This would be more readable as "do { if ... } while(0)",
+ * but that form generates tons of warnings on Solaris 2.6.
+ */
+#define RETURN_EXISTENCE_FLAG \
+ return ((result == ISC_R_EXISTS) ? \
+ (*exists = ISC_TRUE, ISC_R_SUCCESS) : \
+ ((result == ISC_R_SUCCESS) ? \
+ (*exists = ISC_FALSE, ISC_R_SUCCESS) : \
+ result))
+
+/*%
+ * Set '*exists' to true iff an rrset of the given type exists,
+ * to false otherwise.
+ */
+static isc_result_t
+rrset_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_rdatatype_t type, dns_rdatatype_t covers,
+ isc_boolean_t *exists)
+{
+ isc_result_t result;
+ result = foreach_rr(db, ver, name, type, covers,
+ rrset_exists_action, NULL);
+ RETURN_EXISTENCE_FLAG;
+}
+
+/*%
+ * Set '*visible' to true if the RRset exists and is part of the
+ * visible zone. Otherwise '*visible' is set to false unless a
+ * error occurs.
+ */
+static isc_result_t
+rrset_visible(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_rdatatype_t type, isc_boolean_t *visible)
+{
+ isc_result_t result;
+ dns_fixedname_t fixed;
+
+ dns_fixedname_init(&fixed);
+ result = dns_db_find(db, name, ver, type, DNS_DBFIND_NOWILD,
+ (isc_stdtime_t) 0, NULL,
+ dns_fixedname_name(&fixed), NULL, NULL);
+ switch (result) {
+ case ISC_R_SUCCESS:
+ *visible = ISC_TRUE;
+ break;
+ /*
+ * Glue, obscured, deleted or replaced records.
+ */
+ case DNS_R_DELEGATION:
+ case DNS_R_DNAME:
+ case DNS_R_CNAME:
+ case DNS_R_NXDOMAIN:
+ case DNS_R_NXRRSET:
+ case DNS_R_EMPTYNAME:
+ case DNS_R_COVERINGNSEC:
+ *visible = ISC_FALSE;
+ result = ISC_R_SUCCESS;
+ break;
+ default:
+ break;
+ }
+ return (result);
+}
+
+/*%
+ * Context struct and helper function for name_exists().
+ */
+
+static isc_result_t
+name_exists_action(void *data, dns_rdataset_t *rrset) {
+ UNUSED(data);
+ UNUSED(rrset);
+ return (ISC_R_EXISTS);
+}
+
+/*%
+ * Set '*exists' to true iff the given name exists, to false otherwise.
+ */
+static isc_result_t
+name_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ isc_boolean_t *exists)
+{
+ isc_result_t result;
+ result = foreach_rrset(db, ver, name,
+ name_exists_action, NULL);
+ RETURN_EXISTENCE_FLAG;
+}
+
+/**************************************************************************/
+/*
+ * Checking of "RRset exists (value dependent)" prerequisites.
+ *
+ * In the RFC2136 section 3.2.5, this is the pseudocode involving
+ * a variable called "temp", a mapping of <name, type> tuples to rrsets.
+ *
+ * Here, we represent the "temp" data structure as (non-minimal) "dns_diff_t"
+ * where each tuple has op==DNS_DIFFOP_EXISTS.
+ */
+
+/*%
+ * A comparison function defining the sorting order for the entries
+ * in the "temp" data structure. The major sort key is the owner name,
+ * followed by the type and rdata.
+ */
+static int
+temp_order(const void *av, const void *bv) {
+ dns_difftuple_t const * const *ap = av;
+ dns_difftuple_t const * const *bp = bv;
+ dns_difftuple_t const *a = *ap;
+ dns_difftuple_t const *b = *bp;
+ int r;
+ r = dns_name_compare(&a->name, &b->name);
+ if (r != 0)
+ return (r);
+ r = (b->rdata.type - a->rdata.type);
+ if (r != 0)
+ return (r);
+ r = dns_rdata_casecompare(&a->rdata, &b->rdata);
+ return (r);
+}
+
+/**************************************************************************/
+/*
+ * Conditional deletion of RRs.
+ */
+
+/*%
+ * Context structure for delete_if().
+ */
+
+typedef struct {
+ rr_predicate *predicate;
+ dns_db_t *db;
+ dns_dbversion_t *ver;
+ dns_diff_t *diff;
+ dns_name_t *name;
+ dns_rdata_t *update_rr;
+} conditional_delete_ctx_t;
+
+/*%
+ * Predicate functions for delete_if().
+ */
+
+/*%
+ * Return true always.
+ */
+static isc_boolean_t
+true_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
+ UNUSED(update_rr);
+ UNUSED(db_rr);
+ return (ISC_TRUE);
+}
+
+/*%
+ * Return true if the record is a RRSIG.
+ */
+static isc_boolean_t
+rrsig_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
+ UNUSED(update_rr);
+ return ((db_rr->type == dns_rdatatype_rrsig) ?
+ ISC_TRUE : ISC_FALSE);
+}
+
+/*%
+ * Internal helper function for delete_if().
+ */
+static isc_result_t
+delete_if_action(void *data, rr_t *rr) {
+ conditional_delete_ctx_t *ctx = data;
+ if ((*ctx->predicate)(ctx->update_rr, &rr->rdata)) {
+ isc_result_t result;
+ result = update_one_rr(ctx->db, ctx->ver, ctx->diff,
+ DNS_DIFFOP_DEL, ctx->name,
+ rr->ttl, &rr->rdata);
+ return (result);
+ } else {
+ return (ISC_R_SUCCESS);
+ }
+}
+
+/*%
+ * Conditionally delete RRs. Apply 'predicate' to the RRs
+ * specified by 'db', 'ver', 'name', and 'type' (which can
+ * be dns_rdatatype_any to match any type). Delete those
+ * RRs for which the predicate returns true, and log the
+ * deletions in 'diff'.
+ */
+static isc_result_t
+delete_if(rr_predicate *predicate, dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *name, dns_rdatatype_t type, dns_rdatatype_t covers,
+ dns_rdata_t *update_rr, dns_diff_t *diff)
+{
+ conditional_delete_ctx_t ctx;
+ ctx.predicate = predicate;
+ ctx.db = db;
+ ctx.ver = ver;
+ ctx.diff = diff;
+ ctx.name = name;
+ ctx.update_rr = update_rr;
+ return (foreach_rr(db, ver, name, type, covers,
+ delete_if_action, &ctx));
+}
+
+/**************************************************************************/
+/*
+ * Incremental updating of NSECs and RRSIGs.
+ */
+
+/*%
+ * We abuse the dns_diff_t type to represent a set of domain names
+ * affected by the update.
+ */
+static isc_result_t
+namelist_append_name(dns_diff_t *list, dns_name_t *name) {
+ isc_result_t result;
+ dns_difftuple_t *tuple = NULL;
+ static dns_rdata_t dummy_rdata = DNS_RDATA_INIT;
+
+ CHECK(dns_difftuple_create(list->mctx, DNS_DIFFOP_EXISTS, name, 0,
+ &dummy_rdata, &tuple));
+ dns_diff_append(list, &tuple);
+ failure:
+ return (result);
+}
+
+static isc_result_t
+namelist_append_subdomain(dns_db_t *db, dns_name_t *name, dns_diff_t *affected)
+{
+ isc_result_t result;
+ dns_fixedname_t fixedname;
+ dns_name_t *child;
+ dns_dbiterator_t *dbit = NULL;
+
+ dns_fixedname_init(&fixedname);
+ child = dns_fixedname_name(&fixedname);
+
+ CHECK(dns_db_createiterator(db, DNS_DB_NONSEC3, &dbit));
+
+ for (result = dns_dbiterator_seek(dbit, name);
+ result == ISC_R_SUCCESS;
+ result = dns_dbiterator_next(dbit))
+ {
+ dns_dbnode_t *node = NULL;
+ CHECK(dns_dbiterator_current(dbit, &node, child));
+ dns_db_detachnode(db, &node);
+ if (! dns_name_issubdomain(child, name))
+ break;
+ CHECK(namelist_append_name(affected, child));
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+ failure:
+ if (dbit != NULL)
+ dns_dbiterator_destroy(&dbit);
+ return (result);
+}
+
+
+
+/*%
+ * Helper function for non_nsec_rrset_exists().
+ */
+static isc_result_t
+is_non_nsec_action(void *data, dns_rdataset_t *rrset) {
+ UNUSED(data);
+ if (!(rrset->type == dns_rdatatype_nsec ||
+ rrset->type == dns_rdatatype_nsec3 ||
+ (rrset->type == dns_rdatatype_rrsig &&
+ (rrset->covers == dns_rdatatype_nsec ||
+ rrset->covers == dns_rdatatype_nsec3))))
+ return (ISC_R_EXISTS);
+ return (ISC_R_SUCCESS);
+}
+
+/*%
+ * Check whether there is an rrset other than a NSEC or RRSIG NSEC,
+ * i.e., anything that justifies the continued existence of a name
+ * after a secure update.
+ *
+ * If such an rrset exists, set '*exists' to ISC_TRUE.
+ * Otherwise, set it to ISC_FALSE.
+ */
+static isc_result_t
+non_nsec_rrset_exists(dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *name, isc_boolean_t *exists)
+{
+ isc_result_t result;
+ result = foreach_rrset(db, ver, name, is_non_nsec_action, NULL);
+ RETURN_EXISTENCE_FLAG;
+}
+
+/*%
+ * A comparison function for sorting dns_diff_t:s by name.
+ */
+static int
+name_order(const void *av, const void *bv) {
+ dns_difftuple_t const * const *ap = av;
+ dns_difftuple_t const * const *bp = bv;
+ dns_difftuple_t const *a = *ap;
+ dns_difftuple_t const *b = *bp;
+ return (dns_name_compare(&a->name, &b->name));
+}
+
+static isc_result_t
+uniqify_name_list(dns_diff_t *list) {
+ isc_result_t result;
+ dns_difftuple_t *p, *q;
+
+ CHECK(dns_diff_sort(list, name_order));
+
+ p = ISC_LIST_HEAD(list->tuples);
+ while (p != NULL) {
+ do {
+ q = ISC_LIST_NEXT(p, link);
+ if (q == NULL || ! dns_name_equal(&p->name, &q->name))
+ break;
+ ISC_LIST_UNLINK(list->tuples, q, link);
+ dns_difftuple_free(&q);
+ } while (1);
+ p = ISC_LIST_NEXT(p, link);
+ }
+ failure:
+ return (result);
+}
+
+static isc_result_t
+is_active(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ isc_boolean_t *flag, isc_boolean_t *cut, isc_boolean_t *unsecure)
+{
+ isc_result_t result;
+ dns_fixedname_t foundname;
+ dns_fixedname_init(&foundname);
+ result = dns_db_find(db, name, ver, dns_rdatatype_any,
+ DNS_DBFIND_GLUEOK | DNS_DBFIND_NOWILD,
+ (isc_stdtime_t) 0, NULL,
+ dns_fixedname_name(&foundname),
+ NULL, NULL);
+ if (result == ISC_R_SUCCESS || result == DNS_R_EMPTYNAME) {
+ *flag = ISC_TRUE;
+ *cut = ISC_FALSE;
+ if (unsecure != NULL)
+ *unsecure = ISC_FALSE;
+ return (ISC_R_SUCCESS);
+ } else if (result == DNS_R_ZONECUT) {
+ *flag = ISC_TRUE;
+ *cut = ISC_TRUE;
+ if (unsecure != NULL) {
+ /*
+ * We are at the zonecut. Check to see if there
+ * is a DS RRset.
+ */
+ if (dns_db_find(db, name, ver, dns_rdatatype_ds, 0,
+ (isc_stdtime_t) 0, NULL,
+ dns_fixedname_name(&foundname),
+ NULL, NULL) == DNS_R_NXRRSET)
+ *unsecure = ISC_TRUE;
+ else
+ *unsecure = ISC_FALSE;
+ }
+ return (ISC_R_SUCCESS);
+ } else if (result == DNS_R_GLUE || result == DNS_R_DNAME ||
+ result == DNS_R_DELEGATION || result == DNS_R_NXDOMAIN) {
+ *flag = ISC_FALSE;
+ *cut = ISC_FALSE;
+ if (unsecure != NULL)
+ *unsecure = ISC_FALSE;
+ return (ISC_R_SUCCESS);
+ } else {
+ /*
+ * Silence compiler.
+ */
+ *flag = ISC_FALSE;
+ *cut = ISC_FALSE;
+ if (unsecure != NULL)
+ *unsecure = ISC_FALSE;
+ return (result);
+ }
+}
+
+/*%
+ * Find the next/previous name that has a NSEC record.
+ * In other words, skip empty database nodes and names that
+ * have had their NSECs removed because they are obscured by
+ * a zone cut.
+ */
+static isc_result_t
+next_active(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *oldname, dns_name_t *newname,
+ isc_boolean_t forward)
+{
+ isc_result_t result;
+ dns_dbiterator_t *dbit = NULL;
+ isc_boolean_t has_nsec = ISC_FALSE;
+ unsigned int wraps = 0;
+ isc_boolean_t secure = dns_db_issecure(db);
+
+ CHECK(dns_db_createiterator(db, 0, &dbit));
+
+ CHECK(dns_dbiterator_seek(dbit, oldname));
+ do {
+ dns_dbnode_t *node = NULL;
+
+ if (forward)
+ result = dns_dbiterator_next(dbit);
+ else
+ result = dns_dbiterator_prev(dbit);
+ if (result == ISC_R_NOMORE) {
+ /*
+ * Wrap around.
+ */
+ if (forward)
+ CHECK(dns_dbiterator_first(dbit));
+ else
+ CHECK(dns_dbiterator_last(dbit));
+ wraps++;
+ if (wraps == 2) {
+ update_log(log, zone, ISC_LOG_ERROR,
+ "secure zone with no NSECs");
+ result = DNS_R_BADZONE;
+ goto failure;
+ }
+ }
+ CHECK(dns_dbiterator_current(dbit, &node, newname));
+ dns_db_detachnode(db, &node);
+
+ /*
+ * The iterator may hold the tree lock, and
+ * rrset_exists() calls dns_db_findnode() which
+ * may try to reacquire it. To avoid deadlock
+ * we must pause the iterator first.
+ */
+ CHECK(dns_dbiterator_pause(dbit));
+ if (secure) {
+ CHECK(rrset_exists(db, ver, newname,
+ dns_rdatatype_nsec, 0, &has_nsec));
+ } else {
+ dns_fixedname_t ffound;
+ dns_name_t *found;
+ dns_fixedname_init(&ffound);
+ found = dns_fixedname_name(&ffound);
+ result = dns_db_find(db, newname, ver,
+ dns_rdatatype_soa,
+ DNS_DBFIND_NOWILD, 0, NULL, found,
+ NULL, NULL);
+ if (result == ISC_R_SUCCESS ||
+ result == DNS_R_EMPTYNAME ||
+ result == DNS_R_NXRRSET ||
+ result == DNS_R_CNAME ||
+ (result == DNS_R_DELEGATION &&
+ dns_name_equal(newname, found))) {
+ has_nsec = ISC_TRUE;
+ result = ISC_R_SUCCESS;
+ } else if (result != DNS_R_NXDOMAIN)
+ break;
+ }
+ } while (! has_nsec);
+ failure:
+ if (dbit != NULL)
+ dns_dbiterator_destroy(&dbit);
+
+ return (result);
+}
+
+/*%
+ * Add a NSEC record for "name", recording the change in "diff".
+ * The existing NSEC is removed.
+ */
+static isc_result_t
+add_nsec(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, dns_ttl_t nsecttl,
+ dns_diff_t *diff)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ unsigned char buffer[DNS_NSEC_BUFFERSIZE];
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_difftuple_t *tuple = NULL;
+ dns_fixedname_t fixedname;
+ dns_name_t *target;
+
+ dns_fixedname_init(&fixedname);
+ target = dns_fixedname_name(&fixedname);
+
+ /*
+ * Find the successor name, aka NSEC target.
+ */
+ CHECK(next_active(log, zone, db, ver, name, target, ISC_TRUE));
+
+ /*
+ * Create the NSEC RDATA.
+ */
+ CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
+ dns_rdata_init(&rdata);
+ CHECK(dns_nsec_buildrdata(db, ver, node, target, buffer, &rdata));
+ dns_db_detachnode(db, &node);
+
+ /*
+ * Delete the old NSEC and record the change.
+ */
+ CHECK(delete_if(true_p, db, ver, name, dns_rdatatype_nsec, 0,
+ NULL, diff));
+ /*
+ * Add the new NSEC and record the change.
+ */
+ CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name,
+ nsecttl, &rdata, &tuple));
+ CHECK(do_one_tuple(&tuple, db, ver, diff));
+ INSIST(tuple == NULL);
+
+ failure:
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+/*%
+ * Add a placeholder NSEC record for "name", recording the change in "diff".
+ */
+static isc_result_t
+add_placeholder_nsec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_diff_t *diff)
+{
+ isc_result_t result;
+ dns_difftuple_t *tuple = NULL;
+ isc_region_t r;
+ unsigned char data[1] = { 0 }; /* The root domain, no bits. */
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+
+ r.base = data;
+ r.length = sizeof(data);
+ dns_rdata_fromregion(&rdata, dns_db_class(db), dns_rdatatype_nsec, &r);
+ CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name, 0,
+ &rdata, &tuple));
+ CHECK(do_one_tuple(&tuple, db, ver, diff));
+ failure:
+ return (result);
+}
+
+static isc_result_t
+find_zone_keys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+ isc_mem_t *mctx, unsigned int maxkeys,
+ dst_key_t **keys, unsigned int *nkeys)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ const char *directory = dns_zone_getkeydirectory(zone);
+ CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
+ CHECK(dns_dnssec_findzonekeys2(db, ver, node, dns_db_origin(db),
+ directory, mctx, maxkeys, keys, nkeys));
+ failure:
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+/*%
+ * Add RRSIG records for an RRset, recording the change in "diff".
+ */
+static isc_result_t
+add_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, dns_rdatatype_t type,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
+ isc_stdtime_t inception, isc_stdtime_t expire,
+ isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ dns_rdataset_t rdataset;
+ dns_rdata_t sig_rdata = DNS_RDATA_INIT;
+ isc_buffer_t buffer;
+ unsigned char data[1024]; /* XXX */
+ unsigned int i, j;
+ isc_boolean_t added_sig = ISC_FALSE;
+ isc_mem_t *mctx = diff->mctx;
+
+ dns_rdataset_init(&rdataset);
+ isc_buffer_init(&buffer, data, sizeof(data));
+
+ /* Get the rdataset to sign. */
+ if (type == dns_rdatatype_nsec3)
+ CHECK(dns_db_findnsec3node(db, name, ISC_FALSE, &node));
+ else
+ CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
+ CHECK(dns_db_findrdataset(db, node, ver, type, 0,
+ (isc_stdtime_t) 0, &rdataset, NULL));
+ dns_db_detachnode(db, &node);
+
+#define REVOKE(x) ((dst_key_flags(x) & DNS_KEYFLAG_REVOKE) != 0)
+#define KSK(x) ((dst_key_flags(x) & DNS_KEYFLAG_KSK) != 0)
+#define ALG(x) dst_key_alg(x)
+
+ /*
+ * If we are honoring KSK flags then we need to check that we
+ * have both KSK and non-KSK keys that are not revoked per
+ * algorithm.
+ */
+ for (i = 0; i < nkeys; i++) {
+ isc_boolean_t both = ISC_FALSE;
+
+ if (!dst_key_isprivate(keys[i]))
+ continue;
+
+ if (check_ksk && !REVOKE(keys[i])) {
+ isc_boolean_t have_ksk, have_nonksk;
+ if (KSK(keys[i])) {
+ have_ksk = ISC_TRUE;
+ have_nonksk = ISC_FALSE;
+ } else {
+ have_ksk = ISC_FALSE;
+ have_nonksk = ISC_TRUE;
+ }
+ for (j = 0; j < nkeys; j++) {
+ if (j == i || ALG(keys[i]) != ALG(keys[j]))
+ continue;
+ if (REVOKE(keys[j]))
+ continue;
+ if (KSK(keys[j]))
+ have_ksk = ISC_TRUE;
+ else
+ have_nonksk = ISC_TRUE;
+ both = have_ksk && have_nonksk;
+ if (both)
+ break;
+ }
+ }
+
+ if (both) {
+ if (type == dns_rdatatype_dnskey) {
+ if (!KSK(keys[i]) && keyset_kskonly)
+ continue;
+ } else if (KSK(keys[i]))
+ continue;
+ } else if (REVOKE(keys[i]) && type != dns_rdatatype_dnskey)
+ continue;
+
+ /* Calculate the signature, creating a RRSIG RDATA. */
+ CHECK(dns_dnssec_sign(name, &rdataset, keys[i],
+ &inception, &expire,
+ mctx, &buffer, &sig_rdata));
+
+ /* Update the database and journal with the RRSIG. */
+ /* XXX inefficient - will cause dataset merging */
+ CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADDRESIGN, name,
+ rdataset.ttl, &sig_rdata));
+ dns_rdata_reset(&sig_rdata);
+ isc_buffer_init(&buffer, data, sizeof(data));
+ added_sig = ISC_TRUE;
+ }
+ if (!added_sig) {
+ update_log(log, zone, ISC_LOG_ERROR,
+ "found no active private keys, "
+ "unable to generate any signatures");
+ result = ISC_R_NOTFOUND;
+ }
+
+ failure:
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+/*
+ * Delete expired RRsigs and any RRsigs we are about to re-sign.
+ * See also zone.c:del_sigs().
+ */
+static isc_result_t
+del_keysigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ dns_rdataset_t rdataset;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ unsigned int i;
+ dns_rdata_rrsig_t rrsig;
+ isc_boolean_t found;
+
+ dns_rdataset_init(&rdataset);
+
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_rrsig,
+ dns_rdatatype_dnskey, (isc_stdtime_t) 0,
+ &rdataset, NULL);
+ dns_db_detachnode(db, &node);
+
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ for (result = dns_rdataset_first(&rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&rdataset)) {
+ dns_rdataset_current(&rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &rrsig, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ found = ISC_FALSE;
+ for (i = 0; i < nkeys; i++) {
+ if (rrsig.keyid == dst_key_id(keys[i])) {
+ found = ISC_TRUE;
+ if (!dst_key_isprivate(keys[i])) {
+ /*
+ * The re-signing code in zone.c
+ * will mark this as offline.
+ * Just skip the record for now.
+ */
+ break;
+ }
+ result = update_one_rr(db, ver, diff,
+ DNS_DIFFOP_DEL, name,
+ rdataset.ttl, &rdata);
+ break;
+ }
+ }
+ /*
+ * If there is not a matching DNSKEY then delete the RRSIG.
+ */
+ if (!found)
+ result = update_one_rr(db, ver, diff, DNS_DIFFOP_DEL,
+ name, rdataset.ttl, &rdata);
+ dns_rdata_reset(&rdata);
+ if (result != ISC_R_SUCCESS)
+ break;
+ }
+ dns_rdataset_disassociate(&rdataset);
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+failure:
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+static isc_result_t
+add_exposed_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, isc_boolean_t cut,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
+ isc_stdtime_t inception, isc_stdtime_t expire,
+ isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
+{
+ isc_result_t result;
+ dns_dbnode_t *node;
+ dns_rdatasetiter_t *iter;
+
+ node = NULL;
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ iter = NULL;
+ result = dns_db_allrdatasets(db, node, ver,
+ (isc_stdtime_t) 0, &iter);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdatasetiter_first(iter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(iter))
+ {
+ dns_rdataset_t rdataset;
+ dns_rdatatype_t type;
+ isc_boolean_t flag;
+
+ dns_rdataset_init(&rdataset);
+ dns_rdatasetiter_current(iter, &rdataset);
+ type = rdataset.type;
+ dns_rdataset_disassociate(&rdataset);
+
+ /*
+ * We don't need to sign unsigned NSEC records at the cut
+ * as they are handled elsewhere.
+ */
+ if ((type == dns_rdatatype_rrsig) ||
+ (cut && type != dns_rdatatype_ds))
+ continue;
+ result = rrset_exists(db, ver, name, dns_rdatatype_rrsig,
+ type, &flag);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_iterator;
+ if (flag)
+ continue;;
+ result = add_sigs(log, zone, db, ver, name, type, diff,
+ keys, nkeys, inception, expire,
+ check_ksk, keyset_kskonly);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_iterator;
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ cleanup_iterator:
+ dns_rdatasetiter_destroy(&iter);
+
+ cleanup_node:
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+/*%
+ * Update RRSIG, NSEC and NSEC3 records affected by an update. The original
+ * update, including the SOA serial update but excluding the RRSIG & NSEC
+ * changes, is in "diff" and has already been applied to "newver" of "db".
+ * The database version prior to the update is "oldver".
+ *
+ * The necessary RRSIG, NSEC and NSEC3 changes will be applied to "newver"
+ * and added (as a minimal diff) to "diff".
+ *
+ * The RRSIGs generated will be valid for 'sigvalidityinterval' seconds.
+ */
+isc_result_t
+dns_update_signatures(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *oldver, dns_dbversion_t *newver,
+ dns_diff_t *diff, isc_uint32_t sigvalidityinterval)
+{
+ isc_result_t result;
+ dns_difftuple_t *t;
+ dns_diff_t diffnames;
+ dns_diff_t affected;
+ dns_diff_t sig_diff;
+ dns_diff_t nsec_diff;
+ dns_diff_t nsec_mindiff;
+ isc_boolean_t flag, build_nsec, build_nsec3;
+ dst_key_t *zone_keys[DNS_MAXZONEKEYS];
+ unsigned int nkeys = 0;
+ unsigned int i;
+ isc_stdtime_t now, inception, expire;
+ dns_ttl_t nsecttl;
+ dns_rdata_soa_t soa;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_t rdataset;
+ dns_dbnode_t *node = NULL;
+ isc_boolean_t check_ksk, keyset_kskonly;
+ isc_boolean_t unsecure;
+ isc_boolean_t cut;
+ dns_rdatatype_t privatetype = dns_zone_getprivatetype(zone);
+
+ dns_diff_init(diff->mctx, &diffnames);
+ dns_diff_init(diff->mctx, &affected);
+
+ dns_diff_init(diff->mctx, &sig_diff);
+ sig_diff.resign = dns_zone_getsigresigninginterval(zone);
+ dns_diff_init(diff->mctx, &nsec_diff);
+ dns_diff_init(diff->mctx, &nsec_mindiff);
+
+ result = find_zone_keys(zone, db, newver, diff->mctx,
+ DNS_MAXZONEKEYS, zone_keys, &nkeys);
+ if (result != ISC_R_SUCCESS) {
+ update_log(log, zone, ISC_LOG_ERROR,
+ "could not get zone keys for secure dynamic update");
+ goto failure;
+ }
+
+ isc_stdtime_get(&now);
+ inception = now - 3600; /* Allow for some clock skew. */
+ expire = now + sigvalidityinterval;
+
+ /*
+ * Do we look at the KSK flag on the DNSKEY to determining which
+ * keys sign which RRsets? First check the zone option then
+ * check the keys flags to make sure at least one has a ksk set
+ * and one doesn't.
+ */
+ check_ksk = ISC_TF((dns_zone_getoptions(zone) &
+ DNS_ZONEOPT_UPDATECHECKKSK) != 0);
+ keyset_kskonly = ISC_TF((dns_zone_getoptions(zone) &
+ DNS_ZONEOPT_DNSKEYKSKONLY) != 0);
+
+ /*
+ * Get the NSEC/NSEC3 TTL from the SOA MINIMUM field.
+ */
+ CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
+ dns_rdataset_init(&rdataset);
+ CHECK(dns_db_findrdataset(db, node, newver, dns_rdatatype_soa, 0,
+ (isc_stdtime_t) 0, &rdataset, NULL));
+ CHECK(dns_rdataset_first(&rdataset));
+ dns_rdataset_current(&rdataset, &rdata);
+ CHECK(dns_rdata_tostruct(&rdata, &soa, NULL));
+ nsecttl = soa.minimum;
+ dns_rdataset_disassociate(&rdataset);
+ dns_db_detachnode(db, &node);
+
+ /*
+ * Find all RRsets directly affected by the update, and
+ * update their RRSIGs. Also build a list of names affected
+ * by the update in "diffnames".
+ */
+ CHECK(dns_diff_sort(diff, temp_order));
+
+ t = ISC_LIST_HEAD(diff->tuples);
+ while (t != NULL) {
+ dns_name_t *name = &t->name;
+ /* Now "name" is a new, unique name affected by the update. */
+
+ CHECK(namelist_append_name(&diffnames, name));
+
+ while (t != NULL && dns_name_equal(&t->name, name)) {
+ dns_rdatatype_t type;
+ type = t->rdata.type;
+
+ /*
+ * Now "name" and "type" denote a new unique RRset
+ * affected by the update.
+ */
+
+ /* Don't sign RRSIGs. */
+ if (type == dns_rdatatype_rrsig)
+ goto skip;
+
+ /*
+ * Delete all old RRSIGs covering this type, since they
+ * are all invalid when the signed RRset has changed.
+ * We may not be able to recreate all of them - tough.
+ * Special case changes to the zone's DNSKEY records
+ * to support offline KSKs.
+ */
+ if (type == dns_rdatatype_dnskey)
+ del_keysigs(db, newver, name, &sig_diff,
+ zone_keys, nkeys);
+ else
+ CHECK(delete_if(true_p, db, newver, name,
+ dns_rdatatype_rrsig, type,
+ NULL, &sig_diff));
+
+ /*
+ * If this RRset is still visible after the update,
+ * add a new signature for it.
+ */
+ CHECK(rrset_visible(db, newver, name, type, &flag));
+ if (flag) {
+ CHECK(add_sigs(log, zone, db, newver, name,
+ type, &sig_diff, zone_keys,
+ nkeys, inception, expire,
+ check_ksk, keyset_kskonly));
+ }
+ skip:
+ /* Skip any other updates to the same RRset. */
+ while (t != NULL &&
+ dns_name_equal(&t->name, name) &&
+ t->rdata.type == type)
+ {
+ t = ISC_LIST_NEXT(t, link);
+ }
+ }
+ }
+ update_log(log, zone, ISC_LOG_DEBUG(3), "updated data signatures");
+
+ /* Remove orphaned NSECs and RRSIG NSECs. */
+ for (t = ISC_LIST_HEAD(diffnames.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ CHECK(non_nsec_rrset_exists(db, newver, &t->name, &flag));
+ if (! flag) {
+ CHECK(delete_if(true_p, db, newver, &t->name,
+ dns_rdatatype_any, 0,
+ NULL, &sig_diff));
+ }
+ }
+ update_log(log, zone, ISC_LOG_DEBUG(3),
+ "removed any orphaned NSEC records");
+
+ /*
+ * See if we need to build NSEC or NSEC3 chains.
+ */
+ CHECK(dns_private_chains(db, newver, privatetype, &build_nsec,
+ &build_nsec3));
+ if (!build_nsec)
+ goto update_nsec3;
+
+ update_log(log, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC chain");
+
+ /*
+ * When a name is created or deleted, its predecessor needs to
+ * have its NSEC updated.
+ */
+ for (t = ISC_LIST_HEAD(diffnames.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ isc_boolean_t existed, exists;
+ dns_fixedname_t fixedname;
+ dns_name_t *prevname;
+
+ dns_fixedname_init(&fixedname);
+ prevname = dns_fixedname_name(&fixedname);
+
+ if (oldver != NULL)
+ CHECK(name_exists(db, oldver, &t->name, &existed));
+ else
+ existed = ISC_FALSE;
+ CHECK(name_exists(db, newver, &t->name, &exists));
+ if (exists == existed)
+ continue;
+
+ /*
+ * Find the predecessor.
+ * When names become obscured or unobscured in this update
+ * transaction, we may find the wrong predecessor because
+ * the NSECs have not yet been updated to reflect the delegation
+ * change. This should not matter because in this case,
+ * the correct predecessor is either the delegation node or
+ * a newly unobscured node, and those nodes are on the
+ * "affected" list in any case.
+ */
+ CHECK(next_active(log, zone, db, newver,
+ &t->name, prevname, ISC_FALSE));
+ CHECK(namelist_append_name(&affected, prevname));
+ }
+
+ /*
+ * Find names potentially affected by delegation changes
+ * (obscured by adding an NS or DNAME, or unobscured by
+ * removing one).
+ */
+ for (t = ISC_LIST_HEAD(diffnames.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ isc_boolean_t ns_existed, dname_existed;
+ isc_boolean_t ns_exists, dname_exists;
+
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, &t->name,
+ dns_rdatatype_ns, 0, &ns_existed));
+ else
+ ns_existed = ISC_FALSE;
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, &t->name,
+ dns_rdatatype_dname, 0,
+ &dname_existed));
+ else
+ dname_existed = ISC_FALSE;
+ CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_ns, 0,
+ &ns_exists));
+ CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_dname, 0,
+ &dname_exists));
+ if ((ns_exists || dname_exists) == (ns_existed || dname_existed))
+ continue;
+ /*
+ * There was a delegation change. Mark all subdomains
+ * of t->name as potentially needing a NSEC update.
+ */
+ CHECK(namelist_append_subdomain(db, &t->name, &affected));
+ }
+
+ ISC_LIST_APPENDLIST(affected.tuples, diffnames.tuples, link);
+ INSIST(ISC_LIST_EMPTY(diffnames.tuples));
+
+ CHECK(uniqify_name_list(&affected));
+
+ /*
+ * Determine which names should have NSECs, and delete/create
+ * NSECs to make it so. We don't know the final NSEC targets yet,
+ * so we just create placeholder NSECs with arbitrary contents
+ * to indicate that their respective owner names should be part of
+ * the NSEC chain.
+ */
+ for (t = ISC_LIST_HEAD(affected.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ isc_boolean_t exists;
+ dns_name_t *name = &t->name;
+
+ CHECK(name_exists(db, newver, name, &exists));
+ if (! exists)
+ continue;
+ CHECK(is_active(db, newver, name, &flag, &cut, NULL));
+ if (!flag) {
+ /*
+ * This name is obscured. Delete any
+ * existing NSEC record.
+ */
+ CHECK(delete_if(true_p, db, newver, name,
+ dns_rdatatype_nsec, 0,
+ NULL, &nsec_diff));
+ CHECK(delete_if(rrsig_p, db, newver, name,
+ dns_rdatatype_any, 0, NULL, diff));
+ } else {
+ /*
+ * This name is not obscured. It needs to have a
+ * NSEC unless it is the at the origin, in which
+ * case it should already exist if there is a complete
+ * NSEC chain and if there isn't a complete NSEC chain
+ * we don't want to add one as that would signal that
+ * there is a complete NSEC chain.
+ */
+ if (!dns_name_equal(name, dns_db_origin(db))) {
+ CHECK(rrset_exists(db, newver, name,
+ dns_rdatatype_nsec, 0,
+ &flag));
+ if (!flag)
+ CHECK(add_placeholder_nsec(db, newver,
+ name, diff));
+ }
+ CHECK(add_exposed_sigs(log, zone, db, newver, name,
+ cut, &sig_diff, zone_keys, nkeys,
+ inception, expire, check_ksk,
+ keyset_kskonly));
+ }
+ }
+
+ /*
+ * Now we know which names are part of the NSEC chain.
+ * Make them all point at their correct targets.
+ */
+ for (t = ISC_LIST_HEAD(affected.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ CHECK(rrset_exists(db, newver, &t->name,
+ dns_rdatatype_nsec, 0, &flag));
+ if (flag) {
+ /*
+ * There is a NSEC, but we don't know if it is correct.
+ * Delete it and create a correct one to be sure.
+ * If the update was unnecessary, the diff minimization
+ * will take care of eliminating it from the journal,
+ * IXFRs, etc.
+ *
+ * The RRSIG bit should always be set in the NSECs
+ * we generate, because they will all get RRSIG NSECs.
+ * (XXX what if the zone keys are missing?).
+ * Because the RRSIG NSECs have not necessarily been
+ * created yet, the correctness of the bit mask relies
+ * on the assumption that NSECs are only created if
+ * there is other data, and if there is other data,
+ * there are other RRSIGs.
+ */
+ CHECK(add_nsec(log, zone, db, newver, &t->name,
+ nsecttl, &nsec_diff));
+ }
+ }
+
+ /*
+ * Minimize the set of NSEC updates so that we don't
+ * have to regenerate the RRSIG NSECs for NSECs that were
+ * replaced with identical ones.
+ */
+ while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
+ dns_diff_appendminimal(&nsec_mindiff, &t);
+ }
+
+ update_log(log, zone, ISC_LOG_DEBUG(3), "signing rebuilt NSEC chain");
+
+ /* Update RRSIG NSECs. */
+ for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ if (t->op == DNS_DIFFOP_DEL) {
+ CHECK(delete_if(true_p, db, newver, &t->name,
+ dns_rdatatype_rrsig, dns_rdatatype_nsec,
+ NULL, &sig_diff));
+ } else if (t->op == DNS_DIFFOP_ADD) {
+ CHECK(add_sigs(log, zone, db, newver, &t->name,
+ dns_rdatatype_nsec, &sig_diff,
+ zone_keys, nkeys, inception, expire,
+ check_ksk, keyset_kskonly));
+ } else {
+ INSIST(0);
+ }
+ }
+
+ update_nsec3:
+
+ /* Record our changes for the journal. */
+ while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(sig_diff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+ while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+
+ INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
+
+ if (!build_nsec3) {
+ update_log(log, zone, ISC_LOG_DEBUG(3),
+ "no NSEC3 chains to rebuild");
+ goto failure;
+ }
+
+ update_log(log, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC3 chains");
+
+ dns_diff_clear(&diffnames);
+ dns_diff_clear(&affected);
+
+ CHECK(dns_diff_sort(diff, temp_order));
+
+ /*
+ * Find names potentially affected by delegation changes
+ * (obscured by adding an NS or DNAME, or unobscured by
+ * removing one).
+ */
+ t = ISC_LIST_HEAD(diff->tuples);
+ while (t != NULL) {
+ dns_name_t *name = &t->name;
+
+ isc_boolean_t ns_existed, dname_existed;
+ isc_boolean_t ns_exists, dname_exists;
+ isc_boolean_t exists, existed;
+
+ if (t->rdata.type == dns_rdatatype_nsec ||
+ t->rdata.type == dns_rdatatype_rrsig) {
+ t = ISC_LIST_NEXT(t, link);
+ continue;
+ }
+
+ CHECK(namelist_append_name(&affected, name));
+
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, name, dns_rdatatype_ns,
+ 0, &ns_existed));
+ else
+ ns_existed = ISC_FALSE;
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, name,
+ dns_rdatatype_dname, 0,
+ &dname_existed));
+ else
+ dname_existed = ISC_FALSE;
+ CHECK(rrset_exists(db, newver, name, dns_rdatatype_ns, 0,
+ &ns_exists));
+ CHECK(rrset_exists(db, newver, name, dns_rdatatype_dname, 0,
+ &dname_exists));
+
+ exists = ns_exists || dname_exists;
+ existed = ns_existed || dname_existed;
+ if (exists == existed)
+ goto nextname;
+ /*
+ * There was a delegation change. Mark all subdomains
+ * of t->name as potentially needing a NSEC3 update.
+ */
+ CHECK(namelist_append_subdomain(db, name, &affected));
+
+ nextname:
+ while (t != NULL && dns_name_equal(&t->name, name))
+ t = ISC_LIST_NEXT(t, link);
+ }
+
+ for (t = ISC_LIST_HEAD(affected.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link)) {
+ dns_name_t *name = &t->name;
+
+ unsecure = ISC_FALSE; /* Silence compiler warning. */
+ CHECK(is_active(db, newver, name, &flag, &cut, &unsecure));
+
+ if (!flag) {
+ CHECK(delete_if(rrsig_p, db, newver, name,
+ dns_rdatatype_any, 0, NULL, diff));
+ CHECK(dns_nsec3_delnsec3sx(db, newver, name,
+ privatetype, &nsec_diff));
+ } else {
+ CHECK(add_exposed_sigs(log, zone, db, newver, name,
+ cut, &sig_diff, zone_keys, nkeys,
+ inception, expire, check_ksk,
+ keyset_kskonly));
+ CHECK(dns_nsec3_addnsec3sx(db, newver, name, nsecttl,
+ unsecure, privatetype,
+ &nsec_diff));
+ }
+ }
+
+ /*
+ * Minimize the set of NSEC3 updates so that we don't
+ * have to regenerate the RRSIG NSEC3s for NSEC3s that were
+ * replaced with identical ones.
+ */
+ while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
+ dns_diff_appendminimal(&nsec_mindiff, &t);
+ }
+
+ update_log(log, zone, ISC_LOG_DEBUG(3),
+ "signing rebuilt NSEC3 chain");
+
+ /* Update RRSIG NSEC3s. */
+ for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ if (t->op == DNS_DIFFOP_DEL) {
+ CHECK(delete_if(true_p, db, newver, &t->name,
+ dns_rdatatype_rrsig,
+ dns_rdatatype_nsec3,
+ NULL, &sig_diff));
+ } else if (t->op == DNS_DIFFOP_ADD) {
+ CHECK(add_sigs(log, zone, db, newver, &t->name,
+ dns_rdatatype_nsec3,
+ &sig_diff, zone_keys, nkeys,
+ inception, expire, check_ksk,
+ keyset_kskonly));
+ } else {
+ INSIST(0);
+ }
+ }
+
+ /* Record our changes for the journal. */
+ while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(sig_diff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+ while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+
+ INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
+
+ failure:
+ dns_diff_clear(&sig_diff);
+ dns_diff_clear(&nsec_diff);
+ dns_diff_clear(&nsec_mindiff);
+
+ dns_diff_clear(&affected);
+ dns_diff_clear(&diffnames);
+
+ for (i = 0; i < nkeys; i++)
+ dst_key_free(&zone_keys[i]);
+
+ return (result);
+}
+
+isc_uint32_t
+dns_update_soaserial(isc_uint32_t serial, dns_updatemethod_t method) {
+ isc_stdtime_t now;
+
+ if (method == dns_updatemethod_unixtime) {
+ isc_stdtime_get(&now);
+ if (now != 0 && isc_serial_gt(now, serial))
+ return (now);
+ }
+
+ /* RFC1982 */
+ serial = (serial + 1) & 0xFFFFFFFF;
+ if (serial == 0)
+ serial = 1;
+
+ return (serial);
+}
diff --git a/contrib/bind9/lib/dns/validator.c b/contrib/bind9/lib/dns/validator.c
index 674675fc7396..8cf7f665ec88 100644
--- a/contrib/bind9/lib/dns/validator.c
+++ b/contrib/bind9/lib/dns/validator.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -157,7 +157,7 @@ validator_logv(dns_validator_t *val, isc_logcategory_t *category,
ISC_FORMAT_PRINTF(5, 0);
static void
-validator_log(dns_validator_t *val, int level, const char *fmt, ...)
+validator_log(void *val, int level, const char *fmt, ...)
ISC_FORMAT_PRINTF(3, 4);
static void
@@ -195,6 +195,7 @@ marksecure(dns_validatorevent_t *event) {
dns_rdataset_settrust(event->rdataset, dns_trust_secure);
if (event->sigrdataset != NULL)
dns_rdataset_settrust(event->sigrdataset, dns_trust_secure);
+ event->secure = ISC_TRUE;
}
static void
@@ -403,6 +404,7 @@ fetch_callback_validator(isc_task_t *task, isc_event_t *event) {
isc_result_t result;
isc_result_t eresult;
isc_result_t saved_result;
+ dns_fetch_t *fetch;
UNUSED(task);
INSIST(event->ev_type == DNS_EVENT_FETCHDONE);
@@ -419,12 +421,13 @@ fetch_callback_validator(isc_task_t *task, isc_event_t *event) {
if (dns_rdataset_isassociated(&val->fsigrdataset))
dns_rdataset_disassociate(&val->fsigrdataset);
isc_event_free(&event);
- dns_resolver_destroyfetch(&val->fetch);
INSIST(val->event != NULL);
validator_log(val, ISC_LOG_DEBUG(3), "in fetch_callback_validator");
LOCK(&val->lock);
+ fetch = val->fetch;
+ val->fetch = NULL;
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (eresult == ISC_R_SUCCESS) {
@@ -464,6 +467,8 @@ fetch_callback_validator(isc_task_t *task, isc_event_t *event) {
}
want_destroy = exit_check(val);
UNLOCK(&val->lock);
+ if (fetch != NULL)
+ dns_resolver_destroyfetch(&fetch);
if (want_destroy)
destroy(val);
}
@@ -481,6 +486,7 @@ dsfetched(isc_task_t *task, isc_event_t *event) {
isc_boolean_t want_destroy;
isc_result_t result;
isc_result_t eresult;
+ dns_fetch_t *fetch;
UNUSED(task);
INSIST(event->ev_type == DNS_EVENT_FETCHDONE);
@@ -497,12 +503,13 @@ dsfetched(isc_task_t *task, isc_event_t *event) {
if (dns_rdataset_isassociated(&val->fsigrdataset))
dns_rdataset_disassociate(&val->fsigrdataset);
isc_event_free(&event);
- dns_resolver_destroyfetch(&val->fetch);
INSIST(val->event != NULL);
validator_log(val, ISC_LOG_DEBUG(3), "in dsfetched");
LOCK(&val->lock);
+ fetch = val->fetch;
+ val->fetch = NULL;
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (eresult == ISC_R_SUCCESS) {
@@ -536,6 +543,8 @@ dsfetched(isc_task_t *task, isc_event_t *event) {
}
want_destroy = exit_check(val);
UNLOCK(&val->lock);
+ if (fetch != NULL)
+ dns_resolver_destroyfetch(&fetch);
if (want_destroy)
destroy(val);
}
@@ -559,6 +568,7 @@ dsfetched2(isc_task_t *task, isc_event_t *event) {
isc_boolean_t want_destroy;
isc_result_t result;
isc_result_t eresult;
+ dns_fetch_t *fetch;
UNUSED(task);
INSIST(event->ev_type == DNS_EVENT_FETCHDONE);
@@ -573,13 +583,14 @@ dsfetched2(isc_task_t *task, isc_event_t *event) {
dns_db_detach(&devent->db);
if (dns_rdataset_isassociated(&val->fsigrdataset))
dns_rdataset_disassociate(&val->fsigrdataset);
- dns_resolver_destroyfetch(&val->fetch);
INSIST(val->event != NULL);
validator_log(val, ISC_LOG_DEBUG(3), "in dsfetched2: %s",
dns_result_totext(eresult));
LOCK(&val->lock);
+ fetch = val->fetch;
+ val->fetch = NULL;
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (eresult == DNS_R_CNAME ||
@@ -632,6 +643,8 @@ dsfetched2(isc_task_t *task, isc_event_t *event) {
isc_event_free(&event);
want_destroy = exit_check(val);
UNLOCK(&val->lock);
+ if (fetch != NULL)
+ dns_resolver_destroyfetch(&fetch);
if (want_destroy)
destroy(val);
}
@@ -839,452 +852,6 @@ cnamevalidated(isc_task_t *task, isc_event_t *event) {
}
/*%
- * Return ISC_R_SUCCESS if we can determine that the name doesn't exist
- * or we can determine whether there is data or not at the name.
- * If the name does not exist return the wildcard name.
- *
- * Return ISC_R_IGNORE when the NSEC is not the appropriate one.
- */
-static isc_result_t
-nsecnoexistnodata(dns_validator_t *val, dns_name_t *name, dns_name_t *nsecname,
- dns_rdataset_t *nsecset, isc_boolean_t *exists,
- isc_boolean_t *data, dns_name_t *wild)
-{
- int order;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- isc_result_t result;
- dns_namereln_t relation;
- unsigned int olabels, nlabels, labels;
- dns_rdata_nsec_t nsec;
- isc_boolean_t atparent;
- isc_boolean_t ns;
- isc_boolean_t soa;
-
- REQUIRE(exists != NULL);
- REQUIRE(data != NULL);
- REQUIRE(nsecset != NULL &&
- nsecset->type == dns_rdatatype_nsec);
-
- result = dns_rdataset_first(nsecset);
- if (result != ISC_R_SUCCESS) {
- validator_log(val, ISC_LOG_DEBUG(3),
- "failure processing NSEC set");
- return (result);
- }
- dns_rdataset_current(nsecset, &rdata);
-
- validator_log(val, ISC_LOG_DEBUG(3), "looking for relevant nsec");
- relation = dns_name_fullcompare(name, nsecname, &order, &olabels);
-
- if (order < 0) {
- /*
- * The name is not within the NSEC range.
- */
- validator_log(val, ISC_LOG_DEBUG(3),
- "NSEC does not cover name, before NSEC");
- return (ISC_R_IGNORE);
- }
-
- if (order == 0) {
- /*
- * The names are the same. If we are validating "."
- * then atparent should not be set as there is no parent.
- */
- atparent = (olabels != 1) &&
- dns_rdatatype_atparent(val->event->type);
- ns = dns_nsec_typepresent(&rdata, dns_rdatatype_ns);
- soa = dns_nsec_typepresent(&rdata, dns_rdatatype_soa);
- if (ns && !soa) {
- if (!atparent) {
- /*
- * This NSEC record is from somewhere higher in
- * the DNS, and at the parent of a delegation.
- * It can not be legitimately used here.
- */
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring parent nsec");
- return (ISC_R_IGNORE);
- }
- } else if (atparent && ns && soa) {
- /*
- * This NSEC record is from the child.
- * It can not be legitimately used here.
- */
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring child nsec");
- return (ISC_R_IGNORE);
- }
- if (val->event->type == dns_rdatatype_cname ||
- val->event->type == dns_rdatatype_nxt ||
- val->event->type == dns_rdatatype_nsec ||
- val->event->type == dns_rdatatype_key ||
- !dns_nsec_typepresent(&rdata, dns_rdatatype_cname)) {
- *exists = ISC_TRUE;
- *data = dns_nsec_typepresent(&rdata, val->event->type);
- validator_log(val, ISC_LOG_DEBUG(3),
- "nsec proves name exists (owner) data=%d",
- *data);
- return (ISC_R_SUCCESS);
- }
- validator_log(val, ISC_LOG_DEBUG(3), "NSEC proves CNAME exists");
- return (ISC_R_IGNORE);
- }
-
- if (relation == dns_namereln_subdomain &&
- dns_nsec_typepresent(&rdata, dns_rdatatype_ns) &&
- !dns_nsec_typepresent(&rdata, dns_rdatatype_soa))
- {
- /*
- * This NSEC record is from somewhere higher in
- * the DNS, and at the parent of a delegation.
- * It can not be legitimately used here.
- */
- validator_log(val, ISC_LOG_DEBUG(3), "ignoring parent nsec");
- return (ISC_R_IGNORE);
- }
-
- result = dns_rdata_tostruct(&rdata, &nsec, NULL);
- if (result != ISC_R_SUCCESS)
- return (result);
- relation = dns_name_fullcompare(&nsec.next, name, &order, &nlabels);
- if (order == 0) {
- dns_rdata_freestruct(&nsec);
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring nsec matches next name");
- return (ISC_R_IGNORE);
- }
-
- if (order < 0 && !dns_name_issubdomain(nsecname, &nsec.next)) {
- /*
- * The name is not within the NSEC range.
- */
- dns_rdata_freestruct(&nsec);
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring nsec because name is past end of range");
- return (ISC_R_IGNORE);
- }
-
- if (order > 0 && relation == dns_namereln_subdomain) {
- validator_log(val, ISC_LOG_DEBUG(3),
- "nsec proves name exist (empty)");
- dns_rdata_freestruct(&nsec);
- *exists = ISC_TRUE;
- *data = ISC_FALSE;
- return (ISC_R_SUCCESS);
- }
- if (wild != NULL) {
- dns_name_t common;
- dns_name_init(&common, NULL);
- if (olabels > nlabels) {
- labels = dns_name_countlabels(nsecname);
- dns_name_getlabelsequence(nsecname, labels - olabels,
- olabels, &common);
- } else {
- labels = dns_name_countlabels(&nsec.next);
- dns_name_getlabelsequence(&nsec.next, labels - nlabels,
- nlabels, &common);
- }
- result = dns_name_concatenate(dns_wildcardname, &common,
- wild, NULL);
- if (result != ISC_R_SUCCESS) {
- dns_rdata_freestruct(&nsec);
- validator_log(val, ISC_LOG_DEBUG(3),
- "failure generating wildcard name");
- return (result);
- }
- }
- dns_rdata_freestruct(&nsec);
- validator_log(val, ISC_LOG_DEBUG(3), "nsec range ok");
- *exists = ISC_FALSE;
- return (ISC_R_SUCCESS);
-}
-
-static isc_result_t
-nsec3noexistnodata(dns_validator_t *val, dns_name_t* name,
- dns_name_t *nsec3name, dns_rdataset_t *nsec3set,
- dns_name_t *zonename, isc_boolean_t *exists,
- isc_boolean_t *data, isc_boolean_t *optout,
- isc_boolean_t *unknown, isc_boolean_t *setclosest,
- isc_boolean_t *setnearest, dns_name_t *closest,
- dns_name_t *nearest)
-{
- char namebuf[DNS_NAME_FORMATSIZE];
- dns_fixedname_t fzone;
- dns_fixedname_t qfixed;
- dns_label_t hashlabel;
- dns_name_t *qname;
- dns_name_t *zone;
- dns_rdata_nsec3_t nsec3;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- int order;
- int scope;
- isc_boolean_t atparent;
- isc_boolean_t first;
- isc_boolean_t ns;
- isc_boolean_t soa;
- isc_buffer_t buffer;
- isc_result_t answer = ISC_R_IGNORE;
- isc_result_t result;
- unsigned char hash[NSEC3_MAX_HASH_LENGTH];
- unsigned char owner[NSEC3_MAX_HASH_LENGTH];
- unsigned int length;
- unsigned int qlabels;
- unsigned int zlabels;
-
- REQUIRE((exists == NULL && data == NULL) ||
- (exists != NULL && data != NULL));
- REQUIRE(nsec3set != NULL && nsec3set->type == dns_rdatatype_nsec3);
- REQUIRE((setclosest == NULL && closest == NULL) ||
- (setclosest != NULL && closest != NULL));
- REQUIRE((setnearest == NULL && nearest == NULL) ||
- (setnearest != NULL && nearest != NULL));
-
- result = dns_rdataset_first(nsec3set);
- if (result != ISC_R_SUCCESS) {
- validator_log(val, ISC_LOG_DEBUG(3),
- "failure processing NSEC3 set");
- return (result);
- }
-
- dns_rdataset_current(nsec3set, &rdata);
-
- result = dns_rdata_tostruct(&rdata, &nsec3, NULL);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- validator_log(val, ISC_LOG_DEBUG(3), "looking for relevant NSEC3");
-
- dns_fixedname_init(&fzone);
- zone = dns_fixedname_name(&fzone);
- zlabels = dns_name_countlabels(nsec3name);
-
- /*
- * NSEC3 records must have two or more labels to be valid.
- */
- if (zlabels < 2)
- return (ISC_R_IGNORE);
-
- /*
- * Strip off the NSEC3 hash to get the zone.
- */
- zlabels--;
- dns_name_split(nsec3name, zlabels, NULL, zone);
-
- /*
- * If not below the zone name we can ignore this record.
- */
- if (!dns_name_issubdomain(name, zone))
- return (ISC_R_IGNORE);
-
- /*
- * Is this zone the same or deeper than the current zone?
- */
- if (dns_name_countlabels(zonename) == 0 ||
- dns_name_issubdomain(zone, zonename))
- dns_name_copy(zone, zonename, NULL);
-
- if (!dns_name_equal(zone, zonename))
- return (ISC_R_IGNORE);
-
- /*
- * Are we only looking for the most enclosing zone?
- */
- if (exists == NULL || data == NULL)
- return (ISC_R_SUCCESS);
-
- /*
- * Only set unknown once we are sure that this NSEC3 is from
- * the deepest covering zone.
- */
- if (!dns_nsec3_supportedhash(nsec3.hash)) {
- if (unknown != NULL)
- *unknown = ISC_TRUE;
- return (ISC_R_IGNORE);
- }
-
- /*
- * Recover the hash from the first label.
- */
- dns_name_getlabel(nsec3name, 0, &hashlabel);
- isc_region_consume(&hashlabel, 1);
- isc_buffer_init(&buffer, owner, sizeof(owner));
- result = isc_base32hex_decoderegion(&hashlabel, &buffer);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- /*
- * The hash lengths should match. If not ignore the record.
- */
- if (isc_buffer_usedlength(&buffer) != nsec3.next_length)
- return (ISC_R_IGNORE);
-
- /*
- * Work out what this NSEC3 covers.
- * Inside (<0) or outside (>=0).
- */
- scope = memcmp(owner, nsec3.next, nsec3.next_length);
-
- /*
- * Prepare to compute all the hashes.
- */
- dns_fixedname_init(&qfixed);
- qname = dns_fixedname_name(&qfixed);
- dns_name_downcase(name, qname, NULL);
- qlabels = dns_name_countlabels(qname);
- first = ISC_TRUE;
-
- while (qlabels >= zlabels) {
- length = isc_iterated_hash(hash, nsec3.hash, nsec3.iterations,
- nsec3.salt, nsec3.salt_length,
- qname->ndata, qname->length);
- /*
- * The computed hash length should match.
- */
- if (length != nsec3.next_length) {
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring NSEC bad length %u vs %u",
- length, nsec3.next_length);
- return (ISC_R_IGNORE);
- }
-
- order = memcmp(hash, owner, length);
- if (first && order == 0) {
- /*
- * The hashes are the same.
- */
- atparent = dns_rdatatype_atparent(val->event->type);
- ns = dns_nsec3_typepresent(&rdata, dns_rdatatype_ns);
- soa = dns_nsec3_typepresent(&rdata, dns_rdatatype_soa);
- if (ns && !soa) {
- if (!atparent) {
- /*
- * This NSEC3 record is from somewhere
- * higher in the DNS, and at the
- * parent of a delegation. It can not
- * be legitimately used here.
- */
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring parent NSEC3");
- return (ISC_R_IGNORE);
- }
- } else if (atparent && ns && soa) {
- /*
- * This NSEC3 record is from the child.
- * It can not be legitimately used here.
- */
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring child NSEC3");
- return (ISC_R_IGNORE);
- }
- if (val->event->type == dns_rdatatype_cname ||
- val->event->type == dns_rdatatype_nxt ||
- val->event->type == dns_rdatatype_nsec ||
- val->event->type == dns_rdatatype_key ||
- !dns_nsec3_typepresent(&rdata, dns_rdatatype_cname)) {
- *exists = ISC_TRUE;
- *data = dns_nsec3_typepresent(&rdata,
- val->event->type);
- validator_log(val, ISC_LOG_DEBUG(3),
- "NSEC3 proves name exists (owner) "
- "data=%d", *data);
- return (ISC_R_SUCCESS);
- }
- validator_log(val, ISC_LOG_DEBUG(3),
- "NSEC3 proves CNAME exists");
- return (ISC_R_IGNORE);
- }
-
- if (order == 0 &&
- dns_nsec3_typepresent(&rdata, dns_rdatatype_ns) &&
- !dns_nsec3_typepresent(&rdata, dns_rdatatype_soa))
- {
- /*
- * This NSEC3 record is from somewhere higher in
- * the DNS, and at the parent of a delegation.
- * It can not be legitimately used here.
- */
- validator_log(val, ISC_LOG_DEBUG(3),
- "ignoring parent NSEC3");
- return (ISC_R_IGNORE);
- }
-
- /*
- * Potential closest encloser.
- */
- if (order == 0) {
- if (closest != NULL &&
- (dns_name_countlabels(closest) == 0 ||
- dns_name_issubdomain(qname, closest)) &&
- !dns_nsec3_typepresent(&rdata, dns_rdatatype_ds) &&
- !dns_nsec3_typepresent(&rdata, dns_rdatatype_dname) &&
- (dns_nsec3_typepresent(&rdata, dns_rdatatype_soa) ||
- !dns_nsec3_typepresent(&rdata, dns_rdatatype_ns)))
- {
-
- dns_name_format(qname, namebuf,
- sizeof(namebuf));
- validator_log(val, ISC_LOG_DEBUG(3),
- "NSEC3 indicates potential "
- "closest encloser: '%s'",
- namebuf);
- dns_name_copy(qname, closest, NULL);
- *setclosest = ISC_TRUE;
- }
- dns_name_format(qname, namebuf, sizeof(namebuf));
- validator_log(val, ISC_LOG_DEBUG(3),
- "NSEC3 at super-domain %s", namebuf);
- return (answer);
- }
-
- /*
- * Find if the name does not exist.
- *
- * We continue as we need to find the name closest to the
- * closest encloser that doesn't exist.
- *
- * We also need to continue to ensure that we are not
- * proving the non-existence of a record in a sub-zone.
- * If that would be the case we will return ISC_R_IGNORE
- * above.
- */
- if ((scope < 0 && order > 0 &&
- memcmp(hash, nsec3.next, length) < 0) ||
- (scope >= 0 && (order > 0 ||
- memcmp(hash, nsec3.next, length) < 0)))
- {
- char namebuf[DNS_NAME_FORMATSIZE];
-
- dns_name_format(qname, namebuf, sizeof(namebuf));
- validator_log(val, ISC_LOG_DEBUG(3), "NSEC3 proves "
- "name does not exist: '%s'", namebuf);
- if (nearest != NULL &&
- (dns_name_countlabels(nearest) == 0 ||
- dns_name_issubdomain(nearest, qname))) {
- dns_name_copy(qname, nearest, NULL);
- *setnearest = ISC_TRUE;
- }
-
- *exists = ISC_FALSE;
- *data = ISC_FALSE;
- if (optout != NULL) {
- if ((nsec3.flags & DNS_NSEC3FLAG_OPTOUT) != 0)
- validator_log(val, ISC_LOG_DEBUG(3),
- "NSEC3 indicates optout");
- *optout =
- ISC_TF(nsec3.flags & DNS_NSEC3FLAG_OPTOUT);
- }
- answer = ISC_R_SUCCESS;
- }
-
- qlabels--;
- if (qlabels > 0)
- dns_name_split(qname, qlabels, NULL, qname);
- first = ISC_FALSE;
- }
- return (answer);
-}
-
-/*%
* Callback for when NSEC records have been validated.
*
* Looks for NOQNAME, NODATA and OPTOUT proofs.
@@ -1339,8 +906,9 @@ authvalidated(isc_task_t *task, isc_event_t *event) {
rdataset->trust == dns_trust_secure &&
(NEEDNODATA(val) || NEEDNOQNAME(val)) &&
!FOUNDNODATA(val) && !FOUNDNOQNAME(val) &&
- nsecnoexistnodata(val, val->event->name, devent->name,
- rdataset, &exists, &data, wild)
+ dns_nsec_noexistnodata(val->event->type, val->event->name,
+ devent->name, rdataset, &exists,
+ &data, wild, validator_log, val)
== ISC_R_SUCCESS)
{
if (exists && !data) {
@@ -1413,9 +981,6 @@ view_find(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type) {
if (dns_rdataset_isassociated(&val->fsigrdataset))
dns_rdataset_disassociate(&val->fsigrdataset);
- if (val->view->zonetable == NULL)
- return (ISC_R_CANCELED);
-
if (isc_time_now(&now) == ISC_R_SUCCESS &&
dns_resolver_getbadcache(val->view->resolver, name, type, &now)) {
@@ -1859,6 +1424,10 @@ isselfsigned(dns_validator_t *val) {
name = val->event->name;
mctx = val->view->mctx;
+ if (rdataset->type == dns_rdatatype_cname ||
+ rdataset->type == dns_rdatatype_dname)
+ return (answer);
+
INSIST(rdataset->type == dns_rdatatype_dnskey);
for (result = dns_rdataset_first(rdataset);
@@ -1890,8 +1459,10 @@ isselfsigned(dns_validator_t *val) {
if (result != ISC_R_SUCCESS)
continue;
- result = dns_dnssec_verify2(name, rdataset, dstkey,
- ISC_TRUE, mctx, &sigrdata,
+ result = dns_dnssec_verify3(name, rdataset, dstkey,
+ ISC_TRUE,
+ val->view->maxbits,
+ mctx, &sigrdata,
dns_fixedname_name(&fixed));
dst_key_free(&dstkey);
if (result != ISC_R_SUCCESS)
@@ -1928,8 +1499,9 @@ verify(dns_validator_t *val, dst_key_t *key, dns_rdata_t *rdata,
dns_fixedname_init(&fixed);
wild = dns_fixedname_name(&fixed);
again:
- result = dns_dnssec_verify2(val->event->name, val->event->rdataset,
- key, ignore, val->view->mctx, rdata, wild);
+ result = dns_dnssec_verify3(val->event->name, val->event->rdataset,
+ key, ignore, val->view->maxbits,
+ val->view->mctx, rdata, wild);
if ((result == DNS_R_SIGEXPIRED || result == DNS_R_SIGFUTURE) &&
val->view->acceptexpired)
{
@@ -2831,8 +2403,9 @@ checkwildcard(dns_validator_t *val, dns_rdatatype_t type, dns_name_t *zonename)
if (rdataset->type == dns_rdatatype_nsec &&
(NEEDNODATA(val) || NEEDNOWILDCARD(val)) &&
!FOUNDNODATA(val) && !FOUNDNOWILDCARD(val) &&
- nsecnoexistnodata(val, wild, name, rdataset,
- &exists, &data, NULL)
+ dns_nsec_noexistnodata(val->event->type, wild, name,
+ rdataset, &exists, &data, NULL,
+ validator_log, val)
== ISC_R_SUCCESS)
{
dns_name_t **proofs = val->event->proofs;
@@ -2855,10 +2428,11 @@ checkwildcard(dns_validator_t *val, dns_rdatatype_t type, dns_name_t *zonename)
if (rdataset->type == dns_rdatatype_nsec3 &&
(NEEDNODATA(val) || NEEDNOWILDCARD(val)) &&
!FOUNDNODATA(val) && !FOUNDNOWILDCARD(val) &&
- nsec3noexistnodata(val, wild, name, rdataset,
- zonename, &exists, &data,
- NULL, NULL, NULL, NULL, NULL,
- NULL) == ISC_R_SUCCESS)
+ dns_nsec3_noexistnodata(val->event->type, wild, name,
+ rdataset, zonename, &exists, &data,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ validator_log, val)
+ == ISC_R_SUCCESS)
{
dns_name_t **proofs = val->event->proofs;
if (exists && !data)
@@ -2920,11 +2494,12 @@ findnsec3proofs(dns_validator_t *val) {
rdataset->trust != dns_trust_secure)
continue;
- result = nsec3noexistnodata(val, val->event->name,
- name, rdataset,
- zonename, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL);
+ result = dns_nsec3_noexistnodata(val->event->type,
+ val->event->name, name,
+ rdataset, zonename, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, validator_log,
+ val);
if (result != ISC_R_IGNORE && result != ISC_R_SUCCESS) {
if (dns_rdataset_isassociated(&trdataset))
dns_rdataset_disassociate(&trdataset);
@@ -2972,16 +2547,19 @@ findnsec3proofs(dns_validator_t *val) {
setclosest = setnearest = ISC_FALSE;
optout = ISC_FALSE;
unknown = ISC_FALSE;
- (void)nsec3noexistnodata(val, val->event->name, name, rdataset,
- zonename, &exists, &data, &optout,
- &unknown, setclosestp, &setnearest,
- closestp, nearest);
- if (setclosest)
- proofs[DNS_VALIDATOR_CLOSESTENCLOSER] = name;
+ result = dns_nsec3_noexistnodata(val->event->type,
+ val->event->name,
+ name, rdataset, zonename,
+ &exists, &data, &optout,
+ &unknown, setclosestp,
+ &setnearest, closestp,
+ nearest, validator_log, val);
if (unknown)
val->attributes |= VALATTR_FOUNDUNKNOWN;
if (result != ISC_R_SUCCESS)
continue;
+ if (setclosest)
+ proofs[DNS_VALIDATOR_CLOSESTENCLOSER] = name;
if (exists && !data && NEEDNODATA(val)) {
val->attributes |= VALATTR_FOUNDNODATA;
proofs[DNS_VALIDATOR_NODATAPROOF] = name;
@@ -3272,6 +2850,8 @@ nsecvalidate(dns_validator_t *val, isc_boolean_t resume) {
"nonexistence proof(s) found");
if (val->event->message == NULL)
marksecure(val->event);
+ else
+ val->event->secure = ISC_TRUE;
return (ISC_R_SUCCESS);
}
@@ -3374,6 +2954,7 @@ dlvfetched(isc_task_t *task, isc_event_t *event) {
isc_boolean_t want_destroy;
isc_result_t eresult;
isc_result_t result;
+ dns_fetch_t *fetch;
UNUSED(task);
INSIST(event->ev_type == DNS_EVENT_FETCHDONE);
@@ -3389,13 +2970,14 @@ dlvfetched(isc_task_t *task, isc_event_t *event) {
if (dns_rdataset_isassociated(&val->fsigrdataset))
dns_rdataset_disassociate(&val->fsigrdataset);
isc_event_free(&event);
- dns_resolver_destroyfetch(&val->fetch);
INSIST(val->event != NULL);
validator_log(val, ISC_LOG_DEBUG(3), "in dlvfetched: %s",
dns_result_totext(eresult));
LOCK(&val->lock);
+ fetch = val->fetch;
+ val->fetch = NULL;
if (eresult == ISC_R_SUCCESS) {
dns_name_format(dns_fixedname_name(&val->dlvsep), namebuf,
sizeof(namebuf));
@@ -3448,6 +3030,8 @@ dlvfetched(isc_task_t *task, isc_event_t *event) {
}
want_destroy = exit_check(val);
UNLOCK(&val->lock);
+ if (fetch != NULL)
+ dns_resolver_destroyfetch(&fetch);
if (want_destroy)
destroy(val);
}
@@ -4155,6 +3739,7 @@ dns_validator_create(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
event->message = message;
memset(event->proofs, 0, sizeof(event->proofs));
event->optout = ISC_FALSE;
+ event->secure = ISC_FALSE;
result = isc_mutex_init(&val->lock);
if (result != ISC_R_SUCCESS)
goto cleanup_event;
@@ -4230,6 +3815,8 @@ dns_validator_send(dns_validator_t *validator) {
void
dns_validator_cancel(dns_validator_t *validator) {
+ dns_fetch_t *fetch = NULL;
+
REQUIRE(VALID_VALIDATOR(validator));
LOCK(&validator->lock);
@@ -4239,8 +3826,8 @@ dns_validator_cancel(dns_validator_t *validator) {
if ((validator->attributes & VALATTR_CANCELED) == 0) {
validator->attributes |= VALATTR_CANCELED;
if (validator->event != NULL) {
- if (validator->fetch != NULL)
- dns_resolver_cancelfetch(validator->fetch);
+ fetch = validator->fetch;
+ validator->fetch = NULL;
if (validator->subvalidator != NULL)
dns_validator_cancel(validator->subvalidator);
@@ -4251,6 +3838,12 @@ dns_validator_cancel(dns_validator_t *validator) {
}
}
UNLOCK(&validator->lock);
+
+ /* Need to cancel and destroy the fetch outside validator lock */
+ if (fetch != NULL) {
+ dns_resolver_cancelfetch(fetch);
+ dns_resolver_destroyfetch(&fetch);
+ }
}
static void
@@ -4339,7 +3932,7 @@ validator_logv(dns_validator_t *val, isc_logcategory_t *category,
}
static void
-validator_log(dns_validator_t *val, int level, const char *fmt, ...) {
+validator_log(void *val, int level, const char *fmt, ...) {
va_list ap;
if (! isc_log_wouldlog(dns_lctx, level))
diff --git a/contrib/bind9/lib/dns/view.c b/contrib/bind9/lib/dns/view.c
index 675005863ea8..9c1a201a8bd9 100644
--- a/contrib/bind9/lib/dns/view.c
+++ b/contrib/bind9/lib/dns/view.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -35,6 +35,7 @@
#include <dns/adb.h>
#include <dns/cache.h>
#include <dns/db.h>
+#include <dns/dispatch.h>
#include <dns/dlz.h>
#ifdef BIND9
#include <dns/dns64.h>
@@ -86,6 +87,9 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view = isc_mem_get(mctx, sizeof(*view));
if (view == NULL)
return (ISC_R_NOMEMORY);
+
+ view->mctx = NULL;
+ isc_mem_attach(mctx, &view->mctx);
view->name = isc_mem_strdup(mctx, name);
if (view->name == NULL) {
result = ISC_R_NOMEMORY;
@@ -95,8 +99,8 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
if (result != ISC_R_SUCCESS)
goto cleanup_name;
-#ifdef BIND9
view->zonetable = NULL;
+#ifdef BIND9
result = dns_zt_create(mctx, rdclass, &view->zonetable);
if (result != ISC_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
@@ -125,7 +129,6 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view->resolver = NULL;
view->adb = NULL;
view->requestmgr = NULL;
- view->mctx = mctx;
view->rdclass = rdclass;
view->frozen = ISC_FALSE;
view->task = NULL;
@@ -181,7 +184,6 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view->answeracl_exclude = NULL;
view->denyanswernames = NULL;
view->answernames_exclude = NULL;
- view->requestixfr = ISC_TRUE;
view->provideixfr = ISC_TRUE;
view->maxcachettl = 7 * 24 * 3600;
view->maxncachettl = 3 * 3600;
@@ -190,6 +192,7 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view->flush = ISC_FALSE;
view->dlv = NULL;
view->maxudp = 0;
+ view->maxbits = 0;
view->v4_aaaa = dns_v4_aaaa_ok;
view->v4_aaaa_acl = NULL;
ISC_LIST_INIT(view->rpz_zones);
@@ -197,6 +200,7 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view->rpz_break_dnssec = ISC_FALSE;
dns_fixedname_init(&view->dlv_fixed);
view->managed_keys = NULL;
+ view->redirect = NULL;
#ifdef BIND9
view->new_zone_file = NULL;
view->new_zone_config = NULL;
@@ -225,6 +229,7 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
ISC_EVENT_INIT(&view->reqevent, sizeof(view->reqevent), 0, NULL,
DNS_EVENT_VIEWREQSHUTDOWN, req_shutdown,
view, NULL, NULL, NULL);
+ view->viewlist = NULL;
view->magic = DNS_VIEW_MAGIC;
*viewp = view;
@@ -260,7 +265,7 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
isc_mem_free(mctx, view->name);
cleanup_view:
- isc_mem_put(mctx, view, sizeof(*view));
+ isc_mem_putanddetach(&view->mctx, view, sizeof(*view));
return (result);
}
@@ -432,6 +437,8 @@ destroy(dns_view_t *view) {
}
if (view->managed_keys != NULL)
dns_zone_detach(&view->managed_keys);
+ if (view->redirect != NULL)
+ dns_zone_detach(&view->redirect);
dns_view_setnewzones(view, ISC_FALSE, NULL, NULL);
#endif
dns_fwdtable_destroy(&view->fwdtable);
@@ -439,7 +446,7 @@ destroy(dns_view_t *view) {
DESTROYLOCK(&view->lock);
isc_refcount_destroy(&view->references);
isc_mem_free(view->mctx, view->name);
- isc_mem_put(view->mctx, view, sizeof(*view));
+ isc_mem_putanddetach(&view->mctx, view, sizeof(*view));
}
/*
@@ -482,6 +489,10 @@ view_flushanddetach(dns_view_t **viewp, isc_boolean_t flush) {
view->flush = ISC_TRUE;
isc_refcount_decrement(&view->references, &refs);
if (refs == 0) {
+#ifdef BIND9
+ dns_zone_t *mkzone = NULL, *rdzone = NULL;
+#endif
+
LOCK(&view->lock);
if (!RESSHUTDOWN(view))
dns_resolver_shutdown(view->resolver);
@@ -497,13 +508,29 @@ view_flushanddetach(dns_view_t **viewp, isc_boolean_t flush) {
else
dns_zt_detach(&view->zonetable);
if (view->managed_keys != NULL) {
+ mkzone = view->managed_keys;
+ view->managed_keys = NULL;
+ if (view->flush)
+ dns_zone_flush(mkzone);
+ }
+ if (view->redirect != NULL) {
+ rdzone = view->redirect;
+ view->redirect = NULL;
if (view->flush)
- dns_zone_flush(view->managed_keys);
- dns_zone_detach(&view->managed_keys);
+ dns_zone_flush(rdzone);
}
#endif
done = all_done(view);
UNLOCK(&view->lock);
+
+#ifdef BIND9
+ /* Need to detach zones outside view lock */
+ if (mkzone != NULL)
+ dns_zone_detach(&mkzone);
+
+ if (rdzone != NULL)
+ dns_zone_detach(&rdzone);
+#endif
}
*viewp = NULL;
@@ -647,7 +674,8 @@ req_shutdown(isc_task_t *task, isc_event_t *event) {
isc_result_t
dns_view_createresolver(dns_view_t *view,
- isc_taskmgr_t *taskmgr, unsigned int ntasks,
+ isc_taskmgr_t *taskmgr,
+ unsigned int ntasks, unsigned int ndisp,
isc_socketmgr_t *socketmgr,
isc_timermgr_t *timermgr,
unsigned int options,
@@ -668,7 +696,7 @@ dns_view_createresolver(dns_view_t *view,
return (result);
isc_task_setname(view->task, "view", view);
- result = dns_resolver_create(view, taskmgr, ntasks, socketmgr,
+ result = dns_resolver_create(view, taskmgr, ntasks, ndisp, socketmgr,
timermgr, options, dispatchmgr,
dispatchv4, dispatchv6,
&view->resolver);
@@ -700,8 +728,7 @@ dns_view_createresolver(dns_view_t *view,
result = dns_requestmgr_create(view->mctx, timermgr, socketmgr,
dns_resolver_taskmgr(view->resolver),
dns_resolver_dispatchmgr(view->resolver),
- dns_resolver_dispatchv4(view->resolver),
- dns_resolver_dispatchv6(view->resolver),
+ dispatchv4, dispatchv6,
&view->requestmgr);
if (result != ISC_R_SUCCESS) {
dns_adb_shutdown(view->adb);
@@ -855,11 +882,14 @@ dns_view_findzone(dns_view_t *view, dns_name_t *name, dns_zone_t **zonep) {
REQUIRE(DNS_VIEW_VALID(view));
- result = dns_zt_find(view->zonetable, name, 0, NULL, zonep);
- if (result == DNS_R_PARTIALMATCH) {
- dns_zone_detach(zonep);
+ if (view->zonetable != NULL) {
+ result = dns_zt_find(view->zonetable, name, 0, NULL, zonep);
+ if (result == DNS_R_PARTIALMATCH) {
+ dns_zone_detach(zonep);
+ result = ISC_R_NOTFOUND;
+ }
+ } else
result = ISC_R_NOTFOUND;
- }
return (result);
}
@@ -892,6 +922,7 @@ dns_view_find2(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
#ifndef BIND9
UNUSED(use_hints);
UNUSED(use_static_stub);
+ UNUSED(zone);
#endif
/*
@@ -916,11 +947,11 @@ dns_view_find2(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
/*
* Find a database to answer the query.
*/
- zone = NULL;
db = NULL;
node = NULL;
is_staticstub_zone = ISC_FALSE;
#ifdef BIND9
+ zone = NULL;
result = dns_zt_find(view->zonetable, name, 0, NULL, &zone);
if (zone != NULL && dns_zone_gettype(zone) == dns_zone_staticstub &&
!use_static_stub) {
@@ -1168,11 +1199,14 @@ dns_view_findzonecut2(dns_view_t *view, dns_name_t *name, dns_name_t *fname,
dns_rdataset_t zrdataset, zsigrdataset;
dns_fixedname_t zfixedname;
+#ifndef BIND9
+ UNUSED(zone);
+#endif
+
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(view->frozen);
db = NULL;
- zone = NULL;
use_zone = ISC_FALSE;
try_hints = ISC_FALSE;
zfname = NULL;
@@ -1188,6 +1222,7 @@ dns_view_findzonecut2(dns_view_t *view, dns_name_t *name, dns_name_t *fname,
* Find the right database.
*/
#ifdef BIND9
+ zone = NULL;
result = dns_zt_find(view->zonetable, name, 0, NULL, &zone);
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH)
result = dns_zone_getdb(zone, &db);
@@ -1412,6 +1447,7 @@ isc_result_t
dns_view_load(dns_view_t *view, isc_boolean_t stop) {
REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(view->zonetable != NULL);
return (dns_zt_load(view->zonetable, stop));
}
@@ -1420,9 +1456,20 @@ isc_result_t
dns_view_loadnew(dns_view_t *view, isc_boolean_t stop) {
REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(view->zonetable != NULL);
return (dns_zt_loadnew(view->zonetable, stop));
}
+
+isc_result_t
+dns_view_asyncload(dns_view_t *view, dns_zt_allloaded_t callback, void *arg) {
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(view->zonetable != NULL);
+
+ return (dns_zt_asyncload(view->zonetable, callback, arg));
+}
+
+
#endif /* BIND9 */
isc_result_t
@@ -1523,16 +1570,23 @@ dns_view_flushcache2(dns_view_t *view, isc_boolean_t fixuponly) {
isc_result_t
dns_view_flushname(dns_view_t *view, dns_name_t *name) {
+ return (dns_view_flushnode(view, name, ISC_FALSE));
+}
+
+isc_result_t
+dns_view_flushnode(dns_view_t *view, dns_name_t *name, isc_boolean_t tree) {
REQUIRE(DNS_VIEW_VALID(view));
- if (view->adb != NULL)
- dns_adb_flushname(view->adb, name);
- if (view->cache == NULL)
- return (ISC_R_SUCCESS);
- if (view->resolver != NULL)
- dns_resolver_flushbadcache(view->resolver, name);
- return (dns_cache_flushname(view->cache, name));
+ if (!tree) {
+ if (view->adb != NULL)
+ dns_adb_flushname(view->adb, name);
+ if (view->cache == NULL)
+ return (ISC_R_SUCCESS);
+ if (view->resolver != NULL)
+ dns_resolver_flushbadcache(view->resolver, name);
+ }
+ return (dns_cache_flushnode(view->cache, name, tree));
}
isc_result_t
diff --git a/contrib/bind9/lib/dns/xfrin.c b/contrib/bind9/lib/dns/xfrin.c
index eae39d9de3e9..813f616e6fa0 100644
--- a/contrib/bind9/lib/dns/xfrin.c
+++ b/contrib/bind9/lib/dns/xfrin.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -360,7 +360,7 @@ ixfr_init(dns_xfrin_ctx_t *xfr) {
journalfile = dns_zone_getjournal(xfr->zone);
if (journalfile != NULL)
CHECK(dns_journal_open(xfr->mctx, journalfile,
- ISC_TRUE, &xfr->ixfr.journal));
+ DNS_JOURNAL_CREATE, &xfr->ixfr.journal));
result = ISC_R_SUCCESS;
failure:
@@ -591,6 +591,7 @@ xfr_rr(dns_xfrin_ctx_t *xfr, dns_name_t *name, isc_uint32_t ttl,
case XFRST_AXFR_END:
case XFRST_IXFR_END:
FAIL(DNS_R_EXTRADATA);
+ /* NOTREACHED */
default:
INSIST(0);
break;
@@ -630,7 +631,8 @@ dns_xfrin_create2(dns_zone_t *zone, dns_rdatatype_t xfrtype,
isc_sockaddr_t *masteraddr, isc_sockaddr_t *sourceaddr,
dns_tsigkey_t *tsigkey, isc_mem_t *mctx,
isc_timermgr_t *timermgr, isc_socketmgr_t *socketmgr,
- isc_task_t *task, dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp)
+ isc_task_t *task, dns_xfrindone_t done,
+ dns_xfrin_ctx_t **xfrp)
{
dns_name_t *zonename = dns_zone_getorigin(zone);
dns_xfrin_ctx_t *xfr = NULL;
@@ -781,7 +783,8 @@ xfrin_create(isc_mem_t *mctx,
xfr = isc_mem_get(mctx, sizeof(*xfr));
if (xfr == NULL)
return (ISC_R_NOMEMORY);
- xfr->mctx = mctx;
+ xfr->mctx = NULL;
+ isc_mem_attach(mctx, &xfr->mctx);
xfr->refcount = 0;
xfr->zone = NULL;
dns_zone_iattach(zone, &xfr->zone);
@@ -876,7 +879,7 @@ xfrin_create(isc_mem_t *mctx,
dns_db_detach(&xfr->db);
isc_task_detach(&xfr->task);
dns_zone_idetach(&xfr->zone);
- isc_mem_put(mctx, xfr, sizeof(*xfr));
+ isc_mem_putanddetach(&xfr->mctx, xfr, sizeof(*xfr));
return (result);
}
@@ -1491,7 +1494,7 @@ maybe_free(dns_xfrin_ctx_t *xfr) {
if (xfr->zone != NULL)
dns_zone_idetach(&xfr->zone);
- isc_mem_put(xfr->mctx, xfr, sizeof(*xfr));
+ isc_mem_putanddetach(&xfr->mctx, xfr, sizeof(*xfr));
}
/*
diff --git a/contrib/bind9/lib/dns/zone.c b/contrib/bind9/lib/dns/zone.c
index 22db239bbd63..10ba807c52f1 100644
--- a/contrib/bind9/lib/dns/zone.c
+++ b/contrib/bind9/lib/dns/zone.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -23,16 +23,18 @@
#include <errno.h>
#include <isc/file.h>
+#include <isc/hex.h>
#include <isc/mutex.h>
+#include <isc/pool.h>
#include <isc/print.h>
#include <isc/random.h>
#include <isc/ratelimiter.h>
#include <isc/refcount.h>
#include <isc/rwlock.h>
#include <isc/serial.h>
-#include <isc/strerror.h>
#include <isc/stats.h>
#include <isc/stdtime.h>
+#include <isc/strerror.h>
#include <isc/string.h>
#include <isc/taskpool.h>
#include <isc/timer.h>
@@ -61,6 +63,7 @@
#include <dns/private.h>
#include <dns/rbt.h>
#include <dns/rcode.h>
+#include <dns/rdata.h>
#include <dns/rdataclass.h>
#include <dns/rdatalist.h>
#include <dns/rdataset.h>
@@ -76,8 +79,10 @@
#include <dns/stats.h>
#include <dns/time.h>
#include <dns/tsig.h>
+#include <dns/update.h>
#include <dns/xfrin.h>
#include <dns/zone.h>
+#include <dns/zt.h>
#include <dst/dst.h>
@@ -145,6 +150,7 @@ typedef ISC_LIST(dns_signing_t) dns_signinglist_t;
typedef struct dns_nsec3chain dns_nsec3chain_t;
typedef ISC_LIST(dns_nsec3chain_t) dns_nsec3chainlist_t;
typedef struct dns_keyfetch dns_keyfetch_t;
+typedef struct dns_asyncload dns_asyncload_t;
#define DNS_ZONE_CHECKLOCK
#ifdef DNS_ZONE_CHECKLOCK
@@ -217,6 +223,7 @@ struct dns_zone {
isc_time_t signingtime;
isc_time_t nsec3chaintime;
isc_time_t refreshkeytime;
+ isc_uint32_t refreshkeyinterval;
isc_uint32_t refreshkeycount;
isc_uint32_t refresh;
isc_uint32_t retry;
@@ -239,9 +246,11 @@ struct dns_zone {
isc_sockaddr_t masteraddr;
dns_notifytype_t notifytype;
isc_sockaddr_t *notify;
+ dns_name_t **notifykeynames;
unsigned int notifycnt;
isc_sockaddr_t notifyfrom;
isc_task_t *task;
+ isc_task_t *loadtask;
isc_sockaddr_t notifysrc4;
isc_sockaddr_t notifysrc6;
isc_sockaddr_t xfrsource4;
@@ -297,8 +306,10 @@ struct dns_zone {
* Optional per-zone statistics counters. Counted outside of this
* module.
*/
+ dns_zonestat_level_t statlevel;
isc_boolean_t requeststats_on;
isc_stats_t *requeststats;
+ dns_stats_t *rcvquerystats;
isc_uint32_t notifydelay;
dns_isselffunc_t isself;
void *isselfarg;
@@ -335,16 +346,44 @@ struct dns_zone {
isc_boolean_t added;
/*%
- * whether a rpz radix was needed when last loaded
+ * whether this is a response policy zone
+ */
+ isc_boolean_t is_rpz;
+
+ /*%
+ * Serial number update method.
*/
- isc_boolean_t rpz_zone;
+ dns_updatemethod_t updatemethod;
+
+ /*%
+ * whether ixfr is requested
+ */
+ isc_boolean_t requestixfr;
/*%
* Outstanding forwarded UPDATE requests.
*/
dns_forwardlist_t forwards;
+
+ dns_zone_t *raw;
+ dns_zone_t *secure;
+
+ isc_boolean_t sourceserialset;
+ isc_uint32_t sourceserial;
};
+typedef struct {
+ dns_diff_t *diff;
+ isc_boolean_t offline;
+} zonediff_t;
+
+#define zonediff_init(z, d) \
+ do { \
+ zonediff_t *_z = (z); \
+ (_z)->diff = (d); \
+ (_z)->offline = ISC_FALSE; \
+ } while (0)
+
#define DNS_ZONE_FLAG(z,f) (ISC_TF(((z)->flags & (f)) != 0))
#define DNS_ZONE_SETFLAG(z,f) do { \
INSIST(LOCKED_ZONE(z)); \
@@ -391,8 +430,9 @@ struct dns_zone {
#define DNS_ZONEFLG_NEEDCOMPACT 0x02000000U
#define DNS_ZONEFLG_REFRESHING 0x04000000U /*%< Refreshing keydata */
#define DNS_ZONEFLG_THAW 0x08000000U
-/* #define DNS_ZONEFLG_XXXXX 0x10000000U XXXMPA unused. */
+#define DNS_ZONEFLG_LOADPENDING 0x10000000U /*%< Loading scheduled */
#define DNS_ZONEFLG_NODELAY 0x20000000U
+#define DNS_ZONEFLG_SENDSECURE 0x40000000U
#define DNS_ZONE_OPTION(z,o) (((z)->options & (o)) != 0)
#define DNS_ZONEKEY_OPTION(z,o) (((z)->keyopts & (o)) != 0)
@@ -425,7 +465,9 @@ struct dns_zonemgr {
isc_timermgr_t * timermgr;
isc_socketmgr_t * socketmgr;
isc_taskpool_t * zonetasks;
+ isc_taskpool_t * loadtasks;
isc_task_t * task;
+ isc_pool_t * mctxpool;
isc_ratelimiter_t * rl;
isc_rwlock_t rwlock;
isc_mutex_t iolock;
@@ -464,6 +506,7 @@ struct dns_notify {
dns_request_t *request;
dns_name_t ns;
isc_sockaddr_t dst;
+ dns_tsigkey_t *key;
ISC_LINK(dns_notify_t) link;
};
@@ -582,6 +625,15 @@ struct dns_keyfetch {
dns_fetch_t *fetch;
};
+/*%
+ * Hold state for an asynchronous load
+ */
+struct dns_asyncload {
+ dns_zone_t *zone;
+ dns_zt_zoneloaded_t loaded;
+ void *loaded_arg;
+};
+
#define HOUR 3600
#define DAY (24*HOUR)
#define MONTH (30*DAY)
@@ -620,6 +672,9 @@ static void zone_namerd_tostr(dns_zone_t *zone, char *buf, size_t length);
static void zone_name_tostr(dns_zone_t *zone, char *buf, size_t length);
static void zone_rdclass_tostr(dns_zone_t *zone, char *buf, size_t length);
static void zone_viewname_tostr(dns_zone_t *zone, char *buf, size_t length);
+static isc_result_t zone_send_secureserial(dns_zone_t *zone,
+ isc_boolean_t secure_locked,
+ isc_uint32_t serial);
#if 0
/* ondestroy example */
@@ -676,6 +731,8 @@ static isc_result_t delete_nsec(dns_db_t *db, dns_dbversion_t *ver,
static void zone_rekey(dns_zone_t *zone);
static isc_boolean_t delsig_ok(dns_rdata_rrsig_t *rrsig_ptr,
dst_key_t **keys, unsigned int nkeys);
+static isc_result_t zone_send_securedb(dns_zone_t *zone, isc_boolean_t locked,
+ dns_db_t *db);
#define ENTER zone_debuglog(zone, me, 1, "enter")
@@ -786,6 +843,7 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
isc_time_settoepoch(&zone->signingtime);
isc_time_settoepoch(&zone->nsec3chaintime);
isc_time_settoepoch(&zone->refreshkeytime);
+ zone->refreshkeyinterval = 0;
zone->refreshkeycount = 0;
zone->refresh = DNS_ZONE_DEFAULTREFRESH;
zone->retry = DNS_ZONE_DEFAULTRETRY;
@@ -801,9 +859,11 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
zone->masterscnt = 0;
zone->curmaster = 0;
zone->notify = NULL;
+ zone->notifykeynames = NULL;
zone->notifytype = dns_notifytype_yes;
zone->notifycnt = 0;
zone->task = NULL;
+ zone->loadtask = NULL;
zone->update_acl = NULL;
zone->forward_acl = NULL;
zone->notify_acl = NULL;
@@ -845,7 +905,9 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
zone->statelist = NULL;
zone->stats = NULL;
zone->requeststats_on = ISC_FALSE;
+ zone->statlevel = dns_zonestat_none;
zone->requeststats = NULL;
+ zone->rcvquerystats = NULL;
zone->notifydelay = 5;
zone->isself = NULL;
zone->isselfarg = NULL;
@@ -855,8 +917,12 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
zone->nodes = 100;
zone->privatetype = (dns_rdatatype_t)0xffffU;
zone->added = ISC_FALSE;
- zone->rpz_zone = ISC_FALSE;
+ zone->is_rpz = ISC_FALSE;
ISC_LIST_INIT(zone->forwards);
+ zone->raw = NULL;
+ zone->secure = NULL;
+ zone->sourceserial = 0;
+ zone->sourceserialset = ISC_FALSE;
zone->magic = ZONE_MAGIC;
@@ -913,6 +979,8 @@ zone_free(dns_zone_t *zone) {
if (zone->task != NULL)
isc_task_detach(&zone->task);
+ if (zone->loadtask != NULL)
+ isc_task_detach(&zone->loadtask);
if (zone->zmgr != NULL)
dns_zonemgr_releasezone(zone->zmgr, zone);
@@ -947,6 +1015,8 @@ zone_free(dns_zone_t *zone) {
isc_stats_detach(&zone->stats);
if (zone->requeststats != NULL)
isc_stats_detach(&zone->requeststats);
+ if(zone->rcvquerystats != NULL )
+ dns_stats_detach(&zone->rcvquerystats);
if (zone->db != NULL)
zone_detachdb(zone);
if (zone->acache != NULL)
@@ -993,6 +1063,30 @@ zone_free(dns_zone_t *zone) {
}
/*
+ * Returns ISC_TRUE iff this the signed side of an inline-signing zone.
+ * Caller should hold zone lock.
+ */
+static inline isc_boolean_t
+inline_secure(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ if (zone->raw != NULL)
+ return (ISC_TRUE);
+ return (ISC_FALSE);
+}
+
+/*
+ * Returns ISC_TRUE iff this the unsigned side of an inline-signing zone
+ * Caller should hold zone lock.
+ */
+static inline isc_boolean_t
+inline_raw(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ if (zone->secure != NULL)
+ return (ISC_TRUE);
+ return (ISC_FALSE);
+}
+
+/*
* Single shot.
*/
void
@@ -1020,6 +1114,8 @@ dns_zone_setclass(dns_zone_t *zone, dns_rdataclass_t rdclass) {
zone_rdclass_tostr(zone, namebuf, sizeof namebuf);
zone->strrdclass = isc_mem_strdup(zone->mctx, namebuf);
+ if (inline_secure(zone))
+ dns_zone_setclass(zone->raw, rdclass);
UNLOCK_ZONE(zone);
}
@@ -1042,6 +1138,7 @@ dns_zone_setnotifytype(dns_zone_t *zone, dns_notifytype_t notifytype) {
isc_result_t
dns_zone_getserial2(dns_zone_t *zone, isc_uint32_t *serialp) {
isc_result_t result;
+ unsigned int soacount;
REQUIRE(DNS_ZONE_VALID(zone));
REQUIRE(serialp != NULL);
@@ -1049,8 +1146,11 @@ dns_zone_getserial2(dns_zone_t *zone, isc_uint32_t *serialp) {
LOCK_ZONE(zone);
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
if (zone->db != NULL) {
- result = zone_get_from_db(zone, zone->db, NULL, NULL, serialp,
- NULL, NULL, NULL, NULL, NULL);
+ result = zone_get_from_db(zone, zone->db, NULL, &soacount,
+ serialp, NULL, NULL, NULL, NULL,
+ NULL);
+ if (result == ISC_R_SUCCESS && soacount == 0)
+ result = ISC_R_FAILURE;
} else
result = DNS_R_NOTLOADED;
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
@@ -1076,6 +1176,7 @@ dns_zone_getserial(dns_zone_t *zone) {
*/
void
dns_zone_settype(dns_zone_t *zone, dns_zonetype_t type) {
+ char namebuf[1024];
REQUIRE(DNS_ZONE_VALID(zone));
REQUIRE(type != dns_zone_none);
@@ -1086,6 +1187,12 @@ dns_zone_settype(dns_zone_t *zone, dns_zonetype_t type) {
LOCK_ZONE(zone);
REQUIRE(zone->type == dns_zone_none || zone->type == type);
zone->type = type;
+
+ if (zone->strnamerd != NULL)
+ isc_mem_free(zone->mctx, zone->strnamerd);
+
+ zone_namerd_tostr(zone, namebuf, sizeof namebuf);
+ zone->strnamerd = isc_mem_strdup(zone->mctx, namebuf);
UNLOCK_ZONE(zone);
}
@@ -1204,10 +1311,12 @@ dns_zone_setview(dns_zone_t *zone, dns_view_t *view) {
zone_viewname_tostr(zone, namebuf, sizeof namebuf);
zone->strviewname = isc_mem_strdup(zone->mctx, namebuf);
+ if (inline_secure(zone))
+ dns_zone_setview(zone->raw, view);
+
UNLOCK_ZONE(zone);
}
-
dns_view_t *
dns_zone_getview(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
@@ -1241,6 +1350,8 @@ dns_zone_setorigin(dns_zone_t *zone, const dns_name_t *origin) {
zone_name_tostr(zone, namebuf, sizeof namebuf);
zone->strname = isc_mem_strdup(zone->mctx, namebuf);
+ if (result == ISC_R_SUCCESS && inline_secure(zone))
+ result = dns_zone_setorigin(zone->raw, origin);
UNLOCK_ZONE(zone);
return (result);
}
@@ -1378,18 +1489,50 @@ dns_zone_getjournal(dns_zone_t *zone) {
* allow dynamic updates either by having an update policy ("ssutable")
* or an "allow-update" ACL with a value other than exactly "{ none; }".
*/
-static isc_boolean_t
-zone_isdynamic(dns_zone_t *zone) {
+isc_boolean_t
+dns_zone_isdynamic(dns_zone_t *zone, isc_boolean_t ignore_freeze) {
REQUIRE(DNS_ZONE_VALID(zone));
- return (ISC_TF(zone->type == dns_zone_slave ||
- zone->type == dns_zone_stub ||
- zone->type == dns_zone_key ||
- (!zone->update_disabled && zone->ssutable != NULL) ||
- (!zone->update_disabled && zone->update_acl != NULL &&
- !dns_acl_isnone(zone->update_acl))));
+ if (zone->type == dns_zone_slave || zone->type == dns_zone_stub ||
+ zone->type == dns_zone_key ||
+ (zone->type == dns_zone_redirect && zone->masters != NULL))
+ return (ISC_TRUE);
+
+ /* If !ignore_freeze, we need check whether updates are disabled. */
+ if (zone->type == dns_zone_master &&
+ (!zone->update_disabled || ignore_freeze) &&
+ ((zone->ssutable != NULL) ||
+ (zone->update_acl != NULL && !dns_acl_isnone(zone->update_acl))))
+ return (ISC_TRUE);
+
+ return (ISC_FALSE);
+
}
+/*
+ * Set the response policy index and information for a zone.
+ */
+isc_result_t
+dns_zone_rpz_enable(dns_zone_t *zone) {
+ /*
+ * Only RBTDB zones can be used for response policy zones,
+ * because only they have the code to load the create the summary data.
+ * Only zones that are loaded instead of mmap()ed create the
+ * summary data and so can be policy zones.
+ */
+ if (strcmp(zone->db_argv[0], "rbt") != 0 &&
+ strcmp(zone->db_argv[0], "rbt64") != 0)
+ return (ISC_R_NOTIMPLEMENTED);
+
+ zone->is_rpz = ISC_TRUE;
+
+ return (ISC_R_SUCCESS);
+}
+
+isc_boolean_t
+dns_zone_get_rpz(dns_zone_t *zone) {
+ return (zone->is_rpz);
+}
static isc_result_t
zone_load(dns_zone_t *zone, unsigned int flags) {
@@ -1397,11 +1540,21 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
isc_time_t now;
isc_time_t loadtime, filetime;
dns_db_t *db = NULL;
- isc_boolean_t rbt;
+ isc_boolean_t rbt, hasraw;
REQUIRE(DNS_ZONE_VALID(zone));
LOCK_ZONE(zone);
+ hasraw = inline_secure(zone);
+ if (hasraw) {
+ result = zone_load(zone->raw, flags);
+ if (result != ISC_R_SUCCESS) {
+ UNLOCK_ZONE(zone);
+ return(result);
+ }
+ LOCK_ZONE(zone->raw);
+ }
+
TIME_NOW(&now);
INSIST(zone->type != dns_zone_none);
@@ -1413,7 +1566,6 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
goto cleanup;
}
-
INSIST(zone->db_argc >= 1);
rbt = strcmp(zone->db_argv[0], "rbt") == 0 ||
@@ -1427,7 +1579,7 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
goto cleanup;
}
- if (zone->db != NULL && zone_isdynamic(zone)) {
+ if (zone->db != NULL && dns_zone_isdynamic(zone, ISC_FALSE)) {
/*
* This is a slave, stub, or dynamically updated
* zone being reloaded. Do nothing - the database
@@ -1459,8 +1611,7 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
* "rndc reconfig", we are done.
*/
if (!isc_time_isepoch(&zone->loadtime) &&
- (flags & DNS_ZONELOADFLAG_NOSTAT) != 0 &&
- zone->rpz_zone == dns_rpz_needed()) {
+ (flags & DNS_ZONELOADFLAG_NOSTAT) != 0) {
result = ISC_R_SUCCESS;
goto cleanup;
}
@@ -1469,8 +1620,7 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
if (result == ISC_R_SUCCESS) {
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED) &&
!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_HASINCLUDE) &&
- isc_time_compare(&filetime, &zone->loadtime) <= 0 &&
- zone->rpz_zone == dns_rpz_needed()) {
+ isc_time_compare(&filetime, &zone->loadtime) <= 0) {
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"skipping load: master file "
"older than last load");
@@ -1478,7 +1628,6 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
goto cleanup;
}
loadtime = filetime;
- zone->rpz_zone = dns_rpz_needed();
}
}
@@ -1494,7 +1643,8 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
goto cleanup;
}
- if ((zone->type == dns_zone_slave || zone->type == dns_zone_stub) &&
+ if ((zone->type == dns_zone_slave || zone->type == dns_zone_stub ||
+ (zone->type == dns_zone_redirect && zone->masters != NULL)) &&
rbt) {
if (zone->masterfile == NULL ||
!isc_file_exists(zone->masterfile)) {
@@ -1532,7 +1682,9 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
result = zone_startload(db, zone, loadtime);
} else {
result = DNS_R_NOMASTERFILE;
- if (zone->type == dns_zone_master) {
+ if (zone->type == dns_zone_master ||
+ (zone->type == dns_zone_redirect &&
+ zone->masters == NULL)) {
dns_zone_log(zone, ISC_LOG_ERROR,
"loading zone: "
"no master file configured");
@@ -1553,6 +1705,8 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
result = zone_postload(zone, db, loadtime, result);
cleanup:
+ if (hasraw)
+ UNLOCK_ZONE(zone->raw);
UNLOCK_ZONE(zone);
if (db != NULL)
dns_db_detach(&db);
@@ -1569,17 +1723,100 @@ dns_zone_loadnew(dns_zone_t *zone) {
return (zone_load(zone, DNS_ZONELOADFLAG_NOSTAT));
}
+static void
+zone_asyncload(isc_task_t *task, isc_event_t *event) {
+ dns_asyncload_t *asl = event->ev_arg;
+ dns_zone_t *zone = asl->zone;
+ isc_result_t result = ISC_R_SUCCESS;
+
+ UNUSED(task);
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ if ((event->ev_attributes & ISC_EVENTATTR_CANCELED) != 0)
+ result = ISC_R_CANCELED;
+ isc_event_free(&event);
+ if (result == ISC_R_CANCELED ||
+ !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING))
+ goto cleanup;
+
+ zone_load(zone, 0);
+
+ LOCK_ZONE(zone);
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADPENDING);
+ UNLOCK_ZONE(zone);
+
+ /* Inform the zone table we've finished loading */
+ if (asl->loaded != NULL)
+ (asl->loaded)(asl->loaded_arg, zone, task);
+
+ cleanup:
+ isc_mem_put(zone->mctx, asl, sizeof (*asl));
+ dns_zone_idetach(&zone);
+}
+
+isc_result_t
+dns_zone_asyncload(dns_zone_t *zone, dns_zt_zoneloaded_t done, void *arg) {
+ isc_event_t *e;
+ dns_asyncload_t *asl = NULL;
+ isc_result_t result = ISC_R_SUCCESS;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ if (zone->zmgr == NULL)
+ return (ISC_R_FAILURE);
+
+ asl = isc_mem_get(zone->mctx, sizeof (*asl));
+ if (asl == NULL)
+ CHECK(ISC_R_NOMEMORY);
+
+ asl->zone = NULL;
+ asl->loaded = done;
+ asl->loaded_arg = arg;
+
+ e = isc_event_allocate(zone->zmgr->mctx, zone->zmgr,
+ DNS_EVENT_ZONELOAD,
+ zone_asyncload, asl,
+ sizeof(isc_event_t));
+ if (e == NULL)
+ CHECK(ISC_R_NOMEMORY);
+
+ LOCK_ZONE(zone);
+ zone_iattach(zone, &asl->zone);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADPENDING);
+ isc_task_send(zone->loadtask, &e);
+ UNLOCK_ZONE(zone);
+
+ return (ISC_R_SUCCESS);
+
+ failure:
+ if (asl != NULL)
+ isc_mem_put(zone->mctx, asl, sizeof (*asl));
+ return (result);
+}
+
+isc_boolean_t
+dns__zone_loadpending(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ return (ISC_TF(DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING)));
+}
+
isc_result_t
dns_zone_loadandthaw(dns_zone_t *zone) {
isc_result_t result;
- result = zone_load(zone, DNS_ZONELOADFLAG_THAW);
+ if (inline_raw(zone))
+ result = zone_load(zone->secure, DNS_ZONELOADFLAG_THAW);
+ else
+ result = zone_load(zone, DNS_ZONELOADFLAG_THAW);
+
switch (result) {
case DNS_R_CONTINUE:
/* Deferred thaw. */
break;
- case ISC_R_SUCCESS:
case DNS_R_UPTODATE:
+ case ISC_R_SUCCESS:
case DNS_R_SEENINCLUDE:
zone->update_disabled = ISC_FALSE;
break;
@@ -1598,7 +1835,8 @@ get_master_options(dns_zone_t *zone) {
unsigned int options;
options = DNS_MASTER_ZONE;
- if (zone->type == dns_zone_slave)
+ if (zone->type == dns_zone_slave ||
+ (zone->type == dns_zone_redirect && zone->masters == NULL))
options |= DNS_MASTER_SLAVE;
if (zone->type == dns_zone_key)
options |= DNS_MASTER_KEY;
@@ -1616,9 +1854,9 @@ get_master_options(dns_zone_t *zone) {
options |= DNS_MASTER_CHECKMXFAIL;
if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKWILDCARD))
options |= DNS_MASTER_CHECKWILDCARD;
- if (zone->type == dns_zone_master &&
+ if (inline_secure(zone) || (zone->type == dns_zone_master &&
((zone->update_acl != NULL && !dns_acl_isnone(zone->update_acl)) ||
- zone->ssutable != NULL))
+ zone->ssutable != NULL)))
options |= DNS_MASTER_RESIGN;
return (options);
}
@@ -1642,8 +1880,7 @@ zone_gotreadhandle(isc_task_t *task, isc_event_t *event) {
result = dns_master_loadfileinc3(load->zone->masterfile,
dns_db_origin(load->db),
dns_db_origin(load->db),
- load->zone->rdclass,
- options,
+ load->zone->rdclass, options,
load->zone->sigresigninginterval,
&load->callbacks, task,
zone_loaddone, load,
@@ -1659,11 +1896,29 @@ zone_gotreadhandle(isc_task_t *task, isc_event_t *event) {
}
static void
+get_raw_serial(dns_zone_t *raw, dns_masterrawheader_t *rawdata) {
+ isc_result_t result;
+ unsigned int soacount;
+
+ LOCK(&raw->lock);
+ if (raw->db != NULL) {
+ result = zone_get_from_db(raw, raw->db, NULL, &soacount,
+ &rawdata->sourceserial,
+ NULL, NULL, NULL, NULL,
+ NULL);
+ if (result == ISC_R_SUCCESS && soacount > 0U)
+ rawdata->flags |= DNS_MASTERRAW_SOURCESERIALSET;
+ }
+ UNLOCK(&raw->lock);
+}
+
+static void
zone_gotwritehandle(isc_task_t *task, isc_event_t *event) {
const char me[] = "zone_gotwritehandle";
dns_zone_t *zone = event->ev_arg;
isc_result_t result = ISC_R_SUCCESS;
dns_dbversion_t *version = NULL;
+ dns_masterrawheader_t rawdata;
REQUIRE(DNS_ZONE_VALID(zone));
INSIST(task == zone->task);
@@ -1679,11 +1934,14 @@ zone_gotwritehandle(isc_task_t *task, isc_event_t *event) {
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
if (zone->db != NULL) {
dns_db_currentversion(zone->db, &version);
- result = dns_master_dumpinc2(zone->mctx, zone->db, version,
+ dns_master_initrawheader(&rawdata);
+ if (inline_secure(zone))
+ get_raw_serial(zone->raw, &rawdata);
+ result = dns_master_dumpinc3(zone->mctx, zone->db, version,
&dns_master_style_default,
zone->masterfile, zone->task,
dump_done, zone, &zone->dctx,
- zone->masterformat);
+ zone->masterformat, &rawdata);
dns_db_closeversion(zone->db, &version, ISC_FALSE);
} else
result = ISC_R_CANCELED;
@@ -1697,6 +1955,31 @@ zone_gotwritehandle(isc_task_t *task, isc_event_t *event) {
dump_done(zone, result);
}
+/*
+ * Save the raw serial number for inline-signing zones.
+ * (XXX: Other information from the header will be used
+ * for other purposes in the future, but for now this is
+ * all we're interested in.)
+ */
+static void
+zone_setrawdata(dns_zone_t *zone, dns_masterrawheader_t *header) {
+ if ((header->flags & DNS_MASTERRAW_SOURCESERIALSET) == 0)
+ return;
+
+ zone->sourceserial = header->sourceserial;
+ zone->sourceserialset = ISC_TRUE;
+}
+
+void
+dns_zone_setrawdata(dns_zone_t *zone, dns_masterrawheader_t *header) {
+ if (zone == NULL)
+ return;
+
+ LOCK_ZONE(zone);
+ zone_setrawdata(zone, header);
+ UNLOCK_ZONE(zone);
+}
+
static isc_result_t
zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
dns_load_t *load;
@@ -1704,12 +1987,19 @@ zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
isc_result_t tresult;
unsigned int options;
- options = get_master_options(zone);
+#ifdef BIND9
+ if (zone->is_rpz) {
+ result = dns_db_rpz_enabled(db, NULL);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+#endif
+ options = get_master_options(zone);
if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_MANYERRORS))
options |= DNS_MASTER_MANYERRORS;
- if (zone->zmgr != NULL && zone->db != NULL && zone->task != NULL) {
+ if (zone->zmgr != NULL && zone->db != NULL && zone->loadtask != NULL) {
load = isc_mem_get(zone->mctx, sizeof(*load));
if (load == NULL)
return (ISC_R_NOMEMORY);
@@ -1724,11 +2014,13 @@ zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
zone_iattach(zone, &load->zone);
dns_db_attach(db, &load->db);
dns_rdatacallbacks_init(&load->callbacks);
+ load->callbacks.rawdata = zone_setrawdata;
+ zone_iattach(zone, &load->callbacks.zone);
result = dns_db_beginload(db, &load->callbacks.add,
&load->callbacks.add_private);
if (result != ISC_R_SUCCESS)
goto cleanup;
- result = zonemgr_getio(zone->zmgr, ISC_TRUE, zone->task,
+ result = zonemgr_getio(zone->zmgr, ISC_TRUE, zone->loadtask,
zone_gotreadhandle, load,
&zone->readio);
if (result != ISC_R_SUCCESS) {
@@ -1745,18 +2037,24 @@ zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
dns_rdatacallbacks_t callbacks;
dns_rdatacallbacks_init(&callbacks);
+ callbacks.rawdata = zone_setrawdata;
+ zone_iattach(zone, &callbacks.zone);
result = dns_db_beginload(db, &callbacks.add,
&callbacks.add_private);
- if (result != ISC_R_SUCCESS)
+ if (result != ISC_R_SUCCESS) {
+ zone_idetach(&callbacks.zone);
return (result);
- result = dns_master_loadfile3(zone->masterfile, &zone->origin,
- &zone->origin, zone->rdclass,
- options, zone->sigresigninginterval,
+ }
+ result = dns_master_loadfile3(zone->masterfile,
+ &zone->origin, &zone->origin,
+ zone->rdclass, options,
+ zone->sigresigninginterval,
&callbacks, zone->mctx,
zone->masterformat);
tresult = dns_db_endload(db, &callbacks.add_private);
if (result == ISC_R_SUCCESS)
result = tresult;
+ zone_idetach(&callbacks.zone);
}
return (result);
@@ -1765,6 +2063,7 @@ zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
load->magic = 0;
dns_db_detach(&load->db);
zone_idetach(&load->zone);
+ zone_idetach(&load->callbacks.zone);
isc_mem_detach(&load->mctx);
isc_mem_put(zone->mctx, load, sizeof(*load));
return (result);
@@ -2174,6 +2473,34 @@ zone_check_dup(dns_zone_t *zone, dns_db_t *db) {
}
static isc_boolean_t
+isspf(const dns_rdata_t *rdata) {
+ char buf[1024];
+ const unsigned char *data = rdata->data;
+ unsigned int rdl = rdata->length, i = 0, tl, len;
+
+ while (rdl > 0U) {
+ len = tl = *data;
+ ++data;
+ --rdl;
+ INSIST(tl <= rdl);
+ if (len > sizeof(buf) - i - 1)
+ len = sizeof(buf) - i - 1;
+ memcpy(buf + i, data, len);
+ i += len;
+ data += tl;
+ rdl -= tl;
+ }
+
+ if (i < 6U)
+ return(ISC_FALSE);
+
+ buf[i] = 0;
+ if (strncmp(buf, "v=spf1", 6) == 0 && (buf[6] == 0 || buf[6] == ' '))
+ return (ISC_TRUE);
+ return (ISC_FALSE);
+}
+
+static isc_boolean_t
integrity_checks(dns_zone_t *zone, dns_db_t *db) {
dns_dbiterator_t *dbiterator = NULL;
dns_dbnode_t *node = NULL;
@@ -2187,7 +2514,7 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) {
dns_name_t *name;
dns_name_t *bottom;
isc_result_t result;
- isc_boolean_t ok = ISC_TRUE;
+ isc_boolean_t ok = ISC_TRUE, have_spf, have_txt;
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -2265,7 +2592,7 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) {
result = dns_db_findrdataset(db, node, NULL, dns_rdatatype_srv,
0, 0, &rdataset, NULL);
if (result != ISC_R_SUCCESS)
- goto next;
+ goto checkspf;
result = dns_rdataset_first(&rdataset);
while (result == ISC_R_SUCCESS) {
dns_rdataset_current(&rdataset, &rdata);
@@ -2278,6 +2605,50 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) {
}
dns_rdataset_disassociate(&rdataset);
+ checkspf:
+ /*
+ * Check if there is a type TXT spf record without a type SPF
+ * RRset being present.
+ */
+ if (!DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKSPF))
+ goto next;
+ if (zone->rdclass != dns_rdataclass_in)
+ goto next;
+ have_spf = have_txt = ISC_FALSE;
+ result = dns_db_findrdataset(db, node, NULL, dns_rdatatype_spf,
+ 0, 0, &rdataset, NULL);
+ if (result == ISC_R_SUCCESS) {
+ dns_rdataset_disassociate(&rdataset);
+ have_spf = ISC_TRUE;
+ }
+ result = dns_db_findrdataset(db, node, NULL, dns_rdatatype_txt,
+ 0, 0, &rdataset, NULL);
+ if (result != ISC_R_SUCCESS)
+ goto notxt;
+ result = dns_rdataset_first(&rdataset);
+ while (result == ISC_R_SUCCESS) {
+ dns_rdataset_current(&rdataset, &rdata);
+ have_txt = isspf(&rdata);
+ dns_rdata_reset(&rdata);
+ if (have_txt)
+ break;
+ result = dns_rdataset_next(&rdataset);
+ }
+ dns_rdataset_disassociate(&rdataset);
+
+ notxt:
+ if (have_spf != have_txt) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ const char *found = have_txt ? "TXT" : "SPF";
+ const char *need = have_txt ? "SPF" : "TXT";
+
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_zone_log(zone, ISC_LOG_WARNING, "'%s' found SPF/%s "
+ "record but no SPF/%s record found, add "
+ "matching type %s record", namebuf, found,
+ need, need);
+ }
+
next:
dns_db_detachnode(db, &node);
result = dns_dbiterator_next(dbiterator);
@@ -2415,13 +2786,22 @@ resume_signingwithkey(dns_zone_t *zone) {
static isc_result_t
zone_addnsec3chain(dns_zone_t *zone, dns_rdata_nsec3param_t *nsec3param) {
dns_nsec3chain_t *nsec3chain, *current;
+ dns_dbversion_t *version = NULL;
+ isc_boolean_t nseconly = ISC_FALSE, nsec3ok = ISC_FALSE;
isc_result_t result;
isc_time_t now;
unsigned int options = 0;
char saltbuf[255*2+1];
- char flags[sizeof("REMOVE|CREATE|NONSEC|OPTOUT")];
+ char flags[sizeof("INITIAL|REMOVE|CREATE|NONSEC|OPTOUT")];
int i;
+ dns_db_currentversion(zone->db, &version);
+ result = dns_nsec_nseconly(zone->db, version, &nseconly);
+ nsec3ok = (result == ISC_R_SUCCESS && !nseconly);
+ dns_db_closeversion(zone->db, &version, ISC_FALSE);
+ if (!nsec3ok && (nsec3param->flags & DNS_NSEC3FLAG_REMOVE) == 0)
+ return (ISC_R_SUCCESS);
+
nsec3chain = isc_mem_get(zone->mctx, sizeof *nsec3chain);
if (nsec3chain == NULL)
return (ISC_R_NOMEMORY);
@@ -2448,6 +2828,12 @@ zone_addnsec3chain(dns_zone_t *zone, dns_rdata_nsec3param_t *nsec3param) {
flags[0] = '\0';
if (nsec3param->flags & DNS_NSEC3FLAG_REMOVE)
strlcat(flags, "REMOVE", sizeof(flags));
+ if (nsec3param->flags & DNS_NSEC3FLAG_INITIAL) {
+ if (flags[0] == '\0')
+ strlcpy(flags, "INITIAL", sizeof(flags));
+ else
+ strlcat(flags, "|INITIAL", sizeof(flags));
+ }
if (nsec3param->flags & DNS_NSEC3FLAG_CREATE) {
if (flags[0] == '\0')
strlcpy(flags, "CREATE", sizeof(flags));
@@ -2476,6 +2862,7 @@ zone_addnsec3chain(dns_zone_t *zone, dns_rdata_nsec3param_t *nsec3param) {
"zone_addnsec3chain(%u,%s,%u,%s)",
nsec3param->hash, flags, nsec3param->iterations,
saltbuf);
+
for (current = ISC_LIST_HEAD(zone->nsec3chain);
current != NULL;
current = ISC_LIST_NEXT(current, link)) {
@@ -2528,6 +2915,7 @@ resume_addnsec3chain(dns_zone_t *zone) {
dns_rdataset_t rdataset;
isc_result_t result;
dns_rdata_nsec3param_t nsec3param;
+ isc_boolean_t nseconly = ISC_FALSE, nsec3ok = ISC_FALSE;
if (zone->privatetype == 0)
return;
@@ -2537,6 +2925,10 @@ resume_addnsec3chain(dns_zone_t *zone) {
goto cleanup;
dns_db_currentversion(zone->db, &version);
+
+ result = dns_nsec_nseconly(zone->db, version, &nseconly);
+ nsec3ok = (result == ISC_R_SUCCESS && !nseconly);
+
dns_rdataset_init(&rdataset);
result = dns_db_findrdataset(zone->db, node, version,
zone->privatetype, dns_rdatatype_none,
@@ -2560,8 +2952,9 @@ resume_addnsec3chain(dns_zone_t *zone) {
continue;
result = dns_rdata_tostruct(&rdata, &nsec3param, NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
- if ((nsec3param.flags & DNS_NSEC3FLAG_CREATE) != 0 ||
- (nsec3param.flags & DNS_NSEC3FLAG_REMOVE) != 0) {
+ if (((nsec3param.flags & DNS_NSEC3FLAG_REMOVE) != 0) ||
+ ((nsec3param.flags & DNS_NSEC3FLAG_CREATE) != 0 && nsec3ok))
+ {
result = zone_addnsec3chain(zone, &nsec3param);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -2611,7 +3004,7 @@ check_nsec3param(dns_zone_t *zone, dns_db_t *db) {
isc_result_t result;
dns_rdata_t rdata = DNS_RDATA_INIT;
isc_boolean_t dynamic = (zone->type == dns_zone_master) ?
- zone_isdynamic(zone) : ISC_FALSE;
+ dns_zone_isdynamic(zone, ISC_FALSE) : ISC_FALSE;
dns_rdataset_init(&rdataset);
result = dns_db_findnode(db, &zone->origin, ISC_FALSE, &node);
@@ -2788,6 +3181,8 @@ create_keydata(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADD,
dst_key_name(key), 0, &rdata));
*changed = ISC_TRUE;
+ /* Refresh new keys from the zone apex as soon as possible. */
+ set_refreshkeytimer(zone, &keydata, now);
skip:
result = dns_keytable_nextkeynode(keytable, keynode, &nextnode);
@@ -2797,10 +3192,6 @@ create_keydata(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
}
}
- /* Refresh new keys from the zone apex as soon as possible. */
- if (*changed)
- set_refreshkeytimer(zone, &keydata, now);
-
if (keynode != NULL)
dns_keytable_detachkeynode(keytable, &keynode);
*keynodep = NULL;
@@ -2942,7 +3333,8 @@ load_secroots(dns_zone_t *zone, dns_name_t *name, dns_rdataset_t *rdataset) {
dns_rdataset_current(rdataset, &rdata);
/* Convert rdata to keydata. */
- dns_rdata_tostruct(&rdata, &keydata, NULL);
+ result = dns_rdata_tostruct(&rdata, &keydata, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
/* Set the key refresh timer. */
set_refreshkeytimer(zone, &keydata, now);
@@ -3034,8 +3426,8 @@ update_one_rr(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff,
}
static isc_result_t
-increment_soa_serial(dns_db_t *db, dns_dbversion_t *ver,
- dns_diff_t *diff, isc_mem_t *mctx) {
+update_soa_serial(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff,
+ isc_mem_t *mctx, dns_updatemethod_t method) {
dns_difftuple_t *deltuple = NULL;
dns_difftuple_t *addtuple = NULL;
isc_uint32_t serial;
@@ -3046,12 +3438,7 @@ increment_soa_serial(dns_db_t *db, dns_dbversion_t *ver,
addtuple->op = DNS_DIFFOP_ADD;
serial = dns_soa_getserial(&addtuple->rdata);
-
- /* RFC1982 */
- serial = (serial + 1) & 0xFFFFFFFF;
- if (serial == 0)
- serial = 1;
-
+ serial = dns_update_soaserial(serial, method);
dns_soa_setserial(serial, &addtuple->rdata);
CHECK(do_one_tuple(&deltuple, db, ver, diff));
CHECK(do_one_tuple(&addtuple, db, ver, diff));
@@ -3069,17 +3456,20 @@ increment_soa_serial(dns_db_t *db, dns_dbversion_t *ver,
* Write all transactions in 'diff' to the zone journal file.
*/
static isc_result_t
-zone_journal(dns_zone_t *zone, dns_diff_t *diff, const char *caller) {
+zone_journal(dns_zone_t *zone, dns_diff_t *diff, isc_uint32_t *sourceserial,
+ const char *caller)
+{
const char me[] = "zone_journal";
const char *journalfile;
isc_result_t result = ISC_R_SUCCESS;
dns_journal_t *journal = NULL;
+ unsigned int mode = DNS_JOURNAL_CREATE|DNS_JOURNAL_WRITE;
ENTER;
journalfile = dns_zone_getjournal(zone);
if (journalfile != NULL) {
- result = dns_journal_open(zone->mctx, journalfile,
- ISC_TRUE, &journal);
+ result = dns_journal_open(zone->mctx, journalfile, mode,
+ &journal);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"%s:dns_journal_open -> %s",
@@ -3087,15 +3477,18 @@ zone_journal(dns_zone_t *zone, dns_diff_t *diff, const char *caller) {
return (result);
}
+ if (sourceserial != NULL)
+ dns_journal_set_sourceserial(journal, *sourceserial);
+
result = dns_journal_write_transaction(journal, diff);
- dns_journal_destroy(&journal);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"%s:dns_journal_write_transaction -> %s",
caller, dns_result_totext(result));
- return (result);
}
+ dns_journal_destroy(&journal);
}
+
return (result);
}
@@ -3276,8 +3669,9 @@ sync_keyzone(dns_zone_t *zone, dns_db_t *db) {
if (changed) {
/* Write changes to journal file. */
- CHECK(increment_soa_serial(db, ver, &diff, zone->mctx));
- CHECK(zone_journal(zone, &diff, "sync_keyzone"));
+ CHECK(update_soa_serial(db, ver, &diff, zone->mctx,
+ zone->updatemethod));
+ CHECK(zone_journal(zone, &diff, NULL, "sync_keyzone"));
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
zone_needdump(zone, 30);
@@ -3285,6 +3679,13 @@ sync_keyzone(dns_zone_t *zone, dns_db_t *db) {
}
failure:
+ if (result != ISC_R_SUCCESS &&
+ !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED)) {
+ dns_zone_log(zone, ISC_LOG_ERROR,
+ "unable to synchronize managed keys: %s",
+ dns_result_totext(result));
+ isc_time_settoepoch(&zone->refreshkeytime);
+ }
if (keynode != NULL)
dns_keytable_detachkeynode(sr, &keynode);
if (sr != NULL)
@@ -3296,6 +3697,73 @@ sync_keyzone(dns_zone_t *zone, dns_db_t *db) {
return (result);
}
+isc_result_t
+dns_zone_synckeyzone(dns_zone_t *zone) {
+ isc_result_t result;
+ dns_db_t *db = NULL;
+
+ if (zone->type != dns_zone_key)
+ return (DNS_R_BADZONE);
+
+ CHECK(dns_zone_getdb(zone, &db));
+
+ LOCK_ZONE(zone);
+ result = sync_keyzone(zone, db);
+ UNLOCK_ZONE(zone);
+
+ failure:
+ if (db != NULL)
+ dns_db_detach(&db);
+ return (result);
+}
+
+static void
+maybe_send_secure(dns_zone_t *zone) {
+ isc_result_t result;
+
+ /*
+ * We've finished loading, or else failed to load, an inline-signing
+ * 'secure' zone. We now need information about the status of the
+ * 'raw' zone. If we failed to load, then we need it to send a
+ * copy of its database; if we succeeded, we need it to send its
+ * serial number so that we can sync with it. If it has not yet
+ * loaded, we set a flag so that it will send the necessary
+ * information when it has finished loading.
+ */
+ if (zone->raw->db != NULL) {
+ if (zone->db != NULL) {
+ isc_uint32_t serial;
+ unsigned int soacount;
+
+ result = zone_get_from_db(zone->raw, zone->raw->db,
+ NULL, &soacount, &serial, NULL,
+ NULL, NULL, NULL, NULL);
+ if (result == ISC_R_SUCCESS && soacount > 0U)
+ zone_send_secureserial(zone->raw, ISC_TRUE, serial);
+ } else
+ zone_send_securedb(zone->raw, ISC_TRUE, zone->raw->db);
+
+ } else
+ DNS_ZONE_SETFLAG(zone->raw, DNS_ZONEFLG_SENDSECURE);
+}
+
+static isc_boolean_t
+zone_unchanged(dns_db_t *db1, dns_db_t *db2, isc_mem_t *mctx) {
+ isc_result_t result;
+ isc_boolean_t answer = ISC_FALSE;
+ dns_diff_t diff;
+
+ dns_diff_init(mctx, &diff);
+ result = dns_db_diffx(&diff, db1, NULL, db2, NULL, NULL);
+ if (result == ISC_R_SUCCESS && ISC_LIST_EMPTY(diff.tuples))
+ answer = ISC_TRUE;
+ dns_diff_clear(&diff);
+ return (answer);
+}
+
+/*
+ * The zone is presumed to be locked.
+ */
static isc_result_t
zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
isc_result_t result)
@@ -3319,7 +3787,9 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
*/
if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE) {
if (zone->type == dns_zone_slave ||
- zone->type == dns_zone_stub) {
+ zone->type == dns_zone_stub ||
+ (zone->type == dns_zone_redirect &&
+ zone->masters == NULL)) {
if (result == ISC_R_FILENOTFOUND)
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"no master file");
@@ -3329,6 +3799,12 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
"failed: %s",
zone->masterfile,
dns_result_totext(result));
+ } else if (zone->type == dns_zone_master &&
+ inline_secure(zone) && result == ISC_R_FILENOTFOUND)
+ {
+ dns_zone_log(zone, ISC_LOG_DEBUG(1),
+ "no master file, requesting db");
+ maybe_send_secure(zone);
} else {
int level = ISC_LOG_ERROR;
if (zone->type == dns_zone_key &&
@@ -3388,6 +3864,8 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
"journal rollforward failed: %s",
dns_result_totext(result));
goto cleanup;
+
+
}
if (result == ISC_R_NOTFOUND || result == ISC_R_RANGE) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -3403,7 +3881,6 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
needdump = ISC_TRUE;
}
- dns_zone_log(zone, ISC_LOG_DEBUG(1), "loaded; checking validity");
/*
* Obtain ns, soa and cname counts for top of zone.
*/
@@ -3417,6 +3894,46 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
}
/*
+ * Check to make sure the journal is up to date, and remove the
+ * journal file if it isn't, as we wouldn't be able to apply
+ * updates otherwise.
+ */
+ if (zone->journal != NULL && dns_zone_isdynamic(zone, ISC_TRUE) &&
+ ! DNS_ZONE_OPTION(zone, DNS_ZONEOPT_IXFRFROMDIFFS)) {
+ isc_uint32_t jserial;
+ dns_journal_t *journal = NULL;
+
+ result = dns_journal_open(zone->mctx, zone->journal,
+ DNS_JOURNAL_READ, &journal);
+ if (result == ISC_R_SUCCESS) {
+ jserial = dns_journal_last_serial(journal);
+ dns_journal_destroy(&journal);
+ } else {
+ jserial = serial;
+ result = ISC_R_SUCCESS;
+ }
+
+ if (jserial != serial) {
+ dns_zone_log(zone, ISC_LOG_INFO,
+ "journal file is out of date: "
+ "removing journal file");
+ if (remove(zone->journal) < 0 && errno != ENOENT) {
+ char strbuf[ISC_STRERRORSIZE];
+ isc__strerror(errno, strbuf, sizeof(strbuf));
+ isc_log_write(dns_lctx,
+ DNS_LOGCATEGORY_GENERAL,
+ DNS_LOGMODULE_ZONE,
+ ISC_LOG_WARNING,
+ "unable to remove journal "
+ "'%s': '%s'",
+ zone->journal, strbuf);
+ }
+ }
+ }
+
+ dns_zone_log(zone, ISC_LOG_DEBUG(1), "loaded; checking validity");
+
+ /*
* Master / Slave / Stub zones require both NS and SOA records at
* the top of the zone.
*/
@@ -3426,6 +3943,7 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
case dns_zone_master:
case dns_zone_slave:
case dns_zone_stub:
+ case dns_zone_redirect:
if (soacount != 1) {
dns_zone_log(zone, ISC_LOG_ERROR,
"has %d SOA records", soacount);
@@ -3442,7 +3960,8 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
result = DNS_R_BADZONE;
goto cleanup;
}
- if (zone->type != dns_zone_stub) {
+ if (zone->type != dns_zone_stub &&
+ zone->type != dns_zone_redirect) {
result = check_nsec3param(zone, db);
if (result != ISC_R_SUCCESS)
goto cleanup;
@@ -3453,7 +3972,6 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
result = DNS_R_BADZONE;
goto cleanup;
}
-
if (zone->type == dns_zone_master &&
DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKDUPRR) &&
!zone_check_dup(zone, db)) {
@@ -3462,20 +3980,32 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
}
if (zone->db != NULL) {
+ unsigned int oldsoacount;
+
/*
* This is checked in zone_replacedb() for slave zones
* as they don't reload from disk.
*/
- result = zone_get_from_db(zone, zone->db, NULL, NULL,
- &oldserial, NULL, NULL, NULL,
- NULL, NULL);
+ result = zone_get_from_db(zone, zone->db, NULL,
+ &oldsoacount, &oldserial,
+ NULL, NULL, NULL, NULL,
+ NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ RUNTIME_CHECK(soacount > 0U);
if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_IXFRFROMDIFFS) &&
!isc_serial_gt(serial, oldserial)) {
isc_uint32_t serialmin, serialmax;
INSIST(zone->type == dns_zone_master);
+ if (serial == oldserial &&
+ zone_unchanged(zone->db, db, zone->mctx)) {
+ dns_zone_log(zone, ISC_LOG_INFO,
+ "ixfr-from-differences: "
+ "unchanged");
+ return(ISC_R_SUCCESS);
+ }
+
serialmin = (oldserial + 1) & 0xffffffffU;
serialmax = (oldserial + 0x7fffffffU) &
0xffffffffU;
@@ -3518,7 +4048,9 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_HAVETIMERS);
if (zone->type == dns_zone_slave ||
- zone->type == dns_zone_stub) {
+ zone->type == dns_zone_stub ||
+ (zone->type == dns_zone_redirect &&
+ zone->masters != NULL)) {
isc_time_t t;
isc_uint32_t delay;
@@ -3540,6 +4072,7 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
&zone->expiretime) >= 0)
zone->refreshtime = now;
}
+
break;
case dns_zone_key:
@@ -3591,8 +4124,24 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_write);
DNS_ZONE_SETFLAG(zone,
DNS_ZONEFLG_LOADED|DNS_ZONEFLG_NEEDNOTIFY);
+ if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_SENDSECURE) &&
+ inline_raw(zone))
+ {
+ if (zone->secure->db == NULL)
+ zone_send_securedb(zone, ISC_FALSE, db);
+ else
+ zone_send_secureserial(zone, ISC_FALSE, serial);
+ }
}
+ /*
+ * Finished loading inline-signing zone; need to get status
+ * from the raw side now.
+ */
+ if (zone->type == dns_zone_master && inline_secure(zone))
+ maybe_send_secure(zone);
+
+
result = ISC_R_SUCCESS;
if (needdump) {
@@ -3610,7 +4159,8 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
}
if (zone->type == dns_zone_master &&
- zone_isdynamic(zone) &&
+ !DNS_ZONEKEY_OPTION(zone, DNS_ZONEKEY_NORESIGN) &&
+ dns_zone_isdynamic(zone, ISC_FALSE) &&
dns_db_issecure(db)) {
dns_name_t *name;
dns_fixedname_t fixed;
@@ -3649,12 +4199,14 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
dns_db_issecure(db) ? " (DNSSEC signed)" : "");
zone->loadtime = loadtime;
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADPENDING);
return (result);
cleanup:
if (zone->type == dns_zone_slave ||
zone->type == dns_zone_stub ||
- zone->type == dns_zone_key) {
+ zone->type == dns_zone_key ||
+ (zone->type == dns_zone_redirect && zone->masters != NULL)) {
if (zone->journal != NULL)
zone_saveunique(zone, zone->journal, "jn-XXXXXXXX");
if (zone->masterfile != NULL)
@@ -3665,8 +4217,15 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
if (zone->task != NULL)
zone_settimer(zone, &now);
result = ISC_R_SUCCESS;
- } else if (zone->type == dns_zone_master)
- dns_zone_log(zone, ISC_LOG_ERROR, "not loaded due to errors.");
+ } else if (zone->type == dns_zone_master ||
+ zone->type == dns_zone_redirect) {
+ if (!(inline_secure(zone) && result == ISC_R_FILENOTFOUND))
+ dns_zone_log(zone, ISC_LOG_ERROR,
+ "not loaded due to errors.");
+ else if (zone->type == dns_zone_master)
+ result = ISC_R_SUCCESS;
+ }
+
return (result);
}
@@ -3877,6 +4436,19 @@ zone_load_soa_rr(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
*expire = soa.expire;
if (minimum != NULL)
*minimum = soa.minimum;
+ } else {
+ if (soacount != NULL)
+ *soacount = 0;
+ if (serial != NULL)
+ *serial = 0;
+ if (refresh != NULL)
+ *refresh = 0;
+ if (retry != NULL)
+ *retry = 0;
+ if (expire != NULL)
+ *expire = 0;
+ if (minimum != NULL)
+ *minimum = 0;
}
result = ISC_R_SUCCESS;
@@ -3948,6 +4520,8 @@ dns_zone_attach(dns_zone_t *source, dns_zone_t **target) {
void
dns_zone_detach(dns_zone_t **zonep) {
dns_zone_t *zone;
+ dns_zone_t *raw = NULL;
+ dns_zone_t *secure = NULL;
unsigned int refs;
isc_boolean_t free_now = ISC_FALSE;
@@ -3985,12 +4559,21 @@ dns_zone_detach(dns_zone_t **zonep) {
*/
INSIST(zone->view == NULL);
free_now = ISC_TRUE;
+ raw = zone->raw;
+ zone->raw = NULL;
+ secure = zone->secure;
+ zone->secure = NULL;
}
UNLOCK_ZONE(zone);
}
*zonep = NULL;
- if (free_now)
+ if (free_now) {
+ if (raw != NULL)
+ dns_zone_detach(&raw);
+ if (secure != NULL)
+ dns_zone_idetach(&secure);
zone_free(zone);
+ }
}
void
@@ -4002,26 +4585,6 @@ dns_zone_iattach(dns_zone_t *source, dns_zone_t **target) {
UNLOCK_ZONE(source);
}
-isc_result_t
-dns_zone_synckeyzone(dns_zone_t *zone) {
- isc_result_t result;
- dns_db_t *db = NULL;
-
- if (zone->type != dns_zone_key)
- return (DNS_R_BADZONE);
-
- CHECK(dns_zone_getdb(zone, &db));
-
- LOCK_ZONE(zone);
- result = sync_keyzone(zone, db);
- UNLOCK_ZONE(zone);
-
- failure:
- if (db != NULL)
- dns_db_detach(&db);
- return (result);
-}
-
static void
zone_iattach(dns_zone_t *source, dns_zone_t **target) {
@@ -4246,48 +4809,8 @@ dns_zone_getnotifysrc6(dns_zone_t *zone) {
return (&zone->notifysrc6);
}
-isc_result_t
-dns_zone_setalsonotify(dns_zone_t *zone, const isc_sockaddr_t *notify,
- isc_uint32_t count)
-{
- isc_sockaddr_t *new;
-
- REQUIRE(DNS_ZONE_VALID(zone));
- REQUIRE(count == 0 || notify != NULL);
-
- LOCK_ZONE(zone);
- if (zone->notify != NULL) {
- isc_mem_put(zone->mctx, zone->notify,
- zone->notifycnt * sizeof(*new));
- zone->notify = NULL;
- zone->notifycnt = 0;
- }
- if (count != 0) {
- new = isc_mem_get(zone->mctx, count * sizeof(*new));
- if (new == NULL) {
- UNLOCK_ZONE(zone);
- return (ISC_R_NOMEMORY);
- }
- memcpy(new, notify, count * sizeof(*new));
- zone->notify = new;
- zone->notifycnt = count;
- }
- UNLOCK_ZONE(zone);
- return (ISC_R_SUCCESS);
-}
-
-isc_result_t
-dns_zone_setmasters(dns_zone_t *zone, const isc_sockaddr_t *masters,
- isc_uint32_t count)
-{
- isc_result_t result;
-
- result = dns_zone_setmasterswithkeys(zone, masters, NULL, count);
- return (result);
-}
-
static isc_boolean_t
-same_masters(const isc_sockaddr_t *old, const isc_sockaddr_t *new,
+same_addrs(const isc_sockaddr_t *old, const isc_sockaddr_t *new,
isc_uint32_t count)
{
unsigned int i;
@@ -4317,15 +4840,170 @@ same_keynames(dns_name_t **old, dns_name_t **new, isc_uint32_t count) {
return (ISC_TRUE);
}
+static void
+clear_addresskeylist(isc_sockaddr_t **addrsp, dns_name_t ***keynamesp,
+ unsigned int *countp, isc_mem_t *mctx)
+{
+ unsigned int count;
+ isc_sockaddr_t *addrs;
+ dns_name_t **keynames;
+
+ REQUIRE(countp != NULL && addrsp != NULL && keynamesp != NULL);
+
+ count = *countp;
+ *countp = 0;
+ addrs = *addrsp;
+ *addrsp = NULL;
+ keynames = *keynamesp;
+ *keynamesp = NULL;
+
+ if (addrs != NULL)
+ isc_mem_put(mctx, addrs, count * sizeof(isc_sockaddr_t));
+
+ if (keynames != NULL) {
+ unsigned int i;
+ for (i = 0; i < count; i++) {
+ if (keynames[i] != NULL) {
+ dns_name_free(keynames[i], mctx);
+ isc_mem_put(mctx, keynames[i],
+ sizeof(dns_name_t));
+ keynames[i] = NULL;
+ }
+ }
+ isc_mem_put(mctx, keynames, count * sizeof(dns_name_t *));
+ }
+}
+
+static isc_result_t
+set_addrkeylist(unsigned int count,
+ const isc_sockaddr_t *addrs, isc_sockaddr_t **newaddrsp,
+ dns_name_t **names, dns_name_t ***newnamesp,
+ isc_mem_t *mctx)
+{
+ isc_result_t result;
+ isc_sockaddr_t *newaddrs = NULL;
+ dns_name_t **newnames = NULL;
+ unsigned int i;
+
+ REQUIRE(newaddrsp != NULL && *newaddrsp == NULL);
+ REQUIRE(newnamesp != NULL && *newnamesp == NULL);
+
+ newaddrs = isc_mem_get(mctx, count * sizeof(*newaddrs));
+ if (newaddrs == NULL)
+ return (ISC_R_NOMEMORY);
+ memcpy(newaddrs, addrs, count * sizeof(*newaddrs));
+
+ newnames = NULL;
+ if (names != NULL) {
+ newnames = isc_mem_get(mctx, count * sizeof(*newnames));
+ if (newnames == NULL) {
+ isc_mem_put(mctx, newaddrs, count * sizeof(*newaddrs));
+ return (ISC_R_NOMEMORY);
+ }
+ for (i = 0; i < count; i++)
+ newnames[i] = NULL;
+ for (i = 0; i < count; i++) {
+ if (names[i] != NULL) {
+ newnames[i] = isc_mem_get(mctx,
+ sizeof(dns_name_t));
+ if (newnames[i] == NULL)
+ goto allocfail;
+ dns_name_init(newnames[i], NULL);
+ result = dns_name_dup(names[i], mctx,
+ newnames[i]);
+ if (result != ISC_R_SUCCESS) {
+ allocfail:
+ for (i = 0; i < count; i++)
+ if (newnames[i] != NULL)
+ dns_name_free(
+ newnames[i],
+ mctx);
+ isc_mem_put(mctx, newaddrs,
+ count * sizeof(*newaddrs));
+ isc_mem_put(mctx, newnames,
+ count * sizeof(*newnames));
+ return (ISC_R_NOMEMORY);
+ }
+ }
+ }
+ }
+
+ *newaddrsp = newaddrs;
+ *newnamesp = newnames;
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
+dns_zone_setalsonotify(dns_zone_t *zone, const isc_sockaddr_t *notify,
+ isc_uint32_t count)
+{
+ return (dns_zone_setalsonotifywithkeys(zone, notify, NULL, count));
+}
+
+isc_result_t
+dns_zone_setalsonotifywithkeys(dns_zone_t *zone, const isc_sockaddr_t *notify,
+ dns_name_t **keynames, isc_uint32_t count)
+{
+ isc_result_t result;
+ isc_sockaddr_t *newaddrs = NULL;
+ dns_name_t **newnames = NULL;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(count == 0 || notify != NULL);
+ if (keynames != NULL)
+ REQUIRE(count != 0);
+
+ LOCK_ZONE(zone);
+
+ if (count == zone->notifycnt &&
+ same_addrs(zone->notify, notify, count) &&
+ same_keynames(zone->notifykeynames, keynames, count))
+ goto unlock;
+
+ clear_addresskeylist(&zone->notify, &zone->notifykeynames,
+ &zone->notifycnt, zone->mctx);
+
+ if (count == 0)
+ goto unlock;
+
+ /*
+ * Set up the notify and notifykey lists
+ */
+ result = set_addrkeylist(count, notify, &newaddrs,
+ keynames, &newnames, zone->mctx);
+ if (result != ISC_R_SUCCESS)
+ goto unlock;
+
+ /*
+ * Everything is ok so attach to the zone.
+ */
+ zone->notify = newaddrs;
+ zone->notifykeynames = newnames;
+ zone->notifycnt = count;
+ unlock:
+ UNLOCK_ZONE(zone);
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
+dns_zone_setmasters(dns_zone_t *zone, const isc_sockaddr_t *masters,
+ isc_uint32_t count)
+{
+ isc_result_t result;
+
+ result = dns_zone_setmasterswithkeys(zone, masters, NULL, count);
+ return (result);
+}
+
isc_result_t
dns_zone_setmasterswithkeys(dns_zone_t *zone,
const isc_sockaddr_t *masters,
dns_name_t **keynames,
isc_uint32_t count)
{
- isc_sockaddr_t *new;
isc_result_t result = ISC_R_SUCCESS;
- dns_name_t **newname;
+ isc_sockaddr_t *newaddrs = NULL;
+ dns_name_t **newnames = NULL;
isc_boolean_t *newok;
unsigned int i;
@@ -4343,38 +5021,24 @@ dns_zone_setmasterswithkeys(dns_zone_t *zone,
* unlock and exit.
*/
if (count != zone->masterscnt ||
- !same_masters(zone->masters, masters, count) ||
+ !same_addrs(zone->masters, masters, count) ||
!same_keynames(zone->masterkeynames, keynames, count)) {
if (zone->request != NULL)
dns_request_cancel(zone->request);
} else
goto unlock;
- if (zone->masters != NULL) {
- isc_mem_put(zone->mctx, zone->masters,
- zone->masterscnt * sizeof(*new));
- zone->masters = NULL;
- }
- if (zone->masterkeynames != NULL) {
- for (i = 0; i < zone->masterscnt; i++) {
- if (zone->masterkeynames[i] != NULL) {
- dns_name_free(zone->masterkeynames[i],
- zone->mctx);
- isc_mem_put(zone->mctx,
- zone->masterkeynames[i],
- sizeof(dns_name_t));
- zone->masterkeynames[i] = NULL;
- }
- }
- isc_mem_put(zone->mctx, zone->masterkeynames,
- zone->masterscnt * sizeof(dns_name_t *));
- zone->masterkeynames = NULL;
- }
+
+ /*
+ * This needs to happen before clear_addresskeylist() sets
+ * zone->masterscnt to 0:
+ */
if (zone->mastersok != NULL) {
isc_mem_put(zone->mctx, zone->mastersok,
zone->masterscnt * sizeof(isc_boolean_t));
zone->mastersok = NULL;
}
- zone->masterscnt = 0;
+ clear_addresskeylist(&zone->masters, &zone->masterkeynames,
+ &zone->masterscnt, zone->mctx);
/*
* If count == 0, don't allocate any space for masters, mastersok or
* keynames so internally, those pointers are NULL if count == 0
@@ -4383,76 +5047,34 @@ dns_zone_setmasterswithkeys(dns_zone_t *zone,
goto unlock;
/*
- * masters must contain count elements!
- */
- new = isc_mem_get(zone->mctx, count * sizeof(*new));
- if (new == NULL) {
- result = ISC_R_NOMEMORY;
- goto unlock;
- }
- memcpy(new, masters, count * sizeof(*new));
-
- /*
- * Similarly for mastersok.
+ * mastersok must contain count elements
*/
newok = isc_mem_get(zone->mctx, count * sizeof(*newok));
if (newok == NULL) {
result = ISC_R_NOMEMORY;
- isc_mem_put(zone->mctx, new, count * sizeof(*new));
+ isc_mem_put(zone->mctx, newaddrs, count * sizeof(*newaddrs));
goto unlock;
};
for (i = 0; i < count; i++)
newok[i] = ISC_FALSE;
/*
- * if keynames is non-NULL, it must contain count elements!
+ * Now set up the masters and masterkey lists
*/
- newname = NULL;
- if (keynames != NULL) {
- newname = isc_mem_get(zone->mctx, count * sizeof(*newname));
- if (newname == NULL) {
- result = ISC_R_NOMEMORY;
- isc_mem_put(zone->mctx, new, count * sizeof(*new));
- isc_mem_put(zone->mctx, newok, count * sizeof(*newok));
- goto unlock;
- }
- for (i = 0; i < count; i++)
- newname[i] = NULL;
- for (i = 0; i < count; i++) {
- if (keynames[i] != NULL) {
- newname[i] = isc_mem_get(zone->mctx,
- sizeof(dns_name_t));
- if (newname[i] == NULL)
- goto allocfail;
- dns_name_init(newname[i], NULL);
- result = dns_name_dup(keynames[i], zone->mctx,
- newname[i]);
- if (result != ISC_R_SUCCESS) {
- allocfail:
- for (i = 0; i < count; i++)
- if (newname[i] != NULL)
- dns_name_free(
- newname[i],
- zone->mctx);
- isc_mem_put(zone->mctx, new,
- count * sizeof(*new));
- isc_mem_put(zone->mctx, newok,
- count * sizeof(*newok));
- isc_mem_put(zone->mctx, newname,
- count * sizeof(*newname));
- goto unlock;
- }
- }
- }
+ result = set_addrkeylist(count, masters, &newaddrs,
+ keynames, &newnames, zone->mctx);
+ if (result != ISC_R_SUCCESS) {
+ isc_mem_put(zone->mctx, newok, count * sizeof(*newok));
+ goto unlock;
}
/*
* Everything is ok so attach to the zone.
*/
zone->curmaster = 0;
- zone->masters = new;
zone->mastersok = newok;
- zone->masterkeynames = newname;
+ zone->masters = newaddrs;
+ zone->masterkeynames = newnames;
zone->masterscnt = count;
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_NOMASTERS);
@@ -4543,20 +5165,21 @@ find_zone_keys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
}
static isc_result_t
-offline(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff, dns_name_t *name,
- dns_ttl_t ttl, dns_rdata_t *rdata)
+offline(dns_db_t *db, dns_dbversion_t *ver, zonediff_t *zonediff,
+ dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata)
{
isc_result_t result;
if ((rdata->flags & DNS_RDATA_OFFLINE) != 0)
return (ISC_R_SUCCESS);
- result = update_one_rr(db, ver, diff, DNS_DIFFOP_DELRESIGN,
+ result = update_one_rr(db, ver, zonediff->diff, DNS_DIFFOP_DELRESIGN,
name, ttl, rdata);
if (result != ISC_R_SUCCESS)
return (result);
rdata->flags |= DNS_RDATA_OFFLINE;
- result = update_one_rr(db, ver, diff, DNS_DIFFOP_ADDRESIGN,
+ result = update_one_rr(db, ver, zonediff->diff, DNS_DIFFOP_ADDRESIGN,
name, ttl, rdata);
+ zonediff->offline = ISC_TRUE;
return (result);
}
@@ -4631,7 +5254,7 @@ delsig_ok(dns_rdata_rrsig_t *rrsig_ptr, dst_key_t **keys, unsigned int nkeys) {
*/
static isc_result_t
del_sigs(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_rdatatype_t type, dns_diff_t *diff, dst_key_t **keys,
+ dns_rdatatype_t type, zonediff_t *zonediff, dst_key_t **keys,
unsigned int nkeys, isc_stdtime_t now, isc_boolean_t incremental)
{
isc_result_t result;
@@ -4677,7 +5300,7 @@ del_sigs(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
if (type != dns_rdatatype_dnskey) {
if (delsig_ok(&rrsig, keys, nkeys)) {
- result = update_one_rr(db, ver, diff,
+ result = update_one_rr(db, ver, zonediff->diff,
DNS_DIFFOP_DELRESIGN, name,
rdataset.ttl, &rdata);
if (incremental)
@@ -4695,8 +5318,9 @@ del_sigs(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
* for the private part.
*/
if (incremental) {
- result = offline(db, ver, diff, name,
- rdataset.ttl, &rdata);
+ result = offline(db, ver, zonediff,
+ name, rdataset.ttl,
+ &rdata);
changed = ISC_TRUE;
if (result != ISC_R_SUCCESS)
break;
@@ -4756,11 +5380,12 @@ del_sigs(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
warn = maybe;
if (warn == 0 || warn > timeexpire)
warn = timeexpire;
- result = offline(db, ver, diff, name,
- rdataset.ttl, &rdata);
+ result = offline(db, ver, zonediff,
+ name, rdataset.ttl,
+ &rdata);
break;
}
- result = update_one_rr(db, ver, diff,
+ result = update_one_rr(db, ver, zonediff->diff,
DNS_DIFFOP_DELRESIGN,
name, rdataset.ttl,
&rdata);
@@ -4773,7 +5398,7 @@ del_sigs(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
* delete the RRSIG.
*/
if (!found)
- result = update_one_rr(db, ver, diff,
+ result = update_one_rr(db, ver, zonediff->diff,
DNS_DIFFOP_DELRESIGN, name,
rdataset.ttl, &rdata);
if (result != ISC_R_SUCCESS)
@@ -4903,9 +5528,11 @@ add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
static void
zone_resigninc(dns_zone_t *zone) {
+ const char *me = "zone_resigninc";
dns_db_t *db = NULL;
dns_dbversion_t *version = NULL;
- dns_diff_t sig_diff;
+ dns_diff_t _sig_diff;
+ zonediff_t zonediff;
dns_fixedname_t fixed;
dns_name_t *name;
dns_rdataset_t rdataset;
@@ -4919,15 +5546,21 @@ zone_resigninc(dns_zone_t *zone) {
unsigned int nkeys = 0;
unsigned int resign;
+ ENTER;
+
dns_rdataset_init(&rdataset);
dns_fixedname_init(&fixed);
- dns_diff_init(zone->mctx, &sig_diff);
- sig_diff.resign = zone->sigresigninginterval;
+ dns_diff_init(zone->mctx, &_sig_diff);
+ _sig_diff.resign = zone->sigresigninginterval;
+ zonediff_init(&zonediff, &_sig_diff);
/*
- * Updates are disabled. Pause for 5 minutes.
+ * Zone is frozen or automatic resigning is disabled.
+ * Pause for 5 minutes.
*/
- if (zone->update_disabled) {
+ if (zone->update_disabled ||
+ DNS_ZONEKEY_OPTION(zone, DNS_ZONEKEY_NORESIGN))
+ {
result = ISC_R_FAILURE;
goto failure;
}
@@ -4992,7 +5625,7 @@ zone_resigninc(dns_zone_t *zone) {
resign > stop)
break;
- result = del_sigs(zone, db, version, name, covers, &sig_diff,
+ result = del_sigs(zone, db, version, name, covers, &zonediff,
zone_keys, nkeys, now, ISC_TRUE);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -5001,7 +5634,7 @@ zone_resigninc(dns_zone_t *zone) {
break;
}
- result = add_sigs(db, version, name, covers, &sig_diff,
+ result = add_sigs(db, version, name, covers, zonediff.diff,
zone_keys, nkeys, zone->mctx, inception,
expire, check_ksk, keyset_kskonly);
if (result != ISC_R_SUCCESS) {
@@ -5026,7 +5659,7 @@ zone_resigninc(dns_zone_t *zone) {
goto failure;
result = del_sigs(zone, db, version, &zone->origin, dns_rdatatype_soa,
- &sig_diff, zone_keys, nkeys, now, ISC_TRUE);
+ &zonediff, zone_keys, nkeys, now, ISC_TRUE);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"zone_resigninc:del_sigs -> %s",
@@ -5037,14 +5670,20 @@ zone_resigninc(dns_zone_t *zone) {
/*
* Did we change anything in the zone?
*/
- if (ISC_LIST_EMPTY(sig_diff.tuples))
+ if (ISC_LIST_EMPTY(zonediff.diff->tuples)) {
+ /*
+ * Commit the changes if any key has been marked as offline. */
+ if (zonediff.offline)
+ dns_db_closeversion(db, &version, ISC_TRUE);
goto failure;
+ }
/* Increment SOA serial if we have made changes */
- result = increment_soa_serial(db, version, &sig_diff, zone->mctx);
+ result = update_soa_serial(db, version, zonediff.diff, zone->mctx,
+ zone->updatemethod);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
- "zone_resigninc:increment_soa_serial -> %s",
+ "zone_resigninc:update_soa_serial -> %s",
dns_result_totext(result));
goto failure;
}
@@ -5054,8 +5693,8 @@ zone_resigninc(dns_zone_t *zone) {
* termination is sensible.
*/
result = add_sigs(db, version, &zone->origin, dns_rdatatype_soa,
- &sig_diff, zone_keys, nkeys, zone->mctx, inception,
- soaexpire, check_ksk, keyset_kskonly);
+ zonediff.diff, zone_keys, nkeys, zone->mctx,
+ inception, soaexpire, check_ksk, keyset_kskonly);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"zone_resigninc:add_sigs -> %s",
@@ -5064,13 +5703,13 @@ zone_resigninc(dns_zone_t *zone) {
}
/* Write changes to journal file. */
- CHECK(zone_journal(zone, &sig_diff, "zone_resigninc"));
+ CHECK(zone_journal(zone, zonediff.diff, NULL, "zone_resigninc"));
/* Everything has succeeded. Commit the changes. */
dns_db_closeversion(db, &version, ISC_TRUE);
failure:
- dns_diff_clear(&sig_diff);
+ dns_diff_clear(&_sig_diff);
for (i = 0; i < nkeys; i++)
dst_key_free(&zone_keys[i]);
if (version != NULL) {
@@ -5472,6 +6111,7 @@ fixup_nsec3param(dns_db_t *db, dns_dbversion_t *ver, dns_nsec3chain_t *chain,
isc_buffer_t buffer;
unsigned char parambuf[DNS_NSEC3PARAM_BUFFERSIZE];
dns_ttl_t ttl = 0;
+ isc_boolean_t nseconly = ISC_FALSE, nsec3ok = ISC_FALSE;
dns_rdataset_init(&rdataset);
@@ -5522,6 +6162,10 @@ fixup_nsec3param(dns_db_t *db, dns_dbversion_t *ver, dns_nsec3chain_t *chain,
if (active)
goto add;
+
+ result = dns_nsec_nseconly(db, ver, &nseconly);
+ nsec3ok = (result == ISC_R_SUCCESS && !nseconly);
+
/*
* Delete all private records which match that in nsec3chain.
*/
@@ -5544,7 +6188,9 @@ fixup_nsec3param(dns_db_t *db, dns_dbversion_t *ver, dns_nsec3chain_t *chain,
continue;
CHECK(dns_rdata_tostruct(&rdata, &nsec3param, NULL));
- if (nsec3param.hash != chain->nsec3param.hash ||
+ if ((!nsec3ok &&
+ (nsec3param.flags & DNS_NSEC3FLAG_INITIAL) != 0) ||
+ nsec3param.hash != chain->nsec3param.hash ||
nsec3param.iterations != chain->nsec3param.iterations ||
nsec3param.salt_length != chain->nsec3param.salt_length ||
memcmp(nsec3param.salt, chain->nsec3param.salt,
@@ -5740,7 +6386,7 @@ update_sigs(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *version,
dst_key_t *zone_keys[], unsigned int nkeys, dns_zone_t *zone,
isc_stdtime_t inception, isc_stdtime_t expire, isc_stdtime_t now,
isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly,
- dns_diff_t *sig_diff)
+ zonediff_t *zonediff)
{
dns_difftuple_t *tuple;
isc_result_t result;
@@ -5749,7 +6395,7 @@ update_sigs(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *version,
tuple != NULL;
tuple = ISC_LIST_HEAD(diff->tuples)) {
result = del_sigs(zone, db, version, &tuple->name,
- tuple->rdata.type, sig_diff,
+ tuple->rdata.type, zonediff,
zone_keys, nkeys, now, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -5758,7 +6404,7 @@ update_sigs(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *version,
return (result);
}
result = add_sigs(db, version, &tuple->name,
- tuple->rdata.type, sig_diff,
+ tuple->rdata.type, zonediff->diff,
zone_keys, nkeys, zone->mctx, inception,
expire, check_ksk, keyset_kskonly);
if (result != ISC_R_SUCCESS) {
@@ -5775,7 +6421,7 @@ update_sigs(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *version,
!dns_name_equal(&tuple->name, &next->name)))
next = ISC_LIST_NEXT(next, link);
ISC_LIST_UNLINK(diff->tuples, tuple, link);
- dns_diff_appendminimal(sig_diff, &tuple);
+ dns_diff_appendminimal(zonediff->diff, &tuple);
INSIST(tuple == NULL);
tuple = next;
} while (tuple != NULL);
@@ -5789,13 +6435,15 @@ update_sigs(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *version,
*/
static void
zone_nsec3chain(dns_zone_t *zone) {
+ const char *me = "zone_nsec3chain";
dns_db_t *db = NULL;
dns_dbnode_t *node = NULL;
dns_dbversion_t *version = NULL;
- dns_diff_t sig_diff;
+ dns_diff_t _sig_diff;
dns_diff_t nsec_diff;
dns_diff_t nsec3_diff;
dns_diff_t param_diff;
+ zonediff_t zonediff;
dns_fixedname_t fixed;
dns_fixedname_t nextfixed;
dns_name_t *name, *nextname;
@@ -5821,6 +6469,8 @@ zone_nsec3chain(dns_zone_t *zone) {
isc_boolean_t updatensec = ISC_FALSE;
dns_rdatatype_t privatetype = zone->privatetype;
+ ENTER;
+
dns_rdataset_init(&rdataset);
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
@@ -5829,8 +6479,9 @@ zone_nsec3chain(dns_zone_t *zone) {
dns_diff_init(zone->mctx, &param_diff);
dns_diff_init(zone->mctx, &nsec3_diff);
dns_diff_init(zone->mctx, &nsec_diff);
- dns_diff_init(zone->mctx, &sig_diff);
- sig_diff.resign = zone->sigresigninginterval;
+ dns_diff_init(zone->mctx, &_sig_diff);
+ _sig_diff.resign = zone->sigresigninginterval;
+ zonediff_init(&zonediff, &_sig_diff);
ISC_LIST_INIT(cleanup);
/*
@@ -6028,6 +6679,7 @@ zone_nsec3chain(dns_zone_t *zone) {
result = dns_dbiterator_next(nsec3chain->dbiterator);
if (result == ISC_R_NOMORE && nsec3chain->delete_nsec) {
+ dns_dbiterator_pause(nsec3chain->dbiterator);
CHECK(fixup_nsec3param(db, version, nsec3chain,
ISC_FALSE, privatetype,
&param_diff));
@@ -6112,7 +6764,8 @@ zone_nsec3chain(dns_zone_t *zone) {
* of removing this NSEC3 chain.
*/
if (first && !updatensec &&
- (nsec3chain->nsec3param.flags & DNS_NSEC3FLAG_NONSEC) == 0) {
+ (nsec3chain->nsec3param.flags & DNS_NSEC3FLAG_NONSEC) == 0)
+ {
result = need_nsec_chain(db, version,
&nsec3chain->nsec3param,
&buildnsecchain);
@@ -6325,6 +6978,7 @@ zone_nsec3chain(dns_zone_t *zone) {
if (rebuild_nsec) {
if (nsec3chain != NULL)
dns_dbiterator_pause(nsec3chain->dbiterator);
+
result = updatesecure(db, version, &zone->origin,
zone->minimum, ISC_TRUE,
&nsec_diff);
@@ -6336,7 +6990,11 @@ zone_nsec3chain(dns_zone_t *zone) {
goto failure;
}
}
+
if (rebuild_nsec3) {
+ if (nsec3chain != NULL)
+ dns_dbiterator_pause(nsec3chain->dbiterator);
+
result = dns_nsec3_addnsec3s(db, version,
dns_db_origin(db),
zone->minimum, ISC_FALSE,
@@ -6351,12 +7009,17 @@ zone_nsec3chain(dns_zone_t *zone) {
}
}
+ if (nsec3chain != NULL)
+ dns_dbiterator_pause(nsec3chain->dbiterator);
+
/*
* Add / update signatures for the NSEC3 records.
*/
+ if (nsec3chain != NULL)
+ dns_dbiterator_pause(nsec3chain->dbiterator);
result = update_sigs(&nsec3_diff, db, version, zone_keys,
nkeys, zone, inception, expire, now,
- check_ksk, keyset_kskonly, &sig_diff);
+ check_ksk, keyset_kskonly, &zonediff);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:"
"update_sigs -> %s", dns_result_totext(result));
@@ -6369,7 +7032,7 @@ zone_nsec3chain(dns_zone_t *zone) {
*/
result = update_sigs(&param_diff, db, version, zone_keys,
nkeys, zone, inception, expire, now,
- check_ksk, keyset_kskonly, &sig_diff);
+ check_ksk, keyset_kskonly, &zonediff);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:"
"update_sigs -> %s", dns_result_totext(result));
@@ -6377,8 +7040,6 @@ zone_nsec3chain(dns_zone_t *zone) {
}
if (updatensec) {
- if (nsec3chain != NULL)
- dns_dbiterator_pause(nsec3chain->dbiterator);
result = updatesecure(db, version, &zone->origin,
zone->minimum, ISC_FALSE, &nsec_diff);
if (result != ISC_R_SUCCESS) {
@@ -6391,7 +7052,7 @@ zone_nsec3chain(dns_zone_t *zone) {
result = update_sigs(&nsec_diff, db, version, zone_keys,
nkeys, zone, inception, expire, now,
- check_ksk, keyset_kskonly, &sig_diff);
+ check_ksk, keyset_kskonly, &zonediff);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:"
"update_sigs -> %s", dns_result_totext(result));
@@ -6402,28 +7063,34 @@ zone_nsec3chain(dns_zone_t *zone) {
* If we made no effective changes to the zone then we can just
* cleanup otherwise we need to increment the serial.
*/
- if (ISC_LIST_HEAD(sig_diff.tuples) == NULL)
+ if (ISC_LIST_EMPTY(zonediff.diff->tuples)) {
+ /*
+ * No need to call dns_db_closeversion() here as it is
+ * called with commit = ISC_TRUE below.
+ */
goto done;
+ }
result = del_sigs(zone, db, version, &zone->origin, dns_rdatatype_soa,
- &sig_diff, zone_keys, nkeys, now, ISC_FALSE);
+ &zonediff, zone_keys, nkeys, now, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:"
"del_sigs -> %s", dns_result_totext(result));
goto failure;
}
- result = increment_soa_serial(db, version, &sig_diff, zone->mctx);
+ result = update_soa_serial(db, version, zonediff.diff, zone->mctx,
+ zone->updatemethod);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:"
- "increment_soa_serial -> %s",
+ "update_soa_serial -> %s",
dns_result_totext(result));
goto failure;
}
result = add_sigs(db, version, &zone->origin, dns_rdatatype_soa,
- &sig_diff, zone_keys, nkeys, zone->mctx, inception,
- soaexpire, check_ksk, keyset_kskonly);
+ zonediff.diff, zone_keys, nkeys, zone->mctx,
+ inception, soaexpire, check_ksk, keyset_kskonly);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:"
"add_sigs -> %s", dns_result_totext(result));
@@ -6431,7 +7098,7 @@ zone_nsec3chain(dns_zone_t *zone) {
}
/* Write changes to journal file. */
- CHECK(zone_journal(zone, &sig_diff, "zone_nsec3chain"));
+ CHECK(zone_journal(zone, zonediff.diff, NULL, "zone_nsec3chain"));
LOCK_ZONE(zone);
zone_needdump(zone, DNS_DUMP_DELAY);
@@ -6451,6 +7118,7 @@ zone_nsec3chain(dns_zone_t *zone) {
/*
* Everything has succeeded. Commit the changes.
+ * Unconditionally commit as zonediff.offline not checked above.
*/
dns_db_closeversion(db, &version, ISC_TRUE);
@@ -6520,7 +7188,7 @@ zone_nsec3chain(dns_zone_t *zone) {
dns_diff_clear(&param_diff);
dns_diff_clear(&nsec3_diff);
dns_diff_clear(&nsec_diff);
- dns_diff_clear(&sig_diff);
+ dns_diff_clear(&_sig_diff);
if (iterator != NULL)
dns_rdatasetiter_destroy(&iterator);
@@ -6622,11 +7290,13 @@ del_sig(dns_db_t *db, dns_dbversion_t *version, dns_name_t *name,
*/
static void
zone_sign(dns_zone_t *zone) {
+ const char *me = "zone_sign";
dns_db_t *db = NULL;
dns_dbnode_t *node = NULL;
dns_dbversion_t *version = NULL;
- dns_diff_t sig_diff;
+ dns_diff_t _sig_diff;
dns_diff_t post_diff;
+ zonediff_t zonediff;
dns_fixedname_t fixed;
dns_fixedname_t nextfixed;
dns_name_t *name, *nextname;
@@ -6648,14 +7318,17 @@ zone_sign(dns_zone_t *zone) {
unsigned int nkeys = 0;
isc_uint32_t nodes;
+ ENTER;
+
dns_rdataset_init(&rdataset);
dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
dns_fixedname_init(&nextfixed);
nextname = dns_fixedname_name(&nextfixed);
- dns_diff_init(zone->mctx, &sig_diff);
- sig_diff.resign = zone->sigresigninginterval;
+ dns_diff_init(zone->mctx, &_sig_diff);
+ _sig_diff.resign = zone->sigresigninginterval;
dns_diff_init(zone->mctx, &post_diff);
+ zonediff_init(&zonediff, &_sig_diff);
ISC_LIST_INIT(cleanup);
/*
@@ -6769,7 +7442,7 @@ zone_sign(dns_zone_t *zone) {
dns_dbiterator_pause(signing->dbiterator);
CHECK(del_sig(db, version, name, node, nkeys,
signing->algorithm, signing->keyid,
- &sig_diff));
+ zonediff.diff));
}
/*
@@ -6864,7 +7537,7 @@ zone_sign(dns_zone_t *zone) {
build_nsec, zone_keys[i], inception,
expire, zone->minimum, is_ksk,
ISC_TF(both && keyset_kskonly),
- &delegation, &sig_diff,
+ &delegation, zonediff.diff,
&signatures, zone->mctx));
/*
* If we are adding we are done. Look for other keys
@@ -6946,7 +7619,7 @@ zone_sign(dns_zone_t *zone) {
if (ISC_LIST_HEAD(post_diff.tuples) != NULL) {
result = update_sigs(&post_diff, db, version, zone_keys,
nkeys, zone, inception, expire, now,
- check_ksk, keyset_kskonly, &sig_diff);
+ check_ksk, keyset_kskonly, &zonediff);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_sign:"
"update_sigs -> %s",
@@ -6958,7 +7631,9 @@ zone_sign(dns_zone_t *zone) {
/*
* Have we changed anything?
*/
- if (ISC_LIST_HEAD(sig_diff.tuples) == NULL) {
+ if (ISC_LIST_EMPTY(zonediff.diff->tuples)) {
+ if (zonediff.offline)
+ commit = ISC_TRUE;
result = ISC_R_SUCCESS;
goto pauseall;
}
@@ -6966,7 +7641,7 @@ zone_sign(dns_zone_t *zone) {
commit = ISC_TRUE;
result = del_sigs(zone, db, version, &zone->origin, dns_rdatatype_soa,
- &sig_diff, zone_keys, nkeys, now, ISC_FALSE);
+ &zonediff, zone_keys, nkeys, now, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"zone_sign:del_sigs -> %s",
@@ -6974,10 +7649,11 @@ zone_sign(dns_zone_t *zone) {
goto failure;
}
- result = increment_soa_serial(db, version, &sig_diff, zone->mctx);
+ result = update_soa_serial(db, version, zonediff.diff, zone->mctx,
+ zone->updatemethod);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
- "zone_sign:increment_soa_serial -> %s",
+ "zone_sign:update_soa_serial -> %s",
dns_result_totext(result));
goto failure;
}
@@ -6987,8 +7663,8 @@ zone_sign(dns_zone_t *zone) {
* termination is sensible.
*/
result = add_sigs(db, version, &zone->origin, dns_rdatatype_soa,
- &sig_diff, zone_keys, nkeys, zone->mctx, inception,
- soaexpire, check_ksk, keyset_kskonly);
+ zonediff.diff, zone_keys, nkeys, zone->mctx,
+ inception, soaexpire, check_ksk, keyset_kskonly);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"zone_sign:add_sigs -> %s",
@@ -6999,7 +7675,7 @@ zone_sign(dns_zone_t *zone) {
/*
* Write changes to journal file.
*/
- CHECK(zone_journal(zone, &sig_diff, "zone_sign"));
+ CHECK(zone_journal(zone, zonediff.diff, NULL, "zone_sign"));
pauseall:
/*
@@ -7059,7 +7735,7 @@ zone_sign(dns_zone_t *zone) {
signing = ISC_LIST_NEXT(signing, link))
dns_dbiterator_pause(signing->dbiterator);
- dns_diff_clear(&sig_diff);
+ dns_diff_clear(&_sig_diff);
for (i = 0; i < nkeys; i++)
dst_key_free(&zone_keys[i]);
@@ -7090,19 +7766,22 @@ normalize_key(dns_rdata_t *rr, dns_rdata_t *target,
dns_rdata_dnskey_t dnskey;
dns_rdata_keydata_t keydata;
isc_buffer_t buf;
+ isc_result_t result;
dns_rdata_reset(target);
isc_buffer_init(&buf, data, size);
switch (rr->type) {
case dns_rdatatype_dnskey:
- dns_rdata_tostruct(rr, &dnskey, NULL);
+ result = dns_rdata_tostruct(rr, &dnskey, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
dnskey.flags &= ~DNS_KEYFLAG_REVOKE;
dns_rdata_fromstruct(target, rr->rdclass, dns_rdatatype_dnskey,
&dnskey, &buf);
break;
case dns_rdatatype_keydata:
- dns_rdata_tostruct(rr, &keydata, NULL);
+ result = dns_rdata_tostruct(rr, &keydata, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_keydata_todnskey(&keydata, &dnskey, NULL);
dns_rdata_fromstruct(target, rr->rdclass, dns_rdatatype_dnskey,
&dnskey, &buf);
@@ -7509,7 +8188,8 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
result = dns_rdataset_next(&kfetch->keydataset)) {
dns_rdata_reset(&keydatarr);
dns_rdataset_current(&kfetch->keydataset, &keydatarr);
- dns_rdata_tostruct(&keydatarr, &keydata, NULL);
+ result = dns_rdata_tostruct(&keydatarr, &keydata, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
/*
* If any keydata record has a nonzero add holddown, then
@@ -7599,7 +8279,8 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
dns_rdata_reset(&dnskeyrr);
dns_rdataset_current(&kfetch->dnskeyset, &dnskeyrr);
- dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
+ result = dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
/* Skip ZSK's */
if (!ISC_TF(dnskey.flags & DNS_KEYFLAG_KSK))
@@ -7610,7 +8291,8 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
if (matchkey(&kfetch->keydataset, &dnskeyrr)) {
dns_rdata_reset(&keydatarr);
dns_rdataset_current(&kfetch->keydataset, &keydatarr);
- dns_rdata_tostruct(&keydatarr, &keydata, NULL);
+ result = dns_rdata_tostruct(&keydatarr, &keydata, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
if (revoked && revocable(kfetch, &keydata)) {
if (keydata.addhd > now) {
@@ -7710,7 +8392,8 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
&keydatarr));
} else if (newkey) {
/* Convert DNSKEY to KEYDATA */
- dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
+ result = dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_keydata_fromdnskey(&keydata, &dnskey, 0, 0, 0,
NULL);
keydata.addhd = initializing ? now : now + MONTH;
@@ -7729,7 +8412,8 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
if (trustkey) {
/* Trust this key. */
- dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
+ result = dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
trust_key(zone, keyname, &dnskey, mctx);
}
@@ -7753,8 +8437,9 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
if (!ISC_LIST_EMPTY(diff.tuples)) {
/* Write changes to journal file. */
- CHECK(increment_soa_serial(kfetch->db, ver, &diff, mctx));
- CHECK(zone_journal(zone, &diff, "keyfetch_done"));
+ CHECK(update_soa_serial(kfetch->db, ver, &diff, mctx,
+ zone->updatemethod));
+ CHECK(zone_journal(zone, &diff, NULL, "keyfetch_done"));
commit = ISC_TRUE;
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
@@ -7927,8 +8612,9 @@ zone_refreshkeys(dns_zone_t *zone) {
}
}
if (!ISC_LIST_EMPTY(diff.tuples)) {
- CHECK(increment_soa_serial(db, ver, &diff, zone->mctx));
- CHECK(zone_journal(zone, &diff, "zone_refreshkeys"));
+ CHECK(update_soa_serial(db, ver, &diff, zone->mctx,
+ zone->updatemethod));
+ CHECK(zone_journal(zone, &diff, NULL, "zone_refreshkeys"));
commit = ISC_TRUE;
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
zone_needdump(zone, 30);
@@ -7976,11 +8662,17 @@ zone_maintenance(dns_zone_t *zone) {
ENTER;
/*
+ * Are we pending load/reload?
+ */
+ if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING))
+ return;
+
+ /*
* Configuring the view of this zone may have
* failed, for example because the config file
* had a syntax error. In that case, the view
- * db or resolver will be NULL, and we had better not try
- * to do maintenance on it.
+ * adb or resolver will be NULL, and we had better not try
+ * to do further maintenance on it.
*/
if (zone->view == NULL || zone->view->adb == NULL)
return;
@@ -7991,6 +8683,9 @@ zone_maintenance(dns_zone_t *zone) {
* Expire check.
*/
switch (zone->type) {
+ case dns_zone_redirect:
+ if (zone->masters == NULL)
+ break;
case dns_zone_slave:
case dns_zone_stub:
LOCK_ZONE(zone);
@@ -8009,6 +8704,9 @@ zone_maintenance(dns_zone_t *zone) {
* Up to date check.
*/
switch (zone->type) {
+ case dns_zone_redirect:
+ if (zone->masters == NULL)
+ break;
case dns_zone_slave:
case dns_zone_stub:
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DIALREFRESH) &&
@@ -8020,12 +8718,21 @@ zone_maintenance(dns_zone_t *zone) {
}
/*
+ * Slaves send notifies before backing up to disk, masters after.
+ */
+ if (zone->type == dns_zone_slave &&
+ DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NEEDNOTIFY) &&
+ isc_time_compare(&now, &zone->notifytime) >= 0)
+ zone_notify(zone, &now);
+
+ /*
* Do we need to consolidate the backing store?
*/
switch (zone->type) {
case dns_zone_master:
case dns_zone_slave:
case dns_zone_key:
+ case dns_zone_redirect:
case dns_zone_stub:
LOCK_ZONE(zone);
if (zone->masterfile != NULL &&
@@ -8049,14 +8756,29 @@ zone_maintenance(dns_zone_t *zone) {
}
/*
+ * Master/redirect zones send notifies now, if needed
+ */
+ switch (zone->type) {
+ case dns_zone_master:
+ case dns_zone_redirect:
+ if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NEEDNOTIFY) &&
+ isc_time_compare(&now, &zone->notifytime) >= 0)
+ zone_notify(zone, &now);
+ default:
+ break;
+ }
+
+ /*
* Do we need to refresh keys?
*/
switch (zone->type) {
case dns_zone_key:
- if (isc_time_compare(&now, &zone->refreshkeytime) >= 0 &&
- DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED) &&
- !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_REFRESHING))
- zone_refreshkeys(zone);
+ if (isc_time_compare(&now, &zone->refreshkeytime) >= 0) {
+ if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED) &&
+ !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_REFRESHING)) {
+ zone_refreshkeys(zone);
+ }
+ }
break;
case dns_zone_master:
if (!isc_time_isepoch(&zone->refreshkeytime) &&
@@ -8068,14 +8790,9 @@ zone_maintenance(dns_zone_t *zone) {
switch (zone->type) {
case dns_zone_master:
+ case dns_zone_redirect:
case dns_zone_slave:
/*
- * Do we need to send out notify messages?
- */
- if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NEEDNOTIFY) &&
- isc_time_compare(&now, &zone->notifytime) >= 0)
- zone_notify(zone, &now);
- /*
* Do we need to sign/resign some RRsets?
*/
if (!isc_time_isepoch(&zone->signingtime) &&
@@ -8088,13 +8805,14 @@ zone_maintenance(dns_zone_t *zone) {
isc_time_compare(&now, &zone->nsec3chaintime) >= 0)
zone_nsec3chain(zone);
/*
- * Do we need to issue a key expiry warning.
+ * Do we need to issue a key expiry warning?
*/
if (!isc_time_isepoch(&zone->keywarntime) &&
isc_time_compare(&now, &zone->keywarntime) >= 0)
set_key_expiry_warning(zone, zone->key_expiry,
isc_time_seconds(&now));
break;
+
default:
break;
}
@@ -8103,10 +8821,31 @@ zone_maintenance(dns_zone_t *zone) {
void
dns_zone_markdirty(dns_zone_t *zone) {
+ isc_uint32_t serial;
+ isc_result_t result = ISC_R_SUCCESS;
LOCK_ZONE(zone);
- if (zone->type == dns_zone_master)
- set_resigntime(zone); /* XXXMPA make separate call back */
+ if (zone->type == dns_zone_master) {
+ if (inline_raw(zone)) {
+ unsigned int soacount;
+
+ ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
+ if (zone->db != NULL) {
+ result = zone_get_from_db(zone, zone->db, NULL,
+ &soacount, &serial,
+ NULL, NULL, NULL,
+ NULL, NULL);
+ } else
+ result = DNS_R_NOTLOADED;
+ ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
+ if (result == ISC_R_SUCCESS && soacount > 0U)
+ zone_send_secureserial(zone, ISC_FALSE, serial);
+ }
+
+ /* XXXMPA make separate call back */
+ if (result == ISC_R_SUCCESS)
+ set_resigntime(zone);
+ }
zone_needdump(zone, DNS_DUMP_DELAY);
UNLOCK_ZONE(zone);
}
@@ -8237,6 +8976,7 @@ dns_zone_dump(dns_zone_t *zone) {
static void
zone_needdump(dns_zone_t *zone, unsigned int delay) {
+ const char me[] = "zone_needdump";
isc_time_t dumptime;
isc_time_t now;
@@ -8246,6 +8986,7 @@ zone_needdump(dns_zone_t *zone, unsigned int delay) {
REQUIRE(DNS_ZONE_VALID(zone));
REQUIRE(LOCKED_ZONE(zone));
+ ENTER;
/*
* Do we have a place to dump to and are we loaded?
@@ -8292,6 +9033,22 @@ dump_done(void *arg, isc_result_t result) {
tresult = dns_db_getsoaserial(db, version, &serial);
/*
+ * If there is a secure version of this zone
+ * use its serial if it is less than ours.
+ */
+ if (tresult == ISC_R_SUCCESS && inline_raw(zone) &&
+ zone->secure->db != NULL)
+ {
+ isc_uint32_t sserial;
+ isc_result_t mresult;
+
+ mresult = dns_db_getsoaserial(zone->secure->db,
+ NULL, &sserial);
+ if (mresult == ISC_R_SUCCESS &&
+ isc_serial_lt(sserial, serial))
+ serial = sserial;
+ }
+ /*
* Note: we are task locked here so we can test
* zone->xfr safely.
*/
@@ -8399,10 +9156,15 @@ zone_dump(dns_zone_t *zone, isc_boolean_t compact) {
result = DNS_R_CONTINUE;
UNLOCK_ZONE(zone);
} else {
+ dns_masterrawheader_t rawdata;
dns_db_currentversion(db, &version);
- result = dns_master_dump2(zone->mctx, db, version,
+ dns_master_initrawheader(&rawdata);
+ if (inline_secure(zone))
+ get_raw_serial(zone->raw, &rawdata);
+ result = dns_master_dump3(zone->mctx, db, version,
&dns_master_style_default,
- masterfile, masterformat);
+ masterfile, masterformat,
+ &rawdata);
dns_db_closeversion(db, &version, ISC_FALSE);
}
fail:
@@ -8441,11 +9203,12 @@ zone_dump(dns_zone_t *zone, isc_boolean_t compact) {
static isc_result_t
dumptostream(dns_zone_t *zone, FILE *fd, const dns_master_style_t *style,
- dns_masterformat_t format)
+ dns_masterformat_t format, const isc_uint32_t rawversion)
{
isc_result_t result;
dns_dbversion_t *version = NULL;
dns_db_t *db = NULL;
+ dns_masterrawheader_t rawdata;
REQUIRE(DNS_ZONE_VALID(zone));
@@ -8457,29 +9220,46 @@ dumptostream(dns_zone_t *zone, FILE *fd, const dns_master_style_t *style,
return (DNS_R_NOTLOADED);
dns_db_currentversion(db, &version);
- result = dns_master_dumptostream2(zone->mctx, db, version, style,
- format, fd);
+ dns_master_initrawheader(&rawdata);
+ if (rawversion == 0)
+ rawdata.flags |= DNS_MASTERRAW_COMPAT;
+ else if (inline_secure(zone))
+ get_raw_serial(zone->raw, &rawdata);
+ else if (zone->sourceserialset) {
+ rawdata.flags = DNS_MASTERRAW_SOURCESERIALSET;
+ rawdata.sourceserial = zone->sourceserial;
+ }
+ result = dns_master_dumptostream3(zone->mctx, db, version, style,
+ format, &rawdata, fd);
dns_db_closeversion(db, &version, ISC_FALSE);
dns_db_detach(&db);
return (result);
}
isc_result_t
+dns_zone_dumptostream3(dns_zone_t *zone, FILE *fd, dns_masterformat_t format,
+ const dns_master_style_t *style,
+ const isc_uint32_t rawversion)
+{
+ return (dumptostream(zone, fd, style, format, rawversion));
+}
+
+isc_result_t
dns_zone_dumptostream2(dns_zone_t *zone, FILE *fd, dns_masterformat_t format,
const dns_master_style_t *style) {
- return dumptostream(zone, fd, style, format);
+ return (dumptostream(zone, fd, style, format, DNS_RAWFORMAT_VERSION));
}
isc_result_t
dns_zone_dumptostream(dns_zone_t *zone, FILE *fd) {
- return dumptostream(zone, fd, &dns_master_style_default,
- dns_masterformat_text);
+ return (dumptostream(zone, fd, &dns_master_style_default,
+ dns_masterformat_text, 0));
}
isc_result_t
dns_zone_fulldumptostream(dns_zone_t *zone, FILE *fd) {
- return dumptostream(zone, fd, &dns_master_style_full,
- dns_masterformat_text);
+ return (dumptostream(zone, fd, &dns_master_style_full,
+ dns_masterformat_text, 0));
}
void
@@ -8674,6 +9454,8 @@ notify_destroy(dns_notify_t *notify, isc_boolean_t locked) {
dns_request_destroy(&notify->request);
if (dns_name_dynamic(&notify->ns))
dns_name_free(&notify->ns, notify->mctx);
+ if (notify->key != NULL)
+ dns_tsigkey_detach(&notify->key);
mctx = notify->mctx;
isc_mem_put(notify->mctx, notify, sizeof(*notify));
isc_mem_detach(&mctx);
@@ -8695,6 +9477,7 @@ notify_create(isc_mem_t *mctx, unsigned int flags, dns_notify_t **notifyp) {
notify->zone = NULL;
notify->find = NULL;
notify->request = NULL;
+ notify->key = NULL;
isc_sockaddr_any(&notify->dst);
dns_name_init(&notify->ns, NULL);
ISC_LINK_INIT(notify, link);
@@ -8839,15 +9622,23 @@ notify_send_toaddr(isc_task_t *task, isc_event_t *event) {
if (result != ISC_R_SUCCESS)
goto cleanup;
- isc_netaddr_fromsockaddr(&dstip, &notify->dst);
- isc_sockaddr_format(&notify->dst, addrbuf, sizeof(addrbuf));
- result = dns_view_getpeertsig(notify->zone->view, &dstip, &key);
- if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND) {
- notify_log(notify->zone, ISC_LOG_ERROR, "NOTIFY to %s not "
- "sent. Peer TSIG key lookup failure.", addrbuf);
- goto cleanup_message;
+ if (notify->key != NULL) {
+ /* Transfer ownership of key */
+ key = notify->key;
+ notify->key = NULL;
+ } else {
+ isc_netaddr_fromsockaddr(&dstip, &notify->dst);
+ isc_sockaddr_format(&notify->dst, addrbuf, sizeof(addrbuf));
+ result = dns_view_getpeertsig(notify->zone->view, &dstip, &key);
+ if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND) {
+ notify_log(notify->zone, ISC_LOG_ERROR,
+ "NOTIFY to %s not sent. "
+ "Peer TSIG key lookup failure.", addrbuf);
+ goto cleanup_message;
+ }
}
+ /* XXX: should we log the tsig key too? */
notify_log(notify->zone, ISC_LOG_DEBUG(3), "sending notify to %s",
addrbuf);
if (notify->zone->view->peers != NULL) {
@@ -8898,9 +9689,9 @@ notify_send_toaddr(isc_task_t *task, isc_event_t *event) {
dns_message_destroy(&message);
cleanup:
UNLOCK_ZONE(notify->zone);
+ isc_event_free(&event);
if (result != ISC_R_SUCCESS)
notify_destroy(notify, ISC_FALSE);
- isc_event_free(&event);
}
static void
@@ -9049,14 +9840,30 @@ zone_notify(dns_zone_t *zone, isc_time_t *now) {
*/
LOCK_ZONE(zone);
for (i = 0; i < zone->notifycnt; i++) {
+ dns_tsigkey_t *key = NULL;
+
dst = zone->notify[i];
if (notify_isqueued(zone, NULL, &dst))
continue;
+
result = notify_create(zone->mctx, flags, &notify);
if (result != ISC_R_SUCCESS)
continue;
+
zone_iattach(zone, &notify->zone);
notify->dst = dst;
+
+ if ((zone->notifykeynames != NULL) &&
+ (zone->notifykeynames[i] != NULL)) {
+ dns_view_t *view = dns_zone_getview(zone);
+ dns_name_t *keyname = zone->notifykeynames[i];
+ result = dns_view_gettsig(view, keyname, &key);
+ if (result == ISC_R_SUCCESS) {
+ notify->key = key;
+ key = NULL;
+ }
+ }
+
ISC_LIST_APPEND(zone->notifies, notify, link);
result = notify_send_queue(notify);
if (result != ISC_R_SUCCESS)
@@ -9247,7 +10054,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
isc_time_t now;
isc_boolean_t exiting = ISC_FALSE;
isc_interval_t i;
- unsigned int j;
+ unsigned int j, soacount;
stub = revent->ev_arg;
INSIST(DNS_STUB_VALID(stub));
@@ -9390,9 +10197,9 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_write);
if (zone->db == NULL)
zone_attachdb(zone, stub->db);
- result = zone_get_from_db(zone, zone->db, NULL, NULL, NULL, &refresh,
- &retry, &expire, NULL, NULL);
- if (result == ISC_R_SUCCESS) {
+ result = zone_get_from_db(zone, zone->db, NULL, &soacount, NULL,
+ &refresh, &retry, &expire, NULL, NULL);
+ if (result == ISC_R_SUCCESS && soacount > 0U) {
zone->refresh = RANGE(refresh, zone->minrefresh,
zone->maxrefresh);
zone->retry = RANGE(retry, zone->minretry, zone->maxretry);
@@ -9547,7 +10354,8 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
"master %s exceeded (source %s)",
master, source);
/* Try with slave with TCP. */
- if (zone->type == dns_zone_slave &&
+ if ((zone->type == dns_zone_slave ||
+ zone->type == dns_zone_redirect) &&
DNS_ZONE_OPTION(zone, DNS_ZONEOPT_TRYTCPREFRESH)) {
if (!dns_zonemgr_unreachable(zone->zmgr,
&zone->masteraddr,
@@ -9613,7 +10421,8 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
* Perhaps AXFR/IXFR is allowed even if SOA queries aren't.
*/
if (msg->rcode == dns_rcode_refused &&
- zone->type == dns_zone_slave)
+ (zone->type == dns_zone_slave ||
+ zone->type == dns_zone_redirect))
goto tcp_transfer;
goto next_master;
}
@@ -9622,7 +10431,8 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
* If truncated punt to zone transfer which will query again.
*/
if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) {
- if (zone->type == dns_zone_slave) {
+ if (zone->type == dns_zone_slave ||
+ zone->type == dns_zone_redirect) {
dns_zone_log(zone, ISC_LOG_INFO,
"refresh: truncated UDP answer, "
"initiating TCP zone xfer "
@@ -9728,10 +10538,12 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
serial = soa.serial;
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED)) {
- result = zone_get_from_db(zone, zone->db, NULL, NULL,
+ unsigned int soacount;
+ result = zone_get_from_db(zone, zone->db, NULL, &soacount,
&oldserial, NULL, NULL, NULL, NULL,
NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ RUNTIME_CHECK(soacount > 0U);
zone_debuglog(zone, me, 1, "serial: new %u, old %u",
serial, oldserial);
} else
@@ -9747,7 +10559,8 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
dns_zone_log(zone, ISC_LOG_INFO,
"refresh: skipping %s as master %s "
"(source %s) is unreachable (cached)",
- zone->type == dns_zone_slave ?
+ (zone->type == dns_zone_slave ||
+ zone->type == dns_zone_redirect) ?
"zone transfer" : "NS query",
master, source);
goto next_master;
@@ -9755,7 +10568,8 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
tcp_transfer:
isc_event_free(&event);
dns_request_destroy(&zone->request);
- if (zone->type == dns_zone_slave) {
+ if (zone->type == dns_zone_slave ||
+ zone->type == dns_zone_redirect) {
do_queue_xfrin = ISC_TRUE;
} else {
INSIST(zone->type == dns_zone_stub);
@@ -10435,6 +11249,7 @@ static void
zone_shutdown(isc_task_t *task, isc_event_t *event) {
dns_zone_t *zone = (dns_zone_t *) event->ev_arg;
isc_boolean_t free_needed, linked = ISC_FALSE;
+ dns_zone_t *raw = NULL, *secure = NULL;
UNUSED(task);
REQUIRE(DNS_ZONE_VALID(zone));
@@ -10517,7 +11332,19 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
*/
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_SHUTDOWN);
free_needed = exit_check(zone);
+ if (inline_secure(zone)) {
+ raw = zone->raw;
+ zone->raw = NULL;
+ }
+ if (inline_raw(zone)) {
+ secure = zone->secure;
+ zone->secure = NULL;
+ }
UNLOCK_ZONE(zone);
+ if (raw != NULL)
+ dns_zone_detach(&raw);
+ if (secure != NULL)
+ dns_zone_idetach(&secure);
if (free_needed)
zone_free(zone);
}
@@ -10551,6 +11378,11 @@ zone_settimer(dns_zone_t *zone, isc_time_t *now) {
isc_time_settoepoch(&next);
switch (zone->type) {
+ case dns_zone_redirect:
+ if (zone->masters != NULL)
+ goto treat_as_slave;
+ /* FALLTHROUGH */
+
case dns_zone_master:
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NEEDNOTIFY))
next = zone->notifytime;
@@ -10561,6 +11393,8 @@ zone_settimer(dns_zone_t *zone, isc_time_t *now) {
isc_time_compare(&zone->dumptime, &next) < 0)
next = zone->dumptime;
}
+ if (zone->type == dns_zone_redirect)
+ break;
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_REFRESHING) &&
!isc_time_isepoch(&zone->refreshkeytime)) {
if (isc_time_isepoch(&next) ||
@@ -10590,9 +11424,10 @@ zone_settimer(dns_zone_t *zone, isc_time_t *now) {
break;
case dns_zone_slave:
+ treat_as_slave:
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NEEDNOTIFY))
next = zone->notifytime;
- /*FALLTHROUGH*/
+ /* FALLTHROUGH */
case dns_zone_stub:
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_REFRESH) &&
@@ -10870,9 +11705,17 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
isc_sockaddr_format(from, fromtext, sizeof(fromtext));
/*
- * We only handle NOTIFY (SOA) at the present.
+ * Notify messages are processed by the raw zone.
*/
LOCK_ZONE(zone);
+ if (inline_secure(zone)) {
+ result = dns_zone_notifyreceive(zone->raw, from, msg);
+ UNLOCK_ZONE(zone);
+ return (result);
+ }
+ /*
+ * We only handle NOTIFY (SOA) at the present.
+ */
if (isc_sockaddr_pf(from) == PF_INET)
inc_stats(zone, dns_zonestatscounter_notifyinv4);
else
@@ -10953,6 +11796,7 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
result = dns_rdataset_first(rdataset);
if (result == ISC_R_SUCCESS) {
isc_uint32_t serial = 0, oldserial;
+ unsigned int soacount;
dns_rdataset_current(rdataset, &rdata);
result = dns_rdata_tostruct(&rdata, &soa, NULL);
@@ -10962,10 +11806,11 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
* The following should safely be performed without DB
* lock and succeed in this context.
*/
- result = zone_get_from_db(zone, zone->db, NULL, NULL,
- &oldserial, NULL, NULL, NULL,
- NULL, NULL);
+ result = zone_get_from_db(zone, zone->db, NULL,
+ &soacount, &oldserial, NULL,
+ NULL, NULL, NULL, NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ RUNTIME_CHECK(soacount > 0U);
if (isc_serial_le(serial, oldserial)) {
dns_zone_log(zone,
ISC_LOG_INFO,
@@ -11258,15 +12103,17 @@ zone_namerd_tostr(dns_zone_t *zone, char *buf, size_t length) {
* Leave space for terminating '\0'.
*/
isc_buffer_init(&buffer, buf, length - 1);
- if (dns_name_dynamic(&zone->origin))
- result = dns_name_totext(&zone->origin, ISC_TRUE, &buffer);
- if (result != ISC_R_SUCCESS &&
- isc_buffer_availablelength(&buffer) >= (sizeof("<UNKNOWN>") - 1))
- isc_buffer_putstr(&buffer, "<UNKNOWN>");
+ if (zone->type != dns_zone_redirect && zone->type != dns_zone_key) {
+ if (dns_name_dynamic(&zone->origin))
+ result = dns_name_totext(&zone->origin, ISC_TRUE, &buffer);
+ if (result != ISC_R_SUCCESS &&
+ isc_buffer_availablelength(&buffer) >= (sizeof("<UNKNOWN>") - 1))
+ isc_buffer_putstr(&buffer, "<UNKNOWN>");
- if (isc_buffer_availablelength(&buffer) > 0)
- isc_buffer_putstr(&buffer, "/");
- (void)dns_rdataclass_totext(zone->rdclass, &buffer);
+ if (isc_buffer_availablelength(&buffer) > 0)
+ isc_buffer_putstr(&buffer, "/");
+ (void)dns_rdataclass_totext(zone->rdclass, &buffer);
+ }
if (zone->view != NULL && strcmp(zone->view->name, "_bind") != 0 &&
strcmp(zone->view->name, "_default") != 0 &&
@@ -11274,6 +12121,10 @@ zone_namerd_tostr(dns_zone_t *zone, char *buf, size_t length) {
isc_buffer_putstr(&buffer, "/");
isc_buffer_putstr(&buffer, zone->view->name);
}
+ if (inline_secure(zone) && 9U < isc_buffer_availablelength(&buffer))
+ isc_buffer_putstr(&buffer, " (signed)");
+ if (inline_raw(zone) && 11U < isc_buffer_availablelength(&buffer))
+ isc_buffer_putstr(&buffer, " (unsigned)");
buf[isc_buffer_usedlength(&buffer)] = '\0';
}
@@ -11375,8 +12226,9 @@ dns_zone_logc(dns_zone_t *zone, isc_logcategory_t *category,
vsnprintf(message, sizeof(message), fmt, ap);
va_end(ap);
isc_log_write(dns_lctx, category, DNS_LOGMODULE_ZONE,
- level, "%s %s: %s", (zone->type == dns_zone_key) ?
- "managed-keys-zone" : "zone", zone->strnamerd, message);
+ level, "%s%s: %s", (zone->type == dns_zone_key) ?
+ "managed-keys-zone" : (zone->type == dns_zone_redirect) ?
+ "redirect-zone" : "zone ", zone->strnamerd, message);
}
void
@@ -11391,8 +12243,9 @@ dns_zone_log(dns_zone_t *zone, int level, const char *fmt, ...) {
vsnprintf(message, sizeof(message), fmt, ap);
va_end(ap);
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_ZONE,
- level, "%s %s: %s", (zone->type == dns_zone_key) ?
- "managed-keys-zone" : "zone", zone->strnamerd, message);
+ level, "%s%s: %s", (zone->type == dns_zone_key) ?
+ "managed-keys-zone" : (zone->type == dns_zone_redirect) ?
+ "redirect-zone" : "zone ", zone->strnamerd, message);
}
static void
@@ -11402,6 +12255,7 @@ zone_debuglog(dns_zone_t *zone, const char *me, int debuglevel,
va_list ap;
char message[4096];
int level = ISC_LOG_DEBUG(debuglevel);
+ const char *zstr;
if (isc_log_wouldlog(dns_lctx, level) == ISC_FALSE)
return;
@@ -11409,9 +12263,21 @@ zone_debuglog(dns_zone_t *zone, const char *me, int debuglevel,
va_start(ap, fmt);
vsnprintf(message, sizeof(message), fmt, ap);
va_end(ap);
+
+ switch (zone->type) {
+ case dns_zone_key:
+ zstr = "managed-keys-zone";
+ break;
+ case dns_zone_redirect:
+ zstr = "redirect-zone";
+ break;
+ default:
+ zstr = "zone";
+ }
+
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_ZONE,
- level, "%s: %s %s: %s", me, zone->type != dns_zone_key ?
- "zone" : "managed-keys-zone", zone->strnamerd, message);
+ level, "%s: %s %s: %s", me, zstr, zone->strnamerd,
+ message);
}
static int
@@ -11589,6 +12455,572 @@ notify_done(isc_task_t *task, isc_event_t *event) {
dns_message_destroy(&message);
}
+struct secure_event {
+ isc_event_t e;
+ dns_db_t *db;
+ isc_uint32_t serial;
+};
+
+static void
+update_log_cb(void *arg, dns_zone_t *zone, int level, const char *message) {
+ UNUSED(arg);
+ dns_zone_log(zone, level, "%s", message);
+}
+
+static isc_result_t
+sync_secure_journal(dns_zone_t *zone, dns_journal_t *journal,
+ isc_uint32_t start, isc_uint32_t end,
+ dns_difftuple_t **soatuplep, dns_diff_t *diff)
+{
+ isc_result_t result;
+ dns_difftuple_t *tuple = NULL;
+ dns_diffop_t op = DNS_DIFFOP_ADD;
+ int n_soa = 0;
+
+ REQUIRE(soatuplep != NULL);
+
+ if (start == end)
+ return (DNS_R_UNCHANGED);
+
+ CHECK(dns_journal_iter_init(journal, start, end));
+ for (result = dns_journal_first_rr(journal);
+ result == ISC_R_SUCCESS;
+ result = dns_journal_next_rr(journal))
+ {
+ dns_name_t *name = NULL;
+ isc_uint32_t ttl;
+ dns_rdata_t *rdata = NULL;
+ dns_journal_current_rr(journal, &name, &ttl, &rdata);
+
+ if (rdata->type == dns_rdatatype_soa) {
+ n_soa++;
+ if (n_soa == 2) {
+ /*
+ * Save the latest raw SOA record.
+ */
+ if (*soatuplep != NULL)
+ dns_difftuple_free(soatuplep);
+ CHECK(dns_difftuple_create(diff->mctx,
+ DNS_DIFFOP_ADD,
+ name, ttl, rdata,
+ soatuplep));
+ }
+ if (n_soa == 3)
+ n_soa = 1;
+ continue;
+ }
+
+ /* Sanity. */
+ if (n_soa == 0) {
+ dns_zone_log(zone->raw, ISC_LOG_ERROR,
+ "corrupt journal file: '%s'\n",
+ zone->raw->journal);
+ return (ISC_R_FAILURE);
+ }
+
+ if (zone->privatetype != 0 &&
+ rdata->type == zone->privatetype)
+ continue;
+
+ if (rdata->type == dns_rdatatype_nsec ||
+ rdata->type == dns_rdatatype_rrsig ||
+ rdata->type == dns_rdatatype_nsec3 ||
+ rdata->type == dns_rdatatype_dnskey ||
+ rdata->type == dns_rdatatype_nsec3param)
+ continue;
+
+ op = (n_soa == 1) ? DNS_DIFFOP_DEL : DNS_DIFFOP_ADD;
+
+ CHECK(dns_difftuple_create(diff->mctx, op, name, ttl, rdata,
+ &tuple));
+ dns_diff_appendminimal(diff, &tuple);
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ failure:
+ return(result);
+}
+
+static isc_result_t
+sync_secure_db(dns_zone_t *seczone, dns_db_t *secdb,
+ dns_dbversion_t *secver, dns_difftuple_t **soatuple,
+ dns_diff_t *diff)
+{
+ isc_result_t result;
+ dns_db_t *rawdb = NULL;
+ dns_dbversion_t *rawver = NULL;
+ dns_difftuple_t *tuple = NULL, *next;
+ dns_difftuple_t *oldtuple = NULL, *newtuple = NULL;
+ dns_rdata_soa_t oldsoa, newsoa;
+
+ REQUIRE(DNS_ZONE_VALID(seczone));
+ REQUIRE(inline_secure(seczone));
+ REQUIRE(soatuple != NULL && *soatuple == NULL);
+
+ if (!seczone->sourceserialset)
+ return (DNS_R_UNCHANGED);
+
+ dns_db_attach(seczone->raw->db, &rawdb);
+ dns_db_currentversion(rawdb, &rawver);
+ result = dns_db_diffx(diff, rawdb, rawver, secdb, secver, NULL);
+ dns_db_closeversion(rawdb, &rawver, ISC_FALSE);
+ dns_db_detach(&rawdb);
+
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ for (tuple = ISC_LIST_HEAD(diff->tuples);
+ tuple != NULL;
+ tuple = next)
+ {
+ next = ISC_LIST_NEXT(tuple, link);
+ if (tuple->rdata.type == dns_rdatatype_nsec ||
+ tuple->rdata.type == dns_rdatatype_rrsig ||
+ tuple->rdata.type == dns_rdatatype_dnskey ||
+ tuple->rdata.type == dns_rdatatype_nsec3 ||
+ tuple->rdata.type == dns_rdatatype_nsec3param)
+ {
+ ISC_LIST_UNLINK(diff->tuples, tuple, link);
+ dns_difftuple_free(&tuple);
+ continue;
+ }
+ if (tuple->rdata.type == dns_rdatatype_soa) {
+ if (tuple->op == DNS_DIFFOP_DEL) {
+ INSIST(oldtuple == NULL);
+ oldtuple = tuple;
+ }
+ if (tuple->op == DNS_DIFFOP_ADD) {
+ INSIST(newtuple == NULL);
+ newtuple = tuple;
+ }
+ }
+ }
+
+ if (oldtuple != NULL && newtuple != NULL) {
+
+ result = dns_rdata_tostruct(&oldtuple->rdata, &oldsoa, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ result = dns_rdata_tostruct(&newtuple->rdata, &newsoa, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ /*
+ * If the SOA records are the same except for the serial
+ * remove them from the diff.
+ */
+ if (oldsoa.refresh == newsoa.refresh &&
+ oldsoa.retry == newsoa.retry &&
+ oldsoa.minimum == newsoa.minimum &&
+ oldsoa.expire == newsoa.expire &&
+ dns_name_equal(&oldsoa.origin, &newsoa.origin) &&
+ dns_name_equal(&oldsoa.contact, &newsoa.contact)) {
+ ISC_LIST_UNLINK(diff->tuples, oldtuple, link);
+ dns_difftuple_free(&oldtuple);
+ ISC_LIST_UNLINK(diff->tuples, newtuple, link);
+ dns_difftuple_free(&newtuple);
+ }
+ }
+
+ if (ISC_LIST_EMPTY(diff->tuples))
+ return (DNS_R_UNCHANGED);
+
+ /*
+ * If there are still SOA records in the diff they can now be removed
+ * saving the new SOA record.
+ */
+ if (oldtuple != NULL) {
+ ISC_LIST_UNLINK(diff->tuples, oldtuple, link);
+ dns_difftuple_free(&oldtuple);
+ }
+
+ if (newtuple != NULL) {
+ ISC_LIST_UNLINK(diff->tuples, newtuple, link);
+ *soatuple = newtuple;
+ }
+
+ return (ISC_R_SUCCESS);
+}
+
+static void
+receive_secure_serial(isc_task_t *task, isc_event_t *event) {
+ isc_result_t result;
+ dns_journal_t *rjournal = NULL;
+ isc_uint32_t start, end;
+ dns_zone_t *zone;
+ dns_db_t *db = NULL;
+ dns_dbversion_t *newver = NULL, *oldver = NULL;
+ dns_diff_t diff;
+ dns_difftuple_t *tuple = NULL, *soatuple = NULL;
+ dns_update_log_t log = { update_log_cb, NULL };
+ isc_time_t timenow;
+
+ zone = event->ev_arg;
+ end = ((struct secure_event *)event)->serial;
+ isc_event_free(&event);
+
+ LOCK_ZONE(zone);
+
+ dns_diff_init(zone->mctx, &diff);
+
+ UNUSED(task);
+
+ /*
+ * zone->db may be NULL if the load from disk failed.
+ */
+ if (zone->db == NULL || !inline_secure(zone)) {
+ result = ISC_R_FAILURE;
+ goto failure;
+ }
+
+ /*
+ * We first attempt to sync the raw zone to the secure zone
+ * by using the raw zone's journal, applying all the deltas
+ * from the latest source-serial of the secure zone up to
+ * the current serial number of the raw zone.
+ *
+ * If that fails, then we'll fall back to a direct comparison
+ * between raw and secure zones.
+ */
+ result = dns_journal_open(zone->raw->mctx, zone->raw->journal,
+ DNS_JOURNAL_WRITE, &rjournal);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+ else {
+ dns_journal_t *sjournal = NULL;
+
+ result = dns_journal_open(zone->mctx, zone->journal,
+ DNS_JOURNAL_READ, &sjournal);
+ if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
+ goto failure;
+
+ if (!dns_journal_get_sourceserial(rjournal, &start)) {
+ start = dns_journal_first_serial(rjournal);
+ dns_journal_set_sourceserial(rjournal, start);
+ }
+ if (sjournal != NULL) {
+ isc_uint32_t serial;
+ /*
+ * We read the secure journal first, if that exists
+ * use its value provided it is greater that from the
+ * raw journal.
+ */
+ if (dns_journal_get_sourceserial(sjournal, &serial)) {
+ if (isc_serial_gt(serial, start))
+ start = serial;
+ }
+ dns_journal_destroy(&sjournal);
+ }
+ }
+
+ dns_db_attach(zone->db, &db);
+ dns_db_currentversion(db, &oldver);
+ CHECK(dns_db_newversion(db, &newver));
+
+ /*
+ * Try to apply diffs from the raw zone's journal to the secure
+ * zone. If that fails, we recover by syncing up the databases
+ * directly.
+ */
+ result = sync_secure_journal(zone, rjournal, start, end,
+ &soatuple, &diff);
+ if (result == DNS_R_UNCHANGED)
+ goto failure;
+ else if (result != ISC_R_SUCCESS)
+ CHECK(sync_secure_db(zone, db, oldver, &soatuple, &diff));
+
+ CHECK(dns_diff_apply(&diff, db, newver));
+
+ if (soatuple != NULL) {
+ isc_uint32_t oldserial, newserial, desired;
+
+ CHECK(dns_db_createsoatuple(db, oldver, diff.mctx,
+ DNS_DIFFOP_DEL, &tuple));
+ oldserial = dns_soa_getserial(&tuple->rdata);
+ newserial = desired = dns_soa_getserial(&soatuple->rdata);
+ if (!isc_serial_gt(newserial, oldserial)) {
+ newserial = oldserial + 1;
+ if (newserial == 0)
+ newserial++;
+ dns_soa_setserial(newserial, &soatuple->rdata);
+ }
+ CHECK(do_one_tuple(&tuple, db, newver, &diff));
+ CHECK(do_one_tuple(&soatuple, db, newver, &diff));
+ dns_zone_log(zone, ISC_LOG_INFO, "serial %u (unsigned %u)",
+ newserial, desired);
+ } else
+ CHECK(update_soa_serial(db, newver, &diff, zone->mctx,
+ zone->updatemethod));
+
+ CHECK(dns_update_signatures(&log, zone, db, oldver, newver,
+ &diff, zone->sigvalidityinterval));
+
+ CHECK(zone_journal(zone, &diff, &end, "receive_secure_serial"));
+
+ dns_journal_set_sourceserial(rjournal, end);
+ dns_journal_commit(rjournal);
+
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
+
+ zone->sourceserial = end;
+ zone->sourceserialset = ISC_TRUE;
+ zone_needdump(zone, DNS_DUMP_DELAY);
+
+ TIME_NOW(&timenow);
+ zone_settimer(zone, &timenow);
+
+ dns_db_closeversion(db, &oldver, ISC_FALSE);
+ dns_db_closeversion(db, &newver, ISC_TRUE);
+
+ failure:
+ UNLOCK_ZONE(zone);
+ if (result != ISC_R_SUCCESS)
+ dns_zone_log(zone, ISC_LOG_ERROR, "receive_secure_serial: %s",
+ dns_result_totext(result));
+ if (tuple != NULL)
+ dns_difftuple_free(&tuple);
+ if (soatuple != NULL)
+ dns_difftuple_free(&soatuple);
+ if (db != NULL) {
+ if (oldver != NULL)
+ dns_db_closeversion(db, &oldver, ISC_FALSE);
+ if (newver != NULL)
+ dns_db_closeversion(db, &newver, ISC_FALSE);
+ dns_db_detach(&db);
+ }
+ if (rjournal != NULL)
+ dns_journal_destroy(&rjournal);
+ dns_diff_clear(&diff);
+ dns_zone_idetach(&zone);
+}
+
+static isc_result_t
+zone_send_secureserial(dns_zone_t *zone, isc_boolean_t locked,
+ isc_uint32_t serial)
+{
+ isc_event_t *e;
+ dns_zone_t *dummy = NULL;
+
+ e = isc_event_allocate(zone->secure->mctx, zone,
+ DNS_EVENT_ZONESECURESERIAL,
+ receive_secure_serial, zone->secure,
+ sizeof(struct secure_event));
+ if (e == NULL)
+ return (ISC_R_NOMEMORY);
+ ((struct secure_event *)e)->serial = serial;
+ if (locked)
+ zone_iattach(zone->secure, &dummy);
+ else
+ dns_zone_iattach(zone->secure, &dummy);
+ isc_task_send(zone->secure->task, &e);
+
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_SENDSECURE);
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+checkandaddsoa(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
+ dns_rdataset_t *rdataset, isc_uint32_t oldserial)
+{
+ dns_rdata_soa_t soa;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdatalist_t temprdatalist;
+ dns_rdataset_t temprdataset;
+ isc_buffer_t b;
+ isc_result_t result;
+ unsigned char buf[DNS_SOA_BUFFERSIZE];
+
+ result = dns_rdataset_first(rdataset);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ dns_rdataset_current(rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &soa, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+
+ if (isc_serial_gt(soa.serial, oldserial))
+ return (dns_db_addrdataset(db, node, version, 0, rdataset, 0,
+ NULL));
+ /*
+ * Always bump the serial.
+ */
+ oldserial++;
+ if (oldserial == 0)
+ oldserial++;
+ soa.serial = oldserial;
+
+ /*
+ * Construct a replacement rdataset.
+ */
+ dns_rdata_reset(&rdata);
+ isc_buffer_init(&b, buf, sizeof(buf));
+ result = dns_rdata_fromstruct(&rdata, rdataset->rdclass,
+ dns_rdatatype_soa, &soa, &b);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ temprdatalist.rdclass = rdata.rdclass;
+ temprdatalist.type = rdata.type;
+ temprdatalist.covers = 0;
+ temprdatalist.ttl = rdataset->ttl;
+ ISC_LIST_INIT(temprdatalist.rdata);
+ ISC_LIST_APPEND(temprdatalist.rdata, &rdata, link);
+
+ dns_rdataset_init(&temprdataset);
+ result = dns_rdatalist_tordataset(&temprdatalist, &temprdataset);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ return (dns_db_addrdataset(db, node, version, 0, &temprdataset,
+ 0, NULL));
+}
+
+static void
+receive_secure_db(isc_task_t *task, isc_event_t *event) {
+ isc_result_t result;
+ dns_zone_t *zone;
+ dns_db_t *rawdb, *db = NULL;
+ dns_dbnode_t *rawnode = NULL, *node = NULL;
+ dns_fixedname_t fname;
+ dns_name_t *name;
+ dns_dbiterator_t *dbiterator = NULL;
+ dns_rdatasetiter_t *rdsit = NULL;
+ dns_rdataset_t rdataset;
+ dns_dbversion_t *version = NULL;
+ isc_time_t loadtime;
+ unsigned int oldserial = 0;
+ isc_boolean_t have_oldserial = ISC_FALSE;
+
+ UNUSED(task);
+
+ zone = event->ev_arg;
+ rawdb = ((struct secure_event *)event)->db;
+ isc_event_free(&event);
+
+ REQUIRE(inline_secure(zone));
+
+ dns_fixedname_init(&fname);
+ name = dns_fixedname_name(&fname);
+ dns_rdataset_init(&rdataset);
+
+ TIME_NOW(&loadtime);
+ if (zone->db != NULL) {
+ result = dns_db_getsoaserial(zone->db, NULL, &oldserial);
+ if (result == ISC_R_SUCCESS)
+ have_oldserial = ISC_TRUE;
+ }
+
+ result = dns_db_create(zone->mctx, zone->db_argv[0],
+ &zone->origin, dns_dbtype_zone, zone->rdclass,
+ zone->db_argc - 1, zone->db_argv + 1, &db);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_newversion(db, &version);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_createiterator(rawdb, 0, &dbiterator);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ for (result = dns_dbiterator_first(dbiterator);
+ result == ISC_R_SUCCESS;
+ result = dns_dbiterator_next(dbiterator)) {
+ result = dns_dbiterator_current(dbiterator, &rawnode, name);
+ if (result != ISC_R_SUCCESS)
+ continue;
+
+ result = dns_db_findnode(db, name, ISC_TRUE, &node);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_allrdatasets(rawdb, rawnode, NULL, 0, &rdsit);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ for (result = dns_rdatasetiter_first(rdsit);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(rdsit)) {
+ dns_rdatasetiter_current(rdsit, &rdataset);
+ if (rdataset.type == dns_rdatatype_nsec ||
+ rdataset.type == dns_rdatatype_rrsig ||
+ rdataset.type == dns_rdatatype_nsec3 ||
+ rdataset.type == dns_rdatatype_dnskey ||
+ rdataset.type == dns_rdatatype_nsec3param) {
+ dns_rdataset_disassociate(&rdataset);
+ continue;
+ }
+ if (rdataset.type == dns_rdatatype_soa &&
+ have_oldserial) {
+ result = checkandaddsoa(db, node, version,
+ &rdataset, oldserial);
+ } else
+ result = dns_db_addrdataset(db, node, version,
+ 0, &rdataset, 0,
+ NULL);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ dns_rdataset_disassociate(&rdataset);
+ }
+ dns_rdatasetiter_destroy(&rdsit);
+ dns_db_detachnode(rawdb, &rawnode);
+ dns_db_detachnode(db, &node);
+ }
+
+ dns_db_closeversion(db, &version, ISC_TRUE);
+ /*
+ * Lock hierarchy: zmgr, zone, raw.
+ */
+ LOCK_ZONE(zone);
+ if (inline_secure(zone))
+ LOCK_ZONE(zone->raw);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
+ result = zone_postload(zone, db, loadtime, ISC_R_SUCCESS);
+ zone_needdump(zone, 0); /* XXXMPA */
+ if (inline_secure(zone))
+ UNLOCK_ZONE(zone->raw);
+ UNLOCK_ZONE(zone);
+
+ failure:
+ if (result != ISC_R_SUCCESS)
+ dns_zone_log(zone, ISC_LOG_ERROR, "receive_secure_db: %s",
+ dns_result_totext(result));
+
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (db != NULL) {
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ dns_db_detach(&db);
+ }
+ if (rawnode != NULL)
+ dns_db_detachnode(rawdb, &rawnode);
+ dns_db_detach(&rawdb);
+ if (dbiterator != NULL)
+ dns_dbiterator_destroy(&dbiterator);
+ dns_zone_idetach(&zone);
+}
+
+static isc_result_t
+zone_send_securedb(dns_zone_t *zone, isc_boolean_t locked, dns_db_t *db) {
+ isc_event_t *e;
+ dns_db_t *dummy = NULL;
+ dns_zone_t *secure = NULL;
+
+ e = isc_event_allocate(zone->secure->mctx, zone,
+ DNS_EVENT_ZONESECUREDB,
+ receive_secure_db, zone->secure,
+ sizeof(struct secure_event));
+ if (e == NULL)
+ return (ISC_R_NOMEMORY);
+ dns_db_attach(db, &dummy);
+ ((struct secure_event *)e)->db = dummy;
+ if (locked)
+ zone_iattach(zone->secure, &secure);
+ else
+ dns_zone_iattach(zone->secure, &secure);
+
+ isc_task_send(zone->secure->task, &e);
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_SENDSECURE);
+ return (ISC_R_SUCCESS);
+}
+
isc_result_t
dns_zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
isc_result_t result;
@@ -11650,8 +13082,10 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
*/
if (zone->db != NULL && zone->journal != NULL &&
DNS_ZONE_OPTION(zone, DNS_ZONEOPT_IXFRFROMDIFFS) &&
- !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FORCEXFER)) {
+ !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FORCEXFER))
+ {
isc_uint32_t serial, oldserial;
+ unsigned int soacount;
dns_zone_log(zone, ISC_LOG_DEBUG(3), "generating diffs");
@@ -11666,12 +13100,15 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
/*
* This is checked in zone_postload() for master zones.
*/
- result = zone_get_from_db(zone, zone->db, NULL, NULL,
+ result = zone_get_from_db(zone, zone->db, NULL, &soacount,
&oldserial, NULL, NULL, NULL, NULL,
NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
- if (zone->type == dns_zone_slave &&
- !isc_serial_gt(serial, oldserial)) {
+ RUNTIME_CHECK(soacount > 0U);
+ if ((zone->type == dns_zone_slave ||
+ (zone->type == dns_zone_redirect &&
+ zone->masters != NULL))
+ && !isc_serial_gt(serial, oldserial)) {
isc_uint32_t serialmin, serialmax;
serialmin = (oldserial + 1) & 0xffffffffU;
serialmax = (oldserial + 0x7fffffffU) & 0xffffffffU;
@@ -11707,6 +13144,8 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
break;
}
}
+ if (zone->type == dns_zone_master && inline_raw(zone))
+ zone_send_secureserial(zone, ISC_FALSE, serial);
} else {
if (dump && zone->masterfile != NULL) {
/*
@@ -11757,13 +13196,14 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
zone->journal, strbuf);
}
}
+
+ if (inline_raw(zone))
+ zone_send_securedb(zone, ISC_FALSE, db);
}
dns_db_closeversion(db, &ver, ISC_FALSE);
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
- DNS_LOGMODULE_ZONE, ISC_LOG_DEBUG(3),
- "replacing zone database");
+ dns_zone_log(zone, ISC_LOG_DEBUG(3), "replacing zone database");
if (zone->db != NULL)
zone_detachdb(zone);
@@ -11908,6 +13348,8 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
dns_zone_log(zone, ISC_LOG_INFO,
"transferred serial %u%s",
serial, buf);
+ if (inline_raw(zone))
+ zone_send_secureserial(zone, ISC_FALSE, serial);
}
/*
@@ -11916,6 +13358,8 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
* won't hurt with an AXFR.
*/
if (zone->masterfile != NULL || zone->journal != NULL) {
+ unsigned int delay = DNS_DUMP_DELAY;
+
result = ISC_R_FAILURE;
if (zone->journal != NULL)
result = isc_file_settime(zone->journal, &now);
@@ -11923,14 +13367,16 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
zone->masterfile != NULL)
result = isc_file_settime(zone->masterfile,
&now);
- /* Someone removed the file from underneath us! */
- if (result == ISC_R_FILENOTFOUND &&
- zone->masterfile != NULL) {
- unsigned int delay = DNS_DUMP_DELAY;
- if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NODELAY))
- delay = 0;
+
+ if ((DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NODELAY) != 0) ||
+ result == ISC_R_FILENOTFOUND)
+ delay = 0;
+
+ if ((result == ISC_R_SUCCESS ||
+ result == ISC_R_FILENOTFOUND) &&
+ zone->masterfile != NULL)
zone_needdump(zone, delay);
- } else if (result != ISC_R_SUCCESS)
+ else if (result != ISC_R_SUCCESS)
dns_zone_log(zone, ISC_LOG_ERROR,
"transfer: could not set file "
"modification time of '%s': %s",
@@ -12058,18 +13504,26 @@ zone_loaddone(void *arg, isc_result_t result) {
(result == ISC_R_SUCCESS || result == DNS_R_SEENINCLUDE))
result = tresult;
- LOCK_ZONE(load->zone);
- (void)zone_postload(load->zone, load->db, load->loadtime, result);
- zonemgr_putio(&load->zone->readio);
- DNS_ZONE_CLRFLAG(load->zone, DNS_ZONEFLG_LOADING);
+ /*
+ * Lock hierarchy: zmgr, zone, raw.
+ */
+ LOCK_ZONE(zone);
+ if (inline_secure(zone))
+ LOCK_ZONE(zone->raw);
+ (void)zone_postload(zone, load->db, load->loadtime, result);
+ zonemgr_putio(&zone->readio);
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADING);
+ zone_idetach(&load->callbacks.zone);
/*
* Leave the zone frozen if the reload fails.
*/
if ((result == ISC_R_SUCCESS || result == DNS_R_SEENINCLUDE) &&
- DNS_ZONE_FLAG(load->zone, DNS_ZONEFLG_THAW))
+ DNS_ZONE_FLAG(zone, DNS_ZONEFLG_THAW))
zone->update_disabled = ISC_FALSE;
- DNS_ZONE_CLRFLAG(load->zone, DNS_ZONEFLG_THAW);
- UNLOCK_ZONE(load->zone);
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_THAW);
+ if (inline_secure(zone))
+ UNLOCK_ZONE(zone->raw);
+ UNLOCK_ZONE(zone);
load->magic = 0;
dns_db_detach(&load->db);
@@ -12167,7 +13621,7 @@ queue_xfrin(dns_zone_t *zone) {
*/
static void
got_transfer_quota(isc_task_t *task, isc_event_t *event) {
- isc_result_t result;
+ isc_result_t result = ISC_R_SUCCESS;
dns_peer_t *peer = NULL;
char master[ISC_SOCKADDR_FORMATSIZE];
char source[ISC_SOCKADDR_FORMATSIZE];
@@ -12216,14 +13670,6 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) {
"no database exists yet, requesting AXFR of "
"initial version from %s", master);
xfrtype = dns_rdatatype_axfr;
- } else if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_IXFRFROMDIFFS)) {
- dns_zone_log(zone, ISC_LOG_DEBUG(1), "ixfr-from-differences "
- "set, requesting %sAXFR from %s", soa_before,
- master);
- if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_SOABEFOREAXFR))
- xfrtype = dns_rdatatype_soa;
- else
- xfrtype = dns_rdatatype_axfr;
} else if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FORCEXFER)) {
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"forced reload, requesting AXFR of "
@@ -12239,13 +13685,10 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) {
UNLOCK_ZONE(zone);
} else {
isc_boolean_t use_ixfr = ISC_TRUE;
- if (peer != NULL &&
- dns_peer_getrequestixfr(peer, &use_ixfr) ==
- ISC_R_SUCCESS) {
- ; /* Using peer setting */
- } else {
- use_ixfr = zone->view->requestixfr;
- }
+ if (peer != NULL)
+ result = dns_peer_getrequestixfr(peer, &use_ixfr);
+ if (peer == NULL || result != ISC_R_SUCCESS)
+ use_ixfr = zone->requestixfr;
if (use_ixfr == ISC_FALSE) {
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"IXFR disabled, requesting %sAXFR from %s",
@@ -12590,6 +14033,8 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
zmgr->timermgr = timermgr;
zmgr->socketmgr = socketmgr;
zmgr->zonetasks = NULL;
+ zmgr->loadtasks = NULL;
+ zmgr->mctxpool = NULL;
zmgr->task = NULL;
zmgr->rl = NULL;
ISC_LIST_INIT(zmgr->zones);
@@ -12658,6 +14103,33 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
}
isc_result_t
+dns_zonemgr_createzone(dns_zonemgr_t *zmgr, dns_zone_t **zonep) {
+ isc_result_t result;
+ isc_mem_t *mctx = NULL;
+ dns_zone_t *zone = NULL;
+ void *item;
+
+ REQUIRE(DNS_ZONEMGR_VALID(zmgr));
+ REQUIRE(zonep != NULL && *zonep == NULL);
+
+ if (zmgr->mctxpool == NULL)
+ return (ISC_R_FAILURE);
+
+ item = isc_pool_get(zmgr->mctxpool);
+ if (item == NULL)
+ return (ISC_R_FAILURE);
+
+ isc_mem_attach((isc_mem_t *) item, &mctx);
+ result = dns_zone_create(&zone, mctx);
+ isc_mem_detach(&mctx);
+
+ if (result == ISC_R_SUCCESS)
+ *zonep = zone;
+
+ return (result);
+}
+
+isc_result_t
dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
isc_result_t result;
@@ -12674,6 +14146,7 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
REQUIRE(zone->zmgr == NULL);
isc_taskpool_gettask(zmgr->zonetasks, &zone->task);
+ isc_taskpool_gettask(zmgr->loadtasks, &zone->loadtask);
/*
* Set the task name. The tag will arbitrarily point to one
@@ -12681,6 +14154,7 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
* to be managed last).
*/
isc_task_setname(zone->task, "zone", zone);
+ isc_task_setname(zone->loadtask, "loadzone", zone);
result = isc_timer_create(zmgr->timermgr, isc_timertype_inactive,
NULL, NULL,
@@ -12688,7 +14162,7 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
&zone->timer);
if (result != ISC_R_SUCCESS)
- goto cleanup_task;
+ goto cleanup_tasks;
/*
* The timer "holds" a iref.
@@ -12702,7 +14176,8 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
goto unlock;
- cleanup_task:
+ cleanup_tasks:
+ isc_task_detach(&zone->loadtask);
isc_task_detach(&zone->task);
unlock:
@@ -12818,6 +14293,10 @@ dns_zonemgr_shutdown(dns_zonemgr_t *zmgr) {
isc_task_destroy(&zmgr->task);
if (zmgr->zonetasks != NULL)
isc_taskpool_destroy(&zmgr->zonetasks);
+ if (zmgr->loadtasks != NULL)
+ isc_taskpool_destroy(&zmgr->loadtasks);
+ if (zmgr->mctxpool != NULL)
+ isc_pool_destroy(&zmgr->mctxpool);
RWLOCK(&zmgr->rwlock, isc_rwlocktype_read);
for (zone = ISC_LIST_HEAD(zmgr->zones);
@@ -12831,23 +14310,56 @@ dns_zonemgr_shutdown(dns_zonemgr_t *zmgr) {
RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_read);
}
+static isc_result_t
+mctxinit(void **target, void *arg) {
+ isc_result_t result;
+ isc_mem_t *mctx = NULL;
+
+ UNUSED(arg);
+
+ REQUIRE(target != NULL && *target == NULL);
+
+ result = isc_mem_create(0, 0, &mctx);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ isc_mem_setname(mctx, "zonemgr-pool", NULL);
+
+ *target = mctx;
+ return (ISC_R_SUCCESS);
+}
+
+static void
+mctxfree(void **target) {
+ isc_mem_t *mctx = *(isc_mem_t **) target;
+ isc_mem_detach(&mctx);
+ *target = NULL;
+}
+
+#define ZONES_PER_TASK 100
+#define ZONES_PER_MCTX 1000
+
isc_result_t
dns_zonemgr_setsize(dns_zonemgr_t *zmgr, int num_zones) {
isc_result_t result;
- int ntasks = num_zones / 100;
+ int ntasks = num_zones / ZONES_PER_TASK;
+ int nmctx = num_zones / ZONES_PER_MCTX;
isc_taskpool_t *pool = NULL;
+ isc_pool_t *mctxpool = NULL;
REQUIRE(DNS_ZONEMGR_VALID(zmgr));
/*
* For anything fewer than 1000 zones we use 10 tasks in
- * the task pool. More than that, and we'll scale at one
- * task per 100 zones.
+ * the task pools. More than that, and we'll scale at one
+ * task per 100 zones. Similarly, for anything smaller than
+ * 2000 zones we use 2 memory contexts, then scale at 1:1000.
*/
if (ntasks < 10)
ntasks = 10;
+ if (nmctx < 2)
+ nmctx = 2;
- /* Create or resize the zone task pool. */
+ /* Create or resize the zone task pools. */
if (zmgr->zonetasks == NULL)
result = isc_taskpool_create(zmgr->taskmgr, zmgr->mctx,
ntasks, 2, &pool);
@@ -12857,6 +14369,43 @@ dns_zonemgr_setsize(dns_zonemgr_t *zmgr, int num_zones) {
if (result == ISC_R_SUCCESS)
zmgr->zonetasks = pool;
+ pool = NULL;
+ if (zmgr->loadtasks == NULL)
+ result = isc_taskpool_create(zmgr->taskmgr, zmgr->mctx,
+ ntasks, 2, &pool);
+ else
+ result = isc_taskpool_expand(&zmgr->loadtasks, ntasks, &pool);
+
+ if (result == ISC_R_SUCCESS)
+ zmgr->loadtasks = pool;
+
+#ifdef BIND9
+ /*
+ * We always set all tasks in the zone-load task pool to
+ * privileged. This prevents other tasks in the system from
+ * running while the server task manager is in privileged
+ * mode.
+ *
+ * NOTE: If we start using task privileges for any other
+ * part of the system than zone tasks, then this will need to be
+ * revisted. In that case we'd want to turn on privileges for
+ * zone tasks only when we were loading, and turn them off the
+ * rest of the time. For now, however, it's okay to just
+ * set it and forget it.
+ */
+ isc_taskpool_setprivilege(zmgr->loadtasks, ISC_TRUE);
+#endif
+
+ /* Create or resize the zone memory context pool. */
+ if (zmgr->mctxpool == NULL)
+ result = isc_pool_create(zmgr->mctx, nmctx, mctxfree,
+ mctxinit, NULL, &mctxpool);
+ else
+ result = isc_pool_expand(&zmgr->mctxpool, nmctx, &mctxpool);
+
+ if (result == ISC_R_SUCCESS)
+ zmgr->mctxpool = mctxpool;
+
return (result);
}
@@ -13093,12 +14642,14 @@ zonemgr_getio(dns_zonemgr_t *zmgr, isc_boolean_t high,
io = isc_mem_get(zmgr->mctx, sizeof(*io));
if (io == NULL)
return (ISC_R_NOMEMORY);
+
io->event = isc_event_allocate(zmgr->mctx, task, DNS_EVENT_IOREADY,
action, arg, sizeof(*io->event));
if (io->event == NULL) {
isc_mem_put(zmgr->mctx, io, sizeof(*io));
return (ISC_R_NOMEMORY);
}
+
io->zmgr = zmgr;
io->high = high;
io->task = NULL;
@@ -13118,9 +14669,8 @@ zonemgr_getio(dns_zonemgr_t *zmgr, isc_boolean_t high,
UNLOCK(&zmgr->iolock);
*iop = io;
- if (!queue) {
+ if (!queue)
isc_task_send(io->task, &io->event);
- }
return (ISC_R_SUCCESS);
}
@@ -13323,6 +14873,8 @@ dns_zonemgr_unreachabledel(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
for (i = 0; i < UNREACH_CHACHE_SIZE; i++) {
if (isc_sockaddr_equal(&zmgr->unreachable[i].remote, remote) &&
isc_sockaddr_equal(&zmgr->unreachable[i].local, local)) {
+ if (zmgr->unreachable[i].expire == 0)
+ break;
result = isc_rwlock_tryupgrade(&zmgr->urlock);
if (result == ISC_R_SUCCESS) {
locktype = isc_rwlocktype_write;
@@ -13395,7 +14947,8 @@ void
dns_zone_forcereload(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
- if (zone->type == dns_zone_master)
+ if (zone->type == dns_zone_master ||
+ (zone->type == dns_zone_redirect && zone->masters == NULL))
return;
LOCK_ZONE(zone);
@@ -13443,6 +14996,7 @@ dns_zone_setstats(dns_zone_t *zone, isc_stats_t *stats) {
void
dns_zone_setrequeststats(dns_zone_t *zone, isc_stats_t *stats) {
+
REQUIRE(DNS_ZONE_VALID(zone));
LOCK_ZONE(zone);
@@ -13455,9 +15009,24 @@ dns_zone_setrequeststats(dns_zone_t *zone, isc_stats_t *stats) {
}
}
UNLOCK_ZONE(zone);
+}
- return;
+#ifdef NEWSTATS
+void
+dns_zone_setrcvquerystats(dns_zone_t *zone, dns_stats_t *stats) {
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ LOCK_ZONE(zone);
+ if (zone->requeststats_on && stats != NULL) {
+ if (zone->rcvquerystats == NULL) {
+ dns_stats_attach(stats, &zone->rcvquerystats);
+ zone->requeststats_on = ISC_TRUE;
+ }
+ }
+ UNLOCK_ZONE(zone);
}
+#endif
isc_stats_t *
dns_zone_getrequeststats(dns_zone_t *zone) {
@@ -13475,6 +15044,20 @@ dns_zone_getrequeststats(dns_zone_t *zone) {
return (NULL);
}
+#ifdef NEWSTATS
+/*
+ * Return the received query stats bucket
+ * see note from dns_zone_getrequeststats()
+ */
+dns_stats_t *
+dns_zone_getrcvquerystats(dns_zone_t *zone) {
+ if (zone->requeststats_on)
+ return (zone->rcvquerystats);
+ else
+ return (NULL);
+}
+#endif
+
void
dns_zone_dialup(dns_zone_t *zone) {
@@ -13487,7 +15070,7 @@ dns_zone_dialup(dns_zone_t *zone) {
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DIALNOTIFY))
dns_zone_notify(zone);
- if (zone->type != dns_zone_master &&
+ if (zone->type != dns_zone_master && zone->masters != NULL &&
DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DIALREFRESH))
dns_zone_refresh(zone);
}
@@ -13994,7 +15577,7 @@ add_signing_records(dns_db_t *db, dns_rdatatype_t privatetype,
static isc_result_t
sign_apex(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
- dns_diff_t *diff, dns_diff_t *sig_diff)
+ dns_diff_t *diff, zonediff_t *zonediff)
{
isc_result_t result;
isc_stdtime_t now, inception, soaexpire;
@@ -14034,7 +15617,7 @@ sign_apex(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
if (tuple == NULL) {
result = del_sigs(zone, db, ver, &zone->origin,
- dns_rdatatype_dnskey, sig_diff,
+ dns_rdatatype_dnskey, zonediff,
zone_keys, nkeys, now, ISC_FALSE);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -14043,7 +15626,7 @@ sign_apex(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
goto failure;
}
result = add_sigs(db, ver, &zone->origin, dns_rdatatype_dnskey,
- sig_diff, zone_keys, nkeys, zone->mctx,
+ zonediff->diff, zone_keys, nkeys, zone->mctx,
inception, soaexpire, check_ksk,
keyset_kskonly);
if (result != ISC_R_SUCCESS) {
@@ -14056,7 +15639,7 @@ sign_apex(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
result = update_sigs(diff, db, ver, zone_keys, nkeys, zone,
inception, soaexpire, now, check_ksk,
- keyset_kskonly, sig_diff);
+ keyset_kskonly, zonediff);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -14103,8 +15686,12 @@ dnskey_sane(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
}
/* Check existing DB for NSEC-only DNSKEY */
- if (!nseconly)
- CHECK(dns_nsec_nseconly(db, ver, &nseconly));
+ if (!nseconly) {
+ result = dns_nsec_nseconly(db, ver, &nseconly);
+ if (result == ISC_R_NOTFOUND)
+ result = ISC_R_SUCCESS;
+ CHECK(result);
+ }
/* Check existing DB for NSEC3 */
if (!nsec3)
@@ -14142,7 +15729,7 @@ clean_nsec3param(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
if (result != ISC_R_NOTFOUND)
goto failure;
- result = dns_nsec3param_deletechains(db, ver, zone, diff);
+ result = dns_nsec3param_deletechains(db, ver, zone, ISC_TRUE, diff);
failure:
if (node != NULL)
@@ -14209,7 +15796,8 @@ zone_rekey(dns_zone_t *zone) {
dns_rdataset_t soaset, soasigs, keyset, keysigs;
dns_dnsseckeylist_t dnskeys, keys, rmkeys;
dns_dnsseckey_t *key;
- dns_diff_t diff, sig_diff;
+ dns_diff_t diff, _sig_diff;
+ zonediff_t zonediff;
isc_boolean_t commit = ISC_FALSE, newactive = ISC_FALSE;
isc_boolean_t newalg = ISC_FALSE;
isc_boolean_t fullsign;
@@ -14233,8 +15821,9 @@ zone_rekey(dns_zone_t *zone) {
dir = dns_zone_getkeydirectory(zone);
mctx = zone->mctx;
dns_diff_init(mctx, &diff);
- dns_diff_init(mctx, &sig_diff);
- sig_diff.resign = zone->sigresigninginterval;
+ dns_diff_init(mctx, &_sig_diff);
+ _sig_diff.resign = zone->sigresigninginterval;
+ zonediff_init(&zonediff, &_sig_diff);
CHECK(dns_zone_getdb(zone, &db));
CHECK(dns_db_newversion(db, &ver));
@@ -14256,14 +15845,11 @@ zone_rekey(dns_zone_t *zone) {
dns_rdatatype_none, 0, &keyset, &keysigs);
if (result == ISC_R_SUCCESS) {
ttl = keyset.ttl;
- result = dns_dnssec_keylistfromrdataset(&zone->origin, dir,
- mctx, &keyset,
- &keysigs, &soasigs,
- ISC_FALSE, ISC_FALSE,
- &dnskeys);
- /* Can't get keys for some reason; try again later. */
- if (result != ISC_R_SUCCESS)
- goto trylater;
+ CHECK(dns_dnssec_keylistfromrdataset(&zone->origin, dir,
+ mctx, &keyset,
+ &keysigs, &soasigs,
+ ISC_FALSE, ISC_FALSE,
+ &dnskeys));
} else if (result != ISC_R_NOTFOUND)
goto failure;
@@ -14289,7 +15875,7 @@ zone_rekey(dns_zone_t *zone) {
dns_zone_log(zone, ISC_LOG_ERROR, "zone_rekey:"
"couldn't update zone keys: %s",
isc_result_totext(result));
- goto trylater;
+ goto failure;
}
/*
@@ -14332,15 +15918,17 @@ zone_rekey(dns_zone_t *zone) {
CHECK(add_signing_records(db, zone->privatetype,
ver, &diff,
ISC_TF(newalg || fullsign)));
- CHECK(increment_soa_serial(db, ver, &diff, mctx));
+ CHECK(update_soa_serial(db, ver, &diff, mctx,
+ zone->updatemethod));
CHECK(add_chains(zone, db, ver, &diff));
- CHECK(sign_apex(zone, db, ver, &diff, &sig_diff));
- CHECK(zone_journal(zone, &sig_diff, "zone_rekey"));
+ CHECK(sign_apex(zone, db, ver, &diff, &zonediff));
+ CHECK(zone_journal(zone, zonediff.diff, NULL,
+ "zone_rekey"));
commit = ISC_TRUE;
}
}
- dns_db_closeversion(db, &ver, commit);
+ dns_db_closeversion(db, &ver, ISC_TRUE);
if (commit) {
dns_difftuple_t *tuple;
@@ -14425,7 +16013,7 @@ zone_rekey(dns_zone_t *zone) {
* Cause the zone to add/delete NSEC3 chains for the
* deferred NSEC3PARAM changes.
*/
- for (tuple = ISC_LIST_HEAD(sig_diff.tuples);
+ for (tuple = ISC_LIST_HEAD(zonediff.diff->tuples);
tuple != NULL;
tuple = ISC_LIST_NEXT(tuple, link)) {
unsigned char buf[DNS_NSEC3PARAM_BUFFERSIZE];
@@ -14453,6 +16041,13 @@ zone_rekey(dns_zone_t *zone) {
}
/*
+ * Activate any NSEC3 chain updates that may have
+ * been scheduled before this rekey.
+ */
+ if (fullsign || newalg)
+ resume_addnsec3chain(zone);
+
+ /*
* Schedule the next resigning event
*/
set_resigntime(zone);
@@ -14463,15 +16058,16 @@ zone_rekey(dns_zone_t *zone) {
/*
* If we're doing key maintenance, set the key refresh timer to
- * the next scheduled key event or to one hour in the future,
- * whichever is sooner.
+ * the next scheduled key event or to 'dnssec-loadkeys-interval'
+ * seconds in the future, whichever is sooner.
*/
if (DNS_ZONEKEY_OPTION(zone, DNS_ZONEKEY_MAINTAIN)) {
isc_time_t timethen;
isc_stdtime_t then;
LOCK_ZONE(zone);
- DNS_ZONE_TIME_ADD(&timenow, HOUR, &timethen);
+ DNS_ZONE_TIME_ADD(&timenow, zone->refreshkeyinterval,
+ &timethen);
zone->refreshkeytime = timethen;
UNLOCK_ZONE(zone);
@@ -14498,9 +16094,9 @@ zone_rekey(dns_zone_t *zone) {
dns_zone_log(zone, ISC_LOG_INFO, "next key event: %s", timebuf);
}
- failure:
+ done:
dns_diff_clear(&diff);
- dns_diff_clear(&sig_diff);
+ dns_diff_clear(&_sig_diff);
clear_keylist(&dnskeys, mctx);
clear_keylist(&keys, mctx);
@@ -14520,10 +16116,14 @@ zone_rekey(dns_zone_t *zone) {
dns_db_detach(&db);
return;
- trylater:
- isc_interval_set(&ival, HOUR, 0);
+ failure:
+ /*
+ * Something went wrong; try again in ten minutes or
+ * after a key refresh interval, whichever is shorter.
+ */
+ isc_interval_set(&ival, ISC_MIN(zone->refreshkeyinterval, 600), 0);
isc_time_nowplusinterval(&zone->refreshkeytime, &ival);
- goto failure;
+ goto done;
}
void
@@ -14582,10 +16182,572 @@ dns_zone_dlzpostload(dns_zone_t *zone, dns_db_t *db)
{
isc_time_t loadtime;
isc_result_t result;
+
TIME_NOW(&loadtime);
+ /*
+ * Lock hierarchy: zmgr, zone, raw.
+ */
LOCK_ZONE(zone);
+ if (inline_secure(zone))
+ LOCK_ZONE(zone->raw);
result = zone_postload(zone, db, loadtime, ISC_R_SUCCESS);
+ if (inline_secure(zone))
+ UNLOCK_ZONE(zone->raw);
UNLOCK_ZONE(zone);
return result;
}
+
+isc_result_t
+dns_zone_setrefreshkeyinterval(dns_zone_t *zone, isc_uint32_t interval) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ if (interval == 0)
+ return (ISC_R_RANGE);
+ /* Maximum value: 24 hours (3600 minutes) */
+ if (interval > (24 * 60))
+ interval = (24 * 60);
+ /* Multiply by 60 for seconds */
+ zone->refreshkeyinterval = interval * 60;
+ return (ISC_R_SUCCESS);
+}
+
+void
+dns_zone_setrequestixfr(dns_zone_t *zone, isc_boolean_t flag) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ zone->requestixfr = flag;
+}
+
+isc_boolean_t
+dns_zone_getrequestixfr(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ return (zone->requestixfr);
+}
+
+void
+dns_zone_setserialupdatemethod(dns_zone_t *zone, dns_updatemethod_t method) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ zone->updatemethod = method;
+}
+
+dns_updatemethod_t
+dns_zone_getserialupdatemethod(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ return(zone->updatemethod);
+}
+
+/*
+ * Lock hierarchy: zmgr, zone, raw.
+ */
+isc_result_t
+dns_zone_link(dns_zone_t *zone, dns_zone_t *raw) {
+ isc_result_t result;
+ dns_zonemgr_t *zmgr;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(zone->zmgr != NULL);
+ REQUIRE(zone->task != NULL);
+ REQUIRE(zone->loadtask != NULL);
+ REQUIRE(zone->raw == NULL);
+
+ REQUIRE(DNS_ZONE_VALID(raw));
+ REQUIRE(raw->zmgr == NULL);
+ REQUIRE(raw->task == NULL);
+ REQUIRE(raw->loadtask == NULL);
+ REQUIRE(raw->secure == NULL);
+
+ /*
+ * Lock hierarchy: zmgr, zone, raw.
+ */
+ zmgr = zone->zmgr;
+ RWLOCK(&zmgr->rwlock, isc_rwlocktype_write);
+ LOCK_ZONE(zone);
+ LOCK_ZONE(raw);
+
+ result = isc_timer_create(zmgr->timermgr, isc_timertype_inactive,
+ NULL, NULL, zone->task, zone_timer, raw,
+ &raw->timer);
+ if (result != ISC_R_SUCCESS)
+ goto unlock;
+
+ /*
+ * The timer "holds" a iref.
+ */
+ raw->irefs++;
+ INSIST(raw->irefs != 0);
+
+
+ /* dns_zone_attach(raw, &zone->raw); */
+ isc_refcount_increment(&raw->erefs, NULL);
+ zone->raw = raw;
+
+ /* dns_zone_iattach(zone, &raw->secure); */
+ zone_iattach(zone, &raw->secure);
+
+ isc_task_attach(zone->task, &raw->task);
+ isc_task_attach(zone->loadtask, &raw->loadtask);
+
+ ISC_LIST_APPEND(zmgr->zones, raw, link);
+ raw->zmgr = zmgr;
+ zmgr->refs++;
+
+ unlock:
+ UNLOCK_ZONE(raw);
+ UNLOCK_ZONE(zone);
+ RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_write);
+ return (result);
+}
+
+void
+dns_zone_getraw(dns_zone_t *zone, dns_zone_t **raw) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(raw != NULL && *raw == NULL);
+
+ LOCK(&zone->lock);
+ if (zone->raw != NULL)
+ dns_zone_attach(zone->raw, raw);
+ UNLOCK(&zone->lock);
+}
+
+struct keydone {
+ isc_event_t event;
+ isc_boolean_t all;
+ unsigned char data[5];
+};
+
+#define PENDINGFLAGS (DNS_NSEC3FLAG_CREATE|DNS_NSEC3FLAG_INITIAL)
+
+static void
+keydone(isc_task_t *task, isc_event_t *event) {
+ const char *me = "keydone";
+ isc_boolean_t commit = ISC_FALSE;
+ isc_result_t result;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_dbversion_t *oldver = NULL, *newver = NULL;
+ dns_zone_t *zone;
+ dns_db_t *db = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_rdataset_t rdataset;
+ dns_diff_t diff;
+ struct keydone *keydone = (struct keydone *)event;
+ dns_update_log_t log = { update_log_cb, NULL };
+ isc_boolean_t clear_pending = ISC_FALSE;
+
+ UNUSED(task);
+
+ zone = event->ev_arg;
+ INSIST(DNS_ZONE_VALID(zone));
+
+ ENTER;
+
+ dns_rdataset_init(&rdataset);
+ dns_diff_init(zone->mctx, &diff);
+
+ ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
+ if (zone->db != NULL) {
+ dns_db_attach(zone->db, &db);
+ dns_db_currentversion(db, &oldver);
+ result = dns_db_newversion(db, &newver);
+ if (result != ISC_R_SUCCESS) {
+ dns_zone_log(zone, ISC_LOG_ERROR,
+ "keydone:dns_db_newversion -> %s",
+ dns_result_totext(result));
+ goto failure;
+ }
+ }
+ ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
+ if (db == NULL)
+ goto failure;
+
+ result = dns_db_getoriginnode(db, &node);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_findrdataset(db, node, newver, zone->privatetype,
+ dns_rdatatype_none, 0, &rdataset, NULL);
+ if (result == ISC_R_NOTFOUND) {
+ INSIST(!dns_rdataset_isassociated(&rdataset));
+ goto failure;
+ }
+ if (result != ISC_R_SUCCESS) {
+ INSIST(!dns_rdataset_isassociated(&rdataset));
+ goto failure;
+ }
+
+ for (result = dns_rdataset_first(&rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&rdataset)) {
+ isc_boolean_t found = ISC_FALSE;
+
+ dns_rdataset_current(&rdataset, &rdata);
+
+ if (keydone->all) {
+ if (rdata.length == 5 && rdata.data[0] != 0 &&
+ rdata.data[3] == 0 && rdata.data[4] == 1)
+ found = ISC_TRUE;
+ else if (rdata.data[0] == 0 &&
+ (rdata.data[2] & PENDINGFLAGS) != 0) {
+ found = ISC_TRUE;
+ clear_pending = ISC_TRUE;
+ }
+ } else if (rdata.length == 5 &&
+ memcmp(rdata.data, keydone->data, 5) == 0)
+ found = ISC_TRUE;
+
+ if (found)
+ CHECK(update_one_rr(db, newver, &diff, DNS_DIFFOP_DEL,
+ &zone->origin, rdataset.ttl,
+ &rdata));
+ dns_rdata_reset(&rdata);
+ }
+
+ if (!ISC_LIST_EMPTY(diff.tuples)) {
+ /* Write changes to journal file. */
+ CHECK(update_soa_serial(db, newver, &diff, zone->mctx,
+ zone->updatemethod));
+
+ result = dns_update_signatures(&log, zone, db,
+ oldver, newver, &diff,
+ zone->sigvalidityinterval);
+ if (!clear_pending)
+ CHECK(result);
+
+ CHECK(zone_journal(zone, &diff, NULL, "keydone"));
+ commit = ISC_TRUE;
+
+ LOCK_ZONE(zone);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
+ zone_needdump(zone, 30);
+ UNLOCK_ZONE(zone);
+ }
+
+ failure:
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (db != NULL) {
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ if (oldver != NULL)
+ dns_db_closeversion(db, &oldver, ISC_FALSE);
+ if (newver != NULL)
+ dns_db_closeversion(db, &newver, commit);
+ dns_db_detach(&db);
+ }
+ dns_diff_clear(&diff);
+ isc_event_free(&event);
+ dns_zone_idetach(&zone);
+}
+
+isc_result_t
+dns_zone_keydone(dns_zone_t *zone, const char *keystr) {
+ isc_result_t result = ISC_R_SUCCESS;
+ isc_event_t *e;
+ isc_buffer_t b;
+ dns_zone_t *dummy = NULL;
+ struct keydone *kd;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ LOCK_ZONE(zone);
+
+ e = isc_event_allocate(zone->mctx, zone, DNS_EVENT_KEYDONE, keydone,
+ zone, sizeof(struct keydone));
+ if (e == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto failure;
+ }
+
+ kd = (struct keydone *) e;
+ if (strcasecmp(keystr, "all") == 0)
+ kd->all = ISC_TRUE;
+ else {
+ isc_textregion_t r;
+ char *algstr;
+ dns_keytag_t keyid;
+ dns_secalg_t alg;
+ size_t n;
+
+ kd->all = ISC_FALSE;
+
+ n = sscanf(keystr, "%hd/", &keyid);
+ if (n == 0U)
+ CHECK(ISC_R_FAILURE);
+
+ algstr = strchr(keystr, '/');
+ if (algstr != NULL)
+ algstr++;
+ else
+ CHECK(ISC_R_FAILURE);
+
+ n = sscanf(algstr, "%hhd", &alg);
+ if (n == 0U) {
+ DE_CONST(algstr, r.base);
+ r.length = strlen(algstr);
+ CHECK(dns_secalg_fromtext(&alg, &r));
+ }
+
+ /* construct a private-type rdata */
+ isc_buffer_init(&b, kd->data, sizeof(kd->data));
+ isc_buffer_putuint8(&b, alg);
+ isc_buffer_putuint8(&b, (keyid & 0xff00) >> 8);
+ isc_buffer_putuint8(&b, (keyid & 0xff));
+ isc_buffer_putuint8(&b, 0);
+ isc_buffer_putuint8(&b, 1);
+ }
+
+ zone_iattach(zone, &dummy);
+ isc_task_send(zone->task, &e);
+
+ failure:
+ if (e != NULL)
+ isc_event_free(&e);
+ UNLOCK_ZONE(zone);
+ return (result);
+}
+
+struct nsec3param {
+ isc_event_t event;
+ unsigned char data[DNS_NSEC3PARAM_BUFFERSIZE + 1];
+ unsigned int length;
+ isc_boolean_t nsec;
+ isc_boolean_t replace;
+};
+
+static void
+setnsec3param(isc_task_t *task, isc_event_t *event) {
+ const char *me = "setnsec3param";
+ isc_boolean_t commit = ISC_FALSE;
+ isc_result_t result;
+ dns_dbversion_t *oldver = NULL, *newver = NULL;
+ dns_zone_t *zone;
+ dns_db_t *db = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_rdataset_t prdataset, nrdataset;
+ dns_diff_t diff;
+ struct nsec3param *np = (struct nsec3param *)event;
+ dns_update_log_t log = { update_log_cb, NULL };
+ dns_rdata_t rdata;
+ isc_boolean_t nseconly;
+ isc_boolean_t exists = ISC_FALSE;
+
+ UNUSED(task);
+
+ zone = event->ev_arg;
+ INSIST(DNS_ZONE_VALID(zone));
+
+ ENTER;
+
+ dns_rdataset_init(&prdataset);
+ dns_rdataset_init(&nrdataset);
+ dns_diff_init(zone->mctx, &diff);
+
+ ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
+ if (zone->db != NULL) {
+ dns_db_attach(zone->db, &db);
+ dns_db_currentversion(db, &oldver);
+ result = dns_db_newversion(db, &newver);
+ if (result != ISC_R_SUCCESS) {
+ dns_zone_log(zone, ISC_LOG_ERROR,
+ "setnsec3param:dns_db_newversion -> %s",
+ dns_result_totext(result));
+ goto failure;
+ }
+ }
+ ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
+ if (db == NULL)
+ goto failure;
+
+ CHECK(dns_db_getoriginnode(db, &node));
+
+ /*
+ * Does a private-type record already exist for this chain?
+ */
+ result = dns_db_findrdataset(db, node, newver, zone->privatetype,
+ dns_rdatatype_none, 0, &prdataset, NULL);
+ if (result == ISC_R_SUCCESS) {
+ for (result = dns_rdataset_first(&prdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&prdataset)) {
+ dns_rdata_init(&rdata);
+ dns_rdataset_current(&prdataset, &rdata);
+
+ if (np->length == rdata.length &&
+ memcmp(rdata.data, np->data, np->length) == 0) {
+ exists = ISC_TRUE;
+ break;
+ }
+ }
+ } else if (result != ISC_R_NOTFOUND) {
+ INSIST(!dns_rdataset_isassociated(&prdataset));
+ goto failure;
+ }
+
+ /*
+ * Does the chain already exist?
+ */
+ result = dns_db_findrdataset(db, node, newver,
+ dns_rdatatype_nsec3param,
+ dns_rdatatype_none, 0, &nrdataset, NULL);
+ if (result == ISC_R_SUCCESS) {
+ for (result = dns_rdataset_first(&nrdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&nrdataset)) {
+ dns_rdata_init(&rdata);
+ dns_rdataset_current(&nrdataset, &rdata);
+
+ if (np->length == (rdata.length + 1) &&
+ memcmp(rdata.data, np->data + 1,
+ np->length - 1) == 0)
+ {
+ exists = ISC_TRUE;
+ break;
+ }
+ }
+ } else if (result != ISC_R_NOTFOUND) {
+ INSIST(!dns_rdataset_isassociated(&nrdataset));
+ goto failure;
+ }
+
+
+ /*
+ * We need to remove any existing NSEC3 chains.
+ */
+ if (!exists && np->replace && (np->length != 0 || np->nsec))
+ CHECK(dns_nsec3param_deletechains(db, newver, zone,
+ !np->nsec, &diff));
+
+ if (!exists && np->length != 0) {
+ /*
+ * We're creating an NSEC3 chain.
+ *
+ * If the zone is not currently capable of supporting
+ * an NSEC3 chain, add the INITIAL flag, so these
+ * parameters can be used later when NSEC3 becomes
+ * available.
+ */
+ dns_rdata_init(&rdata);
+
+ np->data[2] |= DNS_NSEC3FLAG_CREATE;
+ result = dns_nsec_nseconly(db, newver, &nseconly);
+ if (result == ISC_R_NOTFOUND || nseconly)
+ np->data[2] |= DNS_NSEC3FLAG_INITIAL;
+
+ rdata.length = np->length;
+ rdata.data = np->data;
+ rdata.type = zone->privatetype;
+ rdata.rdclass = zone->rdclass;
+ CHECK(update_one_rr(db, newver, &diff, DNS_DIFFOP_ADD,
+ &zone->origin, 0, &rdata));
+ }
+
+ if (!ISC_LIST_EMPTY(diff.tuples)) {
+ /* Write changes to journal file. */
+ CHECK(update_soa_serial(db, newver, &diff, zone->mctx,
+ zone->updatemethod));
+ result = dns_update_signatures(&log, zone, db,
+ oldver, newver, &diff,
+ zone->sigvalidityinterval);
+ if (result != ISC_R_NOTFOUND)
+ CHECK(result);
+ CHECK(zone_journal(zone, &diff, NULL, "setnsec3param"));
+ commit = ISC_TRUE;
+
+ LOCK_ZONE(zone);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
+ zone_needdump(zone, 30);
+ UNLOCK_ZONE(zone);
+ }
+
+ failure:
+ if (dns_rdataset_isassociated(&prdataset))
+ dns_rdataset_disassociate(&prdataset);
+ if (dns_rdataset_isassociated(&nrdataset))
+ dns_rdataset_disassociate(&nrdataset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ if (oldver != NULL)
+ dns_db_closeversion(db, &oldver, ISC_FALSE);
+ if (newver != NULL)
+ dns_db_closeversion(db, &newver, commit);
+ if (db != NULL)
+ dns_db_detach(&db);
+ if (commit)
+ resume_addnsec3chain(zone);
+ dns_diff_clear(&diff);
+ isc_event_free(&event);
+ dns_zone_idetach(&zone);
+}
+
+isc_result_t
+dns_zone_setnsec3param(dns_zone_t *zone, isc_uint8_t hash, isc_uint8_t flags,
+ isc_uint16_t iter, isc_uint8_t saltlen,
+ unsigned char *salt, isc_boolean_t replace)
+{
+ isc_result_t result = ISC_R_SUCCESS;
+ dns_rdata_nsec3param_t param;
+ dns_rdata_t nrdata = DNS_RDATA_INIT;
+ dns_rdata_t prdata = DNS_RDATA_INIT;
+ unsigned char nbuf[DNS_NSEC3PARAM_BUFFERSIZE];
+ struct nsec3param *np;
+ dns_zone_t *dummy = NULL;
+ isc_buffer_t b;
+ isc_event_t *e;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(salt != NULL);
+
+ LOCK_ZONE(zone);
+
+ e = isc_event_allocate(zone->mctx, zone, DNS_EVENT_SETNSEC3PARAM,
+ setnsec3param, zone, sizeof(struct nsec3param));
+ if (e == NULL) {
+ result = ISC_R_NOMEMORY;
+ goto failure;
+ }
+
+ np = (struct nsec3param *) e;
+ np->replace = replace;
+ if (hash == 0) {
+ np->length = 0;
+ np->nsec = ISC_TRUE;
+ } else {
+ param.common.rdclass = zone->rdclass;
+ param.common.rdtype = dns_rdatatype_nsec3param;
+ ISC_LINK_INIT(&param.common, link);
+ param.mctx = NULL;
+ param.hash = hash;
+ param.flags = flags;
+ param.iterations = iter;
+ param.salt_length = saltlen;
+ param.salt = salt;
+ isc_buffer_init(&b, nbuf, sizeof(nbuf));
+ CHECK(dns_rdata_fromstruct(&nrdata, zone->rdclass,
+ dns_rdatatype_nsec3param,
+ &param, &b));
+ dns_nsec3param_toprivate(&nrdata, &prdata, zone->privatetype,
+ np->data, sizeof(np->data));
+ np->length = prdata.length;
+ }
+
+ zone_iattach(zone, &dummy);
+ isc_task_send(zone->task, &e);
+
+ failure:
+ if (e != NULL)
+ isc_event_free(&e);
+ UNLOCK_ZONE(zone);
+ return (result);
+}
+
+void
+dns_zone_setstatlevel(dns_zone_t *zone, dns_zonestat_level_t level) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ zone->statlevel = level;
+}
+
+dns_zonestat_level_t
+dns_zone_getstatlevel(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ return (zone->statlevel);
+}
diff --git a/contrib/bind9/lib/dns/zt.c b/contrib/bind9/lib/dns/zt.c
index 650d46bf9002..eb1e42472475 100644
--- a/contrib/bind9/lib/dns/zt.c
+++ b/contrib/bind9/lib/dns/zt.c
@@ -25,6 +25,7 @@
#include <isc/magic.h>
#include <isc/mem.h>
#include <isc/string.h>
+#include <isc/task.h>
#include <isc/util.h>
#include <dns/log.h>
@@ -42,8 +43,12 @@ struct dns_zt {
isc_mem_t *mctx;
dns_rdataclass_t rdclass;
isc_rwlock_t rwlock;
+ dns_zt_allloaded_t loaddone;
+ void * loaddone_arg;
/* Locked by lock. */
+ isc_boolean_t flush;
isc_uint32_t references;
+ unsigned int loads_pending;
dns_rbt_t *table;
};
@@ -57,11 +62,17 @@ static isc_result_t
load(dns_zone_t *zone, void *uap);
static isc_result_t
+asyncload(dns_zone_t *zone, void *callback);
+
+static isc_result_t
loadnew(dns_zone_t *zone, void *uap);
static isc_result_t
freezezones(dns_zone_t *zone, void *uap);
+static isc_result_t
+doneloading(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task);
+
isc_result_t
dns_zt_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_zt_t **ztp)
{
@@ -83,10 +94,15 @@ dns_zt_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_zt_t **ztp)
if (result != ISC_R_SUCCESS)
goto cleanup_rbt;
- zt->mctx = mctx;
+ zt->mctx = NULL;
+ isc_mem_attach(mctx, &zt->mctx);
zt->references = 1;
+ zt->flush = ISC_FALSE;
zt->rdclass = rdclass;
zt->magic = ZTMAGIC;
+ zt->loaddone = NULL;
+ zt->loaddone_arg = NULL;
+ zt->loads_pending = 0;
*ztp = zt;
return (ISC_R_SUCCESS);
@@ -188,6 +204,16 @@ flush(dns_zone_t *zone, void *uap) {
}
static void
+zt_destroy(dns_zt_t *zt) {
+ if (zt->flush)
+ (void)dns_zt_apply(zt, ISC_FALSE, flush, NULL);
+ dns_rbt_destroy(&zt->table);
+ isc_rwlock_destroy(&zt->rwlock);
+ zt->magic = 0;
+ isc_mem_putanddetach(&zt->mctx, zt, sizeof(*zt));
+}
+
+static void
zt_flushanddetach(dns_zt_t **ztp, isc_boolean_t need_flush) {
isc_boolean_t destroy = ISC_FALSE;
dns_zt_t *zt;
@@ -202,17 +228,13 @@ zt_flushanddetach(dns_zt_t **ztp, isc_boolean_t need_flush) {
zt->references--;
if (zt->references == 0)
destroy = ISC_TRUE;
+ if (need_flush)
+ zt->flush = ISC_TRUE;
RWUNLOCK(&zt->rwlock, isc_rwlocktype_write);
- if (destroy) {
- if (need_flush)
- (void)dns_zt_apply(zt, ISC_FALSE, flush, NULL);
- dns_rbt_destroy(&zt->table);
- isc_rwlock_destroy(&zt->rwlock);
- zt->magic = 0;
- isc_mem_put(zt->mctx, zt, sizeof(*zt));
- }
+ if (destroy)
+ zt_destroy(zt);
*ztp = NULL;
}
@@ -243,13 +265,67 @@ static isc_result_t
load(dns_zone_t *zone, void *uap) {
isc_result_t result;
UNUSED(uap);
+
result = dns_zone_load(zone);
if (result == DNS_R_CONTINUE || result == DNS_R_UPTODATE)
result = ISC_R_SUCCESS;
+
return (result);
}
isc_result_t
+dns_zt_asyncload(dns_zt_t *zt, dns_zt_allloaded_t alldone, void *arg) {
+ isc_result_t result;
+ static dns_zt_zoneloaded_t dl = doneloading;
+ int pending;
+
+ REQUIRE(VALID_ZT(zt));
+
+ RWLOCK(&zt->rwlock, isc_rwlocktype_write);
+
+ INSIST(zt->loads_pending == 0);
+ result = dns_zt_apply2(zt, ISC_FALSE, NULL, asyncload, &dl);
+
+ pending = zt->loads_pending;
+ if (pending != 0) {
+ zt->loaddone = alldone;
+ zt->loaddone_arg = arg;
+ }
+
+ RWUNLOCK(&zt->rwlock, isc_rwlocktype_write);
+
+ if (pending == 0)
+ alldone(arg);
+
+ return (result);
+}
+
+/*
+ * Initiates asynchronous loading of zone 'zone'. 'callback' is a
+ * pointer to a function which will be used to inform the caller when
+ * the zone loading is complete.
+ */
+static isc_result_t
+asyncload(dns_zone_t *zone, void *callback) {
+ isc_result_t result;
+ dns_zt_zoneloaded_t *loaded = callback;
+ dns_zt_t *zt;
+
+ REQUIRE(zone != NULL);
+ zt = dns_zone_getview(zone)->zonetable;
+ INSIST(VALID_ZT(zt));
+
+ result = dns_zone_asyncload(zone, *loaded, zt);
+ if (result == ISC_R_SUCCESS) {
+ INSIST(zt->references > 0);
+ zt->references++;
+ INSIST(zt->references != 0);
+ zt->loads_pending++;
+ }
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop) {
isc_result_t result;
@@ -265,6 +341,7 @@ static isc_result_t
loadnew(dns_zone_t *zone, void *uap) {
isc_result_t result;
UNUSED(uap);
+
result = dns_zone_loadnew(zone);
if (result == DNS_R_CONTINUE || result == DNS_R_UPTODATE ||
result == DNS_R_DYNAMIC)
@@ -281,6 +358,8 @@ dns_zt_freezezones(dns_zt_t *zt, isc_boolean_t freeze) {
RWLOCK(&zt->rwlock, isc_rwlocktype_read);
result = dns_zt_apply2(zt, ISC_FALSE, &tresult, freezezones, &freeze);
RWUNLOCK(&zt->rwlock, isc_rwlocktype_read);
+ if (tresult == ISC_R_NOTFOUND)
+ tresult = ISC_R_SUCCESS;
return ((result == ISC_R_SUCCESS) ? tresult : result);
}
@@ -291,14 +370,25 @@ freezezones(dns_zone_t *zone, void *uap) {
isc_result_t result = ISC_R_SUCCESS;
char classstr[DNS_RDATACLASS_FORMATSIZE];
char zonename[DNS_NAME_FORMATSIZE];
+ dns_zone_t *raw = NULL;
dns_view_t *view;
- char *journal;
const char *vname;
const char *sep;
int level;
- if (dns_zone_gettype(zone) != dns_zone_master)
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL)
+ zone = raw;
+ if (dns_zone_gettype(zone) != dns_zone_master) {
+ if (raw != NULL)
+ dns_zone_detach(&raw);
+ return (ISC_R_SUCCESS);
+ }
+ if (!dns_zone_isdynamic(zone, ISC_TRUE)) {
+ if (raw != NULL)
+ dns_zone_detach(&raw);
return (ISC_R_SUCCESS);
+ }
frozen = dns_zone_getupdatedisabled(zone);
if (freeze) {
@@ -306,11 +396,6 @@ freezezones(dns_zone_t *zone, void *uap) {
result = DNS_R_FROZEN;
if (result == ISC_R_SUCCESS)
result = dns_zone_flush(zone);
- if (result == ISC_R_SUCCESS) {
- journal = dns_zone_getjournal(zone);
- if (journal != NULL)
- (void)isc_file_remove(journal);
- }
} else {
if (frozen) {
result = dns_zone_load(zone);
@@ -340,6 +425,8 @@ freezezones(dns_zone_t *zone, void *uap) {
freeze ? "freezing" : "thawing",
zonename, classstr, sep, vname,
isc_result_totext(result));
+ if (raw != NULL)
+ dns_zone_detach(&raw);
return (result);
}
@@ -368,6 +455,7 @@ dns_zt_apply2(dns_zt_t *zt, isc_boolean_t stop, isc_result_t *sub,
/*
* The tree is empty.
*/
+ tresult = result;
result = ISC_R_NOMORE;
}
while (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) {
@@ -397,6 +485,46 @@ dns_zt_apply2(dns_zt_t *zt, isc_boolean_t stop, isc_result_t *sub,
return (result);
}
+/*
+ * Decrement the loads_pending counter; when counter reaches
+ * zero, call the loaddone callback that was initially set by
+ * dns_zt_asyncload().
+ */
+static isc_result_t
+doneloading(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task) {
+ isc_boolean_t destroy = ISC_FALSE;
+ dns_zt_allloaded_t alldone = NULL;
+ void *arg = NULL;
+
+ UNUSED(zone);
+ UNUSED(task);
+
+ REQUIRE(VALID_ZT(zt));
+
+ RWLOCK(&zt->rwlock, isc_rwlocktype_write);
+ INSIST(zt->loads_pending != 0);
+ INSIST(zt->references != 0);
+ zt->references--;
+ if (zt->references == 0)
+ destroy = ISC_TRUE;
+ zt->loads_pending--;
+ if (zt->loads_pending == 0) {
+ alldone = zt->loaddone;
+ arg = zt->loaddone_arg;
+ zt->loaddone = NULL;
+ zt->loaddone_arg = NULL;
+ }
+ RWUNLOCK(&zt->rwlock, isc_rwlocktype_write);
+
+ if (alldone != NULL)
+ alldone(arg);
+
+ if (destroy)
+ zt_destroy(zt);
+
+ return (ISC_R_SUCCESS);
+}
+
/***
*** Private
***/
diff --git a/contrib/bind9/lib/export/dns/Makefile.in b/contrib/bind9/lib/export/dns/Makefile.in
index 6df36fe8c296..f575f8673244 100644
--- a/contrib/bind9/lib/export/dns/Makefile.in
+++ b/contrib/bind9/lib/export/dns/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2009-2013 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -43,8 +43,9 @@ LIBS = @LIBS@
# Alphabetically
+OPENSSLGOSTLINKOBJS = opensslgost_link.@O@
OPENSSLLINKOBJS = openssl_link.@O@ openssldh_link.@O@ openssldsa_link.@O@ \
- opensslecdsa_link.@O@ opensslgost_link.@O@ opensslrsa_link.@O@
+ opensslecdsa_link.@O@ @OPENSSLGOSTLINKOBJS@ opensslrsa_link.@O@
DSTOBJS = @OPENSSLLINKOBJS@ \
dst_api.@O@ dst_lib.@O@ dst_parse.@O@ dst_result.@O@ \
@@ -71,8 +72,9 @@ OBJS= ${DNSOBJS} ${OTHEROBJS} ${DSTOBJS} ${PORTDNSOBJS}
# Alphabetically
+OPENSSLGOSTLINKSRCS = opensslgost_link.c
OPENSSLLINKSRCS = openssl_link.c openssldh_link.c openssldsa_link.c \
- opensslecdsa_link.c opensslgost_link.c opensslrsa_link.c
+ opensslecdsa_link.c @OPENSSLGOSTLINKSRCS@ opensslrsa_link.c
DSTSRCS = @OPENSSLLINKSRCS@ \
dst_api.c dst_lib.c dst_parse.c \
diff --git a/contrib/bind9/lib/export/irs/Makefile.in b/contrib/bind9/lib/export/irs/Makefile.in
index 2cbc0bbe271c..b2520f9eb76e 100644
--- a/contrib/bind9/lib/export/irs/Makefile.in
+++ b/contrib/bind9/lib/export/irs/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -24,8 +24,9 @@ export_srcdir = @top_srcdir@/lib/export
@BIND9_MAKE_INCLUDES@
-CINCLUDES = -I. -I./include -I${srcdir}/include \
+CINCLUDES = -I. -I./include -I${srcdir}/include -I ../../irs/include \
${ISCCFG_INCLUDES} -I../dns/include ${DNS_INCLUDES} \
+ -I../dns/include ${DNS_INCLUDES} \
-I${export_srcdir}/isc/include ${ISC_INCLUDES}
CDEFINES =
CWARNINGS =
diff --git a/contrib/bind9/lib/export/isc/Makefile.in b/contrib/bind9/lib/export/isc/Makefile.in
index 86726ab34d22..c04a9073dcc3 100644
--- a/contrib/bind9/lib/export/isc/Makefile.in
+++ b/contrib/bind9/lib/export/isc/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2009, 2010, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -67,12 +67,11 @@ OBJS = @ISC_EXTRA_OBJS@ \
error.@O@ event.@O@ \
hash.@O@ hex.@O@ hmacmd5.@O@ hmacsha.@O@ \
inet_aton.@O@ iterated_hash.@O@ lex.@O@ lfsr.@O@ log.@O@ \
- md5.@O@ mutexblock.@O@ \
- netaddr.@O@ netscope.@O@ \
- ondestroy.@O@ \
- parseint.@O@ portset.@O@ radix.@O@ \
- random.@O@ refcount.@O@ region.@O@ result.@O@ rwlock.@O@ \
- serial.@O@ sha1.@O@ sha2.@O@ sockaddr.@O@ stats.@O@ string.@O@ \
+ md5.@O@ mutexblock.@O@ netaddr.@O@ netscope.@O@ \
+ ondestroy.@O@ parseint.@O@ portset.@O@ radix.@O@ \
+ random.@O@ refcount.@O@ region.@O@ regex.@O@ result.@O@ \
+ rwlock.@O@ serial.@O@ sha1.@O@ sha2.@O@ sockaddr.@O@ \
+ stats.@O@ string.@O@ \
symtab.@O@ \
version.@O@ \
${APIOBJS} ${ISCDRIVEROBJS} \
@@ -94,7 +93,7 @@ SRCS = @ISC_EXTRA_SRCS@ \
netaddr.c netscope.c \
ondestroy.c \
parseint.c portset.c radix.c \
- random.c refcount.c region.c result.c rwlock.c \
+ random.c refcount.c region.c regex.c result.c rwlock.c \
serial.c sha1.c sha2.c sockaddr.c stats.c string.c symtab.c \
version.c \
${APISRCS} ${ISCDRIVERSRCS}
diff --git a/contrib/bind9/lib/export/isc/include/isc/Makefile.in b/contrib/bind9/lib/export/isc/include/isc/Makefile.in
index 91f538c4c17d..8c7eff8efa24 100644
--- a/contrib/bind9/lib/export/isc/include/isc/Makefile.in
+++ b/contrib/bind9/lib/export/isc/include/isc/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -35,7 +35,7 @@ HEADERS = app.h assertions.h base64.h bitstring.h boolean.h \
magic.h md5.h mem.h msgcat.h msgs.h \
mutexblock.h namespace.h netaddr.h ondestroy.h os.h parseint.h \
print.h quota.h radix.h random.h ratelimiter.h \
- refcount.h region.h resource.h \
+ refcount.h regex.h region.h resource.h \
result.h resultclass.h rwlock.h serial.h sha1.h sha2.h \
sockaddr.h socket.h stdio.h stdlib.h string.h \
symtab.h \
diff --git a/contrib/bind9/lib/export/isc/nls/Makefile.in b/contrib/bind9/lib/export/isc/nls/Makefile.in
index 25156854d1e1..16a6a863c634 100644
--- a/contrib/bind9/lib/export/isc/nls/Makefile.in
+++ b/contrib/bind9/lib/export/isc/nls/Makefile.in
@@ -16,10 +16,12 @@
top_srcdir = @top_srcdir@
srcdir = @top_srcdir@/lib/isc/nls
+export_srcdir = @top_srcdir@/lib/export
@BIND9_MAKE_INCLUDES@
CINCLUDES = -I${srcdir}/unix/include \
+ -I${export_srcdir}/isc/include \
${ISC_INCLUDES}
CDEFINES =
diff --git a/contrib/bind9/lib/export/isc/nothreads/Makefile.in b/contrib/bind9/lib/export/isc/nothreads/Makefile.in
index 994da6362c6b..464099399c66 100644
--- a/contrib/bind9/lib/export/isc/nothreads/Makefile.in
+++ b/contrib/bind9/lib/export/isc/nothreads/Makefile.in
@@ -16,11 +16,13 @@
top_srcdir = @top_srcdir@
srcdir = @top_srcdir@/lib/isc/nothreads
+export_srcdir = @top_srcdir@/lib/export
@BIND9_MAKE_INCLUDES@
CINCLUDES = -I${srcdir}/include \
-I${srcdir}/../unix/include \
+ -I${export_srcdir}/isc/include \
-I../include \
-I${srcdir}/../include \
-I${srcdir}/..
diff --git a/contrib/bind9/lib/export/isc/pthreads/Makefile.in b/contrib/bind9/lib/export/isc/pthreads/Makefile.in
index f08e5c630b39..80c5e3bb2032 100644
--- a/contrib/bind9/lib/export/isc/pthreads/Makefile.in
+++ b/contrib/bind9/lib/export/isc/pthreads/Makefile.in
@@ -16,11 +16,13 @@
top_srcdir = @top_srcdir@
srcdir = @top_srcdir@/lib/isc/pthreads
+export_srcdir = @top_srcdir@/lib/export
@BIND9_MAKE_INCLUDES@
CINCLUDES = -I${srcdir}/include \
-I${srcdir}/../unix/include \
+ -I${export_srcdir}/isc/include \
-I../include \
-I${srcdir}/../include \
-I${srcdir}/..
diff --git a/contrib/bind9/lib/export/isc/unix/Makefile.in b/contrib/bind9/lib/export/isc/unix/Makefile.in
index f5cf7e86caf6..18732028ecf1 100644
--- a/contrib/bind9/lib/export/isc/unix/Makefile.in
+++ b/contrib/bind9/lib/export/isc/unix/Makefile.in
@@ -16,11 +16,13 @@
top_srcdir = @top_srcdir@
srcdir = @top_srcdir@/lib/isc/unix
+export_srcdir = @top_srcdir@/lib/export
@BIND9_MAKE_INCLUDES@
CINCLUDES = -I${srcdir}/include \
-I${srcdir}/../@ISC_THREAD_DIR@/include \
+ -I${export_srcdir}/isc/include \
-I../include \
-I${srcdir}/../include \
-I${srcdir}/..
diff --git a/contrib/bind9/lib/export/isccfg/Makefile.in b/contrib/bind9/lib/export/isccfg/Makefile.in
index 907af5086e22..2a791a4de6fd 100644
--- a/contrib/bind9/lib/export/isccfg/Makefile.in
+++ b/contrib/bind9/lib/export/isccfg/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -31,7 +31,7 @@ CDEFINES =
CWARNINGS =
ISCLIBS = ../isc/libisc.@A@
-DNSLIBS = ../dns/libdns.@A@
+DNSLIBS = ../dns/libdns.@A@ @DNS_CRYPTO_LIBS@
ISCDEPLIBS = ../../lib/isc/libisc.@A@
ISCCFGDEPLIBS = libisccfg.@A@
diff --git a/contrib/bind9/lib/export/samples/Makefile.in b/contrib/bind9/lib/export/samples/Makefile.in
index cdc66b16ddc2..194aaeb24a20 100644
--- a/contrib/bind9/lib/export/samples/Makefile.in
+++ b/contrib/bind9/lib/export/samples/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -25,7 +25,8 @@ export_srcdir = @top_srcdir@/lib/export
CINCLUDES = -I${srcdir}/include -I../dns/include \
-I${export_srcdir}/isc/include \
${DNS_INCLUDES} ${ISC_INCLUDES} \
- -I${top_srcdir}/lib/irs/include
+ -I${top_srcdir}/lib/irs/include \
+ -I../../irs/include
CDEFINES =
CWARNINGS =
diff --git a/contrib/bind9/lib/export/samples/nsprobe.c b/contrib/bind9/lib/export/samples/nsprobe.c
index 869b19471729..1d7ed3b4c9d1 100644
--- a/contrib/bind9/lib/export/samples/nsprobe.c
+++ b/contrib/bind9/lib/export/samples/nsprobe.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -282,8 +282,6 @@ make_querymessage(dns_message_t *message, dns_name_t *qname0,
dns_message_puttempname(message, &qname);
if (qrdataset != NULL)
dns_message_puttemprdataset(message, &qrdataset);
- if (message != NULL)
- dns_message_destroy(&message);
return (result);
}
@@ -293,7 +291,7 @@ make_querymessage(dns_message_t *message, dns_name_t *qname0,
static inline void
increment_entry(unsigned long *entryp) {
(*entryp)++;
- INSIST(*entryp != 0); /* check overflow */
+ INSIST(*entryp != 0U); /* check overflow */
}
static void
@@ -392,57 +390,57 @@ update_stat(struct probe_trans *trans) {
}
/* Update per domain statistics */
- if (local_stat.ignore > 0) {
+ if (local_stat.ignore > 0U) {
if (verbose_level > 0)
printf("%s:ignore\n", trans->domain);
increment_entry(&domain_stat.ignore);
err_count++;
}
- if (local_stat.nxdomain > 0) {
+ if (local_stat.nxdomain > 0U) {
if (verbose_level > 0)
printf("%s:nxdomain\n", trans->domain);
increment_entry(&domain_stat.nxdomain);
err_count++;
}
- if (local_stat.othererr > 0) {
+ if (local_stat.othererr > 0U) {
if (verbose_level > 0)
printf("%s:othererr\n", trans->domain);
increment_entry(&domain_stat.othererr);
err_count++;
}
- if (local_stat.multiplesoa > 0) {
+ if (local_stat.multiplesoa > 0U) {
if (verbose_level > 0)
printf("%s:multiplesoa\n", trans->domain);
increment_entry(&domain_stat.multiplesoa);
err_count++;
}
- if (local_stat.multiplecname > 0) {
+ if (local_stat.multiplecname > 0U) {
if (verbose_level > 0)
printf("%s:multiplecname\n", trans->domain);
increment_entry(&domain_stat.multiplecname);
err_count++;
}
- if (local_stat.brokenanswer > 0) {
+ if (local_stat.brokenanswer > 0U) {
if (verbose_level > 0)
printf("%s:brokenanswer\n", trans->domain);
increment_entry(&domain_stat.brokenanswer);
err_count++;
}
- if (local_stat.lame > 0) {
+ if (local_stat.lame > 0U) {
if (verbose_level > 0)
printf("%s:lame\n", trans->domain);
increment_entry(&domain_stat.lame);
err_count++;
}
- if (err_count > 1)
+ if (err_count > 1U)
increment_entry(&multiple_error_domains);
/*
* We regard the domain as valid if and only if no authoritative server
* has a problem and at least one server is known to be valid.
*/
- if (local_stat.valid > 0 && err_count == 0) {
+ if (local_stat.valid > 0U && err_count == 0U) {
if (verbose_level > 1)
printf("%s:valid\n", trans->domain);
increment_entry(&domain_stat.valid);
@@ -452,7 +450,7 @@ update_stat(struct probe_trans *trans) {
* If the domain has no available server or all servers have the
* 'unknown' result, the domain's result is also regarded as unknown.
*/
- if (local_stat.valid == 0 && err_count == 0) {
+ if (local_stat.valid == 0U && err_count == 0U) {
if (verbose_level > 1)
printf("%s:unknown\n", trans->domain);
increment_entry(&domain_stat.unknown);
@@ -1218,5 +1216,5 @@ main(int argc, char *argv[]) {
isc_app_ctxfinish(actx);
ctxs_destroy(&mctx, &actx, &taskmgr, &socketmgr, &timermgr);
- exit(0);
+ return (0);
}
diff --git a/contrib/bind9/lib/export/samples/sample-async.c b/contrib/bind9/lib/export/samples/sample-async.c
index e646e795e9ae..a70dd4741ede 100644
--- a/contrib/bind9/lib/export/samples/sample-async.c
+++ b/contrib/bind9/lib/export/samples/sample-async.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -398,5 +398,5 @@ main(int argc, char *argv[]) {
isc_app_ctxfinish(query_actx);
ctxs_destroy(&mctx, &query_actx, &taskmgr, &socketmgr, &timermgr);
- exit(0);
+ return (0);
}
diff --git a/contrib/bind9/lib/export/samples/sample-gai.c b/contrib/bind9/lib/export/samples/sample-gai.c
index 6dc4014ed56d..243d07a2f971 100644
--- a/contrib/bind9/lib/export/samples/sample-gai.c
+++ b/contrib/bind9/lib/export/samples/sample-gai.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -61,7 +61,7 @@ do_gai(int family, char *hostname) {
}
}
- freeaddrinfo(res);
+ freeaddrinfo(res0);
}
int
@@ -73,5 +73,5 @@ main(int argc, char *argv[]) {
do_gai(AF_INET6, argv[1]);
do_gai(AF_UNSPEC, argv[1]);
- exit(0);
+ return (0);
}
diff --git a/contrib/bind9/lib/export/samples/sample-request.c b/contrib/bind9/lib/export/samples/sample-request.c
index d5d2312e30d1..07baf3950785 100644
--- a/contrib/bind9/lib/export/samples/sample-request.c
+++ b/contrib/bind9/lib/export/samples/sample-request.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -77,9 +77,12 @@ make_querymessage(dns_message_t *message, const char *namestr,
isc_buffer_t b;
size_t namelen;
+ REQUIRE(message != NULL);
+ REQUIRE(namestr != NULL);
+
/* Construct qname */
namelen = strlen(namestr);
- isc_buffer_init(&b, namestr, namelen);
+ isc_buffer_constinit(&b, namestr, namelen);
isc_buffer_add(&b, namelen);
dns_fixedname_init(&fixedqname);
qname0 = dns_fixedname_name(&fixedqname);
@@ -115,8 +118,7 @@ make_querymessage(dns_message_t *message, const char *namestr,
dns_message_puttempname(message, &qname);
if (qrdataset != NULL)
dns_message_puttemprdataset(message, &qrdataset);
- if (message != NULL)
- dns_message_destroy(&message);
+ dns_message_destroy(&message);
return (result);
}
@@ -259,5 +261,5 @@ main(int argc, char *argv[]) {
dns_client_destroy(&client);
dns_lib_shutdown();
- exit(0);
+ return (0);
}
diff --git a/contrib/bind9/lib/export/samples/sample-update.c b/contrib/bind9/lib/export/samples/sample-update.c
index e54d154424e8..2c35baa6e2a8 100644
--- a/contrib/bind9/lib/export/samples/sample-update.c
+++ b/contrib/bind9/lib/export/samples/sample-update.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2010, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -305,7 +305,7 @@ main(int argc, char *argv[]) {
dns_client_destroy(&client);
dns_lib_shutdown();
- exit(0);
+ return (0);
}
/*
@@ -372,7 +372,7 @@ parse_name(char **cmdlinep, dns_name_t *name) {
isc_buffer_t source;
word = nsu_strsep(cmdlinep, " \t\r\n");
- if (*word == 0) {
+ if (word == NULL || *word == 0) {
fprintf(stderr, "could not read owner name\n");
exit(1);
}
diff --git a/contrib/bind9/lib/export/samples/sample.c b/contrib/bind9/lib/export/samples/sample.c
index 7fc6a303ffa9..b121a0db4480 100644
--- a/contrib/bind9/lib/export/samples/sample.c
+++ b/contrib/bind9/lib/export/samples/sample.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -172,7 +172,9 @@ set_key(dns_client_t *client, char *keynamestr, char *keystr,
}
static void
-addserver(dns_client_t *client, const char *addrstr, const char *namespace) {
+addserver(dns_client_t *client, const char *addrstr, const char *port,
+ const char *namespace)
+{
struct addrinfo hints, *res;
int gai_error;
isc_sockaddr_t sa;
@@ -188,7 +190,7 @@ addserver(dns_client_t *client, const char *addrstr, const char *namespace) {
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
hints.ai_flags = AI_NUMERICHOST;
- gai_error = getaddrinfo(addrstr, "53", &hints, &res);
+ gai_error = getaddrinfo(addrstr, port, &hints, &res);
if (gai_error != 0) {
fprintf(stderr, "getaddrinfo failed: %s\n",
gai_strerror(gai_error));
@@ -196,15 +198,15 @@ addserver(dns_client_t *client, const char *addrstr, const char *namespace) {
}
INSIST(res->ai_addrlen <= sizeof(sa.type));
memcpy(&sa.type, res->ai_addr, res->ai_addrlen);
- freeaddrinfo(res);
sa.length = res->ai_addrlen;
+ freeaddrinfo(res);
ISC_LINK_INIT(&sa, link);
ISC_LIST_INIT(servers);
ISC_LIST_APPEND(servers, &sa, link);
if (namespace != NULL) {
namelen = strlen(namespace);
- isc_buffer_init(&b, namespace, namelen);
+ isc_buffer_constinit(&b, namespace, namelen);
isc_buffer_add(&b, namelen);
dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
@@ -245,8 +247,9 @@ main(int argc, char *argv[]) {
isc_mem_t *keymctx = NULL;
unsigned int clientopt, resopt;
isc_boolean_t is_sep = ISC_FALSE;
+ const char *port = "53";
- while ((ch = getopt(argc, argv, "a:es:t:k:K:")) != -1) {
+ while ((ch = getopt(argc, argv, "a:es:t:k:K:p:")) != -1) {
switch (ch) {
case 't':
tr.base = optarg;
@@ -279,6 +282,9 @@ main(int argc, char *argv[]) {
case 'K':
keystr = optarg;
break;
+ case 'p':
+ port = optarg;
+ break;
default:
usage();
}
@@ -318,11 +324,11 @@ main(int argc, char *argv[]) {
}
/* Set the nameserver */
- addserver(client, argv[0], NULL);
+ addserver(client, argv[0], port, NULL);
/* Set the alternate nameserver (when specified) */
if (altserver != NULL)
- addserver(client, altserveraddr, altservername);
+ addserver(client, altserveraddr, port, altservername);
/* Install DNSSEC key (if given) */
if (keynamestr != NULL) {
@@ -374,5 +380,5 @@ main(int argc, char *argv[]) {
isc_mem_destroy(&keymctx);
dns_lib_shutdown();
- exit(0);
+ return (0);
}
diff --git a/contrib/bind9/lib/irs/api b/contrib/bind9/lib/irs/api
index ba19dd9150e0..298e96a8abc9 100644
--- a/contrib/bind9/lib/irs/api
+++ b/contrib/bind9/lib/irs/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 80
-LIBREVISION = 2
+# 9.9-sub: 130-139
+LIBINTERFACE = 90
+LIBREVISION = 1
LIBAGE = 0
diff --git a/contrib/bind9/lib/irs/dnsconf.c b/contrib/bind9/lib/irs/dnsconf.c
index 4a7d58bfbc50..529cebd6ba10 100644
--- a/contrib/bind9/lib/irs/dnsconf.c
+++ b/contrib/bind9/lib/irs/dnsconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -144,8 +144,8 @@ configure_dnsseckeys(irs_dnsconf_t *conf, cfg_obj_t *cfgobj,
/* Configure key name */
dns_fixedname_init(&fkeyname);
keyname_base = dns_fixedname_name(&fkeyname);
- isc_buffer_init(&namebuf, keynamestr,
- strlen(keynamestr));
+ isc_buffer_constinit(&namebuf, keynamestr,
+ strlen(keynamestr));
isc_buffer_add(&namebuf, strlen(keynamestr));
result = dns_name_fromtext(keyname_base, &namebuf,
dns_rootname, 0, NULL);
diff --git a/contrib/bind9/lib/irs/getaddrinfo.c b/contrib/bind9/lib/irs/getaddrinfo.c
index 4b1f4a9221e3..1de540f2962e 100644
--- a/contrib/bind9/lib/irs/getaddrinfo.c
+++ b/contrib/bind9/lib/irs/getaddrinfo.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -136,6 +136,7 @@
#include <isc/lib.h>
#include <isc/mem.h>
#include <isc/sockaddr.h>
+#include <isc/string.h>
#include <isc/util.h>
#include <dns/client.h>
@@ -479,8 +480,10 @@ getaddrinfo(const char *hostname, const char *servname,
err = (net_order[i])(hostname, flags, &ai_list,
socktype, port);
if (err != 0) {
- if (ai_list != NULL)
+ if (ai_list != NULL) {
freeaddrinfo(ai_list);
+ ai_list = NULL;
+ }
break;
}
}
@@ -549,7 +552,7 @@ make_resstate(isc_mem_t *mctx, gai_statehead_t *head, const char *hostname,
/* Construct base domain name */
namelen = strlen(domain);
- isc_buffer_init(&b, domain, namelen);
+ isc_buffer_constinit(&b, domain, namelen);
isc_buffer_add(&b, namelen);
dns_fixedname_init(&fixeddomain);
qdomain = dns_fixedname_name(&fixeddomain);
@@ -561,7 +564,7 @@ make_resstate(isc_mem_t *mctx, gai_statehead_t *head, const char *hostname,
/* Construct query name */
namelen = strlen(hostname);
- isc_buffer_init(&b, hostname, namelen);
+ isc_buffer_constinit(&b, hostname, namelen);
isc_buffer_add(&b, namelen);
dns_fixedname_init(&state->fixedname);
state->qname = dns_fixedname_name(&state->fixedname);
@@ -781,9 +784,9 @@ process_answer(isc_task_t *task, isc_event_t *event) {
switch (family) {
case AF_INET:
dns_rdataset_current(rdataset, &rdata);
- dns_rdata_tostruct(&rdata, &rdata_a,
- NULL);
-
+ result = dns_rdata_tostruct(&rdata, &rdata_a,
+ NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
SIN(ai->ai_addr)->sin_port =
resstate->head->ai_port;
memcpy(&SIN(ai->ai_addr)->sin_addr,
@@ -792,8 +795,9 @@ process_answer(isc_task_t *task, isc_event_t *event) {
break;
case AF_INET6:
dns_rdataset_current(rdataset, &rdata);
- dns_rdata_tostruct(&rdata, &rdata_aaaa,
- NULL);
+ result = dns_rdata_tostruct(&rdata, &rdata_aaaa,
+ NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
SIN6(ai->ai_addr)->sin6_port =
resstate->head->ai_port;
memcpy(&SIN6(ai->ai_addr)->sin6_addr,
@@ -1143,10 +1147,8 @@ add_ipv6(const char *hostname, int flags, struct addrinfo **aip,
UNUSED(flags);
ai = ai_clone(*aip, AF_INET6); /* don't use ai_clone() */
- if (ai == NULL) {
- freeaddrinfo(*aip);
+ if (ai == NULL)
return (EAI_MEMORY);
- }
*aip = ai;
ai->ai_socktype = socktype;
@@ -1186,7 +1188,7 @@ get_local(const char *name, int socktype, struct addrinfo **res) {
return (EAI_MEMORY);
slocal = SLOCAL(ai->ai_addr);
- strncpy(slocal->sun_path, name, sizeof(slocal->sun_path));
+ strlcpy(slocal->sun_path, name, sizeof(slocal->sun_path));
ai->ai_socktype = socktype;
/*
diff --git a/contrib/bind9/lib/irs/getnameinfo.c b/contrib/bind9/lib/irs/getnameinfo.c
index 80e36776d18b..526ad0918d7b 100644
--- a/contrib/bind9/lib/irs/getnameinfo.c
+++ b/contrib/bind9/lib/irs/getnameinfo.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -147,7 +147,7 @@ getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
IRS_GETNAMEINFO_BUFLEN_T hostlen, char *serv,
IRS_GETNAMEINFO_BUFLEN_T servlen, IRS_GETNAMEINFO_FLAGS_T flags)
{
- struct afd *afd;
+ struct afd *afd = NULL;
struct servent *sp;
unsigned short port = 0;
#ifdef IRS_PLATFORM_HAVESALEN
@@ -328,6 +328,7 @@ getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
case DNS_R_NOVALIDDS:
case DNS_R_NOVALIDSIG:
ERR(EAI_INSECUREDATA);
+ break;
default:
ERR(EAI_FAIL);
}
diff --git a/contrib/bind9/lib/irs/resconf.c b/contrib/bind9/lib/irs/resconf.c
index 18525e8393ab..88bdac1641d5 100644
--- a/contrib/bind9/lib/irs/resconf.c
+++ b/contrib/bind9/lib/irs/resconf.c
@@ -238,7 +238,7 @@ add_server(isc_mem_t *mctx, const char *address_str,
goto cleanup;
}
address->length = res->ai_addrlen;
- memcpy(&address->type.sa, res->ai_addr, res->ai_addrlen);
+ memcpy(&address->type.ss, res->ai_addr, res->ai_addrlen);
ISC_LINK_INIT(address, link);
ISC_LIST_APPEND(*nameservers, address, link);
diff --git a/contrib/bind9/lib/isc/Makefile.in b/contrib/bind9/lib/isc/Makefile.in
index ff500ffd3fb2..e68290cd2975 100644
--- a/contrib/bind9/lib/isc/Makefile.in
+++ b/contrib/bind9/lib/isc/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -58,9 +58,10 @@ OBJS = @ISC_EXTRA_OBJS@ \
httpd.@O@ inet_aton.@O@ iterated_hash.@O@ \
lex.@O@ lfsr.@O@ lib.@O@ log.@O@ \
md5.@O@ mem.@O@ mutexblock.@O@ \
- netaddr.@O@ netscope.@O@ ondestroy.@O@ \
+ netaddr.@O@ netscope.@O@ pool.@O@ ondestroy.@O@ \
parseint.@O@ portset.@O@ quota.@O@ radix.@O@ random.@O@ \
- ratelimiter.@O@ refcount.@O@ region.@O@ result.@O@ rwlock.@O@ \
+ ratelimiter.@O@ refcount.@O@ region.@O@ regex.@O@ result.@O@ \
+ rwlock.@O@ \
serial.@O@ sha1.@O@ sha2.@O@ sockaddr.@O@ stats.@O@ \
string.@O@ strtoul.@O@ symtab.@O@ task.@O@ taskpool.@O@ \
timer.@O@ version.@O@ ${UNIXOBJS} ${NLSOBJS} ${THREADOBJS}
@@ -74,9 +75,9 @@ SRCS = @ISC_EXTRA_SRCS@ \
httpd.c inet_aton.c iterated_hash.c \
lex.c lfsr.c lib.c log.c \
md5.c mem.c mutexblock.c \
- netaddr.c netscope.c ondestroy.c \
+ netaddr.c netscope.c pool.c ondestroy.c \
parseint.c portset.c quota.c radix.c random.c \
- ratelimiter.c refcount.c region.c result.c rwlock.c \
+ ratelimiter.c refcount.c region.c regex.c result.c rwlock.c \
serial.c sha1.c sha2.c sockaddr.c stats.c string.c strtoul.c \
symtab.c symtbl-empty.c task.c taskpool.c timer.c version.c
diff --git a/contrib/bind9/lib/isc/api b/contrib/bind9/lib/isc/api
index 18de29ceb9d2..48bc766d9378 100644
--- a/contrib/bind9/lib/isc/api
+++ b/contrib/bind9/lib/isc/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 85
-LIBREVISION = 0
-LIBAGE = 1
+# 9.9-sub: 130-139
+LIBINTERFACE = 95
+LIBREVISION = 1
+LIBAGE = 0
diff --git a/contrib/bind9/lib/isc/buffer.c b/contrib/bind9/lib/isc/buffer.c
index 1b59e650acde..e37af15968a9 100644
--- a/contrib/bind9/lib/isc/buffer.c
+++ b/contrib/bind9/lib/isc/buffer.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -28,7 +28,7 @@
#include <isc/util.h>
void
-isc__buffer_init(isc_buffer_t *b, const void *base, unsigned int length) {
+isc__buffer_init(isc_buffer_t *b, void *base, unsigned int length) {
/*
* Make 'b' refer to the 'length'-byte region starting at 'base'.
* XXXDCL see the comment in buffer.h about base being const.
diff --git a/contrib/bind9/lib/isc/include/isc/Makefile.in b/contrib/bind9/lib/isc/include/isc/Makefile.in
index b8acdb5dbe0f..8afcfa73cb80 100644
--- a/contrib/bind9/lib/isc/include/isc/Makefile.in
+++ b/contrib/bind9/lib/isc/include/isc/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2009, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 1998-2001, 2003 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -36,7 +36,7 @@ HEADERS = app.h assertions.h base64.h bind9.h bitstring.h boolean.h \
magic.h md5.h mem.h msgcat.h msgs.h mutexblock.h \
namespace.h netaddr.h ondestroy.h os.h parseint.h \
print.h quota.h radix.h random.h ratelimiter.h \
- refcount.h region.h resource.h \
+ refcount.h regex.h region.h resource.h \
result.h resultclass.h rwlock.h serial.h sha1.h sha2.h \
sockaddr.h socket.h stdio.h stdlib.h string.h \
symtab.h \
diff --git a/contrib/bind9/lib/isc/include/isc/buffer.h b/contrib/bind9/lib/isc/include/isc/buffer.h
index ae7e4c3dfc34..72b856056a8a 100644
--- a/contrib/bind9/lib/isc/include/isc/buffer.h
+++ b/contrib/bind9/lib/isc/include/isc/buffer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -222,7 +222,7 @@ isc_buffer_free(isc_buffer_t **dynbuffer);
*/
void
-isc__buffer_init(isc_buffer_t *b, const void *base, unsigned int length);
+isc__buffer_init(isc_buffer_t *b, void *base, unsigned int length);
/*!<
* \brief Make 'b' refer to the 'length'-byte region starting at base.
*
@@ -681,12 +681,7 @@ ISC_LANG_ENDDECLS
*/
#define ISC__BUFFER_INIT(_b, _base, _length) \
do { \
- union { \
- const void * konst; \
- void * var; \
- } _u; \
- _u.konst = (_base); \
- (_b)->base = _u.var; \
+ (_b)->base = _base; \
(_b)->length = (_length); \
(_b)->used = 0; \
(_b)->current = 0; \
@@ -896,6 +891,13 @@ ISC_LANG_ENDDECLS
#define isc_buffer_putuint32 isc__buffer_putuint32
#endif
+#define isc_buffer_constinit(_b, _d, _l) \
+ do { \
+ union { void *_var; const void *_const; } _deconst; \
+ _deconst._const = (_d); \
+ isc_buffer_init((_b), _deconst._var, (_l)); \
+ } while (0)
+
/*
* No inline method for this one (yet).
*/
diff --git a/contrib/bind9/lib/isc/include/isc/file.h b/contrib/bind9/lib/isc/include/isc/file.h
index 38f78b7403e8..92ea96eceb7e 100644
--- a/contrib/bind9/lib/isc/include/isc/file.h
+++ b/contrib/bind9/lib/isc/include/isc/file.h
@@ -115,8 +115,8 @@ isc_result_t
isc_file_bopenuniquemode(char *templet, int mode, FILE **fp);
/*!<
* \brief Create and open a file with a unique name based on 'templet'.
- * isc_file_bopen*() open the file in binary mode in Windows.
- * isc_file_open*() open the file in text mode in Windows.
+ * isc_file_bopen*() open the file in binary mode in Windows.
+ * isc_file_open*() open the file in text mode in Windows.
*
* Notes:
*\li 'template' is a reserved work in C++. If you want to complain
@@ -217,6 +217,22 @@ isc_file_isplainfile(const char *name);
* These occur when stat returns -1 and an errno.
*/
+isc_result_t
+isc_file_isdirectory(const char *name);
+/*!<
+ * \brief Check that 'name' exists and is a directory.
+ *
+ * Returns:
+ *\li #ISC_R_SUCCESS
+ * Success, file is a directory.
+ *\li #ISC_R_INVALIDFILE
+ * File is not a directory.
+ *\li #ISC_R_FILENOTFOUND
+ * File does not exist.
+ *\li #other ISC_R_* errors translated from errno
+ * These occur when stat returns -1 and an errno.
+ */
+
isc_boolean_t
isc_file_iscurrentdir(const char *filename);
/*!<
diff --git a/contrib/bind9/lib/isc/include/isc/heap.h b/contrib/bind9/lib/isc/include/isc/heap.h
index 77bf07c34498..0b3a53b01ef5 100644
--- a/contrib/bind9/lib/isc/include/isc/heap.h
+++ b/contrib/bind9/lib/isc/include/isc/heap.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1997-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -60,6 +60,8 @@ isc_heap_create(isc_mem_t *mctx, isc_heapcompare_t compare,
* storage method. When the heap elements are deleted space is not freed
* but will be reused when new elements are inserted.
*
+ * Heap elements are indexed from 1.
+ *
* Requires:
*\li "mctx" is valid.
*\li "compare" is a function which takes two void * arguments and
diff --git a/contrib/bind9/lib/isc/include/isc/list.h b/contrib/bind9/lib/isc/include/isc/list.h
index 4056be257f3c..401bbdad756c 100644
--- a/contrib/bind9/lib/isc/include/isc/list.h
+++ b/contrib/bind9/lib/isc/include/isc/list.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006, 2007, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1997-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -102,6 +102,8 @@
} \
(elt)->link.prev = (type *)(-1); \
(elt)->link.next = (type *)(-1); \
+ ISC_INSIST((list).head != (elt)); \
+ ISC_INSIST((list).tail != (elt)); \
} while (0)
#define __ISC_LIST_UNLINKUNSAFE(list, elt, link) \
@@ -169,6 +171,19 @@
(list2).tail = NULL; \
} while (0)
+#define ISC_LIST_PREPENDLIST(list1, list2, link) \
+ do { \
+ if (ISC_LIST_EMPTY(list1)) \
+ (list1) = (list2); \
+ else if (!ISC_LIST_EMPTY(list2)) { \
+ (list2).tail->link.next = (list1).head; \
+ (list1).head->link.prev = (list2).tail; \
+ (list1).head = (list2).head; \
+ } \
+ (list2).head = NULL; \
+ (list2).tail = NULL; \
+ } while (0)
+
#define ISC_LIST_ENQUEUE(list, elt, link) ISC_LIST_APPEND(list, elt, link)
#define __ISC_LIST_ENQUEUEUNSAFE(list, elt, link) \
__ISC_LIST_APPENDUNSAFE(list, elt, link)
diff --git a/contrib/bind9/lib/isc/include/isc/mem.h b/contrib/bind9/lib/isc/include/isc/mem.h
index c47ae55ad1be..320d0d83138b 100644
--- a/contrib/bind9/lib/isc/include/isc/mem.h
+++ b/contrib/bind9/lib/isc/include/isc/mem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1997-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -40,15 +40,6 @@ typedef void * (*isc_memalloc_t)(void *, size_t);
typedef void (*isc_memfree_t)(void *, void *);
/*%
- * Define ISC_MEM_DEBUG=1 to make all functions that free memory
- * set the pointer being freed to NULL after being freed.
- * This is the default; set ISC_MEM_DEBUG=0 to disable it.
- */
-#ifndef ISC_MEM_DEBUG
-#define ISC_MEM_DEBUG 1
-#endif
-
-/*%
* Define ISC_MEM_TRACKLINES=1 to turn on detailed tracing of memory
* allocation and freeing by file and line number.
*/
@@ -274,7 +265,6 @@ struct isc_mempool {
#define ISCAPI_MPOOL_VALID(mp) ((mp) != NULL && \
(mp)->magic == ISCAPI_MPOOL_MAGIC)
-#if ISC_MEM_DEBUG
#define isc_mem_put(c, p, s) \
do { \
ISCMEMFUNC(put)((c), (p), (s) _ISC_MEM_FILELINE); \
@@ -295,13 +285,6 @@ struct isc_mempool {
ISCMEMPOOLFUNC(put)((c), (p) _ISC_MEM_FILELINE); \
(p) = NULL; \
} while (0)
-#else
-#define isc_mem_put(c, p, s) ISCMEMFUNC(put)((c), (p), (s) _ISC_MEM_FILELINE)
-#define isc_mem_putanddetach(c, p, s) \
- ISCMEMFUNC(putanddetach)((c), (p), (s) _ISC_MEM_FILELINE)
-#define isc_mem_free(c, p) ISCMEMFUNC(free)((c), (p) _ISC_MEM_FILELINE)
-#define isc_mempool_put(c, p) ISCMEMPOOLFUNC(put)((c), (p) _ISC_MEM_FILELINE)
-#endif
/*@{*/
isc_result_t
@@ -334,7 +317,7 @@ isc_mem_createx2(size_t max_size, size_t target_size,
* ISC_MEMFLAG_INTERNAL is not set, 'target_size' is ignored.
*
* 'max_size' is also used to size the statistics arrays and the array
- * used to record active memory when ISC_MEM_DEBUGRECORD is set. Settin
+ * used to record active memory when ISC_MEM_DEBUGRECORD is set. Setting
* 'max_size' too low can have detrimental effects on performance.
*
* A memory context created using isc_mem_createx() will obtain
@@ -548,7 +531,7 @@ isc_mem_gettag(isc_mem_t *ctx);
*/
#ifdef HAVE_LIBXML2
-void
+int
isc_mem_renderxml(xmlTextWriterPtr writer);
/*%<
* Render all contexts' statistics and status in XML for writer.
diff --git a/contrib/bind9/lib/isc/include/isc/namespace.h b/contrib/bind9/lib/isc/include/isc/namespace.h
index ae1801d5f461..f8744d8ad635 100644
--- a/contrib/bind9/lib/isc/include/isc/namespace.h
+++ b/contrib/bind9/lib/isc/include/isc/namespace.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -31,6 +31,7 @@
#define isc_app_run isc__app_run
#define isc_app_ctxrun isc__app_ctxrun
#define isc_app_shutdown isc__app_shutdown
+#define isc_app_ctxfinish isc__app_ctxfinish
#define isc_app_ctxshutdown isc__app_ctxshutdown
#define isc_app_ctxsuspend isc__app_ctxsuspend
#define isc_app_reload isc__app_reload
@@ -70,6 +71,7 @@
#define isc_mem_isovermem isc__mem_isovermem
#define isc_mem_setname isc__mem_setname
#define isc_mem_setwater isc__mem_setwater
+#define isc_mem_printactive isc__mem_printactive
#define isc_mem_printallactive isc__mem_printallactive
#define isc_mem_waterack isc__mem_waterack
#define isc_mempool_create isc__mempool_create
@@ -88,6 +90,7 @@
#define isc_mempool_getfillcount isc__mempool_getfillcount
#define isc_socket_create isc__socket_create
+#define isc_socket_dup isc__socket_dup
#define isc_socket_attach isc__socket_attach
#define isc_socket_detach isc__socket_detach
#define isc_socketmgr_create isc__socketmgr_create
@@ -110,6 +113,7 @@
#define isc_socket_listen isc__socket_listen
#define isc_socket_accept isc__socket_accept
#define isc_socket_connect isc__socket_connect
+#define isc_socket_getfd isc__socket_getfd
#define isc_socket_getname isc__socket_getname
#define isc_socket_gettag isc__socket_gettag
#define isc_socket_getpeername isc__socket_getpeername
@@ -145,11 +149,15 @@
#define isc_task_gettag isc__task_gettag
#define isc_task_getcurrenttime isc__task_getcurrenttime
#define isc_taskmgr_create isc__taskmgr_create
+#define isc_taskmgr_setmode isc__taskmgr_setmode
+#define isc_taskmgr_mode isc__taskmgr_mode
#define isc_taskmgr_destroy isc__taskmgr_destroy
#define isc_taskmgr_setexcltask isc__taskmgr_setexcltask
#define isc_taskmgr_excltask isc__taskmgr_excltask
#define isc_task_beginexclusive isc__task_beginexclusive
#define isc_task_endexclusive isc__task_endexclusive
+#define isc_task_setprivilege isc__task_setprivilege
+#define isc_task_privilege isc__task_privilege
#define isc_timer_create isc__timer_create
#define isc_timer_reset isc__timer_reset
diff --git a/contrib/bind9/lib/isc/include/isc/pool.h b/contrib/bind9/lib/isc/include/isc/pool.h
new file mode 100644
index 000000000000..7b33c37bb791
--- /dev/null
+++ b/contrib/bind9/lib/isc/include/isc/pool.h
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef ISC_OBJPOOL_H
+#define ISC_OBJPOOL_H 1
+
+/*****
+ ***** Module Info
+ *****/
+
+/*! \file isc/pool.h
+ * \brief An object pool is a mechanism for sharing a small pool of
+ * fungible objects among a large number of objects that depend on them.
+ *
+ * This is useful, for example, when it causes performance problems for
+ * large number of zones to share a single memory context or task object,
+ * but it would create a different set of problems for them each to have an
+ * independent task or memory context.
+ */
+
+
+/***
+ *** Imports.
+ ***/
+
+#include <isc/lang.h>
+#include <isc/mem.h>
+#include <isc/types.h>
+
+ISC_LANG_BEGINDECLS
+
+/*****
+ ***** Types.
+ *****/
+
+typedef void
+(*isc_pooldeallocator_t)(void **object);
+
+typedef isc_result_t
+(*isc_poolinitializer_t)(void **target, void *arg);
+
+typedef struct isc_pool isc_pool_t;
+
+/*****
+ ***** Functions.
+ *****/
+
+isc_result_t
+isc_pool_create(isc_mem_t *mctx, unsigned int count,
+ isc_pooldeallocator_t free,
+ isc_poolinitializer_t init, void *initarg,
+ isc_pool_t **poolp);
+/*%<
+ * Create a pool of "count" object pointers. If 'free' is not NULL,
+ * it points to a function that will detach the objects. 'init'
+ * points to a function that will initialize the arguments, and
+ * 'arg' to an argument to be passed into that function (for example,
+ * a relevant manager or context object).
+ *
+ * Requires:
+ *
+ *\li 'mctx' is a valid memory context.
+ *
+ *\li init != NULL
+ *
+ *\li poolp != NULL && *poolp == NULL
+ *
+ * Ensures:
+ *
+ *\li On success, '*poolp' points to the new object pool.
+ *
+ * Returns:
+ *
+ *\li #ISC_R_SUCCESS
+ *\li #ISC_R_NOMEMORY
+ *\li #ISC_R_UNEXPECTED
+ */
+
+void *
+isc_pool_get(isc_pool_t *pool);
+/*%<
+ * Returns a pointer to an object from the pool. Currently the object
+ * is chosen from the pool at random. (This may be changed in the future
+ * to something that guaratees balance.)
+ */
+
+int
+isc_pool_count(isc_pool_t *pool);
+/*%<
+ * Returns the number of objcts in the pool 'pool'.
+ */
+
+isc_result_t
+isc_pool_expand(isc_pool_t **sourcep, unsigned int count, isc_pool_t **targetp);
+
+/*%<
+ * If 'size' is larger than the number of objects in the pool pointed to by
+ * 'sourcep', then a new pool of size 'count' is allocated, the existing
+ * objects are copied into it, additional ones created to bring the
+ * total number up to 'count', and the resulting pool is attached to
+ * 'targetp'.
+ *
+ * If 'count' is less than or equal to the number of objects in 'source', then
+ * 'sourcep' is attached to 'targetp' without any other action being taken.
+ *
+ * In either case, 'sourcep' is detached.
+ *
+ * Requires:
+ *
+ * \li 'sourcep' is not NULL and '*source' is not NULL
+ * \li 'targetp' is not NULL and '*source' is NULL
+ *
+ * Ensures:
+ *
+ * \li On success, '*targetp' points to a valid task pool.
+ * \li On success, '*sourcep' points to NULL.
+ *
+ * Returns:
+ *
+ * \li #ISC_R_SUCCESS
+ * \li #ISC_R_NOMEMORY
+ */
+
+void
+isc_pool_destroy(isc_pool_t **poolp);
+/*%<
+ * Destroy a task pool. The tasks in the pool are detached but not
+ * shut down.
+ *
+ * Requires:
+ * \li '*poolp' is a valid task pool.
+ */
+
+ISC_LANG_ENDDECLS
+
+#endif /* ISC_OBJPOOL_H */
diff --git a/contrib/bind9/lib/isc/include/isc/queue.h b/contrib/bind9/lib/isc/include/isc/queue.h
new file mode 100644
index 000000000000..1cc6c12a4f10
--- /dev/null
+++ b/contrib/bind9/lib/isc/include/isc/queue.h
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2011-2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+/*
+ * This is a generic implementation of a two-lock concurrent queue.
+ * There are built-in mutex locks for the head and tail of the queue,
+ * allowing elements to be safely added and removed at the same time.
+ *
+ * NULL is "end of list"
+ * -1 is "not linked"
+ */
+
+#ifndef ISC_QUEUE_H
+#define ISC_QUEUE_H 1
+#include <isc/assertions.h>
+#include <isc/boolean.h>
+#include <isc/mutex.h>
+
+#ifdef ISC_QUEUE_CHECKINIT
+#define ISC_QLINK_INSIST(x) ISC_INSIST(x)
+#else
+#define ISC_QLINK_INSIST(x) (void)0
+#endif
+
+#define ISC_QLINK(type) struct { type *prev, *next; }
+
+#define ISC_QLINK_INIT(elt, link) \
+ do { \
+ (elt)->link.next = (elt)->link.prev = (void *)(-1); \
+ } while(0)
+
+#define ISC_QLINK_LINKED(elt, link) ((void*)(elt)->link.next != (void*)(-1))
+
+#define ISC_QUEUE(type) struct { \
+ type *head, *tail; \
+ isc_mutex_t headlock, taillock; \
+}
+
+#define ISC_QUEUE_INIT(queue, link) \
+ do { \
+ (void) isc_mutex_init(&(queue).taillock); \
+ (void) isc_mutex_init(&(queue).headlock); \
+ (queue).tail = (queue).head = NULL; \
+ } while (0)
+
+#define ISC_QUEUE_EMPTY(queue) ISC_TF((queue).head == NULL)
+
+#define ISC_QUEUE_DESTROY(queue) \
+ do { \
+ ISC_QLINK_INSIST(ISC_QUEUE_EMPTY(queue)); \
+ (void) isc_mutex_destroy(&(queue).taillock); \
+ (void) isc_mutex_destroy(&(queue).headlock); \
+ } while (0)
+
+/*
+ * queues are meant to separate the locks at either end. For best effect, that
+ * means keeping the ends separate - i.e. non-empty queues work best.
+ *
+ * a push to an empty queue has to take the pop lock to update
+ * the pop side of the queue.
+ * Popping the last entry has to take the push lock to update
+ * the push side of the queue.
+ *
+ * The order is (pop, push), because a pop is presumably in the
+ * latency path and a push is when we're done.
+ *
+ * We do an MT hot test in push to see if we need both locks, so we can
+ * acquire them in order. Hopefully that makes the case where we get
+ * the push lock and find we need the pop lock (and have to release it) rare.
+ *
+ * > 1 entry - no collision, push works on one end, pop on the other
+ * 0 entry - headlock race
+ * pop wins - return(NULL), push adds new as both head/tail
+ * push wins - updates head/tail, becomes 1 entry case.
+ * 1 entry - taillock race
+ * pop wins - return(pop) sets head/tail NULL, becomes 0 entry case
+ * push wins - updates {head,tail}->link.next, pop updates head
+ * with new ->link.next and doesn't update tail
+ *
+ */
+#define ISC_QUEUE_PUSH(queue, elt, link) \
+ do { \
+ isc_boolean_t headlocked = ISC_FALSE; \
+ ISC_QLINK_INSIST(!ISC_QLINK_LINKED(elt, link)); \
+ if ((queue).head == NULL) { \
+ LOCK(&(queue).headlock); \
+ headlocked = ISC_TRUE; \
+ } \
+ LOCK(&(queue).taillock); \
+ if ((queue).tail == NULL && !headlocked) { \
+ UNLOCK(&(queue).taillock); \
+ LOCK(&(queue).headlock); \
+ LOCK(&(queue).taillock); \
+ headlocked = ISC_TRUE; \
+ } \
+ (elt)->link.prev = (queue).tail; \
+ (elt)->link.next = NULL; \
+ if ((queue).tail != NULL) \
+ (queue).tail->link.next = (elt); \
+ (queue).tail = (elt); \
+ UNLOCK(&(queue).taillock); \
+ if (headlocked) { \
+ if ((queue).head == NULL) \
+ (queue).head = (elt); \
+ UNLOCK(&(queue).headlock); \
+ } \
+ } while (0)
+
+#define ISC_QUEUE_POP(queue, link, ret) \
+ do { \
+ LOCK(&(queue).headlock); \
+ ret = (queue).head; \
+ while (ret != NULL) { \
+ if (ret->link.next == NULL) { \
+ LOCK(&(queue).taillock); \
+ if (ret->link.next == NULL) { \
+ (queue).head = (queue).tail = NULL; \
+ UNLOCK(&(queue).taillock); \
+ break; \
+ }\
+ UNLOCK(&(queue).taillock); \
+ } \
+ (queue).head = ret->link.next; \
+ (queue).head->link.prev = NULL; \
+ break; \
+ } \
+ UNLOCK(&(queue).headlock); \
+ if (ret != NULL) \
+ (ret)->link.next = (ret)->link.prev = (void *)(-1); \
+ } while(0)
+
+#define ISC_QUEUE_UNLINK(queue, elt, link) \
+ do { \
+ ISC_QLINK_INSIST(ISC_QLINK_LINKED(elt, link)); \
+ LOCK(&(queue).headlock); \
+ LOCK(&(queue).taillock); \
+ if ((elt)->link.prev == NULL) \
+ (queue).head = (elt)->link.next; \
+ else \
+ (elt)->link.prev->link.next = (elt)->link.next; \
+ if ((elt)->link.next == NULL) \
+ (queue).tail = (elt)->link.prev; \
+ else \
+ (elt)->link.next->link.prev = (elt)->link.prev; \
+ UNLOCK(&(queue).taillock); \
+ UNLOCK(&(queue).headlock); \
+ (elt)->link.next = (elt)->link.prev = (void *)(-1); \
+ } while(0)
+
+#endif /* ISC_QUEUE_H */
diff --git a/contrib/bind9/lib/isc/include/isc/radix.h b/contrib/bind9/lib/isc/include/isc/radix.h
index 6b413a23b909..47512c722885 100644
--- a/contrib/bind9/lib/isc/include/isc/radix.h
+++ b/contrib/bind9/lib/isc/include/isc/radix.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2007, 2008, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -54,13 +54,14 @@
} while(0)
typedef struct isc_prefix {
- unsigned int family; /* AF_INET | AF_INET6, or AF_UNSPEC for "any" */
- unsigned int bitlen; /* 0 for "any" */
- isc_refcount_t refcount;
- union {
+ isc_mem_t *mctx;
+ unsigned int family; /* AF_INET | AF_INET6, or AF_UNSPEC for "any" */
+ unsigned int bitlen; /* 0 for "any" */
+ isc_refcount_t refcount;
+ union {
struct in_addr sin;
struct in6_addr sin6;
- } add;
+ } add;
} isc_prefix_t;
typedef void (*isc_radix_destroyfunc_t)(void *);
@@ -90,12 +91,13 @@ typedef void (*isc_radix_processfunc_t)(isc_prefix_t *, void **);
#define ISC_IS6(family) ((family) == AF_INET6 ? 1 : 0)
typedef struct isc_radix_node {
- isc_uint32_t bit; /* bit length of the prefix */
- isc_prefix_t *prefix; /* who we are in radix tree */
- struct isc_radix_node *l, *r; /* left and right children */
- struct isc_radix_node *parent; /* may be used */
- void *data[2]; /* pointers to IPv4 and IPV6 data */
- int node_num[2]; /* which node this was in the tree,
+ isc_mem_t *mctx;
+ isc_uint32_t bit; /* bit length of the prefix */
+ isc_prefix_t *prefix; /* who we are in radix tree */
+ struct isc_radix_node *l, *r; /* left and right children */
+ struct isc_radix_node *parent; /* may be used */
+ void *data[2]; /* pointers to IPv4 and IPV6 data */
+ int node_num[2]; /* which node this was in the tree,
or -1 for glue nodes */
} isc_radix_node_t;
@@ -103,12 +105,12 @@ typedef struct isc_radix_node {
#define RADIX_TREE_VALID(a) ISC_MAGIC_VALID(a, RADIX_TREE_MAGIC);
typedef struct isc_radix_tree {
- unsigned int magic;
- isc_mem_t *mctx;
- isc_radix_node_t *head;
- isc_uint32_t maxbits; /* for IP, 32 bit addresses */
- int num_active_node; /* for debugging purposes */
- int num_added_node; /* total number of nodes */
+ unsigned int magic;
+ isc_mem_t *mctx;
+ isc_radix_node_t *head;
+ isc_uint32_t maxbits; /* for IP, 32 bit addresses */
+ int num_active_node; /* for debugging purposes */
+ int num_added_node; /* total number of nodes */
} isc_radix_tree_t;
isc_result_t
diff --git a/contrib/bind9/lib/isc/include/isc/regex.h b/contrib/bind9/lib/isc/include/isc/regex.h
new file mode 100644
index 000000000000..3cf6aa4c686a
--- /dev/null
+++ b/contrib/bind9/lib/isc/include/isc/regex.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef ISC_REGEX_H
+#define ISC_REGEX_H 1
+
+/*! \file isc/regex.h */
+
+#include <isc/types.h>
+#include <isc/lang.h>
+
+ISC_LANG_BEGINDECLS
+
+int
+isc_regex_validate(const char *expression);
+/*%<
+ * Check a regular expression for syntactic correctness.
+ *
+ * Returns:
+ *\li -1 on error.
+ *\li the number of groups in the expression.
+ */
+
+ISC_LANG_ENDDECLS
+
+#endif /* ISC_REGEX_H */
diff --git a/contrib/bind9/lib/isc/include/isc/region.h b/contrib/bind9/lib/isc/include/isc/region.h
index 43d8f8f2d3e9..ccca272ae522 100644
--- a/contrib/bind9/lib/isc/include/isc/region.h
+++ b/contrib/bind9/lib/isc/include/isc/region.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -23,6 +23,7 @@
/*! \file isc/region.h */
#include <isc/types.h>
+#include <isc/lang.h>
struct isc_region {
unsigned char * base;
@@ -81,12 +82,14 @@ struct isc_consttextregion {
} while (0)
/*@}*/
+ISC_LANG_BEGINDECLS
+
int
isc_region_compare(isc_region_t *r1, isc_region_t *r2);
/*%<
- * Compares the contents of two regions
+ * Compares the contents of two regions
*
- * Requires:
+ * Requires:
*\li 'r1' is a valid region
*\li 'r2' is a valid region
*
@@ -96,4 +99,6 @@ isc_region_compare(isc_region_t *r1, isc_region_t *r2);
*\li > 0 if r1 is lexicographically greater than r2
*/
+ISC_LANG_ENDDECLS
+
#endif /* ISC_REGION_H */
diff --git a/contrib/bind9/lib/isc/include/isc/sockaddr.h b/contrib/bind9/lib/isc/include/isc/sockaddr.h
index 1e6914222c1b..4d811dd64971 100644
--- a/contrib/bind9/lib/isc/include/isc/sockaddr.h
+++ b/contrib/bind9/lib/isc/include/isc/sockaddr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -34,6 +34,7 @@ struct isc_sockaddr {
struct sockaddr sa;
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
+ struct sockaddr_storage ss;
#ifdef ISC_PLATFORM_HAVESYSUNH
struct sockaddr_un sunix;
#endif
diff --git a/contrib/bind9/lib/isc/include/isc/socket.h b/contrib/bind9/lib/isc/include/isc/socket.h
index 0df7d27f14ad..9d086b452012 100644
--- a/contrib/bind9/lib/isc/include/isc/socket.h
+++ b/contrib/bind9/lib/isc/include/isc/socket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -283,12 +283,20 @@ typedef struct isc_socketmethods {
isc_task_t *task, isc_taskaction_t action,
const void *arg, isc_sockaddr_t *address,
struct in6_pktinfo *pktinfo);
+ isc_result_t (*sendto2)(isc_socket_t *sock, isc_region_t *region,
+ isc_task_t *task, isc_sockaddr_t *address,
+ struct in6_pktinfo *pktinfo,
+ isc_socketevent_t *event,
+ unsigned int flags);
isc_result_t (*connect)(isc_socket_t *sock, isc_sockaddr_t *addr,
isc_task_t *task, isc_taskaction_t action,
const void *arg);
isc_result_t (*recv)(isc_socket_t *sock, isc_region_t *region,
unsigned int minimum, isc_task_t *task,
isc_taskaction_t action, const void *arg);
+ isc_result_t (*recv2)(isc_socket_t *sock, isc_region_t *region,
+ unsigned int minimum, isc_task_t *task,
+ isc_socketevent_t *event, unsigned int flags);
void (*cancel)(isc_socket_t *sock, isc_task_t *task,
unsigned int how);
isc_result_t (*getsockname)(isc_socket_t *sock,
@@ -296,6 +304,9 @@ typedef struct isc_socketmethods {
isc_sockettype_t (*gettype)(isc_socket_t *sock);
void (*ipv6only)(isc_socket_t *sock, isc_boolean_t yes);
isc_result_t (*fdwatchpoke)(isc_socket_t *sock, int flags);
+ isc_result_t (*dup)(isc_socket_t *socket,
+ isc_socket_t **socketp);
+ int (*getfd)(isc_socket_t *socket);
} isc_socketmethods_t;
/*%
@@ -449,6 +460,12 @@ isc_socket_create(isc_socketmgr_t *manager,
*\li #ISC_R_UNEXPECTED
*/
+isc_result_t
+isc_socket_dup(isc_socket_t *sock0, isc_socket_t **socketp);
+/*%<
+ * Duplicate an existing socket, reusing its file descriptor.
+ */
+
void
isc_socket_cancel(isc_socket_t *sock, isc_task_t *task,
unsigned int how);
@@ -1102,6 +1119,11 @@ void *isc_socket_gettag(isc_socket_t *socket);
* Get the tag associated with a socket, if any.
*/
+int isc_socket_getfd(isc_socket_t *socket);
+/*%<
+ * Get the file descriptor associated with a socket
+ */
+
void
isc__socketmgr_setreserved(isc_socketmgr_t *mgr, isc_uint32_t);
/*%<
@@ -1116,7 +1138,7 @@ isc__socketmgr_maxudp(isc_socketmgr_t *mgr, int maxudp);
#ifdef HAVE_LIBXML2
-void
+int
isc_socketmgr_renderxml(isc_socketmgr_t *mgr, xmlTextWriterPtr writer);
/*%<
* Render internal statistics and other state into the XML document.
diff --git a/contrib/bind9/lib/isc/include/isc/task.h b/contrib/bind9/lib/isc/include/isc/task.h
index 19d47835786b..7abf2ef2be60 100644
--- a/contrib/bind9/lib/isc/include/isc/task.h
+++ b/contrib/bind9/lib/isc/include/isc/task.h
@@ -88,6 +88,7 @@
#define ISC_TASKEVENT_FIRSTEVENT (ISC_EVENTCLASS_TASK + 0)
#define ISC_TASKEVENT_SHUTDOWN (ISC_EVENTCLASS_TASK + 1)
+#define ISC_TASKEVENT_TEST (ISC_EVENTCLASS_TASK + 1)
#define ISC_TASKEVENT_LASTEVENT (ISC_EVENTCLASS_TASK + 65535)
/*****
@@ -100,9 +101,17 @@ ISC_LANG_BEGINDECLS
*** Types
***/
+typedef enum {
+ isc_taskmgrmode_normal = 0,
+ isc_taskmgrmode_privileged
+} isc_taskmgrmode_t;
+
/*% Task and task manager methods */
typedef struct isc_taskmgrmethods {
void (*destroy)(isc_taskmgr_t **managerp);
+ void (*setmode)(isc_taskmgr_t *manager,
+ isc_taskmgrmode_t mode);
+ isc_taskmgrmode_t (*mode)(isc_taskmgr_t *manager);
isc_result_t (*taskcreate)(isc_taskmgr_t *manager,
unsigned int quantum,
isc_task_t **taskp);
@@ -129,6 +138,8 @@ typedef struct isc_taskmethods {
void *tag);
isc_result_t (*beginexclusive)(isc_task_t *task);
void (*endexclusive)(isc_task_t *task);
+ void (*setprivilege)(isc_task_t *task, isc_boolean_t priv);
+ isc_boolean_t (*privilege)(isc_task_t *task);
} isc_taskmethods_t;
/*%
@@ -613,6 +624,32 @@ isc_task_exiting(isc_task_t *t);
*\li 'task' is a valid task.
*/
+void
+isc_task_setprivilege(isc_task_t *task, isc_boolean_t priv);
+/*%<
+ * Set or unset the task's "privileged" flag depending on the value of
+ * 'priv'.
+ *
+ * Under normal circumstances this flag has no effect on the task behavior,
+ * but when the task manager has been set to privileged exeuction mode via
+ * isc_taskmgr_setmode(), only tasks with the flag set will be executed,
+ * and all other tasks will wait until they're done. Once all privileged
+ * tasks have finished executing, the task manager will automatically
+ * return to normal execution mode and nonprivileged task can resume.
+ *
+ * Requires:
+ *\li 'task' is a valid task.
+ */
+
+isc_boolean_t
+isc_task_privilege(isc_task_t *task);
+/*%<
+ * Returns the current value of the task's privilege flag.
+ *
+ * Requires:
+ *\li 'task' is a valid task.
+ */
+
/*****
***** Task Manager.
*****/
@@ -666,6 +703,31 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
*/
void
+isc_taskmgr_setmode(isc_taskmgr_t *manager, isc_taskmgrmode_t mode);
+
+isc_taskmgrmode_t
+isc_taskmgr_mode(isc_taskmgr_t *manager);
+/*%<
+ * Set/get the current operating mode of the task manager. Valid modes are:
+ *
+ *\li isc_taskmgrmode_normal
+ *\li isc_taskmgrmode_privileged
+ *
+ * In privileged execution mode, only tasks that have had the "privilege"
+ * flag set via isc_task_setprivilege() can be executed. When all such
+ * tasks are complete, the manager automatically returns to normal mode
+ * and proceeds with running non-privileged ready tasks. This means it is
+ * necessary to have at least one privileged task waiting on the ready
+ * queue *before* setting the manager into privileged execution mode,
+ * which in turn means the task which calls this function should be in
+ * task-exclusive mode when it does so.
+ *
+ * Requires:
+ *
+ *\li 'manager' is a valid task manager.
+ */
+
+void
isc_taskmgr_destroy(isc_taskmgr_t **managerp);
/*%<
* Destroy '*managerp'.
@@ -726,7 +788,7 @@ isc_taskmgr_excltask(isc_taskmgr_t *mgr, isc_task_t **taskp);
#ifdef HAVE_LIBXML2
-void
+int
isc_taskmgr_renderxml(isc_taskmgr_t *mgr, xmlTextWriterPtr writer);
#endif
diff --git a/contrib/bind9/lib/isc/include/isc/taskpool.h b/contrib/bind9/lib/isc/include/isc/taskpool.h
index 64c739a211ab..46f395ea246f 100644
--- a/contrib/bind9/lib/isc/include/isc/taskpool.h
+++ b/contrib/bind9/lib/isc/include/isc/taskpool.h
@@ -139,6 +139,19 @@ isc_taskpool_destroy(isc_taskpool_t **poolp);
* \li '*poolp' is a valid task pool.
*/
+void
+isc_taskpool_setprivilege(isc_taskpool_t *pool, isc_boolean_t priv);
+/*%<
+ * Set the privilege flag on all tasks in 'pool' to 'priv'. If 'priv' is
+ * true, then when the task manager is set into privileged mode, only
+ * tasks wihin this pool will be able to execute. (Note: It is important
+ * to turn the pool tasks' privilege back off before the last task finishes
+ * executing.)
+ *
+ * Requires:
+ * \li 'pool' is a valid task pool.
+ */
+
ISC_LANG_ENDDECLS
#endif /* ISC_TASKPOOL_H */
diff --git a/contrib/bind9/lib/isc/include/isc/timer.h b/contrib/bind9/lib/isc/include/isc/timer.h
index fa9abb16aa9d..0598f79b58e0 100644
--- a/contrib/bind9/lib/isc/include/isc/timer.h
+++ b/contrib/bind9/lib/isc/include/isc/timer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -108,8 +108,8 @@ typedef struct {
void (*destroy)(isc_timermgr_t **managerp);
isc_result_t (*timercreate)(isc_timermgr_t *manager,
isc_timertype_t type,
- isc_time_t *expires,
- isc_interval_t *interval,
+ const isc_time_t *expires,
+ const isc_interval_t *interval,
isc_task_t *task,
isc_taskaction_t action,
const void *arg,
@@ -120,7 +120,8 @@ typedef struct {
void (*attach)(isc_timer_t *timer, isc_timer_t **timerp);
void (*detach)(isc_timer_t **timerp);
isc_result_t (*reset)(isc_timer_t *timer, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires,
+ const isc_interval_t *interval,
isc_boolean_t purge);
isc_result_t (*touch)(isc_timer_t *timer);
} isc_timermethods_t;
@@ -168,8 +169,8 @@ struct isc_timer {
isc_result_t
isc_timer_create(isc_timermgr_t *manager,
isc_timertype_t type,
- isc_time_t *expires,
- isc_interval_t *interval,
+ const isc_time_t *expires,
+ const isc_interval_t *interval,
isc_task_t *task,
isc_taskaction_t action,
const void *arg,
@@ -232,8 +233,8 @@ isc_timer_create(isc_timermgr_t *manager,
isc_result_t
isc_timer_reset(isc_timer_t *timer,
isc_timertype_t type,
- isc_time_t *expires,
- isc_interval_t *interval,
+ const isc_time_t *expires,
+ const isc_interval_t *interval,
isc_boolean_t purge);
/*%<
* Change the timer's type, expires, and interval values to the given
diff --git a/contrib/bind9/lib/isc/inet_aton.c b/contrib/bind9/lib/isc/inet_aton.c
index 14b4887f4f16..66a108dc4274 100644
--- a/contrib/bind9/lib/isc/inet_aton.c
+++ b/contrib/bind9/lib/isc/inet_aton.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004, 2005, 2007, 2008, 2012 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1996-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -91,7 +91,7 @@ static char rcsid[] = "$Id: inet_aton.c,v 1.23 2008/12/01 23:47:45 tbox Exp $";
*/
int
isc_net_aton(const char *cp, struct in_addr *addr) {
- unsigned long val;
+ isc_uint32_t val;
int base, n;
unsigned char c;
isc_uint8_t parts[4];
diff --git a/contrib/bind9/lib/isc/log.c b/contrib/bind9/lib/isc/log.c
index f1c925cd3fc4..024d97c6a9ff 100644
--- a/contrib/bind9/lib/isc/log.c
+++ b/contrib/bind9/lib/isc/log.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -275,7 +275,8 @@ isc_log_create(isc_mem_t *mctx, isc_log_t **lctxp, isc_logconfig_t **lcfgp) {
lctx = isc_mem_get(mctx, sizeof(*lctx));
if (lctx != NULL) {
- lctx->mctx = mctx;
+ lctx->mctx = NULL;
+ isc_mem_attach(mctx, &lctx->mctx);
lctx->categories = NULL;
lctx->category_count = 0;
lctx->modules = NULL;
@@ -286,7 +287,7 @@ isc_log_create(isc_mem_t *mctx, isc_log_t **lctxp, isc_logconfig_t **lcfgp) {
result = isc_mutex_init(&lctx->lock);
if (result != ISC_R_SUCCESS) {
- isc_mem_put(mctx, lctx, sizeof(*lctx));
+ isc_mem_putanddetach(&mctx, lctx, sizeof(*lctx));
return (result);
}
@@ -493,7 +494,7 @@ isc_log_destroy(isc_log_t **lctxp) {
lctx->mctx = NULL;
lctx->magic = 0;
- isc_mem_put(mctx, lctx, sizeof(*lctx));
+ isc_mem_putanddetach(&mctx, lctx, sizeof(*lctx));
*lctxp = NULL;
}
diff --git a/contrib/bind9/lib/isc/mem.c b/contrib/bind9/lib/isc/mem.c
index 1964b7a07996..20fec46c7cbf 100644
--- a/contrib/bind9/lib/isc/mem.c
+++ b/contrib/bind9/lib/isc/mem.c
@@ -202,6 +202,7 @@ struct isc__mempool {
#if ! ISC_MEM_TRACKLINES
#define ADD_TRACE(a, b, c, d, e)
#define DELETE_TRACE(a, b, c, d, e)
+#define ISC_MEMFUNC_SCOPE
#else
#define ADD_TRACE(a, b, c, d, e) \
do { \
@@ -321,6 +322,7 @@ isc__mem_checkdestroyed(FILE *file);
ISC_MEMFUNC_SCOPE unsigned int
isc__mem_references(isc_mem_t *ctx0);
#endif
+#endif /* ISC_MEM_TRACKLINES */
static struct isc__memmethods {
isc_memmethods_t methods;
@@ -389,6 +391,7 @@ static struct isc__mempoolmethods {
#endif
};
+#if ISC_MEM_TRACKLINES
/*!
* mctx must be locked.
*/
@@ -1478,7 +1481,12 @@ isc__mem_stats(isc_mem_t *ctx0, FILE *out) {
}
while (pool != NULL) {
fprintf(out, "%15s %10lu %10u %10u %10u %10u %10u %10u %s\n",
- pool->name, (unsigned long) pool->size, pool->maxalloc,
+#if ISC_MEMPOOL_NAMES
+ pool->name,
+#else
+ "(not tracked)",
+#endif
+ (unsigned long) pool->size, pool->maxalloc,
pool->allocated, pool->freecount, pool->freemax,
pool->fillcount, pool->gets,
(pool->lock == NULL ? "N" : "Y"));
@@ -2260,16 +2268,16 @@ isc__mem_register() {
#ifdef BIND9
ISC_MEMFUNC_SCOPE void
isc__mem_printactive(isc_mem_t *ctx0, FILE *file) {
+#if ISC_MEM_TRACKLINES
isc__mem_t *ctx = (isc__mem_t *)ctx0;
REQUIRE(VALID_CONTEXT(ctx));
REQUIRE(file != NULL);
-#if !ISC_MEM_TRACKLINES
- UNUSED(ctx);
- UNUSED(file);
-#else
print_active(ctx, file);
+#else
+ UNUSED(ctx0);
+ UNUSED(file);
#endif
}
@@ -2295,6 +2303,9 @@ isc__mem_printallactive(FILE *file) {
ISC_MEMFUNC_SCOPE void
isc__mem_checkdestroyed(FILE *file) {
+#if !ISC_MEM_TRACKLINES
+ UNUSED(file);
+#endif
RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
@@ -2339,25 +2350,27 @@ typedef struct summarystat {
isc_uint64_t contextsize;
} summarystat_t;
-static void
+#define TRY0(a) do { xmlrc = (a); if (xmlrc < 0) goto error; } while(0)
+static int
renderctx(isc__mem_t *ctx, summarystat_t *summary, xmlTextWriterPtr writer) {
+ int xmlrc;
+
REQUIRE(VALID_CONTEXT(ctx));
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "context");
+ MCTXLOCK(ctx, &ctx->lock);
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "context"));
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "id");
- xmlTextWriterWriteFormatString(writer, "%p", ctx);
- xmlTextWriterEndElement(writer); /* id */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "id"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%p", ctx));
+ TRY0(xmlTextWriterEndElement(writer)); /* id */
if (ctx->name[0] != 0) {
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
- xmlTextWriterWriteFormatString(writer, "%s", ctx->name);
- xmlTextWriterEndElement(writer); /* name */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%s", ctx->name));
+ TRY0(xmlTextWriterEndElement(writer)); /* name */
}
- REQUIRE(VALID_CONTEXT(ctx));
- MCTXLOCK(ctx, &ctx->lock);
-
summary->contextsize += sizeof(*ctx) +
(ctx->max_size + 1) * sizeof(struct stats) +
ctx->max_size * sizeof(element *) +
@@ -2369,70 +2382,79 @@ renderctx(isc__mem_t *ctx, summarystat_t *summary, xmlTextWriterPtr writer) {
ctx->debuglistcnt * sizeof(debuglink_t);
}
#endif
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
- xmlTextWriterWriteFormatString(writer, "%d", ctx->references);
- xmlTextWriterEndElement(writer); /* references */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "references"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d", ctx->references));
+ TRY0(xmlTextWriterEndElement(writer)); /* references */
summary->total += ctx->total;
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "total");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- (isc_uint64_t)ctx->total);
- xmlTextWriterEndElement(writer); /* total */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "total"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->total));
+ TRY0(xmlTextWriterEndElement(writer)); /* total */
summary->inuse += ctx->inuse;
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "inuse");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- (isc_uint64_t)ctx->inuse);
- xmlTextWriterEndElement(writer); /* inuse */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "maxinuse");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- (isc_uint64_t)ctx->maxinuse);
- xmlTextWriterEndElement(writer); /* maxinuse */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "blocksize");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "inuse"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->inuse));
+ TRY0(xmlTextWriterEndElement(writer)); /* inuse */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "maxinuse"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->maxinuse));
+ TRY0(xmlTextWriterEndElement(writer)); /* maxinuse */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "blocksize"));
if ((ctx->flags & ISC_MEMFLAG_INTERNAL) != 0) {
summary->blocksize += ctx->basic_table_count *
NUM_BASIC_BLOCKS * ctx->mem_target;
- xmlTextWriterWriteFormatString(writer,
+ TRY0(xmlTextWriterWriteFormatString(writer,
"%" ISC_PRINT_QUADFORMAT "u",
(isc_uint64_t)
ctx->basic_table_count *
NUM_BASIC_BLOCKS *
- ctx->mem_target);
+ ctx->mem_target));
} else
- xmlTextWriterWriteFormatString(writer, "%s", "-");
- xmlTextWriterEndElement(writer); /* blocksize */
+ TRY0(xmlTextWriterWriteFormatString(writer, "%s", "-"));
+ TRY0(xmlTextWriterEndElement(writer)); /* blocksize */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "pools");
- xmlTextWriterWriteFormatString(writer, "%u", ctx->poolcnt);
- xmlTextWriterEndElement(writer); /* pools */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "pools"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%u", ctx->poolcnt));
+ TRY0(xmlTextWriterEndElement(writer)); /* pools */
summary->contextsize += ctx->poolcnt * sizeof(isc_mempool_t);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "hiwater");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- (isc_uint64_t)ctx->hi_water);
- xmlTextWriterEndElement(writer); /* hiwater */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "hiwater"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->hi_water));
+ TRY0(xmlTextWriterEndElement(writer)); /* hiwater */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "lowater");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- (isc_uint64_t)ctx->lo_water);
- xmlTextWriterEndElement(writer); /* lowater */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "lowater"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ (isc_uint64_t)ctx->lo_water));
+ TRY0(xmlTextWriterEndElement(writer)); /* lowater */
+ TRY0(xmlTextWriterEndElement(writer)); /* context */
+
+ error:
MCTXUNLOCK(ctx, &ctx->lock);
- xmlTextWriterEndElement(writer); /* context */
+ return (xmlrc);
}
-void
+int
isc_mem_renderxml(xmlTextWriterPtr writer) {
isc__mem_t *ctx;
summarystat_t summary;
isc_uint64_t lost;
+ int xmlrc;
memset(&summary, 0, sizeof(summary));
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "contexts");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "contexts"));
RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
@@ -2441,40 +2463,51 @@ isc_mem_renderxml(xmlTextWriterPtr writer) {
for (ctx = ISC_LIST_HEAD(contexts);
ctx != NULL;
ctx = ISC_LIST_NEXT(ctx, link)) {
- renderctx(ctx, &summary, writer);
+ xmlrc = renderctx(ctx, &summary, writer);
+ if (xmlrc < 0) {
+ UNLOCK(&lock);
+ goto error;
+ }
}
UNLOCK(&lock);
- xmlTextWriterEndElement(writer); /* contexts */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "summary");
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "TotalUse");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- summary.total);
- xmlTextWriterEndElement(writer); /* TotalUse */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "InUse");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- summary.inuse);
- xmlTextWriterEndElement(writer); /* InUse */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "BlockSize");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- summary.blocksize);
- xmlTextWriterEndElement(writer); /* BlockSize */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "ContextSize");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- summary.contextsize);
- xmlTextWriterEndElement(writer); /* ContextSize */
-
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "Lost");
- xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u",
- lost);
- xmlTextWriterEndElement(writer); /* Lost */
-
- xmlTextWriterEndElement(writer); /* summary */
+ TRY0(xmlTextWriterEndElement(writer)); /* contexts */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "summary"));
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "TotalUse"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ summary.total));
+ TRY0(xmlTextWriterEndElement(writer)); /* TotalUse */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "InUse"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ summary.inuse));
+ TRY0(xmlTextWriterEndElement(writer)); /* InUse */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "BlockSize"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ summary.blocksize));
+ TRY0(xmlTextWriterEndElement(writer)); /* BlockSize */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "ContextSize"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ summary.contextsize));
+ TRY0(xmlTextWriterEndElement(writer)); /* ContextSize */
+
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "Lost"));
+ TRY0(xmlTextWriterWriteFormatString(writer,
+ "%" ISC_PRINT_QUADFORMAT "u",
+ lost));
+ TRY0(xmlTextWriterEndElement(writer)); /* Lost */
+
+ TRY0(xmlTextWriterEndElement(writer)); /* summary */
+ error:
+ return (xmlrc);
}
#endif /* HAVE_LIBXML2 */
diff --git a/contrib/bind9/lib/isc/nothreads/Makefile.in b/contrib/bind9/lib/isc/nothreads/Makefile.in
index 540b2434240c..b8b5f98b6f51 100644
--- a/contrib/bind9/lib/isc/nothreads/Makefile.in
+++ b/contrib/bind9/lib/isc/nothreads/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2004, 2007, 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2009, 2010, 2012, 2013 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000, 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -16,8 +16,8 @@
# $Id: Makefile.in,v 1.12 2010/06/09 23:50:58 tbox Exp $
top_srcdir = @top_srcdir@
-srcdir = @top_srcdir@/lib/isc/nothreads
-VPATH = @top_srcdir@/lib/isc/nothreads
+srcdir = @srcdir@
+VPATH = @srcdir@
CINCLUDES = -I${srcdir}/include \
-I${srcdir}/../unix/include \
diff --git a/contrib/bind9/lib/isc/parseint.c b/contrib/bind9/lib/isc/parseint.c
index 266d44cec5c5..f8ec3892c2c5 100644
--- a/contrib/bind9/lib/isc/parseint.c
+++ b/contrib/bind9/lib/isc/parseint.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -32,6 +32,7 @@
isc_result_t
isc_parse_uint32(isc_uint32_t *uip, const char *string, int base) {
unsigned long n;
+ isc_uint32_t r;
char *e;
if (! isalnum((unsigned char)(string[0])))
return (ISC_R_BADNUMBER);
@@ -39,9 +40,15 @@ isc_parse_uint32(isc_uint32_t *uip, const char *string, int base) {
n = strtoul(string, &e, base);
if (*e != '\0')
return (ISC_R_BADNUMBER);
- if (n == ULONG_MAX && errno == ERANGE)
+ /*
+ * Where long is 64 bits we need to convert to 32 bits then test for
+ * equality. This is a no-op on 32 bit machines and a good compiler
+ * will optimise it away.
+ */
+ r = (isc_uint32_t)n;
+ if ((n == ULONG_MAX && errno == ERANGE) || (n != (unsigned long)r))
return (ISC_R_RANGE);
- *uip = n;
+ *uip = r;
return (ISC_R_SUCCESS);
}
diff --git a/contrib/bind9/lib/isc/pool.c b/contrib/bind9/lib/isc/pool.c
new file mode 100644
index 000000000000..509abcb418d4
--- /dev/null
+++ b/contrib/bind9/lib/isc/pool.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+/*! \file */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <isc/mem.h>
+#include <isc/random.h>
+#include <isc/pool.h>
+#include <isc/util.h>
+
+/***
+ *** Types.
+ ***/
+
+struct isc_pool {
+ isc_mem_t * mctx;
+ unsigned int count;
+ isc_pooldeallocator_t free;
+ isc_poolinitializer_t init;
+ void * initarg;
+ void ** pool;
+};
+
+/***
+ *** Functions.
+ ***/
+
+static isc_result_t
+alloc_pool(isc_mem_t *mctx, unsigned int count, isc_pool_t **poolp) {
+ isc_pool_t *pool;
+
+ pool = isc_mem_get(mctx, sizeof(*pool));
+ if (pool == NULL)
+ return (ISC_R_NOMEMORY);
+ pool->count = count;
+ pool->free = NULL;
+ pool->init = NULL;
+ pool->initarg = NULL;
+ pool->mctx = NULL;
+ isc_mem_attach(mctx, &pool->mctx);
+ pool->pool = isc_mem_get(mctx, count * sizeof(void *));
+ if (pool->pool == NULL) {
+ isc_mem_put(mctx, pool, sizeof(*pool));
+ return (ISC_R_NOMEMORY);
+ }
+ memset(pool->pool, 0, count * sizeof(void *));
+
+ *poolp = pool;
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
+isc_pool_create(isc_mem_t *mctx, unsigned int count,
+ isc_pooldeallocator_t free,
+ isc_poolinitializer_t init, void *initarg,
+ isc_pool_t **poolp)
+{
+ isc_pool_t *pool = NULL;
+ isc_result_t result;
+ unsigned int i;
+
+ INSIST(count > 0);
+
+ /* Allocate the pool structure */
+ result = alloc_pool(mctx, count, &pool);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ pool->free = free;
+ pool->init = init;
+ pool->initarg = initarg;
+
+ /* Populate the pool */
+ for (i = 0; i < count; i++) {
+ result = init(&pool->pool[i], initarg);
+ if (result != ISC_R_SUCCESS) {
+ isc_pool_destroy(&pool);
+ return (result);
+ }
+ }
+
+ *poolp = pool;
+ return (ISC_R_SUCCESS);
+}
+
+void *
+isc_pool_get(isc_pool_t *pool) {
+ isc_uint32_t i;
+ isc_random_get(&i);
+ return (pool->pool[i % pool->count]);
+}
+
+int
+isc_pool_count(isc_pool_t *pool) {
+ REQUIRE(pool != NULL);
+ return (pool->count);
+}
+
+isc_result_t
+isc_pool_expand(isc_pool_t **sourcep, unsigned int count,
+ isc_pool_t **targetp)
+{
+ isc_result_t result;
+ isc_pool_t *pool;
+
+ REQUIRE(sourcep != NULL && *sourcep != NULL);
+ REQUIRE(targetp != NULL && *targetp == NULL);
+
+ pool = *sourcep;
+ if (count > pool->count) {
+ isc_pool_t *newpool = NULL;
+ unsigned int i;
+
+ /* Allocate a new pool structure */
+ result = alloc_pool(pool->mctx, count, &newpool);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ newpool->free = pool->free;
+ newpool->init = pool->init;
+ newpool->initarg = pool->initarg;
+
+ /* Copy over the objects from the old pool */
+ for (i = 0; i < pool->count; i++) {
+ newpool->pool[i] = pool->pool[i];
+ pool->pool[i] = NULL;
+ }
+
+ /* Populate the new entries */
+ for (i = pool->count; i < count; i++) {
+ result = pool->init(&newpool->pool[i], pool->initarg);
+ if (result != ISC_R_SUCCESS) {
+ isc_pool_destroy(&pool);
+ return (result);
+ }
+ }
+
+ isc_pool_destroy(&pool);
+ pool = newpool;
+ }
+
+ *sourcep = NULL;
+ *targetp = pool;
+ return (ISC_R_SUCCESS);
+}
+
+void
+isc_pool_destroy(isc_pool_t **poolp) {
+ unsigned int i;
+ isc_pool_t *pool = *poolp;
+ for (i = 0; i < pool->count; i++) {
+ if (pool->free != NULL && pool->pool[i] != NULL)
+ pool->free(&pool->pool[i]);
+ }
+ isc_mem_put(pool->mctx, pool->pool, pool->count * sizeof(void *));
+ isc_mem_putanddetach(&pool->mctx, pool, sizeof(*pool));
+ *poolp = NULL;
+}
diff --git a/contrib/bind9/lib/isc/pthreads/thread.c b/contrib/bind9/lib/isc/pthreads/thread.c
index 4b5b4919b2b0..1b250fac2801 100644
--- a/contrib/bind9/lib/isc/pthreads/thread.c
+++ b/contrib/bind9/lib/isc/pthreads/thread.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -25,7 +25,7 @@
#include <isc/util.h>
#ifndef THREAD_MINSTACKSIZE
-#define THREAD_MINSTACKSIZE (64U * 1024)
+#define THREAD_MINSTACKSIZE (1024U * 1024)
#endif
isc_result_t
diff --git a/contrib/bind9/lib/isc/radix.c b/contrib/bind9/lib/isc/radix.c
index ac211efb6a87..35088788614e 100644
--- a/contrib/bind9/lib/isc/radix.c
+++ b/contrib/bind9/lib/isc/radix.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007-2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2007-2009, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -34,7 +34,7 @@ _new_prefix(isc_mem_t *mctx, isc_prefix_t **target, int family,
void *dest, int bitlen);
static void
-_deref_prefix(isc_mem_t *mctx, isc_prefix_t *prefix);
+_deref_prefix(isc_prefix_t *prefix);
static isc_result_t
_ref_prefix(isc_mem_t *mctx, isc_prefix_t **target, isc_prefix_t *prefix);
@@ -70,6 +70,8 @@ _new_prefix(isc_mem_t *mctx, isc_prefix_t **target, int family, void *dest,
}
prefix->family = family;
+ prefix->mctx = NULL;
+ isc_mem_attach(mctx, &prefix->mctx);
isc_refcount_init(&prefix->refcount, 1);
@@ -78,7 +80,7 @@ _new_prefix(isc_mem_t *mctx, isc_prefix_t **target, int family, void *dest,
}
static void
-_deref_prefix(isc_mem_t *mctx, isc_prefix_t *prefix) {
+_deref_prefix(isc_prefix_t *prefix) {
int refs;
if (prefix == NULL)
@@ -88,7 +90,8 @@ _deref_prefix(isc_mem_t *mctx, isc_prefix_t *prefix) {
if (refs <= 0) {
isc_refcount_destroy(&prefix->refcount);
- isc_mem_put(mctx, prefix, sizeof(isc_prefix_t));
+ isc_mem_putanddetach(&prefix->mctx, prefix,
+ sizeof(isc_prefix_t));
}
}
@@ -109,7 +112,7 @@ _ref_prefix(isc_mem_t *mctx, isc_prefix_t **target, isc_prefix_t *prefix) {
isc_result_t ret;
ret = _new_prefix(mctx, target, prefix->family,
&prefix->add, prefix->bitlen);
- return ret;
+ return (ret);
}
isc_refcount_increment(&prefix->refcount, NULL);
@@ -146,7 +149,8 @@ isc_radix_create(isc_mem_t *mctx, isc_radix_tree_t **target, int maxbits) {
if (radix == NULL)
return (ISC_R_NOMEMORY);
- radix->mctx = mctx;
+ radix->mctx = NULL;
+ isc_mem_attach(mctx, &radix->mctx);
radix->maxbits = maxbits;
radix->head = NULL;
radix->num_active_node = 0;
@@ -168,7 +172,6 @@ _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
REQUIRE(radix != NULL);
if (radix->head != NULL) {
-
isc_radix_node_t *Xstack[RADIX_MAXBITS+1];
isc_radix_node_t **Xsp = Xstack;
isc_radix_node_t *Xrn = radix->head;
@@ -178,7 +181,7 @@ _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
isc_radix_node_t *r = Xrn->r;
if (Xrn->prefix != NULL) {
- _deref_prefix(radix->mctx, Xrn->prefix);
+ _deref_prefix(Xrn->prefix);
if (func != NULL && (Xrn->data[0] != NULL ||
Xrn->data[1] != NULL))
func(Xrn->data);
@@ -209,11 +212,10 @@ _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
void
-isc_radix_destroy(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func)
-{
+isc_radix_destroy(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
REQUIRE(radix != NULL);
_clear_radix(radix, func);
- isc_mem_put(radix->mctx, radix, sizeof(*radix));
+ isc_mem_putanddetach(&radix->mctx, radix, sizeof(*radix));
}
@@ -221,8 +223,7 @@ isc_radix_destroy(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func)
* func will be called as func(node->prefix, node->data)
*/
void
-isc_radix_process(isc_radix_tree_t *radix, isc_radix_processfunc_t func)
-{
+isc_radix_process(isc_radix_tree_t *radix, isc_radix_processfunc_t func) {
isc_radix_node_t *node;
REQUIRE(func != NULL);
@@ -461,8 +462,8 @@ isc_radix_insert(isc_radix_tree_t *radix, isc_radix_node_t **target,
*target = node;
return (ISC_R_SUCCESS);
} else {
- result =
- _ref_prefix(radix->mctx, &node->prefix, prefix);
+ result = _ref_prefix(radix->mctx,
+ &node->prefix, prefix);
if (result != ISC_R_SUCCESS)
return (result);
}
@@ -623,7 +624,7 @@ isc_radix_remove(isc_radix_tree_t *radix, isc_radix_node_t *node) {
* make sure there is a prefix associated with it!
*/
if (node->prefix != NULL)
- _deref_prefix(radix->mctx, node->prefix);
+ _deref_prefix(node->prefix);
node->prefix = NULL;
node->data[0] = node->data[1] = NULL;
@@ -632,7 +633,7 @@ isc_radix_remove(isc_radix_tree_t *radix, isc_radix_node_t *node) {
if (node->r == NULL && node->l == NULL) {
parent = node->parent;
- _deref_prefix(radix->mctx, node->prefix);
+ _deref_prefix(node->prefix);
isc_mem_put(radix->mctx, node, sizeof(*node));
radix->num_active_node--;
@@ -680,7 +681,7 @@ isc_radix_remove(isc_radix_tree_t *radix, isc_radix_node_t *node) {
parent = node->parent;
child->parent = parent;
- _deref_prefix(radix->mctx, node->prefix);
+ _deref_prefix(node->prefix);
isc_mem_put(radix->mctx, node, sizeof(*node));
radix->num_active_node--;
diff --git a/contrib/bind9/lib/isc/ratelimiter.c b/contrib/bind9/lib/isc/ratelimiter.c
index 07bcc7c7af1c..fc66e9f61efb 100644
--- a/contrib/bind9/lib/isc/ratelimiter.c
+++ b/contrib/bind9/lib/isc/ratelimiter.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -114,7 +114,7 @@ isc_ratelimiter_setinterval(isc_ratelimiter_t *rl, isc_interval_t *interval) {
/*
* If the timer is currently running, change its rate.
*/
- if (rl->state == isc_ratelimiter_ratelimited) {
+ if (rl->state == isc_ratelimiter_ratelimited) {
result = isc_timer_reset(rl->timer, isc_timertype_ticker, NULL,
&rl->interval, ISC_FALSE);
}
@@ -142,13 +142,13 @@ isc_ratelimiter_enqueue(isc_ratelimiter_t *rl, isc_task_t *task,
REQUIRE(ev->ev_sender == NULL);
LOCK(&rl->lock);
- if (rl->state == isc_ratelimiter_ratelimited ||
+ if (rl->state == isc_ratelimiter_ratelimited ||
rl->state == isc_ratelimiter_stalled) {
isc_event_t *ev = *eventp;
ev->ev_sender = task;
- ISC_LIST_APPEND(rl->pending, ev, ev_link);
+ ISC_LIST_APPEND(rl->pending, ev, ev_link);
*eventp = NULL;
- } else if (rl->state == isc_ratelimiter_idle) {
+ } else if (rl->state == isc_ratelimiter_idle) {
result = isc_timer_reset(rl->timer, isc_timertype_ticker, NULL,
&rl->interval, ISC_FALSE);
if (result == ISC_R_SUCCESS) {
@@ -177,7 +177,7 @@ ratelimiter_tick(isc_task_t *task, isc_event_t *event) {
isc_event_free(&event);
pertic = rl->pertic;
- while (pertic != 0) {
+ while (pertic != 0) {
pertic--;
LOCK(&rl->lock);
p = ISC_LIST_HEAD(rl->pending);
@@ -289,8 +289,9 @@ isc_ratelimiter_stall(isc_ratelimiter_t *rl) {
break;
case isc_ratelimiter_ratelimited:
result = isc_timer_reset(rl->timer, isc_timertype_inactive,
- NULL, NULL, ISC_FALSE);
+ NULL, NULL, ISC_FALSE);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ /* FALLTHROUGH */
case isc_ratelimiter_idle:
case isc_ratelimiter_stalled:
rl->state = isc_ratelimiter_stalled;
@@ -316,7 +317,7 @@ isc_ratelimiter_release(isc_ratelimiter_t *rl) {
&rl->interval, ISC_FALSE);
if (result == ISC_R_SUCCESS)
rl->state = isc_ratelimiter_ratelimited;
- } else
+ } else
rl->state = isc_ratelimiter_idle;
break;
case isc_ratelimiter_ratelimited:
diff --git a/contrib/bind9/lib/isc/regex.c b/contrib/bind9/lib/isc/regex.c
new file mode 100644
index 000000000000..279bcdc437fb
--- /dev/null
+++ b/contrib/bind9/lib/isc/regex.c
@@ -0,0 +1,370 @@
+/*
+ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <config.h>
+
+#include <isc/file.h>
+#include <isc/regex.h>
+#include <isc/string.h>
+
+#if VALREGEX_REPORT_REASON
+#define FAIL(x) do { reason = (x); goto error; } while(0)
+#else
+#define FAIL(x) goto error
+#endif
+
+/*
+ * Validate the regular expression 'C' locale.
+ */
+int
+isc_regex_validate(const char *c) {
+ enum {
+ none, parse_bracket, parse_bound,
+ parse_ce, parse_ec, parse_cc
+ } state = none;
+ /* Well known character classes. */
+ const char *cc[] = {
+ ":alnum:", ":digit:", ":punct:", ":alpha:", ":graph:",
+ ":space:", ":blank:", ":lower:", ":upper:", ":cntrl:",
+ ":print:", ":xdigit:"
+ };
+ isc_boolean_t seen_comma = ISC_FALSE;
+ isc_boolean_t seen_high = ISC_FALSE;
+ isc_boolean_t seen_char = ISC_FALSE;
+ isc_boolean_t seen_ec = ISC_FALSE;
+ isc_boolean_t seen_ce = ISC_FALSE;
+ isc_boolean_t have_atom = ISC_FALSE;
+ int group = 0;
+ int range = 0;
+ int sub = 0;
+ isc_boolean_t empty_ok = ISC_FALSE;
+ isc_boolean_t neg = ISC_FALSE;
+ isc_boolean_t was_multiple = ISC_FALSE;
+ unsigned int low = 0;
+ unsigned int high = 0;
+ const char *ccname = NULL;
+ int range_start = 0;
+#if VALREGEX_REPORT_REASON
+ const char *reason = "";
+#endif
+
+ if (c == NULL || *c == 0)
+ FAIL("empty string");
+
+ while (c != NULL && *c != 0) {
+ switch (state) {
+ case none:
+ switch (*c) {
+ case '\\': /* make literal */
+ ++c;
+ switch (*c) {
+ case '1': case '2': case '3':
+ case '4': case '5': case '6':
+ case '7': case '8': case '9':
+ if ((*c - '0') > sub)
+ FAIL("bad back reference");
+ have_atom = ISC_TRUE;
+ was_multiple = ISC_FALSE;
+ break;
+ case 0:
+ FAIL("escaped end-of-string");
+ default:
+ goto literal;
+ }
+ ++c;
+ break;
+ case '[': /* bracket start */
+ ++c;
+ neg = ISC_FALSE;
+ was_multiple = ISC_FALSE;
+ seen_char = ISC_FALSE;
+ state = parse_bracket;
+ break;
+ case '{': /* bound start */
+ switch (c[1]) {
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ case '8': case '9':
+ if (!have_atom)
+ FAIL("no atom");
+ if (was_multiple)
+ FAIL("was multiple");
+ seen_comma = ISC_FALSE;
+ seen_high = ISC_FALSE;
+ low = high = 0;
+ state = parse_bound;
+ break;
+ default:
+ goto literal;
+ }
+ ++c;
+ have_atom = ISC_TRUE;
+ was_multiple = ISC_TRUE;
+ break;
+ case '}':
+ goto literal;
+ case '(': /* group start */
+ have_atom = ISC_FALSE;
+ was_multiple = ISC_FALSE;
+ empty_ok = ISC_TRUE;
+ ++group;
+ ++sub;
+ ++c;
+ break;
+ case ')': /* group end */
+ if (group && !have_atom && !empty_ok)
+ FAIL("empty alternative");
+ have_atom = ISC_TRUE;
+ was_multiple = ISC_FALSE;
+ if (group != 0)
+ --group;
+ ++c;
+ break;
+ case '|': /* alternative seperator */
+ if (!have_atom)
+ FAIL("no atom");
+ have_atom = ISC_FALSE;
+ empty_ok = ISC_FALSE;
+ was_multiple = ISC_FALSE;
+ ++c;
+ break;
+ case '^':
+ case '$':
+ have_atom = ISC_TRUE;
+ was_multiple = ISC_TRUE;
+ ++c;
+ break;
+ case '+':
+ case '*':
+ case '?':
+ if (was_multiple)
+ FAIL("was multiple");
+ if (!have_atom)
+ FAIL("no atom");
+ have_atom = ISC_TRUE;
+ was_multiple = ISC_TRUE;
+ ++c;
+ break;
+ case '.':
+ default:
+ literal:
+ have_atom = ISC_TRUE;
+ was_multiple = ISC_FALSE;
+ ++c;
+ break;
+ }
+ break;
+ case parse_bound:
+ switch (*c) {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ if (!seen_comma) {
+ low = low * 10 + *c - '0';
+ if (low > 255)
+ FAIL("lower bound too big");
+ } else {
+ seen_high = ISC_TRUE;
+ high = high * 10 + *c - '0';
+ if (high > 255)
+ FAIL("upper bound too big");
+ }
+ ++c;
+ break;
+ case ',':
+ if (seen_comma)
+ FAIL("multiple commas");
+ seen_comma = ISC_TRUE;
+ ++c;
+ break;
+ default:
+ case '{':
+ FAIL("non digit/comma");
+ case '}':
+ if (seen_high && low > high)
+ FAIL("bad parse bound");
+ seen_comma = ISC_FALSE;
+ state = none;
+ ++c;
+ break;
+ }
+ break;
+ case parse_bracket:
+ switch (*c) {
+ case '^':
+ if (seen_char || neg) goto inside;
+ neg = ISC_TRUE;
+ ++c;
+ break;
+ case '-':
+ if (range == 2) goto inside;
+ if (!seen_char) goto inside;
+ if (range == 1)
+ FAIL("bad range");
+ range = 2;
+ ++c;
+ break;
+ case '[':
+ ++c;
+ switch (*c) {
+ case '.': /* collating element */
+ if (range) --range;
+ ++c;
+ state = parse_ce;
+ seen_ce = ISC_FALSE;
+ break;
+ case '=': /* equivalence class */
+ if (range == 2)
+ FAIL("equivalence class in range");
+ ++c;
+ state = parse_ec;
+ seen_ec = ISC_FALSE;
+ break;
+ case ':': /* character class */
+ if (range == 2)
+ FAIL("character class in range");
+ ccname = c;
+ ++c;
+ state = parse_cc;
+ break;
+ }
+ seen_char = ISC_TRUE;
+ break;
+ case ']':
+ if (!c[1] && !seen_char)
+ FAIL("unfinished brace");
+ if (!seen_char)
+ goto inside;
+ ++c;
+ range = 0;
+ have_atom = ISC_TRUE;
+ state = none;
+ break;
+ default:
+ inside:
+ seen_char = ISC_TRUE;
+ if (range == 2 && *c < range_start)
+ FAIL("out of order range");
+ if (range != 0)
+ --range;
+ range_start = *c;
+ ++c;
+ break;
+ };
+ break;
+ case parse_ce:
+ switch (*c) {
+ case '.':
+ ++c;
+ switch (*c) {
+ case ']':
+ if (!seen_ce)
+ FAIL("empty ce");
+ ++c;
+ state = parse_bracket;
+ break;
+ default:
+ if (seen_ce)
+ range_start = 256;
+ else
+ range_start = '.';
+ seen_ce = ISC_TRUE;
+ break;
+ }
+ break;
+ default:
+ if (seen_ce)
+ range_start = 256;
+ else
+ range_start = *c;
+ seen_ce = ISC_TRUE;
+ ++c;
+ break;
+ }
+ break;
+ case parse_ec:
+ switch (*c) {
+ case '=':
+ ++c;
+ switch (*c) {
+ case ']':
+ if (!seen_ec)
+ FAIL("no ec");
+ ++c;
+ state = parse_bracket;
+ break;
+ default:
+ seen_ec = ISC_TRUE;
+ break;
+ }
+ break;
+ default:
+ seen_ec = ISC_TRUE;
+ ++c;
+ break;
+ }
+ break;
+ case parse_cc:
+ switch (*c) {
+ case ':':
+ ++c;
+ switch (*c) {
+ case ']': {
+ unsigned int i;
+ isc_boolean_t found = ISC_FALSE;
+ for (i = 0;
+ i < sizeof(cc)/sizeof(*cc);
+ i++)
+ {
+ unsigned int len;
+ len = strlen(cc[i]);
+ if (len !=
+ (unsigned int)(c - ccname))
+ continue;
+ if (strncmp(cc[i], ccname, len))
+ continue;
+ found = ISC_TRUE;
+ }
+ if (!found)
+ FAIL("unknown cc");
+ ++c;
+ state = parse_bracket;
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ default:
+ ++c;
+ break;
+ }
+ break;
+ }
+ }
+ if (group != 0)
+ FAIL("group open");
+ if (state != none)
+ FAIL("incomplete");
+ if (!have_atom)
+ FAIL("no atom");
+ return (sub);
+
+ error:
+#if VALREGEX_REPORT_REASON
+ fprintf(stderr, "%s\n", reason);
+#endif
+ return (-1);
+}
diff --git a/contrib/bind9/lib/isc/sockaddr.c b/contrib/bind9/lib/isc/sockaddr.c
index 7b43b8f31bb8..91a949b64253 100644
--- a/contrib/bind9/lib/isc/sockaddr.c
+++ b/contrib/bind9/lib/isc/sockaddr.c
@@ -219,13 +219,12 @@ isc_sockaddr_hash(const isc_sockaddr_t *sockaddr, isc_boolean_t address_only) {
break;
case AF_INET6:
in6 = &sockaddr->type.sin6.sin6_addr;
+ s = (const unsigned char *)in6;
if (IN6_IS_ADDR_V4MAPPED(in6)) {
- s = (const unsigned char *)&in6[12];
+ s += 12;
length = sizeof(sockaddr->type.sin.sin_addr.s_addr);
- } else {
- s = (const unsigned char *)in6;
+ } else
length = sizeof(sockaddr->type.sin6.sin6_addr);
- }
p = ntohs(sockaddr->type.sin6.sin6_port);
break;
default:
diff --git a/contrib/bind9/lib/isc/socket_api.c b/contrib/bind9/lib/isc/socket_api.c
index e97a93149cc9..1fba3e0ac19a 100644
--- a/contrib/bind9/lib/isc/socket_api.c
+++ b/contrib/bind9/lib/isc/socket_api.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -141,6 +141,18 @@ isc_socket_sendto(isc_socket_t *sock, isc_region_t *region, isc_task_t *task,
}
isc_result_t
+isc_socket_sendto2(isc_socket_t *sock, isc_region_t *region,
+ isc_task_t *task, isc_sockaddr_t *address,
+ struct in6_pktinfo *pktinfo, isc_socketevent_t *event,
+ unsigned int flags)
+{
+ REQUIRE(ISCAPI_SOCKET_VALID(sock));
+
+ return (sock->methods->sendto2(sock, region, task, address,
+ pktinfo, event, flags));
+}
+
+isc_result_t
isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr, isc_task_t *task,
isc_taskaction_t action, const void *arg)
{
@@ -158,6 +170,17 @@ isc_socket_recv(isc_socket_t *sock, isc_region_t *region, unsigned int minimum,
return (sock->methods->recv(sock, region, minimum, task, action, arg));
}
+isc_result_t
+isc_socket_recv2(isc_socket_t *sock, isc_region_t *region,
+ unsigned int minimum, isc_task_t *task,
+ isc_socketevent_t *event, unsigned int flags)
+{
+ REQUIRE(ISCAPI_SOCKET_VALID(sock));
+
+ return (sock->methods->recv2(sock, region, minimum, task,
+ event, flags));
+}
+
void
isc_socket_cancel(isc_socket_t *sock, isc_task_t *task, unsigned int how) {
REQUIRE(ISCAPI_SOCKET_VALID(sock));
@@ -214,3 +237,18 @@ isc_socket_fdwatchpoke(isc_socket_t *sock, int flags)
return(sock->methods->fdwatchpoke(sock, flags));
}
+
+isc_result_t
+isc_socket_dup(isc_socket_t *sock, isc_socket_t **socketp) {
+ REQUIRE(ISCAPI_SOCKET_VALID(sock));
+ REQUIRE(socketp != NULL && *socketp == NULL);
+
+ return(sock->methods->dup(sock, socketp));
+}
+
+int
+isc_socket_getfd(isc_socket_t *sock) {
+ REQUIRE(ISCAPI_SOCKET_VALID(sock));
+
+ return(sock->methods->getfd(sock));
+}
diff --git a/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h b/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h
index fb0cc1726bb1..4b366619a56a 100644
--- a/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h
+++ b/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2005, 2007, 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
diff --git a/contrib/bind9/lib/isc/symtab.c b/contrib/bind9/lib/isc/symtab.c
index d4c1dccf0ad9..1f294fb9c02e 100644
--- a/contrib/bind9/lib/isc/symtab.c
+++ b/contrib/bind9/lib/isc/symtab.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1996-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -71,15 +71,17 @@ isc_symtab_create(isc_mem_t *mctx, unsigned int size,
symtab = (isc_symtab_t *)isc_mem_get(mctx, sizeof(*symtab));
if (symtab == NULL)
return (ISC_R_NOMEMORY);
+
+ symtab->mctx = NULL;
+ isc_mem_attach(mctx, &symtab->mctx);
symtab->table = (eltlist_t *)isc_mem_get(mctx,
size * sizeof(eltlist_t));
if (symtab->table == NULL) {
- isc_mem_put(mctx, symtab, sizeof(*symtab));
+ isc_mem_putanddetach(&symtab->mctx, symtab, sizeof(*symtab));
return (ISC_R_NOMEMORY);
}
for (i = 0; i < size; i++)
INIT_LIST(symtab->table[i]);
- symtab->mctx = mctx;
symtab->size = size;
symtab->count = 0;
symtab->maxload = size * 3 / 4;
@@ -117,7 +119,7 @@ isc_symtab_destroy(isc_symtab_t **symtabp) {
isc_mem_put(symtab->mctx, symtab->table,
symtab->size * sizeof(eltlist_t));
symtab->magic = 0;
- isc_mem_put(symtab->mctx, symtab, sizeof(*symtab));
+ isc_mem_putanddetach(&symtab->mctx, symtab, sizeof(*symtab));
*symtabp = NULL;
}
diff --git a/contrib/bind9/lib/isc/task.c b/contrib/bind9/lib/isc/task.c
index a5f6ef98f6c9..b743271339f9 100644
--- a/contrib/bind9/lib/isc/task.c
+++ b/contrib/bind9/lib/isc/task.c
@@ -64,9 +64,7 @@
#endif /* ISC_PLATFORM_USETHREADS */
#endif /* BIND9 */
-#ifndef USE_WORKER_THREADS
#include "task_p.h"
-#endif /* USE_WORKER_THREADS */
#ifdef ISC_TASK_TRACE
#define XTRACE(m) fprintf(stderr, "task %p thread %lu: %s\n", \
@@ -120,9 +118,11 @@ struct isc__task {
/* Locked by task manager lock. */
LINK(isc__task_t) link;
LINK(isc__task_t) ready_link;
+ LINK(isc__task_t) ready_priority_link;
};
#define TASK_F_SHUTTINGDOWN 0x01
+#define TASK_F_PRIVILEGED 0x02
#define TASK_SHUTTINGDOWN(t) (((t)->flags & TASK_F_SHUTTINGDOWN) \
!= 0)
@@ -145,11 +145,15 @@ struct isc__taskmgr {
unsigned int default_quantum;
LIST(isc__task_t) tasks;
isc__tasklist_t ready_tasks;
+ isc__tasklist_t ready_priority_tasks;
+ isc_taskmgrmode_t mode;
#ifdef ISC_PLATFORM_USETHREADS
isc_condition_t work_available;
isc_condition_t exclusive_granted;
+ isc_condition_t paused;
#endif /* ISC_PLATFORM_USETHREADS */
unsigned int tasks_running;
+ isc_boolean_t pause_requested;
isc_boolean_t exclusive_requested;
isc_boolean_t exiting;
isc__task_t *excl;
@@ -230,6 +234,23 @@ ISC_TASKFUNC_SCOPE isc_result_t
isc__task_beginexclusive(isc_task_t *task);
ISC_TASKFUNC_SCOPE void
isc__task_endexclusive(isc_task_t *task0);
+ISC_TASKFUNC_SCOPE void
+isc__task_setprivilege(isc_task_t *task0, isc_boolean_t priv);
+ISC_TASKFUNC_SCOPE isc_boolean_t
+isc__task_privilege(isc_task_t *task0);
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_setmode(isc_taskmgr_t *manager0, isc_taskmgrmode_t mode);
+ISC_TASKFUNC_SCOPE isc_taskmgrmode_t
+isc__taskmgr_mode(isc_taskmgr_t *manager0);
+
+static inline isc_boolean_t
+empty_readyq(isc__taskmgr_t *manager);
+
+static inline isc__task_t *
+pop_readyq(isc__taskmgr_t *manager);
+
+static inline void
+push_readyq(isc__taskmgr_t *manager, isc__task_t *task);
static struct isc__taskmethods {
isc_taskmethods_t methods;
@@ -254,7 +275,9 @@ static struct isc__taskmethods {
isc__task_purge,
isc__task_purgerange,
isc__task_beginexclusive,
- isc__task_endexclusive
+ isc__task_endexclusive,
+ isc__task_setprivilege,
+ isc__task_privilege
}
#ifndef BIND9
,
@@ -266,6 +289,8 @@ static struct isc__taskmethods {
static isc_taskmgrmethods_t taskmgrmethods = {
isc__taskmgr_destroy,
+ isc__taskmgr_setmode,
+ isc__taskmgr_mode,
isc__task_create,
isc__taskmgr_setexcltask,
isc__taskmgr_excltask
@@ -340,6 +365,7 @@ isc__task_create(isc_taskmgr_t *manager0, unsigned int quantum,
task->tag = NULL;
INIT_LINK(task, link);
INIT_LINK(task, ready_link);
+ INIT_LINK(task, ready_priority_link);
exiting = ISC_FALSE;
LOCK(&manager->lock);
@@ -407,6 +433,7 @@ task_shutdown(isc__task_t *task) {
}
INSIST(task->state == task_state_ready ||
task->state == task_state_running);
+
/*
* Note that we post shutdown events LIFO.
*/
@@ -422,9 +449,17 @@ task_shutdown(isc__task_t *task) {
return (was_idle);
}
+/*
+ * Moves a task onto the appropriate run queue.
+ *
+ * Caller must NOT hold manager lock.
+ */
static inline void
task_ready(isc__task_t *task) {
isc__taskmgr_t *manager = task->manager;
+#ifdef USE_WORKER_THREADS
+ isc_boolean_t has_privilege = isc__task_privilege((isc_task_t *) task);
+#endif /* USE_WORKER_THREADS */
REQUIRE(VALID_MANAGER(manager));
REQUIRE(task->state == task_state_ready);
@@ -432,12 +467,11 @@ task_ready(isc__task_t *task) {
XTRACE("task_ready");
LOCK(&manager->lock);
-
- ENQUEUE(manager->ready_tasks, task, ready_link);
+ push_readyq(manager, task);
#ifdef USE_WORKER_THREADS
- SIGNAL(&manager->work_available);
+ if (manager->mode == isc_taskmgrmode_normal || has_privilege)
+ SIGNAL(&manager->work_available);
#endif /* USE_WORKER_THREADS */
-
UNLOCK(&manager->lock);
}
@@ -875,21 +909,81 @@ isc__task_getcurrenttime(isc_task_t *task0, isc_stdtime_t *t) {
REQUIRE(t != NULL);
LOCK(&task->lock);
-
*t = task->now;
-
UNLOCK(&task->lock);
}
/***
*** Task Manager.
***/
+
+/*
+ * Return ISC_TRUE if the current ready list for the manager, which is
+ * either ready_tasks or the ready_priority_tasks, depending on whether
+ * the manager is currently in normal or privileged execution mode.
+ *
+ * Caller must hold the task manager lock.
+ */
+static inline isc_boolean_t
+empty_readyq(isc__taskmgr_t *manager) {
+ isc__tasklist_t queue;
+
+ if (manager->mode == isc_taskmgrmode_normal)
+ queue = manager->ready_tasks;
+ else
+ queue = manager->ready_priority_tasks;
+
+ return (ISC_TF(EMPTY(queue)));
+}
+
+/*
+ * Dequeue and return a pointer to the first task on the current ready
+ * list for the manager.
+ * If the task is privileged, dequeue it from the other ready list
+ * as well.
+ *
+ * Caller must hold the task manager lock.
+ */
+static inline isc__task_t *
+pop_readyq(isc__taskmgr_t *manager) {
+ isc__task_t *task;
+
+ if (manager->mode == isc_taskmgrmode_normal)
+ task = HEAD(manager->ready_tasks);
+ else
+ task = HEAD(manager->ready_priority_tasks);
+
+ if (task != NULL) {
+ DEQUEUE(manager->ready_tasks, task, ready_link);
+ if (ISC_LINK_LINKED(task, ready_priority_link))
+ DEQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+ }
+
+ return (task);
+}
+
+/*
+ * Push 'task' onto the ready_tasks queue. If 'task' has the privilege
+ * flag set, then also push it onto the ready_priority_tasks queue.
+ *
+ * Caller must hold the task manager lock.
+ */
+static inline void
+push_readyq(isc__taskmgr_t *manager, isc__task_t *task) {
+ ENQUEUE(manager->ready_tasks, task, ready_link);
+ if ((task->flags & TASK_F_PRIVILEGED) != 0)
+ ENQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+}
+
static void
dispatch(isc__taskmgr_t *manager) {
isc__task_t *task;
#ifndef USE_WORKER_THREADS
unsigned int total_dispatch_count = 0;
- isc__tasklist_t ready_tasks;
+ isc__tasklist_t new_ready_tasks;
+ isc__tasklist_t new_priority_tasks;
#endif /* USE_WORKER_THREADS */
REQUIRE(VALID_MANAGER(manager));
@@ -945,9 +1039,11 @@ dispatch(isc__taskmgr_t *manager) {
*/
#ifndef USE_WORKER_THREADS
- ISC_LIST_INIT(ready_tasks);
+ ISC_LIST_INIT(new_ready_tasks);
+ ISC_LIST_INIT(new_priority_tasks);
#endif
LOCK(&manager->lock);
+
while (!FINISHED(manager)) {
#ifdef USE_WORKER_THREADS
/*
@@ -956,10 +1052,12 @@ dispatch(isc__taskmgr_t *manager) {
* the task while only holding the manager lock, and then
* change the task to running state while only holding the
* task lock.
+ *
+ * If a pause has been requested, don't do any work
+ * until it's been released.
*/
- while ((EMPTY(manager->ready_tasks) ||
- manager->exclusive_requested) &&
- !FINISHED(manager))
+ while ((empty_readyq(manager) || manager->pause_requested ||
+ manager->exclusive_requested) && !FINISHED(manager))
{
XTHREADTRACE(isc_msgcat_get(isc_msgcat,
ISC_MSGSET_GENERAL,
@@ -971,13 +1069,13 @@ dispatch(isc__taskmgr_t *manager) {
}
#else /* USE_WORKER_THREADS */
if (total_dispatch_count >= DEFAULT_TASKMGR_QUANTUM ||
- EMPTY(manager->ready_tasks))
+ empty_readyq(manager))
break;
#endif /* USE_WORKER_THREADS */
XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TASK,
ISC_MSG_WORKING, "working"));
- task = HEAD(manager->ready_tasks);
+ task = pop_readyq(manager);
if (task != NULL) {
unsigned int dispatch_count = 0;
isc_boolean_t done = ISC_FALSE;
@@ -992,7 +1090,6 @@ dispatch(isc__taskmgr_t *manager) {
* have a task to do. We must reacquire the manager
* lock before exiting the 'if (task != NULL)' block.
*/
- DEQUEUE(manager->ready_tasks, task, ready_link);
manager->tasks_running++;
UNLOCK(&manager->lock);
@@ -1113,6 +1210,9 @@ dispatch(isc__taskmgr_t *manager) {
if (manager->exclusive_requested &&
manager->tasks_running == 1) {
SIGNAL(&manager->exclusive_granted);
+ } else if (manager->pause_requested &&
+ manager->tasks_running == 0) {
+ SIGNAL(&manager->paused);
}
#endif /* USE_WORKER_THREADS */
if (requeue) {
@@ -1136,17 +1236,39 @@ dispatch(isc__taskmgr_t *manager) {
* might even hurt rather than help.
*/
#ifdef USE_WORKER_THREADS
- ENQUEUE(manager->ready_tasks, task,
- ready_link);
+ push_readyq(manager, task);
#else
- ENQUEUE(ready_tasks, task, ready_link);
+ ENQUEUE(new_ready_tasks, task, ready_link);
+ if ((task->flags & TASK_F_PRIVILEGED) != 0)
+ ENQUEUE(new_priority_tasks, task,
+ ready_priority_link);
#endif
}
}
+
+#ifdef USE_WORKER_THREADS
+ /*
+ * If we are in privileged execution mode and there are no
+ * tasks remaining on the current ready queue, then
+ * we're stuck. Automatically drop privileges at that
+ * point and continue with the regular ready queue.
+ */
+ if (manager->tasks_running == 0 && empty_readyq(manager)) {
+ manager->mode = isc_taskmgrmode_normal;
+ if (!empty_readyq(manager))
+ BROADCAST(&manager->work_available);
+ }
+#endif
}
+
#ifndef USE_WORKER_THREADS
- ISC_LIST_APPENDLIST(manager->ready_tasks, ready_tasks, ready_link);
+ ISC_LIST_APPENDLIST(manager->ready_tasks, new_ready_tasks, ready_link);
+ ISC_LIST_APPENDLIST(manager->ready_priority_tasks, new_priority_tasks,
+ ready_priority_link);
+ if (empty_readyq(manager))
+ manager->mode = isc_taskmgrmode_normal;
#endif
+
UNLOCK(&manager->lock);
}
@@ -1181,6 +1303,7 @@ manager_free(isc__taskmgr_t *manager) {
#ifdef USE_WORKER_THREADS
(void)isc_condition_destroy(&manager->exclusive_granted);
(void)isc_condition_destroy(&manager->work_available);
+ (void)isc_condition_destroy(&manager->paused);
isc_mem_free(manager->mctx, manager->threads);
#endif /* USE_WORKER_THREADS */
DESTROYLOCK(&manager->lock);
@@ -1231,6 +1354,7 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
manager->common.methods = &taskmgrmethods;
manager->common.impmagic = TASK_MANAGER_MAGIC;
manager->common.magic = ISCAPI_TASKMGR_MAGIC;
+ manager->mode = isc_taskmgrmode_normal;
manager->mctx = NULL;
result = isc_mutex_init(&manager->lock);
if (result != ISC_R_SUCCESS)
@@ -1260,14 +1384,24 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
result = ISC_R_UNEXPECTED;
goto cleanup_workavailable;
}
+ if (isc_condition_init(&manager->paused) != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "isc_condition_init() %s",
+ isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
+ ISC_MSG_FAILED, "failed"));
+ result = ISC_R_UNEXPECTED;
+ goto cleanup_exclusivegranted;
+ }
#endif /* USE_WORKER_THREADS */
if (default_quantum == 0)
default_quantum = DEFAULT_DEFAULT_QUANTUM;
manager->default_quantum = default_quantum;
INIT_LIST(manager->tasks);
INIT_LIST(manager->ready_tasks);
+ INIT_LIST(manager->ready_priority_tasks);
manager->tasks_running = 0;
manager->exclusive_requested = ISC_FALSE;
+ manager->pause_requested = ISC_FALSE;
manager->exiting = ISC_FALSE;
manager->excl = NULL;
@@ -1304,6 +1438,8 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
return (ISC_R_SUCCESS);
#ifdef USE_WORKER_THREADS
+ cleanup_exclusivegranted:
+ (void)isc_condition_destroy(&manager->exclusive_granted);
cleanup_workavailable:
(void)isc_condition_destroy(&manager->work_available);
cleanup_threads:
@@ -1375,6 +1511,11 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
manager->exiting = ISC_TRUE;
/*
+ * If privileged mode was on, turn it off.
+ */
+ manager->mode = isc_taskmgrmode_normal;
+
+ /*
* Post shutdown event(s) to every task (if they haven't already been
* posted).
*/
@@ -1383,7 +1524,7 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
task = NEXT(task, link)) {
LOCK(&task->lock);
if (task_shutdown(task))
- ENQUEUE(manager->ready_tasks, task, ready_link);
+ push_readyq(manager, task);
UNLOCK(&task->lock);
}
#ifdef USE_WORKER_THREADS
@@ -1422,10 +1563,30 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
*managerp = NULL;
}
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_setmode(isc_taskmgr_t *manager0, isc_taskmgrmode_t mode) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+
+ LOCK(&manager->lock);
+ manager->mode = mode;
+ UNLOCK(&manager->lock);
+}
+
+ISC_TASKFUNC_SCOPE isc_taskmgrmode_t
+isc__taskmgr_mode(isc_taskmgr_t *manager0) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+ isc_taskmgrmode_t mode;
+ LOCK(&manager->lock);
+ mode = manager->mode;
+ UNLOCK(&manager->lock);
+ return (mode);
+}
+
#ifndef USE_WORKER_THREADS
isc_boolean_t
isc__taskmgr_ready(isc_taskmgr_t *manager0) {
isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+ isc_boolean_t is_ready;
#ifdef USE_SHARED_MANAGER
if (manager == NULL)
@@ -1433,7 +1594,12 @@ isc__taskmgr_ready(isc_taskmgr_t *manager0) {
#endif
if (manager == NULL)
return (ISC_FALSE);
- return (ISC_TF(!ISC_LIST_EMPTY(manager->ready_tasks)));
+
+ LOCK(&manager->lock);
+ is_ready = !empty_readyq(manager);
+ UNLOCK(&manager->lock);
+
+ return (is_ready);
}
isc_result_t
@@ -1452,6 +1618,29 @@ isc__taskmgr_dispatch(isc_taskmgr_t *manager0) {
return (ISC_R_SUCCESS);
}
+#else
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_pause(isc_taskmgr_t *manager0) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+ LOCK(&manager->lock);
+ while (manager->tasks_running > 0) {
+ WAIT(&manager->paused, &manager->lock);
+ }
+ manager->pause_requested = ISC_TRUE;
+ UNLOCK(&manager->lock);
+}
+
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_resume(isc_taskmgr_t *manager0) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+
+ LOCK(&manager->lock);
+ if (manager->pause_requested) {
+ manager->pause_requested = ISC_FALSE;
+ BROADCAST(&manager->work_available);
+ }
+ UNLOCK(&manager->lock);
+}
#endif /* USE_WORKER_THREADS */
ISC_TASKFUNC_SCOPE void
@@ -1522,6 +1711,44 @@ isc__task_endexclusive(isc_task_t *task0) {
#endif
}
+ISC_TASKFUNC_SCOPE void
+isc__task_setprivilege(isc_task_t *task0, isc_boolean_t priv) {
+ isc__task_t *task = (isc__task_t *)task0;
+ isc__taskmgr_t *manager = task->manager;
+ isc_boolean_t oldpriv;
+
+ LOCK(&task->lock);
+ oldpriv = ISC_TF((task->flags & TASK_F_PRIVILEGED) != 0);
+ if (priv)
+ task->flags |= TASK_F_PRIVILEGED;
+ else
+ task->flags &= ~TASK_F_PRIVILEGED;
+ UNLOCK(&task->lock);
+
+ if (priv == oldpriv)
+ return;
+
+ LOCK(&manager->lock);
+ if (priv && ISC_LINK_LINKED(task, ready_link))
+ ENQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+ else if (!priv && ISC_LINK_LINKED(task, ready_priority_link))
+ DEQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+ UNLOCK(&manager->lock);
+}
+
+ISC_TASKFUNC_SCOPE isc_boolean_t
+isc__task_privilege(isc_task_t *task0) {
+ isc__task_t *task = (isc__task_t *)task0;
+ isc_boolean_t priv;
+
+ LOCK(&task->lock);
+ priv = ISC_TF((task->flags & TASK_F_PRIVILEGED) != 0);
+ UNLOCK(&task->lock);
+ return (priv);
+}
+
#ifdef USE_SOCKETIMPREGISTER
isc_result_t
isc__task_register() {
@@ -1539,10 +1766,12 @@ isc_task_exiting(isc_task_t *t) {
#if defined(HAVE_LIBXML2) && defined(BIND9)
-void
+#define TRY0(a) do { xmlrc = (a); if (xmlrc < 0) goto error; } while(0)
+int
isc_taskmgr_renderxml(isc_taskmgr_t *mgr0, xmlTextWriterPtr writer) {
isc__taskmgr_t *mgr = (isc__taskmgr_t *)mgr0;
- isc__task_t *task;
+ isc__task_t *task = NULL;
+ int xmlrc;
LOCK(&mgr->lock);
@@ -1550,72 +1779,82 @@ isc_taskmgr_renderxml(isc_taskmgr_t *mgr0, xmlTextWriterPtr writer) {
* Write out the thread-model, and some details about each depending
* on which type is enabled.
*/
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "thread-model");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "thread-model"));
#ifdef ISC_PLATFORM_USETHREADS
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "type");
- xmlTextWriterWriteString(writer, ISC_XMLCHAR "threaded");
- xmlTextWriterEndElement(writer); /* type */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "type"));
+ TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR "threaded"));
+ TRY0(xmlTextWriterEndElement(writer)); /* type */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "worker-threads");
- xmlTextWriterWriteFormatString(writer, "%d", mgr->workers);
- xmlTextWriterEndElement(writer); /* worker-threads */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "worker-threads"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d", mgr->workers));
+ TRY0(xmlTextWriterEndElement(writer)); /* worker-threads */
#else /* ISC_PLATFORM_USETHREADS */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "type");
- xmlTextWriterWriteString(writer, ISC_XMLCHAR "non-threaded");
- xmlTextWriterEndElement(writer); /* type */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "type"));
+ TRY0(xmlTextWriterWriteString(writer, ISC_XMLCHAR "non-threaded"));
+ TRY0(xmlTextWriterEndElement(writer)); /* type */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
- xmlTextWriterWriteFormatString(writer, "%d", mgr->refs);
- xmlTextWriterEndElement(writer); /* references */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "references"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d", mgr->refs));
+ TRY0(xmlTextWriterEndElement(writer)); /* references */
#endif /* ISC_PLATFORM_USETHREADS */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "default-quantum");
- xmlTextWriterWriteFormatString(writer, "%d", mgr->default_quantum);
- xmlTextWriterEndElement(writer); /* default-quantum */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "default-quantum"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d",
+ mgr->default_quantum));
+ TRY0(xmlTextWriterEndElement(writer)); /* default-quantum */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "tasks-running");
- xmlTextWriterWriteFormatString(writer, "%d", mgr->tasks_running);
- xmlTextWriterEndElement(writer); /* tasks-running */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "tasks-running"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d", mgr->tasks_running));
+ TRY0(xmlTextWriterEndElement(writer)); /* tasks-running */
- xmlTextWriterEndElement(writer); /* thread-model */
+ TRY0(xmlTextWriterEndElement(writer)); /* thread-model */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "tasks");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "tasks"));
task = ISC_LIST_HEAD(mgr->tasks);
while (task != NULL) {
LOCK(&task->lock);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "task");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "task"));
if (task->name[0] != 0) {
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
- xmlTextWriterWriteFormatString(writer, "%s",
- task->name);
- xmlTextWriterEndElement(writer); /* name */
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "name"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%s",
+ task->name));
+ TRY0(xmlTextWriterEndElement(writer)); /* name */
}
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
- xmlTextWriterWriteFormatString(writer, "%d", task->references);
- xmlTextWriterEndElement(writer); /* references */
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "references"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d",
+ task->references));
+ TRY0(xmlTextWriterEndElement(writer)); /* references */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "id");
- xmlTextWriterWriteFormatString(writer, "%p", task);
- xmlTextWriterEndElement(writer); /* id */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "id"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%p", task));
+ TRY0(xmlTextWriterEndElement(writer)); /* id */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "state");
- xmlTextWriterWriteFormatString(writer, "%s",
- statenames[task->state]);
- xmlTextWriterEndElement(writer); /* state */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "state"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%s",
+ statenames[task->state]));
+ TRY0(xmlTextWriterEndElement(writer)); /* state */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "quantum");
- xmlTextWriterWriteFormatString(writer, "%d", task->quantum);
- xmlTextWriterEndElement(writer); /* quantum */
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "quantum"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d",
+ task->quantum));
+ TRY0(xmlTextWriterEndElement(writer)); /* quantum */
- xmlTextWriterEndElement(writer);
+ TRY0(xmlTextWriterEndElement(writer));
UNLOCK(&task->lock);
task = ISC_LIST_NEXT(task, link);
}
- xmlTextWriterEndElement(writer); /* tasks */
+ TRY0(xmlTextWriterEndElement(writer)); /* tasks */
+ error:
+ if (task != NULL)
+ UNLOCK(&task->lock);
UNLOCK(&mgr->lock);
+
+ return (xmlrc);
}
#endif /* HAVE_LIBXML2 && BIND9 */
diff --git a/contrib/bind9/lib/isc/task_api.c b/contrib/bind9/lib/isc/task_api.c
index 06a8d24849ba..f49ab321b2d3 100644
--- a/contrib/bind9/lib/isc/task_api.c
+++ b/contrib/bind9/lib/isc/task_api.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -99,6 +99,20 @@ isc_taskmgr_destroy(isc_taskmgr_t **managerp) {
ENSURE(*managerp == NULL);
}
+void
+isc_taskmgr_setmode(isc_taskmgr_t *manager, isc_taskmgrmode_t mode) {
+ REQUIRE(ISCAPI_TASKMGR_VALID(manager));
+
+ manager->methods->setmode(manager, mode);
+}
+
+isc_taskmgrmode_t
+isc_taskmgr_mode(isc_taskmgr_t *manager) {
+ REQUIRE(ISCAPI_TASKMGR_VALID(manager));
+
+ return (manager->methods->mode(manager));
+}
+
isc_result_t
isc_task_create(isc_taskmgr_t *manager, unsigned int quantum,
isc_task_t **taskp)
@@ -212,6 +226,20 @@ isc_task_endexclusive(isc_task_t *task) {
task->methods->endexclusive(task);
}
+void
+isc_task_setprivilege(isc_task_t *task, isc_boolean_t priv) {
+ REQUIRE(ISCAPI_TASK_VALID(task));
+
+ task->methods->setprivilege(task, priv);
+}
+
+isc_boolean_t
+isc_task_privilege(isc_task_t *task) {
+ REQUIRE(ISCAPI_TASK_VALID(task));
+
+ return (task->methods->privilege(task));
+}
+
/*%
* This is necessary for libisc's internal timer implementation. Other
diff --git a/contrib/bind9/lib/isc/task_p.h b/contrib/bind9/lib/isc/task_p.h
index 85deeae0d0ea..8c1e4c52fa4c 100644
--- a/contrib/bind9/lib/isc/task_p.h
+++ b/contrib/bind9/lib/isc/task_p.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -22,10 +22,18 @@
/*! \file */
+#if defined(BIND9) && defined(ISC_PLATFORM_USETHREADS)
+void
+isc__taskmgr_pause(isc_taskmgr_t *taskmgr);
+
+void
+isc__taskmgr_resume(isc_taskmgr_t *taskmgr);
+#else
isc_boolean_t
isc__taskmgr_ready(isc_taskmgr_t *taskmgr);
isc_result_t
isc__taskmgr_dispatch(isc_taskmgr_t *taskmgr);
+#endif /* !BIND9 || !ISC_PLATFORM_USETHREADS */
#endif /* ISC_TASK_P_H */
diff --git a/contrib/bind9/lib/isc/taskpool.c b/contrib/bind9/lib/isc/taskpool.c
index 936732c0e955..a5ce0e8514df 100644
--- a/contrib/bind9/lib/isc/taskpool.c
+++ b/contrib/bind9/lib/isc/taskpool.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -52,13 +52,15 @@ alloc_pool(isc_taskmgr_t *tmgr, isc_mem_t *mctx, unsigned int ntasks,
pool = isc_mem_get(mctx, sizeof(*pool));
if (pool == NULL)
return (ISC_R_NOMEMORY);
- pool->mctx = mctx;
+
+ pool->mctx = NULL;
+ isc_mem_attach(mctx, &pool->mctx);
pool->ntasks = ntasks;
pool->quantum = quantum;
pool->tmgr = tmgr;
pool->tasks = isc_mem_get(mctx, ntasks * sizeof(isc_task_t *));
if (pool->tasks == NULL) {
- isc_mem_put(mctx, pool, sizeof(*pool));
+ isc_mem_putanddetach(&pool->mctx, pool, sizeof(*pool));
return (ISC_R_NOMEMORY);
}
for (i = 0; i < ntasks; i++)
@@ -163,14 +165,23 @@ isc_taskpool_destroy(isc_taskpool_t **poolp) {
unsigned int i;
isc_taskpool_t *pool = *poolp;
for (i = 0; i < pool->ntasks; i++) {
- if (pool->tasks[i] != NULL) {
+ if (pool->tasks[i] != NULL)
isc_task_detach(&pool->tasks[i]);
- }
}
isc_mem_put(pool->mctx, pool->tasks,
pool->ntasks * sizeof(isc_task_t *));
- isc_mem_put(pool->mctx, pool, sizeof(*pool));
+ isc_mem_putanddetach(&pool->mctx, pool, sizeof(*pool));
*poolp = NULL;
}
+void
+isc_taskpool_setprivilege(isc_taskpool_t *pool, isc_boolean_t priv) {
+ unsigned int i;
+ REQUIRE(pool != NULL);
+
+ for (i = 0; i < pool->ntasks; i++) {
+ if (pool->tasks[i] != NULL)
+ isc_task_setprivilege(pool->tasks[i], priv);
+ }
+}
diff --git a/contrib/bind9/lib/isc/timer.c b/contrib/bind9/lib/isc/timer.c
index 0da251f4c31b..23fcbbef6498 100644
--- a/contrib/bind9/lib/isc/timer.c
+++ b/contrib/bind9/lib/isc/timer.c
@@ -130,12 +130,12 @@ struct isc__timermgr {
ISC_TIMERFUNC_SCOPE isc_result_t
isc__timer_create(isc_timermgr_t *manager, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires, const isc_interval_t *interval,
isc_task_t *task, isc_taskaction_t action, const void *arg,
isc_timer_t **timerp);
ISC_TIMERFUNC_SCOPE isc_result_t
isc__timer_reset(isc_timer_t *timer, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires, const isc_interval_t *interval,
isc_boolean_t purge);
ISC_TIMERFUNC_SCOPE isc_timertype_t
isc__timer_gettype(isc_timer_t *timer);
@@ -392,7 +392,7 @@ destroy(isc__timer_t *timer) {
ISC_TIMERFUNC_SCOPE isc_result_t
isc__timer_create(isc_timermgr_t *manager0, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires, const isc_interval_t *interval,
isc_task_t *task, isc_taskaction_t action, const void *arg,
isc_timer_t **timerp)
{
@@ -514,7 +514,7 @@ isc__timer_create(isc_timermgr_t *manager0, isc_timertype_t type,
ISC_TIMERFUNC_SCOPE isc_result_t
isc__timer_reset(isc_timer_t *timer0, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires, const isc_interval_t *interval,
isc_boolean_t purge)
{
isc__timer_t *timer = (isc__timer_t *)timer0;
@@ -692,7 +692,7 @@ dispatch(isc__timermgr_t *manager, isc_time_t *now) {
while (manager->nscheduled > 0 && !done) {
timer = isc_heap_element(manager->heap, 1);
- INSIST(timer->type != isc_timertype_inactive);
+ INSIST(timer != NULL && timer->type != isc_timertype_inactive);
if (isc_time_compare(now, &timer->due) >= 0) {
if (timer->type == isc_timertype_ticker) {
type = ISC_TIMEREVENT_TICK;
diff --git a/contrib/bind9/lib/isc/timer_api.c b/contrib/bind9/lib/isc/timer_api.c
index 97e62b3f0ec4..39b33e3c7444 100644
--- a/contrib/bind9/lib/isc/timer_api.c
+++ b/contrib/bind9/lib/isc/timer_api.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -96,7 +96,7 @@ isc_timermgr_destroy(isc_timermgr_t **managerp) {
isc_result_t
isc_timer_create(isc_timermgr_t *manager, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires, const isc_interval_t *interval,
isc_task_t *task, isc_taskaction_t action, const void *arg,
isc_timer_t **timerp)
{
@@ -128,7 +128,7 @@ isc_timer_detach(isc_timer_t **timerp) {
isc_result_t
isc_timer_reset(isc_timer_t *timer, isc_timertype_t type,
- isc_time_t *expires, isc_interval_t *interval,
+ const isc_time_t *expires, const isc_interval_t *interval,
isc_boolean_t purge)
{
REQUIRE(ISCAPI_TIMER_VALID(timer));
diff --git a/contrib/bind9/lib/isc/unix/entropy.c b/contrib/bind9/lib/isc/unix/entropy.c
index ab53faf6754e..9c422b55a38b 100644
--- a/contrib/bind9/lib/isc/unix/entropy.c
+++ b/contrib/bind9/lib/isc/unix/entropy.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2008, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -536,8 +536,7 @@ isc_entropy_createfilesource(isc_entropy_t *ent, const char *fname) {
memset(&sname, 0, sizeof(sname));
sname.sun_family = AF_UNIX;
- strncpy(sname.sun_path, fname, sizeof(sname.sun_path));
- sname.sun_path[sizeof(sname.sun_path)-1] = '0';
+ strlcpy(sname.sun_path, fname, sizeof(sname.sun_path));
#ifdef ISC_PLATFORM_HAVESALEN
#if !defined(SUN_LEN)
#define SUN_LEN(su) \
diff --git a/contrib/bind9/lib/isc/unix/file.c b/contrib/bind9/lib/isc/unix/file.c
index 99c02ec7b628..7bb25d725f07 100644
--- a/contrib/bind9/lib/isc/unix/file.c
+++ b/contrib/bind9/lib/isc/unix/file.c
@@ -396,6 +396,24 @@ isc_file_isplainfile(const char *filename) {
return(ISC_R_SUCCESS);
}
+isc_result_t
+isc_file_isdirectory(const char *filename) {
+ /*
+ * This function returns success if filename exists and is a
+ * directory.
+ */
+ struct stat filestat;
+ memset(&filestat,0,sizeof(struct stat));
+
+ if ((stat(filename, &filestat)) == -1)
+ return(isc__errno2result(errno));
+
+ if(! S_ISDIR(filestat.st_mode))
+ return(ISC_R_INVALIDFILE);
+
+ return(ISC_R_SUCCESS);
+}
+
isc_boolean_t
isc_file_isabsolute(const char *filename) {
REQUIRE(filename != NULL);
@@ -542,6 +560,9 @@ isc_file_splitpath(isc_mem_t *mctx, char *path, char **dirname, char **basename)
{
char *dir, *file, *slash;
+ if (path == NULL)
+ return (ISC_R_INVALIDFILE);
+
slash = strrchr(path, '/');
if (slash == path) {
diff --git a/contrib/bind9/lib/isc/unix/include/isc/time.h b/contrib/bind9/lib/isc/unix/include/isc/time.h
index dc1cef9ad3f2..d81d854a24e2 100644
--- a/contrib/bind9/lib/isc/unix/include/isc/time.h
+++ b/contrib/bind9/lib/isc/unix/include/isc/time.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -41,7 +41,7 @@ struct isc_interval {
unsigned int nanoseconds;
};
-extern isc_interval_t *isc_interval_zero;
+extern const isc_interval_t * const isc_interval_zero;
ISC_LANG_BEGINDECLS
@@ -85,7 +85,7 @@ struct isc_time {
unsigned int nanoseconds;
};
-extern isc_time_t *isc_time_epoch;
+extern const isc_time_t * const isc_time_epoch;
void
isc_time_set(isc_time_t *t, unsigned int seconds, unsigned int nanoseconds);
diff --git a/contrib/bind9/lib/isc/unix/net.c b/contrib/bind9/lib/isc/unix/net.c
index ea4a504ebdec..1fedbc438ded 100644
--- a/contrib/bind9/lib/isc/unix/net.c
+++ b/contrib/bind9/lib/isc/unix/net.c
@@ -301,8 +301,6 @@ try_ipv6only(void) {
goto close;
}
- close(s);
-
ipv6only_result = ISC_R_SUCCESS;
close:
@@ -358,7 +356,6 @@ try_ipv6pktinfo(void) {
goto close;
}
- close(s);
ipv6pktinfo_result = ISC_R_SUCCESS;
close:
diff --git a/contrib/bind9/lib/isc/unix/socket.c b/contrib/bind9/lib/isc/unix/socket.c
index 9d64a77ab37b..7bd12aaa31ed 100644
--- a/contrib/bind9/lib/isc/unix/socket.c
+++ b/contrib/bind9/lib/isc/unix/socket.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -334,7 +334,8 @@ struct isc__socket {
listener : 1, /* listener socket */
connected : 1,
connecting : 1, /* connect pending */
- bound : 1; /* bound to local addr */
+ bound : 1, /* bound to local addr */
+ dupped : 1;
#ifdef ISC_NET_RECVOVERFLOW
unsigned char overflow; /* used for MSG_TRUNC fake */
@@ -428,6 +429,10 @@ static isc__socketmgr_t *socketmgr = NULL;
# define MAXSCATTERGATHER_RECV (ISC_SOCKET_MAXSCATTERGATHER)
#endif
+static isc_result_t socket_create(isc_socketmgr_t *manager0, int pf,
+ isc_sockettype_t type,
+ isc_socket_t **socketp,
+ isc_socket_t *dup_socket);
static void send_recvdone_event(isc__socket_t *, isc_socketevent_t **);
static void send_senddone_event(isc__socket_t *, isc_socketevent_t **);
static void free_socket(isc__socket_t **);
@@ -546,6 +551,10 @@ isc__socket_fdwatchcreate(isc_socketmgr_t *manager, int fd, int flags,
isc_task_t *task, isc_socket_t **socketp);
ISC_SOCKETFUNC_SCOPE isc_result_t
isc__socket_fdwatchpoke(isc_socket_t *sock, int flags);
+ISC_SOCKETFUNC_SCOPE isc_result_t
+isc__socket_dup(isc_socket_t *sock, isc_socket_t **socketp);
+ISC_SOCKETFUNC_SCOPE int
+isc__socket_getfd(isc_socket_t *sock);
static struct {
isc_socketmethods_t methods;
@@ -563,13 +572,17 @@ static struct {
isc__socket_detach,
isc__socket_bind,
isc__socket_sendto,
+ isc__socket_sendto2,
isc__socket_connect,
isc__socket_recv,
+ isc__socket_recv2,
isc__socket_cancel,
isc__socket_getsockname,
isc__socket_gettype,
isc__socket_ipv6only,
- isc__socket_fdwatchpoke
+ isc__socket_fdwatchpoke,
+ isc__socket_dup,
+ isc__socket_getfd
}
#ifndef BIND9
,
@@ -613,7 +626,7 @@ enum {
STATID_SENDFAIL = 8,
STATID_RECVFAIL = 9
};
-static const isc_statscounter_t upd4statsindex[] = {
+static const isc_statscounter_t udp4statsindex[] = {
isc_sockstatscounter_udp4open,
isc_sockstatscounter_udp4openfail,
isc_sockstatscounter_udp4close,
@@ -625,7 +638,7 @@ static const isc_statscounter_t upd4statsindex[] = {
isc_sockstatscounter_udp4sendfail,
isc_sockstatscounter_udp4recvfail
};
-static const isc_statscounter_t upd6statsindex[] = {
+static const isc_statscounter_t udp6statsindex[] = {
isc_sockstatscounter_udp6open,
isc_sockstatscounter_udp6openfail,
isc_sockstatscounter_udp6close,
@@ -1192,7 +1205,7 @@ process_cmsg(isc__socket_t *sock, struct msghdr *msg, isc_socketevent_t *dev) {
struct in6_pktinfo *pktinfop;
#endif
#ifdef SO_TIMESTAMP
- struct timeval *timevalp;
+ void *timevalp;
#endif
#endif
@@ -1259,9 +1272,11 @@ process_cmsg(isc__socket_t *sock, struct msghdr *msg, isc_socketevent_t *dev) {
#ifdef SO_TIMESTAMP
if (cmsgp->cmsg_level == SOL_SOCKET
&& cmsgp->cmsg_type == SCM_TIMESTAMP) {
- timevalp = (struct timeval *)CMSG_DATA(cmsgp);
- dev->timestamp.seconds = timevalp->tv_sec;
- dev->timestamp.nanoseconds = timevalp->tv_usec * 1000;
+ struct timeval tv;
+ timevalp = CMSG_DATA(cmsgp);
+ memcpy(&tv, timevalp, sizeof(tv));
+ dev->timestamp.seconds = tv.tv_sec;
+ dev->timestamp.nanoseconds = tv.tv_usec * 1000;
dev->attributes |= ISC_SOCKEVENTATTR_TIMESTAMP;
goto next;
}
@@ -2044,6 +2059,7 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type,
sock->manager = manager;
sock->type = type;
sock->fd = -1;
+ sock->dupped = 0;
sock->statsindex = NULL;
ISC_LINK_INIT(sock, link);
@@ -2052,7 +2068,7 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type,
sock->sendcmsgbuf = NULL;
/*
- * set up cmsg buffers
+ * Set up cmsg buffers.
*/
cmsgbuflen = 0;
#if defined(USE_CMSG) && defined(ISC_PLATFORM_HAVEIN6PKTINFO)
@@ -2094,7 +2110,7 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type,
sock->tag = NULL;
/*
- * set up list of readers and writers to be initially empty
+ * Set up list of readers and writers to be initially empty.
*/
ISC_LIST_INIT(sock->recv_list);
ISC_LIST_INIT(sock->send_list);
@@ -2109,7 +2125,7 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type,
sock->bound = 0;
/*
- * initialize the lock
+ * Initialize the lock.
*/
result = isc_mutex_init(&sock->lock);
if (result != ISC_R_SUCCESS) {
@@ -2119,7 +2135,7 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type,
}
/*
- * Initialize readable and writable events
+ * Initialize readable and writable events.
*/
ISC_EVENT_INIT(&sock->readable_ev, sizeof(intev_t),
ISC_EVENTATTR_NOPURGE, NULL, ISC_SOCKEVENT_INTR,
@@ -2223,13 +2239,40 @@ clear_bsdcompat(void) {
}
#endif
+static void
+use_min_mtu(isc__socket_t *sock) {
+#if !defined(IPV6_USE_MIN_MTU) && !defined(IPV6_MTU)
+ UNUSED(sock);
+#endif
+#ifdef IPV6_USE_MIN_MTU
+ /* use minimum MTU */
+ if (sock->pf == AF_INET6) {
+ int on = 1;
+ (void)setsockopt(sock->fd, IPPROTO_IPV6, IPV6_USE_MIN_MTU,
+ (void *)&on, sizeof(on));
+ }
+#endif
+#if defined(IPV6_MTU)
+ /*
+ * Use minimum MTU on IPv6 sockets.
+ */
+ if (sock->pf == AF_INET6) {
+ int mtu = 1280;
+ (void)setsockopt(sock->fd, IPPROTO_IPV6, IPV6_MTU,
+ &mtu, sizeof(mtu));
+ }
+#endif
+}
+
static isc_result_t
-opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
+opensocket(isc__socketmgr_t *manager, isc__socket_t *sock,
+ isc__socket_t *dup_socket)
+{
isc_result_t result;
char strbuf[ISC_STRERRORSIZE];
const char *err = "socket";
int tries = 0;
-#if defined(USE_CMSG) || defined(SO_BSDCOMPAT)
+#if defined(USE_CMSG) || defined(SO_BSDCOMPAT) || defined(SO_NOSIGPIPE)
int on = 1;
#endif
#if defined(SO_RCVBUF)
@@ -2238,22 +2281,29 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
#endif
again:
- switch (sock->type) {
- case isc_sockettype_udp:
- sock->fd = socket(sock->pf, SOCK_DGRAM, IPPROTO_UDP);
- break;
- case isc_sockettype_tcp:
- sock->fd = socket(sock->pf, SOCK_STREAM, IPPROTO_TCP);
- break;
- case isc_sockettype_unix:
- sock->fd = socket(sock->pf, SOCK_STREAM, 0);
- break;
- case isc_sockettype_fdwatch:
- /*
- * We should not be called for isc_sockettype_fdwatch sockets.
- */
- INSIST(0);
- break;
+ if (dup_socket == NULL) {
+ switch (sock->type) {
+ case isc_sockettype_udp:
+ sock->fd = socket(sock->pf, SOCK_DGRAM, IPPROTO_UDP);
+ break;
+ case isc_sockettype_tcp:
+ sock->fd = socket(sock->pf, SOCK_STREAM, IPPROTO_TCP);
+ break;
+ case isc_sockettype_unix:
+ sock->fd = socket(sock->pf, SOCK_STREAM, 0);
+ break;
+ case isc_sockettype_fdwatch:
+ /*
+ * We should not be called for isc_sockettype_fdwatch
+ * sockets.
+ */
+ INSIST(0);
+ break;
+ }
+ } else {
+ sock->fd = dup(dup_socket->fd);
+ sock->dupped = 1;
+ sock->bound = dup_socket->bound;
}
if (sock->fd == -1 && errno == EINTR && tries++ < 42)
goto again;
@@ -2330,6 +2380,9 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
}
}
+ if (dup_socket != NULL)
+ goto setup_done;
+
result = make_nonblock(sock->fd);
if (result != ISC_R_SUCCESS) {
(void)close(sock->fd);
@@ -2367,6 +2420,11 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
}
#endif
+ /*
+ * Use minimum mtu if possible.
+ */
+ use_min_mtu(sock);
+
#if defined(USE_CMSG) || defined(SO_RCVBUF)
if (sock->type == isc_sockettype_udp) {
@@ -2431,32 +2489,6 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
}
#endif /* IPV6_RECVPKTINFO */
#endif /* ISC_PLATFORM_HAVEIN6PKTINFO */
-#ifdef IPV6_USE_MIN_MTU /* RFC 3542, not too common yet*/
- /* use minimum MTU */
- if (sock->pf == AF_INET6 &&
- setsockopt(sock->fd, IPPROTO_IPV6, IPV6_USE_MIN_MTU,
- (void *)&on, sizeof(on)) < 0) {
- isc__strerror(errno, strbuf, sizeof(strbuf));
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "setsockopt(%d, IPV6_USE_MIN_MTU) "
- "%s: %s", sock->fd,
- isc_msgcat_get(isc_msgcat,
- ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED,
- "failed"),
- strbuf);
- }
-#endif
-#if defined(IPV6_MTU)
- /*
- * Use minimum MTU on IPv6 sockets.
- */
- if (sock->pf == AF_INET6) {
- int mtu = 1280;
- (void)setsockopt(sock->fd, IPPROTO_IPV6, IPV6_MTU,
- &mtu, sizeof(mtu));
- }
-#endif
#if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DONT)
/*
* Turn off Path MTU discovery on IPv6/UDP sockets.
@@ -2515,20 +2547,21 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
}
#endif /* defined(USE_CMSG) || defined(SO_RCVBUF) */
+setup_done:
inc_stats(manager->stats, sock->statsindex[STATID_OPEN]);
return (ISC_R_SUCCESS);
}
-/*%
- * Create a new 'type' socket managed by 'manager'. Events
- * will be posted to 'task' and when dispatched 'action' will be
- * called with 'arg' as the arg value. The new socket is returned
- * in 'socketp'.
+/*
+ * Create a 'type' socket or duplicate an existing socket, managed
+ * by 'manager'. Events will be posted to 'task' and when dispatched
+ * 'action' will be called with 'arg' as the arg value. The new
+ * socket is returned in 'socketp'.
*/
-ISC_SOCKETFUNC_SCOPE isc_result_t
-isc__socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
- isc_socket_t **socketp)
+static isc_result_t
+socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
+ isc_socket_t **socketp, isc_socket_t *dup_socket)
{
isc__socket_t *sock = NULL;
isc__socketmgr_t *manager = (isc__socketmgr_t *)manager0;
@@ -2546,7 +2579,7 @@ isc__socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
switch (sock->type) {
case isc_sockettype_udp:
sock->statsindex =
- (pf == AF_INET) ? upd4statsindex : upd6statsindex;
+ (pf == AF_INET) ? udp4statsindex : udp6statsindex;
break;
case isc_sockettype_tcp:
sock->statsindex =
@@ -2560,7 +2593,8 @@ isc__socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
}
sock->pf = pf;
- result = opensocket(manager, sock);
+
+ result = opensocket(manager, sock, (isc__socket_t *)dup_socket);
if (result != ISC_R_SUCCESS) {
inc_stats(manager->stats, sock->statsindex[STATID_OPENFAIL]);
free_socket(&sock);
@@ -2595,11 +2629,40 @@ isc__socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
UNLOCK(&manager->lock);
socket_log(sock, NULL, CREATION, isc_msgcat, ISC_MSGSET_SOCKET,
- ISC_MSG_CREATED, "created");
+ ISC_MSG_CREATED, dup_socket != NULL ? "dupped" : "created");
return (ISC_R_SUCCESS);
}
+/*%
+ * Create a new 'type' socket managed by 'manager'. Events
+ * will be posted to 'task' and when dispatched 'action' will be
+ * called with 'arg' as the arg value. The new socket is returned
+ * in 'socketp'.
+ */
+ISC_SOCKETFUNC_SCOPE isc_result_t
+isc__socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
+ isc_socket_t **socketp)
+{
+ return (socket_create(manager0, pf, type, socketp, NULL));
+}
+
+/*%
+ * Duplicate an existing socket. The new socket is returned
+ * in 'socketp'.
+ */
+ISC_SOCKETFUNC_SCOPE isc_result_t
+isc__socket_dup(isc_socket_t *sock0, isc_socket_t **socketp) {
+ isc__socket_t *sock = (isc__socket_t *)sock0;
+
+ REQUIRE(VALID_SOCKET(sock));
+ REQUIRE(socketp != NULL && *socketp == NULL);
+
+ return (socket_create((isc_socketmgr_t *) sock->manager,
+ sock->pf, sock->type, socketp,
+ sock0));
+}
+
#ifdef BIND9
ISC_SOCKETFUNC_SCOPE isc_result_t
isc__socket_open(isc_socket_t *sock0) {
@@ -2618,7 +2681,7 @@ isc__socket_open(isc_socket_t *sock0) {
*/
REQUIRE(sock->fd == -1);
- result = opensocket(sock->manager, sock);
+ result = opensocket(sock->manager, sock, NULL);
if (result != ISC_R_SUCCESS)
sock->fd = -1;
@@ -2798,6 +2861,7 @@ isc__socket_close(isc_socket_t *sock0) {
int fd;
isc__socketmgr_t *manager;
+ fflush(stdout);
REQUIRE(VALID_SOCKET(sock));
LOCK(&sock->lock);
@@ -2818,6 +2882,7 @@ isc__socket_close(isc_socket_t *sock0) {
manager = sock->manager;
fd = sock->fd;
sock->fd = -1;
+ sock->dupped = 0;
memset(sock->name, 0, sizeof(sock->name));
sock->tag = NULL;
sock->listener = 0;
@@ -3209,23 +3274,27 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
if (fd != -1) {
int lockid = FDLOCK_ID(fd);
- LOCK(&manager->fdlock[lockid]);
- manager->fds[fd] = NEWCONNSOCK(dev);
- manager->fdstate[fd] = MANAGED;
- UNLOCK(&manager->fdlock[lockid]);
-
- LOCK(&manager->lock);
- ISC_LIST_APPEND(manager->socklist, NEWCONNSOCK(dev), link);
-
NEWCONNSOCK(dev)->fd = fd;
NEWCONNSOCK(dev)->bound = 1;
NEWCONNSOCK(dev)->connected = 1;
/*
+ * Use minimum mtu if possible.
+ */
+ use_min_mtu(NEWCONNSOCK(dev));
+
+ /*
* Save away the remote address
*/
dev->address = NEWCONNSOCK(dev)->peer_address;
+ LOCK(&manager->fdlock[lockid]);
+ manager->fds[fd] = NEWCONNSOCK(dev);
+ manager->fdstate[fd] = MANAGED;
+ UNLOCK(&manager->fdlock[lockid]);
+
+ LOCK(&manager->lock);
+
#ifdef USE_SELECT
if (manager->maxfd < fd)
manager->maxfd = fd;
@@ -3236,6 +3305,8 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
"accepted connection, new socket %p",
dev->newsocket);
+ ISC_LIST_APPEND(manager->socklist, NEWCONNSOCK(dev), link);
+
UNLOCK(&manager->lock);
inc_stats(manager->stats, sock->statsindex[STATID_ACCEPT]);
@@ -4979,11 +5050,13 @@ isc__socket_bind(isc_socket_t *sock0, isc_sockaddr_t *sockaddr,
LOCK(&sock->lock);
INSIST(!sock->bound);
+ INSIST(!sock->dupped);
if (sock->pf != sockaddr->type.sa.sa_family) {
UNLOCK(&sock->lock);
return (ISC_R_FAMILYMISMATCH);
}
+
/*
* Only set SO_REUSEADDR when we want a specific port.
*/
@@ -5668,6 +5741,7 @@ isc__socket_ipv6only(isc_socket_t *sock0, isc_boolean_t yes) {
#endif
REQUIRE(VALID_SOCKET(sock));
+ INSIST(!sock->dupped);
#ifdef IPV6_V6ONLY
if (sock->pf == AF_INET6) {
@@ -5834,6 +5908,13 @@ isc__socket_register() {
}
#endif
+ISC_SOCKETFUNC_SCOPE int
+isc__socket_getfd(isc_socket_t *socket0) {
+ isc__socket_t *socket = (isc__socket_t *)socket0;
+
+ return ((short) socket->fd);
+}
+
#if defined(HAVE_LIBXML2) && defined(BIND9)
static const char *
@@ -5851,94 +5932,112 @@ _socktype(isc_sockettype_t type)
return ("not-initialized");
}
-ISC_SOCKETFUNC_SCOPE void
+#define TRY0(a) do { xmlrc = (a); if (xmlrc < 0) goto error; } while(0)
+ISC_SOCKETFUNC_SCOPE int
isc_socketmgr_renderxml(isc_socketmgr_t *mgr0, xmlTextWriterPtr writer) {
isc__socketmgr_t *mgr = (isc__socketmgr_t *)mgr0;
- isc__socket_t *sock;
+ isc__socket_t *sock = NULL;
char peerbuf[ISC_SOCKADDR_FORMATSIZE];
isc_sockaddr_t addr;
ISC_SOCKADDR_LEN_T len;
+ int xmlrc;
LOCK(&mgr->lock);
#ifdef USE_SHARED_MANAGER
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
- xmlTextWriterWriteFormatString(writer, "%d", mgr->refs);
- xmlTextWriterEndElement(writer);
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "references"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d", mgr->refs));
+ TRY0(xmlTextWriterEndElement(writer));
#endif /* USE_SHARED_MANAGER */
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "sockets");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "sockets"));
sock = ISC_LIST_HEAD(mgr->socklist);
while (sock != NULL) {
LOCK(&sock->lock);
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "socket");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "socket"));
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "id");
- xmlTextWriterWriteFormatString(writer, "%p", sock);
- xmlTextWriterEndElement(writer);
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "id"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%p", sock));
+ TRY0(xmlTextWriterEndElement(writer));
if (sock->name[0] != 0) {
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "name");
- xmlTextWriterWriteFormatString(writer, "%s",
- sock->name);
- xmlTextWriterEndElement(writer); /* name */
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "name"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%s",
+ sock->name));
+ TRY0(xmlTextWriterEndElement(writer)); /* name */
}
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "references");
- xmlTextWriterWriteFormatString(writer, "%d", sock->references);
- xmlTextWriterEndElement(writer);
+ TRY0(xmlTextWriterStartElement(writer,
+ ISC_XMLCHAR "references"));
+ TRY0(xmlTextWriterWriteFormatString(writer, "%d",
+ sock->references));
+ TRY0(xmlTextWriterEndElement(writer));
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "type",
- ISC_XMLCHAR _socktype(sock->type));
+ TRY0(xmlTextWriterWriteElement(writer, ISC_XMLCHAR "type",
+ ISC_XMLCHAR _socktype(sock->type)));
if (sock->connected) {
isc_sockaddr_format(&sock->peer_address, peerbuf,
sizeof(peerbuf));
- xmlTextWriterWriteElement(writer,
+ TRY0(xmlTextWriterWriteElement(writer,
ISC_XMLCHAR "peer-address",
- ISC_XMLCHAR peerbuf);
+ ISC_XMLCHAR peerbuf));
}
len = sizeof(addr);
if (getsockname(sock->fd, &addr.type.sa, (void *)&len) == 0) {
isc_sockaddr_format(&addr, peerbuf, sizeof(peerbuf));
- xmlTextWriterWriteElement(writer,
+ TRY0(xmlTextWriterWriteElement(writer,
ISC_XMLCHAR "local-address",
- ISC_XMLCHAR peerbuf);
+ ISC_XMLCHAR peerbuf));
}
- xmlTextWriterStartElement(writer, ISC_XMLCHAR "states");
+ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "states"));
if (sock->pending_recv)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "pending-receive");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "pending-receive"));
if (sock->pending_send)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "pending-send");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "pending-send"));
if (sock->pending_accept)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "pending_accept");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "pending_accept"));
if (sock->listener)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "listener");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "listener"));
if (sock->connected)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "connected");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "connected"));
if (sock->connecting)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "connecting");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "connecting"));
if (sock->bound)
- xmlTextWriterWriteElement(writer, ISC_XMLCHAR "state",
- ISC_XMLCHAR "bound");
+ TRY0(xmlTextWriterWriteElement(writer,
+ ISC_XMLCHAR "state",
+ ISC_XMLCHAR "bound"));
- xmlTextWriterEndElement(writer); /* states */
+ TRY0(xmlTextWriterEndElement(writer)); /* states */
- xmlTextWriterEndElement(writer); /* socket */
+ TRY0(xmlTextWriterEndElement(writer)); /* socket */
UNLOCK(&sock->lock);
sock = ISC_LIST_NEXT(sock, link);
}
- xmlTextWriterEndElement(writer); /* sockets */
+ TRY0(xmlTextWriterEndElement(writer)); /* sockets */
+
+ error:
+ if (sock != NULL)
+ UNLOCK(&sock->lock);
UNLOCK(&mgr->lock);
+
+ return (xmlrc);
}
#endif /* HAVE_LIBXML2 */
diff --git a/contrib/bind9/lib/isc/unix/time.c b/contrib/bind9/lib/isc/unix/time.c
index ac23ae092804..e820afb1eaa0 100644
--- a/contrib/bind9/lib/isc/unix/time.c
+++ b/contrib/bind9/lib/isc/unix/time.c
@@ -54,8 +54,8 @@
*** Intervals
***/
-static isc_interval_t zero_interval = { 0, 0 };
-isc_interval_t *isc_interval_zero = &zero_interval;
+static const isc_interval_t zero_interval = { 0, 0 };
+const isc_interval_t * const isc_interval_zero = &zero_interval;
#if ISC_FIX_TV_USEC
static inline void
@@ -110,8 +110,8 @@ isc_interval_iszero(const isc_interval_t *i) {
*** Absolute Times
***/
-static isc_time_t epoch = { 0, 0 };
-isc_time_t *isc_time_epoch = &epoch;
+static const isc_time_t epoch = { 0, 0 };
+const isc_time_t * const isc_time_epoch = &epoch;
void
isc_time_set(isc_time_t *t, unsigned int seconds, unsigned int nanoseconds) {
diff --git a/contrib/bind9/lib/isccc/api b/contrib/bind9/lib/isccc/api
index ba19dd9150e0..47724c51e39f 100644
--- a/contrib/bind9/lib/isccc/api
+++ b/contrib/bind9/lib/isccc/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 80
-LIBREVISION = 2
+# 9.9-sub: 130-139
+LIBINTERFACE = 90
+LIBREVISION = 3
LIBAGE = 0
diff --git a/contrib/bind9/lib/isccc/cc.c b/contrib/bind9/lib/isccc/cc.c
index 1ab9479855ee..07f8157b0aa6 100644
--- a/contrib/bind9/lib/isccc/cc.c
+++ b/contrib/bind9/lib/isccc/cc.c
@@ -561,8 +561,10 @@ isccc_cc_createack(isccc_sexpr_t *message, isc_boolean_t ok,
return (result);
_ctrl = isccc_alist_lookup(ack, "_ctrl");
- if (_ctrl == NULL)
- return (ISC_R_FAILURE);
+ if (_ctrl == NULL) {
+ result = ISC_R_FAILURE;
+ goto bad;
+ }
if (isccc_cc_definestring(ack, "_ack", (ok) ? "1" : "0") == NULL) {
result = ISC_R_NOMEMORY;
goto bad;
@@ -608,7 +610,7 @@ isc_result_t
isccc_cc_createresponse(isccc_sexpr_t *message, isccc_time_t now,
isccc_time_t expires, isccc_sexpr_t **alistp)
{
- char *_frm, *_to, *type;
+ char *_frm, *_to, *type = NULL;
isc_uint32_t serial;
isccc_sexpr_t *alist, *_ctrl, *_data;
isc_result_t result;
@@ -617,8 +619,7 @@ isccc_cc_createresponse(isccc_sexpr_t *message, isccc_time_t now,
_ctrl = isccc_alist_lookup(message, "_ctrl");
_data = isccc_alist_lookup(message, "_data");
- if (_ctrl == NULL ||
- _data == NULL ||
+ if (_ctrl == NULL || _data == NULL ||
isccc_cc_lookupuint32(_ctrl, "_ser", &serial) != ISC_R_SUCCESS ||
isccc_cc_lookupstring(_data, "type", &type) != ISC_R_SUCCESS)
return (ISC_R_FAILURE);
@@ -637,21 +638,33 @@ isccc_cc_createresponse(isccc_sexpr_t *message, isccc_time_t now,
&alist);
if (result != ISC_R_SUCCESS)
return (result);
+
_ctrl = isccc_alist_lookup(alist, "_ctrl");
- if (_ctrl == NULL)
- return (ISC_R_FAILURE);
+ if (_ctrl == NULL) {
+ result = ISC_R_FAILURE;
+ goto bad;
+ }
+
_data = isccc_alist_lookup(alist, "_data");
- if (_data == NULL)
- return (ISC_R_FAILURE);
+ if (_data == NULL) {
+ result = ISC_R_FAILURE;
+ goto bad;
+ }
+
if (isccc_cc_definestring(_ctrl, "_rpl", "1") == NULL ||
- isccc_cc_definestring(_data, "type", type) == NULL) {
- isccc_sexpr_free(&alist);
- return (ISC_R_NOMEMORY);
+ isccc_cc_definestring(_data, "type", type) == NULL)
+ {
+ result = ISC_R_NOMEMORY;
+ goto bad;
}
*alistp = alist;
return (ISC_R_SUCCESS);
+
+ bad:
+ isccc_sexpr_free(&alist);
+ return (result);
}
isccc_sexpr_t *
@@ -687,6 +700,8 @@ isccc_cc_lookupstring(isccc_sexpr_t *alist, const char *key, char **strp)
{
isccc_sexpr_t *kv, *v;
+ REQUIRE(strp == NULL || *strp == NULL);
+
kv = isccc_alist_assq(alist, key);
if (kv != NULL) {
v = ISCCC_SEXPR_CDR(kv);
@@ -785,7 +800,7 @@ isccc_cc_checkdup(isccc_symtab_t *symtab, isccc_sexpr_t *message,
{
const char *_frm;
const char *_to;
- char *_ser, *_tim, *tmp;
+ char *_ser = NULL, *_tim = NULL, *tmp;
isc_result_t result;
char *key;
size_t len;
@@ -797,13 +812,19 @@ isccc_cc_checkdup(isccc_symtab_t *symtab, isccc_sexpr_t *message,
isccc_cc_lookupstring(_ctrl, "_ser", &_ser) != ISC_R_SUCCESS ||
isccc_cc_lookupstring(_ctrl, "_tim", &_tim) != ISC_R_SUCCESS)
return (ISC_R_FAILURE);
+
+ INSIST(_ser != NULL);
+ INSIST(_tim != NULL);
+
/*
* _frm and _to are optional.
*/
+ tmp = NULL;
if (isccc_cc_lookupstring(_ctrl, "_frm", &tmp) != ISC_R_SUCCESS)
_frm = "";
else
_frm = tmp;
+ tmp = NULL;
if (isccc_cc_lookupstring(_ctrl, "_to", &tmp) != ISC_R_SUCCESS)
_to = "";
else
diff --git a/contrib/bind9/lib/isccfg/Makefile.in b/contrib/bind9/lib/isccfg/Makefile.in
index bc42880b6a24..19ec61edd9e3 100644
--- a/contrib/bind9/lib/isccfg/Makefile.in
+++ b/contrib/bind9/lib/isccfg/Makefile.in
@@ -68,7 +68,8 @@ libisccfg.la: ${OBJS}
${LIBTOOL_MODE_LINK} \
${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libisccfg.la -rpath ${libdir} \
-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
- ${OBJS} ${DNSLIBS} ${ISCCCLIBS} ${ISCLIBS} ${LIBS}
+ ${OBJS} ${DNSLIBS} ${ISCCCLIBS} ${ISCLIBS} @DNS_CRYPTO_LIBS@ \
+ ${LIBS}
timestamp: libisccfg.@A@
touch timestamp
diff --git a/contrib/bind9/lib/isccfg/aclconf.c b/contrib/bind9/lib/isccfg/aclconf.c
index 469989afcebb..af5659909e10 100644
--- a/contrib/bind9/lib/isccfg/aclconf.c
+++ b/contrib/bind9/lib/isccfg/aclconf.c
@@ -192,7 +192,7 @@ convert_keyname(const cfg_obj_t *keyobj, isc_log_t *lctx, isc_mem_t *mctx,
const char *txtname = cfg_obj_asstring(keyobj);
keylen = strlen(txtname);
- isc_buffer_init(&buf, txtname, keylen);
+ isc_buffer_constinit(&buf, txtname, keylen);
isc_buffer_add(&buf, keylen);
dns_fixedname_init(&fixname);
result = dns_name_fromtext(dns_fixedname_name(&fixname), &buf,
diff --git a/contrib/bind9/lib/isccfg/api b/contrib/bind9/lib/isccfg/api
index cde1e2feaaae..864bdc90941c 100644
--- a/contrib/bind9/lib/isccfg/api
+++ b/contrib/bind9/lib/isccfg/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 82
-LIBREVISION = 3
+# 9.9-sub: 130-139
+LIBINTERFACE = 90
+LIBREVISION = 6
LIBAGE = 0
diff --git a/contrib/bind9/lib/isccfg/include/isccfg/cfg.h b/contrib/bind9/lib/isccfg/include/isccfg/cfg.h
index f46776834465..b21a3d86babc 100644
--- a/contrib/bind9/lib/isccfg/include/isccfg/cfg.h
+++ b/contrib/bind9/lib/isccfg/include/isccfg/cfg.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2010, 2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -411,6 +411,10 @@ cfg_obj_destroy(cfg_parser_t *pctx, cfg_obj_t **obj);
/*%<
* Delete a reference to a configuration object; destroy the object if
* there are no more references.
+ *
+ * Require:
+ * \li '*obj' is a valid cfg_obj_t.
+ * \li 'pctx' is a valid cfg_parser_t.
*/
void
diff --git a/contrib/bind9/lib/isccfg/namedconf.c b/contrib/bind9/lib/isccfg/namedconf.c
index 4d09f112f453..431af746338b 100644
--- a/contrib/bind9/lib/isccfg/namedconf.c
+++ b/contrib/bind9/lib/isccfg/namedconf.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2002, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -54,6 +54,9 @@ static isc_result_t
parse_enum_or_other(cfg_parser_t *pctx, const cfg_type_t *enumtype,
const cfg_type_t *othertype, cfg_obj_t **ret);
+static void
+doc_enum_or_other(cfg_printer_t *pctx, const cfg_type_t *type);
+
static isc_result_t
parse_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret);
@@ -228,9 +231,8 @@ static cfg_type_t cfg_type_namesockaddrkeylist = {
};
/*%
- * A list of socket addresses with an optional default port,
- * as used in the also-notify option. E.g.,
- * "port 1234 { 10.0.0.1; 1::2 port 69; }"
+ * A list of socket addresses with an optional default port, as used
+ * in the lwresd 'listen-on' option. E.g., "{ 10.0.0.1; 1::2 port 69; }"
*/
static cfg_tuplefielddef_t portiplist_fields[] = {
{ "port", &cfg_type_optional_port, 0 },
@@ -238,8 +240,8 @@ static cfg_tuplefielddef_t portiplist_fields[] = {
{ NULL, NULL, 0 }
};
static cfg_type_t cfg_type_portiplist = {
- "portiplist", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
- portiplist_fields
+ "portiplist", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple,
+ &cfg_rep_tuple, portiplist_fields
};
/*%
@@ -526,6 +528,12 @@ static cfg_type_t cfg_type_checkmode = {
&cfg_rep_string, &checkmode_enums
};
+static const char *warn_enums[] = { "warn", "ignore", NULL };
+static cfg_type_t cfg_type_warn = {
+ "warn", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
+ &cfg_rep_string, &warn_enums
+};
+
static cfg_tuplefielddef_t checknames_fields[] = {
{ "type", &cfg_type_checktype, 0 },
{ "mode", &cfg_type_checkmode, 0 },
@@ -548,6 +556,35 @@ static cfg_type_t cfg_type_autodnssec = {
&cfg_rep_string, &autodnssec_enums
};
+static const char *dnssecupdatemode_enums[] = { "maintain", "no-resign", NULL };
+static cfg_type_t cfg_type_dnssecupdatemode = {
+ "dnssecupdatemode", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
+ &cfg_rep_string, &dnssecupdatemode_enums
+};
+
+static const char *updatemethods_enums[] = { "increment", "unixtime", NULL };
+static cfg_type_t cfg_type_updatemethod = {
+ "updatemethod", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
+ &cfg_rep_string, &updatemethods_enums
+};
+
+/*
+ * zone-statistics: full, terse, or none.
+ *
+ * for backward compatibility, we also support boolean values.
+ * yes represents "full", no represents "terse". in the future we
+ * may change no to mean "none".
+ */
+static const char *zonestat_enums[] = { "full", "terse", "none", NULL };
+static isc_result_t
+parse_zonestat(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
+ return (parse_enum_or_other(pctx, type, &cfg_type_boolean, ret));
+}
+static cfg_type_t cfg_type_zonestat = {
+ "zonestat", parse_zonestat, cfg_print_ustring, doc_enum_or_other,
+ &cfg_rep_string, zonestat_enums
+};
+
static cfg_type_t cfg_type_rrsetorder = {
"rrsetorder", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list,
&cfg_rep_list, &cfg_type_rrsetorderingelement
@@ -593,7 +630,7 @@ static cfg_type_t cfg_type_forwardtype = {
static const char *zonetype_enums[] = {
"master", "slave", "stub", "static-stub", "hint", "forward",
- "delegation-only", NULL };
+ "delegation-only", "redirect", NULL };
static cfg_type_t cfg_type_zonetype = {
"zonetype", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
&cfg_rep_string, &zonetype_enums
@@ -906,6 +943,7 @@ options_clauses[] = {
{ "listen-on-v6", &cfg_type_listenon, CFG_CLAUSEFLAG_MULTI },
{ "managed-keys-directory", &cfg_type_qstring, 0 },
{ "match-mapped-addresses", &cfg_type_boolean, 0 },
+ { "max-rsa-exponent-size", &cfg_type_uint32, 0 },
{ "memstatistics-file", &cfg_type_qstring, 0 },
{ "memstatistics", &cfg_type_boolean, 0 },
{ "multiple-cnames", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE },
@@ -1018,10 +1056,9 @@ static cfg_type_t cfg_type_masterformat = {
* response-policy {
* zone <string> [ policy (given|disabled|passthru|
* nxdomain|nodata|cname <domain> ) ]
- * [ recursive-only yes|no ]
- * [ max-policy-ttl number ] ;
- * } [ recursive-only yes|no ] [ break-dnssec yes|no ]
- * [ max-policy-ttl number ] ;
+ * [ recursive-only yes|no ] [ max-policy-ttl number ] ;
+ * } [ recursive-only yes|no ] [ max-policy-ttl number ] ;
+ * [ break-dnssec yes|no ] [ min-ns-dots number ] ;
*/
static void
@@ -1223,6 +1260,7 @@ static cfg_tuplefielddef_t rpz_fields[] = {
{ "recursive-only", &cfg_type_boolean, 0 },
{ "break-dnssec", &cfg_type_boolean, 0 },
{ "max-policy-ttl", &cfg_type_uint32, 0 },
+ { "min-ns-dots", &cfg_type_uint32, 0 },
{ NULL, NULL, 0 }
};
static cfg_type_t cfg_type_rpz = {
@@ -1452,7 +1490,7 @@ zone_clauses[] = {
{ "allow-transfer", &cfg_type_bracketed_aml, 0 },
{ "allow-update", &cfg_type_bracketed_aml, 0 },
{ "allow-update-forwarding", &cfg_type_bracketed_aml, 0 },
- { "also-notify", &cfg_type_portiplist, 0 },
+ { "also-notify", &cfg_type_namesockaddrkeylist, 0 },
{ "alt-transfer-source", &cfg_type_sockaddr4wild, 0 },
{ "alt-transfer-source-v6", &cfg_type_sockaddr6wild, 0 },
{ "auto-dnssec", &cfg_type_autodnssec, 0 },
@@ -1461,11 +1499,14 @@ zone_clauses[] = {
{ "check-mx", &cfg_type_checkmode, 0 },
{ "check-mx-cname", &cfg_type_checkmode, 0 },
{ "check-sibling", &cfg_type_boolean, 0 },
+ { "check-spf", &cfg_type_warn, 0 },
{ "check-srv-cname", &cfg_type_checkmode, 0 },
{ "check-wildcard", &cfg_type_boolean, 0 },
{ "dialup", &cfg_type_dialuptype, 0 },
{ "dnssec-dnskey-kskonly", &cfg_type_boolean, 0 },
+ { "dnssec-loadkeys-interval", &cfg_type_uint32, 0 },
{ "dnssec-secure-to-insecure", &cfg_type_boolean, 0 },
+ { "dnssec-update-mode", &cfg_type_dnssecupdatemode, 0 },
{ "forward", &cfg_type_forwardtype, 0 },
{ "forwarders", &cfg_type_portiplist, 0 },
{ "key-directory", &cfg_type_qstring, 0 },
@@ -1488,17 +1529,20 @@ zone_clauses[] = {
{ "notify-source-v6", &cfg_type_sockaddr6wild, 0 },
{ "notify-to-soa", &cfg_type_boolean, 0 },
{ "nsec3-test-zone", &cfg_type_boolean, CFG_CLAUSEFLAG_TESTONLY },
+ { "serial-update-method", &cfg_type_updatemethod, 0 },
+ { "request-ixfr", &cfg_type_boolean, 0 },
{ "sig-signing-nodes", &cfg_type_uint32, 0 },
{ "sig-signing-signatures", &cfg_type_uint32, 0 },
{ "sig-signing-type", &cfg_type_uint32, 0 },
{ "sig-validity-interval", &cfg_type_validityinterval, 0 },
+ { "inline-signing", &cfg_type_boolean, 0 },
{ "transfer-source", &cfg_type_sockaddr4wild, 0 },
{ "transfer-source-v6", &cfg_type_sockaddr6wild, 0 },
{ "try-tcp-refresh", &cfg_type_boolean, 0 },
{ "update-check-ksk", &cfg_type_boolean, 0 },
{ "use-alt-transfer-source", &cfg_type_boolean, 0 },
{ "zero-no-soa-ttl", &cfg_type_boolean, 0 },
- { "zone-statistics", &cfg_type_boolean, 0 },
+ { "zone-statistics", &cfg_type_zonestat, 0 },
{ NULL, NULL, 0 }
};
diff --git a/contrib/bind9/lib/isccfg/parser.c b/contrib/bind9/lib/isccfg/parser.c
index ef20184f3975..de0fa31ee228 100644
--- a/contrib/bind9/lib/isccfg/parser.c
+++ b/contrib/bind9/lib/isccfg/parser.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2013 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -387,13 +387,15 @@ cfg_parser_create(isc_mem_t *mctx, isc_log_t *lctx, cfg_parser_t **ret) {
if (pctx == NULL)
return (ISC_R_NOMEMORY);
+ pctx->mctx = NULL;
+ isc_mem_attach(mctx, &pctx->mctx);
+
result = isc_refcount_init(&pctx->references, 1);
if (result != ISC_R_SUCCESS) {
- isc_mem_put(mctx, pctx, sizeof(*pctx));
+ isc_mem_putanddetach(&pctx->mctx, pctx, sizeof(*pctx));
return (result);
}
- pctx->mctx = mctx;
pctx->lctx = lctx;
pctx->lexer = NULL;
pctx->seen_eof = ISC_FALSE;
@@ -434,7 +436,7 @@ cfg_parser_create(isc_mem_t *mctx, isc_log_t *lctx, cfg_parser_t **ret) {
isc_lex_destroy(&pctx->lexer);
CLEANUP_OBJ(pctx->open_files);
CLEANUP_OBJ(pctx->closed_files);
- isc_mem_put(mctx, pctx, sizeof(*pctx));
+ isc_mem_putanddetach(&pctx->mctx, pctx, sizeof(*pctx));
return (result);
}
@@ -555,7 +557,7 @@ cfg_parser_destroy(cfg_parser_t **pctxp) {
*/
CLEANUP_OBJ(pctx->open_files);
CLEANUP_OBJ(pctx->closed_files);
- isc_mem_put(pctx->mctx, pctx, sizeof(*pctx));
+ isc_mem_putanddetach(&pctx->mctx, pctx, sizeof(*pctx));
}
*pctxp = NULL;
}
@@ -2426,9 +2428,14 @@ cfg_obj_istype(const cfg_obj_t *obj, const cfg_type_t *type) {
*/
void
cfg_obj_destroy(cfg_parser_t *pctx, cfg_obj_t **objp) {
- cfg_obj_t *obj = *objp;
+ cfg_obj_t *obj;
unsigned int refs;
+ REQUIRE(objp != NULL && *objp != NULL);
+ REQUIRE(pctx != NULL);
+
+ obj = *objp;
+
isc_refcount_decrement(&obj->references, &refs);
if (refs == 0) {
obj->type->rep->free(pctx, obj);
diff --git a/contrib/bind9/lib/lwres/api b/contrib/bind9/lib/lwres/api
index 1e51baab5d46..95bd2046233e 100644
--- a/contrib/bind9/lib/lwres/api
+++ b/contrib/bind9/lib/lwres/api
@@ -1,8 +1,9 @@
# LIBINTERFACE ranges
# 9.6: 50-59, 110-119
# 9.7: 60-79
-# 9.8: 80-89
+# 9.8: 80-89, 120-129
# 9.9: 90-109
-LIBINTERFACE = 80
-LIBREVISION = 3
+# 9.9-sub: 130-139
+LIBINTERFACE = 90
+LIBREVISION = 4
LIBAGE = 0
diff --git a/contrib/bind9/lib/lwres/context.c b/contrib/bind9/lib/lwres/context.c
index 64bdaa107dd4..047707ffde46 100644
--- a/contrib/bind9/lib/lwres/context.c
+++ b/contrib/bind9/lib/lwres/context.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -377,6 +377,7 @@ lwres_context_send(lwres_context_t *ctx,
lwresult = context_connect(ctx);
if (lwresult != LWRES_R_SUCCESS)
return (lwresult);
+ INSIST(ctx->sock >= 0);
}
ret = sendto(ctx->sock, sendbase, sendlen, 0, NULL, 0);
diff --git a/contrib/bind9/lib/lwres/getaddrinfo.c b/contrib/bind9/lib/lwres/getaddrinfo.c
index 811a2fee5ef7..7d5f2fb04c47 100644
--- a/contrib/bind9/lib/lwres/getaddrinfo.c
+++ b/contrib/bind9/lib/lwres/getaddrinfo.c
@@ -573,10 +573,8 @@ add_ipv4(const char *hostname, int flags, struct addrinfo **aip,
(void) lwres_conf_parse(lwrctx, lwres_resolv_conf);
if (hostname == NULL && (flags & AI_PASSIVE) == 0) {
ai = ai_clone(*aip, AF_INET);
- if (ai == NULL) {
- lwres_freeaddrinfo(*aip);
+ if (ai == NULL)
SETERROR(EAI_MEMORY);
- }
*aip = ai;
ai->ai_socktype = socktype;
@@ -594,10 +592,8 @@ add_ipv4(const char *hostname, int flags, struct addrinfo **aip,
addr = LWRES_LIST_HEAD(by->addrs);
while (addr != NULL) {
ai = ai_clone(*aip, AF_INET);
- if (ai == NULL) {
- lwres_freeaddrinfo(*aip);
+ if (ai == NULL)
SETERROR(EAI_MEMORY);
- }
*aip = ai;
ai->ai_socktype = socktype;
SIN(ai->ai_addr)->sin_port = port;
@@ -641,10 +637,8 @@ add_ipv6(const char *hostname, int flags, struct addrinfo **aip,
if (hostname == NULL && (flags & AI_PASSIVE) == 0) {
ai = ai_clone(*aip, AF_INET6);
- if (ai == NULL) {
- lwres_freeaddrinfo(*aip);
+ if (ai == NULL)
SETERROR(EAI_MEMORY);
- }
*aip = ai;
ai->ai_socktype = socktype;
@@ -662,10 +656,8 @@ add_ipv6(const char *hostname, int flags, struct addrinfo **aip,
addr = LWRES_LIST_HEAD(by->addrs);
while (addr != NULL) {
ai = ai_clone(*aip, AF_INET6);
- if (ai == NULL) {
- lwres_freeaddrinfo(*aip);
+ if (ai == NULL)
SETERROR(EAI_MEMORY);
- }
*aip = ai;
ai->ai_socktype = socktype;
SIN6(ai->ai_addr)->sin6_port = port;
diff --git a/contrib/bind9/lib/lwres/getipnode.c b/contrib/bind9/lib/lwres/getipnode.c
index 3bd82177b1e6..300376ef139b 100644
--- a/contrib/bind9/lib/lwres/getipnode.c
+++ b/contrib/bind9/lib/lwres/getipnode.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -466,6 +466,9 @@ lwres_freehostent(struct hostent *he) {
int names = 1;
int addresses = 1;
+ if (he == NULL)
+ return;
+
free(he->h_name);
cpp = he->h_addr_list;
@@ -950,8 +953,9 @@ copyandmerge(struct hostent *he1, struct hostent *he2, int af, int *error_num)
* Copy aliases.
*/
npp = he->h_aliases;
- cpp = (he1 != NULL) ? he1->h_aliases : he2->h_aliases;
- while (*cpp != NULL) {
+ cpp = (he1 != NULL) ? he1->h_aliases
+ : ((he2 != NULL) ? he2->h_aliases : NULL);
+ while (cpp != NULL && *cpp != NULL) {
len = strlen (*cpp) + 1;
*npp = malloc(len);
if (*npp == NULL)
@@ -1115,6 +1119,8 @@ hostfromname(lwres_gabnresponse_t *name, int af) {
* Copy aliases.
*/
he->h_aliases = malloc(sizeof(char *) * (name->naliases + 1));
+ if (he->h_aliases == NULL)
+ goto cleanup;
for (i = 0; i < name->naliases; i++) {
he->h_aliases[i] = strdup(name->aliases[i]);
if (he->h_aliases[i] == NULL)
@@ -1126,6 +1132,8 @@ hostfromname(lwres_gabnresponse_t *name, int af) {
* Copy addresses.
*/
he->h_addr_list = malloc(sizeof(char *) * (name->naddrs + 1));
+ if (he->h_addr_list == NULL)
+ goto cleanup;
addr = LWRES_LIST_HEAD(name->addrs);
i = 0;
while (addr != NULL) {
diff --git a/contrib/bind9/lib/lwres/getnameinfo.c b/contrib/bind9/lib/lwres/getnameinfo.c
index 92a34a1522e4..08ebf93782ff 100644
--- a/contrib/bind9/lib/lwres/getnameinfo.c
+++ b/contrib/bind9/lib/lwres/getnameinfo.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004, 2005, 2007, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004, 2005, 2007, 2011-2013 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -161,7 +161,7 @@ int
lwres_getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
size_t hostlen, char *serv, size_t servlen, int flags)
{
- struct afd *afd;
+ struct afd *afd = NULL;
struct servent *sp;
unsigned short port;
#ifdef LWRES_PLATFORM_HAVESALEN
diff --git a/contrib/bind9/lib/lwres/getrrset.c b/contrib/bind9/lib/lwres/getrrset.c
index d8b6cc3fd931..16af741d2e43 100644
--- a/contrib/bind9/lib/lwres/getrrset.c
+++ b/contrib/bind9/lib/lwres/getrrset.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -21,12 +21,12 @@
/**
* DESCRIPTION
- *
+ *
* lwres_getrrsetbyname() gets a set of resource records associated with
* a hostname, class, and type. hostname is a pointer a to
* null-terminated string. The flags field is currently unused and must
* be zero.
- *
+ *
* After a successful call to lwres_getrrsetbyname(), *res is a pointer
* to an #rrsetinfo structure, containing a list of one or more #rdatainfo
* structures containing resource records and potentially another list of
@@ -37,7 +37,7 @@
* in uncompressed DNS wire format. Properties of the rdataset are
* represented in the #rri_flags bitfield. If the #RRSET_VALIDATED bit is
* set, the data has been DNSSEC validated and the signatures verified.
- *
+ *
* All of the information returned by lwres_getrrsetbyname() is
* dynamically allocated: the rrsetinfo and rdatainfo structures, and the
* canonical host name strings pointed to by the rrsetinfostructure.
@@ -45,15 +45,15 @@
* successful call to lwres_getrrsetbyname() is released by
* lwres_freerrset(). rrset is a pointer to a struct rrset created by a
* call to lwres_getrrsetbyname().
- *
+ *
* The following structures are used:
- *
+ *
* \code
* struct rdatainfo {
* unsigned int rdi_length; // length of data
* unsigned char *rdi_data; // record data
* };
- *
+ *
* struct rrsetinfo {
* unsigned int rri_flags; // RRSET_VALIDATED...
* unsigned int rri_rdclass; // class number
@@ -66,23 +66,23 @@
* struct rdatainfo *rri_sigs; // individual signatures
* };
* \endcode
- *
+ *
* \section getrrset_return Return Values
- *
+ *
* lwres_getrrsetbyname() returns zero on success, and one of the
* following error codes if an error occurred:
- *
+ *
* \li #ERRSET_NONAME: the name does not exist
- *
+ *
* \li #ERRSET_NODATA:
* the name exists, but does not have data of the desired type
- *
+ *
* \li #ERRSET_NOMEMORY:
* memory could not be allocated
- *
+ *
* \li #ERRSET_INVAL:
* a parameter is invalid
- *
+ *
* \li #ERRSET_FAIL:
* other failure
*/
@@ -179,7 +179,7 @@ lwres_getrrsetbyname(const char *hostname, unsigned int rdclass,
lwflags = 0;
lwresult = lwres_getrdatabyname(lwrctx, hostname,
- (lwres_uint16_t)rdclass,
+ (lwres_uint16_t)rdclass,
(lwres_uint16_t)rdtype,
lwflags, &response);
if (lwresult != LWRES_R_SUCCESS) {
@@ -271,18 +271,22 @@ lwres_getrrsetbyname(const char *hostname, unsigned int rdclass,
void
lwres_freerrset(struct rrsetinfo *rrset) {
unsigned int i;
- for (i = 0; i < rrset->rri_nrdatas; i++) {
- if (rrset->rri_rdatas[i].rdi_data == NULL)
- break;
- free(rrset->rri_rdatas[i].rdi_data);
+ if (rrset->rri_rdatas != NULL) {
+ for (i = 0; i < rrset->rri_nrdatas; i++) {
+ if (rrset->rri_rdatas[i].rdi_data == NULL)
+ break;
+ free(rrset->rri_rdatas[i].rdi_data);
+ }
+ free(rrset->rri_rdatas);
}
- free(rrset->rri_rdatas);
- for (i = 0; i < rrset->rri_nsigs; i++) {
- if (rrset->rri_sigs[i].rdi_data == NULL)
- break;
- free(rrset->rri_sigs[i].rdi_data);
+ if (rrset->rri_sigs != NULL) {
+ for (i = 0; i < rrset->rri_nsigs; i++) {
+ if (rrset->rri_sigs[i].rdi_data == NULL)
+ break;
+ free(rrset->rri_sigs[i].rdi_data);
+ }
+ free(rrset->rri_sigs);
}
- free(rrset->rri_sigs);
free(rrset->rri_name);
free(rrset);
}
diff --git a/contrib/bind9/lib/lwres/lwinetaton.c b/contrib/bind9/lib/lwres/lwinetaton.c
index e40c28f7ac31..5a0d85a365d6 100644
--- a/contrib/bind9/lib/lwres/lwinetaton.c
+++ b/contrib/bind9/lib/lwres/lwinetaton.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1996-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -95,7 +95,7 @@ static char rcsid[] = "$Id: lwinetaton.c,v 1.16 2007/06/19 23:47:22 tbox Exp $";
*/
int
lwres_net_aton(const char *cp, struct in_addr *addr) {
- unsigned long val;
+ lwres_uint32_t val;
int base, n;
unsigned char c;
lwres_uint8_t parts[4];
@@ -120,7 +120,7 @@ lwres_net_aton(const char *cp, struct in_addr *addr) {
c = *++cp;
if (c == 'x' || c == 'X') {
base = 16;
- c = *++cp;
+ c = *++cp;
} else {
base = 8;
digit = 1;
diff --git a/contrib/bind9/lib/lwres/man/lwres_config.3 b/contrib/bind9/lib/lwres/man/lwres_config.3
index a0919d95f25b..42f0e695f7b3 100644
--- a/contrib/bind9/lib/lwres/man/lwres_config.3
+++ b/contrib/bind9/lib/lwres/man/lwres_config.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -100,7 +100,7 @@ unless an error occurred when converting the network addresses to a numeric host
.PP
\fI/etc/resolv.conf\fR
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_config.docbook b/contrib/bind9/lib/lwres/man/lwres_config.docbook
index 71475706e96f..5736ef3b6490 100644
--- a/contrib/bind9/lib/lwres/man/lwres_config.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_config.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_config.docbook,v 1.9 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_config.html b/contrib/bind9/lib/lwres/man/lwres_config.html
index ccc9db14dfa8..ed10069c355a 100644
--- a/contrib/bind9/lib/lwres/man/lwres_config.html
+++ b/contrib/bind9/lib/lwres/man/lwres_config.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -90,7 +90,7 @@ lwres_conf_t *
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543445"></a><h2>DESCRIPTION</h2>
+<a name="id2543442"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_conf_init()</code>
creates an empty
<span class="type">lwres_conf_t</span>
@@ -123,7 +123,7 @@ lwres_conf_t *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543512"></a><h2>RETURN VALUES</h2>
+<a name="id2543509"></a><h2>RETURN VALUES</h2>
<p><code class="function">lwres_conf_parse()</code>
returns <span class="errorcode">LWRES_R_SUCCESS</span>
if it successfully read and parsed
@@ -142,13 +142,13 @@ lwres_conf_t *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543549"></a><h2>SEE ALSO</h2>
+<a name="id2543546"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">stdio</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">resolver</span>(5)</span>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543575"></a><h2>FILES</h2>
+<a name="id2543572"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
</div>
diff --git a/contrib/bind9/lib/lwres/man/lwres_context.3 b/contrib/bind9/lib/lwres/man/lwres_context.3
index c888c70696d3..5764809fbd50 100644
--- a/contrib/bind9/lib/lwres/man/lwres_context.3
+++ b/contrib/bind9/lib/lwres/man/lwres_context.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -164,7 +164,7 @@ times out waiting for a response.
\fBmalloc\fR(3),
\fBfree\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001, 2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_context.docbook b/contrib/bind9/lib/lwres/man/lwres_context.docbook
index d5092ac7cf69..ad0392e4e51e 100644
--- a/contrib/bind9/lib/lwres/man/lwres_context.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_context.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_context.docbook,v 1.11 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_context.html b/contrib/bind9/lib/lwres/man/lwres_context.html
index 70efa240c80c..e13539d9f924 100644
--- a/contrib/bind9/lib/lwres/man/lwres_context.html
+++ b/contrib/bind9/lib/lwres/man/lwres_context.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -172,7 +172,7 @@ void *
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543536"></a><h2>DESCRIPTION</h2>
+<a name="id2543532"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_context_create()</code>
creates a <span class="type">lwres_context_t</span> structure for use in
lightweight resolver operations. It holds a socket and other
@@ -258,7 +258,7 @@ void *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543723"></a><h2>RETURN VALUES</h2>
+<a name="id2543720"></a><h2>RETURN VALUES</h2>
<p><code class="function">lwres_context_create()</code>
returns <span class="errorcode">LWRES_R_NOMEMORY</span> if memory for
the <span class="type">struct lwres_context</span> could not be allocated,
@@ -283,7 +283,7 @@ void *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543773"></a><h2>SEE ALSO</h2>
+<a name="id2543770"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres_conf_init</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">malloc</span>(3)</span>,
diff --git a/contrib/bind9/lib/lwres/man/lwres_gabn.3 b/contrib/bind9/lib/lwres/man/lwres_gabn.3
index 0cb5ac56f81e..ea746903d4e7 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gabn.3
+++ b/contrib/bind9/lib/lwres/man/lwres_gabn.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -189,7 +189,7 @@ indicate that the packet is not a response to an earlier query.
.PP
\fBlwres_packet\fR(3)
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_gabn.docbook b/contrib/bind9/lib/lwres/man/lwres_gabn.docbook
index 6063c15beb27..d0b5c190c318 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gabn.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_gabn.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_gabn.docbook,v 1.10 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_gabn.html b/contrib/bind9/lib/lwres/man/lwres_gabn.html
index 30c9dda251e9..270620d3d661 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gabn.html
+++ b/contrib/bind9/lib/lwres/man/lwres_gabn.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -22,7 +22,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en">
-<a name="id2476275"></a><div class="titlepage"></div>
+<a name="id2476274"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2>Name</h2>
<p>lwres_gabnrequest_render, lwres_gabnresponse_render, lwres_gabnrequest_parse, lwres_gabnresponse_parse, lwres_gabnresponse_free, lwres_gabnrequest_free &#8212; lightweight resolver getaddrbyname message handling</p>
@@ -178,7 +178,7 @@ void
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543526"></a><h2>DESCRIPTION</h2>
+<a name="id2543524"></a><h2>DESCRIPTION</h2>
<p>
These are low-level routines for creating and parsing
lightweight resolver name-to-address lookup request and
@@ -278,7 +278,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543671"></a><h2>RETURN VALUES</h2>
+<a name="id2543669"></a><h2>RETURN VALUES</h2>
<p>
The getaddrbyname opcode functions
<code class="function">lwres_gabnrequest_render()</code>,
@@ -316,7 +316,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543737"></a><h2>SEE ALSO</h2>
+<a name="id2543735"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres_packet</span>(3)</span>
</p>
</div>
diff --git a/contrib/bind9/lib/lwres/man/lwres_gai_strerror.3 b/contrib/bind9/lib/lwres/man/lwres_gai_strerror.3
index 99d3cd221d84..fa3f494dd6f3 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gai_strerror.3
+++ b/contrib/bind9/lib/lwres/man/lwres_gai_strerror.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -123,7 +123,7 @@ used by
\fBgetaddrinfo\fR(3),
\fBRFC2133\fR().
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_gai_strerror.docbook b/contrib/bind9/lib/lwres/man/lwres_gai_strerror.docbook
index de6c04193501..c33fee5ea6cf 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gai_strerror.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_gai_strerror.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_gai_strerror.docbook,v 1.10 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_gai_strerror.html b/contrib/bind9/lib/lwres/man/lwres_gai_strerror.html
index e8d4935c303c..f2faacecfb6a 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gai_strerror.html
+++ b/contrib/bind9/lib/lwres/man/lwres_gai_strerror.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -42,7 +42,7 @@ char *
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543365"></a><h2>DESCRIPTION</h2>
+<a name="id2543362"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_gai_strerror()</code>
returns an error message corresponding to an error code returned by
<code class="function">getaddrinfo()</code>.
@@ -110,7 +110,7 @@ char *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543580"></a><h2>SEE ALSO</h2>
+<a name="id2543577"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">strerror</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">lwres_getaddrinfo</span>(3)</span>,
diff --git a/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.3 b/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.3
index 96acaaea4623..a80904b8abba 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.3
+++ b/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -240,7 +240,7 @@ returns
\fBsendmsg\fR(2),
\fBsocket\fR(2).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001, 2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.docbook b/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.docbook
index cedb6eaa9cd9..a328764dbbe9 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_getaddrinfo.docbook,v 1.13 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.html b/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.html
index 57025c0c232e..270236742964 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.html
+++ b/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -89,7 +89,7 @@ struct addrinfo {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543416"></a><h2>DESCRIPTION</h2>
+<a name="id2543413"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_getaddrinfo()</code>
is used to get a list of IP addresses and port numbers for host
<em class="parameter"><code>hostname</code></em> and service
@@ -283,7 +283,7 @@ struct addrinfo {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543794"></a><h2>RETURN VALUES</h2>
+<a name="id2543790"></a><h2>RETURN VALUES</h2>
<p><code class="function">lwres_getaddrinfo()</code>
returns zero on success or one of the error codes listed in
<span class="citerefentry"><span class="refentrytitle">gai_strerror</span>(3)</span>
@@ -294,7 +294,7 @@ struct addrinfo {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543831"></a><h2>SEE ALSO</h2>
+<a name="id2543828"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">lwres_getaddrinfo</span>(3)</span>,
diff --git a/contrib/bind9/lib/lwres/man/lwres_gethostent.3 b/contrib/bind9/lib/lwres/man/lwres_gethostent.3
index d6d32e0c0bdd..37067273f890 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gethostent.3
+++ b/contrib/bind9/lib/lwres/man/lwres_gethostent.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -309,7 +309,7 @@ The resolver daemon does not currently support any non\-DNS name services such a
or
\fBNIS\fR, consequently the above functions don't, either.
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_gethostent.docbook b/contrib/bind9/lib/lwres/man/lwres_gethostent.docbook
index b5389153fee3..a3f084bc2fe7 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gethostent.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_gethostent.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_gethostent.docbook,v 1.11 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_gethostent.html b/contrib/bind9/lib/lwres/man/lwres_gethostent.html
index e5f660cb0c70..2c990850805f 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gethostent.html
+++ b/contrib/bind9/lib/lwres/man/lwres_gethostent.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -228,7 +228,7 @@ void
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543612"></a><h2>DESCRIPTION</h2>
+<a name="id2543609"></a><h2>DESCRIPTION</h2>
<p>
These functions provide hostname-to-address and
address-to-hostname lookups by means of the lightweight resolver.
@@ -366,7 +366,7 @@ struct hostent {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543963"></a><h2>RETURN VALUES</h2>
+<a name="id2543960"></a><h2>RETURN VALUES</h2>
<p>
The functions
<code class="function">lwres_gethostbyname()</code>,
@@ -430,7 +430,7 @@ struct hostent {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544197"></a><h2>SEE ALSO</h2>
+<a name="id2544194"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">gethostent</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">lwres_getipnode</span>(3)</span>,
@@ -439,7 +439,7 @@ struct hostent {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2544231"></a><h2>BUGS</h2>
+<a name="id2544228"></a><h2>BUGS</h2>
<p><code class="function">lwres_gethostbyname()</code>,
<code class="function">lwres_gethostbyname2()</code>,
<code class="function">lwres_gethostbyaddr()</code>
diff --git a/contrib/bind9/lib/lwres/man/lwres_getipnode.3 b/contrib/bind9/lib/lwres/man/lwres_getipnode.3
index c234ddf766a9..3632e64b1239 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getipnode.3
+++ b/contrib/bind9/lib/lwres/man/lwres_getipnode.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -200,7 +200,7 @@ translates these error codes to suitable error messages.
\fBlwres_getnameinfo\fR(3),
\fBlwres_hstrerror\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001, 2003 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_getipnode.docbook b/contrib/bind9/lib/lwres/man/lwres_getipnode.docbook
index 8fd9914d7a7a..825f46209cb7 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getipnode.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_getipnode.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_getipnode.docbook,v 1.12 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_getipnode.html b/contrib/bind9/lib/lwres/man/lwres_getipnode.html
index 410fec937555..0fc483d1a8aa 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getipnode.html
+++ b/contrib/bind9/lib/lwres/man/lwres_getipnode.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -98,7 +98,7 @@ void
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543435"></a><h2>DESCRIPTION</h2>
+<a name="id2543432"></a><h2>DESCRIPTION</h2>
<p>
These functions perform thread safe, protocol independent
nodename-to-address and address-to-nodename
@@ -217,7 +217,7 @@ struct hostent {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543693"></a><h2>RETURN VALUES</h2>
+<a name="id2543690"></a><h2>RETURN VALUES</h2>
<p>
If an error occurs,
<code class="function">lwres_getipnodebyname()</code>
@@ -261,7 +261,7 @@ struct hostent {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543790"></a><h2>SEE ALSO</h2>
+<a name="id2543787"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">RFC2553</span></span>,
<span class="citerefentry"><span class="refentrytitle">lwres</span>(3)</span>,
diff --git a/contrib/bind9/lib/lwres/man/lwres_getnameinfo.3 b/contrib/bind9/lib/lwres/man/lwres_getnameinfo.3
index 4a9eb021d9e2..8ceb47cf6ec1 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getnameinfo.3
+++ b/contrib/bind9/lib/lwres/man/lwres_getnameinfo.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -111,7 +111,7 @@ RFC2133 fails to define what the nonzero return values of
\fBgetnameinfo\fR(3)
are.
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_getnameinfo.docbook b/contrib/bind9/lib/lwres/man/lwres_getnameinfo.docbook
index 4b35f02ecab4..504dfb70adea 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getnameinfo.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_getnameinfo.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_getnameinfo.docbook,v 1.10 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_getnameinfo.html b/contrib/bind9/lib/lwres/man/lwres_getnameinfo.html
index f4808e742dc9..9cc7d5ae3cd1 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getnameinfo.html
+++ b/contrib/bind9/lib/lwres/man/lwres_getnameinfo.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -82,7 +82,7 @@ int
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543397"></a><h2>DESCRIPTION</h2>
+<a name="id2543394"></a><h2>DESCRIPTION</h2>
<p>
This function is equivalent to the
<span class="citerefentry"><span class="refentrytitle">getnameinfo</span>(3)</span> function defined in RFC2133.
@@ -149,13 +149,13 @@ int
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543539"></a><h2>RETURN VALUES</h2>
+<a name="id2543536"></a><h2>RETURN VALUES</h2>
<p><code class="function">lwres_getnameinfo()</code>
returns 0 on success or a non-zero error code if an error occurs.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543550"></a><h2>SEE ALSO</h2>
+<a name="id2543547"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">RFC2133</span></span>,
<span class="citerefentry"><span class="refentrytitle">getservbyport</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">lwres</span>(3)</span>,
@@ -165,7 +165,7 @@ int
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543608"></a><h2>BUGS</h2>
+<a name="id2543605"></a><h2>BUGS</h2>
<p>
RFC2133 fails to define what the nonzero return values of
<span class="citerefentry"><span class="refentrytitle">getnameinfo</span>(3)</span>
diff --git a/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.3 b/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.3
index be8abab00a30..f2e33413b845 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.3
+++ b/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -158,7 +158,7 @@ other failure
.PP
\fBlwres\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.docbook b/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.docbook
index 51a7701f01b6..5f2a68d1da1a 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_getrrsetbyname.docbook,v 1.10 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.html b/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.html
index 7f3b56dac228..e7d68bb54d3d 100644
--- a/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.html
+++ b/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -102,7 +102,7 @@ struct rrsetinfo {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543418"></a><h2>DESCRIPTION</h2>
+<a name="id2543415"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_getrrsetbyname()</code>
gets a set of resource records associated with a
<em class="parameter"><code>hostname</code></em>, <em class="parameter"><code>class</code></em>,
@@ -150,7 +150,7 @@ struct rrsetinfo {
<p></p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543530"></a><h2>RETURN VALUES</h2>
+<a name="id2543527"></a><h2>RETURN VALUES</h2>
<p><code class="function">lwres_getrrsetbyname()</code>
returns zero on success, and one of the following error codes if
an error occurred:
@@ -184,7 +184,7 @@ struct rrsetinfo {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543630"></a><h2>SEE ALSO</h2>
+<a name="id2543627"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres</span>(3)</span>.
</p>
</div>
diff --git a/contrib/bind9/lib/lwres/man/lwres_gnba.3 b/contrib/bind9/lib/lwres/man/lwres_gnba.3
index 5c2b264e789a..413519035e41 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gnba.3
+++ b/contrib/bind9/lib/lwres/man/lwres_gnba.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -177,7 +177,7 @@ indicate that the packet is not a response to an earlier query.
.PP
\fBlwres_packet\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_gnba.docbook b/contrib/bind9/lib/lwres/man/lwres_gnba.docbook
index 4aa7fcb58491..452cdfcb0f43 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gnba.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_gnba.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_gnba.docbook,v 1.11 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_gnba.html b/contrib/bind9/lib/lwres/man/lwres_gnba.html
index 774a166eba1d..6d61b87bb43e 100644
--- a/contrib/bind9/lib/lwres/man/lwres_gnba.html
+++ b/contrib/bind9/lib/lwres/man/lwres_gnba.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -22,7 +22,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en">
-<a name="id2476275"></a><div class="titlepage"></div>
+<a name="id2476274"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2>Name</h2>
<p>lwres_gnbarequest_render, lwres_gnbaresponse_render, lwres_gnbarequest_parse, lwres_gnbaresponse_parse, lwres_gnbaresponse_free, lwres_gnbarequest_free &#8212; lightweight resolver getnamebyaddress message handling</p>
@@ -183,7 +183,7 @@ void
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543529"></a><h2>DESCRIPTION</h2>
+<a name="id2543527"></a><h2>DESCRIPTION</h2>
<p>
These are low-level routines for creating and parsing
lightweight resolver address-to-name lookup request and
@@ -270,7 +270,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543669"></a><h2>RETURN VALUES</h2>
+<a name="id2543667"></a><h2>RETURN VALUES</h2>
<p>
The getnamebyaddr opcode functions
<code class="function">lwres_gnbarequest_render()</code>,
@@ -308,7 +308,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543735"></a><h2>SEE ALSO</h2>
+<a name="id2543733"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres_packet</span>(3)</span>.
</p>
</div>
diff --git a/contrib/bind9/lib/lwres/man/lwres_hstrerror.3 b/contrib/bind9/lib/lwres/man/lwres_hstrerror.3
index 5beff3c6b169..6d24cf65e3fd 100644
--- a/contrib/bind9/lib/lwres/man/lwres_hstrerror.3
+++ b/contrib/bind9/lib/lwres/man/lwres_hstrerror.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -93,7 +93,7 @@ is not a valid error code.
\fBherror\fR(3),
\fBlwres_hstrerror\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_hstrerror.docbook b/contrib/bind9/lib/lwres/man/lwres_hstrerror.docbook
index d937b6c4d28f..ca4589e080b4 100644
--- a/contrib/bind9/lib/lwres/man/lwres_hstrerror.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_hstrerror.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_hstrerror.docbook,v 1.11 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_hstrerror.html b/contrib/bind9/lib/lwres/man/lwres_hstrerror.html
index c698d55d4d5e..8d4e9d60b5be 100644
--- a/contrib/bind9/lib/lwres/man/lwres_hstrerror.html
+++ b/contrib/bind9/lib/lwres/man/lwres_hstrerror.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -50,7 +50,7 @@ const char *
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543383"></a><h2>DESCRIPTION</h2>
+<a name="id2543380"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_herror()</code>
prints the string <em class="parameter"><code>s</code></em> on
<span class="type">stderr</span> followed by the string generated by
@@ -84,7 +84,7 @@ const char *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543501"></a><h2>RETURN VALUES</h2>
+<a name="id2543498"></a><h2>RETURN VALUES</h2>
<p>
The string <span class="errorname">Unknown resolver error</span> is returned by
<code class="function">lwres_hstrerror()</code>
@@ -94,7 +94,7 @@ const char *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543522"></a><h2>SEE ALSO</h2>
+<a name="id2543518"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">herror</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">lwres_hstrerror</span>(3)</span>.
diff --git a/contrib/bind9/lib/lwres/man/lwres_inetntop.3 b/contrib/bind9/lib/lwres/man/lwres_inetntop.3
index 48a0319a2350..0dfe5e6eca6b 100644
--- a/contrib/bind9/lib/lwres/man/lwres_inetntop.3
+++ b/contrib/bind9/lib/lwres/man/lwres_inetntop.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -71,7 +71,7 @@ is not supported.
\fBinet_ntop\fR(3),
\fBerrno\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_inetntop.docbook b/contrib/bind9/lib/lwres/man/lwres_inetntop.docbook
index 93a9a4fe0fa6..26f1779d3139 100644
--- a/contrib/bind9/lib/lwres/man/lwres_inetntop.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_inetntop.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_inetntop.docbook,v 1.10 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_inetntop.html b/contrib/bind9/lib/lwres/man/lwres_inetntop.html
index 64be8a929f9d..6f1a37f6d7a4 100644
--- a/contrib/bind9/lib/lwres/man/lwres_inetntop.html
+++ b/contrib/bind9/lib/lwres/man/lwres_inetntop.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -62,7 +62,7 @@ const char *
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543383"></a><h2>DESCRIPTION</h2>
+<a name="id2543380"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_net_ntop()</code>
converts an IP address of protocol family
<em class="parameter"><code>af</code></em> &#8212; IPv4 or IPv6 &#8212; at
@@ -80,7 +80,7 @@ const char *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543415"></a><h2>RETURN VALUES</h2>
+<a name="id2543412"></a><h2>RETURN VALUES</h2>
<p>
If successful, the function returns <em class="parameter"><code>dst</code></em>:
a pointer to a string containing the presentation format of the
@@ -93,7 +93,7 @@ const char *
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543448"></a><h2>SEE ALSO</h2>
+<a name="id2543445"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">RFC1884</span></span>,
<span class="citerefentry"><span class="refentrytitle">inet_ntop</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span>.
diff --git a/contrib/bind9/lib/lwres/man/lwres_noop.3 b/contrib/bind9/lib/lwres/man/lwres_noop.3
index aa13875c5dc1..c0fc47ed6548 100644
--- a/contrib/bind9/lib/lwres/man/lwres_noop.3
+++ b/contrib/bind9/lib/lwres/man/lwres_noop.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -177,7 +177,7 @@ indicate that the packet is not a response to an earlier query.
.PP
\fBlwres_packet\fR(3)
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_noop.docbook b/contrib/bind9/lib/lwres/man/lwres_noop.docbook
index be03c8f0ee9e..eb823b77335b 100644
--- a/contrib/bind9/lib/lwres/man/lwres_noop.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_noop.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_noop.docbook,v 1.11 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_noop.html b/contrib/bind9/lib/lwres/man/lwres_noop.html
index 9db4d062683f..69d0d386b366 100644
--- a/contrib/bind9/lib/lwres/man/lwres_noop.html
+++ b/contrib/bind9/lib/lwres/man/lwres_noop.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -22,7 +22,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.71.1">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en">
-<a name="id2476275"></a><div class="titlepage"></div>
+<a name="id2476274"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2>Name</h2>
<p>lwres_nooprequest_render, lwres_noopresponse_render, lwres_nooprequest_parse, lwres_noopresponse_parse, lwres_noopresponse_free, lwres_nooprequest_free &#8212; lightweight resolver no-op message handling</p>
@@ -179,7 +179,7 @@ void
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543526"></a><h2>DESCRIPTION</h2>
+<a name="id2543524"></a><h2>DESCRIPTION</h2>
<p>
These are low-level routines for creating and parsing
lightweight resolver no-op request and response messages.
@@ -270,7 +270,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543676"></a><h2>RETURN VALUES</h2>
+<a name="id2543674"></a><h2>RETURN VALUES</h2>
<p>
The no-op opcode functions
<code class="function">lwres_nooprequest_render()</code>,
@@ -309,7 +309,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543742"></a><h2>SEE ALSO</h2>
+<a name="id2543740"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres_packet</span>(3)</span>
</p>
</div>
diff --git a/contrib/bind9/lib/lwres/man/lwres_packet.3 b/contrib/bind9/lib/lwres/man/lwres_packet.3
index 21bc90dfaadb..49ebff7ada41 100644
--- a/contrib/bind9/lib/lwres/man/lwres_packet.3
+++ b/contrib/bind9/lib/lwres/man/lwres_packet.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -164,7 +164,7 @@ and lightweight resolver packet
both functions return
\fBLWRES_R_UNEXPECTEDEND\fR.
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_packet.docbook b/contrib/bind9/lib/lwres/man/lwres_packet.docbook
index b191b35b1c1d..87841db7c71a 100644
--- a/contrib/bind9/lib/lwres/man/lwres_packet.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_packet.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_packet.docbook,v 1.13 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_packet.html b/contrib/bind9/lib/lwres/man/lwres_packet.html
index 362746563721..fad9076a6e8c 100644
--- a/contrib/bind9/lib/lwres/man/lwres_packet.html
+++ b/contrib/bind9/lib/lwres/man/lwres_packet.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -66,7 +66,7 @@ lwres_result_t
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543394"></a><h2>DESCRIPTION</h2>
+<a name="id2543390"></a><h2>DESCRIPTION</h2>
<p>
These functions rely on a
<span class="type">struct lwres_lwpacket</span>
@@ -219,7 +219,7 @@ struct lwres_lwpacket {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543710"></a><h2>RETURN VALUES</h2>
+<a name="id2543707"></a><h2>RETURN VALUES</h2>
<p>
Successful calls to
<code class="function">lwres_lwpacket_renderheader()</code> and
diff --git a/contrib/bind9/lib/lwres/man/lwres_resutil.3 b/contrib/bind9/lib/lwres/man/lwres_resutil.3
index 75dd751d4924..0e9cf6f97800 100644
--- a/contrib/bind9/lib/lwres/man/lwres_resutil.3
+++ b/contrib/bind9/lib/lwres/man/lwres_resutil.3
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (C) 2000, 2001 Internet Software Consortium.
.\"
.\" Permission to use, copy, modify, and/or distribute this software for any
@@ -164,7 +164,7 @@ if the buffers used for sending queries and receiving replies are too small.
\fBlwres_buffer\fR(3),
\fBlwres_gabn\fR(3).
.SH "COPYRIGHT"
-Copyright \(co 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
.br
Copyright \(co 2000, 2001 Internet Software Consortium.
.br
diff --git a/contrib/bind9/lib/lwres/man/lwres_resutil.docbook b/contrib/bind9/lib/lwres/man/lwres_resutil.docbook
index d071bcad1730..e6184d912f5d 100644
--- a/contrib/bind9/lib/lwres/man/lwres_resutil.docbook
+++ b/contrib/bind9/lib/lwres/man/lwres_resutil.docbook
@@ -2,7 +2,7 @@
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY mdash "&#8212;">]>
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
+<!-- $Id: lwres_resutil.docbook,v 1.12 2007/06/18 23:47:51 tbox Exp $ -->
<refentry>
<refentryinfo>
@@ -36,7 +36,6 @@
<year>2004</year>
<year>2005</year>
<year>2007</year>
- <year>2012</year>
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
</copyright>
<copyright>
diff --git a/contrib/bind9/lib/lwres/man/lwres_resutil.html b/contrib/bind9/lib/lwres/man/lwres_resutil.html
index cbe724b3d1f8..4db7610448c5 100644
--- a/contrib/bind9/lib/lwres/man/lwres_resutil.html
+++ b/contrib/bind9/lib/lwres/man/lwres_resutil.html
@@ -1,5 +1,5 @@
<!--
- - Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ - Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
- Copyright (C) 2000, 2001 Internet Software Consortium.
-
- Permission to use, copy, modify, and/or distribute this software for any
@@ -134,7 +134,7 @@ lwres_result_t
</div>
</div>
<div class="refsect1" lang="en">
-<a name="id2543470"></a><h2>DESCRIPTION</h2>
+<a name="id2543467"></a><h2>DESCRIPTION</h2>
<p><code class="function">lwres_string_parse()</code>
retrieves a DNS-encoded string starting the current pointer of
lightweight resolver buffer <em class="parameter"><code>b</code></em>: i.e.
@@ -210,7 +210,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543609"></a><h2>RETURN VALUES</h2>
+<a name="id2543606"></a><h2>RETURN VALUES</h2>
<p>
Successful calls to
<code class="function">lwres_string_parse()</code>
@@ -248,7 +248,7 @@ typedef struct {
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2543681"></a><h2>SEE ALSO</h2>
+<a name="id2543677"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">lwres_buffer</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">lwres_gabn</span>(3)</span>.
diff --git a/contrib/bind9/lib/lwres/print.c b/contrib/bind9/lib/lwres/print.c
index 591ed36ac344..87f30323fe9a 100644
--- a/contrib/bind9/lib/lwres/print.c
+++ b/contrib/bind9/lib/lwres/print.c
@@ -470,12 +470,16 @@ lwres__print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
pad--;
}
break;
+
case 'D': /*deprecated*/
INSIST("use %ld instead of %D" == NULL);
+ break;
case 'O': /*deprecated*/
INSIST("use %lo instead of %O" == NULL);
+ break;
case 'U': /*deprecated*/
INSIST("use %lu instead of %U" == NULL);
+ break;
case 'L':
#ifdef HAVE_LONG_DOUBLE
diff --git a/contrib/bind9/lib/lwres/print_p.h b/contrib/bind9/lib/lwres/print_p.h
index 60f91aac1d89..c8b889697511 100644
--- a/contrib/bind9/lib/lwres/print_p.h
+++ b/contrib/bind9/lib/lwres/print_p.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2010 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: print_p.h,v 1.6 2010/08/16 23:46:52 tbox Exp $ */
#ifndef LWRES_PRINT_P_H
#define LWRES_PRINT_P_H 1
diff --git a/contrib/bind9/lib/lwres/strtoul.c b/contrib/bind9/lib/lwres/strtoul.c
index c9413a4663d5..f16896c1dcb9 100644
--- a/contrib/bind9/lib/lwres/strtoul.c
+++ b/contrib/bind9/lib/lwres/strtoul.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -53,7 +53,7 @@
static char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
-/* $Id$ */
+/* $Id: strtoul.c,v 1.4 2007/06/19 23:47:22 tbox Exp $ */
#include <config.h>
diff --git a/contrib/bind9/lib/lwres/unix/Makefile.in b/contrib/bind9/lib/lwres/unix/Makefile.in
index 15f052d00b0a..26ca4fb8211a 100644
--- a/contrib/bind9/lib/lwres/unix/Makefile.in
+++ b/contrib/bind9/lib/lwres/unix/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: Makefile.in,v 1.4 2007/06/19 23:47:23 tbox Exp $
srcdir = @srcdir@
VPATH = @srcdir@
diff --git a/contrib/bind9/lib/lwres/unix/include/Makefile.in b/contrib/bind9/lib/lwres/unix/include/Makefile.in
index 9c70db277692..5372543cc014 100644
--- a/contrib/bind9/lib/lwres/unix/include/Makefile.in
+++ b/contrib/bind9/lib/lwres/unix/include/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: Makefile.in,v 1.4 2007/06/19 23:47:23 tbox Exp $
srcdir = @srcdir@
VPATH = @srcdir@
diff --git a/contrib/bind9/lib/lwres/unix/include/lwres/Makefile.in b/contrib/bind9/lib/lwres/unix/include/lwres/Makefile.in
index 21b63ddb199e..4f60ce82f886 100644
--- a/contrib/bind9/lib/lwres/unix/include/lwres/Makefile.in
+++ b/contrib/bind9/lib/lwres/unix/include/lwres/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: Makefile.in,v 1.4 2007/06/19 23:47:23 tbox Exp $
srcdir = @srcdir@
VPATH = @srcdir@
diff --git a/contrib/bind9/lib/lwres/unix/include/lwres/net.h b/contrib/bind9/lib/lwres/unix/include/lwres/net.h
index 390853f985c5..0b16178c282f 100644
--- a/contrib/bind9/lib/lwres/unix/include/lwres/net.h
+++ b/contrib/bind9/lib/lwres/unix/include/lwres/net.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: net.h,v 1.9 2007/06/19 23:47:23 tbox Exp $ */
#ifndef LWRES_NET_H
#define LWRES_NET_H 1
@@ -65,7 +65,7 @@
#ifdef LWRES_PLATFORM_NEEDNETINET6IN6H
#include <netinet6/in6.h> /* Required on BSD/OS for in6_pktinfo. */
#endif
-#include <net/if.h>
+#include <net/if.h>
#include <lwres/lang.h>
@@ -80,7 +80,7 @@
/*!
* Required for some pre RFC2133 implementations.
* IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT were added in
- * draft-ietf-ipngwg-bsd-api-04.txt or draft-ietf-ipngwg-bsd-api-05.txt.
+ * draft-ietf-ipngwg-bsd-api-04.txt or draft-ietf-ipngwg-bsd-api-05.txt.
* If 's6_addr' is defined then assume that there is a union and three
* levels otherwise assume two levels required.
*/
diff --git a/contrib/bind9/lib/lwres/version.c b/contrib/bind9/lib/lwres/version.c
index a7e5a7e42bf1..cc52c510035a 100644
--- a/contrib/bind9/lib/lwres/version.c
+++ b/contrib/bind9/lib/lwres/version.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id$ */
+/* $Id: version.c,v 1.12 2007/06/19 23:47:22 tbox Exp $ */
/*! \file */
diff --git a/contrib/bind9/libtool.m4 b/contrib/bind9/libtool.m4
deleted file mode 100644
index a352a6543da4..000000000000
--- a/contrib/bind9/libtool.m4
+++ /dev/null
@@ -1,6656 +0,0 @@
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007,
-## 2008 Free Software Foundation, Inc.
-## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-##
-## This file is free software; the Free Software Foundation gives
-## unlimited permission to copy and/or distribute it, with or without
-## modifications, as long as this notice is preserved.
-
-# serial 52 AC_PROG_LIBTOOL
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
- [],
- [m4_define([AC_PROVIDE_IFELSE],
- [m4_ifdef([AC_PROVIDE_$1],
- [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
- AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [AC_LIBTOOL_CXX],
- [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
- ])])
-dnl And a similar setup for Fortran 77 support
- AC_PROVIDE_IFELSE([AC_PROG_F77],
- [AC_LIBTOOL_F77],
- [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
- AC_PROVIDE_IFELSE([AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
- [AC_LIBTOOL_GCJ],
- [ifdef([AC_PROG_GCJ],
- [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([A][M_PROG_GCJ],
- [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
- ifdef([LT_AC_PROG_GCJ],
- [define([LT_AC_PROG_GCJ],
- defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-
-# Same as above, but do not quote variable references.
-[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- AC_PATH_MAGIC
- fi
- ;;
-esac
-
-_LT_REQUIRED_DARWIN_CHECKS
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
- [AC_HELP_STRING([--with-pic],
- [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
- [pic_mode=default])
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_AC_SYS_COMPILER
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-AC_DEFUN([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
- case $cc_temp in
- compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
- distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$rm conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$rm -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# --------------------------
-# Check for some things on darwin
-AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
- case $host_os in
- rhapsody* | darwin*)
- AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
- AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-
- AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
- [lt_cv_apple_cc_single_mod=no
- if test -z "${LT_MULTI_MODULE}"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- echo "int foo(void){return 1;}" > conftest.c
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib ${wl}-single_module conftest.c
- if test -f libconftest.dylib; then
- lt_cv_apple_cc_single_mod=yes
- rm -rf libconftest.dylib*
- fi
- rm conftest.c
- fi])
- AC_CACHE_CHECK([for -exported_symbols_list linker flag],
- [lt_cv_ld_exported_symbols_list],
- [lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
- [lt_cv_ld_exported_symbols_list=yes],
- [lt_cv_ld_exported_symbols_list=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- case $host_os in
- rhapsody* | darwin1.[[0123]])
- _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- darwin*)
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]]*)
- _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test "$lt_cv_apple_cc_single_mod" = "yes"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
- _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
- else
- _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
- fi
- if test "$DSYMUTIL" != ":"; then
- _lt_dsymutil="~$DSYMUTIL \$lib || :"
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-])
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_PROG_ECHO_BACKSLASH
-# --------------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
- ;;
-esac
-
-echo=${ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X[$]1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-[$]*
-EOF
- exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string=`eval $cmd`) 2>/dev/null &&
- echo_test_string=`eval $cmd` &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
- then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
-else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
- else
- # Try using printf.
- echo='printf %s\n'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- echo="$CONFIG_SHELL [$]0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "[$]0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
- ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
- [AC_HELP_STRING([--disable-libtool-lock],
- [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE="32"
- ;;
- *ELF-64*)
- HPUX_IA64_MODE="64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- if test "$lt_cv_prog_gnu_ld" = yes; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_i386"
- ;;
- ppc64-*linux*|powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- ppc*-*linux*|powerpc*-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_PUSH(C)
- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_POP])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
- fi
- ;;
-sparc*-*solaris*)
- # Find out which ABI we are using.
- echo 'int i;' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
- ;;
- ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$3"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- fi
- $rm conftest*
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$5], , :, [$5])
-else
- ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-# [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
- [$2=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $3"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&AS_MESSAGE_LOG_FD
- $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- $2=yes
- fi
- else
- $2=yes
- fi
- fi
- $rm -r conftest*
- LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
- ifelse([$4], , :, [$4])
-else
- ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
- i=0
- teststring="ABCD"
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
- = "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
- AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
- AC_MSG_RESULT(none)
-fi
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# ------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ---------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
- [$4]
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- exit (status);
-}]
-EOF
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
- (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) $1 ;;
- x$lt_dlneed_uscore) $2 ;;
- x$lt_dlunknown|x*) $3 ;;
- esac
- else :
- # compilation failed
- $3
- fi
-fi
-rm -fr conftest*
-])# _LT_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# ----------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32*)
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen="dlopen"
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
- lt_cv_dlopen="dyld"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ])
- ;;
-
- *)
- AC_CHECK_FUNC([shl_load],
- [lt_cv_dlopen="shl_load"],
- [AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
- [AC_CHECK_FUNC([dlopen],
- [lt_cv_dlopen="dlopen"],
- [AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
- [AC_CHECK_LIB([svld], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
- [AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
- ])
- ])
- ])
- ])
- ])
- ;;
- esac
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- else
- enable_dlopen=no
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS="$CPPFLAGS"
- test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS="$LDFLAGS"
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS="$LIBS"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- AC_CACHE_CHECK([whether a program can dlopen itself],
- lt_cv_dlopen_self, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
- lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
- ])
-
- if test "x$lt_cv_dlopen_self" = xyes; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
- lt_cv_dlopen_self_static, [dnl
- _LT_AC_TRY_DLOPEN_SELF(
- lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
- lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
- ])
- fi
-
- CPPFLAGS="$save_CPPFLAGS"
- LDFLAGS="$save_LDFLAGS"
- LIBS="$save_LIBS"
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
- [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
- $rm -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&AS_MESSAGE_LOG_FD
- echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
- fi
- fi
- chmod u+w . 2>&AS_MESSAGE_LOG_FD
- $rm conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
- $rm out/* && rmdir out
- cd ..
- rmdir conftest
- $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- AC_MSG_CHECKING([if we can lock with hard links])
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- AC_MSG_RESULT([$hard_links])
- if test "$hard_links" = no; then
- AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
- test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
- test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
- # We can hardcode non-existant directories.
- if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
- test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
- # Linking always hardcodes the temporary library directory.
- _LT_AC_TAGVAR(hardcode_action, $1)=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- _LT_AC_TAGVAR(hardcode_action, $1)=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP" ; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
-fi
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
-fi
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-m4_if($1,[],[
-if test "$GCC" = yes; then
- case $host_os in
- darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
- *) lt_awk_arg="/^libraries:/" ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
- else
- lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary.
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path/$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
- else
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
- lt_foo="";
- lt_count=0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo="/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[[lt_foo]]++; }
- if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
- sys_lib_search_path_spec=`echo $lt_search_path_spec`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
-
-aix[[4-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test "$host_cpu" = ia64; then
- # AIX 5 supports IA64
- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line `#! .'. This would cause the generated library to
- # depend on `.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[[01]] | aix4.[[01]].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test "$aix_use_runtimelinking" = yes; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}${shared_ext}$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}${shared_ext}'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[[45]]*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32*)
- version_type=windows
- shrext_cmds=".dll"
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32*)
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \${file}`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $rm \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
- ;;
- mingw*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
- ;;
- esac
- ;;
-
- *)
- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
- soname_spec='${libname}${release}${major}$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
- m4_if([$1], [],[
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[[123]]*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
- freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- if test "X$HPUX_IA64_MODE" = X32; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-interix[[3-9]]*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-nto-qnx*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-openbsd*)
- version_type=sunos
- sys_lib_dlsearch_path_spec="/usr/lib"
- need_lib_prefix=no
- # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
- case $host_os in
- openbsd3.3 | openbsd3.3.*) need_version=yes ;;
- *) need_version=no ;;
- esac
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case $host_os in
- openbsd2.[[89]] | openbsd2.[[89]].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
- else
- shlibpath_overrides_runpath=yes
- fi
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=".dll"
- need_lib_prefix=no
- library_names_spec='$libname${shared_ext} $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}${shared_ext}$major'
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- export_dynamic_flag_spec='${wl}-Blargedynsym'
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
- soname_spec='$libname${shared_ext}.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- hardcode_into_libs=yes
- if test "$with_gnu_ld" = yes; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- shlibpath_overrides_runpath=no
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- shlibpath_overrides_runpath=yes
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
-[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
-[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_ARG_WITH([tags],
- [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
- [include additional configurations @<:@automatic@:>@])],
- [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
- if test ! -f "${ofile}"; then
- AC_MSG_WARN([output file `$ofile' does not exist])
- fi
-
- if test -z "$LTCC"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
- if test -z "$LTCC"; then
- AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
- else
- AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
- fi
- fi
- if test -z "$LTCFLAGS"; then
- eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
- fi
-
- # Extract list of available tagged configurations in $ofile.
- # Note that this assumes the entire list is on one line.
- available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for tagname in $tagnames; do
- IFS="$lt_save_ifs"
- # Check whether tagname contains only valid characters
- case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
- "") ;;
- *) AC_MSG_ERROR([invalid tag name: $tagname])
- ;;
- esac
-
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
- then
- AC_MSG_ERROR([tag name \"$tagname\" already exists])
- fi
-
- # Update the list of available tags.
- if test -n "$tagname"; then
- echo appending configuration tag \"$tagname\" to $ofile
-
- case $tagname in
- CXX)
- if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_LIBTOOL_LANG_CXX_CONFIG
- else
- tagname=""
- fi
- ;;
-
- F77)
- if test -n "$F77" && test "X$F77" != "Xno"; then
- AC_LIBTOOL_LANG_F77_CONFIG
- else
- tagname=""
- fi
- ;;
-
- GCJ)
- if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
- AC_LIBTOOL_LANG_GCJ_CONFIG
- else
- tagname=""
- fi
- ;;
-
- RC)
- AC_LIBTOOL_LANG_RC_CONFIG
- ;;
-
- *)
- AC_MSG_ERROR([Unsupported tag name: $tagname])
- ;;
- esac
-
- # Append the new tag name to the list of available tags.
- if test -n "$tagname" ; then
- available_tags="$available_tags $tagname"
- fi
- fi
- done
- IFS="$lt_save_ifs"
-
- # Now substitute the updated list of available tags.
- if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
- mv "${ofile}T" "$ofile"
- chmod +x "$ofile"
- else
- rm -f "${ofile}T"
- AC_MSG_ERROR([unable to update list of available tagged configurations.])
- fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 DLLs
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
- [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
- [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-# set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
- [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
- [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_static=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
- [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
- [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
- [p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
- for pkg in $enableval; do
- IFS="$lt_save_ifs"
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$lt_save_ifs"
- ;;
- esac],
- [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
- [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognize shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] | ?:[\\/]*])
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD="$MAGIC_CMD"
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word. This closes a longstanding sh security hole.
- ac_dummy="ifelse([$2], , $PATH, [$2])"
- for ac_dir in $ac_dummy; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$1; then
- lt_cv_path_MAGIC_CMD="$ac_dir/$1"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS="$lt_save_ifs"
- MAGIC_CMD="$lt_save_MAGIC_CMD"
- ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
- AC_MSG_RESULT($MAGIC_CMD)
-else
- AC_MSG_RESULT(no)
-fi
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognize a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
- else
- MAGIC_CMD=:
- fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
- [AC_HELP_STRING([--with-gnu-ld],
- [assume the C compiler uses GNU ld @<:@default=no@:>@])],
- [test "$withval" = no || with_gnu_ld=yes],
- [with_gnu_ld=no])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by $CC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]]* | ?:[[\\/]]*)
- re_direlt='/[[^/]][[^/]]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break
- ;;
- *)
- test "$with_gnu_ld" != yes && break
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
-else
- lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-# -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files],
- lt_cv_ld_reload_flag,
- [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- darwin*)
- if test "$GCC" = yes; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-# -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[[45]]*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[[3-9]]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-nto-qnx*)
- lt_cv_deplibs_check_method=unknown
- ;;
-
-openbsd*)
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-[if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM="$NM"
-else
- lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS="$lt_save_ifs"
- test -z "$ac_dir" && ac_dir=.
- tmp_nm="$ac_dir/$lt_tmp_nm"
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS="$lt_save_ifs"
- done
- test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
- # These system don't have libm, or don't need it
- ;;
-*-ncr-sysv4.3*)
- AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
- ;;
-*)
- AC_CHECK_LIB(m, cos, LIBM="-lm")
- ;;
-esac
-])# AC_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments. Note that
-# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
-# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
-# (note the single quotes!). If your package is not flat and you're not
-# using automake, define top_builddir and top_srcdir appropriately in
-# the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case $enable_ltdl_convenience in
- no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
- "") enable_ltdl_convenience=yes
- ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
- esac
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments. Note that
-# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-# and an installed libltdl is not found, it is assumed to be `libltdl'.
-# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
-# '${top_srcdir}/' (note the single quotes!). If your package is not
-# flat and you're not using automake, define top_builddir and top_srcdir
-# appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, lt_dlinit,
- [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
- [if test x"$enable_ltdl_install" = xno; then
- AC_MSG_WARN([libltdl not installed, but installation disabled])
- else
- enable_ltdl_install=yes
- fi
- ])
- if test x"$enable_ltdl_install" = x"yes"; then
- ac_configure_args="$ac_configure_args --enable-ltdl-install"
- LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
- else
- ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
- LIBLTDL="-lltdl"
- LTDLINCL=
- fi
- # For backwards non-gettext consistent compatibility...
- INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-# _LT_AC_PROG_CXXCPP
-# ------------------
-AC_DEFUN([_LT_AC_PROG_CXXCPP],
-[
-AC_REQUIRE([AC_PROG_CXX])
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- AC_PROG_CXXCPP
-fi
-])# _LT_AC_PROG_CXXCPP
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
- [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
- [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
- [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
- [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# -------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF
-
-# Report which library types will actually be built
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
- lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
- $as_unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
- lt_cv_path_LD=$lt_cv_path_LDCXX
-else
- $as_unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
- # Set up default GNU C++ configuration
-
- AC_PROG_LD
-
- # Check if GNU C++ uses GNU ld as the underlying linker, since the
- # archiving commands below assume that GNU ld is being used.
- if test "$with_gnu_ld" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # If archive_cmds runs LD, not CC, wlarc should be empty
- # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
- # investigate it a little bit more. (MM)
- wlarc='${wl}'
-
- # ancient GNU ld didn't support --whole-archive et. al.
- if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
- grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- with_gnu_ld=no
- wlarc=
-
- # A generic and very simple default shared library creation
- # command for GNU C++ for the case where it uses the native
- # linker, instead of GNU ld. If possible, this setting should
- # overridden to take advantage of the native linker features on
- # the platform it is being used on.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- fi
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
- GXX=no
- with_gnu_ld=no
- wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
- aix3*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- case $ld_flag in
- *-brtl*)
- aix_use_runtimelinking=yes
- break
- ;;
- esac
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GXX" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- chorus*)
- case $cc_basename in
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- darwin* | rhapsody*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
- if test "$GXX" = yes ; then
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- if test "$lt_cv_apple_cc_single_mod" != "yes"; then
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
- fi
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- case $cc_basename in
- ec++*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- freebsd[[12]]*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- freebsd-elf*)
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- ;;
- freebsd* | dragonfly*)
- # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
- # conventions
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- ;;
- gnu*)
- ;;
- hpux9*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- hpux10*|hpux11*)
- if test $with_gnu_ld = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*) ;;
- *)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
- esac
- fi
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
- ;;
- esac
-
- case $cc_basename in
- CC*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- aCC*)
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes; then
- if test $with_gnu_ld = no; then
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- ;;
- esac
- fi
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- interix[[3-9]]*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
- irix5* | irix6*)
- case $cc_basename in
- CC*)
- # SGI C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- # Archives containing C++ object files must be created using
- # "CC -ar", where "CC" is the IRIX C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
- ;;
- *)
- if test "$GXX" = yes; then
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
- fi
- fi
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
- esac
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
- ;;
- icpc*)
- # Intel C++
- with_gnu_ld=yes
- # version 8.0 and above of icpc choke on multiply defined symbols
- # if we add $predep_objects and $postdep_objects, however 7.1 and
- # earlier do not add the objects themselves.
- case `$CC -V 2>&1` in
- *"Version 7."*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- *) # Version 8.0 or newer
- tmp_idyn=
- case $host_cpu in
- ia64*) tmp_idyn=' -i_dynamic';;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- ;;
- cxx*)
- # Compaq C++
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
- # Not sure whether something based on
- # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
- # would be better.
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- m88k*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- fi
- # Workaround some broken pre-1.5 toolchains
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
- ;;
- openbsd2*)
- # C++ shared libraries are fairly broken
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- fi
- output_verbose_link_cmd='echo'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- osf3*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # "CC -Bstatic", where "CC" is the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- osf4* | osf5*)
- case $cc_basename in
- KCC*)
- # Kuck and Associates, Inc. (KAI) C++ Compiler
-
- # KCC will only create a shared library if the output file
- # ends with ".so" (or ".sl" for HP-UX), so rename the library
- # to its proper name (with version) after linking.
- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Archives containing C++ object files must be created using
- # the KAI C++ compiler.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- cxx*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
- echo "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
- $rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- #
- # There doesn't appear to be a way to prevent this compiler from
- # explicitly linking system object files so we need to strip them
- # from the output so that they don't get included in the library
- # dependencies.
- output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
- ;;
- *)
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
- else
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
- psos*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- lcc*)
- # Lucid
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- output_verbose_link_cmd='echo'
-
- # Archives containing C++ object files must be created using
- # "CC -xar", where "CC" is the Sun C++ compiler. This is
- # necessary to make sure instantiated templates are included
- # in the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
- # The C++ compiler must be used to create the archive.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
- ;;
- *)
- # GNU C++ compiler with Solaris linker
- if test "$GXX" = yes && test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
- if $CC --version | grep -v '^2\.7' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- else
- # g++ 2.7 appears to require `-G' NOT `-shared' on this
- # platform.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
- # Commands to make compiler produce verbose output that lists
- # what "hidden" libraries, object files and flags are used when
- # linking a shared library.
- output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
- fi
-
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- ;;
- esac
- fi
- ;;
- esac
- ;;
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- # So that behaviour is only enabled if SCOABSPATH is set to a
- # non-empty value in the environment. Most likely only useful for
- # creating official distributions of packages.
- # This is a hack until libtool officially supports absolute path
- # names for shared libraries.
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- ;;
- vxworks*)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- *)
- # FIXME: insert proper C++ library support
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
-# ------------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library. It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
- Foo (void) { a = 0; }
-private:
- int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
- subroutine foo
- implicit none
- integer*4 a
- a=0
- return
- end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
- private int a;
- public void bar (void) {
- a = 0;
- }
-};
-EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
- # Parse the compiler output and extract the necessary
- # objects, libraries and library flags.
-
- # Sentinel used to keep track of whether or not we are before
- # the conftest object file.
- pre_test_object_deps_done=no
-
- # The `*' in the case matches for architectures that use `case' in
- # $output_verbose_cmd can trigger glob expansion during the loop
- # eval without this substitution.
- output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-
- for p in `eval $output_verbose_link_cmd`; do
- case $p in
-
- -L* | -R* | -l*)
- # Some compilers place space between "-{L,R}" and the path.
- # Remove the space.
- if test $p = "-L" \
- || test $p = "-R"; then
- prev=$p
- continue
- else
- prev=
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- case $p in
- -L* | -R*)
- # Internal compiler library paths should come after those
- # provided the user. The postdeps already come after the
- # user supplied libs so there is no need to process them.
- if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
- fi
- ;;
- # The "-l" case would never come before the object being
- # linked, so don't bother handling this case.
- esac
- else
- if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
- _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
- else
- _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
- fi
- fi
- ;;
-
- *.$objext)
- # This assumes that the test object file only shows up
- # once in the compiler output.
- if test "$p" = "conftest.$objext"; then
- pre_test_object_deps_done=yes
- continue
- fi
-
- if test "$pre_test_object_deps_done" = no; then
- if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
- _LT_AC_TAGVAR(predep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
- fi
- else
- if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
- _LT_AC_TAGVAR(postdep_objects, $1)="$p"
- else
- _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
- fi
- fi
- ;;
-
- *) ;; # Ignore the rest.
-
- esac
- done
-
- # Clean up.
- rm -f a.out a.exe
-else
- echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$rm -f confest.$objext
-
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
- _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-# PORTME: override above test on systems where it is broken
-ifelse([$1],[CXX],
-[case $host_os in
-interix[[3-9]]*)
- # Interix 3.5 installs completely hosed .la files for C++, so rather than
- # hack all around it, let's just trust "g++" to DTRT.
- _LT_AC_TAGVAR(predep_objects,$1)=
- _LT_AC_TAGVAR(postdep_objects,$1)=
- _LT_AC_TAGVAR(postdeps,$1)=
- ;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- #
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
- if test "$solaris_use_stlport4" != yes; then
- _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test "$solaris_use_stlport4" != yes; then
- _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-esac
-])
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="\
- subroutine t
- return
- end
-"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="\
- program t
- end
-"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case $host_os in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-aix[[4-9]]*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# -------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined. Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then create an initial libtool script
-# with a default configuration from the untagged config vars. Otherwise
-# add code to config.status for appending the configuration named by
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- # See if we are running on zsh, and set the options which allow our commands through
- # without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}" ; then
- setopt NO_GLOB_SUBST
- fi
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
- SED SHELL STRIP \
- libname_spec library_names_spec soname_spec extract_expsyms_cmds \
- old_striplib striplib file_magic_cmd finish_cmds finish_eval \
- deplibs_check_method reload_flag reload_cmds need_locks \
- lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
- lt_cv_sys_global_symbol_to_c_name_address \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- old_postinstall_cmds old_postuninstall_cmds \
- _LT_AC_TAGVAR(compiler, $1) \
- _LT_AC_TAGVAR(CC, $1) \
- _LT_AC_TAGVAR(LD, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
- _LT_AC_TAGVAR(old_archive_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
- _LT_AC_TAGVAR(predep_objects, $1) \
- _LT_AC_TAGVAR(postdep_objects, $1) \
- _LT_AC_TAGVAR(predeps, $1) \
- _LT_AC_TAGVAR(postdeps, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
- _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \
- _LT_AC_TAGVAR(archive_cmds, $1) \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
- _LT_AC_TAGVAR(postinstall_cmds, $1) \
- _LT_AC_TAGVAR(postuninstall_cmds, $1) \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
- _LT_AC_TAGVAR(allow_undefined_flag, $1) \
- _LT_AC_TAGVAR(no_undefined_flag, $1) \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
- _LT_AC_TAGVAR(hardcode_automatic, $1) \
- _LT_AC_TAGVAR(module_cmds, $1) \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) \
- _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
- _LT_AC_TAGVAR(fix_srcfile_path, $1) \
- _LT_AC_TAGVAR(exclude_expsyms, $1) \
- _LT_AC_TAGVAR(include_expsyms, $1); do
-
- case $var in
- _LT_AC_TAGVAR(old_archive_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
- _LT_AC_TAGVAR(archive_cmds, $1) | \
- _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(module_cmds, $1) | \
- _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
- _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
- extract_expsyms_cmds | reload_cmds | finish_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case $lt_echo in
- *'\[$]0 --fallback-echo"')
- lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
- ;;
- esac
-
-ifelse([$1], [],
- [cfgfile="${ofile}T"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- $rm -f "$cfgfile"
- AC_MSG_NOTICE([creating $ofile])],
- [cfgfile="$ofile"])
-
- cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e 1s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
- case $host_os in
- aix3*)
- cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" || \
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-])
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
- if test -f "$ltmain_in"; then
- test -f Makefile && make "$ltmain"
- fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
- AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
- lt_cv_prog_compiler_rtti_exceptions,
- [-fno-rtti -fno-exceptions], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([LT_AC_PROG_SED])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[[BCDT]]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[[ABCDGISTW]]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDEGRST]]'
- fi
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-linux* | k*bsd*-gnu)
- if test "$host_cpu" = ia64; then
- symcode='[[ABCDGIRSTW]]'
- lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- fi
- ;;
-irix* | nonstopux*)
- symcode='[[BCDEGRST]]'
- ;;
-osf*)
- symcode='[[BCDEGQRST]]'
- ;;
-solaris*)
- symcode='[[BDRT]]'
- ;;
-sco3.2v5*)
- symcode='[[DT]]'
- ;;
-sysv4.2uw2*)
- symcode='[[DT]]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[[ABDT]]'
- ;;
-sysv4)
- symcode='[[DFNSTU]]'
- ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- if AC_TRY_EVAL(ac_compile); then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if grep ' nm_test_var$' "$nlist" >/dev/null; then
- if grep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
- $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
- if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
- pipe_works=yes
- fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
- fi
- else
- echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- AC_MSG_RESULT(failed)
-else
- AC_MSG_RESULT(ok)
-fi
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
- # C++ specific cases for pic, static, wl, etc.
- if test "$GXX" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- mingw* | cygwin* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
- *djgpp*)
- # DJGPP does not support shared libraries at all
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- case $host_os in
- aix[[4-9]]*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- chorus*)
- case $cc_basename in
- cxch68*)
- # Green Hills C++ Compiler
- # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
- ;;
- esac
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
- dgux*)
- case $cc_basename in
- ec++*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- ghcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- freebsd* | dragonfly*)
- # FreeBSD uses GNU C++
- ;;
- hpux9* | hpux10* | hpux11*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
- ;;
- aCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- ;;
- *)
- ;;
- esac
- ;;
- interix*)
- # This is c89, which is MS Visual C++ (no shared libs)
- # Anyone wants to do a port?
- ;;
- irix5* | irix6* | nonstopux*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- # CC pic flag -KPIC is the default.
- ;;
- *)
- ;;
- esac
- ;;
- linux* | k*bsd*-gnu)
- case $cc_basename in
- KCC*)
- # KAI C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- icpc* | ecpc*)
- # Intel C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgCC* | pgcpp*)
- # Portland Group C++ compiler.
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- cxx*)
- # Compaq C++
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- esac
- ;;
- esac
- ;;
- lynxos*)
- ;;
- m88k*)
- ;;
- mvs*)
- case $cc_basename in
- cxx*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
- ;;
- *)
- ;;
- esac
- ;;
- netbsd*)
- ;;
- osf3* | osf4* | osf5*)
- case $cc_basename in
- KCC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
- ;;
- RCC*)
- # Rational C++ 2.4.1
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- cxx*)
- # Digital/Compaq C++
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # Make sure the PIC flag is empty. It appears that all Alpha
- # Linux and Compaq Tru64 Unix objects are PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- ;;
- esac
- ;;
- psos*)
- ;;
- solaris*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.2, 5.x and Centerline C++
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- ;;
- gcx*)
- # Green Hills C++ Compiler
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- ;;
- *)
- ;;
- esac
- ;;
- sunos4*)
- case $cc_basename in
- CC*)
- # Sun C++ 4.x
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- lcc*)
- # Lucid
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- ;;
- *)
- ;;
- esac
- ;;
- tandem*)
- case $cc_basename in
- NCC*)
- # NonStop-UX NCC 3.20
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- ;;
- *)
- ;;
- esac
- ;;
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- case $cc_basename in
- CC*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- esac
- ;;
- vxworks*)
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-],
-[
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
- ;;
-
- interix[[3-9]]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- enable_shared=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
- fi
- ;;
-
- hpux*)
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- else
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
- darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- case $cc_basename in
- xlc*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- m4_if([$1], [GCJ], [],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
- ;;
-
- hpux9* | hpux10* | hpux11*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # PIC (with -KPIC) is the default.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- linux* | k*bsd*-gnu)
- case $cc_basename in
- icc* | ecc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
- ccc*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All Alpha code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C 5.9
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- ;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=''
- ;;
- esac
- ;;
- esac
- ;;
-
- osf3* | osf4* | osf5*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- # All OSF/1 code is PIC.
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- rdos*)
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- unicos*)
- _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
- _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
- ;;
-
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
- AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
- _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
- [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
- [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
- "" | " "*) ;;
- *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
- esac],
- [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case $host_os in
- # For platforms which do not support PIC, -DPIC is meaningless:
- *djgpp*)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
- ;;
- *)
- _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
- ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
- _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
- $lt_tmp_static_flag,
- [],
- [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- case $host_os in
- aix[[4-9]]*)
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- ;;
- pw32*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
- ;;
- cygwin* | mingw*)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
- ;;
- *)
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- esac
- _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-],[
- runpath_var=
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
- _LT_AC_TAGVAR(archive_cmds, $1)=
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
- _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
- _LT_AC_TAGVAR(hardcode_automatic, $1)=no
- _LT_AC_TAGVAR(module_cmds, $1)=
- _LT_AC_TAGVAR(module_expsym_cmds, $1)=
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- _LT_AC_TAGVAR(include_expsyms, $1)=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ` (' and `)$', so one must not match beginning or
- # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
- # as well as any symbol that contains `d'.
- _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
- extract_expsyms_cmds=
- # Just being paranoid about ensuring that cc_basename is set.
- _LT_CC_BASENAME([$compiler])
- case $host_os in
- cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd*)
- with_gnu_ld=no
- ;;
- esac
-
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- supports_anon_versioning=no
- case `$LD -v 2>/dev/null` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[[3-9]]*)
- # On AIX/PPC, the GNU linker is very broken
- if test "$host_cpu" != ia64; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can't use
- # them.
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
- # as there is no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=no
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- interix[[3-9]]*)
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | k*bsd*-gnu)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- tmp_addflag=
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- *)
- tmp_sharedflag='-shared' ;;
- esac
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
- if test $supports_anon_versioning = yes; then
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- $echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
- esac
-
- if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
- runpath_var=
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- fi
- ;;
-
- aix[[4-9]]*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- else
- _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- _LT_AC_TAGVAR(archive_cmds, $1)=''
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag="$shared_flag "'${wl}-G'
- fi
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
- fi
-
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- _LT_AC_TAGVAR(always_export_symbols, $1)=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an empty executable.
- _LT_AC_SYS_LIBPATH_AIX
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- # see comment about different semantics on the GNU ld section
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- bsdi[[45]]*)
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=".dll"
- # FIXME: Setting linknames here is a bad hack.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
- # FIXME: Should let the user specify the lib program.
- _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
- _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
- _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
- ;;
-
- darwin* | rhapsody*)
- case $host_os in
- rhapsody* | darwin1.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
- ;;
- *) # Darwin 1.3 on
- if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- else
- case ${MACOSX_DEPLOYMENT_TARGET} in
- 10.[[012]])
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
- ;;
- 10.*)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
- ;;
- esac
- fi
- ;;
- esac
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- if test "$GCC" = yes ; then
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
- _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
- else
- case $cc_basename in
- xlc*)
- output_verbose_link_cmd='echo'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
- ;;
-
- dgux*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- freebsd1*)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- hpux9*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- ;;
-
- hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- fi
- ;;
-
- hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- fi
- if test "$with_gnu_ld" = no; then
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
- *)
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- newsos6)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- openbsd*)
- if test -f /usr/libexec/ld.so; then
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- else
- case $host_os in
- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- ;;
- *)
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- else
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- fi
- ;;
-
- os2*)
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
- else
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
- ;;
-
- solaris*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
- if test "$GCC" = yes; then
- wlarc='${wl}'
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
- else
- wlarc=''
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands `-z linker_flag'. GCC discards it without `$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
- else
- _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no
- ;;
- motorola)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- sysv4.3*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- _LT_AC_TAGVAR(ld_shlibs, $1)=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We can NOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
- _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
- _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
- _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test "$GCC" = yes; then
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- ;;
-
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
- esac
- fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
- # Assume -lc should be added
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
- if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $_LT_AC_TAGVAR(archive_cmds, $1) in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
- $rm conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
- pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=
- if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
- then
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
- else
- _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
- fi
- _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $rm conftest*
- AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
- ;;
- esac
- fi
- ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
- test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
- AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-
-# Cheap backport of AS_EXECUTABLE_P and required macros
-# from Autoconf 2.59; we should not use $as_executable_p directly.
-
-# _AS_TEST_PREPARE
-# ----------------
-m4_ifndef([_AS_TEST_PREPARE],
-[m4_defun([_AS_TEST_PREPARE],
-[if test -x / >/dev/null 2>&1; then
- as_executable_p='test -x'
-else
- as_executable_p='test -f'
-fi
-])])# _AS_TEST_PREPARE
-
-# AS_EXECUTABLE_P
-# ---------------
-# Check whether a file is executable.
-m4_ifndef([AS_EXECUTABLE_P],
-[m4_defun([AS_EXECUTABLE_P],
-[AS_REQUIRE([_AS_TEST_PREPARE])dnl
-$as_executable_p $1[]dnl
-])])# AS_EXECUTABLE_P
-
-############################################################
-# NOTE: This macro has been submitted for inclusion into #
-# GNU Autoconf as AC_PROG_SED. When it is available in #
-# a released version of Autoconf we should remove this #
-# macro and use it instead. #
-############################################################
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible. Prefer GNU sed if found.
-AC_DEFUN([LT_AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for lt_ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then
- lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
- fi
- done
- done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
- test ! -f $lt_ac_sed && continue
- cat /dev/null > conftest.in
- lt_ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >conftest.in
- # Check for GNU sed and select it if it is found.
- if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
- lt_cv_path_SED=$lt_ac_sed
- break
- fi
- while true; do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo >>conftest.nl
- $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
- cmp -s conftest.out conftest.nl || break
- # 10000 chars as input seems more than enough
- test $lt_ac_count -gt 10 && break
- lt_ac_count=`expr $lt_ac_count + 1`
- if test $lt_ac_count -gt $lt_ac_max; then
- lt_ac_max=$lt_ac_count
- lt_cv_path_SED=$lt_ac_sed
- fi
- done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])
diff --git a/contrib/bind9/libtool.m4/libtool.m4 b/contrib/bind9/libtool.m4/libtool.m4
new file mode 100644
index 000000000000..44e0ecff11e3
--- /dev/null
+++ b/contrib/bind9/libtool.m4/libtool.m4
@@ -0,0 +1,7982 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_REPLACE_SHELLFNS
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case "$ECHO" in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[ --with-sysroot[=DIR] Search for dependent libraries within DIR
+ (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+ if test "$GCC" = yes; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([${with_sysroot}])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -eq 0; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -ne 0; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='${libname}.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec="$LIB"
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test "$GCC" != yes; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh
+ # decide which to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t@_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global defined
+ # symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS="$save_LDFLAGS"])
+ if test "$lt_cv_irix_exported_symbol" = yes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl*)
+ # Native MSVC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test "$pre_test_object_deps_done" = no; then
+ case ${prev} in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+ CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+ func_split_long_opt_name=${1%%=*}
+ func_split_long_opt_arg=${1#*=}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
+
+ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
+
+ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+ func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+ eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+ # Save a `func_append' function call where possible by direct use of '+='
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+else
+ # Save a `func_append' function call even when '+=' is not available
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/contrib/bind9/libtool.m4/ltoptions.m4 b/contrib/bind9/libtool.m4/ltoptions.m4
new file mode 100644
index 000000000000..5d9acd8e23bc
--- /dev/null
+++ b/contrib/bind9/libtool.m4/ltoptions.m4
@@ -0,0 +1,384 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/contrib/bind9/libtool.m4/ltsugar.m4 b/contrib/bind9/libtool.m4/ltsugar.m4
new file mode 100644
index 000000000000..9000a057d31d
--- /dev/null
+++ b/contrib/bind9/libtool.m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/contrib/bind9/libtool.m4/ltversion.m4 b/contrib/bind9/libtool.m4/ltversion.m4
new file mode 100644
index 000000000000..07a8602d48d6
--- /dev/null
+++ b/contrib/bind9/libtool.m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/contrib/bind9/ltmain.sh b/contrib/bind9/ltmain.sh
index ce02bc6ffaa2..16ddbf884b67 100644
--- a/contrib/bind9/ltmain.sh
+++ b/contrib/bind9/ltmain.sh
@@ -1,52 +1,90 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
+
+# libtool (GNU libtool) 2.4.2
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful, but
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-basename="s,^.*/,,g"
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-# The name of this program:
-progname=`echo "$progpath" | $SED $basename`
-modename="$progname"
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+# --config show all configuration variables
+# --debug enable verbose shell tracing
+# -n, --dry-run display commands without modifying any files
+# --features display basic configuration information and exit
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --no-quiet, --no-silent
+# print informational messages (default)
+# --no-warn don't display warning messages
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print more informational messages than default
+# --no-verbose don't print the extra informational messages
+# --version print version information
+# -h, --help, --help-all print short, long, or detailed help message
+#
+# MODE must be one of the following:
+#
+# clean remove files from the build directory
+# compile compile a source file into a libtool object
+# execute automatically set library path, then run a program
+# finish complete the installation of libtool libraries
+# install install libraries or executables
+# link create a library or an executable
+# uninstall remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE. When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool) 2.4.2
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
-PROGRAM=ltmain.sh
+PROGRAM=libtool
PACKAGE=libtool
-VERSION=1.5.26
-TIMESTAMP=" (1.1220.2.492 2008/01/30 06:40:56)"
+VERSION=2.4.2
+TIMESTAMP=""
+package_revision=1.3337
-# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
+# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
@@ -60,104 +98,457 @@ fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit $EXIT_SUCCESS
-fi
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- SP2NL='tr \040 \012'
- NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- SP2NL='tr \100 \n'
- NL2SP='tr \r\n \100\100'
- ;;
-esac
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-lt_env=
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
do
eval "if test \"\${$lt_var+set}\" = set; then
- save_$lt_var=\$$lt_var
- lt_env=\"$lt_var=\$$lt_var \$lt_env\"
- $lt_var=C
+ save_$lt_var=\$$lt_var
+ $lt_var=C
export $lt_var
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
fi"
done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
-if test -n "$lt_env"; then
- lt_env="env $lt_env"
-fi
+$lt_unset CDPATH
+
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
# Make sure IFS has a sensible default
lt_nl='
'
IFS=" $lt_nl"
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- $echo "$modename: not configured to build any kind of library" 1>&2
- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit $EXIT_FAILURE
-fi
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-duplicate_deps=no
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+ func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+ s@/\./@/@g
+ t dotsl
+ s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+# value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test "$func_normal_abspath_tpath" = / ; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result" ; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+# value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=${func_dirname_result}
+ if test "x$func_relative_path_tlibdir" = x ; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test "x$func_stripname_result" != x ; then
+ func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+ fi
+
+ # Normalisation. If bindir is libdir, return empty string,
+ # else relative path ending with a slash; either way, target
+ # file name can be directly appended.
+ if test ! -z "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result/"
+ func_relative_path_result=$func_stripname_result
+ fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=$func_dirname_result
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
# func_mktempdir [string]
# Make a temporary directory that won't clash with other running
@@ -167,7 +558,7 @@ func_mktempdir ()
{
my_template="${TMPDIR-/tmp}/${1-$progname}"
- if test "$run" = ":"; then
+ if test "$opt_dry_run" = ":"; then
# Return a directory name, but don't create it in dry-run mode
my_tmpdir="${my_template}-$$"
else
@@ -176,71 +567,804 @@ func_mktempdir ()
my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
if test ! -d "$my_tmpdir"; then
- # Failing that, at least try and use $RANDOM to avoid a race
- my_tmpdir="${my_template}-${RANDOM-0}$$"
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
- save_mktempdir_umask=`umask`
- umask 0077
- $mkdir "$my_tmpdir"
- umask $save_mktempdir_umask
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$my_tmpdir"
+ umask $save_mktempdir_umask
fi
# If we're not in dry-run mode, bomb out on failure
- test -d "$my_tmpdir" || {
- $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
- exit $EXIT_FAILURE
- }
+ test -d "$my_tmpdir" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
fi
- $echo "X$my_tmpdir" | $Xsed
+ $ECHO "$my_tmpdir"
}
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-func_win32_libid ()
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
{
- win32_libid_type="unknown"
- win32_fileres=`file -L $1 2>/dev/null`
- case $win32_fileres in
- *ar\ archive\ import\ library*) # definitely import
- win32_libid_type="x86 archive import"
- ;;
- *ar\ archive*) # could be an import, or static
- if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
- $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
- win32_nmres=`eval $NM -f posix -A $1 | \
- $SED -n -e '1,100{
- / I /{
- s,.*,import,
- p
- q
- }
- }'`
- case $win32_nmres in
- import*) win32_libid_type="x86 archive import";;
- *) win32_libid_type="x86 archive static";;
- esac
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "$1" | $SED \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$lt_user_locale
+ $my_cmd"
+ my_status=$?
+ eval "$lt_safe_locale"
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
;;
- *DLL*)
- win32_libid_type="x86 DLL"
+ * )
+ func_tr_sh_result=$1
;;
- *executable*) # but shell scripts are "executable" too...
- case $win32_fileres in
- *MS\ Windows\ PE\ Intel*)
- win32_libid_type="x86 DLL"
+ esac
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $opt_debug
+
+ $SED -n '/(C)/!b go
+ :more
+ /\./!{
+ N
+ s/\n# / /
+ b more
+ }
+ :go
+ /^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $opt_debug
+
+ $SED -n '/^# Usage:/,/^# *.*--help/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ echo
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+ $opt_debug
+
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ :print
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
+ p
+ d
+ }
+ /^# .* home page:/b print
+ /^# General help using/b print
+ ' < "$progpath"
+ ret=$?
+ if test -z "$1"; then
+ exit $ret
+ fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $opt_debug
+
+ func_error "missing argument for $1."
+ exit_cmd=exit
+}
+
+
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+ my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+ my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+ func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+ func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+ my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+ my_sed_long_arg='1s/^--[^=]*=//'
+
+ func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+ func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+nonopt=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+ func_quote_for_eval "${2}"
+ eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly. This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+ # this just eases exit handling
+ while test $# -gt 0; do
+ opt="$1"
+ shift
+ case $opt in
+ --debug|-x) opt_debug='set -x'
+ func_echo "enabling shell trace mode"
+ $opt_debug
+ ;;
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+ --config)
+ opt_config=:
+func_config
+ ;;
+ --dlopen|-dlopen)
+ optarg="$1"
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
+ shift
+ ;;
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=:
+ ;;
+ --features)
+ opt_features=:
+func_features
+ ;;
+ --finish)
+ opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ --help)
+ opt_help=:
+ ;;
+ --help-all)
+ opt_help_all=:
+opt_help=': help-all'
+ ;;
+ --mode)
+ test $# = 0 && func_missing_arg $opt && break
+ optarg="$1"
+ opt_mode="$optarg"
+case $optarg in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+esac
+ shift
+ ;;
+ --no-silent|--no-quiet)
+ opt_silent=false
+func_append preserve_args " $opt"
+ ;;
+ --no-warning|--no-warn)
+ opt_warning=false
+func_append preserve_args " $opt"
+ ;;
+ --no-verbose)
+ opt_verbose=false
+func_append preserve_args " $opt"
+ ;;
+ --silent|--quiet)
+ opt_silent=:
+func_append preserve_args " $opt"
+ opt_verbose=false
+ ;;
+ --verbose|-v)
+ opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+ ;;
+ --tag)
+ test $# = 0 && func_missing_arg $opt && break
+ optarg="$1"
+ opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+ --version) func_version ;;
+
+ # Separate optargs to long options:
+ --*=*)
+ func_split_long_opt "$opt"
+ set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-n*|-v*)
+ func_split_short_opt "$opt"
+ set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) break ;;
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+ *) set dummy "$opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
+ # Validate options:
+
+ # save first non-option argument
+ if test "$#" -gt 0; then
+ nonopt="$opt"
+ shift
+ fi
+
+ # preserve --debug
+ test "$opt_debug" = : || func_append preserve_args " --debug"
+
+ case $host in
+ *cygwin* | *mingw* | *pw32* | *cegcc*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+ ;;
+ esac
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$opt_mode' for more information."
+ }
+
+
+ # Bail if the options were screwed
+ $exit_cmd $EXIT_FAILURE
+}
+
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
;;
esac
- $echo $win32_libid_type
}
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case "$lt_sysroot:$1" in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result="=$func_stripname_result"
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
# func_infer_tag arg
# Infer tagged configuration to use if any are available and
@@ -250,9 +1374,11 @@ func_win32_libid ()
# arg is usually of the form 'gcc ...'
func_infer_tag ()
{
+ $opt_debug
+
# FreeBSD-specific: where we install compilers with non-standard names
- tag_compilers_CC="*cc cc* *gcc gcc*"
- tag_compilers_CXX="*c++ c++* *g++ g++*"
+ tag_compilers_CC="*cc cc* *gcc gcc* clang"
+ tag_compilers_CXX="*c++ c++* *g++ g++* clang++"
base_compiler=`set -- "$@"; echo $1`
# If $tagname isn't set, then try to infer if the default "CC" tag applies
@@ -267,36 +1393,32 @@ func_infer_tag ()
if test -n "$available_tags" && test -z "$tagname"; then
CC_quoted=
for arg in $CC; do
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- CC_quoted="$CC_quoted $arg"
+ func_append_quoted CC_quoted "$arg"
done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
case $@ in
# Blanks in the command may have been stripped by the calling shell,
# but not from the CC environment variable when configure was run.
- " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
# Blanks at the start of $base_compile will cause this to fail
# if we don't check for them as well.
*)
for z in $available_tags; do
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
# Evaluate the configuration.
eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
CC_quoted=
for arg in $CC; do
- # Double-quote args containing other shell metacharacters.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- CC_quoted="$CC_quoted $arg"
- done
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
case "$@ " in
- " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
# The compiler in the base compile command matches
# the one in the tagged configuration.
# Assume this is the tagged configuration we want.
@@ -325,11 +1447,10 @@ func_infer_tag ()
# was found and let the user know that the "--tag" command
# line option must be used.
if test -z "$tagname"; then
- $echo "$modename: unable to infer tagged configuration"
- $echo "$modename: specify a tag with \`--tag'" 1>&2
- exit $EXIT_FAILURE
-# else
-# $echo "$modename: using $tagname tagged configuration"
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
fi
;;
esac
@@ -337,354 +1458,528 @@ func_infer_tag ()
}
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
{
- f_ex_an_ar_dir="$1"; shift
- f_ex_an_ar_oldlib="$1"
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
- $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
- $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
- if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
- :
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
else
- $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
- exit $EXIT_FAILURE
+ write_oldobj=none
fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
}
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
{
- my_gentop="$1"; shift
- my_oldlibs=${1+"$@"}
- my_oldobjs=""
- my_xlib=""
- my_xabs=""
- my_xdir=""
- my_status=""
-
- $show "${rm}r $my_gentop"
- $run ${rm}r "$my_gentop"
- $show "$mkdir $my_gentop"
- $run $mkdir "$my_gentop"
- my_status=$?
- if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
- exit $my_status
+ $opt_debug
+ func_convert_core_file_wine_to_w32_result="$1"
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$lt_sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
- for my_xlib in $my_oldlibs; do
- # Extract the objects.
- case $my_xlib in
- [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
- *) my_xabs=`pwd`"/$my_xlib" ;;
- esac
- my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
- my_xlib_u=$my_xlib
- while :; do
- case " $extracted_archives " in
- *" $my_xlib_u "*)
- extracted_serial=`expr $extracted_serial + 1`
- my_xlib_u=lt$extracted_serial-$my_xlib ;;
- *) break ;;
- esac
- done
- extracted_archives="$extracted_archives $my_xlib_u"
- my_xdir="$my_gentop/$my_xlib_u"
- $show "${rm}r $my_xdir"
- $run ${rm}r "$my_xdir"
- $show "$mkdir $my_xdir"
- $run $mkdir "$my_xdir"
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
- exit $exit_status
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $opt_debug
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=""
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
fi
- case $host in
- *-darwin*)
- $show "Extracting $my_xabs"
- # Do not bother doing anything if just a dry run
- if test -z "$run"; then
- darwin_orig_dir=`pwd`
- cd $my_xdir || exit $?
- darwin_archive=$my_xabs
- darwin_curdir=`pwd`
- darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
- darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
- if test -n "$darwin_arches"; then
- darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
- darwin_arch=
- $show "$darwin_base_archive has multiple architectures $darwin_arches"
- for darwin_arch in $darwin_arches ; do
- mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
- cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
- func_extract_an_archive "`pwd`" "${darwin_base_archive}"
- cd "$darwin_curdir"
- $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
- done # $darwin_arches
- ## Okay now we have a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
- darwin_file=
- darwin_files=
- for darwin_file in $darwin_filelist; do
- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
- lipo -create -output "$darwin_file" $darwin_files
- done # $darwin_filelist
- ${rm}r unfat-$$
- cd "$darwin_orig_dir"
- else
- cd "$darwin_orig_dir"
- func_extract_an_archive "$my_xdir" "$my_xabs"
- fi # $darwin_arches
- fi # $run
- ;;
- *)
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
- esac
- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
done
- func_extract_archives_result="$my_oldobjs"
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $opt_debug
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+ fi
}
-# End of Shell function definitions
-#####################################
+#end: func_cygpath
-# Darwin sucks
-eval std_shrext=\"$shrext_cmds\"
-disable_libs=no
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $opt_debug
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
- arg="$1"
- shift
- case $arg in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $opt_debug
+ if test -z "$2" && test -n "$1" ; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " \`$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result="$1"
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $opt_debug
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " \`$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result="$3"
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $opt_debug
+ case $4 in
+ $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+ ;;
esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- execute_dlfiles)
- execute_dlfiles="$execute_dlfiles $arg"
- ;;
- tag)
- tagname="$arg"
- preserve_args="${preserve_args}=$arg"
-
- # Check whether tagname contains only valid characters
- case $tagname in
- *[!-_A-Za-z0-9,/]*)
- $echo "$progname: invalid tag name: $tagname" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- case $tagname in
- CC)
- # Don't test for the "default" C tag, as we know, it's there, but
- # not specially marked.
- ;;
- *)
- if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
- taglist="$taglist $tagname"
- # Evaluate the configuration.
- eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
- else
- $echo "$progname: ignoring unknown tag $tagname" 1>&2
- fi
- ;;
- esac
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $opt_debug
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $opt_debug
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
;;
*)
- eval "$prev=\$arg"
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
;;
- esac
+ esac
+}
+# end func_to_tool_file
- prev=
- prevopt=
- continue
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result="$func_convert_core_msys_to_w32_result"
fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
- # Have we seen a non-optional argument yet?
- case $arg in
- --help)
- show_help=yes
- ;;
- --version)
- echo "\
-$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
-Copyright (C) 2008 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- exit $?
- ;;
- --config)
- ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
- # Now print the configurations for the tags.
- for tagname in $taglist; do
- ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
- done
- exit $?
- ;;
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
- --debug)
- $echo "$progname: enabling shell trace mode"
- set -x
- preserve_args="$preserve_args $arg"
- ;;
- --dry-run | -n)
- run=:
- ;;
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result="$func_cygpath_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
- --features)
- $echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- $echo "enable shared libraries"
- else
- $echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- $echo "enable static libraries"
- else
- $echo "disable static libraries"
- fi
- exit $?
- ;;
- --finish) mode="finish" ;;
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result="$func_cygpath_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
- --preserve-dup-deps) duplicate_deps="yes" ;;
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $opt_debug
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd="func_convert_path_${func_stripname_result}"
+ fi
+}
- --quiet | --silent)
- show=:
- preserve_args="$preserve_args $arg"
- ;;
- --tag)
- prevopt="--tag"
- prev=tag
- preserve_args="$preserve_args --tag"
- ;;
- --tag=*)
- set tag "$optarg" ${1+"$@"}
- shift
- prev=tag
- preserve_args="$preserve_args --tag"
- ;;
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $opt_debug
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
-fi
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
-case $disable_libs in
-no)
- ;;
-shared)
- build_libtool_libs=no
- build_old_libs=yes
- ;;
-static)
- build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
- ;;
-esac
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
-if test -z "$show_help"; then
- # Infer the operation mode.
- if test -z "$mode"; then
- $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
- $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
- case $nonopt in
- *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
- mode=link
- for arg
- do
- case $arg in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result="$func_cygpath_result"
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
fi
+}
+# end func_convert_path_msys_to_cygwin
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result="$func_cygpath_result"
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
fi
+}
+# end func_convert_path_nix_to_cygwin
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
- # These modes are in order of execution frequency so that they run quickly.
- case $mode in
- # libtool compile mode
- compile)
- modename="$modename: compile"
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
# Get the compilation command and the source file.
base_compile=
srcfile="$nonopt" # always keep a non-empty value in "srcfile"
@@ -693,6 +1988,7 @@ if test -z "$show_help"; then
arg_mode=normal
libobj=
later=
+ pie_flag=
for arg
do
@@ -713,16 +2009,19 @@ if test -z "$show_help"; then
# Accept any command-line options.
case $arg in
-o)
- if test -n "$libobj" ; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit $EXIT_FAILURE
- fi
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
arg_mode=target
continue
;;
- -static | -prefer-pic | -prefer-non-pic)
- later="$later $arg"
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
continue
;;
@@ -737,31 +2036,24 @@ if test -z "$show_help"; then
;; # replaced later. I would guess that would be a bug.
-Wc,*)
- args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
lastarg=
save_ifs="$IFS"; IFS=','
- for arg in $args; do
+ for arg in $args; do
IFS="$save_ifs"
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- lastarg="$lastarg $arg"
+ func_append_quoted lastarg "$arg"
done
IFS="$save_ifs"
- lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
# Add the arguments to base_compile.
- base_compile="$base_compile $lastarg"
+ func_append base_compile " $lastarg"
continue
;;
- * )
+ *)
# Accept the current argument as the source file.
# The previous "srcfile" becomes the current argument.
#
@@ -773,66 +2065,41 @@ if test -z "$show_help"; then
esac # case $arg_mode
# Aesthetically quote the previous argument.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
- case $lastarg in
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, and some SunOS ksh mistreat backslash-escaping
- # in scan sets (worked around with variable expansion),
- # and furthermore cannot handle '|' '&' '(' ')' in scan sets
- # at all, so we specify them separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- lastarg="\"$lastarg\""
- ;;
- esac
-
- base_compile="$base_compile $lastarg"
+ func_append_quoted base_compile "$lastarg"
done # for arg
case $arg_mode in
arg)
- $echo "$modename: you must specify an argument for -Xcompile"
- exit $EXIT_FAILURE
+ func_fatal_error "you must specify an argument for -Xcompile"
;;
target)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "you must specify a target with \`-o'"
;;
*)
# Get the name of the library object.
- [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
;;
esac
# Recognize several different file suffixes.
# If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSifmso]'
case $libobj in
- *.ada) xform=ada ;;
- *.adb) xform=adb ;;
- *.ads) xform=ads ;;
- *.asm) xform=asm ;;
- *.c++) xform=c++ ;;
- *.cc) xform=cc ;;
- *.ii) xform=ii ;;
- *.class) xform=class ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.[fF][09]?) xform=[fF][09]. ;;
- *.for) xform=for ;;
- *.java) xform=java ;;
- *.obj) xform=obj ;;
- *.sx) xform=sx ;;
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
esac
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
case $libobj in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
*)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
;;
esac
@@ -840,7 +2107,15 @@ if test -z "$show_help"; then
for arg in $later; do
case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
-static)
+ build_libtool_libs=no
build_old_libs=yes
continue
;;
@@ -857,28 +2132,17 @@ if test -z "$show_help"; then
esac
done
- qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
- case $qlibobj in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qlibobj="\"$qlibobj\"" ;;
- esac
- test "X$libobj" != "X$qlibobj" \
- && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \
- && $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
- objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir=
- else
- xdir=$xdir/
- fi
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname="$func_basename_result"
+ xdir="$func_dirname_result"
lobj=${xdir}$objdir/$objname
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
# Delete any leftover library objects.
if test "$build_old_libs" = yes; then
@@ -887,12 +2151,9 @@ if test -z "$show_help"; then
removelist="$lobj $libobj ${libobj}T"
fi
- $run $rm $removelist
- trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-
# On Cygwin there's no "real" PIC flag so we must build both object types
case $host_os in
- cygwin* | mingw* | pw32* | os2*)
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
pic_mode=default
;;
esac
@@ -904,10 +2165,8 @@ if test -z "$show_help"; then
# Calculate the filename of the output object if compiler does
# not support -o with -c
if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
lockfile="$output_obj.lock"
- removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
else
output_obj=
need_locks=no
@@ -917,13 +2176,13 @@ if test -z "$show_help"; then
# Lock this critical section if it is needed
# We use this script file to make the link, it avoids creating a new file
if test "$need_locks" = yes; then
- until $run ln "$progpath" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
sleep 2
done
elif test "$need_locks" = warn; then
if test -f "$lockfile"; then
- $echo "\
+ $ECHO "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`
@@ -934,34 +2193,21 @@ repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
- $run $rm $removelist
+ $opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
- $echo "$srcfile" > "$lockfile"
- fi
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
fi
- qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
- case $qsrcfile in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qsrcfile="\"$qsrcfile\"" ;;
- esac
- $run $rm "$libobj" "${libobj}T"
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
- # Create a libtool object file (analogous to a ".la" file),
- # but don't create it if we're doing a dry run.
- test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
# Only build a PIC object if we are building libtool libraries.
if test "$build_libtool_libs" = yes; then
@@ -975,32 +2221,19 @@ EOF
command="$base_compile $qsrcfile"
fi
- if test ! -d "${xdir}$objdir"; then
- $show "$mkdir ${xdir}$objdir"
- $run $mkdir ${xdir}$objdir
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
- exit $exit_status
- fi
- fi
+ func_mkdir_p "$xdir$objdir"
if test -z "$output_obj"; then
# Place PIC objects in $objdir
- command="$command -o $lobj"
+ func_append command " -o $lobj"
fi
- $run $rm "$lobj" "$output_obj"
-
- $show "$command"
- if $run eval $lt_env "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit $EXIT_FAILURE
- fi
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
if test "$need_locks" = warn &&
test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $echo "\
+ $ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
@@ -1014,65 +2247,42 @@ repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
- $run $rm $removelist
+ $opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
# Just move the object if needed, then go on to compile the next one
if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
- $show "$mv $output_obj $lobj"
- if $run $mv $output_obj $lobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
fi
- # Append the name of the PIC object to the libtool object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
# Allow error messages only from the first compilation.
if test "$suppress_opt" = yes; then
- suppress_output=' >/dev/null 2>&1'
+ suppress_output=' >/dev/null 2>&1'
fi
- else
- # No PIC object so indicate it doesn't exist in the libtool
- # object file.
- test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
fi
# Only build a position-dependent object if we build old libraries.
if test "$build_old_libs" = yes; then
if test "$pic_mode" != yes; then
# Don't build PIC code
- command="$base_compile $qsrcfile"
+ command="$base_compile $qsrcfile$pie_flag"
else
command="$base_compile $qsrcfile $pic_flag"
fi
if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
+ func_append command " -o $obj"
fi
# Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- $run $rm "$obj" "$output_obj"
- $show "$command"
- if $run eval $lt_env "$command"; then :
- else
- $run $rm $removelist
- exit $EXIT_FAILURE
- fi
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
if test "$need_locks" = warn &&
test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $echo "\
+ $ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
@@ -1086,53 +2296,2838 @@ repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
- $run $rm $removelist
+ $opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
# Just move the object if needed
if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test "$opt_help" = :; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | sed -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ sed '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
else
- error=$?
- $run $rm $removelist
- exit $error
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
fi
+ done
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
-EOF
- else
- # Append the name of the non-PIC object the libtool object file.
- # Only append if the libtool object file exists.
- test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
-EOF
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
fi
+}
- $run $mv "${libobj}T" "${libobj}"
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "\`$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument \`$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
fi
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
exit $EXIT_SUCCESS
+}
+
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ func_append install_prog "$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test "x$prev" = x-m && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ func_append install_prog " $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_for_eval_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir="$func_dirname_result"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_verbose "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=""
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname" ; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename="$func_basename_result"
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename" ; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *-*-freebsd*)
+ # FreeBSD doesn't need this...
+ ;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $opt_debug
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s,.*,import,
+ p
+ q
+ }
+ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
- # libtool link mode
- link | relink)
- modename="$modename: link"
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $opt_debug
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $opt_debug
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive which possess that section. Heuristic: eliminate
+ # all those which have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $opt_debug
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $opt_debug
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $opt_debug
+ if func_cygming_gnu_implib_p "$1" ; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1" ; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=""
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ if test "$lock_old_archive_extraction" = yes; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test "$lock_old_archive_extraction" = yes; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename "$darwin_archive"`
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=\"$qECHO\"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+# define _INTPTR_T_DEFINED
+# define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test "$fast_install" = yes; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ intptr_t rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (strcmp (argv[i], debug_opt) == 0)
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp (str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ int len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ int orig_value_len = strlen (orig_value);
+ int add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ int len = strlen (new_value);
+ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[len-1] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $opt_debug
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
# It is impossible to link a dll without this setting, and
# we shouldn't force the makefile maintainer to figure out
# which system we are compiling for in order to pass an extra
@@ -1150,10 +5145,10 @@ EOF
allow_undefined=yes
;;
esac
- libtool_args="$nonopt"
+ libtool_args=$nonopt
base_compile="$nonopt $@"
- compile_command="$nonopt"
- finalize_command="$nonopt"
+ compile_command=$nonopt
+ finalize_command=$nonopt
compile_rpath=
finalize_rpath=
@@ -1168,8 +5163,10 @@ EOF
dllsearchpath=
lib_search_path=`pwd`
inst_prefix_dir=
+ new_inherited_linker_flags=
avoid_version=no
+ bindir=
dlfiles=
dlprefiles=
dlself=no
@@ -1183,7 +5180,6 @@ EOF
no_install=no
objs=
non_pic_objects=
- notinst_path= # paths that contain not-installed libtool libraries
precious_files_regex=
prefer_static_libs=no
preload=no
@@ -1197,19 +5193,25 @@ EOF
thread_safe=no
vinfo=
vinfo_number=no
+ weak_libs=
single_module="${wl}-single_module"
-
func_infer_tag $base_compile
# We need to know -static, to get the right output filenames.
for arg
do
case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
-all-static | -static | -static-libtool-libs)
case $arg in
-all-static)
if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ func_warning "complete static linking is impossible in this configuration"
fi
if test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
@@ -1243,29 +5245,30 @@ EOF
while test "$#" -gt 0; do
arg="$1"
shift
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
- ;;
- *) qarg=$arg ;;
- esac
- libtool_args="$libtool_args $qarg"
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
case $prev in
output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
;;
esac
case $prev in
+ bindir)
+ bindir="$arg"
+ prev=
+ continue
+ ;;
dlfiles|dlprefiles)
if test "$preload" = no; then
# Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
preload=yes
fi
case $arg in
@@ -1292,9 +5295,9 @@ EOF
;;
*)
if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
+ func_append dlfiles " $arg"
else
- dlprefiles="$dlprefiles $arg"
+ func_append dlprefiles " $arg"
fi
prev=
continue
@@ -1303,10 +5306,8 @@ EOF
;;
expsyms)
export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit $EXIT_FAILURE
- fi
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
prev=
continue
;;
@@ -1315,18 +5316,21 @@ EOF
prev=
continue
;;
- inst_prefix)
- inst_prefix_dir="$arg"
- prev=
- continue
- ;;
- precious_regex)
- precious_files_regex="$arg"
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
prev=
continue
;;
- release)
- release="-$arg"
+ inst_prefix)
+ inst_prefix_dir="$arg"
prev=
continue
;;
@@ -1334,39 +5338,30 @@ EOF
if test -f "$arg"; then
save_arg=$arg
moreargs=
- for fil in `cat $save_arg`
+ for fil in `cat "$save_arg"`
do
-# moreargs="$moreargs $fil"
+# func_append moreargs " $fil"
arg=$fil
# A libtool-controlled object.
# Check to see that this really is a libtool object.
- if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if func_lalib_unsafe_p "$arg"; then
pic_object=
non_pic_object=
# Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
+ func_source "$arg"
- if test -z "$pic_object" || \
+ if test -z "$pic_object" ||
test -z "$non_pic_object" ||
- test "$pic_object" = none && \
+ test "$pic_object" = none &&
test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot find name of object for \`$arg'"
fi
# Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
if test "$pic_object" != none; then
# Prepend the subdirectory the object is found in.
@@ -1374,7 +5369,7 @@ EOF
if test "$prev" = dlfiles; then
if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
+ func_append dlfiles " $pic_object"
prev=
continue
else
@@ -1386,12 +5381,12 @@ EOF
# CHECK ME: I think I busted this. -Ossama
if test "$prev" = dlprefiles; then
# Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
+ func_append dlprefiles " $pic_object"
prev=
fi
# A PIC object.
- libobjs="$libobjs $pic_object"
+ func_append libobjs " $pic_object"
arg="$pic_object"
fi
@@ -1401,7 +5396,7 @@ EOF
non_pic_object="$xdir$non_pic_object"
# A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
+ func_append non_pic_objects " $non_pic_object"
if test -z "$pic_object" || test "$pic_object" = none ; then
arg="$non_pic_object"
fi
@@ -1409,95 +5404,95 @@ EOF
# If the PIC object exists, use it instead.
# $xdir was prepended to $pic_object above.
non_pic_object="$pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
+ func_append non_pic_objects " $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit $EXIT_FAILURE
- else
- # Dry-run case.
-
+ if $opt_dry_run; then
# Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
fi
fi
done
else
- $echo "$modename: link input file \`$save_arg' does not exist"
- exit $EXIT_FAILURE
+ func_fatal_error "link input file \`$arg' does not exist"
fi
arg=$save_arg
prev=
continue
;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
rpath | xrpath)
# We need an absolute path.
case $arg in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "only absolute run-paths are allowed"
;;
esac
if test "$prev" = rpath; then
case "$rpath " in
*" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
+ *) func_append rpath " $arg" ;;
esac
else
case "$xrpath " in
*" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
+ *) func_append xrpath " $arg" ;;
esac
fi
prev=
continue
;;
- xcompiler)
- compiler_flags="$compiler_flags $qarg"
+ shrext)
+ shrext_cmds="$arg"
prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
continue
;;
- xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
+ weak)
+ func_append weak_libs " $arg"
prev=
- compile_command="$compile_command $wl$qarg"
- finalize_command="$finalize_command $wl$qarg"
continue
;;
xcclinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $qarg"
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
continue
;;
- shrext)
- shrext_cmds="$arg"
+ xcompiler)
+ func_append compiler_flags " $qarg"
prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
continue
;;
- darwin_framework|darwin_framework_skip)
- test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
continue
;;
*)
@@ -1513,16 +5508,16 @@ EOF
case $arg in
-all-static)
if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
fi
continue
;;
-allow-undefined)
# FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
;;
-avoid-version)
@@ -1530,6 +5525,11 @@ EOF
continue
;;
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
-dlopen)
prev=dlfiles
continue
@@ -1547,8 +5547,7 @@ EOF
-export-symbols | -export-symbols-regex)
if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: more than one -exported-symbols argument is not allowed"
- exit $EXIT_FAILURE
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
fi
if test "X$arg" = "X-export-symbols"; then
prev=expsyms
@@ -1558,15 +5557,8 @@ EOF
continue
;;
- -framework|-arch|-isysroot)
- case " $CC " in
- *" ${arg} ${1} "* | *" ${arg} ${1} "*)
- prev=darwin_framework_skip ;;
- *) compiler_flags="$compiler_flags $arg"
- prev=darwin_framework ;;
- esac
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ -framework)
+ prev=framework
continue
;;
@@ -1580,55 +5572,70 @@ EOF
-L[A-Z][A-Z]*:*)
case $with_gcc/$host in
no/*-*-irix* | /*-*-irix*)
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
;;
esac
continue
;;
-L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between \`-L' and \`$1'"
+ else
+ func_fatal_error "need path for \`-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- notinst_path="$notinst_path $dir"
- fi
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
dir="$absdir"
;;
esac
case "$deplibs " in
- *" -L$dir "*) ;;
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
*)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
;;
esac
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$dir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dir";;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
esac
case :$dllsearchpath: in
*":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
esac
;;
esac
+ deplibs="$deplibs $arg"
continue
;;
-l*)
if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
# These systems don't actually have a C or math library (as such)
continue
;;
@@ -1642,7 +5649,7 @@ EOF
;;
*-*-rhapsody* | *-*-darwin1.[012])
# Rhapsody C and math libraries are in the System framework
- deplibs="$deplibs -framework System"
+ func_append deplibs " System.ltframework"
continue
;;
*-*-sco3.2v5* | *-*-sco5v6*)
@@ -1662,25 +5669,35 @@ EOF
;;
esac
fi
- deplibs="$deplibs $arg"
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
continue
;;
# Tru64 UNIX uses -model [arg] to determine the layout of C++
# classes, name mangling, and exception handling.
- -model)
- compile_command="$compile_command $arg"
- compiler_flags="$compiler_flags $arg"
- finalize_command="$finalize_command $arg"
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
prev=xcompiler
continue
;;
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
- compiler_flags="$compiler_flags $arg"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- deplibs="$deplibs $arg"
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
continue
;;
@@ -1689,44 +5706,6 @@ EOF
continue
;;
- -module)
- module=yes
- continue
- ;;
-
- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
- # -r[0-9][0-9]* specifies the processor on the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
- # +DA*, +DD* enable 64-bit mode on the HP compiler
- # -q* pass through compiler args for the IBM compiler
- # -m* pass through architecture-specific compiler args for GCC
- # -m*, -t[45]*, -txscale* pass through architecture-specific
- # compiler args for GCC
- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
- # -F/path gives path to uninstalled frameworks, gcc on darwin
- # @file GCC response files
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
-
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- compiler_flags="$compiler_flags $arg"
- continue
- ;;
-
- -shrext)
- prev=shrext
- continue
- ;;
-
-no-fast-install)
fast_install=no
continue
@@ -1734,11 +5713,11 @@ EOF
-no-install)
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
# The PATH hackery in wrapper scripts is required on Windows
# and Darwin in order for the loader to find any dlls it needs.
- $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
- $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
fast_install=no
;;
*) no_install=yes ;;
@@ -1779,22 +5758,36 @@ EOF
;;
-R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
*)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "only absolute run-paths are allowed"
;;
esac
case "$xrpath " in
*" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
+ *) func_append xrpath " $dir" ;;
esac
continue
;;
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
-static | -static-libtool-libs)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
@@ -1813,47 +5806,49 @@ EOF
prev=vinfo
continue
;;
+
-version-number)
prev=vinfo
vinfo_number=yes
continue
;;
+ -weak)
+ prev=weak
+ continue
+ ;;
+
-Wc,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
arg=
save_ifs="$IFS"; IFS=','
for flag in $args; do
IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $flag"
+ func_quote_for_eval "$flag"
+ func_append arg " $func_quote_for_eval_result"
+ func_append compiler_flags " $func_quote_for_eval_result"
done
IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
;;
-Wl,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
arg=
save_ifs="$IFS"; IFS=','
for flag in $args; do
IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $wl$flag"
- linker_flags="$linker_flags $flag"
+ func_quote_for_eval "$flag"
+ func_append arg " $wl$func_quote_for_eval_result"
+ func_append compiler_flags " $wl$func_quote_for_eval_result"
+ func_append linker_flags " $func_quote_for_eval_result"
done
IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
;;
-Xcompiler)
@@ -1871,53 +5866,68 @@ EOF
continue
;;
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
# Some other compiler flag.
-* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
;;
*.$objext)
# A standard object.
- objs="$objs $arg"
+ func_append objs " $arg"
;;
*.lo)
# A libtool-controlled object.
# Check to see that this really is a libtool object.
- if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if func_lalib_unsafe_p "$arg"; then
pic_object=
non_pic_object=
# Read the .lo file
- # If there is no directory component, then add one.
- case $arg in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
- esac
+ func_source "$arg"
- if test -z "$pic_object" || \
+ if test -z "$pic_object" ||
test -z "$non_pic_object" ||
- test "$pic_object" = none && \
+ test "$pic_object" = none &&
test "$non_pic_object" = none; then
- $echo "$modename: cannot find name of object for \`$arg'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot find name of object for \`$arg'"
fi
# Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
if test "$pic_object" != none; then
# Prepend the subdirectory the object is found in.
@@ -1925,7 +5935,7 @@ EOF
if test "$prev" = dlfiles; then
if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
+ func_append dlfiles " $pic_object"
prev=
continue
else
@@ -1937,12 +5947,12 @@ EOF
# CHECK ME: I think I busted this. -Ossama
if test "$prev" = dlprefiles; then
# Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
+ func_append dlprefiles " $pic_object"
prev=
fi
# A PIC object.
- libobjs="$libobjs $pic_object"
+ func_append libobjs " $pic_object"
arg="$pic_object"
fi
@@ -1952,7 +5962,7 @@ EOF
non_pic_object="$xdir$non_pic_object"
# A standard non-PIC object
- non_pic_objects="$non_pic_objects $non_pic_object"
+ func_append non_pic_objects " $non_pic_object"
if test -z "$pic_object" || test "$pic_object" = none ; then
arg="$non_pic_object"
fi
@@ -1960,52 +5970,47 @@ EOF
# If the PIC object exists, use it instead.
# $xdir was prepended to $pic_object above.
non_pic_object="$pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
+ func_append non_pic_objects " $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
- if test -z "$run"; then
- $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
- exit $EXIT_FAILURE
- else
- # Dry-run case.
-
+ if $opt_dry_run; then
# Extract subdirectory from the argument.
- xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$arg"; then
- xdir=
- else
- xdir="$xdir/"
- fi
-
- pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
- non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
- libobjs="$libobjs $pic_object"
- non_pic_objects="$non_pic_objects $non_pic_object"
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
fi
fi
;;
*.$libext)
# An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
continue
;;
*.la)
# A libtool-controlled library.
+ func_resolve_sysroot "$arg"
if test "$prev" = dlfiles; then
# This library was specified with -dlopen.
- dlfiles="$dlfiles $arg"
+ func_append dlfiles " $func_resolve_sysroot_result"
prev=
elif test "$prev" = dlprefiles; then
# The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
+ func_append dlprefiles " $func_resolve_sysroot_result"
prev=
else
- deplibs="$deplibs $arg"
+ func_append deplibs " $func_resolve_sysroot_result"
fi
continue
;;
@@ -2014,70 +6019,53 @@ EOF
*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
;;
esac # arg
# Now actually substitute the argument into the commands.
if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
fi
done # argument parsing loop
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
fi
oldlibs=
# calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ func_basename "$output"
+ outputname="$func_basename_result"
libobjs_save="$libobjs"
if test -n "$shlibpath_var"; then
# get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
else
shlib_search_path=
fi
eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
# Create the object directory.
- if test ! -d "$output_objdir"; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
- exit $exit_status
- fi
- fi
+ func_mkdir_p "$output_objdir"
# Determine the type of output
case $output in
"")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_help "you must specify an output file"
;;
*.$libext) linkmode=oldlib ;;
*.lo | *.$objext) linkmode=obj ;;
@@ -2085,27 +6073,18 @@ EOF
*) linkmode=prog ;; # Anything else should be a program.
esac
- case $host in
- *cygwin* | *mingw* | *pw32*)
- # don't eliminate duplications in $postdeps and $predeps
- duplicate_compiler_generated_deps=yes
- ;;
- *)
- duplicate_compiler_generated_deps=$duplicate_deps
- ;;
- esac
specialdeplibs=
libs=
# Find all interdependent deplibs by searching for libraries
# that are linked more than once (e.g. -la -lb -la)
for deplib in $deplibs; do
- if test "X$duplicate_deps" = "Xyes" ; then
+ if $opt_preserve_dup_deps ; then
case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
- libs="$libs $deplib"
+ func_append libs " $deplib"
done
if test "$linkmode" = lib; then
@@ -2115,12 +6094,12 @@ EOF
# $postdeps and mark them as special (i.e., whose duplicates are
# not to be eliminated).
pre_post_deps=
- if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+ if $opt_duplicate_compiler_generated_deps; then
for pre_post_dep in $predeps $postdeps; do
case "$pre_post_deps " in
- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
esac
- pre_post_deps="$pre_post_deps $pre_post_dep"
+ func_append pre_post_deps " $pre_post_dep"
done
fi
pre_post_deps=
@@ -2131,15 +6110,16 @@ EOF
newlib_search_path=
need_relink=no # whether we're linking any uninstalled libtool libraries
notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
case $linkmode in
lib)
- passes="conv link"
+ passes="conv dlpreopen link"
for file in $dlfiles $dlprefiles; do
case $file in
*.la) ;;
*)
- $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
;;
esac
done
@@ -2155,7 +6135,20 @@ EOF
*) passes="conv"
;;
esac
+
for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
if test "$linkmode,$pass" = "lib,link" ||
test "$linkmode,$pass" = "prog,scan"; then
libs="$deplibs"
@@ -2168,21 +6161,46 @@ EOF
link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
esac
fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ fi
if test "$pass" = dlopen; then
# Collect dlpreopened libraries
save_deplibs="$deplibs"
deplibs=
fi
+
for deplib in $libs; do
lib=
found=no
case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
if test "$linkmode,$pass" = "prog,link"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
- compiler_flags="$compiler_flags $deplib"
+ func_append compiler_flags " $deplib"
fi
case $linkmode in
@@ -2211,10 +6229,11 @@ EOF
;;
-l*)
if test "$linkmode" != lib && test "$linkmode" != prog; then
- $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+ func_warning "\`-l' is ignored for archives/objects"
continue
fi
- name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
if test "$linkmode" = lib; then
searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
else
@@ -2250,21 +6269,17 @@ EOF
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $deplib "*)
- if (${SED} -e '2q' $lib |
- grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if func_lalib_p "$lib"; then
library_names=
old_library=
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
+ func_source "$lib"
for l in $old_library $library_names; do
ll="$l"
done
if test "X$ll" = "X$old_library" ; then # only static version available
found=no
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
lib=$ladir/$old_library
if test "$linkmode,$pass" = "prog,link"; then
compile_deplibs="$deplib $compile_deplibs"
@@ -2276,19 +6291,36 @@ EOF
continue
fi
fi
- ;;
+ ;;
*) ;;
esac
fi
fi
;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
-L*)
case $linkmode in
lib)
deplibs="$deplib $deplibs"
test "$pass" = conv && continue
newdependency_libs="$deplib $newdependency_libs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
;;
prog)
if test "$pass" = conv; then
@@ -2301,27 +6333,34 @@ EOF
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
fi
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
;;
*)
- $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+ func_warning "\`-L' is ignored for archives/objects"
;;
esac # linkmode
continue
;; # -L
-R*)
if test "$pass" = link; then
- dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
# Make sure the xrpath contains only unique directories.
case "$xrpath " in
*" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
+ *) func_append xrpath " $dir" ;;
esac
fi
deplibs="$deplib $deplibs"
continue
;;
- *.la) lib="$deplib" ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
*.$libext)
if test "$pass" = conv; then
deplibs="$deplib $deplibs"
@@ -2329,35 +6368,41 @@ EOF
fi
case $linkmode in
lib)
- valid_a_lib=no
- case $deplibs_check_method in
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- if eval $echo \"$deplib\" 2>/dev/null \
- | $SED 10q \
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
| $EGREP "$match_pattern_regex" > /dev/null; then
- valid_a_lib=yes
- fi
+ valid_a_lib=yes
+ fi
;;
- pass_all)
- valid_a_lib=yes
+ pass_all)
+ valid_a_lib=yes
;;
- esac
- if test "$valid_a_lib" != yes; then
- $echo
- $echo "*** Warning: Trying to link with static lib archive $deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because the file extensions .$libext of this argument makes me believe"
- $echo "*** that it is just a static archive that I should not used here."
- else
- $echo
- $echo "*** Warning: Linking the shared library $output against the"
- $echo "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
+ esac
+ if test "$valid_a_lib" != yes; then
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
continue
;;
prog)
@@ -2378,11 +6423,11 @@ EOF
if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
# If there is no dlopen support or we're linking statically,
# we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
+ func_append newdlprefiles " $deplib"
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
- newdlfiles="$newdlfiles $deplib"
+ func_append newdlfiles " $deplib"
fi
fi
continue
@@ -2392,21 +6437,18 @@ EOF
continue
;;
esac # case $deplib
+
if test "$found" = yes || test -f "$lib"; then :
else
- $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
fi
# Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
dlname=
dlopen=
@@ -2414,6 +6456,7 @@ EOF
libdir=
library_names=
old_library=
+ inherited_linker_flags=
# If the library was installed with an old release of libtool,
# it will not redefine variables installed, or shouldnotlink
installed=yes
@@ -2422,16 +6465,24 @@ EOF
# Read the .la file
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
-
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
if test "$linkmode,$pass" = "lib,link" ||
test "$linkmode,$pass" = "prog,scan" ||
{ test "$linkmode" != prog && test "$linkmode" != lib; }; then
- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
fi
if test "$pass" = conv; then
@@ -2439,45 +6490,47 @@ EOF
deplibs="$lib $deplibs"
if test -z "$libdir"; then
if test -z "$old_library"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot find name of link library for \`$lib'"
fi
# It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if test "X$duplicate_deps" = "Xyes" ; then
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- fi
- tmp_libs="$tmp_libs $deplib"
- done
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
elif test "$linkmode" != prog && test "$linkmode" != lib; then
- $echo "$modename: \`$lib' is not a convenience library" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "\`$lib' is not a convenience library"
fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
continue
fi # $pass = conv
# Get the name of the library we link against.
linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
+ if test -n "$old_library" &&
+ { test "$prefer_static_libs" = yes ||
+ test "$prefer_static_libs,$installed" = "built,no"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ fi
if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot find name of link library for \`$lib'"
fi
# This library was specified with -dlopen.
if test "$pass" = dlopen; then
if test -z "$libdir"; then
- $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
- exit $EXIT_FAILURE
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
fi
if test -z "$dlname" ||
test "$dlopen_support" != yes ||
@@ -2486,9 +6539,9 @@ EOF
# statically, we need to preload. We also need to preload any
# dependent libraries so libltdl's deplib preloader doesn't
# bomb out in the load deplibs phase.
- dlprefiles="$dlprefiles $lib $dependency_libs"
+ func_append dlprefiles " $lib $dependency_libs"
else
- newdlfiles="$newdlfiles $lib"
+ func_append newdlfiles " $lib"
fi
continue
fi # $pass = dlopen
@@ -2499,24 +6552,25 @@ EOF
*)
abs_ladir=`cd "$ladir" && pwd`
if test -z "$abs_ladir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
abs_ladir="$ladir"
fi
;;
esac
- laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ func_basename "$lib"
+ laname="$func_basename_result"
# Find the relevant object directory and library name.
if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library \`$lib' was moved."
dir="$ladir"
absdir="$abs_ladir"
libdir="$abs_ladir"
else
- dir="$libdir"
- absdir="$libdir"
+ dir="$lt_sysroot$libdir"
+ absdir="$lt_sysroot$libdir"
fi
test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
else
@@ -2524,32 +6578,62 @@ EOF
dir="$ladir"
absdir="$abs_ladir"
# Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
+ func_append notinst_path " $abs_ladir"
else
dir="$ladir/$objdir"
absdir="$abs_ladir/$objdir"
# Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
+ func_append notinst_path " $abs_ladir"
fi
fi # $installed = yes
- name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
# This library was specified with -dlpreopen.
if test "$pass" = dlpreopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
- exit $EXIT_FAILURE
- fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$newdlprefiles $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
fi
+ case "$host" in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
fi # $pass = dlpreopen
if test -z "$libdir"; then
@@ -2567,7 +6651,7 @@ EOF
if test "$linkmode" = prog && test "$pass" != link; then
- newlib_search_path="$newlib_search_path $ladir"
+ func_append newlib_search_path " $ladir"
deplibs="$lib $deplibs"
linkalldeplibs=no
@@ -2579,7 +6663,10 @@ EOF
tmp_libs=
for deplib in $dependency_libs; do
case $deplib in
- -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
esac
# Need to link against all dependency_libs?
if test "$linkalldeplibs" = yes; then
@@ -2589,12 +6676,12 @@ EOF
# or/and link against static libraries
newdependency_libs="$deplib $newdependency_libs"
fi
- if test "X$duplicate_deps" = "Xyes" ; then
+ if $opt_preserve_dup_deps ; then
case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
- tmp_libs="$tmp_libs $deplib"
+ func_append tmp_libs " $deplib"
done # for deplib
continue
fi # $linkmode = prog...
@@ -2602,15 +6689,14 @@ EOF
if test "$linkmode,$pass" = "prog,link"; then
if test -n "$library_names" &&
{ { test "$prefer_static_libs" = no ||
- test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
test -z "$old_library"; }; then
# We need to hardcode the library path
if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
# Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $absdir" ;;
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
esac
fi
@@ -2622,7 +6708,7 @@ EOF
*)
case "$compile_rpath " in
*" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
+ *) func_append compile_rpath " $absdir" ;;
esac
;;
esac
@@ -2631,7 +6717,7 @@ EOF
*)
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
+ *) func_append finalize_rpath " $libdir" ;;
esac
;;
esac
@@ -2648,27 +6734,43 @@ EOF
link_static=no # Whether the deplib will be linked statically
use_static_libs=$prefer_static_libs
- if test "$use_static_libs" = built && test "$installed" = yes ; then
+ if test "$use_static_libs" = built && test "$installed" = yes; then
use_static_libs=no
fi
if test -n "$library_names" &&
{ test "$use_static_libs" = no || test -z "$old_library"; }; then
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
- fi
+ case $host in
+ *cygwin* | *mingw* | *cegcc*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
# This is a shared library
- # Warn about portability, can't link against -module's on
- # some systems (darwin)
- if test "$shouldnotlink" = yes && test "$pass" = link ; then
- $echo
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+ echo
if test "$linkmode" = prog; then
- $echo "*** Warning: Linking the executable $output against the loadable module"
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
else
- $echo "*** Warning: Linking the shared library $output against the loadable module"
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
fi
- $echo "*** $linklib is not portable!"
+ $ECHO "*** $linklib is not portable!"
fi
if test "$linkmode" = lib &&
test "$hardcode_into_libs" = yes; then
@@ -2680,7 +6782,7 @@ EOF
*)
case "$compile_rpath " in
*" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
+ *) func_append compile_rpath " $absdir" ;;
esac
;;
esac
@@ -2689,7 +6791,7 @@ EOF
*)
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
+ *) func_append finalize_rpath " $libdir" ;;
esac
;;
esac
@@ -2698,17 +6800,19 @@ EOF
if test -n "$old_archive_from_expsyms_cmds"; then
# figure out the soname
set dummy $library_names
- realname="$2"
- shift; shift
- libname=`eval \\$echo \"$libname_spec\"`
+ shift
+ realname="$1"
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
# use dlname if we got it. it's perfectly good, no?
if test -n "$dlname"; then
soname="$dlname"
elif test -n "$soname_spec"; then
# bleh windows
case $host in
- *cygwin* | mingw*)
- major=`expr $current - $age`
+ *cygwin* | mingw* | *cegcc*)
+ func_arith $current - $age
+ major=$func_arith_result
versuffix="-$major"
;;
esac
@@ -2719,43 +6823,29 @@ EOF
# Make a new name for the extract_expsyms_cmds to use
soroot="$soname"
- soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
- newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
# If the library has no export list, then create one now
if test -f "$output_objdir/$soname-def"; then :
else
- $show "extracting exported symbol list from \`$soname'"
- save_ifs="$IFS"; IFS='~'
- cmds=$extract_expsyms_cmds
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_verbose "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
fi
# Create $newlib
if test -f "$output_objdir/$newlib"; then :; else
- $show "generating import library for \`$soname'"
- save_ifs="$IFS"; IFS='~'
- cmds=$old_archive_from_expsyms_cmds
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_verbose "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
fi
# make sure the library variables are pointing to the new library
dir=$output_objdir
linklib=$newlib
fi # test -n "$old_archive_from_expsyms_cmds"
- if test "$linkmode" = prog || test "$mode" != relink; then
+ if test "$linkmode" = prog || test "$opt_mode" != relink; then
add_shlibpath=
add_dir=
add=
@@ -2770,17 +6860,21 @@ EOF
*-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
*-*-unixware7*) add_dir="-L$dir" ;;
*-*-darwin* )
- # if the lib is a module then we can not link against
- # it, someone is ignoring the new warnings I added
+ # if the lib is a (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
if /usr/bin/file -L $add 2> /dev/null |
- $EGREP ": [^:]* bundle" >/dev/null ; then
- $echo "** Warning, lib $linklib is a module, not a shared library"
- if test -z "$old_library" ; then
- $echo
- $echo "** And there doesn't seem to be a static archive available"
- $echo "** The link will probably fail, sorry"
- else
- add="$dir/$old_library"
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ elif test -n "$old_library"; then
+ add="$dir/$old_library"
fi
fi
esac
@@ -2798,15 +6892,16 @@ EOF
fi
;;
relink)
- if test "$hardcode_direct" = yes; then
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
add="$dir/$linklib"
elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
+ add_dir="-L$absdir"
# Try looking first in the location we're being installed to.
if test -n "$inst_prefix_dir"; then
case $libdir in
[\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ func_append add_dir " -L$inst_prefix_dir$libdir"
;;
esac
fi
@@ -2822,14 +6917,13 @@ EOF
esac
if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit $EXIT_FAILURE
+ func_fatal_configuration "unsupported hardcode properties"
fi
if test -n "$add_shlibpath"; then
case :$compile_shlibpath: in
*":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
esac
fi
if test "$linkmode" = prog; then
@@ -2838,23 +6932,24 @@ EOF
else
test -n "$add_dir" && deplibs="$add_dir $deplibs"
test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
+ if test "$hardcode_direct" != yes &&
+ test "$hardcode_minus_L" != yes &&
test "$hardcode_shlibpath_var" = yes; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
esac
fi
fi
fi
- if test "$linkmode" = prog || test "$mode" = relink; then
+ if test "$linkmode" = prog || test "$opt_mode" = relink; then
add_shlibpath=
add_dir=
add=
# Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
add="$libdir/$linklib"
elif test "$hardcode_minus_L" = yes; then
add_dir="-L$libdir"
@@ -2862,15 +6957,15 @@ EOF
elif test "$hardcode_shlibpath_var" = yes; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
esac
add="-l$name"
elif test "$hardcode_automatic" = yes; then
if test -n "$inst_prefix_dir" &&
test -f "$inst_prefix_dir$libdir/$linklib" ; then
- add="$inst_prefix_dir$libdir/$linklib"
+ add="$inst_prefix_dir$libdir/$linklib"
else
- add="$libdir/$linklib"
+ add="$libdir/$linklib"
fi
else
# We cannot seem to hardcode it, guess we'll fake it.
@@ -2879,7 +6974,7 @@ EOF
if test -n "$inst_prefix_dir"; then
case $libdir in
[\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ func_append add_dir " -L$inst_prefix_dir$libdir"
;;
esac
fi
@@ -2914,21 +7009,21 @@ EOF
# Just print a warning and add the library to dependency_libs so
# that the program can be linked against the static library.
- $echo
- $echo "*** Warning: This system can not link to static lib archive $lib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have."
+ echo
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
if test "$module" = yes; then
- $echo "*** But as you try to build a module library, libtool will still create "
- $echo "*** a static module, that should work as long as the dlopening application"
- $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
if test -z "$global_symbol_pipe"; then
- $echo
- $echo "*** However, this would only work if libtool was able to extract symbol"
- $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $echo "*** not find such a program. So, this module is probably useless."
- $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** \`nm' from GNU binutils and a full rebuild may help."
fi
if test "$build_old_libs" = no; then
build_libtool_libs=module
@@ -2952,126 +7047,113 @@ EOF
temp_deplibs=
for libdir in $dependency_libs; do
case $libdir in
- -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
case " $xrpath " in
*" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
+ *) func_append xrpath " $temp_xrpath";;
esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
+ *) func_append temp_deplibs " $libdir";;
esac
done
dependency_libs="$temp_deplibs"
fi
- newlib_search_path="$newlib_search_path $absdir"
+ func_append newlib_search_path " $absdir"
# Link against this library
test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
# ... and its dependency_libs
tmp_libs=
for deplib in $dependency_libs; do
newdependency_libs="$deplib $newdependency_libs"
- if test "X$duplicate_deps" = "Xyes" ; then
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps ; then
case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
esac
fi
- tmp_libs="$tmp_libs $deplib"
+ func_append tmp_libs " $func_resolve_sysroot_result"
done
if test "$link_all_deplibs" != no; then
# Add the search paths of all dependency libraries
for deplib in $dependency_libs; do
+ path=
case $deplib in
-L*) path="$deplib" ;;
*.la)
- dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$deplib" && dir="."
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
*)
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ func_warning "cannot determine absolute directory name of \`$dir'"
absdir="$dir"
fi
;;
esac
- if grep "^installed=no" $deplib > /dev/null; then
- path="$absdir/$objdir"
- else
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- if test "$absdir" != "$libdir"; then
- $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
- fi
- path="$absdir"
- fi
- depdepl=
+ if $GREP "^installed=no" $deplib > /dev/null; then
case $host in
*-*-darwin*)
- # we do not want to link against static libs,
- # but need to link against shared
+ depdepl=
eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
- eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
if test -n "$deplibrary_names" ; then
for tmp in $deplibrary_names ; do
depdepl=$tmp
done
- if test -f "$deplibdir/$depdepl" ; then
- depdepl="$deplibdir/$depdepl"
- elif test -f "$path/$depdepl" ; then
- depdepl="$path/$depdepl"
- else
- # Can't find it, oh well...
- depdepl=
+ if test -f "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
fi
- # do not add paths which are already there
- case " $newlib_search_path " in
- *" $path "*) ;;
- *) newlib_search_path="$newlib_search_path $path";;
- esac
fi
- path=""
;;
*)
- path="-L$path"
+ path="-L$absdir/$objdir"
;;
esac
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
+ path="-L$absdir"
+ fi
;;
- -l*)
- case $host in
- *-*-darwin*)
- # Again, we only want to link against shared libraries
- eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
- for tmp in $newlib_search_path ; do
- if test -f "$tmp/lib$tmp_libs.dylib" ; then
- eval depdepl="$tmp/lib$tmp_libs.dylib"
- break
- fi
- done
- path=""
- ;;
- *) continue ;;
- esac
- ;;
- *) continue ;;
esac
case " $deplibs " in
*" $path "*) ;;
*) deplibs="$path $deplibs" ;;
esac
- case " $deplibs " in
- *" $depdepl "*) ;;
- *) deplibs="$depdepl $deplibs" ;;
- esac
done
fi # link_all_deplibs != no
fi # linkmode = lib
done # for deplib in $libs
+ if test "$pass" = link; then
+ if test "$linkmode" = "prog"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
dependency_libs="$newdependency_libs"
if test "$pass" = dlpreopen; then
# Link the dlpreopened libraries before other libraries
@@ -3086,7 +7168,7 @@ EOF
for dir in $newlib_search_path; do
case "$lib_search_path " in
*" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
+ *) func_append lib_search_path " $dir" ;;
esac
done
newlib_search_path=
@@ -3144,10 +7226,10 @@ EOF
-L*)
case " $tmp_libs " in
*" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
+ *) func_append tmp_libs " $deplib" ;;
esac
;;
- *) tmp_libs="$tmp_libs $deplib" ;;
+ *) func_append tmp_libs " $deplib" ;;
esac
done
eval $var=\"$tmp_libs\"
@@ -3163,99 +7245,96 @@ EOF
;;
esac
if test -n "$i" ; then
- tmp_libs="$tmp_libs $i"
+ func_append tmp_libs " $i"
fi
done
dependency_libs=$tmp_libs
done # for pass
if test "$linkmode" = prog; then
dlfiles="$newdlfiles"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
dlprefiles="$newdlprefiles"
fi
case $linkmode in
oldlib)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for archives"
+ fi
+
case " $deplibs" in
*\ -l* | *\ -L*)
- $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;;
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
esac
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
- fi
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
# Now set the variables for building old libraries.
build_libtool_libs=no
oldlibs="$output"
- objs="$objs$old_deplibs"
+ func_append objs "$old_deplibs"
;;
lib)
# Make sure we only generate libraries of the form `libNAME.la'.
case $outputname in
lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
eval shared_ext=\"$shrext_cmds\"
eval libname=\"$libname_spec\"
;;
*)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
if test "$need_lib_prefix" != no; then
# Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
eval shared_ext=\"$shrext_cmds\"
eval libname=\"$libname_spec\"
else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
fi
;;
esac
if test -n "$objs"; then
if test "$deplibs_check_method" != pass_all; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
- exit $EXIT_FAILURE
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
else
- $echo
- $echo "*** Warning: Linking the shared library $output against the non-libtool"
- $echo "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
fi
fi
- if test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
- fi
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
set dummy $rpath
- if test "$#" -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
oldlibs=
if test -z "$rpath"; then
@@ -3269,25 +7348,21 @@ EOF
build_old_libs=yes
fi
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
else
# Parse the version information argument.
save_ifs="$IFS"; IFS=':'
set dummy $vinfo 0 0 0
+ shift
IFS="$save_ifs"
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
# convert absolute version numbers to libtool ages
# this retains compatibility with .la files and attempts
@@ -3295,9 +7370,9 @@ EOF
case $vinfo_number in
yes)
- number_major="$2"
- number_minor="$3"
- number_revision="$4"
+ number_major="$1"
+ number_minor="$2"
+ number_revision="$3"
#
# There are really only two kinds -- those that
# use the current revision as the major version
@@ -3306,18 +7381,21 @@ EOF
# which has an extra 1 added just for fun
#
case $version_type in
+ # correct linux to gnu/linux during the next big refactor
darwin|linux|osf|windows|none)
- current=`expr $number_major + $number_minor`
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
age="$number_minor"
revision="$number_revision"
;;
- freebsd-aout|freebsd-elf|sunos)
+ freebsd-aout|freebsd-elf|qnx|sunos)
current="$number_major"
revision="$number_minor"
age="0"
;;
irix|nonstopux)
- current=`expr $number_major + $number_minor`
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
age="$number_minor"
revision="$number_minor"
lt_irix_increment=no
@@ -3325,9 +7403,9 @@ EOF
esac
;;
no)
- current="$2"
- revision="$3"
- age="$4"
+ current="$1"
+ revision="$2"
+ age="$3"
;;
esac
@@ -3335,34 +7413,30 @@ EOF
case $current in
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
;;
esac
case $revision in
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
;;
esac
case $age in
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
- $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
;;
esac
if test "$age" -gt "$current"; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit $EXIT_FAILURE
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
fi
# Calculate the version variables.
@@ -3375,10 +7449,12 @@ EOF
darwin)
# Like Linux, but with the current version available in
# verstring for coding it into the library header
- major=.`expr $current - $age`
+ func_arith $current - $age
+ major=.$func_arith_result
versuffix="$major.$age.$revision"
# Darwin ld doesn't like 0 for these options...
- minor_current=`expr $current + 1`
+ func_arith $current + 1
+ minor_current=$func_arith_result
xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
;;
@@ -3390,15 +7466,17 @@ EOF
freebsd-elf)
major=".$current"
- versuffix=".$current";
+ versuffix=".$current"
;;
irix | nonstopux)
if test "X$lt_irix_increment" = "Xno"; then
- major=`expr $current - $age`
+ func_arith $current - $age
else
- major=`expr $current - $age + 1`
+ func_arith $current - $age + 1
fi
+ major=$func_arith_result
+
case $version_type in
nonstopux) verstring_prefix=nonstopux ;;
*) verstring_prefix=sgi ;;
@@ -3408,8 +7486,10 @@ EOF
# Add in all the interfaces that we are compatible with.
loop=$revision
while test "$loop" -ne 0; do
- iface=`expr $revision - $loop`
- loop=`expr $loop - 1`
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
verstring="$verstring_prefix$major.$iface:$verstring"
done
@@ -3418,26 +7498,35 @@ EOF
versuffix="$major.$revision"
;;
- linux)
- major=.`expr $current - $age`
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
versuffix="$major.$age.$revision"
;;
osf)
- major=.`expr $current - $age`
+ func_arith $current - $age
+ major=.$func_arith_result
versuffix=".$current.$age.$revision"
verstring="$current.$age.$revision"
# Add in all the interfaces that we are compatible with.
loop=$age
while test "$loop" -ne 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
verstring="$verstring:${iface}.0"
done
# Make executables depend on our current version.
- verstring="$verstring:${current}.0"
+ func_append verstring ":${current}.0"
+ ;;
+
+ qnx)
+ major=".$current"
+ versuffix=".$current"
;;
sunos)
@@ -3448,14 +7537,13 @@ EOF
windows)
# Use '-' rather than '.', since we only want one
# extension on DOS 8.3 filesystems.
- major=`expr $current - $age`
+ func_arith $current - $age
+ major=$func_arith_result
versuffix="-$major"
;;
*)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit $EXIT_FAILURE
+ func_fatal_configuration "unknown library version type \`$version_type'"
;;
esac
@@ -3489,7 +7577,7 @@ EOF
# Check to see if the archive will have undefined symbols.
if test "$allow_undefined" = yes; then
if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ func_warning "undefined symbols not allowed in $host shared libraries"
build_libtool_libs=no
build_old_libs=yes
fi
@@ -3497,58 +7585,62 @@ EOF
# Don't allow undefined symbols.
allow_undefined_flag="$no_undefined_flag"
fi
+
fi
- if test "$mode" != relink; then
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ func_append libobjs " $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+ if test "$opt_mode" != relink; then
# Remove our outputs, but don't remove object files since they
# may have been created when compiling PIC objects.
removelist=
- tempremovelist=`$echo "$output_objdir/*"`
+ tempremovelist=`$ECHO "$output_objdir/*"`
for p in $tempremovelist; do
case $p in
- *.$objext)
+ *.$objext | *.gcno)
;;
$output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
if test "X$precious_files_regex" != "X"; then
- if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
- then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
continue
fi
fi
- removelist="$removelist $p"
+ func_append removelist " $p"
;;
*) ;;
esac
done
- if test -n "$removelist"; then
- $show "${rm}r $removelist"
- $run ${rm}r $removelist
- fi
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
fi
# Now set the variables for building old libraries.
if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
+ func_append oldlibs " $output_objdir/$libname.$libext"
# Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
fi
# Eliminate all temporary directories.
#for path in $notinst_path; do
- # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
- # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
- # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
#done
if test -n "$xrpath"; then
# If the user specified any rpath flags, then add them.
temp_xrpath=
for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
+ *) func_append finalize_rpath " $libdir" ;;
esac
done
if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -3562,7 +7654,7 @@ EOF
for lib in $old_dlfiles; do
case " $dlprefiles $dlfiles " in
*" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
+ *) func_append dlfiles " $lib" ;;
esac
done
@@ -3572,19 +7664,19 @@ EOF
for lib in $old_dlprefiles; do
case "$dlprefiles " in
*" $lib "*) ;;
- *) dlprefiles="$dlprefiles $lib" ;;
+ *) func_append dlprefiles " $lib" ;;
esac
done
if test "$build_libtool_libs" = yes; then
if test -n "$rpath"; then
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
# these systems don't actually have a c library (as such)!
;;
*-*-rhapsody* | *-*-darwin1.[012])
# Rhapsody C library is in the System framework
- deplibs="$deplibs -framework System"
+ func_append deplibs " System.ltframework"
;;
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
@@ -3598,10 +7690,10 @@ EOF
*-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
# Compiler inserts libc in the correct place for threads to work
;;
- *)
+ *)
# Add libc to deplibs on all other systems if necessary.
if test "$build_libtool_need_lc" = "yes"; then
- deplibs="$deplibs -lc"
+ func_append deplibs " -lc"
fi
;;
esac
@@ -3635,120 +7727,139 @@ EOF
# limits. Maybe even breaks it. We compile a program, linking it
# against the deplibs as a proxy for the library. Then we can check
# whether they linked in statically or dynamically with ldd.
- $rm conftest.c
+ $opt_dry_run || $RM conftest.c
cat > conftest.c <<EOF
int main() { return 0; }
EOF
- $rm conftest
+ $opt_dry_run || $RM conftest
if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
ldd_output=`ldd conftest`
for i in $deplibs; do
- name=`expr $i : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $i "*)
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
i=""
;;
esac
- fi
+ fi
if test -n "$i" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
else
droppeddeps=yes
- $echo
- $echo "*** Warning: dynamic linker does not accept needed library $i."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which I believe you do not have"
- $echo "*** because a test_compile did reveal that the linker did not use it for"
- $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
fi
fi
- else
- newdeplibs="$newdeplibs $i"
- fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
done
else
# Error occurred in the first compile. Let's try to salvage
# the situation: Compile a separate program for each library.
for i in $deplibs; do
- name=`expr $i : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
- $rm conftest
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
ldd_output=`ldd conftest`
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $i "*)
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
i=""
;;
esac
fi
if test -n "$i" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
else
droppeddeps=yes
- $echo
- $echo "*** Warning: dynamic linker does not accept needed library $i."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because a test_compile did reveal that the linker did not use this one"
- $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
fi
fi
else
droppeddeps=yes
- $echo
- $echo "*** Warning! Library $i is needed by this library but I was not able to"
- $echo "*** make it link in! You will probably need to install it or some"
- $echo "*** library that it depends on before this library will be fully"
- $echo "*** functional. Installing it before continuing would be even better."
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
fi
- else
- newdeplibs="$newdeplibs $i"
- fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
done
fi
;;
file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
for a_deplib in $deplibs; do
- name=`expr $a_deplib : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" && test "$name" != "0"; then
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
a_deplib=""
;;
esac
fi
if test -n "$a_deplib" ; then
- libname=`eval \\$echo \"$libname_spec\"`
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ if test "$want_nocaseglob" = yes; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
for potent_lib in $potential_libs; do
# Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
continue
fi
# The statement above tries to avoid entering an
@@ -3761,13 +7872,13 @@ EOF
potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
case $potliblink in
[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
esac
done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | ${SED} 10q \
- | $EGREP "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
a_deplib=""
break 2
fi
@@ -3776,50 +7887,52 @@ EOF
fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- $echo
- $echo "*** Warning: linker path does not have real file for library $a_deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because I did check the linker path looking for a file starting"
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
if test -z "$potlib" ; then
- $echo "*** with $libname but no candidates were found. (...for file magic test)"
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
else
- $echo "*** with $libname and none of the candidates passed a file format test"
- $echo "*** using a file magic. Last file checked: $potlib"
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
fi
fi
- else
+ ;;
+ *)
# Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
done # Gone through all deplibs.
;;
match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
for a_deplib in $deplibs; do
- name=`expr $a_deplib : '-l\(.*\)'`
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
a_deplib=""
;;
esac
fi
if test -n "$a_deplib" ; then
- libname=`eval \\$echo \"$libname_spec\"`
+ libname=`eval "\\$ECHO \"$libname_spec\""`
for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
for potent_lib in $potential_libs; do
potlib="$potent_lib" # see symlink-check above in file_magic test
- if eval $echo \"$potent_lib\" 2>/dev/null \
- | ${SED} 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
a_deplib=""
break 2
fi
@@ -3828,46 +7941,48 @@ EOF
fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- $echo
- $echo "*** Warning: linker path does not have real file for library $a_deplib."
- $echo "*** I have the capability to make that library automatically link in when"
- $echo "*** you link to this library. But I can only do this if you have a"
- $echo "*** shared version of the library, which you do not appear to have"
- $echo "*** because I did check the linker path looking for a file starting"
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
if test -z "$potlib" ; then
- $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
else
- $echo "*** with $libname and none of the candidates passed a file format test"
- $echo "*** using a regex pattern. Last file checked: $potlib"
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
fi
fi
- else
+ ;;
+ *)
# Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
done # Gone through all deplibs.
;;
none | unknown | *)
newdeplibs=""
- tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g'`
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
for i in $predeps $postdeps ; do
# can't use Xsed below, because $i might contain '/'
- tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
done
fi
- if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
- | grep . >/dev/null; then
- $echo
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
if test "X$deplibs_check_method" = "Xnone"; then
- $echo "*** Warning: inter-library dependencies are not supported in this platform."
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
else
- $echo "*** Warning: inter-library dependencies are not known to be supported."
+ echo "*** Warning: inter-library dependencies are not known to be supported."
fi
- $echo "*** All declared inter-library dependencies are being dropped."
+ echo "*** All declared inter-library dependencies are being dropped."
droppeddeps=yes
- fi
+ ;;
+ esac
;;
esac
versuffix=$versuffix_save
@@ -3878,24 +7993,24 @@ EOF
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
;;
esac
if test "$droppeddeps" = yes; then
if test "$module" = yes; then
- $echo
- $echo "*** Warning: libtool could not satisfy all declared inter-library"
- $echo "*** dependencies of module $libname. Therefore, libtool will create"
- $echo "*** a static module, that should work as long as the dlopening"
- $echo "*** application is linked with the -dlopen flag."
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
if test -z "$global_symbol_pipe"; then
- $echo
- $echo "*** However, this would only work if libtool was able to extract symbol"
- $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- $echo "*** not find such a program. So, this module is probably useless."
- $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** \`nm' from GNU binutils and a full rebuild may help."
fi
if test "$build_old_libs" = no; then
oldlibs="$output_objdir/$libname.$libext"
@@ -3905,16 +8020,16 @@ EOF
build_libtool_libs=no
fi
else
- $echo "*** The inter-library dependencies that have been dropped here will be"
- $echo "*** automatically added whenever a program is linked with this library"
- $echo "*** or is declared to -dlopen it."
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
if test "$allow_undefined" = no; then
- $echo
- $echo "*** Since this library must not contain undefined symbols,"
- $echo "*** because either the platform does not support them or"
- $echo "*** it was explicitly requested with -no-undefined,"
- $echo "*** libtool will only create a static version of it."
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
if test "$build_old_libs" = no; then
oldlibs="$output_objdir/$libname.$libext"
build_libtool_libs=module
@@ -3928,7 +8043,14 @@ EOF
# Done checking deplibs!
deplibs=$newdeplibs
fi
-
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
@@ -3939,7 +8061,7 @@ EOF
*)
case " $deplibs " in
*" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
+ func_append new_libs " -L$path/$objdir" ;;
esac
;;
esac
@@ -3949,15 +8071,14 @@ EOF
-L*)
case " $new_libs " in
*" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
done
deplibs="$new_libs"
-
# All the library-specific variables (install_libdir is set above).
library_names=
old_library=
@@ -3965,15 +8086,22 @@ EOF
# Test again, we may have decided not to build it any more
if test "$build_libtool_libs" = yes; then
+ # Remove ${wl} instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
if test "$hardcode_into_libs" = yes; then
# Hardcode the library paths
hardcode_libdirs=
dep_rpath=
rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
+ test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
for libdir in $rpath; do
if test -n "$hardcode_libdir_flag_spec"; then
if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
if test -z "$hardcode_libdirs"; then
hardcode_libdirs="$libdir"
else
@@ -3982,18 +8110,18 @@ EOF
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
+ func_append dep_rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
+ *) func_append perm_rpath " $libdir" ;;
esac
fi
done
@@ -4001,20 +8129,13 @@ EOF
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
- case $archive_cmds in
- *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
- *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
- esac
- else
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
fi
if test -n "$runpath_var" && test -n "$perm_rpath"; then
# We should set the runpath_var.
rpath=
for dir in $perm_rpath; do
- rpath="$rpath$dir:"
+ func_append rpath "$dir:"
done
eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
fi
@@ -4022,7 +8143,7 @@ EOF
fi
shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
if test -n "$shlibpath"; then
eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
fi
@@ -4031,8 +8152,9 @@ EOF
eval shared_ext=\"$shrext_cmds\"
eval library_names=\"$library_names_spec\"
set dummy $library_names
- realname="$2"
- shift; shift
+ shift
+ realname="$1"
+ shift
if test -n "$soname_spec"; then
eval soname=\"$soname_spec\"
@@ -4047,83 +8169,166 @@ EOF
linknames=
for link
do
- linknames="$linknames $link"
+ func_append linknames " $link"
done
# Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
+ func_verbose "generating symbol list for \`$libname.la'"
export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
+ $opt_dry_run || $RM $export_symbols
cmds=$export_symbols_cmds
save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
+ for cmd1 in $cmds; do
IFS="$save_ifs"
- eval cmd=\"$cmd\"
- if len=`expr "X$cmd" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- $show "$cmd"
- $run eval "$cmd" || exit $?
- skipped_export=false
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test "$try_normal_branch" = yes \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=${output_objdir}/${output_la}.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
else
- # The command line is too long to execute in one step.
- $show "using reloadable object file for export list..."
- skipped_export=:
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
# Break out early, otherwise skipped_export may be
# set to false by a later but shorter cmd.
break
fi
done
IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
fi
fi
fi
if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
fi
tmp_deplibs=
for test_deplib in $deplibs; do
- case " $convenience " in
- *" $test_deplib "*) ;;
- *)
- tmp_deplibs="$tmp_deplibs $test_deplib"
- ;;
- esac
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
done
deplibs="$tmp_deplibs"
if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
if test -n "$whole_archive_flag_spec"; then
save_libobjs=$libobjs
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
else
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $convenience
- libobjs="$libobjs $func_extract_archives_result"
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
fi
fi
-
+
if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
eval flag=\"$thread_safe_flag_spec\"
- linker_flags="$linker_flags $flag"
+ func_append linker_flags " $flag"
fi
# Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ if test "$opt_mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
fi
# Do each of the archive commands.
@@ -4136,22 +8341,24 @@ EOF
cmds=$module_cmds
fi
else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval test_cmds=\"$archive_expsym_cmds\"
- cmds=$archive_expsym_cmds
- else
- eval test_cmds=\"$archive_cmds\"
- cmds=$archive_cmds
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
fi
fi
if test "X$skipped_export" != "X:" &&
- len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
:
else
- # The command line is too long to link in one step, link piecewise.
- $echo "creating reloadable object files..."
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
# Save the value of $output and $libobjs because we want to
# use them later. If we have whole_archive_flag_spec, we
@@ -4165,77 +8372,171 @@ EOF
save_libobjs=$libobjs
fi
save_output=$output
- output_la=`$echo "X$output" | $Xsed -e "$basename"`
+ func_basename "$output"
+ output_la=$func_basename_result
# Clear the reloadable object creation command queue and
# initialize k to one.
test_cmds=
concat_cmds=
objlist=
- delfiles=
last_robj=
k=1
- output=$output_objdir/$output_la-${k}.$objext
- # Loop over the list of objects to be linked.
- for obj in $save_libobjs
- do
- eval test_cmds=\"$reload_cmds $objlist $last_robj\"
- if test "X$objlist" = X ||
- { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
- test "$len" -le "$max_cmd_len"; }; then
- objlist="$objlist $obj"
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test "X$objlist" = X ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
else
- # The command $test_cmds is almost too long, add a
- # command to the queue.
- if test "$k" -eq 1 ; then
- # The first file doesn't have a previous command to add.
- eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
fi
- last_robj=$output_objdir/$output_la-${k}.$objext
- k=`expr $k + 1`
- output=$output_objdir/$output_la-${k}.$objext
- objlist=$obj
- len=1
fi
- done
- # Handle the remaining objects by creating one last
- # reloadable object file. All subsequent reloadable object
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
- if ${skipped_export-false}; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- libobjs=$output
- # Append the command to create the export file.
- eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
- fi
- # Set up a command to remove the reloadable object files
- # after they are used.
- i=0
- while test "$i" -lt "$k"
- do
- i=`expr $i + 1`
- delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
- done
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
- $echo "creating a temporary reloadable object file: $output"
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$opt_mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
- # Loop through the commands generated above and execute them.
- save_ifs="$IFS"; IFS='~'
- for cmd in $concat_cmds; do
+ exit $lt_exit
+ }
+ done
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
libobjs=$output
# Restore the value of output.
@@ -4243,6 +8544,7 @@ EOF
if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
fi
# Expand the library linking commands again to reset the
# value of $libobjs for piecewise linking.
@@ -4255,28 +8557,45 @@ EOF
cmds=$module_cmds
fi
else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- cmds=$archive_expsym_cmds
- else
- cmds=$archive_cmds
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
fi
fi
+ fi
- # Append the command to remove the reloadable object files
- # to the just-reset $cmds.
- eval cmds=\"\$cmds~\$rm $delfiles\"
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || {
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
lt_exit=$?
# Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
+ if test "$opt_mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
fi
exit $lt_exit
@@ -4285,13 +8604,12 @@ EOF
IFS="$save_ifs"
# Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ if test "$opt_mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
if test -n "$convenience"; then
if test -z "$whole_archive_flag_spec"; then
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
+ func_show_eval '${RM}r "$gentop"'
fi
fi
@@ -4301,8 +8619,7 @@ EOF
# Create links to the real library.
for linkname in $linknames; do
if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
fi
done
@@ -4315,39 +8632,35 @@ EOF
;;
obj)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for objects"
+ fi
+
case " $deplibs" in
*\ -l* | *\ -L*)
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;;
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
esac
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
- fi
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
case $output in
*.lo)
- if test -n "$objs$old_deplibs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit $EXIT_FAILURE
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
;;
*)
libobj=
@@ -4356,7 +8669,7 @@ EOF
esac
# Delete the old objects.
- $run $rm $obj $libobj
+ $opt_dry_run || $RM $obj $libobj
# Objects from convenience libraries. This assumes
# single-version convenience libraries. Whenever we create
@@ -4372,35 +8685,29 @@ EOF
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
- reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
else
gentop="$output_objdir/${obj}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $convenience
reload_conv_objs="$reload_objs $func_extract_archives_result"
fi
fi
+ # If we're not building shared, we need to use non_pic_objs
+ test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
# Create the old-style object.
- reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+ reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
output="$obj"
- cmds=$reload_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_execute_cmds "$reload_cmds" 'exit $?'
# Exit if we aren't doing a library object file.
if test -z "$libobj"; then
if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
+ func_show_eval '${RM}r "$gentop"'
fi
exit $EXIT_SUCCESS
@@ -4408,14 +8715,13 @@ EOF
if test "$build_libtool_libs" != yes; then
if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
+ func_show_eval '${RM}r "$gentop"'
fi
# Create an invalid libtool object if no PIC, so that we don't
# accidentally link it into a program.
# $show "echo timestamp > $libobj"
- # $run eval "echo timestamp > $libobj" || exit $?
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
exit $EXIT_SUCCESS
fi
@@ -4423,20 +8729,11 @@ EOF
# Only do commands if we really have different PIC objects.
reload_objs="$libobjs $reload_conv_objs"
output="$libobj"
- cmds=$reload_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_execute_cmds "$reload_cmds" 'exit $?'
fi
if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
+ func_show_eval '${RM}r "$gentop"'
fi
exit $EXIT_SUCCESS
@@ -4444,39 +8741,45 @@ EOF
prog)
case $host in
- *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
esac
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
- if test "$preload" = yes; then
- if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
# On Rhapsody replace the C library is the System framework
- compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
;;
esac
case $host in
- *darwin*)
- # Don't allow lazy linking, it breaks C++ global constructors
- if test "$tagname" = CXX ; then
- compile_command="$compile_command ${wl}-bind_at_load"
- finalize_command="$finalize_command ${wl}-bind_at_load"
- fi
- ;;
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " ${wl}-bind_at_load"
+ func_append finalize_command " ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
esac
@@ -4489,7 +8792,7 @@ EOF
*)
case " $compile_deplibs " in
*" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
+ func_append new_libs " -L$path/$objdir" ;;
esac
;;
esac
@@ -4499,17 +8802,17 @@ EOF
-L*)
case " $new_libs " in
*" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
done
compile_deplibs="$new_libs"
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
if test -n "$rpath$xrpath"; then
# If the user specified any rpath flags, then add them.
@@ -4517,7 +8820,7 @@ EOF
# This is the magic to use -rpath.
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
+ *) func_append finalize_rpath " $libdir" ;;
esac
done
fi
@@ -4536,30 +8839,32 @@ EOF
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
+ func_append rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
+ *) func_append perm_rpath " $libdir" ;;
esac
fi
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$libdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
esac
case :$dllsearchpath: in
*":$testbindir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
esac
;;
esac
@@ -4585,18 +8890,18 @@ EOF
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
+ func_append rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$finalize_perm_rpath " in
*" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
esac
fi
done
@@ -4610,284 +8915,57 @@ EOF
if test -n "$libobjs" && test "$build_old_libs" = yes; then
# Transform all the library objects into standard objects.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
fi
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
- fi
-
- if test -n "$dlsyms"; then
- case $dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$outputname.exp"
- $run $rm $export_symbols
- $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- case $host in
- *cygwin* | *mingw* )
- $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- else
- $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
- $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- case $host in
- *cygwin* | *mingw* )
- $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
- $run eval '$echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" |
- if sort -k 3 </dev/null >/dev/null 2>&1; then
- sort -k 3
- else
- sort +2
- fi |
- uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- $echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-"
-
- case $host in
- *cygwin* | *mingw* )
- $echo >> "$output_objdir/$dlsyms" "\
-/* DATA imports from DLLs on WIN32 can't be const, because
- runtime relocations are performed -- see ld's documentation
- on pseudo-relocs */
-struct {
-"
- ;;
- * )
- $echo >> "$output_objdir/$dlsyms" "\
-const struct {
-"
- ;;
- esac
-
-
- $echo >> "$output_objdir/$dlsyms" "\
- const char *name;
- lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
- # Transform the symbol file into the correct name.
- case $host in
- *cygwin* | *mingw* )
- if test -f "$output_objdir/${outputname}.def" ; then
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
- else
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- fi
- ;;
- * )
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
- ;;
- esac
- ;;
- *-*-freebsd*)
- # FreeBSD doesn't need this...
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
fi
- if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=yes
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=no
+ ;;
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
# Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
link_command="$compile_command$compile_rpath"
# We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- exit_status=$?
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
# Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
fi
exit $exit_status
fi
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
if test -n "$compile_shlibpath$finalize_shlibpath"; then
compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
fi
@@ -4902,7 +8980,7 @@ static const void *lt_preloaded_setup() {
# We should set the runpath_var.
rpath=
for dir in $perm_rpath; do
- rpath="$rpath$dir:"
+ func_append rpath "$dir:"
done
compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
fi
@@ -4910,7 +8988,7 @@ static const void *lt_preloaded_setup() {
# We should set the runpath_var.
rpath=
for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
+ func_append rpath "$dir:"
done
finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
fi
@@ -4920,12 +8998,18 @@ static const void *lt_preloaded_setup() {
# We don't need to create a wrapper script.
link_command="$compile_var$compile_command$compile_rpath"
# Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
# Delete the old output file.
- $run $rm $output
+ $opt_dry_run || $RM $output
# Link the executable and exit
- $show "$link_command"
- $run eval "$link_command" || exit $?
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
exit $EXIT_SUCCESS
fi
@@ -4934,13 +9018,13 @@ static const void *lt_preloaded_setup() {
link_command="$compile_var$compile_command$compile_rpath"
relink_command="$finalize_var$finalize_command$finalize_rpath"
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
else
if test "$fast_install" != no; then
link_command="$finalize_var$compile_command$finalize_rpath"
if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
else
# fast_install is set to needless
relink_command=
@@ -4952,608 +9036,98 @@ static const void *lt_preloaded_setup() {
fi
# Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
# Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
- $show "$link_command"
- $run eval "$link_command" || exit $?
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
# Now create the wrapper script.
- $show "creating $output"
+ func_verbose "creating $output"
# Quote the relink command for shipping.
if test -n "$relink_command"; then
# Preserve any variables that may affect compiler behavior
for var in $variables_saved_for_relink; do
if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
fi
done
relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
- fi
-
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
- case $progpath in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
- *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
- esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
fi
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
# win32 will think the script is a binary if it has
# a .exe suffix, so we strip it off here.
case $output in
- *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
esac
# test for cygwin because mv fails w/o .exe extensions
case $host in
*cygwin*)
exeext=.exe
- outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
*) exeext= ;;
esac
case $host in
*cygwin* | *mingw* )
- output_name=`basename $output`
- output_path=`dirname $output`
- cwrappersource="$output_path/$objdir/lt-$output_name.c"
- cwrapper="$output_path/$output_name.exe"
- $rm $cwrappersource $cwrapper
- trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
- cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
- Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
- The $output program cannot be directly executed until all the libtool
- libraries that it depends on are installed.
-
- This wrapper executable should never be moved out of the build directory.
- If it is, it will not operate correctly.
-
- Currently, it simply execs the wrapper *script* "/bin/sh $output",
- but could eventually absorb all of the scripts functionality and
- exec $objdir/$outputname directly.
-*/
-EOF
- cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/stat.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-# define PATH_SEPARATOR ':'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
- defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-# ifndef PATH_SEPARATOR_2
-# define PATH_SEPARATOR_2 ';'
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#ifndef PATH_SEPARATOR_2
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-#else /* PATH_SEPARATOR_2 */
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-#endif /* PATH_SEPARATOR_2 */
-
-#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
- if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-/* -DDEBUG is fairly common in CFLAGS. */
-#undef DEBUG
-#if defined DEBUGWRAPPER
-# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
-#else
-# define DEBUG(format, ...)
-#endif
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-const char * base_name (const char *name);
-char * find_executable(const char *wrapper);
-int check_executable(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
- char **newargz;
- int i;
-
- program_name = (char *) xstrdup (base_name (argv[0]));
- DEBUG("(main) argv[0] : %s\n",argv[0]);
- DEBUG("(main) program_name : %s\n",program_name);
- newargz = XMALLOC(char *, argc+2);
-EOF
-
- cat >> $cwrappersource <<EOF
- newargz[0] = (char *) xstrdup("$SHELL");
-EOF
-
- cat >> $cwrappersource <<"EOF"
- newargz[1] = find_executable(argv[0]);
- if (newargz[1] == NULL)
- lt_fatal("Couldn't find %s", argv[0]);
- DEBUG("(main) found exe at : %s\n",newargz[1]);
- /* we know the script has the same name, without the .exe */
- /* so make sure newargz[1] doesn't end in .exe */
- strendzap(newargz[1],".exe");
- for (i = 1; i < argc; i++)
- newargz[i+1] = xstrdup(argv[i]);
- newargz[argc+1] = NULL;
-
- for (i=0; i<argc+1; i++)
- {
- DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]);
- ;
- }
-
-EOF
-
- case $host_os in
- mingw*)
- cat >> $cwrappersource <<EOF
- execv("$SHELL",(char const **)newargz);
-EOF
- ;;
- *)
- cat >> $cwrappersource <<EOF
- execv("$SHELL",newargz);
-EOF
- ;;
- esac
-
- cat >> $cwrappersource <<"EOF"
- return 127;
-}
-
-void *
-xmalloc (size_t num)
-{
- void * p = (void *) malloc (num);
- if (!p)
- lt_fatal ("Memory exhausted");
-
- return p;
-}
-
-char *
-xstrdup (const char *string)
-{
- return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-;
-}
-
-const char *
-base_name (const char *name)
-{
- const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Skip over the disk name in MSDOS pathnames. */
- if (isalpha ((unsigned char)name[0]) && name[1] == ':')
- name += 2;
-#endif
-
- for (base = name; *name; name++)
- if (IS_DIR_SEPARATOR (*name))
- base = name + 1;
- return base;
-}
-
-int
-check_executable(const char * path)
-{
- struct stat st;
-
- DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
- if ((!path) || (!*path))
- return 0;
-
- if ((stat (path, &st) >= 0) &&
- (
- /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
-#if defined (S_IXOTH)
- ((st.st_mode & S_IXOTH) == S_IXOTH) ||
-#endif
-#if defined (S_IXGRP)
- ((st.st_mode & S_IXGRP) == S_IXGRP) ||
-#endif
- ((st.st_mode & S_IXUSR) == S_IXUSR))
- )
- return 1;
- else
- return 0;
-}
-
-/* Searches for the full path of the wrapper. Returns
- newly allocated full path name if found, NULL otherwise */
-char *
-find_executable (const char* wrapper)
-{
- int has_slash = 0;
- const char* p;
- const char* p_next;
- /* static buffer for getcwd */
- char tmp[LT_PATHMAX + 1];
- int tmp_len;
- char* concat_name;
-
- DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
-
- if ((wrapper == NULL) || (*wrapper == '\0'))
- return NULL;
-
- /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
- {
- concat_name = xstrdup (wrapper);
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
- else
- {
-#endif
- if (IS_DIR_SEPARATOR (wrapper[0]))
- {
- concat_name = xstrdup (wrapper);
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- }
-#endif
-
- for (p = wrapper; *p; p++)
- if (*p == '/')
- {
- has_slash = 1;
- break;
- }
- if (!has_slash)
- {
- /* no slashes; search PATH */
- const char* path = getenv ("PATH");
- if (path != NULL)
- {
- for (p = path; *p; p = p_next)
- {
- const char* q;
- size_t p_len;
- for (q = p; *q; q++)
- if (IS_PATH_SEPARATOR(*q))
- break;
- p_len = q - p;
- p_next = (*q == '\0' ? q : q + 1);
- if (p_len == 0)
- {
- /* empty path: current directory */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen(tmp);
- concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
- }
- else
- {
- concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, p, p_len);
- concat_name[p_len] = '/';
- strcpy (concat_name + p_len + 1, wrapper);
- }
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- }
- }
- /* not found in PATH; assume curdir */
- }
- /* Relative path | not found in path: prepend cwd */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
- tmp_len = strlen(tmp);
- concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
-
- if (check_executable(concat_name))
- return concat_name;
- XFREE(concat_name);
- return NULL;
-}
-
-char *
-strendzap(char *str, const char *pat)
-{
- size_t len, patlen;
-
- assert(str != NULL);
- assert(pat != NULL);
-
- len = strlen(str);
- patlen = strlen(pat);
-
- if (patlen <= len)
- {
- str += len - patlen;
- if (strcmp(str, pat) == 0)
- *str = '\0';
- }
- return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode,
- const char * message, va_list ap)
-{
- fprintf (stderr, "%s: %s: ", program_name, mode);
- vfprintf (stderr, message, ap);
- fprintf (stderr, ".\n");
-
- if (exit_status >= 0)
- exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
- va_end (ap);
-}
-EOF
- # we should really use a build-platform specific compiler
- # here, but OTOH, the wrappers (shell script and this C one)
- # are only useful if you want to execute the "real" binary.
- # Since the "real" binary is built for $host, then this
- # wrapper might as well be built for $host, too.
- $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
- ;;
- esac
- $rm $output
- trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-
- $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
-if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$echo are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
- :
- else
- # Restart under the correct shell, and then maybe \$echo will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $echo >> $output "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
- done
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- $echo >> $output "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
- else
- $rm \"\$progdir/\$file\"
- fi"
-
- $echo >> $output "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- $echo \"\$relink_command_output\" >&2
- $rm \"\$progdir/\$file\"
- exit $EXIT_FAILURE
- fi
- fi
-
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
- fi"
- else
- $echo >> $output "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- $echo >> $output "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $echo >> $output "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
- $echo >> $output "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host" ; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
- *)
- $echo >> $output "\
- exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
+ func_emit_wrapper no > $output
+ chmod +x $output
;;
esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \$*\"
- exit $EXIT_FAILURE
- fi
- else
- # The program doesn't exist.
- \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- $echo \"See the $PACKAGE documentation for more information.\" 1>&2
- exit $EXIT_FAILURE
- fi
-fi\
-"
- chmod +x $output
- fi
+ }
exit $EXIT_SUCCESS
;;
esac
@@ -5562,7 +9136,7 @@ fi\
for oldlib in $oldlibs; do
if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
+ oldobjs="$libobjs_save $symfileobj"
addlibs="$convenience"
build_libtool_libs=no
else
@@ -5571,22 +9145,35 @@ fi\
build_libtool_libs=no
else
oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ func_append oldobjs " $symfileobj"
+ fi
fi
addlibs="$old_convenience"
fi
if test -n "$addlibs"; then
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $addlibs
- oldobjs="$oldobjs $func_extract_archives_result"
+ func_append oldobjs " $func_extract_archives_result"
fi
# Do each command in the archive commands.
if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- cmds=$old_archive_from_new_cmds
+ cmds=$old_archive_from_new_cmds
else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
# POSIX demands no paths to be encoded in archives. We have
# to avoid creating archives with duplicate basenames if we
# might have to extract them afterwards, e.g., when creating a
@@ -5595,32 +9182,22 @@ fi\
# not supported by libtool).
if (for obj in $oldobjs
do
- $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
done | sort | sort -uc >/dev/null 2>&1); then
:
else
- $echo "copying selected object files to avoid basename conflicts..."
-
- if test -z "$gentop"; then
- gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
-
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "$mkdir $gentop"
- $run $mkdir "$gentop"
- exit_status=$?
- if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
- exit $exit_status
- fi
- fi
-
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
save_oldobjs=$oldobjs
oldobjs=
counter=1
for obj in $save_oldobjs
do
- objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ func_basename "$obj"
+ objbase="$func_basename_result"
case " $oldobjs " in
" ") oldobjs=$obj ;;
*[\ /]"$objbase "*)
@@ -5628,58 +9205,74 @@ fi\
# Make sure we don't pick an alternate name that also
# overlaps.
newobj=lt$counter-$objbase
- counter=`expr $counter + 1`
+ func_arith $counter + 1
+ counter=$func_arith_result
case " $oldobjs " in
*[\ /]"$newobj "*) ;;
*) if test ! -f "$gentop/$newobj"; then break; fi ;;
esac
done
- $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- $run ln "$obj" "$gentop/$newobj" ||
- $run cp "$obj" "$gentop/$newobj"
- oldobjs="$oldobjs $gentop/$newobj"
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
;;
- *) oldobjs="$oldobjs $obj" ;;
+ *) func_append oldobjs " $obj" ;;
esac
done
fi
-
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
eval cmds=\"$old_archive_cmds\"
- if len=`expr "X$cmds" : ".*"` &&
- test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
cmds=$old_archive_cmds
else
# the command line is too long to link in one step, link in parts
- $echo "using piecewise archive linking..."
+ func_verbose "using piecewise archive linking..."
save_RANLIB=$RANLIB
RANLIB=:
objlist=
concat_cmds=
save_oldobjs=$oldobjs
-
+ oldobjs=
# Is there a better way of finding the last object in the list?
for obj in $save_oldobjs
do
last_oldobj=$obj
done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
for obj in $save_oldobjs
do
- oldobjs="$objlist $obj"
- objlist="$objlist $obj"
- eval test_cmds=\"$old_archive_cmds\"
- if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
- test "$len" -le "$max_cmd_len"; then
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
:
else
# the above command should be used before it gets too long
oldobjs=$objlist
if test "$obj" = "$last_oldobj" ; then
- RANLIB=$save_RANLIB
+ RANLIB=$save_RANLIB
fi
test -z "$concat_cmds" || concat_cmds=$concat_cmds~
eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
objlist=
+ len=$len0
fi
done
RANLIB=$save_RANLIB
@@ -5691,49 +9284,39 @@ fi\
fi
fi
fi
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- eval cmd=\"$cmd\"
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
+ func_execute_cmds "$cmds" 'exit $?'
done
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
# Now create the libtool archive.
case $output in
*.la)
old_library=
test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
+ func_verbose "creating $output"
# Preserve any variables that may affect compiler behavior
for var in $variables_saved_for_relink; do
if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
fi
done
# Quote the link command for shipping.
relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
if test "$hardcode_automatic" = yes ; then
relink_command=
fi
-
# Only create the output if not a dry run.
- if test -z "$run"; then
+ $opt_dry_run || {
for installed in no yes; do
if test "$installed" = yes; then
if test -z "$install_libdir"; then
@@ -5745,38 +9328,60 @@ fi\
for deplib in $dependency_libs; do
case $deplib in
*.la)
- name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdependency_libs="$newdependency_libs $libdir/$name"
+ func_basename "$deplib"
+ name="$func_basename_result"
+ func_resolve_sysroot "$deplib"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
esac
done
dependency_libs="$newdependency_libs"
newdlfiles=
+
for lib in $dlfiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdlfiles="$newdlfiles $libdir/$name"
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
done
dlfiles="$newdlfiles"
newdlprefiles=
for lib in $dlprefiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit $EXIT_FAILURE
- fi
- newdlprefiles="$newdlprefiles $libdir/$name"
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
done
dlprefiles="$newdlprefiles"
else
@@ -5786,7 +9391,7 @@ fi\
[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
*) abs=`pwd`"/$lib" ;;
esac
- newdlfiles="$newdlfiles $abs"
+ func_append newdlfiles " $abs"
done
dlfiles="$newdlfiles"
newdlprefiles=
@@ -5795,19 +9400,37 @@ fi\
[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
*) abs=`pwd`"/$lib" ;;
esac
- newdlprefiles="$newdlprefiles $abs"
+ func_append newdlprefiles " $abs"
done
dlprefiles="$newdlprefiles"
fi
- $rm $output
+ $RM $output
# place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
tdlname=$dlname
case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test "x$bindir" != x ;
+ then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
esac
- $echo > $output "\
+ $ECHO > $output "\
# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
@@ -5821,9 +9444,15 @@ library_names='$library_names'
# The name of the static archive.
old_library='$old_library'
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
# Libraries that this one depends upon.
dependency_libs='$dependency_libs'
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
# Version information for $libname.
current=$current
age=$age
@@ -5842,748 +9471,29 @@ dlpreopen='$dlprefiles'
# Directory that this library needs to be installed in:
libdir='$install_libdir'"
if test "$installed" = no && test "$need_relink" = yes; then
- $echo >> $output "\
+ $ECHO >> $output "\
relink_command=\"$relink_command\""
fi
done
- fi
+ }
# Do a symbolic link so that the libtool archive can be found in
# LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
;;
esac
exit $EXIT_SUCCESS
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | grep shtool > /dev/null; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg=$nonopt
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest=$arg
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f)
- case " $install_prog " in
- *[\\\ /]cp\ *) ;;
- *) prev=$arg ;;
- esac
- ;;
- -g | -m | -o) prev=$arg ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*)
- ;;
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest=$arg
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test "$#" -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- library_names=
- old_library=
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- # Determine the prefix the user has applied to our future dir.
- inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
- # are installed to the same prefix.
- # At present, this check doesn't affect windows .dll's that
- # are installed into $libdir/../bin (currently, that works fine)
- # but it's something to keep an eye on.
- if test "$inst_prefix_dir" = "$destdir"; then
- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
- exit $EXIT_FAILURE
- fi
-
- if test -n "$inst_prefix_dir"; then
- # Stick the inst_prefix_dir data into the link command.
- relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
- else
- relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
- fi
-
- $echo "$modename: warning: relinking \`$file'" 1>&2
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$srcname $destdir/$realname"
- $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run eval "$striplib $destdir/$realname" || exit $?
- fi
-
- if test "$#" -gt 0; then
- # Delete the old symlinks, and create new ones.
- # Try `ln -sf' first, because the `ln' binary might depend on
- # the symlink we replace! Solaris /bin/ln does not understand -f,
- # so we also need to try rm && ln -s.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
- $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- cmds=$postinstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
- fi
-
- exit $lt_exit
- }
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit $EXIT_SUCCESS
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # If the file is missing, and there is a .exe on the end, strip it
- # because it is most likely a libtool script we actually want to
- # install
- stripped_ext=""
- case $file in
- *.exe)
- if test ! -f "$file"; then
- file=`$echo $file|${SED} 's,.exe$,,'`
- stripped_ext=".exe"
- fi
- ;;
- esac
-
- # Do a test to see if this is really a libtool program.
- case $host in
- *cygwin*|*mingw*)
- wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
- ;;
- *)
- wrapper=$file
- ;;
- esac
- if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
- notinst_deplibs=
- relink_command=
-
- # Note that it is not necessary on cygwin/mingw to append a dot to
- # foo even if both foo and FILE.exe exist: automatic-append-.exe
- # behavior happens only for exec(3), not for open(2)! Also, sourcing
- # `FILE.' does not work on cygwin managed mounts.
- #
- # If there is no directory component, then add one.
- case $wrapper in
- */* | *\\*) . ${wrapper} ;;
- *) . ./${wrapper} ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$notinst_deplibs"; then
- $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
- exit $EXIT_FAILURE
- fi
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- relink_command=
- # Note that it is not necessary on cygwin/mingw to append a dot to
- # foo even if both foo and FILE.exe exist: automatic-append-.exe
- # behavior happens only for exec(3), not for open(2)! Also, sourcing
- # `FILE.' does not work on cygwin managed mounts.
- #
- # If there is no directory component, then add one.
- case $wrapper in
- */* | *\\*) . ${wrapper} ;;
- *) . ./${wrapper} ;;
- esac
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir=`func_mktempdir`
- file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyway
- case $install_prog,$host in
- */usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
- ;;
- esac
- ;;
- esac
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- if test -n "$stripme" && test -n "$old_striplib"; then
- $show "$old_striplib $oldlib"
- $run eval "$old_striplib $oldlib" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- cmds=$old_postinstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
- else
- exit $EXIT_SUCCESS
- fi
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- cmds=$finish_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = : && exit $EXIT_SUCCESS
-
- $echo "X----------------------------------------------------------------------" | $Xsed
- $echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- $echo " $libdir"
- done
- $echo
- $echo "If you ever happen to want to link against installed libraries"
- $echo "in a given directory, LIBDIR, you must either use libtool, and"
- $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
- $echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- $echo " during execution"
- fi
- if test -n "$runpath_var"; then
- $echo " - add LIBDIR to the \`$runpath_var' environment variable"
- $echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- $echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- $echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- $echo
- $echo "See any operating system documentation about shared libraries for"
- $echo "more information, such as the ld(1) and ld.so(8) manual pages."
- $echo "X----------------------------------------------------------------------" | $Xsed
- exit $EXIT_SUCCESS
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit $EXIT_FAILURE
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- if test ! -f "$dir/$dlname"; then
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit $EXIT_FAILURE
- fi
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
+}
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+ func_mode_link ${1+"$@"}
- # Restore saved environment variables
- for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
- do
- eval "if test \"\${save_$lt_var+set}\" = set; then
- $lt_var=\$save_$lt_var; export $lt_var
- fi"
- done
-
- # Now prepare to actually exec the command.
- exec_cmd="\$cmd$args"
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit $EXIT_SUCCESS
- fi
- ;;
- # libtool clean and uninstall mode
- clean | uninstall)
- modename="$modename: $mode"
- rm="$nonopt"
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ RM="$nonopt"
files=
rmforce=
exit_status=0
@@ -6595,44 +9505,41 @@ relink_command=\"$relink_command\""
for arg
do
case $arg in
- -f) rm="$rm $arg"; rmforce=yes ;;
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
+ -f) func_append RM " $arg"; rmforce=yes ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
esac
done
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- fi
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
rmdirs=
- origobjdir="$objdir"
for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$file"; then
- dir=.
- objdir="$origobjdir"
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ odir="$objdir"
else
- objdir="$dir/$origobjdir"
+ odir="$dir/$objdir"
fi
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- test "$mode" = uninstall && objdir="$dir"
+ func_basename "$file"
+ name="$func_basename_result"
+ test "$opt_mode" = uninstall && odir="$dir"
- # Remember objdir for removal later, being careful to avoid duplicates
- if test "$mode" = clean; then
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test "$opt_mode" = clean; then
case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
esac
fi
# Don't error if the file doesn't exist and rm -f was used.
- if (test -L "$file") >/dev/null 2>&1 \
- || (test -h "$file") >/dev/null 2>&1 \
- || test -f "$file"; then
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
:
elif test -d "$file"; then
exit_status=1
@@ -6646,55 +9553,32 @@ relink_command=\"$relink_command\""
case $name in
*.la)
# Possibly a libtool archive, so verify it.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
# Delete the libtool libraries and symlinks.
for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
+ func_append rmfiles " $odir/$n"
done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
- case "$mode" in
+ case "$opt_mode" in
clean)
- case " $library_names " in
- # " " in the beginning catches empty $dlname
+ case " $library_names " in
*" $dlname "*) ;;
- *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
esac
- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
;;
uninstall)
if test -n "$library_names"; then
# Do each command in the postuninstall commands.
- cmds=$postuninstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd"
- if test "$?" -ne 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
fi
if test -n "$old_library"; then
# Do each command in the old_postuninstall commands.
- cmds=$old_postuninstall_cmds
- save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- eval cmd=\"$cmd\"
- $show "$cmd"
- $run eval "$cmd"
- if test "$?" -ne 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
fi
# FIXME: should reinstall the best remaining shared library.
;;
@@ -6704,288 +9588,95 @@ relink_command=\"$relink_command\""
*.lo)
# Possibly a libtool object, so verify it.
- if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if func_lalib_p "$file"; then
# Read the .lo file
- . $dir/$name
+ func_source $dir/$name
# Add PIC object to the list of files to remove.
- if test -n "$pic_object" \
- && test "$pic_object" != none; then
- rmfiles="$rmfiles $dir/$pic_object"
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
+ func_append rmfiles " $dir/$pic_object"
fi
# Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" \
- && test "$non_pic_object" != none; then
- rmfiles="$rmfiles $dir/$non_pic_object"
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
+ func_append rmfiles " $dir/$non_pic_object"
fi
fi
;;
*)
- if test "$mode" = clean ; then
+ if test "$opt_mode" = clean ; then
noexename=$name
case $file in
*.exe)
- file=`$echo $file|${SED} 's,.exe$,,'`
- noexename=`$echo $name|${SED} 's,.exe$,,'`
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
# $file with .exe has already been added to rmfiles,
# add $file without .exe
- rmfiles="$rmfiles $file"
+ func_append rmfiles " $file"
;;
esac
# Do a test to see if this is a libtool program.
- if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- relink_command=
- . $dir/$noexename
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
# note $name still contains .exe if it was in $file originally
# as does the version of $file that was added into $rmfiles
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
+ func_append rmfiles " $odir/lt-$name"
fi
if test "X$noexename" != "X$name" ; then
- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ func_append rmfiles " $odir/lt-${noexename}.c"
fi
fi
fi
;;
esac
- $show "$rm $rmfiles"
- $run $rm $rmfiles || exit_status=1
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
done
- objdir="$origobjdir"
# Try to remove the ${objdir}s in the directories where we deleted files
for dir in $rmdirs; do
if test -d "$dir"; then
- $show "rmdir $dir"
- $run rmdir $dir >/dev/null 2>&1
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
fi
done
exit $exit_status
- ;;
+}
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit $EXIT_FAILURE
- ;;
- esac
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
- if test -z "$exec_cmd"; then
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit $EXIT_FAILURE
- fi
-fi # test -z "$show_help"
+test -z "$opt_mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$opt_mode'"
if test -n "$exec_cmd"; then
- eval exec $exec_cmd
+ eval exec "$exec_cmd"
exit $EXIT_FAILURE
fi
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --tag=TAG use configuration variables from tag TAG
- --version print version information
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <bug-libtool@gnu.org>."
- exit $EXIT_SUCCESS
- ;;
-
-clean)
- $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE Use a list of object files found in FILE to specify objects
- -precious-files-regex REGEX
- don't remove output files matching REGEX
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of uninstalled libtool libraries
- -static-libtool-libs
- do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
+exit $exit_status
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit $EXIT_FAILURE
- ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit $?
# The TAGs below are defined such that we never get into a situation
# in which we disable both kinds of libraries. Given conflicting
@@ -6999,14 +9690,17 @@ exit $?
# configuration. But we'll never go from static-only to shared-only.
# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-disable_libs=shared
+build_libtool_libs=no
+build_old_libs=yes
# ### END LIBTOOL TAG CONFIG: disable-shared
# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-disable_libs=static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
# ### END LIBTOOL TAG CONFIG: disable-static
# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
+# vi:sw=2
+
diff --git a/contrib/bind9/make/Makefile.in b/contrib/bind9/make/Makefile.in
index 29f21994adeb..86c93e708be1 100644
--- a/contrib/bind9/make/Makefile.in
+++ b/contrib/bind9/make/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: Makefile.in,v 1.16 2007/06/19 23:47:24 tbox Exp $
srcdir = @srcdir@
VPATH = @srcdir@
diff --git a/contrib/bind9/make/includes.in b/contrib/bind9/make/includes.in
index 5a5392cde07c..f2f1b3f4515c 100644
--- a/contrib/bind9/make/includes.in
+++ b/contrib/bind9/make/includes.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id$
+# $Id: includes.in,v 1.21 2007/06/19 23:47:24 tbox Exp $
# Search for machine-generated header files in the build tree,
# and for normal headers in the source tree (${top_srcdir}).
diff --git a/contrib/bind9/make/rules.in b/contrib/bind9/make/rules.in
index cd4cf4f79e5e..37bc50d82fec 100644
--- a/contrib/bind9/make/rules.in
+++ b/contrib/bind9/make/rules.in
@@ -193,24 +193,24 @@ MKDEP = ${SHELL} ${top_builddir}/make/mkdep
### See bin/check/Makefile.in for a complete example of the use of LIBS0.
###
FINALBUILDCMD = if [ X"${MKSYMTBL_PROGRAM}" = X -o X"$${MAKE_SYMTABLE:-${ALWAYS_MAKE_SYMTABLE}}" = X ] ; then \
- ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@ $${BASEOBJS} $${LIBS0} ${LIBS}; \
else \
rm -f $@tmp0; \
- ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@tmp0 $${BASEOBJS} $${LIBS0} ${LIBS} || exit 1; \
rm -f $@-symtbl.c $@-symtbl.@O@; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl.c $@tmp0 || exit 1; \
$(MAKE) $@-symtbl.@O@ || exit 1; \
rm -f $@tmp1; \
- ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@tmp1 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS} || exit 1; \
rm -f $@-symtbl.c $@-symtbl.@O@; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl.c $@tmp1 || exit 1; \
$(MAKE) $@-symtbl.@O@ || exit 1; \
- ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} ${LDFLAGS} \
-o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ $${LIBS0} ${NOSYMLIBS}; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl2.c $@tmp2; \
@@ -223,7 +223,7 @@ FINALBUILDCMD = if [ X"${MKSYMTBL_PROGRAM}" = X -o X"$${MAKE_SYMTABLE:-${ALWAYS_
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
-o $@-symtbl.c $@tmp2 || exit 1; \
$(MAKE) $@-symtbl.@O@ || exit 1; \
- ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} \
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${ALL_CFLAGS} \
${LDFLAGS} -o $@tmp2 $${BASEOBJS} $@-symtbl.@O@ \
$${LIBS0} ${NOSYMLIBS}; \
${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
@@ -358,3 +358,12 @@ ALWAYS_MAKE_SYMTABLE = @ALWAYS_MAKE_SYMTABLE@
.docbook.8:
${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+###
+### Python executable
+###
+.SUFFIXES: .py
+.py:
+ cp -f $< $@
+ chmod +x $@
+
diff --git a/contrib/bind9/mkinstalldirs b/contrib/bind9/mkinstalldirs
index d0fd194fd6c7..4992567c9729 100755
--- a/contrib/bind9/mkinstalldirs
+++ b/contrib/bind9/mkinstalldirs
@@ -4,7 +4,7 @@
# Created: 1993-05-16
# Public domain
-# $Id$
+# $Id: mkinstalldirs,v 1.1 2000/09/20 19:05:51 gson Exp $
errstatus=0
diff --git a/contrib/bind9/version b/contrib/bind9/version
index da686fa0a2d0..039f4a123eb6 100644
--- a/contrib/bind9/version
+++ b/contrib/bind9/version
@@ -3,8 +3,10 @@
# This file must follow /bin/sh rules. It is imported directly via
# configure.
#
+PRODUCT=BIND
+DESCRIPTION="(Extended Support Version)"
MAJORVER=9
-MINORVER=8
-PATCHVER=4
+MINORVER=9
+PATCHVER=3
RELEASETYPE=-P
RELEASEVER=2